Merge pull request #15323 from elisseck/dev/core/1266
authorMatthew Wire <mjw@mjwconsult.co.uk>
Sun, 13 Oct 2019 15:51:15 +0000 (16:51 +0100)
committerGitHub <noreply@github.com>
Sun, 13 Oct 2019 15:51:15 +0000 (16:51 +0100)
dev/core/1266 widget header tab next state to pcp tab

460 files changed:
CRM/Admin/Form/Preferences/Mailing.php
CRM/Admin/Form/Setting/Mapping.php
CRM/Admin/Form/Setting/Miscellaneous.php
CRM/Admin/Form/Setting/Smtp.php
CRM/Admin/Form/SettingTrait.php
CRM/Admin/Page/Extensions.php
CRM/Api4/Page/AJAX.php [new file with mode: 0644]
CRM/Api4/Page/Api4Explorer.php [new file with mode: 0644]
CRM/Api4/Services.php [new file with mode: 0644]
CRM/Contact/BAO/Group.php
CRM/Contact/BAO/Query.php
CRM/Contact/BAO/Relationship.php
CRM/Contact/BAO/SavedSearch.php
CRM/Contact/Form/Edit/Address.php
CRM/Contact/Form/Search.php
CRM/Contact/Form/Search/Advanced.php
CRM/Contact/Form/Task/PDFLetterCommon.php
CRM/Contact/Page/View/Relationship.php
CRM/Contact/Page/View/UserDashBoard.php
CRM/Contribute/BAO/Contribution.php
CRM/Contribute/BAO/ContributionRecur.php
CRM/Contribute/BAO/Query.php
CRM/Contribute/DAO/Contribution.php
CRM/Contribute/DAO/ContributionPage.php
CRM/Contribute/Form/AbstractEditPayment.php
CRM/Contribute/Form/AdditionalPayment.php
CRM/Contribute/Form/Contribution/Confirm.php
CRM/Contribute/Form/Contribution/Main.php
CRM/Contribute/Form/ContributionBase.php
CRM/Contribute/Form/ContributionCharts.php
CRM/Contribute/Form/ContributionPage/Settings.php
CRM/Contribute/Form/Search.php
CRM/Contribute/Form/Task/Invoice.php
CRM/Contribute/Form/Task/Status.php
CRM/Contribute/Import/Parser/Contribution.php
CRM/Contribute/Page/Tab.php
CRM/Contribute/Page/UserDashboard.php
CRM/Core/BAO/CustomField.php
CRM/Core/BAO/Dashboard.php
CRM/Core/BAO/File.php
CRM/Core/BAO/FinancialTrxn.php
CRM/Core/BAO/Query.php
CRM/Core/BAO/RecurringEntity.php
CRM/Core/BAO/UFGroup.php
CRM/Core/ClassLoader.php
CRM/Core/Config/MagicMerge.php
CRM/Core/Config/Runtime.php
CRM/Core/DAO/Address.php
CRM/Core/DAO/StatusPreference.php
CRM/Core/Form.php
CRM/Core/Form/Search.php
CRM/Core/I18n.php
CRM/Core/I18n/SchemaStructure.php
CRM/Core/I18n/SchemaStructure_5_20_alpha1.php [new file with mode: 0644]
CRM/Core/IDS.php
CRM/Core/Invoke.php
CRM/Core/PseudoConstant.php
CRM/Core/xml/Menu/Api4.xml [new file with mode: 0644]
CRM/Event/BAO/Event.php
CRM/Event/Cart/Form/Checkout/Payment.php
CRM/Event/Form/ManageEvent/Location.php
CRM/Event/Form/Participant.php
CRM/Event/Form/Registration.php
CRM/Event/Form/Registration/Confirm.php
CRM/Event/Form/Registration/Register.php
CRM/Export/BAO/Export.php
CRM/Export/BAO/ExportProcessor.php
CRM/Extension/Manager.php
CRM/Extension/Mapper.php
CRM/Extension/System.php
CRM/Financial/BAO/FinancialAccount.php
CRM/Financial/DAO/FinancialTrxn.php
CRM/Financial/Form/FinancialAccount.php
CRM/Financial/Form/FinancialTypeAccount.php
CRM/Import/Parser.php
CRM/Logging/Differ.php
CRM/Mailing/BAO/Recipients.php
CRM/Mailing/DAO/Mailing.php
CRM/Member/BAO/Membership.php
CRM/Member/Form/Membership.php
CRM/Member/Form/MembershipRenewal.php
CRM/Member/Page/RecurringContributions.php
CRM/Pledge/BAO/Pledge.php
CRM/Pledge/Form/Pledge.php
CRM/Price/BAO/PriceField.php
CRM/Queue/Queue/Sql.php
CRM/Report/Form.php
CRM/Report/Form/Contact/CurrentEmployer.php
CRM/Report/Form/Contact/Detail.php
CRM/Report/Form/Contribute/Bookkeeping.php
CRM/Report/Form/Contribute/Detail.php
CRM/Report/Form/Contribute/History.php
CRM/Report/Form/Contribute/HouseholdSummary.php
CRM/Report/Form/Contribute/Lybunt.php
CRM/Report/Form/Contribute/OrganizationSummary.php
CRM/Report/Form/Contribute/Recur.php
CRM/Report/Form/Contribute/Repeat.php
CRM/Report/Form/Contribute/SoftCredit.php
CRM/Report/Form/Contribute/Summary.php
CRM/Report/Form/Contribute/Sybunt.php
CRM/Report/Form/Contribute/TopDonor.php
CRM/Report/Form/Event/IncomeCountSummary.php
CRM/Report/Form/Event/ParticipantListing.php
CRM/Report/Form/Event/Summary.php
CRM/Report/Form/Mailing/Bounce.php
CRM/Report/Form/Mailing/Clicks.php
CRM/Report/Form/Mailing/Opened.php
CRM/Report/Form/Mailing/Summary.php
CRM/Report/Form/Member/ContributionDetail.php
CRM/Report/Form/Member/Detail.php
CRM/Report/Form/Member/Summary.php
CRM/Report/Form/Membership/Summary.php
CRM/Upgrade/Form.php
CRM/Upgrade/Incremental/php/FiveNineteen.php
CRM/Upgrade/Incremental/php/FiveTwenty.php [new file with mode: 0644]
CRM/Upgrade/Incremental/sql/5.18.0.mysql.tpl [new file with mode: 0644]
CRM/Upgrade/Incremental/sql/5.19.beta1.mysql.tpl [new file with mode: 0644]
CRM/Upgrade/Incremental/sql/5.20.alpha1.mysql.tpl [new file with mode: 0644]
CRM/Utils/Chart.php [new file with mode: 0644]
CRM/Utils/Check/Component.php
CRM/Utils/DeprecatedUtils.php
CRM/Utils/Hook.php
CRM/Utils/OpenFlashChart.php [deleted file]
CRM/Utils/Type.php
Civi/Angular/Manager.php
Civi/Api4/ACL.php [new file with mode: 0644]
Civi/Api4/Action/Address/AddressSaveTrait.php [new file with mode: 0644]
Civi/Api4/Action/Address/Create.php [new file with mode: 0644]
Civi/Api4/Action/Address/Save.php [new file with mode: 0644]
Civi/Api4/Action/Address/Update.php [new file with mode: 0644]
Civi/Api4/Action/Campaign/Get.php [new file with mode: 0644]
Civi/Api4/Action/Contact/GetChecksum.php [new file with mode: 0644]
Civi/Api4/Action/Contact/GetFields.php [new file with mode: 0644]
Civi/Api4/Action/Contact/ValidateChecksum.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/Create.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/Delete.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/Get.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/GetActions.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/GetFields.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/Replace.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/Save.php [new file with mode: 0644]
Civi/Api4/Action/CustomValue/Update.php [new file with mode: 0644]
Civi/Api4/Action/Domain/Get.php [new file with mode: 0644]
Civi/Api4/Action/Entity/Get.php [new file with mode: 0644]
Civi/Api4/Action/Entity/GetLinks.php [new file with mode: 0644]
Civi/Api4/Action/Event/Get.php [new file with mode: 0644]
Civi/Api4/Action/GetActions.php [new file with mode: 0644]
Civi/Api4/Action/GroupContact/Create.php [new file with mode: 0644]
Civi/Api4/Action/GroupContact/GroupContactSaveTrait.php [new file with mode: 0644]
Civi/Api4/Action/GroupContact/Save.php [new file with mode: 0644]
Civi/Api4/Action/GroupContact/Update.php [new file with mode: 0644]
Civi/Api4/Action/Relationship/Get.php [new file with mode: 0644]
Civi/Api4/Action/Setting/AbstractSettingAction.php [new file with mode: 0644]
Civi/Api4/Action/Setting/Get.php [new file with mode: 0644]
Civi/Api4/Action/Setting/GetFields.php [new file with mode: 0644]
Civi/Api4/Action/Setting/Revert.php [new file with mode: 0644]
Civi/Api4/Action/Setting/Set.php [new file with mode: 0644]
Civi/Api4/Action/System/Check.php [new file with mode: 0644]
Civi/Api4/Action/System/Flush.php [new file with mode: 0644]
Civi/Api4/ActionSchedule.php [new file with mode: 0644]
Civi/Api4/Activity.php [new file with mode: 0644]
Civi/Api4/ActivityContact.php [new file with mode: 0644]
Civi/Api4/Address.php [new file with mode: 0644]
Civi/Api4/Campaign.php [new file with mode: 0644]
Civi/Api4/Contact.php [new file with mode: 0644]
Civi/Api4/ContactType.php [new file with mode: 0644]
Civi/Api4/Contribution.php [new file with mode: 0644]
Civi/Api4/ContributionPage.php [new file with mode: 0644]
Civi/Api4/CustomField.php [new file with mode: 0644]
Civi/Api4/CustomGroup.php [new file with mode: 0644]
Civi/Api4/CustomValue.php [new file with mode: 0644]
Civi/Api4/Domain.php [new file with mode: 0644]
Civi/Api4/Email.php [new file with mode: 0644]
Civi/Api4/Entity.php [new file with mode: 0644]
Civi/Api4/EntityTag.php [new file with mode: 0644]
Civi/Api4/Event.php [new file with mode: 0644]
Civi/Api4/Event/Events.php [new file with mode: 0644]
Civi/Api4/Event/GetSpecEvent.php [new file with mode: 0644]
Civi/Api4/Event/PostSelectQueryEvent.php [new file with mode: 0644]
Civi/Api4/Event/SchemaMapBuildEvent.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/ActivityPreCreationSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/ActivitySchemaMapSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/ContactPreSaveSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/ContactSchemaMapSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/ContributionPreSaveSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/CustomFieldPreSaveSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/CustomGroupPreCreationSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/Generic/AbstractPrepareSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/Generic/PreCreationSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/Generic/PreSaveSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/IsCurrentSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/OptionValuePreCreationSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/PermissionCheckSubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/PostSelectQuerySubscriber.php [new file with mode: 0644]
Civi/Api4/Event/Subscriber/ValidateFieldsSubscriber.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractAction.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractBatchAction.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractCreateAction.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractEntity.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractGetAction.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractQueryAction.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractSaveAction.php [new file with mode: 0644]
Civi/Api4/Generic/AbstractUpdateAction.php [new file with mode: 0644]
Civi/Api4/Generic/BasicBatchAction.php [new file with mode: 0644]
Civi/Api4/Generic/BasicCreateAction.php [new file with mode: 0644]
Civi/Api4/Generic/BasicGetAction.php [new file with mode: 0644]
Civi/Api4/Generic/BasicGetFieldsAction.php [new file with mode: 0644]
Civi/Api4/Generic/BasicReplaceAction.php [new file with mode: 0644]
Civi/Api4/Generic/BasicSaveAction.php [new file with mode: 0644]
Civi/Api4/Generic/BasicUpdateAction.php [new file with mode: 0644]
Civi/Api4/Generic/DAOCreateAction.php [new file with mode: 0644]
Civi/Api4/Generic/DAODeleteAction.php [new file with mode: 0644]
Civi/Api4/Generic/DAOEntity.php [new file with mode: 0644]
Civi/Api4/Generic/DAOGetAction.php [new file with mode: 0644]
Civi/Api4/Generic/DAOGetFieldsAction.php [new file with mode: 0644]
Civi/Api4/Generic/DAOSaveAction.php [new file with mode: 0644]
Civi/Api4/Generic/DAOUpdateAction.php [new file with mode: 0644]
Civi/Api4/Generic/Result.php [new file with mode: 0644]
Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php [new file with mode: 0644]
Civi/Api4/Generic/Traits/CustomValueActionTrait.php [new file with mode: 0644]
Civi/Api4/Generic/Traits/DAOActionTrait.php [new file with mode: 0644]
Civi/Api4/Generic/Traits/IsCurrentTrait.php [new file with mode: 0644]
Civi/Api4/Group.php [new file with mode: 0644]
Civi/Api4/GroupContact.php [new file with mode: 0644]
Civi/Api4/GroupNesting.php [new file with mode: 0644]
Civi/Api4/GroupOrganization.php [new file with mode: 0644]
Civi/Api4/IM.php [new file with mode: 0644]
Civi/Api4/LocationType.php [new file with mode: 0644]
Civi/Api4/MailSettings.php [new file with mode: 0644]
Civi/Api4/Mapping.php [new file with mode: 0644]
Civi/Api4/MappingField.php [new file with mode: 0644]
Civi/Api4/Navigation.php [new file with mode: 0644]
Civi/Api4/Note.php [new file with mode: 0644]
Civi/Api4/OpenID.php [new file with mode: 0644]
Civi/Api4/OptionGroup.php [new file with mode: 0644]
Civi/Api4/OptionValue.php [new file with mode: 0644]
Civi/Api4/Participant.php [new file with mode: 0644]
Civi/Api4/Phone.php [new file with mode: 0644]
Civi/Api4/Provider/ActionObjectProvider.php [new file with mode: 0644]
Civi/Api4/Query/Api4SelectQuery.php [new file with mode: 0644]
Civi/Api4/Relationship.php [new file with mode: 0644]
Civi/Api4/RelationshipType.php [new file with mode: 0644]
Civi/Api4/Result/ReplaceResult.php [new file with mode: 0644]
Civi/Api4/Route.php [new file with mode: 0644]
Civi/Api4/Service/Schema/Joinable/ActivityToActivityContactAssigneesJoinable.php [new file with mode: 0644]
Civi/Api4/Service/Schema/Joinable/BridgeJoinable.php [new file with mode: 0644]
Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php [new file with mode: 0644]
Civi/Api4/Service/Schema/Joinable/Joinable.php [new file with mode: 0644]
Civi/Api4/Service/Schema/Joinable/OptionValueJoinable.php [new file with mode: 0644]
Civi/Api4/Service/Schema/Joiner.php [new file with mode: 0644]
Civi/Api4/Service/Schema/SchemaMap.php [new file with mode: 0644]
Civi/Api4/Service/Schema/SchemaMapBuilder.php [new file with mode: 0644]
Civi/Api4/Service/Schema/Table.php [new file with mode: 0644]
Civi/Api4/Service/Spec/CustomFieldSpec.php [new file with mode: 0644]
Civi/Api4/Service/Spec/FieldSpec.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/ACLCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/ActionScheduleCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/ActivityCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/AddressCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/CampaignCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/ContactTypeCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/ContributionCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/CustomFieldCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/CustomGroupCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/DefaultLocationTypeProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/DomainCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/EmailCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/EntityTagCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/EventCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/Generic/SpecProviderInterface.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/GetActionDefaultsProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/GroupCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/MappingCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/NavigationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/NoteCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/OptionValueCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/PhoneCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/RelationshipTypeCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/StatusPreferenceCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/TagCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/UFFieldCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/Provider/UFMatchCreationSpecProvider.php [new file with mode: 0644]
Civi/Api4/Service/Spec/RequestSpec.php [new file with mode: 0644]
Civi/Api4/Service/Spec/SpecFormatter.php [new file with mode: 0644]
Civi/Api4/Service/Spec/SpecGatherer.php [new file with mode: 0644]
Civi/Api4/Setting.php [new file with mode: 0644]
Civi/Api4/StatusPreference.php [new file with mode: 0644]
Civi/Api4/System.php [new file with mode: 0644]
Civi/Api4/Tag.php [new file with mode: 0644]
Civi/Api4/UFField.php [new file with mode: 0644]
Civi/Api4/UFGroup.php [new file with mode: 0644]
Civi/Api4/UFJoin.php [new file with mode: 0644]
Civi/Api4/UFMatch.php [new file with mode: 0644]
Civi/Api4/Utils/ActionUtil.php [new file with mode: 0644]
Civi/Api4/Utils/ArrayInsertionUtil.php [new file with mode: 0644]
Civi/Api4/Utils/CoreUtil.php [new file with mode: 0644]
Civi/Api4/Utils/FormattingUtil.php [new file with mode: 0644]
Civi/Api4/Utils/ReflectionUtils.php [new file with mode: 0644]
Civi/Api4/Website.php [new file with mode: 0644]
Civi/Api4/services.xml [new file with mode: 0644]
Civi/Core/Container.php
Civi/Test/Api3TestTrait.php
ang/api4.ang.php [new file with mode: 0644]
ang/api4.js [new file with mode: 0644]
ang/api4/crmApi4.js [new file with mode: 0644]
ang/api4Explorer.ang.php [new file with mode: 0644]
ang/api4Explorer.js [new file with mode: 0644]
ang/api4Explorer/Chain.html [new file with mode: 0644]
ang/api4Explorer/Explorer.html [new file with mode: 0644]
ang/api4Explorer/Explorer.js [new file with mode: 0644]
ang/api4Explorer/WhereClause.html [new file with mode: 0644]
ang/crmCaseType.js
api/api.php
api/v3/CustomValue.php
api/v3/LocBlock.php
api/v3/Payment.php
api/v3/PaymentProcessor.php
api/v3/System/setting-whitelist.txt
api/v3/examples/Contribution/ContributionCreateWithHonoreeContact.ex.php
api/v3/examples/Contribution/ContributionCreateWithNote.ex.php
api/v3/examples/Contribution/ContributionCreateWithSoftCredit.ex.php
api/v3/examples/Contribution/ContributionCreateWithSoftCreditDefaults.ex.php
api/v3/examples/Contribution/Create.ex.php
api/v3/examples/Contribution/CreateWithNestedLineItems.ex.php
composer.json
composer.lock
contributor-key.yml
css/api4-explorer.css [new file with mode: 0644]
css/civicrm.css
distmaker/dists/backdrop_php5.sh
distmaker/dists/drupal6_php5.sh
distmaker/dists/drupal7_dir_php5.sh
distmaker/dists/drupal_php5.sh
distmaker/dists/drupal_sk_php5.sh
distmaker/dists/joomla_php5.sh
distmaker/dists/wordpress_php5.sh
extension-compatibility.json
js/crm.ajax.js
js/load-bootstrap.js [new file with mode: 0644]
karma.conf.js
release-notes.md
release-notes/5.17.5.md [new file with mode: 0644]
release-notes/5.18.0.md [new file with mode: 0644]
release-notes/5.18.1.md [new file with mode: 0644]
release-notes/5.18.2.md [new file with mode: 0644]
settings/Core.setting.php
settings/Map.setting.php
sql/GenerateData.php
sql/GenerateReportData.php
sql/civicrm_generated.mysql
templates/CRM/Admin/Form/Setting/Mapping.tpl
templates/CRM/Admin/Page/ConfigTaskList.tpl
templates/CRM/Api4/Page/Api4Explorer.tpl [new file with mode: 0644]
templates/CRM/Contact/Page/DashBoardDashlet.tpl
templates/CRM/Contact/Page/View/RelationshipSelector.tpl
templates/CRM/Contribute/Form/ContributionCharts.tpl
templates/CRM/Contribute/Form/ContributionPage/Settings.tpl
templates/CRM/Contribute/Page/UserDashboard.tpl
templates/CRM/Pledge/Form/Pledge.tpl
templates/CRM/Report/Form/Layout/Graph.tpl
templates/CRM/common/CMSPrint.tpl
templates/CRM/common/chart.tpl [new file with mode: 0644]
templates/CRM/common/joomla.tpl
templates/CRM/common/openFlashChart.tpl [deleted file]
tests/karma/unit/crmCaseTypeSpec.js
tests/karma/unit/crmMailingRadioDateSpec.js
tests/phpunit/CRM/Contribute/BAO/ContributionRecurTest.php
tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php
tests/phpunit/CRM/Core/BAO/CustomFieldTest.php
tests/phpunit/CRM/Core/BAO/FinancialTrxnTest.php
tests/phpunit/CRM/Core/BAO/LocationTest.php
tests/phpunit/CRM/Core/BAO/RecurringEntityTest.php
tests/phpunit/CRM/Export/BAO/ExportTest.php
tests/phpunit/CRM/Utils/Mail/EmailProcessorInboundTest.php [new file with mode: 0644]
tests/phpunit/CRM/Utils/Mail/data/inbound/test_message_many_attachments.eml [new file with mode: 0644]
tests/phpunit/CRMTraits/Custom/CustomDataTrait.php
tests/phpunit/CRMTraits/Profile/ProfileTrait.php
tests/phpunit/CiviTest/CiviUnitTestCase.php
tests/phpunit/CiviTest/bootstrap.php
tests/phpunit/api/v3/ContributionPageTest.php
tests/phpunit/api/v3/ContributionTest.php
tests/phpunit/api/v3/CustomValueTest.php
tests/phpunit/api/v3/JobProcessMailingTest.php
tests/phpunit/api/v3/MailingTest.php
tests/phpunit/api/v3/PaymentTest.php
tests/phpunit/api/v3/SystemCheckTest.php
tests/phpunit/api/v4/Action/BaseCustomValueTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/BasicActionsTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/BasicCustomFieldTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/ChainTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/ComplexQueryTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/ContactApiKeyTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/ContactChecksumTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/ContactGetTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/CreateCustomValueTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/CreateWithOptionGroupTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/CurrentFilterTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/CustomValuePerformanceTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/CustomValueTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/DateTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/EvaluateConditionTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/EventTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/ExtendFromIndividualTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/FkJoinTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/GetExtraFieldsTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/GetFromArrayTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/IndexTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/NullValueTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/ReplaceTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/RequiredFieldTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/UpdateContactTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Action/UpdateCustomValueTest.php [new file with mode: 0644]
tests/phpunit/api/v4/AllTests.php [new file with mode: 0644]
tests/phpunit/api/v4/DataSets/ConformanceTest.json [new file with mode: 0644]
tests/phpunit/api/v4/DataSets/DefaultDataSet.json [new file with mode: 0644]
tests/phpunit/api/v4/DataSets/MultiContactMultiEmail.json [new file with mode: 0644]
tests/phpunit/api/v4/DataSets/SingleContact.json [new file with mode: 0644]
tests/phpunit/api/v4/Entity/ConformanceTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Entity/ContactJoinTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Entity/EntityTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Entity/ParticipantTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Entity/RouteTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Entity/SettingTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Mock/Api4/Action/MockArrayEntity/Get.php [new file with mode: 0644]
tests/phpunit/api/v4/Mock/Api4/MockArrayEntity.php [new file with mode: 0644]
tests/phpunit/api/v4/Mock/Api4/MockBasicEntity.php [new file with mode: 0644]
tests/phpunit/api/v4/Mock/MockEntityDataStorage.php [new file with mode: 0644]
tests/phpunit/api/v4/Mock/MockV4ReflectionBase.php [new file with mode: 0644]
tests/phpunit/api/v4/Mock/MockV4ReflectionChild.php [new file with mode: 0644]
tests/phpunit/api/v4/Mock/MockV4ReflectionGrandchild.php [new file with mode: 0644]
tests/phpunit/api/v4/Query/Api4SelectQueryComplexJoinTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Query/Api4SelectQueryTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Query/OneToOneJoinTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Query/OptionValueJoinTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Query/SelectQueryMultiJoinTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Service/Schema/SchemaMapRealTableTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Service/Schema/SchemaMapperTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Service/TestCreationParameterProvider.php [new file with mode: 0644]
tests/phpunit/api/v4/Spec/RequestSpecTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Spec/SpecFormatterTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Spec/SpecGathererTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Traits/OptionCleanupTrait.php [new file with mode: 0644]
tests/phpunit/api/v4/Traits/QueryCounterTrait.php [new file with mode: 0644]
tests/phpunit/api/v4/Traits/TableDropperTrait.php [new file with mode: 0644]
tests/phpunit/api/v4/Traits/TestDataLoaderTrait.php [new file with mode: 0644]
tests/phpunit/api/v4/UnitTestCase.php [new file with mode: 0644]
tests/phpunit/api/v4/Utils/ArrayInsertionServiceTest.php [new file with mode: 0644]
tests/phpunit/api/v4/Utils/ReflectionUtilsTest.php [new file with mode: 0644]
tests/phpunit/api/v4/services.xml [new file with mode: 0644]
tools/scripts/phpunit
xml/schema/Contribute/Contribution.xml
xml/schema/Contribute/ContributionPage.xml
xml/schema/Core/Address.xml
xml/schema/Core/StatusPreference.xml
xml/schema/Financial/FinancialTrxn.xml
xml/schema/Mailing/Mailing.xml
xml/templates/civicrm_navigation.tpl
xml/version.xml

index ab6069fbed44ce824dd1d994e718efaa45508d0c..ef5e76fd0b2bb14ba0254266a50b53f47e2cd67e 100644 (file)
@@ -59,7 +59,9 @@ class CRM_Admin_Form_Preferences_Mailing extends CRM_Admin_Form_Preferences {
       // see logging setting for eg.
       $existingViewOptions = Civi::settings()->get('contact_view_options');
 
-      $displayValue = CRM_Core_OptionGroup::getValue('contact_view_options', 'CiviMail', 'name');
+      $displayViewOptions = CRM_Core_OptionGroup::values('contact_view_options', TRUE, FALSE, FALSE, NULL, 'name');
+      $displayValue = $displayViewOptions['CiviMail'];
+
       $viewOptions = explode(CRM_Core_DAO::VALUE_SEPARATOR, $existingViewOptions);
 
       if (!in_array($displayValue, $viewOptions)) {
index 2d71f739df02948a080a4d68683c440124525bf4..fa741e6d8514b69c1304697944bdc2837e310649 100644 (file)
@@ -67,10 +67,6 @@ class CRM_Admin_Form_Setting_Mapping extends CRM_Admin_Form_Setting {
       $errors['_qf_default'] = ts('Mapping features require PHP version 5 or greater');
     }
 
-    if (!$fields['mapAPIKey'] && ($fields['mapProvider'] != '' && $fields['mapProvider'] == 'Yahoo')) {
-      $errors['mapAPIKey'] = "Map Provider key is a required field.";
-    }
-
     if ($fields['mapProvider'] == 'OpenStreetMaps' && $fields['geoProvider'] == '') {
       $errors['geoProvider'] = "Please select a Geocoding Provider - Open Street Maps does not provide geocoding.";
     }
index 8b92a4b411f5e23960565f56cadf68c2275e9252..d1277923a82f94fea7c7f63d06231062f61f9f20 100644 (file)
@@ -38,6 +38,7 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting {
 
   protected $_settings = [
     'max_attachments' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME,
+    'max_attachments_backend' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME,
     'contact_undelete' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME,
     'empoweredBy' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME,
     'logging' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME,
@@ -73,6 +74,7 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting {
     $this->assign('pure_config_settings', [
       'empoweredBy',
       'max_attachments',
+      'max_attachments_backend',
       'maxFileSize',
       'secondDegRelPermissions',
       'recentItemsMaxCount',
index 45dc52dccedea26c90685175b930922f458d37da..706bf874e991780f017e1b443d5f3390bd1638a0 100644 (file)
@@ -54,14 +54,24 @@ class CRM_Admin_Form_Setting_Smtp extends CRM_Admin_Form_Setting {
     ];
     $this->addRadio('outBound_option', ts('Select Mailer'), $outBoundOption);
 
+    $props = array();
+    $settings = Civi::settings()->getMandatory('mailing_backend') ?? [];
+    //Load input as readonly whose values are overridden in civicrm.settings.php.
+    foreach ($settings as $setting => $value) {
+      if (isset($value)) {
+        $props[$setting]['readonly'] = TRUE;
+        $setStatus = TRUE;
+      }
+    }
+
     CRM_Utils_System::setTitle(ts('Settings - Outbound Mail'));
     $this->add('text', 'sendmail_path', ts('Sendmail Path'));
     $this->add('text', 'sendmail_args', ts('Sendmail Argument'));
-    $this->add('text', 'smtpServer', ts('SMTP Server'));
-    $this->add('text', 'smtpPort', ts('SMTP Port'));
-    $this->addYesNo('smtpAuth', ts('Authentication?'));
-    $this->addElement('text', 'smtpUsername', ts('SMTP Username'));
-    $this->addElement('password', 'smtpPassword', ts('SMTP Password'));
+    $this->add('text', 'smtpServer', ts('SMTP Server'), CRM_Utils_Array::value('smtpServer', $props));
+    $this->add('text', 'smtpPort', ts('SMTP Port'), CRM_Utils_Array::value('smtpPort', $props));
+    $this->addYesNo('smtpAuth', ts('Authentication?'), CRM_Utils_Array::value('smtpAuth', $props));
+    $this->addElement('text', 'smtpUsername', ts('SMTP Username'), CRM_Utils_Array::value('smtpUsername', $props));
+    $this->addElement('password', 'smtpPassword', ts('SMTP Password'), CRM_Utils_Array::value('smtpPassword', $props));
 
     $this->_testButtonName = $this->getButtonName('refresh', 'test');
 
@@ -70,6 +80,10 @@ class CRM_Admin_Form_Setting_Smtp extends CRM_Admin_Form_Setting {
     $buttons = $this->getElement('buttons')->getElements();
     $buttons[] = $this->createElement('submit', $this->_testButtonName, ts('Save & Send Test Email'), ['crm-icon' => 'fa-envelope-o']);
     $this->getElement('buttons')->setElements($buttons);
+
+    if (!empty($setStatus)) {
+      CRM_Core_Session::setStatus("Some fields are loaded as 'readonly' as they have been set (overridden) in civicrm.settings.php.", '', 'info', array('expires' => 0));
+    }
   }
 
   /**
index 1642b79ddffd35d2b43ee41c0ecfeeeef7b0cd59..ec6e15cfa71d162f39980d4209252a694a36d042 100644 (file)
@@ -250,6 +250,10 @@ trait CRM_Admin_Form_SettingTrait {
           //temp hack @todo fix to get from metadata
           $this->addRule('max_attachments', ts('Value should be a positive number'), 'positiveInteger');
         }
+        if ($setting == 'max_attachments_backend') {
+          //temp hack @todo fix to get from metadata
+          $this->addRule('max_attachments_backend', ts('Value should be a positive number'), 'positiveInteger');
+        }
         if ($setting == 'maxFileSize') {
           //temp hack
           $this->addRule('maxFileSize', ts('Value should be a positive number'), 'positiveInteger');
index e190d36f636e2e93fe8dd618c0c51ee7a1c7df88..40bd1bfbbe1eefb644fa14f2a27bf5a3785c253f 100644 (file)
@@ -175,16 +175,21 @@ class CRM_Admin_Page_Extensions extends CRM_Core_Page_Basic {
 
       $row = self::createExtendedInfo($obj);
       $row['id'] = $obj->key;
+      $row['action'] = '';
 
       // assign actions
       $action = 0;
       switch ($row['status']) {
         case CRM_Extension_Manager::STATUS_UNINSTALLED:
-          $action += CRM_Core_Action::ADD;
+          if (!$manager->isIncompatible($row['id'])) {
+            $action += CRM_Core_Action::ADD;
+          }
           break;
 
         case CRM_Extension_Manager::STATUS_DISABLED:
-          $action += CRM_Core_Action::ENABLE;
+          if (!$manager->isIncompatible($row['id'])) {
+            $action += CRM_Core_Action::ENABLE;
+          }
           $action += CRM_Core_Action::DELETE;
           break;
 
@@ -201,18 +206,17 @@ class CRM_Admin_Page_Extensions extends CRM_Core_Page_Basic {
       }
       // TODO if extbrowser is enabled and extbrowser has newer version than extcontainer,
       // then $action += CRM_Core_Action::UPDATE
-      $row['action'] = CRM_Core_Action::formLink(self::links(),
-        $action,
-        [
-          'id' => $row['id'],
-          'key' => $obj->key,
-        ],
-        ts('more'),
-        FALSE,
-        'extension.local.action',
-        'Extension',
-        $row['id']
-      );
+      if ($action) {
+        $row['action'] = CRM_Core_Action::formLink(self::links(),
+          $action,
+          ['id' => $row['id'], 'key' => $obj->key],
+          ts('more'),
+          FALSE,
+          'extension.local.action',
+          'Extension',
+          $row['id']
+        );
+      }
       // Key would be better to send, but it's not an integer.  Moreover, sending the
       // values to hook_civicrm_links means that you can still get at the key
 
diff --git a/CRM/Api4/Page/AJAX.php b/CRM/Api4/Page/AJAX.php
new file mode 100644 (file)
index 0000000..e560c85
--- /dev/null
@@ -0,0 +1,105 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+class CRM_Api4_Page_AJAX extends CRM_Core_Page {
+
+  /**
+   * Handler for api4 ajax requests
+   */
+  public function run() {
+    try {
+      // Call multiple
+      if (empty($this->urlPath[3])) {
+        $calls = CRM_Utils_Request::retrieve('calls', 'String', CRM_Core_DAO::$_nullObject, TRUE, NULL, 'POST', TRUE);
+        $calls = json_decode($calls, TRUE);
+        $response = [];
+        foreach ($calls as $index => $call) {
+          $response[$index] = call_user_func_array([$this, 'execute'], $call);
+        }
+      }
+      // Call single
+      else {
+        $entity = $this->urlPath[3];
+        $action = $this->urlPath[4];
+        $params = CRM_Utils_Request::retrieve('params', 'String');
+        $params = $params ? json_decode($params, TRUE) : [];
+        $index = CRM_Utils_Request::retrieve('index', 'String');
+        $response = $this->execute($entity, $action, $params, $index);
+      }
+    }
+    catch (Exception $e) {
+      http_response_code(500);
+      $response = [
+        'error_code' => $e->getCode(),
+      ];
+      if (CRM_Core_Permission::check('view debug output')) {
+        $response['error_message'] = $e->getMessage();
+        if (\Civi::settings()->get('backtrace')) {
+          $response['backtrace'] = $e->getTrace();
+        }
+      }
+    }
+    CRM_Utils_System::setHttpHeader('Content-Type', 'application/json');
+    echo json_encode($response);
+    CRM_Utils_System::civiExit();
+  }
+
+  /**
+   * Run api call & prepare result for json encoding
+   *
+   * @param string $entity
+   * @param string $action
+   * @param array $params
+   * @param string $index
+   * @return array
+   */
+  protected function execute($entity, $action, $params = [], $index = NULL) {
+    $params['checkPermissions'] = TRUE;
+
+    // Handle numeric indexes later so we can get the count
+    $itemAt = CRM_Utils_Type::validate($index, 'Integer', FALSE);
+
+    $result = civicrm_api4($entity, $action, $params, isset($itemAt) ? NULL : $index);
+
+    // Convert arrayObject into something more suitable for json
+    $vals = ['values' => isset($itemAt) ? $result->itemAt($itemAt) : (array) $result];
+    foreach (get_class_vars(get_class($result)) as $key => $val) {
+      $vals[$key] = $result->$key;
+    }
+    $vals['count'] = $result->count();
+    return $vals;
+  }
+
+}
diff --git a/CRM/Api4/Page/Api4Explorer.php b/CRM/Api4/Page/Api4Explorer.php
new file mode 100644 (file)
index 0000000..8203923
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page {
+
+  public function run() {
+    $vars = [
+      'operators' => \CRM_Core_DAO::acceptedSQLOperators(),
+      'basePath' => Civi::resources()->getUrl('civicrm'),
+      'schema' => (array) \Civi\Api4\Entity::get()->setChain(['fields' => ['$name', 'getFields']])->execute(),
+      'links' => (array) \Civi\Api4\Entity::getLinks()->execute(),
+    ];
+    Civi::resources()
+      ->addVars('api4', $vars)
+      ->addScriptFile('civicrm', 'js/load-bootstrap.js')
+      ->addScriptFile('civicrm', 'bower_components/js-yaml/dist/js-yaml.min.js')
+      ->addScriptFile('civicrm', 'bower_components/google-code-prettify/bin/prettify.min.js')
+      ->addStyleFile('civicrm', 'bower_components/google-code-prettify/bin/prettify.min.css');
+
+    $loader = new Civi\Angular\AngularLoader();
+    $loader->setModules(['api4Explorer']);
+    $loader->setPageName('civicrm/api4');
+    $loader->useApp([
+      'defaultRoute' => '/explorer',
+    ]);
+    $loader->load();
+    parent::run();
+  }
+
+}
diff --git a/CRM/Api4/Services.php b/CRM/Api4/Services.php
new file mode 100644 (file)
index 0000000..03dcf6c
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
+use Symfony\Component\Config\FileLocator;
+
+class CRM_Api4_Services {
+
+  /**
+   * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
+   */
+  public static function hook_container($container) {
+    $loader = new XmlFileLoader($container, new FileLocator(dirname(dirname(__DIR__))));
+    $loader->load('Civi/Api4/services.xml');
+
+    self::loadServices('Civi\Api4\Service\Spec\Provider', 'spec_provider', $container);
+    self::loadServices('Civi\Api4\Event\Subscriber', 'event_subscriber', $container);
+
+    $container->getDefinition('civi_api_kernel')->addMethodCall(
+      'registerApiProvider',
+      [new Reference('action_object_provider')]
+    );
+
+    // add event subscribers$container->get(
+    $dispatcher = $container->getDefinition('dispatcher');
+    $subscribers = $container->findTaggedServiceIds('event_subscriber');
+
+    foreach (array_keys($subscribers) as $subscriber) {
+      $dispatcher->addMethodCall(
+        'addSubscriber',
+        [new Reference($subscriber)]
+      );
+    }
+
+    // add spec providers
+    $providers = $container->findTaggedServiceIds('spec_provider');
+    $gatherer = $container->getDefinition('spec_gatherer');
+
+    foreach (array_keys($providers) as $provider) {
+      $gatherer->addMethodCall(
+        'addSpecProvider',
+        [new Reference($provider)]
+      );
+    }
+
+    if (defined('CIVICRM_UF') && CIVICRM_UF === 'UnitTests') {
+      $loader->load('tests/phpunit/api/v4/services.xml');
+    }
+  }
+
+  /**
+   * Load all services in a given directory
+   *
+   * @param string $namespace
+   * @param string $tag
+   * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
+   */
+  public static function loadServices($namespace, $tag, $container) {
+    $namespace = \CRM_Utils_File::addTrailingSlash($namespace, '\\');
+    $locations = array_merge([\Civi::paths()->getPath('[civicrm.root]/Civi.php')],
+      array_column(\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles(), 'filePath')
+    );
+    foreach ($locations as $location) {
+      $path = \CRM_Utils_File::addTrailingSlash(dirname($location)) . str_replace('\\', DIRECTORY_SEPARATOR, $namespace);
+      $container->addResource(new \Symfony\Component\Config\Resource\DirectoryResource($path, ';\.php$;'));
+      foreach (glob("$path*.php") as $file) {
+        $matches = [];
+        preg_match('/(\w*).php/', $file, $matches);
+        $serviceName = $namespace . array_pop($matches);
+        $serviceClass = new \ReflectionClass($serviceName);
+        if ($serviceClass->isInstantiable()) {
+          $definition = $container->register(str_replace('\\', '_', $serviceName), $serviceName);
+          $definition->addTag($tag);
+        }
+      }
+    }
+  }
+
+}
index 552db8f9d111e2ee9cb822c5d3b7bb6ca8b74695..074fcf2623ad79daa697e1d86931ef2d320e1cbf 100644 (file)
@@ -421,7 +421,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
       $group->name = substr($group->name, 0, -4) . "_{$group->id}";
     }
 
-    $group->buildClause();
     $group->save();
 
     // add custom field values
@@ -501,25 +500,6 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
     return $group;
   }
 
-  /**
-   * Given a saved search compute the clause and the tables
-   * and store it for future use
-   */
-  public function buildClause() {
-    $params = [['group', 'IN', [$this->id], 0, 0]];
-
-    if (!empty($params)) {
-      $tables = $whereTables = [];
-      $this->where_clause = CRM_Contact_BAO_Query::getWhereClause($params, NULL, $tables, $whereTables);
-      if (!empty($tables)) {
-        $this->select_tables = serialize($tables);
-      }
-      if (!empty($whereTables)) {
-        $this->where_tables = serialize($whereTables);
-      }
-    }
-  }
-
   /**
    * Defines a new smart group.
    *
index 9d5e64a38a51f8abc6ded53b8399ec8d61e7d0cd..56acef4c367048474d7af5ea890932b8c0d3040e 100644 (file)
@@ -6419,6 +6419,10 @@ AND   displayRelType.is_active = 1
         if (!empty($pseudoConstantMetadata['optionGroupName'])
           || $this->isPseudoFieldAnFK($fieldSpec)
         ) {
+          // dev/core#1305 @todo this is not the right thing to do but for now avoid fatal error
+          if (empty($fieldSpec['bao'])) {
+            continue;
+          }
           $sortedOptions = $fieldSpec['bao']::buildOptions($fieldSpec['name'], NULL, [
             'orderColumn' => CRM_Utils_Array::value('labelColumn', $pseudoConstantMetadata, 'label'),
           ]);
index b210da587acac3c2dc8eb687a85c1a3b45bb5637..bf270e363d6d58034bc420fb594a8f7820118374 100644 (file)
@@ -43,6 +43,12 @@ class CRM_Contact_BAO_Relationship extends CRM_Contact_DAO_Relationship {
    */
   const NONE = 0, EDIT = 1, VIEW = 2;
 
+  /**
+   * The list of column headers
+   * @var array
+   */
+  private static $columnHeaders;
+
   /**
    * Create function - use the API instead.
    *
@@ -2200,6 +2206,10 @@ AND cc.sort_name LIKE '%$name%'";
       }
     }
 
+    $columnHeaders = self::getColumnHeaders();
+    $selector = NULL;
+    CRM_Utils_Hook::searchColumns('relationship.rows', $columnHeaders, $contactRelationships, $selector);
+
     $relationshipsDT = [];
     $relationshipsDT['data'] = $contactRelationships;
     $relationshipsDT['recordsTotal'] = $params['total'];
@@ -2208,6 +2218,59 @@ AND cc.sort_name LIKE '%$name%'";
     return $relationshipsDT;
   }
 
+  /**
+   * @return array
+   */
+  public static function getColumnHeaders() {
+    return [
+      'relation' => [
+        'name' => ts('Relationship'),
+        'sort' => 'relation',
+        'direction' => CRM_Utils_Sort::ASCENDING,
+      ],
+      'sort_name' => [
+        'name' => '',
+        'sort' => 'sort_name',
+        'direction' => CRM_Utils_Sort::ASCENDING,
+      ],
+      'start_date' => [
+        'name' => ts('Start'),
+        'sort' => 'start_date',
+        'direction' => CRM_Utils_Sort::DONTCARE,
+      ],
+      'end_date' => [
+        'name' => ts('End'),
+        'sort' => 'end_date',
+        'direction' => CRM_Utils_Sort::DONTCARE,
+      ],
+      'city' => [
+        'name' => ts('City'),
+        'sort' => 'city',
+        'direction' => CRM_Utils_Sort::DONTCARE,
+      ],
+      'state' => [
+        'name' => ts('State/Prov'),
+        'sort' => 'state',
+        'direction' => CRM_Utils_Sort::DONTCARE,
+      ],
+      'email' => [
+        'name' => ts('Email'),
+        'sort' => 'email',
+        'direction' => CRM_Utils_Sort::DONTCARE,
+      ],
+      'phone' => [
+        'name' => ts('Phone'),
+        'sort' => 'phone',
+        'direction' => CRM_Utils_Sort::DONTCARE,
+      ],
+      'links' => [
+        'name' => '',
+        'sort' => 'links',
+        'direction' => CRM_Utils_Sort::DONTCARE,
+      ],
+    ];
+  }
+
   /**
    * @inheritdoc
    */
index 749a716a4938d7b3cfc6ba298d49ffd311afe2b8..396cb3826ae57ab23da2c0e5fff825b5d8a5e30c 100644 (file)
@@ -324,43 +324,6 @@ LEFT JOIN civicrm_email ON (contact_a.id = civicrm_email.contact_id AND civicrm_
     }
   }
 
-  /**
-   * Given a saved search compute the clause and the tables and store it for future use.
-   */
-  public function buildClause() {
-    $fv = unserialize($this->form_values);
-
-    if ($this->mapping_id) {
-      $params = CRM_Core_BAO_Mapping::formattedFields($fv);
-    }
-    else {
-      $params = CRM_Contact_BAO_Query::convertFormValues($fv);
-    }
-
-    if (!empty($params)) {
-      $tables = $whereTables = [];
-      $this->where_clause = CRM_Contact_BAO_Query::getWhereClause($params, NULL, $tables, $whereTables);
-      if (!empty($tables)) {
-        $this->select_tables = serialize($tables);
-      }
-      if (!empty($whereTables)) {
-        $this->where_tables = serialize($whereTables);
-      }
-    }
-  }
-
-  /**
-   * Save the search.
-   *
-   * @param bool $hook
-   */
-  public function save($hook = TRUE) {
-    // first build the computed fields
-    $this->buildClause();
-
-    parent::save($hook);
-  }
-
   /**
    * Given an id, get the name of the saved search.
    *
index 8cc795e56a58641032734354de33b0050c5e6504..21dbd8cf68d3d78fd8adc0987d1c8a1dfebf89c0 100644 (file)
@@ -46,6 +46,8 @@ class CRM_Contact_Form_Edit_Address {
    *   False, if we want to skip the address sharing features.
    * @param bool $inlineEdit
    *   True when edit used in inline edit.
+   *
+   * @throws \CiviCRM_API3_Exception
    */
   public static function buildQuickForm(&$form, $addressBlockCount = NULL, $sharing = TRUE, $inlineEdit = FALSE) {
     // passing this via the session is AWFUL. we need to fix this
@@ -130,13 +132,13 @@ class CRM_Contact_Form_Edit_Address {
           continue;
         }
       }
-      if ($name == 'address_name') {
+      if ($name === 'address_name') {
         $name = 'name';
       }
 
       $params = ['entity' => 'address'];
 
-      if ($name == 'postal_code_suffix') {
+      if ($name === 'postal_code_suffix') {
         $params['label'] = ts('Suffix');
       }
 
@@ -366,12 +368,12 @@ class CRM_Contact_Form_Edit_Address {
       $requireOmission = NULL;
       foreach ($groupTree as $csId => $csVal) {
         // only process Address entity fields
-        if ($csVal['extends'] != 'Address') {
+        if ($csVal['extends'] !== 'Address') {
           continue;
         }
 
         foreach ($csVal['fields'] as $cdId => $cdVal) {
-          if ($cdVal['is_required']) {
+          if (!empty($cdVal['is_required'])) {
             $elementName = $cdVal['element_name'];
             if (in_array($elementName, $form->_required)) {
               // store the omitted rule for a element, to be used later on
@@ -391,6 +393,9 @@ class CRM_Contact_Form_Edit_Address {
    * @param CRM_Core_Form $form
    * @param int $entityId
    * @param int $blockId
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   protected static function addCustomDataToForm(&$form, $entityId, $blockId) {
     $groupTree = CRM_Core_BAO_CustomGroup::getTree('Address', NULL, $entityId);
@@ -417,7 +422,7 @@ class CRM_Contact_Form_Edit_Address {
           continue;
         }
 
-        // inorder to set correct defaults for checkbox custom data, we need to converted flat key to array
+        // in order to set correct defaults for checkbox custom data, we need to converted flat key to array
         // this works for all types custom data
         $keyValues = explode('[', str_replace(']', '', $key));
         $addressDefaults[$keyValues[0]][$keyValues[1]][$keyValues[2]] = $val;
index 0d854ff10f93fdc53094b50bd613478ac0c18115..96fb7810d07062801b4e39f2ffac4cd6a404fb15 100644 (file)
@@ -757,13 +757,6 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search {
     $controller->moveFromSessionToTemplate();
   }
 
-  /**
-   * @return array
-   */
-  public function &getFormValues() {
-    return $this->_formValues;
-  }
-
   /**
    * Common post processing.
    */
index 0fcb3e73641045739a08c4d89cd7ab2f0db4a805..a3f46e68de23c863c65d0926baf6c35ba2b50314 100644 (file)
@@ -386,10 +386,7 @@ class CRM_Contact_Form_Search_Advanced extends CRM_Contact_Form_Search {
    *
    * @return array
    */
-  public function normalizeDefaultValues(&$defaults) {
-    if (!is_array($defaults)) {
-      $defaults = array();
-    }
+  public function normalizeDefaultValues($defaults) {
     $this->loadDefaultCountryBasedOnState($defaults);
     if ($this->_ssID && empty($_POST)) {
       $defaults = array_merge($defaults, CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID));
index c5b8439801d013d5d009addb698eb4c68b84190e..a0424e1d6cf7d82729dc6a03b1c0add185d32d57 100644 (file)
@@ -180,7 +180,7 @@ class CRM_Contact_Form_Task_PDFLetterCommon extends CRM_Core_Form_Task_PDFLetter
     }
 
     $tee = NULL;
-    if ($isLiveMode && Civi::settings()->get('recordGeneratedLetters') === 'combined-attached') {
+    if (self::isLiveMode($form) && Civi::settings()->get('recordGeneratedLetters') === 'combined-attached') {
       if (count($activityIds) !== 1) {
         throw new CRM_Core_Exception("When recordGeneratedLetters=combined-attached, there should only be one activity.");
       }
index cc05f439e2906c8e79da93d4eefd77967cb0619e..f6004c1090e9d0bcfee29e6a0a5805a23c31045c 100644 (file)
@@ -158,6 +158,10 @@ class CRM_Contact_Page_View_Relationship extends CRM_Core_Page {
    */
   public function browse() {
     // do nothing :) we are using datatable for rendering relationship selectors
+    $columnHeaders = CRM_Contact_BAO_Relationship::getColumnHeaders();
+    $contactRelationships = $selector = NULL;
+    CRM_Utils_Hook::searchColumns('relationship.columns', $columnHeaders, $contactRelationships, $selector);
+    $this->assign('columnHeaders', $columnHeaders);
   }
 
   /**
index a1cd4da84350ba05fcc3f6b516051844be29528e..91aacb1bba1132d0dccf85b19169b36f8277da74 100644 (file)
@@ -144,6 +144,10 @@ class CRM_Contact_Page_View_UserDashBoard extends CRM_Core_Page {
 
     // CRM-16512 - Hide related contact table if user lacks permission to view self
     if (!empty($dashboardOptions['Permissioned Orgs']) && CRM_Core_Permission::check('view my contact')) {
+      $columnHeaders = CRM_Contact_BAO_Relationship::getColumnHeaders();
+      $contactRelationships = $selector = NULL;
+      CRM_Utils_Hook::searchColumns('relationship.columns', $columnHeaders, $contactRelationships, $selector);
+      $this->assign('columnHeaders', $columnHeaders);
       $dashboardElements[] = [
         'class' => 'crm-dashboard-permissionedOrgs',
         'templatePath' => 'CRM/Contact/Page/View/RelationshipSelector.tpl',
index bf3b53a599cbe9c2a5252667cf77a6f387d8f776..7259c633a016a279443fbdac99076c35875a882e 100644 (file)
@@ -155,7 +155,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
       if (($params['contribution_status_id'] == array_search('Refunded', $contributionStatus)
         || $params['contribution_status_id'] == array_search('Cancelled', $contributionStatus))
       ) {
-        if (empty($params['creditnote_id']) || $params['creditnote_id'] == "null") {
+        if (empty($params['creditnote_id'])) {
           $params['creditnote_id'] = self::createCreditNoteId();
         }
       }
@@ -664,7 +664,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
   public static function resolveDefaults(&$defaults, $reverse = FALSE) {
     self::lookupValue($defaults, 'financial_type', CRM_Contribute_PseudoConstant::financialType(), $reverse);
     self::lookupValue($defaults, 'payment_instrument', CRM_Contribute_PseudoConstant::paymentInstrument(), $reverse);
-    self::lookupValue($defaults, 'contribution_status', CRM_Contribute_PseudoConstant::contributionStatus(), $reverse);
+    self::lookupValue($defaults, 'contribution_status', CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label'), $reverse);
     self::lookupValue($defaults, 'pcp', CRM_Contribute_PseudoConstant::pcPage(), $reverse);
   }
 
@@ -1100,14 +1100,14 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
    * functions.
    *
    * @param array $params
-   * @param string $context
-   * @param array $previousContributionStatus
-   * @param string $currentContributionStatus
    *
    * @return bool[]
    *   Return indicates whether the updateFinancialAccounts function should continue & whether this is a refund.
    */
-  private static function updateFinancialAccountsOnContributionStatusChange(&$params, $context, $previousContributionStatus, $currentContributionStatus) {
+  private static function updateFinancialAccountsOnContributionStatusChange(&$params) {
+    $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);
+
     $isARefund = FALSE;
     if ((($previousContributionStatus == 'Partially paid' && $currentContributionStatus == 'Completed')
         || ($previousContributionStatus == 'Pending refund' && $currentContributionStatus == 'Completed')
@@ -1118,90 +1118,89 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
     ) {
       return [FALSE, $isARefund];
     }
-    if ($context == 'changedStatus') {
-      if ($previousContributionStatus == 'Completed'
-        && (self::isContributionStatusNegative($params['contribution']->contribution_status_id))
-      ) {
-        $isARefund = TRUE;
+
+    if ($previousContributionStatus == 'Completed'
+      && (self::isContributionStatusNegative($params['contribution']->contribution_status_id))
+    ) {
+      $isARefund = TRUE;
+      // @todo we should stop passing $params by reference - splitting this out would be a step towards that.
+      $params['trxnParams']['total_amount'] = -$params['total_amount'];
+      if (empty($params['contribution']->creditnote_id)) {
+        $creditNoteId = self::createCreditNoteId();
+        CRM_Core_DAO::setFieldValue('CRM_Contribute_DAO_Contribution', $params['contribution']->id, 'creditnote_id', $creditNoteId);
+      }
+    }
+    elseif (($previousContributionStatus == 'Pending'
+        && $params['prevContribution']->is_pay_later) || $previousContributionStatus == 'In Progress'
+    ) {
+      $financialTypeID = CRM_Utils_Array::value('financial_type_id', $params) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id;
+      $arAccountId = CRM_Contribute_PseudoConstant::getRelationalFinancialAccount($financialTypeID, 'Accounts Receivable Account is');
+
+      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'];
-        if (empty($params['contribution']->creditnote_id) || $params['contribution']->creditnote_id == "null") {
+        if (empty($params['contribution']->creditnote_id)) {
           $creditNoteId = self::createCreditNoteId();
           CRM_Core_DAO::setFieldValue('CRM_Contribute_DAO_Contribution', $params['contribution']->id, 'creditnote_id', $creditNoteId);
         }
       }
-      elseif (($previousContributionStatus == 'Pending'
-          && $params['prevContribution']->is_pay_later) || $previousContributionStatus == 'In Progress'
-      ) {
-        $financialTypeID = CRM_Utils_Array::value('financial_type_id', $params) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id;
-        $arAccountId = CRM_Contribute_PseudoConstant::getRelationalFinancialAccount($financialTypeID, 'Accounts Receivable Account is');
-
-        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'];
-          if (is_null($params['contribution']->creditnote_id) || $params['contribution']->creditnote_id == "null") {
-            $creditNoteId = self::createCreditNoteId();
-            CRM_Core_DAO::setFieldValue('CRM_Contribute_DAO_Contribution', $params['contribution']->id, 'creditnote_id', $creditNoteId);
-          }
-        }
-        else {
-          // @todo we should stop passing $params by reference - splitting this out would be a step towards that.
-          $params['trxnParams']['from_financial_account_id'] = $arAccountId;
-        }
+      else {
+        // @todo we should stop passing $params by reference - splitting this out would be a step towards that.
+        $params['trxnParams']['from_financial_account_id'] = $arAccountId;
       }
+    }
 
-      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
-          // & this can be removed
-          return [FALSE, $isARefund];
-        }
-        // @todo we should stop passing $params by reference - splitting this out would be a step towards that.
-        // This is an update so original currency if none passed in.
-        $params['trxnParams']['currency'] = CRM_Utils_Array::value('currency', $params, $params['prevContribution']->currency);
+    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
+        // & this can be removed
+        return [FALSE, $isARefund];
+      }
+      // @todo we should stop passing $params by reference - splitting this out would be a step towards that.
+      // This is an update so original currency if none passed in.
+      $params['trxnParams']['currency'] = CRM_Utils_Array::value('currency', $params, $params['prevContribution']->currency);
 
-        self::recordAlwaysAccountsReceivable($params['trxnParams'], $params);
-        $trxn = CRM_Core_BAO_FinancialTrxn::create($params['trxnParams']);
-        // @todo we should stop passing $params by reference - splitting this out would be a step towards that.
-        $params['entity_id'] = self::$_trxnIDs[] = $trxn->id;
-        $query = "UPDATE civicrm_financial_item SET status_id = %1 WHERE entity_id = %2 and entity_table = 'civicrm_line_item'";
-        $sql = "SELECT id, amount FROM civicrm_financial_item WHERE entity_id = %1 and entity_table = 'civicrm_line_item'";
+      self::recordAlwaysAccountsReceivable($params['trxnParams'], $params);
+      $trxn = CRM_Core_BAO_FinancialTrxn::create($params['trxnParams']);
+      // @todo we should stop passing $params by reference - splitting this out would be a step towards that.
+      $params['entity_id'] = self::$_trxnIDs[] = $trxn->id;
+      $query = "UPDATE civicrm_financial_item SET status_id = %1 WHERE entity_id = %2 and entity_table = 'civicrm_line_item'";
+      $sql = "SELECT id, amount FROM civicrm_financial_item WHERE entity_id = %1 and entity_table = 'civicrm_line_item'";
 
-        $entityParams = [
-          'entity_table' => 'civicrm_financial_item',
-        ];
-        foreach ($params['line_item'] as $fieldId => $fields) {
-          foreach ($fields as $fieldValueId => $lineItemDetails) {
-            $fparams = [
-              1 => [
-                CRM_Core_PseudoConstant::getKey('CRM_Financial_BAO_FinancialItem', 'status_id', 'Paid'),
-                'Integer',
-              ],
-              2 => [$lineItemDetails['id'], 'Integer'],
-            ];
-            CRM_Core_DAO::executeQuery($query, $fparams);
-            $fparams = [
-              1 => [$lineItemDetails['id'], 'Integer'],
-            ];
-            $financialItem = CRM_Core_DAO::executeQuery($sql, $fparams);
-            while ($financialItem->fetch()) {
-              $entityParams['entity_id'] = $financialItem->id;
-              $entityParams['amount'] = $financialItem->amount;
-              foreach (self::$_trxnIDs as $tID) {
-                $entityParams['financial_trxn_id'] = $tID;
-                CRM_Financial_BAO_FinancialItem::createEntityTrxn($entityParams);
-              }
+      $entityParams = [
+        'entity_table' => 'civicrm_financial_item',
+      ];
+      foreach ($params['line_item'] as $fieldId => $fields) {
+        foreach ($fields as $fieldValueId => $lineItemDetails) {
+          $fparams = [
+            1 => [
+              CRM_Core_PseudoConstant::getKey('CRM_Financial_BAO_FinancialItem', 'status_id', 'Paid'),
+              'Integer',
+            ],
+            2 => [$lineItemDetails['id'], 'Integer'],
+          ];
+          CRM_Core_DAO::executeQuery($query, $fparams);
+          $fparams = [
+            1 => [$lineItemDetails['id'], 'Integer'],
+          ];
+          $financialItem = CRM_Core_DAO::executeQuery($sql, $fparams);
+          while ($financialItem->fetch()) {
+            $entityParams['entity_id'] = $financialItem->id;
+            $entityParams['amount'] = $financialItem->amount;
+            foreach (self::$_trxnIDs as $tID) {
+              $entityParams['financial_trxn_id'] = $tID;
+              CRM_Financial_BAO_FinancialItem::createEntityTrxn($entityParams);
             }
           }
         }
-        return [FALSE, $isARefund];
       }
+      return [FALSE, $isARefund];
     }
     return [TRUE, $isARefund];
   }
@@ -1634,7 +1633,7 @@ GROUP BY p.id
         $params[$contributionDAO->id]['amount'] = CRM_Utils_Money::format($contributionDAO->total_amount, $contributionDAO->currency);
         $params[$contributionDAO->id]['source'] = $contributionDAO->source;
         $params[$contributionDAO->id]['receive_date'] = $contributionDAO->receive_date;
-        $params[$contributionDAO->id]['contribution_status'] = CRM_Contribute_PseudoConstant::contributionStatus($contributionDAO->contribution_status_id);
+        $params[$contributionDAO->id]['contribution_status'] = CRM_Contribute_PseudoConstant::contributionStatus($contributionDAO->contribution_status_id, 'label');
       }
     }
 
@@ -3348,7 +3347,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
         WHERE con.id = %1 LIMIT 1";
     $params = [1 => [$contributionId, 'Integer']];
     $statusId = CRM_Core_DAO::singleValueQuery($sql, $params);
-    $status = CRM_Contribute_PseudoConstant::contributionStatus($statusId);
+    $status = CRM_Contribute_PseudoConstant::contributionStatus($statusId, 'name');
     if ($status == 'Cancelled') {
       return TRUE;
     }
@@ -3717,11 +3716,9 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
     $trxnID = NULL;
     $inputParams = $params;
     $isARefund = FALSE;
-    $currentContributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $params['contribution']->contribution_status_id);
-    $previousContributionStatus = CRM_Contribute_PseudoConstant::contributionStatus($params['prevContribution']->contribution_status_id, 'name');
 
     if ($context == 'changedStatus') {
-      list($continue, $isARefund) = self::updateFinancialAccountsOnContributionStatusChange($params, $context, $previousContributionStatus, $currentContributionStatus);
+      list($continue, $isARefund) = self::updateFinancialAccountsOnContributionStatusChange($params);
       // @todo - it may be that this is always false & the parent function is just a confusing wrapper for the child fn.
       if (!$continue) {
         return;
@@ -3773,8 +3770,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
         $params['line_item'][$fieldId][$fieldValueId]['financial_item_id'] = $financialItem->id;
 
         if (($lineItemDetails['tax_amount'] && $lineItemDetails['tax_amount'] !== 'null') || ($context == 'changeFinancialType')) {
-          $invoiceSettings = Civi::settings()->get('contribution_invoice_settings');
-          $taxTerm = CRM_Utils_Array::value('tax_term', $invoiceSettings);
           $taxAmount = (float) $lineItemDetails['tax_amount'];
           if ($context == 'changeFinancialType' && $lineItemDetails['tax_amount'] === 'null') {
             // reverse the Sale Tax amount if there is no tax rate associated with new Financial Type
@@ -3785,12 +3780,9 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
           }
           if ($taxAmount != 0) {
             $itemParams['amount'] = self::getMultiplier($params['contribution']->contribution_status_id, $context) * $taxAmount;
-            $itemParams['description'] = $taxTerm;
+            $itemParams['description'] = CRM_Invoicing_Utils::getTaxTerm();
             if ($lineItemDetails['financial_type_id']) {
-              $itemParams['financial_account_id'] = CRM_Contribute_PseudoConstant::getRelationalFinancialAccount(
-                $lineItemDetails['financial_type_id'],
-                'Sales Tax Account is'
-              );
+              $itemParams['financial_account_id'] = CRM_Financial_BAO_FinancialAccount::getSalesTaxFinancialAccount($lineItemDetails['financial_type_id']);
             }
             CRM_Financial_BAO_FinancialItem::create($itemParams, NULL, $trxnIds);
           }
@@ -4089,7 +4081,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
         2 => [$feeFinancialAccount, 'Integer'],
       ];
       $resultDAO = CRM_Core_DAO::executeQuery($sql, $queryParams);
-      $statuses = CRM_Contribute_PseudoConstant::contributionStatus();
+      $statuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
 
       while ($resultDAO->fetch()) {
         $paidByLabel = CRM_Core_PseudoConstant::getLabel('CRM_Core_BAO_FinancialTrxn', 'payment_instrument_id', $resultDAO->payment_instrument_id);
@@ -4690,7 +4682,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
     // if we are still empty see if we can use anything from a contribution page.
     if (!empty($pageValues['receipt_from_email'])) {
       return [
-        $pageValues['receipt_from_name'],
+        CRM_Utils_Array::value('receipt_from_name', $pageValues),
         $pageValues['receipt_from_email'],
       ];
     }
index 233377eb157f9c29984fbc23b22bf1aed276822b..38e7cb999a7ffd7af59106bc7da63afd3120338d 100644 (file)
@@ -428,14 +428,31 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
    * @throws \CiviCRM_API3_Exception
    */
   public static function getTemplateContribution($id, $overrides = []) {
-    $templateContribution = civicrm_api3('Contribution', 'get', [
-      'contribution_recur_id' => $id,
-      'options' => ['limit' => 1, 'sort' => ['id DESC']],
-      'sequential' => 1,
-      'contribution_test' => '',
+    // use api3 because api4 doesn't handle ContributionRecur yet...
+    $is_test = civicrm_api3('ContributionRecur', 'getvalue', [
+      'return' => "is_test",
+      'id' => $id,
     ]);
-    if ($templateContribution['count']) {
-      $result = array_merge($templateContribution['values'][0], $overrides);
+    // First look for new-style template contribution with is_template=1
+    $templateContributions = \Civi\Api4\Contribution::get()
+      ->addWhere('contribution_recur_id', '=', $id)
+      ->addWhere('is_template', '=', 1)
+      ->addWhere('is_test', '=', $is_test)
+      ->addOrderBy('id', 'DESC')
+      ->setLimit(1)
+      ->execute();
+    if (!$templateContributions->count()) {
+      // Fall back to old style template contributions
+      $templateContributions = \Civi\Api4\Contribution::get()
+        ->addWhere('contribution_recur_id', '=', $id)
+        ->addWhere('is_test', '=', $is_test)
+        ->addOrderBy('id', 'DESC')
+        ->setLimit(1)
+        ->execute();
+    }
+    if ($templateContributions->count()) {
+      $templateContribution = $templateContributions->first();
+      $result = array_merge($templateContribution, $overrides);
       $result['line_item'] = CRM_Contribute_BAO_ContributionRecur::calculateRecurLineItems($id, $result['total_amount'], $result['financial_type_id']);
       return $result;
     }
@@ -757,7 +774,7 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
 
     // Add field for contribution status
     $form->addSelect('contribution_recur_contribution_status_id',
-      ['entity' => 'contribution', 'multiple' => 'multiple', 'context' => 'search', 'options' => CRM_Contribute_PseudoConstant::contributionStatus()]
+      ['entity' => 'contribution', 'multiple' => 'multiple', 'context' => 'search', 'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search')]
     );
 
     $form->addElement('text', 'contribution_recur_processor_id', ts('Processor ID'), CRM_Core_DAO::getAttribute('CRM_Contribute_DAO_ContributionRecur', 'processor_id'));
index 1e160fc352153a9521ea66ca2cfaa042943799fe..226544fc227e2364918ea9e434cd711c450b1aaa 100644 (file)
@@ -160,24 +160,14 @@ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query {
       $quoteValue = "\"$value\"";
     }
 
-    // These are legacy names.
-    // @todo enotices when these are hit so we can start to elimnate them.
-    $fieldAliases = [
-      'financial_type' => 'financial_type_id',
-      'contribution_page' => 'contribution_page_id',
-      'payment_instrument' => 'payment_instrument_id',
-      // or payment_instrument_id?
-      'contribution_payment_instrument' => 'contribution_payment_instrument_id',
-      'contribution_status' => 'contribution_status_id',
-    ];
+    $fieldAliases = self::getLegacySupportedFields();
 
-    $name = isset($fieldAliases[$name]) ? $fieldAliases[$name] : $name;
+    $fieldName = $name = self::getFieldName($values);
     $qillName = $name;
     if (in_array($name, $fieldAliases)) {
       $qillName = array_search($name, $fieldAliases);
     }
     $pseudoExtraParam = [];
-    $fieldName = str_replace(['_high', '_low'], '', $name);
     $fieldSpec = CRM_Utils_Array::value($fieldName, $fields, []);
     $tableName = CRM_Utils_Array::value('table_name', $fieldSpec, 'civicrm_contribution');
     $dataType = CRM_Utils_Type::typeToString(CRM_Utils_Array::value('type', $fieldSpec));
@@ -933,7 +923,7 @@ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query {
   }
 
   /**
-   * Add all the elements shared between contribute search and advnaced search.
+   * Add all the elements shared between contribute search and advanced search.
    *
    * @param \CRM_Contribute_Form_Search $form
    *
@@ -986,7 +976,7 @@ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query {
       ts('Personal Campaign Page'),
       CRM_Contribute_PseudoConstant::pcPage(), FALSE, ['class' => 'crm-select2', 'multiple' => 'multiple', 'placeholder' => ts('- any -')]);
 
-    $statusValues = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'contribution_status_id');
+    $statusValues = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search');
     $form->add('select', 'contribution_status_id',
       ts('Contribution Status'), $statusValues,
       FALSE, ['class' => 'crm-select2', 'multiple' => 'multiple']
index a30e2042ea9741a8e48e74c956cc600df3682ec6..018f1e0c1f463579a84d134592125d7ff1f6ee69 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/Contribution.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:b4e84298d9ba23d3b2fae0768fc5cb58)
+ * (GenCodeChecksum:a9f83aa612e82ee87ace74e75fe23466)
  */
 
 /**
@@ -226,6 +226,13 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO {
    */
   public $revenue_recognition_date;
 
+  /**
+   * Shows this is a template for recurring contributions.
+   *
+   * @var bool
+   */
+  public $is_template;
+
   /**
    * Class constructor.
    */
@@ -839,6 +846,23 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO {
             'formatType' => 'activityDateTime',
           ],
         ],
+        'is_template' => [
+          'name' => 'is_template',
+          'type' => CRM_Utils_Type::T_BOOLEAN,
+          'title' => ts('Is a Template Contribution'),
+          'description' => ts('Shows this is a template for recurring contributions.'),
+          'import' => TRUE,
+          'where' => 'civicrm_contribution.is_template',
+          'export' => TRUE,
+          'default' => '0',
+          'table_name' => 'civicrm_contribution',
+          'entity' => 'Contribution',
+          'bao' => 'CRM_Contribute_BAO_Contribution',
+          'localizable' => 0,
+          'html' => [
+            'type' => 'CheckBox',
+          ],
+        ],
       ];
       CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
     }
index 4ba652bdae28b59368ba985f0bbf12f8215a2ff1..69a3cefef865f8cc684bad2ad6eac628060c08fd 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/ContributionPage.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:70763e4804af1e4e3ddbac7b60cbd242)
+ * (GenCodeChecksum:35e26556fcbed13acc434279f2ebaee5)
  */
 
 /**
@@ -343,6 +343,13 @@ class CRM_Contribute_DAO_ContributionPage extends CRM_Core_DAO {
    */
   public $is_billing_required;
 
+  /**
+   * Contribution Page Public title
+   *
+   * @var string
+   */
+  public $frontend_title;
+
   /**
    * Class constructor.
    */
@@ -993,6 +1000,23 @@ class CRM_Contribute_DAO_ContributionPage extends CRM_Core_DAO {
           'bao' => 'CRM_Contribute_BAO_ContributionPage',
           'localizable' => 0,
         ],
+        'contribution_page_frontend_title' => [
+          'name' => 'frontend_title',
+          'type' => CRM_Utils_Type::T_STRING,
+          'title' => ts('Public Title'),
+          'description' => ts('Contribution Page Public title'),
+          'maxlength' => 255,
+          'size' => CRM_Utils_Type::HUGE,
+          'where' => 'civicrm_contribution_page.frontend_title',
+          'default' => 'NULL',
+          'table_name' => 'civicrm_contribution_page',
+          'entity' => 'ContributionPage',
+          'bao' => 'CRM_Contribute_BAO_ContributionPage',
+          'localizable' => 1,
+          'html' => [
+            'type' => 'Text',
+          ],
+        ],
       ];
       CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
     }
index aafbf0a4231c13d36ebdc66f6674a0e257b204af..bc37b6f8a9be49b9fe43ab4a63b2f1dffabc803e 100644 (file)
@@ -578,9 +578,7 @@ WHERE  contribution_id = {$id}
         $this->_params['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($this->_params);
       }
       $this->assign('credit_card_exp_date', CRM_Utils_Date::mysqlToIso(CRM_Utils_Date::format($this->_params['credit_card_exp_date'])));
-      $this->assign('credit_card_number',
-        CRM_Utils_System::mungeCreditCard($this->_params['credit_card_number'])
-      );
+      $this->assign('credit_card_number', CRM_Utils_System::mungeCreditCard($this->_params['credit_card_number']));
       $this->assign('credit_card_type', CRM_Utils_Array::value('credit_card_type', $this->_params));
     }
     $this->_params['ip_address'] = CRM_Utils_System::ipAddress();
index fdb7c478f3a9c81eb86813aa1df0568dee07aaf0..e6aceaa3dd7a362dad8309a4c97d19aa2343c9fe 100644 (file)
@@ -108,18 +108,18 @@ class CRM_Contribute_Form_AdditionalPayment extends CRM_Contribute_Form_Abstract
       $this->_fromEmails['from_email_id'] = CRM_Core_BAO_Email::getFromEmail();
     }
 
-    $paymentInfo = CRM_Core_BAO_FinancialTrxn::getPartialPaymentWithType($this->_id, $entityType);
     $paymentDetails = CRM_Contribute_BAO_Contribution::getPaymentInfo($this->_id, $this->_component, FALSE, TRUE);
+    $paymentAmt = CRM_Contribute_BAO_Contribution::getContributionBalance($this->_id);
 
     $this->_amtPaid = $paymentDetails['paid'];
     $this->_amtTotal = $paymentDetails['total'];
 
-    if (!empty($paymentInfo['refund_due'])) {
-      $paymentAmt = $this->_refund = $paymentInfo['refund_due'];
+    if ($paymentAmt < 0) {
+      $this->_refund = $paymentAmt;
       $this->_paymentType = 'refund';
     }
-    elseif (!empty($paymentInfo['amount_owed'])) {
-      $paymentAmt = $this->_owed = $paymentInfo['amount_owed'];
+    elseif ($paymentAmt > 0) {
+      $this->_owed = $paymentAmt;
       $this->_paymentType = 'owed';
     }
     else {
@@ -520,18 +520,18 @@ class CRM_Contribute_Form_AdditionalPayment extends CRM_Contribute_Form_Abstract
     if (!empty($params['contribution_id'])) {
       $this->_contributionId = $params['contribution_id'];
 
-      $paymentInfo = CRM_Core_BAO_FinancialTrxn::getPartialPaymentWithType($this->_contributionId, $entityType);
       $paymentDetails = CRM_Contribute_BAO_Contribution::getPaymentInfo($this->_contributionId, $entityType, FALSE, TRUE);
 
+      $paymentAmount = CRM_Contribute_BAO_Contribution::getContributionBalance($this->_contributionId);
       $this->_amtPaid = $paymentDetails['paid'];
       $this->_amtTotal = $paymentDetails['total'];
 
-      if (!empty($paymentInfo['refund_due'])) {
-        $this->_refund = $paymentInfo['refund_due'];
+      if ($paymentAmount < 0) {
+        $this->_refund = $paymentAmount;
         $this->_paymentType = 'refund';
       }
-      elseif (!empty($paymentInfo['amount_owed'])) {
-        $this->_owed = $paymentInfo['amount_owed'];
+      elseif ($paymentAmount > 0) {
+        $this->_owed = $paymentAmount;
         $this->_paymentType = 'owed';
       }
     }
index 8f7e170fddb1609ba710796344c9066caf9ca530..a977f45dde3db6fb75b2e5aab908941b808d262a 100644 (file)
@@ -1537,8 +1537,9 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
         if (!empty($form->_params['membership_source'])) {
           $membershipSource = $form->_params['membership_source'];
         }
-        elseif (isset($form->_values['title']) && !empty($form->_values['title'])) {
-          $membershipSource = ts('Online Contribution:') . ' ' . $form->_values['title'];
+        elseif ((isset($form->_values['title']) && !empty($form->_values['title'])) || (isset($form->_values['frontend_title']) && !empty($form->_values['frontend_title']))) {
+          $title = !empty($form->_values['frontend_title']) ? $form->_values['frontend_title'] : $form->_values['title'];
+          $membershipSource = ts('Online Contribution:') . ' ' . $title;
         }
         $isPayLater = NULL;
         if (isset($form->_params)) {
@@ -1554,7 +1555,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
 
         // @todo Move this into CRM_Member_BAO_Membership::processMembership
         if (!empty($membershipContribution)) {
-          $pending = ($membershipContribution->contribution_status_id == array_search('Pending', CRM_Contribute_PseudoConstant::contributionStatus())) ? TRUE : FALSE;
+          $pending = ($membershipContribution->contribution_status_id == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending')) ? TRUE : FALSE;
         }
         else {
           $pending = $this->getIsPending();
@@ -1575,8 +1576,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
         }
 
         if (!empty($membershipContribution)) {
-          // update recurring id for membership record
-          CRM_Member_BAO_Membership::updateRecurMembership($membership, $membershipContribution);
           // Next line is probably redundant. Checks prevent it happening twice.
           $membershipPaymentParams = [
             'membership_id' => $membership->id,
@@ -2058,7 +2057,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
       }
     }
     // add a description field at the very beginning
-    $this->_params['description'] = ts('Online Contribution') . ': ' . (($this->_pcpInfo['title']) ? $this->_pcpInfo['title'] : $this->_values['title']);
+    $title = !empty($this->_values['frontend_title']) ? $this->_values['frontend_title'] : $this->_values['title'];
+    $this->_params['description'] = ts('Online Contribution') . ': ' . (!empty($this->_pcpInfo['title']) ? $this->_pcpInfo['title'] : $title);
 
     $this->_params['accountingCode'] = CRM_Utils_Array::value('accountingCode', $this->_values);
 
index 6b8d915b8d5d8875cc5f67b17153126c9bd42ba8..1a23147d47bd8ed3cd14515cf53f556fef76f573 100644 (file)
@@ -1217,7 +1217,8 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu
     $invoiceID = md5(uniqid(rand(), TRUE));
     $this->set('invoiceID', $invoiceID);
     $params['invoiceID'] = $invoiceID;
-    $params['description'] = ts('Online Contribution') . ': ' . ((!empty($this->_pcpInfo['title']) ? $this->_pcpInfo['title'] : $this->_values['title']));
+    $title = !empty($this->_values['frontend_title']) ? $this->_values['frontend_title'] : $this->_values['title'];
+    $params['description'] = ts('Online Contribution') . ': ' . ((!empty($this->_pcpInfo['title']) ? $this->_pcpInfo['title'] : $title));
     $params['button'] = $this->controller->getButtonName();
     // required only if is_monetary and valid positive amount
     // @todo it seems impossible for $memFee to be greater than 0 & $params['amount'] not to
index 0399436fd8c180c25b2d8696ea11e73022f649f4..21cc18e75a1cc2cba6f4df2f939c3756677c011b 100644 (file)
@@ -286,9 +286,6 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form {
 
     // we do not want to display recently viewed items, so turn off
     $this->assign('displayRecent', FALSE);
-    // Contribution page values are cleared from session, so can't use normal Printer Friendly view.
-    // Use Browser Print instead.
-    $this->assign('browserPrint', TRUE);
 
     // action
     $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE, 'add');
@@ -471,7 +468,9 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form {
       CRM_Utils_Array::value('cancelSubscriptionUrl', $this->_values)
     );
 
-    $this->setTitle(($this->_pcpId ? $this->_pcpInfo['title'] : $this->_values['title']));
+    $title = !empty($this->_values['frontend_title']) ? $this->_values['frontend_title'] : $this->_values['title'];
+
+    $this->setTitle(($this->_pcpId ? $this->_pcpInfo['title'] : $title));
     $this->_defaults = [];
 
     $this->_amount = $this->get('amount');
index ac5866da5bd00bd10a6453274356642e48dfa157..158db37c79d4a4dfa8e2b2aed42b6f972998afeb 100644 (file)
@@ -173,11 +173,11 @@ class CRM_Contribute_Form_ContributionCharts extends CRM_Core_Form {
         $monthlyChart = TRUE;
       }
 
-      $values['divName'] = "open_flash_chart_{$chartKey}";
+      $values['divName'] = "chart_{$chartKey}";
       $funName = ($chartType == 'bvg') ? 'barChart' : 'pieChart';
 
       // build the chart objects.
-      $values['object'] = CRM_Utils_OpenFlashChart::$funName($values);
+      $values['object'] = CRM_Utils_Chart::$funName($values);
 
       //build the urls.
       $urlCnt = 0;
@@ -230,8 +230,8 @@ class CRM_Contribute_Form_ContributionCharts extends CRM_Core_Form {
     // finally assign this chart data to template.
     $this->assign('hasYearlyChart', $yearlyChart);
     $this->assign('hasByMonthChart', $monthlyChart);
-    $this->assign('hasOpenFlashChart', empty($chartData) ? FALSE : TRUE);
-    $this->assign('openFlashChartData', json_encode($chartData));
+    $this->assign('hasChart', empty($chartData) ? FALSE : TRUE);
+    $this->assign('chartData', json_encode($chartData ?? []));
   }
 
 }
index 0e7ae3ae58f8258ad42115e39a3d69bf959b0ec5..55fe85b695d107c40d8f98a060ac10d56bdd45be 100644 (file)
@@ -135,6 +135,7 @@ class CRM_Contribute_Form_ContributionPage_Settings extends CRM_Contribute_Form_
 
     // name
     $this->add('text', 'title', ts('Title'), $attributes['title'], TRUE);
+    $this->addField('contribution_page_frontend_title', ['entity' => 'ContributionPage']);
 
     //CRM-7362 --add campaigns.
     CRM_Campaign_BAO_Campaign::addCampaign($this, CRM_Utils_Array::value('campaign_id', $this->_values));
index fe892ed80159347a45f21ac0314f4486fdf465f8..6923169fe6b902cc1ba28a44347e1ea7cdcdd59d 100644 (file)
@@ -86,14 +86,7 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
 
     $this->loadStandardSearchOptionsFromUrl();
 
-    // get user submitted values
-    // get it from controller only if form has been submitted, else preProcess has set this
-    if (!empty($_POST)) {
-      $this->_formValues = $this->controller->exportValues($this->_name);
-    }
-    else {
-      $this->_formValues = $this->get('formValues');
-    }
+    $this->_formValues = $this->getFormValues();
 
     //membership ID
     $memberShipId = CRM_Utils_Request::retrieve('memberId', 'Positive', $this);
@@ -106,12 +99,7 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
     }
 
     if ($this->_force) {
-      // Search field metadata is normally added in buildForm but we are bypassing that in this flow
-      // (I've always found the flow kinda confusing & perhaps that is the problem but this mitigates)
-      $this->addSearchFieldMetadata(['Contribution' => CRM_Contribute_BAO_Query::getSearchFieldMetadata()]);
-      $this->addSearchFieldMetadata(['ContributionRecur' => CRM_Contribute_BAO_ContributionRecur::getContributionRecurSearchFieldMetadata()]);
-      $this->postProcess();
-      $this->set('force', 0);
+      $this->handleForcedSearch();
     }
 
     $sortID = NULL;
@@ -482,4 +470,14 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
     return ts('Find Contributions');
   }
 
+  /**
+   * Set the metadata for the form.
+   *
+   * @throws \CiviCRM_API3_Exception
+   */
+  protected function setSearchMetadata() {
+    $this->addSearchFieldMetadata(['Contribution' => CRM_Contribute_BAO_Query::getSearchFieldMetadata()]);
+    $this->addSearchFieldMetadata(['ContributionRecur' => CRM_Contribute_BAO_ContributionRecur::getContributionRecurSearchFieldMetadata()]);
+  }
+
 }
index 55447fd77a6ba59ff7dd7ac8c9d7e370d16ab14e..23cea476ede62e9a501765bbbae9561dc8a93cf2 100644 (file)
@@ -94,9 +94,9 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task {
       parent::preProcess();
     }
 
-    // check that all the contribution ids have status Completed, Pending, Refunded.
+    // check that all the contribution ids have status Completed, Pending, Refunded, or Partially Paid.
     $this->_contributionStatusId = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
-    $status = ['Completed', 'Pending', 'Refunded'];
+    $status = ['Completed', 'Pending', 'Refunded', 'Partially paid'];
     $statusId = [];
     foreach ($this->_contributionStatusId as $key => $value) {
       if (in_array($value, $status)) {
@@ -107,7 +107,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task {
     $query = "SELECT count(*) FROM civicrm_contribution WHERE contribution_status_id NOT IN ($Id) AND {$this->_componentClause}";
     $count = CRM_Core_DAO::singleValueQuery($query);
     if ($count != 0) {
-      CRM_Core_Error::statusBounce(ts('Please select only contributions with Completed, Pending, Refunded status.'));
+      CRM_Core_Error::statusBounce(ts('Please select only contributions with Completed, Pending, Refunded, or Partially Paid status.'));
     }
 
     // we have all the contribution ids, so now we get the contact ids
index 388362b05cef6830c5f2698776aaa52ecc882fe8..7642a9172bb0be6bf70036bd23cb935e77a6362f 100644 (file)
@@ -84,10 +84,16 @@ AND    {$this->_componentClause}";
    * Build the form object.
    */
   public function buildQuickForm() {
-    $status = CRM_Contribute_PseudoConstant::contributionStatus();
-    unset($status[2]);
-    unset($status[5]);
-    unset($status[6]);
+    $status = CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses(
+      'contribution', $this->_contributionIds[0]
+    );
+    $byName = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
+    // FIXME: if it's invalid to transition from Pending to
+    // In Progress or Overdue, we should move that logic to
+    // CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses.
+    foreach (['Pending', 'In Progress', 'Overdue'] as $suppress) {
+      unset($status[CRM_Utils_Array::key($suppress, $byName)]);
+    }
     $this->add('select', 'contribution_status_id',
       ts('Contribution Status'),
       $status,
index 7fc5fe9ac2cbef9a8f56d1c6cbc753f01bbff0e9..49cb0522e83a6615e7aca2ddf63bc48d06fe184a 100644 (file)
@@ -896,7 +896,7 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Contribute_Import_Pa
 
           // giving respect to pledge_payment flag.
           if (empty($params['pledge_payment'])) {
-            continue;
+            break;
           }
 
           // get total amount of from import fields
index b93544e30703228495383a676e633365e3f4dd01..742e47ec63409fb6ec308fc86234688af48b9b60 100644 (file)
 class CRM_Contribute_Page_Tab extends CRM_Core_Page {
 
   /**
-   * The action links that we need to display for the browse screen.
+   * The permission we have on this contact
    *
-   * @var array
+   * @var string
    */
-  public static $_links = NULL;
-  public static $_recurLinks = NULL;
   public $_permission = NULL;
+
+  /**
+   * The contact ID for the contributions we are acting on
+   * @var int
+   */
   public $_contactId = NULL;
+
+  /**
+   * The recurring contribution ID (if any)
+   * @var int
+   */
   public $_crid = NULL;
 
   /**
@@ -55,59 +63,56 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page {
    *
    * @return array
    */
-  public static function &recurLinks($recurID = FALSE, $context = 'contribution') {
-    if (!(self::$_links)) {
-      self::$_links = [
-        CRM_Core_Action::VIEW => [
-          'name' => ts('View'),
-          'title' => ts('View Recurring Payment'),
-          'url' => 'civicrm/contact/view/contributionrecur',
-          'qs' => "reset=1&id=%%crid%%&cid=%%cid%%&context={$context}",
-        ],
-        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',
-        ],
-      ];
-    }
+  public static function recurLinks($recurID = FALSE, $context = 'contribution') {
+    $links = [
+      CRM_Core_Action::VIEW => [
+        'name' => ts('View'),
+        'title' => ts('View Recurring Payment'),
+        'url' => 'civicrm/contact/view/contributionrecur',
+        'qs' => "reset=1&id=%%crid%%&cid=%%cid%%&context={$context}",
+      ],
+      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',
+      ],
+    ];
 
     if ($recurID) {
-      $links = self::$_links;
       $paymentProcessorObj = CRM_Contribute_BAO_ContributionRecur::getPaymentProcessorObject($recurID);
-      if (!$paymentProcessorObj) {
-        unset($links[CRM_Core_Action::DISABLE]);
-        unset($links[CRM_Core_Action::UPDATE]);
-        return $links;
-      }
-      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";
-        $links[CRM_Core_Action::DISABLE]['qs'] = "reset=1&crid=%%crid%%&cid=%%cid%%&context={$context}";
-      }
+      if ($paymentProcessorObj) {
+        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";
+          $links[CRM_Core_Action::DISABLE]['qs'] = "reset=1&crid=%%crid%%&cid=%%cid%%&context={$context}";
+        }
 
-      if ($paymentProcessorObj->supports('UpdateSubscriptionBillingInfo')) {
-        $links[CRM_Core_Action::RENEW] = [
-          'name' => ts('Change Billing Details'),
-          'title' => ts('Change Billing Details'),
-          'url' => 'civicrm/contribute/updatebilling',
-          'qs' => "reset=1&crid=%%crid%%&cid=%%cid%%&context={$context}",
-        ];
-      }
+        if ($paymentProcessorObj->supports('UpdateSubscriptionBillingInfo')) {
+          $links[CRM_Core_Action::RENEW] = [
+            'name' => ts('Change Billing Details'),
+            'title' => ts('Change Billing Details'),
+            'url' => 'civicrm/contribute/updatebilling',
+            'qs' => "reset=1&crid=%%crid%%&cid=%%cid%%&context={$context}",
+          ];
+        }
 
-      if (!$paymentProcessorObj->supports('ChangeSubscriptionAmount') && !$paymentProcessorObj->supports('EditRecurringContribution')) {
+        if (!$paymentProcessorObj->supports('ChangeSubscriptionAmount') && !$paymentProcessorObj->supports('EditRecurringContribution')) {
+          unset($links[CRM_Core_Action::UPDATE]);
+        }
+      }
+      else {
+        unset($links[CRM_Core_Action::DISABLE]);
         unset($links[CRM_Core_Action::UPDATE]);
       }
-      return $links;
     }
 
-    return self::$_links;
+    return $links;
   }
 
   /**
@@ -196,7 +201,7 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page {
    * Loads active recurring contributions for the current contact and formats
    * them to be used on the form.
    *
-   * @return array;
+   * @return array
    */
   private function getActiveRecurringContributions() {
     try {
@@ -218,7 +223,7 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page {
    * Loads inactive recurring contributions for the current contact and formats
    * them to be used on the form.
    *
-   * @return array;
+   * @return array
    */
   private function getInactiveRecurringContributions() {
     try {
@@ -239,7 +244,7 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page {
   /**
    * @param $recurContributions
    *
-   * @return mixed
+   * @return array
    */
   private function buildRecurringContributionsArray($recurContributions) {
     $liveRecurringContributionCount = 0;
@@ -327,6 +332,10 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page {
     return $controller->run();
   }
 
+  /**
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
+   */
   public function preProcess() {
     $context = CRM_Utils_Request::retrieve('context', 'Alphanumeric', $this);
     $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this, FALSE, 'browse');
@@ -361,7 +370,8 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page {
    * the main function that is called when the page
    * loads, it decides the which action has to be taken for the page.
    *
-   * @return null
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public function run() {
     $this->preProcess();
@@ -381,9 +391,12 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page {
       $this->browse();
     }
 
-    return parent::run();
+    parent::run();
   }
 
+  /**
+   * @throws \CRM_Core_Exception
+   */
   public function setContext() {
     $qfKey = CRM_Utils_Request::retrieve('key', 'String', $this);
     $context = CRM_Utils_Request::retrieve('context', 'Alphanumeric',
index 289051836a9da2c400e79f99765f4822e6241094..c0a635ad4dfba72aec74e873c2cabf7e6e859690 100644 (file)
@@ -96,7 +96,7 @@ class CRM_Contribute_Page_UserDashboard extends CRM_Contact_Page_View_UserDashBo
     $recur->is_test = 0;
     $recur->find();
 
-    $recurStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $recurStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
 
     $recurRow = [];
     $recurIDs = [];
index 26907960b8567e8038d5ef54fe9c532f1161ee4a..e5c013ddf7fe1fcfbf66e4378ca42fb0be7ccdb0 100644 (file)
@@ -596,6 +596,9 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
       ) {
         continue;
       }
+      if (!empty($values['text_length'])) {
+        $values['maxlength'] = (int) $values['text_length'];
+      }
 
       /* generate the key for the fields array */
 
index 2c89838c40ba87704ecba71db6d9e47488704c43..a94154d178f63da4bea9d3aca6b3d5b4df798900 100644 (file)
@@ -357,13 +357,39 @@ class CRM_Core_BAO_Dashboard extends CRM_Core_DAO_Dashboard {
       }
     }
 
-    // Disable inactive widgets
-    $dashletClause = $dashletIDs ? "dashboard_id NOT IN  (" . implode(',', $dashletIDs) . ")" : '(1)';
+    // Find dashlets in this domain.
+    $domainDashlets = civicrm_api3('Dashboard', 'get', [
+      'return' => array('id'),
+      'domain_id' => CRM_Core_Config::domainID(),
+      'options' => ['limit' => 0],
+    ]);
+
+    // Get the array of IDs.
+    $domainDashletIDs = [];
+    if ($domainDashlets['is_error'] == 0) {
+      $domainDashletIDs = CRM_Utils_Array::collect('id', $domainDashlets['values']);
+    }
+
+    // Restrict query to Dashlets in this domain.
+    $domainDashletClause = !empty($domainDashletIDs) ? "dashboard_id IN (" . implode(',', $domainDashletIDs) . ")" : '(1)';
+
+    // Target only those Dashlets which are inactive.
+    $dashletClause = $dashletIDs ? "dashboard_id NOT IN (" . implode(',', $dashletIDs) . ")" : '(1)';
+
+    // Build params.
+    $params = [
+      1 => [$contactID, 'Integer'],
+    ];
+
+    // Build query.
     $updateQuery = "UPDATE civicrm_dashboard_contact
                     SET is_active = 0
-                    WHERE $dashletClause AND contact_id = {$contactID}";
+                    WHERE $domainDashletClause
+                    AND $dashletClause
+                    AND contact_id = %1";
 
-    CRM_Core_DAO::executeQuery($updateQuery);
+    // Disable inactive widgets.
+    CRM_Core_DAO::executeQuery($updateQuery, $params);
   }
 
   /**
index a0a28476edc2777c95dcf5b4accb80d980df820f..7bf3ae3918b36f22f85035220b9a5d5cd8c03608 100644 (file)
@@ -40,6 +40,13 @@ class CRM_Core_BAO_File extends CRM_Core_DAO_File {
 
   public static $_signableFields = ['entityTable', 'entityID', 'fileID'];
 
+  /**
+   * If there is no setting configured on the admin screens, maximum number
+   * of attachments to try to process when given a list of attachments to
+   * process.
+   */
+  const DEFAULT_MAX_ATTACHMENTS_BACKEND = 100;
+
   /**
    * Takes an associative array and creates a File object.
    *
@@ -596,24 +603,37 @@ AND       CEF.entity_id    = %2";
    * @param int $entityID
    */
   public static function processAttachment(&$params, $entityTable, $entityID) {
-    $numAttachments = Civi::settings()->get('max_attachments');
+    $numAttachments = Civi::settings()->get('max_attachments_backend') ?? self::DEFAULT_MAX_ATTACHMENTS_BACKEND;
 
     for ($i = 1; $i <= $numAttachments; $i++) {
-      if (
-        isset($params["attachFile_$i"]) &&
-        is_array($params["attachFile_$i"])
-      ) {
-        self::filePostProcess(
-          $params["attachFile_$i"]['location'],
-          NULL,
-          $entityTable,
-          $entityID,
-          NULL,
-          TRUE,
-          $params["attachFile_$i"],
-          "attachFile_$i",
-          $params["attachFile_$i"]['type']
-        );
+      if (isset($params["attachFile_$i"])) {
+        /**
+         * Moved the second condition into its own if block to avoid changing
+         * how it works if there happens to be an entry that is not an array,
+         * since we now might exit loop early via newly added break below.
+         */
+        if (is_array($params["attachFile_$i"])) {
+          self::filePostProcess(
+            $params["attachFile_$i"]['location'],
+            NULL,
+            $entityTable,
+            $entityID,
+            NULL,
+            TRUE,
+            $params["attachFile_$i"],
+            "attachFile_$i",
+            $params["attachFile_$i"]['type']
+          );
+        }
+      }
+      else {
+        /**
+         * No point looping 100 times if there aren't any more.
+         * This assumes the array is continuous and doesn't skip array keys,
+         * but (a) where would it be doing that, and (b) it would have caused
+         * problems before anyway if there were skipped keys.
+         */
+        break;
       }
     }
   }
index b02538e4294d08ae3b409854e590bac877feb6d2..995fb6403ab8d9cb33d3674151aba10a80fd7b0c 100644 (file)
@@ -454,6 +454,7 @@ WHERE ceft.entity_id = %1";
    * @return array
    */
   public static function getPartialPaymentWithType($entityId, $entityName = 'participant', $lineItemTotal = NULL) {
+    CRM_Core_Error::deprecatedFunctionWarning('CRM_Contribute_BAO_Contribution::getContributionBalance');
     $value = NULL;
     if (empty($entityName)) {
       return $value;
index 5e700a7ae01e61f09c7e73e0f0ce09dc0df65f16..f6b3374890b3f9f5fecf2b3ff460cb81fcae5c36 100644 (file)
@@ -58,6 +58,27 @@ class CRM_Core_BAO_Query {
     }
   }
 
+  /**
+   * Get legacy fields which we still maybe support.
+   *
+   * These are contribution specific but I think it's ok to have one list of legacy supported
+   * params in a central place.
+   *
+   * @return array
+   */
+  protected static function getLegacySupportedFields(): array {
+    // @todo enotices when these are hit so we can start to elimnate them.
+    $fieldAliases = [
+      'financial_type' => 'financial_type_id',
+      'contribution_page' => 'contribution_page_id',
+      'payment_instrument' => 'payment_instrument_id',
+      // or payment_instrument_id?
+      'contribution_payment_instrument' => 'contribution_payment_instrument_id',
+      'contribution_status' => 'contribution_status_id',
+    ];
+    return $fieldAliases;
+  }
+
   /**
    * Getter for the qill object.
    *
@@ -80,4 +101,22 @@ class CRM_Core_BAO_Query {
    */
   public static function tableNames(&$tables) {}
 
+  /**
+   * Get the name of the field.
+   *
+   * @param array $values
+   *
+   * @return string
+   */
+  protected static function getFieldName($values) {
+    $name = $values[0];
+    $fieldAliases = self::getLegacySupportedFields();
+    if (isset($fieldAliases[$name])) {
+      CRM_Core_Error::deprecatedFunctionWarning('These parameters should be standardised before we get here');
+      return $fieldAliases[$name];
+    }
+
+    return str_replace(['_high', '_low'], '', $name);
+  }
+
 }
index daf86a7806e71b1ae71a00c3d7adb7e7cc5b8cc1..67648230068b796ef57e442392cd9947928f4479 100644 (file)
@@ -31,7 +31,7 @@
  * @copyright CiviCRM LLC (c) 2004-2019
  */
 
-require_once 'packages/When/When.php';
+use When\When;
 
 /**
  * Class CRM_Core_BAO_RecurringEntity.
@@ -240,7 +240,7 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity {
    */
   public function generateRecursion() {
     // return if already generated
-    if (is_a($this->recursion, 'When')) {
+    if (is_a($this->recursion, 'When\When')) {
       return $this->recursion;
     }
 
@@ -334,7 +334,7 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity {
     $this->generateRecursion();
 
     $recursionDates = [];
-    if (is_a($this->recursion, 'When')) {
+    if (is_a($this->recursion, 'When\When')) {
       $initialCount = CRM_Utils_Array::value('start_action_offset', $this->schedule);
 
       $exRangeStart = $exRangeEnd = NULL;
@@ -343,8 +343,12 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity {
         $exRangeEnd = $this->excludeDateRangeColumns[1];
       }
 
+      if (CRM_Core_Config::singleton()->userFramework == 'UnitTests') {
+        $this->recursion->RFC5545_COMPLIANT = When::IGNORE;
+      }
       $count = 1;
-      while ($result = $this->recursion->next()) {
+      $result = $this->recursion_start_date;
+      while ($result = $this->getNextOccurrence($result)) {
         $skip = FALSE;
         if ($result == $this->recursion_start_date) {
           // skip the recursion-start-date from the list we going to generate
@@ -1004,14 +1008,14 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity {
       }
       $start = new DateTime($currDate);
       $this->recursion_start_date = $start;
-      if ($scheduleReminderDetails['repetition_frequency_unit']) {
-        $repetition_frequency_unit = $scheduleReminderDetails['repetition_frequency_unit'];
-        if ($repetition_frequency_unit == "day") {
-          $repetition_frequency_unit = "dai";
-        }
-        $repetition_frequency_unit = $repetition_frequency_unit . 'ly';
-        $r->recur($start, $repetition_frequency_unit);
+      $repetition_frequency_unit = $scheduleReminderDetails['repetition_frequency_unit'];
+      if ($repetition_frequency_unit == "day") {
+        $repetition_frequency_unit = "dai";
       }
+      $repetition_frequency_unit = $repetition_frequency_unit . 'ly';
+      $r->startDate($start)
+        ->exclusions([$start])
+        ->freq($repetition_frequency_unit);
 
       if ($scheduleReminderDetails['repetition_frequency_interval']) {
         $r->interval($scheduleReminderDetails['repetition_frequency_interval']);
@@ -1258,4 +1262,22 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity {
     return $finalResult;
   }
 
+  /**
+   * Get next occurrence for the given date
+   *
+   * @param \DateTime $occurDate
+   * @param bool $strictly_after
+   *
+   * @return bool
+   */
+  private function getNextOccurrence($occurDate, $strictly_after = TRUE) {
+    try {
+      return $this->recursion->getNextOccurrence($occurDate, $strictly_after);
+    }
+    catch (Exception $exception) {
+      CRM_Core_Session::setStatus(ts($exception->getMessage()));
+    }
+    return FALSE;
+  }
+
 }
index c3974fbdd73dacfb0291807c248214862d1dfa14..fca57c0d9c8f3a72a81474dd8ae49d2027d2d329 100644 (file)
@@ -2123,11 +2123,7 @@ AND    ( entity_id IS NULL OR entity_id <= 0 )
       );
     }
     elseif ($fieldName === 'contribution_status_id') {
-      $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus();
-      $statusName = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
-      foreach (['In Progress', 'Overdue', 'Refunded'] as $suppress) {
-        unset($contributionStatuses[CRM_Utils_Array::key($suppress, $statusName)]);
-      }
+      $contributionStatuses = CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses();
 
       $form->add('select', $name, $title,
         [
index 51dbcf9b1d46f1f1857b95cf7fd22a719ef883a7..b7fa50df7393d4e991ecf4533781d937461f9246 100644 (file)
@@ -193,7 +193,7 @@ class CRM_Core_ClassLoader {
     // we do this to prevent a autoloader errors with joomla / 3rd party packages
     // Use absolute path, since we don't know the content of include_path yet.
     // CRM-11304
-    $file = dirname(__FILE__) . '/../../packages/IDS/vendors/htmlpurifer/HTMLPurifier/Bootstrap.php';
+    $file = dirname(__FILE__) . '/../../packages/IDS/vendors/htmlpurifier/HTMLPurifier/Bootstrap.php';
     if (file_exists($file)) {
       return $file;
     }
index 30188ce3bfc878e310754d5ea7c9735443d7147b..4fedbc69af6ce859784a43b37eecd8e8491b97ec 100644 (file)
@@ -168,6 +168,7 @@ class CRM_Core_Config_MagicMerge {
       'maxFileSize' => ['setting'],
       // renamed.
       'maxAttachments' => ['setting', 'max_attachments'],
+      'maxAttachmentsBackend' => ['setting', 'max_attachments_backend'],
       'monetaryDecimalPoint' => ['setting'],
       'monetaryThousandSeparator' => ['setting'],
       'moneyformat' => ['setting'],
index d64c5ce5f94319ca6f4e3080c5fc0017ed67414e..da2abcec7b759fb6adc68a4b1424de4dfec42f63 100644 (file)
@@ -163,6 +163,8 @@ class CRM_Core_Config_Runtime extends CRM_Core_Config_MagicMerge {
         \CRM_Utils_Array::value('HTTP_HOST', $_SERVER, ''),
         // e.g. port-based vhosts
         \CRM_Utils_Array::value('SERVER_PORT', $_SERVER, ''),
+        // e.g. unit testing
+        defined('CIVICRM_TEST') ? 1 : 0,
         // Depending on deployment arch, these signals *could* be redundant, but who cares?
       ]));
     }
index 96de13e2c49a09dba0e750a2061069e4018d952c..8e97d3e336d29b88a92ad6ad9a0d72742872d0e8 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Address.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:e026e63074a6ffc2f4fda166e6ea6b5a)
+ * (GenCodeChecksum:4e3b66ed828527539c525b2ffc71e606)
  */
 
 /**
@@ -889,6 +889,15 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO {
         'localizable' => FALSE,
         'sig' => 'civicrm_address::0::city',
       ],
+      'index_geo_code_1_geo_code_2' => [
+        'name' => 'index_geo_code_1_geo_code_2',
+        'field' => [
+          0 => 'geo_code_1',
+          1 => 'geo_code_2',
+        ],
+        'localizable' => FALSE,
+        'sig' => 'civicrm_address::0::geo_code_1::geo_code_2',
+      ],
     ];
     return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices;
   }
index 3e2bf54ec09cf4e9452b99b01a2ba22eb5d30b73..1cbbc9218710a62992ffc300e1c780e1a34e8495 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/StatusPreference.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:bb8e5ce5e19462083928dc256fe1ebf2)
+ * (GenCodeChecksum:ce861431549af8024fdbfe418607202f)
  */
 
 /**
@@ -77,6 +77,13 @@ class CRM_Core_DAO_StatusPreference extends CRM_Core_DAO {
    */
   public $check_info;
 
+  /**
+   * Is this status check active?
+   *
+   * @var bool
+   */
+  public $is_active;
+
   /**
    * Class constructor.
    */
@@ -211,6 +218,18 @@ class CRM_Core_DAO_StatusPreference extends CRM_Core_DAO {
           'bao' => 'CRM_Core_BAO_StatusPreference',
           'localizable' => 0,
         ],
+        'is_active' => [
+          'name' => 'is_active',
+          'type' => CRM_Utils_Type::T_BOOLEAN,
+          'title' => ts('Check Is Active'),
+          'description' => ts('Is this status check active?'),
+          'where' => 'civicrm_status_pref.is_active',
+          'default' => '1',
+          'table_name' => 'civicrm_status_pref',
+          'entity' => 'StatusPreference',
+          'bao' => 'CRM_Core_BAO_StatusPreference',
+          'localizable' => 0,
+        ],
       ];
       CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
     }
index db02ed542a955b0a7a3ce41737c30442df77a0de..5f61bbd2965fdac15f6943921ac1d6081fd05ca4 100644 (file)
@@ -862,8 +862,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
       $params = array_merge($params, $addressParams);
     }
 
-    // @fixme it would be really nice to have a comment here so I had a clue why we are setting $fields[$name] = 1
-    // Also how does relate to similar code in CRM_Contact_BAO_Contact::addBillingNameFieldsIfOtherwiseNotSet()
+    // How does this relate to similar code in CRM_Contact_BAO_Contact::addBillingNameFieldsIfOtherwiseNotSet()?
     $nameFields = ['first_name', 'middle_name', 'last_name'];
     foreach ($nameFields as $name) {
       if (array_key_exists("billing_$name", $params)) {
@@ -871,6 +870,16 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
         $params['preserveDBName'] = TRUE;
       }
     }
+
+    // For legacy reasons we set these creditcard expiry fields if present
+    if (isset($params['credit_card_exp_date'])) {
+      $params['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($params);
+      $params['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($params);
+    }
+
+    // Assign IP address parameter
+    $params['ip_address'] = CRM_Utils_System::ipAddress();
+
     return $params;
   }
 
index 7fab1da759fb27a1949f9767420c11dfa9982948..50499e9a5127a17d20531fc68402ecf55528e254 100644 (file)
@@ -129,7 +129,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
    *
    * @return array|NULL
    *   reference to the array of default values
-   * @throws \Exception
+   * @throws \CRM_Core_Exception
    */
   public function setDefaultValues() {
     $defaults = (array) $this->_formValues;
@@ -145,12 +145,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
    * @throws \Exception
    */
   protected function setFormValues() {
-    if (!empty($_POST) && !$this->_force) {
-      $this->_formValues = $this->controller->exportValues($this->_name);
-    }
-    elseif ($this->_force) {
-      $this->_formValues = $this->setDefaultValues();
-    }
+    $this->_formValues = $this->getFormValues();
     $this->convertTextStringsToUseLikeOperator();
   }
 
@@ -477,4 +472,44 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
     }
   }
 
+  /**
+   * Get the form values.
+   *
+   * @todo consolidate with loadFormValues()
+   *
+   * @return array
+   *
+   * @throws \CRM_Core_Exception
+   */
+  protected function getFormValues() {
+    if (!empty($_POST) && !$this->_force) {
+      return $this->controller->exportValues($this->_name);
+    }
+    if ($this->_force) {
+      return $this->setDefaultValues();
+    }
+    return (array) $this->get('formValues');
+  }
+
+  /**
+   * Set the metadata for the form.
+   *
+   * @throws \CiviCRM_API3_Exception
+   */
+  protected function setSearchMetadata() {}
+
+  /**
+   * Handle force=1 in the url.
+   *
+   * Search field metadata is normally added in buildForm but we are bypassing that in this flow
+   * (I've always found the flow kinda confusing & perhaps that is the problem but this mitigates)
+   *
+   * @throws \CiviCRM_API3_Exception
+   */
+  protected function handleForcedSearch() {
+    $this->setSearchMetadata();
+    $this->postProcess();
+    $this->set('force', 0);
+  }
+
 }
index f6ef3f4de173f3b85387121838c4fdbe2ebf67ae..02557bbb7b698701edcb57454cfa247ea0c240e1 100644 (file)
@@ -326,6 +326,7 @@ class CRM_Core_I18n {
    *   The params of the translation (if any).
    *   - domain: string|array a list of translation domains to search (in order)
    *   - context: string
+   *   - skip_translation: flag (do only escape/replacement, skip the actual translation)
    *
    * @return string
    *   the translated string
@@ -378,24 +379,26 @@ class CRM_Core_I18n {
     $raw = !empty($params['raw']);
     unset($params['raw']);
 
-    if (!empty($domain)) {
-      // It might be prettier to cast to an array, but this is high-traffic stuff.
-      if (is_array($domain)) {
-        foreach ($domain as $d) {
-          $candidate = $this->crm_translate_raw($text, $d, $count, $plural, $context);
-          if ($candidate != $text) {
-            $text = $candidate;
-            break;
+    if (!isset($params['skip_translation'])) {
+      if (!empty($domain)) {
+        // It might be prettier to cast to an array, but this is high-traffic stuff.
+        if (is_array($domain)) {
+          foreach ($domain as $d) {
+            $candidate = $this->crm_translate_raw($text, $d, $count, $plural, $context);
+            if ($candidate != $text) {
+              $text = $candidate;
+              break;
+            }
           }
         }
+        else {
+          $text = $this->crm_translate_raw($text, $domain, $count, $plural, $context);
+        }
       }
       else {
-        $text = $this->crm_translate_raw($text, $domain, $count, $plural, $context);
+        $text = $this->crm_translate_raw($text, NULL, $count, $plural, $context);
       }
     }
-    else {
-      $text = $this->crm_translate_raw($text, NULL, $count, $plural, $context);
-    }
 
     // replace the numbered %1, %2, etc. params if present
     if (count($params) && !$raw) {
@@ -768,7 +771,7 @@ class CRM_Core_I18n {
  *   the translated string
  */
 function ts($text, $params = []) {
-  static $areSettingsAvailable = FALSE;
+  static $bootstrapReady = FALSE;
   static $lastLocale = NULL;
   static $i18n = NULL;
   static $function = NULL;
@@ -778,14 +781,19 @@ function ts($text, $params = []) {
   }
 
   // When the settings become available, lookup customTranslateFunction.
-  if (!$areSettingsAvailable) {
-    $areSettingsAvailable = (bool) \Civi\Core\Container::getBootService('settings_manager');
-    if ($areSettingsAvailable) {
+  if (!$bootstrapReady) {
+    $bootstrapReady = (bool) \Civi\Core\Container::isContainerBooted();
+    if ($bootstrapReady) {
+      // just got ready: determine whether there is a working custom translation function
       $config = CRM_Core_Config::singleton();
       if (isset($config->customTranslateFunction) and function_exists($config->customTranslateFunction)) {
         $function = $config->customTranslateFunction;
       }
     }
+    else {
+      // don't _translate_ anything until bootstrap has progressed enough
+      $params['skip_translation'] = 1;
+    }
   }
 
   $activeLocale = CRM_Core_I18n::getLocale();
index 899d84423106df2dbaf00257263ce7ab3eb4c7ea..a093cbbff57f9d23d2ebde27161b62db3d760fb2 100644 (file)
@@ -123,6 +123,7 @@ class CRM_Core_I18n_SchemaStructure {
           'receipt_from_name' => "varchar(255) COMMENT 'FROM email name used for receipts generated by contributions to this contribution page.'",
           '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'",
           'footer_text' => "text COMMENT 'Text and html allowed. Displayed at the bottom of the first page of the contribution wizard.'",
+          'frontend_title' => "varchar(255) DEFAULT NULL COMMENT 'Contribution Page Public title'",
         ],
         'civicrm_product' => [
           'name' => "varchar(255) NOT NULL COMMENT 'Required product/premium name'",
@@ -476,6 +477,9 @@ class CRM_Core_I18n_SchemaStructure {
             'rows' => "6",
             'cols' => "50",
           ],
+          'frontend_title' => [
+            'type' => "Text",
+          ],
         ],
         'civicrm_product' => [
           'name' => [
diff --git a/CRM/Core/I18n/SchemaStructure_5_20_alpha1.php b/CRM/Core/I18n/SchemaStructure_5_20_alpha1.php
new file mode 100644 (file)
index 0000000..d7bf2af
--- /dev/null
@@ -0,0 +1,726 @@
+<?php
+/*
++--------------------------------------------------------------------+
+| CiviCRM version 5                                                  |
++--------------------------------------------------------------------+
+| Copyright CiviCRM LLC (c) 2004-2019                                |
++--------------------------------------------------------------------+
+| This file is a part of CiviCRM.                                    |
+|                                                                    |
+| CiviCRM is free software; you can copy, modify, and distribute it  |
+| under the terms of the GNU Affero General Public License           |
+| Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+|                                                                    |
+| CiviCRM is distributed in the hope that it will be useful, but     |
+| WITHOUT ANY WARRANTY; without even the implied warranty of         |
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+| See the GNU Affero General Public License for more details.        |
+|                                                                    |
+| You should have received a copy of the GNU Affero General Public   |
+| License and the CiviCRM Licensing Exception along                  |
+| with this program; if not, contact CiviCRM LLC                     |
+| at info[AT]civicrm[DOT]org. If you have questions about the        |
+| GNU Affero General Public License or the licensing of CiviCRM,     |
+| see the CiviCRM license FAQ at http://civicrm.org/licensing        |
++--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ *
+ * Generated from schema_structure.tpl
+ * DO NOT EDIT.  Generated by CRM_Core_CodeGen
+ */
+class CRM_Core_I18n_SchemaStructure_5_20_alpha1 {
+
+  /**
+   * Get translatable columns.
+   *
+   * @return array
+   *   A table-indexed array of translatable columns.
+   */
+  public static function &columns() {
+    static $result = NULL;
+    if (!$result) {
+      $result = [
+        'civicrm_location_type' => [
+          'display_name' => "varchar(64) COMMENT 'Location Type Display Name.'",
+        ],
+        'civicrm_option_group' => [
+          'title' => "varchar(255) COMMENT 'Option Group title.'",
+          'description' => "varchar(255) COMMENT 'Option group description.'",
+        ],
+        'civicrm_relationship_type' => [
+          'label_a_b' => "varchar(64) COMMENT 'label for relationship of contact_a to contact_b.'",
+          '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.'",
+        ],
+        'civicrm_contact_type' => [
+          'label' => "varchar(64) COMMENT 'localized Name of Contact Type.'",
+          'description' => "text COMMENT 'localized Optional verbose description of the type.'",
+        ],
+        'civicrm_batch' => [
+          'title' => "varchar(255) COMMENT 'Friendly Name.'",
+          'description' => "text COMMENT 'Description of this batch set.'",
+        ],
+        'civicrm_premiums' => [
+          '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_nothankyou_label' => "varchar(255) COMMENT 'Label displayed for No Thank-you option in premiums block (e.g. No thank you)'",
+        ],
+        'civicrm_membership_status' => [
+          'label' => "varchar(128) COMMENT 'Label for Membership Status'",
+        ],
+        'civicrm_survey' => [
+          'title' => "varchar(255) NOT NULL COMMENT 'Title of the Survey.'",
+          'instructions' => "text COMMENT 'Script instructions for volunteers to use for the survey.'",
+          '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'",
+        ],
+        'civicrm_participant_status_type' => [
+          'label' => "varchar(255) COMMENT 'localized label for display of this status type'",
+        ],
+        'civicrm_case_type' => [
+          'title' => "varchar(64) NOT NULL COMMENT 'Natural language name for Case Type'",
+          'description' => "varchar(255) COMMENT 'Description of the Case Type'",
+        ],
+        'civicrm_tell_friend' => [
+          '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.'",
+          '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.'",
+        ],
+        'civicrm_custom_group' => [
+          'title' => "varchar(64) NOT NULL COMMENT 'Friendly Name.'",
+          '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.'",
+        ],
+        'civicrm_custom_field' => [
+          'label' => "varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering this custom property).'",
+          '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.'",
+        ],
+        'civicrm_option_value' => [
+          'label' => "varchar(512) NOT NULL COMMENT 'Option string as displayed to users - e.g. the label in an HTML OPTION tag.'",
+          'description' => "text COMMENT 'Optional description.'",
+        ],
+        'civicrm_group' => [
+          'title' => "varchar(64) COMMENT 'Name of Group.'",
+        ],
+        'civicrm_contribution_page' => [
+          'title' => "varchar(255) COMMENT 'Contribution Page title. For top of page display'",
+          'intro_text' => "text COMMENT 'Text and html allowed. Displayed below title.'",
+          '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'",
+          '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'",
+          '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.'",
+          'receipt_from_name' => "varchar(255) COMMENT 'FROM email name used for receipts generated by contributions to this contribution page.'",
+          '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'",
+          'footer_text' => "text COMMENT 'Text and html allowed. Displayed at the bottom of the first page of the contribution wizard.'",
+          'frontend_title' => "varchar(255) COMMENT 'Contribution Page Public title'",
+        ],
+        'civicrm_product' => [
+          'name' => "varchar(255) NOT NULL COMMENT 'Required product/premium name'",
+          'description' => "text COMMENT 'Optional description of the product/premium.'",
+          'options' => "text COMMENT 'Store comma-delimited list of color, size, etc. options for the product.'",
+        ],
+        'civicrm_payment_processor' => [
+          'title' => "varchar(127) COMMENT 'Payment Processor Descriptive Name.'",
+        ],
+        'civicrm_membership_type' => [
+          'name' => "varchar(128) COMMENT 'Name of Membership Type'",
+          'description' => "varchar(255) COMMENT 'Description of Membership Type'",
+        ],
+        'civicrm_membership_block' => [
+          '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'",
+        ],
+        'civicrm_price_set' => [
+          'title' => "varchar(255) NOT NULL COMMENT 'Displayed title for the Price Set.'",
+          '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.'",
+        ],
+        'civicrm_dashboard' => [
+          'label' => "varchar(255) COMMENT 'dashlet title'",
+        ],
+        'civicrm_uf_group' => [
+          'title' => "varchar(64) NOT NULL COMMENT 'Form title.'",
+          'frontend_title' => "varchar(64) COMMENT 'Profile Form Public title'",
+          '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.'",
+          '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'",
+        ],
+        'civicrm_uf_field' => [
+          '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.'",
+          'label' => "varchar(255) NOT NULL COMMENT 'To save label for fields.'",
+        ],
+        'civicrm_price_field' => [
+          'label' => "varchar(255) NOT NULL COMMENT 'Text for form field label (also friendly name for administering 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.'",
+        ],
+        'civicrm_price_field_value' => [
+          'label' => "varchar(255) 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.'",
+        ],
+        'civicrm_pcp_block' => [
+          'link_text' => "varchar(255) DEFAULT NULL COMMENT 'Link text for PCP.'",
+        ],
+        'civicrm_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.'",
+          '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.'",
+          '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.'",
+          'fee_label' => "varchar(255)",
+          '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.'",
+          '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.'",
+          'thankyou_title' => "varchar(255) DEFAULT NULL COMMENT 'Title for ThankYou page.'",
+          'thankyou_text' => "text COMMENT 'ThankYou Text.'",
+          'thankyou_footer_text' => "text COMMENT 'Footer message.'",
+          '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'",
+          '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'",
+          '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.'",
+          'template_title' => "varchar(255) COMMENT 'Event Template Title'",
+        ],
+      ];
+    }
+    return $result;
+  }
+
+  /**
+   * Get a table indexed array of the indices for translatable fields.
+   *
+   * @return array
+   *   Indices for translatable fields.
+   */
+  public static function &indices() {
+    static $result = NULL;
+    if (!$result) {
+      $result = [
+        'civicrm_custom_group' => [
+          'UI_title_extends' => [
+            'name' => 'UI_title_extends',
+            'field' => [
+              'title',
+              'extends',
+            ],
+            'unique' => 1,
+          ],
+        ],
+        'civicrm_custom_field' => [
+          'UI_label_custom_group_id' => [
+            'name' => 'UI_label_custom_group_id',
+            'field' => [
+              'label',
+              'custom_group_id',
+            ],
+            'unique' => 1,
+          ],
+        ],
+        'civicrm_group' => [
+          'UI_title' => [
+            'name' => 'UI_title',
+            'field' => [
+              'title',
+            ],
+            'unique' => 1,
+          ],
+        ],
+      ];
+    }
+    return $result;
+  }
+
+  /**
+   * Get tables with translatable fields.
+   *
+   * @return array
+   *   Array of names of tables with fields that can be translated.
+   */
+  public static function &tables() {
+    static $result = NULL;
+    if (!$result) {
+      $result = array_keys(self::columns());
+    }
+    return $result;
+  }
+
+  /**
+   * Get a list of widgets for editing translatable fields.
+   *
+   * @return array
+   *   Array of the widgets for editing translatable fields.
+   */
+  public static function &widgets() {
+    static $result = NULL;
+    if (!$result) {
+      $result = [
+        'civicrm_location_type' => [
+          'display_name' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_option_group' => [
+          'title' => [
+            'type' => "Text",
+          ],
+          'description' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_relationship_type' => [
+          'label_a_b' => [
+            'type' => "Text",
+          ],
+          'label_b_a' => [
+            'type' => "Text",
+          ],
+          'description' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_contact_type' => [
+          'label' => [
+            'type' => "Text",
+          ],
+          'description' => [
+            'type' => "TextArea",
+            'rows' => "2",
+            'cols' => "60",
+          ],
+        ],
+        'civicrm_batch' => [
+          'title' => [
+            'type' => "Text",
+          ],
+          'description' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+        ],
+        'civicrm_premiums' => [
+          'premiums_intro_title' => [
+            'type' => "Text",
+          ],
+          'premiums_intro_text' => [
+            'type' => "Text",
+          ],
+          'premiums_nothankyou_label' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_membership_status' => [
+          'label' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_survey' => [
+          'title' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'instructions' => [
+            'type' => "TextArea",
+            'rows' => "20",
+            'cols' => "80",
+          ],
+          'thankyou_title' => [
+            'type' => "Text",
+          ],
+          'thankyou_text' => [
+            'type' => "TextArea",
+            'rows' => "8",
+            'cols' => "60",
+          ],
+        ],
+        'civicrm_participant_status_type' => [
+          'label' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_case_type' => [
+          'title' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'description' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_tell_friend' => [
+          'title' => [
+            'type' => "Text",
+          ],
+          'intro' => [
+            'type' => "Text",
+          ],
+          'suggested_message' => [
+            'type' => "Text",
+          ],
+          'thankyou_title' => [
+            'type' => "Text",
+          ],
+          'thankyou_text' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_custom_group' => [
+          'title' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'help_pre' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+          'help_post' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+        ],
+        'civicrm_custom_field' => [
+          'label' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'help_pre' => [
+            'type' => "Text",
+          ],
+          'help_post' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_option_value' => [
+          'label' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'description' => [
+            'type' => "TextArea",
+            'rows' => "8",
+            'cols' => "60",
+          ],
+        ],
+        'civicrm_group' => [
+          'title' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_contribution_page' => [
+          'title' => [
+            'type' => "Text",
+          ],
+          'intro_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'pay_later_text' => [
+            'type' => "Text",
+          ],
+          'pay_later_receipt' => [
+            'type' => "Text",
+          ],
+          'initial_amount_label' => [
+            'type' => "Text",
+          ],
+          'initial_amount_help_text' => [
+            'type' => "Text",
+          ],
+          'thankyou_title' => [
+            'type' => "Text",
+          ],
+          'thankyou_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "8",
+            'cols' => "60",
+          ],
+          'thankyou_footer' => [
+            'type' => "RichTextEditor",
+            'rows' => "8",
+            'cols' => "60",
+          ],
+          'receipt_from_name' => [
+            'type' => "Text",
+          ],
+          'receipt_text' => [
+            'type' => "TextArea",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'footer_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'frontend_title' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_product' => [
+          'name' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'description' => [
+            'type' => "Text",
+          ],
+          'options' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_payment_processor' => [
+          'title' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_membership_type' => [
+          'name' => [
+            'type' => "Text",
+            'label' => "Name",
+          ],
+          'description' => [
+            'type' => "TextArea",
+            'rows' => "6",
+            'cols' => "50",
+            'label' => "Description",
+          ],
+        ],
+        'civicrm_membership_block' => [
+          'new_title' => [
+            'type' => "Text",
+          ],
+          'new_text' => [
+            'type' => "Text",
+          ],
+          'renewal_title' => [
+            'type' => "Text",
+          ],
+          'renewal_text' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_price_set' => [
+          'title' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'help_pre' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+          'help_post' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+        ],
+        'civicrm_dashboard' => [
+          'label' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_uf_group' => [
+          'title' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'frontend_title' => [
+            'type' => "Text",
+          ],
+          'help_pre' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+          'help_post' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+          'cancel_button_text' => [
+            'type' => "Text",
+          ],
+          'submit_button_text' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_uf_field' => [
+          'help_post' => [
+            'type' => "Text",
+          ],
+          'help_pre' => [
+            'type' => "Text",
+          ],
+          'label' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+        ],
+        'civicrm_price_field' => [
+          'label' => [
+            'type' => "Text",
+            'required' => "true",
+          ],
+          'help_pre' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+          'help_post' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "80",
+          ],
+        ],
+        'civicrm_price_field_value' => [
+          'label' => [
+            'type' => "Text",
+          ],
+          'description' => [
+            'type' => "TextArea",
+            'rows' => "2",
+            'cols' => "60",
+          ],
+          'help_pre' => [
+            'type' => "TextArea",
+            'rows' => "2",
+            'cols' => "60",
+          ],
+          'help_post' => [
+            'type' => "TextArea",
+            'rows' => "2",
+            'cols' => "60",
+          ],
+        ],
+        'civicrm_pcp_block' => [
+          'link_text' => [
+            'type' => "Text",
+          ],
+        ],
+        'civicrm_event' => [
+          'title' => [
+            'type' => "Text",
+          ],
+          'summary' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "60",
+          ],
+          'description' => [
+            'type' => "RichTextEditor",
+            'rows' => "8",
+            'cols' => "60",
+          ],
+          'registration_link_text' => [
+            'type' => "Text",
+          ],
+          'event_full_text' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "60",
+          ],
+          'fee_label' => [
+            'type' => "Text",
+          ],
+          'intro_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'footer_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'confirm_title' => [
+            'type' => "Text",
+          ],
+          'confirm_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'confirm_footer_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'confirm_email_text' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "50",
+          ],
+          'confirm_from_name' => [
+            'type' => "Text",
+          ],
+          'thankyou_title' => [
+            'type' => "Text",
+          ],
+          'thankyou_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'thankyou_footer_text' => [
+            'type' => "RichTextEditor",
+            'rows' => "6",
+            'cols' => "50",
+          ],
+          'pay_later_text' => [
+            'type' => "RichTextEditor",
+          ],
+          'pay_later_receipt' => [
+            'type' => "Text",
+          ],
+          'initial_amount_label' => [
+            'type' => "Text",
+          ],
+          'initial_amount_help_text' => [
+            'type' => "Text",
+          ],
+          'waitlist_text' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "60",
+          ],
+          'approval_req_text' => [
+            'type' => "TextArea",
+            'rows' => "4",
+            'cols' => "60",
+          ],
+          'template_title' => [
+            'type' => "Text",
+          ],
+        ],
+      ];
+    }
+    return $result;
+  }
+
+}
index b43f262669a79d4f2d8334d2f8d1cce97b100384..10bfa7216b26e8e57bdd671ae8a6984b21b60b18 100644 (file)
@@ -126,7 +126,7 @@ class CRM_Core_IDS {
         'filter_type' => 'xml',
         'filter_path' => "{$civicrm_root}/packages/IDS/default_filter.xml",
         'tmp_path' => $tmpDir,
-        'HTML_Purifier_Path' => $civicrm_root . 'packages/IDS/vendors/htmlpurifer/HTMLPurifier.auto.php',
+        'HTML_Purifier_Path' => $civicrm_root . 'packages/IDS/vendors/htmlpurifier/HTMLPurifier.auto.php',
         'HTML_Purifier_Cache' => $tmpDir,
         'scan_keys' => '',
         'exceptions' => ['__utmz', '__utmc'],
index 9f9a8b776b56d23b77fa2bc666be70836dccf9a8..bc9dad29b12b874bd87a6769a9a9d51ae158a634 100644 (file)
@@ -193,12 +193,6 @@ class CRM_Core_Invoke {
     $template->assign('formTpl', 'default');
 
     if ($item) {
-      // CRM-7656 - make sure we send a clean sanitized path to create printer friendly url
-      $printerFriendly = CRM_Utils_System::makeURL(
-          'snippet', FALSE, FALSE,
-          CRM_Utils_Array::value('path', $item)
-        ) . '2';
-      $template->assign('printerFriendly', $printerFriendly);
 
       if (!array_key_exists('page_callback', $item)) {
         CRM_Core_Error::debug('Bad item', $item);
index 14e2e7fcf220d826e9af4d437329f7fc442bc5cf..cb5f8d1759109bc91ad4367de88e3865a5188287 100644 (file)
@@ -1454,6 +1454,7 @@ WHERE  id = %1
    */
   public static function &getExtensions() {
     if (!self::$extensions) {
+      $compat = CRM_Extension_System::getCompatibilityInfo();
       self::$extensions = [];
       $sql = '
         SELECT full_name, label
@@ -1462,6 +1463,9 @@ WHERE  id = %1
       ';
       $dao = CRM_Core_DAO::executeQuery($sql);
       while ($dao->fetch()) {
+        if (!empty($compat[$dao->full_name]['force-uninstall'])) {
+          continue;
+        }
         self::$extensions[$dao->full_name] = $dao->label;
       }
     }
diff --git a/CRM/Core/xml/Menu/Api4.xml b/CRM/Core/xml/Menu/Api4.xml
new file mode 100644 (file)
index 0000000..1973f23
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<menu>
+  <item>
+    <path>civicrm/ajax/api4</path>
+    <page_callback>CRM_Api4_Page_AJAX</page_callback>
+    <access_arguments>access CiviCRM</access_arguments>
+  </item>
+  <item>
+    <path>civicrm/api4</path>
+    <page_callback>CRM_Api4_Page_Api4Explorer</page_callback>
+    <title>CiviCRM</title>
+    <access_arguments>access CiviCRM</access_arguments>
+  </item>
+</menu>
index 09f06ac9cc7aee1d41bfcb315f06962558ff2c35..ec9d0e6b485d8c07500926d0ba1a8cf3dde2ba40 100644 (file)
@@ -1143,6 +1143,15 @@ WHERE civicrm_event.is_active = 1
 
         // @todo - the goal is that all params available to the message template are explicitly defined here rather than
         // 'in a smattering of places'. Note that leakage can happen between mailings when not explicitly defined.
+        if ($postProfileID) {
+          $customPostTitles = empty($profilePost[1]) ? NULL : [];
+          foreach ($postProfileID as $offset => $id) {
+            $customPostTitles[$offset] = CRM_Core_BAO_UFGroup::getFrontEndTitle((int) $id);
+          }
+        }
+        else {
+          $customPostTitles = NULL;
+        }
         $tplParams = array_merge($values, $participantParams, [
           'email' => $email,
           'confirm_email_text' => CRM_Utils_Array::value('confirm_email_text', $values['event']),
@@ -1152,7 +1161,7 @@ WHERE civicrm_event.is_active = 1
           'customPre' => $profilePre[0],
           'customPre_grouptitle' => empty($profilePre[1]) ? NULL : [CRM_Core_BAO_UFGroup::getFrontEndTitle((int) $preProfileID)],
           'customPost' => $profilePost[0],
-          'customPost_grouptitle' => empty($profilePost[1]) ? NULL : [CRM_Core_BAO_UFGroup::getFrontEndTitle((int) $postProfileID)],
+          'customPost_grouptitle' => $customPostTitles,
           'participantID' => $participantId,
           'conference_sessions' => $sessions,
           'credit_card_number' => CRM_Utils_System::mungeCreditCard(CRM_Utils_Array::value('credit_card_number', $participantParams)),
index ece09d61d1eabb66abccaac915b109f6ba226189..5c6ec96fff1d42becab46981f6ffc911b98f9292 100644 (file)
@@ -597,21 +597,12 @@ class CRM_Event_Cart_Form_Checkout_Payment extends CRM_Event_Cart_Form_Cart {
    * @throws Exception
    */
   public function make_payment(&$params) {
-    $config = CRM_Core_Config::singleton();
-    if (isset($params["billing_state_province_id-{$this->_bltID}"]) && $params["billing_state_province_id-{$this->_bltID}"]) {
-      $params["billing_state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($params["billing_state_province_id-{$this->_bltID}"]);
-    }
-
-    if (isset($params["billing_country_id-{$this->_bltID}"]) && $params["billing_country_id-{$this->_bltID}"]) {
-      $params["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($params["billing_country_id-{$this->_bltID}"]);
-    }
-    $params['ip_address'] = CRM_Utils_System::ipAddress();
-    $params['currencyID'] = $config->defaultCurrency;
+    $params = $this->prepareParamsForPaymentProcessor($params);
+    $params['currencyID'] = CRM_Core_Config::singleton()->defaultCurrency;
 
     $payment = Civi\Payment\System::singleton()->getByProcessor($this->_paymentProcessor);
     CRM_Core_Payment_Form::mapParams($this->_bltID, $params, $params, TRUE);
-    $params['month'] = $params['credit_card_exp_date']['M'];
-    $params['year'] = $params['credit_card_exp_date']['Y'];
+
     try {
       $result = $payment->doPayment($params);
     }
index 7e2c8a8889dc968e6707625c4c9c560e743dc646..3573106ad52182c6e12c7ae28678d3253a22b874 100644 (file)
@@ -262,8 +262,7 @@ class CRM_Event_Form_ManageEvent_Location extends CRM_Event_Form_ManageEvent {
     }
 
     // create/update event location
-    $location = CRM_Core_BAO_Location::create($params, TRUE, 'event');
-    $params['loc_block_id'] = $location['id'];
+    $params['loc_block_id'] = CRM_Core_BAO_Location::create($params, TRUE, 'event')['id'];
 
     // finally update event params
     $params['id'] = $this->_id;
index bc1d548deea171e0e0a5f9c7b0ac884f372c29b7..dbb46acb7941f49c735cdb47390713cb22b8f57a 100644 (file)
@@ -1228,9 +1228,7 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment
 
     if ($this->_mode) {
       // add all the additional payment params we need
-      $this->_params["state_province-{$this->_bltID}"] = $this->_params["billing_state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($this->_params["billing_state_province_id-{$this->_bltID}"]);
-      $this->_params["country-{$this->_bltID}"] = $this->_params["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($this->_params["billing_country_id-{$this->_bltID}"]);
-
+      $this->_params = $this->prepareParamsForPaymentProcessor($this->_params);
       $this->_params['amount'] = $params['fee_amount'];
       $this->_params['amount_level'] = $params['amount_level'];
       $this->_params['currencyID'] = $config->defaultCurrency;
@@ -1483,8 +1481,6 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment
             $ppDAO->save();
           }
         }
-        // next create the transaction record
-        $transaction = new CRM_Core_Transaction();
 
         // CRM-11124
         if ($this->_params['discount_id']) {
@@ -1495,7 +1491,6 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment
             CRM_Price_BAO_PriceSet::parseFirstPriceSetValueIDFromParams($this->_params)
           );
         }
-        $transaction->commit();
       }
     }
 
index 2ac411173084408c1538eda1749c9c219b116bc4..dbc974bdbeaac717c24bf4a4522563bcfe3f38d7 100644 (file)
@@ -394,9 +394,6 @@ class CRM_Event_Form_Registration extends CRM_Core_Form {
 
     // we do not want to display recently viewed items on Registration pages
     $this->assign('displayRecent', FALSE);
-    // Registration page values are cleared from session, so can't use normal Printer Friendly view.
-    // Use Browser Print instead.
-    $this->assign('browserPrint', TRUE);
 
     $isShowLocation = CRM_Utils_Array::value('is_show_location', $this->_values['event']);
     $this->assign('isShowLocation', $isShowLocation);
@@ -697,12 +694,10 @@ class CRM_Event_Form_Registration extends CRM_Core_Form {
    * Handle process after the confirmation of payment by User.
    *
    * @param int $contactID
-   * @param null $contribution
-   * @param null $payment
+   * @param \CRM_Contribute_BAO_Contribution $contribution
    */
-  public function confirmPostProcess($contactID = NULL, $contribution = NULL, $payment = NULL) {
+  public function confirmPostProcess($contactID = NULL, $contribution = NULL) {
     // add/update contact information
-    $fields = array();
     unset($this->_params['note']);
 
     //to avoid conflict overwrite $this->_params
@@ -725,6 +720,8 @@ class CRM_Event_Form_Registration extends CRM_Core_Form {
       // CRM-10032
       $this->processFirstParticipant($participant->id);
     }
+    $this->_params['participantID'] = $participant->id;
+    $this->set('primaryParticipant', $this->_params);
 
     CRM_Core_BAO_CustomValueTable::postProcess($this->_params,
       'civicrm_participant',
@@ -752,13 +749,6 @@ class CRM_Event_Form_Registration extends CRM_Core_Form {
       $paymentPartcipant = CRM_Event_BAO_ParticipantPayment::create($paymentParams);
     }
 
-    //set only primary participant's params for transfer checkout.
-    // The concept of contributeMode is deprecated.
-    if (($this->_contributeMode == 'checkout' || $this->_contributeMode == 'notify') && !empty($this->_params['is_primary'])) {
-      $this->_params['participantID'] = $participant->id;
-      $this->set('primaryParticipant', $this->_params);
-    }
-
     $this->assign('action', $this->_action);
 
     // create CMS user
@@ -1598,7 +1588,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form {
         }
 
         $this->set('value', $value);
-        $this->confirmPostProcess($contactID, NULL, NULL);
+        $this->confirmPostProcess($contactID, NULL);
 
         //lets get additional participant id to cancel.
         if ($this->_allowConfirmation && is_array($cancelledIds)) {
index 18e9ca607c533fb2f38e473123fc21d9f6126106..8a326a4cf2af3bc7353f716a4f8f96f93ce4d6b4 100644 (file)
@@ -90,21 +90,9 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
     if (!$this->preProcessExpress()) {
       //process only primary participant params.
       $registerParams = $this->_params[0];
-      if (isset($registerParams["billing_state_province_id-{$this->_bltID}"])
-        && $registerParams["billing_state_province_id-{$this->_bltID}"]
-      ) {
-        $registerParams["billing_state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($registerParams["billing_state_province_id-{$this->_bltID}"]);
-      }
+      $registerParams = $this->prepareParamsForPaymentProcessor($registerParams);
 
-      if (isset($registerParams["billing_country_id-{$this->_bltID}"]) && $registerParams["billing_country_id-{$this->_bltID}"]) {
-        $registerParams["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($registerParams["billing_country_id-{$this->_bltID}"]);
-      }
-      if (isset($registerParams['credit_card_exp_date'])) {
-        $registerParams['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($registerParams);
-        $registerParams['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($registerParams);
-      }
       if ($this->_values['event']['is_monetary']) {
-        $registerParams['ip_address'] = CRM_Utils_System::ipAddress();
         $registerParams['currencyID'] = $this->_params[0]['currencyID'];
       }
       //assign back primary participant params.
@@ -472,7 +460,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
     $payment = $registerByID = $primaryCurrencyID = $contribution = NULL;
     $paymentObjError = ts('The system did not record payment details for this payment and so could not process the transaction. Please report this error to the site administrator.');
 
-    $this->participantIDS = [];
     $fields = [];
     foreach ($params as $key => $value) {
       CRM_Event_Form_Registration_Confirm::fixLocationFields($value, $fields, $this);
@@ -674,7 +661,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       }
       $this->assign('register_date', $registerDate);
 
-      $this->confirmPostProcess($contactID, $contribution, $payment);
+      $this->confirmPostProcess($contactID, $contribution);
     }
 
     //handle if no additional participant.
@@ -744,6 +731,15 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       $isTest = TRUE;
     }
 
+    $primaryParticipant = $this->get('primaryParticipant');
+
+    if (empty($primaryParticipant['participantID'])) {
+      CRM_Core_Error::deprecatedFunctionWarning('This line is not logically reachable.');
+      $primaryParticipant['participantID'] = $registerByID;
+    }
+    //otherwise send mail Confirmation/Receipt
+    $primaryContactId = $this->get('primaryContactId');
+
     // for Transfer checkout.
     // The concept of contributeMode is deprecated.
     if (($this->_contributeMode == 'checkout' ||
@@ -753,12 +749,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       $this->_totalAmount > 0
     ) {
 
-      $primaryParticipant = $this->get('primaryParticipant');
-
-      if (empty($primaryParticipant['participantID'])) {
-        $primaryParticipant['participantID'] = $registerByID;
-      }
-
       //build an array of custom profile and assigning it to template
       $customProfile = CRM_Event_BAO_Event::buildCustomProfile($registerByID, $this->_values, NULL, $isTest);
       if (count($customProfile)) {
@@ -833,8 +823,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       }
     }
     else {
-      //otherwise send mail Confirmation/Receipt
-      $primaryContactId = $this->get('primaryContactId');
 
       //build an array of cId/pId of participants
       $additionalIDs = CRM_Event_BAO_Event::buildCustomProfile($registerByID,
@@ -1196,13 +1184,13 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
     }
 
     //get email primary first if exist
-    $subscribtionEmail = ['email' => CRM_Utils_Array::value('email-Primary', $params)];
-    if (!$subscribtionEmail['email']) {
-      $subscribtionEmail['email'] = CRM_Utils_Array::value("email-{$form->_bltID}", $params);
+    $subscriptionEmail = ['email' => CRM_Utils_Array::value('email-Primary', $params)];
+    if (!$subscriptionEmail['email']) {
+      $subscriptionEmail['email'] = CRM_Utils_Array::value("email-{$form->_bltID}", $params);
     }
     // subscribing contact to groups
-    if (!empty($subscribeGroupIds) && $subscribtionEmail['email']) {
-      CRM_Mailing_Event_BAO_Subscribe::commonSubscribe($subscribeGroupIds, $subscribtionEmail, $contactID);
+    if (!empty($subscribeGroupIds) && $subscriptionEmail['email']) {
+      CRM_Mailing_Event_BAO_Subscribe::commonSubscribe($subscribeGroupIds, $subscriptionEmail, $contactID);
     }
 
     return $contactID;
index 77297e325afd4d2eaba861e8438882e8eb3c5877..bb69047bc3aeec7a77bbe9f709792c6034645661 100644 (file)
@@ -1105,23 +1105,9 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration {
       $this->set('contributeMode', 'direct');
 
       // This code is duplicated multiple places and should be consolidated.
-      if (isset($params["state_province_id-{$this->_bltID}"]) &&
-        $params["state_province_id-{$this->_bltID}"]
-      ) {
-        $params["state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($params["state_province_id-{$this->_bltID}"]);
-      }
+      $params = $this->prepareParamsForPaymentProcessor($params);
 
-      if (isset($params["country_id-{$this->_bltID}"]) &&
-        $params["country_id-{$this->_bltID}"]
-      ) {
-        $params["country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($params["country_id-{$this->_bltID}"]);
-      }
-      if (isset($params['credit_card_exp_date'])) {
-        $params['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($params);
-        $params['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($params);
-      }
       if ($this->_values['event']['is_monetary']) {
-        $params['ip_address'] = CRM_Utils_System::ipAddress();
         $params['currencyID'] = $config->defaultCurrency;
         $params['invoiceID'] = $invoiceID;
       }
index a95df716d8f73142bfe454d3668ead18e346a5e0..1541cb9e8eca698f46805ad3cf27aad6134fb435 100644 (file)
@@ -128,6 +128,9 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c
 
     if ($processor->isMergeSameAddress()) {
       foreach (array_keys($processor->getAdditionalFieldsForSameAddressMerge()) as $field) {
+        if ($field === 'id') {
+          $field = 'civicrm_primary_id';
+        }
         $processor->setColumnAsCalculationOnly($field);
       }
     }
index b46e41e283fdb27a2c3fb800a285e0743912c781..9a5d5f92c8d03f19853ec7abc37645b29a4d2aa3 100644 (file)
@@ -173,7 +173,7 @@ class CRM_Export_BAO_ExportProcessor {
       $fields = ['is_deceased', 'do_not_mail', 'street_address', 'supplemental_address_1'];
       foreach ($fields as $index => $field) {
         if (!empty($this->getReturnProperties()[$field])) {
-          unset($field[$index]);
+          unset($fields[$index]);
         }
       }
       $this->additionalFieldsForPostalExport = array_fill_keys($fields, 1);
@@ -803,7 +803,7 @@ class CRM_Export_BAO_ExportProcessor {
             $addressWhere .= " OR civicrm_address.supplemental_address_1 <> ''";
           }
         }
-        $whereClauses['address'] = $addressWhere;
+        $whereClauses['address'] = '(' . $addressWhere . ')';
       }
     }
 
@@ -2376,6 +2376,7 @@ WHERE  id IN ( $deleteIDString )
 
     $query = "SELECT * FROM $exportTempTable";
 
+    $this->instantiateTempTable($headerRows);
     while (1) {
       $limitQuery = $query . "
 LIMIT $offset, $limit
@@ -2395,16 +2396,38 @@ LIMIT $offset, $limit
         }
         $componentDetails[] = $row;
       }
-      CRM_Core_Report_Excel::writeCSVFile($this->getExportFileName(),
-        $headerRows,
-        $componentDetails,
-        NULL,
-        $writeHeader
-      );
-
-      $writeHeader = FALSE;
+      $this->writeRows($headerRows, $componentDetails);
+
       $offset += $limit;
     }
   }
 
+  /**
+   * Set up the temp table.
+   *
+   * @param array $headerRows
+   */
+  protected function instantiateTempTable(array $headerRows) {
+    CRM_Utils_System::download(CRM_Utils_String::munge($this->getExportFileName()),
+      'text/x-csv',
+      CRM_Core_DAO::$_nullObject,
+      'csv',
+      FALSE
+    );
+    CRM_Core_Report_Excel::makeCSVTable($headerRows, [], NULL, TRUE, TRUE);
+  }
+
+  /**
+   * @param array $headerRows
+   * @param array $componentDetails
+   */
+  protected function writeRows(array $headerRows, array $componentDetails) {
+    CRM_Core_Report_Excel::writeCSVFile($this->getExportFileName(),
+      $headerRows,
+      $componentDetails,
+      NULL,
+      FALSE
+    );
+  }
+
 }
index abc344c7379d8cffdb649479bd100deab5a5a0ea..234b3d8fc03cc5041dc1931d916ee35c46ac10c1 100644 (file)
@@ -54,12 +54,12 @@ class CRM_Extension_Manager {
   const STATUS_UNKNOWN = 'unknown';
 
   /**
-   * The extension is fully installed and enabled
+   * The extension is installed but the code is not accessible
    */
   const STATUS_INSTALLED_MISSING = 'installed-missing';
 
   /**
-   * The extension is fully installed and enabled
+   * The extension was installed and is now disabled; the code is not accessible
    */
   const STATUS_DISABLED_MISSING = 'disabled-missing';
 
@@ -215,18 +215,31 @@ class CRM_Extension_Manager {
   /**
    * Add records of the extension to the database -- and enable it
    *
-   * @param array $keys
-   *   List of extension keys.
+   * @param string|array $keys
+   *   One or more extension keys.
    * @throws CRM_Extension_Exception
    */
   public function install($keys) {
+    $keys = (array) $keys;
     $origStatuses = $this->getStatuses();
 
     // TODO: to mitigate the risk of crashing during installation, scan
     // keys/statuses/types before doing anything
 
+    // Check compatibility
+    $incompatible = [];
     foreach ($keys as $key) {
-      // throws Exception
+      if ($this->isIncompatible($key)) {
+        $incompatible[] = $key;
+      }
+    }
+    if ($incompatible) {
+      throw new CRM_Extension_Exception('Cannot install incompatible extension: ' . implode(', ', $incompatible));
+    }
+
+    foreach ($keys as $key) {
+      /** @var CRM_Extension_Info $info */
+      /** @var CRM_Extension_Manager_Base $typeManager */
       list ($info, $typeManager) = $this->_getInfoTypeHandler($key);
 
       switch ($origStatuses[$key]) {
@@ -308,13 +321,14 @@ class CRM_Extension_Manager {
   }
 
   /**
-   * Add records of the extension to the database -- and enable it
+   * Disable extension without removing record from db.
    *
-   * @param array $keys
-   *   List of extension keys.
+   * @param string|array $keys
+   *   One or more extension keys.
    * @throws CRM_Extension_Exception
    */
   public function disable($keys) {
+    $keys = (array) $keys;
     $origStatuses = $this->getStatuses();
 
     // TODO: to mitigate the risk of crashing during installation, scan
@@ -366,13 +380,12 @@ class CRM_Extension_Manager {
   /**
    * Remove all database references to an extension.
    *
-   * Add records of the extension to the database -- and enable it
-   *
-   * @param array $keys
-   *   List of extension keys.
+   * @param string|array $keys
+   *   One or more extension keys.
    * @throws CRM_Extension_Exception
    */
   public function uninstall($keys) {
+    $keys = (array) $keys;
     $origStatuses = $this->getStatuses();
 
     // TODO: to mitigate the risk of crashing during installation, scan
@@ -421,7 +434,7 @@ class CRM_Extension_Manager {
    * @param $key
    *
    * @return string
-   *   constant (STATUS_INSTALLED, STATUS_DISABLED, STATUS_UNINSTALLED, STATUS_UNKNOWN)
+   *   constant self::STATUS_*
    */
   public function getStatus($key) {
     $statuses = $this->getStatuses();
@@ -433,6 +446,17 @@ class CRM_Extension_Manager {
     }
   }
 
+  /**
+   * Check if a given extension is incompatible with this version of CiviCRM
+   *
+   * @param $key
+   * @return bool|array
+   */
+  public function isIncompatible($key) {
+    $info = CRM_Extension_System::getCompatibilityInfo();
+    return $info[$key] ?? FALSE;
+  }
+
   /**
    * Determine the status of all extensions.
    *
@@ -441,6 +465,8 @@ class CRM_Extension_Manager {
    */
   public function getStatuses() {
     if (!is_array($this->statuses)) {
+      $compat = CRM_Extension_System::getCompatibilityInfo();
+
       $this->statuses = [];
 
       foreach ($this->fullContainer->getKeys() as $key) {
@@ -460,7 +486,10 @@ class CRM_Extension_Manager {
         catch (CRM_Extension_Exception $e) {
           $codeExists = FALSE;
         }
-        if ($dao->is_active) {
+        if (!empty($compat[$dao->full_name]['force-uninstall'])) {
+          $this->statuses[$dao->full_name] = self::STATUS_UNINSTALLED;
+        }
+        elseif ($dao->is_active) {
           $this->statuses[$dao->full_name] = $codeExists ? self::STATUS_INSTALLED : self::STATUS_INSTALLED_MISSING;
         }
         else {
@@ -487,7 +516,7 @@ class CRM_Extension_Manager {
    *
    * @throws CRM_Extension_Exception
    * @return array
-   *   (0 => CRM_Extension_Info, 1 => CRM_Extension_Manager_Interface)
+   *   [CRM_Extension_Info, CRM_Extension_Manager_Interface]
    */
   private function _getInfoTypeHandler($key) {
     // throws Exception
@@ -507,7 +536,7 @@ class CRM_Extension_Manager {
    *
    * @throws CRM_Extension_Exception
    * @return array
-   *   (0 => CRM_Extension_Info, 1 => CRM_Extension_Manager_Interface)
+   *   [CRM_Extension_Info, CRM_Extension_Manager_Interface]
    */
   private function _getMissingInfoTypeHandler($key) {
     $info = $this->createInfoFromDB($key);
index b9cc7ed18210c0062dcf7f066770d2f83db54c3a..fd828e4fe771e54a8a85776317fdf969e521ba48 100644 (file)
@@ -286,6 +286,8 @@ class CRM_Extension_Mapper {
     }
 
     if (!is_array($moduleExtensions)) {
+      $compat = CRM_Extension_System::getCompatibilityInfo();
+
       // Check canonical module list
       $moduleExtensions = [];
       $sql = '
@@ -296,6 +298,9 @@ class CRM_Extension_Mapper {
       ';
       $dao = CRM_Core_DAO::executeQuery($sql);
       while ($dao->fetch()) {
+        if (!empty($compat[$dao->full_name]['force-uninstall'])) {
+          continue;
+        }
         try {
           $moduleExtensions[] = [
             'prefix' => $dao->file,
index f9665524d9b9128d9c4afb568b39d6ca39a67298..a45cbfbadfb7a2b954846a7c69009e85e78709a6 100644 (file)
@@ -264,7 +264,7 @@ class CRM_Extension_System {
    */
   public function getCache() {
     if ($this->cache === NULL) {
-      $cacheGroup = md5(serialize(['ext', $this->parameters]));
+      $cacheGroup = md5(serialize(['ext', $this->parameters, CRM_Utils_System::version()]));
       // Extension system starts before container. Manage our own cache.
       $this->cache = CRM_Utils_Cache::create([
         'name' => $cacheGroup,
@@ -362,6 +362,9 @@ class CRM_Extension_System {
       default:
         $extensionRow['statusLabel'] = '(' . $extensionRow['status'] . ')';
     }
+    if ($manager->isIncompatible($obj->key)) {
+      $extensionRow['statusLabel'] = ts('Obsolete') . ($extensionRow['statusLabel'] ? (' - ' . $extensionRow['statusLabel']) : '');
+    }
     return $extensionRow;
   }
 
index 85afbee9deb7d18cf632e1919a4f7796d4f29158..af012f8c9836162c2968761648234c67f809a02e 100644 (file)
@@ -270,6 +270,19 @@ WHERE cft.id = %1
     return Civi::$statics[__CLASS__]['entity_financial_account'][$financialTypeID][$relationTypeId];
   }
 
+  /**
+   * Get the sales tax financial account id for the financial type id.
+   *
+   * This is a helper wrapper to make the function name more readable.
+   *
+   * @param int $financialAccountID
+   *
+   * @return int
+   */
+  public static function getSalesTaxFinancialAccount($financialAccountID) {
+    return self::getFinancialAccountForFinancialTypeByRelationship($financialAccountID, 'Sales Tax Account is');
+  }
+
   /**
    * Get Financial Account type relations.
    *
index c740bff55fbf4ed12f72db083eefd0cd573d7c9d..837ddd678225b6adf4d81360748a3fe7453d6e42 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/FinancialTrxn.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ea6e4e27680634c1c2e4def15d91e02c)
+ * (GenCodeChecksum:30dff7f6f16ef7cd997187a202a59173)
  */
 
 /**
@@ -145,6 +145,13 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO {
    */
   public $pan_truncation;
 
+  /**
+   * Payment Processor external order reference
+   *
+   * @var string
+   */
+  public $order_reference;
+
   /**
    * Class constructor.
    */
@@ -460,6 +467,22 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO {
             'type' => 'Text',
           ],
         ],
+        'financial_trxn_order_reference' => [
+          'name' => 'order_reference',
+          'type' => CRM_Utils_Type::T_STRING,
+          'title' => ts('Order Reference'),
+          'description' => ts('Payment Processor external order reference'),
+          'maxlength' => 255,
+          'size' => 25,
+          'where' => 'civicrm_financial_trxn.order_reference',
+          'table_name' => 'civicrm_financial_trxn',
+          'entity' => 'FinancialTrxn',
+          'bao' => 'CRM_Financial_DAO_FinancialTrxn',
+          'localizable' => 0,
+          'html' => [
+            'type' => 'Text',
+          ],
+        ],
       ];
       CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
     }
index 724059888435b786647d486bd64771415267e97a..098e9dcb4cc05beaaba9c2526dfa0af42ca89b88 100644 (file)
@@ -154,6 +154,7 @@ class CRM_Financial_Form_FinancialAccount extends CRM_Contribute_Form {
     }
     if ($self->_action & CRM_Core_Action::UPDATE) {
       if (!(isset($values['is_tax']))) {
+        // @todo replace with call to CRM_Financial_BAO_FinancialAccount getSalesTaxFinancialAccount
         $relationshipId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Sales Tax Account is' "));
         $params = [
           'financial_account_id' => $self->_id,
index 3ac1bd169660a77a5bc4bdd9517774386ce2c467..b6834aac46e9e25e09aa5094713d05d06386ad01 100644 (file)
@@ -244,6 +244,7 @@ class CRM_Financial_Form_FinancialTypeAccount extends CRM_Contribute_Form {
       ];
       $defaults = [];
       if ($self->_action == CRM_Core_Action::ADD) {
+        // @todo replace with call to CRM_Financial_BAO_FinancialAccount getSalesTaxFinancialAccount
         $relationshipId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Sales Tax Account is' "));
         $isTax = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialAccount', $values['financial_account_id'], 'is_tax');
         if ($values['account_relationship'] == $relationshipId) {
index 3c71a3ca33a1d485a6673d65be1d09759a3d10fe..3766625e71da5bfd4102a925f6daa47072c95d29 100644 (file)
@@ -550,7 +550,9 @@ abstract class CRM_Import_Parser {
   /**
    * Parse a field which could be represented by a label or name value rather than the DB value.
    *
-   * We will try to match name first but if not available then see if we have a label that can be converted to a name.
+   * We will try to match name first or (per https://lab.civicrm.org/dev/core/issues/1285 if we have an id.
+   *
+   * but if not available then see if we have a label that can be converted to a name.
    *
    * @param string|int|null $submittedValue
    * @param array $fieldSpec
@@ -559,15 +561,24 @@ abstract class CRM_Import_Parser {
    * @return mixed
    */
   protected function parsePseudoConstantField($submittedValue, $fieldSpec) {
+    // dev/core#1289 Somehow we have wound up here but the BAO has not been specified in the fieldspec so we need to check this but future us problem, for now lets just return the submittedValue
+    if (!isset($fieldSpec['bao'])) {
+      return $submittedValue;
+    }
     /* @var \CRM_Core_DAO $bao */
     $bao = $fieldSpec['bao'];
     // For historical reasons use validate as context - ie disabled name matches ARE permitted.
     $nameOptions = $bao::buildOptions($fieldSpec['name'], 'validate');
-    if (!isset($nameOptions[$submittedValue])) {
-      $labelOptions = array_flip($bao::buildOptions($fieldSpec['name'], 'match'));
-      if (isset($labelOptions[$submittedValue])) {
-        return array_search($labelOptions[$submittedValue], $nameOptions, TRUE);
-      }
+    if (isset($nameOptions[$submittedValue])) {
+      return $submittedValue;
+    }
+    if (in_array($submittedValue, $nameOptions)) {
+      return array_search($submittedValue, $nameOptions, TRUE);
+    }
+
+    $labelOptions = array_flip($bao::buildOptions($fieldSpec['name'], 'match'));
+    if (isset($labelOptions[$submittedValue])) {
+      return array_search($labelOptions[$submittedValue], $nameOptions, TRUE);
     }
     return '';
   }
index 59e1330c37f9df4c66034568da052eea8c255ac7..2330f1194be12a8c6752d303ab78cadbd43c8152 100644 (file)
@@ -290,7 +290,7 @@ WHERE lt.log_conn_id = %1
         // FIXME: Use *_BAO:buildOptions() method rather than pseudoconstants & fetch programmatically
         $values[$table] = [
           'contribution_page_id' => CRM_Contribute_PseudoConstant::contributionPage(),
-          'contribution_status_id' => CRM_Contribute_PseudoConstant::contributionStatus(),
+          'contribution_status_id' => CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label'),
           'financial_type_id' => CRM_Contribute_PseudoConstant::financialType(),
           'country_id' => CRM_Core_PseudoConstant::country(),
           'gender_id' => CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'gender_id'),
index 608f83db67f5a43733b5cbd4553d89cc286a7659..b554f385c68db0f710ceceb6c88d3dfa8f32ce28 100644 (file)
@@ -73,10 +73,26 @@ WHERE  mailing_id = %1
       $limitString = "LIMIT $offset, $limit";
     }
 
+    $isSMSmode = CRM_Core_DAO::getFieldValue('CRM_Mailing_BAO_Mailing', $mailingID, 'sms_provider_id', 'id');
+    $additionalJoin = '';
+    if (!$isSMSmode) {
+      // mailing_recipients added when mailing is submitted in UI by user.
+      // if any email is marked on_hold =1 or contact is deceased after mailing is submitted
+      // then it should be get skipped while preparing event_queue
+      // event_queue list is prepared when mailing job gets started.
+      $additionalJoin = " INNER JOIN civicrm_email e ON (r.email_id = e.id AND e.on_hold = 0 AND e.is_primary = 1)
+                          INNER JOIN civicrm_contact c on (c.id = r.contact_id AND c.is_deceased <> 1 AND c.do_not_email = 0 AND c.is_opt_out = 0)
+";
+    }
+    else {
+      $additionalJoin = "INNER JOIN civicrm_contact c on (c.id = r.contact_id AND c.is_deceased <> 1 AND c.do_not_sms = 0 AND c.is_opt_out = 0)";
+    }
+
     $sql = "
-SELECT contact_id, email_id, phone_id
-FROM   civicrm_mailing_recipients
-WHERE  mailing_id = %1
+SELECT r.contact_id, r.email_id, r.phone_id
+FROM   civicrm_mailing_recipients r
+{$additionalJoin}
+WHERE  r.mailing_id = %1
        $limitString
 ";
     $params = [1 => [$mailingID, 'Integer']];
index a3bc2c85c9fccb145925b0e9f9e1287ef8e1473b..9f727b0c260d91278d80eb6372b2118868dc8293 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Mailing.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:c294c497dac6129fe311fe8484e1e975)
+ * (GenCodeChecksum:aa54484f6e9b8d5ad8e75680f95cfc67)
  */
 
 /**
@@ -405,6 +405,12 @@ class CRM_Mailing_DAO_Mailing extends CRM_Core_DAO {
           'bao' => 'CRM_Mailing_BAO_Mailing',
           'localizable' => 0,
           'FKClassName' => 'CRM_Mailing_DAO_MailingComponent',
+          'pseudoconstant' => [
+            'table' => 'civicrm_mailing_component',
+            'keyColumn' => 'id',
+            'labelColumn' => 'name',
+            'condition' => 'component_type = "Header"',
+          ],
         ],
         'footer_id' => [
           'name' => 'footer_id',
@@ -417,6 +423,12 @@ class CRM_Mailing_DAO_Mailing extends CRM_Core_DAO {
           'bao' => 'CRM_Mailing_BAO_Mailing',
           'localizable' => 0,
           'FKClassName' => 'CRM_Mailing_DAO_MailingComponent',
+          'pseudoconstant' => [
+            'table' => 'civicrm_mailing_component',
+            'keyColumn' => 'id',
+            'labelColumn' => 'name',
+            'condition' => 'component_type = "Footer"',
+          ],
         ],
         'reply_id' => [
           'name' => 'reply_id',
index 2e22a1d836380d137e3231697761c5ed157e9cca..db9c7f3995c0421b563e1fc4732dd98997fe4907 100644 (file)
@@ -63,8 +63,9 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
    *   The array that holds all the db ids.
    *
    * @return CRM_Member_BAO_Membership
+   * @throws \CiviCRM_API3_Exception
    */
-  public static function add(&$params, $ids = array()) {
+  public static function add(&$params, $ids = []) {
     $oldStatus = $oldType = NULL;
     $params['id'] = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membership', $ids));
     if ($params['id']) {
@@ -111,7 +112,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
     $logStartDate = ($logStartDate) ? CRM_Utils_Date::isoToMysql($logStartDate) : CRM_Utils_Date::isoToMysql($membership->start_date);
     $values = self::getStatusANDTypeValues($membership->id);
 
-    $membershipLog = array(
+    $membershipLog = [
       'membership_id' => $membership->id,
       'status_id' => $membership->status_id,
       'start_date' => $logStartDate,
@@ -119,7 +120,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
       'modified_date' => date('Ymd'),
       'membership_type_id' => $values[$membership->id]['membership_type_id'],
       'max_related' => $membership->max_related,
-    );
+    ];
 
     $session = CRM_Core_Session::singleton();
     // If we have an authenticated session, set modified_id to that user's contact_id, else set to membership.contact_id
@@ -139,10 +140,10 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
     CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush();
 
     $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get');
-    $activityParams = array(
+    $activityParams = [
       'status_id' => CRM_Utils_Array::value('membership_activity_status', $params, 'Completed'),
-    );
-    if (in_array($allStatus[$membership->status_id], array('Pending', 'Grace'))) {
+    ];
+    if (in_array($allStatus[$membership->status_id], ['Pending', 'Grace'])) {
       $activityParams['status_id'] = 'Scheduled';
     }
     $activityParams['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', $activityParams['status_id']);
@@ -156,11 +157,11 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
         CRM_Activity_BAO_Activity::addActivity($membership,
           'Change Membership Status',
           NULL,
-          array(
+          [
             'subject' => "Status changed from {$allStatus[$oldStatus]} to {$allStatus[$membership->status_id]}",
             'source_contact_id' => $membershipLog['modified_id'],
             'priority_id' => 'Normal',
-          )
+          ]
         );
       }
       if (isset($membership->membership_type_id) && $membership->membership_type_id != $oldType) {
@@ -168,22 +169,22 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
         CRM_Activity_BAO_Activity::addActivity($membership,
           'Change Membership Type',
           NULL,
-          array(
+          [
             'subject' => "Type changed from {$membershipTypes[$oldType]} to {$membershipTypes[$membership->membership_type_id]}",
             'source_contact_id' => $membershipLog['modified_id'],
             'priority_id' => 'Normal',
-          )
+          ]
         );
       }
 
-      foreach (array('Membership Signup', 'Membership Renewal') as $activityType) {
+      foreach (['Membership Signup', 'Membership Renewal'] as $activityType) {
         $activityParams['id'] = CRM_Utils_Array::value('id',
           civicrm_api3('Activity', 'Get',
-            array(
+            [
               'source_record_id' => $membership->id,
               'activity_type_id' => $activityType,
               'status_id' => 'Scheduled',
-            )
+            ]
           )
         );
         // 1. Update Schedule Membership Signup/Renwal activity to completed on successful payment of pending membership
@@ -227,7 +228,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 
     $membership->copyValues($params);
     $membership->find();
-    $memberships = array();
+    $memberships = [];
     while ($membership->fetch()) {
       if ($active &&
         (!CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipStatus',
@@ -269,7 +270,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
     // eg pay later membership, membership update cron CRM-3984
 
     if (empty($params['is_override']) && empty($params['skipStatusCal'])) {
-      $dates = array('start_date', 'end_date', 'join_date');
+      $dates = ['start_date', 'end_date', 'join_date'];
       // Declare these out of courtesy as IDEs don't pick up the setting of them below.
       $start_date = $end_date = $join_date = NULL;
       foreach ($dates as $date) {
@@ -293,11 +294,11 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
         // however since we have no idea how (if) this is triggered we can't safely move / remove it
         // NB I tried really hard to trigger this error from backoffice membership form in order to test it
         // and am convinced form validation is complete on that form WRT this error.
-        $errorParams = array(
+        $errorParams = [
           'message_title' => ts('No valid membership status for given dates.'),
           'legacy_redirect_path' => 'civicrm/contact/view',
           'legacy_redirect_query' => "reset=1&force=1&cid={$params['contact_id']}&selectedChild=member",
-        );
+        ];
         throw new CRM_Core_Exception(ts(
           "The membership cannot be saved because the status cannot be calculated for start_date: $start_date end_date $end_date join_date $join_date as at " . date('Y-m-d H:i:s')),
           0,
@@ -359,12 +360,22 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
     }
     $params['skipLineItem'] = TRUE;
 
-    //record contribution for this membership
+    // Record contribution for this membership and create a MembershipPayment
     if (!empty($params['contribution_status_id']) && empty($params['relate_contribution_id'])) {
-      $memInfo = array_merge($params, array('membership_id' => $membership->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
+    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 (!empty($params['lineItems'])) {
       $params['line_item'] = $params['lineItems'];
     }
@@ -376,7 +387,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 
     // This could happen if there is no contribution or we are in one of many
     // weird and wonderful flows. This is scary code. Keep adding tests.
-    if (!empty($params['line_item']) && empty($ids['contribution'])) {
+    if (!empty($params['line_item']) && empty($ids['contribution']) && empty($params['contribution_id'])) {
 
       foreach ($params['line_item'] as $priceSetId => $lineItems) {
         foreach ($lineItems as $lineIndex => $lineItem) {
@@ -401,16 +412,6 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
       );
     }
 
-    //insert payment record for this 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);
-    }
-
     $transaction->commit();
 
     self::createRelatedMemberships($params, $membership);
@@ -427,7 +428,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
       $membershipTypes = CRM_Member_PseudoConstant::membershipType();
       $title = CRM_Contact_BAO_Contact::displayName($membership->contact_id) . ' - ' . ts('Membership Type:') . ' ' . $membershipTypes[$membership->membership_type_id];
 
-      $recentOther = array();
+      $recentOther = [];
       if (CRM_Core_Permission::checkActionPermission('CiviMember', CRM_Core_Action::UPDATE)) {
         $recentOther['editUrl'] = CRM_Utils_System::url('civicrm/contact/view/membership',
           "action=update&reset=1&id={$membership->id}&cid={$membership->contact_id}&context=home"
@@ -467,10 +468,10 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
    *   array of contact_id of all related contacts.
    */
   public static function checkMembershipRelationship($membershipTypeID, $contactId, $action = CRM_Core_Action::ADD) {
-    $contacts = array();
+    $contacts = [];
 
     $membershipType = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipTypeID);
-    $relationships = array();
+    $relationships = [];
     if (isset($membershipType['relationship_type_id'])) {
       $relationships = CRM_Contact_BAO_Relationship::getRelationship($contactId,
         CRM_Contact_BAO_Relationship::CURRENT
@@ -487,11 +488,11 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
       // check for each contact relationships
       foreach ($relationships as $values) {
         //get details of the relationship type
-        $relType = array('id' => $values['civicrm_relationship_type_id']);
-        $relValues = array();
+        $relType = ['id' => $values['civicrm_relationship_type_id']];
+        $relValues = [];
         CRM_Contact_BAO_RelationshipType::retrieve($relType, $relValues);
         // Check if contact's relationship type exists in membership type
-        $relTypeDirs = array();
+        $relTypeDirs = [];
         $relTypeIds = explode(CRM_Core_DAO::VALUE_SEPARATOR, $membershipType['relationship_type_id']);
         $relDirections = explode(CRM_Core_DAO::VALUE_SEPARATOR, $membershipType['relationship_direction']);
         $bidirectional = FALSE;
@@ -541,10 +542,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 
       //get the membership status and type values.
       $statusANDType = self::getStatusANDTypeValues($membership->id);
-      foreach (array(
-        'status',
-        'membership_type',
-      ) as $fld) {
+      foreach (['status', 'membership_type'] as $fld) {
         $defaults[$fld] = CRM_Utils_Array::value($fld, $statusANDType[$membership->id]);
       }
       if (!empty($statusANDType[$membership->id]['is_current_member'])) {
@@ -567,7 +565,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
    *   Array of key value pairs
    */
   public static function getStatusANDTypeValues($membershipId) {
-    $values = array();
+    $values = [];
     if (!$membershipId) {
       return $values;
     }
@@ -583,15 +581,15 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 INNER JOIN  civicrm_membership_status status ON ( status.id = membership.status_id )
 INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_type_id )
      WHERE  membership.id = %1';
-    $dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($membershipId, 'Positive')));
-    $properties = array(
+    $dao = CRM_Core_DAO::executeQuery($sql, [1 => [$membershipId, 'Positive']]);
+    $properties = [
       'status',
       'status_id',
       'membership_type',
       'membership_type_id',
       'is_current_member',
       'relationship_type_id',
-    );
+    ];
     while ($dao->fetch()) {
       foreach ($properties as $property) {
         $values[$dao->id][$property] = $dao->$property;
@@ -631,8 +629,8 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
    */
   public static function deleteMembership($membershipId, $preserveContrib = FALSE) {
     // CRM-12147, retrieve membership data before we delete it for hooks
-    $params = array('id' => $membershipId);
-    $memValues = array();
+    $params = ['id' => $membershipId];
+    $memValues = [];
     $memberships = self::getValues($params, $memValues);
 
     $membership = $memberships[$membershipId];
@@ -645,15 +643,15 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
     //delete activity record
     $activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'name');
 
-    $params = array();
+    $params = [];
     $deleteActivity = FALSE;
-    $membershipActivities = array(
+    $membershipActivities = [
       'Membership Signup',
       'Membership Renewal',
       'Change Membership Status',
       'Change Membership Type',
       'Membership Renewal Reminder',
-    );
+    ];
     foreach ($membershipActivities as $membershipActivity) {
       $activityId = array_search($membershipActivity, $activityTypes);
       if ($activityId) {
@@ -673,10 +671,10 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
     CRM_Utils_Hook::post('delete', 'Membership', $membership->id, $membership);
 
     // delete the recently created Membership
-    $membershipRecent = array(
+    $membershipRecent = [
       'id' => $membershipId,
       'type' => 'Membership',
-    );
+    ];
     CRM_Utils_Recent::del($membershipRecent);
 
     return $results;
@@ -722,7 +720,7 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
    *   array of memberships based on status
    */
   public static function activeMembers($memberships, $status = 'active') {
-    $actives = array();
+    $actives = [];
     if ($status == 'active') {
       foreach ($memberships as $f => $v) {
         if (!empty($v['active'])) {
@@ -751,7 +749,7 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
    * @return array|null
    */
   public static function getMembershipBlock($pageID) {
-    $membershipBlock = array();
+    $membershipBlock = [];
     $dao = new CRM_Member_DAO_MembershipBlock();
     $dao->entity_table = 'civicrm_contribution_page';
 
@@ -764,7 +762,7 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
         if (!is_array($membershipTypes)) {
           return $membershipBlock;
         }
-        $memTypes = array();
+        $memTypes = [];
         foreach ($membershipTypes as $key => $value) {
           $membershipBlock['auto_renew'][$key] = $value;
           $memTypes[$key] = $key;
@@ -795,6 +793,7 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
    *   True if only Memberships with same parent org as the $memType wanted, false otherwise.
    *
    * @return array|bool
+   * @throws \CiviCRM_API3_Exception
    */
   public static function getContactMembership($contactID, $memType, $isTest, $membershipId = NULL, $onlySameParentOrg = FALSE) {
     //check for owner membership id, if it exists update that membership instead: CRM-15992
@@ -828,7 +827,7 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
     }
 
     //avoid pending membership as current membership: CRM-3027
-    $statusIds = array(array_search('Pending', CRM_Member_PseudoConstant::membershipStatus()));
+    $statusIds = [array_search('Pending', CRM_Member_PseudoConstant::membershipStatus())];
     if (!$membershipId) {
       // CRM-15475
       $statusIds[] = array_search(
@@ -850,22 +849,22 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
     // CRM-8141
     if ($onlySameParentOrg && $memType) {
       // require the same parent org as the $memType
-      $params = array('id' => $memType);
-      $membershipType = array();
+      $params = ['id' => $memType];
+      $membershipType = [];
       if (CRM_Member_BAO_MembershipType::retrieve($params, $membershipType)) {
-        $memberTypesSameParentOrg = civicrm_api3('MembershipType', 'get', array(
+        $memberTypesSameParentOrg = civicrm_api3('MembershipType', 'get', [
           'member_of_contact_id' => $membershipType['member_of_contact_id'],
-          'options' => array(
+          'options' => [
             'limit' => 0,
-          ),
-        ));
-        $memberTypesSameParentOrgList = implode(',', array_keys(CRM_Utils_Array::value('values', $memberTypesSameParentOrg, array())));
+          ],
+        ]);
+        $memberTypesSameParentOrgList = implode(',', array_keys(CRM_Utils_Array::value('values', $memberTypesSameParentOrg, [])));
         $dao->whereAdd('membership_type_id IN (' . $memberTypesSameParentOrgList . ')');
       }
     }
 
     if ($dao->find(TRUE)) {
-      $membership = array();
+      $membership = [];
       CRM_Core_DAO::storeValues($dao, $membership);
       $membership['is_current_member'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipStatus',
         $membership['status_id'],
@@ -898,7 +897,7 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
 
       unset($dao->membership_type_id);
       if ($dao->find(TRUE)) {
-        $membership = array();
+        $membership = [];
         CRM_Core_DAO::storeValues($dao, $membership);
         $membership['is_current_member'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipStatus',
           $membership['status_id'],
@@ -923,27 +922,27 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
   public static function &importableFields($contactType = 'Individual', $status = TRUE) {
     if (!self::$_importableFields) {
       if (!self::$_importableFields) {
-        self::$_importableFields = array();
+        self::$_importableFields = [];
       }
 
       if (!$status) {
-        $fields = array('' => array('title' => '- ' . ts('do not import') . ' -'));
+        $fields = ['' => ['title' => '- ' . ts('do not import') . ' -']];
       }
       else {
-        $fields = array('' => array('title' => '- ' . ts('Membership Fields') . ' -'));
+        $fields = ['' => ['title' => '- ' . ts('Membership Fields') . ' -']];
       }
 
       $tmpFields = CRM_Member_DAO_Membership::import();
       $contactFields = CRM_Contact_BAO_Contact::importableFields($contactType, NULL);
 
       // Using new Dedupe rule.
-      $ruleParams = array(
+      $ruleParams = [
         'contact_type' => $contactType,
         'used' => 'Unsupervised',
-      );
+      ];
       $fieldsArray = CRM_Dedupe_BAO_Rule::dedupeRuleFields($ruleParams);
 
-      $tmpContactField = array();
+      $tmpContactField = [];
       if (is_array($fieldsArray)) {
         foreach ($fieldsArray as $value) {
           $customFieldId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomField',
@@ -986,14 +985,14 @@ INNER JOIN  civicrm_membership_type type ON ( type.id = membership.membership_ty
     $expFieldsMemType = CRM_Member_DAO_MembershipType::export();
     $fields = array_merge($expFieldMembership, $expFieldsMemType);
     $fields = array_merge($fields, $expFieldMembership);
-    $membershipStatus = array(
-      'membership_status' => array(
+    $membershipStatus = [
+      'membership_status' => [
         'title' => ts('Membership Status'),
         'name' => 'membership_status',
         'type' => CRM_Utils_Type::T_STRING,
         'where' => 'civicrm_membership_status.name',
-      ),
-    );
+      ],
+    ];
     //CRM-6161 fix for customdata export
     $fields = array_merge($fields, $membershipStatus, CRM_Core_BAO_CustomField::getFieldsForImport('Membership'));
     return $fields;
@@ -1046,11 +1045,11 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
 
     $query .= ($isOwner) ? ' AND owner_membership_id IS NULL' : '';
 
-    $params = array(
-      1 => array(self::$_signupActType, 'Integer'),
-      2 => array(self::$_renewalActType, 'Integer'),
-      3 => array($membershipTypeId, 'Integer'),
-    );
+    $params = [
+      1 => [self::$_signupActType, 'Integer'],
+      2 => [self::$_renewalActType, 'Integer'],
+      3 => [$membershipTypeId, 'Integer'],
+    ];
 
     $memberCount = CRM_Core_DAO::singleValueQuery($query, $params);
     return (int) $memberCount;
@@ -1082,13 +1081,13 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    */
   public static function getMembershipCount($membershipTypeId, $date = NULL, $isTest = 0, $isOwner = 0) {
     if (!CRM_Utils_Rule::date($date)) {
-      CRM_Core_Error::fatal(ts('Invalid date "%1" (must have form yyyy-mm-dd).', array(1 => $date)));
+      CRM_Core_Error::fatal(ts('Invalid date "%1" (must have form yyyy-mm-dd).', [1 => $date]));
     }
 
-    $params = array(
-      1 => array($membershipTypeId, 'Integer'),
-      2 => array($isTest, 'Boolean'),
-    );
+    $params = [
+      1 => [$membershipTypeId, 'Integer'],
+      2 => [$isTest, 'Boolean'],
+    ];
     $query = "SELECT  count(civicrm_membership.id ) as member_count
 FROM   civicrm_membership left join civicrm_membership_status on ( civicrm_membership.status_id = civicrm_membership_status.id  )
 WHERE  civicrm_membership.membership_type_id = %1
@@ -1118,21 +1117,23 @@ AND civicrm_membership.is_test = %2";
   }
 
   /**
+   * @deprecated This is not used anywhere and should be removed soon!
    * Function for updating a membership record's contribution_recur_id.
    *
    * @param CRM_Member_DAO_Membership $membership
    * @param \CRM_Contribute_BAO_Contribution|\CRM_Contribute_DAO_Contribution $contribution
    */
   public static function updateRecurMembership(CRM_Member_DAO_Membership $membership, CRM_Contribute_BAO_Contribution $contribution) {
+    CRM_Core_Error::deprecatedFunctionWarning('Use the API instead');
 
     if (empty($contribution->contribution_recur_id)) {
       return;
     }
 
-    $params = array(
-      1 => array($contribution->contribution_recur_id, 'Integer'),
-      2 => array($membership->id, 'Integer'),
-    );
+    $params = [
+      1 => [$contribution->contribution_recur_id, 'Integer'],
+      2 => [$membership->id, 'Integer'],
+    ];
 
     $sql = "UPDATE civicrm_membership SET contribution_recur_id = %1 WHERE id = %2";
     CRM_Core_DAO::executeQuery($sql, $params);
@@ -1152,6 +1153,8 @@ AND civicrm_membership.is_test = %2";
    * @param string $changeToday
    *   In case today needs
    *   to be customised, null otherwise
+   *
+   * @throws \CRM_Core_Exception
    */
   public static function fixMembershipStatusBeforeRenew(&$currentMembership, $changeToday) {
     $today = NULL;
@@ -1195,7 +1198,7 @@ AND civicrm_membership.is_test = %2";
       );
       $format = '%Y%m%d';
 
-      $logParams = array(
+      $logParams = [
         'membership_id' => $currentMembership['id'],
         'status_id' => $status['id'],
         'start_date' => CRM_Utils_Date::customFormat(
@@ -1212,7 +1215,7 @@ AND civicrm_membership.is_test = %2";
         ),
         'membership_type_id' => $currentMembership['membership_type_id'],
         'max_related' => CRM_Utils_Array::value('max_related', $currentMembership, 0),
-      );
+      ];
 
       $session = CRM_Core_Session::singleton();
       // If we have an authenticated session, set modified_id to that user's contact_id, else set to membership.contact_id
@@ -1228,11 +1231,11 @@ AND civicrm_membership.is_test = %2";
       CRM_Activity_BAO_Activity::addActivity($memberDAO,
         'Change Membership Status',
         NULL,
-        array(
+        [
           'subject' => "Status changed from {$allStatus[$oldStatus]} to {$allStatus[$status['id']]}",
           'source_contact_id' => $logParams['modified_id'],
           'priority_id' => 'Normal',
-        )
+        ]
       );
 
       CRM_Member_BAO_MembershipLog::add($logParams);
@@ -1343,14 +1346,15 @@ WHERE  civicrm_membership.contact_id = civicrm_contact.id
    *   Membership details, if created.
    *
    * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public static function createRelatedMemberships(&$params, &$dao, $reset = FALSE) {
     // CRM-4213 check for loops, using static variable to record contacts already processed.
-    static $relatedContactIds = array();
+    static $relatedContactIds = [];
     if ($reset) {
       // We need a way to reset this static variable from the test suite.
       // @todo consider replacing with Civi::$statics but note reset now used elsewhere: CRM-17723.
-      $relatedContactIds = array();
+      $relatedContactIds = [];
       return FALSE;
     }
 
@@ -1382,8 +1386,8 @@ WHERE  civicrm_membership.contact_id = civicrm_contact.id
       $expiredStatusId = array_search('Expired', CRM_Member_PseudoConstant::membershipStatus());
     }
 
-    $allRelatedContacts = array();
-    $relatedContacts = array();
+    $allRelatedContacts = [];
+    $relatedContacts = [];
     if (!is_a($membership, 'CRM_Core_Error')) {
       $allRelatedContacts = CRM_Member_BAO_Membership::checkMembershipRelationship($membership->membership_type_id,
         $membership->contact_id,
@@ -1436,7 +1440,7 @@ WHERE  civicrm_membership.contact_id = civicrm_contact.id
       // Number of inherited memberships available - NULL is interpreted as unlimited, '0' as none
       $numRelatedAvailable = ($membership->max_related == NULL ? PHP_INT_MAX : $membership->max_related);
       // will be used to queue potential memberships to be created.
-      $queue = array();
+      $queue = [];
 
       foreach ($relatedContacts as $contactId => $relationshipStatus) {
         //use existing membership record.
@@ -1561,7 +1565,7 @@ WHERE  civicrm_membership.contact_id = civicrm_contact.id
    *
    * @return array
    */
-  public static function buildMembershipTypeValues(&$form, $membershipTypeID = array(), $activeOnly = FALSE) {
+  public static function buildMembershipTypeValues(&$form, $membershipTypeID = [], $activeOnly = FALSE) {
     $whereClause = " WHERE domain_id = " . CRM_Core_Config::domainID();
     $membershipTypeIDS = (array) $membershipTypeID;
 
@@ -1588,8 +1592,8 @@ FROM   civicrm_membership_type
 ";
     $dao = CRM_Core_DAO::executeQuery($query);
 
-    $membershipTypeValues = array();
-    $membershipTypeFields = array(
+    $membershipTypeValues = [];
+    $membershipTypeFields = [
       'id',
       'minimum_fee',
       'name',
@@ -1603,10 +1607,10 @@ FROM   civicrm_membership_type
       'max_related',
       'duration_unit',
       'duration_interval',
-    );
+    ];
 
     while ($dao->fetch()) {
-      $membershipTypeValues[$dao->id] = array();
+      $membershipTypeValues[$dao->id] = [];
       foreach ($membershipTypeFields as $mtField) {
         $membershipTypeValues[$dao->id][$mtField] = $dao->$mtField;
       }
@@ -1665,7 +1669,7 @@ FROM   civicrm_membership_type
     $cacheKeyString = "$mid";
     $cacheKeyString .= $isNotCancelled ? '_1' : '_0';
 
-    static $supportsCancel = array();
+    static $supportsCancel = [];
 
     if (!array_key_exists($cacheKeyString, $supportsCancel)) {
       $supportsCancel[$cacheKeyString] = FALSE;
@@ -1698,7 +1702,7 @@ FROM   civicrm_membership_type
      FROM civicrm_contribution_recur cr
 LEFT JOIN civicrm_membership mem ON ( cr.id = mem.contribution_recur_id )
     WHERE mem.id = %1 LIMIT 1";
-    $params = array(1 => array($mid, 'Integer'));
+    $params = [1 => [$mid, 'Integer']];
     $statusId = CRM_Core_DAO::singleValueQuery($sql, $params);
     $status = CRM_Contribute_PseudoConstant::contributionStatus($statusId, 'name');
     if ($status == 'Cancelled') {
@@ -1750,10 +1754,10 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
        AND  activity.activity_date_time >= '$startDate' AND activity.activity_date_time <= '$endDate 23:59:59'
        AND  {$testClause}";
 
-    $params = array(
-      1 => array(self::$_signupActType, 'Integer'),
-      2 => array($membershipTypeId, 'Integer'),
-    );
+    $params = [
+      1 => [self::$_signupActType, 'Integer'],
+      2 => [$membershipTypeId, 'Integer'],
+    ];
 
     $memberCount = CRM_Core_DAO::singleValueQuery($query, $params);
 
@@ -1803,10 +1807,10 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
        AND  activity.activity_date_time >= '$startDate' AND activity.activity_date_time <= '$endDate 23:59:59'
        AND  {$testClause}";
 
-    $params = array(
-      1 => array(self::$_renewalActType, 'Integer'),
-      2 => array($membershipTypeId, 'Integer'),
-    );
+    $params = [
+      1 => [self::$_renewalActType, 'Integer'],
+      2 => [$membershipTypeId, 'Integer'],
+    ];
     $memberCount = CRM_Core_DAO::singleValueQuery($query, $params);
 
     return (int) $memberCount;
@@ -1832,15 +1836,17 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    *
    * @return array
    * @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, $campaignId, $formDates = array(), $contribution = NULL, $lineItems = array()) {
+  public static function processMembership($contactID, $membershipTypeID, $is_test, $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $contributionRecurID, $membershipSource, $isPayLater, $campaignId, $formDates = [], $contribution = NULL, $lineItems = []) {
     $renewalMode = $updateStatusId = FALSE;
     $allStatus = CRM_Member_PseudoConstant::membershipStatus();
     $format = '%Y%m%d';
     $statusFormat = '%Y-%m-%d';
     $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipTypeID);
-    $dates = array();
-    $ids = array();
+    $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,
@@ -1852,13 +1858,13 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
       // 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(
+      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(
+        $memParams = [
           'id' => $currentMembership['id'],
           'contribution' => $contribution,
           'status_id' => $currentMembership['status_id'],
@@ -1869,13 +1875,13 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
           'membership_type_id' => $membershipTypeID,
           'max_related' => !empty($membershipTypeDetails['max_related']) ? $membershipTypeDetails['max_related'] : NULL,
           'membership_activity_status' => ($pending || $isPayLater) ? 'Scheduled' : 'Completed',
-        );
+        ];
         if ($contributionRecurID) {
           $memParams['contribution_recur_id'] = $contributionRecurID;
         }
         // @todo stop passing $ids - it is empty
         $membership = self::create($memParams, $ids);
-        return array($membership, $renewalMode, $dates);
+        return [$membership, $renewalMode, $dates];
       }
 
       // Check and fix the membership if it is STALE
@@ -1893,7 +1899,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 (array('start_date', 'end_date') as $dateType) {
+        foreach (['start_date', 'end_date'] as $dateType) {
           $currentMembership[$dateType] = CRM_Utils_Array::value($dateType, $formDates);
           if (empty($currentMembership[$dateType])) {
             $currentMembership[$dateType] = CRM_Utils_Array::value($dateType, $dates);
@@ -1934,7 +1940,7 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
         );
 
         // Insert renewed dates for CURRENT membership
-        $memParams = array();
+        $memParams = [];
         $memParams['join_date'] = CRM_Utils_Date::isoToMysql($membership->join_date);
         $memParams['start_date'] = CRM_Utils_Array::value('start_date', $formDates, CRM_Utils_Date::isoToMysql($membership->start_date));
         $memParams['end_date'] = CRM_Utils_Array::value('end_date', $formDates);
@@ -1969,15 +1975,15 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
     }
     else {
       // NEW Membership
-      $memParams = array(
+      $memParams = [
         'contact_id' => $contactID,
         'membership_type_id' => $membershipTypeID,
-      );
+      ];
 
       if (!$pending) {
         $dates = CRM_Member_BAO_MembershipType::getDatesForMembershipType($membershipTypeID, NULL, NULL, NULL, $numRenewTerms);
 
-        foreach (array('join_date', 'start_date', 'end_date') as $dateType) {
+        foreach (['join_date', 'start_date', 'end_date'] as $dateType) {
           $memParams[$dateType] = CRM_Utils_Array::value($dateType, $formDates);
           if (empty($memParams[$dateType])) {
             $memParams[$dateType] = CRM_Utils_Array::value($dateType, $dates);
@@ -1985,8 +1991,8 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
         }
 
         $status = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate(CRM_Utils_Date::customFormat($dates['start_date'],
-            $statusFormat
-          ),
+          $statusFormat
+        ),
           CRM_Utils_Date::customFormat($dates['end_date'],
             $statusFormat
           ),
@@ -2054,7 +2060,7 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
     // related to: http://forum.civicrm.org/index.php/topic,11416.msg49072.html#msg49072
     $membership->find(TRUE);
 
-    return array($membership, $renewalMode, $dates);
+    return [$membership, $renewalMode, $dates];
   }
 
   /**
@@ -2071,21 +2077,21 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
     $priceSets = current(CRM_Price_BAO_PriceSet::getSetDetail($priceSetId));
 
     // The name of the price field corresponds to the membership_type organization contact.
-    $params = array(
+    $params = [
       'price_set_id' => $priceSetId,
       'name' => $membershipOrg,
-    );
-    $results = array();
+    ];
+    $results = [];
     CRM_Price_BAO_PriceField::retrieve($params, $results);
 
     if (!empty($results)) {
       $fields[$results['id']] = $priceSets['fields'][$results['id']];
       $fid = $results['id'];
-      $editedFieldParams = array(
+      $editedFieldParams = [
         'price_field_id' => $results['id'],
         'membership_type_id' => $membershipTypeID,
-      );
-      $results = array();
+      ];
+      $results = [];
       CRM_Price_BAO_PriceFieldValue::retrieve($editedFieldParams, $results);
       $fields[$fid]['options'][$results['id']] = $priceSets['fields'][$fid]['options'][$results['id']];
       if (!empty($total_amount)) {
@@ -2094,14 +2100,14 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
     }
 
     $fieldID = key($fields);
-    $returnParams = array(
+    $returnParams = [
       'price_set_id' => $priceSetId,
       'price_sets' => $priceSets,
       'fields' => $fields,
-      'price_fields' => array(
+      'price_fields' => [
         'price_' . $fieldID => CRM_Utils_Array::value('id', $results),
-      ),
-    );
+      ],
+    ];
     return $returnParams;
   }
 
@@ -2110,6 +2116,9 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    *
    * @return int
    *   Count of updated contacts.
+   *
+   * @throws \CiviCRM_API3_Exception
+   * @throws \CRM_Core_Exception
    */
   protected static function updateDeceasedMembersStatuses() {
     $count = 0;
@@ -2163,6 +2172,8 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    *
    * @param int $membershipId
    * @param array $lineItem
+   *
+   * @throws \CiviCRM_API3_Exception
    */
   public function processPriceSet($membershipId, $lineItem) {
     //FIXME : need to move this too
@@ -2195,13 +2206,15 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    *
    * @return int|int[]
    *   contribution id
+   * @todo we should get this off the line item
+   *
    */
   public static function getMembershipContributionId($membershipId, $all = FALSE) {
 
     $membershipPayment = new CRM_Member_DAO_MembershipPayment();
     $membershipPayment->membership_id = $membershipId;
     if ($all && $membershipPayment->find()) {
-      $contributionIds = array();
+      $contributionIds = [];
       while ($membershipPayment->fetch()) {
         $contributionIds[] = $membershipPayment->contribution_id;
       }
@@ -2222,6 +2235,9 @@ INNER JOIN  civicrm_contact contact ON ( contact.id = membership.contact_id AND
    * Sending renewal reminders has been migrated from this job to the Scheduled Reminders function as of 4.3.
    *
    * @return array
+   *
+   * @throws \CiviCRM_API3_Exception
+   * @throws \CRM_Core_Exception
    */
   public static function updateAllMembershipStatus() {
     // Tests for this function are in api_v3_JobTest. Please add tests for all updates.
@@ -2270,12 +2286,12 @@ WHERE      civicrm_membership.is_test = 0
     $query = $baseQuery . " AND (civicrm_membership.is_override = 0 OR civicrm_membership.is_override IS NULL) 
      AND civicrm_membership.status_id NOT IN (%1, %2, %3, %4)
      AND civicrm_membership.owner_membership_id IS NULL ";
-    $params = array(
-      1 => array($pendingStatusId, 'Integer'),
-      2 => array($cancelledStatusId, 'Integer'),
-      3 => array($expiredStatusId, 'Integer'),
-      4 => array($deceaseStatusId, 'Integer'),
-    );
+    $params = [
+      1 => [$pendingStatusId, 'Integer'],
+      2 => [$cancelledStatusId, 'Integer'],
+      3 => [$expiredStatusId, 'Integer'],
+      4 => [$deceaseStatusId, 'Integer'],
+    ];
     $dao2 = CRM_Core_DAO::executeQuery($query, $params);
 
     while ($dao2->fetch()) {
@@ -2283,7 +2299,7 @@ WHERE      civicrm_membership.is_test = 0
       $processCount++;
 
       // Put common parameters into array for easy access
-      $memberParams = array(
+      $memberParams = [
         'id' => $dao2->membership_id,
         'status_id' => $dao2->status_id,
         'contact_id' => $dao2->contact_id,
@@ -2295,16 +2311,16 @@ WHERE      civicrm_membership.is_test = 0
         'source' => $dao2->source,
         'skipStatusCal' => TRUE,
         'skipRecentView' => TRUE,
-      );
+      ];
 
       // CRM-7248: added excludeIsAdmin param to the following fn call to prevent moving to admin statuses
       //get the membership status as per id.
       $newStatus = civicrm_api('membership_status', 'calc',
-        array(
+        [
           'membership_id' => $dao2->membership_id,
           'version' => 3,
           'ignore_admin_only' => TRUE,
-        ), TRUE
+        ], TRUE
       );
       $statusId = CRM_Utils_Array::value('id', $newStatus);
 
@@ -2338,10 +2354,10 @@ WHERE      civicrm_membership.is_test = 0
       }
     }
     $result['is_error'] = 0;
-    $result['messages'] = ts('Processed %1 membership records. Updated %2 records.', array(
+    $result['messages'] = ts('Processed %1 membership records. Updated %2 records.', [
       1 => $processCount,
       2 => $updateCount,
-    ));
+    ]);
     return $result;
   }
 
@@ -2352,6 +2368,8 @@ WHERE      civicrm_membership.is_test = 0
    *
    * @param CRM_Core_DAO $membership
    *   The membership to be processed
+   *
+   * @throws \CiviCRM_API3_Exception
    */
   private static function processOverriddenUntilDateMembership($membership) {
     $isOverriddenUntilDate = !empty($membership->is_override) && !empty($membership->status_override_end_date);
@@ -2368,11 +2386,11 @@ WHERE      civicrm_membership.is_test = 0
     $datesDifference = $todayDate->diff($overrideEndDate);
     $daysDifference = (int) $datesDifference->format('%R%a');
     if ($daysDifference <= 0) {
-      $params = array(
+      $params = [
         'id' => $membership->membership_id,
         'is_override' => FALSE,
         'status_override_end_date' => 'null',
-      );
+      ];
       civicrm_api3('membership', 'create', $params);
     }
   }
@@ -2388,7 +2406,7 @@ WHERE      civicrm_membership.is_test = 0
    * @return array
    */
   public static function getAllContactMembership($contactID, $isTest = FALSE, $onlyLifeTime = FALSE) {
-    $contactMembershipType = array();
+    $contactMembershipType = [];
     if (!$contactID) {
       return $contactMembershipType;
     }
@@ -2411,7 +2429,7 @@ WHERE      civicrm_membership.is_test = 0
 
     $dao->find();
     while ($dao->fetch()) {
-      $membership = array();
+      $membership = [];
       CRM_Core_DAO::storeValues($dao, $membership);
       $contactMembershipType[$dao->membership_type_id] = $membership;
     }
@@ -2420,20 +2438,24 @@ WHERE      civicrm_membership.is_test = 0
 
   /**
    * Record contribution record associated with membership.
+   * This will update an existing contribution if $params['contribution_id'] is passed in.
+   * This will create a MembershipPayment to link the contribution and membership
    *
    * @param array $params
    *   Array of submitted params.
    * @param array $ids
-   *   (@deprecated) array of ids.
+   *   (@return CRM_Contribute_BAO_Contribution
    *
    * @return CRM_Contribute_BAO_Contribution
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
-  public static function recordMembershipContribution(&$params, $ids = array()) {
+  public static function recordMembershipContribution(&$params, $ids = []) {
     if (!empty($ids)) {
       CRM_Core_Error::deprecatedFunctionWarning('no $ids array');
     }
     $membershipId = $params['membership_id'];
-    $contributionParams = array();
+    $contributionParams = [];
     $config = CRM_Core_Config::singleton();
     $contributionParams['currency'] = $config->defaultCurrency;
     $contributionParams['receipt_date'] = (CRM_Utils_Array::value('receipt_date', $params)) ? $params['receipt_date'] : 'null';
@@ -2442,7 +2464,7 @@ WHERE      civicrm_membership.is_test = 0
     $contributionParams['skipCleanMoney'] = TRUE;
     $contributionParams['payment_processor'] = CRM_Utils_Array::value('payment_processor_id', $params);
     $contributionSoftParams = CRM_Utils_Array::value('soft_credit', $params);
-    $recordContribution = array(
+    $recordContribution = [
       'contact_id',
       'fee_amount',
       'total_amount',
@@ -2462,7 +2484,7 @@ WHERE      civicrm_membership.is_test = 0
       'contribution_recur_id',
       'pan_truncation',
       'card_type_id',
-    );
+    ];
     foreach ($recordContribution as $f) {
       $contributionParams[$f] = CRM_Utils_Array::value($f, $params);
     }
@@ -2508,8 +2530,11 @@ WHERE      civicrm_membership.is_test = 0
     // store contribution id
     $params['contribution_id'] = $contribution->id;
 
-    //insert payment record for this membership
-    if (empty($ids['contribution']) || !empty($params['is_recur'])) {
+    // Create membership payment if it does not already exist
+    $membershipPayment = civicrm_api3('MembershipPayment', 'get', [
+      'contribution_id' => $contribution->id,
+    ]);
+    if (empty($membershipPayment['count'])) {
       civicrm_api3('MembershipPayment', 'create', [
         'membership_id' => $membershipId,
         'contribution_id' => $contribution->id,
@@ -2541,12 +2566,12 @@ WHERE      civicrm_membership.is_test = 0
    */
   public static function getContactsCancelledMembership($contactID, $isTest = FALSE) {
     if (!$contactID) {
-      return array();
+      return [];
     }
     $query = 'SELECT membership_type_id FROM civicrm_membership WHERE contact_id = %1 AND status_id = %2 AND is_test = %3';
-    $queryParams = array(
-      1 => array($contactID, 'Integer'),
-      2 => array(
+    $queryParams = [
+      1 => [$contactID, 'Integer'],
+      2 => [
         // CRM-15475
         array_search(
           'Cancelled',
@@ -2559,12 +2584,12 @@ WHERE      civicrm_membership.is_test = 0
           )
         ),
         'Integer',
-      ),
-      3 => array($isTest, 'Boolean'),
-    );
+      ],
+      3 => [$isTest, 'Boolean'],
+    ];
 
     $dao = CRM_Core_DAO::executeQuery($query, $queryParams);
-    $cancelledMembershipIds = array();
+    $cancelledMembershipIds = [];
     while ($dao->fetch()) {
       $cancelledMembershipIds[] = $dao->membership_type_id;
     }
@@ -2613,16 +2638,16 @@ WHERE      civicrm_membership.is_test = 0
      * Retrieve all memberships that belongs to each contacts and
      * keep track of each membership type.
      */
-    $mainContactMemberships = array();
-    $otherContactMemberships = array();
+    $mainContactMemberships = [];
+    $otherContactMemberships = [];
 
     $sql = "SELECT id, membership_type_id FROM civicrm_membership membership WHERE contact_id = %1";
-    $dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($mainContactID, "Integer")));
+    $dao = CRM_Core_DAO::executeQuery($sql, [1 => [$mainContactID, "Integer"]]);
     while ($dao->fetch()) {
       $mainContactMemberships[$dao->id] = $dao->membership_type_id;
     }
 
-    $dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($otherContactID, "Integer")));
+    $dao = CRM_Core_DAO::executeQuery($sql, [1 => [$otherContactID, "Integer"]]);
     while ($dao->fetch()) {
       $otherContactMemberships[$dao->id] = $dao->membership_type_id;
     }
@@ -2638,7 +2663,7 @@ WHERE      civicrm_membership.is_test = 0
      * FIXME: what should we do if we have multiple memberships with
      * the same type (currently we only take the first one)?
      */
-    $newSql = array();
+    $newSql = [];
     foreach ($otherContactMemberships as $otherMembershipId => $otherMembershipTypeId) {
       if ($newMembershipId = array_search($otherMembershipTypeId, $mainContactMemberships)) {
 
@@ -2655,7 +2680,7 @@ WHERE      civicrm_membership.is_test = 0
         $newMembership = CRM_Member_DAO_Membership::findById($newMembershipId);
         $otherMembership = CRM_Member_DAO_Membership::findById($otherMembershipId);
 
-        $updates = array();
+        $updates = [];
         if (new DateTime($otherMembership->join_date) < new DateTime($newMembership->join_date)) {
           $updates["join_date"] = $otherMembership->join_date;
         }
index bdc9c861101e8bcdd05d732aed3365902efd38a6..383a73f63e1eac82cb12d1a24ae620d63ffab1d7 100644 (file)
@@ -1132,20 +1132,21 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
     //take the required membership recur values.
     if ($this->_mode && !empty($formValues['auto_renew'])) {
       $params['is_recur'] = $formValues['is_recur'] = TRUE;
-      $mapping = [
-        'frequency_interval' => 'duration_interval',
-        'frequency_unit' => 'duration_unit',
-      ];
 
       $count = 0;
       foreach ($this->_memTypeSelected as $memType) {
         $recurMembershipTypeValues = CRM_Utils_Array::value($memType,
-          $this->_recurMembershipTypes, []
+          $this->allMembershipTypeDetails, []
         );
-        foreach ($mapping as $mapVal => $mapParam) {
-          $membershipTypeValues[$memType][$mapVal] = CRM_Utils_Array::value($mapParam,
-            $recurMembershipTypeValues
-          );
+        if (!$recurMembershipTypeValues['auto_renew']) {
+          continue;
+        }
+        foreach ([
+          'frequency_interval' => 'duration_interval',
+          'frequency_unit' => 'duration_unit',
+        ] as $mapVal => $mapParam) {
+          $membershipTypeValues[$memType][$mapVal] = $recurMembershipTypeValues[$mapParam];
+
           if (!$count) {
             $formValues[$mapVal] = CRM_Utils_Array::value($mapParam,
               $recurMembershipTypeValues
index 2553d1f1fb2af84f67369f7b1d7443bb1675d4c0..7ff71dc844f9ffc0e3bed65b3e80f1b0931ffc19 100644 (file)
@@ -576,7 +576,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form {
 
     //if contribution status is pending then set pay later
     $this->_params['is_pay_later'] = FALSE;
-    if ($this->_params['contribution_status_id'] == array_search('Pending', CRM_Contribute_PseudoConstant::contributionStatus())) {
+    if ($this->_params['contribution_status_id'] == array_search('Pending', CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label'))) {
       $this->_params['is_pay_later'] = 1;
     }
 
@@ -588,7 +588,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form {
     }
 
     // @todo Move this into CRM_Member_BAO_Membership::processMembership
-    $pending = ($this->_params['contribution_status_id'] == array_search('Pending', CRM_Contribute_PseudoConstant::contributionStatus())) ? TRUE : FALSE;
+    $pending = ($this->_params['contribution_status_id'] == array_search('Pending', CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label'))) ? TRUE : FALSE;
     list($membership) = CRM_Member_BAO_Membership::processMembership(
       $this->_contactID, $this->_params['membership_type_id'][1], $isTestMembership,
       $renewalDate, NULL, $customFieldsFormatted, $numRenewTerms, $this->_membershipId,
index 07661c9fb7f9aebd637eb47073ece9807ffde158..546350457f156058c685e73e9f727ad0ab429b47 100644 (file)
@@ -76,7 +76,7 @@ class CRM_Member_Page_RecurringContributions extends CRM_Core_Page {
       'membership_id' => $membershipID,
     ]);
     $recurringContributions = [];
-    $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
 
     foreach ($result['values'] as $payment) {
       $recurringContributionID = $payment['contribution_id.contribution_recur_id.id'];
index 0026d4a9ff0f6c4c987e09e9dcbf01a2c7dacbbb..e5feb625b599210361ca6c769b32b07c735b1766 100644 (file)
@@ -1106,7 +1106,7 @@ SELECT  pledge.contact_id              as contact_id,
    *   Array of int (civicrm_pledge_payment.id)
    */
   public static function findCancelablePayments($pledgeID) {
-    $statuses = array_flip(CRM_Contribute_PseudoConstant::contributionStatus());
+    $statuses = array_flip(CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label'));
 
     $paymentDAO = new CRM_Pledge_DAO_PledgePayment();
     $paymentDAO->pledge_id = $pledgeID;
index e7478f8b1310de74db35e4ceccccb1eca04fb1dd..3e80eb7615da505ff7ff5a7ccaa28d868a4d1852 100644 (file)
@@ -96,7 +96,6 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
       list($this->userDisplayName,
         $this->userEmail
         ) = CRM_Contact_BAO_Contact_Location::getEmailDetails($this->_contactID);
-      $this->assign('displayName', $this->userDisplayName);
     }
 
     $this->setPageTitle(ts('Pledge'));
@@ -153,6 +152,9 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
       $this->assign('installments', $defaults['installments']);
     }
     else {
+      if ($this->_contactID) {
+        $defaults['contact_id'] = $this->_contactID;
+      }
       // default values.
       $defaults['create_date'] = date('Y-m-d');
       $defaults['start_date'] = date('Y-m-d');
@@ -211,11 +213,9 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
       return;
     }
 
-    if ($this->_context == 'standalone') {
-      $this->addEntityRef('contact_id', ts('Contact'), [
-        'create' => TRUE,
-        'api' => ['extra' => ['email']],
-      ], TRUE);
+    $contactField = $this->addEntityRef('contact_id', ts('Contact'), ['create' => TRUE, 'api' => ['extra' => ['email']]], TRUE);
+    if ($this->_context != 'standalone') {
+      $contactField->freeze();
     }
 
     $showAdditionalInfo = FALSE;
@@ -545,12 +545,6 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
       // send Acknowledgment mail.
       CRM_Pledge_BAO_Pledge::sendAcknowledgment($this, $params);
 
-      if (!isset($this->userEmail)) {
-        list($this->userDisplayName,
-          $this->userEmail
-          ) = CRM_Contact_BAO_Contact_Location::getEmailDetails($this->_contactID);
-      }
-
       $statusMsg .= ' ' . ts("An acknowledgment email has been sent to %1.<br />", [1 => $this->userEmail]);
 
       // build the payment urls.
index b3d03a613913615a9926a8b8e8335d8f7884d886..1020c6009a563536d9f40d928891d996a3cfdf42 100644 (file)
@@ -116,6 +116,7 @@ class CRM_Price_BAO_PriceField extends CRM_Price_DAO_PriceField {
       ]);
       foreach ($fieldOptions['values'] as $option) {
         $optionsIds['id'] = $option['id'];
+        $params['option_id'] = [1 => $option['id']];
         // CRM-19741 If we are dealing with price fields that are Text only set the field value label to match
         if (!empty($params['id']) && $priceField->label != $option['label']) {
           $fieldValue = new CRM_Price_DAO_PriceFieldValue();
index a77ba055feecce5f9065041aa514cbaa515bbffe..28f13506de65ccdb4fcf702506fc635eda026b84 100644 (file)
@@ -126,15 +126,22 @@ class CRM_Queue_Queue_Sql extends CRM_Queue_Queue {
    *   With key 'data' that matches the inputted data.
    */
   public function claimItem($lease_time = 3600) {
+
+    $result = NULL;
+    $dao = CRM_Core_DAO::executeQuery('LOCK TABLES civicrm_queue_item WRITE;');
     $sql = "
-      SELECT id, queue_name, submit_time, release_time, data
-      FROM civicrm_queue_item
-      WHERE queue_name = %1
-      ORDER BY weight ASC, id ASC
-      LIMIT 1
-    ";
+        SELECT first_in_queue.* FROM (
+          SELECT id, queue_name, submit_time, release_time, data
+          FROM civicrm_queue_item
+          WHERE queue_name = %1
+          ORDER BY weight ASC, id ASC
+          LIMIT 1
+        ) first_in_queue
+        WHERE release_time IS NULL OR release_time < %2
+      ";
     $params = [
       1 => [$this->getName(), 'String'],
+      2 => [CRM_Utils_Time::getTime(), 'Timestamp'],
     ];
     $dao = CRM_Core_DAO::executeQuery($sql, $params, TRUE, 'CRM_Queue_DAO_QueueItem');
     if (is_a($dao, 'DB_Error')) {
@@ -144,19 +151,22 @@ class CRM_Queue_Queue_Sql extends CRM_Queue_Queue {
 
     if ($dao->fetch()) {
       $nowEpoch = CRM_Utils_Time::getTimeRaw();
-      if ($dao->release_time === NULL || strtotime($dao->release_time) < $nowEpoch) {
-        CRM_Core_DAO::executeQuery("UPDATE civicrm_queue_item SET release_time = %1 WHERE id = %2", [
-          '1' => [date('YmdHis', $nowEpoch + $lease_time), 'String'],
-          '2' => [$dao->id, 'Integer'],
-        ]);
-        // work-around: inconsistent date-formatting causes unintentional breakage
-        #        $dao->submit_time = date('YmdHis', strtotime($dao->submit_time));
-        #        $dao->release_time = date('YmdHis', $nowEpoch + $lease_time);
-        #        $dao->save();
-        $dao->data = unserialize($dao->data);
-        return $dao;
-      }
+      CRM_Core_DAO::executeQuery("UPDATE civicrm_queue_item SET release_time = %1 WHERE id = %2", [
+        '1' => [date('YmdHis', $nowEpoch + $lease_time), 'String'],
+        '2' => [$dao->id, 'Integer'],
+      ]);
+      // (Comment by artfulrobot Sep 2019: Not sure what the below comment means, should be removed/clarified?)
+      // work-around: inconsistent date-formatting causes unintentional breakage
+      #        $dao->submit_time = date('YmdHis', strtotime($dao->submit_time));
+      #        $dao->release_time = date('YmdHis', $nowEpoch + $lease_time);
+      #        $dao->save();
+      $dao->data = unserialize($dao->data);
+      $result = $dao;
     }
+
+    $dao = CRM_Core_DAO::executeQuery('UNLOCK TABLES;');
+
+    return $result;
   }
 
   /**
index 77495fdcbaa1c586e3199d2bb8c8231029c278cf..2d98bd467f5a5f1df3059e5ede48c6732ebdd49f 100644 (file)
@@ -3376,7 +3376,7 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND
             if ($value && empty($field['no_display'])) {
               $statistics['filters'][] = [
                 'title' => CRM_Utils_Array::value('title', $field),
-                'value' => $value,
+                'value' => CRM_Utils_String::htmlToText($value),
               ];
             }
           }
index b1780c73c99ec2d347958ae7ff91df8fe9694714..49f122b44edf2970744cdc1c87b9ae0652ca12ce 100644 (file)
@@ -361,14 +361,6 @@ FROM civicrm_contact {$this->_aliases['civicrm_contact']}
       // Handle ID to label conversion for contact fields
       $entryFound = $this->alterDisplayContactFields($row, $rows, $rowNum, 'contact/currentEmployer', 'View Contact Detail') ? TRUE : $entryFound;
       $entryFound = $this->alterDisplayAddressFields($row, $rows, $rowNum, NULL, NULL) ? TRUE : $entryFound;
-      // display birthday in the configured custom format
-      if (array_key_exists('civicrm_contact_birth_date', $row)) {
-        $birthDate = $row['civicrm_contact_birth_date'];
-        if ($birthDate) {
-          $rows[$rowNum]['civicrm_contact_birth_date'] = CRM_Utils_Date::customFormat($birthDate, '%Y%m%d');
-        }
-        $entryFound = TRUE;
-      }
 
       // convert employee name to links
       if (array_key_exists('civicrm_contact_sort_name', $row) &&
index e4546491d7beaf769a2e3fb8f5a7317ef32ced41..4ed4723298a4059e59c764514be38006f89612cf 100644 (file)
@@ -832,15 +832,6 @@ class CRM_Report_Form_Contact_Detail extends CRM_Report_Form {
       // Handle ID to label conversion for contact fields
       $entryFound = $this->alterDisplayContactFields($row, $rows, $rowNum, NULL, NULL) ? TRUE : $entryFound;
 
-      // display birthday in the configured custom format
-      if (array_key_exists('civicrm_contact_birth_date', $row)) {
-        $birthDate = $row['civicrm_contact_birth_date'];
-        if ($birthDate) {
-          $rows[$rowNum]['civicrm_contact_birth_date'] = CRM_Utils_Date::customFormat($birthDate, '%Y%m%d');
-        }
-        $entryFound = TRUE;
-      }
-
       $entryFound = $this->alterDisplayAddressFields($row, $rows, $rowNum, NULL, NULL) ? TRUE : $entryFound;
 
       // skip looking further in rows, if first row itself doesn't
@@ -870,7 +861,7 @@ class CRM_Report_Form_Contact_Detail extends CRM_Report_Form {
             }
 
             if ($val = CRM_Utils_Array::value('civicrm_contribution_contribution_status_id', $row)) {
-              $componentRows[$contactID][$component][$rowNum]['civicrm_contribution_contribution_status_id'] = CRM_Contribute_PseudoConstant::contributionStatus($val);
+              $componentRows[$contactID][$component][$rowNum]['civicrm_contribution_contribution_status_id'] = CRM_Contribute_PseudoConstant::contributionStatus($val, 'label');
             }
             $entryFound = TRUE;
           }
index 021f92d23462ee489b1b13a6246ebb061db47670..230baacfbda9a31c645665c2f8115318e2526827 100644 (file)
@@ -326,7 +326,7 @@ class CRM_Report_Form_Contribute_Bookkeeping extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
         ],
@@ -386,7 +386,7 @@ class CRM_Report_Form_Contribute_Bookkeeping extends CRM_Report_Form {
           'status_id' => [
             'title' => ts('Financial Transaction Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
           'card_type_id' => [
@@ -655,7 +655,7 @@ class CRM_Report_Form_Contribute_Bookkeeping extends CRM_Report_Form {
   public function alterDisplay(&$rows) {
     $contributionTypes = CRM_Contribute_PseudoConstant::financialType();
     $paymentInstruments = CRM_Contribute_PseudoConstant::paymentInstrument();
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
     $creditCardTypes = CRM_Financial_DAO_FinancialTrxn::buildOptions('card_type_id');
     foreach ($rows as $rowNum => $row) {
       // convert display name to links
index bea5471f545d3b9ff7f7b1954d28c3ce6d9b7e30..65f2db9f3840549a01d4a8baa6288ea2346c726e 100644 (file)
@@ -236,7 +236,7 @@ class CRM_Report_Form_Contribute_Detail extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
             'type' => CRM_Utils_Type::T_INT,
           ],
@@ -633,7 +633,7 @@ UNION ALL
     $entryFound = FALSE;
     $display_flag = $prev_cid = $cid = 0;
     $contributionTypes = CRM_Contribute_PseudoConstant::financialType();
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
     $paymentInstruments = CRM_Contribute_PseudoConstant::paymentInstrument();
     $contributionPages = CRM_Contribute_PseudoConstant::contributionPage();
     $batches = CRM_Batch_BAO_Batch::getBatches();
index a46611a55427fc955a4a74cf3b038a4c7f206752..6fed16b24f7c63366062d0df682744d37b24c783 100644 (file)
@@ -248,7 +248,7 @@ class CRM_Report_Form_Contribute_History extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
           'financial_type_id' => [
index e84092113986c2d12b51466f0c1b6157fcc5e6a0..2dd9e105661d7e6fa8076c11f092a0e5d1a7e46d 100644 (file)
@@ -149,7 +149,7 @@ class CRM_Report_Form_Contribute_HouseholdSummary extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
           'financial_type_id' => [
@@ -491,7 +491,7 @@ class CRM_Report_Form_Contribute_HouseholdSummary extends CRM_Report_Form {
 
       if (array_key_exists('civicrm_contribution_contribution_status_id', $row)) {
         if ($value = $row['civicrm_contribution_contribution_status_id']) {
-          $rows[$rowNum]['civicrm_contribution_contribution_status_id'] = CRM_Contribute_PseudoConstant::contributionStatus($value);
+          $rows[$rowNum]['civicrm_contribution_contribution_status_id'] = CRM_Contribute_PseudoConstant::contributionStatus($value, 'label');
         }
       }
 
index f3972d42f538a5f8d91ed2186a81c8fbdfb9d0f3..078595fd329f06c4ec0778a8ee5f76f74b091987 100644 (file)
@@ -226,7 +226,7 @@ class CRM_Report_Form_Contribute_Lybunt extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => ['1'],
           ],
         ],
@@ -660,7 +660,7 @@ class CRM_Report_Form_Contribute_Lybunt extends CRM_Report_Form {
     ];
     if ($this->_params['charts']) {
       // build chart.
-      CRM_Utils_OpenFlashChart::reportChart($graphRows, $this->_params['charts'], $interval, $chartInfo);
+      CRM_Utils_Chart::reportChart($graphRows, $this->_params['charts'], $interval, $chartInfo);
       $this->assign('chartType', $this->_params['charts']);
     }
   }
index 9e4926a9ad2293022d8a17cd329c80a12fb1e430..1de4d578704ad1813de0b6639509c71e0e5cbc19 100644 (file)
@@ -159,7 +159,7 @@ class CRM_Report_Form_Contribute_OrganizationSummary extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
         ],
@@ -500,7 +500,7 @@ class CRM_Report_Form_Contribute_OrganizationSummary extends CRM_Report_Form {
 
       if (array_key_exists('civicrm_contribution_contribution_status_id', $row)) {
         if ($value = $row['civicrm_contribution_contribution_status_id']) {
-          $rows[$rowNum]['civicrm_contribution_contribution_status_id'] = CRM_Contribute_PseudoConstant::contributionStatus($value);
+          $rows[$rowNum]['civicrm_contribution_contribution_status_id'] = CRM_Contribute_PseudoConstant::contributionStatus($value, 'label');
         }
       }
 
index 240ad47e72cc82ca0c81afb441977feb3724bf39..ac4eae6fd9716107e219af611bfede3e37fc1d6b 100644 (file)
@@ -187,7 +187,7 @@ class CRM_Report_Form_Contribute_Recur extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [5],
             'type' => CRM_Utils_Type::T_INT,
           ],
@@ -372,7 +372,7 @@ class CRM_Report_Form_Contribute_Recur extends CRM_Report_Form {
    *   Rows generated by SQL, with an array for each row.
    */
   public function alterDisplay(&$rows) {
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
     foreach ($rows as $rowNum => $row) {
       // convert display name to links
       if (array_key_exists('civicrm_contact_sort_name', $row) &&
index 177c6a7a0c7e621295098f8b2636da445239af48..94338418a711c45eb3d99ca86b9bf04c5c9df4fc 100644 (file)
@@ -242,7 +242,7 @@ class CRM_Report_Form_Contribute_Repeat extends CRM_Report_Form {
           'contribution_status_id' => array(
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => array('1'),
           ),
         ),
index 3f8fdd54f0cac749b56e8d63c7f3d3087c88905c..a37fdca580a0ca5c5e257d99f1fcda8c40fb9650 100644 (file)
@@ -252,7 +252,7 @@ class CRM_Report_Form_Contribute_SoftCredit extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
         ],
index e193637490010755aa71662ec88c264cbe1a1033..735b8c50a8f671a8d1ffce526a32de0af3e7c020 100644 (file)
@@ -156,7 +156,7 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form {
           'contribution_status_id' => array(
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => array(1),
             'type' => CRM_Utils_Type::T_INT,
           ),
@@ -220,7 +220,7 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form {
           'contribution_status_id' => array(
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => array(1),
             'type' => CRM_Utils_Type::T_INT,
           ),
@@ -849,7 +849,7 @@ ROUND(AVG({$this->_aliases['civicrm_contribution_soft']}.amount), 2) as civicrm_
         $config = CRM_Core_Config::Singleton();
         $graphRows['xname'] = $this->_interval;
         $graphRows['yname'] = ts('Amount (%1)', array(1 => $config->defaultCurrency));
-        CRM_Utils_OpenFlashChart::chart($graphRows, $this->_params['charts'], $this->_interval);
+        CRM_Utils_Chart::chart($graphRows, $this->_params['charts'], $this->_interval);
         $this->assign('chartType', $this->_params['charts']);
       }
     }
@@ -866,7 +866,7 @@ ROUND(AVG({$this->_aliases['civicrm_contribution_soft']}.amount), 2) as civicrm_
    */
   public function alterDisplay(&$rows) {
     $entryFound = FALSE;
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
     $contributionPages = CRM_Contribute_PseudoConstant::contributionPage();
 
     foreach ($rows as $rowNum => $row) {
index 3a2cb5f47f1b1dfc8c1bb49847ecb16aca3812db..463d3f9db657109c62a75e50d800f5c5e4857487 100644 (file)
@@ -231,7 +231,7 @@ class CRM_Report_Form_Contribute_Sybunt extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => ['1'],
           ],
         ],
@@ -544,7 +544,7 @@ class CRM_Report_Form_Contribute_Sybunt extends CRM_Report_Form {
     ];
     if ($this->_params['charts']) {
       // build the chart.
-      CRM_Utils_OpenFlashChart::reportChart($graphRows, $this->_params['charts'], $interval, $chartInfo);
+      CRM_Utils_Chart::reportChart($graphRows, $this->_params['charts'], $interval, $chartInfo);
       $this->assign('chartType', $this->_params['charts']);
     }
   }
index b6479c14aa9e04773a5dc9e47196160672a6a7ff..a37280741df53e8c35180786fceda774ea55dd0b 100644 (file)
@@ -156,7 +156,7 @@ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
         ],
index 25c5c533b2bbfea7a83f5674fee6e4dc59a3c1e0..40373be36cc6329bde5f4492fbf56e61c9f86ef7 100644 (file)
@@ -399,7 +399,7 @@ class CRM_Report_Form_Event_IncomeCountSummary extends CRM_Report_Form {
           $chartInfo['xLabelAngle'] = 20;
 
           // build the chart.
-          CRM_Utils_OpenFlashChart::buildChart($chartInfo, $this->_params['charts']);
+          CRM_Utils_Chart::buildChart($chartInfo, $this->_params['charts']);
         }
       }
     }
index 949a6ff8e79f8261d9b957919940337ae9375eaa..063950ae235ff95a32b1f3364414b80ddcbda8df 100644 (file)
@@ -353,7 +353,7 @@ class CRM_Report_Form_Event_ParticipantListing extends CRM_Report_Form {
           'contribution_status_id' => array(
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => NULL,
           ),
         ),
@@ -651,7 +651,7 @@ ORDER BY  cv.label
     $entryFound = FALSE;
     $eventType = CRM_Core_OptionGroup::values('event_type');
     $financialTypes = CRM_Contribute_PseudoConstant::financialType();
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
     $paymentInstruments = CRM_Contribute_PseudoConstant::paymentInstrument();
 
     foreach ($rows as $rowNum => $row) {
index bfbc8e5a9187fef7be3efd6db31c6e042c0b32f4..b046a7b779eb4daa34a96a9037f7d530da759545 100644 (file)
@@ -368,7 +368,7 @@ class CRM_Report_Form_Event_Summary extends CRM_Report_Form {
           $chartInfo['xLabelAngle'] = 20;
 
           // build the chart.
-          CRM_Utils_OpenFlashChart::buildChart($chartInfo, $this->_params['charts']);
+          CRM_Utils_Chart::buildChart($chartInfo, $this->_params['charts']);
           $this->assign('chartType', $this->_params['charts']);
         }
       }
index 9cb491a484ae968b36bb2735c4af0ad3615ab586..9130fb95c746ab94388191171c4fa5ad43e525d4 100644 (file)
@@ -429,7 +429,7 @@ class CRM_Report_Form_Mailing_Bounce extends CRM_Report_Form {
     }
 
     // build the chart.
-    CRM_Utils_OpenFlashChart::buildChart($chartInfo, $this->_params['charts']);
+    CRM_Utils_Chart::buildChart($chartInfo, $this->_params['charts']);
     $this->assign('chartType', $this->_params['charts']);
   }
 
index b2239e02b2e52c6743a8588a5f167b9b88c149a9..032e47d150637b331f60651dcc3fa3f02e2a7a93 100644 (file)
@@ -349,7 +349,7 @@ class CRM_Report_Form_Mailing_Clicks extends CRM_Report_Form {
     }
 
     // build the chart.
-    CRM_Utils_OpenFlashChart::buildChart($chartInfo, $this->_params['charts']);
+    CRM_Utils_Chart::buildChart($chartInfo, $this->_params['charts']);
     $this->assign('chartType', $this->_params['charts']);
   }
 
index f040552ca47925724a0cde6558c01a390520b4bd..1c2893f2a881c3efcd8cfbb8a53fbfa05b985261 100644 (file)
@@ -340,7 +340,7 @@ class CRM_Report_Form_Mailing_Opened extends CRM_Report_Form {
     }
 
     // build the chart.
-    CRM_Utils_OpenFlashChart::buildChart($chartInfo, $this->_params['charts']);
+    CRM_Utils_Chart::buildChart($chartInfo, $this->_params['charts']);
     $this->assign('chartType', $this->_params['charts']);
   }
 
index 549eaf7cda531b6ee697b72ef3cce76c20005a45..a43467175c402c14fe1e6a4063c8f38bcbff041e 100644 (file)
@@ -42,7 +42,7 @@ class CRM_Report_Form_Mailing_Summary extends CRM_Report_Form {
 
   protected $_charts = [
     '' => 'Tabular',
-    'bar_3dChart' => 'Bar Chart',
+    'barchart' => 'Bar Chart',
   ];
 
   /**
@@ -625,7 +625,7 @@ class CRM_Report_Form_Mailing_Summary extends CRM_Report_Form {
     $chartInfo['xSize'] = ((count($rows) * 125) + (count($rows) * count($criteria) * 40));
 
     // build the chart.
-    CRM_Utils_OpenFlashChart::buildChart($chartInfo, $this->_params['charts']);
+    CRM_Utils_Chart::buildChart($chartInfo, $this->_params['charts']);
     $this->assign('chartType', $this->_params['charts']);
   }
 
index a1c5d33850c9897e80832f66c75e3511ea756c3d..a976715062fd06f02672db5aa6b7a74ffca22f90 100644 (file)
@@ -221,7 +221,7 @@ class CRM_Report_Form_Member_ContributionDetail extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'default' => [1],
           ],
           'total_amount' => ['title' => ts('Contribution Amount')],
@@ -646,7 +646,7 @@ class CRM_Report_Form_Member_ContributionDetail extends CRM_Report_Form {
 
     $entryFound = FALSE;
     $contributionTypes = CRM_Contribute_PseudoConstant::financialType();
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
     $paymentInstruments = CRM_Contribute_PseudoConstant::paymentInstrument();
     $batches = CRM_Batch_BAO_Batch::getBatches();
 
index 92cd8f40e9322f488eef6bb623cec7806e374491..57820dd6dbdb8018bc851af4bcbdfd8522abe4cd 100644 (file)
@@ -225,7 +225,7 @@ class CRM_Report_Form_Member_Detail extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
             'type' => CRM_Utils_Type::T_INT,
           ],
           'total_amount' => ['title' => ts('Contribution Amount')],
@@ -317,7 +317,7 @@ class CRM_Report_Form_Member_Detail extends CRM_Report_Form {
     $checkList = [];
 
     $contributionTypes = CRM_Contribute_PseudoConstant::financialType();
-    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus();
+    $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
     $paymentInstruments = CRM_Contribute_PseudoConstant::paymentInstrument();
 
     $repeatFound = FALSE;
index ab7dcab2674d5041d5cf10cb4039c49514b24524..2afd8a43f77483b3bc9c3a6609979f728d0beb76 100644 (file)
@@ -165,7 +165,7 @@ class CRM_Report_Form_Member_Summary extends CRM_Report_Form {
           'contribution_status_id' => [
             'title' => ts('Contribution Status'),
             'operatorType' => CRM_Report_Form::OP_MULTISELECT,
-            'options' => CRM_Contribute_PseudoConstant::contributionStatus(),
+            'options' => CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'search'),
           ],
         ],
         'grouping' => 'member-fields',
@@ -524,10 +524,10 @@ GROUP BY    {$this->_aliases['civicrm_contribution']}.currency
           'xname' => ts('Member Since / Member Type'),
           'yname' => ts('Fees'),
         ];
-        CRM_Utils_OpenFlashChart::reportChart($graphRows, $this->_params['charts'], $interval, $chartInfo);
+        CRM_Utils_Chart::reportChart($graphRows, $this->_params['charts'], $interval, $chartInfo);
       }
       else {
-        CRM_Utils_OpenFlashChart::chart($graphRows, $this->_params['charts'], $this->_interval);
+        CRM_Utils_Chart::chart($graphRows, $this->_params['charts'], $this->_interval);
       }
     }
     $this->assign('chartType', $this->_params['charts']);
index 9ab478c0846ae746ae44c57f12c4aaaa89370705..de12e54c119f66c2cac64a923fdcddaab3e28957 100644 (file)
@@ -342,7 +342,7 @@ LEFT  JOIN civicrm_contribution  {$this->_aliases['civicrm_contribution']}
       }
 
       // build chart.
-      CRM_Utils_OpenFlashChart::chart($graphRows, $this->_params['charts'], $this->_interval);
+      CRM_Utils_Chart::chart($graphRows, $this->_params['charts'], $this->_interval);
     }
     parent::endPostProcess();
   }
index d9561c39532db39f55131892204b230ace216a7e..e7159de55e6fe6c7e19b38d56b5551f9dcd44c0b 100644 (file)
@@ -637,25 +637,52 @@ SET    version = '$version'
   }
 
   /**
-   * Disable any extensions not compatible with this new version.
+   * Disable/uninstall any extensions not compatible with this new version.
    *
    * @param \CRM_Queue_TaskContext $ctx
    * @param string $postUpgradeMessageFile
    * @return bool
    */
   public static function disableOldExtensions(CRM_Queue_TaskContext $ctx, $postUpgradeMessageFile) {
-    $compatInfo = CRM_Extension_System::getCompatibilityInfo();
-    $disabled = [];
+    $messages = [];
     $manager = CRM_Extension_System::singleton()->getManager();
-    foreach ($compatInfo as $key => $ext) {
-      if (!empty($ext['obsolete']) && $manager->getStatus($key) == $manager::STATUS_INSTALLED) {
-        $disabled[$key] = sprintf("<li>%s</li>", ts('The extension %1 is now obsolete and has been disabled.', [1 => $key]));
+    foreach ($manager->getStatuses() as $key => $status) {
+      $obsolete = $manager->isIncompatible($key);
+      if ($obsolete) {
+        if (!empty($obsolete['disable']) && in_array($status, [$manager::STATUS_INSTALLED, $manager::STATUS_INSTALLED_MISSING])) {
+          try {
+            $manager->disable($key);
+            // Update the status for the sake of uninstall below.
+            $status = $status == $manager::STATUS_INSTALLED ? $manager::STATUS_DISABLED : $manager::STATUS_DISABLED_MISSING;
+            // This message is intentionally overwritten by uninstall below as it would be redundant
+            $messages[$key] = ts('The extension %1 is now obsolete and has been disabled.', [1 => $key]);
+          }
+          catch (CRM_Extension_Exception $e) {
+            $messages[] = ts('The obsolete extension %1 could not be removed due to an error. It is recommended to remove this extension manually.', [1 => $key]);
+          }
+        }
+        if (!empty($obsolete['uninstall']) && in_array($status, [$manager::STATUS_DISABLED, $manager::STATUS_DISABLED_MISSING])) {
+          try {
+            $manager->uninstall($key);
+            $messages[$key] = ts('The extension %1 is now obsolete and has been uninstalled.', [1 => $key]);
+            if ($status == $manager::STATUS_DISABLED) {
+              $messages[$key] .= ' ' . ts('You can remove it from your extensions directory.');
+            }
+          }
+          catch (CRM_Extension_Exception $e) {
+            $messages[] = ts('The obsolete extension %1 could not be removed due to an error. It is recommended to remove this extension manually.', [1 => $key]);
+          }
+        }
+        if (!empty($obsolete['force-uninstall'])) {
+          CRM_Core_DAO::executeQuery('UPDATE civicrm_extension SET is_active = 0 WHERE full_name = %1', [
+            1 => [$key, 'String'],
+          ]);
+        }
       }
     }
-    if ($disabled) {
-      $manager->disable(array_keys($disabled));
+    if ($messages) {
       file_put_contents($postUpgradeMessageFile,
-        '<br/><br/><ul>' . implode("\n", $disabled) . '</ul>',
+        '<br/><br/><ul><li>' . implode("</li>\n<li>", $messages) . '</li></ul>',
         FILE_APPEND
       );
     }
index fe4429a84acb31e0af2cdec27f24713ea8c28d91..a0ff9bf705ef0a7c29c10b0d596a35046ac38186 100644 (file)
@@ -61,27 +61,53 @@ class CRM_Upgrade_Incremental_php_FiveNineteen extends CRM_Upgrade_Incremental_B
     // }
   }
 
-  /*
-   * 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_19_alpha1($rev) {
+    $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
+    $this->addTask('Add api4 menu', 'api4Menu');
+    $this->addTask('Add is_active field to civicrm_status_pref', 'addColumn', 'civicrm_status_pref', 'is_active',
+      "tinyint(4) DEFAULT '1' COMMENT 'Is this status check active'", FALSE, '5.19.0');
+  }
 
-  //  /**
-  //   * Upgrade function.
-  //   *
-  //   * @param string $rev
-  //   */
-  //  public function upgrade_5_0_x($rev) {
-  //    $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
-  //    $this->addTask('Do the foo change', 'taskFoo', ...);
-  //    // Additional tasks here...
-  //    // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex.
-  //    // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable.
-  //  }
-
-  // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) {
-  //   return TRUE;
-  // }
+  /**
+   * Add menu item for api4 explorer; rename v3 explorer menu item.
+   *
+   * @param \CRM_Queue_TaskContext $ctx
+   * @return bool
+   */
+  public static function api4Menu(CRM_Queue_TaskContext $ctx) {
+    try {
+      $v3Item = civicrm_api3('Navigation', 'get', [
+        'name' => 'API Explorer',
+        'return' => ['id', 'parent_id', 'weight'],
+        'sequential' => 1,
+        'domain_id' => CRM_Core_Config::domainID(),
+        'api.Navigation.create' => ['label' => ts("Api Explorer v3")],
+      ]);
+      $existing = civicrm_api3('Navigation', 'getcount', [
+        'name' => "Api Explorer v4",
+        'domain_id' => CRM_Core_Config::domainID(),
+      ]);
+      if (!$existing) {
+        civicrm_api3('Navigation', 'create', [
+          'parent_id' => $v3Item['values'][0]['parent_id'] ?? 'Developer',
+          'label' => ts("Api Explorer v4"),
+          'weight' => $v3Item['values'][0]['weight'] ?? 2,
+          'name' => "Api Explorer v4",
+          'permission' => "administer CiviCRM",
+          'url' => "civicrm/api4#/explorer",
+          'is_active' => 1,
+        ]);
+      }
+    }
+    catch (Exception $e) {
+      // Couldn't create menu item.
+    }
+    return TRUE;
+  }
 
 }
diff --git a/CRM/Upgrade/Incremental/php/FiveTwenty.php b/CRM/Upgrade/Incremental/php/FiveTwenty.php
new file mode 100644 (file)
index 0000000..9485ff8
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007.                                       |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License along with this program; if not, contact CiviCRM LLC       |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ * Upgrade logic for FiveTwenty */
+class CRM_Upgrade_Incremental_php_FiveTwenty extends CRM_Upgrade_Incremental_Base {
+
+  /**
+   * Compute any messages which should be displayed beforeupgrade.
+   *
+   * Note: This function is called iteratively for each upcoming
+   * revision to the database.
+   *
+   * @param string $preUpgradeMessage
+   * @param string $rev
+   *   a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'.
+   * @param null $currentVer
+   */
+  public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) {
+    // Example: Generate a pre-upgrade message.
+    // if ($rev == '5.12.34') {
+    //   $preUpgradeMessage .= '<p>' . ts('A new permission, "%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.
+   *
+   * @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):
+   */
+
+  // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) {
+  //   return TRUE;
+  // }
+
+  /**
+   * Upgrade function.
+   *
+   * @param string $rev
+   */
+  public function upgrade_5_20_alpha1($rev) {
+    $this->addTask('Add frontend title column to contribution page table', 'addColumn', 'civicrm_contribution_page',
+      'frontend_title', "varchar(255) DEFAULT NULL COMMENT 'Contribution Page Public title'", TRUE, '5.20.alpha1');
+    $this->addTask('Add is_template field to civicrm_contribution', 'addColumn', 'civicrm_contribution', 'is_template',
+      "tinyint(4) DEFAULT '0' COMMENT 'Shows this is a template for recurring contributions.'", FALSE, '5.20.alpha1');
+    $this->addTask('Add order_reference field to civicrm_financial_trxn', 'addColumn', 'civicrm_financial_trxn', 'order_reference',
+      "varchar(255) COMMENT 'Payment Processor external order reference'", FALSE, '5.20.alpha1');
+    $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
+  }
+
+}
diff --git a/CRM/Upgrade/Incremental/sql/5.18.0.mysql.tpl b/CRM/Upgrade/Incremental/sql/5.18.0.mysql.tpl
new file mode 100644 (file)
index 0000000..34af8cc
--- /dev/null
@@ -0,0 +1 @@
+{* file to handle db changes in 5.18.0 during upgrade *}
diff --git a/CRM/Upgrade/Incremental/sql/5.19.beta1.mysql.tpl b/CRM/Upgrade/Incremental/sql/5.19.beta1.mysql.tpl
new file mode 100644 (file)
index 0000000..e565ce5
--- /dev/null
@@ -0,0 +1 @@
+{* file to handle db changes in 5.19.beta1 during upgrade *}
diff --git a/CRM/Upgrade/Incremental/sql/5.20.alpha1.mysql.tpl b/CRM/Upgrade/Incremental/sql/5.20.alpha1.mysql.tpl
new file mode 100644 (file)
index 0000000..34686ec
--- /dev/null
@@ -0,0 +1 @@
+{* file to handle db changes in 5.20.alpha1 during upgrade *}
diff --git a/CRM/Utils/Chart.php b/CRM/Utils/Chart.php
new file mode 100644 (file)
index 0000000..6562773
--- /dev/null
@@ -0,0 +1,331 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ */
+
+/**
+ * Build various graphs using the dc chart library.
+ */
+class CRM_Utils_Chart {
+
+  /**
+   * Colours.
+   * @var array
+   */
+  private static $_colours = [
+    "#C3CC38",
+    "#C8B935",
+    "#CEA632",
+    "#D3932F",
+    "#D9802C",
+    "#FA6900",
+    "#DC9B57",
+    "#F78F01",
+    "#5AB56E",
+    "#6F8069",
+    "#C92200",
+    "#EB6C5C",
+  ];
+
+  /**
+   * Build The Bar Gharph.
+   *
+   * @param array $params
+   *   Assoc array of name/value pairs.
+   *
+   * @return object
+   *   $chart   object of open flash chart.
+   */
+  public static function barChart($params) {
+    $output = static::commonParamsManipulation($params);
+    if (empty($output)) {
+      return NULL;
+    }
+    $output['type'] = 'barchart';
+    // Default title
+    $output += ['title' => ts('Bar Chart')];
+
+    // ? Not sure what reports use this, but it's not implemented.
+    // call user define function to handle on click event.
+    // if ($onClickFunName = CRM_Utils_Array::value('on_click_fun_name', $params)) {
+    //  $bars[$barCount]->set_on_click($onClickFunName);
+    // }
+
+    //// get the currency to set in tooltip.
+    //$tooltip = CRM_Utils_Array::value('tip', $params, "$symbol #val#");
+
+    return $output;
+  }
+
+  /**
+   * Build a pie chart.
+   *
+   * @param array $params
+   *   Assoc array of name/value pairs.
+   *
+   * @return array
+   */
+  public static function pieChart($params) {
+    $output = static::commonParamsManipulation($params);
+    if (empty($output)) {
+      return NULL;
+    }
+    $output['type'] = 'piechart';
+    $output += ['title' => ts('Pie Chart')];
+
+    // ? Not sure what reports use this, but it's not implemented.
+    // call user define function to handle on click event.
+    // if ($onClickFunName = CRM_Utils_Array::value('on_click_fun_name', $params)) {
+    //  $bars[$barCount]->set_on_click($onClickFunName);
+    // }
+
+    //// get the currency to set in tooltip.
+    //$tooltip = CRM_Utils_Array::value('tip', $params, "$symbol #val#");
+
+    return $output;
+  }
+
+  /**
+   * Common data manipulation for charts.
+   *
+   * @param array $params
+   *   Assoc array of name/value pairs.
+   *
+   * @return array
+   */
+  public static function commonParamsManipulation($params) {
+    if (empty($params)) {
+      return NULL;
+    }
+    $output = [];
+    if (empty($params['multiValues'])) {
+      $params['multiValues'] = [$params['values']];
+    }
+
+    $output['values'] = [];
+    foreach ($params['multiValues'] as $i => $dataSet) {
+      $output['values'][$i] = [];
+      foreach ($dataSet as $k => $v) {
+        $output['values'][$i][] = ['label' => $k, 'value' => (double) $v];
+      }
+    }
+    if (!$output['values']) {
+      return NULL;
+    }
+
+    // Ensure there's a legend (title)
+    if (!empty($params['legend'])) {
+      $output['title'] = $params['legend'];
+    }
+
+    $output['symbol'] = CRM_Core_BAO_Country::defaultCurrencySymbol();
+
+    // ? Not sure what reports use this, but it's not implemented.
+    // call user define function to handle on click event.
+    // if ($onClickFunName = CRM_Utils_Array::value('on_click_fun_name', $params)) {
+    //  $bars[$barCount]->set_on_click($onClickFunName);
+    // }
+
+    //// get the currency to set in tooltip.
+    //$tooltip = CRM_Utils_Array::value('tip', $params, "$symbol #val#");
+
+    return $output;
+  }
+
+  /**
+   * @param $rows
+   * @param $chart
+   * @param $interval
+   *
+   * @return array
+   */
+  public static function chart($rows, $chart, $interval) {
+    $lcInterval = strtolower($interval);
+    $label = ucfirst($lcInterval);
+    $chartData = $dateKeys = [];
+    $intervalLabels = [
+      'year' => ts('Yearly'),
+      'fiscalyear' => ts('Yearly (Fiscal)'),
+      'month' => ts('Monthly'),
+      'quarter' => ts('Quarterly'),
+      'week' => ts('Weekly'),
+      'yearweek' => ts('Weekly'),
+    ];
+
+    switch ($lcInterval) {
+      case 'month':
+      case 'quarter':
+      case 'week':
+      case 'yearweek':
+        foreach ($rows['receive_date'] as $key => $val) {
+          list($year, $month) = explode('-', $val);
+          $dateKeys[] = substr($rows[$interval][$key], 0, 3) . ' of ' . $year;
+        }
+        $legend = $intervalLabels[$lcInterval];
+        break;
+
+      default:
+        foreach ($rows['receive_date'] as $key => $val) {
+          list($year, $month) = explode('-', $val);
+          $dateKeys[] = $year;
+        }
+        $legend = ts("%1", [1 => $label]);
+        if (!empty($intervalLabels[$lcInterval])) {
+          $legend = $intervalLabels[$lcInterval];
+        }
+        break;
+    }
+
+    if (!empty($dateKeys)) {
+      $graph = [];
+      if (!array_key_exists('multiValue', $rows)) {
+        $rows['multiValue'] = [$rows['value']];
+      }
+      foreach ($rows['multiValue'] as $key => $val) {
+        $graph[$key] = array_combine($dateKeys, $rows['multiValue'][$key]);
+      }
+      $chartData = [
+        'legend' => "$legend " . CRM_Utils_Array::value('legend', $rows, ts('Contribution')) . ' ' . ts('Summary'),
+        'values' => $graph[0],
+        'multiValues' => $graph,
+        'barKeys' => CRM_Utils_Array::value('barKeys', $rows, []),
+      ];
+    }
+
+    // rotate the x labels.
+    $chartData['xLabelAngle'] = CRM_Utils_Array::value('xLabelAngle', $rows, 0);
+    if (!empty($rows['tip'])) {
+      $chartData['tip'] = $rows['tip'];
+    }
+
+    // legend
+    $chartData['xname'] = CRM_Utils_Array::value('xname', $rows);
+    $chartData['yname'] = CRM_Utils_Array::value('yname', $rows);
+
+    // carry some chart params if pass.
+    foreach ([
+      'xSize',
+      'ySize',
+      'divName',
+    ] as $f) {
+      if (!empty($rows[$f])) {
+        $chartData[$f] = $rows[$f];
+      }
+    }
+
+    return self::buildChart($chartData, $chart);
+  }
+
+  /**
+   * @param $rows
+   * @param $chart
+   * @param $interval
+   * @param $chartInfo
+   *
+   * @return array
+   */
+  public static function reportChart($rows, $chart, $interval, &$chartInfo) {
+    foreach ($interval as $key => $val) {
+      $graph[$val] = $rows['value'][$key];
+    }
+
+    $chartData = [
+      'values' => $graph,
+      'legend' => $chartInfo['legend'],
+      'xname' => $chartInfo['xname'],
+      'yname' => $chartInfo['yname'],
+    ];
+
+    // rotate the x labels.
+    $chartData['xLabelAngle'] = CRM_Utils_Array::value('xLabelAngle', $chartInfo, 20);
+    if (!empty($chartInfo['tip'])) {
+      $chartData['tip'] = $chartInfo['tip'];
+    }
+
+    // carry some chart params if pass.
+    foreach ([
+      'xSize',
+      'ySize',
+      'divName',
+    ] as $f) {
+      if (!empty($rows[$f])) {
+        $chartData[$f] = $rows[$f];
+      }
+    }
+
+    return self::buildChart($chartData, $chart);
+  }
+
+  /**
+   * @param array $params
+   * @param $chart
+   *
+   * @return array
+   */
+  public static function buildChart(&$params, $chart) {
+    $theChart = [];
+    if ($chart && is_array($params) && !empty($params)) {
+      // build the chart objects.
+      $chartObj = CRM_Utils_Chart::$chart($params);
+
+      if ($chartObj) {
+        // calculate chart size.
+        $xSize = CRM_Utils_Array::value('xSize', $params, 400);
+        $ySize = CRM_Utils_Array::value('ySize', $params, 300);
+        if ($chart == 'barChart') {
+          $ySize = CRM_Utils_Array::value('ySize', $params, 250);
+          $xSize = 60 * count($params['values']);
+          // hack to show tooltip.
+          if ($xSize < 200) {
+            $xSize = (count($params['values']) > 1) ? 100 * count($params['values']) : 170;
+          }
+          elseif ($xSize > 600 && count($params['values']) > 1) {
+            $xSize = (count($params['values']) + 400 / count($params['values'])) * count($params['values']);
+          }
+        }
+
+        // generate unique id for this chart instance
+        $uniqueId = md5(uniqid(rand(), TRUE));
+
+        $theChart["chart_{$uniqueId}"]['size'] = ['xSize' => $xSize, 'ySize' => $ySize];
+        $theChart["chart_{$uniqueId}"]['object'] = $chartObj;
+
+        // assign chart data to template
+        $template = CRM_Core_Smarty::singleton();
+        $template->assign('uniqueId', $uniqueId);
+        $template->assign("chartData", json_encode($theChart ?? []));
+      }
+    }
+
+    return $theChart;
+  }
+
+}
index f07f2923fc9a6f05a60fa806913e520beb8edaf1..3772b4b3836b38488c87715929e6e91e94510a6f 100644 (file)
@@ -25,6 +25,7 @@
  +--------------------------------------------------------------------+
  */
 
+use Civi\Api4\StatusPreference;
 
 /**
  *
  */
 abstract class CRM_Utils_Check_Component {
 
+  /**
+   * @var array
+   */
+  public $checksConfig = [];
+
+  /**
+   * Get the configured status checks.
+   *
+   * @return array
+   *
+   * @throws \API_Exception
+   * @throws \Civi\API\Exception\UnauthorizedException
+   */
+  public function getChecksConfig() {
+    if (empty($this->checksConfig)) {
+      $this->checksConfig = Civi::cache('checks')->get('checksConfig', []);
+      if (empty($this->checksConfig)) {
+        $this->checksConfig = StatusPreference::get()->setCheckPermissions(FALSE)->execute()->indexBy('name');
+      }
+    }
+    return $this->checksConfig;
+  }
+
+  /**
+   * @param array $checksConfig
+   */
+  public function setChecksConfig(array $checksConfig) {
+    $this->checksConfig = $checksConfig;
+  }
+
   /**
    * Should these checks be run?
    *
@@ -47,17 +78,48 @@ abstract class CRM_Utils_Check_Component {
    *
    * @return array
    *   [CRM_Utils_Check_Message]
+   *
+   * @throws \API_Exception
+   * @throws \Civi\API\Exception\UnauthorizedException
    */
   public function checkAll() {
     $messages = [];
     foreach (get_class_methods($this) as $method) {
-      if ($method !== 'checkAll' && strpos($method, 'check') === 0) {
+      // Note that we should check if the test is disabled BEFORE running it in case it's disabled for performance.
+      if ($method !== 'checkAll' && strpos($method, 'check') === 0 && !$this->isDisabled($method)) {
         $messages = array_merge($messages, $this->$method());
       }
     }
     return $messages;
   }
 
+  /**
+   * Is the specified check disabled.
+   *
+   * @param string $method
+   *
+   * @return bool
+   *
+   * @throws \API_Exception
+   * @throws \Civi\API\Exception\UnauthorizedException
+   */
+  public function isDisabled($method) {
+    try {
+      $checks = $this->getChecksConfig();
+      if (!empty($checks[$method])) {
+        return (bool) empty($checks[$method]['is_active']);
+      }
+    }
+    catch (PEAR_Exception $e) {
+      // if we're hitting this, DB migration to 5.19 probably hasn't run yet, so
+      // is_active doesn't exist. Ignore this error so the status check (which
+      // might warn about missing migrations!) still renders.
+      // TODO: remove at some point after 5.19
+    }
+
+    return FALSE;
+  }
+
   /**
    * Check if file exists on given URL.
    *
@@ -65,6 +127,7 @@ abstract class CRM_Utils_Check_Component {
    * @param float|bool $timeoutOverride
    *
    * @return bool
+   * @throws \GuzzleHttp\Exception\GuzzleException
    */
   public function fileExists($url, $timeoutOverride = FALSE) {
     // Timeout past in maybe 0 in which case we should still permit it (0 is infinite).
index 3ed6d8f86235bb08c643aa066dedccf50c6022cb..ed07a6b2aa61e717ac5062ac9045f5db1e34366f 100644 (file)
@@ -879,10 +879,15 @@ function _civicrm_api3_deprecated_activity_buildmailparams($result, $activityTyp
   $params['activity_date_time'] = $result['date'];
   $params['details'] = $result['body'];
 
-  for ($i = 1; $i <= 5; $i++) {
+  $numAttachments = Civi::settings()->get('max_attachments_backend') ?? CRM_Core_BAO_File::DEFAULT_MAX_ATTACHMENTS_BACKEND;
+  for ($i = 1; $i <= $numAttachments; $i++) {
     if (isset($result["attachFile_$i"])) {
       $params["attachFile_$i"] = $result["attachFile_$i"];
     }
+    else {
+      // No point looping 100 times if there's only one attachment
+      break;
+    }
   }
 
   return $params;
index 76887f2bc3cba8bb4ab9908f63b7c4cf6c739db6..3993c4349ae8b1da642b6be076f1bd695ae4002c 100644 (file)
@@ -188,6 +188,11 @@ abstract class CRM_Utils_Hook {
       return $event->getReturnValues();
     }
     else {
+      // We need to ensure tht we will still run known bootstrap related hooks even if the container is not booted.
+      $prebootContainerHooks = array_merge($upgradeFriendlyHooks, ['civicrm_entityTypes', 'civicrm_config']);
+      if (!\Civi\Core\Container::isContainerBooted() && !in_array($fnSuffix, $prebootContainerHooks)) {
+        return;
+      }
       $count = is_array($names) ? count($names) : $names;
       return $this->invokeViaUF($count, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $fnSuffix);
     }
diff --git a/CRM/Utils/OpenFlashChart.php b/CRM/Utils/OpenFlashChart.php
deleted file mode 100644 (file)
index 178f093..0000000
+++ /dev/null
@@ -1,567 +0,0 @@
-<?php
-/*
- +--------------------------------------------------------------------+
- | CiviCRM version 5                                                  |
- +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2019                                |
- +--------------------------------------------------------------------+
- | This file is a part of CiviCRM.                                    |
- |                                                                    |
- | CiviCRM is free software; you can copy, modify, and distribute it  |
- | under the terms of the GNU Affero General Public License           |
- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
- |                                                                    |
- | CiviCRM is distributed in the hope that it will be useful, but     |
- | WITHOUT ANY WARRANTY; without even the implied warranty of         |
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
- | See the GNU Affero General Public License for more details.        |
- |                                                                    |
- | You should have received a copy of the GNU Affero General Public   |
- | License and the CiviCRM Licensing Exception along                  |
- | with this program; if not, contact CiviCRM LLC                     |
- | at info[AT]civicrm[DOT]org. If you have questions about the        |
- | GNU Affero General Public License or the licensing of CiviCRM,     |
- | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
- +--------------------------------------------------------------------+
- */
-
-/**
- *
- * @package CRM
- * @copyright CiviCRM LLC (c) 2004-2019
- */
-
-require_once 'packages/OpenFlashChart/php-ofc-library/open-flash-chart.php';
-
-/**
- * Build various graphs using Open Flash Chart library.
- */
-class CRM_Utils_OpenFlashChart {
-
-  /**
-   * Colours.
-   * @var array
-   */
-  private static $_colours = [
-    "#C3CC38",
-    "#C8B935",
-    "#CEA632",
-    "#D3932F",
-    "#D9802C",
-    "#FA6900",
-    "#DC9B57",
-    "#F78F01",
-    "#5AB56E",
-    "#6F8069",
-    "#C92200",
-    "#EB6C5C",
-  ];
-
-  /**
-   * Build The Bar Gharph.
-   *
-   * @param array $params
-   *   Assoc array of name/value pairs.
-   *
-   * @return object
-   *   $chart   object of open flash chart.
-   */
-  public static function &barChart(&$params) {
-    $chart = NULL;
-    if (empty($params)) {
-      return $chart;
-    }
-    if (empty($params['multiValues'])) {
-      $params['multiValues'] = [$params['values']];
-    }
-
-    $values = CRM_Utils_Array::value('multiValues', $params);
-    if (!is_array($values) || empty($values)) {
-      return $chart;
-    }
-
-    // get the required data.
-    $chartTitle = !empty($params['legend']) ? $params['legend'] : ts('Bar Chart');
-
-    $xValues = $yValues = [];
-    $xValues = array_keys($values[0]);
-    $yValues = array_values($values[0]);
-
-    // set y axis parameters.
-    $yMin = 0;
-
-    // calculate max scale for graph.
-    $yMax = ceil(max($yValues));
-    if ($mod = $yMax % (str_pad(5, strlen($yMax) - 1, 0))) {
-      $yMax += str_pad(5, strlen($yMax) - 1, 0) - $mod;
-    }
-    $ySteps = $yMax / 5;
-
-    $bars = [];
-    $symbol = CRM_Core_BAO_Country::defaultCurrencySymbol();
-    foreach ($values as $barCount => $barVal) {
-      $bars[$barCount] = new bar_glass();
-
-      $yValues = array_values($barVal);
-      foreach ($yValues as &$yVal) {
-        // type casting is required for chart to render values correctly
-        $yVal = (double) $yVal;
-      }
-      $bars[$barCount]->set_values($yValues);
-      if ($barCount > 0) {
-        // FIXME: for bars > 2, we'll need to come out with other colors
-        $bars[$barCount]->colour('#BF3B69');
-      }
-
-      if ($barKey = CRM_Utils_Array::value($barCount, CRM_Utils_Array::value('barKeys', $params))) {
-        $bars[$barCount]->key($barKey, 12);
-      }
-
-      // call user define function to handle on click event.
-      if ($onClickFunName = CRM_Utils_Array::value('on_click_fun_name', $params)) {
-        $bars[$barCount]->set_on_click($onClickFunName);
-      }
-
-      // get the currency to set in tooltip.
-      $tooltip = CRM_Utils_Array::value('tip', $params, "$symbol #val#");
-      $bars[$barCount]->set_tooltip($tooltip);
-    }
-
-    // create x axis label obj.
-    $xLabels = new x_axis_labels();
-    // set_labels function requires xValues array of string or x_axis_label
-    // so type casting array values to string values
-    array_walk($xValues, function (&$value, $index) {
-      $value = (string) $value;
-    });
-    $xLabels->set_labels($xValues);
-
-    // set angle for labels.
-    if ($xLabelAngle = CRM_Utils_Array::value('xLabelAngle', $params)) {
-      $xLabels->rotate($xLabelAngle);
-    }
-
-    // create x axis obj.
-    $xAxis = new x_axis();
-    $xAxis->set_labels($xLabels);
-
-    // create y axis and set range.
-    $yAxis = new y_axis();
-    $yAxis->set_range($yMin, $yMax, $ySteps);
-
-    // create chart title obj.
-    $title = new title($chartTitle);
-
-    // create chart.
-    $chart = new open_flash_chart();
-
-    // add x axis w/ labels to chart.
-    $chart->set_x_axis($xAxis);
-
-    // add y axis values to chart.
-    $chart->add_y_axis($yAxis);
-
-    // set title to chart.
-    $chart->set_title($title);
-
-    // add bar element to chart.
-    foreach ($bars as $bar) {
-      $chart->add_element($bar);
-    }
-
-    // add x axis legend.
-    if ($xName = CRM_Utils_Array::value('xname', $params)) {
-      $xLegend = new x_legend($xName);
-      $xLegend->set_style("{font-size: 13px; color:#000000; font-family: Verdana; text-align: center;}");
-      $chart->set_x_legend($xLegend);
-    }
-
-    // add y axis legend.
-    if ($yName = CRM_Utils_Array::value('yname', $params)) {
-      $yLegend = new y_legend($yName);
-      $yLegend->set_style("{font-size: 13px; color:#000000; font-family: Verdana; text-align: center;}");
-      $chart->set_y_legend($yLegend);
-    }
-
-    return $chart;
-  }
-
-  /**
-   * Build The Pie Gharph.
-   *
-   * @param array $params
-   *   Assoc array of name/value pairs.
-   *
-   * @return object
-   *   $chart   object of open flash chart.
-   */
-  public static function &pieChart(&$params) {
-    $chart = NULL;
-    if (empty($params)) {
-      return $chart;
-    }
-    $allValues = CRM_Utils_Array::value('values', $params);
-    if (!is_array($allValues) || empty($allValues)) {
-      return $chart;
-    }
-
-    // get the required data.
-    $values = [];
-    foreach ($allValues as $label => $value) {
-      $values[] = new pie_value((double) $value, $label);
-    }
-    $graphTitle = !empty($params['legend']) ? $params['legend'] : ts('Pie Chart');
-
-    // get the currency.
-    $symbol = CRM_Core_BAO_Country::defaultCurrencySymbol();
-
-    $pie = new pie();
-    $pie->radius(100);
-
-    // call user define function to handle on click event.
-    if ($onClickFunName = CRM_Utils_Array::value('on_click_fun_name', $params)) {
-      $pie->on_click($onClickFunName);
-    }
-
-    $pie->set_start_angle(35);
-    $pie->add_animation(new pie_fade());
-    $pie->add_animation(new pie_bounce(2));
-
-    // set the tooltip.
-    $tooltip = CRM_Utils_Array::value('tip', $params, "Amount is $symbol #val# of $symbol #total# <br>#percent#");
-    $pie->set_tooltip($tooltip);
-
-    // set colours.
-    $pie->set_colours(self::$_colours);
-
-    $pie->set_values($values);
-
-    // create chart.
-    $chart = new open_flash_chart();
-
-    // create chart title obj.
-    $title = new title($graphTitle);
-    $chart->set_title($title);
-
-    $chart->add_element($pie);
-    $chart->x_axis = NULL;
-
-    return $chart;
-  }
-
-  /**
-   * Build The 3-D Bar Gharph.
-   *
-   * @param array $params
-   *   Assoc array of name/value pairs.
-   *
-   * @return object
-   *   $chart   object of open flash chart.
-   */
-  public static function &bar_3dChart(&$params) {
-    $chart = NULL;
-    if (empty($params)) {
-      return $chart;
-    }
-
-    // $params['values'] should contains the values for each
-    // criteria defined in $params['criteria']
-    $values = CRM_Utils_Array::value('values', $params);
-    $criteria = CRM_Utils_Array::value('criteria', $params);
-    if (!is_array($values) || empty($values) || !is_array($criteria) || empty($criteria)) {
-      return $chart;
-    }
-
-    // get the required data.
-    $xReferences = $xValueLabels = $xValues = $yValues = [];
-
-    foreach ($values as $xVal => $yVal) {
-      if (!is_array($yVal) || empty($yVal)) {
-        continue;
-      }
-
-      $xValueLabels[] = (string) $xVal;
-      foreach ($criteria as $criteria) {
-        $xReferences[$criteria][$xVal] = (double) CRM_Utils_Array::value($criteria, $yVal, 0);
-        $yValues[] = (double) CRM_Utils_Array::value($criteria, $yVal, 0);
-      }
-    }
-
-    if (empty($xReferences)) {
-
-      return $chart;
-
-    }
-
-    // get the currency.
-    $symbol = CRM_Core_BAO_Country::defaultCurrencySymbol();
-
-    // set the tooltip.
-    $tooltip = CRM_Utils_Array::value('tip', $params, "$symbol #val#");
-
-    $count = 0;
-    foreach ($xReferences as $criteria => $values) {
-      $toolTipVal = $tooltip;
-      // for separate tooltip for each criteria
-      if (is_array($tooltip)) {
-        $toolTipVal = CRM_Utils_Array::value($criteria, $tooltip, "$symbol #val#");
-      }
-
-      // create bar_3d object
-      $xValues[$count] = new bar_3d();
-      // set colour pattel
-      $xValues[$count]->set_colour(self::$_colours[$count]);
-      // define colur pattel with bar criteria
-      $xValues[$count]->key((string) $criteria, 12);
-      // define bar chart values
-      $xValues[$count]->set_values(array_values($values));
-
-      // set tooltip
-      $xValues[$count]->set_tooltip($toolTipVal);
-      $count++;
-    }
-
-    $chartTitle = !empty($params['legend']) ? $params['legend'] : ts('Bar Chart');
-
-    // set y axis parameters.
-    $yMin = 0;
-
-    // calculate max scale for graph.
-    $yMax = ceil(max($yValues));
-    if ($mod = $yMax % (str_pad(5, strlen($yMax) - 1, 0))) {
-      $yMax += str_pad(5, strlen($yMax) - 1, 0) - $mod;
-    }
-
-    // if max value of y-axis <= 0, then set default values
-    if ($yMax <= 0) {
-      $ySteps = 1;
-      $yMax = 5;
-    }
-    else {
-      $ySteps = $yMax / 5;
-    }
-
-    // create x axis label obj.
-    $xLabels = new x_axis_labels();
-    $xLabels->set_labels($xValueLabels);
-
-    // set angle for labels.
-    if ($xLabelAngle = CRM_Utils_Array::value('xLabelAngle', $params)) {
-      $xLabels->rotate($xLabelAngle);
-    }
-
-    // create x axis obj.
-    $xAxis = new x_axis();
-    $xAxis->set_labels($xLabels);
-
-    // create y axis and set range.
-    $yAxis = new y_axis();
-    $yAxis->set_range($yMin, $yMax, $ySteps);
-
-    // create chart title obj.
-    $title = new title($chartTitle);
-
-    // create chart.
-    $chart = new open_flash_chart();
-
-    // add x axis w/ labels to chart.
-    $chart->set_x_axis($xAxis);
-
-    // add y axis values to chart.
-    $chart->add_y_axis($yAxis);
-
-    // set title to chart.
-    $chart->set_title($title);
-
-    foreach ($xValues as $bar) {
-      // add bar element to chart.
-      $chart->add_element($bar);
-    }
-
-    // add x axis legend.
-    if ($xName = CRM_Utils_Array::value('xname', $params)) {
-      $xLegend = new x_legend($xName);
-      $xLegend->set_style("{font-size: 13px; color:#000000; font-family: Verdana; text-align: center;}");
-      $chart->set_x_legend($xLegend);
-    }
-
-    // add y axis legend.
-    if ($yName = CRM_Utils_Array::value('yname', $params)) {
-      $yLegend = new y_legend($yName);
-      $yLegend->set_style("{font-size: 13px; color:#000000; font-family: Verdana; text-align: center;}");
-      $chart->set_y_legend($yLegend);
-    }
-
-    return $chart;
-  }
-
-  /**
-   * @param $rows
-   * @param $chart
-   * @param $interval
-   *
-   * @return array
-   */
-  public static function chart($rows, $chart, $interval) {
-    $lcInterval = strtolower($interval);
-    $label = ucfirst($lcInterval);
-    $chartData = $dateKeys = [];
-    $intervalLabels = [
-      'year' => ts('Yearly'),
-      'fiscalyear' => ts('Yearly (Fiscal)'),
-      'month' => ts('Monthly'),
-      'quarter' => ts('Quarterly'),
-      'week' => ts('Weekly'),
-      'yearweek' => ts('Weekly'),
-    ];
-
-    switch ($lcInterval) {
-      case 'month':
-      case 'quarter':
-      case 'week':
-      case 'yearweek':
-        foreach ($rows['receive_date'] as $key => $val) {
-          list($year, $month) = explode('-', $val);
-          $dateKeys[] = substr($rows[$interval][$key], 0, 3) . ' of ' . $year;
-        }
-        $legend = $intervalLabels[$lcInterval];
-        break;
-
-      default:
-        foreach ($rows['receive_date'] as $key => $val) {
-          list($year, $month) = explode('-', $val);
-          $dateKeys[] = $year;
-        }
-        $legend = ts("%1", [1 => $label]);
-        if (!empty($intervalLabels[$lcInterval])) {
-          $legend = $intervalLabels[$lcInterval];
-        }
-        break;
-    }
-
-    if (!empty($dateKeys)) {
-      $graph = [];
-      if (!array_key_exists('multiValue', $rows)) {
-        $rows['multiValue'] = [$rows['value']];
-      }
-      foreach ($rows['multiValue'] as $key => $val) {
-        $graph[$key] = array_combine($dateKeys, $rows['multiValue'][$key]);
-      }
-      $chartData = [
-        'legend' => "$legend " . CRM_Utils_Array::value('legend', $rows, ts('Contribution')) . ' ' . ts('Summary'),
-        'values' => $graph[0],
-        'multiValues' => $graph,
-        'barKeys' => CRM_Utils_Array::value('barKeys', $rows, []),
-      ];
-    }
-
-    // rotate the x labels.
-    $chartData['xLabelAngle'] = CRM_Utils_Array::value('xLabelAngle', $rows, 0);
-    if (!empty($rows['tip'])) {
-      $chartData['tip'] = $rows['tip'];
-    }
-
-    // legend
-    $chartData['xname'] = CRM_Utils_Array::value('xname', $rows);
-    $chartData['yname'] = CRM_Utils_Array::value('yname', $rows);
-
-    // carry some chart params if pass.
-    foreach ([
-      'xSize',
-      'ySize',
-      'divName',
-    ] as $f) {
-      if (!empty($rows[$f])) {
-        $chartData[$f] = $rows[$f];
-      }
-    }
-
-    return self::buildChart($chartData, $chart);
-  }
-
-  /**
-   * @param $rows
-   * @param $chart
-   * @param $interval
-   * @param $chartInfo
-   *
-   * @return array
-   */
-  public static function reportChart($rows, $chart, $interval, &$chartInfo) {
-    foreach ($interval as $key => $val) {
-      $graph[$val] = $rows['value'][$key];
-    }
-
-    $chartData = [
-      'values' => $graph,
-      'legend' => $chartInfo['legend'],
-      'xname' => $chartInfo['xname'],
-      'yname' => $chartInfo['yname'],
-    ];
-
-    // rotate the x labels.
-    $chartData['xLabelAngle'] = CRM_Utils_Array::value('xLabelAngle', $chartInfo, 20);
-    if (!empty($chartInfo['tip'])) {
-      $chartData['tip'] = $chartInfo['tip'];
-    }
-
-    // carry some chart params if pass.
-    foreach ([
-      'xSize',
-      'ySize',
-      'divName',
-    ] as $f) {
-      if (!empty($rows[$f])) {
-        $chartData[$f] = $rows[$f];
-      }
-    }
-
-    return self::buildChart($chartData, $chart);
-  }
-
-  /**
-   * @param array $params
-   * @param $chart
-   *
-   * @return array
-   */
-  public static function buildChart(&$params, $chart) {
-    $openFlashChart = [];
-    if ($chart && is_array($params) && !empty($params)) {
-      // build the chart objects.
-      $chartObj = CRM_Utils_OpenFlashChart::$chart($params);
-
-      $openFlashChart = [];
-      if ($chartObj) {
-        // calculate chart size.
-        $xSize = CRM_Utils_Array::value('xSize', $params, 400);
-        $ySize = CRM_Utils_Array::value('ySize', $params, 300);
-        if ($chart == 'barChart') {
-          $ySize = CRM_Utils_Array::value('ySize', $params, 250);
-          $xSize = 60 * count($params['values']);
-          // hack to show tooltip.
-          if ($xSize < 200) {
-            $xSize = (count($params['values']) > 1) ? 100 * count($params['values']) : 170;
-          }
-          elseif ($xSize > 600 && count($params['values']) > 1) {
-            $xSize = (count($params['values']) + 400 / count($params['values'])) * count($params['values']);
-          }
-        }
-
-        // generate unique id for this chart instance
-        $uniqueId = md5(uniqid(rand(), TRUE));
-
-        $openFlashChart["chart_{$uniqueId}"]['size'] = ['xSize' => $xSize, 'ySize' => $ySize];
-        $openFlashChart["chart_{$uniqueId}"]['object'] = $chartObj;
-
-        // assign chart data to template
-        $template = CRM_Core_Smarty::singleton();
-        $template->assign('uniqueId', $uniqueId);
-        $template->assign("openFlashChartData", json_encode($openFlashChart));
-      }
-    }
-
-    return $openFlashChart;
-  }
-
-}
index ef066db8f0033c887e677f748852d25ed4cdbed0..483e5629b1767c32cb56749b9616f506d095f939 100644 (file)
@@ -233,19 +233,22 @@ class CRM_Utils_Type {
    *
    * @return mixed
    *   The data, escaped if necessary.
+   * @throws \Exception
    */
   public static function escape($data, $type, $abort = TRUE) {
     switch ($type) {
       case 'Integer':
       case 'Int':
-        if (CRM_Utils_Rule::integer($data)) {
-          return (int) $data;
-        }
-        break;
-
       case 'Positive':
-        if (CRM_Utils_Rule::positiveInteger($data)) {
-          return (int) $data;
+      case 'Float':
+      case 'Money':
+      case 'Date':
+      case 'Timestamp':
+      case 'ContactReference':
+      case 'MysqlOrderByDirection':
+        $validatedData = self::validate($data, $type, $abort);
+        if (isset($validatedData)) {
+          return $validatedData;
         }
         break;
 
@@ -287,43 +290,10 @@ class CRM_Utils_Type {
         }
         break;
 
-      case 'Float':
-      case 'Money':
-        if (CRM_Utils_Rule::numeric($data)) {
-          return $data;
-        }
-        break;
-
       case 'String':
       case 'Memo':
       case 'Text':
-        return CRM_Core_DAO::escapeString($data);
-
-      case 'Date':
-      case 'Timestamp':
-        // a null date or timestamp is valid
-        if (strlen(trim($data)) == 0) {
-          return trim($data);
-        }
-
-        if ((preg_match('/^\d{8}$/', $data) ||
-            preg_match('/^\d{14}$/', $data)
-          ) &&
-          CRM_Utils_Rule::mysqlDate($data)
-        ) {
-          return $data;
-        }
-        break;
-
-      case 'ContactReference':
-        if (strlen(trim($data)) == 0) {
-          return trim($data);
-        }
-
-        if (CRM_Utils_Rule::validContact($data)) {
-          return (int) $data;
-        }
-        break;
+        return CRM_Core_DAO::escapeString(self::validate($data, $type, $abort));
 
       case 'MysqlColumnNameOrAlias':
         if (CRM_Utils_Rule::mysqlColumnNameOrAlias($data)) {
@@ -335,12 +305,6 @@ class CRM_Utils_Type {
         }
         break;
 
-      case 'MysqlOrderByDirection':
-        if (CRM_Utils_Rule::mysqlOrderByDirection($data)) {
-          return strtolower($data);
-        }
-        break;
-
       case 'MysqlOrderBy':
         if (CRM_Utils_Rule::mysqlOrderBy($data)) {
           $parts = explode(',', $data);
@@ -387,6 +351,7 @@ class CRM_Utils_Type {
     // @todo Use exceptions instead of CRM_Core_Error::fatal().
     if ($abort) {
       $data = htmlentities($data);
+
       CRM_Core_Error::fatal("$data is not of the type $type");
     }
     return NULL;
@@ -470,18 +435,6 @@ class CRM_Utils_Type {
         return $data;
 
       case 'Date':
-        // a null date is valid
-        if (strlen(trim($data)) == 0) {
-          return trim($data);
-        }
-
-        if (preg_match('/^\d{8}$/', $data) &&
-          CRM_Utils_Rule::mysqlDate($data)
-        ) {
-          return $data;
-        }
-        break;
-
       case 'Timestamp':
         // a null timestamp is valid
         if (strlen(trim($data)) == 0) {
@@ -504,7 +457,7 @@ class CRM_Utils_Type {
         }
 
         if (CRM_Utils_Rule::validContact($data)) {
-          return $data;
+          return (int) $data;
         }
         break;
 
index c44b854aa694dd788ec7da294c21eab260d359ea..cb4c4c86d27fba7d3f8942fb6a938a911c6d2e8a 100644 (file)
@@ -98,6 +98,8 @@ class Manager {
       $angularModules['ui.sortable'] = include "$civicrm_root/ang/ui.sortable.ang.php";
       $angularModules['unsavedChanges'] = include "$civicrm_root/ang/unsavedChanges.ang.php";
       $angularModules['statuspage'] = include "$civicrm_root/ang/crmStatusPage.ang.php";
+      $angularModules['api4Explorer'] = include "$civicrm_root/ang/api4Explorer.ang.php";
+      $angularModules['api4'] = include "$civicrm_root/ang/api4.ang.php";
 
       foreach (\CRM_Core_Component::getEnabledComponents() as $component) {
         $angularModules = array_merge($angularModules, $component->getAngularModules());
diff --git a/Civi/Api4/ACL.php b/Civi/Api4/ACL.php
new file mode 100644 (file)
index 0000000..363823d
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * ACL Entity.
+ *
+ * This entity holds the ACL informatiom. With this entity you add/update/delete an ACL permission which consists of
+ * an Operation (e.g. 'View' or 'Edit'), a set of Data that the operation can be performed on (e.g. a group of contacts),
+ * and a Role that has permission to do this operation. For more info refer to
+ * https://docs.civicrm.org/user/en/latest/initial-set-up/permissions-and-access-control for more info.
+ *
+ * Creating a new ACL requires at minimum a entity table, entity ID and object_table
+ *
+ * @package Civi\Api4
+ */
+class ACL extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Action/Address/AddressSaveTrait.php b/Civi/Api4/Action/Address/AddressSaveTrait.php
new file mode 100644 (file)
index 0000000..6997cfe
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Address;
+
+/**
+ * @inheritDoc
+ * @method bool getStreetParsing()
+ * @method $this setStreetParsing(bool $streetParsing)
+ * @method bool getSkipGeocode()
+ * @method $this setSkipGeocode(bool $skipGeocode)
+ * @method bool getFixAddress()
+ * @method $this setFixAddress(bool $fixAddress)
+ */
+trait AddressSaveTrait {
+
+  /**
+   * Optional param to indicate you want the street_address field parsed into individual params
+   *
+   * @var bool
+   */
+  protected $streetParsing = FALSE;
+
+  /**
+   * Optional param to indicate you want to skip geocoding (useful when importing a lot of addresses at once, the job Geocode and Parse Addresses can execute this task after the import)
+   *
+   * @var bool
+   */
+  protected $skipGeocode = FALSE;
+
+  /**
+   * When true, apply various fixes to the address before insert.
+   *
+   * @var bool
+   */
+  protected $fixAddress = TRUE;
+
+  /**
+   * @inheritDoc
+   */
+  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']));
+      }
+      $item['skip_geocode'] = $this->skipGeocode;
+    }
+    return parent::writeObjects($items);
+  }
+
+}
diff --git a/Civi/Api4/Action/Address/Create.php b/Civi/Api4/Action/Address/Create.php
new file mode 100644 (file)
index 0000000..33fffe4
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Address;
+
+/**
+ * @inheritDoc
+ */
+class Create extends \Civi\Api4\Generic\DAOCreateAction {
+  use AddressSaveTrait;
+
+}
diff --git a/Civi/Api4/Action/Address/Save.php b/Civi/Api4/Action/Address/Save.php
new file mode 100644 (file)
index 0000000..ae5fe8d
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Address;
+
+/**
+ * @inheritDoc
+ */
+class Save extends \Civi\Api4\Generic\DAOSaveAction {
+  use AddressSaveTrait;
+
+}
diff --git a/Civi/Api4/Action/Address/Update.php b/Civi/Api4/Action/Address/Update.php
new file mode 100644 (file)
index 0000000..dcb8d99
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Address;
+
+/**
+ * @inheritDoc
+ */
+class Update extends \Civi\Api4\Generic\DAOUpdateAction {
+  use AddressSaveTrait;
+
+}
diff --git a/Civi/Api4/Action/Campaign/Get.php b/Civi/Api4/Action/Campaign/Get.php
new file mode 100644 (file)
index 0000000..8d4cbe9
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Campaign;
+
+/**
+ * @inheritDoc
+ *
+ * Set current = true to get active, non past campaigns.
+ */
+class Get extends \Civi\Api4\Generic\DAOGetAction {
+  use \Civi\Api4\Generic\Traits\IsCurrentTrait;
+
+}
diff --git a/Civi/Api4/Action/Contact/GetChecksum.php b/Civi/Api4/Action/Contact/GetChecksum.php
new file mode 100644 (file)
index 0000000..e88f048
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Contact;
+
+use Civi\Api4\Generic\Result;
+
+/**
+ * Generate a security checksum for anonymous access to CiviCRM.
+ *
+ * @method $this setContactId(int $cid) Set contact ID (required)
+ * @method int getContactId() Get contact ID param
+ * @method $this setTtl(int $ttl) Set TTL param
+ * @method int getTtl() Get TTL param
+ */
+class GetChecksum extends \Civi\Api4\Generic\AbstractAction {
+
+  /**
+   * ID of contact
+   *
+   * @var int
+   * @required
+   */
+  protected $contactId;
+
+  /**
+   * Expiration time (hours). Defaults to 168 (24 * [7 or value of checksum_timeout system setting]).
+   *
+   * Set to 0 for infinite.
+   *
+   * @var int
+   */
+  protected $ttl = NULL;
+
+  /**
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  public function _run(Result $result) {
+    $ttl = ($this->ttl === 0 || $this->ttl === '0') ? 'inf' : $this->ttl;
+    $result[] = [
+      'id' => $this->contactId,
+      'checksum' => \CRM_Contact_BAO_Contact_Utils::generateChecksum($this->contactId, NULL, $ttl),
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Action/Contact/GetFields.php b/Civi/Api4/Action/Contact/GetFields.php
new file mode 100644 (file)
index 0000000..4db97e5
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Contact;
+
+use Civi\Api4\Generic\DAOGetFieldsAction;
+
+class GetFields extends DAOGetFieldsAction {
+
+  protected function getRecords() {
+    $fields = parent::getRecords();
+
+    $apiKeyPerms = ['edit api keys', 'administer CiviCRM'];
+    if ($this->checkPermissions && !\CRM_Core_Permission::check([$apiKeyPerms])) {
+      unset($fields['api_key']);
+    }
+
+    return $fields;
+  }
+
+}
diff --git a/Civi/Api4/Action/Contact/ValidateChecksum.php b/Civi/Api4/Action/Contact/ValidateChecksum.php
new file mode 100644 (file)
index 0000000..f8038f8
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Contact;
+
+use Civi\Api4\Generic\Result;
+
+/**
+ * Generate a security checksum for anonymous access to CiviCRM.
+ *
+ * @method $this setContactId(int $cid) Set contact ID (required)
+ * @method int getContactId() Get contact ID param
+ * @method $this setChecksum(string $checksum) Set checksum param (required)
+ * @method string getChecksum() Get checksum param
+ */
+class ValidateChecksum extends \Civi\Api4\Generic\AbstractAction {
+
+  /**
+   * ID of contact
+   *
+   * @var int
+   * @required
+   */
+  protected $contactId;
+
+  /**
+   * Value of checksum
+   *
+   * @var string
+   * @required
+   */
+  protected $checksum;
+
+  /**
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  public function _run(Result $result) {
+    $result[] = [
+      'valid' => \CRM_Contact_BAO_Contact_Utils::validChecksum($this->contactId, $this->checksum),
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Action/CustomValue/Create.php b/Civi/Api4/Action/CustomValue/Create.php
new file mode 100644 (file)
index 0000000..7f174b7
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\CustomValue;
+
+/**
+ * @inheritDoc
+ */
+class Create extends \Civi\Api4\Generic\DAOCreateAction {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+}
diff --git a/Civi/Api4/Action/CustomValue/Delete.php b/Civi/Api4/Action/CustomValue/Delete.php
new file mode 100644 (file)
index 0000000..9d01ca9
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\CustomValue;
+
+/**
+ * Delete one or more items, based on criteria specified in Where param.
+ */
+class Delete extends \Civi\Api4\Generic\DAODeleteAction {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+}
diff --git a/Civi/Api4/Action/CustomValue/Get.php b/Civi/Api4/Action/CustomValue/Get.php
new file mode 100644 (file)
index 0000000..7475172
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\CustomValue;
+
+/**
+ * Get fields for a custom group.
+ */
+class Get extends \Civi\Api4\Generic\DAOGetAction {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+}
diff --git a/Civi/Api4/Action/CustomValue/GetActions.php b/Civi/Api4/Action/CustomValue/GetActions.php
new file mode 100644 (file)
index 0000000..39861db
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\CustomValue;
+
+/**
+ * @inheritDoc
+ */
+class GetActions extends \Civi\Api4\Action\GetActions {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+}
diff --git a/Civi/Api4/Action/CustomValue/GetFields.php b/Civi/Api4/Action/CustomValue/GetFields.php
new file mode 100644 (file)
index 0000000..b00e555
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\CustomValue;
+
+use Civi\Api4\Service\Spec\SpecFormatter;
+
+/**
+ * Get fields for a custom group.
+ */
+class GetFields extends \Civi\Api4\Generic\DAOGetFieldsAction {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+  protected function getRecords() {
+    $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);
+    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;
+  }
+
+}
diff --git a/Civi/Api4/Action/CustomValue/Replace.php b/Civi/Api4/Action/CustomValue/Replace.php
new file mode 100644 (file)
index 0000000..347be65
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\CustomValue;
+
+/**
+ * Given a set of records, will appropriately update the database.
+ */
+class Replace extends \Civi\Api4\Generic\BasicReplaceAction {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+}
diff --git a/Civi/Api4/Action/CustomValue/Save.php b/Civi/Api4/Action/CustomValue/Save.php
new file mode 100644 (file)
index 0000000..6f0a9c7
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\CustomValue;
+
+/**
+ * @inheritDoc
+ */
+class Save extends \Civi\Api4\Generic\DAOSaveAction {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+}
diff --git a/Civi/Api4/Action/CustomValue/Update.php b/Civi/Api4/Action/CustomValue/Update.php
new file mode 100644 (file)
index 0000000..a37a99e
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\CustomValue;
+
+/**
+ * Update one or more records with new values. Use the where clause to select them.
+ */
+class Update extends \Civi\Api4\Generic\DAOUpdateAction {
+  use \Civi\Api4\Generic\Traits\CustomValueActionTrait;
+
+}
diff --git a/Civi/Api4/Action/Domain/Get.php b/Civi/Api4/Action/Domain/Get.php
new file mode 100644 (file)
index 0000000..16cb5c9
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Domain;
+
+/**
+ * @inheritDoc
+ */
+class Get extends \Civi\Api4\Generic\DAOGetAction {
+
+  /**
+   * Return only the current domain.
+   *
+   * @var bool
+   */
+  protected $currentDomain = FALSE;
+
+  /**
+   * @inheritDoc
+   */
+  protected function getObjects() {
+    if ($this->currentDomain) {
+      $this->addWhere('id', '=', \CRM_Core_Config::domainID());
+    }
+    return parent::getObjects();
+  }
+
+}
diff --git a/Civi/Api4/Action/Entity/Get.php b/Civi/Api4/Action/Entity/Get.php
new file mode 100644 (file)
index 0000000..a0ca450
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Entity;
+
+use Civi\Api4\CustomGroup;
+use Civi\Api4\Utils\ReflectionUtils;
+
+/**
+ * Get entities
+ *
+ * @method $this setIncludeCustom(bool $value)
+ * @method bool getIncludeCustom()
+ */
+class Get extends \Civi\Api4\Generic\BasicGetAction {
+
+  /**
+   * Include custom-field-based pseudo-entities?
+   *
+   * @var bool
+   */
+  protected $includeCustom = TRUE;
+
+  /**
+   * Scan all api directories to discover entities
+   */
+  protected function getRecords() {
+    $entities = [];
+    $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) {
+          $matches = [];
+          preg_match('/(\w*).php/', $file, $matches);
+          $entity = ['name' => $matches[1]];
+          if ($this->_isFieldSelected('description') || $this->_isFieldSelected('comment')) {
+            $this->addDocs($entity);
+          }
+          $entities[$matches[1]] = $entity;
+        }
+      }
+    }
+    unset($entities['CustomValue']);
+
+    if ($this->includeCustom) {
+      $this->addCustomEntities($entities);
+    }
+
+    ksort($entities);
+    return $entities;
+  }
+
+  /**
+   * Add custom-field pseudo-entities
+   *
+   * @param $entities
+   * @throws \API_Exception
+   */
+  private function addCustomEntities(&$entities) {
+    $customEntities = CustomGroup::get()
+      ->addWhere('is_multiple', '=', 1)
+      ->addWhere('is_active', '=', 1)
+      ->setSelect(['name', 'title', 'help_pre', 'help_post', 'extends'])
+      ->setCheckPermissions(FALSE)
+      ->execute();
+    foreach ($customEntities as $customEntity) {
+      $fieldName = 'Custom_' . $customEntity['name'];
+      $entities[$fieldName] = [
+        'name' => $fieldName,
+        'description' => $customEntity['title'] . ' custom group - extends ' . $customEntity['extends'],
+      ];
+      if (!empty($customEntity['help_pre'])) {
+        $entities[$fieldName]['comment'] = $this->plainTextify($customEntity['help_pre']);
+      }
+      if (!empty($customEntity['help_post'])) {
+        $pre = empty($entities[$fieldName]['comment']) ? '' : $entities[$fieldName]['comment'] . "\n\n";
+        $entities[$fieldName]['comment'] = $pre . $this->plainTextify($customEntity['help_post']);
+      }
+    }
+  }
+
+  /**
+   * Convert html to plain text.
+   *
+   * @param $input
+   * @return mixed
+   */
+  private function plainTextify($input) {
+    return html_entity_decode(strip_tags($input), ENT_QUOTES | ENT_HTML5, 'UTF-8');
+  }
+
+  /**
+   * Add info from code docblock.
+   *
+   * @param $entity
+   */
+  private function addDocs(&$entity) {
+    $reflection = new \ReflectionClass("\\Civi\\Api4\\" . $entity['name']);
+    $entity += ReflectionUtils::getCodeDocs($reflection);
+    unset($entity['package'], $entity['method']);
+  }
+
+}
diff --git a/Civi/Api4/Action/Entity/GetLinks.php b/Civi/Api4/Action/Entity/GetLinks.php
new file mode 100644 (file)
index 0000000..c57e071
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\Entity;
+
+use Civi\Api4\Utils\CoreUtil;
+
+/**
+ * Get a list of FK links between entities
+ */
+class GetLinks extends \Civi\Api4\Generic\BasicGetAction {
+
+  public function getRecords() {
+    $result = [];
+    /** @var \Civi\Api4\Service\Schema\SchemaMap $schema */
+    $schema = \Civi::container()->get('schema_map');
+    foreach ($schema->getTables() as $table) {
+      $entity = CoreUtil::getApiNameFromTableName($table->getName());
+      // Since this is an api function, exclude tables that don't have an api
+      if (class_exists('\Civi\Api4\\' . $entity)) {
+        $item = [
+          'entity' => $entity,
+          'table' => $table->getName(),
+          'links' => [],
+        ];
+        foreach ($table->getTableLinks() as $link) {
+          $link = $link->toArray();
+          $link['entity'] = CoreUtil::getApiNameFromTableName($link['targetTable']);
+          $item['links'][] = $link;
+        }
+        $result[] = $item;
+      }
+    }
+    return $result;
+  }
+
+  public function fields() {
+    return [
+      [
+        'name' => 'entity',
+      ],
+      [
+        'name' => 'table',
+      ],
+      [
+        'name' => 'links',
+        'data_type' => 'Array',
+      ],
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Action/Event/Get.php b/Civi/Api4/Action/Event/Get.php
new file mode 100644 (file)
index 0000000..0acc27e
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Event;
+
+/**
+ * @inheritDoc
+ *
+ * Set current = true to get active, non past events.
+ */
+class Get extends \Civi\Api4\Generic\DAOGetAction {
+  use \Civi\Api4\Generic\Traits\IsCurrentTrait;
+
+}
diff --git a/Civi/Api4/Action/GetActions.php b/Civi/Api4/Action/GetActions.php
new file mode 100644 (file)
index 0000000..7e82287
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action;
+
+use Civi\API\Exception\NotImplementedException;
+use Civi\Api4\Generic\BasicGetAction;
+use Civi\Api4\Utils\ActionUtil;
+use Civi\Api4\Utils\ReflectionUtils;
+
+/**
+ * Get actions for an entity with a list of accepted params
+ */
+class GetActions extends BasicGetAction {
+
+  private $_actions = [];
+
+  private $_actionsToGet;
+
+  protected function getRecords() {
+    $this->_actionsToGet = $this->_itemsToGet('name');
+
+    $entityReflection = new \ReflectionClass('\Civi\Api4\\' . $this->_entityName);
+    foreach ($entityReflection->getMethods(\ReflectionMethod::IS_STATIC | \ReflectionMethod::IS_PUBLIC) as $method) {
+      $actionName = $method->getName();
+      if ($actionName != 'permissions' && $actionName[0] != '_') {
+        $this->loadAction($actionName);
+      }
+    }
+    if (!$this->_actionsToGet || count($this->_actionsToGet) > count($this->_actions)) {
+      // Search for entity-specific actions in extensions
+      foreach (\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles() as $ext) {
+        $dir = \CRM_Utils_File::addTrailingSlash(dirname($ext['filePath']));
+        $this->scanDir($dir . 'Civi/Api4/Action/' . $this->_entityName);
+      }
+      // Search for entity-specific actions in core
+      $this->scanDir(\CRM_Utils_File::addTrailingSlash(__DIR__) . $this->_entityName);
+    }
+    ksort($this->_actions);
+    return $this->_actions;
+  }
+
+  /**
+   * @param $dir
+   */
+  private function scanDir($dir) {
+    if (is_dir($dir)) {
+      foreach (glob("$dir/*.php") as $file) {
+        $matches = [];
+        preg_match('/(\w*).php/', $file, $matches);
+        $actionName = array_pop($matches);
+        $actionClass = new \ReflectionClass('\\Civi\\Api4\\Action\\' . $this->_entityName . '\\' . $actionName);
+        if ($actionClass->isInstantiable() && $actionClass->isSubclassOf('\\Civi\\Api4\\Generic\\AbstractAction')) {
+          $this->loadAction(lcfirst($actionName));
+        }
+      }
+    }
+  }
+
+  /**
+   * @param $actionName
+   */
+  private function loadAction($actionName) {
+    try {
+      if (!isset($this->_actions[$actionName]) && (!$this->_actionsToGet || in_array($actionName, $this->_actionsToGet))) {
+        $action = ActionUtil::getAction($this->getEntityName(), $actionName);
+        if (is_object($action)) {
+          $this->_actions[$actionName] = ['name' => $actionName];
+          if ($this->_isFieldSelected('description') || $this->_isFieldSelected('comment')) {
+            $actionReflection = new \ReflectionClass($action);
+            $actionInfo = ReflectionUtils::getCodeDocs($actionReflection);
+            unset($actionInfo['method']);
+            $this->_actions[$actionName] += $actionInfo;
+          }
+          if ($this->_isFieldSelected('params')) {
+            $this->_actions[$actionName]['params'] = $action->getParamInfo();
+            // Language param is only relevant on multilingual sites
+            $languageLimit = (array) \Civi::settings()->get('languageLimit');
+            if (count($languageLimit) < 2) {
+              unset($this->_actions[$actionName]['params']['language']);
+            }
+            elseif (isset($this->_actions[$actionName]['params']['language'])) {
+              $this->_actions[$actionName]['params']['language']['options'] = array_keys($languageLimit);
+            }
+          }
+        }
+      }
+    }
+    catch (NotImplementedException $e) {
+    }
+  }
+
+  public function fields() {
+    return [
+      [
+        'name' => 'name',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'description',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'comment',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'params',
+        'data_type' => 'Array',
+      ],
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Action/GroupContact/Create.php b/Civi/Api4/Action/GroupContact/Create.php
new file mode 100644 (file)
index 0000000..dda98c5
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\GroupContact;
+
+/**
+ * @inheritDoc
+ */
+class Create extends \Civi\Api4\Generic\DAOCreateAction {
+  use GroupContactSaveTrait;
+
+}
diff --git a/Civi/Api4/Action/GroupContact/GroupContactSaveTrait.php b/Civi/Api4/Action/GroupContact/GroupContactSaveTrait.php
new file mode 100644 (file)
index 0000000..c77208c
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\GroupContact;
+
+/**
+ * @inheritDoc
+ *
+ * @method $this setMethod(string $method) Indicate who added/removed the group.
+ * @method string getMethod()
+ * @method $this setTracking(string $tracking) Specify ip address or other tracking info.
+ * @method string getTracking()
+ */
+trait GroupContactSaveTrait {
+
+  /**
+   * String to indicate who added/removed the group.
+   *
+   * @var string
+   */
+  protected $method = 'API';
+
+  /**
+   * IP address or other tracking info about who performed this group subscription.
+   *
+   * @var string
+   */
+  protected $tracking = '';
+
+  /**
+   * @inheritDoc
+   */
+  protected function writeObjects($items) {
+    foreach ($items as &$item) {
+      $item['method'] = $this->method;
+      $item['tracking'] = $this->tracking;
+    }
+    return parent::writeObjects($items);
+  }
+
+}
diff --git a/Civi/Api4/Action/GroupContact/Save.php b/Civi/Api4/Action/GroupContact/Save.php
new file mode 100644 (file)
index 0000000..1ac443e
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\GroupContact;
+
+/**
+ * @inheritDoc
+ */
+class Save extends \Civi\Api4\Generic\DAOSaveAction {
+  use GroupContactSaveTrait;
+
+}
diff --git a/Civi/Api4/Action/GroupContact/Update.php b/Civi/Api4/Action/GroupContact/Update.php
new file mode 100644 (file)
index 0000000..12abc7d
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\GroupContact;
+
+/**
+ * @inheritDoc
+ */
+class Update extends \Civi\Api4\Generic\DAOUpdateAction {
+  use GroupContactSaveTrait;
+
+}
diff --git a/Civi/Api4/Action/Relationship/Get.php b/Civi/Api4/Action/Relationship/Get.php
new file mode 100644 (file)
index 0000000..c235ad2
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Relationship;
+
+/**
+ * @inheritDoc
+ *
+ * Set current = true to get active, non past relationships.
+ */
+class Get extends \Civi\Api4\Generic\DAOGetAction {
+  use \Civi\Api4\Generic\Traits\IsCurrentTrait;
+
+}
diff --git a/Civi/Api4/Action/Setting/AbstractSettingAction.php b/Civi/Api4/Action/Setting/AbstractSettingAction.php
new file mode 100644 (file)
index 0000000..18a3662
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Setting;
+
+use Civi\Api4\Domain;
+use Civi\Api4\Generic\Result;
+
+/**
+ * Base class for setting actions.
+ *
+ * @method int getDomainId
+ * @method $this setDomainId(int $domainId)
+ */
+abstract class AbstractSettingAction extends \Civi\Api4\Generic\AbstractAction {
+
+  /**
+   * Domain id of setting. Leave NULL for default domain.
+   *
+   * @var int|string|array
+   */
+  protected $domainId;
+
+  /**
+   * Contact - if this is a contact-related setting.
+   *
+   * @var int
+   */
+  protected $contactId;
+
+  public function _run(Result $result) {
+    $this->findDomains();
+    $meta = [];
+    foreach ($this->domainId as $domain) {
+      $meta[$domain] = $this->validateSettings($domain);
+    }
+    foreach ($this->domainId as $domain) {
+      $settingsBag = $this->contactId ? \Civi::contactSettings($this->contactId, $domain) : \Civi::settings($domain);
+      $this->processSettings($result, $settingsBag, $meta[$domain], $domain);
+    }
+  }
+
+  /**
+   * Checks that really ought to be taken care of by Civi::settings
+   *
+   * @param int $domain
+   * @return array
+   * @throws \API_Exception
+   */
+  protected function validateSettings($domain) {
+    $meta = \Civi\Core\SettingsMetadata::getMetadata([], $domain);
+    $names = isset($this->values) ? array_keys($this->values) : $this->select;
+    $invalid = array_diff($names, array_keys($meta));
+    if ($invalid) {
+      throw new \API_Exception("Unknown settings for domain $domain: " . implode(', ', $invalid));
+    }
+    if (isset($this->values)) {
+      foreach ($this->values as $name => &$value) {
+        \CRM_Core_BAO_Setting::validateSetting($value, $meta[$name]);
+      }
+    }
+    return $meta;
+  }
+
+  protected function findDomains() {
+    if ($this->domainId == 'all') {
+      $this->domainId = Domain::get()->setCheckPermissions(FALSE)->addSelect('id')->execute()->column('id');
+    }
+    elseif ($this->domainId) {
+      $this->domainId = (array) $this->domainId;
+      $domains = Domain::get()->setCheckPermissions(FALSE)->addSelect('id')->execute()->column('id');
+      $invalid = array_diff($this->domainId, $domains);
+      if ($invalid) {
+        throw new \API_Exception('Invalid domain id: ' . implode(', ', $invalid));
+      }
+    }
+    else {
+      $this->domainId = [\CRM_Core_Config::domainID()];
+    }
+  }
+
+}
diff --git a/Civi/Api4/Action/Setting/Get.php b/Civi/Api4/Action/Setting/Get.php
new file mode 100644 (file)
index 0000000..a914081
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Setting;
+
+use Civi\Api4\Generic\Result;
+
+/**
+ * Get the value of one or more CiviCRM settings.
+ *
+ * @method array getSelect
+ * @method $this addSelect(string $name)
+ * @method $this setSelect(array $select)
+ */
+class Get extends AbstractSettingAction {
+
+  /**
+   * Names of settings to retrieve
+   *
+   * @var array
+   */
+  protected $select = [];
+
+  /**
+   * @param \Civi\Api4\Generic\Result $result
+   * @param \Civi\Core\SettingsBag $settingsBag
+   * @param array $meta
+   * @param int $domain
+   * @throws \Exception
+   */
+  protected function processSettings(Result $result, $settingsBag, $meta, $domain) {
+    if ($this->select) {
+      foreach ($this->select as $name) {
+        $result[] = [
+          'name' => $name,
+          'value' => $settingsBag->get($name),
+          'domain_id' => $domain,
+        ];
+      }
+    }
+    else {
+      foreach ($settingsBag->all() as $name => $value) {
+        $result[] = [
+          'name' => $name,
+          'value' => $value,
+          'domain_id' => $domain,
+        ];
+      }
+    }
+    foreach ($result as $name => &$setting) {
+      if (isset($setting['value']) && !empty($meta[$name]['serialize'])) {
+        $setting['value'] = \CRM_Core_DAO::unSerializeField($setting['value'], $meta[$name]['serialize']);
+      }
+    }
+  }
+
+}
diff --git a/Civi/Api4/Action/Setting/GetFields.php b/Civi/Api4/Action/Setting/GetFields.php
new file mode 100644 (file)
index 0000000..7cd7cea
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Setting;
+
+/**
+ * Get information about CiviCRM settings.
+ *
+ * @method int getDomainId
+ * @method $this setDomainId(int $domainId)
+ */
+class GetFields extends \Civi\Api4\Generic\BasicGetFieldsAction {
+
+  /**
+   * Domain id of settings. Leave NULL for default domain.
+   *
+   * @var int
+   */
+  protected $domainId;
+
+  protected function getRecords() {
+    // TODO: Waiting for filter handling to get fixed in core
+    // $names = $this->_itemsToGet('name');
+    // $filter = $names ? ['name' => $names] : [];
+    $filter = [];
+    return \Civi\Core\SettingsMetadata::getMetadata($filter, $this->domainId, $this->loadOptions);
+  }
+
+  public function fields() {
+    return [
+      [
+        'name' => 'name',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'title',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'description',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'help_text',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'default',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'pseudoconstant',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'options',
+        'data_type' => 'Array',
+      ],
+      [
+        'name' => 'group_name',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'group',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'html_type',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'add',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'serialize',
+        'data_type' => 'Integer',
+      ],
+      [
+        'name' => 'data_type',
+        'data_type' => 'Integer',
+      ],
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Action/Setting/Revert.php b/Civi/Api4/Action/Setting/Revert.php
new file mode 100644 (file)
index 0000000..d8a3406
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Setting;
+
+use Civi\Api4\Generic\Result;
+
+/**
+ * Revert one or more CiviCRM settings to their default value.
+ *
+ * @method array getSelect
+ * @method $this addSelect(string $name)
+ * @method $this setSelect(array $select)
+ */
+class Revert extends AbstractSettingAction {
+
+  /**
+   * Names of settings to revert
+   *
+   * @var array
+   * @required
+   */
+  protected $select = [];
+
+  /**
+   * @param \Civi\Api4\Generic\Result $result
+   * @param \Civi\Core\SettingsBag $settingsBag
+   * @param array $meta
+   * @param int $domain
+   * @throws \Exception
+   */
+  protected function processSettings(Result $result, $settingsBag, $meta, $domain) {
+    foreach ($this->select as $name) {
+      $settingsBag->revert($name);
+      $result[] = [
+        'name' => $name,
+        'value' => $settingsBag->get($name),
+        'domain_id' => $domain,
+      ];
+    }
+    foreach ($result as $name => &$setting) {
+      if (isset($setting['value']) && !empty($meta[$name]['serialize'])) {
+        $setting['value'] = \CRM_Core_DAO::unSerializeField($setting['value'], $meta[$name]['serialize']);
+      }
+    }
+  }
+
+}
diff --git a/Civi/Api4/Action/Setting/Set.php b/Civi/Api4/Action/Setting/Set.php
new file mode 100644 (file)
index 0000000..d0ea403
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\Setting;
+
+use Civi\Api4\Generic\Result;
+
+/**
+ * Set the value of one or more CiviCRM settings.
+ *
+ * @method array getValues
+ * @method $this setValues(array $value)
+ * @method $this addValue(string $name, mixed $value)
+ */
+class Set extends AbstractSettingAction {
+
+  /**
+   * Setting names/values to set.
+   *
+   * @var mixed
+   * @required
+   */
+  protected $values = [];
+
+  /**
+   * @param \Civi\Api4\Generic\Result $result
+   * @param \Civi\Core\SettingsBag $settingsBag
+   * @param array $meta
+   * @param int $domain
+   * @throws \Exception
+   */
+  protected function processSettings(Result $result, $settingsBag, $meta, $domain) {
+    foreach ($this->values as $name => $value) {
+      if (isset($value) && !empty($meta[$name]['serialize'])) {
+        $value = \CRM_Core_DAO::serializeField($value, $meta[$name]['serialize']);
+      }
+      $settingsBag->set($name, $value);
+      $result[] = [
+        'name' => $name,
+        'value' => $this->values[$name],
+        'domain_id' => $domain,
+      ];
+    }
+  }
+
+}
diff --git a/Civi/Api4/Action/System/Check.php b/Civi/Api4/Action/System/Check.php
new file mode 100644 (file)
index 0000000..e07ac0d
--- /dev/null
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\System;
+
+/**
+ * Retrieve system notices, warnings, errors, etc.
+ */
+class Check extends \Civi\Api4\Generic\BasicGetAction {
+
+  protected function getRecords() {
+    $messages = [];
+    foreach (\CRM_Utils_Check::checkAll() as $message) {
+      $messages[] = $message->toArray();
+    }
+    return $messages;
+  }
+
+  public static function fields() {
+    return [
+      [
+        'name' => 'name',
+        'title' => 'Name',
+        'description' => 'Unique identifier',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'title',
+        'title' => 'Title',
+        'description' => 'Short title text',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'message',
+        'title' => 'Message',
+        'description' => 'Long description html',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'help',
+        'title' => 'Help',
+        'description' => 'Optional extra help (html string)',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'icon',
+        'description' => 'crm-i class of icon to display with message',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'severity',
+        'title' => 'Severity',
+        'description' => 'Psr\Log\LogLevel string',
+        'data_type' => 'String',
+        'options' => array_combine(\CRM_Utils_Check::getSeverityList(), \CRM_Utils_Check::getSeverityList()),
+      ],
+      [
+        'name' => 'severity_id',
+        'title' => 'Severity ID',
+        'description' => 'Integer representation of Psr\Log\LogLevel',
+        'data_type' => 'Integer',
+        'options' => \CRM_Utils_Check::getSeverityList(),
+      ],
+      [
+        'name' => 'is_visible',
+        'title' => 'is visible',
+        'description' => '0 if message has been hidden by the user',
+        'data_type' => 'Boolean',
+      ],
+      [
+        'name' => 'hidden_until',
+        'title' => 'Hidden until',
+        'description' => 'When will hidden message be visible again?',
+        'data_type' => 'Date',
+      ],
+      [
+        'name' => 'actions',
+        'title' => 'Actions',
+        'description' => 'List of actions user can perform',
+        'data_type' => 'Array',
+      ],
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Action/System/Flush.php b/Civi/Api4/Action/System/Flush.php
new file mode 100644 (file)
index 0000000..71140ee
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Action\System;
+
+/**
+ * Clear CiviCRM caches, and optionally rebuild triggers and reset sessions.
+ *
+ * @method bool getTriggers
+ * @method $this setTriggers(bool $triggers)
+ * @method bool getSession
+ * @method $this setSession(bool $session)
+ */
+class Flush extends \Civi\Api4\Generic\AbstractAction {
+
+  /**
+   * Rebuild db triggers
+   *
+   * @var bool
+   */
+  protected $triggers = FALSE;
+
+  /**
+   * Reset sessions
+   *
+   * @var bool
+   */
+  protected $session = FALSE;
+
+  public function _run(\Civi\Api4\Generic\Result $result) {
+    \CRM_Core_Invoke::rebuildMenuAndCaches($this->triggers, $this->session);
+  }
+
+}
diff --git a/Civi/Api4/ActionSchedule.php b/Civi/Api4/ActionSchedule.php
new file mode 100644 (file)
index 0000000..f3274a4
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * ActionSchedule Entity.
+ *
+ * This entity exposes CiviCRM schedule reminders, which allows us to send messages (through email or SMS)
+ * to contacts when certain criteria are met. Using this API you can create schedule reminder for
+ * supported entities like Contact, Activity, Event, Membership or Contribution.
+ *
+ * Creating a new ActionSchedule requires at minimum a title, mapping_id and entity_value.
+ *
+ * @package Civi\Api4
+ */
+class ActionSchedule extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Activity.php b/Civi/Api4/Activity.php
new file mode 100644 (file)
index 0000000..c53a339
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Activity entity.
+ *
+ * This entity adds record of any scheduled or completed interaction with one or more contacts.
+ * Each activity record is tightly linked to other CiviCRM constituents. With this API you can manually
+ * create an activity of desired type for your organisation or any other contact.
+ *
+ * Creating a new Activity requires at minimum a activity_type_id, entity ID and object_table
+ *
+ * An activity is a record of some type of interaction with one or more contacts.
+ *
+ * @package Civi\Api4
+ */
+class Activity extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/ActivityContact.php b/Civi/Api4/ActivityContact.php
new file mode 100644 (file)
index 0000000..d7a360e
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * ActivityContact Entity.
+ *
+ * This entity adds a record which relate a contact to activity.
+ *
+ * Creating a new ActivityContact requires at minimum a contact_id and activity_id.
+ *
+ * @package Civi\Api4
+ */
+class ActivityContact extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Address.php b/Civi/Api4/Address.php
new file mode 100644 (file)
index 0000000..e3f42c9
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Address Entity.
+ *
+ * This entity holds the address informatiom 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.
+ *
+ * @package Civi\Api4
+ */
+class Address extends Generic\DAOEntity {
+
+  /**
+   * @return \Civi\Api4\Action\Address\Create
+   */
+  public static function create() {
+    return new \Civi\Api4\Action\Address\Create(__CLASS__, __FUNCTION__);
+  }
+
+  /**
+   * @return \Civi\Api4\Action\Address\Save
+   */
+  public static function save() {
+    return new \Civi\Api4\Action\Address\Save(__CLASS__, __FUNCTION__);
+  }
+
+  /**
+   * @return \Civi\Api4\Action\Address\Update
+   */
+  public static function update() {
+    return new \Civi\Api4\Action\Address\Update(__CLASS__, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/Campaign.php b/Civi/Api4/Campaign.php
new file mode 100644 (file)
index 0000000..d8ed0dd
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Campaign entity.
+ *
+ * @package Civi\Api4
+ */
+class Campaign extends Generic\DAOEntity {
+
+  /**
+   * @return \Civi\Api4\Action\Campaign\Get
+   */
+  public static function get() {
+    return new \Civi\Api4\Action\Campaign\Get(__CLASS__, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/Contact.php b/Civi/Api4/Contact.php
new file mode 100644 (file)
index 0000000..5104b2a
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Contacts - Individuals, Organizations, Households.
+ *
+ * This is the central entity in the CiviCRM database, and links to
+ * many other entities (Email, Phone, Participant, etc.).
+ *
+ * Creating a new contact requires at minimum a name or email address.
+ *
+ * @package Civi\Api4
+ */
+class Contact extends Generic\DAOEntity {
+
+  public static function getFields() {
+    return new Action\Contact\GetFields(__CLASS__, __FUNCTION__);
+  }
+
+  public static function getChecksum() {
+    return new Action\Contact\GetChecksum(__CLASS__, __FUNCTION__);
+  }
+
+  public static function validateChecksum() {
+    return new Action\Contact\ValidateChecksum(__CLASS__, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/ContactType.php b/Civi/Api4/ContactType.php
new file mode 100644 (file)
index 0000000..e792f0c
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * ContactType entity.
+ *
+ * With this entity you can create or update any new or existing Contact type or a sub type
+ * In case of updating existing ContactType, id of that particular ContactType must
+ * be in $params array.
+ *
+ * Creating a new contact type requires at minimum a label and parent_id.
+ *
+ * @package Civi\Api4
+ */
+class ContactType extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Contribution.php b/Civi/Api4/Contribution.php
new file mode 100644 (file)
index 0000000..43c89a9
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Contribution entity.
+ *
+ * @package Civi\Api4
+ */
+class Contribution extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/ContributionPage.php b/Civi/Api4/ContributionPage.php
new file mode 100644 (file)
index 0000000..ea97896
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * ContributionPage entity.
+ *
+ * @package Civi\Api4
+ */
+class ContributionPage extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/CustomField.php b/Civi/Api4/CustomField.php
new file mode 100644 (file)
index 0000000..f9f6fdd
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * CustomField entity.
+ *
+ * @package Civi\Api4
+ */
+class CustomField extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/CustomGroup.php b/Civi/Api4/CustomGroup.php
new file mode 100644 (file)
index 0000000..5051e3f
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * CustomGroup entity.
+ *
+ * @package Civi\Api4
+ */
+class CustomGroup extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/CustomValue.php b/Civi/Api4/CustomValue.php
new file mode 100644 (file)
index 0000000..e39c63e
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * CustomGroup entity.
+ *
+ * @package Civi\Api4
+ */
+class CustomValue extends Generic\AbstractEntity {
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\Get
+   */
+  public static function get($customGroup) {
+    return new Action\CustomValue\Get($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\GetFields
+   */
+  public static function getFields($customGroup = NULL) {
+    return new Action\CustomValue\GetFields($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\Save
+   */
+  public static function save($customGroup) {
+    return new Action\CustomValue\Save($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\Create
+   */
+  public static function create($customGroup) {
+    return new Action\CustomValue\Create($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\Update
+   */
+  public static function update($customGroup) {
+    return new Action\CustomValue\Update($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\Delete
+   */
+  public static function delete($customGroup) {
+    return new Action\CustomValue\Delete($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\Replace
+   */
+  public static function replace($customGroup) {
+    return new Action\CustomValue\Replace($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @param string $customGroup
+   * @return Action\CustomValue\GetActions
+   */
+  public static function getActions($customGroup = NULL) {
+    return new Action\CustomValue\GetActions($customGroup, __FUNCTION__);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public static function permissions() {
+    $entity = 'contact';
+    $permissions = \CRM_Core_Permission::getEntityActionPermissions();
+
+    // Merge permissions for this entity with the defaults
+    return \CRM_Utils_Array::value($entity, $permissions, []) + $permissions['default'];
+  }
+
+}
diff --git a/Civi/Api4/Domain.php b/Civi/Api4/Domain.php
new file mode 100644 (file)
index 0000000..2333f28
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Domains - multisite instances of CiviCRM.
+ *
+ * @package Civi\Api4
+ */
+class Domain extends Generic\DAOEntity {
+
+  public static function get() {
+    return new \Civi\Api4\Action\Domain\Get(__CLASS__, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/Email.php b/Civi/Api4/Email.php
new file mode 100644 (file)
index 0000000..66255fa
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Email entity.
+ *
+ * This entity allows user to add, update, retrieve or delete emails address(es) of a contact.
+ *
+ * Creating a new email address requires at minimum a contact's ID and email
+ *
+ * @package Civi\Api4
+ */
+class Email extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Entity.php b/Civi/Api4/Entity.php
new file mode 100644 (file)
index 0000000..4980140
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Retrieves information about all Api4 entities.
+ *
+ * @package Civi\Api4
+ */
+class Entity extends Generic\AbstractEntity {
+
+  /**
+   * @return Action\Entity\Get
+   */
+  public static function get() {
+    return new Action\Entity\Get('Entity', __FUNCTION__);
+  }
+
+  /**
+   * @return \Civi\Api4\Generic\BasicGetFieldsAction
+   */
+  public static function getFields() {
+    return new \Civi\Api4\Generic\BasicGetFieldsAction('Entity', __FUNCTION__, function() {
+      return [
+        ['name' => 'name'],
+        ['name' => 'description'],
+        ['name' => 'comment'],
+      ];
+    });
+  }
+
+  /**
+   * @return Action\Entity\GetLinks
+   */
+  public static function getLinks() {
+    return new Action\Entity\GetLinks('Entity', __FUNCTION__);
+  }
+
+  /**
+   * @return array
+   */
+  public static function permissions() {
+    return [
+      'default' => ['access CiviCRM'],
+    ];
+  }
+
+}
diff --git a/Civi/Api4/EntityTag.php b/Civi/Api4/EntityTag.php
new file mode 100644 (file)
index 0000000..b58b093
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * EntityTag - links tags to contacts, activities, etc.
+ *
+ * @package Civi\Api4
+ */
+class EntityTag extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Event.php b/Civi/Api4/Event.php
new file mode 100644 (file)
index 0000000..f72ead2
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Event entity.
+ *
+ * @package Civi\Api4
+ */
+class Event extends Generic\DAOEntity {
+
+  /**
+   * @return \Civi\Api4\Action\Event\Get
+   */
+  public static function get() {
+    return new \Civi\Api4\Action\Event\Get(__CLASS__, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/Event/Events.php b/Civi/Api4/Event/Events.php
new file mode 100644 (file)
index 0000000..de26a7f
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event;
+
+class Events {
+
+  /**
+   * Prepare the specification for a request. Fired from within a request to
+   * get fields.
+   *
+   * @see GetSpecEvent
+   */
+  const GET_SPEC = 'civi.api.get_spec';
+
+  /**
+   * Build the database schema, allow adding of custom joins and tables.
+   */
+  const SCHEMA_MAP_BUILD = 'api.schema_map.build';
+
+  /**
+   * Alter query results of APIv4 select query
+   */
+  const POST_SELECT_QUERY = 'api.select_query.post';
+
+}
diff --git a/Civi/Api4/Event/GetSpecEvent.php b/Civi/Api4/Event/GetSpecEvent.php
new file mode 100644 (file)
index 0000000..df85ea9
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event;
+
+use Civi\Api4\Generic\AbstractAction;
+use Symfony\Component\EventDispatcher\Event as BaseEvent;
+
+class GetSpecEvent extends BaseEvent {
+  /**
+   * @var \Civi\Api4\Generic\AbstractAction
+   */
+  protected $request;
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractAction $request
+   */
+  public function __construct(AbstractAction $request) {
+    $this->request = $request;
+  }
+
+  /**
+   * @return \Civi\Api4\Generic\AbstractAction
+   */
+  public function getRequest() {
+    return $this->request;
+  }
+
+  /**
+   * @param $request
+   */
+  public function setRequest(AbstractAction $request) {
+    $this->request = $request;
+  }
+
+}
diff --git a/Civi/Api4/Event/PostSelectQueryEvent.php b/Civi/Api4/Event/PostSelectQueryEvent.php
new file mode 100644 (file)
index 0000000..30036cc
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event;
+
+use Civi\Api4\Query\Api4SelectQuery;
+use Symfony\Component\EventDispatcher\Event;
+
+class PostSelectQueryEvent extends Event {
+
+  /**
+   * @var array
+   */
+  protected $results;
+
+  /**
+   * @var \Civi\Api4\Query\Api4SelectQuery
+   */
+  protected $query;
+
+  /**
+   * PostSelectQueryEvent constructor.
+   * @param array $results
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   */
+  public function __construct(array $results, Api4SelectQuery $query) {
+    $this->results = $results;
+    $this->query = $query;
+  }
+
+  /**
+   * @return array
+   */
+  public function getResults() {
+    return $this->results;
+  }
+
+  /**
+   * @param array $results
+   * @return $this
+   */
+  public function setResults($results) {
+    $this->results = $results;
+
+    return $this;
+  }
+
+  /**
+   * @return \Civi\Api4\Query\Api4SelectQuery
+   */
+  public function getQuery() {
+    return $this->query;
+  }
+
+  /**
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   * @return $this
+   */
+  public function setQuery($query) {
+    $this->query = $query;
+
+    return $this;
+  }
+
+}
diff --git a/Civi/Api4/Event/SchemaMapBuildEvent.php b/Civi/Api4/Event/SchemaMapBuildEvent.php
new file mode 100644 (file)
index 0000000..2a63022
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event;
+
+use Civi\Api4\Service\Schema\SchemaMap;
+use Symfony\Component\EventDispatcher\Event as BaseEvent;
+
+class SchemaMapBuildEvent extends BaseEvent {
+  /**
+   * @var \Civi\Api4\Service\Schema\SchemaMap
+   */
+  protected $schemaMap;
+
+  /**
+   * @param \Civi\Api4\Service\Schema\SchemaMap $schemaMap
+   */
+  public function __construct(SchemaMap $schemaMap) {
+    $this->schemaMap = $schemaMap;
+  }
+
+  /**
+   * @return \Civi\Api4\Service\Schema\SchemaMap
+   */
+  public function getSchemaMap() {
+    return $this->schemaMap;
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Schema\SchemaMap $schemaMap
+   *
+   * @return $this
+   */
+  public function setSchemaMap($schemaMap) {
+    $this->schemaMap = $schemaMap;
+
+    return $this;
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/ActivityPreCreationSubscriber.php b/Civi/Api4/Event/Subscriber/ActivityPreCreationSubscriber.php
new file mode 100644 (file)
index 0000000..d536413
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+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) {
+      $result = OptionValue::get()
+        ->setCheckPermissions(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/Civi/Api4/Event/Subscriber/ActivitySchemaMapSubscriber.php b/Civi/Api4/Event/Subscriber/ActivitySchemaMapSubscriber.php
new file mode 100644 (file)
index 0000000..9dc9688
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Event\Events;
+use Civi\Api4\Event\SchemaMapBuildEvent;
+use Civi\Api4\Service\Schema\Joinable\ActivityToActivityContactAssigneesJoinable;
+use Civi\Api4\Service\Schema\Joinable\BridgeJoinable;
+use Civi\Api4\Service\Schema\Joinable\Joinable;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+class ActivitySchemaMapSubscriber implements EventSubscriberInterface {
+
+  /**
+   * @return array
+   */
+  public static function getSubscribedEvents() {
+    return [
+      Events::SCHEMA_MAP_BUILD => 'onSchemaBuild',
+    ];
+  }
+
+  /**
+   * @param \Civi\Api4\Event\SchemaMapBuildEvent $event
+   */
+  public function onSchemaBuild(SchemaMapBuildEvent $event) {
+    $schema = $event->getSchemaMap();
+    $table = $schema->getTableByName('civicrm_activity');
+
+    $middleAlias = \CRM_Utils_String::createRandom(10, implode(range('a', 'z')));
+    $middleLink = new ActivityToActivityContactAssigneesJoinable($middleAlias);
+
+    $bridge = new BridgeJoinable('civicrm_contact', 'id', 'assignees', $middleLink);
+    $bridge->setBaseTable('civicrm_activity_contact');
+    $bridge->setJoinType(Joinable::JOIN_TYPE_ONE_TO_MANY);
+
+    $table->addTableLink('contact_id', $bridge);
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/ContactPreSaveSubscriber.php b/Civi/Api4/Event/Subscriber/ContactPreSaveSubscriber.php
new file mode 100644 (file)
index 0000000..d8bc34d
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Generic\AbstractAction;
+
+class ContactPreSaveSubscriber extends Generic\PreSaveSubscriber {
+
+  public $supportedOperation = 'create';
+
+  public function modify(&$contact, AbstractAction $request) {
+    // Guess which type of contact is being created
+    if (empty($contact['contact_type']) && !empty($contact['organization_name'])) {
+      $contact['contact_type'] = 'Organization';
+    }
+    if (empty($contact['contact_type']) && !empty($contact['household_name'])) {
+      $contact['contact_type'] = 'Household';
+    }
+  }
+
+  public function applies(AbstractAction $request) {
+    return $request->getEntityName() === 'Contact';
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/ContactSchemaMapSubscriber.php b/Civi/Api4/Event/Subscriber/ContactSchemaMapSubscriber.php
new file mode 100644 (file)
index 0000000..bcde7fb
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Event\Events;
+use Civi\Api4\Event\SchemaMapBuildEvent;
+use Civi\Api4\Service\Schema\Joinable\Joinable;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+class ContactSchemaMapSubscriber implements EventSubscriberInterface {
+
+  /**
+   * @return array
+   */
+  public static function getSubscribedEvents() {
+    return [
+      Events::SCHEMA_MAP_BUILD => 'onSchemaBuild',
+    ];
+  }
+
+  /**
+   * @param \Civi\Api4\Event\SchemaMapBuildEvent $event
+   */
+  public function onSchemaBuild(SchemaMapBuildEvent $event) {
+    $schema = $event->getSchemaMap();
+    $table = $schema->getTableByName('civicrm_contact');
+    $this->addCreatedActivitiesLink($table);
+    $this->fixPreferredLanguageAlias($table);
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Schema\Table $table
+   */
+  private function addCreatedActivitiesLink($table) {
+    $alias = 'created_activities';
+    $joinable = new Joinable('civicrm_activity_contact', 'contact_id', $alias);
+    $joinable->addCondition($alias . '.record_type_id = 1');
+    $joinable->setJoinType($joinable::JOIN_TYPE_ONE_TO_MANY);
+    $table->addTableLink('id', $joinable);
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Schema\Table $table
+   */
+  private function fixPreferredLanguageAlias($table) {
+    foreach ($table->getExternalLinks() as $link) {
+      if ($link->getAlias() === 'languages') {
+        $link->setAlias('preferred_language');
+        return;
+      }
+    }
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/ContributionPreSaveSubscriber.php b/Civi/Api4/Event/Subscriber/ContributionPreSaveSubscriber.php
new file mode 100644 (file)
index 0000000..73ffd46
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Generic\AbstractAction;
+
+class ContributionPreSaveSubscriber extends Generic\PreSaveSubscriber {
+
+  public function modify(&$record, AbstractAction $request) {
+    // Required by Contribution BAO
+    $record['skipCleanMoney'] = TRUE;
+  }
+
+  public function applies(AbstractAction $request) {
+    return $request->getEntityName() === 'Contribution';
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/CustomFieldPreSaveSubscriber.php b/Civi/Api4/Event/Subscriber/CustomFieldPreSaveSubscriber.php
new file mode 100644 (file)
index 0000000..d5e4caf
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Generic\AbstractAction;
+
+class CustomFieldPreSaveSubscriber extends Generic\PreSaveSubscriber {
+
+  public $supportedOperation = 'create';
+
+  public function modify(&$field, AbstractAction $request) {
+    if (!empty($field['option_values'])) {
+      $weight = 0;
+      foreach ($field['option_values'] as $key => $value) {
+        // Translate simple key/value pairs into full-blown option values
+        if (!is_array($value)) {
+          $value = [
+            'label' => $value,
+            'value' => $key,
+            'is_active' => 1,
+            'weight' => $weight,
+          ];
+          $key = $weight++;
+        }
+        $field['option_label'][$key] = $value['label'];
+        $field['option_value'][$key] = $value['value'];
+        $field['option_status'][$key] = $value['is_active'];
+        $field['option_weight'][$key] = $value['weight'];
+      }
+    }
+    $field['option_type'] = !empty($field['option_values']);
+  }
+
+  public function applies(AbstractAction $request) {
+    return $request->getEntityName() === 'CustomField';
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/CustomGroupPreCreationSubscriber.php b/Civi/Api4/Event/Subscriber/CustomGroupPreCreationSubscriber.php
new file mode 100644 (file)
index 0000000..2c0aec0
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Generic\DAOCreateAction;
+
+class CustomGroupPreCreationSubscriber extends Generic\PreCreationSubscriber {
+
+  /**
+   * @param \Civi\Api4\Generic\DAOCreateAction $request
+   */
+  protected function modify(DAOCreateAction $request) {
+    $extends = $request->getValue('extends');
+    $title = $request->getValue('title');
+    $name = $request->getValue('name');
+
+    if (is_string($extends)) {
+      $request->addValue('extends', [$extends]);
+    }
+
+    if (NULL === $title && $name) {
+      $request->addValue('title', $name);
+    }
+  }
+
+  protected function applies(DAOCreateAction $request) {
+    return $request->getEntityName() === 'CustomGroup';
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/Generic/AbstractPrepareSubscriber.php b/Civi/Api4/Event/Subscriber/Generic/AbstractPrepareSubscriber.php
new file mode 100644 (file)
index 0000000..ce96848
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber\Generic;
+
+use Civi\API\Event\PrepareEvent;
+use Civi\API\Events;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+abstract class AbstractPrepareSubscriber implements EventSubscriberInterface {
+
+  /**
+   * @return array
+   */
+  public static function getSubscribedEvents() {
+    return [
+      Events::PREPARE => 'onApiPrepare',
+    ];
+  }
+
+  /**
+   * @param \Civi\API\Event\PrepareEvent $event
+   */
+  abstract public function onApiPrepare(PrepareEvent $event);
+
+}
diff --git a/Civi/Api4/Event/Subscriber/Generic/PreCreationSubscriber.php b/Civi/Api4/Event/Subscriber/Generic/PreCreationSubscriber.php
new file mode 100644 (file)
index 0000000..6ebd9fb
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber\Generic;
+
+use Civi\API\Event\PrepareEvent;
+use Civi\Api4\Generic\DAOCreateAction;
+
+abstract class PreCreationSubscriber extends AbstractPrepareSubscriber {
+
+  /**
+   * @param \Civi\API\Event\PrepareEvent $event
+   */
+  public function onApiPrepare(PrepareEvent $event) {
+    $apiRequest = $event->getApiRequest();
+    if (!$apiRequest instanceof DAOCreateAction) {
+      return;
+    }
+
+    $this->addDefaultCreationValues($apiRequest);
+    if ($this->applies($apiRequest)) {
+      $this->modify($apiRequest);
+    }
+  }
+
+  /**
+   * Modify the request
+   *
+   * @param \Civi\Api4\Generic\DAOCreateAction $request
+   *
+   * @return void
+   */
+  abstract protected function modify(DAOCreateAction $request);
+
+  /**
+   * Check if this subscriber should be applied to the request
+   *
+   * @param \Civi\Api4\Generic\DAOCreateAction $request
+   *
+   * @return bool
+   */
+  abstract protected function applies(DAOCreateAction $request);
+
+  /**
+   * Sets default values common to all creation requests
+   *
+   * @param \Civi\Api4\Generic\DAOCreateAction $request
+   */
+  protected function addDefaultCreationValues(DAOCreateAction $request) {
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/Generic/PreSaveSubscriber.php b/Civi/Api4/Event/Subscriber/Generic/PreSaveSubscriber.php
new file mode 100644 (file)
index 0000000..7c80adf
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber\Generic;
+
+use Civi\API\Event\PrepareEvent;
+use Civi\Api4\Generic\AbstractAction;
+use Civi\Api4\Generic\AbstractCreateAction;
+use Civi\Api4\Generic\AbstractUpdateAction;
+
+abstract class PreSaveSubscriber extends AbstractPrepareSubscriber {
+
+  /**
+   * @var string
+   *   create|update|both
+   */
+  public $supportedOperation = 'both';
+
+  /**
+   * @param \Civi\API\Event\PrepareEvent $event
+   */
+  public function onApiPrepare(PrepareEvent $event) {
+    $apiRequest = $event->getApiRequest();
+
+    if ($apiRequest instanceof AbstractAction && $this->applies($apiRequest)) {
+      if (
+        ($apiRequest instanceof AbstractCreateAction && $this->supportedOperation !== 'update') ||
+        ($apiRequest instanceof AbstractUpdateAction && $this->supportedOperation !== 'create')
+      ) {
+        $values = $apiRequest->getValues();
+        $this->modify($values, $apiRequest);
+        $apiRequest->setValues($values);
+      }
+    }
+  }
+
+  /**
+   * Modify the item about to be saved
+   *
+   * @param array $item
+   * @param \Civi\Api4\Generic\AbstractAction $request
+   *
+   */
+  abstract protected function modify(&$item, AbstractAction $request);
+
+  /**
+   * Check if this subscriber should be applied to the request
+   *
+   * @param \Civi\Api4\Generic\AbstractAction $request
+   *
+   * @return bool
+   */
+  abstract protected function applies(AbstractAction $request);
+
+}
diff --git a/Civi/Api4/Event/Subscriber/IsCurrentSubscriber.php b/Civi/Api4/Event/Subscriber/IsCurrentSubscriber.php
new file mode 100644 (file)
index 0000000..4f9610e
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\API\Event\PrepareEvent;
+use Civi\Api4\Utils\ReflectionUtils;
+
+/**
+ * Process $current api param for Get actions
+ *
+ * @see \Civi\Api4\Generic\Traits\IsCurrentTrait
+ */
+class IsCurrentSubscriber extends Generic\AbstractPrepareSubscriber {
+
+  public function onApiPrepare(PrepareEvent $event) {
+    /** @var \Civi\Api4\Generic\AbstractQueryAction $action */
+    $action = $event->getApiRequest();
+    if ($action['version'] == 4 && method_exists($action, 'getCurrent')
+      && in_array('Civi\Api4\Generic\Traits\IsCurrentTrait', ReflectionUtils::getTraits($action))
+    ) {
+      $fields = $action->entityFields();
+      if ($action->getCurrent()) {
+        if (isset($fields['is_active'])) {
+          $action->addWhere('is_active', '=', '1');
+        }
+        $action->addClause('OR', ['start_date', 'IS NULL'], ['start_date', '<=', 'now']);
+        $action->addClause('OR', ['end_date', 'IS NULL'], ['end_date', '>=', 'now']);
+      }
+      elseif ($action->getCurrent() === FALSE) {
+        $conditions = [['end_date', '<', 'now'], ['start_date', '>', 'now']];
+        if (isset($fields['is_active'])) {
+          $conditions[] = ['is_active', '=', '0'];
+        }
+        $action->addClause('OR', $conditions);
+      }
+    }
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/OptionValuePreCreationSubscriber.php b/Civi/Api4/Event/Subscriber/OptionValuePreCreationSubscriber.php
new file mode 100644 (file)
index 0000000..5795a8f
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Generic\DAOCreateAction;
+use Civi\Api4\OptionGroup;
+
+class OptionValuePreCreationSubscriber extends Generic\PreCreationSubscriber {
+
+  /**
+   * @param \Civi\Api4\Generic\DAOCreateAction $request
+   */
+  protected function modify(DAOCreateAction $request) {
+    $this->setOptionGroupId($request);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\DAOCreateAction $request
+   *
+   * @return bool
+   */
+  protected function applies(DAOCreateAction $request) {
+    return $request->getEntityName() === 'OptionValue';
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\DAOCreateAction $request
+   * @throws \API_Exception
+   * @throws \Exception
+   */
+  private function setOptionGroupId(DAOCreateAction $request) {
+    $optionGroupName = $request->getValue('option_group');
+    if (!$optionGroupName || $request->getValue('option_group_id')) {
+      return;
+    }
+
+    $optionGroup = OptionGroup::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('id')
+      ->addWhere('name', '=', $optionGroupName)
+      ->execute();
+
+    if ($optionGroup->count() !== 1) {
+      throw new \Exception('Option group name must match only a single group');
+    }
+
+    $request->addValue('option_group_id', $optionGroup->first()['id']);
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/PermissionCheckSubscriber.php b/Civi/Api4/Event/Subscriber/PermissionCheckSubscriber.php
new file mode 100644 (file)
index 0000000..b63fdc5
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.7                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2017                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\API\Events;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * For any API requests that correspond to a Doctrine entity
+ * ($apiRequest['doctrineClass']), check permissions specified in
+ * Civi\API\Annotation\Permission.
+ */
+class PermissionCheckSubscriber implements EventSubscriberInterface {
+
+  /**
+   * @return array
+   */
+  public static function getSubscribedEvents() {
+    return [
+      Events::AUTHORIZE => [
+        ['onApiAuthorize', Events::W_LATE],
+      ],
+    ];
+  }
+
+  /**
+   * @param \Civi\API\Event\AuthorizeEvent $event
+   *   API authorization event.
+   */
+  public function onApiAuthorize(\Civi\API\Event\AuthorizeEvent $event) {
+    /* @var \Civi\Api4\Generic\AbstractAction $apiRequest */
+    $apiRequest = $event->getApiRequest();
+    if ($apiRequest['version'] == 4) {
+      if (!$apiRequest->getCheckPermissions() || $apiRequest->isAuthorized()) {
+        $event->authorize();
+        $event->stopPropagation();
+      }
+    }
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/PostSelectQuerySubscriber.php b/Civi/Api4/Event/Subscriber/PostSelectQuerySubscriber.php
new file mode 100644 (file)
index 0000000..22da84d
--- /dev/null
@@ -0,0 +1,366 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\Api4\Event\Events;
+use Civi\Api4\Event\PostSelectQueryEvent;
+use Civi\Api4\Query\Api4SelectQuery;
+use Civi\Api4\Utils\ArrayInsertionUtil;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Changes the results of a select query, doing 1-n joins and unserializing data
+ */
+class PostSelectQuerySubscriber implements EventSubscriberInterface {
+
+  /**
+   * @inheritdoc
+   */
+  public static function getSubscribedEvents() {
+    return [
+      Events::POST_SELECT_QUERY => 'onPostQuery',
+    ];
+  }
+
+  /**
+   * @param \Civi\Api4\Event\PostSelectQueryEvent $event
+   */
+  public function onPostQuery(PostSelectQueryEvent $event) {
+    $results = $event->getResults();
+    $event->setResults($this->postRun($results, $event->getQuery()));
+  }
+
+  /**
+   * @param array $results
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   *
+   * @return array
+   */
+  protected function postRun(array $results, Api4SelectQuery $query) {
+    if (empty($results)) {
+      return $results;
+    }
+
+    $fieldSpec = $query->getApiFieldSpec();
+    $this->unserializeFields($results, $query->getEntity(), $fieldSpec);
+
+    // Group the selects to avoid queries for each field
+    $groupedSelects = $this->getNtoManyJoinSelects($query);
+    foreach ($groupedSelects as $finalAlias => $selects) {
+      $joinPath = $query->getPathJoinTypes($selects[0]);
+      $selects = $this->formatSelects($finalAlias, $selects, $query);
+      $joinResults = $this->getJoinResults($query, $finalAlias, $selects);
+      $this->formatJoinResults($joinResults, $query, $finalAlias);
+
+      // Insert join results into original result
+      foreach ($results as &$primaryResult) {
+        $baseId = $primaryResult['id'];
+        $filtered = array_filter($joinResults, function ($res) use ($baseId) {
+          return ($res['_base_id'] === $baseId);
+        });
+        $filtered = array_values($filtered);
+        ArrayInsertionUtil::insert($primaryResult, $joinPath, $filtered);
+      }
+    }
+
+    return array_values($results);
+  }
+
+  /**
+   * @param array $joinResults
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   * @param string $alias
+   */
+  private function formatJoinResults(&$joinResults, $query, $alias) {
+    $join = $query->getJoinedTable($alias);
+    $fields = [];
+    foreach ($join->getEntityFields() as $field) {
+      $name = explode('.', $field->getName());
+      $fields[array_pop($name)] = $field->toArray();
+    }
+    if ($fields) {
+      $this->unserializeFields($joinResults, NULL, $fields);
+    }
+  }
+
+  /**
+   * Unserialize values
+   *
+   * @param array $results
+   * @param string $entity
+   * @param array $fields
+   */
+  protected function unserializeFields(&$results, $entity, $fields = []) {
+    foreach ($results as &$result) {
+      foreach ($result as $field => &$value) {
+        if (!empty($fields[$field]['serialize']) && is_string($value)) {
+          $serializationType = $fields[$field]['serialize'];
+          $value = \CRM_Core_DAO::unSerializeField($value, $serializationType);
+        }
+      }
+    }
+  }
+
+  /**
+   * Find only those joins that need to be handled by a separate query and weren't done in the main query.
+   *
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   *
+   * @return array
+   */
+  private function getNtoManyJoinSelects(Api4SelectQuery $query) {
+    $fkAliases = $query->getFkSelectAliases();
+    $joinedDotSelects = array_filter(
+      $query->getSelect(),
+      function ($select) use ($fkAliases, $query) {
+        return isset($fkAliases[$select]) && array_filter($query->getPathJoinTypes($select));
+      }
+    );
+
+    $selects = [];
+    // group related selects by alias so they can be executed in one query
+    foreach ($joinedDotSelects as $select) {
+      $parts = explode('.', $select);
+      $finalAlias = $parts[count($parts) - 2];
+      $selects[$finalAlias][] = $select;
+    }
+
+    // sort by depth, e.g. email selects should be done before email.location
+    uasort($selects, function ($a, $b) {
+      $aFirst = $a[0];
+      $bFirst = $b[0];
+      return substr_count($aFirst, '.') > substr_count($bFirst, '.');
+    });
+
+    return $selects;
+  }
+
+  /**
+   * @param array $selects
+   * @param $serializationType
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   *
+   * @return array
+   */
+  private function getResultsForSerializedField(
+    array $selects,
+    $serializationType,
+    Api4SelectQuery $query
+  ) {
+    // Get the alias (Selects are grouped and all target the same table)
+    $sampleField = current($selects);
+    $alias = strstr($sampleField, '.', TRUE);
+
+    // Fetch the results with the serialized field
+    $selects['serialized'] = $query::MAIN_TABLE_ALIAS . '.' . $alias;
+    $serializedResults = $this->runWithNewSelects($selects, $query);
+    $newResults = [];
+
+    // Create a new results array, with a separate entry for each option value
+    foreach ($serializedResults as $result) {
+      $optionValues = \CRM_Core_DAO::unSerializeField(
+        $result['serialized'],
+        $serializationType
+      );
+      unset($result['serialized']);
+      foreach ($optionValues as $value) {
+        $newResults[] = array_merge($result, ['value' => $value]);
+      }
+    }
+
+    $optionValueValues = array_unique(array_column($newResults, 'value'));
+    $optionValues = $this->getOptionValuesFromValues(
+      $selects,
+      $query,
+      $optionValueValues
+    );
+    $valueField = $alias . '.value';
+
+    // Index by value
+    foreach ($optionValues as $key => $subResult) {
+      $optionValues[$subResult['value']] = $subResult;
+      unset($subResult[$key]);
+
+      // Exclude 'value' if not in original selects
+      if (!in_array($valueField, $selects)) {
+        unset($optionValues[$subResult['value']]['value']);
+      }
+    }
+
+    // Replace serialized with the sub-select results
+    foreach ($newResults as &$result) {
+      $result = array_merge($result, $optionValues[$result['value']]);
+      unset($result['value']);
+    }
+
+    return $newResults;
+  }
+
+  /**
+   * Prepares selects for the subquery to fetch join results
+   *
+   * @param string $alias
+   * @param array $selects
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   *
+   * @return array
+   */
+  private function formatSelects($alias, $selects, Api4SelectQuery $query) {
+    $mainAlias = $query::MAIN_TABLE_ALIAS;
+    $selectFields = [];
+
+    foreach ($selects as $select) {
+      $selectAlias = $query->getFkSelectAliases()[$select];
+      $fieldAlias = substr($select, strrpos($select, '.') + 1);
+      $selectFields[$fieldAlias] = $selectAlias;
+    }
+
+    $firstSelect = $selects[0];
+    $pathParts = explode('.', $firstSelect);
+    $numParts = count($pathParts);
+    $parentAlias = $numParts > 2 ? $pathParts[$numParts - 3] : $mainAlias;
+
+    $selectFields['id'] = sprintf('%s.id', $alias);
+    $selectFields['_parent_id'] = $parentAlias . '.id';
+    $selectFields['_base_id'] = $mainAlias . '.id';
+
+    return $selectFields;
+  }
+
+  /**
+   * @param array $selects
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   *
+   * @return array
+   */
+  private function runWithNewSelects(array $selects, Api4SelectQuery $query) {
+    $aliasedSelects = array_map(function ($field, $alias) {
+      return sprintf('%s as "%s"', $field, $alias);
+    }, $selects, array_keys($selects));
+
+    $newSelect = sprintf('SELECT DISTINCT %s', implode(", ", $aliasedSelects));
+    $sql = str_replace("\n", ' ', $query->getQuery()->toSQL());
+    $originalSelect = substr($sql, 0, strpos($sql, ' FROM'));
+    $sql = str_replace($originalSelect, $newSelect, $sql);
+
+    $relatedResults = [];
+    $resultDAO = \CRM_Core_DAO::executeQuery($sql);
+    while ($resultDAO->fetch()) {
+      $relatedResult = [];
+      foreach ($selects as $alias => $column) {
+        $returnName = $alias;
+        $alias = str_replace('.', '_', $alias);
+        if (property_exists($resultDAO, $alias)) {
+          $relatedResult[$returnName] = $resultDAO->$alias;
+        }
+      };
+      $relatedResults[] = $relatedResult;
+    }
+
+    return $relatedResults;
+  }
+
+  /**
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   * @param $alias
+   * @param $selects
+   * @return array
+   */
+  protected function getJoinResults(Api4SelectQuery $query, $alias, $selects) {
+    $apiFieldSpec = $query->getApiFieldSpec();
+    if (!empty($apiFieldSpec[$alias]['serialize'])) {
+      $type = $apiFieldSpec[$alias]['serialize'];
+      $joinResults = $this->getResultsForSerializedField($selects, $type, $query);
+    }
+    else {
+      $joinResults = $this->runWithNewSelects($selects, $query);
+    }
+
+    // Remove results with no matching entries
+    $joinResults = array_filter($joinResults, function ($result) {
+      return !empty($result['id']);
+    });
+
+    return $joinResults;
+  }
+
+  /**
+   * Get all the option_value values required in the query
+   *
+   * @param array $selects
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   * @param array $values
+   *
+   * @return array
+   */
+  private function getOptionValuesFromValues(
+    array $selects,
+    Api4SelectQuery $query,
+    array $values
+  ) {
+    $sampleField = current($selects);
+    $alias = strstr($sampleField, '.', TRUE);
+
+    // Get the option value table that was joined
+    $relatedTable = NULL;
+    foreach ($query->getJoinedTables() as $joinedTable) {
+      if ($joinedTable->getAlias() === $alias) {
+        $relatedTable = $joinedTable;
+      }
+    }
+
+    // We only want subselects related to the joined table
+    $subSelects = array_filter($selects, function ($select) use ($alias) {
+      return strpos($select, $alias) === 0;
+    });
+
+    // Fetch all related option_value entries
+    $valueField = $alias . '.value';
+    $subSelects[] = $valueField;
+    $tableName = $relatedTable->getTargetTable();
+    $conditions = $relatedTable->getExtraJoinConditions();
+    $conditions[] = $valueField . ' IN ("' . implode('", "', $values) . '")';
+    $subQuery = new \CRM_Utils_SQL_Select($tableName . ' ' . $alias);
+    $subQuery->where($conditions);
+    $subQuery->select($subSelects);
+    $subResults = $subQuery->execute()->fetchAll();
+
+    return $subResults;
+  }
+
+}
diff --git a/Civi/Api4/Event/Subscriber/ValidateFieldsSubscriber.php b/Civi/Api4/Event/Subscriber/ValidateFieldsSubscriber.php
new file mode 100644 (file)
index 0000000..2e7faab
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.7                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2017                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Api4\Event\Subscriber;
+
+use Civi\API\Event\PrepareEvent;
+
+/**
+ * Validate field inputs based on annotations in the action class
+ */
+class ValidateFieldsSubscriber extends Generic\AbstractPrepareSubscriber {
+
+  /**
+   * @param \Civi\API\Event\PrepareEvent $event
+   * @throws \Exception
+   */
+  public function onApiPrepare(PrepareEvent $event) {
+    /** @var \Civi\Api4\Generic\AbstractAction $apiRequest */
+    $apiRequest = $event->getApiRequest();
+    if (is_a($apiRequest, 'Civi\Api4\Generic\AbstractAction')) {
+      $paramInfo = $apiRequest->getParamInfo();
+      foreach ($paramInfo as $param => $info) {
+        $getParam = 'get' . ucfirst($param);
+        $value = $apiRequest->$getParam();
+        // Required fields
+        if (!empty($info['required']) && (!$value && $value !== 0 && $value !== '0')) {
+          throw new \API_Exception('Parameter "' . $param . '" is required.');
+        }
+        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']) . '.');
+        }
+      }
+    }
+  }
+
+  /**
+   * Validate variable type on input
+   *
+   * @param $value
+   * @param $types
+   * @return bool
+   * @throws \API_Exception
+   */
+  public static function checkType($value, $types) {
+    if ($value === NULL) {
+      return TRUE;
+    }
+    foreach ($types as $type) {
+      switch ($type) {
+        case 'array':
+        case 'bool':
+        case 'string':
+        case 'object':
+          $tester = 'is_' . $type;
+          if ($tester($value)) {
+            return TRUE;
+          }
+          break;
+
+        case 'int':
+          if (\CRM_Utils_Rule::integer($value)) {
+            return TRUE;
+          }
+          break;
+
+        case 'mixed':
+          return TRUE;
+
+        default:
+          throw new \API_Exception('Unknown parameter type: ' . $type);
+      }
+    }
+    return FALSE;
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractAction.php b/Civi/Api4/Generic/AbstractAction.php
new file mode 100644 (file)
index 0000000..1a67e01
--- /dev/null
@@ -0,0 +1,481 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Generic;
+
+use Civi\Api4\Utils\ReflectionUtils;
+use Civi\Api4\Utils\ActionUtil;
+
+/**
+ * Base class for all api actions.
+ *
+ * @method $this setCheckPermissions(bool $value)
+ * @method bool getCheckPermissions()
+ * @method $this setChain(array $chain)
+ * @method array getChain()
+ */
+abstract class AbstractAction implements \ArrayAccess {
+
+  /**
+   * Api version number; cannot be changed.
+   *
+   * @var int
+   */
+  protected $version = 4;
+
+  /**
+   * Additional api requests - will be called once per result.
+   *
+   * Keys can be any string - this will be the name given to the output.
+   *
+   * You can reference other values in the api results in this call by prefixing them with $
+   *
+   * For example, you could create a contact and place them in a group by chaining the
+   * GroupContact api to the Contact api:
+   *
+   * Contact::create()
+   *   ->setValue('first_name', 'Hello')
+   *   ->addChain('add_to_a_group', GroupContact::create()->setValue('contact_id', '$id')->setValue('group_id', 123))
+   *
+   * This will substitute the id of the newly created contact with $id.
+   *
+   * @var array
+   */
+  protected $chain = [];
+
+  /**
+   * Whether to enforce acl permissions based on the current user.
+   *
+   * Setting to FALSE will disable permission checks and override ACLs.
+   * In REST/javascript this cannot be disabled.
+   *
+   * @var bool
+   */
+  protected $checkPermissions = TRUE;
+
+  /**
+   * @var string
+   */
+  protected $_entityName;
+
+  /**
+   * @var string
+   */
+  protected $_actionName;
+
+  /**
+   * @var \ReflectionClass
+   */
+  private $_reflection;
+
+  /**
+   * @var array
+   */
+  private $_paramInfo;
+
+  /**
+   * @var array
+   */
+  private $_entityFields;
+
+  /**
+   * @var array
+   */
+  private $_arrayStorage = [];
+
+  /**
+   * @var int
+   * Used to identify api calls for transactions
+   * @see \Civi\Core\Transaction\Manager
+   */
+  private $_id;
+
+  /**
+   * Action constructor.
+   *
+   * @param string $entityName
+   * @param string $actionName
+   * @throws \API_Exception
+   */
+  public function __construct($entityName, $actionName) {
+    // If a namespaced class name is passed in
+    if (strpos($entityName, '\\') !== FALSE) {
+      $entityName = substr($entityName, strrpos($entityName, '\\') + 1);
+    }
+    $this->_entityName = $entityName;
+    $this->_actionName = $actionName;
+    $this->_id = \Civi\API\Request::getNextId();
+  }
+
+  /**
+   * Strictly enforce api parameters
+   * @param $name
+   * @param $value
+   * @throws \Exception
+   */
+  public function __set($name, $value) {
+    throw new \API_Exception('Unknown api parameter');
+  }
+
+  /**
+   * @param int $val
+   * @return $this
+   * @throws \API_Exception
+   */
+  public function setVersion($val) {
+    if ($val != 4) {
+      throw new \API_Exception('Cannot modify api version');
+    }
+    return $this;
+  }
+
+  /**
+   * @param string $name
+   *   Unique name for this chained request
+   * @param \Civi\Api4\Generic\AbstractAction $apiRequest
+   * @param string|int $index
+   *   Either a string for how the results should be indexed e.g. 'name'
+   *   or the index of a single result to return e.g. 0 for the first result.
+   * @return $this
+   */
+  public function addChain($name, AbstractAction $apiRequest, $index = NULL) {
+    $this->chain[$name] = [$apiRequest->getEntityName(), $apiRequest->getActionName(), $apiRequest->getParams(), $index];
+    return $this;
+  }
+
+  /**
+   * Magic function to provide addFoo, getFoo and setFoo for params.
+   *
+   * @param $name
+   * @param $arguments
+   * @return static|mixed
+   * @throws \API_Exception
+   */
+  public function __call($name, $arguments) {
+    $param = lcfirst(substr($name, 3));
+    if (!$param || $param[0] == '_') {
+      throw new \API_Exception('Unknown api parameter: ' . $name);
+    }
+    $mode = substr($name, 0, 3);
+    // Handle plural when adding to e.g. $values with "addValue" method.
+    if ($mode == 'add' && $this->paramExists($param . 's')) {
+      $param .= 's';
+    }
+    if ($this->paramExists($param)) {
+      switch ($mode) {
+        case 'get':
+          return $this->$param;
+
+        case 'set':
+          $this->$param = $arguments[0];
+          return $this;
+
+        case 'add':
+          if (!is_array($this->$param)) {
+            throw new \API_Exception('Cannot add to non-array param');
+          }
+          if (array_key_exists(1, $arguments)) {
+            $this->{$param}[$arguments[0]] = $arguments[1];
+          }
+          else {
+            $this->{$param}[] = $arguments[0];
+          }
+          return $this;
+      }
+    }
+    throw new \API_Exception('Unknown api parameter: ' . $name);
+  }
+
+  /**
+   * Invoke api call.
+   *
+   * At this point all the params have been sent in and we initiate the api call & return the result.
+   * This is basically the outer wrapper for api v4.
+   *
+   * @return \Civi\Api4\Generic\Result
+   * @throws \Civi\API\Exception\UnauthorizedException
+   */
+  public function execute() {
+    /** @var \Civi\API\Kernel $kernel */
+    $kernel = \Civi::service('civi_api_kernel');
+
+    return $kernel->runRequest($this);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  abstract public function _run(Result $result);
+
+  /**
+   * Serialize this object's params into an array
+   * @return array
+   */
+  public function getParams() {
+    $params = [];
+    foreach ($this->reflect()->getProperties(\ReflectionProperty::IS_PROTECTED) as $property) {
+      $name = $property->getName();
+      // Skip variables starting with an underscore
+      if ($name[0] != '_') {
+        $params[$name] = $this->$name;
+      }
+    }
+    return $params;
+  }
+
+  /**
+   * Get documentation for one or all params
+   *
+   * @param string $param
+   * @return array of arrays [description, type, default, (comment)]
+   */
+  public function getParamInfo($param = NULL) {
+    if (!isset($this->_paramInfo)) {
+      $defaults = $this->getParamDefaults();
+      foreach ($this->reflect()->getProperties(\ReflectionProperty::IS_PROTECTED) as $property) {
+        $name = $property->getName();
+        if ($name != 'version' && $name[0] != '_') {
+          $this->_paramInfo[$name] = ReflectionUtils::getCodeDocs($property, 'Property');
+          $this->_paramInfo[$name]['default'] = $defaults[$name];
+        }
+      }
+    }
+    return $param ? $this->_paramInfo[$param] : $this->_paramInfo;
+  }
+
+  /**
+   * @return string
+   */
+  public function getEntityName() {
+    return $this->_entityName;
+  }
+
+  /**
+   *
+   * @return string
+   */
+  public function getActionName() {
+    return $this->_actionName;
+  }
+
+  /**
+   * @param string $param
+   * @return bool
+   */
+  public function paramExists($param) {
+    return array_key_exists($param, $this->getParams());
+  }
+
+  /**
+   * @return array
+   */
+  protected function getParamDefaults() {
+    return array_intersect_key($this->reflect()->getDefaultProperties(), $this->getParams());
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function offsetExists($offset) {
+    return in_array($offset, ['entity', 'action', 'params', 'version', 'check_permissions', 'id']) || isset($this->_arrayStorage[$offset]);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function &offsetGet($offset) {
+    $val = NULL;
+    if (in_array($offset, ['entity', 'action'])) {
+      $offset .= 'Name';
+    }
+    if (in_array($offset, ['entityName', 'actionName', 'params', 'version'])) {
+      $getter = 'get' . ucfirst($offset);
+      $val = $this->$getter();
+      return $val;
+    }
+    if ($offset == 'check_permissions') {
+      return $this->checkPermissions;
+    }
+    if ($offset == 'id') {
+      return $this->_id;
+    }
+    if (isset($this->_arrayStorage[$offset])) {
+      return $this->_arrayStorage[$offset];
+    }
+    return $val;
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function offsetSet($offset, $value) {
+    if (in_array($offset, ['entity', 'action', 'entityName', 'actionName', 'params', 'version', 'id'])) {
+      throw new \API_Exception('Cannot modify api4 state via array access');
+    }
+    if ($offset == 'check_permissions') {
+      $this->setCheckPermissions($value);
+    }
+    else {
+      $this->_arrayStorage[$offset] = $value;
+    }
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function offsetUnset($offset) {
+    if (in_array($offset, ['entity', 'action', 'entityName', 'actionName', 'params', 'check_permissions', 'version', 'id'])) {
+      throw new \API_Exception('Cannot modify api4 state via array access');
+    }
+    unset($this->_arrayStorage[$offset]);
+  }
+
+  /**
+   * Is this api call permitted?
+   *
+   * This function is called if checkPermissions is set to true.
+   *
+   * @return bool
+   */
+  public function isAuthorized() {
+    $permissions = $this->getPermissions();
+    return \CRM_Core_Permission::check($permissions);
+  }
+
+  /**
+   * @return array
+   */
+  public function getPermissions() {
+    $permissions = call_user_func(["\\Civi\\Api4\\" . $this->_entityName, 'permissions']);
+    $permissions += [
+      // applies to getFields, getActions, etc.
+      'meta' => ['access CiviCRM'],
+      // catch-all, applies to create, get, delete, etc.
+      'default' => ['administer CiviCRM'],
+    ];
+    $action = $this->getActionName();
+    if (isset($permissions[$action])) {
+      return $permissions[$action];
+    }
+    elseif (in_array($action, ['getActions', 'getFields'])) {
+      return $permissions['meta'];
+    }
+    return $permissions['default'];
+  }
+
+  /**
+   * Returns schema fields for this entity & action.
+   *
+   * Here we bypass the api wrapper and execute the getFields action directly.
+   * This is because we DON'T want the wrapper to check permissions as this is an internal op,
+   * but we DO want permissions to be checked inside the getFields request so e.g. the api_key
+   * field can be conditionally included.
+   * @see \Civi\Api4\Action\Contact\GetFields
+   *
+   * @return array
+   */
+  public function entityFields() {
+    if (!$this->_entityFields) {
+      $getFields = ActionUtil::getAction($this->getEntityName(), 'getFields');
+      $result = new Result();
+      if (method_exists($this, 'getBaoName')) {
+        $getFields->setIncludeCustom(FALSE);
+      }
+      $getFields
+        ->setCheckPermissions($this->checkPermissions)
+        ->setAction($this->getActionName())
+        ->_run($result);
+      $this->_entityFields = (array) $result->indexBy('name');
+    }
+    return $this->_entityFields;
+  }
+
+  /**
+   * @return \ReflectionClass
+   */
+  public function reflect() {
+    if (!$this->_reflection) {
+      $this->_reflection = new \ReflectionClass($this);
+    }
+    return $this->_reflection;
+  }
+
+  /**
+   * Validates required fields for actions which create a new object.
+   *
+   * @param $values
+   * @return array
+   * @throws \API_Exception
+   */
+  protected function checkRequiredFields($values) {
+    $unmatched = [];
+    foreach ($this->entityFields() as $fieldName => $fieldInfo) {
+      if (!isset($values[$fieldName]) || $values[$fieldName] === '') {
+        if (!empty($fieldInfo['required']) && !isset($fieldInfo['default_value'])) {
+          $unmatched[] = $fieldName;
+        }
+        elseif (!empty($fieldInfo['required_if'])) {
+          if ($this->evaluateCondition($fieldInfo['required_if'], ['values' => $values])) {
+            $unmatched[] = $fieldName;
+          }
+        }
+      }
+    }
+    return $unmatched;
+  }
+
+  /**
+   * This function is used internally for evaluating field annotations.
+   *
+   * It should never be passed raw user input.
+   *
+   * @param string $expr
+   *   Conditional in php format e.g. $foo > $bar
+   * @param array $vars
+   *   Variable name => value
+   * @return bool
+   * @throws \API_Exception
+   * @throws \Exception
+   */
+  protected function evaluateCondition($expr, $vars) {
+    if (strpos($expr, '}') !== FALSE || strpos($expr, '{') !== FALSE) {
+      throw new \API_Exception('Illegal character in expression');
+    }
+    $tpl = "{if $expr}1{else}0{/if}";
+    return (bool) trim(\CRM_Core_Smarty::singleton()->fetchWith('string:' . $tpl, $vars));
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractBatchAction.php b/Civi/Api4/Generic/AbstractBatchAction.php
new file mode 100644 (file)
index 0000000..6250e25
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Base class for all batch actions (Update, Delete, Replace).
+ *
+ * This differs from the AbstractQuery class in that the "Where" clause is required.
+ *
+ * @package Civi\Api4\Generic
+ */
+abstract class AbstractBatchAction extends AbstractQueryAction {
+
+  /**
+   * Criteria for selecting items to process.
+   *
+   * @var array
+   * @required
+   */
+  protected $where = [];
+
+  /**
+   * @var array
+   */
+  private $select;
+
+  /**
+   * BatchAction constructor.
+   * @param string $entityName
+   * @param string $actionName
+   * @param string|array $select
+   *   One or more fields to load for each item.
+   */
+  public function __construct($entityName, $actionName, $select = 'id') {
+    $this->select = (array) $select;
+    parent::__construct($entityName, $actionName);
+  }
+
+  /**
+   * @return array
+   */
+  protected function getBatchRecords() {
+    $params = [
+      'checkPermissions' => $this->checkPermissions,
+      'where' => $this->where,
+      'orderBy' => $this->orderBy,
+      'limit' => $this->limit,
+      'offset' => $this->offset,
+    ];
+    if (empty($this->reload)) {
+      $params['select'] = $this->select;
+    }
+
+    return (array) civicrm_api4($this->getEntityName(), 'get', $params);
+  }
+
+  /**
+   * @return array
+   */
+  protected function getSelect() {
+    return $this->select;
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractCreateAction.php b/Civi/Api4/Generic/AbstractCreateAction.php
new file mode 100644 (file)
index 0000000..2b1e3a3
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Base class for all "Create" api actions.
+ *
+ * @method $this setValues(array $values) Set all field values from an array of key => value pairs.
+ * @method $this addValue($field, $value) Set field value.
+ * @method array getValues() Get field values.
+ *
+ * @package Civi\Api4\Generic
+ */
+abstract class AbstractCreateAction extends AbstractAction {
+
+  /**
+   * Field values to set
+   *
+   * @var array
+   */
+  protected $values = [];
+
+  /**
+   * @param string $key
+   *
+   * @return mixed|null
+   */
+  public function getValue($key) {
+    return isset($this->values[$key]) ? $this->values[$key] : NULL;
+  }
+
+  /**
+   * @throws \API_Exception
+   */
+  protected function validateValues() {
+    $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]);
+    }
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractEntity.php b/Civi/Api4/Generic/AbstractEntity.php
new file mode 100644 (file)
index 0000000..2101213
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+
+/**
+ * Base class for all api entities.
+ *
+ * When adding your own api from an extension, extend this class only
+ * if your entity does not have an associated DAO. Otherwise extend DAOEntity.
+ *
+ * The recommended way to create a non-DAO-based api is to extend this class
+ * and then add a getFields function and any other actions you wish, e.g.
+ * - a get() function which returns BasicGetAction using your custom getter callback
+ * - a create() function which returns BasicCreateAction using your custom setter callback
+ * - an update() function which returns BasicUpdateAction using your custom setter callback
+ * - a delete() function which returns BasicBatchAction using your custom delete callback
+ * - a replace() function which returns BasicReplaceAction (no callback needed but
+ *   depends on the existence of get, create, update & delete actions)
+ *
+ * Note that you can use the same setter callback function for update as create -
+ * that function can distinguish between new & existing records by checking if the
+ * unique identifier has been set (identifier field defaults to "id" but you can change
+ * that when constructing BasicUpdateAction)
+ */
+abstract class AbstractEntity {
+
+  /**
+   * @return \Civi\Api4\Action\GetActions
+   */
+  public static function getActions() {
+    return new \Civi\Api4\Action\GetActions(self::getEntityName(), __FUNCTION__);
+  }
+
+  /**
+   * Should return \Civi\Api4\Generic\BasicGetFieldsAction
+   * @todo make this function abstract when we require php 7.
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  public static function getFields() {
+    throw new NotImplementedException(self::getEntityName() . ' should implement getFields action.');
+  }
+
+  /**
+   * Returns a list of permissions needed to access the various actions in this api.
+   *
+   * @return array
+   */
+  public static function permissions() {
+    $permissions = \CRM_Core_Permission::getEntityActionPermissions();
+
+    // For legacy reasons the permissions are keyed by lowercase entity name
+    // Note: Convert to camel & back in order to circumvent all the api3 naming oddities
+    $lcentity = _civicrm_api_get_entity_name_from_camel(\CRM_Utils_String::convertStringToCamel(self::getEntityName()));
+    // Merge permissions for this entity with the defaults
+    return \CRM_Utils_Array::value($lcentity, $permissions, []) + $permissions['default'];
+  }
+
+  /**
+   * Get entity name from called class
+   *
+   * @return string
+   */
+  protected static function getEntityName() {
+    return substr(static::class, strrpos(static::class, '\\') + 1);
+  }
+
+  /**
+   * Magic method to return the action object for an api.
+   *
+   * @param string $action
+   * @param null $args
+   * @return AbstractAction
+   * @throws NotImplementedException
+   */
+  public static function __callStatic($action, $args) {
+    $entity = self::getEntityName();
+    // Find class for this action
+    $entityAction = "\\Civi\\Api4\\Action\\$entity\\" . ucfirst($action);
+    if (class_exists($entityAction)) {
+      $actionObject = new $entityAction($entity, $action);
+    }
+    else {
+      throw new NotImplementedException("Api $entity $action version 4 does not exist.");
+    }
+    return $actionObject;
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractGetAction.php b/Civi/Api4/Generic/AbstractGetAction.php
new file mode 100644 (file)
index 0000000..d2d5f48
--- /dev/null
@@ -0,0 +1,154 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Base class for all "Get" api actions.
+ *
+ * @package Civi\Api4\Generic
+ *
+ * @method $this addSelect(string $select)
+ * @method $this setSelect(array $selects)
+ * @method array getSelect()
+ */
+abstract class AbstractGetAction extends AbstractQueryAction {
+
+  /**
+   * Fields to return. Defaults to all fields.
+   *
+   * Set to ["row_count"] to return only the number of items found.
+   *
+   * @var array
+   */
+  protected $select = [];
+
+  /**
+   * Only return the number of found items.
+   *
+   * @return $this
+   */
+  public function selectRowCount() {
+    $this->select = ['row_count'];
+    return $this;
+  }
+
+  /**
+   * Adds field defaults to the where clause.
+   *
+   * Note: it will skip adding field defaults when fetching records by id,
+   * or if that field has already been added to the where clause.
+   *
+   * @throws \API_Exception
+   */
+  protected function setDefaultWhereClause() {
+    if (!$this->_itemsToGet('id')) {
+      $fields = $this->entityFields();
+      foreach ($fields as $field) {
+        if (isset($field['default_value']) && !$this->_whereContains($field['name'])) {
+          $this->addWhere($field['name'], '=', $field['default_value']);
+        }
+      }
+    }
+  }
+
+  /**
+   * Helper to parse the WHERE param for getRecords to perform simple pre-filtering.
+   *
+   * This is intended to optimize some common use-cases e.g. calling the api to get
+   * one or more records by name or id.
+   *
+   * Ex: If getRecords fetches a long list of items each with a unique name,
+   * but the user has specified a single record to retrieve, you can optimize the call
+   * by checking $this->_itemsToGet('name') and only fetching the item(s) with that name.
+   *
+   * @param string $field
+   * @return array|null
+   */
+  protected function _itemsToGet($field) {
+    foreach ($this->where as $clause) {
+      // Look for exact-match operators (=, IN, or LIKE with no wildcard)
+      if ($clause[0] == $field && (in_array($clause[1], ['=', 'IN']) || ($clause[1] == 'LIKE' && !(is_string($clause[2]) && strpos($clause[2], '%') !== FALSE)))) {
+        return (array) $clause[2];
+      }
+    }
+    return NULL;
+  }
+
+  /**
+   * Helper to see if a field should be selected by the getRecords function.
+   *
+   * Checks the SELECT, WHERE and ORDER BY params to see what fields are needed.
+   *
+   * Note that if no SELECT clause has been set then all fields should be selected
+   * and this function will always return TRUE.
+   *
+   * @param string $field
+   * @return bool
+   */
+  protected function _isFieldSelected($field) {
+    if (!$this->select || in_array($field, $this->select) || isset($this->orderBy[$field])) {
+      return TRUE;
+    }
+    return $this->_whereContains($field);
+  }
+
+  /**
+   * Walk through the where clause and check if a field is in use.
+   *
+   * @param string $field
+   * @param array $clauses
+   * @return bool
+   */
+  protected function _whereContains($field, $clauses = NULL) {
+    if ($clauses === NULL) {
+      $clauses = $this->where;
+    }
+    foreach ($clauses as $clause) {
+      if (is_array($clause) && is_string($clause[0])) {
+        if ($clause[0] == $field) {
+          return TRUE;
+        }
+        elseif (is_array($clause[1])) {
+          return $this->_whereContains($field, $clause[1]);
+        }
+      }
+    }
+    return FALSE;
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractQueryAction.php b/Civi/Api4/Generic/AbstractQueryAction.php
new file mode 100644 (file)
index 0000000..3e3dc22
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Base class for all actions that need to fetch records (Get, Update, Delete, etc)
+ *
+ * @package Civi\Api4\Generic
+ *
+ * @method $this setWhere(array $wheres)
+ * @method array getWhere()
+ * @method $this setOrderBy(array $order)
+ * @method array getOrderBy()
+ * @method $this setLimit(int $limit)
+ * @method int getLimit()
+ * @method $this setOffset(int $offset)
+ * @method int getOffset()
+ */
+abstract class AbstractQueryAction extends AbstractAction {
+
+  /**
+   * Criteria for selecting items.
+   *
+   * $example->addWhere('contact_type', 'IN', array('Individual', 'Household'))
+   *
+   * @var array
+   */
+  protected $where = [];
+
+  /**
+   * Array of field(s) to use in ordering the results
+   *
+   * Defaults to id ASC
+   *
+   * $example->addOrderBy('sort_name', 'ASC')
+   *
+   * @var array
+   */
+  protected $orderBy = [];
+
+  /**
+   * Maximum number of results to return.
+   *
+   * Defaults to unlimited.
+   *
+   * Note: the Api Explorer sets this to 25 by default to avoid timeouts.
+   * Change or remove this default for your application code.
+   *
+   * @var int
+   */
+  protected $limit = 0;
+
+  /**
+   * Zero-based index of first result to return.
+   *
+   * Defaults to "0" - first record.
+   *
+   * @var int
+   */
+  protected $offset = 0;
+
+  /**
+   * @param string $field
+   * @param string $op
+   * @param mixed $value
+   * @return $this
+   * @throws \API_Exception
+   */
+  public function addWhere($field, $op, $value = NULL) {
+    if (!in_array($op, \CRM_Core_DAO::acceptedSQLOperators())) {
+      throw new \API_Exception('Unsupported operator');
+    }
+    $this->where[] = [$field, $op, $value];
+    return $this;
+  }
+
+  /**
+   * Adds one or more AND/OR/NOT clause groups
+   *
+   * @param string $operator
+   * @param mixed $condition1 ... $conditionN
+   *   Either a nested array of arguments, or a variable number of arguments passed to this function.
+   *
+   * @return $this
+   * @throws \API_Exception
+   */
+  public function addClause($operator, $condition1) {
+    if (!is_array($condition1[0])) {
+      $condition1 = array_slice(func_get_args(), 1);
+    }
+    $this->where[] = [$operator, $condition1];
+    return $this;
+  }
+
+  /**
+   * @param string $field
+   * @param string $direction
+   * @return $this
+   */
+  public function addOrderBy($field, $direction = 'ASC') {
+    $this->orderBy[$field] = $direction;
+    return $this;
+  }
+
+  /**
+   * A human-readable where clause, for the reading enjoyment of you humans.
+   *
+   * @param array $whereClause
+   * @param string $op
+   * @return string
+   */
+  protected function whereClauseToString($whereClause = NULL, $op = 'AND') {
+    if ($whereClause === NULL) {
+      $whereClause = $this->where;
+    }
+    $output = '';
+    if (!is_array($whereClause) || !$whereClause) {
+      return $output;
+    }
+    if (in_array($whereClause[0], ['AND', 'OR', 'NOT'])) {
+      $op = array_shift($whereClause);
+      if ($op == 'NOT') {
+        $output = 'NOT ';
+        $op = 'AND';
+      }
+      return $output . '(' . $this->whereClauseToString($whereClause, $op) . ')';
+    }
+    elseif (isset($whereClause[1]) && in_array($whereClause[1], \CRM_Core_DAO::acceptedSQLOperators())) {
+      $output = $whereClause[0] . ' ' . $whereClause[1] . ' ';
+      if (isset($whereClause[2])) {
+        $output .= is_array($whereClause[2]) ? '[' . implode(', ', $whereClause[2]) . ']' : $whereClause[2];
+      }
+    }
+    else {
+      $clauses = [];
+      foreach (array_filter($whereClause) as $clause) {
+        $clauses[] = $this->whereClauseToString($clause, $op);
+      }
+      $output = implode(" $op ", $clauses);
+    }
+    return $output;
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractSaveAction.php b/Civi/Api4/Generic/AbstractSaveAction.php
new file mode 100644 (file)
index 0000000..30759ee
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Base class for all "Save" api actions.
+ *
+ * @method $this setRecords(array $records) Array of records.
+ * @method $this addRecord($record) Add a record to update.
+ * @method array getRecords()
+ * @method $this setDefaults(array $defaults) Array of defaults.
+ * @method $this addDefault($name, $value) Add a default value.
+ * @method array getDefaults()
+ * @method $this setReload(bool $reload) Specify whether complete objects will be returned after saving.
+ * @method bool getReload()
+ *
+ * @package Civi\Api4\Generic
+ */
+abstract class AbstractSaveAction extends AbstractAction {
+
+  /**
+   * Array of records.
+   *
+   * Should be in the same format as returned by Get.
+   *
+   * @var array
+   * @required
+   */
+  protected $records = [];
+
+  /**
+   * Array of default values.
+   *
+   * These defaults will be applied to all records unless they specify otherwise.
+   *
+   * @var array
+   */
+  protected $defaults = [];
+
+  /**
+   * Reload records after saving.
+   *
+   * By default this api typically returns partial records containing only the fields
+   * that were updated. Set reload to TRUE to do an additional lookup after saving
+   * to return complete records.
+   *
+   * @var bool
+   */
+  protected $reload = FALSE;
+
+  /**
+   * @var string
+   */
+  private $idField;
+
+  /**
+   * BatchAction constructor.
+   * @param string $entityName
+   * @param string $actionName
+   * @param string $idField
+   */
+  public function __construct($entityName, $actionName, $idField = 'id') {
+    // $idField should be a string but some apis (e.g. CustomValue) give us an array
+    $this->idField = array_values((array) $idField)[0];
+    parent::__construct($entityName, $actionName);
+  }
+
+  /**
+   * @throws \API_Exception
+   */
+  protected function validateValues() {
+    $unmatched = [];
+    foreach ($this->records as $record) {
+      if (empty($record[$this->idField])) {
+        $unmatched = array_unique(array_merge($unmatched, $this->checkRequiredFields($record)));
+      }
+    }
+    if ($unmatched) {
+      throw new \API_Exception("Mandatory values missing from Api4 {$this->getEntityName()}::{$this->getActionName()}: " . implode(", ", $unmatched), "mandatory_missing", ["fields" => $unmatched]);
+    }
+  }
+
+  /**
+   * @return string
+   */
+  protected function getIdField() {
+    return $this->idField;
+  }
+
+}
diff --git a/Civi/Api4/Generic/AbstractUpdateAction.php b/Civi/Api4/Generic/AbstractUpdateAction.php
new file mode 100644 (file)
index 0000000..371b8c7
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Base class for all "Update" api actions
+ *
+ * @method $this setValues(array $values) Set all field values from an array of key => value pairs.
+ * @method $this addValue($field, $value) Set field value.
+ * @method array getValues() Get field values.
+ * @method $this setReload(bool $reload) Specify whether complete objects will be returned after saving.
+ * @method bool getReload()
+ *
+ * @package Civi\Api4\Generic
+ */
+abstract class AbstractUpdateAction extends AbstractBatchAction {
+
+  /**
+   * Field values to update.
+   *
+   * @var array
+   * @required
+   */
+  protected $values = [];
+
+  /**
+   * Reload objects after saving.
+   *
+   * Setting to TRUE will load complete records and return them as the api result.
+   * If FALSE the api usually returns only the fields specified to be updated.
+   *
+   * @var bool
+   */
+  protected $reload = FALSE;
+
+  /**
+   * @param string $key
+   *
+   * @return mixed|null
+   */
+  public function getValue($key) {
+    return isset($this->values[$key]) ? $this->values[$key] : NULL;
+  }
+
+}
diff --git a/Civi/Api4/Generic/BasicBatchAction.php b/Civi/Api4/Generic/BasicBatchAction.php
new file mode 100644 (file)
index 0000000..fb54c76
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+
+/**
+ * Basic action for deleting or performing some other task with a set of records.  Ex:
+ *
+ * $myAction = new BasicBatchAction('Entity', 'action', function($item) {
+ *   // Do something with $item
+ *   $return $item;
+ * });
+ *
+ * @package Civi\Api4\Generic
+ */
+class BasicBatchAction extends AbstractBatchAction {
+
+  /**
+   * @var callable
+   *
+   * Function(array $item, BasicBatchAction $thisAction) => array
+   */
+  private $doer;
+
+  /**
+   * BasicBatchAction constructor.
+   *
+   * @param string $entityName
+   * @param string $actionName
+   * @param string|array $select
+   *   One or more fields to select from each matching item.
+   * @param callable $doer
+   *   Function(array $item, BasicBatchAction $thisAction) => array
+   */
+  public function __construct($entityName, $actionName, $select = 'id', $doer = NULL) {
+    parent::__construct($entityName, $actionName, $select);
+    $this->doer = $doer;
+  }
+
+  /**
+   * We pass the doTask function an array representing one item to update.
+   * We expect to get the same format back.
+   *
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  public function _run(Result $result) {
+    foreach ($this->getBatchRecords() as $item) {
+      $result[] = $this->doTask($item);
+    }
+  }
+
+  /**
+   * This Basic Batch class can be used in one of two ways:
+   *
+   * 1. Use this class directly by passing a callable ($doer) to the constructor.
+   * 2. Extend this class and override this function.
+   *
+   * Either way, this function should return an array with an output record
+   * for the item.
+   *
+   * @param array $item
+   * @return array
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  protected function doTask($item) {
+    if (is_callable($this->doer)) {
+      return call_user_func($this->doer, $item, $this);
+    }
+    throw new NotImplementedException('Doer function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName());
+  }
+
+}
diff --git a/Civi/Api4/Generic/BasicCreateAction.php b/Civi/Api4/Generic/BasicCreateAction.php
new file mode 100644 (file)
index 0000000..43cc8bb
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+
+/**
+ * Create a new object from supplied values.
+ *
+ * This function will create 1 new object. It cannot be used to update existing objects. Use the Update or Replace actions for that.
+ */
+class BasicCreateAction extends AbstractCreateAction {
+
+  /**
+   * @var callable
+   *
+   * Function(array $item, BasicCreateAction $thisAction) => array
+   */
+  private $setter;
+
+  /**
+   * Basic Create constructor.
+   *
+   * @param string $entityName
+   * @param string $actionName
+   * @param callable $setter
+   *   Function(array $item, BasicCreateAction $thisAction) => array
+   */
+  public function __construct($entityName, $actionName, $setter = NULL) {
+    parent::__construct($entityName, $actionName);
+    $this->setter = $setter;
+  }
+
+  /**
+   * We pass the writeRecord function an array representing one item to write.
+   * We expect to get the same format back.
+   *
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  public function _run(Result $result) {
+    $this->validateValues();
+    $result->exchangeArray([$this->writeRecord($this->values)]);
+  }
+
+  /**
+   * This Basic Create class can be used in one of two ways:
+   *
+   * 1. Use this class directly by passing a callable ($setter) to the constructor.
+   * 2. Extend this class and override this function.
+   *
+   * Either way, this function should return an array representing the one new object.
+   *
+   * @param array $item
+   * @return array
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  protected function writeRecord($item) {
+    if (is_callable($this->setter)) {
+      return call_user_func($this->setter, $item, $this);
+    }
+    throw new NotImplementedException('Setter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName());
+  }
+
+}
diff --git a/Civi/Api4/Generic/BasicGetAction.php b/Civi/Api4/Generic/BasicGetAction.php
new file mode 100644 (file)
index 0000000..5e5dfb1
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+
+/**
+ * Retrieve items based on criteria specified in the 'where' param.
+ *
+ * Use the 'select' param to determine which fields are returned, defaults to *.
+ */
+class BasicGetAction extends AbstractGetAction {
+  use Traits\ArrayQueryActionTrait;
+
+  /**
+   * @var callable
+   *
+   * Function(BasicGetAction $thisAction) => array<array>
+   */
+  private $getter;
+
+  /**
+   * Basic Get constructor.
+   *
+   * @param string $entityName
+   * @param string $actionName
+   * @param callable $getter
+   */
+  public function __construct($entityName, $actionName, $getter = NULL) {
+    parent::__construct($entityName, $actionName);
+    $this->getter = $getter;
+  }
+
+  /**
+   * Fetch results from the getter then apply filter/sort/select/limit.
+   *
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  public function _run(Result $result) {
+    $this->setDefaultWhereClause();
+    $values = $this->getRecords();
+    $result->exchangeArray($this->queryArray($values));
+  }
+
+  /**
+   * This Basic Get class is a general-purpose api for non-DAO-based entities.
+   *
+   * Useful for fetching records from files or other places.
+   * You can specify any php function to retrieve the records, and this class will
+   * automatically filter, sort, select & limit the raw data from your callback.
+   *
+   * You can implement this action in one of two ways:
+   * 1. Use this class directly by passing a callable ($getter) to the constructor.
+   * 2. Extend this class and override this function.
+   *
+   * Either way, this function should return an array of arrays, each representing one retrieved object.
+   *
+   * The simplest thing for your getter function to do is return every full record
+   * and allow this class to automatically do the sorting and filtering.
+   *
+   * Sometimes however that may not be practical for performance reasons.
+   * To optimize your getter, it can use the following helpers from $this:
+   *
+   * Use this->_itemsToGet() to match records to field values in the WHERE clause.
+   * Note the WHERE clause can potentially be very complex and it is not recommended
+   * to parse $this->where yourself.
+   *
+   * Use $this->_isFieldSelected() to check if a field value is called for - useful
+   * if loading the field involves expensive calculations.
+   *
+   * Be careful not to make assumptions, e.g. if LIMIT 100 is specified and your getter "helpfully" truncates the list
+   * at 100 without accounting for WHERE, ORDER BY and LIMIT clauses, the final filtered result may be very incorrect.
+   *
+   * @return array
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  protected function getRecords() {
+    if (is_callable($this->getter)) {
+      return call_user_func($this->getter, $this);
+    }
+    throw new NotImplementedException('Getter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName());
+  }
+
+}
diff --git a/Civi/Api4/Generic/BasicGetFieldsAction.php b/Civi/Api4/Generic/BasicGetFieldsAction.php
new file mode 100644 (file)
index 0000000..511c063
--- /dev/null
@@ -0,0 +1,191 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+use Civi\Api4\Utils\ActionUtil;
+
+/**
+ * Get fields for an entity.
+ *
+ * @method $this setLoadOptions(bool $value)
+ * @method bool getLoadOptions()
+ * @method $this setAction(string $value)
+ */
+class BasicGetFieldsAction extends BasicGetAction {
+
+  /**
+   * Fetch option lists for fields?
+   *
+   * @var bool
+   */
+  protected $loadOptions = FALSE;
+
+  /**
+   * @var string
+   */
+  protected $action = 'get';
+
+  /**
+   * To implement getFields for your own entity:
+   *
+   * 1. From your entity class add a static getFields method.
+   * 2. That method should construct and return this class.
+   * 3. The 3rd argument passed to this constructor should be a function that returns an
+   *    array of fields for your entity's CRUD actions.
+   * 4. For non-crud actions that need a different set of fields, you can override the
+   *    list from step 3 on a per-action basis by defining a fields() method in that action.
+   *    See for example BasicGetFieldsAction::fields() or GetActions::fields().
+   *
+   * @param Result $result
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  public function _run(Result $result) {
+    try {
+      $actionClass = ActionUtil::getAction($this->getEntityName(), $this->getAction());
+    }
+    catch (NotImplementedException $e) {
+    }
+    if (isset($actionClass) && method_exists($actionClass, 'fields')) {
+      $values = $actionClass->fields();
+    }
+    else {
+      $values = $this->getRecords();
+    }
+    $this->padResults($values);
+    $result->exchangeArray($this->queryArray($values));
+  }
+
+  /**
+   * Ensure every result contains, at minimum, the array keys as defined in $this->fields.
+   *
+   * Attempt to set some sensible defaults for some fields.
+   *
+   * In most cases it's not necessary to override this function, even if your entity is really weird.
+   * Instead just override $this->fields and thes function will respect that.
+   *
+   * @param array $values
+   */
+  protected function padResults(&$values) {
+    $fields = array_column($this->fields(), 'name');
+    foreach ($values as &$field) {
+      $defaults = array_intersect_key([
+        'title' => empty($field['name']) ? NULL : ucwords(str_replace('_', ' ', $field['name'])),
+        'entity' => $this->getEntityName(),
+        'required' => FALSE,
+        'options' => !empty($field['pseudoconstant']),
+        'data_type' => \CRM_Utils_Array::value('type', $field, 'String'),
+      ], array_flip($fields));
+      $field += $defaults;
+      if (!$this->loadOptions && isset($defaults['options'])) {
+        $field['options'] = (bool) $field['options'];
+      }
+      $field += array_fill_keys($fields, NULL);
+    }
+  }
+
+  /**
+   * @return string
+   */
+  public function getAction() {
+    // For actions that build on top of other actions, return fields for the simpler action
+    $sub = [
+      'save' => 'create',
+      'replace' => 'create',
+    ];
+    return $sub[$this->action] ?? $this->action;
+  }
+
+  public function fields() {
+    return [
+      [
+        'name' => 'name',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'title',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'description',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'default_value',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'required',
+        'data_type' => 'Boolean',
+      ],
+      [
+        'name' => 'required_if',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'options',
+        'data_type' => 'Array',
+      ],
+      [
+        'name' => 'data_type',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'input_type',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'input_attrs',
+        'data_type' => 'Array',
+      ],
+      [
+        'name' => 'fk_entity',
+        'data_type' => 'String',
+      ],
+      [
+        'name' => 'serialize',
+        'data_type' => 'Integer',
+      ],
+      [
+        'name' => 'entity',
+        'data_type' => 'String',
+      ],
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Generic/BasicReplaceAction.php b/Civi/Api4/Generic/BasicReplaceAction.php
new file mode 100644 (file)
index 0000000..0d85c6a
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+use Civi\Api4\Utils\ActionUtil;
+
+/**
+ * Given a set of records, will appropriately update the database.
+ *
+ * @method $this setRecords(array $records) Array of records.
+ * @method $this addRecord($record) Add a record to update.
+ * @method array getRecords()
+ * @method $this setDefaults(array $defaults) Array of defaults.
+ * @method $this addDefault($name, $value) Add a default value.
+ * @method array getDefaults()
+ * @method $this setReload(bool $reload) Specify whether complete objects will be returned after saving.
+ * @method bool getReload()
+ */
+class BasicReplaceAction extends AbstractBatchAction {
+
+  /**
+   * Array of records.
+   *
+   * Should be in the same format as returned by Get.
+   *
+   * @var array
+   * @required
+   */
+  protected $records = [];
+
+  /**
+   * Array of default values.
+   *
+   * Will be merged into $records before saving.
+   *
+   * @var array
+   */
+  protected $defaults = [];
+
+  /**
+   * Reload records after saving.
+   *
+   * By default this api typically returns partial records containing only the fields
+   * that were updated. Set reload to TRUE to do an additional lookup after saving
+   * to return complete records.
+   *
+   * @var bool
+   */
+  protected $reload = FALSE;
+
+  /**
+   * @return \Civi\Api4\Result\ReplaceResult
+   */
+  public function execute() {
+    return parent::execute();
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function _run(Result $result) {
+    $items = $this->getBatchRecords();
+
+    // Copy defaults from where clause if the operator is =
+    foreach ($this->where as $clause) {
+      if (is_array($clause) && $clause[1] === '=') {
+        $this->defaults[$clause[0]] = $clause[2];
+      }
+    }
+
+    $idField = $this->getSelect()[0];
+    $toDelete = array_diff_key(array_column($items, NULL, $idField), array_flip(array_filter(\CRM_Utils_Array::collect($idField, $this->records))));
+
+    // Try to delegate to the Save action
+    try {
+      $saveAction = ActionUtil::getAction($this->getEntityName(), 'save');
+      $saveAction
+        ->setCheckPermissions($this->getCheckPermissions())
+        ->setReload($this->reload)
+        ->setRecords($this->records)
+        ->setDefaults($this->defaults);
+      $result->exchangeArray((array) $saveAction->execute());
+    }
+    // Fall back on Create/Update if Save doesn't exist
+    catch (NotImplementedException $e) {
+      foreach ($this->records as $record) {
+        $record += $this->defaults;
+        if (!empty($record[$idField])) {
+          $result[] = civicrm_api4($this->getEntityName(), 'update', [
+            'reload' => $this->reload,
+            'where' => [[$idField, '=', $record[$idField]]],
+            'values' => $record,
+            'checkPermissions' => $this->getCheckPermissions(),
+          ])->first();
+        }
+        else {
+          $result[] = civicrm_api4($this->getEntityName(), 'create', [
+            'values' => $record,
+            'checkPermissions' => $this->getCheckPermissions(),
+          ])->first();
+        }
+      }
+    }
+
+    if ($toDelete) {
+      $result->deleted = (array) civicrm_api4($this->getEntityName(), 'delete', [
+        'where' => [[$idField, 'IN', array_keys($toDelete)]],
+        'checkPermissions' => $this->getCheckPermissions(),
+      ]);
+    }
+  }
+
+}
diff --git a/Civi/Api4/Generic/BasicSaveAction.php b/Civi/Api4/Generic/BasicSaveAction.php
new file mode 100644 (file)
index 0000000..cd63ca2
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+use Civi\Api4\Utils\ActionUtil;
+
+/**
+ * Create or update one or more records.
+ *
+ * If creating more than one record with similar values, use the "defaults" param.
+ *
+ * Set "reload" if you need the api to return complete records.
+ */
+class BasicSaveAction extends AbstractSaveAction {
+
+  /**
+   * @var callable
+   *
+   * Function(array $item, BasicCreateAction $thisAction) => array
+   */
+  private $setter;
+
+  /**
+   * Basic Create constructor.
+   *
+   * @param string $entityName
+   * @param string $actionName
+   * @param string $idField
+   * @param callable $setter
+   *   Function(array $item, BasicCreateAction $thisAction) => array
+   */
+  public function __construct($entityName, $actionName, $idField = 'id', $setter = NULL) {
+    parent::__construct($entityName, $actionName, $idField);
+    $this->setter = $setter;
+  }
+
+  /**
+   * We pass the writeRecord function an array representing one item to write.
+   * We expect to get the same format back.
+   *
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  public function _run(Result $result) {
+    $this->validateValues();
+    foreach ($this->records as $record) {
+      $record += $this->defaults;
+      $result[] = $this->writeRecord($record);
+    }
+    if ($this->reload) {
+      /** @var BasicGetAction $get */
+      $get = ActionUtil::getAction($this->getEntityName(), 'get');
+      $get
+        ->setCheckPermissions($this->getCheckPermissions())
+        ->addWhere($this->getIdField(), 'IN', (array) $result->column($this->getIdField()));
+      $result->exchangeArray((array) $get->execute());
+    }
+  }
+
+  /**
+   * This Basic Save class can be used in one of two ways:
+   *
+   * 1. Use this class directly by passing a callable ($setter) to the constructor.
+   * 2. Extend this class and override this function.
+   *
+   * Either way, this function should return an array representing the one new object.
+   *
+   * @param array $item
+   * @return array
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  protected function writeRecord($item) {
+    if (is_callable($this->setter)) {
+      return call_user_func($this->setter, $item, $this);
+    }
+    throw new NotImplementedException('Setter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName());
+  }
+
+}
diff --git a/Civi/Api4/Generic/BasicUpdateAction.php b/Civi/Api4/Generic/BasicUpdateAction.php
new file mode 100644 (file)
index 0000000..c3aa0c1
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\API\Exception\NotImplementedException;
+
+/**
+ * Update one or more records with new values.
+ *
+ * Use the where clause (required) to select them.
+ */
+class BasicUpdateAction extends AbstractUpdateAction {
+
+  /**
+   * @var callable
+   *
+   * Function(array $item, BasicUpdateAction $thisAction) => array
+   */
+  private $setter;
+
+  /**
+   * BasicUpdateAction constructor.
+   *
+   * @param string $entityName
+   * @param string $actionName
+   * @param string|array $select
+   *   One or more fields to select from each matching item.
+   * @param callable $setter
+   *   Function(array $item, BasicUpdateAction $thisAction) => array
+   */
+  public function __construct($entityName, $actionName, $select = 'id', $setter = NULL) {
+    parent::__construct($entityName, $actionName, $select);
+    $this->setter = $setter;
+  }
+
+  /**
+   * We pass the writeRecord function an array representing one item to update.
+   * We expect to get the same format back.
+   *
+   * @param \Civi\Api4\Generic\Result $result
+   * @throws \API_Exception
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  public function _run(Result $result) {
+    foreach ($this->getBatchRecords() as $item) {
+      $result[] = $this->writeRecord($this->values + $item);
+    }
+
+    if (!$result->count()) {
+      throw new \API_Exception('Cannot ' . $this->getActionName() . ' ' . $this->getEntityName() . ', no records found with ' . $this->whereClauseToString());
+    }
+  }
+
+  /**
+   * This Basic Update class can be used in one of two ways:
+   *
+   * 1. Use this class directly by passing a callable ($setter) to the constructor.
+   * 2. Extend this class and override this function.
+   *
+   * Either way, this function should return an array representing the one modified object.
+   *
+   * @param array $item
+   * @return array
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  protected function writeRecord($item) {
+    if (is_callable($this->setter)) {
+      return call_user_func($this->setter, $item, $this);
+    }
+    throw new NotImplementedException('Setter function not found for api4 ' . $this->getEntityName() . '::' . $this->getActionName());
+  }
+
+}
diff --git a/Civi/Api4/Generic/DAOCreateAction.php b/Civi/Api4/Generic/DAOCreateAction.php
new file mode 100644 (file)
index 0000000..e3d63c2
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Create a new object from supplied values.
+ *
+ * This function will create 1 new object. It cannot be used to update existing objects. Use the Update or Replace actions for that.
+ */
+class DAOCreateAction extends AbstractCreateAction {
+  use Traits\DAOActionTrait;
+
+  /**
+   * @inheritDoc
+   */
+  public function _run(Result $result) {
+    $this->validateValues();
+    $params = $this->values;
+    $this->fillDefaults($params);
+
+    $resultArray = $this->writeObjects([$params]);
+
+    $result->exchangeArray($resultArray);
+  }
+
+  /**
+   * @throws \API_Exception
+   */
+  protected function validateValues() {
+    if (!empty($this->values['id'])) {
+      throw new \API_Exception('Cannot pass id to Create action. Use Update action instead.');
+    }
+    parent::validateValues();
+  }
+
+}
diff --git a/Civi/Api4/Generic/DAODeleteAction.php b/Civi/Api4/Generic/DAODeleteAction.php
new file mode 100644 (file)
index 0000000..8001b7e
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Delete one or more items, based on criteria specified in Where param (required).
+ */
+class DAODeleteAction extends AbstractBatchAction {
+  use Traits\DAOActionTrait;
+
+  /**
+   * Batch delete function
+   */
+  public function _run(Result $result) {
+    $defaults = $this->getParamDefaults();
+    if ($defaults['where'] && !array_diff_key($this->where, $defaults['where'])) {
+      throw new \API_Exception('Cannot delete ' . $this->getEntityName() . ' with no "where" parameter specified');
+    }
+
+    $items = $this->getObjects();
+
+    if (!$items) {
+      throw new \API_Exception('Cannot delete ' . $this->getEntityName() . ', no records found with ' . $this->whereClauseToString());
+    }
+
+    $ids = $this->deleteObjects($items);
+
+    $result->exchangeArray($ids);
+  }
+
+  /**
+   * @param $items
+   * @return array
+   * @throws \API_Exception
+   */
+  protected function deleteObjects($items) {
+    $ids = [];
+    $baoName = $this->getBaoName();
+
+    if ($this->getCheckPermissions()) {
+      foreach ($items as $item) {
+        $this->checkContactPermissions($baoName, $item);
+      }
+    }
+
+    if ($this->getEntityName() !== 'EntityTag' && method_exists($baoName, 'del')) {
+      foreach ($items as $item) {
+        $args = [$item['id']];
+        $bao = call_user_func_array([$baoName, 'del'], $args);
+        if ($bao !== FALSE) {
+          $ids[] = ['id' => $item['id']];
+        }
+        else {
+          throw new \API_Exception("Could not delete {$this->getEntityName()} id {$item['id']}");
+        }
+      }
+    }
+    else {
+      foreach ($items as $item) {
+        $bao = new $baoName();
+        $bao->id = $item['id'];
+        // delete it
+        $action_result = $bao->delete();
+        if ($action_result) {
+          $ids[] = ['id' => $item['id']];
+        }
+        else {
+          throw new \API_Exception("Could not delete {$this->getEntityName()} id {$item['id']}");
+        }
+      }
+    }
+    return $ids;
+  }
+
+}
diff --git a/Civi/Api4/Generic/DAOEntity.php b/Civi/Api4/Generic/DAOEntity.php
new file mode 100644 (file)
index 0000000..9842cd5
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Base class for DAO-based entities.
+ */
+abstract class DAOEntity extends AbstractEntity {
+
+  /**
+   * @return DAOGetAction
+   */
+  public static function get() {
+    return new DAOGetAction(static::class, __FUNCTION__);
+  }
+
+  /**
+   * @return DAOGetAction
+   */
+  public static function save() {
+    return new DAOSaveAction(static::class, __FUNCTION__);
+  }
+
+  /**
+   * @return DAOGetFieldsAction
+   */
+  public static function getFields() {
+    return new DAOGetFieldsAction(static::class, __FUNCTION__);
+  }
+
+  /**
+   * @return DAOCreateAction
+   */
+  public static function create() {
+    return new DAOCreateAction(static::class, __FUNCTION__);
+  }
+
+  /**
+   * @return DAOUpdateAction
+   */
+  public static function update() {
+    return new DAOUpdateAction(static::class, __FUNCTION__);
+  }
+
+  /**
+   * @return DAODeleteAction
+   */
+  public static function delete() {
+    return new DAODeleteAction(static::class, __FUNCTION__);
+  }
+
+  /**
+   * @return BasicReplaceAction
+   */
+  public static function replace() {
+    return new BasicReplaceAction(static::class, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/Generic/DAOGetAction.php b/Civi/Api4/Generic/DAOGetAction.php
new file mode 100644 (file)
index 0000000..54d3c34
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Retrieve items based on criteria specified in the 'where' param.
+ *
+ * Use the 'select' param to determine which fields are returned, defaults to *.
+ *
+ * Perform joins on other related entities using a dot notation.
+ */
+class DAOGetAction extends AbstractGetAction {
+  use Traits\DAOActionTrait;
+
+  public function _run(Result $result) {
+    $this->setDefaultWhereClause();
+    $result->exchangeArray($this->getObjects());
+  }
+
+}
diff --git a/Civi/Api4/Generic/DAOGetFieldsAction.php b/Civi/Api4/Generic/DAOGetFieldsAction.php
new file mode 100644 (file)
index 0000000..2565f8f
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+use Civi\Api4\Service\Spec\SpecFormatter;
+
+/**
+ * Get fields for a DAO-based entity.
+ *
+ * @method $this setIncludeCustom(bool $value)
+ * @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
+   *
+   * @return array
+   */
+  protected function getRecords() {
+    $fields = $this->_itemsToGet('name');
+    /** @var \Civi\Api4\Service\Spec\SpecGatherer $gatherer */
+    $gatherer = \Civi::container()->get('spec_gatherer');
+    // Any fields name with a dot in it is custom
+    if ($fields) {
+      $this->includeCustom = strpos(implode('', $fields), '.') !== FALSE;
+    }
+    $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $this->includeCustom);
+    return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions);
+  }
+
+  public function fields() {
+    $fields = parent::fields();
+    $fields[] = [
+      'name' => 'custom_field_id',
+      'data_type' => 'Integer',
+    ];
+    $fields[] = [
+      'name' => 'custom_group_id',
+      'data_type' => 'Integer',
+    ];
+    return $fields;
+  }
+
+}
diff --git a/Civi/Api4/Generic/DAOSaveAction.php b/Civi/Api4/Generic/DAOSaveAction.php
new file mode 100644 (file)
index 0000000..634cd8e
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Create or update one or more records.
+ *
+ * If creating more than one record with similar values, use the "defaults" param.
+ *
+ * Set "reload" if you need the api to return complete records.
+ */
+class DAOSaveAction extends AbstractSaveAction {
+  use Traits\DAOActionTrait;
+
+  /**
+   * @inheritDoc
+   */
+  public function _run(Result $result) {
+    foreach ($this->records as &$record) {
+      $record += $this->defaults;
+      if (empty($record['id'])) {
+        $this->fillDefaults($record);
+      }
+    }
+    $this->validateValues();
+
+    $resultArray = $this->writeObjects($this->records);
+
+    $result->exchangeArray($resultArray);
+  }
+
+}
diff --git a/Civi/Api4/Generic/DAOUpdateAction.php b/Civi/Api4/Generic/DAOUpdateAction.php
new file mode 100644 (file)
index 0000000..7c8c047
--- /dev/null
@@ -0,0 +1,97 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Update one or more records with new values.
+ *
+ * Use the where clause (required) to select them.
+ */
+class DAOUpdateAction extends AbstractUpdateAction {
+  use Traits\DAOActionTrait;
+
+  /**
+   * Criteria for selecting items to update.
+   *
+   * Required if no id is supplied in values.
+   *
+   * @var array
+   */
+  protected $where = [];
+
+  /**
+   * @inheritDoc
+   */
+  public function _run(Result $result) {
+    // Add ID from values to WHERE clause and check for mismatch
+    if (!empty($this->values['id'])) {
+      $wheres = array_column($this->where, NULL, 0);
+      if (!isset($wheres['id'])) {
+        $this->addWhere('id', '=', $this->values['id']);
+      }
+      elseif (!($wheres['id'][1] === '=' && $wheres['id'][2] == $this->values['id'])) {
+        throw new \Exception("Cannot update the id of an existing " . $this->getEntityName() . '.');
+      }
+    }
+
+    // Require WHERE if we didn't get an ID from values
+    if (!$this->where) {
+      throw new \API_Exception('Parameter "where" is required unless an id is supplied in values.');
+    }
+
+    // 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]));
+      return;
+    }
+
+    // Batch update 1 or more records based on WHERE clause
+    $items = $this->getObjects();
+    foreach ($items as &$item) {
+      $item = $this->values + $item;
+    }
+
+    if (!$items) {
+      throw new \API_Exception('Cannot ' . $this->getActionName() . ' ' . $this->getEntityName() . ', no records found with ' . $this->whereClauseToString());
+    }
+
+    $result->exchangeArray($this->writeObjects($items));
+  }
+
+}
diff --git a/Civi/Api4/Generic/Result.php b/Civi/Api4/Generic/Result.php
new file mode 100644 (file)
index 0000000..9930ce8
--- /dev/null
@@ -0,0 +1,131 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.7                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2015                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Api4\Generic;
+
+/**
+ * Container for api results.
+ */
+class Result extends \ArrayObject {
+  /**
+   * @var string
+   */
+  public $entity;
+  /**
+   * @var string
+   */
+  public $action;
+  /**
+   * Api version
+   * @var int
+   */
+  public $version = 4;
+
+  private $indexedBy;
+
+  /**
+   * Return first result.
+   * @return array|null
+   */
+  public function first() {
+    foreach ($this as $values) {
+      return $values;
+    }
+    return NULL;
+  }
+
+  /**
+   * Return last result.
+   * @return array|null
+   */
+  public function last() {
+    $items = $this->getArrayCopy();
+    return array_pop($items);
+  }
+
+  /**
+   * @param int $index
+   * @return array|null
+   */
+  public function itemAt($index) {
+    $length = $index < 0 ? 0 - $index : $index + 1;
+    if ($length > count($this)) {
+      return NULL;
+    }
+    return array_slice(array_values($this->getArrayCopy()), $index, 1)[0];
+  }
+
+  /**
+   * Re-index the results array (which by default is non-associative)
+   *
+   * Drops any item from the results that does not contain the specified key
+   *
+   * @param string $key
+   * @return $this
+   * @throws \API_Exception
+   */
+  public function indexBy($key) {
+    $this->indexedBy = $key;
+    if (count($this)) {
+      $newResults = [];
+      foreach ($this as $values) {
+        if (isset($values[$key])) {
+          $newResults[$values[$key]] = $values;
+        }
+      }
+      if (!$newResults) {
+        throw new \API_Exception("Key $key not found in api results");
+      }
+      $this->exchangeArray($newResults);
+    }
+    return $this;
+  }
+
+  /**
+   * Returns the number of results
+   *
+   * @return int
+   */
+  public function count() {
+    $count = parent::count();
+    if ($count == 1 && is_array($this->first()) && array_keys($this->first()) == ['row_count']) {
+      return $this->first()['row_count'];
+    }
+    return $count;
+  }
+
+  /**
+   * Reduce each result to one field
+   *
+   * @param $name
+   * @return array
+   */
+  public function column($name) {
+    return array_column($this->getArrayCopy(), $name, $this->indexedBy);
+  }
+
+}
diff --git a/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php b/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php
new file mode 100644 (file)
index 0000000..36ae762
--- /dev/null
@@ -0,0 +1,236 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic\Traits;
+
+use Civi\API\Exception\NotImplementedException;
+
+/**
+ * Helper functions for performing api queries on arrays of data.
+ *
+ * @package Civi\Api4\Generic
+ */
+trait ArrayQueryActionTrait {
+
+  /**
+   * @param array $values
+   *   List of all rows
+   * @return array
+   *   Filtered list of rows
+   */
+  protected function queryArray($values) {
+    $values = $this->filterArray($values);
+    $values = $this->sortArray($values);
+    $values = $this->limitArray($values);
+    $values = $this->selectArray($values);
+    return $values;
+  }
+
+  /**
+   * @param array $values
+   * @return array
+   */
+  protected function filterArray($values) {
+    if ($this->getWhere()) {
+      $values = array_filter($values, [$this, 'evaluateFilters']);
+    }
+    return array_values($values);
+  }
+
+  /**
+   * @param array $row
+   * @return bool
+   */
+  private function evaluateFilters($row) {
+    $where = $this->getWhere();
+    $allConditions = in_array($where[0], ['AND', 'OR', 'NOT']) ? $where : ['AND', $where];
+    return $this->walkFilters($row, $allConditions);
+  }
+
+  /**
+   * @param array $row
+   * @param array $filters
+   * @return bool
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  private function walkFilters($row, $filters) {
+    switch ($filters[0]) {
+      case 'AND':
+      case 'NOT':
+        $result = TRUE;
+        foreach ($filters[1] as $filter) {
+          if (!$this->walkFilters($row, $filter)) {
+            $result = FALSE;
+            break;
+          }
+        }
+        return $result == ($filters[0] == 'AND');
+
+      case 'OR':
+        $result = !count($filters[1]);
+        foreach ($filters[1] as $filter) {
+          if ($this->walkFilters($row, $filter)) {
+            return TRUE;
+          }
+        }
+        return $result;
+
+      default:
+        return $this->filterCompare($row, $filters);
+    }
+  }
+
+  /**
+   * @param array $row
+   * @param array $condition
+   * @return bool
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  private function filterCompare($row, $condition) {
+    if (!is_array($condition)) {
+      throw new NotImplementedException('Unexpected where syntax; expecting array.');
+    }
+    $value = isset($row[$condition[0]]) ? $row[$condition[0]] : NULL;
+    $operator = $condition[1];
+    $expected = isset($condition[2]) ? $condition[2] : NULL;
+    switch ($operator) {
+      case '=':
+      case '!=':
+      case '<>':
+        $equal = $value == $expected;
+        // PHP is too imprecise about comparing the number 0
+        if ($expected === 0 || $expected === '0') {
+          $equal = ($value === 0 || $value === '0');
+        }
+        // PHP is too imprecise about comparing empty strings
+        if ($expected === '') {
+          $equal = ($value === '');
+        }
+        return $equal == ($operator == '=');
+
+      case 'IS NULL':
+      case 'IS NOT NULL':
+        return is_null($value) == ($operator == 'IS NULL');
+
+      case '>':
+        return $value > $expected;
+
+      case '>=':
+        return $value >= $expected;
+
+      case '<':
+        return $value < $expected;
+
+      case '<=':
+        return $value <= $expected;
+
+      case 'BETWEEN':
+      case 'NOT BETWEEN':
+        $between = ($value >= $expected[0] && $value <= $expected[1]);
+        return $between == ($operator == 'BETWEEN');
+
+      case 'LIKE':
+      case 'NOT LIKE':
+        $pattern = '/^' . str_replace('%', '.*', preg_quote($expected, '/')) . '$/i';
+        return !preg_match($pattern, $value) == ($operator != 'LIKE');
+
+      case 'IN':
+        return in_array($value, $expected);
+
+      case 'NOT IN':
+        return !in_array($value, $expected);
+
+      default:
+        throw new NotImplementedException("Unsupported operator: '$operator' cannot be used with array data");
+    }
+  }
+
+  /**
+   * @param $values
+   * @return array
+   */
+  protected function sortArray($values) {
+    if ($this->getOrderBy()) {
+      usort($values, [$this, 'sortCompare']);
+    }
+    return $values;
+  }
+
+  private function sortCompare($a, $b) {
+    foreach ($this->getOrderBy() as $field => $dir) {
+      $modifier = $dir == 'ASC' ? 1 : -1;
+      if (isset($a[$field]) && isset($b[$field])) {
+        if ($a[$field] == $b[$field]) {
+          continue;
+        }
+        return (strnatcasecmp($a[$field], $b[$field]) * $modifier);
+      }
+      elseif (isset($a[$field]) || isset($b[$field])) {
+        return ((isset($a[$field]) ? 1 : -1) * $modifier);
+      }
+    }
+    return 0;
+  }
+
+  /**
+   * @param $values
+   * @return array
+   */
+  protected function selectArray($values) {
+    if ($this->getSelect() === ['row_count']) {
+      $values = [['row_count' => count($values)]];
+    }
+    elseif ($this->getSelect()) {
+      foreach ($values as &$value) {
+        $value = array_intersect_key($value, array_flip($this->getSelect()));
+      }
+    }
+    return $values;
+  }
+
+  /**
+   * @param $values
+   * @return array
+   */
+  protected function limitArray($values) {
+    if ($this->getOffset() || $this->getLimit()) {
+      $values = array_slice($values, $this->getOffset() ?: 0, $this->getLimit() ?: NULL);
+    }
+    return $values;
+  }
+
+}
diff --git a/Civi/Api4/Generic/Traits/CustomValueActionTrait.php b/Civi/Api4/Generic/Traits/CustomValueActionTrait.php
new file mode 100644 (file)
index 0000000..ba064a4
--- /dev/null
@@ -0,0 +1,127 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Generic\Traits;
+
+use Civi\Api4\Utils\FormattingUtil;
+use Civi\Api4\Utils\CoreUtil;
+
+/**
+ * Helper functions for working with custom values
+ *
+ * @package Civi\Api4\Generic
+ */
+trait CustomValueActionTrait {
+
+  public function __construct($customGroup, $actionName) {
+    $this->customGroup = $customGroup;
+    parent::__construct('CustomValue', $actionName, ['id', 'entity_id']);
+  }
+
+  /**
+   * Custom Group name if this is a CustomValue pseudo-entity.
+   *
+   * @var string
+   */
+  private $customGroup;
+
+  /**
+   * @inheritDoc
+   */
+  public function getEntityName() {
+    return 'Custom_' . $this->getCustomGroup();
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function writeObjects($items) {
+    $result = [];
+    $fields = $this->entityFields();
+    foreach ($items as $item) {
+      FormattingUtil::formatWriteParams($item, $this->getEntityName(), $fields);
+
+      // Convert field names to custom_xx format
+      foreach ($fields as $name => $field) {
+        if (!empty($field['custom_field_id']) && isset($item[$name])) {
+          $item['custom_' . $field['custom_field_id']] = $item[$name];
+          unset($item[$name]);
+        }
+      }
+
+      $result[] = \CRM_Core_BAO_CustomValueTable::setValues($item);
+    }
+    return $result;
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function deleteObjects($items) {
+    $customTable = CoreUtil::getCustomTableByName($this->getCustomGroup());
+    $ids = [];
+    foreach ($items as $item) {
+      \CRM_Utils_Hook::pre('delete', $this->getEntityName(), $item['id'], \CRM_Core_DAO::$_nullArray);
+      \CRM_Utils_SQL_Delete::from($customTable)
+        ->where('id = #value')
+        ->param('#value', $item['id'])
+        ->execute();
+      \CRM_Utils_Hook::post('delete', $this->getEntityName(), $item['id'], \CRM_Core_DAO::$_nullArray);
+      $ids[] = $item['id'];
+    }
+    return $ids;
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function fillDefaults(&$params) {
+    foreach ($this->entityFields() as $name => $field) {
+      if (!isset($params[$name]) && isset($field['default_value'])) {
+        $params[$name] = $field['default_value'];
+      }
+    }
+  }
+
+  /**
+   * @return string
+   */
+  public function getCustomGroup() {
+    return $this->customGroup;
+  }
+
+}
diff --git a/Civi/Api4/Generic/Traits/DAOActionTrait.php b/Civi/Api4/Generic/Traits/DAOActionTrait.php
new file mode 100644 (file)
index 0000000..29e30f8
--- /dev/null
@@ -0,0 +1,290 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Generic\Traits;
+
+use CRM_Utils_Array as UtilsArray;
+use Civi\Api4\Utils\FormattingUtil;
+use Civi\Api4\Query\Api4SelectQuery;
+
+/**
+ * @method string getLanguage()
+ * @method setLanguage(string $language)
+ */
+trait DAOActionTrait {
+
+  /**
+   * Specify the language to use if this is a multi-lingual environment.
+   *
+   * E.g. "en_US" or "fr_CA"
+   *
+   * @var string
+   */
+  protected $language;
+
+  /**
+   * @return \CRM_Core_DAO|string
+   */
+  protected function getBaoName() {
+    require_once 'api/v3/utils.php';
+    return \_civicrm_api3_get_BAO($this->getEntityName());
+  }
+
+  /**
+   * Extract the true fields from a BAO
+   *
+   * (Used by create and update actions)
+   * @param object $bao
+   * @return array
+   */
+  public static function baoToArray($bao) {
+    $fields = $bao->fields();
+    $values = [];
+    foreach ($fields as $key => $field) {
+      $name = $field['name'];
+      if (property_exists($bao, $name)) {
+        $values[$name] = isset($bao->$name) ? $bao->$name : NULL;
+      }
+    }
+    return $values;
+  }
+
+  /**
+   * @return array|int
+   */
+  protected function getObjects() {
+    $query = new Api4SelectQuery($this->getEntityName(), $this->getCheckPermissions(), $this->entityFields());
+    $query->select = $this->getSelect();
+    $query->where = $this->getWhere();
+    $query->orderBy = $this->getOrderBy();
+    $query->limit = $this->getLimit();
+    $query->offset = $this->getOffset();
+    return $query->run();
+  }
+
+  /**
+   * Fill field defaults which were declared by the api.
+   *
+   * Note: default values from core are ignored because the BAO or database layer will supply them.
+   *
+   * @param array $params
+   */
+  protected function fillDefaults(&$params) {
+    $fields = $this->entityFields();
+    $bao = $this->getBaoName();
+    $coreFields = array_column($bao::fields(), NULL, 'name');
+
+    foreach ($fields as $name => $field) {
+      // If a default value in the api field is different than in core, the api should override it.
+      if (!isset($params[$name]) && !empty($field['default_value']) && $field['default_value'] != \CRM_Utils_Array::pathGet($coreFields, [$name, 'default'])) {
+        $params[$name] = $field['default_value'];
+      }
+    }
+  }
+
+  /**
+   * Write bao objects as part of a create/update action.
+   *
+   * @param array $items
+   *   The records to write to the DB.
+   * @return array
+   *   The records after being written to the DB (e.g. including newly assigned "id").
+   * @throws \API_Exception
+   */
+  protected function writeObjects($items) {
+    $baoName = $this->getBaoName();
+
+    // Some BAOs are weird and don't support a straightforward "create" method.
+    $oddballs = [
+      'EntityTag' => 'add',
+      'GroupContact' => 'add',
+      'Website' => 'add',
+    ];
+    $method = $oddballs[$this->getEntityName()] ?? 'create';
+    if (!method_exists($baoName, $method)) {
+      $method = 'add';
+    }
+
+    $result = [];
+
+    foreach ($items as $item) {
+      $entityId = UtilsArray::value('id', $item);
+      FormattingUtil::formatWriteParams($item, $this->getEntityName(), $this->entityFields());
+      $this->formatCustomParams($item, $entityId);
+      $item['check_permissions'] = $this->getCheckPermissions();
+
+      // For some reason the contact bao requires this
+      if ($entityId && $this->getEntityName() == 'Contact') {
+        $item['contact_id'] = $entityId;
+      }
+
+      if ($this->getCheckPermissions()) {
+        $this->checkContactPermissions($baoName, $item);
+      }
+
+      if ($this->getEntityName() == 'Address') {
+        $createResult = $baoName::add($item, $this->fixAddress);
+      }
+      elseif (method_exists($baoName, $method)) {
+        $createResult = $baoName::$method($item);
+      }
+      else {
+        $createResult = $this->genericCreateMethod($item);
+      }
+
+      if (!$createResult) {
+        $errMessage = sprintf('%s write operation failed', $this->getEntityName());
+        throw new \API_Exception($errMessage);
+      }
+
+      if (!empty($this->reload) && is_a($createResult, 'CRM_Core_DAO')) {
+        $createResult->find(TRUE);
+      }
+
+      // trim back the junk and just get the array:
+      $resultArray = $this->baoToArray($createResult);
+
+      $result[] = $resultArray;
+    }
+    return $result;
+  }
+
+  /**
+   * Fallback when a BAO does not contain create or add functions
+   *
+   * @param $params
+   * @return mixed
+   */
+  private function genericCreateMethod($params) {
+    $baoName = $this->getBaoName();
+    $hook = empty($params['id']) ? 'create' : 'edit';
+
+    \CRM_Utils_Hook::pre($hook, $this->getEntityName(), UtilsArray::value('id', $params), $params);
+    /** @var \CRM_Core_DAO $instance */
+    $instance = new $baoName();
+    $instance->copyValues($params, TRUE);
+    $instance->save();
+    \CRM_Utils_Hook::post($hook, $this->getEntityName(), $instance->id, $instance);
+
+    return $instance;
+  }
+
+  /**
+   * @param array $params
+   * @param int $entityId
+   * @return mixed
+   */
+  protected function formatCustomParams(&$params, $entityId) {
+    $customParams = [];
+
+    // $customValueID is the ID of the custom value in the custom table for this
+    // entity (i guess this assumes it's not a multi value entity)
+    foreach ($params as $name => $value) {
+      if (strpos($name, '.') === FALSE) {
+        continue;
+      }
+
+      list($customGroup, $customField) = explode('.', $name);
+
+      $customFieldId = \CRM_Core_BAO_CustomField::getFieldValue(
+        \CRM_Core_DAO_CustomField::class,
+        $customField,
+        'id',
+        'name'
+      );
+      $customFieldType = \CRM_Core_BAO_CustomField::getFieldValue(
+        \CRM_Core_DAO_CustomField::class,
+        $customField,
+        'html_type',
+        'name'
+      );
+      $customFieldExtends = \CRM_Core_BAO_CustomGroup::getFieldValue(
+        \CRM_Core_DAO_CustomGroup::class,
+        $customGroup,
+        'extends',
+        'name'
+      );
+
+      // todo are we sure we don't want to allow setting to NULL? need to test
+      if ($customFieldId && NULL !== $value) {
+
+        if ($customFieldType == 'CheckBox') {
+          // this function should be part of a class
+          formatCheckBoxField($value, 'custom_' . $customFieldId, $this->getEntityName());
+        }
+
+        \CRM_Core_BAO_CustomField::formatCustomField(
+          $customFieldId,
+          $customParams,
+          $value,
+          $customFieldExtends,
+          // todo check when this is needed
+          NULL,
+          $entityId,
+          FALSE,
+          FALSE,
+          TRUE
+        );
+      }
+    }
+
+    if ($customParams) {
+      $params['custom'] = $customParams;
+    }
+  }
+
+  /**
+   * Check edit/delete permissions for contacts and related entities.
+   *
+   * @param $baoName
+   * @param $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, ['check_permissions' => 1] + $item);
+    }
+  }
+
+}
diff --git a/Civi/Api4/Generic/Traits/IsCurrentTrait.php b/Civi/Api4/Generic/Traits/IsCurrentTrait.php
new file mode 100644 (file)
index 0000000..edd02d8
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Generic\Traits;
+
+/**
+ * This trait adds the $current param to a Get action.
+ *
+ * @see \Civi\Api4\Event\Subscriber\IsCurrentSubscriber
+ */
+trait IsCurrentTrait {
+
+  /**
+   * Convenience filter for selecting items that are enabled and are currently within their start/end dates.
+   *
+   * Adding current = TRUE is a shortcut for
+   *   WHERE is_active = 1 AND (end_date IS NULL OR end_date >= now) AND (start_date IS NULL OR start_DATE <= now)
+   *
+   * Adding current = FALSE is a shortcut for
+   *   WHERE is_active = 0 OR start_date > now OR end_date < now
+   *
+   * @var bool
+   */
+  protected $current;
+
+  /**
+   * @return bool
+   */
+  public function getCurrent() {
+    return $this->current;
+  }
+
+  /**
+   * @param bool $current
+   * @return $this
+   */
+  public function setCurrent($current) {
+    $this->current = $current;
+    return $this;
+  }
+
+}
diff --git a/Civi/Api4/Group.php b/Civi/Api4/Group.php
new file mode 100644 (file)
index 0000000..b217546
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Group entity.
+ *
+ * @package Civi\Api4
+ */
+class Group extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/GroupContact.php b/Civi/Api4/GroupContact.php
new file mode 100644 (file)
index 0000000..5911e23
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * GroupContact entity - link between groups and contacts.
+ *
+ * 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".
+ *
+ * @package Civi\Api4
+ */
+class GroupContact extends Generic\DAOEntity {
+
+  /**
+   * @return Action\GroupContact\Create
+   */
+  public static function create() {
+    return new Action\GroupContact\Create(__CLASS__, __FUNCTION__);
+  }
+
+  /**
+   * @return Action\GroupContact\Save
+   */
+  public static function save() {
+    return new Action\GroupContact\Save(__CLASS__, __FUNCTION__);
+  }
+
+  /**
+   * @return Action\GroupContact\Update
+   */
+  public static function update() {
+    return new Action\GroupContact\Update(__CLASS__, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/GroupNesting.php b/Civi/Api4/GroupNesting.php
new file mode 100644 (file)
index 0000000..10c6496
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4;
+
+/**
+ * GroupNesting entity.
+ *
+ * @package Civi\Api4
+ */
+class GroupNesting extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/GroupOrganization.php b/Civi/Api4/GroupOrganization.php
new file mode 100644 (file)
index 0000000..3dd455f
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4;
+
+/**
+ * GroupOrganization entity.
+ *
+ * @package Civi\Api4
+ */
+class GroupOrganization extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/IM.php b/Civi/Api4/IM.php
new file mode 100644 (file)
index 0000000..880c050
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * IM entity.
+ *
+ * @package Civi\Api4
+ */
+class IM extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/LocationType.php b/Civi/Api4/LocationType.php
new file mode 100644 (file)
index 0000000..0c194ab
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * LocationType entity.
+ *
+ * @package Civi\Api4
+ */
+class LocationType extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/MailSettings.php b/Civi/Api4/MailSettings.php
new file mode 100644 (file)
index 0000000..19b2553
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * MailSettings entity.
+ *
+ * @package Civi\Api4
+ */
+class MailSettings extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Mapping.php b/Civi/Api4/Mapping.php
new file mode 100644 (file)
index 0000000..d5912a5
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Mapping entity.
+ *
+ * This is a collection of MappingFields, for reuse in import, export, etc.
+ *
+ * @package Civi\Api4
+ */
+class Mapping extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/MappingField.php b/Civi/Api4/MappingField.php
new file mode 100644 (file)
index 0000000..4457b8a
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * MappingField entity.
+ *
+ * This represents one field in a Mapping collection.
+ *
+ * @package Civi\Api4
+ */
+class MappingField extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Navigation.php b/Civi/Api4/Navigation.php
new file mode 100644 (file)
index 0000000..e55f5a7
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Navigation entity.
+ *
+ * @package Civi\Api4
+ */
+class Navigation extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Note.php b/Civi/Api4/Note.php
new file mode 100644 (file)
index 0000000..6750f90
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Note entity.
+ *
+ * @package Civi\Api4
+ */
+class Note extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/OpenID.php b/Civi/Api4/OpenID.php
new file mode 100644 (file)
index 0000000..2a67c2a
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * OpenID entity.
+ *
+ * @package Civi\Api4
+ */
+class OpenID extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/OptionGroup.php b/Civi/Api4/OptionGroup.php
new file mode 100644 (file)
index 0000000..fd8b970
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * OptionGroup entity.
+ *
+ * @package Civi\Api4
+ */
+class OptionGroup extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/OptionValue.php b/Civi/Api4/OptionValue.php
new file mode 100644 (file)
index 0000000..95becd4
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * OptionValue entity.
+ *
+ * @package Civi\Api4
+ */
+class OptionValue extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Participant.php b/Civi/Api4/Participant.php
new file mode 100644 (file)
index 0000000..93fa61c
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Participant entity, stores the participation record of a contact in an event.
+ *
+ * @package Civi\Api4
+ */
+class Participant extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Phone.php b/Civi/Api4/Phone.php
new file mode 100644 (file)
index 0000000..5a54069
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Phone entity.
+ *
+ * This entity allows user to add, update, retrieve or delete phone number(s) of a contact.
+ *
+ * Creating a new phone of a contact, requires at minimum a contact's ID and phone number
+ *
+ * @package Civi\Api4
+ */
+class Phone extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Provider/ActionObjectProvider.php b/Civi/Api4/Provider/ActionObjectProvider.php
new file mode 100644 (file)
index 0000000..0169800
--- /dev/null
@@ -0,0 +1,160 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.7                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2015                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Api4\Provider;
+
+use Civi\API\Event\ResolveEvent;
+use Civi\API\Provider\ProviderInterface;
+use Civi\Api4\Generic\AbstractAction;
+use Civi\API\Events;
+use Civi\Api4\Utils\ReflectionUtils;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Accept $apiRequests based on \Civi\API\Action
+ */
+class ActionObjectProvider implements EventSubscriberInterface, ProviderInterface {
+
+  /**
+   * @return array
+   */
+  public static function getSubscribedEvents() {
+    // Using a high priority allows adhoc implementations
+    // to override standard implementations -- which is
+    // handy for testing/mocking.
+    return [
+      Events::RESOLVE => [
+        ['onApiResolve', Events::W_EARLY],
+      ],
+    ];
+  }
+
+  /**
+   * @param \Civi\API\Event\ResolveEvent $event
+   *   API resolution event.
+   */
+  public function onApiResolve(ResolveEvent $event) {
+    $apiRequest = $event->getApiRequest();
+    if ($apiRequest instanceof AbstractAction) {
+      $event->setApiRequest($apiRequest);
+      $event->setApiProvider($this);
+      $event->stopPropagation();
+    }
+  }
+
+  /**
+   * @inheritDoc
+   *
+   * @param \Civi\Api4\Generic\AbstractAction $action
+   *
+   * @return \Civi\Api4\Generic\Result
+   */
+  public function invoke($action) {
+    // Load result class based on @return annotation in the execute() method.
+    $reflection = new \ReflectionClass($action);
+    $doc = ReflectionUtils::getCodeDocs($reflection->getMethod('execute'), 'Method');
+    $resultClass = \CRM_Utils_Array::value('return', $doc, '\\Civi\\Api4\\Generic\\Result');
+    $result = new $resultClass();
+    $result->action = $action->getActionName();
+    $result->entity = $action->getEntityName();
+    $action->_run($result);
+    $this->handleChains($action, $result);
+    return $result;
+  }
+
+  /**
+   * Run each chained action once per row
+   *
+   * @param \Civi\Api4\Generic\AbstractAction $action
+   * @param \Civi\Api4\Generic\Result $result
+   */
+  protected function handleChains($action, $result) {
+    foreach ($action->getChain() as $name => $request) {
+      $request += [NULL, NULL, [], NULL];
+      $request[2]['checkPermissions'] = $action->getCheckPermissions();
+      foreach ($result as &$row) {
+        $row[$name] = $this->runChain($request, $row);
+      }
+    }
+  }
+
+  /**
+   * Run a chained action
+   *
+   * @param $request
+   * @param $row
+   * @return array|\Civi\Api4\Generic\Result|null
+   * @throws \API_Exception
+   */
+  protected function runChain($request, $row) {
+    list($entity, $action, $params, $index) = $request;
+    // Swap out variables in $entity, $action & $params
+    $this->resolveChainLinks($entity, $row);
+    $this->resolveChainLinks($action, $row);
+    $this->resolveChainLinks($params, $row);
+    return (array) civicrm_api4($entity, $action, $params, $index);
+  }
+
+  /**
+   * Swap out variable names
+   *
+   * @param mixed $val
+   * @param array $result
+   */
+  protected function resolveChainLinks(&$val, $result) {
+    if (is_array($val)) {
+      foreach ($val as &$v) {
+        $this->resolveChainLinks($v, $result);
+      }
+    }
+    elseif (is_string($val) && strlen($val) > 1 && substr($val, 0, 1) === '$') {
+      $val = \CRM_Utils_Array::pathGet($result, explode('.', substr($val, 1)));
+    }
+  }
+
+  /**
+   * @inheritDoc
+   * @param int $version
+   * @return array
+   */
+  public function getEntityNames($version) {
+    /** FIXME */
+    return [];
+  }
+
+  /**
+   * @inheritDoc
+   * @param int $version
+   * @param string $entity
+   * @return array
+   */
+  public function getActionNames($version, $entity) {
+    /** FIXME Civi\API\V4\Action\GetActions */
+    return [];
+  }
+
+}
diff --git a/Civi/Api4/Query/Api4SelectQuery.php b/Civi/Api4/Query/Api4SelectQuery.php
new file mode 100644 (file)
index 0000000..f7026ba
--- /dev/null
@@ -0,0 +1,580 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.7                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2015                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Api4\Query;
+
+use Civi\API\SelectQuery;
+use Civi\Api4\Event\Events;
+use Civi\Api4\Event\PostSelectQueryEvent;
+use Civi\Api4\Service\Schema\Joinable\CustomGroupJoinable;
+use Civi\Api4\Service\Schema\Joinable\Joinable;
+use Civi\Api4\Utils\FormattingUtil;
+use Civi\Api4\Utils\CoreUtil;
+use CRM_Core_DAO_AllCoreTables as AllCoreTables;
+use CRM_Utils_Array as UtilsArray;
+
+/**
+ * A query `node` may be in one of three formats:
+ *
+ * * leaf: [$fieldName, $operator, $criteria]
+ * * negated: ['NOT', $node]
+ * * branch: ['OR|NOT', [$node, $node, ...]]
+ *
+ * Leaf operators are one of:
+ *
+ * * '=', '<=', '>=', '>', '<', 'LIKE', "<>", "!=",
+ * * "NOT LIKE", 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN',
+ * * 'IS NOT NULL', or 'IS NULL'.
+ */
+class Api4SelectQuery extends SelectQuery {
+
+  /**
+   * @var int
+   */
+  protected $apiVersion = 4;
+
+  /**
+   * @var array
+   *   Maps select fields to [<table_alias>, <column_alias>]
+   */
+  protected $fkSelectAliases = [];
+
+  /**
+   * @var \Civi\Api4\Service\Schema\Joinable\Joinable[]
+   *   The joinable tables that have been joined so far
+   */
+  protected $joinedTables = [];
+
+  /**
+   * @param string $entity
+   * @param bool $checkPermissions
+   * @param array $fields
+   */
+  public function __construct($entity, $checkPermissions, $fields) {
+    require_once 'api/v3/utils.php';
+    $this->entity = $entity;
+    $this->checkPermissions = $checkPermissions;
+
+    $baoName = CoreUtil::getBAOFromApiName($entity);
+    $bao = new $baoName();
+
+    $this->entityFieldNames = _civicrm_api3_field_names(_civicrm_api3_build_fields_array($bao));
+    $this->apiFieldSpec = (array) $fields;
+
+    \CRM_Utils_SQL_Select::from($this->getTableName($baoName) . ' ' . self::MAIN_TABLE_ALIAS);
+
+    // Add ACLs first to avoid redundant subclauses
+    $this->query->where($this->getAclClause(self::MAIN_TABLE_ALIAS, $baoName));
+  }
+
+  /**
+   * Why walk when you can
+   *
+   * @return array|int
+   */
+  public function run() {
+    $this->addJoins();
+    $this->buildSelectFields();
+    $this->buildWhereClause();
+
+    // Select
+    if (in_array('row_count', $this->select)) {
+      $this->query->select("count(*) as c");
+    }
+    else {
+      foreach ($this->selectFields as $column => $alias) {
+        $this->query->select("$column as `$alias`");
+      }
+      // Order by
+      $this->buildOrderBy();
+    }
+
+    // Limit
+    if (!empty($this->limit) || !empty($this->offset)) {
+      $this->query->limit($this->limit, $this->offset);
+    }
+
+    $results = [];
+    $sql = $this->query->toSQL();
+    $query = \CRM_Core_DAO::executeQuery($sql);
+
+    while ($query->fetch()) {
+      if (in_array('row_count', $this->select)) {
+        $results[]['row_count'] = (int) $query->c;
+        break;
+      }
+      $results[$query->id] = [];
+      foreach ($this->selectFields as $column => $alias) {
+        $returnName = $alias;
+        $alias = str_replace('.', '_', $alias);
+        $results[$query->id][$returnName] = property_exists($query, $alias) ? $query->$alias : NULL;
+      };
+    }
+    $event = new PostSelectQueryEvent($results, $this);
+    \Civi::dispatcher()->dispatch(Events::POST_SELECT_QUERY, $event);
+
+    return $event->getResults();
+  }
+
+  /**
+   * Gets all FK fields and does the required joins
+   */
+  protected function addJoins() {
+    $allFields = array_merge($this->select, array_keys($this->orderBy));
+    $recurse = function($clauses) use (&$allFields, &$recurse) {
+      foreach ($clauses as $clause) {
+        if ($clause[0] === 'NOT' && is_string($clause[1][0])) {
+          $recurse($clause[1][1]);
+        }
+        elseif (in_array($clause[0], ['AND', 'OR', 'NOT'])) {
+          $recurse($clause[1]);
+        }
+        elseif (is_array($clause[0])) {
+          array_walk($clause, $recurse);
+        }
+        else {
+          $allFields[] = $clause[0];
+        }
+      }
+    };
+    $recurse($this->where);
+    $dotFields = array_unique(array_filter($allFields, function ($field) {
+      return strpos($field, '.') !== FALSE;
+    }));
+
+    foreach ($dotFields as $dotField) {
+      $this->joinFK($dotField);
+    }
+  }
+
+  /**
+   * Populate $this->selectFields
+   *
+   * @throws \Civi\API\Exception\UnauthorizedException
+   */
+  protected function buildSelectFields() {
+    $return_all_fields = (empty($this->select) || !is_array($this->select));
+    $return = $return_all_fields ? $this->entityFieldNames : $this->select;
+    if ($return_all_fields || in_array('custom', $this->select)) {
+      foreach (array_keys($this->apiFieldSpec) as $fieldName) {
+        if (strpos($fieldName, 'custom_') === 0) {
+          $return[] = $fieldName;
+        }
+      }
+    }
+
+    // Always select the ID if the table has one.
+    if (array_key_exists('id', $this->apiFieldSpec) || strstr($this->entity, 'Custom_')) {
+      $this->selectFields[self::MAIN_TABLE_ALIAS . ".id"] = "id";
+    }
+
+    // core return fields
+    foreach ($return as $fieldName) {
+      $field = $this->getField($fieldName);
+      if (strpos($fieldName, '.') && !empty($this->fkSelectAliases[$fieldName]) && !array_filter($this->getPathJoinTypes($fieldName))) {
+        $this->selectFields[$this->fkSelectAliases[$fieldName]] = $fieldName;
+      }
+      elseif ($field && in_array($field['name'], $this->entityFieldNames)) {
+        $this->selectFields[self::MAIN_TABLE_ALIAS . "." . UtilsArray::value('column_name', $field, $field['name'])] = $field['name'];
+      }
+    }
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function buildWhereClause() {
+    foreach ($this->where as $clause) {
+      $sql_clause = $this->treeWalkWhereClause($clause);
+      $this->query->where($sql_clause);
+    }
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function buildOrderBy() {
+    foreach ($this->orderBy as $field => $dir) {
+      if ($dir !== 'ASC' && $dir !== 'DESC') {
+        throw new \API_Exception("Invalid sort direction. Cannot order by $field $dir");
+      }
+      if ($this->getField($field)) {
+        $this->query->orderBy(self::MAIN_TABLE_ALIAS . '.' . $field . " $dir");
+      }
+      else {
+        throw new \API_Exception("Invalid sort field. Cannot order by $field $dir");
+      }
+    }
+  }
+
+  /**
+   * Recursively validate and transform a branch or leaf clause array to SQL.
+   *
+   * @param array $clause
+   * @return string SQL where clause
+   *
+   * @uses validateClauseAndComposeSql() to generate the SQL etc.
+   * @todo if an 'and' is nested within and 'and' (or or-in-or) then should
+   * flatten that to be a single list of clauses.
+   */
+  protected function treeWalkWhereClause($clause) {
+    switch ($clause[0]) {
+      case 'OR':
+      case 'AND':
+        // handle branches
+        if (count($clause[1]) === 1) {
+          // a single set so AND|OR is immaterial
+          return $this->treeWalkWhereClause($clause[1][0]);
+        }
+        else {
+          $sql_subclauses = [];
+          foreach ($clause[1] as $subclause) {
+            $sql_subclauses[] = $this->treeWalkWhereClause($subclause);
+          }
+          return '(' . implode("\n" . $clause[0], $sql_subclauses) . ')';
+        }
+
+      case 'NOT':
+        // If we get a group of clauses with no operator, assume AND
+        if (!is_string($clause[1][0])) {
+          $clause[1] = ['AND', $clause[1]];
+        }
+        return 'NOT (' . $this->treeWalkWhereClause($clause[1]) . ')';
+
+      default:
+        return $this->validateClauseAndComposeSql($clause);
+    }
+  }
+
+  /**
+   * Validate and transform a leaf clause array to SQL.
+   * @param array $clause [$fieldName, $operator, $criteria]
+   * @return string SQL
+   * @throws \API_Exception
+   * @throws \Exception
+   */
+  protected function validateClauseAndComposeSql($clause) {
+    // Pad array for unary operators
+    list($key, $operator, $value) = array_pad($clause, 3, NULL);
+    $fieldSpec = $this->getField($key);
+    // derive table and column:
+    $table_name = NULL;
+    $column_name = NULL;
+    if (in_array($key, $this->entityFieldNames)) {
+      $table_name = self::MAIN_TABLE_ALIAS;
+      $column_name = $key;
+    }
+    elseif (strpos($key, '.') && isset($this->fkSelectAliases[$key])) {
+      list($table_name, $column_name) = explode('.', $this->fkSelectAliases[$key]);
+    }
+
+    if (!$table_name || !$column_name) {
+      throw new \API_Exception("Invalid field '$key' in where clause.");
+    }
+
+    FormattingUtil::formatValue($value, $fieldSpec, $this->getEntity());
+
+    $sql_clause = \CRM_Core_DAO::createSQLFilter("`$table_name`.`$column_name`", [$operator => $value]);
+    if ($sql_clause === NULL) {
+      throw new \API_Exception("Invalid value in where clause for field '$key'");
+    }
+    return $sql_clause;
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function getFields() {
+    return $this->apiFieldSpec;
+  }
+
+  /**
+   * Fetch a field from the getFields list
+   *
+   * @param string $fieldName
+   *
+   * @return string|null
+   */
+  protected function getField($fieldName) {
+    if ($fieldName) {
+      $fieldPath = explode('.', $fieldName);
+      if (count($fieldPath) > 1) {
+        $fieldName = implode('.', array_slice($fieldPath, -2));
+      }
+      return UtilsArray::value($fieldName, $this->apiFieldSpec);
+    }
+    return NULL;
+  }
+
+  /**
+   * @param $key
+   * @throws \API_Exception
+   */
+  protected function joinFK($key) {
+    $pathArray = explode('.', $key);
+
+    if (count($pathArray) < 2) {
+      return;
+    }
+
+    /** @var \Civi\Api4\Service\Schema\Joiner $joiner */
+    $joiner = \Civi::container()->get('joiner');
+    $field = array_pop($pathArray);
+    $pathString = implode('.', $pathArray);
+
+    if (!$joiner->canJoin($this, $pathString)) {
+      return;
+    }
+
+    $joinPath = $joiner->join($this, $pathString);
+    /** @var \Civi\Api4\Service\Schema\Joinable\Joinable $lastLink */
+    $lastLink = array_pop($joinPath);
+
+    // Cache field info for retrieval by $this->getField()
+    $prefix = array_pop($pathArray) . '.';
+    if (!isset($this->apiFieldSpec[$prefix . $field])) {
+      $joinEntity = $lastLink->getEntity();
+      // Custom fields are already prefixed
+      if ($lastLink instanceof CustomGroupJoinable) {
+        $prefix = '';
+      }
+      foreach ($lastLink->getEntityFields() as $fieldObject) {
+        $this->apiFieldSpec[$prefix . $fieldObject->getName()] = $fieldObject->toArray() + ['entity' => $joinEntity];
+      }
+    }
+
+    if (!$lastLink->getField($field)) {
+      throw new \API_Exception('Invalid join');
+    }
+
+    // custom groups use aliases for field names
+    if ($lastLink instanceof CustomGroupJoinable) {
+      $field = $lastLink->getSqlColumn($field);
+    }
+
+    $this->fkSelectAliases[$key] = sprintf('%s.%s', $lastLink->getAlias(), $field);
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Schema\Joinable\Joinable $joinable
+   *
+   * @return $this
+   */
+  public function addJoinedTable(Joinable $joinable) {
+    $this->joinedTables[] = $joinable;
+
+    return $this;
+  }
+
+  /**
+   * @return FALSE|string
+   */
+  public function getFrom() {
+    return AllCoreTables::getTableForClass(AllCoreTables::getFullName($this->entity));
+  }
+
+  /**
+   * @return string
+   */
+  public function getEntity() {
+    return $this->entity;
+  }
+
+  /**
+   * @return array
+   */
+  public function getSelect() {
+    return $this->select;
+  }
+
+  /**
+   * @return array
+   */
+  public function getWhere() {
+    return $this->where;
+  }
+
+  /**
+   * @return array
+   */
+  public function getOrderBy() {
+    return $this->orderBy;
+  }
+
+  /**
+   * @return mixed
+   */
+  public function getLimit() {
+    return $this->limit;
+  }
+
+  /**
+   * @return mixed
+   */
+  public function getOffset() {
+    return $this->offset;
+  }
+
+  /**
+   * @return array
+   */
+  public function getSelectFields() {
+    return $this->selectFields;
+  }
+
+  /**
+   * @return bool
+   */
+  public function isFillUniqueFields() {
+    return $this->isFillUniqueFields;
+  }
+
+  /**
+   * @return \CRM_Utils_SQL_Select
+   */
+  public function getQuery() {
+    return $this->query;
+  }
+
+  /**
+   * @return array
+   */
+  public function getJoins() {
+    return $this->joins;
+  }
+
+  /**
+   * @return array
+   */
+  public function getApiFieldSpec() {
+    return $this->apiFieldSpec;
+  }
+
+  /**
+   * @return array
+   */
+  public function getEntityFieldNames() {
+    return $this->entityFieldNames;
+  }
+
+  /**
+   * @return array
+   */
+  public function getAclFields() {
+    return $this->aclFields;
+  }
+
+  /**
+   * @return bool|string
+   */
+  public function getCheckPermissions() {
+    return $this->checkPermissions;
+  }
+
+  /**
+   * @return int
+   */
+  public function getApiVersion() {
+    return $this->apiVersion;
+  }
+
+  /**
+   * @return array
+   */
+  public function getFkSelectAliases() {
+    return $this->fkSelectAliases;
+  }
+
+  /**
+   * @return \Civi\Api4\Service\Schema\Joinable\Joinable[]
+   */
+  public function getJoinedTables() {
+    return $this->joinedTables;
+  }
+
+  /**
+   * @return \Civi\Api4\Service\Schema\Joinable\Joinable
+   */
+  public function getJoinedTable($alias) {
+    foreach ($this->joinedTables as $join) {
+      if ($join->getAlias() == $alias) {
+        return $join;
+      }
+    }
+  }
+
+  /**
+   * Get table name on basis of entity
+   *
+   * @param string $baoName
+   *
+   * @return void
+   */
+  public function getTableName($baoName) {
+    if (strstr($this->entity, 'Custom_')) {
+      $this->query = \CRM_Utils_SQL_Select::from(CoreUtil::getCustomTableByName(str_replace('Custom_', '', $this->entity)) . ' ' . self::MAIN_TABLE_ALIAS);
+      $this->entityFieldNames = array_keys($this->apiFieldSpec);
+    }
+    else {
+      $bao = new $baoName();
+      $this->query = \CRM_Utils_SQL_Select::from($bao->tableName() . ' ' . self::MAIN_TABLE_ALIAS);
+    }
+  }
+
+  /**
+   * Separates a string like 'emails.location_type.label' into an array, where
+   * each value in the array tells whether it is 1-1 or 1-n join type
+   *
+   * @param string $pathString
+   *   Dot separated path to the field
+   *
+   * @return array
+   *   Index is table alias and value is boolean whether is 1-to-many join
+   */
+  public function getPathJoinTypes($pathString) {
+    $pathParts = explode('.', $pathString);
+    // remove field
+    array_pop($pathParts);
+    $path = [];
+    $query = $this;
+    $isMultipleChecker = function($alias) use ($query) {
+      foreach ($query->getJoinedTables() as $table) {
+        if ($table->getAlias() === $alias) {
+          return $table->getJoinType() === Joinable::JOIN_TYPE_ONE_TO_MANY;
+        }
+      }
+      return FALSE;
+    };
+
+    foreach ($pathParts as $part) {
+      $path[$part] = $isMultipleChecker($part);
+    }
+
+    return $path;
+  }
+
+}
diff --git a/Civi/Api4/Relationship.php b/Civi/Api4/Relationship.php
new file mode 100644 (file)
index 0000000..888e98d
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Relationship entity.
+ *
+ * @package Civi\Api4
+ */
+class Relationship extends Generic\DAOEntity {
+
+  /**
+   * @return \Civi\Api4\Action\Relationship\Get
+   */
+  public static function get() {
+    return new \Civi\Api4\Action\Relationship\Get(static::class, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/RelationshipType.php b/Civi/Api4/RelationshipType.php
new file mode 100644 (file)
index 0000000..24a29a2
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * RelationshipType entity.
+ *
+ * @package Civi\Api4
+ */
+class RelationshipType extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Result/ReplaceResult.php b/Civi/Api4/Result/ReplaceResult.php
new file mode 100644 (file)
index 0000000..06e9ef8
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4\Result;
+
+class ReplaceResult extends \Civi\Api4\Generic\Result {
+  /**
+   * @var array
+   */
+  public $deleted = [];
+
+}
diff --git a/Civi/Api4/Route.php b/Civi/Api4/Route.php
new file mode 100644 (file)
index 0000000..9ce29b7
--- /dev/null
@@ -0,0 +1,111 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4;
+
+use Civi\Api4\Generic\BasicGetFieldsAction;
+
+class Route extends \Civi\Api4\Generic\AbstractEntity {
+
+  /**
+   * @return \Civi\Api4\Generic\BasicGetAction
+   */
+  public static function get() {
+    return new \Civi\Api4\Generic\BasicGetAction(__CLASS__, __FUNCTION__, function ($get) {
+      // Pulling from ::items() rather than DB -- because it provides the final/live/altered data.
+      $items = \CRM_Core_Menu::items();
+      $result = [];
+      foreach ($items as $path => $item) {
+        $result[] = ['path' => $path] + $item;
+      }
+      return $result;
+    });
+  }
+
+  public static function getFields() {
+    return new BasicGetFieldsAction(__CLASS__, __FUNCTION__, function() {
+      return [
+        [
+          'name' => 'path',
+          'title' => 'Relative Path',
+          'required' => TRUE,
+          'data_type' => 'String',
+        ],
+        [
+          'name' => 'title',
+          'title' => 'Page Title',
+          'required' => TRUE,
+          'data_type' => 'String',
+        ],
+        [
+          'name' => 'page_callback',
+          'title' => 'Page Callback',
+          'required' => TRUE,
+          'data_type' => 'String',
+        ],
+        [
+          'name' => 'page_arguments',
+          'title' => 'Page Arguments',
+          'required' => FALSE,
+          'data_type' => 'String',
+        ],
+        [
+          'name' => 'path_arguments',
+          'title' => 'Path Arguments',
+          'required' => FALSE,
+          'data_type' => 'String',
+        ],
+        [
+          'name' => 'access_arguments',
+          'title' => 'Access Arguments',
+          'required' => FALSE,
+          'data_type' => 'Array',
+        ],
+      ];
+    });
+  }
+
+  /**
+   * @return array
+   */
+  public static function permissions() {
+    return [
+      "meta" => ["access CiviCRM"],
+      "default" => ["administer CiviCRM"],
+    ];
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/Joinable/ActivityToActivityContactAssigneesJoinable.php b/Civi/Api4/Service/Schema/Joinable/ActivityToActivityContactAssigneesJoinable.php
new file mode 100644 (file)
index 0000000..18fa632
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema\Joinable;
+
+class ActivityToActivityContactAssigneesJoinable extends Joinable {
+  /**
+   * @var string
+   */
+  protected $baseTable = 'civicrm_activity';
+
+  /**
+   * @var string
+   */
+  protected $baseColumn = 'id';
+
+  /**
+   * @param $alias
+   */
+  public function __construct($alias) {
+    $optionValueTable = 'civicrm_option_value';
+    $optionGroupTable = 'civicrm_option_group';
+
+    $subSubSelect = sprintf(
+      'SELECT id FROM %s WHERE name = "%s"',
+      $optionGroupTable,
+      'activity_contacts'
+    );
+
+    $subSelect = sprintf(
+      'SELECT value FROM %s WHERE name = "%s" AND option_group_id = (%s)',
+      $optionValueTable,
+      'Activity Assignees',
+      $subSubSelect
+    );
+
+    $this->addCondition(sprintf('%s.record_type_id = (%s)', $alias, $subSelect));
+    parent::__construct('civicrm_activity_contact', 'activity_id', $alias);
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/Joinable/BridgeJoinable.php b/Civi/Api4/Service/Schema/Joinable/BridgeJoinable.php
new file mode 100644 (file)
index 0000000..f294be8
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema\Joinable;
+
+class BridgeJoinable extends Joinable {
+  /**
+   * @var Joinable
+   */
+  protected $middleLink;
+
+  public function __construct($targetTable, $targetColumn, $alias, Joinable $middleLink) {
+    parent::__construct($targetTable, $targetColumn, $alias);
+    $this->middleLink = $middleLink;
+  }
+
+  /**
+   * @return Joinable
+   */
+  public function getMiddleLink() {
+    return $this->middleLink;
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php b/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php
new file mode 100644 (file)
index 0000000..c74b861
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema\Joinable;
+
+use Civi\Api4\CustomField;
+
+class CustomGroupJoinable extends Joinable {
+
+  /**
+   * @var string
+   */
+  protected $joinSide = self::JOIN_SIDE_LEFT;
+
+  /**
+   * @var string
+   *
+   * Name of the custom field column.
+   */
+  protected $columns;
+
+  /**
+   * @param $targetTable
+   * @param $alias
+   * @param bool $isMultiRecord
+   * @param string $entity
+   * @param string $columns
+   */
+  public function __construct($targetTable, $alias, $isMultiRecord, $entity, $columns) {
+    $this->entity = $entity;
+    $this->columns = $columns;
+    parent::__construct($targetTable, 'entity_id', $alias);
+    $this->joinType = $isMultiRecord ?
+      self::JOIN_TYPE_ONE_TO_MANY : self::JOIN_TYPE_ONE_TO_ONE;
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function getEntityFields() {
+    if (!$this->entityFields) {
+      $fields = CustomField::get()
+        ->setCheckPermissions(FALSE)
+        ->setSelect(['custom_group.name', 'custom_group_id', 'name', 'label', 'data_type', 'html_type', 'is_required', 'is_searchable', 'is_search_range', 'weight', 'is_active', 'is_view', 'option_group_id', 'default_value', 'date_format', 'time_format', 'start_date_years', 'end_date_years'])
+        ->addWhere('custom_group.table_name', '=', $this->getTargetTable())
+        ->execute();
+      foreach ($fields as $field) {
+        $this->entityFields[] = \Civi\Api4\Service\Spec\SpecFormatter::arrayToField($field, $this->getEntity());
+      }
+    }
+    return $this->entityFields;
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function getField($fieldName) {
+    foreach ($this->getEntityFields() as $field) {
+      $name = $field->getName();
+      if ($name === $fieldName || strrpos($name, '.' . $fieldName) === strlen($name) - strlen($fieldName) - 1) {
+        return $field;
+      }
+    }
+    return NULL;
+  }
+
+  /**
+   * @return string
+   */
+  public function getSqlColumn($fieldName) {
+    return $this->columns[$fieldName];
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/Joinable/Joinable.php b/Civi/Api4/Service/Schema/Joinable/Joinable.php
new file mode 100644 (file)
index 0000000..18478c8
--- /dev/null
@@ -0,0 +1,312 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema\Joinable;
+
+use Civi\Api4\Utils\CoreUtil;
+use CRM_Core_DAO_AllCoreTables as AllCoreTables;
+
+class Joinable {
+
+  const JOIN_SIDE_LEFT = 'LEFT';
+  const JOIN_SIDE_INNER = 'INNER';
+
+  const JOIN_TYPE_ONE_TO_ONE = '1_to_1';
+  const JOIN_TYPE_MANY_TO_ONE = 'n_to_1';
+  const JOIN_TYPE_ONE_TO_MANY = '1_to_n';
+
+  /**
+   * @var string
+   */
+  protected $baseTable;
+
+  /**
+   * @var string
+   */
+  protected $baseColumn;
+
+  /**
+   * @var string
+   */
+  protected $targetTable;
+
+  /**
+   * @var string
+   *
+   * Name (or alias) of the target column)
+   */
+  protected $targetColumn;
+
+  /**
+   * @var string
+   */
+  protected $alias;
+
+  /**
+   * @var array
+   */
+  protected $conditions = [];
+
+  /**
+   * @var string
+   */
+  protected $joinSide = self::JOIN_SIDE_LEFT;
+
+  /**
+   * @var int
+   */
+  protected $joinType = self::JOIN_TYPE_ONE_TO_ONE;
+
+  /**
+   * @var string
+   */
+  protected $entity;
+
+  /**
+   * @var array
+   */
+  protected $entityFields;
+
+  /**
+   * @param $targetTable
+   * @param $targetColumn
+   * @param string|null $alias
+   */
+  public function __construct($targetTable, $targetColumn, $alias = NULL) {
+    $this->targetTable = $targetTable;
+    $this->targetColumn = $targetColumn;
+    if (!$this->entity) {
+      $this->entity = CoreUtil::getApiNameFromTableName($targetTable);
+    }
+    $this->alias = $alias ?: str_replace('civicrm_', '', $targetTable);
+  }
+
+  /**
+   * Gets conditions required when joining to a base table
+   *
+   * @param string|null $baseTableAlias
+   *   Name of the base table, if aliased.
+   *
+   * @return array
+   */
+  public function getConditionsForJoin($baseTableAlias = NULL) {
+    $baseCondition = sprintf(
+      '%s.%s =  %s.%s',
+      $baseTableAlias ?: $this->baseTable,
+      $this->baseColumn,
+      $this->getAlias(),
+      $this->targetColumn
+    );
+
+    return array_merge([$baseCondition], $this->conditions);
+  }
+
+  /**
+   * @return string
+   */
+  public function getBaseTable() {
+    return $this->baseTable;
+  }
+
+  /**
+   * @param string $baseTable
+   *
+   * @return $this
+   */
+  public function setBaseTable($baseTable) {
+    $this->baseTable = $baseTable;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getBaseColumn() {
+    return $this->baseColumn;
+  }
+
+  /**
+   * @param string $baseColumn
+   *
+   * @return $this
+   */
+  public function setBaseColumn($baseColumn) {
+    $this->baseColumn = $baseColumn;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getAlias() {
+    return $this->alias;
+  }
+
+  /**
+   * @param string $alias
+   *
+   * @return $this
+   */
+  public function setAlias($alias) {
+    $this->alias = $alias;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getTargetTable() {
+    return $this->targetTable;
+  }
+
+  /**
+   * @return string
+   */
+  public function getTargetColumn() {
+    return $this->targetColumn;
+  }
+
+  /**
+   * @return string
+   */
+  public function getEntity() {
+    return $this->entity;
+  }
+
+  /**
+   * @param $condition
+   *
+   * @return $this
+   */
+  public function addCondition($condition) {
+    $this->conditions[] = $condition;
+
+    return $this;
+  }
+
+  /**
+   * @return array
+   */
+  public function getExtraJoinConditions() {
+    return $this->conditions;
+  }
+
+  /**
+   * @param array $conditions
+   *
+   * @return $this
+   */
+  public function setConditions($conditions) {
+    $this->conditions = $conditions;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getJoinSide() {
+    return $this->joinSide;
+  }
+
+  /**
+   * @param string $joinSide
+   *
+   * @return $this
+   */
+  public function setJoinSide($joinSide) {
+    $this->joinSide = $joinSide;
+
+    return $this;
+  }
+
+  /**
+   * @return int
+   */
+  public function getJoinType() {
+    return $this->joinType;
+  }
+
+  /**
+   * @param int $joinType
+   *
+   * @return $this
+   */
+  public function setJoinType($joinType) {
+    $this->joinType = $joinType;
+
+    return $this;
+  }
+
+  /**
+   * @return array
+   */
+  public function toArray() {
+    return get_object_vars($this);
+  }
+
+  /**
+   * @return \Civi\Api4\Service\Spec\FieldSpec[]
+   */
+  public function getEntityFields() {
+    if (!$this->entityFields) {
+      $bao = AllCoreTables::getClassForTable($this->getTargetTable());
+      if ($bao) {
+        foreach ($bao::fields() as $field) {
+          $this->entityFields[] = \Civi\Api4\Service\Spec\SpecFormatter::arrayToField($field, $this->getEntity());
+        }
+      }
+    }
+    return $this->entityFields;
+  }
+
+  /**
+   * @return \Civi\Api4\Service\Spec\FieldSpec|NULL
+   */
+  public function getField($fieldName) {
+    foreach ($this->getEntityFields() as $field) {
+      if ($field->getName() === $fieldName) {
+        return $field;
+      }
+    }
+    return NULL;
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/Joinable/OptionValueJoinable.php b/Civi/Api4/Service/Schema/Joinable/OptionValueJoinable.php
new file mode 100644 (file)
index 0000000..b5ba1f0
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema\Joinable;
+
+class OptionValueJoinable extends Joinable {
+  /**
+   * @var string
+   */
+  protected $optionGroupName;
+
+  /**
+   * @param string $optionGroup
+   *   Can be either the option group name or ID
+   * @param string|null $alias
+   *   The join alias
+   * @param string $keyColumn
+   *   Which column to use to join, defaults to "value"
+   */
+  public function __construct($optionGroup, $alias = NULL, $keyColumn = 'value') {
+    $this->optionGroupName = $optionGroup;
+    $optionValueTable = 'civicrm_option_value';
+
+    // default join alias to option group name, e.g. activity_type
+    if (!$alias && !is_numeric($optionGroup)) {
+      $alias = $optionGroup;
+    }
+
+    parent::__construct($optionValueTable, $keyColumn, $alias);
+
+    if (!is_numeric($optionGroup)) {
+      $subSelect = 'SELECT id FROM civicrm_option_group WHERE name = "%s"';
+      $subQuery = sprintf($subSelect, $optionGroup);
+      $condition = sprintf('%s.option_group_id = (%s)', $alias, $subQuery);
+    }
+    else {
+      $condition = sprintf('%s.option_group_id = %d', $alias, $optionGroup);
+    }
+
+    $this->addCondition($condition);
+  }
+
+  /**
+   * The existing condition must also be re-aliased
+   *
+   * @param string $alias
+   *
+   * @return $this
+   */
+  public function setAlias($alias) {
+    foreach ($this->conditions as $index => $condition) {
+      $search = $this->alias . '.';
+      $replace = $alias . '.';
+      $this->conditions[$index] = str_replace($search, $replace, $condition);
+    }
+
+    parent::setAlias($alias);
+
+    return $this;
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/Joiner.php b/Civi/Api4/Service/Schema/Joiner.php
new file mode 100644 (file)
index 0000000..99f3b5b
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema;
+
+use Civi\Api4\Query\Api4SelectQuery;
+
+class Joiner {
+  /**
+   * @var SchemaMap
+   */
+  protected $schemaMap;
+
+  /**
+   * @var \Civi\Api4\Service\Schema\Joinable\Joinable[][]
+   */
+  protected $cache = [];
+
+  /**
+   * @param SchemaMap $schemaMap
+   */
+  public function __construct(SchemaMap $schemaMap) {
+    $this->schemaMap = $schemaMap;
+  }
+
+  /**
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   *   The query object to do the joins on
+   * @param string $joinPath
+   *   A path of aliases in dot notation, e.g. contact.phone
+   * @param string $side
+   *   Can be LEFT or INNER
+   *
+   * @throws \Exception
+   * @return \Civi\Api4\Service\Schema\Joinable\Joinable[]
+   *   The path used to make the join
+   */
+  public function join(Api4SelectQuery $query, $joinPath, $side = 'LEFT') {
+    $fullPath = $this->getPath($query->getFrom(), $joinPath);
+    $baseTable = $query::MAIN_TABLE_ALIAS;
+
+    foreach ($fullPath as $link) {
+      $target = $link->getTargetTable();
+      $alias = $link->getAlias();
+      $conditions = $link->getConditionsForJoin($baseTable);
+
+      $query->join($side, $target, $alias, $conditions);
+      $query->addJoinedTable($link);
+
+      $baseTable = $link->getAlias();
+    }
+
+    return $fullPath;
+  }
+
+  /**
+   * @param \Civi\Api4\Query\Api4SelectQuery $query
+   * @param $joinPath
+   *
+   * @return bool
+   */
+  public function canJoin(Api4SelectQuery $query, $joinPath) {
+    return !empty($this->getPath($query->getFrom(), $joinPath));
+  }
+
+  /**
+   * @param string $baseTable
+   * @param string $joinPath
+   *
+   * @return array
+   * @throws \Exception
+   */
+  protected function getPath($baseTable, $joinPath) {
+    $cacheKey = sprintf('%s.%s', $baseTable, $joinPath);
+    if (!isset($this->cache[$cacheKey])) {
+      $stack = explode('.', $joinPath);
+      $fullPath = [];
+
+      foreach ($stack as $key => $targetAlias) {
+        $links = $this->schemaMap->getPath($baseTable, $targetAlias);
+
+        if (empty($links)) {
+          throw new \Exception(sprintf('Cannot join %s to %s', $baseTable, $targetAlias));
+        }
+        else {
+          $fullPath = array_merge($fullPath, $links);
+          $lastLink = end($links);
+          $baseTable = $lastLink->getTargetTable();
+        }
+      }
+
+      $this->cache[$cacheKey] = $fullPath;
+    }
+
+    return $this->cache[$cacheKey];
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/SchemaMap.php b/Civi/Api4/Service/Schema/SchemaMap.php
new file mode 100644 (file)
index 0000000..0ca1679
--- /dev/null
@@ -0,0 +1,174 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema;
+
+use Civi\Api4\Service\Schema\Joinable\BridgeJoinable;
+
+class SchemaMap {
+
+  const MAX_JOIN_DEPTH = 3;
+
+  /**
+   * @var Table[]
+   */
+  protected $tables = [];
+
+  /**
+   * @param $baseTableName
+   * @param $targetTableAlias
+   *
+   * @return \Civi\Api4\Service\Schema\Joinable\Joinable[]
+   *   Array of links to the target table, empty if no path found
+   */
+  public function getPath($baseTableName, $targetTableAlias) {
+    $table = $this->getTableByName($baseTableName);
+    $path = [];
+
+    if (!$table) {
+      return $path;
+    }
+
+    $this->findPaths($table, $targetTableAlias, 1, $path);
+
+    foreach ($path as $index => $pathLink) {
+      if ($pathLink instanceof BridgeJoinable) {
+        $start = array_slice($path, 0, $index);
+        $middle = [$pathLink->getMiddleLink()];
+        $end = array_slice($path, $index, count($path) - $index);
+        $path = array_merge($start, $middle, $end);
+      }
+    }
+
+    return $path;
+  }
+
+  /**
+   * @return Table[]
+   */
+  public function getTables() {
+    return $this->tables;
+  }
+
+  /**
+   * @param $name
+   *
+   * @return Table|null
+   */
+  public function getTableByName($name) {
+    foreach ($this->tables as $table) {
+      if ($table->getName() === $name) {
+        return $table;
+      }
+    }
+
+    return NULL;
+  }
+
+  /**
+   * Adds a table to the schema map if it has not already been added
+   *
+   * @param Table $table
+   *
+   * @return $this
+   */
+  public function addTable(Table $table) {
+    if (!$this->getTableByName($table->getName())) {
+      $this->tables[] = $table;
+    }
+
+    return $this;
+  }
+
+  /**
+   * @param array $tables
+   */
+  public function addTables(array $tables) {
+    foreach ($tables as $table) {
+      $this->addTable($table);
+    }
+  }
+
+  /**
+   * Recursive function to traverse the schema looking for a path
+   *
+   * @param Table $table
+   *   The current table to base fromm
+   * @param string $target
+   *   The target joinable table alias
+   * @param int $depth
+   *   The current level of recursion which reflects the number of joins needed
+   * @param \Civi\Api4\Service\Schema\Joinable\Joinable[] $path
+   *   (By-reference) The possible paths to the target table
+   * @param \Civi\Api4\Service\Schema\Joinable\Joinable[] $currentPath
+   *   For internal use only to track the path to reach the target table
+   */
+  private function findPaths(Table $table, $target, $depth, &$path, $currentPath = []
+  ) {
+    static $visited = [];
+
+    // reset if new call
+    if ($depth === 1) {
+      $visited = [];
+    }
+
+    $canBeShorter = empty($path) || count($currentPath) + 1 < count($path);
+    $tooFar = $depth > self::MAX_JOIN_DEPTH;
+    $beenHere = in_array($table->getName(), $visited);
+
+    if ($tooFar || $beenHere || !$canBeShorter) {
+      return;
+    }
+
+    // prevent circular reference
+    $visited[] = $table->getName();
+
+    foreach ($table->getExternalLinks() as $link) {
+      if ($link->getAlias() === $target) {
+        $path = array_merge($currentPath, [$link]);
+      }
+      else {
+        $linkTable = $this->getTableByName($link->getTargetTable());
+        if ($linkTable) {
+          $nextStep = array_merge($currentPath, [$link]);
+          $this->findPaths($linkTable, $target, $depth + 1, $path, $nextStep);
+        }
+      }
+    }
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/SchemaMapBuilder.php b/Civi/Api4/Service/Schema/SchemaMapBuilder.php
new file mode 100644 (file)
index 0000000..76d11bc
--- /dev/null
@@ -0,0 +1,252 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema;
+
+use Civi\Api4\Entity;
+use Civi\Api4\Event\Events;
+use Civi\Api4\Event\SchemaMapBuildEvent;
+use Civi\Api4\Service\Schema\Joinable\CustomGroupJoinable;
+use Civi\Api4\Service\Schema\Joinable\Joinable;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Civi\Api4\Service\Schema\Joinable\OptionValueJoinable;
+use CRM_Core_DAO_AllCoreTables as AllCoreTables;
+use CRM_Utils_Array as UtilsArray;
+
+class SchemaMapBuilder {
+  /**
+   * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
+   */
+  protected $dispatcher;
+  /**
+   * @var array
+   */
+  protected $apiEntities;
+
+  /**
+   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher
+   */
+  public function __construct(EventDispatcherInterface $dispatcher) {
+    $this->dispatcher = $dispatcher;
+    $this->apiEntities = array_keys((array) Entity::get()->setCheckPermissions(FALSE)->addSelect('name')->execute()->indexBy('name'));
+  }
+
+  /**
+   * @return SchemaMap
+   */
+  public function build() {
+    $map = new SchemaMap();
+    $this->loadTables($map);
+
+    $event = new SchemaMapBuildEvent($map);
+    $this->dispatcher->dispatch(Events::SCHEMA_MAP_BUILD, $event);
+
+    return $map;
+  }
+
+  /**
+   * Add all tables and joins
+   *
+   * @param SchemaMap $map
+   */
+  private function loadTables(SchemaMap $map) {
+    /** @var \CRM_Core_DAO $daoName */
+    foreach (AllCoreTables::get() as $daoName => $data) {
+      $table = new Table($data['table']);
+      foreach ($daoName::fields() as $field => $fieldData) {
+        $this->addJoins($table, $field, $fieldData);
+      }
+      $map->addTable($table);
+      if (in_array($data['name'], $this->apiEntities)) {
+        $this->addCustomFields($map, $table, $data['name']);
+      }
+    }
+
+    $this->addBackReferences($map);
+  }
+
+  /**
+   * @param Table $table
+   * @param string $field
+   * @param array $data
+   */
+  private function addJoins(Table $table, $field, array $data) {
+    $fkClass = UtilsArray::value('FKClassName', $data);
+
+    // can there be multiple methods e.g. pseudoconstant and fkclass
+    if ($fkClass) {
+      $tableName = AllCoreTables::getTableForClass($fkClass);
+      $fkKey = UtilsArray::value('FKKeyColumn', $data, 'id');
+      $alias = str_replace('_id', '', $field);
+      $joinable = new Joinable($tableName, $fkKey, $alias);
+      $joinable->setJoinType($joinable::JOIN_TYPE_MANY_TO_ONE);
+      $table->addTableLink($field, $joinable);
+    }
+    elseif (UtilsArray::value('pseudoconstant', $data)) {
+      $this->addPseudoConstantJoin($table, $field, $data);
+    }
+  }
+
+  /**
+   * @param Table $table
+   * @param string $field
+   * @param array $data
+   */
+  private function addPseudoConstantJoin(Table $table, $field, array $data) {
+    $pseudoConstant = UtilsArray::value('pseudoconstant', $data);
+    $tableName = UtilsArray::value('table', $pseudoConstant);
+    $optionGroupName = UtilsArray::value('optionGroupName', $pseudoConstant);
+    $keyColumn = UtilsArray::value('keyColumn', $pseudoConstant, 'id');
+
+    if ($tableName) {
+      $alias = str_replace('civicrm_', '', $tableName);
+      $joinable = new Joinable($tableName, $keyColumn, $alias);
+      $condition = UtilsArray::value('condition', $pseudoConstant);
+      if ($condition) {
+        $joinable->addCondition($condition);
+      }
+      $table->addTableLink($field, $joinable);
+    }
+    elseif ($optionGroupName) {
+      $keyColumn = UtilsArray::value('keyColumn', $pseudoConstant, 'value');
+      $joinable = new OptionValueJoinable($optionGroupName, NULL, $keyColumn);
+
+      if (!empty($data['serialize'])) {
+        $joinable->setJoinType($joinable::JOIN_TYPE_ONE_TO_MANY);
+      }
+
+      $table->addTableLink($field, $joinable);
+    }
+  }
+
+  /**
+   * Loop through existing links and provide link from the other side
+   *
+   * @param SchemaMap $map
+   */
+  private function addBackReferences(SchemaMap $map) {
+    foreach ($map->getTables() as $table) {
+      foreach ($table->getTableLinks() as $link) {
+        // there are too many possible joins from option value so skip
+        if ($link instanceof OptionValueJoinable) {
+          continue;
+        }
+
+        $target = $map->getTableByName($link->getTargetTable());
+        $tableName = $link->getBaseTable();
+        $plural = str_replace('civicrm_', '', $this->getPlural($tableName));
+        $joinable = new Joinable($tableName, $link->getBaseColumn(), $plural);
+        $joinable->setJoinType($joinable::JOIN_TYPE_ONE_TO_MANY);
+        $target->addTableLink($link->getTargetColumn(), $joinable);
+      }
+    }
+  }
+
+  /**
+   * Simple implementation of pluralization.
+   * Could be replaced with symfony/inflector
+   *
+   * @param string $singular
+   *
+   * @return string
+   */
+  private function getPlural($singular) {
+    $last_letter = substr($singular, -1);
+    switch ($last_letter) {
+      case 'y':
+        return substr($singular, 0, -1) . 'ies';
+
+      case 's':
+        return $singular . 'es';
+
+      default:
+        return $singular . 's';
+    }
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Schema\SchemaMap $map
+   * @param \Civi\Api4\Service\Schema\Table $baseTable
+   * @param string $entity
+   */
+  private function addCustomFields(SchemaMap $map, Table $baseTable, $entity) {
+    // Don't be silly
+    if (!array_key_exists($entity, \CRM_Core_SelectValues::customGroupExtends())) {
+      return;
+    }
+    $queryEntity = (array) $entity;
+    if ($entity == 'Contact') {
+      $queryEntity = ['Contact', 'Individual', 'Organization', 'Household'];
+    }
+    $fieldData = \CRM_Utils_SQL_Select::from('civicrm_custom_field f')
+      ->join('custom_group', 'INNER JOIN civicrm_custom_group g ON g.id = f.custom_group_id')
+      ->select(['g.name as custom_group_name', 'g.table_name', 'g.is_multiple', 'f.name', 'label', 'column_name', 'option_group_id'])
+      ->where('g.extends IN (@entity)', ['@entity' => $queryEntity])
+      ->where('g.is_active')
+      ->where('f.is_active')
+      ->execute();
+
+    $links = [];
+
+    while ($fieldData->fetch()) {
+      $tableName = $fieldData->table_name;
+
+      $customTable = $map->getTableByName($tableName);
+      if (!$customTable) {
+        $customTable = new Table($tableName);
+      }
+
+      if (!empty($fieldData->option_group_id)) {
+        $optionValueJoinable = new OptionValueJoinable($fieldData->option_group_id, $fieldData->label);
+        $customTable->addTableLink($fieldData->column_name, $optionValueJoinable);
+      }
+
+      $map->addTable($customTable);
+
+      $alias = $fieldData->custom_group_name;
+      $links[$alias]['tableName'] = $tableName;
+      $links[$alias]['isMultiple'] = !empty($fieldData->is_multiple);
+      $links[$alias]['columns'][$fieldData->name] = $fieldData->column_name;
+    }
+
+    foreach ($links as $alias => $link) {
+      $joinable = new CustomGroupJoinable($link['tableName'], $alias, $link['isMultiple'], $entity, $link['columns']);
+      $baseTable->addTableLink('id', $joinable);
+    }
+  }
+
+}
diff --git a/Civi/Api4/Service/Schema/Table.php b/Civi/Api4/Service/Schema/Table.php
new file mode 100644 (file)
index 0000000..a5a8182
--- /dev/null
@@ -0,0 +1,163 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Schema;
+
+use Civi\Api4\Service\Schema\Joinable\Joinable;
+
+class Table {
+
+  /**
+   * @var string
+   */
+  protected $name;
+
+  /**
+   * @var \Civi\Api4\Service\Schema\Joinable\Joinable[]
+   *   Array of links to other tables
+   */
+  protected $tableLinks = [];
+
+  /**
+   * @param $name
+   */
+  public function __construct($name) {
+    $this->name = $name;
+  }
+
+  /**
+   * @return string
+   */
+  public function getName() {
+    return $this->name;
+  }
+
+  /**
+   * @param string $name
+   *
+   * @return $this
+   */
+  public function setName($name) {
+    $this->name = $name;
+
+    return $this;
+  }
+
+  /**
+   * @return \Civi\Api4\Service\Schema\Joinable\Joinable[]
+   */
+  public function getTableLinks() {
+    return $this->tableLinks;
+  }
+
+  /**
+   * @return \Civi\Api4\Service\Schema\Joinable\Joinable[]
+   *   Only those links that are not joining the table to itself
+   */
+  public function getExternalLinks() {
+    return array_filter($this->tableLinks, function (Joinable $joinable) {
+      return $joinable->getTargetTable() !== $this->getName();
+    });
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Schema\Joinable\Joinable $linkToRemove
+   */
+  public function removeLink(Joinable $linkToRemove) {
+    foreach ($this->tableLinks as $index => $link) {
+      if ($link === $linkToRemove) {
+        unset($this->tableLinks[$index]);
+      }
+    }
+  }
+
+  /**
+   * @param string $baseColumn
+   * @param \Civi\Api4\Service\Schema\Joinable\Joinable $joinable
+   *
+   * @return $this
+   */
+  public function addTableLink($baseColumn, Joinable $joinable) {
+    $target = $joinable->getTargetTable();
+    $targetCol = $joinable->getTargetColumn();
+    $alias = $joinable->getAlias();
+
+    if (!$this->hasLink($target, $targetCol, $alias)) {
+      if (!$joinable->getBaseTable()) {
+        $joinable->setBaseTable($this->getName());
+      }
+      if (!$joinable->getBaseColumn()) {
+        $joinable->setBaseColumn($baseColumn);
+      }
+      $this->tableLinks[] = $joinable;
+    }
+
+    return $this;
+  }
+
+  /**
+   * @param mixed $tableLinks
+   *
+   * @return $this
+   */
+  public function setTableLinks($tableLinks) {
+    $this->tableLinks = $tableLinks;
+
+    return $this;
+  }
+
+  /**
+   * @param $target
+   * @param $targetCol
+   * @param $alias
+   *
+   * @return bool
+   */
+  private function hasLink($target, $targetCol, $alias) {
+    foreach ($this->tableLinks as $link) {
+      if ($link->getTargetTable() === $target
+        && $link->getTargetColumn() === $targetCol
+        && $link->getAlias() === $alias
+      ) {
+        return TRUE;
+      }
+    }
+
+    return FALSE;
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/CustomFieldSpec.php b/Civi/Api4/Service/Spec/CustomFieldSpec.php
new file mode 100644 (file)
index 0000000..d3f9423
--- /dev/null
@@ -0,0 +1,153 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec;
+
+class CustomFieldSpec extends FieldSpec {
+  /**
+   * @var int
+   */
+  protected $customFieldId;
+
+  /**
+   * @var int
+   */
+  protected $customGroup;
+
+  /**
+   * @var string
+   */
+  protected $tableName;
+
+  /**
+   * @var string
+   */
+  protected $columnName;
+
+  /**
+   * @inheritDoc
+   */
+  public function setDataType($dataType) {
+    switch ($dataType) {
+      case 'ContactReference':
+        $this->setFkEntity('Contact');
+        $dataType = 'Integer';
+        break;
+
+      case 'File':
+      case 'StateProvince':
+      case 'Country':
+        $this->setFkEntity($dataType);
+        $dataType = 'Integer';
+        break;
+    }
+    return parent::setDataType($dataType);
+  }
+
+  /**
+   * @return int
+   */
+  public function getCustomFieldId() {
+    return $this->customFieldId;
+  }
+
+  /**
+   * @param int $customFieldId
+   *
+   * @return $this
+   */
+  public function setCustomFieldId($customFieldId) {
+    $this->customFieldId = $customFieldId;
+
+    return $this;
+  }
+
+  /**
+   * @return int
+   */
+  public function getCustomGroupName() {
+    return $this->customGroup;
+  }
+
+  /**
+   * @param string $customGroupName
+   *
+   * @return $this
+   */
+  public function setCustomGroupName($customGroupName) {
+    $this->customGroup = $customGroupName;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getCustomTableName() {
+    return $this->tableName;
+  }
+
+  /**
+   * @param string $customFieldColumnName
+   *
+   * @return $this
+   */
+  public function setCustomTableName($customFieldColumnName) {
+    $this->tableName = $customFieldColumnName;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getCustomFieldColumnName() {
+    return $this->columnName;
+  }
+
+  /**
+   * @param string $customFieldColumnName
+   *
+   * @return $this
+   */
+  public function setCustomFieldColumnName($customFieldColumnName) {
+    $this->columnName = $customFieldColumnName;
+
+    return $this;
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/FieldSpec.php b/Civi/Api4/Service/Spec/FieldSpec.php
new file mode 100644 (file)
index 0000000..7a44a1d
--- /dev/null
@@ -0,0 +1,402 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec;
+
+use Civi\Api4\Utils\CoreUtil;
+
+class FieldSpec {
+  /**
+   * @var mixed
+   */
+  protected $defaultValue;
+
+  /**
+   * @var string
+   */
+  protected $name;
+
+  /**
+   * @var string
+   */
+  protected $title;
+
+  /**
+   * @var string
+   */
+  protected $entity;
+
+  /**
+   * @var string
+   */
+  protected $description;
+
+  /**
+   * @var bool
+   */
+  protected $required = FALSE;
+
+  /**
+   * @var bool
+   */
+  protected $requiredIf;
+
+  /**
+   * @var array|boolean
+   */
+  protected $options;
+
+  /**
+   * @var string
+   */
+  protected $dataType;
+
+  /**
+   * @var string
+   */
+  protected $inputType;
+
+  /**
+   * @var array
+   */
+  protected $inputAttrs = [];
+
+  /**
+   * @var string
+   */
+  protected $fkEntity;
+
+  /**
+   * @var int
+   */
+  protected $serialize;
+
+  /**
+   * Aliases for the valid data types
+   *
+   * @var array
+   */
+  public static $typeAliases = [
+    'Int' => 'Integer',
+    'Link' => 'Url',
+    'Memo' => 'Text',
+  ];
+
+  /**
+   * @param string $name
+   * @param string $entity
+   * @param string $dataType
+   */
+  public function __construct($name, $entity, $dataType = 'String') {
+    $this->entity = $entity;
+    $this->setName($name);
+    $this->setDataType($dataType);
+  }
+
+  /**
+   * @return mixed
+   */
+  public function getDefaultValue() {
+    return $this->defaultValue;
+  }
+
+  /**
+   * @param mixed $defaultValue
+   *
+   * @return $this
+   */
+  public function setDefaultValue($defaultValue) {
+    $this->defaultValue = $defaultValue;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getName() {
+    return $this->name;
+  }
+
+  /**
+   * @param string $name
+   *
+   * @return $this
+   */
+  public function setName($name) {
+    $this->name = $name;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getTitle() {
+    return $this->title;
+  }
+
+  /**
+   * @param string $title
+   *
+   * @return $this
+   */
+  public function setTitle($title) {
+    $this->title = $title;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getEntity() {
+    return $this->entity;
+  }
+
+  /**
+   * @return string
+   */
+  public function getDescription() {
+    return $this->description;
+  }
+
+  /**
+   * @param string $description
+   *
+   * @return $this
+   */
+  public function setDescription($description) {
+    $this->description = $description;
+
+    return $this;
+  }
+
+  /**
+   * @return bool
+   */
+  public function isRequired() {
+    return $this->required;
+  }
+
+  /**
+   * @param bool $required
+   *
+   * @return $this
+   */
+  public function setRequired($required) {
+    $this->required = $required;
+
+    return $this;
+  }
+
+  /**
+   * @return bool
+   */
+  public function getRequiredIf() {
+    return $this->requiredIf;
+  }
+
+  /**
+   * @param bool $requiredIf
+   *
+   * @return $this
+   */
+  public function setRequiredIf($requiredIf) {
+    $this->requiredIf = $requiredIf;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getDataType() {
+    return $this->dataType;
+  }
+
+  /**
+   * @param $dataType
+   *
+   * @return $this
+   * @throws \Exception
+   */
+  public function setDataType($dataType) {
+    if (array_key_exists($dataType, self::$typeAliases)) {
+      $dataType = self::$typeAliases[$dataType];
+    }
+
+    if (!in_array($dataType, $this->getValidDataTypes())) {
+      throw new \Exception(sprintf('Invalid data type "%s', $dataType));
+    }
+
+    $this->dataType = $dataType;
+
+    return $this;
+  }
+
+  /**
+   * @return int
+   */
+  public function getSerialize() {
+    return $this->serialize;
+  }
+
+  /**
+   * @param int|null $serialize
+   * @return $this
+   */
+  public function setSerialize($serialize) {
+    $this->serialize = $serialize;
+
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getInputType() {
+    return $this->inputType;
+  }
+
+  /**
+   * @param string $inputType
+   * @return $this
+   */
+  public function setInputType($inputType) {
+    $this->inputType = $inputType;
+
+    return $this;
+  }
+
+  /**
+   * @return array
+   */
+  public function getInputAttrs() {
+    return $this->inputAttrs;
+  }
+
+  /**
+   * @param array $inputAttrs
+   * @return $this
+   */
+  public function setInputAttrs($inputAttrs) {
+    $this->inputAttrs = $inputAttrs;
+
+    return $this;
+  }
+
+  /**
+   * Add valid types that are not not part of \CRM_Utils_Type::dataTypes
+   *
+   * @return array
+   */
+  private function getValidDataTypes() {
+    $extraTypes = ['Boolean', 'Text', 'Float', 'Url', 'Array'];
+    $extraTypes = array_combine($extraTypes, $extraTypes);
+
+    return array_merge(\CRM_Utils_Type::dataTypes(), $extraTypes);
+  }
+
+  /**
+   * @return array
+   */
+  public function getOptions() {
+    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 = CoreUtil::getBAOFromApiName($this->getEntity());
+      $options = $bao::buildOptions($fieldName);
+
+      if (!is_array($options) || !$options) {
+        $options = FALSE;
+      }
+
+      $this->setOptions($options);
+    }
+    return $this->options;
+  }
+
+  /**
+   * @param array|bool $options
+   *
+   * @return $this
+   */
+  public function setOptions($options) {
+    $this->options = $options;
+    return $this;
+  }
+
+  /**
+   * @return string
+   */
+  public function getFkEntity() {
+    return $this->fkEntity;
+  }
+
+  /**
+   * @param string $fkEntity
+   *
+   * @return $this
+   */
+  public function setFkEntity($fkEntity) {
+    $this->fkEntity = $fkEntity;
+
+    return $this;
+  }
+
+  /**
+   * @param array $values
+   * @return array
+   */
+  public function toArray($values = []) {
+    $ret = [];
+    foreach (get_object_vars($this) as $key => $val) {
+      $key = strtolower(preg_replace('/(?=[A-Z])/', '_$0', $key));
+      if (!$values || in_array($key, $values)) {
+        $ret[$key] = $val;
+      }
+    }
+    return $ret;
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/ACLCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/ACLCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..856b6cf
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class ACLCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('entity_table')->setDefaultValue('civicrm_acl_role');
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'ACL' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/ActionScheduleCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/ActionScheduleCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..833d96a
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class ActionScheduleCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('title')->setRequired(TRUE);
+    $spec->getFieldByName('mapping_id')->setRequired(TRUE);
+    $spec->getFieldByName('entity_value')->setRequired(TRUE);
+    $spec->getFieldByName('start_action_date')->setRequiredIf('empty($values.absolute_date)');
+    $spec->getFieldByName('absolute_date')->setRequiredIf('empty($values.start_action_date)');
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'ActionSchedule' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/ActivityCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/ActivityCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..4e59727
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class ActivityCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $sourceContactField = new FieldSpec('source_contact_id', 'Activity', 'Integer');
+    $sourceContactField->setRequired(TRUE);
+    $sourceContactField->setFkEntity('Contact');
+
+    $spec->addFieldSpec($sourceContactField);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Activity' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/AddressCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/AddressCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..3febce6
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class AddressCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('contact_id')->setRequired(TRUE);
+    $spec->getFieldByName('location_type_id')->setRequired(TRUE);
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Address' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/CampaignCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/CampaignCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..9e39553
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class CampaignCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('title')->setRequired(TRUE);
+    $spec->getFieldByName('name')->setRequired(FALSE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Campaign' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..d57817d
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class ContactCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('contact_type')
+      ->setDefaultValue('Individual');
+
+    $spec->getFieldByName('is_opt_out')->setRequired(FALSE);
+    $spec->getFieldByName('is_deleted')->setRequired(FALSE);
+
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Contact' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/ContactTypeCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/ContactTypeCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..d211c02
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class ContactTypeCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('label')->setRequired(TRUE);
+    $spec->getFieldByName('name')->setRequired(TRUE);
+    $spec->getFieldByName('parent_id')->setRequired(TRUE);
+
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action) {
+    return $entity === 'ContactType' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/ContributionCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/ContributionCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..4ad937b
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class ContributionCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('financial_type_id')->setRequired(TRUE);
+    $spec->getFieldByName('receive_date')->setDefaultValue('now');
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Contribution' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/CustomFieldCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/CustomFieldCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..a0921ef
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class CustomFieldCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $optionField = new FieldSpec('option_values', $spec->getEntity(), 'Array');
+    $optionField->setTitle(ts('Option Values'));
+    $optionField->setDescription('Pass an array of options (value => label) to create this field\'s option values');
+    $spec->addFieldSpec($optionField);
+    $spec->getFieldByName('data_type')->setDefaultValue('String')->setRequired(FALSE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'CustomField' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/CustomGroupCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/CustomGroupCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..2a2555a
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class CustomGroupCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('extends')->setRequired(TRUE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'CustomGroup' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php b/Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php
new file mode 100644 (file)
index 0000000..3d082b6
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class CustomValueSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $action = $spec->getAction();
+    if ($action !== 'create') {
+      $idField = new FieldSpec('id', $spec->getEntity(), 'Integer');
+      $idField->setTitle(ts('Custom Value ID'));
+      $spec->addFieldSpec($idField);
+    }
+    $entityField = new FieldSpec('entity_id', $spec->getEntity(), 'Integer');
+    $entityField->setTitle(ts('Entity ID'));
+    $entityField->setRequired($action === 'create');
+    $entityField->setFkEntity('Contact');
+    $spec->addFieldSpec($entityField);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return strstr($entity, 'Custom_');
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/DefaultLocationTypeProvider.php b/Civi/Api4/Service/Spec/Provider/DefaultLocationTypeProvider.php
new file mode 100644 (file)
index 0000000..908450d
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class DefaultLocationTypeProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $locationField = $spec->getFieldByName('location_type_id')->setRequired(TRUE);
+    $defaultType = \CRM_Core_BAO_LocationType::getDefault();
+    if ($defaultType) {
+      $locationField->setDefaultValue($defaultType->id);
+    }
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $action === 'create' && in_array($entity, ['Address', 'Email', 'IM', 'OpenID', 'Phone']);
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/DomainCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/DomainCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..22bc5d4
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class DomainCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('name')->setRequired(TRUE);
+    $spec->getFieldByName('version')->setRequired(TRUE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Domain' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/EmailCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/EmailCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..fde8e08
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class EmailCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('contact_id')->setRequired(TRUE);
+    $spec->getFieldByName('email')->setRequired(TRUE);
+    $spec->getFieldByName('on_hold')->setRequired(FALSE);
+    $spec->getFieldByName('is_bulkmail')->setRequired(FALSE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Email' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/EntityTagCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/EntityTagCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..cc0f5b6
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class EntityTagCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('entity_table')->setRequired(FALSE)->setDefaultValue('civicrm_contact');
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action) {
+    return $entity === 'EntityTag' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/EventCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/EventCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..301a8d8
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class EventCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('event_type_id')->setRequiredIf('empty($values.template_id)');
+    $spec->getFieldByName('title')->setRequiredIf('empty($values.is_template)');
+    $spec->getFieldByName('start_date')->setRequiredIf('empty($values.is_template)');
+    $spec->getFieldByName('template_title')->setRequiredIf('!empty($values.is_template)');
+
+    $template_id = new FieldSpec('template_id', 'Event', 'Integer');
+    $template_id
+      ->setTitle('Template Id')
+      ->setDescription('Template on which to base this new event');
+    $spec->addFieldSpec($template_id);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Event' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/Generic/SpecProviderInterface.php b/Civi/Api4/Service/Spec/Provider/Generic/SpecProviderInterface.php
new file mode 100644 (file)
index 0000000..35dc09b
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider\Generic;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+interface SpecProviderInterface {
+
+  /**
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   *
+   * @return void
+   */
+  public function modifySpec(RequestSpec $spec);
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action);
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/GetActionDefaultsProvider.php b/Civi/Api4/Service/Spec/Provider/GetActionDefaultsProvider.php
new file mode 100644 (file)
index 0000000..58c59e4
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class GetActionDefaultsProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    // Exclude deleted records from api Get by default
+    $isDeletedField = $spec->getFieldByName('is_deleted');
+    if ($isDeletedField) {
+      $isDeletedField->setDefaultValue('0');
+    }
+
+    // Exclude test records from api Get by default
+    $isTestField = $spec->getFieldByName('is_test');
+    if ($isTestField) {
+      $isTestField->setDefaultValue('0');
+    }
+
+    $isTemplateField = $spec->getFieldByName('is_template');
+    if ($isTemplateField) {
+      $isTemplateField->setDefaultValue('0');
+    }
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $action === 'get';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/GroupCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/GroupCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..975296f
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class GroupCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('title')->setRequired(TRUE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Group' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/MappingCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/MappingCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..7058659
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class MappingCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * This function runs for both Mapping and MappingField entities
+   *
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('name')->setRequired(TRUE);
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action) {
+    return strpos($entity, 'Mapping') === 0 && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/NavigationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/NavigationSpecProvider.php
new file mode 100644 (file)
index 0000000..2af06eb
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class NavigationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * This runs for both create and get actions
+   *
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('domain_id')->setRequired(FALSE)->setDefaultValue('current_domain');
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Navigation' && in_array($action, ['create', 'get']);
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/NoteCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/NoteCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..1b04539
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class NoteCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('note')->setRequired(TRUE);
+    $spec->getFieldByName('entity_table')->setDefaultValue('civicrm_contact');
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Note' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/OptionValueCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/OptionValueCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..f46859f
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class OptionValueCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('weight')->setRequired(FALSE);
+    $spec->getFieldByName('value')->setRequired(FALSE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'OptionValue' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/PhoneCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/PhoneCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..1e259ce
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class PhoneCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('contact_id')->setRequired(TRUE);
+    $spec->getFieldByName('phone')->setRequired(TRUE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Phone' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/RelationshipTypeCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/RelationshipTypeCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..ca390bd
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class RelationshipTypeCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('name_a_b')->setRequired(TRUE);
+    $spec->getFieldByName('name_b_a')->setRequired(TRUE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'RelationshipType' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/StatusPreferenceCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/StatusPreferenceCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..369137d
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class StatusPreferenceCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('domain_id')->setRequired(FALSE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'StatusPreference' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/TagCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/TagCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..c876787
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class TagCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @param \Civi\Api4\Service\Spec\RequestSpec $spec
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('used_for')->setDefaultValue('civicrm_contact');
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   *
+   * @return bool
+   */
+  public function applies($entity, $action) {
+    return $entity === 'Tag' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/UFFieldCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/UFFieldCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..f0ae2b1
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class UFFieldCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('label')->setRequired(FALSE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'UFField' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/Provider/UFMatchCreationSpecProvider.php b/Civi/Api4/Service/Spec/Provider/UFMatchCreationSpecProvider.php
new file mode 100644 (file)
index 0000000..450aa3c
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec\Provider;
+
+use Civi\Api4\Service\Spec\RequestSpec;
+
+class UFMatchCreationSpecProvider implements Generic\SpecProviderInterface {
+
+  /**
+   * @inheritDoc
+   */
+  public function modifySpec(RequestSpec $spec) {
+    $spec->getFieldByName('domain_id')->setRequired(FALSE);
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function applies($entity, $action) {
+    return $entity === 'UFMatch' && $action === 'create';
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/RequestSpec.php b/Civi/Api4/Service/Spec/RequestSpec.php
new file mode 100644 (file)
index 0000000..22bc46d
--- /dev/null
@@ -0,0 +1,145 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec;
+
+class RequestSpec {
+
+  /**
+   * @var string
+   */
+  protected $entity;
+
+  /**
+   * @var string
+   */
+  protected $action;
+
+  /**
+   * @var FieldSpec[]
+   */
+  protected $fields = [];
+
+  /**
+   * @param string $entity
+   * @param string $action
+   */
+  public function __construct($entity, $action) {
+    $this->entity = $entity;
+    $this->action = $action;
+  }
+
+  public function addFieldSpec(FieldSpec $field) {
+    $this->fields[] = $field;
+  }
+
+  /**
+   * @param $name
+   *
+   * @return FieldSpec|null
+   */
+  public function getFieldByName($name) {
+    foreach ($this->fields as $field) {
+      if ($field->getName() === $name) {
+        return $field;
+      }
+    }
+
+    return NULL;
+  }
+
+  /**
+   * @return array
+   *   Gets all the field names currently part of the specification
+   */
+  public function getFieldNames() {
+    return array_map(function(FieldSpec $field) {
+      return $field->getName();
+    }, $this->fields);
+  }
+
+  /**
+   * @return array|FieldSpec[]
+   */
+  public function getRequiredFields() {
+    return array_filter($this->fields, function (FieldSpec $field) {
+      return $field->isRequired();
+    });
+  }
+
+  /**
+   * @return array|FieldSpec[]
+   */
+  public function getConditionalRequiredFields() {
+    return array_filter($this->fields, function (FieldSpec $field) {
+      return $field->getRequiredIf();
+    });
+  }
+
+  /**
+   * @param array $fieldNames
+   *   Optional array of fields to return
+   * @return FieldSpec[]
+   */
+  public function getFields($fieldNames = NULL) {
+    if (!$fieldNames) {
+      return $this->fields;
+    }
+    $fields = [];
+    foreach ($this->fields as $field) {
+      if (in_array($field->getName(), $fieldNames)) {
+        $fields[] = $field;
+      }
+    }
+    return $fields;
+  }
+
+  /**
+   * @return string
+   */
+  public function getEntity() {
+    return $this->entity;
+  }
+
+  /**
+   * @return string
+   */
+  public function getAction() {
+    return $this->action;
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/SpecFormatter.php b/Civi/Api4/Service/Spec/SpecFormatter.php
new file mode 100644 (file)
index 0000000..b1c1c80
--- /dev/null
@@ -0,0 +1,251 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec;
+
+use CRM_Utils_Array as ArrayHelper;
+use CRM_Core_DAO_AllCoreTables as AllCoreTables;
+
+class SpecFormatter {
+
+  /**
+   * @param FieldSpec[] $fields
+   * @param bool $includeFieldOptions
+   *
+   * @return array
+   */
+  public static function specToArray($fields, $includeFieldOptions = FALSE) {
+    $fieldArray = [];
+
+    foreach ($fields as $field) {
+      if ($includeFieldOptions) {
+        $field->getOptions();
+      }
+      $fieldArray[$field->getName()] = $field->toArray();
+    }
+
+    return $fieldArray;
+  }
+
+  /**
+   * @param array $data
+   * @param string $entity
+   *
+   * @return FieldSpec
+   */
+  public static function arrayToField(array $data, $entity) {
+    $dataTypeName = self::getDataType($data);
+
+    if (!empty($data['custom_group_id'])) {
+      $field = new CustomFieldSpec($data['name'], $entity, $dataTypeName);
+      if (strpos($entity, 'Custom_') !== 0) {
+        $field->setName($data['custom_group.name'] . '.' . $data['name']);
+      }
+      else {
+        $field->setCustomTableName($data['custom_group.table_name']);
+        $field->setCustomFieldColumnName($data['column_name']);
+      }
+      $field->setCustomFieldId(ArrayHelper::value('id', $data));
+      $field->setCustomGroupName($data['custom_group.name']);
+      $field->setTitle(ArrayHelper::value('label', $data));
+      $field->setOptions(self::customFieldHasOptions($data));
+      if (\CRM_Core_BAO_CustomField::isSerialized($data)) {
+        $field->setSerialize(\CRM_Core_DAO::SERIALIZE_SEPARATOR_BOOKEND);
+      }
+    }
+    else {
+      $name = ArrayHelper::value('name', $data);
+      $field = new FieldSpec($name, $entity, $dataTypeName);
+      $field->setRequired((bool) ArrayHelper::value('required', $data, FALSE));
+      $field->setTitle(ArrayHelper::value('title', $data));
+      $field->setOptions(!empty($data['pseudoconstant']));
+      $field->setSerialize(ArrayHelper::value('serialize', $data));
+    }
+
+    $field->setDefaultValue(ArrayHelper::value('default', $data));
+    $field->setDescription(ArrayHelper::value('description', $data));
+    self::setInputTypeAndAttrs($field, $data, $dataTypeName);
+
+    $fkAPIName = ArrayHelper::value('FKApiName', $data);
+    $fkClassName = ArrayHelper::value('FKClassName', $data);
+    if ($fkAPIName || $fkClassName) {
+      $field->setFkEntity($fkAPIName ?: AllCoreTables::getBriefName($fkClassName));
+    }
+
+    return $field;
+  }
+
+  /**
+   * Does this custom field have options
+   *
+   * @param array $field
+   * @return bool
+   */
+  private static function customFieldHasOptions($field) {
+    // This will include boolean fields with Yes/No options.
+    if (in_array($field['html_type'], ['Radio', 'CheckBox'])) {
+      return TRUE;
+    }
+    // Do this before the "Select" string search because date fields have a "Select Date" html_type
+    // and contactRef fields have an "Autocomplete-Select" html_type - contacts are an FK not an option list.
+    if (in_array($field['data_type'], ['ContactReference', 'Date'])) {
+      return FALSE;
+    }
+    if (strpos($field['html_type'], 'Select') !== FALSE) {
+      return TRUE;
+    }
+    return !empty($field['option_group_id']);
+  }
+
+  /**
+   * Get the data type from an array. Defaults to 'data_type' with fallback to
+   * mapping for the integer value 'type'
+   *
+   * @param array $data
+   *
+   * @return string
+   */
+  private static function getDataType(array $data) {
+    if (isset($data['data_type'])) {
+      return !empty($data['time_format']) ? 'Timestamp' : $data['data_type'];
+    }
+
+    $dataTypeInt = ArrayHelper::value('type', $data);
+    $dataTypeName = \CRM_Utils_Type::typeToString($dataTypeInt);
+
+    return $dataTypeName;
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Spec\FieldSpec $fieldSpec
+   * @param array $data
+   * @param string $dataTypeName
+   */
+  public static function setInputTypeAndAttrs(FieldSpec &$fieldSpec, $data, $dataTypeName) {
+    $inputType = isset($data['html']['type']) ? $data['html']['type'] : ArrayHelper::value('html_type', $data);
+    $inputAttrs = ArrayHelper::value('html', $data, []);
+    unset($inputAttrs['type']);
+
+    if (!$inputType) {
+      // If no html type is set, guess
+      switch ($dataTypeName) {
+        case 'Int':
+          $inputType = 'Number';
+          $inputAttrs['min'] = 0;
+          break;
+
+        case 'Text':
+          $inputType = ArrayHelper::value('type', $data) === \CRM_Utils_Type::T_LONGTEXT ? 'TextArea' : 'Text';
+          break;
+
+        case 'Timestamp':
+          $inputType = 'Date';
+          $inputAttrs['time'] = TRUE;
+          break;
+
+        case 'Date':
+          $inputAttrs['time'] = FALSE;
+          break;
+
+        case 'Time':
+          $inputType = 'Date';
+          $inputAttrs['time'] = TRUE;
+          $inputAttrs['date'] = FALSE;
+          break;
+
+        default:
+          $map = [
+            'Email' => 'Email',
+            'Boolean' => 'Checkbox',
+          ];
+          $inputType = ArrayHelper::value($dataTypeName, $map, 'Text');
+      }
+    }
+    if (strstr($inputType, 'Multi-Select') || ($inputType == 'Select' && !empty($data['serialize']))) {
+      $inputAttrs['multiple'] = TRUE;
+      $inputType = 'Select';
+    }
+    $map = [
+      'Select State/Province' => 'Select',
+      'Select Country' => 'Select',
+      'Select Date' => 'Date',
+      'Link' => 'Url',
+    ];
+    $inputType = ArrayHelper::value($inputType, $map, $inputType);
+    if ($inputType == 'Date' && !empty($inputAttrs['formatType'])) {
+      self::setLegacyDateFormat($inputAttrs);
+    }
+    // Date/time settings from custom fields
+    if ($inputType == 'Date' && !empty($data['custom_group_id'])) {
+      $inputAttrs['time'] = empty($data['time_format']) ? FALSE : ($data['time_format'] == 1 ? 12 : 24);
+      $inputAttrs['date'] = $data['date_format'];
+      $inputAttrs['start_date_years'] = (int) $data['start_date_years'];
+      $inputAttrs['end_date_years'] = (int) $data['end_date_years'];
+    }
+    if ($inputType == 'Text' && !empty($data['maxlength'])) {
+      $inputAttrs['maxlength'] = (int) $data['maxlength'];
+    }
+    if ($inputType == 'TextArea') {
+      foreach (['rows', 'cols', 'note_rows', 'note_cols'] as $prop) {
+        if (!empty($data[$prop])) {
+          $inputAttrs[str_replace('note_', '', $prop)] = (int) $data[$prop];
+        }
+      }
+    }
+    $fieldSpec
+      ->setInputType($inputType)
+      ->setInputAttrs($inputAttrs);
+  }
+
+  /**
+   * @param array $inputAttrs
+   */
+  private static function setLegacyDateFormat(&$inputAttrs) {
+    if (empty(\Civi::$statics['legacyDatePrefs'][$inputAttrs['formatType']])) {
+      \Civi::$statics['legacyDatePrefs'][$inputAttrs['formatType']] = [];
+      $params = ['name' => $inputAttrs['formatType']];
+      \CRM_Core_DAO::commonRetrieve('CRM_Core_DAO_PreferencesDate', $params, \Civi::$statics['legacyDatePrefs'][$inputAttrs['formatType']]);
+    }
+    $dateFormat = \Civi::$statics['legacyDatePrefs'][$inputAttrs['formatType']];
+    unset($inputAttrs['formatType']);
+    $inputAttrs['time'] = !empty($dateFormat['time_format']);
+    $inputAttrs['date'] = TRUE;
+    $inputAttrs['start_date_years'] = (int) $dateFormat['start'];
+    $inputAttrs['end_date_years'] = (int) $dateFormat['end'];
+  }
+
+}
diff --git a/Civi/Api4/Service/Spec/SpecGatherer.php b/Civi/Api4/Service/Spec/SpecGatherer.php
new file mode 100644 (file)
index 0000000..d9b6e0e
--- /dev/null
@@ -0,0 +1,175 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Service\Spec;
+
+use Civi\Api4\CustomField;
+use Civi\Api4\Service\Spec\Provider\Generic\SpecProviderInterface;
+use Civi\Api4\Utils\CoreUtil;
+
+class SpecGatherer {
+
+  /**
+   * @var \Civi\Api4\Service\Spec\Provider\Generic\SpecProviderInterface[]
+   */
+  protected $specProviders = [];
+
+  /**
+   * A cache of DAOs based on entity
+   *
+   * @var \CRM_Core_DAO[]
+   */
+  protected $DAONames;
+
+  /**
+   * Returns a RequestSpec with all the fields available. Uses spec providers
+   * to add or modify field specifications.
+   * For an example @see CustomFieldSpecProvider.
+   *
+   * @param string $entity
+   * @param string $action
+   * @param $includeCustom
+   *
+   * @return \Civi\Api4\Service\Spec\RequestSpec
+   */
+  public function getSpec($entity, $action, $includeCustom) {
+    $specification = new RequestSpec($entity, $action);
+
+    // Real entities
+    if (strpos($entity, 'Custom_') !== 0) {
+      $this->addDAOFields($entity, $action, $specification);
+      if ($includeCustom && array_key_exists($entity, \CRM_Core_SelectValues::customGroupExtends())) {
+        $this->addCustomFields($entity, $specification);
+      }
+    }
+    // Custom pseudo-entities
+    else {
+      $this->getCustomGroupFields(substr($entity, 7), $specification);
+    }
+
+    // Default value only makes sense for create actions
+    if ($action != 'create') {
+      foreach ($specification->getFields() as $field) {
+        $field->setDefaultValue(NULL);
+      }
+    }
+
+    foreach ($this->specProviders as $provider) {
+      if ($provider->applies($entity, $action)) {
+        $provider->modifySpec($specification);
+      }
+    }
+
+    return $specification;
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Spec\Provider\Generic\SpecProviderInterface $provider
+   */
+  public function addSpecProvider(SpecProviderInterface $provider) {
+    $this->specProviders[] = $provider;
+  }
+
+  /**
+   * @param string $entity
+   * @param string $action
+   * @param \Civi\Api4\Service\Spec\RequestSpec $specification
+   */
+  private function addDAOFields($entity, $action, RequestSpec $specification) {
+    $DAOFields = $this->getDAOFields($entity);
+
+    foreach ($DAOFields as $DAOField) {
+      if ($DAOField['name'] == 'id' && $action == 'create') {
+        continue;
+      }
+      if ($action !== 'create' || isset($DAOField['default'])) {
+        $DAOField['required'] = FALSE;
+      }
+      if ($DAOField['name'] == 'is_active' && empty($DAOField['default'])) {
+        $DAOField['default'] = '1';
+      }
+      $field = SpecFormatter::arrayToField($DAOField, $entity);
+      $specification->addFieldSpec($field);
+    }
+  }
+
+  /**
+   * @param string $entity
+   * @param \Civi\Api4\Service\Spec\RequestSpec $specification
+   */
+  private function addCustomFields($entity, RequestSpec $specification) {
+    $extends = ($entity == 'Contact') ? ['Contact', 'Individual', 'Organization', 'Household'] : [$entity];
+    $customFields = CustomField::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('custom_group.extends', 'IN', $extends)
+      ->setSelect(['custom_group.name', 'custom_group_id', 'name', 'label', 'data_type', 'html_type', 'is_searchable', 'is_search_range', 'weight', 'is_active', 'is_view', 'option_group_id', 'default_value', 'date_format', 'time_format', 'start_date_years', 'end_date_years'])
+      ->execute();
+
+    foreach ($customFields as $fieldArray) {
+      $field = SpecFormatter::arrayToField($fieldArray, $entity);
+      $specification->addFieldSpec($field);
+    }
+  }
+
+  /**
+   * @param string $customGroup
+   * @param \Civi\Api4\Service\Spec\RequestSpec $specification
+   */
+  private function getCustomGroupFields($customGroup, RequestSpec $specification) {
+    $customFields = CustomField::get()
+      ->addWhere('custom_group.name', '=', $customGroup)
+      ->setSelect(['custom_group.name', 'custom_group_id', 'name', 'label', 'data_type', 'html_type', 'is_searchable', 'is_search_range', 'weight', 'is_active', 'is_view', 'option_group_id', 'default_value', 'custom_group.table_name', 'column_name', 'date_format', 'time_format', 'start_date_years', 'end_date_years'])
+      ->execute();
+
+    foreach ($customFields as $fieldArray) {
+      $field = SpecFormatter::arrayToField($fieldArray, 'Custom_' . $customGroup);
+      $specification->addFieldSpec($field);
+    }
+  }
+
+  /**
+   * @param string $entityName
+   *
+   * @return array
+   */
+  private function getDAOFields($entityName) {
+    $bao = CoreUtil::getBAOFromApiName($entityName);
+
+    return $bao::fields();
+  }
+
+}
diff --git a/Civi/Api4/Setting.php b/Civi/Api4/Setting.php
new file mode 100644 (file)
index 0000000..47e7a56
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * CiviCRM settings api.
+ *
+ * Used to read/write persistent setting data from CiviCRM.
+ *
+ * @package Civi\Api4
+ */
+class Setting extends Generic\AbstractEntity {
+
+  public static function get() {
+    return new Action\Setting\Get(__CLASS__, __FUNCTION__);
+  }
+
+  public static function set() {
+    return new Action\Setting\Set(__CLASS__, __FUNCTION__);
+  }
+
+  public static function revert() {
+    return new Action\Setting\Revert(__CLASS__, __FUNCTION__);
+  }
+
+  public static function getFields() {
+    return new Action\Setting\GetFields(__CLASS__, __FUNCTION__);
+  }
+
+}
diff --git a/Civi/Api4/StatusPreference.php b/Civi/Api4/StatusPreference.php
new file mode 100644 (file)
index 0000000..df05c2c
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * For setting "hush" preferences for system check alerts.
+ *
+ * @package Civi\Api4
+ */
+class StatusPreference extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/System.php b/Civi/Api4/System.php
new file mode 100644 (file)
index 0000000..76b1485
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+use Civi\Api4\Generic\BasicGetFieldsAction;
+
+/**
+ * A collection of system maintenance/diagnostic utilities.
+ *
+ * @package Civi\Api4
+ */
+class System extends Generic\AbstractEntity {
+
+  public static function flush() {
+    return new Action\System\Flush(__CLASS__, __FUNCTION__);
+  }
+
+  public static function check() {
+    return new Action\System\Check(__CLASS__, __FUNCTION__);
+  }
+
+  public static function getFields() {
+    return new BasicGetFieldsAction(__CLASS__, __FUNCTION__, function() {
+      return [];
+    });
+  }
+
+}
diff --git a/Civi/Api4/Tag.php b/Civi/Api4/Tag.php
new file mode 100644 (file)
index 0000000..ec10463
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Tag entity.
+ *
+ * Tags in CiviCRM are used for Contacts, Activities, Cases & Attachments.
+ * They are connected to those entities via the EntityTag table.
+ *
+ * @package Civi\Api4
+ */
+class Tag extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/UFField.php b/Civi/Api4/UFField.php
new file mode 100644 (file)
index 0000000..91b557a
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * UFField entity - aka profile fields.
+ *
+ * @package Civi\Api4
+ */
+class UFField extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/UFGroup.php b/Civi/Api4/UFGroup.php
new file mode 100644 (file)
index 0000000..ee63189
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * UFGroup entity - AKA profiles.
+ *
+ * @package Civi\Api4
+ */
+class UFGroup extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/UFJoin.php b/Civi/Api4/UFJoin.php
new file mode 100644 (file)
index 0000000..661d55b
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * UFJoin entity - links profiles to the components/extensions they are used for.
+ *
+ * @package Civi\Api4
+ */
+class UFJoin extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/UFMatch.php b/Civi/Api4/UFMatch.php
new file mode 100644 (file)
index 0000000..7271fde
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * UFMatch entity - links civicrm contacts with users created externally
+ *
+ * @package Civi\Api4
+ */
+class UFMatch extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/Utils/ActionUtil.php b/Civi/Api4/Utils/ActionUtil.php
new file mode 100644 (file)
index 0000000..c00a399
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Utils;
+
+class ActionUtil {
+
+  /**
+   * @param $entityName
+   * @param $actionName
+   * @return \Civi\Api4\Generic\AbstractAction
+   * @throws \Civi\API\Exception\NotImplementedException
+   */
+  public static function getAction($entityName, $actionName) {
+    // For custom pseudo-entities
+    if (strpos($entityName, 'Custom_') === 0) {
+      return \Civi\Api4\CustomValue::$actionName(substr($entityName, 7));
+    }
+    else {
+      $callable = ["\\Civi\\Api4\\$entityName", $actionName];
+      if (!is_callable($callable)) {
+        throw new \Civi\API\Exception\NotImplementedException("API ($entityName, $actionName) does not exist (join the API team and implement it!)");
+      }
+      return call_user_func($callable);
+    }
+  }
+
+}
diff --git a/Civi/Api4/Utils/ArrayInsertionUtil.php b/Civi/Api4/Utils/ArrayInsertionUtil.php
new file mode 100644 (file)
index 0000000..2b4324f
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Utils;
+
+use CRM_Utils_Array as UtilsArray;
+
+class ArrayInsertionUtil {
+
+  /**
+   * If the values to be inserted contain a key _parent_id they will only be
+   * inserted if the parent node ID matches their ID
+   *
+   * @param $array
+   *   The array to insert the value in
+   * @param array $parts
+   *   Path to insertion point with structure:
+   *   [[ name => is_multiple ], ..]
+   * @param mixed $values
+   *   The value to be inserted
+   */
+  public static function insert(&$array, $parts, $values) {
+    $key = key($parts);
+    $isMulti = array_shift($parts);
+    if (!isset($array[$key])) {
+      $array[$key] = $isMulti ? [] : NULL;
+    }
+    if (empty($parts)) {
+      $values = self::filterValues($array, $isMulti, $values);
+      $array[$key] = $values;
+    }
+    else {
+      if ($isMulti) {
+        foreach ($array[$key] as &$subArray) {
+          self::insert($subArray, $parts, $values);
+        }
+      }
+      else {
+        self::insert($array[$key], $parts, $values);
+      }
+    }
+  }
+
+  /**
+   * @param $parentArray
+   * @param $isMulti
+   * @param $values
+   *
+   * @return array|mixed
+   */
+  private static function filterValues($parentArray, $isMulti, $values) {
+    $parentID = UtilsArray::value('id', $parentArray);
+
+    if ($parentID) {
+      $values = array_filter($values, function ($value) use ($parentID) {
+        return UtilsArray::value('_parent_id', $value) == $parentID;
+      });
+    }
+
+    $unsets = ['_parent_id', '_base_id'];
+    array_walk($values, function (&$value) use ($unsets) {
+      foreach ($unsets as $unset) {
+        if (isset($value[$unset])) {
+          unset($value[$unset]);
+        }
+      }
+    });
+
+    if (!$isMulti) {
+      $values = array_shift($values);
+    }
+    return $values;
+  }
+
+}
diff --git a/Civi/Api4/Utils/CoreUtil.php b/Civi/Api4/Utils/CoreUtil.php
new file mode 100644 (file)
index 0000000..56eee46
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Utils;
+
+use Civi\Api4\CustomGroup;
+use CRM_Core_DAO_AllCoreTables as AllCoreTables;
+
+require_once 'api/v3/utils.php';
+
+class CoreUtil {
+
+  /**
+   * todo this class should not rely on api3 code
+   *
+   * @param $entityName
+   *
+   * @return \CRM_Core_DAO|string
+   *   The BAO name for use in static calls. Return doc block is hacked to allow
+   *   auto-completion of static methods
+   */
+  public static function getBAOFromApiName($entityName) {
+    if ($entityName === 'CustomValue' || strpos($entityName, 'Custom_') === 0) {
+      return 'CRM_Contact_BAO_Contact';
+    }
+    return \_civicrm_api3_get_BAO($entityName);
+  }
+
+  /**
+   * Get table name of given Custom group
+   *
+   * @param string $customGroupName
+   *
+   * @return string
+   */
+  public static function getCustomTableByName($customGroupName) {
+    return CustomGroup::get()
+      ->addSelect('table_name')
+      ->addWhere('name', '=', $customGroupName)
+      ->execute()
+      ->first()['table_name'];
+  }
+
+  /**
+   * Given a sql table name, return the name of the api entity.
+   *
+   * @param $tableName
+   * @return string
+   */
+  public static function getApiNameFromTableName($tableName) {
+    return AllCoreTables::getBriefName(AllCoreTables::getClassForTable($tableName));
+  }
+
+}
diff --git a/Civi/Api4/Utils/FormattingUtil.php b/Civi/Api4/Utils/FormattingUtil.php
new file mode 100644 (file)
index 0000000..b845ea6
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Utils;
+
+use CRM_Utils_Array as UtilsArray;
+
+require_once 'api/v3/utils.php';
+
+class FormattingUtil {
+
+  /**
+   * Massage values into the format the BAO expects for a write operation
+   *
+   * @param $params
+   * @param $entity
+   * @param $fields
+   * @throws \API_Exception
+   */
+  public static function formatWriteParams(&$params, $entity, $fields) {
+    foreach ($fields as $name => $field) {
+      if (!empty($params[$name])) {
+        $value =& $params[$name];
+        // Hack for null values -- see comment below
+        if ($value === 'null') {
+          $value = 'Null';
+        }
+        FormattingUtil::formatValue($value, $field, $entity);
+        // Ensure we have an array for serialized fields
+        if (!empty($field['serialize'] && !is_array($value))) {
+          $value = (array) $value;
+        }
+      }
+      /*
+       * Because of the wacky way that database values are saved we need to format
+       * some of the values here. In this strange world the string 'null' is used to
+       * unset values. Hence if we encounter true null we change it to string 'null'.
+       *
+       * If we encounter the string 'null' then we assume the user actually wants to
+       * set the value to string null. However since the string null is reserved for
+       * unsetting values we must change it. Another quirk of the DB_DataObject is
+       * that it allows 'Null' to be set, but any other variation of string 'null'
+       * will be converted to true null, e.g. 'nuLL', 'NUlL' etc. so we change it to
+       * 'Null'.
+       */
+      elseif (array_key_exists($name, $params) && $params[$name] === NULL) {
+        $params[$name] = 'null';
+      }
+    }
+  }
+
+  /**
+   * Transform raw api input to appropriate format for use in a SQL query.
+   *
+   * This is used by read AND write actions (Get, Create, Update, Replace)
+   *
+   * @param $value
+   * @param $fieldSpec
+   * @param string $entity
+   *   Ex: 'Contact', 'Domain'
+   * @throws \API_Exception
+   */
+  public static function formatValue(&$value, $fieldSpec, $entity) {
+    if (is_array($value)) {
+      foreach ($value as &$val) {
+        self::formatValue($val, $fieldSpec, $entity);
+      }
+      return;
+    }
+    $fk = UtilsArray::value('fk_entity', $fieldSpec);
+    if ($fieldSpec['name'] == 'id') {
+      $fk = $entity;
+    }
+    $dataType = UtilsArray::value('data_type', $fieldSpec);
+
+    if ($fk === 'Domain' && $value === 'current_domain') {
+      $value = \CRM_Core_Config::domainID();
+    }
+
+    if ($fk === 'Contact' && !is_numeric($value)) {
+      $value = \_civicrm_api3_resolve_contactID($value);
+      if ('unknown-user' === $value) {
+        throw new \API_Exception("\"{$fieldSpec['name']}\" \"{$value}\" cannot be resolved to a contact ID", 2002, ['error_field' => $fieldSpec['name'], "type" => "integer"]);
+      }
+    }
+
+    switch ($dataType) {
+      case 'Timestamp':
+        $value = date('Y-m-d H:i:s', strtotime($value));
+        break;
+
+      case 'Date':
+        $value = date('Ymd', strtotime($value));
+        break;
+    }
+  }
+
+}
diff --git a/Civi/Api4/Utils/ReflectionUtils.php b/Civi/Api4/Utils/ReflectionUtils.php
new file mode 100644 (file)
index 0000000..535f952
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.7                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2015                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Api4\Utils;
+
+/**
+ * Just another place to put static functions...
+ */
+class ReflectionUtils {
+
+  /**
+   * @param \Reflector|\ReflectionClass $reflection
+   * @param string $type
+   *   If we are not reflecting the class itself, specify "Method", "Property", etc.
+   *
+   * @return array
+   */
+  public static function getCodeDocs($reflection, $type = NULL) {
+    $docs = self::parseDocBlock($reflection->getDocComment());
+
+    // Recurse into parent functions
+    if (isset($docs['inheritDoc']) || isset($docs['inheritdoc'])) {
+      unset($docs['inheritDoc'], $docs['inheritdoc']);
+      $newReflection = NULL;
+      try {
+        if ($type) {
+          $name = $reflection->getName();
+          $reflectionClass = $reflection->getDeclaringClass()->getParentClass();
+          if ($reflectionClass) {
+            $getItem = "get$type";
+            $newReflection = $reflectionClass->$getItem($name);
+          }
+        }
+        else {
+          $newReflection = $reflection->getParentClass();
+        }
+      }
+      catch (\ReflectionException $e) {
+      }
+      if ($newReflection) {
+        // Mix in
+        $additionalDocs = self::getCodeDocs($newReflection, $type);
+        if (!empty($docs['comment']) && !empty($additionalDocs['comment'])) {
+          $docs['comment'] .= "\n\n" . $additionalDocs['comment'];
+        }
+        $docs += $additionalDocs;
+      }
+    }
+    return $docs;
+  }
+
+  /**
+   * @param string $comment
+   * @return array
+   */
+  public static function parseDocBlock($comment) {
+    $info = [];
+    foreach (preg_split("/((\r?\n)|(\r\n?))/", $comment) as $num => $line) {
+      if (!$num || strpos($line, '*/') !== FALSE) {
+        continue;
+      }
+      $line = ltrim(trim($line), '* ');
+      if (strpos($line, '@') === 0) {
+        $words = explode(' ', $line);
+        $key = substr($words[0], 1);
+        if ($key == 'var') {
+          $info['type'] = explode('|', $words[1]);
+        }
+        elseif ($key == 'options') {
+          $val = str_replace(', ', ',', implode(' ', array_slice($words, 1)));
+          $info['options'] = explode(',', $val);
+        }
+        else {
+          // Unrecognized annotation, but we'll duly add it to the info array
+          $val = implode(' ', array_slice($words, 1));
+          $info[$key] = strlen($val) ? $val : TRUE;
+        }
+      }
+      elseif ($num == 1) {
+        $info['description'] = $line;
+      }
+      elseif (!$line) {
+        if (isset($info['comment'])) {
+          $info['comment'] .= "\n";
+        }
+      }
+      else {
+        $info['comment'] = isset($info['comment']) ? "{$info['comment']}\n$line" : $line;
+      }
+    }
+    if (isset($info['comment'])) {
+      $info['comment'] = trim($info['comment']);
+    }
+    return $info;
+  }
+
+  /**
+   * List all traits used by a class and its parents.
+   *
+   * @param object|string $class
+   * @return array
+   */
+  public static function getTraits($class) {
+    $traits = [];
+    // Get traits of this class + parent classes
+    do {
+      $traits = array_merge(class_uses($class), $traits);
+    } while ($class = get_parent_class($class));
+    // Get traits of traits
+    foreach ($traits as $trait => $same) {
+      $traits = array_merge(class_uses($trait), $traits);
+    }
+    return $traits;
+  }
+
+}
diff --git a/Civi/Api4/Website.php b/Civi/Api4/Website.php
new file mode 100644 (file)
index 0000000..280c71d
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+/**
+ * Website entity.
+ *
+ * @package Civi\Api4
+ */
+class Website extends Generic\DAOEntity {
+
+}
diff --git a/Civi/Api4/services.xml b/Civi/Api4/services.xml
new file mode 100644 (file)
index 0000000..3d8a2fc
--- /dev/null
@@ -0,0 +1,26 @@
+<container xmlns="http://symfony.com/schema/dic/services"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+
+    <services>
+
+        <service id="spec_gatherer" class="Civi\Api4\Service\Spec\SpecGatherer"/>
+
+        <service id="schema_map_builder" class="Civi\Api4\Service\Schema\SchemaMapBuilder" public="false">
+            <argument type="service" id="dispatcher" />
+        </service>
+
+        <service id="schema_map" class="Civi\Api4\Service\Schema\SchemaMap">
+          <factory service="schema_map_builder" method="build"/>
+        </service>
+
+        <service id="joiner" class="Civi\Api4\Service\Schema\Joiner">
+            <argument type="service" id="schema_map"/>
+        </service>
+
+        <service id="action_object_provider" class="Civi\Api4\Provider\ActionObjectProvider">
+            <tag name="event_subscriber"/>
+        </service>
+
+    </services>
+</container>
index 0dfebb73ed9564e5496eacb80361c903e08a4475..805056456188bff234a10211371f26eb5bbb0244 100644 (file)
@@ -313,6 +313,7 @@ class Container {
     if (\CRM_Utils_Constant::value('CIVICRM_FLEXMAILER_HACK_SERVICES')) {
       \Civi\Core\Resolver::singleton()->call(CIVICRM_FLEXMAILER_HACK_SERVICES, [$container]);
     }
+    \CRM_Api4_Services::hook_container($container);
 
     \CRM_Utils_Hook::container($container);
 
index 1c99c0490b42d3e61f84014020a4704a7d43216e..e853f5249b14fdb62e776ecc4aaf8b375d0f3fd6 100644 (file)
@@ -22,7 +22,12 @@ trait Api3TestTrait {
    * @return array
    */
   public function versionThreeAndFour() {
-    return [[3], [4]];
+    $r = [[3]];
+    global $civicrm_root;
+    if (file_exists("$civicrm_root/Civi/Api4") || file_exists("$civicrm_root/ext/api4")) {
+      $r[] = [4];
+    }
+    return $r;
   }
 
   /**
@@ -572,13 +577,11 @@ trait Api3TestTrait {
       }
       // Resolve custom field names
       foreach ($custom as $group => $fields) {
-        if (isset($row[$group])) {
-          foreach ($fields as $field => $v3FieldName) {
-            if (isset($row[$group][$field])) {
-              $result[$index][$v3FieldName] = $row[$group][$field];
-            }
+        foreach ($fields as $field => $v3FieldName) {
+          if (isset($row["$group.$field"])) {
+            $result[$index][$v3FieldName] = $row["$group.$field"];
+            unset($result[$index]["$group.$field"]);
           }
-          unset($result[$index][$group]);
         }
       }
     }
diff --git a/ang/api4.ang.php b/ang/api4.ang.php
new file mode 100644 (file)
index 0000000..2c8a85b
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+// Autoloader data for Api4 angular module.
+return [
+  'ext' => 'civicrm',
+  'js' => [
+    'ang/api4.js',
+    'ang/api4/*.js',
+    'ang/api4/*/*.js',
+  ],
+  'css' => [],
+  'partials' => [],
+  'requires' => [],
+];
diff --git a/ang/api4.js b/ang/api4.js
new file mode 100644 (file)
index 0000000..d1116fc
--- /dev/null
@@ -0,0 +1,4 @@
+(function(angular, $, _) {
+  // Declare a list of dependencies.
+  angular.module('api4', CRM.angRequires('api4'));
+})(angular, CRM.$, CRM._);
diff --git a/ang/api4/crmApi4.js b/ang/api4/crmApi4.js
new file mode 100644 (file)
index 0000000..743b359
--- /dev/null
@@ -0,0 +1,37 @@
+(function(angular, $, _) {
+
+  angular.module('api4').factory('crmApi4', function($q) {
+    var crmApi4 = function(entity, action, params, index) {
+      // JSON serialization in CRM.api4 is not aware of Angular metadata like $$hash, so use angular.toJson()
+      var deferred = $q.defer();
+      var p;
+      var backend = crmApi4.backend || CRM.api4;
+      if (_.isObject(entity)) {
+        // eval content is locally generated.
+        /*jshint -W061 */
+        p = backend(eval('('+angular.toJson(entity)+')'), action);
+      } else {
+        // eval content is locally generated.
+        /*jshint -W061 */
+        p = backend(entity, action, eval('('+angular.toJson(params)+')'), index);
+      }
+      p.then(
+        function(result) {
+          deferred.resolve(result);
+        },
+        function(error) {
+          deferred.reject(error);
+        }
+      );
+      return deferred.promise;
+    };
+    crmApi4.backend = null;
+    crmApi4.val = function(value) {
+      var d = $.Deferred();
+      d.resolve(value);
+      return d.promise();
+    };
+    return crmApi4;
+  });
+
+})(angular, CRM.$, CRM._);
diff --git a/ang/api4Explorer.ang.php b/ang/api4Explorer.ang.php
new file mode 100644 (file)
index 0000000..9b974d5
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+// Autoloader data for Api4 explorer.
+return [
+  'ext' => 'civicrm',
+  'js' => [
+    'ang/api4Explorer.js',
+    'ang/api4Explorer/Explorer.js',
+  ],
+  'css' => [
+    'css/api4-explorer.css',
+  ],
+  'partials' => [
+    'ang/api4Explorer',
+  ],
+  'basePages' => [],
+  'requires' => ['crmUi', 'crmUtil', 'ngRoute', 'crmRouteBinder', 'ui.sortable', 'api4', 'ngSanitize'],
+];
diff --git a/ang/api4Explorer.js b/ang/api4Explorer.js
new file mode 100644 (file)
index 0000000..85e10c4
--- /dev/null
@@ -0,0 +1,4 @@
+(function(angular, $, _) {
+  // Declare a list of dependencies.
+  angular.module('api4Explorer', CRM.angRequires('api4Explorer'));
+})(angular, CRM.$, CRM._);
diff --git a/ang/api4Explorer/Chain.html b/ang/api4Explorer/Chain.html
new file mode 100644 (file)
index 0000000..257efde
--- /dev/null
@@ -0,0 +1,4 @@
+<input class="form-control" ng-model="chain[1][0]" crm-ui-select="{data: entities, allowClear: true, placeholder: 'None'}" />
+<select class="form-control api4-chain-action" ng-model="chain[1][1]" ng-options="a for a in actions" ></select>
+<input class="form-control api4-chain-params" ng-model="chain[1][2]" placeholder="{{ ts('Params') }}" />
+<input class="form-control api4-chain-index" ng-model="chain[1][3]" placeholder="{{ ts('Index') }}" />
diff --git a/ang/api4Explorer/Explorer.html b/ang/api4Explorer/Explorer.html
new file mode 100644 (file)
index 0000000..bbfd35b
--- /dev/null
@@ -0,0 +1,152 @@
+<div id="bootstrap-theme" class="api4-explorer-page">
+  <div crm-ui-debug="availableParams"></div>
+
+  <h1 crm-page-title>
+    {{ ts('CiviCRM API v4') }}{{ entity ? (' (' + entity + '::' + action + ')') : '' }}
+  </h1>
+
+  <!--This warning will show if bootstrap is unavailable. Normally it will be hidden by the bootstrap .collapse class.-->
+  <div class="messages warning no-popup collapse">
+    <p>
+      <i class="crm-i fa-exclamation-triangle"></i>
+      <strong>{{ ts('Bootstrap theme not found.') }}</strong>
+    </p>
+    <p>{{ ts('This screen may not work correctly without a bootstrap-based theme such as Shoreditch installed.') }}</p>
+  </div>
+
+  <div class="api4-explorer-row">
+      <form name="api4-explorer" class="panel panel-default explorer-params-panel">
+        <div class="panel-heading">
+          <div class="form-inline">
+            <input class="collapsible-optgroups form-control" ng-model="entity" ng-disabled="!entities.length" ng-class="{loading: !entities.length}" crm-ui-select="{placeholder: ts('Entity'), data: entities}" />
+            <input class="collapsible-optgroups form-control" ng-model="action" ng-disabled="!entity || !actions.length" ng-class="{loading: entity && !actions.length}" crm-ui-select="{placeholder: ts('Action'), data: actions}" />
+            <input class="form-control api4-index" ng-model="index" ng-mouseenter="help('index', indexHelp)" ng-mouseleave="help()" placeholder="{{ ts('Index') }}" />
+            <button class="btn btn-success pull-right" crm-icon="fa-bolt" ng-disabled="!entity || !action || loading" ng-click="execute()">{{ ts('Execute') }}</button>
+          </div>
+        </div>
+        <div class="panel-body">
+          <div class="api4-input form-inline">
+            <div class="form-control" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-class="{'api4-option-selected': params[name]}" ng-repeat="(name, param) in availableParams" ng-if="!isSpecial(name) && param.type[0] === 'bool' && param.default !== null">
+              <input type="checkbox" id="api4-param-{{ name }}" ng-model="params[name]"/>
+              <label for="api4-param-{{ name }}">{{ name }}<span class="crm-marker" ng-if="param.required"> *</span></label>
+            </div>
+            <div class="form-control" ng-mouseenter="help('selectRowCount', availableParams.select)" ng-mouseleave="help()" ng-class="{'api4-option-selected': isSelectRowCount()}" ng-if="availableParams.select">
+              <input type="checkbox" id="api4-param-selectRowCount" ng-checked="isSelectRowCount()" ng-click="selectRowCount()" />
+              <label for="api4-param-selectRowCount">SelectRowCount</label>
+            </div>
+          </div>
+          <div class="api4-input form-inline" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in availableParams" ng-if="!isSpecial(name) && param.type[0] === 'bool' && param.default === null">
+            <label>{{ name }}<span class="crm-marker" ng-if="param.required"> *</span></label>
+            <label class="radio-inline">
+              <input type="radio" ng-model="params[name]" ng-value="true" />true
+            </label>
+            <label class="radio-inline">
+              <input type="radio" ng-model="params[name]" ng-value="false" />false
+            </label>
+            <a href class="crm-hover-button" title="Clear" ng-click="clearParam(name)" ng-show="params[name] !== null"><i class="crm-i fa-times"></i></a>
+          </div>
+          <div class="api4-input form-inline" ng-mouseenter="help('select', availableParams.select)" ng-mouseleave="help()" ng-if="availableParams.select && !isSelectRowCount()">
+            <label for="api4-param-select">select<span class="crm-marker" ng-if="availableParams.select.required"> *</span></label>
+            <input class="collapsible-optgroups form-control" ng-list crm-ui-select="{data: fieldsAndJoins, multiple: true}" id="api4-param-select" ng-model="params.select" style="width: 85%;"/>
+          </div>
+          <div class="api4-input form-inline" ng-mouseenter="help('fields', availableParams.fields)" ng-mouseleave="help()"ng-if="availableParams.fields">
+            <label for="api4-param-fields">fields<span class="crm-marker" ng-if="availableParams.fields.required"> *</span></label>
+            <input class="form-control" ng-list crm-ui-select="{data: fields, multiple: true}" id="api4-param-fields" ng-model="params.fields" style="width: 85%;"/>
+          </div>
+          <div class="api4-input form-inline" ng-mouseenter="help('action', availableParams.action)" ng-mouseleave="help()"ng-if="availableParams.action">
+            <label for="api4-param-action">action<span class="crm-marker" ng-if="availableParams.action.required"> *</span></label>
+            <input class="form-control" crm-ui-select="{data: actions, allowClear: true, placeholder: 'None'}" id="api4-param-action" ng-model="params.action"/>
+          </div>
+          <div class="api4-input form-inline" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in availableParams" ng-if="!isSpecial(name) && (param.type[0] === 'string' || param.type[0] === 'int')">
+            <label for="api4-param-{{ name }}">{{ name }}<span class="crm-marker" ng-if="param.required"> *</span></label>
+            <input class="form-control" ng-if="!param.options" type="{{ param.type[0] === 'int' && param.type.length === 1 ? 'number' : 'text' }}" id="api4-param-{{ name }}" ng-model="params[name]"/>
+            <select class="form-control" ng-if="param.options" ng-options="o for o in param.options" id="api4-param-{{ name }}" ng-model="params[name]"></select>
+            <a href class="crm-hover-button" title="Clear" ng-click="clearParam(name)" ng-show="!!params[name]"><i class="crm-i fa-times"></i></a>
+          </div>
+          <div class="api4-input" ng-mouseenter="help(name, param)" ng-mouseleave="help()" ng-repeat="(name, param) in availableParams" ng-if="!isSpecial(name) && (param.type[0] === 'array' || param.type[0] === 'mixed')">
+            <label for="api4-param-{{ name }}">{{ name }}<span class="crm-marker" ng-if="param.required"> *</span></label>
+            <textarea class="form-control" type="{{ param.type[0] === 'int' && param.type.length === 1 ? 'number' : 'text' }}" id="api4-param-{{ name }}" ng-model="params[name]">
+            </textarea>
+          </div>
+          <fieldset ng-if="availableParams.where" class="api4-where-fieldset" ng-mouseenter="help('where', availableParams.where)" ng-mouseleave="help()" crm-api4-where-clause="{where: params.where, required: availableParams.where.required, op: 'AND', label: 'where', fields: fieldsAndJoins}">
+          </fieldset>
+          <fieldset ng-if="availableParams.values" ng-mouseenter="help('values', availableParams.values)" ng-mouseleave="help()">
+            <legend>values<span class="crm-marker" ng-if="availableParams.values.required"> *</span></legend>
+            <div class="api4-input form-inline" ng-repeat="clause in params.values" ng-mouseenter="help('value: ' + clause[0], fieldHelp(clause[0]))" ng-mouseleave="help('values', availableParams.values)">
+              <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields, allowClear: true, placeholder: 'Field'}" />
+              <input class="form-control" ng-model="clause[1]" api4-exp-value="{field: clause[0]}" />
+            </div>
+            <div class="api4-input form-inline">
+              <input class="collapsible-optgroups form-control" ng-model="controls.values" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields}" placeholder="Add value" />
+            </div>
+          </fieldset>
+          <fieldset ng-if="availableParams.orderBy" ng-mouseenter="help('orderBy', availableParams.orderBy)" ng-mouseleave="help()">
+            <legend>orderBy<span class="crm-marker" ng-if="availableParams.orderBy.required"> *</span></legend>
+            <div class="api4-input form-inline" ng-repeat="clause in params.orderBy">
+              <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{data: fieldsAndJoins, allowClear: true, placeholder: 'Field'}" />
+              <select class="form-control" ng-model="clause[1]">
+                <option value="ASC">ASC</option>
+                <option value="DESC">DESC</option>
+              </select>
+            </div>
+            <div class="api4-input form-inline">
+              <input class="collapsible-optgroups form-control" ng-model="controls.orderBy" crm-ui-select="{data: fieldsAndJoins}" placeholder="Add orderBy" />
+            </div>
+          </fieldset>
+          <fieldset ng-if="availableParams.chain" ng-mouseenter="help('chain', availableParams.chain)" ng-mouseleave="help()">
+            <legend>chain</legend>
+            <div class="api4-input form-inline" ng-repeat="clause in params.chain" api4-exp-chain="clause" entities="entities" main-entity="entity" >
+            </div>
+            <div class="api4-input form-inline">
+              <input class="form-control" ng-model="controls.chain" crm-ui-select="{data: entities}" placeholder="Add chain" />
+            </div>
+          </fieldset>
+        </div>
+      </form>
+      <div class="panel panel-info explorer-help-panel">
+        <div class="panel-heading">
+          <h3 class="panel-title" crm-icon="fa-info-circle">{{ helpTitle }}</h3>
+        </div>
+        <div class="panel-body">
+          <h4>{{ helpContent.description }}</h4>
+          <div ng-if="helpContent.comment">
+            <p ng-repeat='text in helpContent.comment.split("\n\n")'>{{ text }}</p>
+          </div>
+          <p ng-repeat="(key, item) in helpContent" ng-if="key !== 'description' && key !== 'comment'">
+            <strong>{{ key }}:</strong> {{ item }}
+          </p>
+        </div>
+      </div>
+  </div>
+  <div class="api4-explorer-row">
+      <div class="panel panel-warning explorer-code-panel">
+        <div class="panel-heading">
+          <h3 class="panel-title" crm-icon="fa-code">{{ ts('Code') }}</h3>
+        </div>
+        <div class="panel-body">
+          <table>
+            <tr ng-repeat="(type, item) in code">
+              <td>{{ codeLabel[type] }}</td>
+              <td><pre class="prettyprint" ng-bind-html="item"></pre></td>
+            </tr>
+          </table>
+        </div>
+      </div>
+      <div class="panel explorer-result-panel panel-{{ status }}" >
+        <div class="panel-heading">
+          <h3 class="panel-title">
+            <i class="fa fa-circle-o" ng-if="status === 'default'"></i>
+            <i class="fa fa-check-circle" ng-if="status === 'success'"></i>
+            <i class="fa fa-minus-circle" ng-if="status === 'danger'"></i>
+            <i class="fa fa-spinner fa-pulse" ng-if="status === 'warning'"></i>
+            {{ ts('Result') }}
+          </h3>
+        </div>
+        <div class="panel-body">
+          <pre class="prettyprint" ng-repeat="code in result" ng-bind-html="code"></pre>
+        </div>
+      </div>
+  </div>
+
+
+</div>
diff --git a/ang/api4Explorer/Explorer.js b/ang/api4Explorer/Explorer.js
new file mode 100644 (file)
index 0000000..3d596a2
--- /dev/null
@@ -0,0 +1,882 @@
+(function(angular, $, _, undefined) {
+
+  // Schema metadata
+  var schema = CRM.vars.api4.schema;
+  // FK schema data
+  var links = CRM.vars.api4.links;
+  // Cache list of entities
+  var entities = [];
+  // Cache list of actions
+  var actions = [];
+  // Field options
+  var fieldOptions = {};
+
+
+  angular.module('api4Explorer').config(function($routeProvider) {
+    $routeProvider.when('/explorer/:api4entity?/:api4action?', {
+      controller: 'Api4Explorer',
+      templateUrl: '~/api4Explorer/Explorer.html',
+      reloadOnSearch: false
+    });
+  });
+
+  angular.module('api4Explorer').controller('Api4Explorer', function($scope, $routeParams, $location, $timeout, $http, crmUiHelp, crmApi4) {
+    var ts = $scope.ts = CRM.ts();
+    $scope.entities = entities;
+    $scope.actions = actions;
+    $scope.fields = [];
+    $scope.fieldsAndJoins = [];
+    $scope.availableParams = {};
+    $scope.params = {};
+    $scope.index = '';
+    var getMetaParams = {},
+      objectParams = {orderBy: 'ASC', values: '', chain: ['Entity', '', '{}']},
+      helpTitle = '',
+      helpContent = {};
+    $scope.helpTitle = '';
+    $scope.helpContent = {};
+    $scope.entity = $routeParams.api4entity;
+    $scope.result = [];
+    $scope.status = 'default';
+    $scope.loading = false;
+    $scope.controls = {};
+    $scope.codeLabel = {
+      oop: ts('PHP (oop style)'),
+      php: ts('PHP (traditional)'),
+      js: ts('Javascript'),
+      cli: ts('Command Line')
+    };
+    $scope.code = codeDefaults();
+
+    function codeDefaults() {
+      return _.mapValues($scope.codeLabel, function(val, key) {
+        return key === 'oop' ? ts('Select an entity and action') : '';
+      });
+    }
+
+    if (!entities.length) {
+      formatForSelect2(schema, entities, 'name', ['description']);
+    }
+
+    $scope.$bindToRoute({
+      expr: 'index',
+      param: 'index',
+      default: ''
+    });
+
+    function ucfirst(str) {
+      return str[0].toUpperCase() + str.slice(1);
+    }
+
+    function lcfirst(str) {
+      return str[0].toLowerCase() + str.slice(1);
+    }
+
+    function pluralize(str) {
+      switch (str[str.length-1]) {
+        case 's':
+          return str + 'es';
+        case 'y':
+          return str.slice(0, -1) + 'ies';
+        default:
+          return str + 's';
+      }
+    }
+
+    // Turn a flat array into a select2 array
+    function arrayToSelect2(array) {
+      var out = [];
+      _.each(array, function(item) {
+        out.push({id: item, text: item});
+      });
+      return out;
+    }
+
+    // Reformat an existing array of objects for compatibility with select2
+    function formatForSelect2(input, container, key, extra, prefix) {
+      _.each(input, function(item) {
+        var id = (prefix || '') + item[key];
+        var formatted = {id: id, text: id};
+        if (extra) {
+          _.merge(formatted, _.pick(item, extra));
+        }
+        container.push(formatted);
+      });
+      return container;
+    }
+
+    function getFieldList(source) {
+      var fields = [],
+        fieldInfo = _.findWhere(getEntity().actions, {name: $scope.action}).fields;
+      formatForSelect2(fieldInfo, fields, 'name', ['description', 'required', 'default_value']);
+      return fields;
+    }
+
+    function addJoins(fieldList) {
+      var fields = _.cloneDeep(fieldList),
+        fks = _.findWhere(links, {entity: $scope.entity}) || {};
+      _.each(fks.links, function(link) {
+        var linkFields = entityFields(link.entity);
+        if (linkFields) {
+          fields.push({
+            text: link.alias,
+            description: 'Join to ' + link.entity,
+            children: formatForSelect2(linkFields, [], 'name', ['description'], link.alias + '.')
+          });
+        }
+      });
+      return fields;
+    }
+
+    $scope.help = function(title, param) {
+      if (!param) {
+        $scope.helpTitle = helpTitle;
+        $scope.helpContent = helpContent;
+      } else {
+        $scope.helpTitle = title;
+        $scope.helpContent = param;
+      }
+    };
+
+    $scope.fieldHelp = function(fieldName) {
+      var field = getField(fieldName, $scope.entity, $scope.action);
+      if (!field) {
+        return;
+      }
+      var info = {
+          description: field.description,
+          type: field.data_type
+        };
+      if (field.default_value) {
+        info.default = field.default_value;
+      }
+      if (field.required_if) {
+        info.required_if = field.required_if;
+      } else if (field.required) {
+        info.required = 'true';
+      }
+      return info;
+    };
+
+    $scope.valuesFields = function() {
+      var fields = _.cloneDeep($scope.fields);
+      // Disable fields that are already in use
+      _.each($scope.params.values || [], function(val) {
+        (_.findWhere(fields, {id: val[0]}) || {}).disabled = true;
+      });
+      return {results: fields};
+    };
+
+    $scope.formatSelect2Item = function(row) {
+      return _.escape(row.text) +
+        (row.required ? '<span class="crm-marker"> *</span>' : '') +
+        (row.description ? '<div class="crm-select2-row-description"><p>' + _.escape(row.description) + '</p></div>' : '');
+    };
+
+    $scope.clearParam = function(name) {
+      $scope.params[name] = $scope.availableParams[name].default;
+    };
+
+    $scope.isSpecial = function(name) {
+      var specialParams = ['select', 'fields', 'action', 'where', 'values', 'orderBy', 'chain'];
+      return _.contains(specialParams, name);
+    };
+
+    $scope.selectRowCount = function() {
+      if ($scope.isSelectRowCount()) {
+        $scope.params.select = [];
+      } else {
+        $scope.params.select = ['row_count'];
+        if ($scope.params.limit == 25) {
+          $scope.params.limit = 0;
+        }
+      }
+    };
+
+    $scope.isSelectRowCount = function() {
+      return $scope.params && $scope.params.select && $scope.params.select.length === 1 && $scope.params.select[0] === 'row_count';
+    };
+
+    function getEntity(entityName) {
+      return _.findWhere(schema, {name: entityName || $scope.entity});
+    }
+
+    // Get all params that have been set
+    function getParams() {
+      var params = {};
+      _.each($scope.params, function(param, key) {
+        if (param != $scope.availableParams[key].default && !(typeof param === 'object' && _.isEmpty(param))) {
+          if (_.contains($scope.availableParams[key].type, 'array') && (typeof objectParams[key] === 'undefined')) {
+            params[key] = parseYaml(_.cloneDeep(param));
+          } else {
+            params[key] = param;
+          }
+        }
+      });
+      _.each(objectParams, function(defaultVal, key) {
+        if (params[key]) {
+          var newParam = {};
+          _.each(params[key], function(item) {
+            var val = _.cloneDeep(item[1]);
+            // Remove blank items from "chain" array
+            if (_.isArray(val)) {
+              _.eachRight(item[1], function(v, k) {
+                if (v) {
+                  return false;
+                }
+                val.length--;
+              });
+            }
+            newParam[item[0]] = parseYaml(val);
+          });
+          params[key] = newParam;
+        }
+      });
+      return params;
+    }
+
+    function parseYaml(input) {
+      if (typeof input === 'undefined') {
+        return undefined;
+      }
+      if (_.isObject(input) || _.isArray(input)) {
+        _.each(input, function(item, index) {
+          input[index] = parseYaml(item);
+        });
+        return input;
+      }
+      try {
+        var output = (input === '>') ? '>' : jsyaml.safeLoad(input);
+        // We don't want dates parsed to js objects
+        return _.isDate(output) ? input : output;
+      } catch (e) {
+        return input;
+      }
+    }
+
+    function selectAction() {
+      $scope.action = $routeParams.api4action;
+      $scope.fieldsAndJoins = [];
+      if (!actions.length) {
+        formatForSelect2(getEntity().actions, actions, 'name', ['description', 'params']);
+      }
+      if ($scope.action) {
+        var actionInfo = _.findWhere(actions, {id: $scope.action});
+        $scope.fields = getFieldList();
+        if (_.contains(['get', 'update', 'delete', 'replace'], $scope.action)) {
+          $scope.fieldsAndJoins = addJoins($scope.fields);
+        } else {
+          $scope.fieldsAndJoins = $scope.fields;
+        }
+        _.each(actionInfo.params, function (param, name) {
+          var format,
+            defaultVal = _.cloneDeep(param.default);
+          if (param.type) {
+            switch (param.type[0]) {
+              case 'int':
+              case 'bool':
+                format = param.type[0];
+                break;
+
+              case 'array':
+              case 'object':
+                format = 'json';
+                break;
+
+              default:
+                format = 'raw';
+            }
+            if (name == 'limit') {
+              defaultVal = 25;
+            }
+            if (name === 'values') {
+              defaultVal = defaultValues(defaultVal);
+            }
+            $scope.$bindToRoute({
+              expr: 'params["' + name + '"]',
+              param: name,
+              format: format,
+              default: defaultVal,
+              deep: format === 'json'
+            });
+          }
+          if (typeof objectParams[name] !== 'undefined') {
+            $scope.$watch('params.' + name, function(values) {
+              // Remove empty values
+              _.each(values, function(clause, index) {
+                if (!clause || !clause[0]) {
+                  $scope.params[name].splice(index, 1);
+                }
+              });
+            }, true);
+            $scope.$watch('controls.' + name, function(value) {
+              var field = value;
+              $timeout(function() {
+                if (field) {
+                  var defaultOp = _.cloneDeep(objectParams[name]);
+                  if (name === 'chain') {
+                    var num = $scope.params.chain.length;
+                    defaultOp[0] = field;
+                    field = 'name_me_' + num;
+                  }
+                  $scope.params[name].push([field, defaultOp]);
+                  $scope.controls[name] = null;
+                }
+              });
+            });
+          }
+        });
+        $scope.availableParams = actionInfo.params;
+      }
+      writeCode();
+    }
+
+    function defaultValues(defaultVal) {
+      _.each($scope.fields, function(field) {
+        if (field.required) {
+          defaultVal.push([field.id, '']);
+        }
+      });
+      return defaultVal;
+    }
+
+    function stringify(value, trim) {
+      if (typeof value === 'undefined') {
+        return '';
+      }
+      var str = JSON.stringify(value).replace(/,/g, ', ');
+      if (trim) {
+        str = str.slice(1, -1);
+      }
+      return str.trim();
+    }
+
+    function writeCode() {
+      var code = codeDefaults(),
+        entity = $scope.entity,
+        action = $scope.action,
+        params = getParams(),
+        index = isInt($scope.index) ? +$scope.index : $scope.index,
+        result = 'result';
+      if ($scope.entity && $scope.action) {
+        if (action.slice(0, 3) === 'get') {
+          result = entity.substr(0, 7) === 'Custom_' ? _.camelCase(entity.substr(7)) : entity;
+          result = lcfirst(action.replace(/s$/, '').slice(3) || result);
+        }
+        var results = lcfirst(_.isNumber(index) ? result : pluralize(result)),
+          paramCount = _.size(params),
+          isSelectRowCount = params.select && params.select.length === 1 && params.select[0] === 'row_count',
+          i = 0;
+
+        if (isSelectRowCount) {
+          results = result + 'Count';
+        }
+
+        // Write javascript
+        code.js = "CRM.api4('" + entity + "', '" + action + "', {";
+        _.each(params, function(param, key) {
+          code.js += "\n  " + key + ': ' + stringify(param) +
+            (++i < paramCount ? ',' : '');
+          if (key === 'checkPermissions') {
+            code.js += ' // IGNORED: permissions are always enforced from client-side requests';
+          }
+        });
+        code.js += "\n}";
+        if (index || index === 0) {
+          code.js += ', ' + JSON.stringify(index);
+        }
+        code.js += ").then(function(" + results + ") {\n  // do something with " + results + " array\n}, function(failure) {\n  // handle failure\n});";
+
+        // Write php code
+        code.php = '$' + results + " = civicrm_api4('" + entity + "', '" + action + "', [";
+        _.each(params, function(param, key) {
+          code.php += "\n  '" + key + "' => " + phpFormat(param, 4) + ',';
+        });
+        code.php += "\n]";
+        if (index || index === 0) {
+          code.php += ', ' + phpFormat(index);
+        }
+        code.php += ");";
+        
+        // Write oop code
+        if (entity.substr(0, 7) !== 'Custom_') {
+          code.oop = '$' + results + " = \\Civi\\Api4\\" + entity + '::' + action + '()';
+        } else {
+          code.oop = '$' + results + " = \\Civi\\Api4\\CustomValue::" + action + "('" + entity.substr(7) + "')";
+        }
+        _.each(params, function(param, key) {
+          var val = '';
+          if (typeof objectParams[key] !== 'undefined' && key !== 'chain') {
+            _.each(param, function(item, index) {
+              val = phpFormat(index) + ', ' + phpFormat(item, 4);
+              code.oop += "\n  ->add" + ucfirst(key).replace(/s$/, '') + '(' + val + ')';
+            });
+          } else if (key === 'where') {
+            _.each(param, function (clause) {
+              if (clause[0] === 'AND' || clause[0] === 'OR' || clause[0] === 'NOT') {
+                code.oop += "\n  ->addClause(" + phpFormat(clause[0]) + ", " + phpFormat(clause[1]).slice(1, -1) + ')';
+              } else {
+                code.oop += "\n  ->addWhere(" + phpFormat(clause).slice(1, -1) + ")";
+              }
+            });
+          } else if (key === 'select' && isSelectRowCount) {
+            code.oop += "\n  ->selectRowCount()";
+          } else {
+            code.oop += "\n  ->set" + ucfirst(key) + '(' + phpFormat(param, 4) + ')';
+          }
+        });
+        code.oop += "\n  ->execute()";
+        if (_.isNumber(index)) {
+          code.oop += !index ? '\n  ->first()' : (index === -1 ? '\n  ->last()' : '\n  ->itemAt(' + index + ')');
+        } else if (index) {
+          code.oop += "\n  ->indexBy('" + index + "')";
+        } else if (isSelectRowCount) {
+          code.oop += "\n  ->count()";
+        }
+        code.oop += ";\n";
+        if (!_.isNumber(index) && !isSelectRowCount) {
+          code.oop += "foreach ($" + results + ' as $' + ((_.isString(index) && index) ? index + ' => $' : '') + result + ') {\n  // do something\n}';
+        }
+
+        // Write cli code
+        code.cli = 'cv api4 ' + entity + '.' + action + " '" + stringify(params) + "'";
+      }
+      _.each(code, function(val, type) {
+        $scope.code[type] = prettyPrintOne(val);
+      });
+    }
+
+    function isInt(value) {
+      if (_.isFinite(value)) {
+        return true;
+      }
+      if (!_.isString(value)) {
+        return false;
+      }
+      return /^-{0,1}\d+$/.test(value);
+    }
+
+    function formatMeta(resp) {
+      var ret = '';
+      _.each(resp, function(val, key) {
+        if (key !== 'values' && !_.isPlainObject(val) && !_.isFunction(val)) {
+          ret += (ret.length ? ', ' : '') + key + ': ' + (_.isArray(val) ? '[' + val + ']' : val);
+        }
+      });
+      return prettyPrintOne(ret);
+    }
+
+    $scope.execute = function() {
+      $scope.status = 'warning';
+      $scope.loading = true;
+      $http.get(CRM.url('civicrm/ajax/api4/' + $scope.entity + '/' + $scope.action, {
+        params: angular.toJson(getParams()),
+        index: $scope.index
+      })).then(function(resp) {
+          $scope.loading = false;
+          $scope.status = 'success';
+          $scope.result = [formatMeta(resp.data), prettyPrintOne(JSON.stringify(resp.data.values, null, 2), 'js', 1)];
+        }, function(resp) {
+          $scope.loading = false;
+          $scope.status = 'danger';
+          $scope.result = [formatMeta(resp), prettyPrintOne(JSON.stringify(resp.data, null, 2))];
+        });
+    };
+
+    /**
+     * Format value to look like php code
+     */
+    function phpFormat(val, indent) {
+      if (typeof val === 'undefined') {
+        return '';
+      }
+      indent = (typeof indent === 'number') ? _.repeat(' ', indent) : (indent || '');
+      var ret = '',
+        baseLine = indent ? indent.slice(0, -2) : '',
+        newLine = indent ? '\n' : '',
+        trailingComma = indent ? ',' : '';
+      if ($.isPlainObject(val)) {
+        $.each(val, function(k, v) {
+          ret += (ret ? ', ' : '') + newLine + indent + "'" + k + "' => " + phpFormat(v);
+        });
+        return '[' + ret + trailingComma + newLine + baseLine + ']';
+      }
+      if ($.isArray(val)) {
+        $.each(val, function(k, v) {
+          ret += (ret ? ', ' : '') + newLine + indent + phpFormat(v);
+        });
+        return '[' + ret + trailingComma + newLine + baseLine + ']';
+      }
+      if (_.isString(val) && !_.contains(val, "'")) {
+        return "'" + val + "'";
+      }
+      return JSON.stringify(val).replace(/\$/g, '\\$');
+    }
+
+    function fetchMeta() {
+      crmApi4(getMetaParams)
+        .then(function(data) {
+          if (data.actions) {
+            getEntity().actions = data.actions;
+            selectAction();
+          }
+        });
+    }
+
+    // Help for an entity with no action selected
+    function showEntityHelp(entityName) {
+      var entityInfo = getEntity(entityName);
+      $scope.helpTitle = helpTitle = $scope.entity;
+      $scope.helpContent = helpContent = {
+        description: entityInfo.description,
+        comment: entityInfo.comment
+      };
+    }
+
+    if (!$scope.entity) {
+      $scope.helpTitle = helpTitle = ts('Help');
+      $scope.helpContent = helpContent = {description: ts('Welcome to the api explorer.'), comment: ts('Select an entity to begin.')};
+    } else if (!actions.length && !getEntity().actions) {
+      getMetaParams.actions = [$scope.entity, 'getActions', {chain: {fields: [$scope.entity, 'getFields', {action: '$name'}]}}];
+      fetchMeta();
+    } else {
+      selectAction();
+    }
+
+    if ($scope.entity) {
+      showEntityHelp($scope.entity);
+    }
+
+    // Update route when changing entity
+    $scope.$watch('entity', function(newVal, oldVal) {
+      if (oldVal !== newVal) {
+        // Flush actions cache to re-fetch for new entity
+        actions = [];
+        $location.url('/explorer/' + newVal);
+      }
+    });
+
+    // Update route when changing actions
+    $scope.$watch('action', function(newVal, oldVal) {
+      if ($scope.entity && $routeParams.api4action !== newVal && !_.isUndefined(newVal)) {
+        $location.url('/explorer/' + $scope.entity + '/' + newVal);
+      } else if (newVal) {
+        $scope.helpTitle = helpTitle = $scope.entity + '::' + newVal;
+        $scope.helpContent = helpContent = _.pick(_.findWhere(getEntity().actions, {name: newVal}), ['description', 'comment']);
+      }
+    });
+
+    $scope.indexHelp = {
+      description: ts('(string|int) Index results or select by index.'),
+      comment: ts('Pass a string to index the results by a field value. E.g. index: "name" will return an associative array with names as keys.') + '\n\n' +
+        ts('Pass an integer to return a single result; e.g. index: 0 will return the first result, 1 will return the second, and -1 will return the last.')
+    };
+
+    $scope.$watch('params', writeCode, true);
+    $scope.$watch('index', writeCode);
+    writeCode();
+
+  });
+
+  angular.module('api4Explorer').directive('crmApi4WhereClause', function($timeout) {
+    return {
+      scope: {
+        data: '=crmApi4WhereClause'
+      },
+      templateUrl: '~/api4Explorer/WhereClause.html',
+      link: function (scope, element, attrs) {
+        var ts = scope.ts = CRM.ts();
+        scope.newClause = '';
+        scope.conjunctions = ['AND', 'OR', 'NOT'];
+        scope.operators = CRM.vars.api4.operators;
+
+        scope.addGroup = function(op) {
+          scope.data.where.push([op, []]);
+        };
+
+        scope.removeGroup = function() {
+          scope.data.groupParent.splice(scope.data.groupIndex, 1);
+        };
+
+        scope.onSort = function(event, ui) {
+          $('.api4-where-fieldset').toggleClass('api4-sorting', event.type === 'sortstart');
+          $('.api4-input.form-inline').css('margin-left', '');
+        };
+
+        // Indent clause while dragging between nested groups
+        scope.onSortOver = function(event, ui) {
+          var offset = 0;
+          if (ui.sender) {
+            offset = $(ui.placeholder).offset().left - $(ui.sender).offset().left;
+          }
+          $('.api4-input.form-inline.ui-sortable-helper').css('margin-left', '' + offset + 'px');
+        };
+
+        scope.$watch('newClause', function(value) {
+          var field = value;
+          $timeout(function() {
+            if (field) {
+              scope.data.where.push([field, '=', '']);
+              scope.newClause = null;
+            }
+          });
+        });
+        scope.$watch('data.where', function(values) {
+          // Remove empty values
+          _.each(values, function(clause, index) {
+            if (typeof clause !== 'undefined' && !clause[0]) {
+              values.splice(index, 1);
+            }
+          });
+        }, true);
+      }
+    };
+  });
+
+  angular.module('api4Explorer').directive('api4ExpValue', function($routeParams, crmApi4) {
+    return {
+      scope: {
+        data: '=api4ExpValue'
+      },
+      require: 'ngModel',
+      link: function (scope, element, attrs, ctrl) {
+        var ts = scope.ts = CRM.ts(),
+          multi = _.includes(['IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'], scope.data.op),
+          entity = $routeParams.api4entity,
+          action = $routeParams.api4action;
+
+        function destroyWidget() {
+          var $el = $(element);
+          if ($el.is('.crm-form-date-wrapper .crm-hidden-date')) {
+            $el.crmDatepicker('destroy');
+          }
+          if ($el.is('.select2-container + input')) {
+            $el.crmEntityRef('destroy');
+          }
+          $(element).removeData().removeAttr('type').removeAttr('placeholder').show();
+        }
+
+        function makeWidget(field, op) {
+          var $el = $(element),
+            inputType = field.input_type;
+            dataType = field.data_type;
+          if (!op) {
+            op = field.serialize || dataType === 'Array' ? 'IN' : '=';
+          }
+          multi = _.includes(['IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'], op);
+          if (op === 'IS NULL' || op === 'IS NOT NULL') {
+            $el.hide();
+            return;
+          }
+          if (inputType === 'Date') {
+            if (_.includes(['=', '!=', '<>', '<', '>=', '<', '<='], op)) {
+              $el.crmDatepicker({time: (field.input_attrs && field.input_attrs.time) || false});
+            }
+          } else if (_.includes(['=', '!=', '<>', 'IN', 'NOT IN'], op) && (field.fk_entity || field.options || dataType === 'Boolean')) {
+            if (field.fk_entity) {
+              $el.crmEntityRef({entity: field.fk_entity, select:{multiple: multi}});
+            } else if (field.options) {
+              $el.addClass('loading').attr('placeholder', ts('- select -')).crmSelect2({multiple: multi, data: [{id: '', text: ''}]});
+              loadFieldOptions(field.entity || entity).then(function(data) {
+                var options = [];
+                _.each(_.findWhere(data, {name: field.name}).options, function(val, key) {
+                  options.push({id: key, text: val});
+                });
+                $el.removeClass('loading').select2({data: options, multiple: multi});
+              });
+            } else if (dataType === 'Boolean') {
+              $el.attr('placeholder', ts('- select -')).crmSelect2({allowClear: false, multiple: multi, placeholder: ts('- select -'), data: [
+                {id: '1', text: ts('Yes')},
+                {id: '0', text: ts('No')}
+              ]});
+            }
+          } else if (dataType === 'Integer' && !multi) {
+            $el.attr('type', 'number');
+          }
+        }
+
+        function loadFieldOptions(entity) {
+          if (!fieldOptions[entity + action]) {
+            fieldOptions[entity + action] = crmApi4(entity, 'getFields', {
+              loadOptions: true,
+              action: action,
+              where: [["options", "!=", false]],
+              select: ["name", "options"]
+            });
+          }
+          return fieldOptions[entity + action];
+        }
+
+        // Copied from ng-list but applied conditionally if field is multi-valued
+        var parseList = function(viewValue) {
+          // If the viewValue is invalid (say required but empty) it will be `undefined`
+          if (_.isUndefined(viewValue)) return;
+
+          if (!multi) {
+            return viewValue;
+          }
+
+          var list = [];
+
+          if (viewValue) {
+            _.each(viewValue.split(','), function(value) {
+              if (value) list.push(_.trim(value));
+            });
+          }
+
+          return list;
+        };
+
+        // Copied from ng-list
+        ctrl.$parsers.push(parseList);
+        ctrl.$formatters.push(function(value) {
+          return _.isArray(value) ? value.join(', ') : value;
+        });
+
+        // Copied from ng-list
+        ctrl.$isEmpty = function(value) {
+          return !value || !value.length;
+        };
+
+        scope.$watchCollection('data', function(data) {
+          destroyWidget();
+          var field = getField(data.field, entity, action);
+          if (field) {
+            makeWidget(field, data.op);
+          }
+        });
+      }
+    };
+  });
+
+
+  angular.module('api4Explorer').directive('api4ExpChain', function(crmApi4) {
+    return {
+      scope: {
+        chain: '=api4ExpChain',
+        mainEntity: '=',
+        entities: '='
+      },
+      templateUrl: '~/api4Explorer/Chain.html',
+      link: function (scope, element, attrs) {
+        var ts = scope.ts = CRM.ts();
+
+        function changeEntity(newEntity, oldEntity) {
+          // When clearing entity remove this chain
+          if (!newEntity) {
+            scope.chain[0] = '';
+            return;
+          }
+          // Reset action && index
+          if (newEntity !== oldEntity) {
+            scope.chain[1][1] = scope.chain[1][2] = '';
+          }
+          if (getEntity(newEntity).actions) {
+            setActions();
+          } else {
+            crmApi4(newEntity, 'getActions', {chain: {fields: [newEntity, 'getFields', {action: '$name'}]}})
+              .then(function(data) {
+                getEntity(data.entity).actions = data;
+                if (data.entity === scope.chain[1][0]) {
+                  setActions();
+                }
+              });
+          }
+        }
+
+        function setActions() {
+          scope.actions = [''].concat(_.pluck(getEntity(scope.chain[1][0]).actions, 'name'));
+        }
+
+        // Set default params when choosing action
+        function changeAction(newAction, oldAction) {
+          var link;
+          // Prepopulate links
+          if (newAction && newAction !== oldAction) {
+            // Clear index
+            scope.chain[1][3] = '';
+            // Look for links back to main entity
+            _.each(entityFields(scope.chain[1][0]), function(field) {
+              if (field.fk_entity === scope.mainEntity) {
+                link = [field.name, '$id'];
+              }
+            });
+            // Look for links from main entity
+            if (!link && newAction !== 'create') {
+              _.each(entityFields(scope.mainEntity), function(field) {
+                if (field.fk_entity === scope.chain[1][0]) {
+                  link = ['id', '$' + field.name];
+                  // Since we're specifying the id, set index to getsingle
+                  scope.chain[1][3] = '0';
+                }
+              });
+            }
+            if (link && _.contains(['get', 'update', 'replace', 'delete'], newAction)) {
+              scope.chain[1][2] = '{where: [[' + link[0] + ', =, ' + link[1] + ']]}';
+            }
+            else if (link && _.contains(['create'], newAction)) {
+              scope.chain[1][2] = '{values: {' + link[0] + ': ' + link[1] + '}}';
+            }
+            else if (link && _.contains(['save'], newAction)) {
+              scope.chain[1][2] = '{records: [{' + link[0] + ': ' + link[1] + '}]}';
+            } else {
+              scope.chain[1][2] = '{}';
+            }
+          }
+        }
+
+        scope.$watch("chain[1][0]", changeEntity);
+        scope.$watch("chain[1][1]", changeAction);
+      }
+    };
+  });
+
+  function getEntity(entityName) {
+    return _.findWhere(schema, {name: entityName});
+  }
+
+  function entityFields(entityName, action) {
+    var entity = getEntity(entityName);
+    if (entity && action && entity.actions) {
+      return _.findWhere(entity.actions, {name: action}).fields;
+    }
+    return _.result(entity, 'fields');
+  }
+
+  function getField(fieldName, entity, action) {
+    var fieldNames = fieldName.split('.');
+    return get(entity, fieldNames);
+
+    function get(entity, fieldNames) {
+      if (fieldNames.length === 1) {
+        return _.findWhere(entityFields(entity, action), {name: fieldNames[0]});
+      }
+      var comboName = _.findWhere(entityFields(entity, action), {name: fieldNames[0] + '.' + fieldNames[1]});
+      if (comboName) {
+        return comboName;
+      }
+      var linkName = fieldNames.shift(),
+        entityLinks = _.findWhere(links, {entity: entity}).links,
+        newEntity = _.findWhere(entityLinks, {alias: linkName}).entity;
+      return get(newEntity, fieldNames);
+    }
+  }
+
+  // Collapsible optgroups for select2
+  $(function() {
+    $('body')
+      .on('select2-open', function(e) {
+        if ($(e.target).hasClass('collapsible-optgroups')) {
+          $('#select2-drop')
+            .off('.collapseOptionGroup')
+            .addClass('collapsible-optgroups-enabled')
+            .on('click.collapseOptionGroup', '.select2-result-with-children > .select2-result-label', function() {
+              $(this).parent().toggleClass('optgroup-expanded');
+            });
+        }
+      })
+     .on('select2-close', function() {
+        $('#select2-drop').off('.collapseOptionGroup').removeClass('collapsible-optgroups-enabled');
+      });
+  });
+})(angular, CRM.$, CRM._);
diff --git a/ang/api4Explorer/WhereClause.html b/ang/api4Explorer/WhereClause.html
new file mode 100644 (file)
index 0000000..d36480f
--- /dev/null
@@ -0,0 +1,39 @@
+<legend>{{ data.label || data.op + ' group' }}<span class="crm-marker" ng-if="data.required"> *</span></legend>
+<div class="btn-group btn-group-xs" ng-if="data.groupParent">
+  <button class="btn btn-danger-outline" ng-click="removeGroup()" title="{{ ts('Remove group') }}">
+    <i class="crm-i fa-trash"></i>
+  </button>
+</div>
+<div class="api4-where-group-sortable" ng-model="data.where" ui-sortable="{axis: 'y', connectWith: '.api4-where-group-sortable', containment: '.api4-where-fieldset', over: onSortOver, start: onSort, stop: onSort}">
+  <div class="api4-input form-inline clearfix" ng-repeat="(index, clause) in data.where">
+    <div class="api4-clause-badge" title="{{ ts('Drag to reposition') }}">
+      <span class="badge badge-info">
+        <span ng-if="!index && !data.groupParent">Where</span>
+        <span ng-if="index || data.groupParent">{{ data.op }}</span>
+        <i class="crm-i fa-arrows"></i>
+      </span>
+    </div>
+    <div ng-if="clause[0] !== 'AND' && clause[0] !== 'OR' && clause[0] !== 'NOT'" class="api4-input-group">
+      <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{data: data.fields, allowClear: true, placeholder: 'Field'}" />
+      <select class="form-control api4-operator" ng-model="clause[1]" ng-options="o for o in operators" ></select>
+      <input class="form-control" ng-model="clause[2]" api4-exp-value="{field: clause[0], op: clause[1]}" />
+    </div>
+    <fieldset class="clearfix" ng-if="clause[0] === 'AND' || clause[0] === 'OR' || clause[0] === 'NOT'" crm-api4-where-clause="{where: clause[1], op: clause[0], fields: data.fields, operators: data.operators, groupParent: data.where, groupIndex: index}">
+    </fieldset>
+  </div>
+</div>
+<div class="api4-input form-inline">
+  <div class="api4-clause-badge">
+    <div class="btn-group btn-group-xs" title="{{ data.groupParent ? ts('Add a subgroup of clauses') : ts('Add a group of clauses') }}">
+      <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+        {{ data.op }} <span class="caret"></span>
+      </button>
+      <ul class="dropdown-menu api4-add-where-group-menu">
+        <li ng-repeat="con in conjunctions" ng-if="data.op !== con">
+          <a href ng-click="addGroup(con)">{{ con }}</a>
+        </li>
+      </ul>
+    </div>
+  </div>
+  <input class="collapsible-optgroups form-control" ng-model="newClause" title="Add a single clause" crm-ui-select="{data: data.fields, placeholder: 'Add clause'}" />
+</div>
\ No newline at end of file
index a1ff51ae5749074c93fd2d019b1e93a5950f9815..af7958e344366745f4bf1d7f30f35f423b0d4a90 100644 (file)
             reqs.caseStatuses = ['OptionValue', 'get', {
               option_group_id: 'case_status',
               sequential: 1,
-              options: {limit: 0}
+              options: {
+                sort: 'weight',
+                limit: 0
+              }
             }];
             reqs.actTypes = ['OptionValue', 'get', {
               option_group_id: 'activity_type',
 
       // go lookup and add client-perspective labels for $scope.caseType.definition.caseRoles
       _.each($scope.caseType.definition.caseRoles, function (set) {
-        _.each($scope.relationshipTypeOptions, function (relTypes) {
-          if (relTypes.text == set.name) {
-            set.displaylabel = relTypes.id;
+        _.each($scope.relationshipTypeOptions, function (relationshipTypeOption) {
+          if (relationshipTypeOption.text == set.name) {
+            // relationshipTypeOption.id here corresponds to one of the civicrm_relationship_type.label database fields, not civicrm_relationship_type.id
+            set.displaylabel = relationshipTypeOption.id;
           }
         });
       });
            CRM.loadForm(CRM.url('civicrm/admin/reltype', {action: 'add', reset: 1, label_a_b: roleName}))
             .on('crmFormSuccess', function(e, data) {
               var newType = _.values(data.relationshipType)[0];
-              roles.push({name: newType.label_b_a, displaylabel: newType.label_a_b});
-              // Assume that the case role should be A-B but add both directions as options.
-              $scope.relationshipTypeOptions.push({id: newType.label_a_b, text: newType.label_a_b});
-              if (newType.label_a_b != newType.label_b_a) {
-                $scope.relationshipTypeOptions.push({id: newType.label_b_a, text: newType.label_b_a});
-              }
-              $scope.$digest();
+              $scope.$apply(function() {
+                $scope.addRoleOnTheFly(roles, newType);
+              });
             });
         }
       }
     };
 
+    $scope.addRoleOnTheFly = function(roles, newType) {
+      roles.push({name: newType.label_b_a, displaylabel: newType.label_a_b});
+      // Assume that the case role should be A-B but add both directions as options.
+      $scope.relationshipTypeOptions.push({id: newType.label_a_b, text: newType.label_b_a});
+      if (newType.label_a_b != newType.label_b_a) {
+        $scope.relationshipTypeOptions.push({id: newType.label_b_a, text: newType.label_a_b});
+      }
+    };
+
     $scope.onManagerChange = function(managerRole) {
       angular.forEach($scope.caseType.definition.caseRoles, function(caseRole) {
         if (caseRole != managerRole) {
index 5d67281e45816399b48ec2b34ebaedeeeea2ef85..43f2d735c7a133bbae0c5803907501427dbca410 100644 (file)
@@ -23,6 +23,48 @@ function civicrm_api($entity, $action, $params, $extra = NULL) {
   return \Civi::service('civi_api_kernel')->runSafe($entity, $action, $params, $extra);
 }
 
+/**
+ * Procedural wrapper for the OO api version 4.
+ *
+ * @param string $entity
+ * @param string $action
+ * @param array $params
+ * @param string|int $index
+ *   If $index is a string, the results array will be indexed by that key.
+ *   If $index is an integer, only the result at that index will be returned.
+ *
+ * @return \Civi\Api4\Generic\Result
+ * @throws \API_Exception
+ * @throws \Civi\API\Exception\NotImplementedException
+ */
+function civicrm_api4($entity, $action, $params = [], $index = NULL) {
+  $apiCall = \Civi\Api4\Utils\ActionUtil::getAction($entity, $action);
+  foreach ($params as $name => $param) {
+    $setter = 'set' . ucfirst($name);
+    $apiCall->$setter($param);
+  }
+  $result = $apiCall->execute();
+
+  // Index results by key
+  if ($index && is_string($index) && !CRM_Utils_Rule::integer($index)) {
+    $result->indexBy($index);
+  }
+  // Return result at index
+  if (CRM_Utils_Rule::integer($index)) {
+    $item = $result->itemAt($index);
+    if (is_null($item)) {
+      throw new \API_Exception("Index $index not found in api results");
+    }
+    // Attempt to return a Result object if item is array, otherwise just return the item
+    if (!is_array($item)) {
+      return $item;
+    }
+    $result->exchangeArray($item);
+
+  }
+  return $result;
+}
+
 /**
  * Version 3 wrapper for civicrm_api.
  *
index 48c3f93b858367cfae24c2a0eb2870ed11916841..be44a1b6b31955f061d36b88ad101fa7075935c7 100644 (file)
@@ -394,3 +394,50 @@ function civicrm_api3_custom_value_gettree($params) {
   }
   return civicrm_api3_create_success($result, $params, 'CustomValue', 'gettree');
 }
+
+/**
+ * CustomValue.getdisplayvalue API specification
+ *
+ * @param array $spec description of fields supported by this API call
+ */
+function _civicrm_api3_custom_value_getdisplayvalue_spec(&$spec) {
+  $spec['entity_id'] = [
+    'title' => 'Entity Id',
+    'description' => 'Id of entity',
+    'type' => CRM_Utils_Type::T_INT,
+    'api.required' => 1,
+  ];
+  $spec['custom_field_id'] = [
+    'title' => 'Custom Field ID',
+    'description' => 'Id of custom field',
+    'type' => CRM_Utils_Type::T_INT,
+    'api.required' => 1,
+  ];
+  $spec['custom_field_value'] = [
+    'title' => 'Custom Field value',
+    'description' => 'Specify the value of the custom field to return as displayed value',
+    'type' => CRM_Utils_Type::T_STRING,
+    'api.required' => 0,
+  ];
+}
+
+/**
+ * CustomValue.getdisplayvalue API
+ *
+ * @param array $params
+ *
+ * @return array API result
+ * @throws \CiviCRM_API3_Exception
+ */
+function civicrm_api3_custom_value_getdisplayvalue($params) {
+  if (empty($params['custom_field_value'])) {
+    $params['custom_field_value'] = civicrm_api3('CustomValue', 'getsingle', [
+      'return' => ["custom_{$params['custom_field_id']}"],
+      'entity_id' => $params['entity_id'],
+    ]);
+    $params['custom_field_value'] = $params['custom_field_value']['latest'];
+  }
+  $values[$params['custom_field_id']]['display'] = CRM_Core_BAO_CustomField::displayValue($params['custom_field_value'], $params['custom_field_id'], CRM_Utils_Array::value('entity_id', $params));
+  $values[$params['custom_field_id']]['raw'] = $params['custom_field_value'];
+  return civicrm_api3_create_success($values, $params, 'CustomValue', 'getdisplayvalue');
+}
index 0e7ef7c6429de7bedd48ab57a25b872dc31a125d..7572e0fc00172101f7843e1425bab37e86afc7eb 100644 (file)
@@ -41,6 +41,7 @@
  *   API result array.
  *
  * @throws \API_Exception
+ * @throws \CiviCRM_API3_Exception
  */
 function civicrm_api3_loc_block_create($params) {
   $entities = [];
index 4ac10c070fc8714e0f2984ee44ba7ae22b6e8fd8..4ec6647c22d3aa4f455d7588f9debd577e4f0bde 100644 (file)
@@ -47,6 +47,9 @@ function civicrm_api3_payment_get($params) {
     $limit = CRM_Utils_Array::value('limit', $params['options']);
   }
   $params['options']['limit'] = 0;
+  if (isset($params['trxn_id'])) {
+    $params['financial_trxn_id.trxn_id'] = $params['trxn_id'];
+  }
   $eft = civicrm_api3('EntityFinancialTrxn', 'get', $params);
   if (!empty($eft['values'])) {
     $eftIds = [];
@@ -210,6 +213,10 @@ function _civicrm_api3_payment_get_spec(&$params) {
       'type' => CRM_Utils_Type::T_INT,
       'api.aliases' => ['contribution_id'],
     ],
+    'trxn_id' => [
+      'title' => 'Transaction ID',
+      'type' => CRM_Utils_Type::T_STRING,
+    ],
   ];
 }
 
index 0c8b7c13166265dab6dac8f6cadceae849ba119c..5cd0195f0949ca012c5efcfaec49ad5a92996639 100644 (file)
@@ -155,7 +155,7 @@ function _civicrm_api3_payment_processor_pay_spec(&$params) {
   ];
   $params['amount'] = [
     'api.required' => TRUE,
-    'title' => ts('Amount to refund'),
+    'title' => ts('Amount to pay'),
     'type' => CRM_Utils_Type::T_MONEY,
   ];
 }
index 5f4b74bd9bfe8014c3162ca12e8a51a91dc21c98..a3674146350a41aebea2a1b9f174dc0f7a2f3e52 100644 (file)
@@ -32,6 +32,7 @@ mailerJobSize
 mailerJobsMax
 maxFileSize
 max_attachments
+max_attachments_backend
 replyTo
 secondDegRelPermissions
 securityAlert
index e775abbb76edda865a38580d7a539adb53345f57..a1e4172a0add88e9ae1173cdcfc4982d85f62e48 100644 (file)
@@ -9,7 +9,7 @@
  */
 function contribution_create_example() {
   $params = [
-    'contact_id' => 31,
+    'contact_id' => 32,
     'receive_date' => '20120511',
     'total_amount' => '100',
     'financial_type_id' => 1,
@@ -18,7 +18,7 @@ function contribution_create_example() {
     'net_amount' => '95',
     'source' => 'SSF',
     'contribution_status_id' => 1,
-    'honor_contact_id' => 32,
+    'honor_contact_id' => 33,
   ];
 
   try{
@@ -56,7 +56,7 @@ function contribution_create_expectedresult() {
     'values' => [
       '1' => [
         'id' => '1',
-        'contact_id' => '31',
+        'contact_id' => '32',
         'financial_type_id' => '1',
         'contribution_page_id' => '',
         'payment_instrument_id' => '4',
@@ -85,6 +85,7 @@ function contribution_create_expectedresult() {
         'creditnote_id' => '',
         'tax_amount' => '',
         'revenue_recognition_date' => '',
+        'is_template' => '',
         'contribution_type_id' => '1',
       ],
     ],
index 1c22dd7f1f7409a3e51a3b2dfd574fd5e12a9718..16bf6b2e4dcce9b23a970e0b487169e48f93b771 100644 (file)
@@ -9,7 +9,7 @@
  */
 function contribution_create_example() {
   $params = [
-    'contact_id' => 25,
+    'contact_id' => 26,
     'receive_date' => '2012-01-01',
     'total_amount' => '100',
     'financial_type_id' => 1,
@@ -59,7 +59,7 @@ function contribution_create_expectedresult() {
     'values' => [
       '1' => [
         'id' => '1',
-        'contact_id' => '25',
+        'contact_id' => '26',
         'financial_type_id' => '1',
         'contribution_page_id' => '',
         'payment_instrument_id' => '1',
@@ -88,6 +88,7 @@ function contribution_create_expectedresult() {
         'creditnote_id' => '',
         'tax_amount' => '',
         'revenue_recognition_date' => '',
+        'is_template' => '',
         'contribution_type_id' => '1',
       ],
     ],
index e4d36539ba9ad5b1442f1c2df3fb6d4b10985384..d830ef95e0cddec7a811ba8cdebee0c6ed27c132 100644 (file)
@@ -9,7 +9,7 @@
  */
 function contribution_create_example() {
   $params = [
-    'contact_id' => 27,
+    'contact_id' => 28,
     'receive_date' => '20120511',
     'total_amount' => '100',
     'financial_type_id' => 1,
@@ -20,7 +20,7 @@ function contribution_create_example() {
     'contribution_status_id' => 1,
     'soft_credit' => [
       '1' => [
-        'contact_id' => 28,
+        'contact_id' => 29,
         'amount' => 50,
         'soft_credit_type_id' => 3,
       ],
@@ -62,7 +62,7 @@ function contribution_create_expectedresult() {
     'values' => [
       '1' => [
         'id' => '1',
-        'contact_id' => '27',
+        'contact_id' => '28',
         'financial_type_id' => '1',
         'contribution_page_id' => '',
         'payment_instrument_id' => '4',
@@ -91,6 +91,7 @@ function contribution_create_expectedresult() {
         'creditnote_id' => '',
         'tax_amount' => '',
         'revenue_recognition_date' => '',
+        'is_template' => '',
         'contribution_type_id' => '1',
       ],
     ],
index 2c6729fb0a90e80739f285933a3daa0f6dd7b211..915a68c5bcdede4501e431f6688eef4d235f4661 100644 (file)
@@ -9,7 +9,7 @@
  */
 function contribution_create_example() {
   $params = [
-    'contact_id' => 29,
+    'contact_id' => 30,
     'receive_date' => '20120511',
     'total_amount' => '100',
     'financial_type_id' => 1,
@@ -18,7 +18,7 @@ function contribution_create_example() {
     'net_amount' => '95',
     'source' => 'SSF',
     'contribution_status_id' => 1,
-    'soft_credit_to' => 30,
+    'soft_credit_to' => 31,
   ];
 
   try{
@@ -56,7 +56,7 @@ function contribution_create_expectedresult() {
     'values' => [
       '1' => [
         'id' => '1',
-        'contact_id' => '29',
+        'contact_id' => '30',
         'financial_type_id' => '1',
         'contribution_page_id' => '',
         'payment_instrument_id' => '4',
@@ -85,6 +85,7 @@ function contribution_create_expectedresult() {
         'creditnote_id' => '',
         'tax_amount' => '',
         'revenue_recognition_date' => '',
+        'is_template' => '',
         'contribution_type_id' => '1',
       ],
     ],
index 7540683df7fc2d51c2f5afa1760fb1ed614911e1..1d47cb3a30d3b14b16a431a638df01aecd81e461 100644 (file)
@@ -83,6 +83,7 @@ function contribution_create_expectedresult() {
         'creditnote_id' => '',
         'tax_amount' => '',
         'revenue_recognition_date' => '',
+        'is_template' => '',
         'contribution_type_id' => '1',
       ],
     ],
index 3c27c405c59f2120a26ccc1a500e6918b4303ed0..36e23c41c7b4d437ac53b6c4b304a6a4409ae704 100644 (file)
@@ -9,7 +9,7 @@
  */
 function contribution_create_example() {
   $params = [
-    'contact_id' => 12,
+    'contact_id' => 13,
     'receive_date' => '20120511',
     'total_amount' => '100',
     'financial_type_id' => 1,
@@ -73,7 +73,7 @@ function contribution_create_expectedresult() {
     'values' => [
       '1' => [
         'id' => '1',
-        'contact_id' => '12',
+        'contact_id' => '13',
         'financial_type_id' => '1',
         'contribution_page_id' => '',
         'payment_instrument_id' => '1',
@@ -102,6 +102,7 @@ function contribution_create_expectedresult() {
         'creditnote_id' => '',
         'tax_amount' => 0,
         'revenue_recognition_date' => '',
+        'is_template' => '',
         'contribution_type_id' => '1',
         'api.line_item.create' => [
           '0' => [
index b298a5c9baebd2f2c26493abea016c50179dc766..69eb155eadd9589caa259ccb38d90bc8f07f543a 100644 (file)
@@ -64,7 +64,8 @@
     "pear/log": "1.13.1",
     "katzien/php-mime-type": "2.1.0",
     "civicrm/composer-downloads-plugin": "^2.0",
-    "league/csv": "^9.2"
+    "league/csv": "^9.2",
+    "tplaner/when": "dev-master#c1ec099f421bff354cc5c929f83b94031423fc80"
   },
   "require-dev": {
     "cache/integration-tests": "dev-master"
       "select2": {
         "url": "https://github.com/colemanw/select2/archive/v3.5-civicrm-1.0.zip"
       },
+      "js-yaml": {
+        "url": "https://github.com/nodeca/js-yaml/archive/3.13.1.zip",
+        "ignore": ["benchmark", "bin", "demo", "examples", "lib", "support", "test"]
+      },
       "smartmenus": {
         "url": "https://github.com/vadikom/smartmenus/archive/1.1.0.zip",
         "ignore": [".gitignore", "Gruntfile.js"]
index ab0f88ec85c2107011c5f89251960cf47f8d1db6..78a349252e2144d0a3b555514b4c07a882a7020f 100644 (file)
@@ -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": "195f60bb40e72b390be3211fcc870a38",
+    "content-hash": "0ac00e2168797fa522d7a6f036a5e296",
     "packages": [
         {
             "name": "civicrm/civicrm-cxn-rpc",
             "homepage": "https://github.com/totten/ca_config",
             "time": "2017-05-10T20:08:17+00:00"
         },
+        {
+            "name": "tplaner/when",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/tplaner/When.git",
+                "reference": "c1ec099f421bff354cc5c929f83b94031423fc80"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/tplaner/When/zipball/c1ec099f421bff354cc5c929f83b94031423fc80",
+                "reference": "c1ec099f421bff354cc5c929f83b94031423fc80",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "When\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Tom Planer",
+                    "email": "tplaner@gmail.com"
+                }
+            ],
+            "description": "Date/Calendar recursion library.",
+            "homepage": "https://github.com/tplaner/When",
+            "keywords": [
+                "date",
+                "datetime",
+                "recurrence",
+                "repeat",
+                "time"
+            ],
+            "time": "2019-01-11T21:59:13+00:00"
+        },
         {
             "name": "zendframework/zend-escaper",
             "version": "2.4.13",
     "stability-flags": {
         "zetacomponents/mail": 20,
         "pear/validate_finance_creditcard": 20,
+        "tplaner/when": 20,
         "cache/integration-tests": 20
     },
     "prefer-stable": false,
index 98dc9e075e8f1631fe11ea6c6fdc22171cccc052..f6b6e5690894034bd7ba97dad83ce8c36ab5a29c 100644 (file)
 - github      : Dawnthorn
   name        : Peter Haight
   organization: Giant Rabbit
-  
+
 - github      : dlobo
   name        : Donald Lobo
   jira        : lobo
   organization: Jesper Angelo
   jira        : dkguru
 
+- github      : don-alejandro-z
+
 - name        : Samuel Haskell
   jira        : dotsam
 
   organization: Amnistía Internacional España
   jira        : Fernando
 
+- github      : fkohrt
+  name        : Florian Kohrt
+
 - github      : fliespl
   name        : Arkadiusz Rzadkowolski
   jira        : flies
 
 - github      : wmortada
   name        : William Mortada
-  organization: Community IT Academy
+  organization: a-n The Artists Information Company
   jira        : wmortada
 
 - name        : Philipp Michael
 
 - github      : reecebenson
   name        : Reece Benson
-  organization: Circle Interactive
\ No newline at end of file
+  organization: Circle Interactive
diff --git a/css/api4-explorer.css b/css/api4-explorer.css
new file mode 100644 (file)
index 0000000..a5be9c8
--- /dev/null
@@ -0,0 +1,195 @@
+/* Style rules for Api4 Explorer */
+
+#bootstrap-theme.api4-explorer-page .panel-heading {
+  height: 50px;
+}
+#bootstrap-theme.api4-explorer-page .panel-body {
+  min-height: calc( 100% - 50px);
+}
+#bootstrap-theme.api4-explorer-page .explorer-params-panel .panel-heading {
+  padding-top: 12px;
+}
+#bootstrap-theme.api4-explorer-page .explorer-params-panel .panel-heading button {
+  position: relative;
+  top: -5px;
+}
+#bootstrap-theme .explorer-params-panel .panel-heading .form-inline > .select2-container {
+  max-width: 25% !important;
+}
+#bootstrap-theme.api4-explorer-page .api4-explorer-row {
+  display: flex;
+}
+#bootstrap-theme.api4-explorer-page > div > .panel {
+  flex: 1;
+  margin: 10px;
+  min-height: 400px;
+}
+#bootstrap-theme.api4-explorer-page > div > form.panel {
+  flex: 2;
+}
+/* Fix weird shorditch style */
+#bootstrap-theme.api4-explorer-page .api4-explorer-row .panel .panel-heading {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+  margin-bottom: 0;
+}
+#bootstrap-theme.api4-explorer-page .explorer-code-panel table td:first-child {
+  width: 5em;
+}
+
+#bootstrap-theme.api4-explorer-page .explorer-params-panel > .panel-body > div.api4-input {
+  margin-bottom: 10px;
+}
+
+#bootstrap-theme.api4-explorer-page .api4-input.form-inline > label {
+  margin-right: 12px;
+}
+
+#bootstrap-theme.api4-explorer-page .explorer-help-panel .panel-body {
+  word-break: break-word;
+}
+
+#bootstrap-theme.api4-explorer-page form label {
+  text-transform: capitalize;
+}
+
+#bootstrap-theme.api4-explorer-page fieldset {
+  padding: 6px;
+  border: 1px solid lightgrey;
+  margin-bottom: 10px;
+  position: relative;
+}
+
+#bootstrap-theme.api4-explorer-page fieldset legend {
+  background-color: white;
+  font-size: 13px;
+  margin: 0;
+  width: auto;
+  border: 0 none;
+  padding: 2px 5px;
+  text-transform: capitalize;
+}
+#bootstrap-theme.api4-explorer-page fieldset > .btn-group {
+  position: absolute;
+  right: 0;
+  top: 11px;
+}
+#bootstrap-theme.api4-explorer-page fieldset > .btn-group .btn {
+  border: 0 none;
+}
+
+#bootstrap-theme.api4-explorer-page fieldset div.api4-input {
+  margin-bottom: 10px;
+}
+
+#bootstrap-theme.api4-explorer-page fieldset div.api4-input.ui-sortable-helper {
+  background-color: rgba(255, 255, 255, .9);
+}
+
+#bootstrap-theme.api4-explorer-page fieldset div.api4-input.ui-sortable-helper {
+  background-color: rgba(255, 255, 255, .9);
+}
+
+#bootstrap-theme.api4-explorer-page div.api4-input.form-inline .form-control {
+  margin-right: 6px;
+}
+
+#bootstrap-theme.api4-explorer-page div.api4-input.form-inline .form-control:not(.api4-option-selected) {
+  transition: none;
+  box-shadow: none;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+}
+
+#bootstrap-theme.api4-explorer-page div.api4-input.form-inline .form-control label {
+  font-weight: normal;
+  position: relative;
+  top: -2px;
+}
+
+#bootstrap-theme.api4-explorer-page .api4-where-fieldset fieldset {
+  float: right;
+  width: calc(100% - 58px);
+  margin-top: -8px;
+}
+
+#bootstrap-theme.api4-explorer-page .api4-where-fieldset.api4-sorting fieldset .api4-where-group-sortable {
+  min-height: 3.5em;
+}
+
+#bootstrap-theme.api4-explorer-page .api4-input-group {
+  display: inline-block;
+}
+
+#bootstrap-theme.api4-explorer-page .api4-clause-badge {
+  width: 55px;
+  display: inline-block;
+  cursor: move;
+}
+#bootstrap-theme.api4-explorer-page .api4-clause-badge .badge {
+  opacity: .5;
+  position: relative;
+}
+#bootstrap-theme.api4-explorer-page .api4-clause-badge .caret {
+  margin: 0;
+}
+#bootstrap-theme.api4-explorer-page .api4-clause-badge .crm-i {
+  display: none;
+  padding: 0 6px;
+}
+#bootstrap-theme.api4-explorer-page .ui-sortable-helper .api4-clause-badge .badge span {
+  display: none;
+}
+#bootstrap-theme.api4-explorer-page .ui-sortable-helper .api4-clause-badge .crm-i {
+  display: inline-block;
+}
+
+#bootstrap-theme.api4-explorer-page .api4-operator,
+#bootstrap-theme.api4-explorer-page .api4-chain-index,
+#bootstrap-theme.api4-explorer-page .api4-index,
+#bootstrap-theme.api4-explorer-page .api4-chain-action {
+  width: 70px;
+}
+#bootstrap-theme.api4-explorer-page .api4-chain-params {
+  width: calc( 100% - 346px);
+}
+
+#bootstrap-theme.api4-explorer-page .api4-add-where-group-menu {
+  min-width: 80px;
+  background-color: rgba(186, 225, 251, 0.94);
+}
+#bootstrap-theme.api4-explorer-page .api4-add-where-group-menu a {
+  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";
+}
+
+/**
+ * Shims so the UI isn't completely broken when a Bootstrap theme is not installed
+ */
+#bootstrap-theme.api4-explorer-page * {
+  box-sizing: border-box;
+}
+.api4-explorer-page.panel {
+  border: 1px solid grey;
+  background-color: white;
+}
+.api4-explorer-page.panel-heading {
+  padding: 10px 20px;
+  color: #464354;
+  background-color: #f3f6f7;
+}
index 44028787edc57ed58cec6858a672bebb1f76ad96..83214556d55ec4eaaba7d2db0554bd7701e3fabb 100644 (file)
@@ -1812,16 +1812,6 @@ input.crm-form-entityref {
 
 /* Set/alter ICONS */
 
-#crm-container div#printer-friendly {
-  float: right;
-  position: relative;
-  margin: -2em 0.5em 0 0;
-}
-/* For Joomla, margin 0 works correctly */
-#crm-container table#crm-content div#printer-friendly {
-  margin: 0;
-}
-
 #crm-container .order-icon {
   height: 15px;
   width: 10px;
@@ -3659,6 +3649,9 @@ span.crm-status-icon {
 .crm-container.crm-public .select2-results {
   font-size: 14px;
 }
+.crm-container.crm-public .select2-container * {
+  box-sizing: content-box;
+}
 .crm-container.crm-public .select2-container .select2-choice {
   padding: 5px 5px 5px 8px;
 }
index 2987c9d27dafbe5c9dfccc4f003c8c4c0dcc27bd..4288253c8f4ce3a72e17d6deb00efc6fb20bf182 100644 (file)
@@ -23,7 +23,6 @@ dm_install_packages "$SRC/packages" "$TRG/packages"
 dm_install_vendor "$SRC/vendor" "$TRG/vendor"
 dm_install_bower "$SRC/bower_components" "$TRG/bower_components"
 dm_install_drupal "$SRC/backdrop" "$TRG/backdrop"
-dm_install_cvext org.civicrm.api4 "$TRG/ext/api4"
 dm_install_cvext com.iatspayments.civicrm "$TRG/ext/iatspayments"
 
 # gen tarball
index 7616d3f6658b143d1b9a8d7842f32a54e598280d..f3d4ba33a5440b1748138ff5560ab5f5a0c4ed6b 100755 (executable)
@@ -23,7 +23,6 @@ dm_install_packages "$SRC/packages" "$TRG/packages"
 dm_install_vendor "$SRC/vendor" "$TRG/vendor"
 dm_install_bower "$SRC/bower_components" "$TRG/bower_components"
 dm_install_drupal "$SRC/drupal" "$TRG/drupal"
-dm_install_cvext org.civicrm.api4 "$TRG/ext/api4"
 dm_install_cvext com.iatspayments.civicrm "$TRG/ext/iatspayments"
 
 # gen tarball
index b753330028acef278e18f4c0f18ac609de1a2e23..8d50524a320b7704462a8a039523de4c1e345deb 100644 (file)
@@ -30,7 +30,6 @@ dm_install_packages $DM_PACKAGESDIR "$TRG/packages"
 dm_install_vendor "$SRC/vendor" "$TRG/vendor"
 dm_install_bower "$SRC/bower_components" "$TRG/bower_components"
 dm_install_drupal "$DM_DRUPALDIR" "$TRG/drupal"
-dm_install_cvext org.civicrm.api4 "$TRG/ext/api4"
 dm_install_cvext com.iatspayments.civicrm "$TRG/ext/iatspayments"
 
 # gen tarball
index 62433e5485d41d70c4bd6720dd525498f1f77f29..f34db2803a6232c99dbbfb5490c86712df368eed 100755 (executable)
@@ -23,7 +23,6 @@ dm_install_packages "$SRC/packages" "$TRG/packages"
 dm_install_vendor "$SRC/vendor" "$TRG/vendor"
 dm_install_bower "$SRC/bower_components" "$TRG/bower_components"
 dm_install_drupal "$SRC/drupal" "$TRG/drupal"
-dm_install_cvext org.civicrm.api4 "$TRG/ext/api4"
 dm_install_cvext com.iatspayments.civicrm "$TRG/ext/iatspayments"
 
 # gen tarball
index 0056b00a6cfeacba2114bb2ff77433069c74636c..3fb36905fd0096a083dc3f95f843c6b7921cf287 100755 (executable)
@@ -23,7 +23,6 @@ dm_install_packages "$SRC/packages" "$TRG/packages"
 dm_install_vendor "$SRC/vendor" "$TRG/vendor"
 dm_install_bower "$SRC/bower_components" "$TRG/bower_components"
 dm_install_drupal "$SRC/drupal" "$TRG/drupal"
-dm_install_cvext org.civicrm.api4 "$TRG/ext/api4"
 dm_install_cvext com.iatspayments.civicrm "$TRG/ext/iatspayments"
 
 # delete packages that distributions on Drupal.org repalce if present
index cfab0232876c27a2de0f21a4a9e7dd2d40e22e67..65b342cefa03b5bded0b476c6b8115f8b452f80e 100755 (executable)
@@ -22,7 +22,6 @@ dm_install_core "$SRC" "$TRG"
 dm_install_packages "$SRC/packages" "$TRG/packages"
 dm_install_vendor "$SRC/vendor" "$TRG/vendor"
 dm_install_bower "$SRC/bower_components" "$TRG/bower_components"
-dm_install_cvext org.civicrm.api4 "$TRG/ext/api4"
 dm_install_cvext com.iatspayments.civicrm "$TRG/ext/iatspayments"
 
 ## WTF: It's so good we'll install it twice!
index c588745bd9b164d3375998b38020c569ffe9c7ac..ee0628e376f8f7a209f0133a2b31b9746428bcf0 100644 (file)
@@ -23,7 +23,6 @@ dm_install_packages "$SRC/packages" "$TRG/civicrm/civicrm/packages"
 dm_install_vendor "$SRC/vendor" "$TRG/civicrm/civicrm/vendor"
 dm_install_bower "$SRC/bower_components" "$TRG/civicrm/civicrm/bower_components"
 dm_install_wordpress "$SRC/WordPress" "$TRG/civicrm"
-dm_install_cvext org.civicrm.api4 "$TRG/civicrm/civicrm/ext/api4"
 dm_install_cvext com.iatspayments.civicrm "$TRG/civicrm/civicrm/ext/iatspayments"
 
 # gen tarball
index 4192e68e5acd2fdb7706e5062a16a904313e21bf..60be47658496c0c2d44538b80fa421195776bf5f 100644 (file)
@@ -1,14 +1,26 @@
 {
+  "org.civicrm.api4": {
+    "obsolete": "5.19",
+    "force-uninstall": true
+  },
   "uk.squiffle.kam": {
-    "obsolete": "5.12"
+    "obsolete": "5.12",
+    "disable": true,
+    "uninstall": true
   },
   "com.aghstrategies.slicknav": {
-    "obsolete": "5.12"
+    "obsolete": "5.12",
+    "disable": true,
+    "uninstall": true
   },
   "de.systopia.recentitems": {
-    "obsolete": "5.12"
+    "obsolete": "5.12",
+    "disable": true,
+    "uninstall": true
   },
   "com.ixiam.modules.quicksearch": {
-    "obsolete": "5.8"
+    "obsolete": "5.8",
+    "disable": true,
+    "uninstall": true
   }
 }
index b64f33eec2c2e34beff9ac375974c9b74016de59..bfff407843dc2e02e4723c866e431ecc48d8854d 100644 (file)
@@ -3,7 +3,7 @@
  * @see https://wiki.civicrm.org/confluence/display/CRMDOC/AJAX+Interface
  * @see https://wiki.civicrm.org/confluence/display/CRMDOC/Ajax+Pages+and+Forms
  */
-(function($, CRM, undefined) {
+(function($, CRM, _, undefined) {
   /**
    * @param string path
    * @param string|object query
     });
   };
 
+  // result is an array, but in js, an array is also an object
+  // Assign all the metadata properties to it, mirroring the results arrayObject in php
+  function arrayObject(data) {
+    var result = data.values || [];
+    if (_.isArray(result)) {
+      delete(data.values);
+      _.assign(result, data);
+    }
+    return result;
+  }
+
+  CRM.api4 = function(entity, action, params, index) {
+    return new Promise(function(resolve, reject) {
+      if (typeof entity === 'string') {
+        $.post(CRM.url('civicrm/ajax/api4/' + entity + '/' + action), {
+          params: JSON.stringify(params),
+          index: index
+        })
+          .done(function (data) {
+            resolve(arrayObject(data));
+          })
+          .fail(function (data) {
+            reject(data.responseJSON);
+          });
+      } else {
+        $.post(CRM.url('civicrm/ajax/api4'), {
+          calls: JSON.stringify(entity)
+        })
+          .done(function(data) {
+            _.each(data, function(item, key) {
+              data[key] = arrayObject(item);
+            });
+            resolve(data);
+          })
+          .fail(function (data) {
+            reject(data.responseJSON);
+          });
+      }
+    });
+  };
+
   /**
    * AJAX api
    * @link http://wiki.civicrm.org/confluence/display/CRMDOC/AJAX+Interface#AJAXInterface-CRM.api3
       });
   });
 
-}(jQuery, CRM));
+}(jQuery, CRM, _));
diff --git a/js/load-bootstrap.js b/js/load-bootstrap.js
new file mode 100644 (file)
index 0000000..e528805
--- /dev/null
@@ -0,0 +1,7 @@
+// Loads a copy of shoreditch's bootstrap if bootstrap is missing
+CRM.$(function($) {
+  if (!$.isFunction($.fn.dropdown)) {
+    //CRM.loadScript(CRM.vars.api4.basePath + 'lib/shoreditch/dropdown.js');
+    //$('head').append('<link type="text/css" rel="stylesheet" href="' + CRM.vars.api4.basePath + 'lib/shoreditch/bootstrap.css" />');
+  }
+});
index 2915dc7814fe5020a03f613abe5ce5eaf923edc5..1710c33fdc590a2ebc269766c99e930cde51ba5f 100644 (file)
@@ -21,6 +21,7 @@ module.exports = function(config) {
     autoWatch: true,
     browsers: ['PhantomJS'],
     exclude: [
+      'ang/api4Explorer/Explorer.js'
     ],
     files: [
       'bower_components/phantomjs-polyfill/bind-polyfill.js',
index 8a49819b296c779aee08dfb73182e6c3104035cf..af0935c78820ef893955b1911c08893dc967787b 100644 (file)
@@ -15,6 +15,45 @@ Other resources for identifying changes are:
     * https://github.com/civicrm/civicrm-joomla
     * https://github.com/civicrm/civicrm-wordpress
 
+## CiviCRM 5.18.2
+
+Released October 9, 2019
+
+- **[Synopsis](release-notes/5.18.2.md#synopsis)**
+- **[Bugs resolved](release-notes/5.18.2.md#bugs)**
+- **[Credits](release-notes/5.18.2.md#credits)**
+- **[Feedback](release-notes/5.18.2.md#feedback)**
+
+
+## CiviCRM 5.18.1
+
+Released October 5, 2019
+
+- **[Synopsis](release-notes/5.18.1.md#synopsis)**
+- **[Bugs resolved](release-notes/5.18.1.md#bugs)**
+- **[Credits](release-notes/5.18.1.md#credits)**
+- **[Feedback](release-notes/5.18.1.md#feedback)**
+
+# CiviCRM 5.18.0
+
+Released October 2, 2019
+
+- **[Synopsis](release-notes/5.18.0.md#synopsis)**
+- **[Features](release-notes/5.18.0.md#features)**
+- **[Bugs resolved](release-notes/5.18.0.md#bugs)**
+- **[Miscellany](release-notes/5.18.0.md#misc)**
+- **[Credits](release-notes/5.18.0.md#credits)**
+- **[Feedback](release-notes/5.18.0.md#feedback)**
+
+## CiviCRM 5.17.5
+
+Released September 26, 2019
+
+- **[Synopsis](release-notes/5.17.5.md#synopsis)**
+- **[Bugs resolved](release-notes/5.17.5.md#bugs)**
+- **[Credits](release-notes/5.17.5.md#credits)**
+- **[Feedback](release-notes/5.17.5.md#feedback)**
+
 ## CiviCRM 5.17.4
 
 Released September 12, 2019
diff --git a/release-notes/5.17.5.md b/release-notes/5.17.5.md
new file mode 100644 (file)
index 0000000..f497715
--- /dev/null
@@ -0,0 +1,38 @@
+# CiviCRM 5.17.5
+
+Released September 26, 2019
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| Change the database schema?                                     |   no    |
+| Alter the API?                                                  |   no    |
+| Require attention to configuration options?                     |   no    |
+| Fix problems installing or upgrading to a previous version?     |   no    |
+| Introduce features?                                             |   no    |
+| **Fix bugs?**                                                   | **yes** |
+
+## <a name="bugs"></a>Bugs resolved
+
+* **_CiviMember_: Duplicate line-items when creating a recurring membership via backend ([dev/membership#16](https://lab.civicrm.org/dev/membership/issues/16): [#15334](https://github.com/civicrm/civicrm-core/pull/15334))**
+* **_APIv4_: Prevent potential issues when upgrading to 5.19.x ([11e390](https://github.com/civicrm/org.civicrm.api4/commit/11e3907e362846fb999bc115d98c92bcda96859d), [0b1115](https://github.com/civicrm/org.civicrm.api4/commit/0b1115d700b96e728fd9eff4840f291836705950))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Australian Greens - Seamus Lee; CiviCRM - Coleman Watts; MJW Consulting -
+Matthew Wire; Megaphone Technology Consulting - Jon Goldberg
+
+## <a name="feedback"></a>Feedback
+
+These release notes are edited by Tim Otten and Andrew Hunt.  If you'd like to
+provide feedback on them, please login to https://chat.civicrm.org/civicrm and
+contact `@agh1`.
diff --git a/release-notes/5.18.0.md b/release-notes/5.18.0.md
new file mode 100644 (file)
index 0000000..3517822
--- /dev/null
@@ -0,0 +1,876 @@
+# CiviCRM 5.18.0
+
+Released October 2, 2019
+
+- **[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
+
+- **Enable view/revert delete action for detail logging
+  ([15045](https://github.com/civicrm/civicrm-core/pull/15045))**
+
+  If detailed logging is enabled, you can now view and revert deleted
+  information.
+
+- **Download Bower dependencies using Composer
+  ([dev/drupal#8](https://lab.civicrm.org/dev/drupal/issues/8):
+  [15044](https://github.com/civicrm/civicrm-core/pull/15044))**
+
+  This improves performance and caching by downloading Javascript libraries
+  using Composer with `composer-downloads-plugin` and specified zip files rather
+  than Bower.
+
+- **Add `hook_civicrm_pre` and `hook_civicrm_post` to Domain create and edit
+  operations ([dev/core#1203](https://lab.civicrm.org/dev/core/issues/1203):
+  [15104](https://github.com/civicrm/civicrm-core/pull/15104))**
+
+  Makes it so one can detect when a new Domain has been created or when a Domain
+  has been edited with the usual `hook_civicrm_pre` and `hook_civicrm_post`
+  callbacks.
+
+- **Api support for deduping
+  (Work Towards [dev/core#1230](https://lab.civicrm.org/dev/core/issues/1230):
+  [15196](https://github.com/civicrm/civicrm-core/pull/15196),
+  [15188](https://github.com/civicrm/civicrm-core/pull/15188),
+  [15187](https://github.com/civicrm/civicrm-core/pull/15187),
+  [15227](https://github.com/civicrm/civicrm-core/pull/15227) and
+  [15154](https://github.com/civicrm/civicrm-core/pull/15154))**
+
+  Work toward improving the new API support for deduping including: not
+  geocoding when merging for performance reasons, giving contacts with 'merge
+  duplicate contacts' permission to get dedupe rules, ensuring the API call
+  Dedupe.getstatistics requires "Access CiviCRM" and adds a check for 'force
+  merge duplicate contacts' if mode is aggressive.
+
+- **Add cid parameter in custom group form url & set it for Activity form
+  ([dev/core#752](https://lab.civicrm.org/dev/core/issues/752):
+  [15012](https://github.com/civicrm/civicrm-core/pull/15012))**
+
+  Adds a contact id parameter (cid=) when loading custom data via back end forms
+  so that hooks can modify behavior based on the `contact_id` being viewed.
+
+- **Make report listing actions links hookable
+  ([dev/core#1077](https://lab.civicrm.org/dev/core/issues/1077):
+  [15074](https://github.com/civicrm/civicrm-core/pull/15074))**
+
+  The actions list on the report listing screen can now be altered by developers
+  using `hook_civicrm_links`.
+
+- **Fixes inconsistency between constituency summary and constituency detail
+  ([15222](https://github.com/civicrm/civicrm-core/pull/15222))**
+
+  This improves the consistency of how the "Print Report" action link functions
+  on the reports listing. Before this change, some "Print Report" links would
+  take the user to the report in print view, and some would trigger a print
+  pop-up.
+
+- **Add index to civicrm_contact.created_date & modified_date
+  ([15203](https://github.com/civicrm/civicrm-core/pull/15203))**
+
+  This adds an index to the `created_date` and `modified_date` columns in the
+  `civicrm_contact` table.
+
+- **Added field title for Cache table
+  ([15204](https://github.com/civicrm/civicrm-core/pull/15204))**
+
+  The Data Access Object for the `civicrm_cache` table now stores titles for
+  each field.
+
+- **Allow Manual Geo Code flag to be exported
+  ([14998](https://github.com/civicrm/civicrm-core/pull/14998))**
+
+  The field denoting that an address has been manually geocoded can now be
+  exported.
+
+- **Use merge duplicate contacts as api permission for merging
+  ([15155](https://github.com/civicrm/civicrm-core/pull/15155))**
+
+  Changes the API call `Contact.merge` to require 'merge duplicate contacts'
+  instead of 'Administer CiviCRM'.
+
+- **Adjust permissions on dedupe exception api to 'merge duplicate contacts'
+  ([15157](https://github.com/civicrm/civicrm-core/pull/15157))**
+
+  The API for managing dedupe exceptions now requires the permission "merge
+  duplicate contacts" instead of "Administer CiviCRM".
+
+- **Open up permissions on Dedupe.getduplicates
+  ([15152](https://github.com/civicrm/civicrm-core/pull/15152))**
+
+  Less restrictive permissions on the `Dedupe.getduplicates` API (currently only
+  used from unit tests) specifically moves from requiring the permission
+  "Administer CiviCRM" to "Access CiviCRM".
+
+- **Fix inconsistencies in duplicate retrieval
+  ([15160](https://github.com/civicrm/civicrm-core/pull/15160))**
+
+  Ensures the API call `Dedupe.getduplicates` respects both 'limit' and
+  'search_limit' parameters.
+
+- **Error log improvements: Provide priority level
+  ([14995](https://github.com/civicrm/civicrm-core/pull/14995))**
+
+  Improves error logging by adding the ability to pass a priority level argument
+  to `CRM_Core_Error::debug_var()`.
+
+- **Improve deadlock error handling
+  ([258](https://github.com/civicrm/civicrm-packages/pull/258))**
+
+  Improves deadlock error handling by capturing the error when the deadlock is
+  first hit so the backtrace is retained.
+
+- **Better error handling in CRM_Utils_JS::decode
+  ([15145](https://github.com/civicrm/civicrm-core/pull/15145))**
+
+  Improves handling of malformed Javascript so as to reduce PHP notices.
+
+- **Replace some calls to CRM_Core_Error::fatal with exceptions
+  ([15156](https://github.com/civicrm/civicrm-core/pull/15156))**
+
+  Instead of exiting with a fatal error, certain dedupe error situations now
+  throw an exception.
+
+### CiviEvent
+
+- **Creating an event clears the cache
+  ([dev/event#14](https://lab.civicrm.org/dev/event/issues/14):
+  [15140](https://github.com/civicrm/civicrm-core/pull/15140))**
+
+  This change improves performance by not clearing caches every time an event is
+  created.
+
+### CiviMembership
+
+- **Convert jcalendar date fields to date picker for membership fields to
+  support date picker conversion
+  ([15177](https://github.com/civicrm/civicrm-core/pull/15177),
+  [15186](https://github.com/civicrm/civicrm-core/pull/15186),
+  [15198](https://github.com/civicrm/civicrm-core/pull/15198) and
+  [15200](https://github.com/civicrm/civicrm-core/pull/15200))**
+
+  Date fields on membership search screens now use datepicker rather than
+  jCalendar.
+
+  The `join_date` column on the `civicrm_membership` table is now keyed as
+  `membership_join_date` within the DAO in order to support the change to date
+  picker format for Membership date fields.
+
+- **Add default domain to membershiptype API
+  ([15120](https://github.com/civicrm/civicrm-core/pull/15120))**
+
+  The domain ID now defaults to the current domain when using the membership
+  type API.
+
+- **Fix readability & caching on
+  CRM_Contact_BAO_Relationship::isInheritedMembershipInvalidated
+  ([15061](https://github.com/civicrm/civicrm-core/pull/15061))**
+
+  Improves caching and performance when calculating inherited memberships.
+
+### CiviPledge
+
+- **Update Pledge XML to support date picker conversion
+  ([15180](https://github.com/civicrm/civicrm-core/pull/15180))**
+
+  Updates the XML and associated files to support the change to date picker
+  format for Pledge date fields.
+
+### Backdrop Integration
+
+- **Fail more gracefully when upgrading on PHP5.x
+  ([98](https://github.com/civicrm/civicrm-backdrop/pull/98))**
+
+  Provides a clearer error when someone tries to upgrade with PHP 5.x.
+
+### Drupal Integration
+
+- **Automatically tag the drupal-8 repository
+  (Work Towards [dev/release#9](https://lab.civicrm.org/dev/release/issues/9):
+  [15149](https://github.com/civicrm/civicrm-core/pull/15149))**
+
+  Continues work to automatically tag a Drupal8 version when new CiviCRM
+  versions are released as is done for other CMS's.
+
+- **Error when upgrading to 5.16.0
+  ([dev/drupal#79](https://lab.civicrm.org/dev/drupal/issues/79):
+  [583](https://github.com/civicrm/civicrm-drupal/pull/583))**
+
+  Provides a clearer error when someone tries to upgrade with PHP 5.x.
+
+## <a name="bugs"></a>Bugs resolved
+
+### Core CiviCRM
+
+- **Warnings on importing contacts - PHP 7.2
+  (Work Towards [dev/core#772](https://lab.civicrm.org/dev/core/issues/772):
+  [262](https://github.com/civicrm/civicrm-packages/pull/262))**
+
+  This fixes a PHP warning on PHP 7.2 using hierarchical select fields, such as
+  selecting the matching fields for import columns.  Some fields have no fields
+  nested below them, and those would trigger an error on the `count()` function.
+
+- **Warnings on CRM_Contribute_Import_Parser re countable
+  ([dev/core#1001](https://lab.civicrm.org/dev/core/issues/1001):
+  [14989](https://github.com/civicrm/civicrm-core/pull/14989))**
+
+  Fixes a few PHP 7.2 count warnings when importing.
+
+- **Changing the label for the Inbound Email activity type lets you edit/delete
+  them even if the permission disallows
+  ([dev/core#1123](https://lab.civicrm.org/dev/core/issues/1123):
+  [15240](https://github.com/civicrm/civicrm-core/pull/15240) and
+  [15147](https://github.com/civicrm/civicrm-core/pull/15147))**
+
+- **Regression: Can't use CiviCRM menu on 5.16.0
+  ([dev/core#1182](https://lab.civicrm.org/dev/core/issues/1182):
+  [15020](https://github.com/civicrm/civicrm-core/pull/15020) and
+  [15019](https://github.com/civicrm/civicrm-core/pull/15019))**
+
+  Fixes a bug in CiviCRM 5.16.0 where a race condition was causing the CiviCRM
+  Admin Menu to break.
+
+- **csv import only import one phone number
+  ([dev/core#1187](https://lab.civicrm.org/dev/core/issues/1187):
+  [15190](https://github.com/civicrm/civicrm-core/pull/15190))**
+
+  Fixes a bug whereby one phone number is not imported if 2 of the same location
+  type but different phone types are in an import.
+
+- **Fix Psalm issue Class or interface CiviCRM_API3_Exception does not exist
+  ([dev/core#1188](https://lab.civicrm.org/dev/core/issues/1188):
+  [15043](https://github.com/civicrm/civicrm-core/pull/15043))**
+
+  Ensures that the Psalm Autoloader can find `CiviCRM_API3_Exception`.
+
+- **File attachment uploads - pptx issue
+  ([dev/core#1190](https://lab.civicrm.org/dev/core/issues/1190):
+  [15239](https://github.com/civicrm/civicrm-core/pull/15239))**
+
+  Fixes the upgrade function for adding ".pptx" to the list of safe file types.
+
+- **ENOTICE when creating activity from contact search results / aka Repeat
+  Activity accordion section missing when using Add Activity from contact search
+  results ([dev/core#1192](https://lab.civicrm.org/dev/core/issues/1192):
+  [15079](https://github.com/civicrm/civicrm-core/pull/15079))**
+
+  Fixes a PHP notice when using the "Add Activity" action from the contact
+  search results list.
+
+- **CiviCRM Dashboard does not respect multiple domains
+  ([dev/core#1200](https://lab.civicrm.org/dev/core/issues/1200):
+  [15099](https://github.com/civicrm/civicrm-core/pull/15099))**
+
+  For sites with multisite enabled ensures that the CiviCRM Dashboard respects
+  multiple domains and shows unique dashlets depending on what domain you are
+  using.
+
+- **Contact subtype is removed after being cached incorrectly
+  ([dev/core#1222](https://lab.civicrm.org/dev/core/issues/1222):
+  [15171](https://github.com/civicrm/civicrm-core/pull/15171))**
+
+  Ensures the static cache is cleared whenever updating or deleting a DAO
+  object.
+
+- **Regression: Searching on Email broken in advanced search
+  ([dev/core#1244](https://lab.civicrm.org/dev/core/issues/1244):
+  [15255](https://github.com/civicrm/civicrm-core/pull/15255))**
+
+  This fixes a problem where attempting to search on email on the Advanced
+  search form resulted in a warning and no results.
+
+- **Trim form values when adding LIKE operator
+  ([15275](https://github.com/civicrm/civicrm-core/pull/15275))**
+
+  Fixes a 5.17 regression whereby the email string is no longer being trimmed
+  when searching.
+
+- **Ensure filtering on email via the api looks for an exact match
+  ([15276](https://github.com/civicrm/civicrm-core/pull/15276))**
+
+  Fixes a released regression whereby a wildcard was being added to API
+  Contact.get requests with the email parameter.
+
+- **Fix fatal when saving import mapping with a relationship but 'Primary'
+  location type ([15115](https://github.com/civicrm/civicrm-core/pull/15115))**
+
+  When an import column was mapped to a field with the "Primary" location type
+  that was on a related contact, it would result in a fatal error.
+
+- **Fix export header for 'Contact ID'
+  ([15118](https://github.com/civicrm/civicrm-core/pull/15118))**
+
+  This ensures when exporting a contact id column the header is "Contact ID" not
+  "contact_id".
+
+- **Changed ClassName for ACL cache
+  ([15193](https://github.com/civicrm/civicrm-core/pull/15193))**
+
+  Ensures `civicrm_acl_cache` and `civicrm_cache` use different entity names.
+
+- **Set contact communication_style_id as importable
+  ([15205](https://github.com/civicrm/civicrm-core/pull/15205))**
+
+  Ensures the "Contact Communication Style" is visible in profile view mode.
+
+- **Incorporate searchLimit in dedupe cacheKey
+  ([15185](https://github.com/civicrm/civicrm-core/pull/15185))**
+
+  When you change the search limit after a duplicate search has been performed,
+  this ensures that a new search is run.
+
+- **Allow for the deselection of sorting filters
+  ([15029](https://github.com/civicrm/civicrm-core/pull/15029))**
+
+  Fixes a bug where removing sorting filters on reports and refreshing the
+  results would nevertheless retain the sorting filters.
+
+- **CRM_Utils_Array::crmInArray() should recurse properly
+  ([dev/core#1196](https://lab.civicrm.org/dev/core/issues/1196):
+  [15092](https://github.com/civicrm/civicrm-core/pull/15092))**
+
+- **Add ts() to deceased string
+  ([15211](https://github.com/civicrm/civicrm-core/pull/15211))**
+
+  The word "deceased" when appended to a contact's name is now translatable.
+
+- **Fatal Error in "Search Builder" if "Household" Contact type is disabled.
+  ([dev/core#1246](https://lab.civicrm.org/dev/core/issues/1246):
+  [15289](https://github.com/civicrm/civicrm-core/pull/15289))**
+
+- **Do not show Activity Separation on when viewing an Activity
+  ([15046](https://github.com/civicrm/civicrm-core/pull/15046))**
+
+  The option to create separate activities for each contact, only applicable
+  when creating a new activity, would erroneously appear when viewing an
+  activity.
+
+- **Activity profile on Update multiple activities action displays duplicate
+  assignees ([dev/core#1185](https://lab.civicrm.org/dev/core/issues/1185):
+  [15035](https://github.com/civicrm/civicrm-core/pull/15035))**
+
+  The list of assignees would display all of the assignees for each previous row
+  in addition to the assignee(s) for that activity.
+
+- **Ensure that civicrm_dashboard has a foreign key to civicrm_domain
+  ([15119](https://github.com/civicrm/civicrm-core/pull/15119))**
+
+- **Manage Group search message fix
+  ([15052](https://github.com/civicrm/civicrm-core/pull/15052))**
+
+  When no the group listing is filtered and no groups match the criteria, the
+  message says that more clearly rather than stating there are no groups on the
+  site.
+
+### CiviCampaign
+
+- **Actions in campaign dashboard not working with pop-up disabled
+  ([dev/core#1233](https://lab.civicrm.org/dev/core/issues/1233):
+  [15233](https://github.com/civicrm/civicrm-core/pull/15233))**
+
+  Ensures users with pop ups deactivated can edit and delete campaigns.
+
+### CiviCase
+
+- **Proposal to fix longstanding name vs label problems for case roles (Work
+  Towards [dev/core#1046](https://lab.civicrm.org/dev/core/issues/1046):
+  [15192](https://github.com/civicrm/civicrm-core/pull/15192) and
+  [15182](https://github.com/civicrm/civicrm-core/pull/15182))**
+
+  These changes work towards fixing the label being used as the name in some
+  places in CiviCase by allowing for an override tag in the xml to specify the
+  actual "name".
+
+- **Changing a civicase activity's label breaks the max_instances check
+  (Work Towards [dev/core#1116](https://lab.civicrm.org/dev/core/issues/1116):
+  [14999](https://github.com/civicrm/civicrm-core/pull/14999),
+  [15002](https://github.com/civicrm/civicrm-core/pull/15002),
+  [15000](https://github.com/civicrm/civicrm-core/pull/15000) and
+  [15032](https://github.com/civicrm/civicrm-core/pull/15032))**
+
+  Refactors and cleans up code in preparation for fixing a bug where CiviCase
+  activity's label breaks the max_instances check.
+
+- **Fix search for case tags that are part of tag sets
+  ([15212](https://github.com/civicrm/civicrm-core/pull/15212))**
+
+  Fixes a DB Error when searching for tags that are a part of a tag set.
+
+- **Switch to relationship BAO when modifying relationships in change case
+  status so we don't bypass hooks
+  ([15030](https://github.com/civicrm/civicrm-core/pull/15030))**
+
+- **Word Replacements not working on manage case Roles
+  ([dev/core#1218](https://lab.civicrm.org/dev/core/issues/1218):
+  [15161](https://github.com/civicrm/civicrm-core/pull/15161))**
+
+### CiviContribute
+
+- **Renaming a price option / fee level breaks event participant lists
+  ([CRM-17182](https://issues.civicrm.org/jira/browse/CRM-17182):
+  [15064](https://github.com/civicrm/civicrm-core/pull/15064) and
+  [15350](https://github.com/civicrm/civicrm-core/pull/15350))**
+
+  Fixes a bug where the `fee_amount` was being changed whenever a label was
+  changed and moves from searching based on regex on the `fee_amount` column to
+  searching based on the `price_field_value` id.
+
+- **Add pre/post hooks for price set / field/option
+  ([dev/core#870](https://lab.civicrm.org/dev/core/issues/870):
+  [15076](https://github.com/civicrm/civicrm-core/pull/15076))**
+
+  The `hook_civicrm_pre` and `hook_civicrm_post` hooks get invoked when adding
+  price sets, fields, and options.
+
+- **Event/Contribution amounts are duplicated when the form is saved
+  ([dev/core#1240](https://lab.civicrm.org/dev/core/issues/1240):
+  [15245](https://github.com/civicrm/civicrm-core/pull/15245))**
+
+  Fixes a bug where saving the "amounts" tab of either an event or contribution
+  page (when using that form to enter options, rather than a price set) results in the
+  duplication of the amount options listed.
+
+- **Fix PayPalImpl Contribution Status PseudoConstant for non-English
+  ([15164](https://github.com/civicrm/civicrm-core/pull/15164))**
+
+  Ensures contribution statuses are set correctly for sites using PayPal Express
+  and a language other than English by switching to using the name property
+  instead of the label.
+
+- **Fix an HTML error in Calculate.tpl
+  ([15102](https://github.com/civicrm/civicrm-core/pull/15102))**
+
+  This resolves a `<span>` that was not closed correctly on the calculation of a
+  price set's total amount due.
+
+- **Use api to create activity and removed hardcoded status id
+  ([14621](https://github.com/civicrm/civicrm-core/pull/14621))**
+
+  When exporting an accounting batch, the activity that is created is now done
+  so using the API, and it uses the status name `Completed` rather than a
+  hard-coded status ID `2`.
+
+- **Fix wrong variable in check for profiles on contributionpage
+  ([15093](https://github.com/civicrm/civicrm-core/pull/15093))**
+
+  Ensures the correct variable is being checked for pre profile types when
+  configuring a Contribution Page.
+
+- **Batch payment page breaks when an exported activity has no file to download
+  ([dev/financial#58](https://lab.civicrm.org/dev/financial/issues/58):
+  [14367](https://github.com/civicrm/civicrm-core/pull/14367))**
+
+- **Stop adding a refund payment from creating extraneous financial items
+  ([15143](https://github.com/civicrm/civicrm-core/pull/15143))**
+
+### CiviEvent
+
+- **Most recent contact note exposed in event confirmation emails
+  ([dev/event#10](https://lab.civicrm.org/dev/event/issues/10):
+  [15060](https://github.com/civicrm/civicrm-core/pull/15060))**
+
+  Fixes a bug where when submitting an event registration which contains a
+  profile which contains a note field.  If the note was left blank, then the
+  confirmation/notification emails would contain the most recent note in the
+  contact's record, potentially exposing confidential information.
+
+- **Custom field values for a new Event based on an Event Template are not
+  checked causing false validation message and Event not to
+  save ([dev/core#1241](https://lab.civicrm.org/dev/core/issues/1241):
+  [15296](https://github.com/civicrm/civicrm-core/pull/15296))**
+
+- **Confirmation emails include flawed subtitle for post-profiles
+  ([dev/event#15](https://lab.civicrm.org/dev/event/issues/15): [#15380](https://github.com/civicrm/civicrm-core/pull/15380))**
+
+  Fixes a regression from 5.17.0 when sending a confirmation email.
+  The confirmation email includes subsections to summarize any
+  post-profile data, but the title was miscomputed. This manifested
+  as either a page crash or an inaccurate title.
+
+### CiviGrant
+
+- **Grant in Edit mode doesn't show the associated contact
+  ([dev/core#1065](https://lab.civicrm.org/dev/core/issues/1065):
+  [15238](https://github.com/civicrm/civicrm-core/pull/15238) and
+  [15209](https://github.com/civicrm/civicrm-core/pull/15209))**
+
+  Ensures that the associated contact field is shown when editing a grant.
+
+- **Fixes for taking dynamic form name in grant search
+  ([15075](https://github.com/civicrm/civicrm-core/pull/15075))**
+
+  This removes the hard-coded form name when retrieving the search results in
+  preparation for a search action.
+
+### CiviMail
+
+- **SMTP help text is misleading - references the wrong admin screen
+  ([dev/core#879](https://lab.civicrm.org/dev/core/issues/879):
+  [15165](https://github.com/civicrm/civicrm-core/pull/15165))**
+
+  Fixes up the help text displayed when testing the SMTP configuration fails.
+
+- **Remove template field if using Mosaico in non shoreditch mode
+  ([14927](https://github.com/civicrm/civicrm-core/pull/14927))**
+
+### CiviMember
+
+- **Fix metadata on member export
+  ([14916](https://github.com/civicrm/civicrm-core/pull/14916))**
+
+  Ensures when exporting memberships headings are set appropriately for the
+  following columns: `member_is_override`, `membership_recur_id` and
+  `max_related`.
+
+- **Incorrect line item created for back-end membership sign-up using price set
+  and CiviDiscount ([dev/core#860](https://lab.civicrm.org/dev/core/issues/860):
+  [15004](https://github.com/civicrm/civicrm-core/pull/15004))**
+
+- **[regression] Recurring contributions no longer properly update memberships
+  (on PayPal Pro, maybe others)
+  ([dev/membership#13](https://lab.civicrm.org/dev/membership/issues/13):
+  [15053](https://github.com/civicrm/civicrm-core/pull/15053))**
+
+- **Make sure inherited memberships are not themselves inherited
+  ([15114](https://github.com/civicrm/civicrm-core/pull/15114))**
+
+  This prevents contacts from inheriting memberships that were inherited from
+  them.
+
+- **{Membership.Fee} appears on Membership Renewal Reminder emails with 9
+  decimal places ([dev/core#377](https://lab.civicrm.org/dev/core/issues/377):
+  [14992](https://github.com/civicrm/civicrm-core/pull/14992))**
+
+### Drupal Integration
+
+- **Drupal8: getUrlPath: avoid relying on the deprecated 'q' variable
+  (Work Towards [dev/drupal#52](https://lab.civicrm.org/dev/drupal/issues/52):
+  [15268](https://github.com/civicrm/civicrm-core/pull/15268))**
+
+  In Drupal8, the 'q' variable has been deprecated which has resulted in CiviCRM
+  throwing a bunch of PHP notices. This PR silences those notices while a more
+  long term fix is developed.
+
+### Joomla Integration
+
+- **Some error messages render a chunk of markup as plain text
+  ([dev/joomla#10](https://lab.civicrm.org/dev/joomla/issues/10):
+  [15159](https://github.com/civicrm/civicrm-core/pull/15159))**
+
+  Removes Joomla-specific error display and use native CiviCRM display to avoid
+  some error messages rendering as plain text.
+
+- **PHP 7.2 countable warning after installation
+  ([dev/joomla#15](https://lab.civicrm.org/dev/joomla/issues/15):
+  [53](https://github.com/civicrm/civicrm-joomla/pull/53))**
+
+- **[Joomla 4.0] CiviCRM's CSS interferes with Joomla's top header background
+  colour ([dev/joomla#24](https://lab.civicrm.org/dev/joomla/issues/24):
+  [15137](https://github.com/civicrm/civicrm-core/pull/15137))**
+
+## <a name="misc"></a>Miscellany
+
+- **Swap CRM_Utils_Array::value for empty() in conditionals
+  ([15005](https://github.com/civicrm/civicrm-core/pull/15005))**
+
+- **Possible timing issue with test phpunit/api/v3/AttachmentTest::testCreate
+  ([dev/core#938](https://lab.civicrm.org/dev/core/issues/938):
+  [15216](https://github.com/civicrm/civicrm-core/pull/15216))**
+
+- **Change connection and results charsets to utf8mb4 on MySQL 5.5.3+
+  ([241](https://github.com/civicrm/civicrm-packages/pull/241))**
+
+- **Fix upgrade version for #13487
+  ([15031](https://github.com/civicrm/civicrm-core/pull/15031))**
+
+- **Update select2 to latest 3.x + patches
+  ([15054](https://github.com/civicrm/civicrm-core/pull/15054))**
+
+- **Further work on payment.create consolidation - always handle financials from
+  payment.create ([14673](https://github.com/civicrm/civicrm-core/pull/14673))**
+
+- **Extract function to create email activity when sending an email to contact
+  ([15133](https://github.com/civicrm/civicrm-core/pull/15133))**
+
+- **Extract cancelParticipant and cancelMembership functions in baseIPN
+  ([15134](https://github.com/civicrm/civicrm-core/pull/15134))**
+
+- **Rewrite subTypeInfo to use caching mechanism
+  ([14715](https://github.com/civicrm/civicrm-core/pull/14715))**
+
+- **providing clear indication that civicrm_engage module is deprecated.
+  ([582](https://github.com/civicrm/civicrm-drupal/pull/582))**
+
+- **distmaker - Finish migrating bower.json => composer.json
+  ([15148](https://github.com/civicrm/civicrm-core/pull/15148))**
+
+- **Switch recordAdditionalPayment fully over to api
+  ([14408](https://github.com/civicrm/civicrm-core/pull/14408))**
+
+- **Add note about testRenewMembership failing on certain days
+  ([15167](https://github.com/civicrm/civicrm-core/pull/15167))**
+
+- **Someimes ya just gotta say enough already
+  ([15175](https://github.com/civicrm/civicrm-core/pull/15175))**
+
+- **Extend loadSavedMapping to check defaults
+  ([15179](https://github.com/civicrm/civicrm-core/pull/15179))**
+
+- **Initial refactor of BaseIPN
+  ([15129](https://github.com/civicrm/civicrm-core/pull/15129))**
+
+- **Convert pledge date fields to use datepicker rather than jcalendar
+  ([15170](https://github.com/civicrm/civicrm-core/pull/15170))**
+
+- **Use metadata for pledgeDateRange fields
+  ([15191](https://github.com/civicrm/civicrm-core/pull/15191))**
+
+- **Add minimal test for testExportFinancialBatch
+  ([15136](https://github.com/civicrm/civicrm-core/pull/15136))**
+
+- **Code cleanup in CRM_Core_Permission::check
+  ([15141](https://github.com/civicrm/civicrm-core/pull/15141))**
+
+- **Event confirm - (very) minor cleanup + test
+  ([15010](https://github.com/civicrm/civicrm-core/pull/15010))**
+
+- **Stabalize Attachment API Test
+  ([15066](https://github.com/civicrm/civicrm-core/pull/15066))**
+
+- **Remove ?last? instances of ->free()
+  ([dev/core#562](https://lab.civicrm.org/dev/core/issues/562):
+  [14990](https://github.com/civicrm/civicrm-core/pull/14990))**
+
+- **Add myself to the contributor list
+  ([15036](https://github.com/civicrm/civicrm-core/pull/15036))**
+
+- **Remove silly dumb unreachable lines
+  ([15033](https://github.com/civicrm/civicrm-core/pull/15033))**
+
+- **Deprecate CRM_Core_Config::addressSequence()
+  ([15126](https://github.com/civicrm/civicrm-core/pull/15126))**
+
+- **Deprecate CRM_Core_Config::defaultContactCountry and
+  defaultContactCountryName
+  ([15127](https://github.com/civicrm/civicrm-core/pull/15127))**
+
+- **Use metadata for dataPatterns
+  ([15224](https://github.com/civicrm/civicrm-core/pull/15224))**
+
+- **SyntaxConformanceTest::testSqlOperators - Skip "Dedupe" entity on MySQL 5.5
+  ([15234](https://github.com/civicrm/civicrm-core/pull/15234))**
+
+- **Add in 5.17.1 Release notes and migrate .tpl file for 5.17.1 to 5.18 to
+  support upgrade
+  ([15253](https://github.com/civicrm/civicrm-core/pull/15253))**
+
+- **(NFC) Add comments to relate to gitlab ticket
+  ([dev/core#927](https://lab.civicrm.org/dev/core/issues/927):
+  [15128](https://github.com/civicrm/civicrm-core/pull/15128))**
+
+- **Remove unused method CRM_Contact_BAO_Contact_Utils::maxLocations
+  ([15091](https://github.com/civicrm/civicrm-core/pull/15091))**
+
+- **Remove unused Selenium binaries
+  ([263](https://github.com/civicrm/civicrm-packages/pull/263))**
+
+- **Remove a few unused scripts from tools/bin/scripts
+  ([15078](https://github.com/civicrm/civicrm-core/pull/15078))**
+
+- **Remove deprecated unused function.
+  ([15070](https://github.com/civicrm/civicrm-core/pull/15070))**
+
+- **Remove unused skipRedirect param
+  ([15125](https://github.com/civicrm/civicrm-core/pull/15125))**
+
+- **[clean up][ export] Remove membership_auto_renew from defaultReturn
+  properties ([14980](https://github.com/civicrm/civicrm-core/pull/14980))**
+
+- **[Ref] [Import] Use processor to determine website type, location type, test
+  ([15116](https://github.com/civicrm/civicrm-core/pull/15116))**
+
+- **[Import] [ref] - minor cleanup to reduce code complexity
+  ([15097](https://github.com/civicrm/civicrm-core/pull/15097))**
+
+- **[ref] [ import] Extend tests & simpler retrieval to relationship_type_id
+  ([15130](https://github.com/civicrm/civicrm-core/pull/15130))**
+
+- **[REF] Import - minor cleanup  - generate js on the processor class
+  ([15183](https://github.com/civicrm/civicrm-core/pull/15183))**
+
+- **[Import] Minor cleanup on membership import
+  ([15013](https://github.com/civicrm/civicrm-core/pull/15013))**
+
+- **[Import][ref] Minor code improvement -  move setDefaults to processor
+  ([15189](https://github.com/civicrm/civicrm-core/pull/15189))**
+
+- **[Ref] [Import] more code cleanup
+  ([15219](https://github.com/civicrm/civicrm-core/pull/15219))**
+
+- **[Ref] [Import] Final round in the cleanup Load Mapping form epic
+  ([15226](https://github.com/civicrm/civicrm-core/pull/15226))**
+
+- **[Import] [REF] code cleanup & test on the code to  'guess the intended
+  field  from the column name'
+  ([15220](https://github.com/civicrm/civicrm-core/pull/15220))**
+
+- **[REF] [Import] Minor cleanup on status setting.
+  ([15015](https://github.com/civicrm/civicrm-core/pull/15015))**
+
+- **[REF] [Import] extract saved mapping code to parent class
+  ([15017](https://github.com/civicrm/civicrm-core/pull/15017))**
+
+- **[Import] [Cleanup] remove unused parameters
+  ([14981](https://github.com/civicrm/civicrm-core/pull/14981))**
+
+- **[Ref] [Import] move metadata calculations to a trait
+  ([15018](https://github.com/civicrm/civicrm-core/pull/15018))**
+
+- **[Test] [Ref] [Import]Add wrapper class for importProcessor
+  ([15028](https://github.com/civicrm/civicrm-core/pull/15028))**
+
+- **Refactor CRM_Contact_BAO_Relationship::add to autoload missing params from
+  existing record ([15103](https://github.com/civicrm/civicrm-core/pull/15103)
+  and [15123](https://github.com/civicrm/civicrm-core/pull/15123))**
+
+- **[Ref] Extract addInheritedMembership
+  ([15113](https://github.com/civicrm/civicrm-core/pull/15113))**
+
+- **[REF] minor code refactor on import - Pass ProcessorObject into
+  loadSavedMapping & use it to load the formName
+  ([15068](https://github.com/civicrm/civicrm-core/pull/15068))**
+
+- **Minor refactor of 'Pending' parameter for processMembership
+  ([15124](https://github.com/civicrm/civicrm-core/pull/15124))**
+
+- **[REF] Very minor code cleanup on import code with good test cover
+  ([15173](https://github.com/civicrm/civicrm-core/pull/15173))**
+
+- **[REF] Move clone template functionality from api to bao
+  ([15163](https://github.com/civicrm/civicrm-core/pull/15163))**
+
+- **[REF] Extract chunk of code relating to whether to disabled an inherited
+  relationship ([14955](https://github.com/civicrm/civicrm-core/pull/14955))**
+
+- **[REF] Move calculation of js for import fields WITH relationship keys to
+  processor. ([15218](https://github.com/civicrm/civicrm-core/pull/15218))**
+
+- **[Datepicker][REF] Convert mailing date field on mailing search screen…
+  ([15181](https://github.com/civicrm/civicrm-core/pull/15181))**
+
+- **[Ref] Import use process for relationship defaults, add test
+  ([15215](https://github.com/civicrm/civicrm-core/pull/15215))**
+
+- **[REF] extract send receipt in MembershipRenewal fn
+  ([15117](https://github.com/civicrm/civicrm-core/pull/15117))**
+
+- **[NFC] Fix test syntax
+  ([15067](https://github.com/civicrm/civicrm-core/pull/15067))**
+
+- **[NFC] swap instances where double = is used but it should be triple =
+  ([15049](https://github.com/civicrm/civicrm-core/pull/15049))**
+
+- **[NFC] Update Upgrade Template to use short array syntax
+  ([15057](https://github.com/civicrm/civicrm-core/pull/15057))**
+
+- **[NFC] Remove redundant annotation
+  ([15172](https://github.com/civicrm/civicrm-core/pull/15172))**
+
+- **(NFC) assertPhpSupport - Code cleanup
+  ([164](https://github.com/civicrm/civicrm-wordpress/pull/164))**
+
+- **(NFC) civicrm.drush.inc - Cleanup style
+  ([99](https://github.com/civicrm/civicrm-backdrop/pull/99))**
+
+- **[NFC] Update Default report instances that filter on join date to be …
+  ([15247](https://github.com/civicrm/civicrm-core/pull/15247))**
+
+- **[NFC] Add ImportProcessor class & unit tests + extend existing cover
+  ([15072](https://github.com/civicrm/civicrm-core/pull/15072))**
+
+- **[NFC] Update the APIv3 documentation links.
+  ([15077](https://github.com/civicrm/civicrm-core/pull/15077))**
+
+- **(NFC) GenericAssertionsTrait - Improve docblocks
+  ([15071](https://github.com/civicrm/civicrm-core/pull/15071))**
+
+- **[NFC] Update Examples
+  ([15085](https://github.com/civicrm/civicrm-core/pull/15085))**
+
+- **[Test] [NFC] upgrade remaining export tests
+  ([15095](https://github.com/civicrm/civicrm-core/pull/15095))**
+
+- **[Test] Bring to life dormant test
+  ([15150](https://github.com/civicrm/civicrm-core/pull/15150))**
+
+- **[TEST] Enable apiv4 testing for GroupNesting and GroupOrganization entities
+  ([15217](https://github.com/civicrm/civicrm-core/pull/15217))**
+
+- **[Test] Demonstrate the truthiness of CRM_Utils_System::isNull
+  ([15027](https://github.com/civicrm/civicrm-core/pull/15027))**
+
+- **Unit test for custom date parsing
+  ([14988](https://github.com/civicrm/civicrm-core/pull/14988))**
+
+- **[NFC] [Test] dev/core#1098 Add unit test & code comments relating to the
+  slow activity search
+  ([15016](https://github.com/civicrm/civicrm-core/pull/15016))**
+
+- **[Import] [Test] Initial test on loadSavedMapping function.
+  ([15050](https://github.com/civicrm/civicrm-core/pull/15050))**
+
+- **[Test] Tolerance parameter in attachmenttest needs to be one higher for
+  integers ([15069](https://github.com/civicrm/civicrm-core/pull/15069))**
+
+- **[Test] Fix Last_name in CiviUnitTestCase::activityCreate
+  ([15112](https://github.com/civicrm/civicrm-core/pull/15112))**
+
+- **test for PR
+  ([15121](https://github.com/civicrm/civicrm-core/pull/15121))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following code authors:
+
+19ATF77; AGH Strategies - Andrew Hunt; Agileware - Justin Freeman; Andrew
+Thompson; Australian Greens - Seamus Lee; Caltha - Tomasz Pietrzkowski;
+Christian Wach; Circle Interactive - Dave Jenkins, Pradeep Nayak, Reece Benson;
+CiviCoop - Jaap Jansma; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha
+Chaku; Coop SymbioTIC - Mathieu Lutfy; Dave D; Electronic Frontier Foundation -
+Mark Burdett; Florian Kohrt; Greenpeace CEE - Patrick Figel; JMA Consulting -
+Monish Deb; John Kingsnorth; Megaphone Technology Consulting - Jon Goldberg; MJW
+Consulting - Matthew Wire; mmyriam; Onyemenam Ndubuisi; Progressive Technology
+Project - Jamie McClelland; Tadpole Collective - Kevin Cristiano; Wikimedia
+Foundation - Eileen McNaughton
+
+Most authors also reviewed code for this release; in addition, the following
+reviewers contributed their comments:
+
+AGH Strategies - Alice Frumin; Agileware - Francis Whittle, Pengyi Zhang;
+don-alejandro-z; Fuzion - Jitendra Purohit; iXiam - Luciano Spiegel; JMA
+Consulting - Joe Murray; Nicol Wistreich; Semper IT - Karin Gerritsen; Squiffle
+Consulting - Aidan Saunders;
+
+## <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/release-notes/5.18.1.md b/release-notes/5.18.1.md
new file mode 100644 (file)
index 0000000..d0034f7
--- /dev/null
@@ -0,0 +1,38 @@
+# CiviCRM 5.18.1
+
+Released October 5, 2019
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| Change the database schema?                                     |   no    |
+| Alter the API?                                                  |   no    |
+| Require attention to configuration options?                     |   no    |
+| Fix problems installing or upgrading to a previous version?     |   no    |
+| Introduce features?                                             |   no    |
+| **Fix bugs?**                                                   | **yes** |
+
+## <a name="bugs"></a>Bugs resolved
+
+* **_CiviMember_: Error involving "Pending" status when creating memberships via contribution pages ([dev/core#1291](https://lab.civicrm.org/dev/core/issues/1291): [#15376](https://github.com/civicrm/civicrm-core/pull/15376))**
+* **_Export_: Error when using option "Exclude contacts with "do not mail" (et al)"([dev/core#1292]((https://lab.civicrm.org/dev/core/issues/1292): [#15392](https://github.com/civicrm/civicrm-core/pull/15392))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+MJW Consulting - Matthew Wire; Fuzion - Jitendra Purohit; Coop SymbioTIC - Samuel Vanhove,
+Mathieu Lutfy; Dave D; Australian Greens - Seamus Lee
+
+## <a name="feedback"></a>Feedback
+
+These release notes are edited by Tim Otten and Andrew Hunt.  If you'd like to
+provide feedback on them, please login to https://chat.civicrm.org/civicrm and
+contact `@agh1`.
diff --git a/release-notes/5.18.2.md b/release-notes/5.18.2.md
new file mode 100644 (file)
index 0000000..5ae23b8
--- /dev/null
@@ -0,0 +1,43 @@
+# CiviCRM 5.18.2
+
+Released October 9, 2019
+
+- **[Synopsis](#synopsis)**
+- **[Bugs resolved](#bugs)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| Change the database schema?                                     |   no    |
+| Alter the API?                                                  |   no    |
+| Require attention to configuration options?                     |   no    |
+| Fix problems installing or upgrading to a previous version?     |   no    |
+| Introduce features?                                             |   no    |
+| **Fix bugs?**                                                   | **yes** |
+
+## <a name="bugs"></a>Bugs resolved
+
+* **_PDFLetter_: Fix a warning on the "Print/Merge Document" screen ([dev/core#1281](https://lab.civicrm.org/dev/core/issues/1281): [#15420](https://github.com/civicrm/civicrm-core/pull/15420))**
+* **_Export_: Wrong export list when selecting contact and also when using option "Exclude contacts with "do not mail" (et al)" ([dev/core#1293](https://lab.civicrm.org/dev/core/issues/1293): [#15439](https://github.com/civicrm/civicrm-core/pull/15439))**
+* **_Export_: Ensure that an export file is always generated - even if dataset is empty" ([dev/core#1293](https://lab.civicrm.org/dev/core/issues/1293): [#15440](https://github.com/civicrm/civicrm-core/pull/15440))**
+* **_Import_: Fix value-matching when using certain numerical identifiers ([dev/core#1285](https://lab.civicrm.org/dev/core/issues/1285): [#15453](https://github.com/civicrm/civicrm-core/pull/15453))**
+* **_Import_: "Contribution" import with custom fields may fail due to an underfined index ([dev/core#1269](https://lab.civicrm.org/dev/core/issues/1269): [#15447](https://github.com/civicrm/civicrm-core/pull/15447))**
+* **_Profiles_: Fix sorting by custom fields when using profile search results ([dev/core#1305](https://lab.civicrm.org/dev/core/issues/1305): [#15454](https://github.com/civicrm/civicrm-core/pull/15454))**
+
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following authors and reviewers:
+
+Wikimedia Foundation - Eileen McNaughton; skherraz; tapash;
+Dave D; Australian Greens - Seamus Lee
+
+## <a name="feedback"></a>Feedback
+
+These release notes are edited by Tim Otten and Andrew Hunt.  If you'd like to
+provide feedback on them, please login to https://chat.civicrm.org/civicrm and
+contact `@agh1`.
index 68d82a2367aebaf3d5bf0ad766f9341a7b99ff0a..033d69c18aacf8ba5ec8b7cdbf4cecc9207e4451 100644 (file)
@@ -387,7 +387,27 @@ return [
     'title' => ts('Maximum Attachments'),
     'is_domain' => 1,
     'is_contact' => 0,
-    'description' => ts('Maximum number of files (documents, images, etc.) which can be attached to emails or activities.'),
+    'description' => ts('Maximum number of files (documents, images, etc.) which can be attached to emails or activities. This setting applies to UI forms and limits the number of fields available on the form.'),
+    'help_text' => NULL,
+  ],
+  'max_attachments_backend' => [
+    'group_name' => 'CiviCRM Preferences',
+    'group' => 'core',
+    'name' => 'max_attachments_backend',
+    'legacy_key' => 'maxAttachmentsBackend',
+    'type' => 'Integer',
+    'quick_form_type' => 'Element',
+    'html_type' => 'text',
+    'html_attributes' => [
+      'size' => 2,
+      'maxlength' => 8,
+    ],
+    'default' => CRM_Core_BAO_File::DEFAULT_MAX_ATTACHMENTS_BACKEND,
+    'add' => '5.20',
+    'title' => ts('Maximum Attachments For Backend Processes'),
+    'is_domain' => 1,
+    'is_contact' => 0,
+    'description' => ts('Maximum number of files (documents, images, etc.) which can be processed during backend processing such as automated inbound email processing. This should be a big number higher than the other Maximum Attachments setting above. This setting here merely provides an upper limit to prevent attacks that might overload the server.'),
     'help_text' => NULL,
   ],
   'maxFileSize' => [
index d89557c77dd5b3627f425215a14e29f3a2b3bb48..733bcc0e0f99d911837bfd592852422b874df3f4 100644 (file)
@@ -51,7 +51,7 @@ return [
     ],
     'default' => NULL,
     'title' => 'Geo Provider Key',
-    'description' => 'Enter the API key or Application ID associated with your geocoding provider (not required for Yahoo).',
+    'description' => 'Enter the API key or Application ID associated with your geocoding provider.',
   ],
   'geoProvider' => [
     'add' => '4.7',
index ebd098bdd4981006d14e16a090851c41d0f9738c..f3b7274bc19bb7311a753fb218ae346baacc049f 100644 (file)
@@ -1119,8 +1119,6 @@ class CRM_GCD {
       $group->visibility = 'Public Pages';
       $group->is_active = 1;
       $group->save();
-      $group->buildClause();
-      $group->save();
     }
 
     // 60 are for newsletter
index e3b1dfd33261e299610207bac6ef83d7d8361bbf..0eeacf25e0f85b701fb3808e6a565138c94bbc1b 100644 (file)
@@ -1087,8 +1087,6 @@ class CRM_GCD {
       $group->visibility = 'Public Pages';
       $group->is_active  = 1;
       $group->save();
-      $group->buildClause();
-      $group->save();
     }
 
     // 60 are for newsletter
index 89abc7274dea58ef15fa3f0b022c90f3bed3e487..8c573952a35cadf8ca127ae2d4d5e65a0c8a9f84 100644 (file)
@@ -1,8 +1,8 @@
--- MySQL dump 10.13  Distrib 5.7.25, for osx10.9 (x86_64)
+-- MySQL dump 10.13  Distrib 5.5.58, for osx10.12 (x86_64)
 --
--- Host: 127.0.0.1    Database: dmasterciv_tdjht
+-- Host: 127.0.0.1    Database: dmastercivi_m0po6
 -- ------------------------------------------------------
--- Server version      5.7.25
+-- Server version      5.7.23
 
 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
 /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -87,7 +87,7 @@ 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,10,'Subject for Pledge Acknowledgment','2019-04-23 23:22:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(2,NULL,9,'Subject for Tell a Friend','2018-10-16 16:57:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(3,NULL,9,'Subject for Tell a Friend','2018-09-26 08:55:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(4,NULL,9,'Subject for Tell a Friend','2019-02-14 17:35:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(5,NULL,10,'Subject for Pledge Acknowledgment','2019-03-07 08:59:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(6,NULL,10,'Subject for Pledge Acknowledgment','2019-02-02 17:26:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(7,NULL,9,'Subject for Tell a Friend','2019-01-21 07:08:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(8,NULL,9,'Subject for Tell a Friend','2019-03-15 04:50:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(9,NULL,10,'Subject for Pledge Acknowledgment','2019-05-05 16:07:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(10,NULL,9,'Subject for Tell a Friend','2019-04-14 16:51:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(11,NULL,10,'Subject for Pledge Acknowledgment','2018-09-19 08:12:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(12,NULL,10,'Subject for Pledge Acknowledgment','2018-10-14 13:25:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(13,NULL,10,'Subject for Pledge Acknowledgment','2019-01-27 16:50:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(14,NULL,9,'Subject for Tell a Friend','2019-07-15 09:05:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(15,NULL,10,'Subject for Pledge Acknowledgment','2019-05-29 05:19:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(16,NULL,9,'Subject for Tell a Friend','2019-07-24 06:12:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(17,NULL,9,'Subject for Tell a Friend','2019-06-12 12:57:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(18,NULL,10,'Subject for Pledge Acknowledgment','2018-11-29 11:27:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(19,NULL,9,'Subject for Tell a Friend','2019-04-21 13:47:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(20,NULL,9,'Subject for Tell a Friend','2019-04-27 19:50:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(21,NULL,10,'Subject for Pledge Acknowledgment','2018-09-30 21:46:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(22,NULL,10,'Subject for Pledge Acknowledgment','2019-04-18 19:52:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(23,NULL,9,'Subject for Tell a Friend','2018-12-20 09:50:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(24,NULL,9,'Subject for Tell a Friend','2019-07-17 07:02:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(25,NULL,9,'Subject for Tell a Friend','2019-05-04 22:46:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(26,NULL,9,'Subject for Tell a Friend','2019-06-24 14:48:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(27,NULL,10,'Subject for Pledge Acknowledgment','2019-07-23 09:30:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(28,NULL,9,'Subject for Tell a Friend','2019-07-02 03:28:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(29,NULL,10,'Subject for Pledge Acknowledgment','2019-03-30 17:24:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(30,NULL,10,'Subject for Pledge Acknowledgment','2019-01-31 23:28:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(31,NULL,10,'Subject for Pledge Acknowledgment','2019-04-15 15:11:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(32,NULL,10,'Subject for Pledge Acknowledgment','2019-05-04 23:27:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(33,NULL,10,'Subject for Pledge Acknowledgment','2019-05-11 10:26:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(34,NULL,9,'Subject for Tell a Friend','2019-04-02 03:16:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(35,NULL,9,'Subject for Tell a Friend','2019-08-07 18:28:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(36,NULL,10,'Subject for Pledge Acknowledgment','2019-01-07 04:35:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(37,NULL,9,'Subject for Tell a Friend','2019-06-20 01:03:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(38,NULL,10,'Subject for Pledge Acknowledgment','2018-10-26 23:57:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(39,NULL,9,'Subject for Tell a Friend','2019-01-19 16:23:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(40,NULL,9,'Subject for Tell a Friend','2018-11-03 17:45:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(41,NULL,10,'Subject for Pledge Acknowledgment','2018-08-23 16:39:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(42,NULL,9,'Subject for Tell a Friend','2019-04-13 02:08:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(43,NULL,10,'Subject for Pledge Acknowledgment','2018-11-01 05:28:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(44,NULL,9,'Subject for Tell a Friend','2019-04-19 11:08:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(45,NULL,9,'Subject for Tell a Friend','2018-11-04 18:37:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(46,NULL,9,'Subject for Tell a Friend','2018-09-24 16:17:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(47,NULL,9,'Subject for Tell a Friend','2019-06-10 08:35:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(48,NULL,9,'Subject for Tell a Friend','2018-08-29 01:13:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(49,NULL,10,'Subject for Pledge Acknowledgment','2018-11-19 03:48:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(50,NULL,10,'Subject for Pledge Acknowledgment','2018-10-06 15:43:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(51,NULL,10,'Subject for Pledge Acknowledgment','2019-02-18 18:39:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(52,NULL,10,'Subject for Pledge Acknowledgment','2018-11-15 03:43:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:29','2019-08-15 21:31:29'),(53,NULL,9,'Subject for Tell a Friend','2018-10-09 17:44:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(54,NULL,10,'Subject for Pledge Acknowledgment','2019-02-24 04:16:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(55,NULL,9,'Subject for Tell a Friend','2019-06-11 23:34:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(56,NULL,10,'Subject for Pledge Acknowledgment','2019-03-14 01:21:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(57,NULL,9,'Subject for Tell a Friend','2018-09-03 17:19:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(58,NULL,10,'Subject for Pledge Acknowledgment','2018-09-19 23:17:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(59,NULL,9,'Subject for Tell a Friend','2019-07-12 03:22:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(60,NULL,10,'Subject for Pledge Acknowledgment','2018-10-10 23:56:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(61,NULL,10,'Subject for Pledge Acknowledgment','2019-07-18 18:19:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(62,NULL,9,'Subject for Tell a Friend','2019-01-27 19:04:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(63,NULL,9,'Subject for Tell a Friend','2019-01-12 04:16:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(64,NULL,9,'Subject for Tell a Friend','2019-03-08 03:20:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(65,NULL,10,'Subject for Pledge Acknowledgment','2018-10-23 12:20:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(66,NULL,9,'Subject for Tell a Friend','2019-07-05 14:30:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(67,NULL,10,'Subject for Pledge Acknowledgment','2018-08-30 09:27:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(68,NULL,9,'Subject for Tell a Friend','2018-10-10 03:02:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(69,NULL,9,'Subject for Tell a Friend','2018-12-02 22:31:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(70,NULL,9,'Subject for Tell a Friend','2018-08-20 15:12:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(71,NULL,10,'Subject for Pledge Acknowledgment','2018-08-23 07:14:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(72,NULL,9,'Subject for Tell a Friend','2018-12-04 12:48:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(73,NULL,9,'Subject for Tell a Friend','2019-08-15 20:46:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(74,NULL,10,'Subject for Pledge Acknowledgment','2019-06-04 13:17:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(75,NULL,9,'Subject for Tell a Friend','2019-06-09 14:24:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(76,NULL,10,'Subject for Pledge Acknowledgment','2019-01-23 23:13:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(77,NULL,9,'Subject for Tell a Friend','2018-12-09 16:31:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(78,NULL,10,'Subject for Pledge Acknowledgment','2019-08-10 16:14:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(79,NULL,10,'Subject for Pledge Acknowledgment','2018-11-07 20:53:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(80,NULL,10,'Subject for Pledge Acknowledgment','2018-12-12 19:34:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(81,NULL,10,'Subject for Pledge Acknowledgment','2018-11-30 10:17:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(82,NULL,9,'Subject for Tell a Friend','2018-09-21 11:27:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(83,NULL,10,'Subject for Pledge Acknowledgment','2019-06-17 12:36:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(84,NULL,9,'Subject for Tell a Friend','2018-08-23 06:09:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(85,NULL,10,'Subject for Pledge Acknowledgment','2019-01-27 21:14:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(86,NULL,10,'Subject for Pledge Acknowledgment','2018-12-24 03:59:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(87,NULL,9,'Subject for Tell a Friend','2018-11-16 03:21:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(88,NULL,9,'Subject for Tell a Friend','2019-04-08 16:23:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(89,NULL,10,'Subject for Pledge Acknowledgment','2018-10-28 12:28:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(90,NULL,9,'Subject for Tell a Friend','2019-08-01 01:05:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(91,NULL,9,'Subject for Tell a Friend','2019-04-03 19:10:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(92,NULL,10,'Subject for Pledge Acknowledgment','2019-07-14 13:40:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(93,NULL,9,'Subject for Tell a Friend','2018-08-23 01:06:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(94,NULL,9,'Subject for Tell a Friend','2019-01-14 13:08:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(95,NULL,9,'Subject for Tell a Friend','2019-03-28 09:13:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(96,NULL,10,'Subject for Pledge Acknowledgment','2019-08-06 12:45:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(97,NULL,9,'Subject for Tell a Friend','2018-11-04 23:22:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(98,NULL,9,'Subject for Tell a Friend','2018-09-07 18:33:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(99,NULL,10,'Subject for Pledge Acknowledgment','2019-05-25 17:55:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(100,NULL,9,'Subject for Tell a Friend','2018-11-28 04:12:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(101,NULL,10,'Subject for Pledge Acknowledgment','2019-02-11 08:22:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(102,NULL,10,'Subject for Pledge Acknowledgment','2018-11-28 16:31:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(103,NULL,10,'Subject for Pledge Acknowledgment','2019-07-26 04:25:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(104,NULL,9,'Subject for Tell a Friend','2019-03-26 16:45:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(105,NULL,9,'Subject for Tell a Friend','2018-11-13 14:46:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(106,NULL,9,'Subject for Tell a Friend','2019-04-25 01:45:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(107,NULL,9,'Subject for Tell a Friend','2019-01-09 18:11:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(108,NULL,9,'Subject for Tell a Friend','2018-11-24 15:32:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(109,NULL,10,'Subject for Pledge Acknowledgment','2019-03-06 16:10:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(110,NULL,9,'Subject for Tell a Friend','2019-06-04 10:20:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(111,NULL,10,'Subject for Pledge Acknowledgment','2019-07-26 14:13:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(112,NULL,10,'Subject for Pledge Acknowledgment','2019-01-30 14:36:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(113,NULL,9,'Subject for Tell a Friend','2019-07-12 12:36:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(114,NULL,10,'Subject for Pledge Acknowledgment','2018-10-31 07:30:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(115,NULL,9,'Subject for Tell a Friend','2018-11-09 03:27:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(116,NULL,10,'Subject for Pledge Acknowledgment','2019-03-19 19:04:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(117,NULL,10,'Subject for Pledge Acknowledgment','2018-10-11 08:25:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(118,NULL,10,'Subject for Pledge Acknowledgment','2018-09-19 18:24:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(119,NULL,10,'Subject for Pledge Acknowledgment','2019-06-11 19:32:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(120,NULL,10,'Subject for Pledge Acknowledgment','2018-12-01 10:40:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(121,NULL,10,'Subject for Pledge Acknowledgment','2019-01-02 12:01:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(122,NULL,9,'Subject for Tell a Friend','2019-04-08 07:44:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(123,NULL,9,'Subject for Tell a Friend','2019-06-26 09:38:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(124,NULL,10,'Subject for Pledge Acknowledgment','2018-11-27 04:02:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(125,NULL,10,'Subject for Pledge Acknowledgment','2018-11-27 06:02:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(126,NULL,10,'Subject for Pledge Acknowledgment','2018-12-20 23:34:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(127,NULL,10,'Subject for Pledge Acknowledgment','2019-02-26 06:27:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(128,NULL,10,'Subject for Pledge Acknowledgment','2019-02-23 13:42:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(129,NULL,9,'Subject for Tell a Friend','2018-09-13 10:21:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(130,NULL,9,'Subject for Tell a Friend','2018-11-28 12:14:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(131,NULL,10,'Subject for Pledge Acknowledgment','2019-01-03 01:09:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(132,NULL,10,'Subject for Pledge Acknowledgment','2019-05-04 12:05:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(133,NULL,9,'Subject for Tell a Friend','2018-08-24 12:19:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(134,NULL,10,'Subject for Pledge Acknowledgment','2018-10-07 17:42:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(135,NULL,9,'Subject for Tell a Friend','2019-08-11 04:48:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(136,NULL,10,'Subject for Pledge Acknowledgment','2019-02-11 07:58:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(137,NULL,10,'Subject for Pledge Acknowledgment','2019-07-10 03:33:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(138,NULL,9,'Subject for Tell a Friend','2019-08-04 18:03:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(139,NULL,9,'Subject for Tell a Friend','2019-06-21 20:58:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(140,NULL,9,'Subject for Tell a Friend','2018-10-25 10:29:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(141,NULL,10,'Subject for Pledge Acknowledgment','2018-09-24 13:06:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(142,NULL,9,'Subject for Tell a Friend','2019-07-27 10:24:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(143,NULL,9,'Subject for Tell a Friend','2018-08-30 16:40:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(144,NULL,9,'Subject for Tell a Friend','2019-07-11 16:17:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(145,NULL,9,'Subject for Tell a Friend','2019-05-18 02:25:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(146,NULL,10,'Subject for Pledge Acknowledgment','2018-12-08 22:58:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(147,NULL,10,'Subject for Pledge Acknowledgment','2018-11-15 11:34:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(148,NULL,9,'Subject for Tell a Friend','2019-06-26 05:55:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(149,NULL,10,'Subject for Pledge Acknowledgment','2018-10-14 11:48:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(150,NULL,9,'Subject for Tell a Friend','2019-05-20 09:25:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(151,NULL,10,'Subject for Pledge Acknowledgment','2019-01-14 18:41:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(152,NULL,9,'Subject for Tell a Friend','2019-03-26 05:10:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(153,NULL,9,'Subject for Tell a Friend','2018-12-19 22:45:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(154,NULL,10,'Subject for Pledge Acknowledgment','2018-11-24 08:09:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(155,NULL,10,'Subject for Pledge Acknowledgment','2018-08-19 21:48:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(156,NULL,10,'Subject for Pledge Acknowledgment','2018-10-05 05:35:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(157,NULL,10,'Subject for Pledge Acknowledgment','2018-11-15 08:27:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(158,NULL,10,'Subject for Pledge Acknowledgment','2018-12-23 18:47:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(159,NULL,9,'Subject for Tell a Friend','2018-11-22 04:32:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(160,NULL,9,'Subject for Tell a Friend','2018-11-09 04:50:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(161,NULL,10,'Subject for Pledge Acknowledgment','2019-03-14 18:34:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(162,NULL,10,'Subject for Pledge Acknowledgment','2019-02-19 14:00:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(163,NULL,10,'Subject for Pledge Acknowledgment','2018-12-16 21:49:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(164,NULL,10,'Subject for Pledge Acknowledgment','2018-09-06 23:03:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(165,NULL,9,'Subject for Tell a Friend','2018-09-26 19:01:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(166,NULL,9,'Subject for Tell a Friend','2018-11-28 17:04:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(167,NULL,9,'Subject for Tell a Friend','2019-03-24 12:33:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(168,NULL,9,'Subject for Tell a Friend','2019-07-30 01:03:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(169,NULL,10,'Subject for Pledge Acknowledgment','2019-07-09 11:39:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(170,NULL,10,'Subject for Pledge Acknowledgment','2019-02-19 14:27:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(171,NULL,10,'Subject for Pledge Acknowledgment','2019-07-03 09:07:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(172,NULL,9,'Subject for Tell a Friend','2019-06-18 18:48:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(173,NULL,10,'Subject for Pledge Acknowledgment','2019-02-18 19:24:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(174,NULL,9,'Subject for Tell a Friend','2019-03-13 18:09:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(175,NULL,10,'Subject for Pledge Acknowledgment','2019-04-24 23:36:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(176,NULL,10,'Subject for Pledge Acknowledgment','2019-05-18 11:32:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(177,NULL,10,'Subject for Pledge Acknowledgment','2019-05-17 01:43:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(178,NULL,10,'Subject for Pledge Acknowledgment','2019-05-28 06:35:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(179,NULL,10,'Subject for Pledge Acknowledgment','2019-04-03 23:50:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(180,NULL,10,'Subject for Pledge Acknowledgment','2019-02-16 22:24:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(181,NULL,9,'Subject for Tell a Friend','2019-06-03 06:32:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(182,NULL,9,'Subject for Tell a Friend','2018-09-30 03:01:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(183,NULL,10,'Subject for Pledge Acknowledgment','2019-07-24 09:33:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(184,NULL,9,'Subject for Tell a Friend','2018-10-08 16:43:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(185,NULL,9,'Subject for Tell a Friend','2019-07-28 02:26:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(186,NULL,10,'Subject for Pledge Acknowledgment','2018-11-19 12:08:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(187,NULL,9,'Subject for Tell a Friend','2019-03-23 13:11:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(188,NULL,10,'Subject for Pledge Acknowledgment','2018-12-20 21:23:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(189,NULL,9,'Subject for Tell a Friend','2019-08-15 18:59:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(190,NULL,10,'Subject for Pledge Acknowledgment','2018-10-15 06:20:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(191,NULL,10,'Subject for Pledge Acknowledgment','2018-11-21 11:27:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(192,NULL,10,'Subject for Pledge Acknowledgment','2018-12-27 04:50:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(193,NULL,10,'Subject for Pledge Acknowledgment','2018-11-10 07:47:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(194,NULL,10,'Subject for Pledge Acknowledgment','2018-12-26 16:29:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(195,NULL,9,'Subject for Tell a Friend','2019-05-21 10:45:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(196,NULL,10,'Subject for Pledge Acknowledgment','2019-05-02 14:09:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(197,NULL,10,'Subject for Pledge Acknowledgment','2019-01-16 13:48:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(198,NULL,10,'Subject for Pledge Acknowledgment','2019-05-20 12:13:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(199,NULL,10,'Subject for Pledge Acknowledgment','2018-11-28 12:33:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(200,NULL,9,'Subject for Tell a Friend','2018-08-27 19:14:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(201,NULL,10,'Subject for Pledge Acknowledgment','2018-11-26 01:31:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(202,NULL,9,'Subject for Tell a Friend','2019-08-06 10:08:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(203,NULL,10,'Subject for Pledge Acknowledgment','2018-10-26 12:47:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(204,NULL,9,'Subject for Tell a Friend','2019-03-18 04:23:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(205,NULL,10,'Subject for Pledge Acknowledgment','2019-03-17 16:03:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(206,NULL,9,'Subject for Tell a Friend','2019-08-03 20:50:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(207,NULL,10,'Subject for Pledge Acknowledgment','2019-02-03 01:21:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(208,NULL,10,'Subject for Pledge Acknowledgment','2018-10-21 15:07:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(209,NULL,9,'Subject for Tell a Friend','2019-02-24 21:07:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(210,NULL,9,'Subject for Tell a Friend','2018-11-25 02:43:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(211,NULL,9,'Subject for Tell a Friend','2019-01-18 05:00:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(212,NULL,9,'Subject for Tell a Friend','2019-06-09 22:11:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(213,NULL,9,'Subject for Tell a Friend','2019-01-05 00:55:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(214,NULL,10,'Subject for Pledge Acknowledgment','2018-10-23 17:39:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(215,NULL,10,'Subject for Pledge Acknowledgment','2018-12-20 13:20:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(216,NULL,9,'Subject for Tell a Friend','2018-11-27 19:20:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(217,NULL,10,'Subject for Pledge Acknowledgment','2019-08-02 06:38:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(218,NULL,10,'Subject for Pledge Acknowledgment','2018-12-16 19:23:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(219,NULL,9,'Subject for Tell a Friend','2019-03-31 16:04:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(220,NULL,9,'Subject for Tell a Friend','2019-01-24 12:46:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(221,NULL,10,'Subject for Pledge Acknowledgment','2019-06-22 19:15:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(222,NULL,10,'Subject for Pledge Acknowledgment','2019-05-10 09:08:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(223,NULL,10,'Subject for Pledge Acknowledgment','2019-07-03 03:32:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(224,NULL,10,'Subject for Pledge Acknowledgment','2019-08-06 03:11:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(225,NULL,10,'Subject for Pledge Acknowledgment','2019-07-14 07:39:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(226,NULL,10,'Subject for Pledge Acknowledgment','2019-05-19 10:43:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(227,NULL,10,'Subject for Pledge Acknowledgment','2018-11-01 16:02:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(228,NULL,9,'Subject for Tell a Friend','2019-05-22 14:46:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(229,NULL,9,'Subject for Tell a Friend','2019-02-14 21:54:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(230,NULL,10,'Subject for Pledge Acknowledgment','2018-09-23 03:00:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(231,NULL,9,'Subject for Tell a Friend','2019-01-08 09:25:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(232,NULL,9,'Subject for Tell a Friend','2019-02-24 00:22:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(233,NULL,9,'Subject for Tell a Friend','2018-11-05 10:43:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(234,NULL,9,'Subject for Tell a Friend','2019-07-27 13:46:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(235,NULL,10,'Subject for Pledge Acknowledgment','2018-12-26 23:01:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(236,NULL,10,'Subject for Pledge Acknowledgment','2019-05-16 15:24:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(237,NULL,10,'Subject for Pledge Acknowledgment','2018-10-06 04:40:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(238,NULL,10,'Subject for Pledge Acknowledgment','2019-06-13 04:38:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(239,NULL,9,'Subject for Tell a Friend','2018-11-05 01:55:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(240,NULL,9,'Subject for Tell a Friend','2019-06-12 11:08:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(241,NULL,9,'Subject for Tell a Friend','2018-12-18 18:13:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(242,NULL,10,'Subject for Pledge Acknowledgment','2018-08-20 06:15:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(243,NULL,10,'Subject for Pledge Acknowledgment','2019-05-05 06:10:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(244,NULL,9,'Subject for Tell a Friend','2019-08-05 11:40:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(245,NULL,10,'Subject for Pledge Acknowledgment','2019-06-27 11:17:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(246,NULL,10,'Subject for Pledge Acknowledgment','2018-08-28 01:18:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(247,NULL,10,'Subject for Pledge Acknowledgment','2018-09-04 08:16:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(248,NULL,9,'Subject for Tell a Friend','2019-01-17 10:25:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(249,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 01:34:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(250,NULL,10,'Subject for Pledge Acknowledgment','2018-11-25 10:09:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(251,NULL,9,'Subject for Tell a Friend','2018-09-19 09:54:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(252,NULL,9,'Subject for Tell a Friend','2019-02-26 05:24:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(253,NULL,10,'Subject for Pledge Acknowledgment','2018-10-06 08:06:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(254,NULL,10,'Subject for Pledge Acknowledgment','2019-05-16 10:13:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(255,NULL,9,'Subject for Tell a Friend','2019-07-16 00:50:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(256,NULL,10,'Subject for Pledge Acknowledgment','2019-05-07 19:28:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(257,NULL,10,'Subject for Pledge Acknowledgment','2018-08-20 21:58:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(258,NULL,9,'Subject for Tell a Friend','2018-11-12 04:45:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(259,NULL,10,'Subject for Pledge Acknowledgment','2018-10-09 22:43:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(260,NULL,9,'Subject for Tell a Friend','2019-01-19 05:38:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(261,NULL,9,'Subject for Tell a Friend','2018-08-17 19:03:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(262,NULL,10,'Subject for Pledge Acknowledgment','2018-12-03 06:47:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(263,NULL,9,'Subject for Tell a Friend','2019-03-30 18:01:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(264,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 13:31:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(265,NULL,9,'Subject for Tell a Friend','2019-02-23 17:26:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(266,NULL,10,'Subject for Pledge Acknowledgment','2018-11-20 16:03:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(267,NULL,9,'Subject for Tell a Friend','2019-02-28 13:13:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(268,NULL,9,'Subject for Tell a Friend','2019-06-12 22:44:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(269,NULL,10,'Subject for Pledge Acknowledgment','2019-03-08 04:04:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(270,NULL,10,'Subject for Pledge Acknowledgment','2018-10-05 04:35:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(271,NULL,9,'Subject for Tell a Friend','2019-07-21 13:19:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(272,NULL,9,'Subject for Tell a Friend','2018-11-03 01:52:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(273,NULL,10,'Subject for Pledge Acknowledgment','2018-12-21 12:35:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(274,NULL,9,'Subject for Tell a Friend','2018-10-29 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(275,NULL,10,'Subject for Pledge Acknowledgment','2018-12-17 22:19:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(276,NULL,9,'Subject for Tell a Friend','2018-10-26 05:30:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(277,NULL,9,'Subject for Tell a Friend','2019-02-05 06:01:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(278,NULL,9,'Subject for Tell a Friend','2018-08-19 07:07:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(279,NULL,10,'Subject for Pledge Acknowledgment','2018-08-30 01:24:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(280,NULL,9,'Subject for Tell a Friend','2019-05-25 06:58:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(281,NULL,10,'Subject for Pledge Acknowledgment','2018-09-30 21:43:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(282,NULL,10,'Subject for Pledge Acknowledgment','2019-08-14 13:46:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(283,NULL,9,'Subject for Tell a Friend','2018-10-06 05:31:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(284,NULL,10,'Subject for Pledge Acknowledgment','2019-02-16 10:22:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(285,NULL,10,'Subject for Pledge Acknowledgment','2019-05-08 12:35:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(286,NULL,10,'Subject for Pledge Acknowledgment','2019-02-04 23:32:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(287,NULL,10,'Subject for Pledge Acknowledgment','2018-11-21 06:42:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(288,NULL,9,'Subject for Tell a Friend','2019-06-08 18:53:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(289,NULL,9,'Subject for Tell a Friend','2019-08-05 19:40:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(290,NULL,9,'Subject for Tell a Friend','2019-03-08 23:18:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(291,NULL,9,'Subject for Tell a Friend','2018-09-15 07:31:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(292,NULL,9,'Subject for Tell a Friend','2019-03-20 03:39:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(293,NULL,10,'Subject for Pledge Acknowledgment','2019-04-08 20:50:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(294,NULL,9,'Subject for Tell a Friend','2018-09-06 23:52:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(295,NULL,10,'Subject for Pledge Acknowledgment','2018-11-13 15:00:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(296,NULL,9,'Subject for Tell a Friend','2019-01-17 12:27:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(297,NULL,9,'Subject for Tell a Friend','2018-11-02 06:23:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(298,NULL,9,'Subject for Tell a Friend','2018-12-17 19:03:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(299,NULL,10,'Subject for Pledge Acknowledgment','2019-05-04 04:59:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(300,NULL,10,'Subject for Pledge Acknowledgment','2019-03-10 17:15:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(301,NULL,9,'Subject for Tell a Friend','2018-08-22 04:15:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(302,NULL,9,'Subject for Tell a Friend','2019-06-19 08:13:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(303,NULL,9,'Subject for Tell a Friend','2018-11-09 08:06:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(304,NULL,10,'Subject for Pledge Acknowledgment','2019-08-15 00:21:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(305,NULL,9,'Subject for Tell a Friend','2018-10-15 12:25:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(306,NULL,9,'Subject for Tell a Friend','2019-07-09 15:45:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(307,NULL,10,'Subject for Pledge Acknowledgment','2019-04-05 19:26:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(308,NULL,9,'Subject for Tell a Friend','2019-07-06 07:06:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(309,NULL,9,'Subject for Tell a Friend','2018-08-24 03:10:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(310,NULL,9,'Subject for Tell a Friend','2019-02-03 03:58:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(311,NULL,10,'Subject for Pledge Acknowledgment','2018-10-30 19:09:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(312,NULL,10,'Subject for Pledge Acknowledgment','2019-06-21 03:23:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(313,NULL,9,'Subject for Tell a Friend','2018-11-15 07:32:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(314,NULL,9,'Subject for Tell a Friend','2018-09-08 07:13:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(315,NULL,10,'Subject for Pledge Acknowledgment','2019-04-01 21:33:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(316,NULL,9,'Subject for Tell a Friend','2018-09-29 04:36:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(317,NULL,10,'Subject for Pledge Acknowledgment','2019-01-16 08:15:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(318,NULL,10,'Subject for Pledge Acknowledgment','2019-07-23 07:43:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(319,NULL,9,'Subject for Tell a Friend','2019-04-12 08:12:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(320,NULL,9,'Subject for Tell a Friend','2019-08-15 14:17:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(321,NULL,9,'Subject for Tell a Friend','2019-01-18 07:02:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(322,NULL,9,'Subject for Tell a Friend','2018-11-14 04:47:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(323,NULL,9,'Subject for Tell a Friend','2019-01-26 03:11:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(324,NULL,9,'Subject for Tell a Friend','2018-08-23 15:54:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(325,NULL,9,'Subject for Tell a Friend','2019-06-26 03:51:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(326,NULL,9,'Subject for Tell a Friend','2019-06-29 22:04:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(327,NULL,10,'Subject for Pledge Acknowledgment','2019-03-03 15:26:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(328,NULL,9,'Subject for Tell a Friend','2019-01-03 14:31:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(329,NULL,9,'Subject for Tell a Friend','2019-06-26 20:05:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(330,NULL,9,'Subject for Tell a Friend','2018-08-16 04:55:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(331,NULL,9,'Subject for Tell a Friend','2018-08-21 01:36:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(332,NULL,10,'Subject for Pledge Acknowledgment','2018-11-05 10:31:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(333,NULL,9,'Subject for Tell a Friend','2019-01-07 22:54:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(334,NULL,10,'Subject for Pledge Acknowledgment','2019-05-19 16:39:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(335,NULL,9,'Subject for Tell a Friend','2019-04-27 10:36:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(336,NULL,9,'Subject for Tell a Friend','2019-04-08 03:41:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(337,NULL,9,'Subject for Tell a Friend','2018-08-19 14:53:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(338,NULL,10,'Subject for Pledge Acknowledgment','2019-04-04 17:06:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(339,NULL,9,'Subject for Tell a Friend','2019-01-15 12:24:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(340,NULL,9,'Subject for Tell a Friend','2019-07-26 13:29:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(341,NULL,9,'Subject for Tell a Friend','2018-09-25 14:02:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(342,NULL,10,'Subject for Pledge Acknowledgment','2019-04-20 11:52:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(343,NULL,9,'Subject for Tell a Friend','2019-06-30 12:13:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(344,NULL,9,'Subject for Tell a Friend','2019-03-06 15:34:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(345,NULL,10,'Subject for Pledge Acknowledgment','2019-01-22 08:41:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(346,NULL,9,'Subject for Tell a Friend','2019-07-26 04:00:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(347,NULL,10,'Subject for Pledge Acknowledgment','2018-11-28 17:07:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(348,NULL,9,'Subject for Tell a Friend','2019-05-11 02:11:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(349,NULL,9,'Subject for Tell a Friend','2019-03-11 05:23:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(350,NULL,9,'Subject for Tell a Friend','2019-01-29 17:20:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(351,NULL,10,'Subject for Pledge Acknowledgment','2019-07-07 20:35:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(352,NULL,9,'Subject for Tell a Friend','2019-04-10 17:37:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(353,NULL,10,'Subject for Pledge Acknowledgment','2019-04-18 15:48:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(354,NULL,9,'Subject for Tell a Friend','2019-03-15 17:55:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(355,NULL,10,'Subject for Pledge Acknowledgment','2019-03-07 10:25:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(356,NULL,9,'Subject for Tell a Friend','2019-07-03 17:39:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(357,NULL,10,'Subject for Pledge Acknowledgment','2019-03-01 04:54:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(358,NULL,9,'Subject for Tell a Friend','2019-01-02 15:38:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(359,NULL,10,'Subject for Pledge Acknowledgment','2019-07-02 15:41:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(360,NULL,9,'Subject for Tell a Friend','2019-01-30 06:04:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(361,NULL,10,'Subject for Pledge Acknowledgment','2019-07-03 06:20:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(362,NULL,10,'Subject for Pledge Acknowledgment','2019-07-29 19:00:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(363,NULL,9,'Subject for Tell a Friend','2018-10-28 01:46:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(364,NULL,9,'Subject for Tell a Friend','2019-01-14 18:57:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(365,NULL,9,'Subject for Tell a Friend','2019-07-11 00:25:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(366,NULL,10,'Subject for Pledge Acknowledgment','2018-10-26 15:42:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(367,NULL,10,'Subject for Pledge Acknowledgment','2018-09-19 17:02:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(368,NULL,10,'Subject for Pledge Acknowledgment','2018-09-27 12:01:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(369,NULL,9,'Subject for Tell a Friend','2019-06-25 19:09:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(370,NULL,9,'Subject for Tell a Friend','2018-10-04 14:15:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(371,NULL,10,'Subject for Pledge Acknowledgment','2019-01-14 22:28:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(372,NULL,9,'Subject for Tell a Friend','2018-11-12 18:24:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(373,NULL,9,'Subject for Tell a Friend','2018-09-15 12:26:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(374,NULL,9,'Subject for Tell a Friend','2019-04-23 12:57:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(375,NULL,9,'Subject for Tell a Friend','2018-09-01 02:39:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(376,NULL,10,'Subject for Pledge Acknowledgment','2019-03-26 09:50:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(377,NULL,9,'Subject for Tell a Friend','2018-12-05 01:39:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(378,NULL,9,'Subject for Tell a Friend','2019-01-13 14:37:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(379,NULL,10,'Subject for Pledge Acknowledgment','2019-01-16 13:07:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(380,NULL,10,'Subject for Pledge Acknowledgment','2019-04-12 07:03:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(381,NULL,10,'Subject for Pledge Acknowledgment','2019-03-27 04:27:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(382,NULL,10,'Subject for Pledge Acknowledgment','2019-01-06 18:15:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(383,NULL,10,'Subject for Pledge Acknowledgment','2019-05-07 09:01:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(384,NULL,10,'Subject for Pledge Acknowledgment','2019-08-14 04:10:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(385,NULL,10,'Subject for Pledge Acknowledgment','2019-02-15 18:08:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(386,NULL,9,'Subject for Tell a Friend','2018-08-24 09:52:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(387,NULL,9,'Subject for Tell a Friend','2019-06-15 02:06:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(388,NULL,10,'Subject for Pledge Acknowledgment','2019-02-12 09:42:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(389,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 06:03:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(390,NULL,10,'Subject for Pledge Acknowledgment','2019-02-21 04:33:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(391,NULL,9,'Subject for Tell a Friend','2019-07-08 07:43:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(392,NULL,10,'Subject for Pledge Acknowledgment','2019-01-25 17:01:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(393,NULL,10,'Subject for Pledge Acknowledgment','2018-08-28 13:58:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(394,NULL,10,'Subject for Pledge Acknowledgment','2018-11-09 09:01:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(395,NULL,9,'Subject for Tell a Friend','2019-01-18 00:18:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(396,NULL,9,'Subject for Tell a Friend','2018-08-29 14:54:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(397,NULL,9,'Subject for Tell a Friend','2019-07-24 09:04:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(398,NULL,10,'Subject for Pledge Acknowledgment','2019-07-01 12:42:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(399,NULL,10,'Subject for Pledge Acknowledgment','2019-04-09 10:29:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(400,NULL,10,'Subject for Pledge Acknowledgment','2019-04-08 03:48:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(401,NULL,10,'Subject for Pledge Acknowledgment','2018-10-25 23:36:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(402,NULL,9,'Subject for Tell a Friend','2018-11-03 06:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(403,NULL,10,'Subject for Pledge Acknowledgment','2019-03-02 00:13:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(404,NULL,9,'Subject for Tell a Friend','2018-12-09 09:37:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(405,NULL,9,'Subject for Tell a Friend','2019-06-15 05:49:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(406,NULL,9,'Subject for Tell a Friend','2019-06-17 09:19:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(407,NULL,10,'Subject for Pledge Acknowledgment','2019-07-14 14:59:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(408,NULL,10,'Subject for Pledge Acknowledgment','2019-03-25 13:51:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(409,NULL,9,'Subject for Tell a Friend','2018-09-12 12:33:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(410,NULL,10,'Subject for Pledge Acknowledgment','2018-09-03 07:21:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(411,NULL,9,'Subject for Tell a Friend','2018-08-26 20:32:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(412,NULL,10,'Subject for Pledge Acknowledgment','2019-07-21 18:39:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(413,NULL,9,'Subject for Tell a Friend','2019-03-05 11:57:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(414,NULL,10,'Subject for Pledge Acknowledgment','2019-05-30 04:57:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(415,NULL,9,'Subject for Tell a Friend','2019-06-14 10:05:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(416,NULL,10,'Subject for Pledge Acknowledgment','2019-07-29 10:14:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(417,NULL,9,'Subject for Tell a Friend','2018-10-04 23:35:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(418,NULL,10,'Subject for Pledge Acknowledgment','2019-08-01 01:19:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(419,NULL,10,'Subject for Pledge Acknowledgment','2018-11-11 23:35:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(420,NULL,10,'Subject for Pledge Acknowledgment','2019-04-30 13:06:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(421,NULL,9,'Subject for Tell a Friend','2019-07-20 22:49:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(422,NULL,10,'Subject for Pledge Acknowledgment','2019-04-04 17:20:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(423,NULL,9,'Subject for Tell a Friend','2019-04-22 19:48:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(424,NULL,10,'Subject for Pledge Acknowledgment','2019-01-18 12:53:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(425,NULL,9,'Subject for Tell a Friend','2018-10-08 00:48:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(426,NULL,9,'Subject for Tell a Friend','2019-05-17 23:08:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(427,NULL,9,'Subject for Tell a Friend','2019-02-20 23:26:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(428,NULL,10,'Subject for Pledge Acknowledgment','2019-07-10 23:44:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(429,NULL,9,'Subject for Tell a Friend','2019-03-28 23:38:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(430,NULL,9,'Subject for Tell a Friend','2019-03-05 23:27:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(431,NULL,9,'Subject for Tell a Friend','2019-01-04 09:58:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:30','2019-08-15 21:31:30'),(432,NULL,9,'Subject for Tell a Friend','2019-04-07 09:58:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(433,NULL,9,'Subject for Tell a Friend','2018-11-03 20:33:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(434,NULL,9,'Subject for Tell a Friend','2018-09-08 18:29:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(435,NULL,9,'Subject for Tell a Friend','2019-04-20 19:22:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(436,NULL,9,'Subject for Tell a Friend','2018-11-23 03:56:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(437,NULL,10,'Subject for Pledge Acknowledgment','2018-11-25 04:08:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(438,NULL,10,'Subject for Pledge Acknowledgment','2019-04-09 07:43:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(439,NULL,10,'Subject for Pledge Acknowledgment','2019-04-01 19:21:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(440,NULL,10,'Subject for Pledge Acknowledgment','2019-07-08 17:34:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(441,NULL,10,'Subject for Pledge Acknowledgment','2019-05-05 12:42:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(442,NULL,9,'Subject for Tell a Friend','2019-07-31 15:28:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(443,NULL,9,'Subject for Tell a Friend','2019-06-08 02:05:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(444,NULL,9,'Subject for Tell a Friend','2019-06-23 19:21:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(445,NULL,10,'Subject for Pledge Acknowledgment','2018-08-26 16:55:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(446,NULL,10,'Subject for Pledge Acknowledgment','2018-12-09 09:39:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(447,NULL,10,'Subject for Pledge Acknowledgment','2018-12-09 20:00:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(448,NULL,10,'Subject for Pledge Acknowledgment','2018-10-11 09:46:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(449,NULL,10,'Subject for Pledge Acknowledgment','2019-06-14 12:01:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(450,NULL,9,'Subject for Tell a Friend','2019-02-09 11:40:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(464,1,7,'General','2019-08-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(465,2,7,'Student','2019-08-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(466,3,7,'General','2019-08-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(467,4,7,'Student','2019-08-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(468,5,7,'General','2017-07-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(469,6,7,'Student','2019-08-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(470,7,7,'General','2019-08-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(471,8,7,'Student','2019-08-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(472,9,7,'General','2019-08-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(473,10,7,'Student','2018-08-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(474,11,7,'Lifetime','2019-08-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(475,12,7,'Student','2019-08-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(476,13,7,'General','2019-08-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(477,14,7,'Student','2019-08-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(478,15,7,'General','2017-04-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(479,16,7,'Student','2019-07-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(480,17,7,'General','2019-07-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(481,18,7,'Student','2019-07-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(482,19,7,'General','2019-07-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(483,20,7,'Student','2018-07-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(484,21,7,'General','2019-07-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(485,22,7,'Lifetime','2019-07-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(486,23,7,'General','2019-07-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(487,24,7,'Student','2019-07-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(488,25,7,'General','2017-02-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(489,26,7,'Student','2019-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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(490,27,7,'General','2019-07-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(491,28,7,'Student','2019-07-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(492,29,7,'General','2019-07-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(493,30,7,'Student','2018-07-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(494,14,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(495,15,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(496,16,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(497,17,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(498,18,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(499,19,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(500,20,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(501,21,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(502,22,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(503,23,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(504,24,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(505,25,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(506,26,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(507,27,6,'$ 100.00 - General Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(508,28,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(509,29,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(510,30,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(511,31,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(512,32,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(513,33,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(514,34,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(515,35,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(516,36,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(517,37,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(518,38,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(519,39,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(520,40,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(521,41,6,'$ 50.00 - Student Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(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,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(575,45,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(576,46,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(577,47,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(578,48,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(579,49,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(580,50,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(581,51,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(582,52,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(583,53,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(584,54,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(585,55,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(586,56,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(587,57,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(588,58,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(589,59,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(590,60,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(591,61,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(592,62,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(593,63,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(594,64,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(595,65,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(596,66,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(597,67,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(598,68,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(600,70,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(602,72,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(603,73,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(604,74,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(605,75,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(606,76,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(607,77,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(608,78,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(609,79,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(611,81,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(612,82,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(614,84,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(615,85,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(616,86,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(618,88,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(619,89,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(620,90,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31'),(624,94,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-08-16 09:31:31',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-08-15 21:31:31','2019-08-15 21:31:31');
+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,10,'Subject for Pledge Acknowledgment','2019-08-25 00:56:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(2,NULL,10,'Subject for Pledge Acknowledgment','2019-02-21 20:07:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(3,NULL,9,'Subject for Tell a Friend','2019-09-10 00:53:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(4,NULL,10,'Subject for Pledge Acknowledgment','2019-01-17 03:10:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(5,NULL,9,'Subject for Tell a Friend','2019-01-04 09:05:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(6,NULL,10,'Subject for Pledge Acknowledgment','2019-07-28 08:38:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(7,NULL,10,'Subject for Pledge Acknowledgment','2019-01-02 17:17:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(8,NULL,10,'Subject for Pledge Acknowledgment','2019-06-09 15:10:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(9,NULL,9,'Subject for Tell a Friend','2019-03-31 21:28:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(10,NULL,9,'Subject for Tell a Friend','2019-05-30 20:20:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(11,NULL,9,'Subject for Tell a Friend','2019-07-03 10:06:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(12,NULL,10,'Subject for Pledge Acknowledgment','2019-04-25 02:31:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(13,NULL,9,'Subject for Tell a Friend','2019-07-27 07:22:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(14,NULL,10,'Subject for Pledge Acknowledgment','2019-04-26 20:34:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(15,NULL,9,'Subject for Tell a Friend','2018-12-16 13:39:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(16,NULL,10,'Subject for Pledge Acknowledgment','2019-05-15 12:48:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(17,NULL,9,'Subject for Tell a Friend','2019-05-05 09:53:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(18,NULL,10,'Subject for Pledge Acknowledgment','2019-09-16 07:45:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(19,NULL,10,'Subject for Pledge Acknowledgment','2018-11-25 04:25:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(20,NULL,9,'Subject for Tell a Friend','2019-08-02 09:13:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(21,NULL,9,'Subject for Tell a Friend','2019-02-01 17:03:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(22,NULL,10,'Subject for Pledge Acknowledgment','2018-09-21 13:46:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(23,NULL,9,'Subject for Tell a Friend','2019-04-13 11:22:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(24,NULL,9,'Subject for Tell a Friend','2018-09-25 17:52:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(25,NULL,9,'Subject for Tell a Friend','2019-06-15 15:41:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(26,NULL,9,'Subject for Tell a Friend','2019-09-19 15:55:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(27,NULL,9,'Subject for Tell a Friend','2019-04-08 14:36:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(28,NULL,9,'Subject for Tell a Friend','2019-08-10 06:13:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(29,NULL,9,'Subject for Tell a Friend','2018-11-21 10:45:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(30,NULL,9,'Subject for Tell a Friend','2018-10-16 01:52:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(31,NULL,10,'Subject for Pledge Acknowledgment','2019-06-23 00:34:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(32,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 07:39:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(33,NULL,9,'Subject for Tell a Friend','2019-04-02 22:15:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(34,NULL,10,'Subject for Pledge Acknowledgment','2019-01-21 19:55:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(35,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 01:23:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(36,NULL,9,'Subject for Tell a Friend','2019-03-20 12:02:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(37,NULL,9,'Subject for Tell a Friend','2018-11-07 05:43:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(38,NULL,9,'Subject for Tell a Friend','2019-09-11 17:29:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(39,NULL,9,'Subject for Tell a Friend','2019-07-28 04:10:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(40,NULL,10,'Subject for Pledge Acknowledgment','2019-04-18 01:35:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(41,NULL,10,'Subject for Pledge Acknowledgment','2018-12-26 19:24:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(42,NULL,10,'Subject for Pledge Acknowledgment','2018-12-07 20:48:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(43,NULL,9,'Subject for Tell a Friend','2019-08-14 15:34:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:28','2019-09-20 19:57:28'),(44,NULL,9,'Subject for Tell a Friend','2018-12-23 18:17:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(45,NULL,9,'Subject for Tell a Friend','2019-02-16 04:04:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(46,NULL,9,'Subject for Tell a Friend','2019-03-15 21:16:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(47,NULL,10,'Subject for Pledge Acknowledgment','2019-03-06 20:31:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(48,NULL,10,'Subject for Pledge Acknowledgment','2019-05-31 21:43:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(49,NULL,10,'Subject for Pledge Acknowledgment','2018-12-02 21:32:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(50,NULL,9,'Subject for Tell a Friend','2018-10-27 15:38:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(51,NULL,10,'Subject for Pledge Acknowledgment','2019-04-04 16:19:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(52,NULL,9,'Subject for Tell a Friend','2019-06-07 03:57:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(53,NULL,9,'Subject for Tell a Friend','2019-06-27 00:48:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(54,NULL,10,'Subject for Pledge Acknowledgment','2019-05-23 10:35:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(55,NULL,10,'Subject for Pledge Acknowledgment','2018-11-04 02:36:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(56,NULL,9,'Subject for Tell a Friend','2018-11-23 07:18:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(57,NULL,10,'Subject for Pledge Acknowledgment','2019-08-22 07:04:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(58,NULL,10,'Subject for Pledge Acknowledgment','2019-06-29 09:28:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(59,NULL,10,'Subject for Pledge Acknowledgment','2019-04-08 09:53:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(60,NULL,9,'Subject for Tell a Friend','2019-06-13 17:58:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(61,NULL,10,'Subject for Pledge Acknowledgment','2019-03-26 13:53:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(62,NULL,9,'Subject for Tell a Friend','2019-08-18 07:37:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(63,NULL,9,'Subject for Tell a Friend','2018-12-26 23:43:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(64,NULL,9,'Subject for Tell a Friend','2019-09-10 05:55:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(65,NULL,9,'Subject for Tell a Friend','2018-11-13 21:58:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(66,NULL,9,'Subject for Tell a Friend','2018-10-30 18:55:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(67,NULL,10,'Subject for Pledge Acknowledgment','2019-04-10 17:04:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(68,NULL,10,'Subject for Pledge Acknowledgment','2019-09-17 06:14:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(69,NULL,9,'Subject for Tell a Friend','2019-09-05 18:53:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(70,NULL,9,'Subject for Tell a Friend','2019-02-19 06:10:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(71,NULL,10,'Subject for Pledge Acknowledgment','2019-03-06 06:15:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(72,NULL,10,'Subject for Pledge Acknowledgment','2019-05-27 16:39:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(73,NULL,9,'Subject for Tell a Friend','2018-10-30 23:27:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(74,NULL,10,'Subject for Pledge Acknowledgment','2018-12-21 10:17:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(75,NULL,10,'Subject for Pledge Acknowledgment','2018-10-08 18:34:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(76,NULL,10,'Subject for Pledge Acknowledgment','2019-01-17 14:37:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(77,NULL,10,'Subject for Pledge Acknowledgment','2018-11-19 07:25:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(78,NULL,10,'Subject for Pledge Acknowledgment','2019-06-17 12:56:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(79,NULL,9,'Subject for Tell a Friend','2019-03-08 02:54:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(80,NULL,10,'Subject for Pledge Acknowledgment','2019-07-25 00:15:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(81,NULL,9,'Subject for Tell a Friend','2019-02-13 12:23:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(82,NULL,10,'Subject for Pledge Acknowledgment','2019-03-01 22:51:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(83,NULL,9,'Subject for Tell a Friend','2019-06-11 22:03:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(84,NULL,9,'Subject for Tell a Friend','2019-04-05 21:51:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(85,NULL,10,'Subject for Pledge Acknowledgment','2019-03-23 14:42:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(86,NULL,9,'Subject for Tell a Friend','2019-05-23 02:03:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(87,NULL,10,'Subject for Pledge Acknowledgment','2019-08-08 19:00:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(88,NULL,10,'Subject for Pledge Acknowledgment','2018-12-23 10:10:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(89,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 03:28:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(90,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 21:35:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(91,NULL,10,'Subject for Pledge Acknowledgment','2018-09-24 15:18:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(92,NULL,9,'Subject for Tell a Friend','2018-12-26 14:33:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(93,NULL,9,'Subject for Tell a Friend','2018-11-21 23:37:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(94,NULL,10,'Subject for Pledge Acknowledgment','2018-11-06 17:04:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(95,NULL,10,'Subject for Pledge Acknowledgment','2018-10-08 22:18:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(96,NULL,9,'Subject for Tell a Friend','2019-04-02 22:16:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(97,NULL,9,'Subject for Tell a Friend','2018-10-25 11:11:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(98,NULL,9,'Subject for Tell a Friend','2019-06-17 18:46:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(99,NULL,9,'Subject for Tell a Friend','2019-08-06 10:02:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(100,NULL,9,'Subject for Tell a Friend','2019-04-26 21:27:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(101,NULL,10,'Subject for Pledge Acknowledgment','2019-01-25 02:34:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(102,NULL,9,'Subject for Tell a Friend','2019-04-02 19:03:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(103,NULL,10,'Subject for Pledge Acknowledgment','2019-01-05 19:47:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(104,NULL,10,'Subject for Pledge Acknowledgment','2018-10-30 11:45:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(105,NULL,9,'Subject for Tell a Friend','2019-08-25 10:25:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(106,NULL,9,'Subject for Tell a Friend','2019-02-09 01:54:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(107,NULL,9,'Subject for Tell a Friend','2019-08-01 15:54:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(108,NULL,10,'Subject for Pledge Acknowledgment','2019-03-22 22:33:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(109,NULL,10,'Subject for Pledge Acknowledgment','2019-03-28 09:59:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(110,NULL,9,'Subject for Tell a Friend','2018-12-15 04:01:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(111,NULL,9,'Subject for Tell a Friend','2019-08-16 21:37:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(112,NULL,10,'Subject for Pledge Acknowledgment','2018-11-30 19:37:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(113,NULL,9,'Subject for Tell a Friend','2018-12-04 12:27:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(114,NULL,10,'Subject for Pledge Acknowledgment','2019-04-03 16:48:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(115,NULL,9,'Subject for Tell a Friend','2018-09-27 18:14:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(116,NULL,10,'Subject for Pledge Acknowledgment','2019-08-27 20:34:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(117,NULL,10,'Subject for Pledge Acknowledgment','2019-09-04 19:36:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(118,NULL,9,'Subject for Tell a Friend','2019-02-09 21:12:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(119,NULL,9,'Subject for Tell a Friend','2019-09-12 12:04:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(120,NULL,9,'Subject for Tell a Friend','2018-09-29 21:04:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(121,NULL,9,'Subject for Tell a Friend','2019-01-10 06:52:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(122,NULL,9,'Subject for Tell a Friend','2019-04-09 14:09:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(123,NULL,10,'Subject for Pledge Acknowledgment','2019-06-16 22:07:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(124,NULL,10,'Subject for Pledge Acknowledgment','2019-02-27 02:12:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(125,NULL,9,'Subject for Tell a Friend','2019-04-19 17:29:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(126,NULL,9,'Subject for Tell a Friend','2019-01-30 04:03:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(127,NULL,9,'Subject for Tell a Friend','2019-06-04 00:56:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(128,NULL,9,'Subject for Tell a Friend','2019-09-14 00:12:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(129,NULL,10,'Subject for Pledge Acknowledgment','2019-07-24 13:15:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(130,NULL,9,'Subject for Tell a Friend','2019-09-16 23:56:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(131,NULL,10,'Subject for Pledge Acknowledgment','2019-04-04 16:37:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(132,NULL,9,'Subject for Tell a Friend','2018-12-30 00:43:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(133,NULL,10,'Subject for Pledge Acknowledgment','2018-10-27 08:09:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(134,NULL,10,'Subject for Pledge Acknowledgment','2019-08-24 10:41:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(135,NULL,10,'Subject for Pledge Acknowledgment','2019-06-05 12:45:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(136,NULL,9,'Subject for Tell a Friend','2019-04-04 11:26:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(137,NULL,9,'Subject for Tell a Friend','2019-04-25 04:18:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(138,NULL,9,'Subject for Tell a Friend','2019-09-11 20:08:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(139,NULL,10,'Subject for Pledge Acknowledgment','2019-08-02 04:44:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(140,NULL,9,'Subject for Tell a Friend','2018-11-17 00:11:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(141,NULL,10,'Subject for Pledge Acknowledgment','2019-07-13 13:47:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(142,NULL,9,'Subject for Tell a Friend','2019-08-17 05:31:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(143,NULL,9,'Subject for Tell a Friend','2019-06-16 14:55:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(144,NULL,9,'Subject for Tell a Friend','2019-08-05 05:01:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(145,NULL,10,'Subject for Pledge Acknowledgment','2018-11-13 16:29:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(146,NULL,9,'Subject for Tell a Friend','2019-07-10 15:35:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(147,NULL,9,'Subject for Tell a Friend','2019-08-25 05:51:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(148,NULL,10,'Subject for Pledge Acknowledgment','2019-01-30 19:09:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(149,NULL,10,'Subject for Pledge Acknowledgment','2019-06-18 12:39:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(150,NULL,9,'Subject for Tell a Friend','2019-02-23 20:40:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(151,NULL,9,'Subject for Tell a Friend','2019-01-05 11:52:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(152,NULL,10,'Subject for Pledge Acknowledgment','2019-08-30 04:22:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(153,NULL,9,'Subject for Tell a Friend','2019-03-28 13:36:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(154,NULL,9,'Subject for Tell a Friend','2019-01-28 12:54:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(155,NULL,10,'Subject for Pledge Acknowledgment','2019-07-03 01:26:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(156,NULL,9,'Subject for Tell a Friend','2019-08-12 20:20:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(157,NULL,9,'Subject for Tell a Friend','2019-02-05 14:02:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(158,NULL,9,'Subject for Tell a Friend','2019-02-22 20:36:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(159,NULL,10,'Subject for Pledge Acknowledgment','2019-06-13 15:34:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(160,NULL,9,'Subject for Tell a Friend','2019-02-18 22:41:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(161,NULL,10,'Subject for Pledge Acknowledgment','2018-12-01 21:00:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(162,NULL,9,'Subject for Tell a Friend','2019-03-05 02:50:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(163,NULL,10,'Subject for Pledge Acknowledgment','2019-07-02 02:57:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(164,NULL,9,'Subject for Tell a Friend','2018-09-29 21:00:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(165,NULL,9,'Subject for Tell a Friend','2019-06-04 03:13:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(166,NULL,10,'Subject for Pledge Acknowledgment','2018-10-07 13:39:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(167,NULL,10,'Subject for Pledge Acknowledgment','2019-02-06 09:54:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(168,NULL,10,'Subject for Pledge Acknowledgment','2019-03-19 13:08:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(169,NULL,9,'Subject for Tell a Friend','2019-08-11 10:18:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(170,NULL,9,'Subject for Tell a Friend','2019-06-11 12:50:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(171,NULL,10,'Subject for Pledge Acknowledgment','2019-09-12 20:31:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(172,NULL,9,'Subject for Tell a Friend','2019-05-05 07:08:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(173,NULL,10,'Subject for Pledge Acknowledgment','2019-09-16 04:07:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(174,NULL,9,'Subject for Tell a Friend','2019-07-02 05:16:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(175,NULL,9,'Subject for Tell a Friend','2019-04-27 14:10:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(176,NULL,10,'Subject for Pledge Acknowledgment','2019-03-18 03:42:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(177,NULL,10,'Subject for Pledge Acknowledgment','2019-03-06 20:17:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(178,NULL,10,'Subject for Pledge Acknowledgment','2019-03-14 01:33:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(179,NULL,10,'Subject for Pledge Acknowledgment','2018-12-06 12:18:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(180,NULL,10,'Subject for Pledge Acknowledgment','2019-05-13 19:42:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(181,NULL,9,'Subject for Tell a Friend','2018-11-19 16:32:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(182,NULL,10,'Subject for Pledge Acknowledgment','2018-12-29 23:45:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(183,NULL,9,'Subject for Tell a Friend','2019-05-04 17:49:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(184,NULL,9,'Subject for Tell a Friend','2019-05-15 20:15:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(185,NULL,9,'Subject for Tell a Friend','2019-08-25 04:47:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(186,NULL,9,'Subject for Tell a Friend','2019-01-28 18:16:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(187,NULL,10,'Subject for Pledge Acknowledgment','2019-03-04 02:30:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(188,NULL,10,'Subject for Pledge Acknowledgment','2018-10-27 14:38:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(189,NULL,10,'Subject for Pledge Acknowledgment','2018-11-02 03:30:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(190,NULL,10,'Subject for Pledge Acknowledgment','2019-05-22 06:12:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(191,NULL,10,'Subject for Pledge Acknowledgment','2018-11-04 21:26:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(192,NULL,9,'Subject for Tell a Friend','2018-12-17 01:09:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(193,NULL,9,'Subject for Tell a Friend','2019-01-11 21:02:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(194,NULL,9,'Subject for Tell a Friend','2018-12-29 21:59:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(195,NULL,10,'Subject for Pledge Acknowledgment','2019-09-05 00:37:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(196,NULL,9,'Subject for Tell a Friend','2018-10-25 06:59:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(197,NULL,9,'Subject for Tell a Friend','2019-02-11 04:47:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(198,NULL,9,'Subject for Tell a Friend','2019-09-07 16:58:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(199,NULL,10,'Subject for Pledge Acknowledgment','2019-02-27 05:35:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(200,NULL,10,'Subject for Pledge Acknowledgment','2018-10-26 15:21:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(201,NULL,9,'Subject for Tell a Friend','2018-11-04 10:23:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(202,NULL,9,'Subject for Tell a Friend','2019-02-19 20:43:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(203,NULL,9,'Subject for Tell a Friend','2019-03-07 21:33:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(204,NULL,9,'Subject for Tell a Friend','2018-11-01 15:57:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(205,NULL,10,'Subject for Pledge Acknowledgment','2019-07-11 05:38:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(206,NULL,9,'Subject for Tell a Friend','2018-11-01 04:56:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(207,NULL,9,'Subject for Tell a Friend','2019-04-01 16:04:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(208,NULL,10,'Subject for Pledge Acknowledgment','2019-03-31 05:58:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(209,NULL,10,'Subject for Pledge Acknowledgment','2019-09-06 16:19:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(210,NULL,10,'Subject for Pledge Acknowledgment','2018-09-21 07:26:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(211,NULL,9,'Subject for Tell a Friend','2018-12-24 10:05:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(212,NULL,10,'Subject for Pledge Acknowledgment','2019-04-20 00:29:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(213,NULL,10,'Subject for Pledge Acknowledgment','2019-05-08 15:26:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(214,NULL,9,'Subject for Tell a Friend','2018-10-20 17:34:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(215,NULL,9,'Subject for Tell a Friend','2018-12-18 11:59:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(216,NULL,9,'Subject for Tell a Friend','2018-09-25 03:31:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(217,NULL,10,'Subject for Pledge Acknowledgment','2019-06-04 00:44:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(218,NULL,9,'Subject for Tell a Friend','2019-04-18 11:28:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(219,NULL,10,'Subject for Pledge Acknowledgment','2019-04-28 09:18:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(220,NULL,10,'Subject for Pledge Acknowledgment','2018-10-14 08:37:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(221,NULL,10,'Subject for Pledge Acknowledgment','2019-03-06 16:45:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(222,NULL,9,'Subject for Tell a Friend','2019-05-30 06:37:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(223,NULL,9,'Subject for Tell a Friend','2019-08-21 09:38:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(224,NULL,9,'Subject for Tell a Friend','2019-08-19 00:04:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(225,NULL,9,'Subject for Tell a Friend','2019-07-22 13:59:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(226,NULL,9,'Subject for Tell a Friend','2019-04-09 17:47:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(227,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 00:12:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(228,NULL,10,'Subject for Pledge Acknowledgment','2019-05-15 23:35:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(229,NULL,9,'Subject for Tell a Friend','2019-04-01 15:28:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(230,NULL,9,'Subject for Tell a Friend','2019-02-23 00:52:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(231,NULL,10,'Subject for Pledge Acknowledgment','2019-08-09 07:03:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(232,NULL,10,'Subject for Pledge Acknowledgment','2019-03-14 09:25:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(233,NULL,9,'Subject for Tell a Friend','2019-02-24 08:31:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(234,NULL,10,'Subject for Pledge Acknowledgment','2019-04-25 06:15:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(235,NULL,9,'Subject for Tell a Friend','2019-03-23 13:05:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(236,NULL,10,'Subject for Pledge Acknowledgment','2018-10-28 09:37:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(237,NULL,9,'Subject for Tell a Friend','2019-05-09 07:48:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(238,NULL,9,'Subject for Tell a Friend','2019-08-04 22:23:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(239,NULL,10,'Subject for Pledge Acknowledgment','2018-12-29 12:39:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(240,NULL,9,'Subject for Tell a Friend','2019-08-27 07:47:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(241,NULL,10,'Subject for Pledge Acknowledgment','2018-10-13 07:18:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(242,NULL,10,'Subject for Pledge Acknowledgment','2019-02-14 10:14:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(243,NULL,9,'Subject for Tell a Friend','2019-02-25 01:07:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(244,NULL,9,'Subject for Tell a Friend','2019-01-02 05:52:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(245,NULL,9,'Subject for Tell a Friend','2018-11-27 10:38:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(246,NULL,9,'Subject for Tell a Friend','2019-01-11 15:21:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(247,NULL,9,'Subject for Tell a Friend','2018-10-19 23:05:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(248,NULL,10,'Subject for Pledge Acknowledgment','2019-01-20 08:28:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(249,NULL,9,'Subject for Tell a Friend','2019-02-03 05:02:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(250,NULL,9,'Subject for Tell a Friend','2018-09-27 01:15:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(251,NULL,9,'Subject for Tell a Friend','2018-10-15 09:54:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(252,NULL,9,'Subject for Tell a Friend','2019-07-08 10:01:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(253,NULL,10,'Subject for Pledge Acknowledgment','2019-09-15 13:44:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(254,NULL,9,'Subject for Tell a Friend','2019-04-11 18:02:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(255,NULL,9,'Subject for Tell a Friend','2019-07-26 20:24:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(256,NULL,9,'Subject for Tell a Friend','2019-08-23 13:35:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(257,NULL,10,'Subject for Pledge Acknowledgment','2019-03-14 03:43:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(258,NULL,10,'Subject for Pledge Acknowledgment','2019-07-17 11:05:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(259,NULL,9,'Subject for Tell a Friend','2019-03-09 01:20:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(260,NULL,9,'Subject for Tell a Friend','2019-06-16 02:53:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(261,NULL,9,'Subject for Tell a Friend','2018-12-14 00:54:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(262,NULL,10,'Subject for Pledge Acknowledgment','2019-09-19 09:00:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(263,NULL,10,'Subject for Pledge Acknowledgment','2019-02-28 16:17:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(264,NULL,10,'Subject for Pledge Acknowledgment','2019-03-11 02:14:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(265,NULL,10,'Subject for Pledge Acknowledgment','2019-04-15 06:11:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(266,NULL,9,'Subject for Tell a Friend','2019-09-08 09:49:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(267,NULL,10,'Subject for Pledge Acknowledgment','2019-08-11 13:35:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(268,NULL,10,'Subject for Pledge Acknowledgment','2019-08-07 11:17:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(269,NULL,9,'Subject for Tell a Friend','2018-10-03 21:45:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(270,NULL,10,'Subject for Pledge Acknowledgment','2019-02-03 07:13:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(271,NULL,10,'Subject for Pledge Acknowledgment','2018-10-22 17:13:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(272,NULL,10,'Subject for Pledge Acknowledgment','2019-08-31 00:49:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(273,NULL,10,'Subject for Pledge Acknowledgment','2019-07-13 18:51:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(274,NULL,9,'Subject for Tell a Friend','2019-05-07 01:37:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(275,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 00:48:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(276,NULL,9,'Subject for Tell a Friend','2019-07-03 10:23:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(277,NULL,10,'Subject for Pledge Acknowledgment','2019-04-06 21:56:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(278,NULL,10,'Subject for Pledge Acknowledgment','2018-10-14 11:10:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(279,NULL,10,'Subject for Pledge Acknowledgment','2019-09-15 13:58:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(280,NULL,10,'Subject for Pledge Acknowledgment','2018-11-20 12:17:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(281,NULL,9,'Subject for Tell a Friend','2019-01-07 10:29:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(282,NULL,9,'Subject for Tell a Friend','2018-12-23 09:40:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(283,NULL,10,'Subject for Pledge Acknowledgment','2019-01-22 07:11:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(284,NULL,9,'Subject for Tell a Friend','2019-03-12 06:19:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(285,NULL,10,'Subject for Pledge Acknowledgment','2019-01-22 06:31:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(286,NULL,10,'Subject for Pledge Acknowledgment','2019-06-10 18:34:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(287,NULL,9,'Subject for Tell a Friend','2019-03-22 02:12:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(288,NULL,9,'Subject for Tell a Friend','2018-11-18 14:29:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(289,NULL,10,'Subject for Pledge Acknowledgment','2019-04-27 21:11:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(290,NULL,10,'Subject for Pledge Acknowledgment','2019-08-05 09:49:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(291,NULL,10,'Subject for Pledge Acknowledgment','2019-06-05 07:24:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(292,NULL,10,'Subject for Pledge Acknowledgment','2019-04-17 11:22:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(293,NULL,9,'Subject for Tell a Friend','2019-02-16 03:35:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(294,NULL,10,'Subject for Pledge Acknowledgment','2019-07-28 23:09:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(295,NULL,10,'Subject for Pledge Acknowledgment','2019-06-09 11:31:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(296,NULL,9,'Subject for Tell a Friend','2019-08-05 20:28:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(297,NULL,10,'Subject for Pledge Acknowledgment','2019-08-15 23:35:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(298,NULL,9,'Subject for Tell a Friend','2018-11-23 08:07:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(299,NULL,9,'Subject for Tell a Friend','2019-01-12 09:59:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(300,NULL,10,'Subject for Pledge Acknowledgment','2019-02-22 09:17:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(301,NULL,9,'Subject for Tell a Friend','2019-01-24 19:59:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(302,NULL,9,'Subject for Tell a Friend','2019-04-02 13:38:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(303,NULL,9,'Subject for Tell a Friend','2019-03-06 18:14:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(304,NULL,10,'Subject for Pledge Acknowledgment','2019-08-27 23:45:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(305,NULL,9,'Subject for Tell a Friend','2019-03-19 10:09:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(306,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 13:31:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(307,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 15:38:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(308,NULL,9,'Subject for Tell a Friend','2018-12-17 23:00:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(309,NULL,10,'Subject for Pledge Acknowledgment','2019-04-11 23:13:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(310,NULL,9,'Subject for Tell a Friend','2019-04-06 20:32:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(311,NULL,10,'Subject for Pledge Acknowledgment','2019-01-01 02:59:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(312,NULL,9,'Subject for Tell a Friend','2019-01-30 19:25:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(313,NULL,9,'Subject for Tell a Friend','2019-01-26 06:52:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(314,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 22:58:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(315,NULL,10,'Subject for Pledge Acknowledgment','2019-01-08 22:59:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(316,NULL,9,'Subject for Tell a Friend','2018-12-26 11:43:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(317,NULL,9,'Subject for Tell a Friend','2019-07-21 12:59:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(318,NULL,10,'Subject for Pledge Acknowledgment','2019-09-05 03:49:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(319,NULL,9,'Subject for Tell a Friend','2019-08-14 02:40:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(320,NULL,10,'Subject for Pledge Acknowledgment','2019-01-20 07:55:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(321,NULL,9,'Subject for Tell a Friend','2019-04-20 06:17:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(322,NULL,9,'Subject for Tell a Friend','2018-11-23 23:13:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(323,NULL,9,'Subject for Tell a Friend','2019-07-22 08:19:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(324,NULL,10,'Subject for Pledge Acknowledgment','2018-12-10 11:08:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(325,NULL,10,'Subject for Pledge Acknowledgment','2019-04-26 11:16:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(326,NULL,9,'Subject for Tell a Friend','2019-03-29 22:38:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(327,NULL,10,'Subject for Pledge Acknowledgment','2019-08-12 03:11:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(328,NULL,9,'Subject for Tell a Friend','2018-12-20 08:35:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(329,NULL,9,'Subject for Tell a Friend','2019-06-12 12:14:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(330,NULL,9,'Subject for Tell a Friend','2019-06-18 07:43:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(331,NULL,10,'Subject for Pledge Acknowledgment','2019-05-10 06:15:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(332,NULL,9,'Subject for Tell a Friend','2019-08-04 05:22:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(333,NULL,9,'Subject for Tell a Friend','2019-01-08 18:12:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(334,NULL,9,'Subject for Tell a Friend','2018-10-14 13:58:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(335,NULL,9,'Subject for Tell a Friend','2019-08-14 15:56:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(336,NULL,9,'Subject for Tell a Friend','2018-10-20 12:14:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(337,NULL,9,'Subject for Tell a Friend','2018-12-21 05:26:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(338,NULL,9,'Subject for Tell a Friend','2019-03-14 08:19:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(339,NULL,9,'Subject for Tell a Friend','2019-05-29 14:56:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(340,NULL,10,'Subject for Pledge Acknowledgment','2018-12-19 13:14:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(341,NULL,9,'Subject for Tell a Friend','2019-09-05 02:21:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(342,NULL,9,'Subject for Tell a Friend','2019-06-03 10:52:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(343,NULL,9,'Subject for Tell a Friend','2019-08-02 03:26:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(344,NULL,10,'Subject for Pledge Acknowledgment','2019-05-10 20:45:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(345,NULL,9,'Subject for Tell a Friend','2019-06-09 04:33:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(346,NULL,9,'Subject for Tell a Friend','2018-10-20 14:38:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(347,NULL,9,'Subject for Tell a Friend','2018-11-12 14:51:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(348,NULL,10,'Subject for Pledge Acknowledgment','2019-08-11 15:36:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(349,NULL,9,'Subject for Tell a Friend','2019-06-15 21:52:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(350,NULL,10,'Subject for Pledge Acknowledgment','2018-10-20 13:04:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(351,NULL,9,'Subject for Tell a Friend','2019-06-05 16:23:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(352,NULL,9,'Subject for Tell a Friend','2019-04-15 16:14:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(353,NULL,10,'Subject for Pledge Acknowledgment','2018-11-22 11:00:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(354,NULL,10,'Subject for Pledge Acknowledgment','2019-07-29 04:23:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(355,NULL,9,'Subject for Tell a Friend','2019-09-14 10:30:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(356,NULL,10,'Subject for Pledge Acknowledgment','2019-07-09 19:07:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(357,NULL,10,'Subject for Pledge Acknowledgment','2019-03-20 03:13:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(358,NULL,10,'Subject for Pledge Acknowledgment','2019-06-28 18:35:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(359,NULL,9,'Subject for Tell a Friend','2019-04-13 01:11:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(360,NULL,10,'Subject for Pledge Acknowledgment','2018-12-23 17:02:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(361,NULL,10,'Subject for Pledge Acknowledgment','2019-07-14 05:13:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(362,NULL,10,'Subject for Pledge Acknowledgment','2018-12-08 14:47:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(363,NULL,9,'Subject for Tell a Friend','2019-02-17 00:47:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(364,NULL,9,'Subject for Tell a Friend','2019-08-21 07:41:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(365,NULL,10,'Subject for Pledge Acknowledgment','2019-08-15 07:35:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(366,NULL,10,'Subject for Pledge Acknowledgment','2019-07-30 19:31:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(367,NULL,10,'Subject for Pledge Acknowledgment','2019-06-25 09:28:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(368,NULL,9,'Subject for Tell a Friend','2019-02-06 23:07:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(369,NULL,9,'Subject for Tell a Friend','2018-11-08 01:54:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(370,NULL,9,'Subject for Tell a Friend','2019-03-11 00:06:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(371,NULL,10,'Subject for Pledge Acknowledgment','2019-01-01 05:59:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(372,NULL,10,'Subject for Pledge Acknowledgment','2019-02-16 19:58:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(373,NULL,9,'Subject for Tell a Friend','2018-10-02 16:48:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(374,NULL,10,'Subject for Pledge Acknowledgment','2019-03-28 10:50:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(375,NULL,10,'Subject for Pledge Acknowledgment','2019-04-27 17:46:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(376,NULL,9,'Subject for Tell a Friend','2018-12-24 21:35:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(377,NULL,10,'Subject for Pledge Acknowledgment','2019-08-06 15:40:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(378,NULL,9,'Subject for Tell a Friend','2018-11-11 09:14:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(379,NULL,10,'Subject for Pledge Acknowledgment','2019-08-03 23:12:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(380,NULL,9,'Subject for Tell a Friend','2019-01-07 12:10:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(381,NULL,10,'Subject for Pledge Acknowledgment','2018-12-20 12:48:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(382,NULL,9,'Subject for Tell a Friend','2018-10-18 09:07:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(383,NULL,10,'Subject for Pledge Acknowledgment','2018-10-13 03:06:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(384,NULL,9,'Subject for Tell a Friend','2018-10-10 04:31:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(385,NULL,9,'Subject for Tell a Friend','2018-09-22 12:47:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(386,NULL,9,'Subject for Tell a Friend','2019-09-19 14:17:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(387,NULL,9,'Subject for Tell a Friend','2019-01-20 18:27:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(388,NULL,9,'Subject for Tell a Friend','2018-10-21 10:12:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(389,NULL,9,'Subject for Tell a Friend','2019-05-09 01:06:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(390,NULL,10,'Subject for Pledge Acknowledgment','2018-11-25 14:14:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(391,NULL,10,'Subject for Pledge Acknowledgment','2019-02-12 15:02:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(392,NULL,9,'Subject for Tell a Friend','2019-03-01 13:15:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(393,NULL,9,'Subject for Tell a Friend','2019-04-21 16:26:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(394,NULL,10,'Subject for Pledge Acknowledgment','2019-09-20 12:18:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(395,NULL,10,'Subject for Pledge Acknowledgment','2019-02-10 21:31:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(396,NULL,9,'Subject for Tell a Friend','2019-07-13 02:21:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(397,NULL,9,'Subject for Tell a Friend','2019-01-27 21:11:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(398,NULL,10,'Subject for Pledge Acknowledgment','2018-12-15 11:50:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(399,NULL,9,'Subject for Tell a Friend','2018-09-21 14:34:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(400,NULL,10,'Subject for Pledge Acknowledgment','2019-05-29 02:34:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(401,NULL,10,'Subject for Pledge Acknowledgment','2018-11-07 07:20:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(402,NULL,9,'Subject for Tell a Friend','2019-05-20 05:13:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(403,NULL,10,'Subject for Pledge Acknowledgment','2019-06-11 00:09:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(404,NULL,9,'Subject for Tell a Friend','2019-03-30 22:39:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(405,NULL,9,'Subject for Tell a Friend','2019-04-17 09:56:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(406,NULL,9,'Subject for Tell a Friend','2019-06-14 21:52:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(407,NULL,10,'Subject for Pledge Acknowledgment','2019-07-29 13:43:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(408,NULL,9,'Subject for Tell a Friend','2019-09-19 23:33:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(409,NULL,10,'Subject for Pledge Acknowledgment','2019-06-30 00:45:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(410,NULL,10,'Subject for Pledge Acknowledgment','2018-11-16 09:33:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(411,NULL,10,'Subject for Pledge Acknowledgment','2019-08-04 03:40:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(412,NULL,10,'Subject for Pledge Acknowledgment','2019-07-15 13:01:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(413,NULL,9,'Subject for Tell a Friend','2018-11-27 05:58:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(414,NULL,10,'Subject for Pledge Acknowledgment','2019-06-07 17:30:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(415,NULL,10,'Subject for Pledge Acknowledgment','2019-03-23 21:23:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(416,NULL,10,'Subject for Pledge Acknowledgment','2019-02-01 08:21:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(417,NULL,9,'Subject for Tell a Friend','2019-03-12 09:42:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(418,NULL,9,'Subject for Tell a Friend','2019-06-26 23:39:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(419,NULL,9,'Subject for Tell a Friend','2018-11-08 08:32:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(420,NULL,10,'Subject for Pledge Acknowledgment','2018-11-17 16:09:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(421,NULL,9,'Subject for Tell a Friend','2019-07-05 00:30:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(422,NULL,9,'Subject for Tell a Friend','2019-07-27 03:33:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(423,NULL,10,'Subject for Pledge Acknowledgment','2019-06-23 16:53:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(424,NULL,9,'Subject for Tell a Friend','2018-12-30 10:42:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(425,NULL,9,'Subject for Tell a Friend','2019-01-31 10:57:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(426,NULL,10,'Subject for Pledge Acknowledgment','2019-07-31 01:14:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(427,NULL,10,'Subject for Pledge Acknowledgment','2019-01-20 06:45:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(428,NULL,10,'Subject for Pledge Acknowledgment','2019-01-09 08:42:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(429,NULL,9,'Subject for Tell a Friend','2019-06-07 13:09:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(430,NULL,10,'Subject for Pledge Acknowledgment','2019-09-07 18:37:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(431,NULL,9,'Subject for Tell a Friend','2019-01-16 01:23:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(432,NULL,9,'Subject for Tell a Friend','2018-11-27 02:51:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(433,NULL,9,'Subject for Tell a Friend','2018-11-15 12:35:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(434,NULL,9,'Subject for Tell a Friend','2019-08-04 18:48:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(435,NULL,9,'Subject for Tell a Friend','2019-02-15 13:37:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(436,NULL,9,'Subject for Tell a Friend','2018-11-06 16:17:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(437,NULL,10,'Subject for Pledge Acknowledgment','2019-07-02 03:20:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(438,NULL,9,'Subject for Tell a Friend','2019-07-14 09:37:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(439,NULL,10,'Subject for Pledge Acknowledgment','2019-02-17 10:37:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(440,NULL,10,'Subject for Pledge Acknowledgment','2018-12-06 11:59:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(441,NULL,10,'Subject for Pledge Acknowledgment','2019-06-20 05:58:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(442,NULL,9,'Subject for Tell a Friend','2018-11-03 08:18:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(443,NULL,9,'Subject for Tell a Friend','2019-07-26 09:51:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(444,NULL,10,'Subject for Pledge Acknowledgment','2018-11-16 07:07:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(445,NULL,9,'Subject for Tell a Friend','2019-01-17 20:48:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(446,NULL,10,'Subject for Pledge Acknowledgment','2019-01-25 07:02:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(447,NULL,10,'Subject for Pledge Acknowledgment','2018-09-20 15:38:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(448,NULL,10,'Subject for Pledge Acknowledgment','2018-11-20 07:28:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(449,NULL,10,'Subject for Pledge Acknowledgment','2019-08-15 00:07:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(450,NULL,10,'Subject for Pledge Acknowledgment','2019-04-25 07:35:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(464,1,7,'General','2019-09-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(465,2,7,'Student','2019-09-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(466,3,7,'General','2019-09-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(467,4,7,'Student','2019-09-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(468,5,7,'General','2017-08-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(469,6,7,'Student','2019-09-15 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(470,7,7,'General','2019-09-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(471,8,7,'Student','2019-09-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(472,9,7,'General','2019-09-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(473,10,7,'General','2017-07-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(474,11,7,'Lifetime','2019-09-10 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(475,12,7,'Student','2019-09-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(476,13,7,'General','2019-09-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(477,14,7,'Student','2019-09-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(478,15,7,'General','2017-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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(479,16,7,'Student','2019-09-05 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(480,17,7,'General','2019-09-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(481,18,7,'Student','2019-09-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(482,19,7,'General','2019-09-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(483,20,7,'Student','2018-09-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(484,21,7,'General','2019-08-31 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(485,22,7,'Lifetime','2019-08-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(486,23,7,'General','2019-08-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(487,24,7,'Student','2019-08-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(488,25,7,'General','2017-03-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(489,26,7,'Student','2019-08-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(490,27,7,'General','2019-08-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(491,28,7,'Student','2019-08-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(492,29,7,'General','2019-08-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(493,30,7,'Student','2018-08-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(494,14,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(495,15,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(496,16,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(497,17,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(498,18,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(499,19,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(500,20,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(501,21,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(502,22,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(503,23,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(504,24,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(505,25,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(506,26,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(507,27,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(508,28,6,'$ 100.00 - General Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(509,29,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(510,30,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(511,31,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(512,32,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(513,33,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(514,34,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(515,35,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(516,36,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(517,37,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(518,38,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(519,39,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(520,40,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(521,41,6,'$ 50.00 - Student Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(523,43,6,'$ 1200.00 - Lifetime Membership: Offline signup','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(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,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(575,45,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(576,46,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(577,47,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(578,48,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(579,49,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(580,50,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(581,51,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(582,52,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(583,53,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(584,54,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(585,55,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(586,56,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(587,57,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(588,58,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(589,59,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(590,60,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(591,61,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(592,62,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(593,63,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(594,64,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(595,65,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(596,66,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(598,68,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(599,69,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(600,70,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(601,71,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(602,72,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(603,73,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(604,74,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(605,75,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(606,76,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(607,77,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(608,78,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(609,79,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(612,82,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(613,83,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(614,84,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(615,85,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(616,86,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(617,87,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(618,88,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(619,89,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(620,90,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(621,91,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(623,93,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29'),(624,94,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2019-09-20 12:57:29',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2019-09-20 19:57:29','2019-09-20 19:57:29');
 /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -97,7 +97,7 @@ 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 (239,159,1,3),(301,204,1,3),(84,55,2,3),(106,69,2,3),(387,263,2,3),(479,321,2,3),(679,451,2,2),(776,548,2,2),(375,255,3,3),(599,397,4,3),(680,452,4,2),(780,552,4,2),(7,4,6,3),(409,277,6,3),(681,453,6,2),(1,1,7,2),(2,2,7,2),(4,3,7,2),(6,4,7,2),(8,5,7,2),(9,6,7,2),(10,7,7,2),(12,8,7,2),(14,9,7,2),(15,10,7,2),(17,11,7,2),(18,12,7,2),(19,13,7,2),(20,14,7,2),(22,15,7,2),(23,16,7,2),(25,17,7,2),(27,18,7,2),(28,19,7,2),(30,20,7,2),(32,21,7,2),(33,22,7,2),(34,23,7,2),(36,24,7,2),(38,25,7,2),(40,26,7,2),(42,27,7,2),(43,28,7,2),(45,29,7,2),(46,30,7,2),(47,31,7,2),(48,32,7,2),(49,33,7,2),(50,34,7,2),(52,35,7,2),(54,36,7,2),(55,37,7,2),(57,38,7,2),(58,39,7,2),(60,40,7,2),(62,41,7,2),(63,42,7,2),(65,43,7,2),(66,44,7,2),(68,45,7,2),(70,46,7,2),(72,47,7,2),(74,48,7,2),(76,49,7,2),(77,50,7,2),(78,51,7,2),(79,52,7,2),(80,53,7,2),(82,54,7,2),(83,55,7,2),(85,56,7,2),(86,57,7,2),(88,58,7,2),(89,59,7,2),(91,60,7,2),(92,61,7,2),(93,62,7,2),(95,63,7,2),(97,64,7,2),(99,65,7,2),(100,66,7,2),(102,67,7,2),(103,68,7,2),(105,69,7,2),(107,70,7,2),(109,71,7,2),(110,72,7,2),(111,72,7,3),(112,73,7,2),(114,74,7,2),(115,75,7,2),(117,76,7,2),(118,77,7,2),(120,78,7,2),(121,79,7,2),(122,80,7,2),(123,81,7,2),(124,82,7,2),(126,83,7,2),(127,84,7,2),(129,85,7,2),(130,86,7,2),(131,87,7,2),(133,88,7,2),(135,89,7,2),(136,90,7,2),(138,91,7,2),(140,92,7,2),(141,93,7,2),(143,94,7,2),(145,95,7,2),(147,96,7,2),(148,97,7,2),(150,98,7,2),(152,99,7,2),(153,100,7,2),(155,101,7,2),(156,102,7,2),(157,103,7,2),(158,104,7,2),(160,105,7,2),(162,106,7,2),(164,107,7,2),(166,108,7,2),(168,109,7,2),(169,110,7,2),(171,111,7,2),(172,112,7,2),(173,113,7,2),(175,114,7,2),(176,115,7,2),(178,116,7,2),(179,117,7,2),(180,118,7,2),(181,119,7,2),(182,120,7,2),(183,121,7,2),(184,122,7,2),(186,123,7,2),(188,124,7,2),(189,125,7,2),(190,126,7,2),(191,127,7,2),(192,128,7,2),(193,129,7,2),(195,130,7,2),(197,131,7,2),(198,132,7,2),(199,133,7,2),(201,134,7,2),(202,135,7,2),(204,136,7,2),(205,137,7,2),(206,138,7,2),(208,139,7,2),(210,140,7,2),(212,141,7,2),(213,142,7,2),(215,143,7,2),(217,144,7,2),(219,145,7,2),(221,146,7,2),(222,147,7,2),(223,148,7,2),(225,149,7,2),(226,150,7,2),(340,231,7,3),(455,306,7,3),(697,469,7,2),(738,510,7,2),(762,534,7,2),(146,95,8,3),(682,454,8,2),(707,479,8,2),(743,515,8,2),(759,531,8,2),(220,145,9,3),(446,301,9,3),(585,387,9,3),(608,404,9,3),(203,135,10,3),(251,167,10,3),(489,326,10,3),(658,435,10,3),(766,538,10,2),(61,40,11,3),(11,7,12,3),(154,100,12,3),(312,211,12,3),(714,486,12,2),(732,504,12,2),(16,10,13,3),(786,558,13,2),(501,333,14,3),(558,369,14,3),(384,261,15,3),(438,296,15,3),(530,350,16,3),(619,411,16,3),(683,455,16,2),(701,473,16,2),(740,512,16,2),(418,283,18,3),(712,484,18,2),(731,503,18,2),(789,561,18,2),(216,143,19,3),(583,386,19,3),(684,456,19,2),(134,88,20,3),(757,529,20,2),(508,337,21,3),(324,219,22,3),(551,364,22,3),(167,108,23,3),(448,302,23,3),(775,547,23,2),(101,66,24,3),(24,16,25,3),(196,130,26,3),(269,181,26,3),(513,340,26,3),(526,348,26,3),(545,360,26,3),(718,490,26,2),(734,506,26,2),(782,554,26,2),(31,20,27,3),(228,151,27,2),(229,152,27,2),(231,153,27,2),(233,154,27,2),(234,155,27,2),(235,156,27,2),(236,157,27,2),(237,158,27,2),(238,159,27,2),(240,160,27,2),(242,161,27,2),(243,162,27,2),(244,163,27,2),(245,164,27,2),(246,165,27,2),(248,166,27,2),(250,167,27,2),(252,168,27,2),(254,169,27,2),(255,170,27,2),(256,171,27,2),(257,172,27,2),(259,173,27,2),(260,174,27,2),(262,175,27,2),(263,176,27,2),(264,177,27,2),(265,178,27,2),(266,179,27,2),(267,180,27,2),(268,181,27,2),(270,182,27,2),(272,183,27,2),(273,184,27,2),(275,185,27,2),(277,186,27,2),(278,187,27,2),(280,188,27,2),(281,189,27,2),(283,190,27,2),(284,191,27,2),(285,192,27,2),(286,193,27,2),(287,194,27,2),(288,195,27,2),(290,196,27,2),(291,197,27,2),(292,198,27,2),(293,199,27,2),(294,200,27,2),(296,201,27,2),(297,202,27,2),(299,203,27,2),(300,204,27,2),(302,205,27,2),(303,206,27,2),(305,207,27,2),(306,208,27,2),(307,209,27,2),(309,210,27,2),(311,211,27,2),(313,212,27,2),(315,213,27,2),(317,214,27,2),(318,215,27,2),(319,216,27,2),(321,217,27,2),(322,218,27,2),(323,219,27,2),(325,220,27,2),(327,221,27,2),(328,222,27,2),(329,223,27,2),(330,224,27,2),(331,225,27,2),(332,226,27,2),(333,227,27,2),(334,228,27,2),(336,229,27,2),(338,230,27,2),(339,231,27,2),(341,232,27,2),(343,233,27,2),(345,234,27,2),(347,235,27,2),(348,236,27,2),(349,237,27,2),(350,238,27,2),(351,239,27,2),(353,240,27,2),(355,241,27,2),(357,242,27,2),(358,243,27,2),(359,244,27,2),(361,245,27,2),(362,246,27,2),(363,247,27,2),(364,248,27,2),(365,248,27,3),(366,249,27,2),(367,250,27,2),(368,251,27,2),(370,252,27,2),(372,253,27,2),(373,254,27,2),(374,255,27,2),(376,256,27,2),(377,257,27,2),(378,258,27,2),(380,259,27,2),(381,260,27,2),(383,261,27,2),(385,262,27,2),(386,263,27,2),(388,264,27,2),(389,265,27,2),(391,266,27,2),(392,267,27,2),(394,268,27,2),(396,269,27,2),(397,270,27,2),(398,271,27,2),(400,272,27,2),(402,273,27,2),(403,274,27,2),(405,275,27,2),(406,276,27,2),(408,277,27,2),(410,278,27,2),(412,279,27,2),(413,280,27,2),(415,281,27,2),(416,282,27,2),(417,283,27,2),(419,284,27,2),(420,285,27,2),(421,286,27,2),(422,287,27,2),(423,288,27,2),(425,289,27,2),(427,290,27,2),(429,291,27,2),(431,292,27,2),(433,293,27,2),(434,294,27,2),(436,295,27,2),(437,296,27,2),(439,297,27,2),(441,298,27,2),(443,299,27,2),(444,300,27,2),(671,444,29,3),(96,63,30,3),(424,288,30,3),(793,565,30,2),(382,260,31,3),(778,550,31,2),(690,462,32,2),(691,463,32,2),(772,544,32,2),(687,459,34,2),(755,527,34,2),(468,314,35,3),(492,328,35,3),(174,113,36,3),(298,202,36,3),(352,239,36,3),(407,276,36,3),(715,487,36,2),(746,518,36,2),(496,330,37,3),(144,94,38,3),(214,142,38,3),(442,298,38,3),(567,374,39,3),(572,377,39,3),(218,144,40,3),(414,280,40,3),(477,320,40,3),(595,395,40,3),(605,402,40,3),(432,292,41,3),(660,436,41,3),(765,537,41,2),(399,271,42,3),(475,319,42,3),(709,481,42,2),(744,516,42,2),(758,530,42,2),(21,14,43,3),(274,184,43,3),(669,443,43,3),(689,461,43,2),(310,210,44,3),(119,77,45,3),(369,251,45,3),(69,45,46,3),(360,244,46,3),(450,303,46,3),(539,356,46,3),(703,475,46,2),(741,513,46,2),(430,291,48,3),(767,539,48,2),(104,68,49,3),(316,213,49,3),(667,442,49,3),(163,106,50,3),(271,182,50,3),(458,308,50,3),(785,557,50,2),(44,28,51,3),(511,339,51,3),(211,140,52,3),(518,343,52,3),(704,476,52,2),(727,499,52,2),(137,90,53,3),(151,98,53,3),(654,433,53,3),(3,2,54,3),(253,168,55,3),(289,195,55,3),(354,240,55,3),(73,47,56,3),(81,53,56,3),(337,229,56,3),(342,232,56,3),(227,150,57,3),(241,160,57,3),(279,187,57,3),(590,391,57,3),(717,489,57,2),(747,519,57,2),(39,25,58,3),(471,316,58,3),(494,329,58,3),(498,331,58,3),(639,425,58,3),(41,26,59,3),(411,278,59,3),(59,39,60,3),(258,172,60,3),(694,466,60,2),(723,495,60,2),(170,110,61,3),(523,346,61,3),(622,413,61,3),(37,24,62,3),(628,417,62,3),(678,450,62,3),(797,569,62,2),(784,556,63,2),(56,37,64,3),(506,336,64,3),(610,405,64,3),(29,19,65,3),(247,165,65,3),(261,174,65,3),(549,363,65,3),(200,133,66,3),(335,228,66,3),(53,35,67,3),(344,233,67,3),(401,272,67,3),(560,370,67,3),(636,423,67,3),(643,427,68,3),(125,82,69,3),(625,415,69,3),(75,48,70,3),(404,274,70,3),(428,290,70,3),(435,294,70,3),(487,325,70,3),(87,57,71,3),(116,75,71,3),(194,129,71,3),(207,138,71,3),(356,241,71,3),(371,252,71,3),(688,460,71,2),(314,212,72,3),(485,324,72,3),(113,73,74,3),(641,426,74,3),(656,434,74,3),(35,23,75,3),(159,104,75,3),(504,335,75,3),(563,372,75,3),(90,59,76,3),(98,64,76,3),(462,310,76,3),(483,323,76,3),(139,91,77,3),(185,122,77,3),(533,352,77,3),(187,123,78,3),(520,344,78,3),(713,485,78,2),(751,523,78,2),(128,84,79,3),(249,166,79,3),(276,185,79,3),(395,268,79,3),(445,301,79,2),(447,302,79,2),(449,303,79,2),(451,304,79,2),(452,305,79,2),(454,306,79,2),(456,307,79,2),(457,308,79,2),(459,309,79,2),(461,310,79,2),(463,311,79,2),(464,312,79,2),(465,313,79,2),(467,314,79,2),(469,315,79,2),(470,316,79,2),(472,317,79,2),(473,318,79,2),(474,319,79,2),(476,320,79,2),(478,321,79,2),(480,322,79,2),(482,323,79,2),(484,324,79,2),(486,325,79,2),(488,326,79,2),(490,327,79,2),(491,328,79,2),(493,329,79,2),(495,330,79,2),(497,331,79,2),(499,332,79,2),(500,333,79,2),(502,334,79,2),(503,335,79,2),(505,336,79,2),(507,337,79,2),(509,338,79,2),(510,339,79,2),(512,340,79,2),(514,341,79,2),(516,342,79,2),(517,343,79,2),(519,344,79,2),(521,345,79,2),(522,346,79,2),(524,347,79,2),(525,348,79,2),(527,349,79,2),(528,349,79,3),(529,350,79,2),(531,351,79,2),(532,352,79,2),(534,353,79,2),(535,354,79,2),(537,355,79,2),(538,356,79,2),(540,357,79,2),(541,358,79,2),(543,359,79,2),(544,360,79,2),(546,361,79,2),(547,362,79,2),(548,363,79,2),(550,364,79,2),(552,365,79,2),(554,366,79,2),(555,367,79,2),(556,368,79,2),(557,369,79,2),(559,370,79,2),(561,371,79,2),(562,372,79,2),(564,373,79,2),(566,374,79,2),(568,375,79,2),(569,375,79,3),(570,376,79,2),(571,377,79,2),(573,378,79,2),(575,379,79,2),(576,380,79,2),(577,381,79,2),(578,382,79,2),(579,383,79,2),(580,384,79,2),(581,385,79,2),(582,386,79,2),(584,387,79,2),(586,388,79,2),(587,389,79,2),(588,390,79,2),(589,391,79,2),(591,392,79,2),(592,393,79,2),(593,394,79,2),(594,395,79,2),(596,396,79,2),(598,397,79,2),(600,398,79,2),(601,399,79,2),(602,400,79,2),(603,401,79,2),(604,402,79,2),(606,403,79,2),(607,404,79,2),(609,405,79,2),(611,406,79,2),(613,407,79,2),(614,408,79,2),(615,409,79,2),(617,410,79,2),(618,411,79,2),(620,412,79,2),(621,413,79,2),(623,414,79,2),(624,415,79,2),(626,416,79,2),(627,417,79,2),(629,418,79,2),(630,419,79,2),(631,420,79,2),(632,421,79,2),(634,422,79,2),(635,423,79,2),(637,424,79,2),(638,425,79,2),(640,426,79,2),(642,427,79,2),(644,428,79,2),(645,429,79,2),(647,430,79,2),(649,431,79,2),(651,432,79,2),(653,433,79,2),(655,434,79,2),(657,435,79,2),(659,436,79,2),(661,437,79,2),(662,438,79,2),(663,439,79,2),(664,440,79,2),(665,441,79,2),(666,442,79,2),(668,443,79,2),(670,444,79,2),(672,445,79,2),(673,446,79,2),(674,447,79,2),(675,448,79,2),(676,449,79,2),(677,450,79,2),(774,546,79,2),(64,42,80,3),(515,341,80,3),(224,148,81,3),(282,189,81,3),(453,305,82,3),(685,457,82,2),(788,560,82,2),(320,216,83,3),(132,87,84,3),(326,220,84,3),(71,46,85,3),(553,365,85,3),(426,289,86,3),(612,406,86,3),(379,258,87,3),(209,139,88,3),(232,153,88,3),(650,431,88,3),(149,97,89,3),(466,313,89,3),(542,358,89,3),(13,8,90,3),(108,70,90,3),(481,322,90,3),(648,430,90,3),(698,470,90,2),(725,497,90,2),(799,571,90,2),(393,267,91,3),(633,421,91,3),(295,200,92,3),(440,297,92,3),(597,396,92,3),(686,458,92,2),(230,152,93,3),(574,378,93,3),(26,17,94,3),(165,107,94,3),(308,209,94,3),(142,93,95,3),(460,309,95,3),(699,471,95,2),(739,511,95,2),(5,3,96,3),(94,62,96,3),(161,105,96,3),(652,432,96,3),(390,265,97,3),(646,429,97,3),(51,34,98,3),(304,206,98,3),(346,234,98,3),(536,354,99,3),(616,409,99,3),(768,540,99,2),(67,44,100,3),(565,373,100,3),(177,115,101,3),(710,482,105,2),(730,502,105,2),(764,536,107,2),(756,528,108,2),(777,549,111,2),(716,488,113,2),(733,505,113,2),(708,480,115,2),(729,501,115,2),(705,477,116,2),(742,514,116,2),(711,483,118,2),(745,517,118,2),(763,535,119,2),(695,467,124,2),(737,509,124,2),(771,543,128,2),(706,478,132,2),(728,500,132,2),(798,570,132,2),(779,551,133,2),(720,492,134,2),(735,507,134,2),(790,562,137,2),(761,533,141,2),(693,465,148,2),(736,508,148,2),(700,472,149,2),(726,498,149,2),(753,525,150,2),(754,526,156,2),(702,474,159,2),(750,522,159,2),(783,555,160,2),(801,573,163,2),(802,574,167,2),(696,468,170,2),(724,496,170,2),(760,532,172,2),(792,564,173,2),(692,464,177,2),(722,494,177,2),(787,559,181,2),(719,491,182,2),(748,520,182,2),(791,563,182,2),(721,493,183,2),(749,521,183,2),(773,545,183,2),(770,542,184,2),(795,567,185,2),(800,572,186,2),(781,553,188,2),(769,541,191,2),(794,566,196,2),(796,568,199,2);
+INSERT INTO `civicrm_activity_contact` (`id`, `activity_id`, `contact_id`, `record_type_id`) VALUES (455,298,1,3),(652,424,1,3),(796,556,1,2),(320,207,2,3),(425,276,2,3),(691,451,2,2),(67,43,3,3),(483,316,3,3),(515,335,4,3),(692,452,4,2),(161,106,5,3),(233,151,5,3),(333,216,5,3),(789,549,5,2),(693,453,6,2),(22,15,7,3),(92,60,7,3),(155,102,7,3),(195,127,7,3),(269,174,7,3),(281,183,7,3),(329,214,7,3),(370,240,7,3),(4,3,8,3),(396,255,8,3),(694,454,8,2),(810,570,8,2),(227,147,9,3),(347,225,9,3),(412,266,9,3),(526,341,9,3),(374,243,10,3),(574,373,10,3),(724,484,10,2),(744,504,10,2),(83,53,11,3),(404,260,11,3),(238,154,12,3),(402,259,12,3),(126,83,13,3),(355,230,13,3),(479,313,13,3),(626,406,15,3),(685,445,15,3),(236,153,16,3),(695,455,16,2),(719,479,16,2),(755,515,16,2),(113,73,17,3),(568,369,17,3),(12,9,18,3),(283,184,18,3),(367,238,18,3),(644,419,18,3),(797,557,18,2),(14,10,19,3),(150,99,19,3),(459,301,19,2),(461,302,19,2),(463,303,19,2),(465,304,19,2),(466,305,19,2),(468,306,19,2),(469,307,19,2),(470,308,19,2),(472,309,19,2),(473,310,19,2),(475,311,19,2),(476,312,19,2),(478,313,19,2),(480,314,19,2),(481,315,19,2),(482,316,19,2),(484,317,19,2),(486,318,19,2),(487,319,19,2),(489,320,19,2),(490,321,19,2),(492,322,19,2),(494,323,19,2),(496,324,19,2),(497,325,19,2),(498,326,19,2),(500,327,19,2),(501,328,19,2),(503,329,19,2),(505,330,19,2),(507,331,19,2),(508,332,19,2),(510,333,19,2),(512,334,19,2),(514,335,19,2),(516,336,19,2),(518,337,19,2),(520,338,19,2),(522,339,19,2),(524,340,19,2),(525,341,19,2),(527,342,19,2),(529,343,19,2),(531,344,19,2),(532,345,19,2),(534,346,19,2),(536,347,19,2),(538,348,19,2),(539,349,19,2),(541,350,19,2),(542,351,19,2),(544,352,19,2),(546,353,19,2),(547,354,19,2),(548,355,19,2),(550,356,19,2),(551,357,19,2),(552,358,19,2),(553,359,19,2),(555,360,19,2),(556,361,19,2),(557,362,19,2),(558,363,19,2),(560,364,19,2),(562,365,19,2),(563,366,19,2),(564,367,19,2),(565,368,19,2),(567,369,19,2),(569,370,19,2),(571,371,19,2),(572,372,19,2),(573,373,19,2),(575,374,19,2),(576,375,19,2),(577,376,19,2),(579,377,19,2),(580,378,19,2),(582,379,19,2),(583,380,19,2),(585,381,19,2),(586,382,19,2),(588,383,19,2),(589,384,19,2),(591,385,19,2),(593,386,19,2),(595,387,19,2),(597,388,19,2),(599,389,19,2),(601,390,19,2),(602,391,19,2),(603,392,19,2),(605,393,19,2),(607,394,19,2),(608,395,19,2),(609,396,19,2),(611,397,19,2),(613,398,19,2),(614,399,19,2),(616,400,19,2),(617,401,19,2),(618,402,19,2),(620,403,19,2),(621,404,19,2),(623,405,19,2),(625,406,19,2),(627,407,19,2),(628,408,19,2),(630,409,19,2),(631,410,19,2),(632,411,19,2),(633,412,19,2),(634,413,19,2),(636,414,19,2),(637,415,19,2),(638,416,19,2),(639,417,19,2),(641,418,19,2),(643,419,19,2),(645,420,19,2),(646,421,19,2),(648,422,19,2),(650,423,19,2),(651,424,19,2),(653,425,19,2),(655,426,19,2),(656,427,19,2),(657,428,19,2),(658,429,19,2),(660,430,19,2),(661,431,19,2),(663,432,19,2),(665,433,19,2),(667,434,19,2),(669,435,19,2),(671,436,19,2),(673,437,19,2),(674,438,19,2),(676,439,19,2),(677,440,19,2),(678,441,19,2),(679,442,19,2),(681,443,19,2),(683,444,19,2),(684,445,19,2),(686,446,19,2),(687,447,19,2),(688,448,19,2),(689,449,19,2),(690,450,19,2),(696,456,19,2),(720,480,19,2),(742,502,19,2),(140,93,21,3),(802,562,21,2),(16,11,22,3),(298,194,22,3),(34,23,23,3),(464,303,23,3),(533,345,23,3),(604,392,23,3),(331,215,24,3),(509,332,25,3),(513,334,25,3),(596,387,25,3),(672,436,26,3),(578,376,27,3),(581,378,27,3),(163,107,28,3),(590,384,28,3),(294,192,29,3),(309,201,29,3),(666,433,29,3),(559,363,30,3),(783,543,30,2),(225,146,31,3),(254,164,31,3),(278,181,31,3),(519,337,31,3),(69,44,32,3),(172,113,32,3),(416,269,32,3),(680,442,32,3),(702,462,32,2),(703,463,32,2),(56,36,33,3),(365,237,33,3),(389,251,33,3),(592,385,33,3),(175,115,34,3),(241,156,34,3),(303,197,34,3),(521,338,34,3),(699,459,34,2),(805,565,34,2),(215,140,35,3),(422,274,35,3),(709,469,35,2),(751,511,35,2),(587,382,36,3),(670,435,36,3),(675,438,36,3),(721,481,36,2),(756,516,36,2),(187,122,37,3),(457,299,37,3),(506,330,37,3),(771,531,37,2),(146,97,38,3),(325,211,38,3),(440,287,38,3),(649,422,38,3),(718,478,39,2),(741,501,39,2),(442,288,40,3),(212,138,41,3),(318,206,41,3),(398,256,41,3),(545,352,41,3),(790,550,41,2),(208,136,43,3),(271,175,43,3),(380,246,43,3),(474,310,43,3),(701,461,43,2),(263,170,44,3),(561,364,44,3),(243,157,45,3),(495,323,45,3),(808,568,45,2),(58,37,46,3),(197,128,46,3),(606,393,46,3),(713,473,46,2),(739,499,46,2),(570,370,47,3),(210,137,48,3),(511,333,48,3),(640,417,48,3),(345,224,49,3),(530,343,49,3),(785,545,49,2),(462,302,50,3),(25,17,51,3),(36,24,51,3),(183,120,51,3),(341,222,51,3),(359,233,51,3),(266,172,53,3),(708,468,53,2),(736,496,53,2),(128,84,54,3),(436,284,54,3),(87,56,55,3),(285,185,55,3),(313,203,55,3),(471,308,55,3),(766,526,55,2),(95,62,56,3),(528,342,56,3),(659,429,56,3),(668,434,56,3),(97,63,57,3),(343,223,57,3),(710,470,57,2),(737,497,57,2),(800,560,57,2),(543,351,58,3),(799,559,58,2),(336,218,59,3),(477,312,59,3),(642,418,59,3),(647,421,59,3),(169,111,60,3),(185,121,60,3),(523,339,60,3),(19,13,61,3),(256,165,61,3),(517,336,61,3),(682,443,61,3),(378,245,62,3),(537,347,62,3),(726,486,62,2),(745,505,62,2),(38,25,63,3),(73,46,63,3),(301,196,63,3),(353,229,63,3),(385,249,63,3),(566,368,63,3),(48,30,64,3),(179,118,64,3),(248,160,65,3),(191,125,66,3),(261,169,67,3),(493,322,67,3),(811,571,67,2),(40,26,68,3),(220,143,68,3),(305,198,68,3),(488,319,68,3),(31,21,69,3),(406,261,69,3),(612,397,69,3),(733,493,69,2),(761,521,69,2),(807,567,69,2),(491,321,70,3),(535,346,70,3),(152,100,71,3),(287,186,71,3),(452,296,71,3),(615,399,71,3),(700,460,71,2),(504,329,72,3),(801,561,72,2),(29,20,73,3),(144,96,73,3),(52,33,74,3),(460,301,74,3),(99,64,75,3),(798,558,75,2),(7,5,76,3),(387,250,76,3),(138,92,77,3),(148,98,77,3),(245,158,77,3),(431,281,77,3),(251,162,78,3),(349,226,78,3),(362,235,78,3),(635,413,78,3),(159,105,80,3),(584,380,80,3),(654,425,80,3),(44,28,81,3),(619,402,81,3),(391,252,82,3),(697,457,82,2),(181,119,83,3),(499,326,83,3),(554,359,83,3),(662,431,83,3),(773,533,83,2),(315,204,84,3),(502,328,84,3),(467,305,85,3),(629,408,85,3),(103,66,86,3),(433,282,86,3),(795,555,86,2),(46,29,87,3),(42,27,88,3),(60,38,88,3),(376,244,89,3),(540,349,89,3),(729,489,89,2),(759,519,89,2),(814,574,89,2),(218,142,90,3),(382,247,90,3),(78,50,91,3),(101,65,91,3),(394,254,91,3),(549,355,91,3),(600,389,91,3),(610,396,91,3),(705,465,91,2),(749,509,91,2),(784,544,91,2),(222,144,92,3),(622,404,92,3),(698,458,92,2),(723,483,92,2),(757,517,92,2),(781,541,92,2),(131,86,93,3),(448,293,93,3),(598,388,93,3),(780,540,93,2),(62,39,94,3),(120,79,94,3),(296,193,94,3),(123,81,96,3),(167,110,96,3),(71,45,97,3),(107,69,97,3),(109,70,97,3),(203,132,97,3),(231,150,97,3),(485,317,97,3),(193,126,98,3),(200,130,98,3),(767,527,99,2),(81,52,100,3),(311,202,100,3),(594,386,100,3),(664,432,100,3),(624,405,101,3),(730,490,101,2),(747,507,101,2),(722,482,104,2),(743,503,104,2),(779,539,105,2),(775,535,108,2),(728,488,113,2),(746,506,113,2),(1,1,114,2),(2,2,114,2),(3,3,114,2),(5,4,114,2),(6,5,114,2),(8,6,114,2),(9,7,114,2),(10,8,114,2),(11,9,114,2),(13,10,114,2),(15,11,114,2),(17,12,114,2),(18,13,114,2),(20,14,114,2),(21,15,114,2),(23,16,114,2),(24,17,114,2),(26,18,114,2),(27,19,114,2),(28,20,114,2),(30,21,114,2),(32,22,114,2),(33,23,114,2),(35,24,114,2),(37,25,114,2),(39,26,114,2),(41,27,114,2),(43,28,114,2),(45,29,114,2),(47,30,114,2),(49,31,114,2),(50,32,114,2),(51,33,114,2),(53,34,114,2),(54,35,114,2),(55,36,114,2),(57,37,114,2),(59,38,114,2),(61,39,114,2),(63,40,114,2),(64,41,114,2),(65,42,114,2),(66,43,114,2),(68,44,114,2),(70,45,114,2),(72,46,114,2),(74,47,114,2),(75,48,114,2),(76,49,114,2),(77,50,114,2),(79,51,114,2),(80,52,114,2),(82,53,114,2),(84,54,114,2),(85,55,114,2),(86,56,114,2),(88,57,114,2),(89,58,114,2),(90,59,114,2),(91,60,114,2),(93,61,114,2),(94,62,114,2),(96,63,114,2),(98,64,114,2),(100,65,114,2),(102,66,114,2),(104,67,114,2),(105,68,114,2),(106,69,114,2),(108,70,114,2),(110,71,114,2),(111,72,114,2),(112,73,114,2),(114,74,114,2),(115,75,114,2),(116,76,114,2),(117,77,114,2),(118,78,114,2),(119,79,114,2),(121,80,114,2),(122,81,114,2),(124,82,114,2),(125,83,114,2),(127,84,114,2),(129,85,114,2),(130,86,114,2),(132,87,114,2),(133,88,114,2),(134,89,114,2),(135,90,114,2),(136,91,114,2),(137,92,114,2),(139,93,114,2),(141,94,114,2),(142,95,114,2),(143,96,114,2),(145,97,114,2),(147,98,114,2),(149,99,114,2),(151,100,114,2),(153,101,114,2),(154,102,114,2),(156,103,114,2),(157,104,114,2),(158,105,114,2),(160,106,114,2),(162,107,114,2),(164,108,114,2),(165,109,114,2),(166,110,114,2),(168,111,114,2),(170,112,114,2),(171,113,114,2),(173,114,114,2),(174,115,114,2),(176,116,114,2),(177,117,114,2),(178,118,114,2),(180,119,114,2),(182,120,114,2),(184,121,114,2),(186,122,114,2),(188,123,114,2),(189,124,114,2),(190,125,114,2),(192,126,114,2),(194,127,114,2),(196,128,114,2),(198,129,114,2),(199,130,114,2),(201,131,114,2),(202,132,114,2),(204,133,114,2),(205,134,114,2),(206,135,114,2),(207,136,114,2),(209,137,114,2),(211,138,114,2),(213,139,114,2),(214,140,114,2),(216,141,114,2),(217,142,114,2),(219,143,114,2),(221,144,114,2),(223,145,114,2),(224,146,114,2),(226,147,114,2),(228,148,114,2),(229,149,114,2),(230,150,114,2),(787,547,114,2),(782,542,119,2),(793,553,120,2),(727,487,121,2),(758,518,121,2),(716,476,123,2),(740,500,123,2),(774,534,124,2),(707,467,125,2),(750,510,125,2),(772,532,127,2),(704,464,130,2),(734,494,130,2),(731,491,134,2),(760,520,134,2),(812,572,135,2),(809,569,139,2),(768,528,143,2),(706,466,145,2),(735,495,145,2),(776,536,145,2),(232,151,148,2),(234,152,148,2),(235,153,148,2),(237,154,148,2),(239,155,148,2),(240,156,148,2),(242,157,148,2),(244,158,148,2),(246,159,148,2),(247,160,148,2),(249,161,148,2),(250,162,148,2),(252,163,148,2),(253,164,148,2),(255,165,148,2),(257,166,148,2),(258,167,148,2),(259,168,148,2),(260,169,148,2),(262,170,148,2),(264,171,148,2),(265,172,148,2),(267,173,148,2),(268,174,148,2),(270,175,148,2),(272,176,148,2),(273,177,148,2),(274,178,148,2),(275,179,148,2),(276,180,148,2),(277,181,148,2),(279,182,148,2),(280,183,148,2),(282,184,148,2),(284,185,148,2),(286,186,148,2),(288,187,148,2),(289,188,148,2),(290,189,148,2),(291,190,148,2),(292,191,148,2),(293,192,148,2),(295,193,148,2),(297,194,148,2),(299,195,148,2),(300,196,148,2),(302,197,148,2),(304,198,148,2),(306,199,148,2),(307,200,148,2),(308,201,148,2),(310,202,148,2),(312,203,148,2),(314,204,148,2),(316,205,148,2),(317,206,148,2),(319,207,148,2),(321,208,148,2),(322,209,148,2),(323,210,148,2),(324,211,148,2),(326,212,148,2),(327,213,148,2),(328,214,148,2),(330,215,148,2),(332,216,148,2),(334,217,148,2),(335,218,148,2),(337,219,148,2),(338,220,148,2),(339,221,148,2),(340,222,148,2),(342,223,148,2),(344,224,148,2),(346,225,148,2),(348,226,148,2),(350,227,148,2),(351,228,148,2),(352,229,148,2),(354,230,148,2),(356,231,148,2),(357,232,148,2),(358,233,148,2),(360,234,148,2),(361,235,148,2),(363,236,148,2),(364,237,148,2),(366,238,148,2),(368,239,148,2),(369,240,148,2),(371,241,148,2),(372,242,148,2),(373,243,148,2),(375,244,148,2),(377,245,148,2),(379,246,148,2),(381,247,148,2),(383,248,148,2),(384,249,148,2),(386,250,148,2),(388,251,148,2),(390,252,148,2),(392,253,148,2),(393,254,148,2),(395,255,148,2),(397,256,148,2),(399,257,148,2),(400,258,148,2),(401,259,148,2),(403,260,148,2),(405,261,148,2),(407,262,148,2),(408,263,148,2),(409,264,148,2),(410,265,148,2),(411,266,148,2),(413,267,148,2),(414,268,148,2),(415,269,148,2),(417,270,148,2),(418,271,148,2),(419,272,148,2),(420,273,148,2),(421,274,148,2),(423,275,148,2),(424,276,148,2),(426,277,148,2),(427,278,148,2),(428,279,148,2),(429,280,148,2),(430,281,148,2),(432,282,148,2),(434,283,148,2),(435,284,148,2),(437,285,148,2),(438,286,148,2),(439,287,148,2),(441,288,148,2),(443,289,148,2),(444,290,148,2),(445,291,148,2),(446,292,148,2),(447,293,148,2),(449,294,148,2),(450,295,148,2),(451,296,148,2),(453,297,148,2),(454,298,148,2),(456,299,148,2),(458,300,148,2),(715,475,151,2),(753,513,151,2),(714,474,153,2),(762,522,153,2),(786,546,153,2),(813,573,157,2),(791,551,159,2),(803,563,163,2),(769,529,170,2),(725,485,173,2),(763,523,173,2),(712,472,178,2),(738,498,178,2),(777,537,178,2),(794,554,179,2),(788,548,183,2),(804,564,184,2),(765,525,186,2),(770,530,187,2),(778,538,189,2),(711,471,190,2),(752,512,190,2),(806,566,190,2),(717,477,192,2),(754,514,192,2),(792,552,193,2),(732,492,197,2),(748,508,197,2);
 /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -107,7 +107,7 @@ 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,57,1,1,0,'657K Pine Ave SW',657,'K',NULL,'Pine','Ave','SW',NULL,NULL,NULL,NULL,'Morristown',1,1041,NULL,'37815',NULL,1228,36.213293,-83.275211,0,NULL,NULL,NULL),(2,69,1,1,0,'197L El Camino Pl SW',197,'L',NULL,'El Camino','Pl','SW',NULL,NULL,NULL,NULL,'Sand Springs',1,1035,NULL,'74063',NULL,1228,36.139385,-96.16523,0,NULL,NULL,NULL),(3,48,1,1,0,'296G Dowlen Pl W',296,'G',NULL,'Dowlen','Pl','W',NULL,NULL,NULL,NULL,'Redfox',1,1016,NULL,'41847',NULL,1228,37.21583,-82.95449,0,NULL,NULL,NULL),(4,128,1,1,0,'859X Main Way E',859,'X',NULL,'Main','Way','E',NULL,NULL,NULL,NULL,'Tulsa',1,1035,NULL,'74158',NULL,1228,36.139826,-96.029725,0,NULL,NULL,NULL),(5,66,1,1,0,'418U Woodbridge Path W',418,'U',NULL,'Woodbridge','Path','W',NULL,NULL,NULL,NULL,'Gregory',1,1042,NULL,'78359',NULL,1228,27.920604,-97.29248,0,NULL,NULL,NULL),(6,5,1,1,0,'747S Dowlen Rd SW',747,'S',NULL,'Dowlen','Rd','SW',NULL,NULL,NULL,NULL,'Ball',1,1017,NULL,'71405',NULL,1228,31.415125,-92.394536,0,NULL,NULL,NULL),(7,170,1,1,0,'566H Pine St SE',566,'H',NULL,'Pine','St','SE',NULL,NULL,NULL,NULL,'Bedminster',1,1037,NULL,'18910',NULL,1228,40.328645,-75.10278,0,NULL,NULL,NULL),(8,112,1,1,0,'43D Second Rd E',43,'D',NULL,'Second','Rd','E',NULL,NULL,NULL,NULL,'Ogden',1,1043,NULL,'84409',NULL,1228,41.255285,-111.956721,0,NULL,NULL,NULL),(9,18,1,1,0,'154H Caulder Ln N',154,'H',NULL,'Caulder','Ln','N',NULL,NULL,NULL,NULL,'Black Hawk',1,1005,NULL,'80422',NULL,1228,39.813744,-105.50875,0,NULL,NULL,NULL),(10,60,1,1,0,'966X Jackson Rd NE',966,'X',NULL,'Jackson','Rd','NE',NULL,NULL,NULL,NULL,'Philadelphia',1,1037,NULL,'19129',NULL,1228,40.011562,-75.1839,0,NULL,NULL,NULL),(11,177,1,1,0,'911F Caulder Dr SE',911,'F',NULL,'Caulder','Dr','SE',NULL,NULL,NULL,NULL,'Tupelo',1,1023,NULL,'38803',NULL,1228,34.187638,-88.77852,0,NULL,NULL,NULL),(12,149,1,1,0,'781X Cadell Blvd SW',781,'X',NULL,'Cadell','Blvd','SW',NULL,NULL,NULL,NULL,'Rome',1,1031,NULL,'13440',NULL,1228,43.217069,-75.45531,0,NULL,NULL,NULL),(13,24,1,1,0,'562S Green Path E',562,'S',NULL,'Green','Path','E',NULL,NULL,NULL,NULL,'Haralson',1,1009,NULL,'30229',NULL,1228,33.232156,-84.56854,0,NULL,NULL,NULL),(14,30,1,1,0,'648E States Pl NE',648,'E',NULL,'States','Pl','NE',NULL,NULL,NULL,NULL,'East Baldwin',1,1018,NULL,'04024',NULL,1228,43.823849,-70.68482,0,NULL,NULL,NULL),(15,12,1,1,0,'907N College Pl SW',907,'N',NULL,'College','Pl','SW',NULL,NULL,NULL,NULL,'Saint Xavier',1,1025,NULL,'59075',NULL,1228,45.395656,-107.93409,0,NULL,NULL,NULL),(16,114,1,1,0,'169I College Path E',169,'I',NULL,'College','Path','E',NULL,NULL,NULL,NULL,'Centerville',1,1003,NULL,'72829',NULL,1228,35.110131,-93.17279,0,NULL,NULL,NULL),(17,154,1,1,0,'751Q Dowlen Ave W',751,'Q',NULL,'Dowlen','Ave','W',NULL,NULL,NULL,NULL,'Damon',1,1042,NULL,'77430',NULL,1228,29.290602,-95.70739,0,NULL,NULL,NULL),(18,99,1,1,0,'614T Northpoint Way SW',614,'T',NULL,'Northpoint','Way','SW',NULL,NULL,NULL,NULL,'San Mateo',1,1004,NULL,'94401',NULL,1228,37.570385,-122.32044,0,NULL,NULL,NULL),(19,26,1,1,0,'607P Green St NE',607,'P',NULL,'Green','St','NE',NULL,NULL,NULL,NULL,'Medina',1,1034,NULL,'44258',NULL,1228,41.127594,-81.841079,0,NULL,NULL,NULL),(20,75,1,1,0,'587P Maple Pl N',587,'P',NULL,'Maple','Pl','N',NULL,NULL,NULL,NULL,'Princeton',1,1012,NULL,'61356',NULL,1228,41.372528,-89.44315,0,NULL,NULL,NULL),(21,118,1,1,0,'297Z Martin Luther King Path NE',297,'Z',NULL,'Martin Luther King','Path','NE',NULL,NULL,NULL,NULL,'Bushnell',1,1026,NULL,'69128',NULL,1228,41.173278,-103.9024,0,NULL,NULL,NULL),(22,40,1,1,0,'696Q Caulder Blvd E',696,'Q',NULL,'Caulder','Blvd','E',NULL,NULL,NULL,NULL,'Colome',1,1040,NULL,'57528',NULL,1228,43.205207,-99.76123,0,NULL,NULL,NULL),(23,38,1,1,0,'660L Second Ave E',660,'L',NULL,'Second','Ave','E',NULL,NULL,NULL,NULL,'Bedford',1,1028,NULL,'03110',NULL,1228,42.942551,-71.51993,0,NULL,NULL,NULL),(24,50,1,1,0,'272I Martin Luther King Way E',272,'I',NULL,'Martin Luther King','Way','E',NULL,NULL,NULL,NULL,'Panama',1,1014,NULL,'51562',NULL,1228,41.725547,-95.49415,0,NULL,NULL,NULL),(25,119,1,1,0,'45P Caulder Ave E',45,'P',NULL,'Caulder','Ave','E',NULL,NULL,NULL,NULL,'Banner',1,1049,NULL,'82832',NULL,1228,44.602518,-106.76367,0,NULL,NULL,NULL),(26,164,1,1,0,'480D Maple Path N',480,'D',NULL,'Maple','Path','N',NULL,NULL,NULL,NULL,'Judith Gap',1,1025,NULL,'59453',NULL,1228,46.678858,-109.64119,0,NULL,NULL,NULL),(27,158,1,1,0,'588K Green Blvd NE',588,'K',NULL,'Green','Blvd','NE',NULL,NULL,NULL,NULL,'Clay',1,1016,NULL,'42404',NULL,1228,37.481719,-87.8394,0,NULL,NULL,NULL),(28,14,1,1,0,'121Y Cadell Blvd NW',121,'Y',NULL,'Cadell','Blvd','NW',NULL,NULL,NULL,NULL,'New Kensington',1,1037,NULL,'15069',NULL,1228,40.360223,-79.439801,0,NULL,NULL,NULL),(29,67,1,1,0,'781A Woodbridge Rd NE',781,'A',NULL,'Woodbridge','Rd','NE',NULL,NULL,NULL,NULL,'La Belle',1,1024,NULL,'63477',NULL,1228,40.114109,-91.912383,0,NULL,NULL,NULL),(30,113,1,1,0,'523Q Maple Ave S',523,'Q',NULL,'Maple','Ave','S',NULL,NULL,NULL,NULL,'Glenn Dale',1,1019,NULL,'20769',NULL,1228,38.984107,-76.81544,0,NULL,NULL,NULL),(31,185,1,1,0,'918W College Ave NW',918,'W',NULL,'College','Ave','NW',NULL,NULL,NULL,NULL,'Canterbury',1,1028,NULL,'03224',NULL,1228,43.346137,-71.54434,0,NULL,NULL,NULL),(32,102,1,1,0,'171E Northpoint Dr W',171,'E',NULL,'Northpoint','Dr','W',NULL,NULL,NULL,NULL,'Nelson',1,1045,NULL,'24580',NULL,1228,36.589704,-78.66151,0,NULL,NULL,NULL),(33,123,1,1,0,'47H El Camino Pl SW',47,'H',NULL,'El Camino','Pl','SW',NULL,NULL,NULL,NULL,'Slaughter',1,1017,NULL,'70777',NULL,1228,30.722133,-91.10915,0,NULL,NULL,NULL),(34,141,1,1,0,'510Q Maple Blvd N',510,'Q',NULL,'Maple','Blvd','N',NULL,NULL,NULL,NULL,'Ellis Grove',1,1012,NULL,'62241',NULL,1228,38.011729,-89.89007,0,NULL,NULL,NULL),(35,87,1,1,0,'424O Martin Luther King Ln SE',424,'O',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Jupiter',1,1008,NULL,'33478',NULL,1228,26.925835,-80.21526,0,NULL,NULL,NULL),(36,73,1,1,0,'441J Jackson Ln SW',441,'J',NULL,'Jackson','Ln','SW',NULL,NULL,NULL,NULL,'Troy',1,1034,NULL,'45373',NULL,1228,40.036525,-84.20629,0,NULL,NULL,NULL),(37,175,1,1,0,'776L Pine Way N',776,'L',NULL,'Pine','Way','N',NULL,NULL,NULL,NULL,'Georgetown',1,1018,NULL,'04548',NULL,1228,43.810548,-69.74325,0,NULL,NULL,NULL),(38,86,1,1,0,'549M Cadell Dr E',549,'M',NULL,'Cadell','Dr','E',NULL,NULL,NULL,NULL,'Spokane',1,1046,NULL,'99260',NULL,1228,47.653568,-117.431742,0,NULL,NULL,NULL),(39,3,1,1,0,'26E College Ave S',26,'E',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Church Hill',1,1041,NULL,'37642',NULL,1228,36.534489,-82.71292,0,NULL,NULL,NULL),(40,190,1,1,0,'466C Bay Rd NW',466,'C',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Rockford',1,1012,NULL,'61101',NULL,1228,42.292221,-89.12574,0,NULL,NULL,NULL),(41,108,1,1,0,'476N College Ave S',476,'N',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Shermans Dale',1,1037,NULL,'17090',NULL,1228,40.332785,-77.18464,0,NULL,NULL,NULL),(42,80,1,1,0,'700M Woodbridge Ave SW',700,'M',NULL,'Woodbridge','Ave','SW',NULL,NULL,NULL,NULL,'Cocoa',1,1008,NULL,'32923',NULL,1228,28.427535,-80.828991,0,NULL,NULL,NULL),(43,152,1,1,0,'488A Maple Path SW',488,'A',NULL,'Maple','Path','SW',NULL,NULL,NULL,NULL,'Hartington',1,1026,NULL,'68739',NULL,1228,42.624108,-97.25267,0,NULL,NULL,NULL),(44,61,1,1,0,'535Y Second Rd S',535,'Y',NULL,'Second','Rd','S',NULL,NULL,NULL,NULL,'East Galesburg',1,1012,NULL,'61430',NULL,1228,40.94399,-90.31205,0,NULL,NULL,NULL),(45,130,1,1,0,'752C Dowlen St NE',752,'C',NULL,'Dowlen','St','NE',NULL,NULL,NULL,NULL,'Rochert',1,1022,NULL,'56578',NULL,1228,46.920986,-95.66842,0,NULL,NULL,NULL),(46,106,1,1,0,'619Z States Rd N',619,'Z',NULL,'States','Rd','N',NULL,NULL,NULL,NULL,'Philadelphia',1,1037,NULL,'19140',NULL,1228,40.012212,-75.14503,0,NULL,NULL,NULL),(47,9,1,1,0,'76H Woodbridge Dr SE',76,'H',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79929',NULL,1228,31.694842,-106.299987,0,NULL,NULL,NULL),(48,107,1,1,0,'356H Bay Way SW',356,'H',NULL,'Bay','Way','SW',NULL,NULL,NULL,NULL,'Keatchie',1,1017,NULL,'71046',NULL,1228,32.168532,-93.95402,0,NULL,NULL,NULL),(49,188,1,1,0,'412S Jackson Dr N',412,'S',NULL,'Jackson','Dr','N',NULL,NULL,NULL,NULL,'Burke',1,1045,NULL,'22009',NULL,1228,38.831813,-77.288755,0,NULL,NULL,NULL),(50,62,1,1,0,'497J Maple Pl S',497,'J',NULL,'Maple','Pl','S',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'88516',NULL,1228,31.694842,-106.299987,0,NULL,NULL,NULL),(51,83,1,1,0,'873X Lincoln Path NW',873,'X',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kings Mountain',1,1032,NULL,'28086',NULL,1228,35.241188,-81.3614,0,NULL,NULL,NULL),(52,17,1,1,0,'106D Dowlen Pl NW',106,'D',NULL,'Dowlen','Pl','NW',NULL,NULL,NULL,NULL,'Riverside',1,1004,NULL,'92503',NULL,1228,33.91355,-117.46052,0,NULL,NULL,NULL),(53,187,1,1,0,'268D El Camino Dr E',268,'D',NULL,'El Camino','Dr','E',NULL,NULL,NULL,NULL,'Sarasota',1,1008,NULL,'34277',NULL,1228,27.167521,-82.380967,0,NULL,NULL,NULL),(54,93,1,1,0,'412D Pine Ave NW',412,'D',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Kenwood',1,1004,NULL,'95452',NULL,1228,38.414061,-122.54668,0,NULL,NULL,NULL),(55,74,1,1,0,'423Y Dowlen Pl S',423,'Y',NULL,'Dowlen','Pl','S',NULL,NULL,NULL,NULL,'Hettick',1,1012,NULL,'62649',NULL,1228,39.348487,-90.08365,0,NULL,NULL,NULL),(56,71,1,1,0,'166V Bay Way S',166,'V',NULL,'Bay','Way','S',NULL,NULL,NULL,NULL,'Martinsburg',1,1034,NULL,'43037',NULL,1228,40.27453,-82.34436,0,NULL,NULL,NULL),(57,179,1,1,0,'883J Pine Ave E',883,'J',NULL,'Pine','Ave','E',NULL,NULL,NULL,NULL,'Kahuku',1,1010,NULL,'96731',NULL,1228,21.68762,-157.95903,0,NULL,NULL,NULL),(58,199,1,1,0,'680O States Dr E',680,'O',NULL,'States','Dr','E',NULL,NULL,NULL,NULL,'Russell',1,1014,NULL,'50238',NULL,1228,40.962051,-93.18373,0,NULL,NULL,NULL),(59,91,3,1,0,'95A Martin Luther King Ln E',95,'A',NULL,'Martin Luther King','Ln','E',NULL,'Urgent',NULL,NULL,'Russell Springs',1,1016,NULL,'42642',NULL,1228,37.05401,-85.06142,0,NULL,NULL,NULL),(60,105,2,1,0,'95A Martin Luther King Ln E',95,'A',NULL,'Martin Luther King','Ln','E',NULL,'Urgent',NULL,NULL,'Russell Springs',1,1016,NULL,'42642',NULL,1228,37.05401,-85.06142,0,NULL,NULL,59),(61,97,3,1,0,'7T Bay Blvd W',7,'T',NULL,'Bay','Blvd','W',NULL,'Attn: Accounting',NULL,NULL,'New Canton',1,1012,NULL,'62356',NULL,1228,39.599949,-91.09115,0,NULL,NULL,NULL),(62,54,3,1,0,'80X Beech Rd SE',80,'X',NULL,'Beech','Rd','SE',NULL,'Community Relations',NULL,NULL,'Poquoson',1,1045,NULL,'23662',NULL,1228,37.131237,-76.38089,0,NULL,NULL,NULL),(63,136,2,1,0,'80X Beech Rd SE',80,'X',NULL,'Beech','Rd','SE',NULL,'Community Relations',NULL,NULL,'Poquoson',1,1045,NULL,'23662',NULL,1228,37.131237,-76.38089,0,NULL,NULL,62),(64,72,3,1,0,'243T Bay Rd NW',243,'T',NULL,'Bay','Rd','NW',NULL,'Community Relations',NULL,NULL,'Bradford',1,1044,NULL,'05033',NULL,1228,43.994064,-72.15534,0,NULL,NULL,NULL),(65,153,2,1,0,'243T Bay Rd NW',243,'T',NULL,'Bay','Rd','NW',NULL,'Community Relations',NULL,NULL,'Bradford',1,1044,NULL,'05033',NULL,1228,43.994064,-72.15534,0,NULL,NULL,64),(66,155,3,1,0,'523Z Green Dr S',523,'Z',NULL,'Green','Dr','S',NULL,'Mailstop 101',NULL,NULL,'Bassett',1,1026,NULL,'68714',NULL,1228,42.53961,-99.52938,0,NULL,NULL,NULL),(67,90,2,1,0,'523Z Green Dr S',523,'Z',NULL,'Green','Dr','S',NULL,'Mailstop 101',NULL,NULL,'Bassett',1,1026,NULL,'68714',NULL,1228,42.53961,-99.52938,0,NULL,NULL,66),(68,37,3,1,0,'768N Woodbridge Pl S',768,'N',NULL,'Woodbridge','Pl','S',NULL,'Mailstop 101',NULL,NULL,'Saint Vincent',1,1022,NULL,'56755',NULL,1228,48.954448,-97.13949,0,NULL,NULL,NULL),(69,110,3,1,0,'649P Dowlen Ln E',649,'P',NULL,'Dowlen','Ln','E',NULL,'Payables Dept.',NULL,NULL,'Buffalo',1,1031,NULL,'14269',NULL,1228,42.768413,-78.887094,0,NULL,NULL,NULL),(70,158,2,0,0,'649P Dowlen Ln E',649,'P',NULL,'Dowlen','Ln','E',NULL,'Payables Dept.',NULL,NULL,'Buffalo',1,1031,NULL,'14269',NULL,1228,42.768413,-78.887094,0,NULL,NULL,69),(71,195,3,1,0,'11X Main Blvd SW',11,'X',NULL,'Main','Blvd','SW',NULL,'Mailstop 101',NULL,NULL,'San Luis Obispo',1,1004,NULL,'93409',NULL,1228,35.221085,-120.636399,0,NULL,NULL,NULL),(72,146,2,1,0,'11X Main Blvd SW',11,'X',NULL,'Main','Blvd','SW',NULL,'Mailstop 101',NULL,NULL,'San Luis Obispo',1,1004,NULL,'93409',NULL,1228,35.221085,-120.636399,0,NULL,NULL,71),(73,196,3,1,0,'395I Beech Pl SW',395,'I',NULL,'Beech','Pl','SW',NULL,'Churchgate',NULL,NULL,'Palo Alto',1,1004,NULL,'94308',NULL,1228,37.381144,-122.334825,0,NULL,NULL,NULL),(74,162,3,1,0,'13E Second St N',13,'E',NULL,'Second','St','N',NULL,'Cuffe Parade',NULL,NULL,'Baptistown',1,1029,NULL,'08803',NULL,1228,40.563654,-74.949409,0,NULL,NULL,NULL),(75,159,2,1,0,'13E Second St N',13,'E',NULL,'Second','St','N',NULL,'Cuffe Parade',NULL,NULL,'Baptistown',1,1029,NULL,'08803',NULL,1228,40.563654,-74.949409,0,NULL,NULL,74),(76,19,3,1,0,'891T College Dr NW',891,'T',NULL,'College','Dr','NW',NULL,'Mailstop 101',NULL,NULL,'Addy',1,1046,NULL,'99101',NULL,1228,48.305861,-117.94318,0,NULL,NULL,NULL),(77,180,2,1,0,'891T College Dr NW',891,'T',NULL,'College','Dr','NW',NULL,'Mailstop 101',NULL,NULL,'Addy',1,1046,NULL,'99101',NULL,1228,48.305861,-117.94318,0,NULL,NULL,76),(78,65,3,1,0,'686H Cadell Ave N',686,'H',NULL,'Cadell','Ave','N',NULL,'Receiving',NULL,NULL,'Ellsworth',1,1034,NULL,'44416',NULL,1228,41.017082,-80.802854,0,NULL,NULL,NULL),(79,200,2,1,0,'686H Cadell Ave N',686,'H',NULL,'Cadell','Ave','N',NULL,'Receiving',NULL,NULL,'Ellsworth',1,1034,NULL,'44416',NULL,1228,41.017082,-80.802854,0,NULL,NULL,78),(80,142,3,1,0,'782S Pine Dr W',782,'S',NULL,'Pine','Dr','W',NULL,'Cuffe Parade',NULL,NULL,'Anahola',1,1010,NULL,'96703',NULL,1228,22.148133,-159.31765,0,NULL,NULL,NULL),(81,40,2,0,0,'782S Pine Dr W',782,'S',NULL,'Pine','Dr','W',NULL,'Cuffe Parade',NULL,NULL,'Anahola',1,1010,NULL,'96703',NULL,1228,22.148133,-159.31765,0,NULL,NULL,80),(82,145,3,1,0,'373P States Ln E',373,'P',NULL,'States','Ln','E',NULL,'Subscriptions Dept',NULL,NULL,'Ripplemead',1,1045,NULL,'24150',NULL,1228,37.351691,-80.67726,0,NULL,NULL,NULL),(83,147,2,1,0,'373P States Ln E',373,'P',NULL,'States','Ln','E',NULL,'Subscriptions Dept',NULL,NULL,'Ripplemead',1,1045,NULL,'24150',NULL,1228,37.351691,-80.67726,0,NULL,NULL,82),(84,184,3,1,0,'448P Bay Path E',448,'P',NULL,'Bay','Path','E',NULL,'Disbursements',NULL,NULL,'Cameron',1,1048,NULL,'54822',NULL,1228,45.401622,-91.72727,0,NULL,NULL,NULL),(85,173,2,1,0,'448P Bay Path E',448,'P',NULL,'Bay','Path','E',NULL,'Disbursements',NULL,NULL,'Cameron',1,1048,NULL,'54822',NULL,1228,45.401622,-91.72727,0,NULL,NULL,84),(86,156,3,1,0,'274P Main Path N',274,'P',NULL,'Main','Path','N',NULL,'Donor Relations',NULL,NULL,'Ridgeland',1,1023,NULL,'39157',NULL,1228,32.420814,-90.13134,0,NULL,NULL,NULL),(87,150,2,1,0,'274P Main Path N',274,'P',NULL,'Main','Path','N',NULL,'Donor Relations',NULL,NULL,'Ridgeland',1,1023,NULL,'39157',NULL,1228,32.420814,-90.13134,0,NULL,NULL,86),(88,143,3,1,0,'613R Martin Luther King Pl W',613,'R',NULL,'Martin Luther King','Pl','W',NULL,'Payables Dept.',NULL,NULL,'Emerado',1,1033,NULL,'58228',NULL,1228,47.882652,-97.35564,0,NULL,NULL,NULL),(89,118,2,0,0,'613R Martin Luther King Pl W',613,'R',NULL,'Martin Luther King','Pl','W',NULL,'Payables Dept.',NULL,NULL,'Emerado',1,1033,NULL,'58228',NULL,1228,47.882652,-97.35564,0,NULL,NULL,88),(90,121,3,1,0,'438V Maple Ln W',438,'V',NULL,'Maple','Ln','W',NULL,'Community Relations',NULL,NULL,'Anawalt',1,1047,NULL,'24808',NULL,1228,37.338242,-81.43081,0,NULL,NULL,NULL),(91,16,2,1,0,'438V Maple Ln W',438,'V',NULL,'Maple','Ln','W',NULL,'Community Relations',NULL,NULL,'Anawalt',1,1047,NULL,'24808',NULL,1228,37.338242,-81.43081,0,NULL,NULL,90),(92,139,3,1,0,'986T Cadell Path NE',986,'T',NULL,'Cadell','Path','NE',NULL,'Attn: Accounting',NULL,NULL,'Argillite',1,1016,NULL,'41121',NULL,1228,38.456608,-82.82615,0,NULL,NULL,NULL),(93,43,2,1,0,'986T Cadell Path NE',986,'T',NULL,'Cadell','Path','NE',NULL,'Attn: Accounting',NULL,NULL,'Argillite',1,1016,NULL,'41121',NULL,1228,38.456608,-82.82615,0,NULL,NULL,92),(94,137,3,1,0,'469F Second Dr NW',469,'F',NULL,'Second','Dr','NW',NULL,'Attn: Accounting',NULL,NULL,'Pasadena',1,1004,NULL,'91123',NULL,1228,33.786594,-118.298662,0,NULL,NULL,NULL),(95,183,1,1,0,'26E College Ave S',26,'E',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Church Hill',1,1041,NULL,'37642',NULL,1228,36.534489,-82.71292,0,NULL,NULL,39),(96,198,1,1,0,'26E College Ave S',26,'E',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Church Hill',1,1041,NULL,'37642',NULL,1228,36.534489,-82.71292,0,NULL,NULL,39),(97,105,1,0,0,'26E College Ave S',26,'E',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Church Hill',1,1041,NULL,'37642',NULL,1228,36.534489,-82.71292,0,NULL,NULL,39),(98,157,1,1,0,'26E College Ave S',26,'E',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Church Hill',1,1041,NULL,'37642',NULL,1228,36.534489,-82.71292,0,NULL,NULL,39),(99,64,1,1,0,'466C Bay Rd NW',466,'C',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Rockford',1,1012,NULL,'61101',NULL,1228,42.292221,-89.12574,0,NULL,NULL,40),(100,35,1,1,0,'466C Bay Rd NW',466,'C',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Rockford',1,1012,NULL,'61101',NULL,1228,42.292221,-89.12574,0,NULL,NULL,40),(101,127,1,1,0,'466C Bay Rd NW',466,'C',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Rockford',1,1012,NULL,'61101',NULL,1228,42.292221,-89.12574,0,NULL,NULL,40),(102,181,1,1,0,'466C Bay Rd NW',466,'C',NULL,'Bay','Rd','NW',NULL,NULL,NULL,NULL,'Rockford',1,1012,NULL,'61101',NULL,1228,42.292221,-89.12574,0,NULL,NULL,40),(103,70,1,1,0,'476N College Ave S',476,'N',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Shermans Dale',1,1037,NULL,'17090',NULL,1228,40.332785,-77.18464,0,NULL,NULL,41),(104,36,1,1,0,'476N College Ave S',476,'N',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Shermans Dale',1,1037,NULL,'17090',NULL,1228,40.332785,-77.18464,0,NULL,NULL,41),(105,52,1,1,0,'476N College Ave S',476,'N',NULL,'College','Ave','S',NULL,NULL,NULL,NULL,'Shermans Dale',1,1037,NULL,'17090',NULL,1228,40.332785,-77.18464,0,NULL,NULL,41),(106,167,1,1,0,'498A Dowlen Ln NW',498,'A',NULL,'Dowlen','Ln','NW',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10184',NULL,1228,40.780751,-73.977182,0,NULL,NULL,NULL),(107,47,1,1,0,'700M Woodbridge Ave SW',700,'M',NULL,'Woodbridge','Ave','SW',NULL,NULL,NULL,NULL,'Cocoa',1,1008,NULL,'32923',NULL,1228,28.427535,-80.828991,0,NULL,NULL,42),(108,153,1,0,0,'700M Woodbridge Ave SW',700,'M',NULL,'Woodbridge','Ave','SW',NULL,NULL,NULL,NULL,'Cocoa',1,1008,NULL,'32923',NULL,1228,28.427535,-80.828991,0,NULL,NULL,42),(109,144,1,1,0,'700M Woodbridge Ave SW',700,'M',NULL,'Woodbridge','Ave','SW',NULL,NULL,NULL,NULL,'Cocoa',1,1008,NULL,'32923',NULL,1228,28.427535,-80.828991,0,NULL,NULL,42),(110,43,1,0,0,'951B Dowlen Rd SW',951,'B',NULL,'Dowlen','Rd','SW',NULL,NULL,NULL,NULL,'Grants Pass',1,1036,NULL,'97528',NULL,1228,42.396421,-123.535027,0,NULL,NULL,NULL),(111,140,1,1,0,'488A Maple Path SW',488,'A',NULL,'Maple','Path','SW',NULL,NULL,NULL,NULL,'Hartington',1,1026,NULL,'68739',NULL,1228,42.624108,-97.25267,0,NULL,NULL,43),(112,146,1,0,0,'488A Maple Path SW',488,'A',NULL,'Maple','Path','SW',NULL,NULL,NULL,NULL,'Hartington',1,1026,NULL,'68739',NULL,1228,42.624108,-97.25267,0,NULL,NULL,43),(113,150,1,0,0,'488A Maple Path SW',488,'A',NULL,'Maple','Path','SW',NULL,NULL,NULL,NULL,'Hartington',1,1026,NULL,'68739',NULL,1228,42.624108,-97.25267,0,NULL,NULL,43),(114,28,1,1,0,'627R Jackson Ave SW',627,'R',NULL,'Jackson','Ave','SW',NULL,NULL,NULL,NULL,'Lena',1,1017,NULL,'71447',NULL,1228,31.452874,-92.79465,0,NULL,NULL,NULL),(115,13,1,1,0,'535Y Second Rd S',535,'Y',NULL,'Second','Rd','S',NULL,NULL,NULL,NULL,'East Galesburg',1,1012,NULL,'61430',NULL,1228,40.94399,-90.31205,0,NULL,NULL,44),(116,98,1,1,0,'535Y Second Rd S',535,'Y',NULL,'Second','Rd','S',NULL,NULL,NULL,NULL,'East Galesburg',1,1012,NULL,'61430',NULL,1228,40.94399,-90.31205,0,NULL,NULL,44),(117,176,1,1,0,'535Y Second Rd S',535,'Y',NULL,'Second','Rd','S',NULL,NULL,NULL,NULL,'East Galesburg',1,1012,NULL,'61430',NULL,1228,40.94399,-90.31205,0,NULL,NULL,44),(118,173,1,0,0,'177A Dowlen Ln S',177,'A',NULL,'Dowlen','Ln','S',NULL,NULL,NULL,NULL,'Pauline',1,1039,NULL,'29374',NULL,1228,34.783908,-81.85468,0,NULL,NULL,NULL),(119,147,1,0,0,'752C Dowlen St NE',752,'C',NULL,'Dowlen','St','NE',NULL,NULL,NULL,NULL,'Rochert',1,1022,NULL,'56578',NULL,1228,46.920986,-95.66842,0,NULL,NULL,45),(120,178,1,1,0,'752C Dowlen St NE',752,'C',NULL,'Dowlen','St','NE',NULL,NULL,NULL,NULL,'Rochert',1,1022,NULL,'56578',NULL,1228,46.920986,-95.66842,0,NULL,NULL,45),(121,135,1,1,0,'752C Dowlen St NE',752,'C',NULL,'Dowlen','St','NE',NULL,NULL,NULL,NULL,'Rochert',1,1022,NULL,'56578',NULL,1228,46.920986,-95.66842,0,NULL,NULL,45),(122,79,1,1,0,'752C Dowlen St NE',752,'C',NULL,'Dowlen','St','NE',NULL,NULL,NULL,NULL,'Rochert',1,1022,NULL,'56578',NULL,1228,46.920986,-95.66842,0,NULL,NULL,45),(123,90,1,0,0,'619Z States Rd N',619,'Z',NULL,'States','Rd','N',NULL,NULL,NULL,NULL,'Philadelphia',1,1037,NULL,'19140',NULL,1228,40.012212,-75.14503,0,NULL,NULL,46),(124,104,1,1,0,'619Z States Rd N',619,'Z',NULL,'States','Rd','N',NULL,NULL,NULL,NULL,'Philadelphia',1,1037,NULL,'19140',NULL,1228,40.012212,-75.14503,0,NULL,NULL,46),(125,8,1,1,0,'619Z States Rd N',619,'Z',NULL,'States','Rd','N',NULL,NULL,NULL,NULL,'Philadelphia',1,1037,NULL,'19140',NULL,1228,40.012212,-75.14503,0,NULL,NULL,46),(126,109,1,1,0,'619Z States Rd N',619,'Z',NULL,'States','Rd','N',NULL,NULL,NULL,NULL,'Philadelphia',1,1037,NULL,'19140',NULL,1228,40.012212,-75.14503,0,NULL,NULL,46),(127,182,1,1,0,'76H Woodbridge Dr SE',76,'H',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79929',NULL,1228,31.694842,-106.299987,0,NULL,NULL,47),(128,41,1,1,0,'76H Woodbridge Dr SE',76,'H',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79929',NULL,1228,31.694842,-106.299987,0,NULL,NULL,47),(129,56,1,1,0,'76H Woodbridge Dr SE',76,'H',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'79929',NULL,1228,31.694842,-106.299987,0,NULL,NULL,47),(130,168,1,1,0,'681E Van Ness Path W',681,'E',NULL,'Van Ness','Path','W',NULL,NULL,NULL,NULL,'Scottsdale',1,1002,NULL,'85266',NULL,1228,33.276539,-112.18717,0,NULL,NULL,NULL),(131,201,1,1,0,'356H Bay Way SW',356,'H',NULL,'Bay','Way','SW',NULL,NULL,NULL,NULL,'Keatchie',1,1017,NULL,'71046',NULL,1228,32.168532,-93.95402,0,NULL,NULL,48),(132,138,1,1,0,'356H Bay Way SW',356,'H',NULL,'Bay','Way','SW',NULL,NULL,NULL,NULL,'Keatchie',1,1017,NULL,'71046',NULL,1228,32.168532,-93.95402,0,NULL,NULL,48),(133,197,1,1,0,'356H Bay Way SW',356,'H',NULL,'Bay','Way','SW',NULL,NULL,NULL,NULL,'Keatchie',1,1017,NULL,'71046',NULL,1228,32.168532,-93.95402,0,NULL,NULL,48),(134,88,1,1,0,'356H Bay Way SW',356,'H',NULL,'Bay','Way','SW',NULL,NULL,NULL,NULL,'Keatchie',1,1017,NULL,'71046',NULL,1228,32.168532,-93.95402,0,NULL,NULL,48),(135,126,1,1,0,'412S Jackson Dr N',412,'S',NULL,'Jackson','Dr','N',NULL,NULL,NULL,NULL,'Burke',1,1045,NULL,'22009',NULL,1228,38.831813,-77.288755,0,NULL,NULL,49),(136,55,1,1,0,'412S Jackson Dr N',412,'S',NULL,'Jackson','Dr','N',NULL,NULL,NULL,NULL,'Burke',1,1045,NULL,'22009',NULL,1228,38.831813,-77.288755,0,NULL,NULL,49),(137,161,1,1,0,'412S Jackson Dr N',412,'S',NULL,'Jackson','Dr','N',NULL,NULL,NULL,NULL,'Burke',1,1045,NULL,'22009',NULL,1228,38.831813,-77.288755,0,NULL,NULL,49),(138,132,1,1,0,'412S Jackson Dr N',412,'S',NULL,'Jackson','Dr','N',NULL,NULL,NULL,NULL,'Burke',1,1045,NULL,'22009',NULL,1228,38.831813,-77.288755,0,NULL,NULL,49),(139,2,1,1,0,'497J Maple Pl S',497,'J',NULL,'Maple','Pl','S',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'88516',NULL,1228,31.694842,-106.299987,0,NULL,NULL,50),(140,29,1,1,0,'497J Maple Pl S',497,'J',NULL,'Maple','Pl','S',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'88516',NULL,1228,31.694842,-106.299987,0,NULL,NULL,50),(141,34,1,1,0,'497J Maple Pl S',497,'J',NULL,'Maple','Pl','S',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'88516',NULL,1228,31.694842,-106.299987,0,NULL,NULL,50),(142,84,1,1,0,'497J Maple Pl S',497,'J',NULL,'Maple','Pl','S',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'88516',NULL,1228,31.694842,-106.299987,0,NULL,NULL,50),(143,78,1,1,0,'873X Lincoln Path NW',873,'X',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kings Mountain',1,1032,NULL,'28086',NULL,1228,35.241188,-81.3614,0,NULL,NULL,51),(144,163,1,1,0,'873X Lincoln Path NW',873,'X',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kings Mountain',1,1032,NULL,'28086',NULL,1228,35.241188,-81.3614,0,NULL,NULL,51),(145,76,1,1,0,'873X Lincoln Path NW',873,'X',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kings Mountain',1,1032,NULL,'28086',NULL,1228,35.241188,-81.3614,0,NULL,NULL,51),(146,44,1,1,0,'34T States Ln S',34,'T',NULL,'States','Ln','S',NULL,NULL,NULL,NULL,'Topeka',1,1015,NULL,'66637',NULL,1228,39.042939,-95.769657,0,NULL,NULL,NULL),(147,117,1,1,0,'106D Dowlen Pl NW',106,'D',NULL,'Dowlen','Pl','NW',NULL,NULL,NULL,NULL,'Riverside',1,1004,NULL,'92503',NULL,1228,33.91355,-117.46052,0,NULL,NULL,52),(148,166,1,1,0,'106D Dowlen Pl NW',106,'D',NULL,'Dowlen','Pl','NW',NULL,NULL,NULL,NULL,'Riverside',1,1004,NULL,'92503',NULL,1228,33.91355,-117.46052,0,NULL,NULL,52),(149,200,1,0,0,'106D Dowlen Pl NW',106,'D',NULL,'Dowlen','Pl','NW',NULL,NULL,NULL,NULL,'Riverside',1,1004,NULL,'92503',NULL,1228,33.91355,-117.46052,0,NULL,NULL,52),(150,39,1,1,0,'106D Dowlen Pl NW',106,'D',NULL,'Dowlen','Pl','NW',NULL,NULL,NULL,NULL,'Riverside',1,1004,NULL,'92503',NULL,1228,33.91355,-117.46052,0,NULL,NULL,52),(151,115,1,1,0,'268D El Camino Dr E',268,'D',NULL,'El Camino','Dr','E',NULL,NULL,NULL,NULL,'Sarasota',1,1008,NULL,'34277',NULL,1228,27.167521,-82.380967,0,NULL,NULL,53),(152,53,1,1,0,'268D El Camino Dr E',268,'D',NULL,'El Camino','Dr','E',NULL,NULL,NULL,NULL,'Sarasota',1,1008,NULL,'34277',NULL,1228,27.167521,-82.380967,0,NULL,NULL,53),(153,100,1,1,0,'268D El Camino Dr E',268,'D',NULL,'El Camino','Dr','E',NULL,NULL,NULL,NULL,'Sarasota',1,1008,NULL,'34277',NULL,1228,27.167521,-82.380967,0,NULL,NULL,53),(154,159,1,0,0,'268D El Camino Dr E',268,'D',NULL,'El Camino','Dr','E',NULL,NULL,NULL,NULL,'Sarasota',1,1008,NULL,'34277',NULL,1228,27.167521,-82.380967,0,NULL,NULL,53),(155,160,1,1,0,'412D Pine Ave NW',412,'D',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Kenwood',1,1004,NULL,'95452',NULL,1228,38.414061,-122.54668,0,NULL,NULL,54),(156,120,1,1,0,'412D Pine Ave NW',412,'D',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Kenwood',1,1004,NULL,'95452',NULL,1228,38.414061,-122.54668,0,NULL,NULL,54),(157,186,1,1,0,'412D Pine Ave NW',412,'D',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Kenwood',1,1004,NULL,'95452',NULL,1228,38.414061,-122.54668,0,NULL,NULL,54),(158,189,1,1,0,'142B Lincoln Pl NE',142,'B',NULL,'Lincoln','Pl','NE',NULL,NULL,NULL,NULL,'Carol Stream',1,1012,NULL,'60132',NULL,1228,41.839679,-88.088716,0,NULL,NULL,NULL),(159,131,1,1,0,'423Y Dowlen Pl S',423,'Y',NULL,'Dowlen','Pl','S',NULL,NULL,NULL,NULL,'Hettick',1,1012,NULL,'62649',NULL,1228,39.348487,-90.08365,0,NULL,NULL,55),(160,46,1,1,0,'423Y Dowlen Pl S',423,'Y',NULL,'Dowlen','Pl','S',NULL,NULL,NULL,NULL,'Hettick',1,1012,NULL,'62649',NULL,1228,39.348487,-90.08365,0,NULL,NULL,55),(161,21,1,1,0,'423Y Dowlen Pl S',423,'Y',NULL,'Dowlen','Pl','S',NULL,NULL,NULL,NULL,'Hettick',1,1012,NULL,'62649',NULL,1228,39.348487,-90.08365,0,NULL,NULL,55),(162,49,1,1,0,'347B Bay Ave SW',347,'B',NULL,'Bay','Ave','SW',NULL,NULL,NULL,NULL,'Albuquerque',1,1030,NULL,'87176',NULL,1228,35.044339,-106.672872,0,NULL,NULL,NULL),(163,171,1,1,0,'166V Bay Way S',166,'V',NULL,'Bay','Way','S',NULL,NULL,NULL,NULL,'Martinsburg',1,1034,NULL,'43037',NULL,1228,40.27453,-82.34436,0,NULL,NULL,56),(164,25,1,1,0,'166V Bay Way S',166,'V',NULL,'Bay','Way','S',NULL,NULL,NULL,NULL,'Martinsburg',1,1034,NULL,'43037',NULL,1228,40.27453,-82.34436,0,NULL,NULL,56),(165,111,1,1,0,'166V Bay Way S',166,'V',NULL,'Bay','Way','S',NULL,NULL,NULL,NULL,'Martinsburg',1,1034,NULL,'43037',NULL,1228,40.27453,-82.34436,0,NULL,NULL,56),(166,125,1,1,0,'166V Bay Way S',166,'V',NULL,'Bay','Way','S',NULL,NULL,NULL,NULL,'Martinsburg',1,1034,NULL,'43037',NULL,1228,40.27453,-82.34436,0,NULL,NULL,56),(167,63,1,1,0,'883J Pine Ave E',883,'J',NULL,'Pine','Ave','E',NULL,NULL,NULL,NULL,'Kahuku',1,1010,NULL,'96731',NULL,1228,21.68762,-157.95903,0,NULL,NULL,57),(168,20,1,1,0,'883J Pine Ave E',883,'J',NULL,'Pine','Ave','E',NULL,NULL,NULL,NULL,'Kahuku',1,1010,NULL,'96731',NULL,1228,21.68762,-157.95903,0,NULL,NULL,57),(169,11,1,1,0,'883J Pine Ave E',883,'J',NULL,'Pine','Ave','E',NULL,NULL,NULL,NULL,'Kahuku',1,1010,NULL,'96731',NULL,1228,21.68762,-157.95903,0,NULL,NULL,57),(170,6,1,1,0,'160N Green Path N',160,'N',NULL,'Green','Path','N',NULL,NULL,NULL,NULL,'Laquey',1,1024,NULL,'65534',NULL,1228,37.689335,-92.28363,0,NULL,NULL,NULL),(171,101,1,1,0,'680O States Dr E',680,'O',NULL,'States','Dr','E',NULL,NULL,NULL,NULL,'Russell',1,1014,NULL,'50238',NULL,1228,40.962051,-93.18373,0,NULL,NULL,58),(172,180,1,0,0,'680O States Dr E',680,'O',NULL,'States','Dr','E',NULL,NULL,NULL,NULL,'Russell',1,1014,NULL,'50238',NULL,1228,40.962051,-93.18373,0,NULL,NULL,58),(173,32,1,1,0,'680O States Dr E',680,'O',NULL,'States','Dr','E',NULL,NULL,NULL,NULL,'Russell',1,1014,NULL,'50238',NULL,1228,40.962051,-93.18373,0,NULL,NULL,58),(174,151,1,1,0,'680O States Dr E',680,'O',NULL,'States','Dr','E',NULL,NULL,NULL,NULL,'Russell',1,1014,NULL,'50238',NULL,1228,40.962051,-93.18373,0,NULL,NULL,58),(175,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),(176,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),(177,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,187,1,1,0,'621V Cadell Path NE',621,'V',NULL,'Cadell','Path','NE',NULL,NULL,NULL,NULL,'East Quogue',1,1031,NULL,'11942',NULL,1228,40.84867,-72.57794,0,NULL,NULL,NULL),(2,155,1,1,0,'825I Caulder Dr SW',825,'I',NULL,'Caulder','Dr','SW',NULL,NULL,NULL,NULL,'Gig Harbor',1,1046,NULL,'98329',NULL,1228,47.378121,-122.7222,0,NULL,NULL,NULL),(3,62,1,1,0,'828G Northpoint Ave NW',828,'G',NULL,'Northpoint','Ave','NW',NULL,NULL,NULL,NULL,'Greenville',1,1039,NULL,'29605',NULL,1228,34.798035,-82.39289,0,NULL,NULL,NULL),(4,87,1,1,0,'794P Cadell St E',794,'P',NULL,'Cadell','St','E',NULL,NULL,NULL,NULL,'Tucson',1,1002,NULL,'85746',NULL,1228,32.126223,-111.04599,0,NULL,NULL,NULL),(5,129,1,1,0,'168Y College Ave NW',168,'Y',NULL,'College','Ave','NW',NULL,NULL,NULL,NULL,'Dagus Mines',1,1037,NULL,'15831',NULL,1228,41.304782,-78.621286,0,NULL,NULL,NULL),(6,112,1,1,0,'469Q Van Ness Rd NE',469,'Q',NULL,'Van Ness','Rd','NE',NULL,NULL,NULL,NULL,'Mendocino',1,1004,NULL,'95460',NULL,1228,39.311858,-123.79166,0,NULL,NULL,NULL),(7,67,1,1,0,'580Q Maple St E',580,'Q',NULL,'Maple','St','E',NULL,NULL,NULL,NULL,'Robesonia',1,1037,NULL,'19551',NULL,1228,40.357034,-76.13741,0,NULL,NULL,NULL),(8,198,1,1,0,'848X Bay Way NW',848,'X',NULL,'Bay','Way','NW',NULL,NULL,NULL,NULL,'West Harrison',1,1013,NULL,'47060',NULL,1228,39.288178,-84.87774,0,NULL,NULL,NULL),(9,181,1,1,0,'514X Woodbridge Dr SE',514,'X',NULL,'Woodbridge','Dr','SE',NULL,NULL,NULL,NULL,'Millersburg',1,1034,NULL,'44654',NULL,1228,40.542339,-81.87856,0,NULL,NULL,NULL),(10,76,1,1,0,'77P Green Ln N',77,'P',NULL,'Green','Ln','N',NULL,NULL,NULL,NULL,'Trent',1,1040,NULL,'57065',NULL,1228,43.917178,-96.65524,0,NULL,NULL,NULL),(11,153,1,1,0,'765M Jackson Dr NW',765,'M',NULL,'Jackson','Dr','NW',NULL,NULL,NULL,NULL,'Saltillo',1,1023,NULL,'38866',NULL,1228,34.360547,-88.68079,0,NULL,NULL,NULL),(12,79,1,1,0,'139Q Green Ln NW',139,'Q',NULL,'Green','Ln','NW',NULL,NULL,NULL,NULL,'Bakersfield',1,1044,NULL,'05441',NULL,1228,44.772886,-72.78854,0,NULL,NULL,NULL),(13,64,1,1,0,'303G Cadell Way NE',303,'G',NULL,'Cadell','Way','NE',NULL,NULL,NULL,NULL,'Arlington',1,1045,NULL,'22214',NULL,1228,38.880811,-77.11295,0,NULL,NULL,NULL),(14,120,1,1,0,'718R Caulder Path S',718,'R',NULL,'Caulder','Path','S',NULL,NULL,NULL,NULL,'Readfield',1,1048,NULL,'54969',NULL,1228,44.269991,-88.775457,0,NULL,NULL,NULL),(15,6,1,1,0,'208U Jackson Pl E',208,'U',NULL,'Jackson','Pl','E',NULL,NULL,NULL,NULL,'Orlando',1,1008,NULL,'32806',NULL,1228,28.51483,-81.36054,0,NULL,NULL,NULL),(16,201,1,1,0,'49F Martin Luther King Dr NW',49,'F',NULL,'Martin Luther King','Dr','NW',NULL,NULL,NULL,NULL,'Flint',1,1021,NULL,'48550',NULL,1228,43.034927,-83.688706,0,NULL,NULL,NULL),(17,171,1,1,0,'602P Van Ness Rd W',602,'P',NULL,'Van Ness','Rd','W',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10114',NULL,1228,40.780751,-73.977182,0,NULL,NULL,NULL),(18,70,1,1,0,'472J Woodbridge Dr E',472,'J',NULL,'Woodbridge','Dr','E',NULL,NULL,NULL,NULL,'Pointe Aux Pins',1,1021,NULL,'49775',NULL,1228,45.758378,-84.46507,0,NULL,NULL,NULL),(19,147,1,1,0,'363B Main Ln S',363,'B',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Chestnut Hill',1,1020,NULL,'02467',NULL,1228,42.321997,-71.17314,0,NULL,NULL,NULL),(20,73,1,1,0,'295P Woodbridge Path NW',295,'P',NULL,'Woodbridge','Path','NW',NULL,NULL,NULL,NULL,'Houtzdale',1,1037,NULL,'16698',NULL,1228,40.989115,-78.422403,0,NULL,NULL,NULL),(21,34,1,1,0,'818F Second Way S',818,'F',NULL,'Second','Way','S',NULL,NULL,NULL,NULL,'Glencoe',1,1035,NULL,'74032',NULL,1228,36.214419,-96.91672,0,NULL,NULL,NULL),(22,16,1,1,0,'89A Dowlen Ave S',89,'A',NULL,'Dowlen','Ave','S',NULL,NULL,NULL,NULL,'Hadensville',1,1045,NULL,'23067',NULL,1228,37.825208,-77.989878,0,NULL,NULL,NULL),(23,86,1,1,0,'168D Pine Ave N',168,'D',NULL,'Pine','Ave','N',NULL,NULL,NULL,NULL,'West Baden Springs',1,1013,NULL,'47469',NULL,1228,38.584248,-86.61296,0,NULL,NULL,NULL),(24,89,1,1,0,'713G Van Ness Rd E',713,'G',NULL,'Van Ness','Rd','E',NULL,NULL,NULL,NULL,'Delbarton',1,1047,NULL,'25670',NULL,1228,37.705946,-82.14416,0,NULL,NULL,NULL),(25,92,1,1,0,'482N Second Way NW',482,'N',NULL,'Second','Way','NW',NULL,NULL,NULL,NULL,'Flint Hill',1,1045,NULL,'22627',NULL,1228,38.765004,-78.0948,0,NULL,NULL,NULL),(26,36,1,1,0,'236E Dowlen Ln SE',236,'E',NULL,'Dowlen','Ln','SE',NULL,NULL,NULL,NULL,'West Paris',1,1018,NULL,'04289',NULL,1228,44.325285,-70.52451,0,NULL,NULL,NULL),(27,2,1,1,0,'406I Main Blvd SE',406,'I',NULL,'Main','Blvd','SE',NULL,NULL,NULL,NULL,'Saint Cloud',1,1048,NULL,'53079',NULL,1228,43.808108,-88.18164,0,NULL,NULL,NULL),(28,55,1,1,0,'818A Dowlen Path N',818,'A',NULL,'Dowlen','Path','N',NULL,NULL,NULL,NULL,'Hopedale',1,1012,NULL,'61747',NULL,1228,40.422027,-89.42614,0,NULL,NULL,NULL),(29,11,1,1,0,'747F Bay St E',747,'F',NULL,'Bay','St','E',NULL,NULL,NULL,NULL,'Universal',1,1013,NULL,'47884',NULL,1228,39.622536,-87.45451,0,NULL,NULL,NULL),(30,121,1,1,0,'370H Martin Luther King Rd S',370,'H',NULL,'Martin Luther King','Rd','S',NULL,NULL,NULL,NULL,'Minneapolis',1,1022,NULL,'55449',NULL,1228,45.168287,-93.20001,0,NULL,NULL,NULL),(31,102,1,1,0,'139H Beech Ln NW',139,'H',NULL,'Beech','Ln','NW',NULL,NULL,NULL,NULL,'Astor',1,1008,NULL,'32102',NULL,1228,29.174417,-81.56319,0,NULL,NULL,NULL),(32,135,1,1,0,'877Q Maple Ln SE',877,'Q',NULL,'Maple','Ln','SE',NULL,NULL,NULL,NULL,'Van',1,1047,NULL,'25206',NULL,1228,37.972887,-81.71468,0,NULL,NULL,NULL),(33,9,1,1,0,'605S Second St NW',605,'S',NULL,'Second','St','NW',NULL,NULL,NULL,NULL,'Jacksboro',1,1041,NULL,'37757',NULL,1228,36.326509,-84.17277,0,NULL,NULL,NULL),(34,77,1,1,0,'223C Main Dr S',223,'C',NULL,'Main','Dr','S',NULL,NULL,NULL,NULL,'Alex',1,1035,NULL,'73002',NULL,1228,34.936221,-97.74453,0,NULL,NULL,NULL),(35,97,1,1,0,'881Q Jackson Path N',881,'Q',NULL,'Jackson','Path','N',NULL,NULL,NULL,NULL,'Rogersville',1,1000,NULL,'35652',NULL,1228,34.843309,-87.29937,0,NULL,NULL,NULL),(36,39,1,1,0,'230X Beech Dr NW',230,'X',NULL,'Beech','Dr','NW',NULL,NULL,NULL,NULL,'Holstein',1,1026,NULL,'68950',NULL,1228,40.465821,-98.65405,0,NULL,NULL,NULL),(37,111,1,1,0,'448N Lincoln Rd SW',448,'N',NULL,'Lincoln','Rd','SW',NULL,NULL,NULL,NULL,'Robbinston',1,1018,NULL,'04671',NULL,1228,45.076626,-67.14057,0,NULL,NULL,NULL),(38,118,1,1,0,'495X Maple Rd E',495,'X',NULL,'Maple','Rd','E',NULL,NULL,NULL,NULL,'Pahoa',1,1010,NULL,'96778',NULL,1228,19.494625,-154.9266,0,NULL,NULL,NULL),(39,148,1,1,0,'1U Dowlen Pl SE',1,'U',NULL,'Dowlen','Pl','SE',NULL,NULL,NULL,NULL,'Ada',1,1021,NULL,'49357',NULL,1228,43.031413,-85.550267,0,NULL,NULL,NULL),(40,81,1,1,0,'436R El Camino Rd SW',436,'R',NULL,'El Camino','Rd','SW',NULL,NULL,NULL,NULL,'Ecleto',1,1042,NULL,'78111',NULL,1228,28.944864,-97.882815,0,NULL,NULL,NULL),(41,119,1,1,0,'165Y States Way W',165,'Y',NULL,'States','Way','W',NULL,NULL,NULL,NULL,'Oneida',1,1037,NULL,'18242',NULL,1228,40.90757,-76.12636,0,NULL,NULL,NULL),(42,162,1,1,0,'634Q Pine Rd NW',634,'Q',NULL,'Pine','Rd','NW',NULL,NULL,NULL,NULL,'Linn Grove',1,1014,NULL,'51033',NULL,1228,42.907563,-95.25334,0,NULL,NULL,NULL),(43,139,1,1,0,'665I Beech Ln NE',665,'I',NULL,'Beech','Ln','NE',NULL,NULL,NULL,NULL,'Clemson',1,1039,NULL,'29632',NULL,1228,34.847372,-82.710126,0,NULL,NULL,NULL),(44,49,1,1,0,'944A Jackson Ln NW',944,'A',NULL,'Jackson','Ln','NW',NULL,NULL,NULL,NULL,'Des Moines',1,1014,NULL,'50332',NULL,1228,41.672687,-93.572173,0,NULL,NULL,NULL),(45,80,1,1,0,'147P Second Way W',147,'P',NULL,'Second','Way','W',NULL,NULL,NULL,NULL,'Linville Falls',1,1032,NULL,'28647',NULL,1228,35.779182,-81.675545,0,NULL,NULL,NULL),(46,122,1,1,0,'791V Pine Way E',791,'V',NULL,'Pine','Way','E',NULL,NULL,NULL,NULL,'Williamson',1,1037,NULL,'17270',NULL,1228,39.851731,-77.7993,0,NULL,NULL,NULL),(47,157,1,1,0,'860Y Second Ave SE',860,'Y',NULL,'Second','Ave','SE',NULL,NULL,NULL,NULL,'Alexander',1,1014,NULL,'50420',NULL,1228,42.811536,-93.46844,0,NULL,NULL,NULL),(48,107,1,1,0,'782Q Northpoint Blvd SE',782,'Q',NULL,'Northpoint','Blvd','SE',NULL,NULL,NULL,NULL,'Hansford',1,1047,NULL,'25103',NULL,1228,38.202669,-81.39427,0,NULL,NULL,NULL),(49,27,1,1,0,'499Q Woodbridge Way NW',499,'Q',NULL,'Woodbridge','Way','NW',NULL,NULL,NULL,NULL,'Falling Waters',1,1047,NULL,'25419',NULL,1228,39.58132,-77.8804,0,NULL,NULL,NULL),(50,14,1,1,0,'208G Maple Way NE',208,'G',NULL,'Maple','Way','NE',NULL,NULL,NULL,NULL,'Somerset',1,1034,NULL,'43783',NULL,1228,39.801679,-82.29166,0,NULL,NULL,NULL),(51,74,1,1,0,'262Q Martin Luther King Way NE',262,'Q',NULL,'Martin Luther King','Way','NE',NULL,NULL,NULL,NULL,'Lauderdale',1,1023,NULL,'39335',NULL,1228,32.517145,-88.51801,0,NULL,NULL,NULL),(52,154,1,1,0,'398H Main Ave SW',398,'H',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'De Witt',1,1003,NULL,'72042',NULL,1228,34.283347,-91.32515,0,NULL,NULL,NULL),(53,196,1,1,0,'48Q Woodbridge Path E',48,'Q',NULL,'Woodbridge','Path','E',NULL,NULL,NULL,NULL,'Plainfield',1,1029,NULL,'07063',NULL,1228,40.604252,-74.44612,0,NULL,NULL,NULL),(54,52,1,1,0,'102L Caulder Ave W',102,'L',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93727',NULL,1228,36.753177,-119.69703,0,NULL,NULL,NULL),(55,21,1,1,0,'488J Northpoint Way SE',488,'J',NULL,'Northpoint','Way','SE',NULL,NULL,NULL,NULL,'Repton',1,1000,NULL,'36475',NULL,1228,31.410205,-87.22474,0,NULL,NULL,NULL),(56,31,1,1,0,'680Q Beech St NE',680,'Q',NULL,'Beech','St','NE',NULL,NULL,NULL,NULL,'Seattle',1,1046,NULL,'98164',NULL,1228,47.606139,-122.33186,0,NULL,NULL,NULL),(57,143,1,1,0,'938Y Caulder Ln N',938,'Y',NULL,'Caulder','Ln','N',NULL,NULL,NULL,NULL,'Lake Butter',1,1008,NULL,'34876',NULL,1228,28.505419,-81.571248,0,NULL,NULL,NULL),(58,110,1,1,0,'255Z College Rd E',255,'Z',NULL,'College','Rd','E',NULL,NULL,NULL,NULL,'Mountainburg',1,1003,NULL,'72946',NULL,1228,35.649503,-94.15357,0,NULL,NULL,NULL),(59,71,1,1,0,'173V Beech Way SW',173,'V',NULL,'Beech','Way','SW',NULL,NULL,NULL,NULL,'Stitzer',1,1048,NULL,'53825',NULL,1228,42.928048,-90.56703,0,NULL,NULL,NULL),(60,33,1,1,0,'488Y Caulder Blvd S',488,'Y',NULL,'Caulder','Blvd','S',NULL,NULL,NULL,NULL,'Tulsa',1,1035,NULL,'74115',NULL,1228,36.180144,-95.91129,0,NULL,NULL,NULL),(61,50,1,1,0,'873Q Cadell Ln W',873,'Q',NULL,'Cadell','Ln','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27640',NULL,1228,35.797692,-78.625265,0,NULL,NULL,NULL),(62,164,1,1,0,'771C Jackson Blvd S',771,'C',NULL,'Jackson','Blvd','S',NULL,NULL,NULL,NULL,'Newport',1,1013,NULL,'47966',NULL,1228,39.885739,-87.4078,0,NULL,NULL,NULL),(63,32,1,1,0,'387A States Path E',387,'A',NULL,'States','Path','E',NULL,NULL,NULL,NULL,'Braggs',1,1035,NULL,'74423',NULL,1228,35.668132,-95.18582,0,NULL,NULL,NULL),(64,200,1,1,0,'960U El Camino Way E',960,'U',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Oxnard',1,1004,NULL,'93033',NULL,1228,34.166933,-119.16113,0,NULL,NULL,NULL),(65,15,1,1,0,'218W El Camino Blvd N',218,'W',NULL,'El Camino','Blvd','N',NULL,NULL,NULL,NULL,'Belpre',1,1015,NULL,'67519',NULL,1228,37.947324,-99.10017,0,NULL,NULL,NULL),(66,100,1,1,0,'404F Green St NE',404,'F',NULL,'Green','St','NE',NULL,NULL,NULL,NULL,'Realitos',1,1042,NULL,'78376',NULL,1228,27.363706,-98.56442,0,NULL,NULL,NULL),(67,137,3,1,0,'349H El Camino Path N',349,'H',NULL,'El Camino','Path','N',NULL,'Editorial Dept',NULL,NULL,'Riparius',1,1031,NULL,'12862',NULL,1228,43.675377,-73.932509,0,NULL,NULL,NULL),(68,187,2,0,0,'349H El Camino Path N',349,'H',NULL,'El Camino','Path','N',NULL,'Editorial Dept',NULL,NULL,'Riparius',1,1031,NULL,'12862',NULL,1228,43.675377,-73.932509,0,NULL,NULL,67),(69,93,3,1,0,'716N El Camino Pl NW',716,'N',NULL,'El Camino','Pl','NW',NULL,'Cuffe Parade',NULL,NULL,'Russellville',1,1039,NULL,'29476',NULL,1228,33.164201,-79.904182,0,NULL,NULL,NULL),(70,103,2,1,0,'716N El Camino Pl NW',716,'N',NULL,'El Camino','Pl','NW',NULL,'Cuffe Parade',NULL,NULL,'Russellville',1,1039,NULL,'29476',NULL,1228,33.164201,-79.904182,0,NULL,NULL,69),(71,168,3,1,0,'195X Maple Dr E',195,'X',NULL,'Maple','Dr','E',NULL,'Payables Dept.',NULL,NULL,'Columbia',1,1012,NULL,'62236',NULL,1228,38.442906,-90.20775,0,NULL,NULL,NULL),(72,38,2,1,0,'195X Maple Dr E',195,'X',NULL,'Maple','Dr','E',NULL,'Payables Dept.',NULL,NULL,'Columbia',1,1012,NULL,'62236',NULL,1228,38.442906,-90.20775,0,NULL,NULL,71),(73,141,3,1,0,'583H Caulder Ln SW',583,'H',NULL,'Caulder','Ln','SW',NULL,'Attn: Development',NULL,NULL,'Oklahoma City',1,1035,NULL,'73154',NULL,1228,35.523758,-97.525467,0,NULL,NULL,NULL),(74,145,2,1,0,'583H Caulder Ln SW',583,'H',NULL,'Caulder','Ln','SW',NULL,'Attn: Development',NULL,NULL,'Oklahoma City',1,1035,NULL,'73154',NULL,1228,35.523758,-97.525467,0,NULL,NULL,73),(75,56,3,1,0,'567Q Dowlen St N',567,'Q',NULL,'Dowlen','St','N',NULL,'Urgent',NULL,NULL,'Canton',1,1024,NULL,'63435',NULL,1228,40.178309,-91.57389,0,NULL,NULL,NULL),(76,182,3,1,0,'809L Martin Luther King Way NW',809,'L',NULL,'Martin Luther King','Way','NW',NULL,'Editorial Dept',NULL,NULL,'Cheshire',1,1006,NULL,'06408',NULL,1228,41.365709,-72.927507,0,NULL,NULL,NULL),(77,39,2,0,0,'809L Martin Luther King Way NW',809,'L',NULL,'Martin Luther King','Way','NW',NULL,'Editorial Dept',NULL,NULL,'Cheshire',1,1006,NULL,'06408',NULL,1228,41.365709,-72.927507,0,NULL,NULL,76),(78,191,3,1,0,'114P Woodbridge Blvd N',114,'P',NULL,'Woodbridge','Blvd','N',NULL,'Community Relations',NULL,NULL,'White Marsh',1,1019,NULL,'21162',NULL,1228,39.387307,-76.41236,0,NULL,NULL,NULL),(79,48,2,1,0,'114P Woodbridge Blvd N',114,'P',NULL,'Woodbridge','Blvd','N',NULL,'Community Relations',NULL,NULL,'White Marsh',1,1019,NULL,'21162',NULL,1228,39.387307,-76.41236,0,NULL,NULL,78),(80,186,3,1,0,'154F Lincoln Dr W',154,'F',NULL,'Lincoln','Dr','W',NULL,'Community Relations',NULL,NULL,'Naples',1,1042,NULL,'75568',NULL,1228,33.206258,-94.63009,0,NULL,NULL,NULL),(81,61,3,1,0,'328I Second Ln W',328,'I',NULL,'Second','Ln','W',NULL,'Receiving',NULL,NULL,'Atlanta',1,1009,NULL,'39901',NULL,1228,33.891251,-84.07456,0,NULL,NULL,NULL),(82,138,3,1,0,'551E Second Dr NE',551,'E',NULL,'Second','Dr','NE',NULL,'Cuffe Parade',NULL,NULL,'Braymer',1,1024,NULL,'64624',NULL,1228,39.581772,-93.79569,0,NULL,NULL,NULL),(83,134,2,1,0,'551E Second Dr NE',551,'E',NULL,'Second','Dr','NE',NULL,'Cuffe Parade',NULL,NULL,'Braymer',1,1024,NULL,'64624',NULL,1228,39.581772,-93.79569,0,NULL,NULL,82),(84,83,3,1,0,'973H Pine St N',973,'H',NULL,'Pine','St','N',NULL,'Cuffe Parade',NULL,NULL,'Lumber City',1,1009,NULL,'31549',NULL,1228,31.928525,-82.69332,0,NULL,NULL,NULL),(85,172,3,1,0,'949W Northpoint Dr NE',949,'W',NULL,'Northpoint','Dr','NE',NULL,'Attn: Accounting',NULL,NULL,'San Francisco',1,1004,NULL,'94106',NULL,1228,37.784827,-122.727802,0,NULL,NULL,NULL),(86,42,3,1,0,'619K Main Way NE',619,'K',NULL,'Main','Way','NE',NULL,'Receiving',NULL,NULL,'Kernersville',1,1032,NULL,'27285',NULL,1228,36.027482,-80.20728,0,NULL,NULL,NULL),(87,125,2,1,0,'619K Main Way NE',619,'K',NULL,'Main','Way','NE',NULL,'Receiving',NULL,NULL,'Kernersville',1,1032,NULL,'27285',NULL,1228,36.027482,-80.20728,0,NULL,NULL,86),(88,47,3,1,0,'408Q Caulder Path W',408,'Q',NULL,'Caulder','Path','W',NULL,'c/o PO Plus',NULL,NULL,'Simpson',1,1012,NULL,'62985',NULL,1228,37.458878,-88.69466,0,NULL,NULL,NULL),(89,175,3,1,0,'319M Northpoint Way NE',319,'M',NULL,'Northpoint','Way','NE',NULL,'Disbursements',NULL,NULL,'Baker',1,1008,NULL,'32531',NULL,1228,30.8752,-86.68607,0,NULL,NULL,NULL),(90,161,2,1,0,'319M Northpoint Way NE',319,'M',NULL,'Northpoint','Way','NE',NULL,'Disbursements',NULL,NULL,'Baker',1,1008,NULL,'32531',NULL,1228,30.8752,-86.68607,0,NULL,NULL,89),(91,29,3,1,0,'248S Caulder Path S',248,'S',NULL,'Caulder','Path','S',NULL,'Attn: Development',NULL,NULL,'Birmingham',1,1000,NULL,'35230',NULL,1228,33.544622,-86.929208,0,NULL,NULL,NULL),(92,82,2,1,0,'248S Caulder Path S',248,'S',NULL,'Caulder','Path','S',NULL,'Attn: Development',NULL,NULL,'Birmingham',1,1000,NULL,'35230',NULL,1228,33.544622,-86.929208,0,NULL,NULL,91),(93,160,3,1,0,'456B Main Ln NW',456,'B',NULL,'Main','Ln','NW',NULL,'Subscriptions Dept',NULL,NULL,'Beggs',1,1035,NULL,'74421',NULL,1228,35.755522,-96.04744,0,NULL,NULL,NULL),(94,149,2,1,0,'456B Main Ln NW',456,'B',NULL,'Main','Ln','NW',NULL,'Subscriptions Dept',NULL,NULL,'Beggs',1,1035,NULL,'74421',NULL,1228,35.755522,-96.04744,0,NULL,NULL,93),(95,4,3,1,0,'241J States Rd E',241,'J',NULL,'States','Rd','E',NULL,'Cuffe Parade',NULL,NULL,'Rebersburg',1,1037,NULL,'16872',NULL,1228,40.966199,-77.35299,0,NULL,NULL,NULL),(96,96,3,1,0,'580F Northpoint Dr NE',580,'F',NULL,'Northpoint','Dr','NE',NULL,'Receiving',NULL,NULL,'Hanceville',1,1000,NULL,'35077',NULL,1228,34.043589,-86.80644,0,NULL,NULL,NULL),(97,60,2,1,0,'580F Northpoint Dr NE',580,'F',NULL,'Northpoint','Dr','NE',NULL,'Receiving',NULL,NULL,'Hanceville',1,1000,NULL,'35077',NULL,1228,34.043589,-86.80644,0,NULL,NULL,96),(98,98,3,1,0,'810H Bay Dr NW',810,'H',NULL,'Bay','Dr','NW',NULL,'Subscriptions Dept',NULL,NULL,'Washington',1,1050,NULL,'20035',NULL,1228,38.893311,-77.014647,0,NULL,NULL,NULL),(99,149,1,0,0,'860Y Second Ave SE',860,'Y',NULL,'Second','Ave','SE',NULL,NULL,NULL,NULL,'Alexander',1,1014,NULL,'50420',NULL,1228,42.811536,-93.46844,0,NULL,NULL,47),(100,94,1,1,0,'860Y Second Ave SE',860,'Y',NULL,'Second','Ave','SE',NULL,NULL,NULL,NULL,'Alexander',1,1014,NULL,'50420',NULL,1228,42.811536,-93.46844,0,NULL,NULL,47),(101,179,1,1,0,'860Y Second Ave SE',860,'Y',NULL,'Second','Ave','SE',NULL,NULL,NULL,NULL,'Alexander',1,1014,NULL,'50420',NULL,1228,42.811536,-93.46844,0,NULL,NULL,47),(102,122,1,0,0,'445Z Lincoln St SE',445,'Z',NULL,'Lincoln','St','SE',NULL,NULL,NULL,NULL,'Littleton',1,1012,NULL,'61452',NULL,1228,40.249363,-90.66845,0,NULL,NULL,NULL),(103,37,1,1,0,'782Q Northpoint Blvd SE',782,'Q',NULL,'Northpoint','Blvd','SE',NULL,NULL,NULL,NULL,'Hansford',1,1047,NULL,'25103',NULL,1228,38.202669,-81.39427,0,NULL,NULL,48),(104,99,1,1,0,'782Q Northpoint Blvd SE',782,'Q',NULL,'Northpoint','Blvd','SE',NULL,NULL,NULL,NULL,'Hansford',1,1047,NULL,'25103',NULL,1228,38.202669,-81.39427,0,NULL,NULL,48),(105,150,1,1,0,'782Q Northpoint Blvd SE',782,'Q',NULL,'Northpoint','Blvd','SE',NULL,NULL,NULL,NULL,'Hansford',1,1047,NULL,'25103',NULL,1228,38.202669,-81.39427,0,NULL,NULL,48),(106,3,1,1,0,'782Q Northpoint Blvd SE',782,'Q',NULL,'Northpoint','Blvd','SE',NULL,NULL,NULL,NULL,'Hansford',1,1047,NULL,'25103',NULL,1228,38.202669,-81.39427,0,NULL,NULL,48),(107,146,1,1,0,'499Q Woodbridge Way NW',499,'Q',NULL,'Woodbridge','Way','NW',NULL,NULL,NULL,NULL,'Falling Waters',1,1047,NULL,'25419',NULL,1228,39.58132,-77.8804,0,NULL,NULL,49),(108,193,1,1,0,'499Q Woodbridge Way NW',499,'Q',NULL,'Woodbridge','Way','NW',NULL,NULL,NULL,NULL,'Falling Waters',1,1047,NULL,'25419',NULL,1228,39.58132,-77.8804,0,NULL,NULL,49),(109,72,1,1,0,'499Q Woodbridge Way NW',499,'Q',NULL,'Woodbridge','Way','NW',NULL,NULL,NULL,NULL,'Falling Waters',1,1047,NULL,'25419',NULL,1228,39.58132,-77.8804,0,NULL,NULL,49),(110,35,1,1,0,'499Q Woodbridge Way NW',499,'Q',NULL,'Woodbridge','Way','NW',NULL,NULL,NULL,NULL,'Falling Waters',1,1047,NULL,'25419',NULL,1228,39.58132,-77.8804,0,NULL,NULL,49),(111,82,1,0,0,'208G Maple Way NE',208,'G',NULL,'Maple','Way','NE',NULL,NULL,NULL,NULL,'Somerset',1,1034,NULL,'43783',NULL,1228,39.801679,-82.29166,0,NULL,NULL,50),(112,51,1,1,0,'208G Maple Way NE',208,'G',NULL,'Maple','Way','NE',NULL,NULL,NULL,NULL,'Somerset',1,1034,NULL,'43783',NULL,1228,39.801679,-82.29166,0,NULL,NULL,50),(113,5,1,1,0,'208G Maple Way NE',208,'G',NULL,'Maple','Way','NE',NULL,NULL,NULL,NULL,'Somerset',1,1034,NULL,'43783',NULL,1228,39.801679,-82.29166,0,NULL,NULL,50),(114,69,1,1,0,'861O Bay Blvd SW',861,'O',NULL,'Bay','Blvd','SW',NULL,NULL,NULL,NULL,'Tucson',1,1002,NULL,'85708',NULL,1228,32.196846,-110.89189,0,NULL,NULL,NULL),(115,165,1,1,0,'262Q Martin Luther King Way NE',262,'Q',NULL,'Martin Luther King','Way','NE',NULL,NULL,NULL,NULL,'Lauderdale',1,1023,NULL,'39335',NULL,1228,32.517145,-88.51801,0,NULL,NULL,51),(116,59,1,1,0,'262Q Martin Luther King Way NE',262,'Q',NULL,'Martin Luther King','Way','NE',NULL,NULL,NULL,NULL,'Lauderdale',1,1023,NULL,'39335',NULL,1228,32.517145,-88.51801,0,NULL,NULL,51),(117,48,1,0,0,'262Q Martin Luther King Way NE',262,'Q',NULL,'Martin Luther King','Way','NE',NULL,NULL,NULL,NULL,'Lauderdale',1,1023,NULL,'39335',NULL,1228,32.517145,-88.51801,0,NULL,NULL,51),(118,109,1,1,0,'262Q Martin Luther King Way NE',262,'Q',NULL,'Martin Luther King','Way','NE',NULL,NULL,NULL,NULL,'Lauderdale',1,1023,NULL,'39335',NULL,1228,32.517145,-88.51801,0,NULL,NULL,51),(119,44,1,1,0,'398H Main Ave SW',398,'H',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'De Witt',1,1003,NULL,'72042',NULL,1228,34.283347,-91.32515,0,NULL,NULL,52),(120,170,1,1,0,'398H Main Ave SW',398,'H',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'De Witt',1,1003,NULL,'72042',NULL,1228,34.283347,-91.32515,0,NULL,NULL,52),(121,142,1,1,0,'398H Main Ave SW',398,'H',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'De Witt',1,1003,NULL,'72042',NULL,1228,34.283347,-91.32515,0,NULL,NULL,52),(122,124,1,1,0,'398H Main Ave SW',398,'H',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'De Witt',1,1003,NULL,'72042',NULL,1228,34.283347,-91.32515,0,NULL,NULL,52),(123,145,1,0,0,'48Q Woodbridge Path E',48,'Q',NULL,'Woodbridge','Path','E',NULL,NULL,NULL,NULL,'Plainfield',1,1029,NULL,'07063',NULL,1228,40.604252,-74.44612,0,NULL,NULL,53),(124,106,1,1,0,'48Q Woodbridge Path E',48,'Q',NULL,'Woodbridge','Path','E',NULL,NULL,NULL,NULL,'Plainfield',1,1029,NULL,'07063',NULL,1228,40.604252,-74.44612,0,NULL,NULL,53),(125,12,1,1,0,'48Q Woodbridge Path E',48,'Q',NULL,'Woodbridge','Path','E',NULL,NULL,NULL,NULL,'Plainfield',1,1029,NULL,'07063',NULL,1228,40.604252,-74.44612,0,NULL,NULL,53),(126,25,1,1,0,'48Q Woodbridge Path E',48,'Q',NULL,'Woodbridge','Path','E',NULL,NULL,NULL,NULL,'Plainfield',1,1029,NULL,'07063',NULL,1228,40.604252,-74.44612,0,NULL,NULL,53),(127,91,1,1,0,'102L Caulder Ave W',102,'L',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93727',NULL,1228,36.753177,-119.69703,0,NULL,NULL,54),(128,20,1,1,0,'102L Caulder Ave W',102,'L',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93727',NULL,1228,36.753177,-119.69703,0,NULL,NULL,54),(129,57,1,1,0,'102L Caulder Ave W',102,'L',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93727',NULL,1228,36.753177,-119.69703,0,NULL,NULL,54),(130,43,1,1,0,'102L Caulder Ave W',102,'L',NULL,'Caulder','Ave','W',NULL,NULL,NULL,NULL,'Fresno',1,1004,NULL,'93727',NULL,1228,36.753177,-119.69703,0,NULL,NULL,54),(131,195,1,1,0,'488J Northpoint Way SE',488,'J',NULL,'Northpoint','Way','SE',NULL,NULL,NULL,NULL,'Repton',1,1000,NULL,'36475',NULL,1228,31.410205,-87.22474,0,NULL,NULL,55),(132,169,1,1,0,'488J Northpoint Way SE',488,'J',NULL,'Northpoint','Way','SE',NULL,NULL,NULL,NULL,'Repton',1,1000,NULL,'36475',NULL,1228,31.410205,-87.22474,0,NULL,NULL,55),(133,194,1,1,0,'488J Northpoint Way SE',488,'J',NULL,'Northpoint','Way','SE',NULL,NULL,NULL,NULL,'Repton',1,1000,NULL,'36475',NULL,1228,31.410205,-87.22474,0,NULL,NULL,55),(134,185,1,1,0,'488J Northpoint Way SE',488,'J',NULL,'Northpoint','Way','SE',NULL,NULL,NULL,NULL,'Repton',1,1000,NULL,'36475',NULL,1228,31.410205,-87.22474,0,NULL,NULL,55),(135,68,1,1,0,'680Q Beech St NE',680,'Q',NULL,'Beech','St','NE',NULL,NULL,NULL,NULL,'Seattle',1,1046,NULL,'98164',NULL,1228,47.606139,-122.33186,0,NULL,NULL,56),(136,188,1,1,0,'680Q Beech St NE',680,'Q',NULL,'Beech','St','NE',NULL,NULL,NULL,NULL,'Seattle',1,1046,NULL,'98164',NULL,1228,47.606139,-122.33186,0,NULL,NULL,56),(137,166,1,1,0,'680Q Beech St NE',680,'Q',NULL,'Beech','St','NE',NULL,NULL,NULL,NULL,'Seattle',1,1046,NULL,'98164',NULL,1228,47.606139,-122.33186,0,NULL,NULL,56),(138,7,1,1,0,'629M Jackson St W',629,'M',NULL,'Jackson','St','W',NULL,NULL,NULL,NULL,'Otwell',1,1013,NULL,'47564',NULL,1228,38.470473,-87.09905,0,NULL,NULL,NULL),(139,75,1,1,0,'938Y Caulder Ln N',938,'Y',NULL,'Caulder','Ln','N',NULL,NULL,NULL,NULL,'Lake Butter',1,1008,NULL,'34876',NULL,1228,28.505419,-81.571248,0,NULL,NULL,57),(140,178,1,1,0,'938Y Caulder Ln N',938,'Y',NULL,'Caulder','Ln','N',NULL,NULL,NULL,NULL,'Lake Butter',1,1008,NULL,'34876',NULL,1228,28.505419,-81.571248,0,NULL,NULL,57),(141,88,1,1,0,'938Y Caulder Ln N',938,'Y',NULL,'Caulder','Ln','N',NULL,NULL,NULL,NULL,'Lake Butter',1,1008,NULL,'34876',NULL,1228,28.505419,-81.571248,0,NULL,NULL,57),(142,105,1,1,0,'808B Second Pl E',808,'B',NULL,'Second','Pl','E',NULL,NULL,NULL,NULL,'Jupiter',1,1008,NULL,'33458',NULL,1228,26.928035,-80.11803,0,NULL,NULL,NULL),(143,176,1,1,0,'255Z College Rd E',255,'Z',NULL,'College','Rd','E',NULL,NULL,NULL,NULL,'Mountainburg',1,1003,NULL,'72946',NULL,1228,35.649503,-94.15357,0,NULL,NULL,58),(144,58,1,1,0,'255Z College Rd E',255,'Z',NULL,'College','Rd','E',NULL,NULL,NULL,NULL,'Mountainburg',1,1003,NULL,'72946',NULL,1228,35.649503,-94.15357,0,NULL,NULL,58),(145,84,1,1,0,'255Z College Rd E',255,'Z',NULL,'College','Rd','E',NULL,NULL,NULL,NULL,'Mountainburg',1,1003,NULL,'72946',NULL,1228,35.649503,-94.15357,0,NULL,NULL,58),(146,161,1,0,0,'255Z College Rd E',255,'Z',NULL,'College','Rd','E',NULL,NULL,NULL,NULL,'Mountainburg',1,1003,NULL,'72946',NULL,1228,35.649503,-94.15357,0,NULL,NULL,58),(147,23,1,1,0,'173V Beech Way SW',173,'V',NULL,'Beech','Way','SW',NULL,NULL,NULL,NULL,'Stitzer',1,1048,NULL,'53825',NULL,1228,42.928048,-90.56703,0,NULL,NULL,59),(148,38,1,0,0,'173V Beech Way SW',173,'V',NULL,'Beech','Way','SW',NULL,NULL,NULL,NULL,'Stitzer',1,1048,NULL,'53825',NULL,1228,42.928048,-90.56703,0,NULL,NULL,59),(149,184,1,1,0,'173V Beech Way SW',173,'V',NULL,'Beech','Way','SW',NULL,NULL,NULL,NULL,'Stitzer',1,1048,NULL,'53825',NULL,1228,42.928048,-90.56703,0,NULL,NULL,59),(150,108,1,1,0,'173V Beech Way SW',173,'V',NULL,'Beech','Way','SW',NULL,NULL,NULL,NULL,'Stitzer',1,1048,NULL,'53825',NULL,1228,42.928048,-90.56703,0,NULL,NULL,59),(151,85,1,1,0,'488Y Caulder Blvd S',488,'Y',NULL,'Caulder','Blvd','S',NULL,NULL,NULL,NULL,'Tulsa',1,1035,NULL,'74115',NULL,1228,36.180144,-95.91129,0,NULL,NULL,60),(152,13,1,1,0,'488Y Caulder Blvd S',488,'Y',NULL,'Caulder','Blvd','S',NULL,NULL,NULL,NULL,'Tulsa',1,1035,NULL,'74115',NULL,1228,36.180144,-95.91129,0,NULL,NULL,60),(153,18,1,1,0,'488Y Caulder Blvd S',488,'Y',NULL,'Caulder','Blvd','S',NULL,NULL,NULL,NULL,'Tulsa',1,1035,NULL,'74115',NULL,1228,36.180144,-95.91129,0,NULL,NULL,60),(154,28,1,1,0,'488Y Caulder Blvd S',488,'Y',NULL,'Caulder','Blvd','S',NULL,NULL,NULL,NULL,'Tulsa',1,1035,NULL,'74115',NULL,1228,36.180144,-95.91129,0,NULL,NULL,60),(155,24,1,1,0,'873Q Cadell Ln W',873,'Q',NULL,'Cadell','Ln','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27640',NULL,1228,35.797692,-78.625265,0,NULL,NULL,61),(156,132,1,1,0,'873Q Cadell Ln W',873,'Q',NULL,'Cadell','Ln','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27640',NULL,1228,35.797692,-78.625265,0,NULL,NULL,61),(157,125,1,0,0,'873Q Cadell Ln W',873,'Q',NULL,'Cadell','Ln','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27640',NULL,1228,35.797692,-78.625265,0,NULL,NULL,61),(158,177,1,1,0,'873Q Cadell Ln W',873,'Q',NULL,'Cadell','Ln','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27640',NULL,1228,35.797692,-78.625265,0,NULL,NULL,61),(159,173,1,1,0,'771C Jackson Blvd S',771,'C',NULL,'Jackson','Blvd','S',NULL,NULL,NULL,NULL,'Newport',1,1013,NULL,'47966',NULL,1228,39.885739,-87.4078,0,NULL,NULL,62),(160,10,1,1,0,'771C Jackson Blvd S',771,'C',NULL,'Jackson','Blvd','S',NULL,NULL,NULL,NULL,'Newport',1,1013,NULL,'47966',NULL,1228,39.885739,-87.4078,0,NULL,NULL,62),(161,190,1,1,0,'771C Jackson Blvd S',771,'C',NULL,'Jackson','Blvd','S',NULL,NULL,NULL,NULL,'Newport',1,1013,NULL,'47966',NULL,1228,39.885739,-87.4078,0,NULL,NULL,62),(162,8,1,1,0,'771C Jackson Blvd S',771,'C',NULL,'Jackson','Blvd','S',NULL,NULL,NULL,NULL,'Newport',1,1013,NULL,'47966',NULL,1228,39.885739,-87.4078,0,NULL,NULL,62),(163,130,1,1,0,'387A States Path E',387,'A',NULL,'States','Path','E',NULL,NULL,NULL,NULL,'Braggs',1,1035,NULL,'74423',NULL,1228,35.668132,-95.18582,0,NULL,NULL,63),(164,22,1,1,0,'387A States Path E',387,'A',NULL,'States','Path','E',NULL,NULL,NULL,NULL,'Braggs',1,1035,NULL,'74423',NULL,1228,35.668132,-95.18582,0,NULL,NULL,63),(165,66,1,1,0,'387A States Path E',387,'A',NULL,'States','Path','E',NULL,NULL,NULL,NULL,'Braggs',1,1035,NULL,'74423',NULL,1228,35.668132,-95.18582,0,NULL,NULL,63),(166,54,1,1,0,'387A States Path E',387,'A',NULL,'States','Path','E',NULL,NULL,NULL,NULL,'Braggs',1,1035,NULL,'74423',NULL,1228,35.668132,-95.18582,0,NULL,NULL,63),(167,183,1,1,0,'960U El Camino Way E',960,'U',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Oxnard',1,1004,NULL,'93033',NULL,1228,34.166933,-119.16113,0,NULL,NULL,64),(168,189,1,1,0,'960U El Camino Way E',960,'U',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Oxnard',1,1004,NULL,'93033',NULL,1228,34.166933,-119.16113,0,NULL,NULL,64),(169,26,1,1,0,'960U El Camino Way E',960,'U',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Oxnard',1,1004,NULL,'93033',NULL,1228,34.166933,-119.16113,0,NULL,NULL,64),(170,163,1,1,0,'960U El Camino Way E',960,'U',NULL,'El Camino','Way','E',NULL,NULL,NULL,NULL,'Oxnard',1,1004,NULL,'93033',NULL,1228,34.166933,-119.16113,0,NULL,NULL,64),(171,134,1,0,0,'218W El Camino Blvd N',218,'W',NULL,'El Camino','Blvd','N',NULL,NULL,NULL,NULL,'Belpre',1,1015,NULL,'67519',NULL,1228,37.947324,-99.10017,0,NULL,NULL,65),(172,40,1,1,0,'218W El Camino Blvd N',218,'W',NULL,'El Camino','Blvd','N',NULL,NULL,NULL,NULL,'Belpre',1,1015,NULL,'67519',NULL,1228,37.947324,-99.10017,0,NULL,NULL,65),(173,17,1,1,0,'218W El Camino Blvd N',218,'W',NULL,'El Camino','Blvd','N',NULL,NULL,NULL,NULL,'Belpre',1,1015,NULL,'67519',NULL,1228,37.947324,-99.10017,0,NULL,NULL,65),(174,133,1,1,0,'213R El Camino Way NE',213,'R',NULL,'El Camino','Way','NE',NULL,NULL,NULL,NULL,'Green Bay',1,1048,NULL,'54303',NULL,1228,44.530892,-88.04482,0,NULL,NULL,NULL),(175,46,1,1,0,'404F Green St NE',404,'F',NULL,'Green','St','NE',NULL,NULL,NULL,NULL,'Realitos',1,1042,NULL,'78376',NULL,1228,27.363706,-98.56442,0,NULL,NULL,66),(176,60,1,0,0,'404F Green St NE',404,'F',NULL,'Green','St','NE',NULL,NULL,NULL,NULL,'Realitos',1,1042,NULL,'78376',NULL,1228,27.363706,-98.56442,0,NULL,NULL,66),(177,95,1,1,0,'404F Green St NE',404,'F',NULL,'Green','St','NE',NULL,NULL,NULL,NULL,'Realitos',1,1042,NULL,'78376',NULL,1228,27.363706,-98.56442,0,NULL,NULL,66),(178,90,1,1,0,'133U Jackson Ave S',133,'U',NULL,'Jackson','Ave','S',NULL,NULL,NULL,NULL,'Fontanelle',1,1014,NULL,'50846',NULL,1228,41.307029,-94.55679,0,NULL,NULL,NULL),(179,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),(180,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),(181,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;
 
@@ -208,7 +208,7 @@ 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,'2019-08-15 21:31:00'),(2,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, Sharyn','Sharyn Cooper',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1253804931',NULL,'Sample Data','Sharyn','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(3,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Jameson family','Jameson family',NULL,NULL,NULL,NULL,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,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(4,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Kacey','Kacey Smith',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','4027129634',NULL,'Sample Data','Kacey','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Smith',NULL,1,NULL,1,'2019-02-20',NULL,NULL,'Palo Alto Arts Academy',NULL,NULL,196,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(5,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Alexia','Alexia Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','164186955',NULL,'Sample Data','Alexia','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Nielsen',NULL,1,'1946-10-19',1,'2018-11-18',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(6,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Brent','Brent Lee III',NULL,NULL,NULL,NULL,NULL,'Both','3880593995',NULL,'Sample Data','Brent','P','Lee',NULL,4,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Lee III',NULL,NULL,'1978-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(7,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Brittney','Mrs. Brittney Adams',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1087046630',NULL,'Sample Data','Brittney','','Adams',1,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Mrs. Brittney Adams',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(8,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Nielsen, Kathlyn','Mrs. Kathlyn Nielsen',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','145231118',NULL,'Sample Data','Kathlyn','','Nielsen',1,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Mrs. Kathlyn Nielsen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(9,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,NULL,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,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Lashawnda','Ms. Lashawnda Cruz',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','2604537313',NULL,'Sample Data','Lashawnda','Y','Cruz',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Cruz',NULL,NULL,NULL,1,'2019-01-14',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Brzęczysław','Brzęczysław Lee Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2392926300',NULL,'Sample Data','Brzęczysław','G','Lee',NULL,1,NULL,NULL,1,NULL,'Dear Brzęczysław',1,NULL,'Dear Brzęczysław',1,NULL,'Brzęczysław Lee Jr.',NULL,NULL,'2002-05-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(12,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Smith, Lashawnda','Ms. Lashawnda Smith',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','810461769',NULL,'Sample Data','Lashawnda','','Smith',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Smith',NULL,NULL,'1959-10-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(13,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Brigette','Mrs. Brigette Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','2016612463',NULL,'Sample Data','Brigette','R','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Mrs. Brigette Ivanov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(14,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Kenny','Kenny Reynolds II',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2459168653',NULL,'Sample Data','Kenny','','Reynolds',NULL,3,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny Reynolds II',NULL,NULL,'1964-12-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(15,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Clint','Clint Samson Sr.',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','1111759709',NULL,'Sample Data','Clint','','Samson',NULL,2,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Samson Sr.',NULL,2,'1991-05-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(16,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Juliann','Ms. Juliann Samson',NULL,NULL,NULL,NULL,NULL,'Both','1799778538',NULL,'Sample Data','Juliann','G','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Ms. Juliann Samson',NULL,1,'1988-06-05',0,NULL,NULL,NULL,'Local Education Fellowship',NULL,NULL,121,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(17,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,'\ 12\ 1',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,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(18,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Elizabeth','Elizabeth Deforest',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2409848026',NULL,'Sample Data','Elizabeth','E','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(19,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Addy Wellness Trust','Addy Wellness Trust',NULL,NULL,NULL,NULL,NULL,'Both','754252251',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Addy Wellness Trust',NULL,NULL,NULL,0,NULL,NULL,180,'Addy Wellness Trust',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Landon','Mr. Landon Lee II',NULL,NULL,NULL,NULL,NULL,'Both','4144706447',NULL,'Sample Data','Landon','X','Lee',3,3,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Mr. Landon Lee II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(21,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Jacob','Jacob McReynolds Jr.',NULL,NULL,NULL,NULL,NULL,'Both','4202313565',NULL,'Sample Data','Jacob','C','McReynolds',NULL,1,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob McReynolds Jr.',NULL,2,'2014-02-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(22,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'bachmank79@testmail.co.in','bachmank79@testmail.co.in',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','2269578018',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear bachmank79@testmail.co.in',1,NULL,'Dear bachmank79@testmail.co.in',1,NULL,'bachmank79@testmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(23,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Jay','Jay Samson',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','4164694386',NULL,'Sample Data','Jay','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Samson',NULL,2,'1941-07-29',1,'2018-12-25',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'gonzlezm@airmail.co.pl','gonzlezm@airmail.co.pl',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3471152095',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear gonzlezm@airmail.co.pl',1,NULL,'Dear gonzlezm@airmail.co.pl',1,NULL,'gonzlezm@airmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(25,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jones, Tanya','Mrs. Tanya Jones',NULL,NULL,NULL,NULL,NULL,'Both','1578190771',NULL,'Sample Data','Tanya','','Jones',1,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Mrs. Tanya Jones',NULL,1,'1981-12-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(26,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Prentice, Jed','Jed Prentice',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','737533559',NULL,'Sample Data','Jed','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Prentice',NULL,NULL,'1990-05-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(27,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Adams, Scott','Scott Adams',NULL,NULL,NULL,NULL,NULL,'Both','2280225126',NULL,'Sample Data','Scott','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Adams',NULL,NULL,'1952-09-14',1,'2019-01-22',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(28,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Omar','Mr. Omar Olsen',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2675601131',NULL,'Sample Data','Omar','','Olsen',3,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Mr. Omar Olsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(29,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Łąchowski-Cooper, Arlyne','Arlyne Łąchowski-Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3561672255',NULL,'Sample Data','Arlyne','','Łąchowski-Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Łąchowski-Cooper',NULL,NULL,'2011-03-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(30,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'idaz@testmail.co.pl','idaz@testmail.co.pl',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1590898300',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear idaz@testmail.co.pl',1,NULL,'Dear idaz@testmail.co.pl',1,NULL,'idaz@testmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(31,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Sonny','Mr. Sonny Wattson',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','4056100823',NULL,'Sample Data','Sonny','M','Wattson',3,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Mr. Sonny Wattson',NULL,2,'1970-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(32,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson-Barkley, Erik','Erik Samson-Barkley III',NULL,NULL,NULL,NULL,NULL,'Both','378938647',NULL,'Sample Data','Erik','','Samson-Barkley',NULL,4,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Samson-Barkley III',NULL,2,'1971-07-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(33,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Kathlyn','Kathlyn Samson',NULL,NULL,NULL,NULL,NULL,'Both','2952894256',NULL,'Sample Data','Kathlyn','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Samson',NULL,1,'1954-10-10',1,'2019-04-13',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(34,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Łąchowski-Cooper, Brigette','Dr. Brigette Łąchowski-Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3626490862',NULL,'Sample Data','Brigette','','Łąchowski-Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Dr. Brigette Łąchowski-Cooper',NULL,1,'1992-10-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(35,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley-Parker, Felisha','Felisha Barkley-Parker',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2080249471',NULL,'Sample Data','Felisha','','Barkley-Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Barkley-Parker',NULL,1,'1997-11-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(36,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bcooper@mymail.biz','bcooper@mymail.biz',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2175964031',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear bcooper@mymail.biz',1,NULL,'Dear bcooper@mymail.biz',1,NULL,'bcooper@mymail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(37,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Minnesota Music Services','Minnesota Music Services',NULL,NULL,NULL,NULL,NULL,'Both','2721288327',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Minnesota Music Services',NULL,NULL,NULL,0,NULL,NULL,NULL,'Minnesota Music Services',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(38,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Craig','Mr. Craig Blackwell II',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2607395408',NULL,'Sample Data','Craig','','Blackwell',3,3,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Mr. Craig Blackwell II',NULL,2,'1955-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Miguel','Miguel Jones',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3236387575',NULL,'Sample Data','Miguel','A','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(40,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wilson, Santina','Santina Wilson',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','602659745',NULL,'Sample Data','Santina','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina Wilson',NULL,1,NULL,0,NULL,NULL,NULL,'Pine Poetry Center',NULL,NULL,142,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(41,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Elbert','Elbert Barkley Sr.',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3782594524',NULL,'Sample Data','Elbert','H','Barkley',NULL,2,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Barkley Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(42,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Jerome','Dr. Jerome Jameson Jr.',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2954166359',NULL,'Sample Data','Jerome','','Jameson',4,1,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Jameson Jr.',NULL,2,'1937-12-02',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(43,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Olsen, Daren','Daren Olsen II',NULL,NULL,NULL,NULL,NULL,'Both','1772811610',NULL,'Sample Data','Daren','M','Olsen',NULL,3,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Olsen II',NULL,NULL,'1953-09-19',0,NULL,NULL,NULL,'Kentucky Poetry Center',NULL,NULL,139,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(44,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Reynolds, Allen','Dr. Allen Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3330814148',NULL,'Sample Data','Allen','','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Dr. Allen Reynolds',NULL,2,'1982-09-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(45,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samson, Brigette','Brigette Samson',NULL,NULL,NULL,NULL,NULL,'Both','2016376463',NULL,'Sample Data','Brigette','V','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Brigette Samson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Rolando','Rolando McReynolds Sr.',NULL,NULL,NULL,NULL,NULL,'Both','792925862',NULL,'Sample Data','Rolando','P','McReynolds',NULL,2,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando McReynolds Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(47,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Olsen, Kiara','Mrs. Kiara Olsen',NULL,NULL,NULL,NULL,NULL,'Both','2769473098',NULL,'Sample Data','Kiara','Y','Olsen',1,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Mrs. Kiara Olsen',NULL,1,'1973-04-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(48,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Craig','Craig Terry',NULL,NULL,NULL,NULL,NULL,'Both','99954809',NULL,'Sample Data','Craig','D','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Terry',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Brent','Mr. Brent McReynolds',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','1642363983',NULL,'Sample Data','Brent','O','McReynolds',3,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Mr. Brent McReynolds',NULL,NULL,'1964-03-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(50,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Omar','Omar Cruz',NULL,NULL,NULL,NULL,NULL,'Both','348168112',NULL,'Sample Data','Omar','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Cruz',NULL,NULL,'1997-01-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(51,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Errol','Mr. Errol Prentice',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','2979550406',NULL,'Sample Data','Errol','Y','Prentice',3,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Mr. Errol Prentice',NULL,2,'1957-01-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Kathlyn','Kathlyn Cooper',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','4144432038',NULL,'Sample Data','Kathlyn','B','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Cooper',NULL,1,'2006-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(53,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry-Jameson, Rodrigo','Dr. Rodrigo Terry-Jameson II',NULL,NULL,NULL,NULL,NULL,'Both','3866553571',NULL,'Sample Data','Rodrigo','','Terry-Jameson',4,3,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Dr. Rodrigo Terry-Jameson II',NULL,NULL,'1984-08-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(54,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Poquoson Wellness Trust','Poquoson Wellness Trust',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2664477883',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Poquoson Wellness Trust',NULL,NULL,NULL,0,NULL,NULL,136,'Poquoson Wellness Trust',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(55,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Barkley, Erik','Dr. Erik Cruz-Barkley',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2816881198',NULL,'Sample Data','Erik','','Cruz-Barkley',4,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Dr. Erik Cruz-Barkley',NULL,NULL,'1987-05-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Santina','Santina Barkley',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1386775784',NULL,'Sample Data','Santina','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Santina Barkley',NULL,1,'2010-06-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(57,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terrell, Eleonor','Mrs. Eleonor Terrell',NULL,NULL,NULL,NULL,NULL,'Both','2837539268',NULL,'Sample Data','Eleonor','B','Terrell',1,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Mrs. Eleonor Terrell',NULL,1,NULL,1,'2019-03-15',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(58,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Jackson','Jackson Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2114125718',NULL,'Sample Data','Jackson','H','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Deforest',NULL,2,NULL,1,'2018-11-28',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(59,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Lincoln','Lincoln Zope III',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2972737085',NULL,'Sample Data','Lincoln','','Zope',NULL,4,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Lincoln Zope III',NULL,2,'1985-08-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Esta','Esta Wilson',NULL,NULL,NULL,NULL,NULL,'Both','4062984803',NULL,'Sample Data','Esta','W','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Wilson',NULL,1,'2009-06-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(61,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav-Ivanov family','Yadav-Ivanov family',NULL,NULL,NULL,NULL,NULL,'Both','100874817',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Yadav-Ivanov family',5,NULL,'Dear Yadav-Ivanov family',2,NULL,'Yadav-Ivanov family',NULL,NULL,NULL,0,NULL,'Yadav-Ivanov family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(62,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Łąchowski-Cooper family','Łąchowski-Cooper family',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2602821584',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Łąchowski-Cooper family',5,NULL,'Dear Łąchowski-Cooper family',2,NULL,'Łąchowski-Cooper family',NULL,NULL,NULL,0,NULL,'Łąchowski-Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(63,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds-Lee, Ashley','Ashley McReynolds-Lee',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','218176139',NULL,'Sample Data','Ashley','','McReynolds-Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley McReynolds-Lee',NULL,2,'1976-04-02',1,'2019-07-16',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Rebekah','Mrs. Rebekah Parker',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','4245169755',NULL,'Sample Data','Rebekah','','Parker',1,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Mrs. Rebekah Parker',NULL,1,'1958-09-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(65,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Friends Technology Trust','Friends Technology Trust',NULL,NULL,NULL,NULL,NULL,'Both','1330302854',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Technology Trust',NULL,NULL,NULL,0,NULL,NULL,200,'Friends Technology Trust',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(66,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Esta','Ms. Esta Jones',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2492655702',NULL,'Sample Data','Esta','Z','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Ms. Esta Jones',NULL,1,'1976-02-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Shauna','Shauna Yadav',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1029328573',NULL,'Sample Data','Shauna','','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Yadav',NULL,NULL,'1981-06-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Juliann','Juliann Samson',NULL,NULL,NULL,NULL,NULL,'Both','1799778538',NULL,'Sample Data','Juliann','Z','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Samson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(69,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Dimitrov, Toby','Mr. Toby Dimitrov II',NULL,NULL,NULL,NULL,NULL,'Both','4067537771',NULL,'Sample Data','Toby','','Dimitrov',3,3,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Mr. Toby Dimitrov II',NULL,2,'1993-10-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(70,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'hl.cooper@testmail.co.nz','hl.cooper@testmail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','3121599721',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear hl.cooper@testmail.co.nz',1,NULL,'Dear hl.cooper@testmail.co.nz',1,NULL,'hl.cooper@testmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(71,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,'\ 12\ 1',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,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(72,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Bradford Literacy Solutions','Bradford Literacy Solutions',NULL,NULL,NULL,NULL,NULL,'Both','2627933493',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bradford Literacy Solutions',NULL,NULL,NULL,0,NULL,NULL,153,'Bradford Literacy Solutions',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(73,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Maxwell','Maxwell Samson Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3358700661',NULL,'Sample Data','Maxwell','','Samson',NULL,2,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Samson Sr.',NULL,NULL,'1957-01-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(74,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds family','McReynolds family',NULL,NULL,NULL,NULL,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,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(75,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Brent','Brent Patel',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','3059240513',NULL,'Sample Data','Brent','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Patel',NULL,NULL,'2005-02-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(76,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Reynolds, Teresa','Teresa Reynolds',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','1708756275',NULL,'Sample Data','Teresa','C','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Reynolds',NULL,1,'2002-05-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Kathlyn','Mrs. Kathlyn Jensen',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3302532161',NULL,'Sample Data','Kathlyn','P','Jensen',1,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Mrs. Kathlyn Jensen',NULL,1,'1954-04-03',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(78,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Reynolds, Shauna','Dr. Shauna Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','564809255',NULL,'Sample Data','Shauna','','Reynolds',4,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Dr. Shauna Reynolds',NULL,1,'1968-02-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(79,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'andrewn@fakemail.biz','andrewn@fakemail.biz',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2980270509',NULL,'Sample Data',NULL,NULL,NULL,NULL,4,NULL,NULL,1,NULL,'Dear andrewn@fakemail.biz',1,NULL,'Dear andrewn@fakemail.biz',1,NULL,'andrewn@fakemail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(80,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Olsen family','Olsen family',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1990073228',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen family',5,NULL,'Dear Olsen family',2,NULL,'Olsen family',NULL,NULL,NULL,0,NULL,'Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(81,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Kathlyn','Mrs. Kathlyn Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3302532161',NULL,'Sample Data','Kathlyn','','Jensen',1,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Mrs. Kathlyn Jensen',NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Sherman','Dr. Sherman Cooper',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1707375456',NULL,'Sample Data','Sherman','O','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Cooper',NULL,NULL,'1992-07-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(83,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,'\ 15\ 1',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,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Łąchowski, Sonny','Dr. Sonny Łąchowski',NULL,NULL,NULL,NULL,NULL,'Both','3611935208',NULL,'Sample Data','Sonny','W','Łąchowski',4,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Dr. Sonny Łąchowski',NULL,NULL,'1963-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(85,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cooper, Heidi','Ms. Heidi Cooper',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2166503529',NULL,'Sample Data','Heidi','','Cooper',2,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Ms. Heidi Cooper',NULL,1,'1955-02-14',1,'2018-10-19',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(86,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jensen, Heidi','Dr. Heidi Jensen',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3979188807',NULL,'Sample Data','Heidi','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi Jensen',NULL,NULL,'1963-06-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(87,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'mcreynolds.lincoln@notmail.co.nz','mcreynolds.lincoln@notmail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','3199542396',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear mcreynolds.lincoln@notmail.co.nz',1,NULL,'Dear mcreynolds.lincoln@notmail.co.nz',1,NULL,'mcreynolds.lincoln@notmail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(88,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Díaz, Delana','Delana Díaz',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1768580764',NULL,'Sample Data','Delana','','Díaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Díaz',NULL,1,'1963-12-06',1,'2018-08-30',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Elbert','Dr. Elbert Roberts III',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2457403218',NULL,'Sample Data','Elbert','H','Roberts',4,4,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Dr. Elbert Roberts III',NULL,2,'1991-08-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(90,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'nielsens14@sample.co.pl','nielsens14@sample.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','2440357462',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear nielsens14@sample.co.pl',1,NULL,'Dear nielsens14@sample.co.pl',1,NULL,'nielsens14@sample.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,'Bassett Arts Alliance',NULL,NULL,155,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(91,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Russell Springs Empowerment Association','Russell Springs Empowerment Association',NULL,NULL,NULL,NULL,NULL,'Both','925505101',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Russell Springs Empowerment Association',NULL,NULL,NULL,0,NULL,NULL,105,'Russell Springs Empowerment Association',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(92,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Scarlet','Scarlet Müller',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','1549122199',NULL,'Sample Data','Scarlet','Q','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Scarlet Müller',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(93,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper-Jensen family','Cooper-Jensen family',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','2134395889',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper-Jensen family',5,NULL,'Dear Cooper-Jensen family',2,NULL,'Cooper-Jensen family',NULL,NULL,NULL,0,NULL,'Cooper-Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(94,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Reynolds, Kathleen','Kathleen Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3830837531',NULL,'Sample Data','Kathleen','T','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Reynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(95,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Ray','Ray Terry Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1646953938',NULL,'Sample Data','Ray','','Terry',NULL,2,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Terry Sr.',NULL,2,'1966-08-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(96,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Ashley','Mrs. Ashley Dimitrov',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','665882362',NULL,'Sample Data','Ashley','','Dimitrov',1,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Mrs. Ashley Dimitrov',NULL,1,'1935-01-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(97,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'New Canton Agriculture Collective','New Canton Agriculture Collective',NULL,NULL,NULL,NULL,NULL,'Both','3562520067',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New Canton Agriculture Collective',NULL,NULL,NULL,0,NULL,NULL,99,'New Canton Agriculture Collective',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav-Ivanov, Kacey','Kacey Yadav-Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','89132998',NULL,'Sample Data','Kacey','D','Yadav-Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Yadav-Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(99,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Blackwell, Scott','Scott Blackwell Sr.',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1650464224',NULL,'Sample Data','Scott','L','Blackwell',NULL,2,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Blackwell Sr.',NULL,NULL,'1933-08-13',0,NULL,NULL,NULL,'New Canton Agriculture Collective',NULL,NULL,97,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(100,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry-Jameson, Jerome','Mr. Jerome Terry-Jameson',NULL,NULL,NULL,NULL,NULL,'Both','1409390105',NULL,'Sample Data','Jerome','','Terry-Jameson',3,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Mr. Jerome Terry-Jameson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Barkley, Rebekah','Rebekah Samson-Barkley',NULL,NULL,NULL,NULL,NULL,'Both','1193266027',NULL,'Sample Data','Rebekah','Z','Samson-Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Samson-Barkley',NULL,1,'1982-12-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(102,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Terrell, Ashley','Dr. Ashley Terrell III',NULL,NULL,NULL,NULL,NULL,'Both','209760227',NULL,'Sample Data','Ashley','','Terrell',4,4,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Terrell III',NULL,2,'1967-04-15',1,'2018-10-19',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(103,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'dimitrov.z.lou@testmail.co.uk','dimitrov.z.lou@testmail.co.uk',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3677688070',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear dimitrov.z.lou@testmail.co.uk',1,NULL,'Dear dimitrov.z.lou@testmail.co.uk',1,NULL,'dimitrov.z.lou@testmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Scott','Scott Nielsen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','4027212540',NULL,'Sample Data','Scott','','Nielsen',NULL,1,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Nielsen Jr.',NULL,NULL,'1983-11-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(105,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Maria','Dr. Maria Jameson',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2824644051',NULL,'Sample Data','Maria','','Jameson',4,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Dr. Maria Jameson',NULL,NULL,'1971-02-26',0,NULL,NULL,NULL,'Russell Springs Empowerment Association',NULL,NULL,91,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(106,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,NULL,NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(107,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Díaz family','Díaz family',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2169249835',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Díaz family',5,NULL,'Dear Díaz family',2,NULL,'Díaz family',NULL,NULL,NULL,0,NULL,'Díaz family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(108,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Cooper family','Cooper family',NULL,NULL,NULL,'\ 12\ 1',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,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(109,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Nielsen, Toby','Toby Nielsen',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1430850543',NULL,'Sample Data','Toby','D','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Nielsen',NULL,2,'1952-07-06',1,'2019-08-12',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(110,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Dowlen Education Initiative','Dowlen Education Initiative',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3906226725',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Dowlen Education Initiative',NULL,NULL,NULL,0,NULL,NULL,158,'Dowlen Education Initiative',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(111,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Shauna','Shauna Jones',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2088102406',NULL,'Sample Data','Shauna','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Jones',NULL,1,'1983-08-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(112,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Daren','Daren Wagner Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1117250816',NULL,'Sample Data','Daren','I','Wagner',NULL,1,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Wagner Jr.',NULL,2,'1935-11-09',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(113,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Esta','Ms. Esta Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2058701056',NULL,'Sample Data','Esta','H','Deforest',2,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Ms. Esta Deforest',NULL,1,'1980-08-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(114,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson, Jed','Jed Samson Jr.',NULL,NULL,NULL,NULL,NULL,'Both','4283865263',NULL,'Sample Data','Jed','Z','Samson',NULL,1,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Samson Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Kacey','Mrs. Kacey Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2233552494',NULL,'Sample Data','Kacey','','Jameson',1,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Mrs. Kacey Jameson',NULL,1,'1978-09-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Kenny','Kenny Barkley',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3409558741',NULL,'Sample Data','Kenny','W','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny Barkley',NULL,NULL,'1984-04-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(117,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Iris','Iris Jones',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3545440397',NULL,'Sample Data','Iris','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Jones',NULL,1,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(118,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Maxwell','Maxwell Nielsen',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','1889021515',NULL,'Sample Data','Maxwell','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Nielsen',NULL,NULL,'1991-12-15',0,NULL,NULL,NULL,'Martin Luther King Agriculture Services',NULL,NULL,143,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Lawerence','Mr. Lawerence Jones II',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','267362464',NULL,'Sample Data','Lawerence','F','Jones',3,3,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Mr. Lawerence Jones II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(120,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cooper-Jensen, Carlos','Carlos Cooper-Jensen',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3047902387',NULL,'Sample Data','Carlos','','Cooper-Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Cooper-Jensen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(121,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Local Education Fellowship','Local Education Fellowship',NULL,NULL,NULL,NULL,NULL,'Both','818138343',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Local Education Fellowship',NULL,NULL,NULL,0,NULL,NULL,16,'Local Education Fellowship',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Shad','Shad Grant Sr.',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3908834377',NULL,'Sample Data','Shad','B','Grant',NULL,2,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Grant Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Iris','Dr. Iris Yadav',NULL,NULL,NULL,NULL,NULL,'Both','3117553975',NULL,'Sample Data','Iris','','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris Yadav',NULL,1,'1992-07-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(124,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Elizabeth','Elizabeth Parker',NULL,NULL,NULL,NULL,NULL,'Both','3038072630',NULL,'Sample Data','Elizabeth','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Parker',NULL,1,'2003-04-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(125,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Omar','Omar Jones',NULL,NULL,NULL,NULL,NULL,'Both','1587290498',NULL,'Sample Data','Omar','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Jones',NULL,2,'1957-06-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(126,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Barkley, Magan','Magan Barkley',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3229711525',NULL,'Sample Data','Magan','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Barkley',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(127,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley-Parker, Kenny','Dr. Kenny Barkley-Parker III',NULL,NULL,NULL,NULL,NULL,'Both','3544249506',NULL,'Sample Data','Kenny','','Barkley-Parker',4,4,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Dr. Kenny Barkley-Parker III',NULL,NULL,'1987-06-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(128,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Carylon','Carylon Samson',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','4170426842',NULL,'Sample Data','Carylon','T','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Samson',NULL,1,'1970-10-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'kathleenp@fakemail.com','kathleenp@fakemail.com',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','355874970',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear kathleenp@fakemail.com',1,NULL,'Dear kathleenp@fakemail.com',1,NULL,'kathleenp@fakemail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(130,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,NULL,NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(131,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Łąchowski-McReynolds, Felisha','Dr. Felisha Łąchowski-McReynolds',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','129679642',NULL,'Sample Data','Felisha','','Łąchowski-McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Dr. Felisha Łąchowski-McReynolds',NULL,NULL,'1994-03-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(132,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Brent','Brent Cruz III',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1602969410',NULL,'Sample Data','Brent','','Cruz',NULL,4,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Cruz III',NULL,2,'1968-06-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Claudio','Claudio Terry Jr.',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','3516562603',NULL,'Sample Data','Claudio','D','Terry',NULL,1,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Terry Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(134,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Barkley, Omar','Omar Barkley',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1166913408',NULL,'Sample Data','Omar','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Barkley',NULL,2,'1931-06-07',1,'2018-11-28',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(135,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Teddy','Mr. Teddy Nielsen II',NULL,NULL,NULL,NULL,NULL,'Both','1600610365',NULL,'Sample Data','Teddy','E','Nielsen',3,3,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Mr. Teddy Nielsen II',NULL,2,'1986-01-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(136,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Dimitrov, Barry','Barry Dimitrov Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3521413340',NULL,'Sample Data','Barry','M','Dimitrov',NULL,1,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Dimitrov Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,'Poquoson Wellness Trust',NULL,NULL,54,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(137,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Global Food Network','Global Food Network',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','892068896',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Food Network',NULL,NULL,NULL,0,NULL,NULL,NULL,'Global Food Network',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(138,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Díaz, Alexia','Alexia Díaz',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','352965868',NULL,'Sample Data','Alexia','R','Díaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Díaz',NULL,NULL,'1994-04-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(139,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'Kentucky Poetry Center','Kentucky Poetry Center',NULL,NULL,NULL,NULL,NULL,'Both','2704656276',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kentucky Poetry Center',NULL,NULL,NULL,0,NULL,NULL,43,'Kentucky Poetry Center',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Shauna','Ms. Shauna Olsen',NULL,NULL,NULL,NULL,NULL,'Both','774481679',NULL,'Sample Data','Shauna','','Olsen',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Olsen',NULL,NULL,'1975-12-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(141,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Carlos','Carlos Deforest Jr.',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2222599648',NULL,'Sample Data','Carlos','I','Deforest',NULL,1,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Deforest Jr.',NULL,2,'2008-11-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(142,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Pine Poetry Center','Pine Poetry Center',NULL,NULL,NULL,NULL,NULL,'Both','2642150447',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Pine Poetry Center',NULL,NULL,NULL,0,NULL,NULL,40,'Pine Poetry Center',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(143,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Martin Luther King Agriculture Services','Martin Luther King Agriculture Services',NULL,NULL,NULL,NULL,NULL,'Both','613168978',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Agriculture Services',NULL,NULL,NULL,0,NULL,NULL,118,'Martin Luther King Agriculture Services',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(144,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Jed','Mr. Jed Olsen',NULL,NULL,NULL,NULL,NULL,'Both','1956151934',NULL,'Sample Data','Jed','','Olsen',3,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Mr. Jed Olsen',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(145,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Local Legal Center','Local Legal Center',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1488771407',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Local Legal Center',NULL,NULL,NULL,0,NULL,NULL,147,'Local Legal Center',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(146,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Olsen, Barry','Mr. Barry Olsen II',NULL,NULL,NULL,NULL,NULL,'Both','1622802859',NULL,'Sample Data','Barry','Z','Olsen',3,3,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Mr. Barry Olsen II',NULL,2,NULL,0,NULL,NULL,NULL,'Main Sports Academy',NULL,NULL,195,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Ashley','Dr. Ashley Nielsen',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3185921843',NULL,'Sample Data','Ashley','','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Nielsen',NULL,1,'1976-11-15',0,NULL,NULL,NULL,'Local Legal Center',NULL,NULL,145,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(148,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terry, Errol','Errol Terry',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1432200958',NULL,'Sample Data','Errol','','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Terry',NULL,2,'1930-02-20',1,'2019-02-08',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(149,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Megan','Dr. Megan Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2689596405',NULL,'Sample Data','Megan','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Dr. Megan Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(150,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Olsen, Carlos','Carlos Olsen III',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2601969506',NULL,'Sample Data','Carlos','W','Olsen',NULL,4,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Olsen III',NULL,2,NULL,0,NULL,NULL,NULL,'Mississippi Peace Collective',NULL,NULL,156,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(151,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Barkley, Teddy','Dr. Teddy Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3740389850',NULL,'Sample Data','Teddy','','Barkley',4,NULL,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Dr. Teddy Barkley',NULL,2,'1987-09-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:29'),(152,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen family','Olsen family',NULL,NULL,NULL,NULL,NULL,'Both','1990073228',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen family',5,NULL,'Dear Olsen family',2,NULL,'Olsen family',NULL,NULL,NULL,0,NULL,'Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(153,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'trumano20@example.net','trumano20@example.net',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3786222307',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear trumano20@example.net',1,NULL,'Dear trumano20@example.net',1,NULL,'trumano20@example.net',NULL,NULL,NULL,0,NULL,NULL,NULL,'Bradford Literacy Solutions',NULL,NULL,72,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(154,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Heidi','Dr. Heidi Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3595168109',NULL,'Sample Data','Heidi','','Samuels',4,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Dr. Heidi Samuels',NULL,1,'1967-06-18',1,'2018-10-02',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(155,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Bassett Arts Alliance','Bassett Arts Alliance',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2812051694',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bassett Arts Alliance',NULL,NULL,NULL,0,NULL,NULL,90,'Bassett Arts Alliance',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(156,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Mississippi Peace Collective','Mississippi Peace Collective',NULL,NULL,NULL,NULL,NULL,'Both','670670428',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Mississippi Peace Collective',NULL,NULL,NULL,0,NULL,NULL,150,'Mississippi Peace Collective',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(157,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Jacob','Jacob González Jr.',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2352039359',NULL,'Sample Data','Jacob','','González',NULL,1,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob González Jr.',NULL,2,'1993-10-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(158,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Billy','Dr. Billy Jensen',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1055811033',NULL,'Sample Data','Billy','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Jensen',NULL,NULL,'1975-07-01',0,NULL,NULL,NULL,'Dowlen Education Initiative',NULL,NULL,110,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(159,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terry, Elizabeth','Elizabeth Terry',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','4269196887',NULL,'Sample Data','Elizabeth','A','Terry',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Terry',NULL,1,NULL,0,NULL,NULL,NULL,'United Action Initiative',NULL,NULL,162,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(160,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Delana','Delana Jensen',NULL,NULL,NULL,NULL,NULL,'Both','158606223',NULL,'Sample Data','Delana','Y','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Jensen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(161,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cruz-Barkley, Shad','Shad Cruz-Barkley Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2604895058',NULL,'Sample Data','Shad','','Cruz-Barkley',NULL,2,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Cruz-Barkley Sr.',NULL,NULL,'2012-01-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(162,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'United Action Initiative','United Action Initiative',NULL,NULL,NULL,NULL,NULL,'Both','3000484068',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Action Initiative',NULL,NULL,NULL,0,NULL,NULL,159,'United Action Initiative',NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(163,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Margaret','Margaret Reynolds',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1615992834',NULL,'Sample Data','Margaret','B','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Reynolds',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Delana','Delana Zope',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3545847558',NULL,'Sample Data','Delana','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Zope',NULL,1,'2008-11-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(165,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ec.reynolds@testmail.com','ec.reynolds@testmail.com',NULL,NULL,NULL,NULL,NULL,'Both','2178189895',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear ec.reynolds@testmail.com',1,NULL,'Dear ec.reynolds@testmail.com',1,NULL,'ec.reynolds@testmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:27'),(166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Alexia','Alexia Jones',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','252738965',NULL,'Sample Data','Alexia','X','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Jones',NULL,NULL,'1990-08-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(167,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Cooper, Claudio','Mr. Claudio Cooper Jr.',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1104394960',NULL,'Sample Data','Claudio','Q','Cooper',3,1,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Mr. Claudio Cooper Jr.',NULL,NULL,'1978-08-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(168,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Toby','Toby Barkley Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2112758075',NULL,'Sample Data','Toby','','Barkley',NULL,1,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Barkley Jr.',NULL,2,'1979-10-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:26','2019-08-15 21:31:28'),(169,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Ashlie','Ashlie Bachman',NULL,NULL,NULL,NULL,NULL,'Both','628441271',NULL,'Sample Data','Ashlie','T','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Bachman',NULL,1,'1953-08-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(170,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell, Kacey','Mrs. Kacey Terrell',NULL,NULL,NULL,NULL,NULL,'Both','1088955590',NULL,'Sample Data','Kacey','','Terrell',1,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Mrs. Kacey Terrell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(171,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson-Jones, Rebekah','Rebekah Samson-Jones',NULL,NULL,NULL,NULL,NULL,'Both','3389954899',NULL,'Sample Data','Rebekah','','Samson-Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Samson-Jones',NULL,1,'1984-08-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(172,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Lou','Lou McReynolds',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1805936303',NULL,'Sample Data','Lou','X','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou McReynolds',NULL,2,'1977-04-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(173,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'rx.yadav@airmail.org','rx.yadav@airmail.org',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3829836950',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear rx.yadav@airmail.org',1,NULL,'Dear rx.yadav@airmail.org',1,NULL,'rx.yadav@airmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,'Friends Food Partnership',NULL,NULL,184,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(174,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Nicole','Mrs. Nicole Olsen',NULL,NULL,NULL,NULL,NULL,'Both','585291596',NULL,'Sample Data','Nicole','J','Olsen',1,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Mrs. Nicole Olsen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(175,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Grant, Ivey','Ivey Grant',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3330966549',NULL,'Sample Data','Ivey','F','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey Grant',NULL,1,'2002-03-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(176,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav-Ivanov, Rebekah','Ms. Rebekah Yadav-Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','945556703',NULL,'Sample Data','Rebekah','V','Yadav-Ivanov',2,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Ms. Rebekah Yadav-Ivanov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(177,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terrell, Rebekah','Rebekah Terrell',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2497753127',NULL,'Sample Data','Rebekah','W','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Terrell',NULL,NULL,'2007-01-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Elina','Elina Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','2662625802',NULL,'Sample Data','Elina','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Nielsen',NULL,1,'2012-05-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(179,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Lee family','Lee family',NULL,NULL,NULL,NULL,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,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(180,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson-Barkley, Clint','Mr. Clint Samson-Barkley',NULL,NULL,NULL,NULL,NULL,'Both','1147037699',NULL,'Sample Data','Clint','D','Samson-Barkley',3,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Mr. Clint Samson-Barkley',NULL,2,NULL,0,NULL,NULL,NULL,'Addy Wellness Trust',NULL,NULL,19,0,'2019-08-15 21:31:27','2019-08-15 21:31:29'),(181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Elbert','Elbert Barkley',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3782594524',NULL,'Sample Data','Elbert','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Barkley',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(182,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'González-Barkley, Delana','Ms. Delana González-Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3303882605',NULL,'Sample Data','Delana','','González-Barkley',2,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Ms. Delana González-Barkley',NULL,1,'1962-12-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(183,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Jameson, Kathlyn','Kathlyn Jameson',NULL,NULL,NULL,NULL,NULL,'Both','1165214036',NULL,'Sample Data','Kathlyn','F','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Jameson',NULL,NULL,'1985-05-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(184,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Friends Food Partnership','Friends Food Partnership',NULL,NULL,NULL,NULL,NULL,'Both','1768409198',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Food Partnership',NULL,NULL,NULL,0,NULL,NULL,173,'Friends Food Partnership',NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(185,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Ashley','Dr. Ashley Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2224166572',NULL,'Sample Data','Ashley','','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Jacobs',NULL,1,'1955-11-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(186,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cooper-Jensen, Rebekah','Rebekah Cooper-Jensen',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','4221278966',NULL,'Sample Data','Rebekah','V','Cooper-Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Cooper-Jensen',NULL,1,'2012-03-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(187,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Terry-Jameson family','Terry-Jameson family',NULL,NULL,NULL,NULL,NULL,'Both','2620079717',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terry-Jameson family',5,NULL,'Dear Terry-Jameson family',2,NULL,'Terry-Jameson family',NULL,NULL,NULL,0,NULL,'Terry-Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(188,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Barkley family','Cruz-Barkley family',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1248925223',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cruz-Barkley family',5,NULL,'Dear Cruz-Barkley family',2,NULL,'Cruz-Barkley family',NULL,NULL,NULL,0,NULL,'Cruz-Barkley family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(189,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Omar','Mr. Omar Cooper',NULL,NULL,NULL,NULL,NULL,'Both','1015907011',NULL,'Sample Data','Omar','','Cooper',3,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Mr. Omar Cooper',NULL,2,'1959-08-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(190,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley-Parker family','Barkley-Parker family',NULL,NULL,NULL,NULL,NULL,'Both','3026001130',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Barkley-Parker family',5,NULL,'Dear Barkley-Parker family',2,NULL,'Barkley-Parker family',NULL,NULL,NULL,0,NULL,'Barkley-Parker family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(191,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Megan','Mrs. Megan Lee',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3517834087',NULL,'Sample Data','Megan','V','Lee',1,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Mrs. Megan Lee',NULL,1,'1963-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Miguel','Miguel Barkley',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','4174482755',NULL,'Sample Data','Miguel','R','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Barkley',NULL,2,'1965-02-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(193,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Ray','Ray Samson Jr.',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3926508474',NULL,'Sample Data','Ray','D','Samson',NULL,1,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Samson Jr.',NULL,2,'1962-12-22',1,'2019-07-29',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Ashlie','Ashlie Wagner',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3661734493',NULL,'Sample Data','Ashlie','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Wagner',NULL,1,'1981-10-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:27'),(195,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Main Sports Academy','Main Sports Academy',NULL,NULL,NULL,NULL,NULL,'Both','848791468',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Main Sports Academy',NULL,NULL,NULL,0,NULL,NULL,146,'Main Sports Academy',NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(196,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Palo Alto Arts Academy','Palo Alto Arts Academy',NULL,NULL,NULL,NULL,NULL,'Both','377370072',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Palo Alto Arts Academy',NULL,NULL,NULL,0,NULL,NULL,4,'Palo Alto Arts Academy',NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Díaz, Delana','Delana Díaz',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1768580764',NULL,'Sample Data','Delana','I','Díaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Díaz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(198,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jameson, Jerome','Dr. Jerome Jameson Sr.',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2954166359',NULL,'Sample Data','Jerome','T','Jameson',4,2,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Jameson Sr.',NULL,2,'1986-02-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(199,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Samson-Barkley family','Samson-Barkley family',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','365293112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samson-Barkley family',5,NULL,'Dear Samson-Barkley family',2,NULL,'Samson-Barkley family',NULL,NULL,NULL,0,NULL,'Samson-Barkley family',NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(200,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Rosario','Rosario Jones Jr.',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1172090017',NULL,'Sample Data','Rosario','','Jones',NULL,1,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Jones Jr.',NULL,2,NULL,0,NULL,NULL,NULL,'Friends Technology Trust',NULL,NULL,65,0,'2019-08-15 21:31:27','2019-08-15 21:31:28'),(201,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Díaz, Rebekah','Mrs. Rebekah Díaz',NULL,NULL,NULL,NULL,NULL,'Both','1512894919',NULL,'Sample Data','Rebekah','','Díaz',1,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Mrs. Rebekah Díaz',NULL,NULL,'1958-07-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-08-15 21:31:27','2019-08-15 21:31:28');
+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,'2019-09-20 19:57:09'),(2,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Shauna','Dr. Shauna Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','1678938046',NULL,'Sample Data','Shauna','','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Dr. Shauna Ivanov',NULL,NULL,'1948-03-08',1,'2018-10-17',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(3,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Toby','Toby Müller II',NULL,NULL,NULL,NULL,NULL,'Both','3713504892',NULL,'Sample Data','Toby','','Müller',NULL,3,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Müller II',NULL,2,'1977-03-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(4,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'States Culture Collective','States Culture Collective',NULL,NULL,NULL,NULL,NULL,'Both','2119330148',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'States Culture Collective',NULL,NULL,NULL,0,NULL,NULL,185,'States Culture Collective',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(5,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker, Claudio','Claudio Parker',NULL,NULL,NULL,NULL,NULL,'Both','1375114544',NULL,'Sample Data','Claudio','H','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Parker',NULL,2,'2001-02-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(6,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'jacksong80@lol.com','jacksong80@lol.com',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','2746230711',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear jacksong80@lol.com',1,NULL,'Dear jacksong80@lol.com',1,NULL,'jacksong80@lol.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(7,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov, Jackson','Jackson Ivanov III',NULL,NULL,NULL,NULL,NULL,'Both','3246901602',NULL,'Sample Data','Jackson','','Ivanov',NULL,4,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Ivanov III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(8,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Rodrigo','Rodrigo Bachman',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1057827767',NULL,'Sample Data','Rodrigo','Y','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Bachman',NULL,2,'1986-05-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(9,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Barkley, Billy','Billy Barkley Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3175995376',NULL,'Sample Data','Billy','U','Barkley',NULL,1,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Barkley Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Delana','Mrs. Delana Bachman',NULL,NULL,NULL,NULL,NULL,'Both','1435428348',NULL,'Sample Data','Delana','I','Bachman',1,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Mrs. Delana Bachman',NULL,NULL,'1993-07-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Díaz, Rebekah','Rebekah Díaz',NULL,NULL,NULL,NULL,NULL,'Both','1512894919',NULL,'Sample Data','Rebekah','R','Díaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Díaz',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Bob','Bob Samuels Jr.',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','4029201049',NULL,'Sample Data','Bob','Y','Samuels',NULL,1,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Samuels Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(13,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov-Nielsen, Brent','Brent Ivanov-Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','1657871496',NULL,'Sample Data','Brent','','Ivanov-Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Ivanov-Nielsen',NULL,2,'2008-08-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(14,'Household',NULL,0,1,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,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(15,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs family','Jacobs family',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1498986649',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jacobs family',5,NULL,'Dear Jacobs family',2,NULL,'Jacobs family',NULL,NULL,NULL,0,NULL,'Jacobs family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(16,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Lee, Errol','Errol Lee',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1182001849',NULL,'Sample Data','Errol','W','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Lee',NULL,2,'1944-10-09',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(17,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jacobs, Elina','Dr. Elina Jacobs',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3932041193',NULL,'Sample Data','Elina','P','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Dr. Elina Jacobs',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(18,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Ivanov-Nielsen, Maxwell','Maxwell Ivanov-Nielsen',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','4030838087',NULL,'Sample Data','Maxwell','','Ivanov-Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Ivanov-Nielsen',NULL,2,'2005-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(19,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Roland','Roland Adams',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2320657874',NULL,'Sample Data','Roland','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Adams',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(20,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen-McReynolds, Angelika','Angelika Nielsen-McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','221213269',NULL,'Sample Data','Angelika','','Nielsen-McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Nielsen-McReynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(21,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jones-Lee family','Jones-Lee family',NULL,NULL,NULL,NULL,NULL,'Both','3144062899',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jones-Lee family',5,NULL,'Dear Jones-Lee family',2,NULL,'Jones-Lee family',NULL,NULL,NULL,0,NULL,'Jones-Lee family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(22,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Jerome','Dr. Jerome Yadav',NULL,NULL,NULL,NULL,NULL,'Both','2655948882',NULL,'Sample Data','Jerome','P','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Yadav',NULL,2,'1996-02-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Felisha','Felisha Nielsen',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3470675762',NULL,'Sample Data','Felisha','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Nielsen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs-Jones, Teresa','Mrs. Teresa Jacobs-Jones',NULL,NULL,NULL,NULL,NULL,'Both','2370866954',NULL,'Sample Data','Teresa','X','Jacobs-Jones',1,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Mrs. Teresa Jacobs-Jones',NULL,NULL,'1956-10-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(25,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Troy','Troy Samuels',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2799330146',NULL,'Sample Data','Troy','A','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Samuels',NULL,2,NULL,1,'2019-09-12',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(26,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs, Craig','Craig Jacobs Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2112460975',NULL,'Sample Data','Craig','','Jacobs',NULL,2,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Craig Jacobs Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(27,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov family','Ivanov family',NULL,NULL,NULL,NULL,NULL,'Both','2450779112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov family',5,NULL,'Dear Ivanov family',2,NULL,'Ivanov family',NULL,NULL,NULL,0,NULL,'Ivanov family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(28,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Ivanov, Jerome','Mr. Jerome Ivanov III',NULL,NULL,NULL,NULL,NULL,'Both','3339080017',NULL,'Sample Data','Jerome','Q','Ivanov',3,4,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Mr. Jerome Ivanov III',NULL,2,'1958-12-18',0,NULL,NULL,NULL,'Lumber City Development Fellowship',NULL,NULL,83,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(29,'Organization',NULL,1,0,0,0,1,0,NULL,NULL,'Local Empowerment Solutions','Local Empowerment Solutions',NULL,NULL,NULL,NULL,NULL,'Both','2469703716',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Local Empowerment Solutions',NULL,NULL,NULL,0,NULL,NULL,82,'Local Empowerment Solutions',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(30,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Errol','Errol Müller III',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','807767976',NULL,'Sample Data','Errol','','Müller',NULL,4,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Müller III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(31,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov family','Ivanov family',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','2450779112',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov family',5,NULL,'Dear Ivanov family',2,NULL,'Ivanov family',NULL,NULL,NULL,0,NULL,'Ivanov family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(32,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav family','Yadav family',NULL,NULL,NULL,'\ 15\ 1',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,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(33,'Household',NULL,1,0,0,0,1,0,NULL,NULL,'Ivanov-Nielsen family','Ivanov-Nielsen family',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3086379723',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov-Nielsen family',5,NULL,'Dear Ivanov-Nielsen family',2,NULL,'Ivanov-Nielsen family',NULL,NULL,NULL,0,NULL,'Ivanov-Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(34,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cooper, Iris','Dr. Iris Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2973926348',NULL,'Sample Data','Iris','','Cooper',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris Cooper',NULL,1,'1941-07-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(35,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Ivanov, Allan','Allan Ivanov III',NULL,NULL,NULL,NULL,NULL,'Both','3313048045',NULL,'Sample Data','Allan','K','Ivanov',NULL,4,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Ivanov III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(36,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Ivanov, Scarlet','Scarlet Ivanov',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','959385532',NULL,'Sample Data','Scarlet','','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Scarlet Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(37,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov-Müller, Santina','Dr. Santina Ivanov-Müller',NULL,NULL,NULL,NULL,NULL,'Both','3198007126',NULL,'Sample Data','Santina','D','Ivanov-Müller',4,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Dr. Santina Ivanov-Müller',NULL,1,'1978-02-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(38,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Bob','Bob Nielsen III',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1542221610',NULL,'Sample Data','Bob','','Nielsen',NULL,4,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Bob Nielsen III',NULL,NULL,'2012-12-31',0,NULL,NULL,NULL,'Maple Software School',NULL,NULL,168,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Josefa','Josefa Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2303939746',NULL,'Sample Data','Josefa','O','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Deforest',NULL,NULL,NULL,0,NULL,NULL,NULL,'Cheshire Action Center',NULL,NULL,182,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(40,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs, Claudio','Claudio Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','3740618228',NULL,'Sample Data','Claudio','F','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Jacobs',NULL,2,'1997-08-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(41,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Lee, Beula','Dr. Beula Lee',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1766744180',NULL,'Sample Data','Beula','','Lee',4,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Dr. Beula Lee',NULL,NULL,'1955-08-24',1,'2019-07-08',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(42,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Kernersville Advocacy Alliance','Kernersville Advocacy Alliance',NULL,NULL,NULL,NULL,NULL,'Both','3061699220',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Kernersville Advocacy Alliance',NULL,NULL,NULL,0,NULL,NULL,125,'Kernersville Advocacy Alliance',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(43,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Omar','Omar Nielsen',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1831503188',NULL,'Sample Data','Omar','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Nielsen',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(44,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Lashawnda','Ms. Lashawnda Patel',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3886858056',NULL,'Sample Data','Lashawnda','E','Patel',2,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Ms. Lashawnda Patel',NULL,NULL,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'olsene85@airmail.co.in','olsene85@airmail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','2464575467',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear olsene85@airmail.co.in',1,NULL,'Dear olsene85@airmail.co.in',1,NULL,'olsene85@airmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Kandace','Kandace Deforest',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1547944287',NULL,'Sample Data','Kandace','J','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(47,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Simpson Technology Trust','Simpson Technology Trust',NULL,NULL,NULL,NULL,NULL,'Both','337777674',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Simpson Technology Trust',NULL,NULL,NULL,0,NULL,NULL,162,'Simpson Technology Trust',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(48,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen, Kiara','Mrs. Kiara Jensen',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','4228592498',NULL,'Sample Data','Kiara','','Jensen',1,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Mrs. Kiara Jensen',NULL,1,NULL,0,NULL,NULL,NULL,'White Marsh Sports School',NULL,NULL,191,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Princess','Mrs. Princess Jones',NULL,NULL,NULL,NULL,NULL,'Both','3647166533',NULL,'Sample Data','Princess','','Jones',1,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Mrs. Princess Jones',NULL,1,'1951-04-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(50,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,'\ 13\ 1',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,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(51,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Parker, Daren','Daren Parker Sr.',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','107757717',NULL,'Sample Data','Daren','','Parker',NULL,2,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Parker Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(52,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen-McReynolds family','Nielsen-McReynolds family',NULL,NULL,NULL,NULL,NULL,'Both','3729700158',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen-McReynolds family',5,NULL,'Dear Nielsen-McReynolds family',2,NULL,'Nielsen-McReynolds family',NULL,NULL,NULL,0,NULL,'Nielsen-McReynolds family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Teddy','Teddy Jameson II',NULL,NULL,NULL,NULL,NULL,'Both','4104650414',NULL,'Sample Data','Teddy','','Jameson',NULL,3,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Jameson II',NULL,2,'2007-03-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(54,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Bryon','Bryon Yadav III',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1301093368',NULL,'Sample Data','Bryon','G','Yadav',NULL,4,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Yadav III',NULL,NULL,'1967-06-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(55,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Bernadette','Dr. Bernadette Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3126349786',NULL,'Sample Data','Bernadette','','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Dr. Bernadette Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(56,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Missouri Arts Initiative','Missouri Arts Initiative',NULL,NULL,NULL,NULL,NULL,'Both','3834820123',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Missouri Arts Initiative',NULL,NULL,NULL,0,NULL,NULL,NULL,'Missouri Arts Initiative',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(57,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen-McReynolds, Esta','Mrs. Esta Nielsen-McReynolds',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3791995026',NULL,'Sample Data','Esta','','Nielsen-McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Mrs. Esta Nielsen-McReynolds',NULL,1,'1982-02-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(58,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jacobs-jamesonr51@testing.com','jacobs-jamesonr51@testing.com',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1243854947',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jacobs-jamesonr51@testing.com',1,NULL,'Dear jacobs-jamesonr51@testing.com',1,NULL,'jacobs-jamesonr51@testing.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(59,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Sherman','Dr. Sherman Jensen Jr.',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1444666503',NULL,'Sample Data','Sherman','M','Jensen',4,1,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Dr. Sherman Jensen Jr.',NULL,NULL,'1997-10-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Clint','Clint Deforest',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2437706084',NULL,'Sample Data','Clint','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Deforest',NULL,2,'1989-12-27',0,NULL,NULL,NULL,'Northpoint Poetry Initiative',NULL,NULL,96,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(61,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Atlanta Agriculture Solutions','Atlanta Agriculture Solutions',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2010883488',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Atlanta Agriculture Solutions',NULL,NULL,NULL,0,NULL,NULL,NULL,'Atlanta Agriculture Solutions',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(62,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Barkley, Esta','Ms. Esta Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2407753300',NULL,'Sample Data','Esta','I','Barkley',2,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Ms. Esta Barkley',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(63,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov, Laree','Laree Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','713398135',NULL,'Sample Data','Laree','P','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Laree Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,'Local Music Alliance',NULL,NULL,172,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(64,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Miguel','Miguel Müller',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','317510167',NULL,'Sample Data','Miguel','Q','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Müller',NULL,2,'1999-11-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(65,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Jacob','Jacob Nielsen Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1661720619',NULL,'Sample Data','Jacob','','Nielsen',NULL,2,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Nielsen Sr.',NULL,2,'1998-09-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(66,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'teresayadav@testing.net','teresayadav@testing.net',NULL,NULL,NULL,NULL,NULL,'Both','3576891443',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear teresayadav@testing.net',1,NULL,'Dear teresayadav@testing.net',1,NULL,'teresayadav@testing.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Rolando','Dr. Rolando Samson III',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3728356464',NULL,'Sample Data','Rolando','Z','Samson',4,4,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Dr. Rolando Samson III',NULL,2,NULL,1,'2018-11-09',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest-Ivanov, Herminia','Ms. Herminia Deforest-Ivanov',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','669810303',NULL,'Sample Data','Herminia','M','Deforest-Ivanov',2,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Ms. Herminia Deforest-Ivanov',NULL,NULL,'1975-11-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(69,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Allen','Dr. Allen Parker',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','710842690',NULL,'Sample Data','Allen','','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Dr. Allen Parker',NULL,NULL,'1978-09-05',1,'2018-10-04',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(70,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrovi56@spamalot.net','dimitrovi56@spamalot.net',NULL,NULL,NULL,NULL,NULL,'Both','2613972798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear dimitrovi56@spamalot.net',1,NULL,'Dear dimitrovi56@spamalot.net',1,NULL,'dimitrovi56@spamalot.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(71,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen family','Nielsen family',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','766698874',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Nielsen family',5,NULL,'Dear Nielsen family',2,NULL,'Nielsen family',NULL,NULL,NULL,0,NULL,'Nielsen family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(72,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Ivanov, Herminia','Dr. Herminia Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3410851077',NULL,'Sample Data','Herminia','','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Dr. Herminia Ivanov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(73,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'adamss@example.info','adamss@example.info',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','968220667',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear adamss@example.info',1,NULL,'Dear adamss@example.info',1,NULL,'adamss@example.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(74,'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,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(75,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Robertson-Smith, Magan','Magan Robertson-Smith',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','370591172',NULL,'Sample Data','Magan','L','Robertson-Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Magan Robertson-Smith',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(76,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell, Jed','Mr. Jed Terrell',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1773288305',NULL,'Sample Data','Jed','N','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Mr. Jed Terrell',NULL,2,'1930-10-27',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(77,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Patel, Rodrigo','Rodrigo Patel',NULL,NULL,NULL,'\ 14\ 1',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,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samson.arlyne94@testmail.net','samson.arlyne94@testmail.net',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','4232787254',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear samson.arlyne94@testmail.net',1,NULL,'Dear samson.arlyne94@testmail.net',1,NULL,'samson.arlyne94@testmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(79,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Andrew','Andrew Reynolds',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3309670970',NULL,'Sample Data','Andrew','T','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Reynolds',NULL,2,'1932-08-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(80,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Shauna','Shauna Adams',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1778468249',NULL,'Sample Data','Shauna','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Adams',NULL,1,'1982-07-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(81,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Jacob','Dr. Jacob Jones Sr.',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','210245998',NULL,'Sample Data','Jacob','','Jones',4,2,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Dr. Jacob Jones Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(82,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Parker, Josefa','Dr. Josefa Parker',NULL,NULL,NULL,NULL,NULL,'Both','2643167156',NULL,'Sample Data','Josefa','Q','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Dr. Josefa Parker',NULL,1,'1958-05-04',0,NULL,NULL,NULL,'Local Empowerment Solutions',NULL,NULL,29,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(83,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Lumber City Development Fellowship','Lumber City Development Fellowship',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1771565526',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Lumber City Development Fellowship',NULL,NULL,NULL,0,NULL,NULL,28,'Lumber City Development Fellowship',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(84,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs-Jameson, Daren','Daren Jacobs-Jameson Jr.',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2325699535',NULL,'Sample Data','Daren','S','Jacobs-Jameson',NULL,1,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Jacobs-Jameson Jr.',NULL,2,'1991-08-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(85,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Josefa','Dr. Josefa Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3267028471',NULL,'Sample Data','Josefa','B','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Dr. Josefa Nielsen',NULL,NULL,'1960-02-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(86,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wagner, Elina','Elina Wagner',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','4003830950',NULL,'Sample Data','Elina','','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Wagner',NULL,1,'1962-07-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(87,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman, Margaret','Dr. Margaret Bachman',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2110616060',NULL,'Sample Data','Margaret','W','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Dr. Margaret Bachman',NULL,NULL,'1979-12-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(88,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Barry','Barry Smith Jr.',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3850252418',NULL,'Sample Data','Barry','','Smith',NULL,1,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Smith Jr.',NULL,NULL,'1979-05-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(89,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Arlyne','Arlyne McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','1526771757',NULL,'Sample Data','Arlyne','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne McReynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(90,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Craig','Mr. Craig Deforest III',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3831945065',NULL,'Sample Data','Craig','C','Deforest',3,4,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Mr. Craig Deforest III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(91,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'McReynolds, Valene','Valene McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','2007971144',NULL,'Sample Data','Valene','K','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene McReynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(92,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Kathlyn','Kathlyn Smith',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','97768727',NULL,'Sample Data','Kathlyn','V','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Smith',NULL,1,'1962-04-25',1,'2018-11-25',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(93,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'El Camino Advocacy Collective','El Camino Advocacy Collective',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1871149562',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'El Camino Advocacy Collective',NULL,NULL,NULL,0,NULL,NULL,103,'El Camino Advocacy Collective',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(94,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrov.bryon75@notmail.org','dimitrov.bryon75@notmail.org',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','637290274',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear dimitrov.bryon75@notmail.org',1,NULL,'Dear dimitrov.bryon75@notmail.org',1,NULL,'dimitrov.bryon75@notmail.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(95,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Megan','Megan Deforest',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','588269616',NULL,'Sample Data','Megan','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(96,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Northpoint Poetry Initiative','Northpoint Poetry Initiative',NULL,NULL,NULL,NULL,NULL,'Both','3512734240',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Northpoint Poetry Initiative',NULL,NULL,NULL,0,NULL,NULL,60,'Northpoint Poetry Initiative',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(97,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'brigetteyadav10@lol.co.pl','brigetteyadav10@lol.co.pl',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','72022308',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear brigetteyadav10@lol.co.pl',1,NULL,'Dear brigetteyadav10@lol.co.pl',1,NULL,'brigetteyadav10@lol.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(98,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Bay Wellness Partnership','Bay Wellness Partnership',NULL,NULL,NULL,NULL,NULL,'Both','3828719205',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bay Wellness Partnership',NULL,NULL,NULL,0,NULL,NULL,117,'Bay Wellness Partnership',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(99,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Mei','Dr. Mei Müller',NULL,NULL,NULL,NULL,NULL,'Both','726297805',NULL,'Sample Data','Mei','H','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Dr. Mei Müller',NULL,1,'1982-03-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(100,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest family','Deforest family',NULL,NULL,NULL,'\ 13\ 1',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,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(101,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jameson, Jackson','Dr. Jackson Jameson Jr.',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','680754950',NULL,'Sample Data','Jackson','S','Jameson',4,1,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Jameson Jr.',NULL,NULL,'1947-05-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(102,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Russell','Dr. Russell Jensen III',NULL,NULL,NULL,NULL,NULL,'Both','1300991464',NULL,'Sample Data','Russell','R','Jensen',4,4,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Dr. Russell Jensen III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Bob','Dr. Bob Cruz II',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1833840419',NULL,'Sample Data','Bob','','Cruz',4,3,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Dr. Bob Cruz II',NULL,NULL,'1965-05-03',1,NULL,NULL,NULL,'El Camino Advocacy Collective',NULL,NULL,93,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Beula','Beula Müller',NULL,NULL,NULL,NULL,NULL,'Both','521667941',NULL,'Sample Data','Beula','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Beula Müller',NULL,1,'1931-09-07',1,'2018-10-01',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(105,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Sanford','Sanford Smith III',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2584375586',NULL,'Sample Data','Sanford','','Smith',NULL,4,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Smith III',NULL,NULL,'1969-11-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(106,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'samuelsa@airmail.net','samuelsa@airmail.net',NULL,NULL,NULL,NULL,NULL,'Both','1557955432',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear samuelsa@airmail.net',1,NULL,'Dear samuelsa@airmail.net',1,NULL,'samuelsa@airmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(107,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Müller family','Müller family',NULL,NULL,NULL,NULL,NULL,'Both','1144797465',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Müller family',5,NULL,'Dear Müller family',2,NULL,'Müller family',NULL,NULL,NULL,0,NULL,'Müller family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Rolando','Rolando Nielsen III',NULL,NULL,NULL,NULL,NULL,'Both','1720954446',NULL,'Sample Data','Rolando','Y','Nielsen',NULL,4,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Rolando Nielsen III',NULL,NULL,'1960-12-04',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(109,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Billy','Dr. Billy Jensen',NULL,NULL,NULL,NULL,NULL,'Both','1055811033',NULL,'Sample Data','Billy','','Jensen',4,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Jensen',NULL,NULL,'1967-07-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(110,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs-Jameson family','Jacobs-Jameson family',NULL,NULL,NULL,NULL,NULL,'Both','2511058201',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jacobs-Jameson family',5,NULL,'Dear Jacobs-Jameson family',2,NULL,'Jacobs-Jameson family',NULL,NULL,NULL,0,NULL,'Jacobs-Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(111,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Jacob','Jacob González III',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','2352039359',NULL,'Sample Data','Jacob','','González',NULL,4,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob González III',NULL,2,'1942-08-13',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(112,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wilson, Errol','Errol Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1627252863',NULL,'Sample Data','Errol','A','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Wilson',NULL,2,'1973-01-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(113,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Robertson, Barry','Dr. Barry Robertson',NULL,NULL,NULL,NULL,NULL,'Both','3681115611',NULL,'Sample Data','Barry','P','Robertson',4,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Dr. Barry Robertson',NULL,2,NULL,1,'2019-05-23',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(114,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Ashley','Ashley Adams',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2907231858',NULL,'Sample Data','Ashley','T','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Adams',NULL,1,'2001-10-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(115,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Maxwell','Maxwell Samson',NULL,NULL,NULL,NULL,NULL,'Both','3358700661',NULL,'Sample Data','Maxwell','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Samson',NULL,NULL,'1977-02-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(116,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jacobs, Jerome','Dr. Jerome Jacobs II',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3771685800',NULL,'Sample Data','Jerome','','Jacobs',4,3,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Jacobs II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(117,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Shauna','Shauna Olsen',NULL,NULL,NULL,NULL,NULL,'Both','774481679',NULL,'Sample Data','Shauna','','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Olsen',NULL,1,NULL,0,NULL,NULL,NULL,'Bay Wellness Partnership',NULL,NULL,98,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(118,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jensenr90@airmail.co.pl','jensenr90@airmail.co.pl',NULL,NULL,NULL,NULL,NULL,'Both','245011405',NULL,'Sample Data',NULL,NULL,NULL,NULL,2,NULL,NULL,1,NULL,'Dear jensenr90@airmail.co.pl',1,NULL,'Dear jensenr90@airmail.co.pl',1,NULL,'jensenr90@airmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(119,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Bob','Dr. Bob Jones',NULL,NULL,NULL,NULL,NULL,'Both','3998571591',NULL,'Sample Data','Bob','T','Jones',4,NULL,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Dr. Bob Jones',NULL,2,'1952-10-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(120,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'teresapatel@infomail.co.in','teresapatel@infomail.co.in',NULL,NULL,NULL,NULL,NULL,'Both','228692150',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear teresapatel@infomail.co.in',1,NULL,'Dear teresapatel@infomail.co.in',1,NULL,'teresapatel@infomail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(121,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Princess','Dr. Princess Deforest',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1925726838',NULL,'Sample Data','Princess','','Deforest',4,NULL,NULL,NULL,1,NULL,'Dear Princess',1,NULL,'Dear Princess',1,NULL,'Dr. Princess Deforest',NULL,1,'1935-11-01',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(122,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Ashley','Mrs. Ashley Müller',NULL,NULL,NULL,NULL,NULL,'Both','1765273869',NULL,'Sample Data','Ashley','','Müller',1,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Mrs. Ashley Müller',NULL,NULL,'1945-11-13',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(123,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Łąchowski, Brent','Brent Łąchowski',NULL,NULL,NULL,NULL,NULL,'Both','1516135364',NULL,'Sample Data','Brent','','Łąchowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Łąchowski',NULL,2,'1997-01-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(124,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Zope, Irvin','Irvin Zope II',NULL,NULL,NULL,NULL,NULL,'Both','1828686361',NULL,'Sample Data','Irvin','','Zope',NULL,3,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Irvin Zope II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(125,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Erik','Mr. Erik Jones',NULL,NULL,NULL,NULL,NULL,'Both','2330527587',NULL,'Sample Data','Erik','D','Jones',3,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Mr. Erik Jones',NULL,2,NULL,0,NULL,NULL,NULL,'Kernersville Advocacy Alliance',NULL,NULL,42,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(126,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Errol','Errol Cruz III',NULL,NULL,NULL,NULL,NULL,'Both','4273315760',NULL,'Sample Data','Errol','U','Cruz',NULL,4,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Errol Cruz III',NULL,2,'1985-12-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(127,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Prentice, Jerome','Dr. Jerome Prentice',NULL,NULL,NULL,NULL,NULL,'Both','2816560525',NULL,'Sample Data','Jerome','V','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Prentice',NULL,2,'1941-04-23',1,'2019-01-25',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(128,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Landon','Dr. Landon Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','3544857327',NULL,'Sample Data','Landon','','Dimitrov',4,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Dimitrov',NULL,2,'1980-09-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(129,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'au.jones51@notmail.co.uk','au.jones51@notmail.co.uk',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2540604198',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear au.jones51@notmail.co.uk',1,NULL,'Dear au.jones51@notmail.co.uk',1,NULL,'au.jones51@notmail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Megan','Megan Yadav',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','2317893883',NULL,'Sample Data','Megan','S','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Megan Yadav',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(131,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Terrell, Jackson','Dr. Jackson Terrell',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3811181672',NULL,'Sample Data','Jackson','K','Terrell',4,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Terrell',NULL,2,NULL,1,'2019-04-30',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(132,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Errol','Dr. Errol Jones Jr.',NULL,NULL,NULL,NULL,NULL,'Both','908628622',NULL,'Sample Data','Errol','','Jones',4,1,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Dr. Errol Jones Jr.',NULL,NULL,'1978-12-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Bryon','Dr. Bryon Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2100976885',NULL,'Sample Data','Bryon','','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Dr. Bryon Jacobs',NULL,NULL,'1955-10-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(134,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs, Ashlie','Ashlie Jacobs',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1009124847',NULL,'Sample Data','Ashlie','V','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Jacobs',NULL,1,'1967-11-21',0,NULL,NULL,NULL,'Global Sports Trust',NULL,NULL,138,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(135,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Elina','Elina Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','3932041193',NULL,'Sample Data','Elina','R','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Elina Jacobs',NULL,1,'1996-08-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(136,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Samson, Josefa','Ms. Josefa Samson',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','3599094976',NULL,'Sample Data','Josefa','X','Samson',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Samson',NULL,1,'1985-12-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(137,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Community Software Fund','Community Software Fund',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1336423295',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Community Software Fund',NULL,NULL,NULL,0,NULL,NULL,187,'Community Software Fund',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(138,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Global Sports Trust','Global Sports Trust',NULL,NULL,NULL,NULL,NULL,'Both','2008289903',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Sports Trust',NULL,NULL,NULL,0,NULL,NULL,134,'Global Sports Trust',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Carylon','Carylon Jacobs',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','548653672',NULL,'Sample Data','Carylon','Q','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Carylon',1,NULL,'Dear Carylon',1,NULL,'Carylon Jacobs',NULL,1,'1965-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Allan','Allan Reynolds III',NULL,NULL,NULL,NULL,NULL,'Both','2732914112',NULL,'Sample Data','Allan','','Reynolds',NULL,4,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Allan Reynolds III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(141,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Caulder Sports Fund','Caulder Sports Fund',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','1126006360',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Caulder Sports Fund',NULL,NULL,NULL,0,NULL,NULL,145,'Caulder Sports Fund',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(142,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Zope-Patel, Kiara','Kiara Zope-Patel',NULL,NULL,NULL,NULL,NULL,'Both','925434648',NULL,'Sample Data','Kiara','','Zope-Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Zope-Patel',NULL,1,'1997-12-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(143,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Smith family','Smith family',NULL,NULL,NULL,NULL,NULL,'Both','4082772645',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Smith family',5,NULL,'Dear Smith family',2,NULL,'Smith family',NULL,NULL,NULL,0,NULL,'Smith family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(144,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Díaz, Lashawnda','Lashawnda Díaz',NULL,NULL,NULL,NULL,NULL,'Both','2462862160',NULL,'Sample Data','Lashawnda','','Díaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Lashawnda Díaz',NULL,NULL,'1987-12-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(145,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Samuels, Tanya','Tanya Samuels',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','147060242',NULL,'Sample Data','Tanya','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Samuels',NULL,1,'1961-03-15',0,NULL,NULL,NULL,'Caulder Sports Fund',NULL,NULL,141,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Brittney','Mrs. Brittney Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','3787428926',NULL,'Sample Data','Brittney','','Ivanov',1,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Mrs. Brittney Ivanov',NULL,NULL,'1964-08-26',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(147,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Cruz, Carlos','Mr. Carlos Cruz Jr.',NULL,NULL,NULL,NULL,NULL,'Both','149105357',NULL,'Sample Data','Carlos','','Cruz',3,1,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Mr. Carlos Cruz Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(148,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Adams, Herminia','Herminia Adams',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','1782178525',NULL,'Sample Data','Herminia','Q','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Adams',NULL,NULL,'1998-02-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(149,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Kathlyn','Kathlyn Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','3934921435',NULL,'Sample Data','Kathlyn','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Dimitrov',NULL,1,'1982-01-25',0,NULL,NULL,NULL,'Main Arts Center',NULL,NULL,160,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(150,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Alexia','Alexia Müller',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','3709597045',NULL,'Sample Data','Alexia','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Alexia',1,NULL,'Dear Alexia',1,NULL,'Alexia Müller',NULL,1,'1993-08-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(151,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Grant, Russell','Russell Grant',NULL,NULL,NULL,NULL,NULL,'Both','388937713',NULL,'Sample Data','Russell','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Grant',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(152,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Shad','Shad Jacobs Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3732235082',NULL,'Sample Data','Shad','M','Jacobs',NULL,2,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad Jacobs Sr.',NULL,2,'2007-07-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(153,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jensen, Santina','Ms. Santina Jensen',NULL,NULL,NULL,NULL,NULL,'Both','864111104',NULL,'Sample Data','Santina','L','Jensen',2,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Ms. Santina Jensen',NULL,1,'1947-04-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(154,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Zope-Patel family','Zope-Patel family',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3836073694',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Zope-Patel family',5,NULL,'Dear Zope-Patel family',2,NULL,'Zope-Patel family',NULL,NULL,NULL,0,NULL,'Zope-Patel family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(155,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Erik','Erik Bachman',NULL,NULL,NULL,NULL,NULL,'Both','620728720',NULL,'Sample Data','Erik','C','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Bachman',NULL,2,NULL,1,'2018-12-04',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(156,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Betty','Betty Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','206687423',NULL,'Sample Data','Betty','M','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Dimitrov',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(157,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Dimitrov family','Dimitrov family',NULL,NULL,NULL,NULL,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,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(158,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Cruz, Claudio','Claudio Cruz Sr.',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','3764731328',NULL,'Sample Data','Claudio','','Cruz',NULL,2,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Cruz Sr.',NULL,2,'1979-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(159,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel, Kiara','Dr. Kiara Patel',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2968776132',NULL,'Sample Data','Kiara','N','Patel',4,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Dr. Kiara Patel',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(160,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Main Arts Center','Main Arts Center',NULL,NULL,NULL,NULL,NULL,'Both','2905406863',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Main Arts Center',NULL,NULL,NULL,0,NULL,NULL,149,'Main Arts Center',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(161,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Scott','Scott Jacobs III',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2229288735',NULL,'Sample Data','Scott','O','Jacobs',NULL,4,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Jacobs III',NULL,2,NULL,1,'2019-09-12',NULL,NULL,'Baker Peace Solutions',NULL,NULL,175,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(162,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Barkley, Bernadette','Bernadette Barkley',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2929366721',NULL,'Sample Data','Bernadette','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Barkley',NULL,NULL,NULL,0,NULL,NULL,NULL,'Simpson Technology Trust',NULL,NULL,47,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(163,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Allan','Mr. Allan Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','238176924',NULL,'Sample Data','Allan','','Jacobs',3,NULL,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Jacobs',NULL,NULL,'1959-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(164,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman family','Bachman family',NULL,NULL,NULL,'\ 11\ 1',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,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(165,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'estajensen@lol.org','estajensen@lol.org',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','3862874273',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear estajensen@lol.org',1,NULL,'Dear estajensen@lol.org',1,NULL,'estajensen@lol.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Ray','Ray Ivanov Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2368574076',NULL,'Sample Data','Ray','L','Ivanov',NULL,2,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Ivanov Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(167,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Brzęczysław','Brzęczysław Deforest Sr.',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','5133953',NULL,'Sample Data','Brzęczysław','','Deforest',NULL,2,NULL,NULL,1,NULL,'Dear Brzęczysław',1,NULL,'Dear Brzęczysław',1,NULL,'Brzęczysław Deforest Sr.',NULL,2,'2002-10-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(168,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Maple Software School','Maple Software School',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2802269565',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Maple Software School',NULL,NULL,NULL,0,NULL,NULL,38,'Maple Software School',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(169,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'jones-lee.brigette@mymail.co.in','jones-lee.brigette@mymail.co.in',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2628951062',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear jones-lee.brigette@mymail.co.in',1,NULL,'Dear jones-lee.brigette@mymail.co.in',1,NULL,'jones-lee.brigette@mymail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(170,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope-Patel, Toby','Toby Zope-Patel',NULL,NULL,NULL,NULL,NULL,'Both','1314531740',NULL,'Sample Data','Toby','','Zope-Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Zope-Patel',NULL,2,'1990-06-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(171,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Truman','Truman Dimitrov',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','231051732',NULL,'Sample Data','Truman','C','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Truman Dimitrov',NULL,2,'1948-08-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(172,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Local Music Alliance','Local Music Alliance',NULL,NULL,NULL,NULL,NULL,'Both','1337624696',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Local Music Alliance',NULL,NULL,NULL,0,NULL,NULL,63,'Local Music Alliance',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(173,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman, Lawerence','Dr. Lawerence Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2961144560',NULL,'Sample Data','Lawerence','G','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Dr. Lawerence Bachman',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(174,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Jackson','Dr. Jackson Nielsen III',NULL,NULL,NULL,NULL,NULL,'Both','1699263324',NULL,'Sample Data','Jackson','','Nielsen',4,4,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Nielsen III',NULL,2,NULL,1,'2019-01-11',NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(175,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Baker Peace Solutions','Baker Peace Solutions',NULL,NULL,NULL,'\ 12\ 1',NULL,'Both','1950822334',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Baker Peace Solutions',NULL,NULL,NULL,0,NULL,NULL,161,'Baker Peace Solutions',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(176,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Herminia','Herminia Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2172372210',NULL,'Sample Data','Herminia','B','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Jameson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(177,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Jones, Josefa','Ms. Josefa Jones',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3294876457',NULL,'Sample Data','Josefa','I','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Jones',NULL,1,'1975-06-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Junko','Junko Smith',NULL,NULL,NULL,NULL,NULL,'Both','1889402326',NULL,'Sample Data','Junko','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Smith',NULL,1,'2000-03-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(179,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Maxwell','Maxwell Dimitrov II',NULL,NULL,NULL,NULL,NULL,'Both','2461663646',NULL,'Sample Data','Maxwell','Y','Dimitrov',NULL,3,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Dimitrov II',NULL,NULL,'2002-10-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(180,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Miguel','Miguel Jones',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3236387575',NULL,'Sample Data','Miguel','','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Miguel',1,NULL,'Dear Miguel',1,NULL,'Miguel Jones',NULL,NULL,'1952-06-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(181,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Robertson, Roland','Roland Robertson II',NULL,NULL,NULL,NULL,NULL,'Both','2663656740',NULL,'Sample Data','Roland','','Robertson',NULL,3,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Robertson II',NULL,2,'1941-06-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(182,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Cheshire Action Center','Cheshire Action Center',NULL,NULL,NULL,NULL,NULL,'Both','3880160044',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Cheshire Action Center',NULL,NULL,NULL,0,NULL,NULL,39,'Cheshire Action Center',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(183,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jacobs, Lawerence','Lawerence Jacobs',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2914828015',NULL,'Sample Data','Lawerence','','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Jacobs',NULL,NULL,'1979-06-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(184,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'nielsen.j.angelika@lol.org','nielsen.j.angelika@lol.org',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','2999481481',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear nielsen.j.angelika@lol.org',1,NULL,'Dear nielsen.j.angelika@lol.org',1,NULL,'nielsen.j.angelika@lol.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(185,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jones, Brent','Mr. Brent Jones II',NULL,NULL,NULL,NULL,NULL,'Both','2534822524',NULL,'Sample Data','Brent','R','Jones',3,3,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Mr. Brent Jones II',NULL,2,'1970-01-29',1,'2019-02-05',NULL,NULL,'States Culture Collective',NULL,NULL,4,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(186,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Texas Technology Partners','Texas Technology Partners',NULL,NULL,NULL,'\ 11\ 1',NULL,'Both','1008431822',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Texas Technology Partners',NULL,NULL,NULL,0,NULL,NULL,NULL,'Texas Technology Partners',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(187,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Kandace','Kandace Roberts',NULL,NULL,NULL,NULL,NULL,'Both','3760408869',NULL,'Sample Data','Kandace','','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Roberts',NULL,1,NULL,0,NULL,NULL,NULL,'Community Software Fund',NULL,NULL,137,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(188,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Heidi','Heidi Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','1354340123',NULL,'Sample Data','Heidi','','Ivanov',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Ivanov',NULL,1,'1985-03-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(189,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jacobs, Bernadette','Bernadette Jacobs',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','4086516301',NULL,'Sample Data','Bernadette','D','Jacobs',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Jacobs',NULL,NULL,'1984-10-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(190,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Elizabeth','Mrs. Elizabeth Bachman',NULL,NULL,NULL,NULL,NULL,'Both','2403880070',NULL,'Sample Data','Elizabeth','','Bachman',1,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Mrs. Elizabeth Bachman',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(191,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'White Marsh Sports School','White Marsh Sports School',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','3409844628',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'White Marsh Sports School',NULL,NULL,NULL,0,NULL,NULL,48,'White Marsh Sports School',NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(192,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Łąchowski, Lincoln','Mr. Lincoln Łąchowski Jr.',NULL,NULL,NULL,NULL,NULL,'Both','4115738277',NULL,'Sample Data','Lincoln','X','Łąchowski',3,1,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Mr. Lincoln Łąchowski Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(193,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov, Jacob','Jacob Ivanov Sr.',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','3702183609',NULL,'Sample Data','Jacob','P','Ivanov',NULL,2,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Ivanov Sr.',NULL,2,'1990-08-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones-Lee, Erik','Erik Jones-Lee',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','1686496511',NULL,'Sample Data','Erik','A','Jones-Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Jones-Lee',NULL,NULL,'2015-05-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(195,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'carlosl@fishmail.co.pl','carlosl@fishmail.co.pl',NULL,NULL,NULL,'\ 13\ 1',NULL,'Both','2728934294',NULL,'Sample Data',NULL,NULL,NULL,NULL,3,NULL,NULL,1,NULL,'Dear carlosl@fishmail.co.pl',1,NULL,'Dear carlosl@fishmail.co.pl',1,NULL,'carlosl@fishmail.co.pl',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(196,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,'\ 15\ 1',NULL,'Both','350459294',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels family',5,NULL,'Dear Samuels family',2,NULL,'Samuels family',NULL,NULL,NULL,0,NULL,'Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(197,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Reynolds, Elizabeth','Elizabeth Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3578793204',NULL,'Sample Data','Elizabeth','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Reynolds',NULL,NULL,'1956-01-03',1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(198,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Brigette','Dr. Brigette Olsen',NULL,NULL,NULL,'\ 14\ 1',NULL,'Both','2958585175',NULL,'Sample Data','Brigette','','Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Brigette',1,NULL,'Dear Brigette',1,NULL,'Dr. Brigette Olsen',NULL,NULL,'1978-09-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(199,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Barry','Barry Nielsen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','999751517',NULL,'Sample Data','Barry','','Nielsen',NULL,1,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Nielsen Jr.',NULL,NULL,'1999-04-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27'),(200,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Jacobs family','Jacobs family',NULL,NULL,NULL,NULL,NULL,'Both','1498986649',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jacobs family',5,NULL,'Dear Jacobs family',2,NULL,'Jacobs family',NULL,NULL,NULL,0,NULL,'Jacobs family',NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:28'),(201,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'yadavi@infomail.co.uk','yadavi@infomail.co.uk',NULL,NULL,NULL,NULL,NULL,'Both','4200254589',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear yadavi@infomail.co.uk',1,NULL,'Dear yadavi@infomail.co.uk',1,NULL,'yadavi@infomail.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2019-09-20 19:57:27','2019-09-20 19:57:27');
 /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -228,7 +228,7 @@ 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`) 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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(14,177,2,NULL,1,'2019-08-16 09:31:31',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),(15,60,2,NULL,1,'2019-08-16 09:31:31',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),(16,170,2,NULL,1,'2019-08-16 09:31:31',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),(17,90,2,NULL,1,'2019-08-16 09:31:31',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),(18,149,2,NULL,1,'2019-08-16 09:31:31',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),(19,52,2,NULL,1,'2019-08-16 09:31:31',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),(20,132,2,NULL,1,'2019-08-16 09:31:31',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),(21,115,2,NULL,1,'2019-08-16 09:31:31',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),(22,105,2,NULL,1,'2019-08-16 09:31:31',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),(23,18,2,NULL,1,'2019-08-16 09:31:31',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),(24,12,2,NULL,1,'2019-08-16 09:31:31',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),(25,113,2,NULL,1,'2019-08-16 09:31:31',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),(26,26,2,NULL,1,'2019-08-16 09:31:31',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),(27,134,2,NULL,1,'2019-08-16 09:31:31',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),(28,148,2,NULL,1,'2019-08-16 09:31:31',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),(29,124,2,NULL,1,'2019-08-16 09:31:31',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),(30,7,2,NULL,1,'2019-08-16 09:31:31',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),(31,95,2,NULL,1,'2019-08-16 09:31:31',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),(32,16,2,NULL,1,'2019-08-16 09:31:31',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),(33,46,2,NULL,1,'2019-08-16 09:31:31',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),(34,116,2,NULL,1,'2019-08-16 09:31:31',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),(35,8,2,NULL,1,'2019-08-16 09:31:31',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),(36,42,2,NULL,1,'2019-08-16 09:31:31',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),(37,118,2,NULL,1,'2019-08-16 09:31:31',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),(38,36,2,NULL,1,'2019-08-16 09:31:31',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),(39,57,2,NULL,1,'2019-08-16 09:31:31',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),(40,182,2,NULL,1,'2019-08-16 09:31:31',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),(41,183,2,NULL,1,'2019-08-16 09:31:31',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),(42,159,2,NULL,1,'2019-08-16 09:31:31',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),(43,78,2,NULL,1,'2019-08-16 09:31:31',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),(45,2,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(46,4,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(47,7,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(48,8,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(49,10,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(50,13,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(51,18,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(52,20,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(53,23,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(54,26,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(55,30,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(56,31,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(57,32,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(58,34,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(59,41,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(60,42,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(61,48,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(62,50,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(63,62,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(64,63,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(65,79,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(66,82,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(67,90,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(68,99,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(69,107,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(70,108,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(71,111,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(72,119,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(73,128,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(74,132,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(75,133,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(76,137,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(77,141,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(78,150,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(79,156,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(80,160,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(81,163,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(82,167,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(83,172,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(84,173,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(85,181,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(86,182,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(87,183,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(88,184,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(89,185,4,NULL,1,'2019-08-16 09:31:31',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(90,186,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(91,188,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(92,191,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(93,196,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(94,199,4,NULL,1,'2019-08-16 09:31:31',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-08-16 09:31:31',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL);
+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`) 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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(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),(14,130,2,NULL,1,'2019-09-20 12:57:29',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),(15,145,2,NULL,1,'2019-09-20 12:57:29',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),(16,53,2,NULL,1,'2019-09-20 12:57:29',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),(17,57,2,NULL,1,'2019-09-20 12:57:29',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),(18,178,2,NULL,1,'2019-09-20 12:57:29',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),(19,46,2,NULL,1,'2019-09-20 12:57:29',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),(20,123,2,NULL,1,'2019-09-20 12:57:29',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),(21,39,2,NULL,1,'2019-09-20 12:57:29',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),(22,19,2,NULL,1,'2019-09-20 12:57:29',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),(23,104,2,NULL,1,'2019-09-20 12:57:29',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),(24,10,2,NULL,1,'2019-09-20 12:57:29',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),(25,62,2,NULL,1,'2019-09-20 12:57:29',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),(26,113,2,NULL,1,'2019-09-20 12:57:29',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),(27,101,2,NULL,1,'2019-09-20 12:57:29',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),(28,197,2,NULL,1,'2019-09-20 12:57:29',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),(29,91,2,NULL,1,'2019-09-20 12:57:29',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),(30,125,2,NULL,1,'2019-09-20 12:57:29',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),(31,35,2,NULL,1,'2019-09-20 12:57:29',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),(32,190,2,NULL,1,'2019-09-20 12:57:29',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),(33,151,2,NULL,1,'2019-09-20 12:57:29',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),(34,192,2,NULL,1,'2019-09-20 12:57:29',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),(35,16,2,NULL,1,'2019-09-20 12:57:29',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),(36,36,2,NULL,1,'2019-09-20 12:57:29',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),(37,92,2,NULL,1,'2019-09-20 12:57:29',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),(38,121,2,NULL,1,'2019-09-20 12:57:29',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),(39,89,2,NULL,1,'2019-09-20 12:57:29',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),(40,134,2,NULL,1,'2019-09-20 12:57:29',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),(41,69,2,NULL,1,'2019-09-20 12:57:29',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),(42,153,2,NULL,1,'2019-09-20 12:57:29',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),(43,173,2,NULL,1,'2019-09-20 12:57:29',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),(45,1,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(46,5,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(47,8,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(48,18,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(49,21,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(50,30,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(51,34,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(52,37,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(53,41,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(54,45,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(55,49,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(56,55,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(57,57,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(58,58,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(59,67,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(60,69,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(61,72,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(62,75,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(63,83,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(64,86,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(65,89,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(66,91,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(67,92,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(68,93,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(69,99,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(70,105,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(71,108,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(72,114,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(73,119,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(74,120,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(75,124,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(76,127,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(77,135,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(78,139,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(79,143,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(80,145,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(81,153,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(82,157,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(83,159,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(84,163,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(85,170,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(86,178,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(87,179,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(88,183,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(89,184,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(90,186,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(91,187,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(92,189,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(93,190,4,NULL,1,'2019-09-20 12:57:29',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL),(94,193,4,NULL,1,'2019-09-20 12:57:29',0.00,800.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,'2019-09-20 12:57:29',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL);
 /*!40000 ALTER TABLE `civicrm_contribution` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -266,7 +266,7 @@ 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,57,10.00,'USD',1,1,'Jones Family','Helping Hands',10),(2,9,57,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,187,10.00,'USD',1,1,'Jones Family','Helping Hands',10),(2,9,187,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10);
 /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -399,7 +399,7 @@ UNLOCK TABLES;
 
 LOCK TABLES `civicrm_domain` WRITE;
 /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */;
-INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.19.alpha1',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
+INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.20.alpha1',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
 /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -409,7 +409,7 @@ 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',0,0,0,0,NULL,NULL,NULL,NULL),(2,16,1,'samsonj@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(3,16,1,'juliannsamson@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL),(4,103,1,'dimitrov.z.lou@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(5,57,1,'eb.terrell@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(6,57,1,'terrell.b.eleonor@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(7,69,1,'tobyd77@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL),(8,69,1,'dimitrov.toby@notmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(9,193,1,'samsonr@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(10,193,1,'rd.samson61@fishmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(11,169,1,'at.bachman@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(12,169,1,'bachman.ashlie33@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(13,66,1,'jones.esta@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(14,129,1,'kathleenp@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(15,191,1,'lee.megan@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(16,191,1,'leem@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL),(17,60,1,'estawilson@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL),(18,81,1,'kathlynjensen@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(19,81,1,'jensen.kathlyn29@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(20,85,1,'heidicooper24@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(21,85,1,'hcooper@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(22,116,1,'kennybarkley@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(23,116,1,'barkley.kenny@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(24,177,1,'terrellr@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(25,4,1,'kaceys@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(26,4,1,'kaceysmith71@testing.org',0,0,0,0,NULL,NULL,NULL,NULL),(27,24,1,'gonzlezm@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(28,82,1,'shermancooper@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(29,30,1,'idaz@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(30,114,1,'jz.samson15@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(31,114,1,'samson.z.jed70@example.com',0,0,0,0,NULL,NULL,NULL,NULL),(32,58,1,'deforest.h.jackson@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(33,51,1,'errolprentice@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(34,51,1,'prenticee71@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(35,26,1,'jedprentice73@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(36,42,1,'jameson.jerome@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(37,42,1,'jeromej@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(38,136,1,'dimitrovb@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(39,75,1,'patelb@example.biz',1,0,0,0,NULL,NULL,NULL,NULL),(40,59,1,'zope.lincoln75@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(41,59,1,'lincolnz@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(42,22,1,'bachmank79@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(43,192,1,'miguelbarkley87@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL),(44,192,1,'miguelbarkley@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(45,119,1,'lawerencej@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(46,119,1,'jonesl@example.biz',0,0,0,0,NULL,NULL,NULL,NULL),(47,95,1,'rterry@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(48,158,1,'jensenb@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL),(49,158,1,'jensenb@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(50,165,1,'ec.reynolds@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(51,14,1,'reynolds.kenny@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(52,23,1,'samsonj3@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL),(53,67,1,'shaunayadav72@testing.com',1,0,0,0,NULL,NULL,NULL,NULL),(54,67,1,'shaunay87@fishmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(55,89,1,'roberts.elbert@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(56,89,1,'roberts.h.elbert27@airmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(57,185,1,'jacobs.ashley@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(58,185,1,'ashleyj56@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(59,102,1,'aterrell40@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL),(60,102,1,'aterrell@mymail.info',0,0,0,0,NULL,NULL,NULL,NULL),(61,68,1,'jz.samson9@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(62,68,1,'julianns@sample.info',0,0,0,0,NULL,NULL,NULL,NULL),(63,134,1,'obarkley33@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(64,141,1,'ci.deforest@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(65,7,1,'brittneya54@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(66,7,1,'adams.brittney@testing.net',0,0,0,0,NULL,NULL,NULL,NULL),(67,96,1,'ashleyd@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(68,96,1,'dimitrova80@sample.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(69,10,1,'ly.cruz@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(70,10,1,'cruz.y.lashawnda84@mymail.com',0,0,0,0,NULL,NULL,NULL,NULL),(71,87,1,'mcreynolds.lincoln@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(72,73,1,'msamson@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(73,73,1,'samsonm@example.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(74,92,1,'scarletm@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(75,157,1,'jgonzlez@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(76,183,1,'kathlynj@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(77,183,1,'jameson.f.kathlyn55@infomail.org',0,0,0,0,NULL,NULL,NULL,NULL),(78,105,1,'jameson.maria81@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(79,64,1,'rebekahparker@example.biz',1,0,0,0,NULL,NULL,NULL,NULL),(80,64,1,'parker.rebekah@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(81,167,1,'cooper.q.claudio31@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL),(82,167,1,'cooperc15@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(83,70,1,'cooper.heidi@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(84,70,1,'hl.cooper@testmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(85,36,1,'bobcooper16@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(86,36,1,'bcooper@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(87,52,1,'cooper.kathlyn41@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(88,52,1,'kathlync80@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(89,43,1,'dm.olsen@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL),(90,43,1,'dareno@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL),(91,47,1,'kiaraolsen@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(92,47,1,'olsen.y.kiara@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(93,153,1,'trumano20@example.net',1,0,0,0,NULL,NULL,NULL,NULL),(94,28,1,'olsen.omar@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(95,28,1,'olseno@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(96,146,1,'olsenb@example.org',1,0,0,0,NULL,NULL,NULL,NULL),(97,146,1,'olsenb@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL),(98,150,1,'olsen.carlos@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(99,150,1,'olsen.w.carlos@infomail.net',0,0,0,0,NULL,NULL,NULL,NULL),(100,173,1,'rx.yadav@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(101,98,1,'kaceyy79@notmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(102,98,1,'kaceyy73@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(103,176,1,'yadav-ivanov.v.rebekah@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(104,79,1,'andrewn@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(105,109,1,'nielsent@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(106,109,1,'tobynielsen@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(107,90,1,'nielsens14@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(108,104,1,'scottn@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(109,104,1,'snielsen@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL),(110,8,1,'kathlynnielsen@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL),(111,8,1,'nielsen.kathlyn80@infomail.net',0,0,0,0,NULL,NULL,NULL,NULL),(112,182,1,'gonzlez-barkleyd87@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(113,41,1,'elbertbarkley@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(114,201,1,'dazr@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(115,138,1,'ar.daz95@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(116,197,1,'daz.delana@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(117,132,1,'bcruz@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(118,126,1,'barkleym@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(119,126,1,'barkley.magan@example.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(120,55,1,'erikc25@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(121,161,1,'scruz-barkley@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(122,29,1,'arlyne@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(123,29,1,'chowski-cooper.arlyne@testing.org',0,0,0,0,NULL,NULL,NULL,NULL),(124,34,1,'chowski-cooper.brigette78@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(125,34,1,'brigette75@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(126,163,1,'reynolds.margaret99@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(127,76,1,'reynolds.c.teresa74@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(128,76,1,'reynolds.c.teresa50@mymail.org',0,0,0,0,NULL,NULL,NULL,NULL),(129,117,1,'irisjones73@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(130,166,1,'ax.jones@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(131,200,1,'jones.rosario43@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(132,159,1,'terry.a.elizabeth@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(133,189,1,'omarcooper@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(134,189,1,'ocooper@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL),(135,160,1,'jensen.y.delana@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL),(136,160,1,'jensend@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL),(137,120,1,'ccooper-jensen@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL),(138,120,1,'ccooper-jensen@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(139,186,1,'cooper-jensenr89@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(140,186,1,'cooper-jensen.rebekah@testing.com',0,0,0,0,NULL,NULL,NULL,NULL),(141,49,1,'mcreynolds.o.brent60@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(142,49,1,'bo.mcreynolds@example.net',0,0,0,0,NULL,NULL,NULL,NULL),(143,46,1,'rolandomcreynolds52@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(144,125,1,'omarjones84@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(145,125,1,'joneso31@example.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(146,171,1,'rebekahs@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(147,171,1,'rebekahs@notmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(148,111,1,'sjones80@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(149,6,1,'lee.brent@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(150,6,1,'brentl@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(151,20,1,'landonlee@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(152,20,1,'leel10@infomail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(153,101,1,'rz.samson-barkley@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(154,101,1,'rebekahsamson-barkley85@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(155,91,3,'info@rsempowermentassociation.org',1,0,0,0,NULL,NULL,NULL,NULL),(156,105,2,'mariaj@rsempowermentassociation.org',0,0,0,0,NULL,NULL,NULL,NULL),(157,54,3,'feedback@poquosonwellnesstrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(158,136,2,'dimitrov.m.barry38@poquosonwellnesstrust.org',0,0,0,0,NULL,NULL,NULL,NULL),(159,72,3,'feedback@bradfordliteracysolutions.org',1,0,0,0,NULL,NULL,NULL,NULL),(160,153,2,'@bradfordliteracysolutions.org',0,0,0,0,NULL,NULL,NULL,NULL),(161,155,3,'sales@bassettalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(162,90,2,'@bassettalliance.org',0,0,0,0,NULL,NULL,NULL,NULL),(163,196,3,'contact@paartsacademy.org',1,0,0,0,NULL,NULL,NULL,NULL),(164,4,2,'ksmith@paartsacademy.org',0,0,0,0,NULL,NULL,NULL,NULL),(165,162,3,'info@unitedaction.org',1,0,0,0,NULL,NULL,NULL,NULL),(166,159,2,'elizabethterry@unitedaction.org',0,0,0,0,NULL,NULL,NULL,NULL),(167,19,3,'feedback@addytrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(168,180,2,'samson-barkleyc89@addytrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(169,65,3,'info@friendstechnologytrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(170,200,2,'jonesr53@friendstechnologytrust.org',0,0,0,0,NULL,NULL,NULL,NULL),(171,142,3,'feedback@pinepoetrycenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(172,40,2,'wilson.santina50@pinepoetrycenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(173,145,3,'contact@localcenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(174,147,2,'nielsen.ashley@localcenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(175,184,3,'feedback@friendsfood.org',1,0,0,0,NULL,NULL,NULL,NULL),(176,173,2,'42@friendsfood.org',0,0,0,0,NULL,NULL,NULL,NULL),(177,156,3,'contact@mississippipeacecollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(178,150,2,'carloso@mississippipeacecollective.org',0,0,0,0,NULL,NULL,NULL,NULL),(179,143,3,'service@mlkingagriculture.org',1,0,0,0,NULL,NULL,NULL,NULL),(180,118,2,'mnielsen@mlkingagriculture.org',1,0,0,0,NULL,NULL,NULL,NULL),(181,121,3,'sales@localeducationfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL),(182,16,2,'juliannsamson@localeducationfellowship.org',0,0,0,0,NULL,NULL,NULL,NULL),(183,139,3,'service@kentuckycenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(184,43,2,'dareno@kentuckycenter.org',0,0,0,0,NULL,NULL,NULL,NULL),(185,137,3,'contact@globalnetwork.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);
+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',0,0,0,0,NULL,NULL,NULL,NULL),(2,167,1,'brzczysawdeforest@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(3,167,1,'deforestb67@fishmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(4,144,1,'lashawndad74@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(5,65,1,'nielsen.jacob67@lol.com',1,0,0,0,NULL,NULL,NULL,NULL),(6,187,1,'roberts.kandace@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(7,187,1,'roberts.kandace@testmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(8,174,1,'nielsen.jackson@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(9,62,1,'barkley.esta@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL),(10,87,1,'margaretbachman84@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(11,129,1,'au.jones51@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL),(12,129,1,'au.jones51@notmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(13,116,1,'jacobsj@testing.com',1,0,0,0,NULL,NULL,NULL,NULL),(14,116,1,'jacobsj11@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(15,67,1,'rolandosamson@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(16,152,1,'jacobs.shad@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(17,152,1,'jacobs.m.shad25@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL),(18,127,1,'prenticej28@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL),(19,127,1,'jeromeprentice96@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(20,198,1,'olsen.brigette84@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(21,198,1,'olsen.brigette68@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL),(22,181,1,'robertsonr@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(23,30,1,'mller.errol@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(24,79,1,'reynolds.t.andrew2@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(25,64,1,'mller.miguel@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(26,120,1,'teresap@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(27,120,1,'teresapatel@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(28,6,1,'jacksong80@lol.com',1,0,0,0,NULL,NULL,NULL,NULL),(29,201,1,'yadavi95@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(30,201,1,'yadavi@infomail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(31,171,1,'tc.dimitrov@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(32,158,1,'claudiocruz91@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL),(33,158,1,'claudiocruz24@testing.info',0,0,0,0,NULL,NULL,NULL,NULL),(34,70,1,'dimitrovi56@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL),(35,41,1,'lee.beula85@testing.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(36,73,1,'adamss@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(37,114,1,'adams.t.ashley@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(38,114,1,'adams.t.ashley74@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(39,34,1,'irisc@lol.com',1,0,0,0,NULL,NULL,NULL,NULL),(40,34,1,'icooper@spamalot.com',0,0,0,0,NULL,NULL,NULL,NULL),(41,16,1,'errollee@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(42,19,1,'adams.roland48@testing.org',1,0,0,0,NULL,NULL,NULL,NULL),(43,180,1,'jones.miguel35@sample.com',1,0,0,0,NULL,NULL,NULL,NULL),(44,180,1,'mjones96@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(45,92,1,'smith.v.kathlyn37@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL),(46,92,1,'kathlyns70@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(47,36,1,'scarleti@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(48,2,1,'sivanov56@lol.com',1,0,0,0,NULL,NULL,NULL,NULL),(49,55,1,'ivanov.bernadette76@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(50,121,1,'deforest.princess@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(51,121,1,'deforestp@example.com',0,0,0,0,NULL,NULL,NULL,NULL),(52,102,1,'russelljensen@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(53,104,1,'mller.beula@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(54,45,1,'olsene85@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(55,9,1,'bu.barkley@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL),(56,128,1,'landondimitrov24@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(57,103,1,'bcruz@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(58,103,1,'cruzb@notmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(59,78,1,'arlynesamson78@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(60,78,1,'samson.arlyne94@testmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(61,97,1,'brigettey21@testing.org',1,0,0,0,NULL,NULL,NULL,NULL),(62,97,1,'brigetteyadav10@lol.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(63,117,1,'olsen.shauna35@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(64,39,1,'josefad@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL),(65,131,1,'jacksonterrell@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(66,131,1,'terrell.k.jackson98@fakemail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(67,111,1,'jacobgonzlez@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(68,111,1,'gonzlez.jacob@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(69,118,1,'jensen.rolando57@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL),(70,118,1,'jensenr90@airmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(71,148,1,'adamsh25@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(72,119,1,'jones.t.bob85@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(73,119,1,'jones.bob@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(74,53,1,'tjameson80@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL),(75,53,1,'teddyjameson@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(76,162,1,'barkleyb@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(77,162,1,'barkley.bernadette@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(78,139,1,'cq.jacobs@fishmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(79,139,1,'jacobs.q.carylon@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL),(80,126,1,'cruz.errol3@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(81,126,1,'errolc@airmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(82,140,1,'reynoldsa82@mymail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(83,140,1,'reynolds.allan54@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(84,49,1,'jonesp@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(85,80,1,'sadams26@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(86,122,1,'mller.ashley@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(87,122,1,'amller@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(88,149,1,'dimitrov.kathlyn@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL),(89,149,1,'kathlyndimitrov@mymail.com',0,0,0,0,NULL,NULL,NULL,NULL),(90,94,1,'bryond@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(91,94,1,'dimitrov.bryon75@notmail.org',0,0,0,0,NULL,NULL,NULL,NULL),(92,179,1,'dimitrov.maxwell@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(93,179,1,'dimitrov.maxwell72@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL),(94,3,1,'mllert72@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL),(95,3,1,'tmller@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(96,37,1,'ivanov-mller.d.santina56@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL),(97,37,1,'ivanov-mller.santina@spamalot.org',0,0,0,0,NULL,NULL,NULL,NULL),(98,99,1,'mllerm@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL),(99,99,1,'mller.mei42@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(100,72,1,'ivanov.herminia73@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL),(101,69,1,'parkera@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(102,82,1,'parkerj66@testing.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(103,82,1,'parker.q.josefa@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL),(104,51,1,'darenparker@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(105,5,1,'parker.claudio@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(106,5,1,'ch.parker58@sample.net',0,0,0,0,NULL,NULL,NULL,NULL),(107,109,1,'bjensen43@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(108,165,1,'jensene@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(109,165,1,'estajensen@lol.org',0,0,0,0,NULL,NULL,NULL,NULL),(110,59,1,'jensens@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL),(111,124,1,'irvinz@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(112,44,1,'patell90@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(113,44,1,'patel.lashawnda@testing.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(114,170,1,'zope-patel.toby@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL),(115,170,1,'zope-patel.toby@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(116,142,1,'kzope-patel73@example.com',1,0,0,0,NULL,NULL,NULL,NULL),(117,142,1,'kzope-patel@testing.net',0,0,0,0,NULL,NULL,NULL,NULL),(118,25,1,'ta.samuels@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(119,106,1,'samuelsa@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(120,43,1,'nielsen.omar@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL),(121,43,1,'nielseno@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL),(122,91,1,'valenemcreynolds@example.biz',1,0,0,0,NULL,NULL,NULL,NULL),(123,91,1,'vk.mcreynolds32@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(124,20,1,'nielsen-mcreynolds.angelika@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(125,20,1,'anielsen-mcreynolds@infomail.info',0,0,0,0,NULL,NULL,NULL,NULL),(126,195,1,'carlosl@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(127,169,1,'jones-lee.brigette@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(128,169,1,'jones-lee.brigette@mymail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(129,194,1,'jones-leee79@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(130,7,1,'jacksoni@example.info',1,0,0,0,NULL,NULL,NULL,NULL),(131,68,1,'herminiad38@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(132,68,1,'hm.deforest-ivanov@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL),(133,188,1,'ivanov.heidi@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL),(134,188,1,'ivanovh@testing.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(135,166,1,'ivanovr@example.org',1,0,0,0,NULL,NULL,NULL,NULL),(136,105,1,'smiths@lol.net',1,0,0,0,NULL,NULL,NULL,NULL),(137,58,1,'jacobs-jamesonr19@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(138,58,1,'jacobs-jamesonr51@testing.com',0,0,0,0,NULL,NULL,NULL,NULL),(139,23,1,'nielsen.felisha@airmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(140,38,1,'bobn@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL),(141,184,1,'aj.nielsen@lol.info',1,0,0,0,NULL,NULL,NULL,NULL),(142,184,1,'nielsen.j.angelika@lol.org',0,0,0,0,NULL,NULL,NULL,NULL),(143,28,1,'ivanov.q.jerome37@spamalot.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(144,28,1,'jeromei71@fishmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(145,85,1,'josefanielsen36@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL),(146,18,1,'mivanov-nielsen84@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(147,177,1,'ji.jones48@fakemail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(148,177,1,'jones.i.josefa@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL),(149,24,1,'jacobs-jones.x.teresa11@example.net',1,0,0,0,NULL,NULL,NULL,NULL),(150,24,1,'teresajacobs-jones@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(151,132,1,'jones.errol@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(152,132,1,'errolj@example.info',0,0,0,0,NULL,NULL,NULL,NULL),(153,8,1,'ry.bachman@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(154,8,1,'rodrigobachman@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL),(155,10,1,'bachman.delana@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(156,10,1,'bachman.delana@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL),(157,54,1,'yadav.bryon@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL),(158,54,1,'bryonyadav@infomail.net',0,0,0,0,NULL,NULL,NULL,NULL),(159,130,1,'meganyadav@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(160,130,1,'ms.yadav@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL),(161,22,1,'jeromey@sample.co.in',1,0,0,0,NULL,NULL,NULL,NULL),(162,66,1,'teresayadav@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(163,183,1,'ljacobs3@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL),(164,189,1,'jacobs.d.bernadette66@testing.net',1,0,0,0,NULL,NULL,NULL,NULL),(165,26,1,'craigj38@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL),(166,40,1,'cf.jacobs@sample.info',1,0,0,0,NULL,NULL,NULL,NULL),(167,40,1,'claudiojacobs@spamalot.net',0,0,0,0,NULL,NULL,NULL,NULL),(168,17,1,'elinaj58@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL),(169,17,1,'jacobs.p.elina75@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL),(170,46,1,'deforest.j.kandace36@lol.co.pl',1,0,0,0,NULL,NULL,NULL,NULL),(171,46,1,'deforest.j.kandace@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL),(172,60,1,'clintdeforest94@testing.info',1,0,0,0,NULL,NULL,NULL,NULL),(173,95,1,'megandeforest@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL),(174,93,3,'service@ecadvocacycollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(175,103,2,'cruz.bob@ecadvocacycollective.org',0,0,0,0,NULL,NULL,NULL,NULL),(176,56,3,'info@missouriarts.org',1,0,0,0,NULL,NULL,NULL,NULL),(177,182,3,'info@cheshireaction.org',1,0,0,0,NULL,NULL,NULL,NULL),(178,39,2,'jo.deforest42@cheshireaction.org',0,0,0,0,NULL,NULL,NULL,NULL),(179,191,3,'feedback@wmsportsschool.org',1,0,0,0,NULL,NULL,NULL,NULL),(180,48,2,'jensenk16@wmsportsschool.org',1,0,0,0,NULL,NULL,NULL,NULL),(181,186,3,'info@texastechnologypartners.org',1,0,0,0,NULL,NULL,NULL,NULL),(182,61,3,'feedback@atlantaagriculturesolutions.org',1,0,0,0,NULL,NULL,NULL,NULL),(183,138,3,'feedback@globalsportstrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(184,134,2,'ashliejacobs88@globalsportstrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(185,83,3,'service@lcdevelopmentfellowship.org',1,0,0,0,NULL,NULL,NULL,NULL),(186,28,2,'jeromei52@lcdevelopmentfellowship.org',0,0,0,0,NULL,NULL,NULL,NULL),(187,172,3,'service@localmusicalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(188,63,2,'lareeivanov@localmusicalliance.org',1,0,0,0,NULL,NULL,NULL,NULL),(189,47,3,'contact@simpsontechnologytrust.org',1,0,0,0,NULL,NULL,NULL,NULL),(190,162,2,'bernadettebarkley@simpsontechnologytrust.org',0,0,0,0,NULL,NULL,NULL,NULL),(191,175,3,'contact@bakerpeacesolutions.org',1,0,0,0,NULL,NULL,NULL,NULL),(192,161,2,'jacobss@bakerpeacesolutions.org',1,0,0,0,NULL,NULL,NULL,NULL),(193,160,3,'info@maincenter.org',1,0,0,0,NULL,NULL,NULL,NULL),(194,149,2,'kathlynd74@maincenter.org',0,0,0,0,NULL,NULL,NULL,NULL),(195,4,3,'contact@statescollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(196,185,2,'br.jones99@statescollective.org',1,0,0,0,NULL,NULL,NULL,NULL),(197,96,3,'sales@northpointpoetry.org',1,0,0,0,NULL,NULL,NULL,NULL),(198,60,2,'deforest.clint@northpointpoetry.org',0,0,0,0,NULL,NULL,NULL,NULL),(199,98,3,'service@baywellnesspartnership.org',1,0,0,0,NULL,NULL,NULL,NULL),(200,117,2,'shaunaolsen32@baywellnesspartnership.org',0,0,0,0,NULL,NULL,NULL,NULL),(201,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(202,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL),(203,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL);
 /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -447,7 +447,7 @@ 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,100.00),(54,'civicrm_financial_item',27,27,100.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',79,44,50.00),(88,'civicrm_financial_item',44,44,50.00),(89,'civicrm_contribution',52,45,50.00),(90,'civicrm_financial_item',45,45,50.00),(91,'civicrm_contribution',83,46,50.00),(92,'civicrm_financial_item',46,46,50.00),(93,'civicrm_contribution',72,47,50.00),(94,'civicrm_financial_item',47,47,50.00),(95,'civicrm_contribution',49,48,50.00),(96,'civicrm_financial_item',48,48,50.00),(97,'civicrm_contribution',92,49,50.00),(98,'civicrm_financial_item',49,49,50.00),(99,'civicrm_contribution',57,50,50.00),(100,'civicrm_financial_item',50,50,50.00),(101,'civicrm_contribution',53,51,50.00),(102,'civicrm_financial_item',51,51,50.00),(103,'civicrm_contribution',75,52,50.00),(104,'civicrm_financial_item',52,52,50.00),(105,'civicrm_contribution',54,53,50.00),(106,'civicrm_financial_item',53,53,50.00),(107,'civicrm_contribution',62,54,50.00),(108,'civicrm_financial_item',54,54,50.00),(109,'civicrm_contribution',66,55,50.00),(110,'civicrm_financial_item',55,55,50.00),(111,'civicrm_contribution',86,56,50.00),(112,'civicrm_financial_item',56,56,50.00),(113,'civicrm_contribution',93,57,50.00),(114,'civicrm_financial_item',57,57,50.00),(115,'civicrm_contribution',63,58,50.00),(116,'civicrm_financial_item',58,58,50.00),(117,'civicrm_contribution',90,59,50.00),(118,'civicrm_financial_item',59,59,50.00),(119,'civicrm_contribution',58,60,800.00),(120,'civicrm_financial_item',60,60,800.00),(121,'civicrm_contribution',60,61,800.00),(122,'civicrm_financial_item',61,61,800.00),(123,'civicrm_contribution',77,62,800.00),(124,'civicrm_financial_item',62,62,800.00),(125,'civicrm_contribution',69,63,800.00),(126,'civicrm_financial_item',63,63,800.00),(127,'civicrm_contribution',61,64,800.00),(128,'civicrm_financial_item',64,64,800.00),(129,'civicrm_contribution',88,65,800.00),(130,'civicrm_financial_item',65,65,800.00),(131,'civicrm_contribution',87,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',71,68,800.00),(136,'civicrm_financial_item',68,68,800.00),(137,'civicrm_contribution',46,69,800.00),(138,'civicrm_financial_item',69,69,800.00),(139,'civicrm_contribution',80,70,800.00),(140,'civicrm_financial_item',70,70,800.00),(141,'civicrm_contribution',50,71,800.00),(142,'civicrm_financial_item',71,71,800.00),(143,'civicrm_contribution',51,72,800.00),(144,'civicrm_financial_item',72,72,800.00),(145,'civicrm_contribution',84,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',81,76,800.00),(152,'civicrm_financial_item',76,76,800.00),(153,'civicrm_contribution',82,77,800.00),(154,'civicrm_financial_item',77,77,800.00),(155,'civicrm_contribution',78,78,50.00),(156,'civicrm_financial_item',78,78,50.00),(157,'civicrm_contribution',70,79,50.00),(158,'civicrm_financial_item',79,79,50.00),(159,'civicrm_contribution',48,80,50.00),(160,'civicrm_financial_item',80,80,50.00),(161,'civicrm_contribution',47,81,50.00),(162,'civicrm_financial_item',81,81,50.00),(163,'civicrm_contribution',59,82,50.00),(164,'civicrm_financial_item',82,82,50.00),(165,'civicrm_contribution',68,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',65,85,50.00),(170,'civicrm_financial_item',85,85,50.00),(171,'civicrm_contribution',56,86,50.00),(172,'civicrm_financial_item',86,86,50.00),(173,'civicrm_contribution',91,87,50.00),(174,'civicrm_financial_item',87,87,50.00),(175,'civicrm_contribution',64,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',76,90,50.00),(180,'civicrm_financial_item',90,90,50.00),(181,'civicrm_contribution',55,91,50.00),(182,'civicrm_financial_item',91,91,50.00),(183,'civicrm_contribution',94,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',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,100.00),(54,'civicrm_financial_item',27,27,100.00),(55,'civicrm_contribution',28,28,100.00),(56,'civicrm_financial_item',28,28,100.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',56,44,50.00),(88,'civicrm_financial_item',44,44,50.00),(89,'civicrm_contribution',85,45,50.00),(90,'civicrm_financial_item',45,45,50.00),(91,'civicrm_contribution',76,46,50.00),(92,'civicrm_financial_item',46,46,50.00),(93,'civicrm_contribution',71,47,50.00),(94,'civicrm_financial_item',47,47,50.00),(95,'civicrm_contribution',92,48,50.00),(96,'civicrm_financial_item',48,48,50.00),(97,'civicrm_contribution',67,49,50.00),(98,'civicrm_financial_item',49,49,50.00),(99,'civicrm_contribution',66,50,50.00),(100,'civicrm_financial_item',50,50,50.00),(101,'civicrm_contribution',72,51,50.00),(102,'civicrm_financial_item',51,51,50.00),(103,'civicrm_contribution',83,52,50.00),(104,'civicrm_financial_item',52,52,50.00),(105,'civicrm_contribution',87,53,50.00),(106,'civicrm_financial_item',53,53,50.00),(107,'civicrm_contribution',48,54,50.00),(108,'civicrm_financial_item',54,54,50.00),(109,'civicrm_contribution',57,55,50.00),(110,'civicrm_financial_item',55,55,50.00),(111,'civicrm_contribution',84,56,50.00),(112,'civicrm_financial_item',56,56,50.00),(113,'civicrm_contribution',93,57,50.00),(114,'civicrm_financial_item',57,57,50.00),(115,'civicrm_contribution',78,58,50.00),(116,'civicrm_financial_item',58,58,50.00),(117,'civicrm_contribution',77,59,50.00),(118,'civicrm_financial_item',59,59,50.00),(119,'civicrm_contribution',69,60,800.00),(120,'civicrm_financial_item',60,60,800.00),(121,'civicrm_contribution',91,61,800.00),(122,'civicrm_financial_item',61,61,800.00),(123,'civicrm_contribution',63,62,800.00),(124,'civicrm_financial_item',62,62,800.00),(125,'civicrm_contribution',80,63,800.00),(126,'civicrm_financial_item',63,63,800.00),(127,'civicrm_contribution',70,64,800.00),(128,'civicrm_financial_item',64,64,800.00),(129,'civicrm_contribution',73,65,800.00),(130,'civicrm_financial_item',65,65,800.00),(131,'civicrm_contribution',55,66,800.00),(132,'civicrm_financial_item',66,66,800.00),(133,'civicrm_contribution',88,67,800.00),(134,'civicrm_financial_item',67,67,800.00),(135,'civicrm_contribution',46,68,800.00),(136,'civicrm_financial_item',68,68,800.00),(137,'civicrm_contribution',94,69,800.00),(138,'civicrm_financial_item',69,69,800.00),(139,'civicrm_contribution',64,70,800.00),(140,'civicrm_financial_item',70,70,800.00),(141,'civicrm_contribution',62,71,800.00),(142,'civicrm_financial_item',71,71,800.00),(143,'civicrm_contribution',61,72,800.00),(144,'civicrm_financial_item',72,72,800.00),(145,'civicrm_contribution',89,73,800.00),(146,'civicrm_financial_item',73,73,800.00),(147,'civicrm_contribution',60,74,800.00),(148,'civicrm_financial_item',74,74,800.00),(149,'civicrm_contribution',47,75,800.00),(150,'civicrm_financial_item',75,75,800.00),(151,'civicrm_contribution',82,76,800.00),(152,'civicrm_financial_item',76,76,800.00),(153,'civicrm_contribution',65,77,800.00),(154,'civicrm_financial_item',77,77,800.00),(155,'civicrm_contribution',90,78,50.00),(156,'civicrm_financial_item',78,78,50.00),(157,'civicrm_contribution',79,79,50.00),(158,'civicrm_financial_item',79,79,50.00),(159,'civicrm_contribution',52,80,50.00),(160,'civicrm_financial_item',80,80,50.00),(161,'civicrm_contribution',75,81,50.00),(162,'civicrm_financial_item',81,81,50.00),(163,'civicrm_contribution',86,82,50.00),(164,'civicrm_financial_item',82,82,50.00),(165,'civicrm_contribution',68,83,50.00),(166,'civicrm_financial_item',83,83,50.00),(167,'civicrm_contribution',50,84,50.00),(168,'civicrm_financial_item',84,84,50.00),(169,'civicrm_contribution',81,85,50.00),(170,'civicrm_financial_item',85,85,50.00),(171,'civicrm_contribution',53,86,50.00),(172,'civicrm_financial_item',86,86,50.00),(173,'civicrm_contribution',74,87,50.00),(174,'civicrm_financial_item',87,87,50.00),(175,'civicrm_contribution',45,88,50.00),(176,'civicrm_financial_item',88,88,50.00),(177,'civicrm_contribution',58,89,50.00),(178,'civicrm_financial_item',89,89,50.00),(179,'civicrm_contribution',49,90,50.00),(180,'civicrm_financial_item',90,90,50.00),(181,'civicrm_contribution',51,91,50.00),(182,'civicrm_financial_item',91,91,50.00),(183,'civicrm_contribution',54,92,50.00),(184,'civicrm_financial_item',92,92,50.00),(185,'civicrm_contribution',59,93,50.00),(186,'civicrm_financial_item',93,93,50.00);
 /*!40000 ALTER TABLE `civicrm_entity_financial_trxn` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -457,7 +457,7 @@ 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 (28,'civicrm_contact',4,5),(107,'civicrm_contact',6,4),(108,'civicrm_contact',6,5),(55,'civicrm_contact',7,5),(56,'civicrm_contact',10,5),(49,'civicrm_contact',14,5),(36,'civicrm_contact',15,4),(37,'civicrm_contact',15,5),(11,'civicrm_contact',16,4),(6,'civicrm_contact',19,2),(109,'civicrm_contact',20,5),(45,'civicrm_contact',22,5),(50,'civicrm_contact',23,5),(29,'civicrm_contact',24,4),(30,'civicrm_contact',24,5),(106,'civicrm_contact',25,5),(38,'civicrm_contact',26,5),(71,'civicrm_contact',28,5),(90,'civicrm_contact',29,5),(31,'civicrm_contact',30,4),(32,'civicrm_contact',30,5),(64,'civicrm_contact',35,5),(66,'civicrm_contact',36,4),(67,'civicrm_contact',36,5),(43,'civicrm_contact',38,4),(93,'civicrm_contact',39,4),(94,'civicrm_contact',39,5),(81,'civicrm_contact',41,4),(39,'civicrm_contact',42,4),(40,'civicrm_contact',42,5),(68,'civicrm_contact',43,5),(91,'civicrm_contact',44,4),(104,'civicrm_contact',46,5),(15,'civicrm_contact',48,4),(16,'civicrm_contact',48,5),(103,'civicrm_contact',49,4),(98,'civicrm_contact',53,5),(2,'civicrm_contact',54,2),(87,'civicrm_contact',55,4),(19,'civicrm_contact',66,4),(20,'civicrm_contact',66,5),(53,'civicrm_contact',68,4),(13,'civicrm_contact',69,4),(14,'civicrm_contact',69,5),(75,'civicrm_contact',79,5),(25,'civicrm_contact',81,4),(26,'civicrm_contact',81,5),(88,'civicrm_contact',84,4),(89,'civicrm_contact',84,5),(82,'civicrm_contact',88,4),(1,'civicrm_contact',91,2),(35,'civicrm_contact',94,5),(47,'civicrm_contact',95,5),(74,'civicrm_contact',98,5),(12,'civicrm_contact',103,5),(78,'civicrm_contact',104,4),(77,'civicrm_contact',109,5),(4,'civicrm_contact',110,3),(51,'civicrm_contact',113,5),(27,'civicrm_contact',116,5),(42,'civicrm_contact',118,5),(46,'civicrm_contact',119,5),(101,'civicrm_contact',120,4),(102,'civicrm_contact',120,5),(58,'civicrm_contact',122,5),(105,'civicrm_contact',125,4),(18,'civicrm_contact',128,4),(22,'civicrm_contact',129,4),(23,'civicrm_contact',129,5),(85,'civicrm_contact',132,4),(86,'civicrm_contact',132,5),(54,'civicrm_contact',134,4),(41,'civicrm_contact',136,5),(83,'civicrm_contact',138,4),(84,'civicrm_contact',138,5),(10,'civicrm_contact',139,1),(7,'civicrm_contact',142,2),(9,'civicrm_contact',143,2),(72,'civicrm_contact',146,5),(44,'civicrm_contact',148,5),(110,'civicrm_contact',151,5),(69,'civicrm_contact',153,4),(70,'civicrm_contact',153,5),(34,'civicrm_contact',154,4),(3,'civicrm_contact',155,2),(60,'civicrm_contact',157,5),(48,'civicrm_contact',158,4),(96,'civicrm_contact',159,4),(97,'civicrm_contact',159,5),(92,'civicrm_contact',163,5),(95,'civicrm_contact',166,4),(65,'civicrm_contact',167,4),(79,'civicrm_contact',168,4),(80,'civicrm_contact',168,5),(17,'civicrm_contact',169,5),(21,'civicrm_contact',170,4),(33,'civicrm_contact',172,4),(73,'civicrm_contact',173,5),(59,'civicrm_contact',175,5),(76,'civicrm_contact',178,4),(111,'civicrm_contact',180,4),(112,'civicrm_contact',180,5),(63,'civicrm_contact',181,5),(8,'civicrm_contact',184,3),(52,'civicrm_contact',185,5),(99,'civicrm_contact',189,4),(100,'civicrm_contact',189,5),(24,'civicrm_contact',191,4),(57,'civicrm_contact',194,4),(5,'civicrm_contact',196,1),(61,'civicrm_contact',198,4),(62,'civicrm_contact',198,5);
+INSERT INTO `civicrm_entity_tag` (`id`, `entity_table`, `entity_id`, `tag_id`) VALUES (68,'civicrm_contact',3,4),(69,'civicrm_contact',3,5),(88,'civicrm_contact',7,5),(104,'civicrm_contact',8,5),(47,'civicrm_contact',9,4),(48,'civicrm_contact',9,5),(105,'civicrm_contact',10,5),(99,'civicrm_contact',13,4),(36,'civicrm_contact',16,4),(85,'civicrm_contact',20,5),(108,'civicrm_contact',22,4),(82,'civicrm_contact',25,4),(98,'civicrm_contact',28,4),(72,'civicrm_contact',35,4),(40,'civicrm_contact',36,4),(41,'civicrm_contact',36,5),(97,'civicrm_contact',38,4),(113,'civicrm_contact',40,4),(32,'civicrm_contact',41,5),(7,'civicrm_contact',42,3),(84,'civicrm_contact',43,4),(65,'civicrm_contact',49,4),(76,'civicrm_contact',51,4),(77,'civicrm_contact',51,5),(60,'civicrm_contact',53,4),(106,'civicrm_contact',54,4),(107,'civicrm_contact',54,5),(42,'civicrm_contact',55,5),(3,'civicrm_contact',56,2),(94,'civicrm_contact',58,4),(79,'civicrm_contact',59,4),(116,'civicrm_contact',60,4),(117,'civicrm_contact',60,5),(5,'civicrm_contact',61,3),(14,'civicrm_contact',62,5),(27,'civicrm_contact',63,4),(28,'civicrm_contact',63,5),(12,'civicrm_contact',65,4),(18,'civicrm_contact',67,5),(74,'civicrm_contact',69,4),(75,'civicrm_contact',69,5),(49,'civicrm_contact',77,5),(58,'civicrm_contact',81,4),(59,'civicrm_contact',81,5),(6,'civicrm_contact',83,2),(37,'civicrm_contact',89,4),(114,'civicrm_contact',90,4),(115,'civicrm_contact',90,5),(67,'civicrm_contact',94,4),(10,'civicrm_contact',96,1),(70,'civicrm_contact',99,4),(71,'civicrm_contact',99,5),(61,'civicrm_contact',101,4),(44,'civicrm_contact',102,4),(45,'civicrm_contact',102,5),(46,'civicrm_contact',104,5),(90,'civicrm_contact',105,4),(91,'civicrm_contact',105,5),(83,'civicrm_contact',106,4),(95,'civicrm_contact',108,4),(96,'civicrm_contact',108,5),(78,'civicrm_contact',109,4),(24,'civicrm_contact',113,5),(34,'civicrm_contact',114,4),(35,'civicrm_contact',114,5),(21,'civicrm_contact',115,4),(54,'civicrm_contact',117,4),(55,'civicrm_contact',117,5),(57,'civicrm_contact',118,4),(25,'civicrm_contact',120,4),(26,'civicrm_contact',120,5),(43,'civicrm_contact',121,5),(66,'civicrm_contact',122,4),(80,'civicrm_contact',124,4),(63,'civicrm_contact',126,4),(64,'civicrm_contact',126,5),(19,'civicrm_contact',127,4),(15,'civicrm_contact',129,4),(16,'civicrm_contact',129,5),(56,'civicrm_contact',131,5),(102,'civicrm_contact',132,4),(103,'civicrm_contact',132,5),(112,'civicrm_contact',133,5),(1,'civicrm_contact',137,3),(33,'civicrm_contact',151,5),(22,'civicrm_contact',153,4),(23,'civicrm_contact',153,5),(13,'civicrm_contact',155,4),(50,'civicrm_contact',156,4),(51,'civicrm_contact',156,5),(31,'civicrm_contact',158,4),(9,'civicrm_contact',160,3),(93,'civicrm_contact',161,5),(109,'civicrm_contact',163,4),(11,'civicrm_contact',167,4),(2,'civicrm_contact',168,1),(87,'civicrm_contact',169,5),(81,'civicrm_contact',170,4),(29,'civicrm_contact',171,4),(30,'civicrm_contact',171,5),(8,'civicrm_contact',175,2),(100,'civicrm_contact',177,4),(101,'civicrm_contact',177,5),(92,'civicrm_contact',178,4),(38,'civicrm_contact',180,4),(39,'civicrm_contact',180,5),(20,'civicrm_contact',181,5),(86,'civicrm_contact',185,5),(89,'civicrm_contact',188,5),(110,'civicrm_contact',189,4),(111,'civicrm_contact',189,5),(4,'civicrm_contact',191,3),(52,'civicrm_contact',192,4),(53,'civicrm_contact',192,5),(73,'civicrm_contact',193,5),(17,'civicrm_contact',197,4),(62,'civicrm_contact',199,5);
 /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -467,7 +467,7 @@ 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,'2020-02-15 17:00:00','2020-02-17 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,'2019-08-14 12:00:00','2019-08-14 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,'2020-03-15 07:00:00','2020-03-18 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,'2020-03-20 17:00:00','2020-03-22 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,'2019-09-19 12:00:00','2019-09-19 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,'2020-04-20 07:00:00','2020-04-23 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;
 
@@ -523,7 +523,7 @@ 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,'2019-08-15 21:31:31','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1),(2,'2019-08-15 21:31:31','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2),(3,'2019-08-15 21:31:31','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3),(4,'2019-08-15 21:31:31','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4),(5,'2019-08-15 21:31:31','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5),(6,'2019-08-15 21:31:31','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6),(7,'2019-08-15 21:31:31','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7),(8,'2019-08-15 21:31:31','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8),(9,'2019-08-15 21:31:31','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9),(10,'2019-08-15 21:31:31','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10),(11,'2019-08-15 21:31:31','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11),(12,'2019-08-15 21:31:31','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12),(13,'2019-08-15 21:31:31','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13),(14,'2019-08-15 21:31:31','2019-08-16 09:31:31',177,'General',100.00,'USD',2,1,'civicrm_line_item',16),(15,'2019-08-15 21:31:31','2019-08-16 09:31:31',60,'General',100.00,'USD',2,1,'civicrm_line_item',17),(16,'2019-08-15 21:31:31','2019-08-16 09:31:31',170,'General',100.00,'USD',2,1,'civicrm_line_item',18),(17,'2019-08-15 21:31:31','2019-08-16 09:31:31',90,'General',100.00,'USD',2,1,'civicrm_line_item',19),(18,'2019-08-15 21:31:31','2019-08-16 09:31:31',149,'General',100.00,'USD',2,1,'civicrm_line_item',20),(19,'2019-08-15 21:31:31','2019-08-16 09:31:31',52,'General',100.00,'USD',2,1,'civicrm_line_item',21),(20,'2019-08-15 21:31:31','2019-08-16 09:31:31',132,'General',100.00,'USD',2,1,'civicrm_line_item',22),(21,'2019-08-15 21:31:31','2019-08-16 09:31:31',115,'General',100.00,'USD',2,1,'civicrm_line_item',23),(22,'2019-08-15 21:31:31','2019-08-16 09:31:31',105,'General',100.00,'USD',2,1,'civicrm_line_item',24),(23,'2019-08-15 21:31:31','2019-08-16 09:31:31',18,'General',100.00,'USD',2,1,'civicrm_line_item',25),(24,'2019-08-15 21:31:31','2019-08-16 09:31:31',12,'General',100.00,'USD',2,1,'civicrm_line_item',26),(25,'2019-08-15 21:31:31','2019-08-16 09:31:31',113,'General',100.00,'USD',2,1,'civicrm_line_item',27),(26,'2019-08-15 21:31:31','2019-08-16 09:31:31',26,'General',100.00,'USD',2,1,'civicrm_line_item',28),(27,'2019-08-15 21:31:31','2019-08-16 09:31:31',134,'General',100.00,'USD',2,1,'civicrm_line_item',29),(28,'2019-08-15 21:31:31','2019-08-16 09:31:31',148,'Student',50.00,'USD',2,1,'civicrm_line_item',30),(29,'2019-08-15 21:31:31','2019-08-16 09:31:31',124,'Student',50.00,'USD',2,1,'civicrm_line_item',31),(30,'2019-08-15 21:31:31','2019-08-16 09:31:31',7,'Student',50.00,'USD',2,1,'civicrm_line_item',32),(31,'2019-08-15 21:31:31','2019-08-16 09:31:31',95,'Student',50.00,'USD',2,1,'civicrm_line_item',33),(32,'2019-08-15 21:31:31','2019-08-16 09:31:31',16,'Student',50.00,'USD',2,1,'civicrm_line_item',34),(33,'2019-08-15 21:31:31','2019-08-16 09:31:31',46,'Student',50.00,'USD',2,1,'civicrm_line_item',35),(34,'2019-08-15 21:31:31','2019-08-16 09:31:31',116,'Student',50.00,'USD',2,1,'civicrm_line_item',36),(35,'2019-08-15 21:31:31','2019-08-16 09:31:31',8,'Student',50.00,'USD',2,1,'civicrm_line_item',37),(36,'2019-08-15 21:31:31','2019-08-16 09:31:31',42,'Student',50.00,'USD',2,1,'civicrm_line_item',38),(37,'2019-08-15 21:31:31','2019-08-16 09:31:31',118,'Student',50.00,'USD',2,1,'civicrm_line_item',39),(38,'2019-08-15 21:31:31','2019-08-16 09:31:31',36,'Student',50.00,'USD',2,1,'civicrm_line_item',40),(39,'2019-08-15 21:31:31','2019-08-16 09:31:31',57,'Student',50.00,'USD',2,1,'civicrm_line_item',41),(40,'2019-08-15 21:31:31','2019-08-16 09:31:31',182,'Student',50.00,'USD',2,1,'civicrm_line_item',42),(41,'2019-08-15 21:31:31','2019-08-16 09:31:31',183,'Student',50.00,'USD',2,1,'civicrm_line_item',43),(42,'2019-08-15 21:31:31','2019-08-16 09:31:31',159,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44),(43,'2019-08-15 21:31:31','2019-08-16 09:31:31',78,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45),(44,'2019-08-15 21:31:31','2019-08-16 09:31:31',156,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81),(45,'2019-08-15 21:31:31','2019-08-16 09:31:31',20,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82),(46,'2019-08-15 21:31:31','2019-08-16 09:31:31',172,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83),(47,'2019-08-15 21:31:31','2019-08-16 09:31:31',119,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84),(48,'2019-08-15 21:31:31','2019-08-16 09:31:31',10,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85),(49,'2019-08-15 21:31:31','2019-08-16 09:31:31',191,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86),(50,'2019-08-15 21:31:31','2019-08-16 09:31:31',32,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87),(51,'2019-08-15 21:31:31','2019-08-16 09:31:31',23,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88),(52,'2019-08-15 21:31:31','2019-08-16 09:31:31',133,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89),(53,'2019-08-15 21:31:31','2019-08-16 09:31:31',26,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90),(54,'2019-08-15 21:31:31','2019-08-16 09:31:31',50,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91),(55,'2019-08-15 21:31:31','2019-08-16 09:31:31',82,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92),(56,'2019-08-15 21:31:31','2019-08-16 09:31:31',182,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93),(57,'2019-08-15 21:31:31','2019-08-16 09:31:31',196,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94),(58,'2019-08-15 21:31:31','2019-08-16 09:31:31',62,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95),(59,'2019-08-15 21:31:31','2019-08-16 09:31:31',186,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96),(60,'2019-08-15 21:31:31','2019-08-16 09:31:31',34,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47),(61,'2019-08-15 21:31:31','2019-08-16 09:31:31',42,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48),(62,'2019-08-15 21:31:31','2019-08-16 09:31:31',141,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49),(63,'2019-08-15 21:31:31','2019-08-16 09:31:31',107,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50),(64,'2019-08-15 21:31:31','2019-08-16 09:31:31',48,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51),(65,'2019-08-15 21:31:32','2019-08-16 09:31:31',184,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52),(66,'2019-08-15 21:31:32','2019-08-16 09:31:31',183,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53),(67,'2019-08-15 21:31:32','2019-08-16 09:31:31',2,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54),(68,'2019-08-15 21:31:32','2019-08-16 09:31:31',111,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55),(69,'2019-08-15 21:31:32','2019-08-16 09:31:31',4,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56),(70,'2019-08-15 21:31:32','2019-08-16 09:31:31',160,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57),(71,'2019-08-15 21:31:32','2019-08-16 09:31:31',13,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58),(72,'2019-08-15 21:31:32','2019-08-16 09:31:31',18,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59),(73,'2019-08-15 21:31:32','2019-08-16 09:31:31',173,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60),(74,'2019-08-15 21:31:32','2019-08-16 09:31:31',185,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61),(75,'2019-08-15 21:31:32','2019-08-16 09:31:31',132,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62),(76,'2019-08-15 21:31:32','2019-08-16 09:31:31',163,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63),(77,'2019-08-15 21:31:32','2019-08-16 09:31:31',167,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64),(78,'2019-08-15 21:31:32','2019-08-16 09:31:31',150,'Single',50.00,'USD',4,1,'civicrm_line_item',65),(79,'2019-08-15 21:31:32','2019-08-16 09:31:31',108,'Single',50.00,'USD',4,1,'civicrm_line_item',66),(80,'2019-08-15 21:31:32','2019-08-16 09:31:31',8,'Single',50.00,'USD',4,1,'civicrm_line_item',67),(81,'2019-08-15 21:31:32','2019-08-16 09:31:31',7,'Single',50.00,'USD',4,1,'civicrm_line_item',68),(82,'2019-08-15 21:31:32','2019-08-16 09:31:31',41,'Single',50.00,'USD',4,1,'civicrm_line_item',69),(83,'2019-08-15 21:31:32','2019-08-16 09:31:31',99,'Single',50.00,'USD',4,1,'civicrm_line_item',70),(84,'2019-08-15 21:31:32','2019-08-16 09:31:31',128,'Single',50.00,'USD',4,1,'civicrm_line_item',71),(85,'2019-08-15 21:31:32','2019-08-16 09:31:31',79,'Single',50.00,'USD',4,1,'civicrm_line_item',72),(86,'2019-08-15 21:31:32','2019-08-16 09:31:31',31,'Single',50.00,'USD',4,1,'civicrm_line_item',73),(87,'2019-08-15 21:31:32','2019-08-16 09:31:31',188,'Single',50.00,'USD',4,1,'civicrm_line_item',74),(88,'2019-08-15 21:31:32','2019-08-16 09:31:31',63,'Single',50.00,'USD',4,1,'civicrm_line_item',75),(89,'2019-08-15 21:31:32','2019-08-16 09:31:31',181,'Single',50.00,'USD',4,1,'civicrm_line_item',76),(90,'2019-08-15 21:31:32','2019-08-16 09:31:31',137,'Single',50.00,'USD',4,1,'civicrm_line_item',77),(91,'2019-08-15 21:31:32','2019-08-16 09:31:31',30,'Single',50.00,'USD',4,1,'civicrm_line_item',78),(92,'2019-08-15 21:31:32','2019-08-16 09:31:31',199,'Single',50.00,'USD',4,1,'civicrm_line_item',79),(93,'2019-08-15 21:31:32','2019-08-16 09:31:31',90,'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,'2019-09-20 19:57:29','2010-04-11 00:00:00',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1),(2,'2019-09-20 19:57:29','2010-03-21 00:00:00',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2),(3,'2019-09-20 19:57:29','2010-04-29 00:00:00',6,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',3),(4,'2019-09-20 19:57:29','2010-04-11 00:00:00',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4),(5,'2019-09-20 19:57:29','2010-04-15 00:00:00',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',5),(6,'2019-09-20 19:57:29','2010-04-11 00:00:00',19,'Contribution Amount',175.00,'USD',1,1,'civicrm_line_item',6),(7,'2019-09-20 19:57:29','2010-03-27 00:00:00',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',7),(8,'2019-09-20 19:57:29','2010-03-08 00:00:00',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',8),(9,'2019-09-20 19:57:29','2010-04-22 00:00:00',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',9),(10,'2019-09-20 19:57:29','2009-07-01 11:53:50',71,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',10),(11,'2019-09-20 19:57:29','2009-07-01 12:55:41',43,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',11),(12,'2019-09-20 19:57:29','2009-10-01 11:53:50',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',12),(13,'2019-09-20 19:57:29','2009-12-01 12:55:41',32,'Contribution Amount',200.00,'USD',1,1,'civicrm_line_item',13),(14,'2019-09-20 19:57:29','2019-09-20 12:57:29',130,'General',100.00,'USD',2,1,'civicrm_line_item',16),(15,'2019-09-20 19:57:29','2019-09-20 12:57:29',145,'General',100.00,'USD',2,1,'civicrm_line_item',17),(16,'2019-09-20 19:57:29','2019-09-20 12:57:29',53,'General',100.00,'USD',2,1,'civicrm_line_item',18),(17,'2019-09-20 19:57:29','2019-09-20 12:57:29',57,'General',100.00,'USD',2,1,'civicrm_line_item',19),(18,'2019-09-20 19:57:29','2019-09-20 12:57:29',178,'General',100.00,'USD',2,1,'civicrm_line_item',20),(19,'2019-09-20 19:57:29','2019-09-20 12:57:29',46,'General',100.00,'USD',2,1,'civicrm_line_item',21),(20,'2019-09-20 19:57:29','2019-09-20 12:57:29',123,'General',100.00,'USD',2,1,'civicrm_line_item',22),(21,'2019-09-20 19:57:29','2019-09-20 12:57:29',39,'General',100.00,'USD',2,1,'civicrm_line_item',23),(22,'2019-09-20 19:57:29','2019-09-20 12:57:29',19,'General',100.00,'USD',2,1,'civicrm_line_item',24),(23,'2019-09-20 19:57:29','2019-09-20 12:57:29',104,'General',100.00,'USD',2,1,'civicrm_line_item',25),(24,'2019-09-20 19:57:29','2019-09-20 12:57:29',10,'General',100.00,'USD',2,1,'civicrm_line_item',26),(25,'2019-09-20 19:57:29','2019-09-20 12:57:29',62,'General',100.00,'USD',2,1,'civicrm_line_item',27),(26,'2019-09-20 19:57:29','2019-09-20 12:57:29',113,'General',100.00,'USD',2,1,'civicrm_line_item',28),(27,'2019-09-20 19:57:29','2019-09-20 12:57:29',101,'General',100.00,'USD',2,1,'civicrm_line_item',29),(28,'2019-09-20 19:57:29','2019-09-20 12:57:29',197,'General',100.00,'USD',2,1,'civicrm_line_item',30),(29,'2019-09-20 19:57:29','2019-09-20 12:57:29',91,'Student',50.00,'USD',2,1,'civicrm_line_item',31),(30,'2019-09-20 19:57:29','2019-09-20 12:57:29',125,'Student',50.00,'USD',2,1,'civicrm_line_item',32),(31,'2019-09-20 19:57:29','2019-09-20 12:57:29',35,'Student',50.00,'USD',2,1,'civicrm_line_item',33),(32,'2019-09-20 19:57:29','2019-09-20 12:57:29',190,'Student',50.00,'USD',2,1,'civicrm_line_item',34),(33,'2019-09-20 19:57:29','2019-09-20 12:57:29',151,'Student',50.00,'USD',2,1,'civicrm_line_item',35),(34,'2019-09-20 19:57:29','2019-09-20 12:57:29',192,'Student',50.00,'USD',2,1,'civicrm_line_item',36),(35,'2019-09-20 19:57:29','2019-09-20 12:57:29',16,'Student',50.00,'USD',2,1,'civicrm_line_item',37),(36,'2019-09-20 19:57:29','2019-09-20 12:57:29',36,'Student',50.00,'USD',2,1,'civicrm_line_item',38),(37,'2019-09-20 19:57:29','2019-09-20 12:57:29',92,'Student',50.00,'USD',2,1,'civicrm_line_item',39),(38,'2019-09-20 19:57:29','2019-09-20 12:57:29',121,'Student',50.00,'USD',2,1,'civicrm_line_item',40),(39,'2019-09-20 19:57:29','2019-09-20 12:57:29',89,'Student',50.00,'USD',2,1,'civicrm_line_item',41),(40,'2019-09-20 19:57:29','2019-09-20 12:57:29',134,'Student',50.00,'USD',2,1,'civicrm_line_item',42),(41,'2019-09-20 19:57:29','2019-09-20 12:57:29',69,'Student',50.00,'USD',2,1,'civicrm_line_item',43),(42,'2019-09-20 19:57:29','2019-09-20 12:57:29',153,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',44),(43,'2019-09-20 19:57:29','2019-09-20 12:57:29',173,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',45),(44,'2019-09-20 19:57:29','2019-09-20 12:57:29',55,'Soprano',50.00,'USD',2,1,'civicrm_line_item',81),(45,'2019-09-20 19:57:29','2019-09-20 12:57:29',170,'Soprano',50.00,'USD',2,1,'civicrm_line_item',82),(46,'2019-09-20 19:57:29','2019-09-20 12:57:29',127,'Soprano',50.00,'USD',2,1,'civicrm_line_item',83),(47,'2019-09-20 19:57:29','2019-09-20 12:57:29',108,'Soprano',50.00,'USD',2,1,'civicrm_line_item',84),(48,'2019-09-20 19:57:29','2019-09-20 12:57:29',189,'Soprano',50.00,'USD',2,1,'civicrm_line_item',85),(49,'2019-09-20 19:57:29','2019-09-20 12:57:29',92,'Soprano',50.00,'USD',2,1,'civicrm_line_item',86),(50,'2019-09-20 19:57:29','2019-09-20 12:57:29',91,'Soprano',50.00,'USD',2,1,'civicrm_line_item',87),(51,'2019-09-20 19:57:29','2019-09-20 12:57:29',114,'Soprano',50.00,'USD',2,1,'civicrm_line_item',88),(52,'2019-09-20 19:57:29','2019-09-20 12:57:29',159,'Soprano',50.00,'USD',2,1,'civicrm_line_item',89),(53,'2019-09-20 19:57:29','2019-09-20 12:57:29',179,'Soprano',50.00,'USD',2,1,'civicrm_line_item',90),(54,'2019-09-20 19:57:29','2019-09-20 12:57:29',18,'Soprano',50.00,'USD',2,1,'civicrm_line_item',91),(55,'2019-09-20 19:57:29','2019-09-20 12:57:29',57,'Soprano',50.00,'USD',2,1,'civicrm_line_item',92),(56,'2019-09-20 19:57:29','2019-09-20 12:57:29',163,'Soprano',50.00,'USD',2,1,'civicrm_line_item',93),(57,'2019-09-20 19:57:29','2019-09-20 12:57:29',190,'Soprano',50.00,'USD',2,1,'civicrm_line_item',94),(58,'2019-09-20 19:57:29','2019-09-20 12:57:29',139,'Soprano',50.00,'USD',2,1,'civicrm_line_item',95),(59,'2019-09-20 19:57:29','2019-09-20 12:57:29',135,'Soprano',50.00,'USD',2,1,'civicrm_line_item',96),(60,'2019-09-20 19:57:29','2019-09-20 12:57:29',99,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',47),(61,'2019-09-20 19:57:29','2019-09-20 12:57:29',187,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',48),(62,'2019-09-20 19:57:29','2019-09-20 12:57:29',83,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',49),(63,'2019-09-20 19:57:29','2019-09-20 12:57:29',145,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',50),(64,'2019-09-20 19:57:29','2019-09-20 12:57:29',105,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',51),(65,'2019-09-20 19:57:29','2019-09-20 12:57:29',119,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',52),(66,'2019-09-20 19:57:29','2019-09-20 12:57:29',49,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',53),(67,'2019-09-20 19:57:29','2019-09-20 12:57:29',183,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',54),(68,'2019-09-20 19:57:29','2019-09-20 12:57:29',5,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',55),(69,'2019-09-20 19:57:29','2019-09-20 12:57:29',193,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',56),(70,'2019-09-20 19:57:29','2019-09-20 12:57:29',86,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',57),(71,'2019-09-20 19:57:29','2019-09-20 12:57:29',75,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',58),(72,'2019-09-20 19:57:29','2019-09-20 12:57:29',72,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',59),(73,'2019-09-20 19:57:29','2019-09-20 12:57:29',184,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',60),(74,'2019-09-20 19:57:29','2019-09-20 12:57:29',69,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',61),(75,'2019-09-20 19:57:29','2019-09-20 12:57:29',8,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',62),(76,'2019-09-20 19:57:29','2019-09-20 12:57:29',157,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63),(77,'2019-09-20 19:57:29','2019-09-20 12:57:29',89,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64),(78,'2019-09-20 19:57:29','2019-09-20 12:57:29',186,'Single',50.00,'USD',4,1,'civicrm_line_item',65),(79,'2019-09-20 19:57:29','2019-09-20 12:57:29',143,'Single',50.00,'USD',4,1,'civicrm_line_item',66),(80,'2019-09-20 19:57:29','2019-09-20 12:57:29',37,'Single',50.00,'USD',4,1,'civicrm_line_item',67),(81,'2019-09-20 19:57:29','2019-09-20 12:57:29',124,'Single',50.00,'USD',4,1,'civicrm_line_item',68),(82,'2019-09-20 19:57:29','2019-09-20 12:57:29',178,'Single',50.00,'USD',4,1,'civicrm_line_item',69),(83,'2019-09-20 19:57:29','2019-09-20 12:57:29',93,'Single',50.00,'USD',4,1,'civicrm_line_item',70),(84,'2019-09-20 19:57:29','2019-09-20 12:57:29',30,'Single',50.00,'USD',4,1,'civicrm_line_item',71),(85,'2019-09-20 19:57:29','2019-09-20 12:57:29',153,'Single',50.00,'USD',4,1,'civicrm_line_item',72),(86,'2019-09-20 19:57:29','2019-09-20 12:57:29',41,'Single',50.00,'USD',4,1,'civicrm_line_item',73),(87,'2019-09-20 19:57:29','2019-09-20 12:57:29',120,'Single',50.00,'USD',4,1,'civicrm_line_item',74),(88,'2019-09-20 19:57:29','2019-09-20 12:57:29',1,'Single',50.00,'USD',4,1,'civicrm_line_item',75),(89,'2019-09-20 19:57:29','2019-09-20 12:57:29',58,'Single',50.00,'USD',4,1,'civicrm_line_item',76),(90,'2019-09-20 19:57:29','2019-09-20 12:57:29',21,'Single',50.00,'USD',4,1,'civicrm_line_item',77),(91,'2019-09-20 19:57:29','2019-09-20 12:57:29',34,'Single',50.00,'USD',4,1,'civicrm_line_item',78),(92,'2019-09-20 19:57:29','2019-09-20 12:57:29',45,'Single',50.00,'USD',4,1,'civicrm_line_item',79),(93,'2019-09-20 19:57:29','2019-09-20 12:57:29',67,'Single',50.00,'USD',4,1,'civicrm_line_item',80);
 /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -533,7 +533,7 @@ 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`) VALUES (1,NULL,1,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL),(2,NULL,1,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL),(3,NULL,1,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL),(4,NULL,1,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL),(5,NULL,1,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL),(6,NULL,1,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL),(7,NULL,1,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL),(8,NULL,1,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL),(9,NULL,1,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL),(10,NULL,1,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL),(11,NULL,1,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL),(12,NULL,1,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL),(13,NULL,1,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL),(14,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(15,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(16,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(17,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(18,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(19,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(20,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(21,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(22,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(23,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(24,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(25,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(26,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(27,NULL,1,'2019-08-16 09:31:31',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(28,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(29,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(30,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(31,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(32,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(33,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(34,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(35,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(36,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(37,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(38,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(39,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(40,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(41,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(42,NULL,1,'2019-08-16 09:31:31',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(43,NULL,1,'2019-08-16 09:31:31',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(44,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(45,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(46,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(47,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(48,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(49,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(50,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(51,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(52,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(53,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(54,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(55,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(56,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(57,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(58,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(59,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(60,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(61,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(62,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(63,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(64,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(65,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(66,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(67,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(68,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(69,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(70,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(71,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(72,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(73,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(74,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(75,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(76,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(77,NULL,1,'2019-08-16 09:31:31',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(78,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(79,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(80,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(81,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(82,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(83,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(84,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(85,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(86,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(87,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(88,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(89,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(90,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(91,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(92,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(93,NULL,1,'2019-08-16 09:31:31',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,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`) VALUES (1,NULL,1,'2010-04-11 00:00:00',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL),(2,NULL,1,'2010-03-21 00:00:00',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL),(3,NULL,1,'2010-04-29 00:00:00',25.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'2095',NULL),(4,NULL,1,'2010-04-11 00:00:00',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL),(5,NULL,1,'2010-04-15 00:00:00',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL),(6,NULL,1,'2010-04-11 00:00:00',175.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'102',NULL),(7,NULL,1,'2010-03-27 00:00:00',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL),(8,NULL,1,'2010-03-08 00:00:00',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL),(9,NULL,1,'2010-04-22 00:00:00',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL),(10,NULL,1,'2009-07-01 11:53:50',500.00,NULL,NULL,'USD',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL),(11,NULL,1,'2009-07-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL43II',NULL,1,NULL,1,NULL,NULL,NULL),(12,NULL,1,'2009-10-01 11:53:50',200.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL),(13,NULL,1,'2009-12-01 12:55:41',200.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL),(14,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(15,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(16,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(17,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(18,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(19,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(20,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(21,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(22,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(23,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(24,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(25,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(26,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(27,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(28,NULL,1,'2019-09-20 12:57:29',100.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(29,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(30,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(31,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(32,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(33,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(34,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(35,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(36,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(37,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(38,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(39,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(40,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(41,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(42,NULL,1,'2019-09-20 12:57:29',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(43,NULL,1,'2019-09-20 12:57:29',1200.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(44,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(45,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(46,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(47,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(48,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(49,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(50,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(51,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(52,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(53,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(54,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(55,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(56,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(57,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(58,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(59,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(60,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(61,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(62,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(63,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(64,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(65,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(66,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(67,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(68,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(69,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(70,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(71,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(72,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(73,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(74,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(75,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(76,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(77,NULL,1,'2019-09-20 12:57:29',800.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(78,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(79,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(80,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(81,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(82,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(83,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(84,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(85,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(86,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(87,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(88,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(89,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(90,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(91,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(92,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL),(93,NULL,1,'2019-09-20 12:57:29',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,NULL,NULL);
 /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -562,7 +562,7 @@ 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`) VALUES (1,'Administrators','Administrators','Contacts in this group are assigned Administrator role permissions.',NULL,NULL,1,'User and User Admin Only',NULL,NULL,NULL,'\ 11\ 1',NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,'Newsletter Subscribers','Newsletter Subscribers',NULL,NULL,NULL,1,'Public Pages',' (  ( ( `civicrm_group_contact-5d55cf317f43f`.group_id IN (\"2\") ) )  ) ','a:8:{s:15:\"civicrm_contact\";i:1;s:15:\"civicrm_address\";i:1;s:15:\"civicrm_country\";i:1;s:13:\"civicrm_email\";i:1;s:13:\"civicrm_phone\";i:1;s:10:\"civicrm_im\";i:1;s:19:\"civicrm_worldregion\";i:1;s:37:\"`civicrm_group_contact-5d55cf317f43f`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d55cf317f43f` ON (contact_a.id = `civicrm_group_contact-5d55cf317f43f`.contact_id AND `civicrm_group_contact-5d55cf317f43f`.status IN (\'Added\'))\";}','a:2:{s:15:\"civicrm_contact\";i:1;s:37:\"`civicrm_group_contact-5d55cf317f43f`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d55cf317f43f` ON (contact_a.id = `civicrm_group_contact-5d55cf317f43f`.contact_id AND `civicrm_group_contact-5d55cf317f43f`.status IN (\'Added\'))\";}','\ 11\ 12\ 1',NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,'Summer Program Volunteers','Summer Program Volunteers',NULL,NULL,NULL,1,'Public Pages',' (  ( ( `civicrm_group_contact-5d55cf318a7ba`.group_id IN (\"3\") ) )  ) ','a:8:{s:15:\"civicrm_contact\";i:1;s:15:\"civicrm_address\";i:1;s:15:\"civicrm_country\";i:1;s:13:\"civicrm_email\";i:1;s:13:\"civicrm_phone\";i:1;s:10:\"civicrm_im\";i:1;s:19:\"civicrm_worldregion\";i:1;s:37:\"`civicrm_group_contact-5d55cf318a7ba`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d55cf318a7ba` ON (contact_a.id = `civicrm_group_contact-5d55cf318a7ba`.contact_id AND `civicrm_group_contact-5d55cf318a7ba`.status IN (\'Added\'))\";}','a:2:{s:15:\"civicrm_contact\";i:1;s:37:\"`civicrm_group_contact-5d55cf318a7ba`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d55cf318a7ba` ON (contact_a.id = `civicrm_group_contact-5d55cf318a7ba`.contact_id AND `civicrm_group_contact-5d55cf318a7ba`.status IN (\'Added\'))\";}','\ 11\ 12\ 1',NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,'Advisory Board','Advisory Board',NULL,NULL,NULL,1,'Public Pages',' (  ( ( `civicrm_group_contact-5d55cf3194611`.group_id IN (\"4\") ) )  ) ','a:8:{s:15:\"civicrm_contact\";i:1;s:15:\"civicrm_address\";i:1;s:15:\"civicrm_country\";i:1;s:13:\"civicrm_email\";i:1;s:13:\"civicrm_phone\";i:1;s:10:\"civicrm_im\";i:1;s:19:\"civicrm_worldregion\";i:1;s:37:\"`civicrm_group_contact-5d55cf3194611`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d55cf3194611` ON (contact_a.id = `civicrm_group_contact-5d55cf3194611`.contact_id AND `civicrm_group_contact-5d55cf3194611`.status IN (\'Added\'))\";}','a:2:{s:15:\"civicrm_contact\";i:1;s:37:\"`civicrm_group_contact-5d55cf3194611`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d55cf3194611` ON (contact_a.id = `civicrm_group_contact-5d55cf3194611`.contact_id AND `civicrm_group_contact-5d55cf3194611`.status IN (\'Added\'))\";}','\ 11\ 12\ 1',NULL,NULL,NULL,NULL,0,0,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`) VALUES (1,'Administrators','Administrators','Contacts in this group are assigned Administrator role permissions.',NULL,NULL,1,'User and User Admin Only',NULL,NULL,NULL,'\ 11\ 1',NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,'Newsletter Subscribers','Newsletter Subscribers',NULL,NULL,NULL,1,'Public Pages',' (  ( ( `civicrm_group_contact-5d852f28c97c9`.group_id IN (\"2\") ) )  ) ','a:8:{s:15:\"civicrm_contact\";i:1;s:15:\"civicrm_address\";i:1;s:15:\"civicrm_country\";i:1;s:13:\"civicrm_email\";i:1;s:13:\"civicrm_phone\";i:1;s:10:\"civicrm_im\";i:1;s:19:\"civicrm_worldregion\";i:1;s:37:\"`civicrm_group_contact-5d852f28c97c9`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d852f28c97c9` ON (contact_a.id = `civicrm_group_contact-5d852f28c97c9`.contact_id AND `civicrm_group_contact-5d852f28c97c9`.status IN (\'Added\'))\";}','a:2:{s:15:\"civicrm_contact\";i:1;s:37:\"`civicrm_group_contact-5d852f28c97c9`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d852f28c97c9` ON (contact_a.id = `civicrm_group_contact-5d852f28c97c9`.contact_id AND `civicrm_group_contact-5d852f28c97c9`.status IN (\'Added\'))\";}','\ 11\ 12\ 1',NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,'Summer Program Volunteers','Summer Program Volunteers',NULL,NULL,NULL,1,'Public Pages',' (  ( ( `civicrm_group_contact-5d852f28cc524`.group_id IN (\"3\") ) )  ) ','a:8:{s:15:\"civicrm_contact\";i:1;s:15:\"civicrm_address\";i:1;s:15:\"civicrm_country\";i:1;s:13:\"civicrm_email\";i:1;s:13:\"civicrm_phone\";i:1;s:10:\"civicrm_im\";i:1;s:19:\"civicrm_worldregion\";i:1;s:37:\"`civicrm_group_contact-5d852f28cc524`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d852f28cc524` ON (contact_a.id = `civicrm_group_contact-5d852f28cc524`.contact_id AND `civicrm_group_contact-5d852f28cc524`.status IN (\'Added\'))\";}','a:2:{s:15:\"civicrm_contact\";i:1;s:37:\"`civicrm_group_contact-5d852f28cc524`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d852f28cc524` ON (contact_a.id = `civicrm_group_contact-5d852f28cc524`.contact_id AND `civicrm_group_contact-5d852f28cc524`.status IN (\'Added\'))\";}','\ 11\ 12\ 1',NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,'Advisory Board','Advisory Board',NULL,NULL,NULL,1,'Public Pages',' (  ( ( `civicrm_group_contact-5d852f28ce68e`.group_id IN (\"4\") ) )  ) ','a:8:{s:15:\"civicrm_contact\";i:1;s:15:\"civicrm_address\";i:1;s:15:\"civicrm_country\";i:1;s:13:\"civicrm_email\";i:1;s:13:\"civicrm_phone\";i:1;s:10:\"civicrm_im\";i:1;s:19:\"civicrm_worldregion\";i:1;s:37:\"`civicrm_group_contact-5d852f28ce68e`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d852f28ce68e` ON (contact_a.id = `civicrm_group_contact-5d852f28ce68e`.contact_id AND `civicrm_group_contact-5d852f28ce68e`.status IN (\'Added\'))\";}','a:2:{s:15:\"civicrm_contact\";i:1;s:37:\"`civicrm_group_contact-5d852f28ce68e`\";s:201:\" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5d852f28ce68e` ON (contact_a.id = `civicrm_group_contact-5d852f28ce68e`.contact_id AND `civicrm_group_contact-5d852f28ce68e`.status IN (\'Added\'))\";}','\ 11\ 12\ 1',NULL,NULL,NULL,NULL,0,0,NULL,NULL);
 /*!40000 ALTER TABLE `civicrm_group` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -572,7 +572,7 @@ 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,16,'Added',NULL,NULL),(2,2,45,'Added',NULL,NULL),(3,2,103,'Added',NULL,NULL),(4,2,57,'Added',NULL,NULL),(5,2,69,'Added',NULL,NULL),(6,2,31,'Added',NULL,NULL),(7,2,48,'Added',NULL,NULL),(8,2,193,'Added',NULL,NULL),(9,2,169,'Added',NULL,NULL),(10,2,33,'Added',NULL,NULL),(11,2,128,'Added',NULL,NULL),(12,2,27,'Added',NULL,NULL),(13,2,66,'Added',NULL,NULL),(14,2,5,'Added',NULL,NULL),(15,2,170,'Added',NULL,NULL),(16,2,112,'Added',NULL,NULL),(17,2,129,'Added',NULL,NULL),(18,2,18,'Added',NULL,NULL),(19,2,191,'Added',NULL,NULL),(20,2,60,'Added',NULL,NULL),(21,2,81,'Added',NULL,NULL),(22,2,85,'Added',NULL,NULL),(23,2,116,'Added',NULL,NULL),(24,2,177,'Added',NULL,NULL),(25,2,4,'Added',NULL,NULL),(26,2,149,'Added',NULL,NULL),(27,2,24,'Added',NULL,NULL),(28,2,82,'Added',NULL,NULL),(29,2,30,'Added',NULL,NULL),(30,2,12,'Added',NULL,NULL),(31,2,172,'Added',NULL,NULL),(32,2,114,'Added',NULL,NULL),(33,2,154,'Added',NULL,NULL),(34,2,99,'Added',NULL,NULL),(35,2,94,'Added',NULL,NULL),(36,2,58,'Added',NULL,NULL),(37,2,15,'Added',NULL,NULL),(38,2,51,'Added',NULL,NULL),(39,2,26,'Added',NULL,NULL),(40,2,174,'Added',NULL,NULL),(41,2,42,'Added',NULL,NULL),(42,2,124,'Added',NULL,NULL),(43,2,136,'Added',NULL,NULL),(44,2,75,'Added',NULL,NULL),(45,2,118,'Added',NULL,NULL),(46,2,40,'Added',NULL,NULL),(47,2,38,'Added',NULL,NULL),(48,2,59,'Added',NULL,NULL),(49,2,148,'Added',NULL,NULL),(50,2,50,'Added',NULL,NULL),(51,2,22,'Added',NULL,NULL),(52,2,192,'Added',NULL,NULL),(53,2,119,'Added',NULL,NULL),(54,2,133,'Added',NULL,NULL),(55,2,95,'Added',NULL,NULL),(56,2,164,'Added',NULL,NULL),(57,2,158,'Added',NULL,NULL),(58,2,165,'Added',NULL,NULL),(59,2,14,'Added',NULL,NULL),(60,2,77,'Added',NULL,NULL),(61,3,23,'Added',NULL,NULL),(62,3,67,'Added',NULL,NULL),(63,3,113,'Added',NULL,NULL),(64,3,89,'Added',NULL,NULL),(65,3,185,'Added',NULL,NULL),(66,3,102,'Added',NULL,NULL),(67,3,68,'Added',NULL,NULL),(68,3,123,'Added',NULL,NULL),(69,3,134,'Added',NULL,NULL),(70,3,141,'Added',NULL,NULL),(71,3,7,'Added',NULL,NULL),(72,3,96,'Added',NULL,NULL),(73,3,10,'Added',NULL,NULL),(74,3,87,'Added',NULL,NULL),(75,3,194,'Added',NULL,NULL),(76,4,16,'Added',NULL,NULL),(77,4,193,'Added',NULL,NULL),(78,4,170,'Added',NULL,NULL),(79,4,85,'Added',NULL,NULL),(80,4,30,'Added',NULL,NULL),(81,4,58,'Added',NULL,NULL),(82,4,136,'Added',NULL,NULL),(83,4,50,'Added',NULL,NULL);
+INSERT INTO `civicrm_group_contact` (`id`, `group_id`, `contact_id`, `status`, `location_id`, `email_id`) VALUES (1,2,167,'Added',NULL,NULL),(2,2,144,'Added',NULL,NULL),(3,2,65,'Added',NULL,NULL),(4,2,187,'Added',NULL,NULL),(5,2,155,'Added',NULL,NULL),(6,2,174,'Added',NULL,NULL),(7,2,62,'Added',NULL,NULL),(8,2,87,'Added',NULL,NULL),(9,2,129,'Added',NULL,NULL),(10,2,112,'Added',NULL,NULL),(11,2,197,'Added',NULL,NULL),(12,2,116,'Added',NULL,NULL),(13,2,67,'Added',NULL,NULL),(14,2,152,'Added',NULL,NULL),(15,2,127,'Added',NULL,NULL),(16,2,198,'Added',NULL,NULL),(17,2,181,'Added',NULL,NULL),(18,2,76,'Added',NULL,NULL),(19,2,115,'Added',NULL,NULL),(20,2,30,'Added',NULL,NULL),(21,2,153,'Added',NULL,NULL),(22,2,79,'Added',NULL,NULL),(23,2,113,'Added',NULL,NULL),(24,2,64,'Added',NULL,NULL),(25,2,120,'Added',NULL,NULL),(26,2,6,'Added',NULL,NULL),(27,2,63,'Added',NULL,NULL),(28,2,201,'Added',NULL,NULL),(29,2,171,'Added',NULL,NULL),(30,2,136,'Added',NULL,NULL),(31,2,158,'Added',NULL,NULL),(32,2,70,'Added',NULL,NULL),(33,2,41,'Added',NULL,NULL),(34,2,147,'Added',NULL,NULL),(35,2,151,'Added',NULL,NULL),(36,2,73,'Added',NULL,NULL),(37,2,114,'Added',NULL,NULL),(38,2,34,'Added',NULL,NULL),(39,2,16,'Added',NULL,NULL),(40,2,86,'Added',NULL,NULL),(41,2,89,'Added',NULL,NULL),(42,2,19,'Added',NULL,NULL),(43,2,180,'Added',NULL,NULL),(44,2,92,'Added',NULL,NULL),(45,2,36,'Added',NULL,NULL),(46,2,2,'Added',NULL,NULL),(47,2,55,'Added',NULL,NULL),(48,2,11,'Added',NULL,NULL),(49,2,121,'Added',NULL,NULL),(50,2,123,'Added',NULL,NULL),(51,2,102,'Added',NULL,NULL),(52,2,135,'Added',NULL,NULL),(53,2,104,'Added',NULL,NULL),(54,2,45,'Added',NULL,NULL),(55,2,9,'Added',NULL,NULL),(56,2,128,'Added',NULL,NULL),(57,2,77,'Added',NULL,NULL),(58,2,103,'Added',NULL,NULL),(59,2,156,'Added',NULL,NULL),(60,2,78,'Added',NULL,NULL),(61,3,192,'Added',NULL,NULL),(62,3,97,'Added',NULL,NULL),(63,3,117,'Added',NULL,NULL),(64,3,39,'Added',NULL,NULL),(65,3,131,'Added',NULL,NULL),(66,3,111,'Added',NULL,NULL),(67,3,118,'Added',NULL,NULL),(68,3,148,'Added',NULL,NULL),(69,3,81,'Added',NULL,NULL),(70,3,119,'Added',NULL,NULL),(71,3,53,'Added',NULL,NULL),(72,3,162,'Added',NULL,NULL),(73,3,101,'Added',NULL,NULL),(74,3,139,'Added',NULL,NULL),(75,3,199,'Added',NULL,NULL),(76,4,167,'Added',NULL,NULL),(77,4,87,'Added',NULL,NULL),(78,4,127,'Added',NULL,NULL),(79,4,79,'Added',NULL,NULL),(80,4,171,'Added',NULL,NULL),(81,4,73,'Added',NULL,NULL),(82,4,180,'Added',NULL,NULL),(83,4,123,'Added',NULL,NULL);
 /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -637,7 +637,7 @@ 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',5,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(19,'civicrm_membership',7,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(20,'civicrm_membership',9,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(21,'civicrm_membership',13,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(22,'civicrm_membership',15,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(23,'civicrm_membership',17,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(24,'civicrm_membership',19,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(25,'civicrm_membership',21,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(26,'civicrm_membership',23,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(27,'civicrm_membership',25,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(28,'civicrm_membership',27,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(29,'civicrm_membership',29,27,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(30,'civicrm_membership',2,28,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(31,'civicrm_membership',4,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',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(42,'civicrm_membership',28,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(43,'civicrm_membership',30,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,58,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(48,'civicrm_participant',6,60,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(49,'civicrm_participant',9,77,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(50,'civicrm_participant',12,69,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(51,'civicrm_participant',15,61,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(52,'civicrm_participant',18,88,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(53,'civicrm_participant',21,87,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,71,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(56,'civicrm_participant',28,46,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(57,'civicrm_participant',31,80,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(58,'civicrm_participant',34,50,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(59,'civicrm_participant',37,51,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(60,'civicrm_participant',40,84,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,81,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(64,'civicrm_participant',50,82,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(65,'civicrm_participant',1,78,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(66,'civicrm_participant',4,70,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(67,'civicrm_participant',7,48,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(68,'civicrm_participant',10,47,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(69,'civicrm_participant',13,59,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(70,'civicrm_participant',16,68,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,65,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(73,'civicrm_participant',26,56,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(74,'civicrm_participant',29,91,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(75,'civicrm_participant',32,64,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,76,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(78,'civicrm_participant',41,55,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(79,'civicrm_participant',44,94,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,79,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(82,'civicrm_participant',5,52,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(83,'civicrm_participant',8,83,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(84,'civicrm_participant',11,72,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(85,'civicrm_participant',14,49,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(86,'civicrm_participant',17,92,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(87,'civicrm_participant',20,57,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(88,'civicrm_participant',23,53,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(89,'civicrm_participant',27,75,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(90,'civicrm_participant',30,54,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(91,'civicrm_participant',33,62,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(92,'civicrm_participant',36,66,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(93,'civicrm_participant',39,86,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(94,'civicrm_participant',42,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(95,'civicrm_participant',45,63,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(96,'civicrm_participant',48,90,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,15,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(18,'civicrm_membership',5,16,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(19,'civicrm_membership',7,17,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(20,'civicrm_membership',9,18,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(21,'civicrm_membership',10,19,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(22,'civicrm_membership',13,20,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(23,'civicrm_membership',15,21,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(24,'civicrm_membership',17,22,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(25,'civicrm_membership',19,23,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(26,'civicrm_membership',21,24,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(27,'civicrm_membership',23,25,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(28,'civicrm_membership',25,26,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(29,'civicrm_membership',27,27,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(30,'civicrm_membership',29,28,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL),(31,'civicrm_membership',2,29,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(32,'civicrm_membership',4,30,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(33,'civicrm_membership',6,31,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(34,'civicrm_membership',8,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',26,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(42,'civicrm_membership',28,40,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL),(43,'civicrm_membership',30,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,69,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(48,'civicrm_participant',6,91,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(49,'civicrm_participant',9,63,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(50,'civicrm_participant',12,80,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(51,'civicrm_participant',15,70,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(52,'civicrm_participant',18,73,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(53,'civicrm_participant',21,55,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(54,'civicrm_participant',24,88,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(55,'civicrm_participant',25,46,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(56,'civicrm_participant',28,94,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(57,'civicrm_participant',31,64,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(58,'civicrm_participant',34,62,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(59,'civicrm_participant',37,61,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(60,'civicrm_participant',40,89,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(61,'civicrm_participant',43,60,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(62,'civicrm_participant',46,47,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(63,'civicrm_participant',49,82,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(64,'civicrm_participant',50,65,7,'Tiny-tots (ages 5-8)',1.00,800.00,800.00,0,13,4,0.00,NULL),(65,'civicrm_participant',1,90,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(66,'civicrm_participant',4,79,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(67,'civicrm_participant',7,52,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(68,'civicrm_participant',10,75,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(69,'civicrm_participant',13,86,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(70,'civicrm_participant',16,68,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(71,'civicrm_participant',19,50,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(72,'civicrm_participant',22,81,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(73,'civicrm_participant',26,53,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(74,'civicrm_participant',29,74,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(75,'civicrm_participant',32,45,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(76,'civicrm_participant',35,58,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(77,'civicrm_participant',38,49,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(78,'civicrm_participant',41,51,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(79,'civicrm_participant',44,54,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(80,'civicrm_participant',47,59,8,'Single',1.00,50.00,50.00,0,16,4,0.00,NULL),(81,'civicrm_participant',2,56,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(82,'civicrm_participant',5,85,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(83,'civicrm_participant',8,76,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(84,'civicrm_participant',11,71,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(85,'civicrm_participant',14,92,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(86,'civicrm_participant',17,67,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(87,'civicrm_participant',20,66,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(88,'civicrm_participant',23,72,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(89,'civicrm_participant',27,83,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(90,'civicrm_participant',30,87,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(91,'civicrm_participant',33,48,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(92,'civicrm_participant',36,57,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(93,'civicrm_participant',39,84,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(94,'civicrm_participant',42,93,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(95,'civicrm_participant',45,78,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL),(96,'civicrm_participant',48,77,9,'Soprano',1.00,50.00,50.00,0,21,2,0.00,NULL);
 /*!40000 ALTER TABLE `civicrm_line_item` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -647,7 +647,7 @@ 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,175,186,170,NULL,NULL,NULL,NULL,NULL),(2,176,187,171,NULL,NULL,NULL,NULL,NULL),(3,177,188,172,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,179,201,168,NULL,NULL,NULL,NULL,NULL),(2,180,202,169,NULL,NULL,NULL,NULL,NULL),(3,181,203,170,NULL,NULL,NULL,NULL,NULL);
 /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -896,7 +896,7 @@ 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,177,1,'2019-08-15','2019-08-15','2021-08-14','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,148,2,'2019-08-14','2019-08-14','2020-08-13','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,60,1,'2019-08-13','2019-08-13','2021-08-12','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,124,2,'2019-08-12','2019-08-12','2020-08-11','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(5,170,1,'2017-07-14','2017-07-14','2019-07-13','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(6,7,2,'2019-08-10','2019-08-10','2020-08-09','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(7,90,1,'2019-08-09','2019-08-09','2021-08-08','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(8,95,2,'2019-08-08','2019-08-08','2020-08-07','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(9,149,1,'2019-08-07','2019-08-07','2021-08-06','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(10,16,2,'2018-08-06','2018-08-06','2019-08-05','Donation',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(11,159,3,'2019-08-05','2019-08-05',NULL,'Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(12,46,2,'2019-08-04','2019-08-04','2020-08-03','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(13,52,1,'2019-08-03','2019-08-03','2021-08-02','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(14,116,2,'2019-08-02','2019-08-02','2020-08-01','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(15,132,1,'2017-04-25','2017-04-25','2019-04-24','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(16,8,2,'2019-07-31','2019-07-31','2020-07-30','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(17,115,1,'2019-07-30','2019-07-30','2021-07-29','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(18,42,2,'2019-07-29','2019-07-29','2020-07-28','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(19,105,1,'2019-07-28','2019-07-28','2021-07-27','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(20,118,2,'2018-07-27','2018-07-27','2019-07-26','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(21,18,1,'2019-07-26','2019-07-26','2021-07-25','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(22,78,3,'2019-07-25','2019-07-25',NULL,'Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(23,12,1,'2019-07-24','2019-07-24','2021-07-23','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(24,36,2,'2019-07-23','2019-07-23','2020-07-22','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(25,113,1,'2017-02-04','2017-02-04','2019-02-03','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(26,57,2,'2019-07-21','2019-07-21','2020-07-20','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(27,26,1,'2019-07-20','2019-07-20','2021-07-19','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(28,182,2,'2019-07-19','2019-07-19','2020-07-18','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(29,134,1,'2019-07-18','2019-07-18','2021-07-17','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(30,183,2,'2018-07-17','2018-07-17','2019-07-16','Donation',4,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,130,1,'2019-09-20','2019-09-20','2021-09-19','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(2,91,2,'2019-09-19','2019-09-19','2020-09-18','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(3,145,1,'2019-09-18','2019-09-18','2021-09-17','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(4,125,2,'2019-09-17','2019-09-17','2020-09-16','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(5,53,1,'2017-08-19','2017-08-19','2019-08-18','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(6,35,2,'2019-09-15','2019-09-15','2020-09-14','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(7,57,1,'2019-09-14','2019-09-14','2021-09-13','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(8,190,2,'2019-09-13','2019-09-13','2020-09-12','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(9,178,1,'2019-09-12','2019-09-12','2021-09-11','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(10,46,1,'2017-07-10','2017-07-10','2019-07-09','Payment',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(11,153,3,'2019-09-10','2019-09-10',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(12,151,2,'2019-09-09','2019-09-09','2020-09-08','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(13,123,1,'2019-09-08','2019-09-08','2021-09-07','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(14,192,2,'2019-09-07','2019-09-07','2020-09-06','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(15,39,1,'2017-05-31','2017-05-31','2019-05-30','Donation',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(16,16,2,'2019-09-05','2019-09-05','2020-09-04','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(17,19,1,'2019-09-04','2019-09-04','2021-09-03','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(18,36,2,'2019-09-03','2019-09-03','2020-09-02','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(19,104,1,'2019-09-02','2019-09-02','2021-09-01','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(20,92,2,'2018-09-01','2018-09-01','2019-08-31','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(21,10,1,'2019-08-31','2019-08-31','2021-08-30','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(22,173,3,'2019-08-30','2019-08-30',NULL,'Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(23,62,1,'2019-08-29','2019-08-29','2021-08-28','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(24,121,2,'2019-08-28','2019-08-28','2020-08-27','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(25,113,1,'2017-03-12','2017-03-12','2019-03-11','Check',3,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(26,89,2,'2019-08-26','2019-08-26','2020-08-25','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(27,101,1,'2019-08-25','2019-08-25','2021-08-24','Donation',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(28,134,2,'2019-08-24','2019-08-24','2020-08-23','Payment',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(29,197,1,'2019-08-23','2019-08-23','2021-08-22','Check',1,NULL,NULL,NULL,NULL,0,0,NULL,NULL),(30,69,2,'2018-08-22','2018-08-22','2019-08-21','Payment',4,NULL,NULL,NULL,NULL,0,0,NULL,NULL);
 /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -916,7 +916,7 @@ 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,6,1,'2019-08-10','2020-08-09',7,'2019-08-15',2,NULL),(2,16,1,'2019-07-31','2020-07-30',8,'2019-08-15',2,NULL),(3,23,1,'2019-07-24','2021-07-23',12,'2019-08-15',1,NULL),(4,10,4,'2018-08-06','2019-08-05',16,'2019-08-15',2,NULL),(5,21,1,'2019-07-26','2021-07-25',18,'2019-08-15',1,NULL),(6,27,1,'2019-07-20','2021-07-19',26,'2019-08-15',1,NULL),(7,24,1,'2019-07-23','2020-07-22',36,'2019-08-15',2,NULL),(8,18,1,'2019-07-29','2020-07-28',42,'2019-08-15',2,NULL),(9,12,1,'2019-08-04','2020-08-03',46,'2019-08-15',2,NULL),(10,13,1,'2019-08-03','2021-08-02',52,'2019-08-15',1,NULL),(11,26,1,'2019-07-21','2020-07-20',57,'2019-08-15',2,NULL),(12,3,1,'2019-08-13','2021-08-12',60,'2019-08-15',1,NULL),(13,22,1,'2019-07-25',NULL,78,'2019-08-15',3,NULL),(14,7,1,'2019-08-09','2021-08-08',90,'2019-08-15',1,NULL),(15,8,1,'2019-08-08','2020-08-07',95,'2019-08-15',2,NULL),(16,19,1,'2019-07-28','2021-07-27',105,'2019-08-15',1,NULL),(17,25,3,'2017-02-04','2019-02-03',113,'2019-08-15',1,NULL),(18,17,1,'2019-07-30','2021-07-29',115,'2019-08-15',1,NULL),(19,14,1,'2019-08-02','2020-08-01',116,'2019-08-15',2,NULL),(20,20,4,'2018-07-27','2019-07-26',118,'2019-08-15',2,NULL),(21,4,1,'2019-08-12','2020-08-11',124,'2019-08-15',2,NULL),(22,15,3,'2017-04-25','2019-04-24',132,'2019-08-15',1,NULL),(23,29,1,'2019-07-18','2021-07-17',134,'2019-08-15',1,NULL),(24,2,1,'2019-08-14','2020-08-13',148,'2019-08-15',2,NULL),(25,9,1,'2019-08-07','2021-08-06',149,'2019-08-15',1,NULL),(26,11,1,'2019-08-05',NULL,159,'2019-08-15',3,NULL),(27,5,3,'2017-07-14','2019-07-13',170,'2019-08-15',1,NULL),(28,1,1,'2019-08-15','2021-08-14',177,'2019-08-15',1,NULL),(29,28,1,'2019-07-19','2020-07-18',182,'2019-08-15',2,NULL),(30,30,4,'2018-07-17','2019-07-16',183,'2019-08-15',2,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,21,1,'2019-08-31','2021-08-30',10,'2019-09-20',1,NULL),(2,16,1,'2019-09-05','2020-09-04',16,'2019-09-20',2,NULL),(3,17,1,'2019-09-04','2021-09-03',19,'2019-09-20',1,NULL),(4,6,1,'2019-09-15','2020-09-14',35,'2019-09-20',2,NULL),(5,18,1,'2019-09-03','2020-09-02',36,'2019-09-20',2,NULL),(6,15,3,'2017-05-31','2019-05-30',39,'2019-09-20',1,NULL),(7,10,3,'2017-07-10','2019-07-09',46,'2019-09-20',1,NULL),(8,5,3,'2017-08-19','2019-08-18',53,'2019-09-20',1,NULL),(9,7,1,'2019-09-14','2021-09-13',57,'2019-09-20',1,NULL),(10,23,1,'2019-08-29','2021-08-28',62,'2019-09-20',1,NULL),(11,30,4,'2018-08-22','2019-08-21',69,'2019-09-20',2,NULL),(12,26,1,'2019-08-26','2020-08-25',89,'2019-09-20',2,NULL),(13,2,1,'2019-09-19','2020-09-18',91,'2019-09-20',2,NULL),(14,20,4,'2018-09-01','2019-08-31',92,'2019-09-20',2,NULL),(15,27,1,'2019-08-25','2021-08-24',101,'2019-09-20',1,NULL),(16,19,1,'2019-09-02','2021-09-01',104,'2019-09-20',1,NULL),(17,25,3,'2017-03-12','2019-03-11',113,'2019-09-20',1,NULL),(18,24,1,'2019-08-28','2020-08-27',121,'2019-09-20',2,NULL),(19,13,1,'2019-09-08','2021-09-07',123,'2019-09-20',1,NULL),(20,4,1,'2019-09-17','2020-09-16',125,'2019-09-20',2,NULL),(21,1,1,'2019-09-20','2021-09-19',130,'2019-09-20',1,NULL),(22,28,1,'2019-08-24','2020-08-23',134,'2019-09-20',2,NULL),(23,3,1,'2019-09-18','2021-09-17',145,'2019-09-20',1,NULL),(24,12,1,'2019-09-09','2020-09-08',151,'2019-09-20',2,NULL),(25,11,1,'2019-09-10',NULL,153,'2019-09-20',3,NULL),(26,22,1,'2019-08-30',NULL,173,'2019-09-20',3,NULL),(27,9,1,'2019-09-12','2021-09-11',178,'2019-09-20',1,NULL),(28,8,1,'2019-09-13','2020-09-12',190,'2019-09-20',2,NULL),(29,14,1,'2019-09-07','2020-09-06',192,'2019-09-20',2,NULL),(30,29,1,'2019-08-23','2021-08-22',197,'2019-09-20',1,NULL);
 /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -926,7 +926,7 @@ 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,5,16),(4,7,17),(5,9,18),(6,13,19),(7,15,20),(8,17,21),(9,19,22),(10,21,23),(11,23,24),(12,25,25),(13,27,26),(14,29,27),(15,2,28),(16,4,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,26,39),(27,28,40),(28,30,41),(29,11,42),(30,22,43);
+INSERT INTO `civicrm_membership_payment` (`id`, `membership_id`, `contribution_id`) VALUES (1,1,14),(2,3,15),(3,5,16),(4,7,17),(5,9,18),(6,10,19),(7,13,20),(8,15,21),(9,17,22),(10,19,23),(11,21,24),(12,23,25),(13,25,26),(14,27,27),(15,29,28),(16,2,29),(17,4,30),(18,6,31),(19,8,32),(20,12,33),(21,14,34),(22,16,35),(23,18,36),(24,20,37),(25,24,38),(26,26,39),(27,28,40),(28,30,41),(29,11,42),(30,22,43);
 /*!40000 ALTER TABLE `civicrm_membership_payment` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -956,7 +956,7 @@ 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/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/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:{}'),(7,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:{}'),(8,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:{}'),(9,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:{}'),(10,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:{}'),(11,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\";}'),(12,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:{}'),(13,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:{}'),(14,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:3:{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\";s:4:\"icon\";s:18:\"admin/small/11.png\";}'),(15,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:{}'),(16,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:{}'),(17,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:{}'),(18,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&amp;action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(19,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&amp;action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(20,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:{}'),(21,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:{}'),(22,1,'civicrm/dashlet',NULL,'CiviCRM Dashlets','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_Contact_Page_Dashlet\";',NULL,'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,1,NULL,'a:0:{}'),(23,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:{}'),(24,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:{}'),(25,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:{}'),(26,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:{}'),(27,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:{}'),(28,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:{}'),(29,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:{}'),(30,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:{}'),(31,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:{}'),(32,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:{}'),(33,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:{}'),(34,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:{}'),(35,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:{}'),(36,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:{}'),(37,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:{}'),(38,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:{}'),(39,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:{}'),(40,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:{}'),(41,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(42,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(43,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(44,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(45,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(46,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(47,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(48,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(49,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(50,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(51,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(52,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(53,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(54,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(55,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(56,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:{}'),(57,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(58,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(59,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(60,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:{}'),(61,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:{}'),(62,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:{}'),(63,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:{}'),(64,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:{}'),(65,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:{}'),(66,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:{}'),(67,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:{}'),(68,1,'civicrm/ajax/dashboard',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:\"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,1,1,3,NULL,'a:0:{}'),(69,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:{}'),(70,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:{}'),(71,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:{}'),(72,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:{}'),(73,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(74,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(75,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(76,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:3:{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\";s:4:\"icon\";s:34:\"admin/small/duplicate_matching.png\";}'),(77,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:{}'),(78,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:{}'),(79,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:{}'),(80,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\";}'),(81,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:{}'),(82,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(83,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:{}'),(84,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:{}'),(85,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:{}'),(86,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(87,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:{}'),(88,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:{}'),(89,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:{}'),(90,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:{}'),(91,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(92,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:{}'),(93,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(94,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:{}'),(95,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:{}'),(96,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:{}'),(97,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:{}'),(98,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:{}'),(99,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:{}'),(100,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(101,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:{}'),(102,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:{}'),(103,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:{}'),(104,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:{}'),(105,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:{}'),(106,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:{}'),(107,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:26:\"admin/small/custm_data.png\";}'),(108,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(109,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(110,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(111,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(112,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(113,1,'civicrm/admin/custom/group/field/changetype',NULL,'Custom Field - Change Type','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:31:\"CRM_Custom_Form_ChangeFieldType\";',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:{}'),(114,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(115,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(116,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(117,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(118,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(119,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(120,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(121,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: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,30,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/05.png\";}'),(122,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:25:\"admin/small/rela_type.png\";}'),(123,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/09.png\";}'),(124,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: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,45,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(125,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(126,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: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,55,1,0,NULL,'a:3:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/10.png\";}'),(127,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(128,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: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,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\";}'),(129,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: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,70,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(130,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: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,75,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/08.png\";}'),(131,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: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,80,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:7:\"tel.gif\";}'),(132,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(133,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(134,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(135,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(136,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(137,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: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,110,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(138,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:22:\"admin/small/domain.png\";}'),(139,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: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,20,1,0,NULL,'a:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(140,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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(141,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\";}'),(142,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";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:3:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(143,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(144,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:29:\"admin/small/communication.png\";}'),(145,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(146,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(147,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: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,75,1,0,NULL,'a:3:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(148,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: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,80,1,0,NULL,'a:3:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(149,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: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,90,1,0,NULL,'a:3:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(150,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(151,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(152,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(153,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(154,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: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,40,1,0,NULL,'a:3:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(155,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:18:\"admin/small/03.png\";}'),(156,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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.\";}'),(157,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:26:\"admin/small/Synch_user.png\";}'),(158,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:9:\"check.gif\";}'),(159,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(160,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(161,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:18:\"administer CiviCRM\";}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:{}'),(162,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(163,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:3:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(164,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(165,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(166,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(167,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(168,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:26:\"admin/small/updatepath.png\";}'),(169,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(170,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(171,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: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:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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:3:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(172,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/import_export_map.png\";}'),(173,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(174,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(175,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(176,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\";}'),(177,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\";}'),(178,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\";}'),(179,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:18:\"administer CiviCRM\";}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.\";}'),(180,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(181,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(182,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: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,385,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:26:\"admin/small/grant_type.png\";}'),(183,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(184,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(185,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:{}'),(186,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:{}'),(187,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:{}'),(188,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(189,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.\";}'),(190,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:{}'),(191,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:{}'),(192,1,'civicrm/admin/tplstrings/add',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\";}','s:25:\"CRM_Admin_Form_Persistent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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:{}'),(193,1,'civicrm/admin/tplstrings',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\";}','s:25:\"CRM_Admin_Page_Persistent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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:{}'),(194,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:{}'),(195,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: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: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:{}'),(196,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:3:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(197,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:{}'),(198,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:{}'),(199,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(200,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&amp;action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(201,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_Page_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:{}'),(202,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:{}'),(203,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:{}'),(204,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:{}'),(205,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:{}'),(206,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:{}'),(207,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:{}'),(208,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:{}'),(209,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:{}'),(210,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:{}'),(211,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:{}'),(212,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:{}'),(213,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:{}'),(214,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:{}'),(215,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:{}'),(216,1,'civicrm/api',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:{}'),(217,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:{}'),(218,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:{}'),(219,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:{}'),(220,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\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:14:\"CiviCRM API v3\";s:3:\"url\";s:20:\"/civicrm/api?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(221,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:{}'),(222,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:{}'),(223,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:{}'),(224,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:{}'),(225,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&amp;action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(226,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:{}'),(227,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:{}'),(228,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:{}'),(229,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:{}'),(230,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:{}'),(231,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:{}'),(232,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:{}'),(233,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:{}'),(234,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:{}'),(235,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:{}'),(236,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:{}'),(237,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:{}'),(238,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:{}'),(239,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:{}'),(240,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:{}'),(241,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:{}'),(242,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:{}'),(243,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:{}'),(244,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:{}'),(245,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:{}'),(246,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:{}'),(247,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:{}'),(248,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:{}'),(249,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:{}'),(250,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:{}'),(251,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\";}'),(252,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\";}'),(253,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:{}'),(254,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:{}'),(255,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:{}'),(256,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\";}','s:24:\"CRM_Event_Page_ICalendar\";',NULL,'a:2:{i:0;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:{}'),(257,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:{}'),(258,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:3:{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\";s:4:\"icon\";s:28:\"admin/small/event_manage.png\";}'),(259,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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(260,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/event_type.png\";}'),(261,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:3:{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\";s:4:\"icon\";s:28:\"admin/small/parti_status.png\";}'),(262,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/parti_role.png\";}'),(263,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: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,398,1,0,NULL,'a:3:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(264,1,'civicrm/admin/conference_slots','group=conference_slot','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:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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,415,1,0,NULL,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'),(265,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:{}'),(266,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:{}'),(267,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:{}'),(268,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:{}'),(269,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:{}'),(270,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:{}'),(271,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:{}'),(272,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:{}'),(273,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:{}'),(274,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:{}'),(275,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:{}'),(276,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:{}'),(277,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:{}'),(278,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:{}'),(279,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:{}'),(280,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:{}'),(281,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,4,1,0,NULL,'a:0:{}'),(282,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:{}'),(283,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:{}'),(284,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:{}'),(285,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:{}'),(286,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:{}'),(287,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:{}'),(288,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:{}'),(289,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:{}'),(290,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:{}'),(291,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:{}'),(292,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:{}'),(293,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:{}'),(294,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\";}'),(295,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\";}'),(296,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\";}'),(297,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:{}'),(298,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(299,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(300,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(301,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(302,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(303,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(304,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(305,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(306,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(307,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(308,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(309,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/Premiums.png\";}'),(310,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(311,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\";}'),(312,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(313,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: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,380,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:35:\"admin/small/payment_instruments.png\";}'),(314,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: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,395,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:36:\"admin/small/accepted_creditcards.png\";}'),(315,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: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:3:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:32:\"admin/small/soft_credit_type.png\";}'),(316,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(317,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(318,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&amp;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:{}'),(319,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:{}'),(320,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:{}'),(321,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:{}'),(322,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:{}'),(323,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:{}'),(324,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:{}'),(325,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:{}'),(326,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:{}'),(327,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:{}'),(328,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:{}'),(329,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:{}'),(330,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(331,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:{}'),(332,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:{}'),(333,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:{}'),(334,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:{}'),(335,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&amp;action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(336,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\";}'),(337,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\";}'),(338,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\";}'),(339,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:{}'),(340,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:{}'),(341,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:{}'),(342,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(343,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:{}'),(344,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\";}'),(345,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\";}'),(346,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:31:\"admin/small/membership_type.png\";}'),(347,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/membership_status.png\";}'),(348,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'),(349,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:{}'),(350,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:{}'),(351,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:{}'),(352,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:{}'),(353,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:{}'),(354,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\";}'),(355,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:3:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(356,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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(357,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: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: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:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(358,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:3:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(359,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:{}'),(360,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:{}'),(361,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:{}'),(362,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:{}'),(363,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:{}'),(364,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:{}'),(365,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:{}'),(366,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:{}'),(367,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:{}'),(368,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:{}'),(369,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:{}'),(370,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:{}'),(371,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:{}'),(372,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:{}'),(373,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&amp;mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'),(374,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:{}'),(375,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:{}'),(376,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:{}'),(377,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(378,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:{}'),(379,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\";}'),(380,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:{}'),(381,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:{}'),(382,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\";}'),(383,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(384,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\";}'),(385,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:{}'),(386,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'),(387,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\";}'),(388,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:{}'),(389,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:{}'),(390,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\";}'),(391,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\";}'),(392,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:{}'),(393,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:{}'),(394,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:{}'),(395,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:{}'),(396,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(397,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:{}'),(398,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&amp;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:{}'),(399,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:{}'),(400,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:{}'),(401,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(402,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:3:{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\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(403,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:3:{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\";s:4:\"icon\";s:30:\"admin/small/redaction_type.png\";}'),(404,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:3:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(405,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:3:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(406,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:{}'),(407,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:{}'),(408,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:{}'),(409,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:{}'),(410,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:{}'),(411,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:{}'),(412,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\";}'),(413,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,1,NULL,0,1,1,0,NULL,'a:0:{}'),(414,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:{}'),(415,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:{}'),(416,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.\";}'),(417,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,1,NULL,0,1,1,0,NULL,'a:0:{}'),(418,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:3:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:31:\"admin/small/report_template.gif\";}'),(419,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:3:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(420,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:27:\"admin/small/report_list.gif\";}'),(421,1,'civicrm/report/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:17:\"access CiviReport\";}i:1;s:3:\"and\";}','a:2:{i:0;s:15:\"CRM_Report_Form\";i:1;s:16:\"uploadChartImage\";}',NULL,'a:2:{i:0;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:{}'),(422,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\";}'),(423,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\";}'),(424,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\";}'),(425,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\";}'),(426,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:3:{s:4:\"icon\";s:18:\"admin/small/05.png\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(427,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: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,2,1,0,NULL,'a:4:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(428,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: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,3,1,0,NULL,'a:4:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(429,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: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,4,1,0,NULL,'a:4:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(430,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\";}'),(431,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\";}'),(432,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:{}'),(433,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:{}'),(434,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:{}'),(435,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:{}'),(436,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:{}'),(437,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:{}'),(438,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:{}'),(439,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:{}'),(440,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:{}'),(441,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:{}'),(442,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:26:\"Customize Data and Screens\";a:3:{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\";s:18:\"admin/small/11.png\";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\";s:26:\"admin/small/custm_data.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:18:\"admin/small/05.png\";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\";s:25:\"admin/small/rela_type.png\";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\";s:18:\"admin/small/09.png\";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\";s:18:\"admin/small/01.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/10.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/07.png\";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\";s:18:\"admin/small/08.png\";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\";s:7:\"tel.gif\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:10;}s:6:\"Manage\";a:3:{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\";s:34:\"admin/small/duplicate_matching.png\";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\";s:18:\"admin/small/13.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:14:\"CiviContribute\";a:3:{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&amp;reset=1\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:24:\"admin/small/Premiums.png\";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\";s:34:\"admin/small/contribution_types.png\";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\";s:35:\"admin/small/payment_instruments.png\";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\";s:36:\"admin/small/accepted_creditcards.png\";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\";s:32:\"admin/small/soft_credit_type.png\";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:9:\"perColumn\";d:5;}s:14:\"Communications\";a:3:{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&amp;reset=1\";s:4:\"icon\";s:22:\"admin/small/domain.png\";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\";s:21:\"admin/small/title.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:29:\"admin/small/communication.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:6;}s:12:\"Localization\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:21:\"Users and Permissions\";a:3:{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\";s:18:\"admin/small/03.png\";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\";s:26:\"admin/small/Synch_user.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:15:\"System Settings\";a:3:{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\";s:9:\"check.gif\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/price_sets.png\";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\";s:18:\"admin/small/07.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/updatepath.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:33:\"admin/small/import_export_map.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:9;}s:12:\"CiviCampaign\";a:3:{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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:9:\"CiviEvent\";a:3:{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&amp;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\";s:28:\"admin/small/event_manage.png\";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\";s:24:\"admin/small/template.png\";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\";s:26:\"admin/small/event_type.png\";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\";s:28:\"admin/small/parti_status.png\";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\";s:26:\"admin/small/parti_role.png\";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\";s:18:\"admin/small/01.png\";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:65:\"/civicrm/admin/conference_slots?group=conference_slot&amp;reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}s:9:\"perColumn\";d:5;}s:8:\"CiviMail\";a:3:{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\";s:18:\"admin/small/07.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/07.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviMember\";a:3:{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\";s:31:\"admin/small/membership_type.png\";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\";s:33:\"admin/small/membership_status.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:12:\"Option Lists\";a:3:{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\";s:26:\"admin/small/grant_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:9:\"Customize\";a:3:{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\";s:26:\"admin/small/price_sets.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:8:\"CiviCase\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:30:\"admin/small/redaction_type.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:25:\"admin/small/case_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviReport\";a:3:{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\";s:31:\"admin/small/report_template.gif\";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\";s:24:\"admin/small/template.png\";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\";s:27:\"admin/small/report_list.gif\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}}',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/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:{}'),(2,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(3,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:{}'),(4,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:{}'),(5,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:{}'),(6,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:{}'),(7,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:{}'),(8,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:{}'),(9,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(10,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:26:\"admin/small/custm_data.png\";}'),(11,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(12,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(13,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(14,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(15,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(16,1,'civicrm/admin/custom/group/field/changetype',NULL,'Custom Field - Change Type','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:31:\"CRM_Custom_Form_ChangeFieldType\";',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:{}'),(17,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(18,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(19,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(20,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(21,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(22,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(23,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(24,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: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,30,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/05.png\";}'),(25,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:25:\"admin/small/rela_type.png\";}'),(26,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/09.png\";}'),(27,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: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,45,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(28,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(29,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: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,55,1,0,NULL,'a:3:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/10.png\";}'),(30,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(31,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: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,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\";}'),(32,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: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,70,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(33,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: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,75,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:18:\"admin/small/08.png\";}'),(34,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: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,80,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:7:\"tel.gif\";}'),(35,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(36,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(37,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(38,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(39,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(40,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: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,110,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(41,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:22:\"admin/small/domain.png\";}'),(42,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: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,20,1,0,NULL,'a:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(43,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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(44,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\";}'),(45,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";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:3:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(46,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(47,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: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,50,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:29:\"admin/small/communication.png\";}'),(48,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(49,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(50,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: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,75,1,0,NULL,'a:3:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(51,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: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,80,1,0,NULL,'a:3:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(52,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: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,90,1,0,NULL,'a:3:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(53,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(54,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(55,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(56,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(57,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: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,40,1,0,NULL,'a:3:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(58,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:18:\"admin/small/03.png\";}'),(59,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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.\";}'),(60,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";s:4:\"icon\";s:26:\"admin/small/Synch_user.png\";}'),(61,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:9:\"check.gif\";}'),(62,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(63,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(64,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:18:\"administer CiviCRM\";}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:{}'),(65,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(66,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:3:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(67,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(68,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(69,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(70,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(71,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:26:\"admin/small/updatepath.png\";}'),(72,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(73,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: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,100,1,0,NULL,'a:3:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(74,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: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:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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:3:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(75,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/import_export_map.png\";}'),(76,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(77,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(78,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(79,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\";}'),(80,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\";}'),(81,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\";}'),(82,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:18:\"administer CiviCRM\";}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.\";}'),(83,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(84,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:18:\"administer CiviCRM\";}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:3:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";s:4:\"icon\";s:18:\"admin/small/13.png\";}'),(85,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: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,385,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:26:\"admin/small/grant_type.png\";}'),(86,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(87,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(88,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:{}'),(89,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:{}'),(90,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:{}'),(91,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:3:{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\";s:4:\"icon\";s:26:\"admin/small/price_sets.png\";}'),(92,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.\";}'),(93,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:{}'),(94,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:{}'),(95,1,'civicrm/admin/tplstrings/add',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\";}','s:25:\"CRM_Admin_Form_Persistent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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:{}'),(96,1,'civicrm/admin/tplstrings',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\";}','s:25:\"CRM_Admin_Page_Persistent\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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:{}'),(97,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:{}'),(98,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: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: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:{}'),(99,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:3:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(100,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:{}'),(101,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:{}'),(102,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(103,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&amp;action=browse\";}}',NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,0,NULL,'a:0:{}'),(104,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_Page_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:{}'),(105,1,'civicrm/ajax/api4',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: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:{}'),(106,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:{}'),(107,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:{}'),(108,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:{}'),(109,1,'civicrm/dashlet',NULL,'CiviCRM Dashlets','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_Contact_Page_Dashlet\";',NULL,'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,1,NULL,'a:0:{}'),(110,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:{}'),(111,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:{}'),(112,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:{}'),(113,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:{}'),(114,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:{}'),(115,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:{}'),(116,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:{}'),(117,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:{}'),(118,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:{}'),(119,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:{}'),(120,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:{}'),(121,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:{}'),(122,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:{}'),(123,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:{}'),(124,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:{}'),(125,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:{}'),(126,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:{}'),(127,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:{}'),(128,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(129,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(130,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(131,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(132,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(133,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(134,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(135,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(136,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(137,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(138,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(139,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(140,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(141,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(142,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(143,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:{}'),(144,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(145,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(146,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(147,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:{}'),(148,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:{}'),(149,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:{}'),(150,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:{}'),(151,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:{}'),(152,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:{}'),(153,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:{}'),(154,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:{}'),(155,1,'civicrm/ajax/dashboard',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:\"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,1,1,3,NULL,'a:0:{}'),(156,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:{}'),(157,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:{}'),(158,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:{}'),(159,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:{}'),(160,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(161,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(162,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:2:{i:0;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:\"CiviCRM Dashlets\";s:3:\"url\";s:24:\"/civicrm/dashlet?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(163,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:3:{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\";s:4:\"icon\";s:34:\"admin/small/duplicate_matching.png\";}'),(164,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:{}'),(165,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:{}'),(166,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:{}'),(167,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\";}'),(168,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:{}'),(169,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(170,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:{}'),(171,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:{}'),(172,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:{}'),(173,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&amp;action=add&amp;context=standalone\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(174,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:{}'),(175,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:{}'),(176,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:{}'),(177,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:{}'),(178,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:{}'),(179,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:{}'),(180,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:{}'),(181,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\";}'),(182,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:{}'),(183,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:{}'),(184,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:{}'),(185,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:{}'),(186,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:{}'),(187,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:{}'),(188,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:{}'),(189,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:{}'),(190,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:{}'),(191,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:{}'),(192,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:{}'),(193,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:{}'),(194,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:{}'),(195,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:{}'),(196,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:{}'),(197,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:{}'),(198,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:{}'),(199,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:{}'),(200,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:{}'),(201,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:{}'),(202,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:{}'),(203,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:{}'),(204,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:{}'),(205,1,'civicrm/api',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:{}'),(206,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:{}'),(207,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:{}'),(208,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:{}'),(209,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\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:14:\"CiviCRM API v3\";s:3:\"url\";s:20:\"/civicrm/api?reset=1\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(210,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:{}'),(211,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:{}'),(212,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:{}'),(213,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:{}'),(214,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&amp;action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,1,1,0,NULL,'a:0:{}'),(215,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:{}'),(216,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:{}'),(217,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:{}'),(218,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:{}'),(219,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:{}'),(220,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:{}'),(221,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:{}'),(222,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:{}'),(223,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:{}'),(224,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:{}'),(225,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:{}'),(226,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:{}'),(227,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:{}'),(228,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:{}'),(229,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:{}'),(230,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:{}'),(231,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:{}'),(232,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:{}'),(233,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:{}'),(234,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:{}'),(235,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:{}'),(236,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:{}'),(237,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:{}'),(238,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:{}'),(239,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:{}'),(240,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&amp;action=add\";}}',NULL,NULL,2,NULL,1,NULL,0,0,1,0,NULL,'a:0:{}'),(241,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&amp;action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,0,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(242,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:{}'),(243,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:{}'),(244,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:{}'),(245,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(246,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:{}'),(247,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:{}'),(248,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:{}'),(249,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:3:{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\";s:4:\"icon\";s:18:\"admin/small/11.png\";}'),(250,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:{}'),(251,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:{}'),(252,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:{}'),(253,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\";}'),(254,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\";}'),(255,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:{}'),(256,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:{}'),(257,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:{}'),(258,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\";}','s:24:\"CRM_Event_Page_ICalendar\";',NULL,'a:2:{i:0;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:3:{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\";s:4:\"icon\";s:28:\"admin/small/event_manage.png\";}'),(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:3:{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\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(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:3:{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\";s:4:\"icon\";s:26:\"admin/small/event_type.png\";}'),(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:3:{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\";s:4:\"icon\";s:28:\"admin/small/parti_status.png\";}'),(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:3:{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\";s:4:\"icon\";s:26:\"admin/small/parti_role.png\";}'),(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: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,398,1,0,NULL,'a:3:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";s:4:\"icon\";s:18:\"admin/small/01.png\";}'),(266,1,'civicrm/admin/conference_slots','group=conference_slot','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:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s: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,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&amp;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/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:{}'),(287,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:{}'),(288,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:{}'),(289,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:{}'),(290,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:{}'),(291,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:{}'),(292,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:{}'),(293,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:{}'),(294,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:{}'),(295,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:{}'),(296,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\";}'),(297,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\";}'),(298,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\";}'),(299,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:{}'),(300,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:41:\"admin/small/online_contribution_pages.png\";}'),(301,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(302,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(303,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(304,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(305,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(306,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(307,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(308,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(309,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(310,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(311,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:24:\"admin/small/Premiums.png\";}'),(312,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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\";}'),(313,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\";}'),(314,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";}'),(315,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: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,380,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:35:\"admin/small/payment_instruments.png\";}'),(316,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: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,395,1,0,NULL,'a:3:{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\";s:4:\"icon\";s:36:\"admin/small/accepted_creditcards.png\";}'),(317,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: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:3:{s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:10:\"adminGroup\";s:14:\"CiviContribute\";s:4:\"icon\";s:32:\"admin/small/soft_credit_type.png\";}'),(318,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(319,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(320,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&amp;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:{}'),(321,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:{}'),(322,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:{}'),(323,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:{}'),(324,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:{}'),(325,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:{}'),(326,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:{}'),(327,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:{}'),(328,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:{}'),(329,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:{}'),(330,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:{}'),(331,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:{}'),(332,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(333,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:{}'),(334,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:{}'),(335,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:{}'),(336,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:{}'),(337,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&amp;action=add\";}}',NULL,NULL,2,NULL,NULL,NULL,0,1,1,1,NULL,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'),(338,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\";}'),(339,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\";}'),(340,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\";}'),(341,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:{}'),(342,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:{}'),(343,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:{}'),(344,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:{}'),(345,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:{}'),(346,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\";}'),(347,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\";}'),(348,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:31:\"admin/small/membership_type.png\";}'),(349,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{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\";s:4:\"icon\";s:33:\"admin/small/membership_status.png\";}'),(350,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,2,1,0,NULL,'a:0:{}'),(351,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:{}'),(352,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:{}'),(353,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:{}'),(354,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:{}'),(355,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:{}'),(356,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\";}'),(357,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:3:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(358,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:3:{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\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'),(359,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: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: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:3:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:21:\"admin/small/title.png\";}'),(360,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:3:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:18:\"admin/small/07.png\";}'),(361,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:{}'),(362,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:{}'),(363,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:{}'),(364,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:{}'),(365,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:{}'),(366,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:{}'),(367,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:{}'),(368,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:{}'),(369,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:{}'),(370,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:{}'),(371,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:{}'),(372,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:{}'),(373,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:{}'),(374,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:{}'),(375,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&amp;mid=%%mid%%\";}}',NULL,NULL,4,NULL,NULL,NULL,0,695,1,0,NULL,'a:0:{}'),(376,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:{}'),(377,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:{}'),(378,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:{}'),(379,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(380,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:{}'),(381,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\";}'),(382,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:{}'),(383,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:{}'),(384,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\";}'),(385,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(386,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\";}'),(387,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:{}'),(388,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,570,1,0,NULL,'a:0:{}'),(389,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\";}'),(390,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:{}'),(391,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:{}'),(392,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\";}'),(393,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\";}'),(394,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:{}'),(395,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:{}'),(396,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:{}'),(397,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:{}'),(398,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&amp;cid=%%cid%%\";}}',NULL,NULL,NULL,NULL,NULL,NULL,0,1,1,0,NULL,'a:0:{}'),(399,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:{}'),(400,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&amp;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:{}'),(401,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:{}'),(402,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:{}'),(403,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:2:{s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:18:\"admin/small/36.png\";}'),(404,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:3:{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\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(405,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:3:{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\";s:4:\"icon\";s:30:\"admin/small/redaction_type.png\";}'),(406,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:3:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(407,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:3:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";s:4:\"icon\";s:25:\"admin/small/case_type.png\";}'),(408,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:{}'),(409,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:{}'),(410,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:{}'),(411,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:{}'),(412,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:{}'),(413,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:{}'),(414,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\";}'),(415,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:{}'),(416,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:{}'),(417,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:{}'),(418,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.\";}'),(419,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:{}'),(420,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:3:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:31:\"admin/small/report_template.gif\";}'),(421,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:3:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:24:\"admin/small/template.png\";}'),(422,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:2:{i:0;s:18:\"administer CiviCRM\";i:1;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:3:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";s:4:\"icon\";s:27:\"admin/small/report_list.gif\";}'),(423,1,'civicrm/report/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:17:\"access CiviReport\";}i:1;s:3:\"and\";}','a:2:{i:0;s:15:\"CRM_Report_Form\";i:1;s:16:\"uploadChartImage\";}',NULL,'a:2:{i:0;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:{}'),(424,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\";}'),(425,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\";}'),(426,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\";}'),(427,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\";}'),(428,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:3:{s:4:\"icon\";s:18:\"admin/small/05.png\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(429,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: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,2,1,0,NULL,'a:4:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(430,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: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,3,1,0,NULL,'a:4:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(431,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: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,4,1,0,NULL,'a:4:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:4:\"icon\";s:18:\"admin/small/05.png\";s:9:\"component\";s:12:\"CiviCampaign\";}'),(432,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\";}'),(433,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\";}'),(434,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:{}'),(435,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:{}'),(436,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:{}'),(437,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:{}'),(438,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:{}'),(439,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:{}'),(440,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:{}'),(441,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:{}'),(442,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:{}'),(443,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:{}'),(444,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:26:\"Customize Data and Screens\";a:3:{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\";s:26:\"admin/small/custm_data.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:18:\"admin/small/05.png\";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\";s:25:\"admin/small/rela_type.png\";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\";s:18:\"admin/small/09.png\";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\";s:18:\"admin/small/01.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/10.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/07.png\";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\";s:18:\"admin/small/08.png\";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\";s:7:\"tel.gif\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:18:\"admin/small/11.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:10;}s:14:\"Communications\";a:3:{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&amp;reset=1\";s:4:\"icon\";s:22:\"admin/small/domain.png\";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\";s:21:\"admin/small/title.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:29:\"admin/small/communication.png\";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\";s:24:\"admin/small/template.png\";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\";s:24:\"admin/small/template.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:6;}s:12:\"Localization\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:21:\"Users and Permissions\";a:3:{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\";s:18:\"admin/small/03.png\";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\";s:26:\"admin/small/Synch_user.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:15:\"System Settings\";a:3:{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\";s:9:\"check.gif\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/price_sets.png\";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\";s:18:\"admin/small/07.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:26:\"admin/small/updatepath.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/01.png\";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\";s:18:\"admin/small/01.png\";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\";s:33:\"admin/small/import_export_map.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/36.png\";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\";s:18:\"admin/small/13.png\";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\";s:18:\"admin/small/36.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:9;}s:12:\"CiviCampaign\";a:3:{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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";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\";s:18:\"admin/small/05.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:9:\"CiviEvent\";a:3:{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&amp;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\";s:28:\"admin/small/event_manage.png\";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\";s:24:\"admin/small/template.png\";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\";s:26:\"admin/small/event_type.png\";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\";s:28:\"admin/small/parti_status.png\";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\";s:26:\"admin/small/parti_role.png\";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\";s:18:\"admin/small/01.png\";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:65:\"/civicrm/admin/conference_slots?group=conference_slot&amp;reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}s:9:\"perColumn\";d:5;}s:8:\"CiviMail\";a:3:{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\";s:18:\"admin/small/07.png\";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\";s:23:\"admin/small/Profile.png\";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\";s:21:\"admin/small/title.png\";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\";s:18:\"admin/small/07.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviMember\";a:3:{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\";s:31:\"admin/small/membership_type.png\";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\";s:33:\"admin/small/membership_status.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}s:6:\"Manage\";a:3:{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\";s:18:\"admin/small/13.png\";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\";s:34:\"admin/small/duplicate_matching.png\";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:9:\"perColumn\";d:2;}s:12:\"Option Lists\";a:3:{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\";s:26:\"admin/small/grant_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:9:\"Customize\";a:3:{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\";s:26:\"admin/small/price_sets.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:1;}s:14:\"CiviContribute\";a:3:{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&amp;reset=1\";s:4:\"icon\";s:34:\"admin/small/contribution_types.png\";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\";s:41:\"admin/small/online_contribution_pages.png\";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\";s:24:\"admin/small/Premiums.png\";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\";s:34:\"admin/small/contribution_types.png\";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\";s:35:\"admin/small/payment_instruments.png\";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\";s:36:\"admin/small/accepted_creditcards.png\";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\";s:32:\"admin/small/soft_credit_type.png\";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:9:\"perColumn\";d:5;}s:8:\"CiviCase\";a:3:{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\";s:18:\"admin/small/36.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:30:\"admin/small/redaction_type.png\";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\";s:25:\"admin/small/case_type.png\";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\";s:25:\"admin/small/case_type.png\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:3;}s:10:\"CiviReport\";a:3:{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\";s:31:\"admin/small/report_template.gif\";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\";s:24:\"admin/small/template.png\";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\";s:27:\"admin/small/report_list.gif\";s:5:\"extra\";N;}}s:9:\"perColumn\";d:2;}}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,1,NULL,'a:0:{}');
 /*!40000 ALTER TABLE `civicrm_menu` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -976,7 +976,7 @@ 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','',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, Captcha, etc.)','Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','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','API Explorer','civicrm/api',NULL,'administer CiviCRM','',244,1,NULL,1),(246,1,'Developer Docs','Developer Docs','https://civicrm.org/developer-documentation?src=iam',NULL,'administer CiviCRM','',244,1,NULL,3),(247,1,'Reports','Reports',NULL,'crm-i fa-bar-chart','access CiviReport','',NULL,1,NULL,95),(248,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'administer CiviCRM','',247,1,0,1),(249,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',247,1,0,2),(250,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',247,1,0,3),(251,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',247,1,0,4),(252,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',247,1,0,5),(253,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',247,1,0,6),(254,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',247,1,0,7),(255,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',247,1,0,8),(256,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',247,1,0,9),(257,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',247,1,1,10),(258,1,'My Reports','My Reports','civicrm/report/list?myreports=1&reset=1',NULL,'access CiviReport','',247,1,1,11),(259,1,'New Student','New Student','civicrm/contact/add?ct=Individual&cst=Student&reset=1',NULL,'add contacts','',16,1,NULL,1),(260,1,'New Parent','New Parent','civicrm/contact/add?ct=Individual&cst=Parent&reset=1',NULL,'add contacts','',16,1,NULL,2),(261,1,'New Staff','New Staff','civicrm/contact/add?ct=Individual&cst=Staff&reset=1',NULL,'add contacts','',16,1,NULL,3),(262,1,'New Team','New Team','civicrm/contact/add?ct=Organization&cst=Team&reset=1',NULL,'add contacts','',18,1,NULL,1),(263,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','',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, Captcha, etc.)','Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','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/api',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;
 
@@ -986,7 +986,7 @@ 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',172,'Connect for presentation',1,'2018-09-11',NULL,'0'),(2,'civicrm_contact',106,'Send reminder for annual dinner',1,'2019-04-18',NULL,'0'),(3,'civicrm_contact',4,'Send reminder for annual dinner',1,'2018-10-16',NULL,'0'),(4,'civicrm_contact',160,'Organize the Terry Fox run',1,'2018-10-10',NULL,'0'),(5,'civicrm_contact',78,'Get the registration done for NGO status',1,'2018-09-25',NULL,'0'),(6,'civicrm_contact',65,'Connect for presentation',1,'2019-03-05',NULL,'0'),(7,'civicrm_contact',157,'Invite members for the Steve Prefontaine 10k dream run',1,'2019-01-01',NULL,'0'),(8,'civicrm_contact',183,'Organize the Terry Fox run',1,'2019-07-13',NULL,'0'),(9,'civicrm_contact',80,'Connect for presentation',1,'2018-09-06',NULL,'0'),(10,'civicrm_contact',143,'Arrange for cricket match with Sunil Gavaskar',1,'2018-11-17',NULL,'0'),(11,'civicrm_contact',42,'Arrange collection of funds from members',1,'2019-03-13',NULL,'0'),(12,'civicrm_contact',2,'Send reminder for annual dinner',1,'2019-03-26',NULL,'0'),(13,'civicrm_contact',74,'Send newsletter for April 2005',1,'2018-10-17',NULL,'0'),(14,'civicrm_contact',78,'Reminder screening of \"Black\" on next Friday',1,'2019-07-10',NULL,'0'),(15,'civicrm_contact',21,'Connect for presentation',1,'2019-02-17',NULL,'0'),(16,'civicrm_contact',53,'Contact the Commissioner of Charities',1,'2019-01-22',NULL,'0'),(17,'civicrm_contact',119,'Send reminder for annual dinner',1,'2018-12-29',NULL,'0'),(18,'civicrm_contact',102,'Contact the Commissioner of Charities',1,'2018-11-19',NULL,'0'),(19,'civicrm_contact',15,'Contact the Commissioner of Charities',1,'2019-02-27',NULL,'0'),(20,'civicrm_contact',180,'Organize the Terry Fox run',1,'2019-01-05',NULL,'0');
+INSERT INTO `civicrm_note` (`id`, `entity_table`, `entity_id`, `note`, `contact_id`, `modified_date`, `subject`, `privacy`) VALUES (1,'civicrm_contact',170,'Arrange collection of funds from members',1,'2018-12-26',NULL,'0'),(2,'civicrm_contact',104,'Arrange for cricket match with Sunil Gavaskar',1,'2019-06-23',NULL,'0'),(3,'civicrm_contact',91,'Arrange collection of funds from members',1,'2018-10-08',NULL,'0'),(4,'civicrm_contact',198,'Organize the Terry Fox run',1,'2018-12-15',NULL,'0'),(5,'civicrm_contact',34,'Connect for presentation',1,'2018-09-25',NULL,'0'),(6,'civicrm_contact',105,'Reminder screening of \"Black\" on next Friday',1,'2019-03-16',NULL,'0'),(7,'civicrm_contact',197,'Send reminder for annual dinner',1,'2019-01-10',NULL,'0'),(8,'civicrm_contact',132,'Contact the Commissioner of Charities',1,'2019-05-07',NULL,'0'),(9,'civicrm_contact',97,'Reminder screening of \"Black\" on next Friday',1,'2019-08-03',NULL,'0'),(10,'civicrm_contact',122,'Arrange collection of funds from members',1,'2018-09-27',NULL,'0'),(11,'civicrm_contact',120,'Get the registration done for NGO status',1,'2019-08-06',NULL,'0'),(12,'civicrm_contact',62,'Get the registration done for NGO status',1,'2018-10-16',NULL,'0'),(13,'civicrm_contact',6,'Send newsletter for April 2005',1,'2018-11-17',NULL,'0'),(14,'civicrm_contact',90,'Contact the Commissioner of Charities',1,'2019-06-25',NULL,'0'),(15,'civicrm_contact',132,'Get the registration done for NGO status',1,'2018-09-30',NULL,'0'),(16,'civicrm_contact',113,'Send reminder for annual dinner',1,'2019-02-07',NULL,'0'),(17,'civicrm_contact',167,'Reminder screening of \"Black\" on next Friday',1,'2019-02-12',NULL,'0'),(18,'civicrm_contact',104,'Arrange collection of funds from members',1,'2019-08-10',NULL,'0'),(19,'civicrm_contact',143,'Reminder screening of \"Black\" on next Friday',1,'2018-11-29',NULL,'0'),(20,'civicrm_contact',38,'Arrange collection of funds from members',1,'2019-03-15',NULL,'0');
 /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -1025,7 +1025,7 @@ 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,150,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(2,156,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,34,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,108,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,20,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(6,42,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,8,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,172,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,141,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,7,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(11,119,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,107,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,41,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,10,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,48,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,99,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,191,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,184,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,128,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,32,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,183,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,79,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,23,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,2,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,111,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,31,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(27,133,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,4,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,188,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,26,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,160,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,63,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(33,50,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,13,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,181,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,82,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,18,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,137,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,182,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,173,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,30,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,196,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,185,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,199,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,62,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,132,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,90,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,186,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,163,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,167,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,186,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(2,55,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,99,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,143,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,170,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(6,187,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,37,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,127,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,83,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,124,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(11,108,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,145,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,178,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,189,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,105,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,93,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,92,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,119,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,30,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,91,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,49,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,153,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,114,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,183,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,5,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,41,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(27,159,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,193,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,120,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,179,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,1,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL),(33,18,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,75,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,58,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,57,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,72,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,21,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,163,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,184,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,34,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,190,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,69,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,45,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,139,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,8,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,67,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,135,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,157,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,89,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;
 
@@ -1035,7 +1035,7 @@ 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,28,46),(3,10,47),(4,7,48),(5,14,49),(6,34,50),(7,37,51),(8,5,52),(9,23,53),(10,30,54),(11,41,55),(12,26,56),(13,20,57),(14,3,58),(15,13,59),(16,6,60),(17,15,61),(18,33,62),(19,45,63),(20,32,64),(21,22,65),(22,36,66),(23,47,67),(24,16,68),(25,12,69),(26,4,70),(27,25,71),(28,11,72),(29,19,73),(30,46,74),(31,27,75),(32,38,76),(33,9,77),(34,1,78),(35,2,79),(36,31,80),(37,49,81),(38,50,82),(39,8,83),(40,40,84),(41,35,85),(42,39,86),(43,21,87),(44,18,88),(45,43,89),(46,48,90),(47,29,91),(48,17,92),(49,42,93),(50,44,94);
+INSERT INTO `civicrm_participant_payment` (`id`, `participant_id`, `contribution_id`) VALUES (1,32,45),(2,25,46),(3,46,47),(4,33,48),(5,38,49),(6,19,50),(7,41,51),(8,7,52),(9,26,53),(10,44,54),(11,21,55),(12,2,56),(13,36,57),(14,35,58),(15,47,59),(16,43,60),(17,37,61),(18,34,62),(19,9,63),(20,31,64),(21,50,65),(22,20,66),(23,17,67),(24,16,68),(25,3,69),(26,15,70),(27,11,71),(28,23,72),(29,18,73),(30,29,74),(31,10,75),(32,8,76),(33,48,77),(34,45,78),(35,4,79),(36,12,80),(37,22,81),(38,49,82),(39,27,83),(40,39,84),(41,5,85),(42,13,86),(43,30,87),(44,24,88),(45,40,89),(46,1,90),(47,6,91),(48,14,92),(49,42,93),(50,28,94);
 /*!40000 ALTER TABLE `civicrm_participant_payment` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -1083,7 +1083,7 @@ 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,57,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,187,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;
 
@@ -1112,7 +1112,7 @@ 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,45,1,1,0,NULL,'(416) 458-4524',NULL,'4164584524',1),(2,45,1,0,0,NULL,'(295) 652-8430',NULL,'2956528430',2),(3,31,1,1,0,NULL,'(419) 204-4699',NULL,'4192044699',1),(4,193,1,1,0,NULL,'674-5460',NULL,'6745460',2),(5,33,1,1,0,NULL,'(373) 521-1062',NULL,'3735211062',2),(6,33,1,0,0,NULL,'848-2125',NULL,'8482125',2),(7,128,1,1,0,NULL,'542-6257',NULL,'5426257',1),(8,66,1,1,0,NULL,'897-3336',NULL,'8973336',2),(9,66,1,0,0,NULL,'438-3118',NULL,'4383118',2),(10,5,1,1,0,NULL,'733-9004',NULL,'7339004',2),(11,170,1,1,0,NULL,'318-5333',NULL,'3185333',1),(12,112,1,1,0,NULL,'264-8273',NULL,'2648273',2),(13,129,1,1,0,NULL,'744-9423',NULL,'7449423',1),(14,129,1,0,0,NULL,'(770) 663-2139',NULL,'7706632139',2),(15,18,1,1,0,NULL,'804-6992',NULL,'8046992',1),(16,18,1,0,0,NULL,'783-4099',NULL,'7834099',2),(17,191,1,1,0,NULL,'(356) 399-4255',NULL,'3563994255',1),(18,60,1,1,0,NULL,'(739) 519-4437',NULL,'7395194437',1),(19,81,1,1,0,NULL,'(648) 556-6905',NULL,'6485566905',2),(20,85,1,1,0,NULL,'(734) 406-5485',NULL,'7344065485',1),(21,177,1,1,0,NULL,'(341) 331-3763',NULL,'3413313763',1),(22,4,1,1,0,NULL,'733-3487',NULL,'7333487',1),(23,149,1,1,0,NULL,'(895) 661-1279',NULL,'8956611279',2),(24,149,1,0,0,NULL,'(791) 316-7116',NULL,'7913167116',1),(25,24,1,1,0,NULL,'(727) 354-3154',NULL,'7273543154',1),(26,172,1,1,0,NULL,'(599) 328-5682',NULL,'5993285682',2),(27,154,1,1,0,NULL,'756-3002',NULL,'7563002',1),(28,99,1,1,0,NULL,'(750) 521-7032',NULL,'7505217032',1),(29,99,1,0,0,NULL,'640-4437',NULL,'6404437',2),(30,94,1,1,0,NULL,'(420) 693-9626',NULL,'4206939626',1),(31,94,1,0,0,NULL,'(645) 882-6226',NULL,'6458826226',1),(32,58,1,1,0,NULL,'(450) 623-9253',NULL,'4506239253',1),(33,51,1,1,0,NULL,'395-9335',NULL,'3959335',2),(34,174,1,1,0,NULL,'(688) 686-7390',NULL,'6886867390',2),(35,42,1,1,0,NULL,'(548) 298-4778',NULL,'5482984778',1),(36,42,1,0,0,NULL,'702-1306',NULL,'7021306',2),(37,124,1,1,0,NULL,'(541) 334-2923',NULL,'5413342923',1),(38,136,1,1,0,NULL,'617-9402',NULL,'6179402',1),(39,75,1,1,0,NULL,'(401) 696-6635',NULL,'4016966635',2),(40,75,1,0,0,NULL,'(825) 544-4788',NULL,'8255444788',2),(41,118,1,1,0,NULL,'489-4575',NULL,'4894575',2),(42,40,1,1,0,NULL,'794-3539',NULL,'7943539',2),(43,40,1,0,0,NULL,'671-8696',NULL,'6718696',2),(44,38,1,1,0,NULL,'(861) 221-4170',NULL,'8612214170',2),(45,38,1,0,0,NULL,'577-6474',NULL,'5776474',2),(46,59,1,1,0,NULL,'(809) 676-6354',NULL,'8096766354',1),(47,59,1,0,0,NULL,'(427) 841-5956',NULL,'4278415956',2),(48,50,1,1,0,NULL,'(371) 476-1771',NULL,'3714761771',1),(49,22,1,1,0,NULL,'(273) 449-6092',NULL,'2734496092',1),(50,22,1,0,0,NULL,'387-8856',NULL,'3878856',1),(51,192,1,1,0,NULL,'812-4900',NULL,'8124900',2),(52,119,1,1,0,NULL,'388-1362',NULL,'3881362',1),(53,133,1,1,0,NULL,'889-1704',NULL,'8891704',2),(54,95,1,1,0,NULL,'225-7130',NULL,'2257130',2),(55,95,1,0,0,NULL,'(515) 620-2366',NULL,'5156202366',1),(56,164,1,1,0,NULL,'(210) 336-6282',NULL,'2103366282',2),(57,164,1,0,0,NULL,'(292) 828-6415',NULL,'2928286415',1),(58,158,1,1,0,NULL,'772-7499',NULL,'7727499',2),(59,165,1,1,0,NULL,'841-4051',NULL,'8414051',1),(60,67,1,1,0,NULL,'(675) 234-2284',NULL,'6752342284',1),(61,67,1,0,0,NULL,'849-7757',NULL,'8497757',2),(62,89,1,1,0,NULL,'(497) 448-8112',NULL,'4974488112',1),(63,185,1,1,0,NULL,'(707) 857-2635',NULL,'7078572635',2),(64,185,1,0,0,NULL,'(523) 472-6136',NULL,'5234726136',1),(65,102,1,1,0,NULL,'(817) 466-3066',NULL,'8174663066',2),(66,102,1,0,0,NULL,'(777) 612-1461',NULL,'7776121461',2),(67,68,1,1,0,NULL,'392-4040',NULL,'3924040',2),(68,134,1,1,0,NULL,'(743) 645-8541',NULL,'7436458541',1),(69,134,1,0,0,NULL,'663-4268',NULL,'6634268',1),(70,141,1,1,0,NULL,'(553) 379-3520',NULL,'5533793520',1),(71,141,1,0,0,NULL,'(657) 768-9560',NULL,'6577689560',1),(72,96,1,1,0,NULL,'(436) 219-5243',NULL,'4362195243',2),(73,73,1,1,0,NULL,'712-4363',NULL,'7124363',1),(74,73,1,0,0,NULL,'(886) 709-8183',NULL,'8867098183',1),(75,122,1,1,0,NULL,'567-4676',NULL,'5674676',1),(76,175,1,1,0,NULL,'(587) 398-7347',NULL,'5873987347',1),(77,86,1,1,0,NULL,'272-2002',NULL,'2722002',1),(78,86,1,0,0,NULL,'(886) 459-1626',NULL,'8864591626',1),(79,183,1,1,0,NULL,'627-4706',NULL,'6274706',2),(80,183,1,0,0,NULL,'461-4553',NULL,'4614553',2),(81,198,1,1,0,NULL,'356-2173',NULL,'3562173',2),(82,105,1,1,0,NULL,'357-3877',NULL,'3573877',1),(83,105,1,0,0,NULL,'434-9349',NULL,'4349349',2),(84,181,1,1,0,NULL,'(483) 888-8909',NULL,'4838888909',1),(85,181,1,0,0,NULL,'783-6583',NULL,'7836583',1),(86,64,1,1,0,NULL,'618-8111',NULL,'6188111',2),(87,35,1,1,0,NULL,'(651) 370-7408',NULL,'6513707408',2),(88,35,1,0,0,NULL,'662-7175',NULL,'6627175',2),(89,127,1,1,0,NULL,'737-7278',NULL,'7377278',2),(90,127,1,0,0,NULL,'823-9444',NULL,'8239444',2),(91,70,1,1,0,NULL,'284-6984',NULL,'2846984',2),(92,47,1,1,0,NULL,'(372) 888-2702',NULL,'3728882702',1),(93,47,1,0,0,NULL,'(337) 536-7412',NULL,'3375367412',1),(94,153,1,1,0,NULL,'710-3803',NULL,'7103803',2),(95,144,1,1,0,NULL,'(867) 541-9144',NULL,'8675419144',2),(96,28,1,1,0,NULL,'(836) 356-5887',NULL,'8363565887',1),(97,28,1,0,0,NULL,'(277) 487-6392',NULL,'2774876392',2),(98,146,1,1,0,NULL,'(475) 839-4900',NULL,'4758394900',2),(99,146,1,0,0,NULL,'784-9517',NULL,'7849517',2),(100,173,1,1,0,NULL,'(830) 823-1988',NULL,'8308231988',1),(101,173,1,0,0,NULL,'616-4995',NULL,'6164995',1),(102,13,1,1,0,NULL,'778-6169',NULL,'7786169',2),(103,13,1,0,0,NULL,'(825) 680-7843',NULL,'8256807843',2),(104,176,1,1,0,NULL,'534-3600',NULL,'5343600',1),(105,176,1,0,0,NULL,'(836) 519-3018',NULL,'8365193018',2),(106,147,1,1,0,NULL,'783-2227',NULL,'7832227',1),(107,147,1,0,0,NULL,'(894) 619-1351',NULL,'8946191351',1),(108,178,1,1,0,NULL,'(838) 548-2582',NULL,'8385482582',1),(109,178,1,0,0,NULL,'(327) 754-2942',NULL,'3277542942',1),(110,135,1,1,0,NULL,'(573) 233-6973',NULL,'5732336973',2),(111,104,1,1,0,NULL,'(288) 768-7518',NULL,'2887687518',1),(112,104,1,0,0,NULL,'557-7897',NULL,'5577897',2),(113,8,1,1,0,NULL,'381-2209',NULL,'3812209',2),(114,8,1,0,0,NULL,'471-7776',NULL,'4717776',2),(115,168,1,1,0,NULL,'730-6305',NULL,'7306305',1),(116,168,1,0,0,NULL,'346-9833',NULL,'3469833',2),(117,182,1,1,0,NULL,'407-2291',NULL,'4072291',1),(118,182,1,0,0,NULL,'591-4439',NULL,'5914439',2),(119,56,1,1,0,NULL,'(404) 254-8579',NULL,'4042548579',1),(120,56,1,0,0,NULL,'(223) 553-7223',NULL,'2235537223',1),(121,88,1,1,0,NULL,'(830) 535-1051',NULL,'8305351051',1),(122,88,1,0,0,NULL,'815-3141',NULL,'8153141',1),(123,197,1,1,0,NULL,'676-8507',NULL,'6768507',2),(124,132,1,1,0,NULL,'417-4534',NULL,'4174534',2),(125,126,1,1,0,NULL,'(859) 486-2188',NULL,'8594862188',1),(126,55,1,1,0,NULL,'(324) 555-8041',NULL,'3245558041',2),(127,161,1,1,0,NULL,'816-2277',NULL,'8162277',1),(128,84,1,1,0,NULL,'(735) 582-8298',NULL,'7355828298',1),(129,2,1,1,0,NULL,'892-7532',NULL,'8927532',1),(130,29,1,1,0,NULL,'775-7191',NULL,'7757191',1),(131,34,1,1,0,NULL,'631-5680',NULL,'6315680',1),(132,34,1,0,0,NULL,'809-9396',NULL,'8099396',2),(133,44,1,1,0,NULL,'(646) 462-5870',NULL,'6464625870',1),(134,163,1,1,0,NULL,'312-8928',NULL,'3128928',2),(135,163,1,0,0,NULL,'600-1011',NULL,'6001011',2),(136,76,1,1,0,NULL,'(805) 745-9664',NULL,'8057459664',1),(137,39,1,1,0,NULL,'(255) 372-5131',NULL,'2553725131',2),(138,166,1,1,0,NULL,'658-9730',NULL,'6589730',1),(139,166,1,0,0,NULL,'671-9118',NULL,'6719118',1),(140,159,1,1,0,NULL,'(866) 764-5582',NULL,'8667645582',2),(141,115,1,1,0,NULL,'851-8085',NULL,'8518085',1),(142,115,1,0,0,NULL,'(789) 257-4464',NULL,'7892574464',2),(143,100,1,1,0,NULL,'(577) 395-5328',NULL,'5773955328',1),(144,160,1,1,0,NULL,'683-2437',NULL,'6832437',1),(145,120,1,1,0,NULL,'253-4199',NULL,'2534199',2),(146,120,1,0,0,NULL,'(897) 303-4275',NULL,'8973034275',2),(147,186,1,1,0,NULL,'(454) 355-9889',NULL,'4543559889',1),(148,186,1,0,0,NULL,'621-5335',NULL,'6215335',2),(149,49,1,1,0,NULL,'(323) 663-9672',NULL,'3236639672',1),(150,49,1,0,0,NULL,'410-3282',NULL,'4103282',2),(151,131,1,1,0,NULL,'446-8005',NULL,'4468005',2),(152,131,1,0,0,NULL,'534-4791',NULL,'5344791',2),(153,21,1,1,0,NULL,'(434) 421-8386',NULL,'4344218386',1),(154,21,1,0,0,NULL,'313-6026',NULL,'3136026',2),(155,125,1,1,0,NULL,'784-6763',NULL,'7846763',2),(156,125,1,0,0,NULL,'(707) 700-3027',NULL,'7077003027',2),(157,171,1,1,0,NULL,'(728) 843-9634',NULL,'7288439634',2),(158,111,1,1,0,NULL,'229-6648',NULL,'2296648',2),(159,6,1,1,0,NULL,'497-5710',NULL,'4975710',1),(160,6,1,0,0,NULL,'(360) 226-2889',NULL,'3602262889',2),(161,11,1,1,0,NULL,'460-9438',NULL,'4609438',2),(162,11,1,0,0,NULL,'519-4639',NULL,'5194639',2),(163,151,1,1,0,NULL,'(657) 472-4231',NULL,'6574724231',2),(164,101,1,1,0,NULL,'323-9902',NULL,'3239902',2),(165,101,1,0,0,NULL,'284-7875',NULL,'2847875',2),(166,180,1,1,0,NULL,'(391) 872-6177',NULL,'3918726177',2),(167,180,1,0,0,NULL,'441-3077',NULL,'4413077',2),(168,32,1,1,0,NULL,'(644) 656-3124',NULL,'6446563124',1),(169,32,1,0,0,NULL,'(642) 409-3746',NULL,'6424093746',2),(170,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1),(171,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1),(172,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,174,1,1,0,NULL,'751-5701',NULL,'7515701',2),(2,174,1,0,0,NULL,'812-3004',NULL,'8123004',1),(3,87,1,1,0,NULL,'654-8297',NULL,'6548297',1),(4,87,1,0,0,NULL,'656-6175',NULL,'6566175',2),(5,129,1,1,0,NULL,'(272) 799-5063',NULL,'2727995063',1),(6,112,1,1,0,NULL,'(882) 507-5823',NULL,'8825075823',2),(7,197,1,1,0,NULL,'394-7024',NULL,'3947024',2),(8,197,1,0,0,NULL,'(469) 898-4577',NULL,'4698984577',1),(9,116,1,1,0,NULL,'664-9419',NULL,'6649419',1),(10,67,1,1,0,NULL,'(399) 547-4076',NULL,'3995474076',2),(11,67,1,0,0,NULL,'(431) 354-6503',NULL,'4313546503',1),(12,127,1,1,0,NULL,'(471) 634-2023',NULL,'4716342023',1),(13,181,1,1,0,NULL,'(617) 340-6794',NULL,'6173406794',1),(14,76,1,1,0,NULL,'(384) 572-2086',NULL,'3845722086',2),(15,76,1,0,0,NULL,'627-4118',NULL,'6274118',2),(16,115,1,1,0,NULL,'(802) 467-3957',NULL,'8024673957',2),(17,30,1,1,0,NULL,'(830) 842-7777',NULL,'8308427777',1),(18,153,1,1,0,NULL,'292-6957',NULL,'2926957',1),(19,79,1,1,0,NULL,'(571) 395-5731',NULL,'5713955731',2),(20,113,1,1,0,NULL,'(717) 716-4012',NULL,'7177164012',2),(21,113,1,0,0,NULL,'771-6923',NULL,'7716923',2),(22,64,1,1,0,NULL,'(792) 303-4561',NULL,'7923034561',2),(23,64,1,0,0,NULL,'(315) 739-7993',NULL,'3157397993',2),(24,6,1,1,0,NULL,'684-6198',NULL,'6846198',1),(25,63,1,1,0,NULL,'(883) 537-1889',NULL,'8835371889',1),(26,63,1,0,0,NULL,'270-3051',NULL,'2703051',2),(27,201,1,1,0,NULL,'(669) 532-8422',NULL,'6695328422',1),(28,201,1,0,0,NULL,'(848) 488-5210',NULL,'8484885210',1),(29,136,1,1,0,NULL,'(652) 300-9685',NULL,'6523009685',2),(30,136,1,0,0,NULL,'(800) 331-6187',NULL,'8003316187',1),(31,158,1,1,0,NULL,'684-4306',NULL,'6844306',1),(32,158,1,0,0,NULL,'359-1468',NULL,'3591468',1),(33,70,1,1,0,NULL,'(359) 689-7496',NULL,'3596897496',1),(34,41,1,1,0,NULL,'(459) 811-4100',NULL,'4598114100',2),(35,41,1,0,0,NULL,'(693) 239-2206',NULL,'6932392206',2),(36,147,1,1,0,NULL,'292-2079',NULL,'2922079',2),(37,147,1,0,0,NULL,'(635) 437-8156',NULL,'6354378156',2),(38,151,1,1,0,NULL,'521-4687',NULL,'5214687',1),(39,151,1,0,0,NULL,'(456) 504-9821',NULL,'4565049821',2),(40,114,1,1,0,NULL,'417-4424',NULL,'4174424',2),(41,114,1,0,0,NULL,'529-9213',NULL,'5299213',1),(42,34,1,1,0,NULL,'324-7341',NULL,'3247341',1),(43,34,1,0,0,NULL,'887-9290',NULL,'8879290',2),(44,16,1,1,0,NULL,'426-3665',NULL,'4263665',1),(45,16,1,0,0,NULL,'(423) 469-1518',NULL,'4234691518',2),(46,86,1,1,0,NULL,'671-2758',NULL,'6712758',1),(47,86,1,0,0,NULL,'(255) 369-8520',NULL,'2553698520',2),(48,89,1,1,0,NULL,'(388) 635-6125',NULL,'3886356125',1),(49,92,1,1,0,NULL,'(611) 685-1812',NULL,'6116851812',1),(50,92,1,0,0,NULL,'(407) 551-1355',NULL,'4075511355',1),(51,36,1,1,0,NULL,'(634) 547-6996',NULL,'6345476996',2),(52,2,1,1,0,NULL,'791-8706',NULL,'7918706',2),(53,2,1,0,0,NULL,'(807) 803-5671',NULL,'8078035671',1),(54,121,1,1,0,NULL,'474-8398',NULL,'4748398',1),(55,121,1,0,0,NULL,'(417) 791-3919',NULL,'4177913919',1),(56,135,1,1,0,NULL,'(713) 339-5477',NULL,'7133395477',1),(57,104,1,1,0,NULL,'(811) 229-4511',NULL,'8112294511',1),(58,104,1,0,0,NULL,'(826) 480-4067',NULL,'8264804067',2),(59,45,1,1,0,NULL,'706-6605',NULL,'7066605',2),(60,45,1,0,0,NULL,'409-3524',NULL,'4093524',2),(61,128,1,1,0,NULL,'(542) 325-8537',NULL,'5423258537',2),(62,77,1,1,0,NULL,'(803) 724-5796',NULL,'8037245796',1),(63,77,1,0,0,NULL,'(899) 536-3957',NULL,'8995363957',1),(64,103,1,1,0,NULL,'244-4375',NULL,'2444375',2),(65,131,1,1,0,NULL,'465-6815',NULL,'4656815',1),(66,111,1,1,0,NULL,'(593) 609-1541',NULL,'5936091541',1),(67,111,1,0,0,NULL,'589-3012',NULL,'5893012',1),(68,148,1,1,0,NULL,'827-7443',NULL,'8277443',1),(69,81,1,1,0,NULL,'(237) 586-1255',NULL,'2375861255',1),(70,81,1,0,0,NULL,'(806) 897-8332',NULL,'8068978332',1),(71,119,1,1,0,NULL,'(691) 320-2229',NULL,'6913202229',1),(72,119,1,0,0,NULL,'(566) 552-3386',NULL,'5665523386',2),(73,139,1,1,0,NULL,'(323) 710-2708',NULL,'3237102708',1),(74,139,1,0,0,NULL,'363-4443',NULL,'3634443',2),(75,159,1,1,0,NULL,'345-3082',NULL,'3453082',1),(76,159,1,0,0,NULL,'295-7784',NULL,'2957784',1),(77,140,1,1,0,NULL,'(859) 642-3820',NULL,'8596423820',2),(78,80,1,1,0,NULL,'(694) 544-3870',NULL,'6945443870',1),(79,80,1,0,0,NULL,'314-5921',NULL,'3145921',1),(80,122,1,1,0,NULL,'716-5709',NULL,'7165709',2),(81,149,1,1,0,NULL,'(465) 303-9535',NULL,'4653039535',1),(82,149,1,0,0,NULL,'818-8686',NULL,'8188686',1),(83,179,1,1,0,NULL,'395-5509',NULL,'3955509',2),(84,37,1,1,0,NULL,'766-4555',NULL,'7664555',2),(85,99,1,1,0,NULL,'223-5013',NULL,'2235013',1),(86,150,1,1,0,NULL,'509-6841',NULL,'5096841',2),(87,150,1,0,0,NULL,'453-5645',NULL,'4535645',2),(88,146,1,1,0,NULL,'475-1876',NULL,'4751876',2),(89,72,1,1,0,NULL,'(530) 230-3336',NULL,'5302303336',1),(90,69,1,1,0,NULL,'204-3297',NULL,'2043297',1),(91,69,1,0,0,NULL,'335-1525',NULL,'3351525',1),(92,82,1,1,0,NULL,'(405) 806-5346',NULL,'4058065346',2),(93,82,1,0,0,NULL,'(253) 228-4867',NULL,'2532284867',2),(94,5,1,1,0,NULL,'(857) 267-3958',NULL,'8572673958',2),(95,109,1,1,0,NULL,'495-9011',NULL,'4959011',2),(96,109,1,0,0,NULL,'(761) 670-1828',NULL,'7616701828',1),(97,59,1,1,0,NULL,'(407) 673-4489',NULL,'4076734489',1),(98,48,1,1,0,NULL,'(860) 705-5236',NULL,'8607055236',1),(99,124,1,1,0,NULL,'(776) 675-7081',NULL,'7766757081',2),(100,124,1,0,0,NULL,'301-6500',NULL,'3016500',2),(101,170,1,1,0,NULL,'(440) 492-1480',NULL,'4404921480',2),(102,25,1,1,0,NULL,'605-9665',NULL,'6059665',1),(103,145,1,1,0,NULL,'379-3246',NULL,'3793246',2),(104,145,1,0,0,NULL,'693-8940',NULL,'6938940',1),(105,12,1,1,0,NULL,'(867) 709-1919',NULL,'8677091919',2),(106,12,1,0,0,NULL,'(402) 834-9553',NULL,'4028349553',2),(107,43,1,1,0,NULL,'674-2476',NULL,'6742476',2),(108,43,1,0,0,NULL,'583-5894',NULL,'5835894',1),(109,91,1,1,0,NULL,'299-7241',NULL,'2997241',2),(110,91,1,0,0,NULL,'631-5850',NULL,'6315850',2),(111,57,1,1,0,NULL,'285-1495',NULL,'2851495',2),(112,185,1,1,0,NULL,'553-2519',NULL,'5532519',1),(113,185,1,0,0,NULL,'(493) 754-3887',NULL,'4937543887',1),(114,169,1,1,0,NULL,'(528) 839-5815',NULL,'5288395815',2),(115,194,1,1,0,NULL,'(781) 316-9375',NULL,'7813169375',1),(116,7,1,1,0,NULL,'(867) 809-5412',NULL,'8678095412',1),(117,7,1,0,0,NULL,'(344) 746-5820',NULL,'3447465820',2),(118,68,1,1,0,NULL,'322-9331',NULL,'3229331',2),(119,68,1,0,0,NULL,'543-7145',NULL,'5437145',2),(120,188,1,1,0,NULL,'(464) 297-8181',NULL,'4642978181',1),(121,188,1,0,0,NULL,'(804) 390-2990',NULL,'8043902990',1),(122,105,1,1,0,NULL,'833-1724',NULL,'8331724',1),(123,105,1,0,0,NULL,'(746) 540-2794',NULL,'7465402794',1),(124,178,1,1,0,NULL,'(549) 602-9615',NULL,'5496029615',2),(125,178,1,0,0,NULL,'765-9769',NULL,'7659769',1),(126,88,1,1,0,NULL,'259-1228',NULL,'2591228',2),(127,161,1,1,0,NULL,'593-7888',NULL,'5937888',2),(128,176,1,1,0,NULL,'(656) 667-4374',NULL,'6566674374',2),(129,176,1,0,0,NULL,'(879) 306-3948',NULL,'8793063948',1),(130,84,1,1,0,NULL,'(725) 803-3451',NULL,'7258033451',2),(131,108,1,1,0,NULL,'(635) 419-9639',NULL,'6354199639',1),(132,108,1,0,0,NULL,'248-6502',NULL,'2486502',1),(133,38,1,1,0,NULL,'388-7780',NULL,'3887780',1),(134,38,1,0,0,NULL,'561-2013',NULL,'5612013',1),(135,184,1,1,0,NULL,'(255) 208-7010',NULL,'2552087010',1),(136,184,1,0,0,NULL,'668-9878',NULL,'6689878',2),(137,85,1,1,0,NULL,'(691) 223-3297',NULL,'6912233297',2),(138,85,1,0,0,NULL,'460-4972',NULL,'4604972',1),(139,13,1,1,0,NULL,'480-3738',NULL,'4803738',2),(140,13,1,0,0,NULL,'366-7161',NULL,'3667161',2),(141,18,1,1,0,NULL,'(308) 869-1545',NULL,'3088691545',2),(142,177,1,1,0,NULL,'302-2419',NULL,'3022419',1),(143,24,1,1,0,NULL,'672-3341',NULL,'6723341',2),(144,24,1,0,0,NULL,'(728) 704-9923',NULL,'7287049923',1),(145,125,1,1,0,NULL,'820-2391',NULL,'8202391',2),(146,125,1,0,0,NULL,'660-1590',NULL,'6601590',1),(147,8,1,1,0,NULL,'(514) 478-8263',NULL,'5144788263',1),(148,173,1,1,0,NULL,'338-3790',NULL,'3383790',2),(149,130,1,1,0,NULL,'(675) 482-9334',NULL,'6754829334',1),(150,22,1,1,0,NULL,'(881) 853-6739',NULL,'8818536739',1),(151,22,1,0,0,NULL,'(300) 639-4832',NULL,'3006394832',2),(152,163,1,1,0,NULL,'(643) 888-5952',NULL,'6438885952',2),(153,163,1,0,0,NULL,'(389) 864-6969',NULL,'3898646969',1),(154,183,1,1,0,NULL,'(283) 519-2860',NULL,'2835192860',1),(155,183,1,0,0,NULL,'(523) 471-1701',NULL,'5234711701',1),(156,189,1,1,0,NULL,'473-2601',NULL,'4732601',2),(157,189,1,0,0,NULL,'709-2825',NULL,'7092825',2),(158,26,1,1,0,NULL,'(521) 788-5975',NULL,'5217885975',2),(159,134,1,1,0,NULL,'(666) 488-8680',NULL,'6664888680',1),(160,134,1,0,0,NULL,'(656) 780-4061',NULL,'6567804061',2),(161,17,1,1,0,NULL,'491-9378',NULL,'4919378',1),(162,17,1,0,0,NULL,'(402) 330-3622',NULL,'4023303622',2),(163,90,1,1,0,NULL,'(524) 601-6195',NULL,'5246016195',1),(164,90,1,0,0,NULL,'657-6834',NULL,'6576834',1),(165,46,1,1,0,NULL,'(533) 601-7273',NULL,'5336017273',2),(166,95,1,1,0,NULL,'466-5611',NULL,'4665611',2),(167,95,1,0,0,NULL,'714-4441',NULL,'7144441',1),(168,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1),(169,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1),(170,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1);
 /*!40000 ALTER TABLE `civicrm_phone` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -1269,7 +1269,7 @@ 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,198,157,1,NULL,NULL,1,NULL,0,0,NULL),(2,105,157,1,NULL,NULL,1,NULL,0,0,NULL),(3,198,183,1,NULL,NULL,1,NULL,0,0,NULL),(4,105,183,1,NULL,NULL,1,NULL,0,0,NULL),(5,105,198,4,NULL,NULL,1,NULL,0,0,NULL),(6,183,3,8,NULL,NULL,1,NULL,0,0,NULL),(7,198,3,8,NULL,NULL,1,NULL,0,0,NULL),(8,105,3,8,NULL,NULL,1,NULL,0,0,NULL),(9,157,3,7,NULL,NULL,1,NULL,0,0,NULL),(10,183,157,2,NULL,NULL,1,NULL,0,0,NULL),(11,35,181,1,NULL,NULL,1,NULL,0,0,NULL),(12,127,181,1,NULL,NULL,1,NULL,0,0,NULL),(13,35,64,1,NULL,NULL,1,NULL,0,0,NULL),(14,127,64,1,NULL,NULL,1,NULL,0,0,NULL),(15,127,35,4,NULL,NULL,1,NULL,0,0,NULL),(16,64,190,8,NULL,NULL,1,NULL,0,0,NULL),(17,35,190,8,NULL,NULL,1,NULL,0,0,NULL),(18,127,190,8,NULL,NULL,1,NULL,0,0,NULL),(19,181,190,7,NULL,NULL,1,NULL,0,0,NULL),(20,64,181,2,NULL,NULL,1,NULL,0,0,NULL),(21,36,167,1,NULL,NULL,1,NULL,0,0,NULL),(22,52,167,1,NULL,NULL,1,NULL,0,0,NULL),(23,36,70,1,NULL,NULL,1,NULL,0,0,NULL),(24,52,70,1,NULL,NULL,1,NULL,0,0,NULL),(25,52,36,4,NULL,NULL,1,NULL,0,0,NULL),(26,70,108,8,NULL,NULL,1,NULL,0,0,NULL),(27,36,108,8,NULL,NULL,1,NULL,0,0,NULL),(28,52,108,8,NULL,NULL,1,NULL,0,0,NULL),(29,167,108,7,NULL,NULL,0,NULL,0,0,NULL),(30,70,167,2,NULL,NULL,0,NULL,0,0,NULL),(31,153,43,1,NULL,NULL,1,NULL,0,0,NULL),(32,144,43,1,NULL,NULL,1,NULL,0,0,NULL),(33,153,47,1,NULL,NULL,1,NULL,0,0,NULL),(34,144,47,1,NULL,NULL,1,NULL,0,0,NULL),(35,144,153,4,NULL,NULL,1,NULL,0,0,NULL),(36,47,80,8,NULL,NULL,1,NULL,0,0,NULL),(37,153,80,8,NULL,NULL,1,NULL,0,0,NULL),(38,144,80,8,NULL,NULL,1,NULL,0,0,NULL),(39,43,80,7,NULL,NULL,0,NULL,0,0,NULL),(40,47,43,2,NULL,NULL,0,NULL,0,0,NULL),(41,146,28,1,NULL,NULL,1,NULL,0,0,NULL),(42,150,28,1,NULL,NULL,1,NULL,0,0,NULL),(43,146,140,1,NULL,NULL,1,NULL,0,0,NULL),(44,150,140,1,NULL,NULL,1,NULL,0,0,NULL),(45,150,146,4,NULL,NULL,1,NULL,0,0,NULL),(46,140,152,8,NULL,NULL,1,NULL,0,0,NULL),(47,146,152,8,NULL,NULL,1,NULL,0,0,NULL),(48,150,152,8,NULL,NULL,1,NULL,0,0,NULL),(49,28,152,7,NULL,NULL,0,NULL,0,0,NULL),(50,140,28,2,NULL,NULL,0,NULL,0,0,NULL),(51,98,173,1,NULL,NULL,1,NULL,0,0,NULL),(52,176,173,1,NULL,NULL,1,NULL,0,0,NULL),(53,98,13,1,NULL,NULL,1,NULL,0,0,NULL),(54,176,13,1,NULL,NULL,1,NULL,0,0,NULL),(55,176,98,4,NULL,NULL,1,NULL,0,0,NULL),(56,13,61,8,NULL,NULL,1,NULL,0,0,NULL),(57,98,61,8,NULL,NULL,1,NULL,0,0,NULL),(58,176,61,8,NULL,NULL,1,NULL,0,0,NULL),(59,173,61,7,NULL,NULL,0,NULL,0,0,NULL),(60,13,173,2,NULL,NULL,0,NULL,0,0,NULL),(61,178,79,1,NULL,NULL,1,NULL,0,0,NULL),(62,135,79,1,NULL,NULL,1,NULL,0,0,NULL),(63,178,147,1,NULL,NULL,1,NULL,0,0,NULL),(64,135,147,1,NULL,NULL,1,NULL,0,0,NULL),(65,135,178,4,NULL,NULL,1,NULL,0,0,NULL),(66,147,130,8,NULL,NULL,1,NULL,0,0,NULL),(67,178,130,8,NULL,NULL,1,NULL,0,0,NULL),(68,135,130,8,NULL,NULL,1,NULL,0,0,NULL),(69,79,130,7,NULL,NULL,1,NULL,0,0,NULL),(70,147,79,2,NULL,NULL,1,NULL,0,0,NULL),(71,104,109,1,NULL,NULL,1,NULL,0,0,NULL),(72,8,109,1,NULL,NULL,1,NULL,0,0,NULL),(73,104,90,1,NULL,NULL,1,NULL,0,0,NULL),(74,8,90,1,NULL,NULL,1,NULL,0,0,NULL),(75,8,104,4,NULL,NULL,1,NULL,0,0,NULL),(76,90,106,8,NULL,NULL,1,NULL,0,0,NULL),(77,104,106,8,NULL,NULL,1,NULL,0,0,NULL),(78,8,106,8,NULL,NULL,1,NULL,0,0,NULL),(79,109,106,7,NULL,NULL,1,NULL,0,0,NULL),(80,90,109,2,NULL,NULL,1,NULL,0,0,NULL),(81,41,168,1,NULL,NULL,1,NULL,0,0,NULL),(82,56,168,1,NULL,NULL,1,NULL,0,0,NULL),(83,41,182,1,NULL,NULL,1,NULL,0,0,NULL),(84,56,182,1,NULL,NULL,1,NULL,0,0,NULL),(85,56,41,4,NULL,NULL,1,NULL,0,0,NULL),(86,182,9,8,NULL,NULL,1,NULL,0,0,NULL),(87,41,9,8,NULL,NULL,1,NULL,0,0,NULL),(88,56,9,8,NULL,NULL,1,NULL,0,0,NULL),(89,168,9,7,NULL,NULL,0,NULL,0,0,NULL),(90,182,168,2,NULL,NULL,0,NULL,0,0,NULL),(91,138,88,1,NULL,NULL,1,NULL,0,0,NULL),(92,197,88,1,NULL,NULL,1,NULL,0,0,NULL),(93,138,201,1,NULL,NULL,1,NULL,0,0,NULL),(94,197,201,1,NULL,NULL,1,NULL,0,0,NULL),(95,197,138,4,NULL,NULL,1,NULL,0,0,NULL),(96,201,107,8,NULL,NULL,1,NULL,0,0,NULL),(97,138,107,8,NULL,NULL,1,NULL,0,0,NULL),(98,197,107,8,NULL,NULL,1,NULL,0,0,NULL),(99,88,107,7,NULL,NULL,1,NULL,0,0,NULL),(100,201,88,2,NULL,NULL,1,NULL,0,0,NULL),(101,55,132,1,NULL,NULL,1,NULL,0,0,NULL),(102,161,132,1,NULL,NULL,1,NULL,0,0,NULL),(103,55,126,1,NULL,NULL,1,NULL,0,0,NULL),(104,161,126,1,NULL,NULL,1,NULL,0,0,NULL),(105,161,55,4,NULL,NULL,1,NULL,0,0,NULL),(106,126,188,8,NULL,NULL,1,NULL,0,0,NULL),(107,55,188,8,NULL,NULL,1,NULL,0,0,NULL),(108,161,188,8,NULL,NULL,1,NULL,0,0,NULL),(109,132,188,7,NULL,NULL,1,NULL,0,0,NULL),(110,126,132,2,NULL,NULL,1,NULL,0,0,NULL),(111,29,84,1,NULL,NULL,1,NULL,0,0,NULL),(112,34,84,1,NULL,NULL,1,NULL,0,0,NULL),(113,29,2,1,NULL,NULL,1,NULL,0,0,NULL),(114,34,2,1,NULL,NULL,1,NULL,0,0,NULL),(115,34,29,4,NULL,NULL,1,NULL,0,0,NULL),(116,2,62,8,NULL,NULL,1,NULL,0,0,NULL),(117,29,62,8,NULL,NULL,1,NULL,0,0,NULL),(118,34,62,8,NULL,NULL,1,NULL,0,0,NULL),(119,84,62,7,NULL,NULL,1,NULL,0,0,NULL),(120,2,84,2,NULL,NULL,1,NULL,0,0,NULL),(121,163,44,1,NULL,NULL,1,NULL,0,0,NULL),(122,76,44,1,NULL,NULL,1,NULL,0,0,NULL),(123,163,78,1,NULL,NULL,1,NULL,0,0,NULL),(124,76,78,1,NULL,NULL,1,NULL,0,0,NULL),(125,76,163,4,NULL,NULL,1,NULL,0,0,NULL),(126,78,83,8,NULL,NULL,1,NULL,0,0,NULL),(127,163,83,8,NULL,NULL,1,NULL,0,0,NULL),(128,76,83,8,NULL,NULL,1,NULL,0,0,NULL),(129,44,83,7,NULL,NULL,0,NULL,0,0,NULL),(130,78,44,2,NULL,NULL,0,NULL,0,0,NULL),(131,166,39,1,NULL,NULL,1,NULL,0,0,NULL),(132,200,39,1,NULL,NULL,1,NULL,0,0,NULL),(133,166,117,1,NULL,NULL,1,NULL,0,0,NULL),(134,200,117,1,NULL,NULL,1,NULL,0,0,NULL),(135,200,166,4,NULL,NULL,1,NULL,0,0,NULL),(136,117,17,8,NULL,NULL,1,NULL,0,0,NULL),(137,166,17,8,NULL,NULL,1,NULL,0,0,NULL),(138,200,17,8,NULL,NULL,1,NULL,0,0,NULL),(139,39,17,7,NULL,NULL,1,NULL,0,0,NULL),(140,117,39,2,NULL,NULL,1,NULL,0,0,NULL),(141,53,159,1,NULL,NULL,1,NULL,0,0,NULL),(142,100,159,1,NULL,NULL,1,NULL,0,0,NULL),(143,53,115,1,NULL,NULL,1,NULL,0,0,NULL),(144,100,115,1,NULL,NULL,1,NULL,0,0,NULL),(145,100,53,4,NULL,NULL,1,NULL,0,0,NULL),(146,115,187,8,NULL,NULL,1,NULL,0,0,NULL),(147,53,187,8,NULL,NULL,1,NULL,0,0,NULL),(148,100,187,8,NULL,NULL,1,NULL,0,0,NULL),(149,159,187,7,NULL,NULL,1,NULL,0,0,NULL),(150,115,159,2,NULL,NULL,1,NULL,0,0,NULL),(151,120,189,1,NULL,NULL,1,NULL,0,0,NULL),(152,186,189,1,NULL,NULL,1,NULL,0,0,NULL),(153,120,160,1,NULL,NULL,1,NULL,0,0,NULL),(154,186,160,1,NULL,NULL,1,NULL,0,0,NULL),(155,186,120,4,NULL,NULL,1,NULL,0,0,NULL),(156,160,93,8,NULL,NULL,1,NULL,0,0,NULL),(157,120,93,8,NULL,NULL,1,NULL,0,0,NULL),(158,186,93,8,NULL,NULL,1,NULL,0,0,NULL),(159,189,93,7,NULL,NULL,0,NULL,0,0,NULL),(160,160,189,2,NULL,NULL,0,NULL,0,0,NULL),(161,46,49,1,NULL,NULL,1,NULL,0,0,NULL),(162,21,49,1,NULL,NULL,1,NULL,0,0,NULL),(163,46,131,1,NULL,NULL,1,NULL,0,0,NULL),(164,21,131,1,NULL,NULL,1,NULL,0,0,NULL),(165,21,46,4,NULL,NULL,1,NULL,0,0,NULL),(166,131,74,8,NULL,NULL,1,NULL,0,0,NULL),(167,46,74,8,NULL,NULL,1,NULL,0,0,NULL),(168,21,74,8,NULL,NULL,1,NULL,0,0,NULL),(169,49,74,7,NULL,NULL,0,NULL,0,0,NULL),(170,131,49,2,NULL,NULL,0,NULL,0,0,NULL),(171,25,125,1,NULL,NULL,1,NULL,0,0,NULL),(172,111,125,1,NULL,NULL,1,NULL,0,0,NULL),(173,25,171,1,NULL,NULL,1,NULL,0,0,NULL),(174,111,171,1,NULL,NULL,1,NULL,0,0,NULL),(175,111,25,4,NULL,NULL,1,NULL,0,0,NULL),(176,171,71,8,NULL,NULL,1,NULL,0,0,NULL),(177,25,71,8,NULL,NULL,1,NULL,0,0,NULL),(178,111,71,8,NULL,NULL,1,NULL,0,0,NULL),(179,125,71,7,NULL,NULL,1,NULL,0,0,NULL),(180,171,125,2,NULL,NULL,1,NULL,0,0,NULL),(181,20,6,1,NULL,NULL,1,NULL,0,0,NULL),(182,11,6,1,NULL,NULL,1,NULL,0,0,NULL),(183,20,63,1,NULL,NULL,1,NULL,0,0,NULL),(184,11,63,1,NULL,NULL,1,NULL,0,0,NULL),(185,11,20,4,NULL,NULL,1,NULL,0,0,NULL),(186,63,179,8,NULL,NULL,1,NULL,0,0,NULL),(187,20,179,8,NULL,NULL,1,NULL,0,0,NULL),(188,11,179,8,NULL,NULL,1,NULL,0,0,NULL),(189,6,179,7,NULL,NULL,0,NULL,0,0,NULL),(190,63,6,2,NULL,NULL,0,NULL,0,0,NULL),(191,180,151,1,NULL,NULL,1,NULL,0,0,NULL),(192,32,151,1,NULL,NULL,1,NULL,0,0,NULL),(193,180,101,1,NULL,NULL,1,NULL,0,0,NULL),(194,32,101,1,NULL,NULL,1,NULL,0,0,NULL),(195,32,180,4,NULL,NULL,1,NULL,0,0,NULL),(196,101,199,8,NULL,NULL,1,NULL,0,0,NULL),(197,180,199,8,NULL,NULL,1,NULL,0,0,NULL),(198,32,199,8,NULL,NULL,1,NULL,0,0,NULL),(199,151,199,7,NULL,NULL,1,NULL,0,0,NULL),(200,101,151,2,NULL,NULL,1,NULL,0,0,NULL),(201,180,19,5,NULL,NULL,1,NULL,0,0,NULL),(202,136,54,5,NULL,NULL,1,NULL,0,0,NULL),(203,200,65,5,NULL,NULL,1,NULL,0,0,NULL),(204,153,72,5,NULL,NULL,1,NULL,0,0,NULL),(205,105,91,5,NULL,NULL,1,NULL,0,0,NULL),(206,99,97,5,NULL,NULL,1,NULL,0,0,NULL),(207,158,110,5,NULL,NULL,1,NULL,0,0,NULL),(208,16,121,5,NULL,NULL,1,NULL,0,0,NULL),(209,43,139,5,NULL,NULL,1,NULL,0,0,NULL),(210,40,142,5,NULL,NULL,1,NULL,0,0,NULL),(211,118,143,5,NULL,NULL,1,NULL,0,0,NULL),(212,147,145,5,NULL,NULL,1,NULL,0,0,NULL),(213,90,155,5,NULL,NULL,1,NULL,0,0,NULL),(214,150,156,5,NULL,NULL,1,NULL,0,0,NULL),(215,159,162,5,NULL,NULL,1,NULL,0,0,NULL),(216,173,184,5,NULL,NULL,1,NULL,0,0,NULL),(217,146,195,5,NULL,NULL,1,NULL,0,0,NULL),(218,4,196,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,94,122,1,NULL,NULL,1,NULL,0,0,NULL),(2,179,122,1,NULL,NULL,1,NULL,0,0,NULL),(3,94,149,1,NULL,NULL,1,NULL,0,0,NULL),(4,179,149,1,NULL,NULL,1,NULL,0,0,NULL),(5,179,94,4,NULL,NULL,1,NULL,0,0,NULL),(6,149,157,8,NULL,NULL,1,NULL,0,0,NULL),(7,94,157,8,NULL,NULL,1,NULL,0,0,NULL),(8,179,157,8,NULL,NULL,1,NULL,0,0,NULL),(9,122,157,7,NULL,NULL,0,NULL,0,0,NULL),(10,149,122,2,NULL,NULL,0,NULL,0,0,NULL),(11,99,3,1,NULL,NULL,1,NULL,0,0,NULL),(12,150,3,1,NULL,NULL,1,NULL,0,0,NULL),(13,99,37,1,NULL,NULL,1,NULL,0,0,NULL),(14,150,37,1,NULL,NULL,1,NULL,0,0,NULL),(15,150,99,4,NULL,NULL,1,NULL,0,0,NULL),(16,37,107,8,NULL,NULL,1,NULL,0,0,NULL),(17,99,107,8,NULL,NULL,1,NULL,0,0,NULL),(18,150,107,8,NULL,NULL,1,NULL,0,0,NULL),(19,3,107,7,NULL,NULL,1,NULL,0,0,NULL),(20,37,3,2,NULL,NULL,1,NULL,0,0,NULL),(21,193,35,1,NULL,NULL,1,NULL,0,0,NULL),(22,72,35,1,NULL,NULL,1,NULL,0,0,NULL),(23,193,146,1,NULL,NULL,1,NULL,0,0,NULL),(24,72,146,1,NULL,NULL,1,NULL,0,0,NULL),(25,72,193,4,NULL,NULL,1,NULL,0,0,NULL),(26,146,27,8,NULL,NULL,1,NULL,0,0,NULL),(27,193,27,8,NULL,NULL,1,NULL,0,0,NULL),(28,72,27,8,NULL,NULL,1,NULL,0,0,NULL),(29,35,27,7,NULL,NULL,1,NULL,0,0,NULL),(30,146,35,2,NULL,NULL,1,NULL,0,0,NULL),(31,51,69,1,NULL,NULL,1,NULL,0,0,NULL),(32,5,69,1,NULL,NULL,1,NULL,0,0,NULL),(33,51,82,1,NULL,NULL,1,NULL,0,0,NULL),(34,5,82,1,NULL,NULL,1,NULL,0,0,NULL),(35,5,51,4,NULL,NULL,1,NULL,0,0,NULL),(36,82,14,8,NULL,NULL,1,NULL,0,0,NULL),(37,51,14,8,NULL,NULL,1,NULL,0,0,NULL),(38,5,14,8,NULL,NULL,1,NULL,0,0,NULL),(39,69,14,7,NULL,NULL,0,NULL,0,0,NULL),(40,82,69,2,NULL,NULL,0,NULL,0,0,NULL),(41,59,109,1,NULL,NULL,1,NULL,0,0,NULL),(42,48,109,1,NULL,NULL,1,NULL,0,0,NULL),(43,59,165,1,NULL,NULL,1,NULL,0,0,NULL),(44,48,165,1,NULL,NULL,1,NULL,0,0,NULL),(45,48,59,4,NULL,NULL,1,NULL,0,0,NULL),(46,165,74,8,NULL,NULL,1,NULL,0,0,NULL),(47,59,74,8,NULL,NULL,1,NULL,0,0,NULL),(48,48,74,8,NULL,NULL,1,NULL,0,0,NULL),(49,109,74,7,NULL,NULL,1,NULL,0,0,NULL),(50,165,109,2,NULL,NULL,1,NULL,0,0,NULL),(51,170,124,1,NULL,NULL,1,NULL,0,0,NULL),(52,142,124,1,NULL,NULL,1,NULL,0,0,NULL),(53,170,44,1,NULL,NULL,1,NULL,0,0,NULL),(54,142,44,1,NULL,NULL,1,NULL,0,0,NULL),(55,142,170,4,NULL,NULL,1,NULL,0,0,NULL),(56,44,154,8,NULL,NULL,1,NULL,0,0,NULL),(57,170,154,8,NULL,NULL,1,NULL,0,0,NULL),(58,142,154,8,NULL,NULL,1,NULL,0,0,NULL),(59,124,154,7,NULL,NULL,1,NULL,0,0,NULL),(60,44,124,2,NULL,NULL,1,NULL,0,0,NULL),(61,106,25,1,NULL,NULL,1,NULL,0,0,NULL),(62,12,25,1,NULL,NULL,1,NULL,0,0,NULL),(63,106,145,1,NULL,NULL,1,NULL,0,0,NULL),(64,12,145,1,NULL,NULL,1,NULL,0,0,NULL),(65,12,106,4,NULL,NULL,1,NULL,0,0,NULL),(66,145,196,8,NULL,NULL,1,NULL,0,0,NULL),(67,106,196,8,NULL,NULL,1,NULL,0,0,NULL),(68,12,196,8,NULL,NULL,1,NULL,0,0,NULL),(69,25,196,7,NULL,NULL,1,NULL,0,0,NULL),(70,145,25,2,NULL,NULL,1,NULL,0,0,NULL),(71,20,43,1,NULL,NULL,1,NULL,0,0,NULL),(72,57,43,1,NULL,NULL,1,NULL,0,0,NULL),(73,20,91,1,NULL,NULL,1,NULL,0,0,NULL),(74,57,91,1,NULL,NULL,1,NULL,0,0,NULL),(75,57,20,4,NULL,NULL,1,NULL,0,0,NULL),(76,91,52,8,NULL,NULL,1,NULL,0,0,NULL),(77,20,52,8,NULL,NULL,1,NULL,0,0,NULL),(78,57,52,8,NULL,NULL,1,NULL,0,0,NULL),(79,43,52,7,NULL,NULL,1,NULL,0,0,NULL),(80,91,43,2,NULL,NULL,1,NULL,0,0,NULL),(81,169,185,1,NULL,NULL,1,NULL,0,0,NULL),(82,194,185,1,NULL,NULL,1,NULL,0,0,NULL),(83,169,195,1,NULL,NULL,1,NULL,0,0,NULL),(84,194,195,1,NULL,NULL,1,NULL,0,0,NULL),(85,194,169,4,NULL,NULL,1,NULL,0,0,NULL),(86,195,21,8,NULL,NULL,1,NULL,0,0,NULL),(87,169,21,8,NULL,NULL,1,NULL,0,0,NULL),(88,194,21,8,NULL,NULL,1,NULL,0,0,NULL),(89,185,21,7,NULL,NULL,1,NULL,0,0,NULL),(90,195,185,2,NULL,NULL,1,NULL,0,0,NULL),(91,188,7,1,NULL,NULL,1,NULL,0,0,NULL),(92,166,7,1,NULL,NULL,1,NULL,0,0,NULL),(93,188,68,1,NULL,NULL,1,NULL,0,0,NULL),(94,166,68,1,NULL,NULL,1,NULL,0,0,NULL),(95,166,188,4,NULL,NULL,1,NULL,0,0,NULL),(96,68,31,8,NULL,NULL,1,NULL,0,0,NULL),(97,188,31,8,NULL,NULL,1,NULL,0,0,NULL),(98,166,31,8,NULL,NULL,1,NULL,0,0,NULL),(99,7,31,7,NULL,NULL,0,NULL,0,0,NULL),(100,68,7,2,NULL,NULL,0,NULL,0,0,NULL),(101,178,105,1,NULL,NULL,1,NULL,0,0,NULL),(102,88,105,1,NULL,NULL,1,NULL,0,0,NULL),(103,178,75,1,NULL,NULL,1,NULL,0,0,NULL),(104,88,75,1,NULL,NULL,1,NULL,0,0,NULL),(105,88,178,4,NULL,NULL,1,NULL,0,0,NULL),(106,75,143,8,NULL,NULL,1,NULL,0,0,NULL),(107,178,143,8,NULL,NULL,1,NULL,0,0,NULL),(108,88,143,8,NULL,NULL,1,NULL,0,0,NULL),(109,105,143,7,NULL,NULL,0,NULL,0,0,NULL),(110,75,105,2,NULL,NULL,0,NULL,0,0,NULL),(111,58,161,1,NULL,NULL,1,NULL,0,0,NULL),(112,84,161,1,NULL,NULL,1,NULL,0,0,NULL),(113,58,176,1,NULL,NULL,1,NULL,0,0,NULL),(114,84,176,1,NULL,NULL,1,NULL,0,0,NULL),(115,84,58,4,NULL,NULL,1,NULL,0,0,NULL),(116,176,110,8,NULL,NULL,1,NULL,0,0,NULL),(117,58,110,8,NULL,NULL,1,NULL,0,0,NULL),(118,84,110,8,NULL,NULL,1,NULL,0,0,NULL),(119,161,110,7,NULL,NULL,1,NULL,0,0,NULL),(120,176,161,2,NULL,NULL,1,NULL,0,0,NULL),(121,38,108,1,NULL,NULL,1,NULL,0,0,NULL),(122,184,108,1,NULL,NULL,1,NULL,0,0,NULL),(123,38,23,1,NULL,NULL,1,NULL,0,0,NULL),(124,184,23,1,NULL,NULL,1,NULL,0,0,NULL),(125,184,38,4,NULL,NULL,1,NULL,0,0,NULL),(126,23,71,8,NULL,NULL,1,NULL,0,0,NULL),(127,38,71,8,NULL,NULL,1,NULL,0,0,NULL),(128,184,71,8,NULL,NULL,1,NULL,0,0,NULL),(129,108,71,7,NULL,NULL,1,NULL,0,0,NULL),(130,23,108,2,NULL,NULL,1,NULL,0,0,NULL),(131,13,28,1,NULL,NULL,1,NULL,0,0,NULL),(132,18,28,1,NULL,NULL,1,NULL,0,0,NULL),(133,13,85,1,NULL,NULL,1,NULL,0,0,NULL),(134,18,85,1,NULL,NULL,1,NULL,0,0,NULL),(135,18,13,4,NULL,NULL,1,NULL,0,0,NULL),(136,85,33,8,NULL,NULL,1,NULL,0,0,NULL),(137,13,33,8,NULL,NULL,1,NULL,0,0,NULL),(138,18,33,8,NULL,NULL,1,NULL,0,0,NULL),(139,28,33,7,NULL,NULL,1,NULL,0,0,NULL),(140,85,28,2,NULL,NULL,1,NULL,0,0,NULL),(141,132,177,1,NULL,NULL,1,NULL,0,0,NULL),(142,125,177,1,NULL,NULL,1,NULL,0,0,NULL),(143,132,24,1,NULL,NULL,1,NULL,0,0,NULL),(144,125,24,1,NULL,NULL,1,NULL,0,0,NULL),(145,125,132,4,NULL,NULL,1,NULL,0,0,NULL),(146,24,50,8,NULL,NULL,1,NULL,0,0,NULL),(147,132,50,8,NULL,NULL,1,NULL,0,0,NULL),(148,125,50,8,NULL,NULL,1,NULL,0,0,NULL),(149,177,50,7,NULL,NULL,1,NULL,0,0,NULL),(150,24,177,2,NULL,NULL,1,NULL,0,0,NULL),(151,10,8,1,NULL,NULL,1,NULL,0,0,NULL),(152,190,8,1,NULL,NULL,1,NULL,0,0,NULL),(153,10,173,1,NULL,NULL,1,NULL,0,0,NULL),(154,190,173,1,NULL,NULL,1,NULL,0,0,NULL),(155,190,10,4,NULL,NULL,1,NULL,0,0,NULL),(156,173,164,8,NULL,NULL,1,NULL,0,0,NULL),(157,10,164,8,NULL,NULL,1,NULL,0,0,NULL),(158,190,164,8,NULL,NULL,1,NULL,0,0,NULL),(159,8,164,7,NULL,NULL,1,NULL,0,0,NULL),(160,173,8,2,NULL,NULL,1,NULL,0,0,NULL),(161,22,54,1,NULL,NULL,1,NULL,0,0,NULL),(162,66,54,1,NULL,NULL,1,NULL,0,0,NULL),(163,22,130,1,NULL,NULL,1,NULL,0,0,NULL),(164,66,130,1,NULL,NULL,1,NULL,0,0,NULL),(165,66,22,4,NULL,NULL,1,NULL,0,0,NULL),(166,130,32,8,NULL,NULL,1,NULL,0,0,NULL),(167,22,32,8,NULL,NULL,1,NULL,0,0,NULL),(168,66,32,8,NULL,NULL,1,NULL,0,0,NULL),(169,54,32,7,NULL,NULL,1,NULL,0,0,NULL),(170,130,54,2,NULL,NULL,1,NULL,0,0,NULL),(171,189,163,1,NULL,NULL,1,NULL,0,0,NULL),(172,26,163,1,NULL,NULL,1,NULL,0,0,NULL),(173,189,183,1,NULL,NULL,1,NULL,0,0,NULL),(174,26,183,1,NULL,NULL,1,NULL,0,0,NULL),(175,26,189,4,NULL,NULL,1,NULL,0,0,NULL),(176,183,200,8,NULL,NULL,1,NULL,0,0,NULL),(177,189,200,8,NULL,NULL,1,NULL,0,0,NULL),(178,26,200,8,NULL,NULL,1,NULL,0,0,NULL),(179,163,200,7,NULL,NULL,1,NULL,0,0,NULL),(180,183,163,2,NULL,NULL,1,NULL,0,0,NULL),(181,40,133,1,NULL,NULL,1,NULL,0,0,NULL),(182,17,133,1,NULL,NULL,1,NULL,0,0,NULL),(183,40,134,1,NULL,NULL,1,NULL,0,0,NULL),(184,17,134,1,NULL,NULL,1,NULL,0,0,NULL),(185,17,40,4,NULL,NULL,1,NULL,0,0,NULL),(186,134,15,8,NULL,NULL,1,NULL,0,0,NULL),(187,40,15,8,NULL,NULL,1,NULL,0,0,NULL),(188,17,15,8,NULL,NULL,1,NULL,0,0,NULL),(189,133,15,7,NULL,NULL,0,NULL,0,0,NULL),(190,134,133,2,NULL,NULL,0,NULL,0,0,NULL),(191,60,90,1,NULL,NULL,1,NULL,0,0,NULL),(192,95,90,1,NULL,NULL,1,NULL,0,0,NULL),(193,60,46,1,NULL,NULL,1,NULL,0,0,NULL),(194,95,46,1,NULL,NULL,1,NULL,0,0,NULL),(195,95,60,4,NULL,NULL,1,NULL,0,0,NULL),(196,46,100,8,NULL,NULL,1,NULL,0,0,NULL),(197,60,100,8,NULL,NULL,1,NULL,0,0,NULL),(198,95,100,8,NULL,NULL,1,NULL,0,0,NULL),(199,90,100,7,NULL,NULL,0,NULL,0,0,NULL),(200,46,90,2,NULL,NULL,0,NULL,0,0,NULL),(201,185,4,5,NULL,NULL,1,NULL,0,0,NULL),(202,82,29,5,NULL,NULL,1,NULL,0,0,NULL),(203,125,42,5,NULL,NULL,1,NULL,0,0,NULL),(204,162,47,5,NULL,NULL,1,NULL,0,0,NULL),(205,28,83,5,NULL,NULL,1,NULL,0,0,NULL),(206,103,93,5,NULL,NULL,1,NULL,0,0,NULL),(207,60,96,5,NULL,NULL,1,NULL,0,0,NULL),(208,117,98,5,NULL,NULL,1,NULL,0,0,NULL),(209,187,137,5,NULL,NULL,1,NULL,0,0,NULL),(210,134,138,5,NULL,NULL,1,NULL,0,0,NULL),(211,145,141,5,NULL,NULL,1,NULL,0,0,NULL),(212,149,160,5,NULL,NULL,1,NULL,0,0,NULL),(213,38,168,5,NULL,NULL,1,NULL,0,0,NULL),(214,63,172,5,NULL,NULL,1,NULL,0,0,NULL),(215,161,175,5,NULL,NULL,1,NULL,0,0,NULL),(216,39,182,5,NULL,NULL,1,NULL,0,0,NULL),(217,48,191,5,NULL,NULL,1,NULL,0,0,NULL);
 /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -1345,7 +1345,7 @@ 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,16,2,'2019-01-16 10:40:09','Email','Added',NULL),(2,45,2,'2019-04-24 22:35:26','Admin','Added',NULL),(3,103,2,'2018-08-23 09:10:49','Admin','Added',NULL),(4,57,2,'2018-09-10 04:09:33','Email','Added',NULL),(5,69,2,'2018-08-17 23:10:50','Admin','Added',NULL),(6,31,2,'2019-02-06 00:07:48','Admin','Added',NULL),(7,48,2,'2019-04-16 10:00:37','Admin','Added',NULL),(8,193,2,'2018-10-21 00:33:26','Email','Added',NULL),(9,169,2,'2018-09-22 22:11:59','Admin','Added',NULL),(10,33,2,'2018-09-01 19:40:26','Admin','Added',NULL),(11,128,2,'2018-08-23 20:03:17','Email','Added',NULL),(12,27,2,'2018-10-14 19:46:17','Email','Added',NULL),(13,66,2,'2019-01-01 11:49:21','Email','Added',NULL),(14,5,2,'2018-08-20 20:03:14','Email','Added',NULL),(15,170,2,'2018-08-22 18:57:32','Admin','Added',NULL),(16,112,2,'2018-11-03 15:59:57','Admin','Added',NULL),(17,129,2,'2019-03-26 16:06:33','Admin','Added',NULL),(18,18,2,'2018-10-20 03:25:56','Admin','Added',NULL),(19,191,2,'2019-03-25 11:29:05','Email','Added',NULL),(20,60,2,'2019-04-28 21:08:53','Email','Added',NULL),(21,81,2,'2018-12-25 03:50:57','Email','Added',NULL),(22,85,2,'2018-12-26 14:22:42','Admin','Added',NULL),(23,116,2,'2019-03-04 06:07:29','Email','Added',NULL),(24,177,2,'2019-02-24 09:56:21','Admin','Added',NULL),(25,4,2,'2019-04-06 14:29:13','Email','Added',NULL),(26,149,2,'2019-08-08 17:38:43','Email','Added',NULL),(27,24,2,'2019-01-04 20:19:34','Admin','Added',NULL),(28,82,2,'2019-02-13 13:21:06','Email','Added',NULL),(29,30,2,'2018-09-27 02:56:13','Admin','Added',NULL),(30,12,2,'2019-05-01 07:12:52','Email','Added',NULL),(31,172,2,'2019-04-18 01:09:08','Admin','Added',NULL),(32,114,2,'2019-08-08 21:27:46','Admin','Added',NULL),(33,154,2,'2019-06-03 23:32:37','Email','Added',NULL),(34,99,2,'2019-04-23 18:39:21','Admin','Added',NULL),(35,94,2,'2019-04-23 16:50:15','Email','Added',NULL),(36,58,2,'2019-03-29 05:14:38','Email','Added',NULL),(37,15,2,'2019-01-26 08:58:15','Email','Added',NULL),(38,51,2,'2018-10-03 04:57:07','Email','Added',NULL),(39,26,2,'2019-03-21 11:35:48','Admin','Added',NULL),(40,174,2,'2019-07-10 06:37:58','Admin','Added',NULL),(41,42,2,'2019-05-17 18:54:01','Admin','Added',NULL),(42,124,2,'2018-12-25 05:17:06','Email','Added',NULL),(43,136,2,'2018-11-15 22:21:58','Email','Added',NULL),(44,75,2,'2019-07-08 04:38:45','Email','Added',NULL),(45,118,2,'2019-02-22 23:49:19','Email','Added',NULL),(46,40,2,'2018-09-28 20:35:36','Email','Added',NULL),(47,38,2,'2019-02-20 15:04:44','Email','Added',NULL),(48,59,2,'2018-12-18 05:36:15','Email','Added',NULL),(49,148,2,'2019-03-07 03:08:29','Email','Added',NULL),(50,50,2,'2019-04-05 16:17:03','Email','Added',NULL),(51,22,2,'2019-06-07 14:08:02','Email','Added',NULL),(52,192,2,'2018-11-09 23:25:45','Email','Added',NULL),(53,119,2,'2019-06-03 04:06:46','Admin','Added',NULL),(54,133,2,'2019-01-15 22:05:09','Email','Added',NULL),(55,95,2,'2018-12-19 00:21:23','Admin','Added',NULL),(56,164,2,'2018-09-12 03:12:48','Email','Added',NULL),(57,158,2,'2019-08-11 23:35:02','Admin','Added',NULL),(58,165,2,'2019-03-15 09:33:54','Email','Added',NULL),(59,14,2,'2019-05-22 03:20:12','Email','Added',NULL),(60,77,2,'2018-11-14 09:05:25','Admin','Added',NULL),(61,23,3,'2018-08-24 04:30:04','Email','Added',NULL),(62,67,3,'2018-09-04 09:46:28','Admin','Added',NULL),(63,113,3,'2019-03-07 07:40:06','Admin','Added',NULL),(64,89,3,'2019-05-01 12:52:10','Admin','Added',NULL),(65,185,3,'2019-07-18 02:03:46','Admin','Added',NULL),(66,102,3,'2018-10-18 09:31:51','Email','Added',NULL),(67,68,3,'2018-11-16 16:12:31','Email','Added',NULL),(68,123,3,'2018-12-24 10:47:02','Email','Added',NULL),(69,134,3,'2019-05-08 19:08:00','Admin','Added',NULL),(70,141,3,'2019-05-16 11:33:36','Email','Added',NULL),(71,7,3,'2019-03-24 23:07:58','Email','Added',NULL),(72,96,3,'2019-07-08 03:12:28','Email','Added',NULL),(73,10,3,'2019-04-28 09:43:51','Admin','Added',NULL),(74,87,3,'2018-08-27 08:47:45','Admin','Added',NULL),(75,194,3,'2018-08-25 02:26:13','Email','Added',NULL),(76,16,4,'2018-09-24 00:56:20','Admin','Added',NULL),(77,193,4,'2019-01-07 16:26:09','Email','Added',NULL),(78,170,4,'2018-11-10 18:43:09','Admin','Added',NULL),(79,85,4,'2019-06-04 05:15:06','Email','Added',NULL),(80,30,4,'2019-06-09 07:55:50','Email','Added',NULL),(81,58,4,'2019-04-10 12:07:36','Email','Added',NULL),(82,136,4,'2019-07-22 20:13:04','Email','Added',NULL),(83,50,4,'2019-05-24 15:37:26','Email','Added',NULL);
+INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES (1,167,2,'2018-11-08 18:55:20','Admin','Added',NULL),(2,144,2,'2019-04-26 07:35:07','Email','Added',NULL),(3,65,2,'2019-06-01 00:46:49','Email','Added',NULL),(4,187,2,'2019-06-29 03:05:43','Admin','Added',NULL),(5,155,2,'2019-02-07 18:41:10','Admin','Added',NULL),(6,174,2,'2019-07-29 21:44:47','Admin','Added',NULL),(7,62,2,'2018-10-21 08:13:10','Admin','Added',NULL),(8,87,2,'2019-01-10 18:49:05','Admin','Added',NULL),(9,129,2,'2019-01-27 15:14:50','Admin','Added',NULL),(10,112,2,'2019-06-05 15:05:54','Email','Added',NULL),(11,197,2,'2018-12-05 04:42:03','Admin','Added',NULL),(12,116,2,'2019-06-09 19:29:45','Admin','Added',NULL),(13,67,2,'2019-07-29 00:49:04','Email','Added',NULL),(14,152,2,'2019-02-01 03:08:16','Admin','Added',NULL),(15,127,2,'2019-04-08 05:39:32','Admin','Added',NULL),(16,198,2,'2019-06-09 15:52:34','Email','Added',NULL),(17,181,2,'2019-04-20 03:14:26','Email','Added',NULL),(18,76,2,'2019-04-30 17:29:29','Admin','Added',NULL),(19,115,2,'2019-06-17 17:46:57','Admin','Added',NULL),(20,30,2,'2019-04-22 12:21:04','Email','Added',NULL),(21,153,2,'2019-07-31 18:22:34','Email','Added',NULL),(22,79,2,'2019-01-11 21:53:11','Admin','Added',NULL),(23,113,2,'2018-12-28 14:57:20','Email','Added',NULL),(24,64,2,'2018-12-17 18:56:57','Admin','Added',NULL),(25,120,2,'2019-06-28 07:34:25','Email','Added',NULL),(26,6,2,'2019-01-09 16:26:21','Admin','Added',NULL),(27,63,2,'2019-04-01 05:10:42','Email','Added',NULL),(28,201,2,'2019-02-25 13:44:44','Admin','Added',NULL),(29,171,2,'2018-10-12 19:49:31','Admin','Added',NULL),(30,136,2,'2019-05-22 16:52:06','Email','Added',NULL),(31,158,2,'2018-12-08 08:08:28','Admin','Added',NULL),(32,70,2,'2019-08-13 08:39:27','Email','Added',NULL),(33,41,2,'2019-09-09 05:15:32','Admin','Added',NULL),(34,147,2,'2019-06-07 04:56:30','Admin','Added',NULL),(35,151,2,'2019-07-24 09:25:19','Email','Added',NULL),(36,73,2,'2019-08-18 19:55:16','Admin','Added',NULL),(37,114,2,'2019-03-20 13:25:48','Email','Added',NULL),(38,34,2,'2019-07-10 06:54:39','Admin','Added',NULL),(39,16,2,'2018-10-03 18:20:07','Email','Added',NULL),(40,86,2,'2019-07-30 16:46:58','Email','Added',NULL),(41,89,2,'2019-05-28 12:11:22','Email','Added',NULL),(42,19,2,'2018-10-15 00:37:27','Email','Added',NULL),(43,180,2,'2019-08-12 07:01:55','Email','Added',NULL),(44,92,2,'2019-04-06 09:23:05','Email','Added',NULL),(45,36,2,'2019-04-14 22:52:23','Admin','Added',NULL),(46,2,2,'2019-05-31 08:33:41','Admin','Added',NULL),(47,55,2,'2018-10-29 01:36:06','Admin','Added',NULL),(48,11,2,'2018-11-15 22:14:48','Email','Added',NULL),(49,121,2,'2019-03-15 17:13:28','Email','Added',NULL),(50,123,2,'2019-05-04 08:16:47','Email','Added',NULL),(51,102,2,'2019-06-19 08:46:33','Admin','Added',NULL),(52,135,2,'2019-02-27 22:05:26','Email','Added',NULL),(53,104,2,'2018-12-26 04:15:52','Email','Added',NULL),(54,45,2,'2019-02-24 18:06:17','Email','Added',NULL),(55,9,2,'2018-10-10 01:40:18','Admin','Added',NULL),(56,128,2,'2019-04-18 01:48:13','Email','Added',NULL),(57,77,2,'2019-07-19 03:25:40','Email','Added',NULL),(58,103,2,'2019-07-13 19:59:08','Admin','Added',NULL),(59,156,2,'2019-06-10 05:10:20','Email','Added',NULL),(60,78,2,'2019-02-11 07:44:44','Admin','Added',NULL),(61,192,3,'2019-02-14 16:56:36','Email','Added',NULL),(62,97,3,'2018-09-23 16:32:47','Admin','Added',NULL),(63,117,3,'2019-06-15 05:32:40','Admin','Added',NULL),(64,39,3,'2019-03-12 02:35:40','Email','Added',NULL),(65,131,3,'2019-05-20 00:50:38','Admin','Added',NULL),(66,111,3,'2018-10-16 19:09:55','Admin','Added',NULL),(67,118,3,'2019-01-28 06:33:25','Email','Added',NULL),(68,148,3,'2019-05-22 03:17:02','Admin','Added',NULL),(69,81,3,'2018-10-02 02:32:37','Email','Added',NULL),(70,119,3,'2019-04-24 07:56:59','Admin','Added',NULL),(71,53,3,'2019-01-14 08:26:58','Admin','Added',NULL),(72,162,3,'2019-06-26 21:21:14','Email','Added',NULL),(73,101,3,'2018-12-21 20:36:38','Email','Added',NULL),(74,139,3,'2019-02-03 22:19:22','Email','Added',NULL),(75,199,3,'2018-10-15 08:09:04','Admin','Added',NULL),(76,167,4,'2019-04-10 21:01:17','Email','Added',NULL),(77,87,4,'2018-10-14 07:50:04','Admin','Added',NULL),(78,127,4,'2019-07-11 02:37:15','Admin','Added',NULL),(79,79,4,'2019-07-24 02:48:44','Admin','Added',NULL),(80,171,4,'2018-11-30 11:53:03','Admin','Added',NULL),(81,73,4,'2019-04-14 00:58:51','Admin','Added',NULL),(82,180,4,'2018-10-26 02:05:10','Email','Added',NULL),(83,123,4,'2019-04-23 15:02:26','Admin','Added',NULL);
 /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -1441,7 +1441,7 @@ 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,91,'http://rsempowermentassociation.org',1),(2,54,'http://poquosonwellnesstrust.org',1),(3,72,'http://bradfordliteracysolutions.org',1),(4,155,'http://bassettalliance.org',1),(5,196,'http://paartsacademy.org',1),(6,162,'http://unitedaction.org',1),(7,19,'http://addytrust.org',1),(8,65,'http://friendstechnologytrust.org',1),(9,142,'http://pinepoetrycenter.org',1),(10,145,'http://localcenter.org',1),(11,184,'http://friendsfood.org',1),(12,156,'http://mississippipeacecollective.org',1),(13,143,'http://mlkingagriculture.org',1),(14,121,'http://localeducationfellowship.org',1),(15,139,'http://kentuckycenter.org',1),(16,137,'http://globalnetwork.org',1);
+INSERT INTO `civicrm_website` (`id`, `contact_id`, `url`, `website_type_id`) VALUES (1,93,'http://ecadvocacycollective.org',1),(2,56,'http://missouriarts.org',1),(3,182,'http://cheshireaction.org',1),(4,191,'http://wmsportsschool.org',1),(5,186,'http://texastechnologypartners.org',1),(6,61,'http://atlantaagriculturesolutions.org',1),(7,138,'http://globalsportstrust.org',1),(8,83,'http://lcdevelopmentfellowship.org',1),(9,172,'http://localmusicalliance.org',1),(10,47,'http://simpsontechnologytrust.org',1),(11,175,'http://bakerpeacesolutions.org',1),(12,160,'http://maincenter.org',1),(13,4,'http://statescollective.org',1),(14,96,'http://northpointpoetry.org',1),(15,98,'http://baywellnesspartnership.org',1);
 /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -1473,7 +1473,7 @@ UNLOCK TABLES;
 /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
 
--- Dump completed on 2019-08-16  9:31:32
+-- Dump completed on 2019-09-20 12:57:30
 -- +--------------------------------------------------------------------+
 -- | CiviCRM version 5                                                  |
 -- +--------------------------------------------------------------------+
index 557c9242360bd74ac2506c56bec7e9c39785e671..1866eebb3ecf845ee4c749d18315be99da975ce3 100644 (file)
@@ -24,7 +24,7 @@
  +--------------------------------------------------------------------+
 *}
 <div class="help">
-    {ts}CiviCRM includes plugins for several mapping and geocoding web services. When your users save a contact or event location address, a geocoding service will convert the address into geographical coordinates, which are required for mapping. Yahoo&rsquo;s geocoder will also automatically populate the postal code field. Mapping services allow your users to display addresses on a map.{/ts} {help id='map-intro-id'}
+    {ts}CiviCRM includes plugins for several mapping and geocoding web services. When your users save a contact or event location address, a geocoding service will convert the address into geographical coordinates, which are required for mapping. Mapping services allow your users to display addresses on a map.{/ts} {help id='map-intro-id'}
 </div>
 <div class="crm-block crm-form-block crm-map-form-block">
     <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div>
@@ -47,7 +47,7 @@
          <tr class="crm-map-form-block-geoAPIKey">
              <td>{$form.geoAPIKey.label}</td>
              <td>{$form.geoAPIKey.html|crmAddClass:huge}<br />
-             <span class="description">{ts}Enter the API key or Application ID associated with your geocoding provider (not required for Yahoo).{/ts}</span></td>
+             <span class="description">{ts}Enter the API key or Application ID associated with your geocoding provider.{/ts}</span></td>
          </tr>
     </table>
     <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div>
index 1c6f5f9cfbe7e1d8fc4fe57c798fdaea5928d062..ae975c47a95a45ef2577a16c59f76def7da3f33d 100644 (file)
@@ -64,7 +64,7 @@
     </tr>
     <tr class="even">
         <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/setting/mapping" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}Mapping and Geocoding{/ts}</a></td>
-        <td>{ts}Configure a mapping provider (e.g. Google or Yahoo) to display maps for contact addresses and event locations.{/ts}</td>
+        <td>{ts}Configure a mapping provider (e.g. OpenStreetMap or Google) to display maps for contact addresses and event locations.{/ts}</td>
     </tr>
     <tr class="even">
         <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/setting/search" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}Search Settings{/ts}</a></td>
     <tr class="columnheader">
         <td colspan="2">{ts}Sending Emails (includes contribution receipts and event confirmations){/ts}</td>
     </tr>
-    <tr class="even">
-        <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/setting/smtp" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}Outbound Email{/ts}</a></td>
-        <td>{ts}Settings for outbound email - either SMTP server, port and authentication or Sendmail path and argument.{/ts}</td>
-    </tr>
     <tr class="even">
         <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/options/from_email_address" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}From Email Addresses{/ts}</a></td>
         <td>{ts}Define general email address(es) that can be used as the FROM address when sending email to contacts from within CiviCRM (e.g. info@example.org){/ts}</td>
     </tr>
+    <tr class="even">
+        <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/setting/smtp" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}Outbound Email{/ts}</a></td>
+        <td>{ts}Settings for outbound email - either SMTP server, port and authentication or Sendmail path and argument.{/ts}</td>
+    </tr>
 
     <tr class="columnheader">
         <td colspan="2">{ts}Online Contributions / Online Membership Signup / Online Event Registration{/ts}</td>
diff --git a/templates/CRM/Api4/Page/Api4Explorer.tpl b/templates/CRM/Api4/Page/Api4Explorer.tpl
new file mode 100644 (file)
index 0000000..e69de29
index 607abd348e9050d74e7c9a785a8d2cf700c68985..61d8adccf98ae0fb1facb18c05c79a8739cc537c 100644 (file)
@@ -24,7 +24,7 @@
  +--------------------------------------------------------------------+
 *}
 {include file="CRM/common/dashboard.tpl"}
-{include file="CRM/common/openFlashChart.tpl"}
+{include file="CRM/common/chart.tpl"}
 {* Alerts for critical configuration settings. *}
 {$communityMessages}
 <div class="crm-submit-buttons crm-dashboard-controls">
index 09210fae477d2afc6d7abad10075ab44b78a8665..69602e62486ae66acd331b22b873b03c118f07d8 100644 (file)
  | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
  +--------------------------------------------------------------------+
 *}
-{* relationship selector *}
+{* entity selector *}
 {crmRegion name="crm-contact-relationshipselector-pre"}
 {/crmRegion}
-<div class="crm-contact-relationship-{$context}">
+<div class="crm-contact-{$entityInClassFormat}-{$context}">
   <table
-    class="crm-contact-relationship-selector-{$context} crm-ajax-table"
-    data-ajax="{crmURL p="civicrm/ajax/contactrelationships" q="context=$context&cid=$contactId"}" style="width: 100%;">
+    class="crm-contact-{$entityInClassFormat}-selector-{$context} crm-ajax-table"
+    data-ajax="{crmURL p="civicrm/ajax/contactrelationships" q="context=$context&cid=$contactId"}"
+    data-order='[[0,"asc"],[1,"asc"]]'
+    style="width: 100%;">
     <thead>
     <tr>
-      <th data-data="relation" class='crm-contact-relationship-type'>{ts}Relationship{/ts}</th>
-      <th data-data="sort_name" class='crm-contact-relationship-contact_name'>&nbsp;</th>
-      <th data-data="start_date" class='crm-contact-relationship-start_date'>{ts}Start{/ts}</th>
-      <th data-data="end_date" class='crm-contact-relationship-end_date'>{ts}End{/ts}</th>
-      <th data-data="city" class='crm-contact-relationship-city'>{ts}City{/ts}</th>
-      <th data-data="state" class='crm-contact-relationship-state'>{ts}State/Prov{/ts}</th>
-      <th data-data="email" class='crm-contact-relationship-email'>{ts}Email{/ts}</th>
-      <th data-data="phone" class='crm-contact-relationship-phone'>{ts}Phone{/ts}</th>
-      <th data-data="links" data-orderable="false" class='crm-contact-relationship-links'></th>
+      {foreach from=$columnHeaders key=headerkey item=header}
+        {if $header.sort}
+          <th data-data="{$header.sort}" class="crm-contact-{$entityInClassFormat}-{$header.sort}">{$header.name}</th>
+        {else}
+          <th data-data="{$headerkey}" data-orderable="false" class="crm-contact-{$entityInClassFormat}-{$headerkey}">{$header.name}</th>
+        {/if}
+
+      {/foreach}
     </tr>
     </thead>
   </table>
index 4db862fc7dd1c39e580d4da3089e4896b08cb743..0faf575cd321f4ca40fdc8eb2cde1e5e55daf2ff 100644 (file)
 {* Display monthly and yearly contributions using Google charts (Bar and Pie) *}
 {if $hasContributions}
 <div id="chartData">
-<table class="chart">
-  <tr class="crm-contribution-form-block-open_flash_chart">
-     <td>
+<table >
+  <tr class="crm-contribution-form-block-chart">
+     <td width="50%">
          {if $hasByMonthChart}
              {* display monthly chart *}
-             <div id="open_flash_chart_by_month"></div>
+             <div id="chart_by_month"></div>
          {else}
        {ts}There were no contributions during the selected year.{/ts}
          {/if}
      </td>
-     <td>
+     <td width="50%">
           {* display yearly chart *}
-         <div id="open_flash_chart_by_year"></div>
+         <div id="chart_by_year"></div>
      </td>
   </tr>
 </table>
  </div>
 {/if}
 
-{if $hasOpenFlashChart}
-{include file="CRM/common/openFlashChart.tpl" contriChart=true}
+{if $hasChart}
+{include file="CRM/common/chart.tpl" contriChart=true}
 
 {literal}
 <script type="text/javascript">
 
   CRM.$(function($) {
-    var chartData = {/literal}{$openFlashChartData}{literal};
-    $.each(chartData, function(chartID, chartValues) {
-      createSWFObject(chartID, chartValues.divName, chartValues.size.xSize, chartValues.size.ySize, 'loadData');
-    });
-  });
+    var allData = {/literal}{$chartData}{literal};
 
-  function loadData( chartID ) {
-     var allData = {/literal}{$openFlashChartData}{literal};
-     return JSON.stringify(allData[chartID].object);
-  }
+    $.each( allData, function( chartID, chartValues ) {
+        var divName = "chart_" + chartID;
+        createChart( chartID, divName, 300, 300, allData[chartID].object );
+        });
 
-  function byMonthOnClick( barIndex ) {
-     var allData = {/literal}{$openFlashChartData}{literal};
-     var url     = eval( "allData.by_month.on_click_urls.url_" + barIndex );
-     if ( url ) window.location.href = url;
-  }
+    function byMonthOnClick( barIndex ) {
+       var url = allData.by_month.on_click_urls['url_' + barIndex];
+       if ( url ) window.location.href = url;
+    }
 
-  function byYearOnClick( barIndex ) {
-     var allData = {/literal}{$openFlashChartData}{literal};
-     var url     = eval( "allData.by_year.on_click_urls.url_" + barIndex );
-     if ( url ) window.location.href = url;
-  }
+    function byYearOnClick( barIndex ) {
+       var url = allData.by_year.on_click_urls['url_' + barIndex];
+       if ( url ) window.location.href = url;
+    }
 
- </script>
+  });
+</script>
 {/literal}
 {/if}
index 3b8a79fda7dea283567f1f912f19899f6d5ab208..007f33036bb90a1f8165dea6061aade14715b37d 100644 (file)
@@ -38,6 +38,9 @@
     <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div>
   <table class="form-layout-compressed">
   <tr class="crm-contribution-contributionpage-settings-form-block-title"><td class="label">{$form.title.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_contribution_page' field='title' id=$contributionPageID}{/if}</td><td>{$form.title.html}<br/>
+            <span class="description">{ts}This title will be displayed at the top of the page unless the frontend title field is filled out.<br />Please use only alphanumeric, spaces, hyphens and dashes for Title.{/ts}</td>
+  </tr>
+  <tr class="crm-contribution-contributionpage-settings-form-block-frontend-title"><td class="label">{$form.contribution_page_frontend_title.label} {if $action == 2}{include file='CRM/Core/I18n/Dialog.tpl' table='civicrm_contribution_page' field='frontend_title' id=$contributionPageID}{/if}</td><td>{$form.contribution_page_frontend_title.html}<br/>
             <span class="description">{ts}This title will be displayed at the top of the page.<br />Please use only alphanumeric, spaces, hyphens and dashes for Title.{/ts}</td>
   </tr>
   <tr class="crm-contribution-contributionpage-settings-form-block-financial_type_id"><td class="label">{$form.financial_type_id.label}</td><td>{$form.financial_type_id.html}<br />
index 1c3a09848fd29aac554bf227b371a162d9cafa58..ea7d3125ae53191ec4e3afe6ab0013f062e728a8 100644 (file)
@@ -46,7 +46,7 @@
                 {foreach from=$contribute_rows item=row}
                     <tr id='rowid{$row.contribution_id}'
                         class="{cycle values="odd-row,even-row"}{if $row.cancel_date} disabled{/if}">
-                        <td>{$row.total_amount|crmMoney:$row.currency} {if $row.amount_level } - {$row.amount_level} {/if}
+                        <td>{$row.total_amount|crmMoney:$row.currency} {if $row.amount_level && !is_array($row.amount_level)} - {$row.amount_level} {/if}
                             {if $row.contribution_recur_id}
                                 <br/>
                                 {ts}(Recurring Contribution){/ts}
index 461f8a8122c0ec842c430be1be1aa127e3007b7a..7c006e99e57e9decdc0b69b93ed8f3f39d942b1b 100644 (file)
     </div>
    {else}
       <table class="form-layout-compressed">
-        {if $context eq 'standalone'}
           <tr class="crm-pledge-form-contact-id">
             <td class="label">{$form.contact_id.label}</td>
             <td>{$form.contact_id.html}</td>
           </tr>
-        {else}
-          <tr class="crm-pledge-form-block-displayName">
-            <td class="font-size12pt right"><strong>{ts}Pledge by{/ts}</strong></td>
-            <td class="font-size12pt"><strong>{$displayName}</strong></td>
-          </tr>
-        {/if}
           <tr class="crm-pledge-form-block-amount">
             <td class="label">{$form.amount.label}</td>
             <td>
index b6c4bd37fe97576b66ca5ff2ab0a61028cfa91ad..f49ee1037580bcb1d23aaf2d4fe3608d8467556f 100644 (file)
  | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
  +--------------------------------------------------------------------+
 *}
-{assign var=uploadURL value=$config->imageUploadURL|replace:'/persist/contribute/':'/persist/'|cat:'openFlashChart/'}
+{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}
-<div class='crm-flashchart'>
-<table class="chart">
-        <tr>
-            <td>
-                {if $outputMode eq 'print' OR $outputMode eq 'pdf'}
-                    <img src="{$uploadURL|cat:$chartId}.png" />
-                {else}
-              <div id="open_flash_chart_{$uniqueId}"></div>
-                {/if}
-            </td>
-        </tr>
-</table>
-</div>
-
-{if !$printOnly} {* NO print section starts *}
-{if !$section}
-        {include file="CRM/common/openFlashChart.tpl" divId="open_flash_chart_$uniqueId"}
+  <div class='crm-chart'>
+    {if $outputMode eq 'print' OR $outputMode eq 'pdf'}
+      <img src="{$uploadURL|cat:$chartId}.png" />
+    {else}
+      <div id="chart_{$uniqueId}"></div>
+    {/if}
+  </div>
 {/if}
 
-{literal}
-<script type="text/javascript">
-   CRM.$(function($) {
-     buildChart( );
-
-     $("input[id$='submit_print'],input[id$='submit_pdf']").bind('click', function(e){
-       // image creator php file path and append image name
-       var url = CRM.url('civicrm/report/chart', 'name=' + '{/literal}{$chartId}{literal}' + '.png');
+{if !$printOnly} {* NO print section starts *}
+  {if !$section}
+    {include file="CRM/common/chart.tpl" divId="chart_$uniqueId"}
+  {/if}
+  {if $chartData}
+    {literal}
+    <script type="text/javascript">
+       CRM.$(function($) {
+         // Build all charts.
+         var allData = {/literal}{$chartData}{literal};
 
-       //fetch object and 'POST' image
-       swfobject.getObjectById("open_flash_chart_{/literal}{$uniqueId}{literal}").post_image(url, true, false);
-     });
+         $.each( allData, function( chartID, chartValues ) {
+           var divName = {/literal}"chart_{$uniqueId}"{literal};
+           createChart( chartID, divName, chartValues.size.xSize, chartValues.size.ySize, allData[chartID].object );
+         });
 
-     function buildChart( ) {
-       var chartData = {/literal}{$openFlashChartData}{literal};
-       $.each( chartData, function( chartID, chartValues ) {
-         var divName = {/literal}"open_flash_chart_{$uniqueId}"{literal};
-         var loadDataFunction  = {/literal}"loadData{$uniqueId}"{literal};
+         $("input[id$='submit_print'],input[id$='submit_pdf']").bind('click', function(e){
+           // image creator php file path and append image name
+           var url = CRM.url('civicrm/report/chart', 'name=' + '{/literal}{$chartId}{literal}' + '.png');
 
-         createSWFObject( chartID, divName, chartValues.size.xSize, chartValues.size.ySize, loadDataFunction );
+           //fetch object and 'POST' image
+           swfobject.getObjectById("chart_{/literal}{$uniqueId}{literal}").post_image(url, true, false);
+         });
        });
-     }
-   });
 
-  function loadData{/literal}{$uniqueId}{literal}( chartID ) {
-      var allData = {/literal}{$openFlashChartData}{literal};
-      return JSON.stringify(allData[chartID].object);
-  }
-</script>
-{/literal}
-{/if}
+    </script>
+    {/literal}
+  {/if}
 {/if}
index f091432f4734c437c5ed7ce4834766ddf4db508c..75df8102bfa074763fdb8c5fee48ce79e5cbbd73 100644 (file)
   </div>
 {/if}
 
-{if isset($browserPrint) and $browserPrint}
-{* Javascript window.print link. Used for public pages where we can't do printer-friendly view. *}
-<div id="printer-friendly">
-<a href="#" onclick="window.print(); return false;" title="{ts}Print this page.{/ts}">
-  <i class="crm-i fa-print"></i>
-</a>
-</div>
-{else}
-{* Printer friendly link/icon. *}
-<div id="printer-friendly">
-<a href="{$printerFriendly}" target='_blank' title="{ts}Printer-friendly view of this page.{/ts}">
-  <i class="crm-i fa-print"></i>
-</a>
-</div>
-{/if}
-
 {if $pageTitle}
   <div class="crm-title">
     <h1 class="title">{if $isDeleted}<del>{/if}{$pageTitle}{if $isDeleted}</del>{/if}</h1>
diff --git a/templates/CRM/common/chart.tpl b/templates/CRM/common/chart.tpl
new file mode 100644 (file)
index 0000000..1400408
--- /dev/null
@@ -0,0 +1,167 @@
+{*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+*}
+<script src="{$config->resourceBase}/bower_components/d3/d3.min.js"></script>
+<script src="{$config->resourceBase}/bower_components/crossfilter2/crossfilter.min.js"></script>
+<script src="{$config->resourceBase}/bower_components/dc-2.1.x/dc.min.js"></script>
+<style src="{$config->resourceBase}/bower_components/dc-2.1.x/dc.min.css"></style>
+{literal}
+<style>
+  .dc-chart path.domain {
+    fill: none;
+    stroke: black;
+  }
+</style>
+<script type="text/javascript">
+function createChart( chartID, divName, xSize, ySize, data ) {
+
+  var div = document.getElementById(divName);
+  if (!div) {
+    console.log("no element found for chart id ", divName);
+    return;
+  }
+
+  // Figure out suitable size based on container size.
+  // In some cases the containing element has no size. We should insist on a minimum size.
+  var w = Math.max(Math.min(div.clientWidth - 32, 800), 316);
+  var h = Math.min(400, parseInt(w / 2));
+
+  var chartNode = document.createElement('div');
+  var heading = document.createElement('h2');
+  heading.textContent = data.title;
+  heading.style.marginBottom = '1rem';
+  heading.style.textAlign = 'center';
+  div.style.width = w + 'px';
+  div.style.marginLeft = 'auto';
+  div.style.marginRight = 'auto';
+
+  var links = document.createElement('div');
+  links.style.textAlign = 'center';
+  links.style.marginBottom = '1rem';
+  var linkSVG = document.createElement('a');
+  linkSVG.href = '#';
+  linkSVG.textContent = 'Download chart (SVG)';
+  linkSVG.addEventListener('click', e => {
+    e.preventDefault();
+    e.stopPropagation();
+    // Create an image.
+    var svg = div.querySelector('svg');
+    var xml = new XMLSerializer().serializeToString(svg);
+    var image64 =  'data:image/svg+xml;base64,' + btoa(xml);
+
+    downloadImageUrl('image/svg+xml', image64, data.title.replace(/[^a-zA-Z0-9-]+/g, '') + '.svg');
+  });
+  function downloadImageUrl(mime, url, filename) {
+    var downloadLink = document.createElement('a');
+    downloadLink.download = filename;
+    downloadLink.href = url;
+    downloadLink.downloadurl = [mime, downloadLink.download, url].join(':');
+    document.body.append(downloadLink);
+    downloadLink.click();
+    document.body.removeChild(downloadLink);
+  }
+  var linkPNG = document.createElement('a');
+  linkPNG.href = '#';
+  linkPNG.textContent = 'Download chart (PNG)';
+  linkPNG.addEventListener('click', e => {
+    e.preventDefault();
+    e.stopPropagation();
+    // Create an image.
+
+    var canvas = document.createElement('canvas');
+    canvas.width = w;
+    canvas.height = h;
+    div.appendChild(canvas);
+
+    var svg = div.querySelector('svg');
+    var xml = new XMLSerializer().serializeToString(svg);
+    var svg64 = btoa(xml);
+    var b64Start = 'data:image/svg+xml;base64,';
+    var image64 = b64Start + svg64;
+
+    var img = document.createElement('img');
+    img.onload = function() {
+      canvas.getContext('2d').drawImage(img, 0, 0);
+      // canvas.style.display = 'block';
+      var imgURL = canvas.toDataURL('image/png');
+      downloadImageUrl('image/png', imgURL, data.title.replace(/[^a-zA-Z0-9-]+/g, '') + '.png');
+      div.removeChild(canvas);
+    };
+    img.src = image64;
+  });
+
+  links.appendChild(linkSVG);
+  links.appendChild(document.createTextNode(' | '));
+  links.appendChild(linkPNG);
+
+  var crossfilterData, ndx, dataDimension, dataGroup, chart;
+  ndx = crossfilter(data.values[0]);
+  dataDimension = ndx.dimension(d => d.label);
+  dataGroup = dataDimension.group().reduceSum(d => d.value);
+  var ordinals = data.values[0].map(d => d.label);
+
+  if (data.type === 'barchart') {
+    chart = dc.barChart(chartNode)
+      .width(w)
+      .height(h)
+      .dimension(dataDimension)
+      .group(dataGroup)
+      .gap(4) // px
+      .x(d3.scale.ordinal(ordinals).domain(ordinals))
+      .xUnits(dc.units.ordinal)
+      .margins({top: 10, right: 30, bottom: 30, left: 90})
+      .elasticY(true)
+      .renderLabel(false)
+      .renderHorizontalGridLines(true)
+      .title(item=> item.key + ': ' + item.value)
+      //.turnOnControls(true)
+      .renderTitle(true);
+  }
+  else if (data.type === 'piechart') {
+    chart = dc.pieChart(chartNode)
+      .width(w)
+      .height(h)
+      .radius(parseInt(h / 2) - 5) // define pie radius
+      .innerRadius(parseInt(h / 4) - 5) // optional
+      .externalRadiusPadding(5)
+      .legend(dc.legend().legendText(d => d.name).y(5))
+      .dimension(dataDimension)
+      .group(dataGroup)
+      .renderLabel(false)
+      .title(item=> item.key + ': ' + item.value)
+      .turnOnControls(true)
+      .renderTitle(true);
+  }
+  // Delay rendering so that animation looks good.
+  window.setTimeout(() => {
+    div.appendChild(heading);
+    div.appendChild(chartNode);
+    div.appendChild(links);
+
+    dc.renderAll();
+  }, 1500);
+}
+</script>
+{/literal}
index 71f11c2b84c0717f73676476754773a8caea24f3..7902146d48e99229887df16aee941b964c67ef4f 100644 (file)
     </div>
     {/if}
 
-{if $browserPrint}
-{* Javascript window.print link. Used for public pages where we can't do printer-friendly view. *}
-<div id="printer-friendly"><a href="#" onclick="window.print(); return false;" title="{ts}Print this page.{/ts}"><i class="crm-i fa-print"></i></a></div>
-{else}
-{* Printer friendly link/icon. *}
-<div id="printer-friendly"><a href="{$printerFriendly}" target='_blank' title="{ts}Printer-friendly view of this page.{/ts}"><i class="crm-i fa-print"></i></a></div>
-{/if}
-
 {if $pageTitle}
   <div class="crm-title">
     <h1 class="title">{if $isDeleted}<del>{/if}{$pageTitle}{if $isDeleted}</del>{/if}</h1>
diff --git a/templates/CRM/common/openFlashChart.tpl b/templates/CRM/common/openFlashChart.tpl
deleted file mode 100644 (file)
index 0995cd1..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-{*
- +--------------------------------------------------------------------+
- | CiviCRM version 5                                                  |
- +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2019                                |
- +--------------------------------------------------------------------+
- | This file is a part of CiviCRM.                                    |
- |                                                                    |
- | CiviCRM is free software; you can copy, modify, and distribute it  |
- | under the terms of the GNU Affero General Public License           |
- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
- |                                                                    |
- | CiviCRM is distributed in the hope that it will be useful, but     |
- | WITHOUT ANY WARRANTY; without even the implied warranty of         |
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
- | See the GNU Affero General Public License for more details.        |
- |                                                                    |
- | You should have received a copy of the GNU Affero General Public   |
- | License and the CiviCRM Licensing Exception along                  |
- | with this program; if not, contact CiviCRM LLC                     |
- | at info[AT]civicrm[DOT]org. If you have questions about the        |
- | GNU Affero General Public License or the licensing of CiviCRM,     |
- | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
- +--------------------------------------------------------------------+
-*}
-<script type="text/javascript" src="{$config->resourceBase}packages/OpenFlashChart/js/json/openflashchart.packed.js"></script>
-<script type="text/javascript" src="{$config->resourceBase}packages/OpenFlashChart/js/swfobject.js"></script>
-{literal}
-<script type="text/javascript">
-    function createSWFObject( chartID, divName, xSize, ySize, loadDataFunction ) {
-       var flashFilePath = {/literal}"{$config->resourceBase}packages/OpenFlashChart/open-flash-chart.swf"{literal};
-
-       //create object.
-       swfobject.embedSWF( flashFilePath, divName,
-                         xSize, ySize, "9.0.0",
-                         "expressInstall.swf",
-                         {"get-data":loadDataFunction, "id":chartID},
-                         null,
-                         {"wmode": 'transparent'}
-                        );
-    }
-  OFC = {};
-  OFC.jquery = {
-           name: "jQuery",
-             image: function(src) { return "<img src='data:image/png;base64," + $('#'+src)[0].get_img_binary() + "' />"},
-             popup: function(src) {
-             var img_win = window.open('', 'Save Chart as Image');
-             // HTML, HEAD, and BODY tags in JS literals obfuscated to avoid being parsed as DOM elements.
-             var html = 'html', head = 'head', body = 'body';
-           img_win.document.write('<' + html + '><' + head + '><title>Save Chart as Image<\/title><\/' + head + '><' + body + '>' + OFC.jquery.image(src) + ' <\/' + body + '><\/' + html + '>');
-           img_win.document.close();
-                       }
-                 }
-
-function save_image( divName ) {
-      var divId = {/literal}"{$contriChart}"{literal} ? 'open_flash_chart_'+divName : {/literal}"{$divId}"{literal};
-          if( !divId ) {
-               divId = 'open_flash_'+divName;
-        }
-      OFC.jquery.popup( divId );
-}
-
-</script>
-{/literal}
index 2cfb624e2a124bfc8b0a359eaec11ad8f9de22e1..258488ed768ee5020eb25756de99de47416b354f 100644 (file)
@@ -185,6 +185,18 @@ describe('crmCaseType', function() {
               "is_reserved": "0",
               "is_active": "1"
             },
+            {
+              "id": "10",
+              "name_a_b": "Homeless Services Coordinator is",
+              "label_a_b": "Homeless Services Coordinator is",
+              "name_b_a": "Homeless Services Coordinator",
+              "label_b_a": "Homeless Services Coordinator",
+              "description": "Homeless Services Coordinator",
+              "contact_type_a": "Individual",
+              "contact_type_b": "Individual",
+              "is_reserved": "0",
+              "is_active": "1"
+            },
             {
               "id": "2",
               "name_a_b": "Spouse of",
@@ -196,9 +208,24 @@ describe('crmCaseType', function() {
               "contact_type_b": "Individual",
               "is_reserved": "0",
               "is_active": "1"
+            },
+            // include one where name is different from label
+            {
+              "id": "27",
+              "name_a_b": "GA123ab",
+              "label_a_b": "Guardian Angel is",
+              "name_b_a": "GA123ba",
+              "label_b_a": "Guardian Angel for",
+              "description": "Guardian Angel.",
+              "contact_type_a": "Individual",
+              "contact_type_b": "Individual",
+              "is_reserved": "0",
+              "is_active": "1"
             }
           ]
         },
+        // Where is this used in the tests?
+        // It seems to be in the format for the activity assignee.
         relTypesForm: {
           values: [
             {
@@ -453,6 +480,181 @@ describe('crmCaseType', function() {
         }]);
       });
     });
+
+    describe('when adding a role', function() {
+      beforeEach(inject(function ($controller) {
+        ctrl = $controller('CaseTypeCtrl', {$scope: scope, apiCalls: apiCalls});
+      }));
+
+      it('updates the case roles', function() {
+
+        // This line sort of simulates selecting a relationship type from the
+        // dropdown. It doesn't test that clicking picks the right value to
+        // add, just that if it did then the function that gets called does
+        // the right thing with it.
+        // Note the value returned by the dropdown is "backwards", e.g.
+        // for the client perspective direction the dropdown returns the other
+        // direction, which is also what's stored in the xml.
+        scope.addRole(scope.caseType.definition.caseRoles, 'Case Coordinator');
+
+        expect(scope.caseType.definition.caseRoles).toEqual(
+          [
+            {
+              name: 'Homeless Services Coordinator',
+              creator: '1',
+              manager: '1',
+              displaylabel: 'Homeless Services Coordinator is'
+            },
+            {
+              name: 'Case Coordinator',
+              displaylabel: 'Case Coordinator is'
+            }
+          ]
+        );
+      });
+
+      it('updates case roles if choose non-client-perspective direction', function() {
+        // again, the dropdown returns the opposite direction
+        scope.addRole(scope.caseType.definition.caseRoles, 'Homeless Services Coordinator is');
+        expect(scope.caseType.definition.caseRoles).toEqual(
+          [
+            {
+              name: 'Homeless Services Coordinator',
+              creator: '1',
+              manager: '1',
+              displaylabel: 'Homeless Services Coordinator is'
+            },
+            {
+              name: 'Homeless Services Coordinator is',
+              displaylabel: 'Homeless Services Coordinator'
+            }
+          ]
+        );
+      });
+
+      it("doesn't add the same role twice", function() {
+        // This is in the mock casetype to start, so check if can add twice.
+        scope.addRole(scope.caseType.definition.caseRoles, 'Homeless Services Coordinator');
+        expect(scope.caseType.definition.caseRoles).toEqual(
+          [
+            {
+              name: 'Homeless Services Coordinator',
+              creator: '1',
+              manager: '1',
+              displaylabel: 'Homeless Services Coordinator is'
+            }
+          ]
+        );
+      });
+    });
+
+    describe('when adding a role on-the-fly', function() {
+      beforeEach(inject(function ($controller) {
+        ctrl = $controller('CaseTypeCtrl', {$scope: scope, apiCalls: apiCalls});
+      }));
+
+      it('updates the case roles for unidirectional', function() {
+        // first simulate the ajax popup to create a new relationship type
+        var newType = {
+          "id": "33",
+          "name_a_b": "Some New Type is",
+          "label_a_b": "Some New Type is",
+          "name_b_a": "Some New Type for",
+          "label_b_a": "Some New Type for",
+          "description": "Some New Type",
+          "contact_type_a": "Individual",
+          "contact_type_b": "Individual",
+          "is_reserved": "0",
+          "is_active": "1"
+        };
+        apiCalls.relTypes.values.push(newType);
+
+        // now let the real code do what it does with the new type
+        scope.addRoleOnTheFly(scope.caseType.definition.caseRoles, newType);
+
+        expect(scope.caseType.definition.caseRoles).toEqual(
+          [
+            {
+              name: 'Homeless Services Coordinator',
+              creator: '1',
+              manager: '1',
+              displaylabel: 'Homeless Services Coordinator is'
+            },
+            {
+              name: 'Some New Type for',
+              displaylabel: 'Some New Type is'
+            }
+          ]
+        );
+
+        expect(scope.relationshipTypeOptions.slice(-2)).toEqual(
+          [
+            {
+              id: 'Some New Type is',
+              text: 'Some New Type for'
+            },
+            {
+              id: 'Some New Type for',
+              text: 'Some New Type is'
+            }
+          ]
+        );
+      });
+
+      it('updates the case roles for bidirectional', function() {
+        // first simulate the ajax popup to create a new relationship type
+        var newType = {
+          "id": "34",
+          "name_a_b": "Friend of",
+          "label_a_b": "Friend of",
+          "name_b_a": "Friend of",
+          "label_b_a": "Friend of",
+          "description": "Friend",
+          "contact_type_a": "Individual",
+          "contact_type_b": "Individual",
+          "is_reserved": "0",
+          "is_active": "1"
+        };
+        apiCalls.relTypes.values.push(newType);
+
+        // now let the real code do what it does with the new type
+        scope.addRoleOnTheFly(scope.caseType.definition.caseRoles, newType);
+
+        expect(scope.caseType.definition.caseRoles).toEqual(
+          [
+            {
+              name: 'Homeless Services Coordinator',
+              creator: '1',
+              manager: '1',
+              displaylabel: 'Homeless Services Coordinator is'
+            },
+            {
+              name: 'Friend of',
+              displaylabel: 'Friend of'
+            }
+          ]
+        );
+
+        expect(scope.relationshipTypeOptions.slice(-1)).toEqual(
+          [
+            {
+              id: 'Friend of',
+              text: 'Friend of'
+            }
+          ]
+        );
+
+        // Check that it did NOT add two entries for this bidirectional type
+        expect(scope.relationshipTypeOptions.slice(-2,-1)).not.toEqual(
+          [
+            {
+              id: 'Friend of',
+              text: 'Friend of'
+            }
+          ]
+        );
+      });
+    });
   });
 
   describe('crmAddName', function () {
index 279f331bbe16218523fc52eddb5667b0c15e4633..0e47406b3e78563575ab85e364b36c61eb7d408c 100644 (file)
@@ -107,7 +107,10 @@ describe('crmMailingRadioDate', function() {
       var datenow = [year, month, day].join('-');
       var time = [hours, minutes, "00"].join(':');
       var currentDate = datenow + ' ' + time;
-      var ndate = new Date(datenow);
+      // Using datenow in the constructor here converts to local time. If not
+      // running on GMT (or east) then comparison to toDateString below fails.
+      // Also use month-1 because...javascript.
+      var ndate = new Date(year, month-1, day, 0, 0, 0);
       model.the_date = currentDate;
 
       $rootScope.$digest();
index 0b120f16f43bb59a76a414886b7a1ea357bf473f..bd8370cbceb1bee2e15e56189c0be0fe7e7bdb84 100644 (file)
@@ -94,7 +94,7 @@ class CRM_Contribute_BAO_ContributionRecurTest extends CiviUnitTestCase {
   }
 
   /**
-   * Test checking if contribution recurr object can allow for changes to financial types.
+   * Test checking if contribution recur object can allow for changes to financial types.
    *
    */
   public function testSupportFinancialTypeChange() {
@@ -130,4 +130,108 @@ class CRM_Contribute_BAO_ContributionRecurTest extends CiviUnitTestCase {
     $this->assertEquals('XAU', $dao->currency, 'Edit clobbered recur currency');
   }
 
+  /**
+   * Check test contributions aren't picked up as template for non-test recurs
+   *
+   */
+  public function testGetTemplateContributionMatchTest1() {
+    $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', $this->_params);
+    // Create a first contrib
+    $firstContrib = $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+    ]);
+    // Create a test contrib - should not be picked up as template for non-test recur
+    $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+      'is_test' => 1,
+    ]);
+    $fetchedTemplate = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($contributionRecur['id']);
+    $this->assertEquals($firstContrib['id'], $fetchedTemplate['id']);
+  }
+
+  /**
+   * Check non-test contributions aren't picked up as template for test recurs
+   *
+   */
+  public function testGetTemplateContributionMatchTest() {
+    $params = $this->_params;
+    $params['is_test'] = 1;
+    $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', $params);
+    // Create a first test contrib
+    $firstContrib = $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+      'is_test' => 1,
+    ]);
+    // Create a non-test contrib - should not be picked up as template for non-test recur
+    // This shouldn't occur - a live contrib against a test recur, but that's not the point...
+    $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+      'is_test' => 0,
+    ]);
+    $fetchedTemplate = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($contributionRecur['id']);
+    $this->assertEquals($firstContrib['id'], $fetchedTemplate['id']);
+  }
+
+  /**
+   * Test that is_template contribution is used where available
+   *
+   */
+  public function testGetTemplateContributionNewTemplate() {
+    $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', $this->_params);
+    // Create the template
+    $templateContrib = $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+      'is_template' => 1,
+    ]);
+    // Create another normal contrib
+    $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+    ]);
+    $fetchedTemplate = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($contributionRecur['id']);
+    // Fetched template should be the is_template, not the latest contrib
+    $this->assertEquals($fetchedTemplate['id'], $templateContrib['id']);
+  }
+
 }
index 0128b02c0de030e12d7feafdb46b11ff7bc5bd22..7213e1100dc69454e8a24a4f7efc5e536dc17ed4 100644 (file)
@@ -148,6 +148,12 @@ class CRM_Contribute_Import_Parser_ContributionTest extends CiviUnitTestCase {
     $values['contribution_status_id'] = 'just say no';
     $this->runImport($values, CRM_Import_Parser::DUPLICATE_UPDATE, CRM_Import_Parser::ERROR);
     $this->callAPISuccessGetCount('Contribution', ['contact_id' => $contactID], 2);
+
+    // Per https://lab.civicrm.org/dev/core/issues/1285 it's a bit arguable but Ok we can support id...
+    $values['contribution_status_id'] = 3;
+    $this->runImport($values, CRM_Import_Parser::DUPLICATE_UPDATE, NULL);
+    $this->callAPISuccessGetCount('Contribution', ['contact_id' => $contactID, 'contribution_status_id' => 3], 1);
+
   }
 
   /**
index ccb84063d02f066e8865b054e29073c6ccfbfa77..53c1456ea6e112c36671bdd3c37cff6f4063a5d0 100644 (file)
@@ -514,7 +514,7 @@ class CRM_Core_BAO_CustomFieldTest extends CiviUnitTestCase {
         'import' => 1,
         'custom_field_id' => $this->getCustomFieldID('text'),
         'options_per_line' => NULL,
-        'text_length' => NULL,
+        'text_length' => 300,
         'data_type' => 'String',
         'html_type' => 'Text',
         'is_search_range' => '0',
@@ -537,6 +537,7 @@ class CRM_Core_BAO_CustomFieldTest extends CiviUnitTestCase {
         'where' => 'civicrm_value_custom_group_' . $customGroupID . '.enter_text_here_' . $this->getCustomFieldID('text'),
         'extends_table' => 'civicrm_contact',
         'search_table' => 'contact_a',
+        'maxlength' => 300,
       ],
       $this->getCustomFieldName('select_string') => [
         'name' => $this->getCustomFieldName('select_string'),
index ee66811b23b46f0410841d96bc2458b2c9b25a3e..b8fc1773f7657bc0043069c71b3afd2549c54a88 100644 (file)
@@ -247,9 +247,9 @@ class CRM_Core_BAO_FinancialTrxnTest extends CiviUnitTestCase {
   }
 
   /**
-   * Test getPartialPaymentWithType function.
+   * Test testGetContributionBalance function.
    */
-  public function testGetPartialPaymentWithType() {
+  public function testGetContributionBalance() {
     //create the contribution that isn't paid yet
     $contactId = $this->individualCreate();
     $params = [
@@ -270,7 +270,7 @@ class CRM_Core_BAO_FinancialTrxnTest extends CiviUnitTestCase {
     ];
     $this->callAPISuccess('Payment', 'create', $params);
     //amount owed should be one cent
-    $amountOwed = CRM_Core_BAO_FinancialTrxn::getPartialPaymentWithType($contribution['id'], 'contribution')['amount_owed'];
+    $amountOwed = CRM_Contribute_BAO_Contribution::getContributionBalance($contribution['id']);
     $this->assertTrue(0.01 == $amountOwed, 'Amount does not match');
   }
 
index 7df8d0ec80ededa03ef451d664e60a0195c36021..8c780007592124162fee98b1d420ef5f01124714 100644 (file)
@@ -148,9 +148,7 @@ class CRM_Core_BAO_LocationTest extends CiviUnitTestCase {
 
     $params['contact_id'] = $contactId;
 
-    $location = CRM_Core_BAO_Location::create($params);
-
-    $locBlockId = CRM_Utils_Array::value('id', $location);
+    $locBlockId = CRM_Core_BAO_Location::create($params);
 
     //Now check DB for contact
     $searchParams = [
@@ -201,8 +199,6 @@ class CRM_Core_BAO_LocationTest extends CiviUnitTestCase {
     $compareParams = ['phone' => '9833910234'];
     $this->assertDBCompareValues('CRM_Core_DAO_Phone', $searchParams, $compareParams);
 
-    //delete the location block
-    CRM_Core_BAO_Location::deleteLocBlock($locBlockId);
     $this->contactDelete($contactId);
   }
 
@@ -267,8 +263,7 @@ class CRM_Core_BAO_LocationTest extends CiviUnitTestCase {
     //create location block.
     //with various element of location block
     //like address, phone, email, im.
-    $location = CRM_Core_BAO_Location::create($params, NULL, TRUE);
-    $locBlockId = CRM_Utils_Array::value('id', $location);
+    $locBlockId = CRM_Core_BAO_Location::create($params, NULL, TRUE)['id'];
 
     //update event record with location block id
     $eventParams = [
@@ -356,100 +351,6 @@ class CRM_Core_BAO_LocationTest extends CiviUnitTestCase {
     $this->contactDelete($this->_contactId);
   }
 
-  /**
-   * DeleteLocBlock() method
-   * delete the location block
-   * created with various elements.
-   */
-  public function testDeleteLocBlock() {
-    $this->_contactId = $this->individualCreate();
-    //create test event record.
-    $event = $this->eventCreate();
-    $params['location'][1] = [
-      'location_type_id' => 1,
-      'is_primary' => 1,
-      'address' => [
-        'street_address' => 'Saint Helier St',
-        'supplemental_address_1' => 'Hallmark Ct',
-        'supplemental_address_2' => 'Jersey Village',
-        'supplemental_address_3' => 'My Town',
-        'city' => 'Newark',
-        'postal_code' => '01903',
-        'country_id' => 1228,
-        'state_province_id' => 1029,
-        'geo_code_1' => '18.219023',
-        'geo_code_2' => '-105.00973',
-      ],
-      'email' => [
-        '1' => ['email' => 'john.smith@example.org'],
-      ],
-      'phone' => [
-        '1' => [
-          'phone_type_id' => 1,
-          'phone' => '303443689',
-        ],
-        '2' => [
-          'phone_type_id' => 2,
-          'phone' => '9833910234',
-        ],
-      ],
-      'im' => [
-        '1' => [
-          'name' => 'jane.doe',
-          'provider_id' => 1,
-        ],
-      ],
-    ];
-    $params['entity_id'] = $event['id'];
-    $params['entity_table'] = 'civicrm_event';
-
-    //create location block.
-    //with various elements
-    //like address, phone, email, im.
-    $location = CRM_Core_BAO_Location::create($params, NULL, TRUE);
-    $locBlockId = CRM_Utils_Array::value('id', $location);
-    //update event record with location block id
-    $eventParams = [
-      'id' => $event['id'],
-      'loc_block_id' => $locBlockId,
-    ];
-    CRM_Event_BAO_Event::add($eventParams);
-
-    //delete the location block
-    CRM_Core_BAO_Location::deleteLocBlock($locBlockId);
-
-    //Now check DB for location elements.
-    //Now check DB for Address
-    $this->assertDBNull('CRM_Core_DAO_Address', 'Saint Helier St', 'id', 'street_address',
-      'Database check, Address deleted successfully.'
-    );
-    //Now check DB for Email
-    $this->assertDBNull('CRM_Core_DAO_Email', 'john.smith@example.org', 'id', 'email',
-      'Database check, Email deleted successfully.'
-    );
-    //Now check DB for Phone
-    $this->assertDBNull('CRM_Core_DAO_Phone', '303443689', 'id', 'phone',
-      'Database check, Phone deleted successfully.'
-    );
-    //Now check DB for Mobile
-    $this->assertDBNull('CRM_Core_DAO_Phone', '9833910234', 'id', 'phone',
-      'Database check, Mobile deleted successfully.'
-    );
-    //Now check DB for IM
-    $this->assertDBNull('CRM_Core_DAO_IM', 'jane.doe', 'id', 'name',
-      'Database check, IM deleted successfully.'
-    );
-
-    //cleanup DB by deleting the record.
-    $this->eventDelete($event['id']);
-    $this->contactDelete($this->_contactId);
-
-    //Now check DB for Event
-    $this->assertDBNull('CRM_Event_DAO_Event', $event['id'], 'id', 'id',
-      'Database check, Event deleted successfully.'
-    );
-  }
-
   /**
    * GetValues() method
    * get the values of various location elements
index 4c0e6563a2be00394f65d7e69d0ce506729413db..008a052055201573ecc7f29630c5d57cb8d9411b 100644 (file)
@@ -75,10 +75,10 @@ class CRM_Core_BAO_RecurringEntityTest extends CiviUnitTestCase {
     $this->assertEquals(5, count($generatedEntities['civicrm_activity']), "Cehck if number of iterations are 5");
     $expectedDates = [
       '20141025103000',
-      '20141227103000',
-      '20150328103000',
-      '20150627103000',
-      '20150926103000',
+      '20150124103000',
+      '20150425103000',
+      '20150725103000',
+      '20151024103000',
     ];
     foreach ($generatedEntities['civicrm_activity'] as $entityID) {
       $this->assertDBNotNull('CRM_Activity_DAO_Activity', $entityID, 'id',
index a6fd93fce7d4a8381a761ffb84f156cc5dd97ebf..3f2ffdb4a09d35cfd689c5bc548176277fe5daa5 100644 (file)
@@ -121,6 +121,7 @@ class CRM_Export_BAO_ExportTest extends CiviUnitTestCase {
       ['contact_type' => 'Individual', 'name' => 'email', 1],
       ['name' => 'trxn_id'],
     ];
+    $this->hookClass->setHook('civicrm_export', array($this, 'confirmHookWasCalled'));
 
     $this->doExportTest([
       'ids' => $this->contributionIDs,
@@ -129,6 +130,20 @@ class CRM_Export_BAO_ExportTest extends CiviUnitTestCase {
       'exportMode' => CRM_Export_Form_Select::CONTRIBUTE_EXPORT,
       'componentClause' => 'civicrm_contribution.id IN ( ' . implode(',', $this->contributionIDs) . ')',
     ]);
+    $this->assertContains('display', array_values($this->csv->getHeader()));
+    $row = $this->csv->fetchOne(0);
+    $this->assertEquals('This is a test', $row['display']);
+  }
+
+  /**
+   * Implements hook_civicrm_export().
+   *
+   */
+  public function confirmHookWasCalled(&$exportTempTable, &$headerRows, &$sqlColumns, $exportMode, $componentTable, $ids) {
+    $sqlColumns['display'] = 'display varchar(255)';
+    $headerRows[] = 'display';
+    CRM_Core_DAO::executeQuery("ALTER TABLE $exportTempTable ADD COLUMN display varchar(255)");
+    CRM_Core_DAO::executeQuery("UPDATE $exportTempTable SET display = 'This is a test'");
   }
 
   /**
@@ -667,9 +682,14 @@ class CRM_Export_BAO_ExportTest extends CiviUnitTestCase {
     $this->setUpContactExportData();
     $this->entity = 'Contact';
     $this->createCustomGroupWithFieldsOfAllTypes();
+    $longString = 'Blah';
+    for ($i = 0; $i < 70; $i++) {
+      $longString .= 'Blah';
+    }
+
     $this->callAPISuccess('Contact', 'create', [
       'id' => $this->contactIDs[1],
-      $this->getCustomFieldName('text') => 'BlahdeBlah',
+      $this->getCustomFieldName('text') => $longString,
       $this->getCustomFieldName('country') => 'LA',
       'api.Address.create' => ['location_type_id' => 'Billing', 'city' => 'Waipu'],
     ]);
@@ -684,7 +704,7 @@ class CRM_Export_BAO_ExportTest extends CiviUnitTestCase {
       'ids' => [$this->contactIDs[1]],
     ]);
     $row = $this->csv->fetchOne();
-    $this->assertEquals('BlahdeBlah', $row['Enter text here']);
+    $this->assertEquals($longString, $row['Enter text here']);
     $this->assertEquals('Waipu', $row['Billing-City']);
     $this->assertEquals("Lao People's Democratic Republic", $row['Country']);
   }
@@ -1024,6 +1044,17 @@ class CRM_Export_BAO_ExportTest extends CiviUnitTestCase {
     $this->assertEquals(CRM_Contact_BAO_Contact::getMasterDisplayName($this->masterAddressID), $row['Home-Master Address Belongs To']);
   }
 
+  /**
+   * Test merging same address when specifying fields.
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \League\Csv\Exception
+   */
+  public function testMergeSameAddressSpecifyFields() {
+    $this->setUpContactSameAddressExportData();
+    $this->doExportTest(['mergeSameAddress' => TRUE, 'fields' => [['contact_type' => 'Individual', 'name' => 'master_id', 'location_type_id' => 1]]]);
+  }
+
   /**
    * Test the merge same address option.
    *
@@ -1158,6 +1189,31 @@ class CRM_Export_BAO_ExportTest extends CiviUnitTestCase {
     $this->assertCount(2, $this->csv);
   }
 
+  /**
+   * Test exporting when no rows are retrieved.
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \League\Csv\Exception
+   */
+  public function testExportNoRows() {
+    $contactA = $this->callAPISuccess('contact', 'create', [
+      'first_name' => 'John',
+      'last_name' => 'Doe',
+      'contact_type' => 'Individual',
+    ]);
+    $this->doExportTest([
+      'selectAll' => TRUE,
+      'ids' => [$contactA['id']],
+      'exportParams' => [
+        'postal_mailing_export' => [
+          'postal_mailing_export' => TRUE,
+        ],
+        'mergeSameAddress' => TRUE,
+      ],
+    ]);
+    $this->assertEquals('Contact ID', $this->csv->getHeader()[0]);
+  }
+
   /**
    * Test that deceased and do not mail contacts are removed from contacts before
    *
@@ -1182,6 +1238,21 @@ class CRM_Export_BAO_ExportTest extends CiviUnitTestCase {
       'contact_type' => 'Individual',
     ], $reason));
 
+    // Create another contact not included in the exporrt set.
+    $this->callAPISuccess('contact', 'create', array_merge([
+      'first_name' => 'Janet',
+      'last_name' => 'Doe',
+      'contact_type' => 'Individual',
+      'api.address.create' => ['supplemental_address_1' => 'An address'],
+    ], $reason));
+
+    // Create another contact not included in the exporrt set.
+    $this->callAPISuccess('contact', 'create', array_merge([
+      'first_name' => 'Janice',
+      'last_name' => 'Doe',
+      'contact_type' => 'Individual',
+    ], $reason));
+
     //create address for contact A
     $this->callAPISuccess('address', 'create', [
       'contact_id' => $contactA['id'],
diff --git a/tests/phpunit/CRM/Utils/Mail/EmailProcessorInboundTest.php b/tests/phpunit/CRM/Utils/Mail/EmailProcessorInboundTest.php
new file mode 100644 (file)
index 0000000..c461e05
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+
+/**
+ * Class CRM_Utils_Mail_EmailProcessorInboundTest
+ * @group headless
+ */
+class CRM_Utils_Mail_EmailProcessorInboundTest extends CiviUnitTestCase {
+
+  /**
+   * MailSettings record id.
+   *
+   * @var int
+   */
+  protected $mailSettingsId;
+
+  public function setUp() {
+    parent::setUp();
+    CRM_Utils_File::cleanDir(__DIR__ . '/data/mail');
+    mkdir(__DIR__ . '/data/mail');
+    // Note this is configured for Inbound Email Processing (not bounces)
+    // but otherwise is the same as bounces.
+    $this->mailSettingsId = $this->callAPISuccess('MailSettings', 'create', [
+      'name' => 'local',
+      'protocol' => 'Localdir',
+      'source' => __DIR__ . '/data/mail',
+      'domain' => 'example.com',
+      // a little weird - is_default=0 means for inbound email processing
+      'is_default' => '0',
+      'domain_id' => 1,
+    ])['id'];
+  }
+
+  public function tearDown() {
+    CRM_Utils_File::cleanDir(__DIR__ . '/data/mail');
+    $this->callAPISuccess('MailSettings', 'delete', [
+      'id' => $this->mailSettingsId,
+    ]);
+    parent::tearDown();
+  }
+
+  /**
+   * Fetch activities with many attachments
+   *
+   * In particular the default limit for the UI is 3, which is how this came up
+   * because it was also being used as a limit for backend processes. So we
+   * test 4, which is bigger than 3 (unless running on a 2-bit CPU).
+   */
+  public function testFetchActivitiesWithManyAttachments() {
+    $mail = 'test_message_many_attachments.eml';
+
+    // paranoid check that settings are the standard defaults
+    $currentUIMax = Civi::settings()->get('max_attachments');
+    $currentBackendMax = Civi::settings()->get('max_attachments_backend');
+    if ($currentUIMax > 3) {
+      Civi::settings()->set('max_attachments', 3);
+    }
+    if ($currentBackendMax < CRM_Core_BAO_File::DEFAULT_MAX_ATTACHMENTS_BACKEND) {
+      Civi::settings()->set('max_attachments_backend', CRM_Core_BAO_File::DEFAULT_MAX_ATTACHMENTS_BACKEND);
+    }
+
+    // create some contacts
+    $senderContactId = $this->individualCreate([], 1);
+    $senderContact = $this->callAPISuccess('Contact', 'getsingle', [
+      'id' => $senderContactId,
+    ]);
+    $recipientContactId = $this->individualCreate([], 2);
+    $recipientContact = $this->callAPISuccess('Contact', 'getsingle', [
+      'id' => $recipientContactId,
+    ]);
+
+    $templateFillData = [
+      'the_date' => date('r'),
+      'from_name' => $senderContact['display_name'],
+      'from_email' => $senderContact['email'],
+      'to_email' => $recipientContact['email'],
+    ];
+
+    // Retrieve the template and insert our data like current dates
+    $file_contents = file_get_contents(__DIR__ . '/data/inbound/' . $mail);
+    foreach ($templateFillData as $field => $value) {
+      $file_contents = str_replace("%%{$field}%%", $value, $file_contents);
+    }
+    // put it in the mail dir
+    file_put_contents(__DIR__ . '/data/mail/' . $mail, $file_contents);
+
+    // run the job
+    $this->callAPISuccess('job', 'fetch_activities', []);
+
+    // check that file was removed from mail dir
+    $this->assertFalse(file_exists(__DIR__ . '/data/mail/' . $mail));
+
+    // get the filed activity, by sender contact id
+    $activities = $this->callAPISuccess('Activity', 'get', [
+      'source_contact_id' => $senderContact['id'],
+    ]);
+    $this->assertEquals(1, $activities['count']);
+
+    // check subject
+    $activity = $activities['values'][$activities['id']];
+    $this->assertEquals('Testing 4 attachments', $activity['subject']);
+
+    // Check target is our recipient
+    $targets = $this->callAPISuccess('ActivityContact', 'get', [
+      'activity_id' => $activity['id'],
+      'record_type_id' => 'Activity Targets',
+    ]);
+    $this->assertEquals($recipientContact['id'], $targets['values'][$targets['id']]['contact_id']);
+
+    // Check we have 4 attachments
+    $attachments = $this->callAPISuccess('Attachment', 'get', [
+      'entity_id' => $activity['id'],
+      'entity_table' => 'civicrm_activity',
+    ]);
+    $this->assertEquals(4, $attachments['count']);
+
+    // reset in case it was different from defaults
+    Civi::settings()->set('max_attachments', $currentUIMax);
+    Civi::settings()->set('max_attachments_backend', $currentBackendMax);
+  }
+
+}
diff --git a/tests/phpunit/CRM/Utils/Mail/data/inbound/test_message_many_attachments.eml b/tests/phpunit/CRM/Utils/Mail/data/inbound/test_message_many_attachments.eml
new file mode 100644 (file)
index 0000000..6ee592f
--- /dev/null
@@ -0,0 +1,123 @@
+MIME-Version: 1.0\r
+Date: %%the_date%%\r
+Message-ID: <CAL+tpUmRn2J7zcjUAv4WXMTJZcEV67V2_Ktu77Ha_MGmth0CmQ@mail.gmail.com>\r
+Subject: Testing 4 attachments\r
+From: %%from_name%% <%%from_email%%>\r
+To: %%to_email%%\r
+Content-Type: multipart/mixed; boundary="000000000000a2ad5f059325db35"\r
+\r
+--000000000000a2ad5f059325db35\r
+Content-Type: multipart/alternative; boundary="000000000000a2ad5a059325db33"\r
+\r
+--000000000000a2ad5a059325db33\r
+Content-Type: text/plain; charset="UTF-8"\r
+\r
+test\r
+\r
+--000000000000a2ad5a059325db33\r
+Content-Type: text/html; charset="UTF-8"\r
+\r
+<div dir="ltr">test<br></div>\r
+\r
+--000000000000a2ad5a059325db33--\r
+--000000000000a2ad5f059325db35\r
+Content-Type: image/gif; name="c.gif"\r
+Content-Disposition: attachment; filename="c.gif"\r
+Content-Transfer-Encoding: base64\r
+X-Attachment-Id: f_k0v4qdju2\r
+Content-ID: <f_k0v4qdju2>\r
+\r
+R0lGODlhPwA+APcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV\r
+ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV\r
+mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr\r
+zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq\r
+/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr\r
+AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq\r
+M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA\r
+ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA\r
+mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/\r
+zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV\r
+/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/\r
+AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V\r
+M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V\r
+Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAA/AD4A\r
+AAjCAPcJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX\r
+IgHInAnT4MybOGvi3JmzJc+fNFcCHQpAJdCCP1HyVLjU5E6GT0tGhdpzZNWGV0NmXTgVZFesN62G\r
+jbi1Y1muY7WmfXh2Y9uEbzPGPTgXY92BXz/eFbjXYl6Ef/XODSz4bVOnh/EmRkx08cnGhKVClqmT\r
+aE2CSS9r3sy5s+fPoEOLHk26tOnTqFPXDAgAOw==\r
+--000000000000a2ad5f059325db35\r
+Content-Type: image/gif; name="b.gif"\r
+Content-Disposition: attachment; filename="b.gif"\r
+Content-Transfer-Encoding: base64\r
+X-Attachment-Id: f_k0v4qdjj1\r
+Content-ID: <f_k0v4qdjj1>\r
+\r
+R0lGODlhPwA+APcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV\r
+ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV\r
+mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr\r
+zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq\r
+/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr\r
+AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq\r
+M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA\r
+ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA\r
+mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/\r
+zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV\r
+/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/\r
+AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V\r
+M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V\r
+Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAA/AD4A\r
+AAjCAPcJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX\r
+IgHInAnT4MybOGvi3JmzJc+fNFcCHQpAJdCCP1HyVLjU5E6GT0tGhdpzZNWGV0NmXTgVZFesN62G\r
+jbi1Y1muY7WmfXh2Y9uEbzPGPTgXY92BXz/eFbjXYl6Ef/XODSz4bVOnh/EmRkx08cnGhKVClqmT\r
+aE2CSS9r3sy5s+fPoEOLHk26tOnTqFPXDAgAOw==\r
+--000000000000a2ad5f059325db35\r
+Content-Type: image/gif; name="d.gif"\r
+Content-Disposition: attachment; filename="d.gif"\r
+Content-Transfer-Encoding: base64\r
+X-Attachment-Id: f_k0v4qdk73\r
+Content-ID: <f_k0v4qdk73>\r
+\r
+R0lGODlhPwA+APcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV\r
+ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV\r
+mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr\r
+zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq\r
+/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr\r
+AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq\r
+M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA\r
+ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA\r
+mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/\r
+zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV\r
+/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/\r
+AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V\r
+M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V\r
+Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAA/AD4A\r
+AAjCAPcJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX\r
+IgHInAnT4MybOGvi3JmzJc+fNFcCHQpAJdCCP1HyVLjU5E6GT0tGhdpzZNWGV0NmXTgVZFesN62G\r
+jbi1Y1muY7WmfXh2Y9uEbzPGPTgXY92BXz/eFbjXYl6Ef/XODSz4bVOnh/EmRkx08cnGhKVClqmT\r
+aE2CSS9r3sy5s+fPoEOLHk26tOnTqFPXDAgAOw==\r
+--000000000000a2ad5f059325db35\r
+Content-Type: image/gif; name="a.gif"\r
+Content-Disposition: attachment; filename="a.gif"\r
+Content-Transfer-Encoding: base64\r
+X-Attachment-Id: f_k0v4qdiv0\r
+Content-ID: <f_k0v4qdiv0>\r
+\r
+R0lGODlhPwA+APcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV\r
+ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV\r
+mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr\r
+zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq\r
+/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr\r
+AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq\r
+M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA\r
+ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA\r
+mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/\r
+zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV\r
+/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/\r
+AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V\r
+M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V\r
+Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAA/AD4A\r
+AAjCAPcJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX\r
+IgHInAnT4MybOGvi3JmzJc+fNFcCHQpAJdCCP1HyVLjU5E6GT0tGhdpzZNWGV0NmXTgVZFesN62G\r
+jbi1Y1muY7WmfXh2Y9uEbzPGPTgXY92BXz/eFbjXYl6Ef/XODSz4bVOnh/EmRkx08cnGhKVClqmT\r
+aE2CSS9r3sy5s+fPoEOLHk26tOnTqFPXDAgAOw==\r
+--000000000000a2ad5f059325db35--\r
index a90b465d6fe53cf148f3efe3b08afe448fbc48d8..002000891be31e5174b5cc53bae4d554d1c53ab6 100644 (file)
@@ -195,6 +195,7 @@ trait CRMTraits_Custom_CustomDataTrait {
       'is_required' => 1,
       'sequential' => 1,
       'is_searchable' => 1,
+      'text_length' => 300,
     ], $params);
 
     return $this->callAPISuccess('CustomField', 'create', $params)['values'][0];
index b41dbf4a7eb0bc969d42d2fbe39fff2be3c13875..209a3f82ae6716c78a33546658547af4c3e44b39 100644 (file)
@@ -40,9 +40,9 @@ trait CRMTraits_Profile_ProfileTrait {
    * @param array $ufGroupParams
    */
   protected function createJoinedProfile($joinParams, $ufGroupParams = []) {
-    $this->createProfile($ufGroupParams);
+    $profileID = $this->createProfile($ufGroupParams);
     $joinParams = array_merge([
-      'uf_group_id' => 'our profile',
+      'uf_group_id' => $profileID,
       'entity_table' => 'civicrm_contribution_page',
       'weight' => 1,
     ], $joinParams);
@@ -59,6 +59,8 @@ trait CRMTraits_Profile_ProfileTrait {
    * Create a profile.
    *
    * @param $ufGroupParams
+   *
+   * @return int
    */
   protected function createProfile($ufGroupParams) {
     $profile = $this->callAPISuccess('UFGroup', 'create', array_merge([
@@ -74,6 +76,31 @@ trait CRMTraits_Profile_ProfileTrait {
       'uf_group_id' => $profile['id'],
       'field_name' => 'first_name',
     ]);
+    return $profile['id'];
+  }
+
+  /**
+   * Ensure we don't have a profile with the id or one to ensure that we are not casting an array to it.
+   */
+  protected function eliminateUFGroupOne() {
+    $profileID = $this->createProfile(['name' => 'dummy_for_removing']);
+    CRM_Core_DAO::executeQuery("UPDATE civicrm_uf_join SET uf_group_id = $profileID WHERE uf_group_id = 1");
+    CRM_Core_DAO::executeQuery("UPDATE civicrm_uf_field SET uf_group_id = $profileID WHERE uf_group_id = 1");
+    CRM_Core_DAO::executeQuery('UPDATE civicrm_uf_group SET id = 900 WHERE id = 1');
+    $this->ids['UFGroup']['dummy'] = $profileID;
+  }
+
+  /**
+   * Bring back UF group one.
+   */
+  protected function restoreUFGroupOne() {
+    if (!isset($this->ids['UFGroup']['dummy'])) {
+      return;
+    }
+    $profileID = $this->ids['UFGroup']['dummy'];
+    CRM_Core_DAO::executeQuery('UPDATE civicrm_uf_group SET id = 1 WHERE id = 900');
+    CRM_Core_DAO::executeQuery("UPDATE civicrm_uf_join SET uf_group_id = 1 WHERE uf_group_id = $profileID");
+    CRM_Core_DAO::executeQuery("UPDATE civicrm_uf_field SET uf_group_id = 1 WHERE uf_group_id = $profileID");
   }
 
 }
index 0b685ffe69109429942a3401c61fb2634e5ba516..8cc6355d740174084fb3ccc21fbff8027d7ad92c 100644 (file)
@@ -334,12 +334,6 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
     // disable any left-over test extensions
     CRM_Core_DAO::executeQuery('DELETE FROM civicrm_extension WHERE full_name LIKE "test.%"');
 
-    $extensions = \CRM_Extension_System::singleton()->getManager();
-    $api4Status = $extensions->getStatus('org.civicrm.api4');
-    if ($api4Status != $extensions::STATUS_INSTALLED && $api4Status != $extensions::STATUS_UNKNOWN) {
-      $extensions->enable(['org.civicrm.api4']);
-    }
-
     // reset all the caches
     CRM_Utils_System::flushCache();
 
index 5a05bcabf9e7d7a82d579067ce68555b70292759..4c1fff3cd2570d698567df26adf1e7bb6dbe4e77 100644 (file)
@@ -24,8 +24,32 @@ if (CIVICRM_UF === 'UnitTests') {
   Civi\Test::headless()->apply();
 }
 
+spl_autoload_register(function($class) {
+  _phpunit_mockoloader('api\\v4\\', "tests/phpunit/api/v4/", $class);
+  _phpunit_mockoloader('Civi\\Api4\\', "tests/phpunit/api/v4/Mock/Api4/", $class);
+});
+
 // ------------------------------------------------------------------------------
 
+/**
+ * @param $prefix
+ * @param $base_dir
+ * @param $class
+ */
+function _phpunit_mockoloader($prefix, $base_dir, $class) {
+  $len = strlen($prefix);
+  if (strncmp($prefix, $class, $len) !== 0) {
+    return;
+  }
+
+  global $civicrm_root;
+  $relative_class = substr($class, $len);
+  $file = $civicrm_root . '/' . $base_dir . str_replace('\\', '/', $relative_class) . '.php';
+  if (file_exists($file)) {
+    require $file;
+  }
+}
+
 /**
  * Call the "cv" command.
  *
index 28a12cd926a7ef0db94d813854b216f2b9372d0b..631dc3a92252bb1dca18330e8a1e0f34554be8ef 100644 (file)
@@ -935,6 +935,7 @@ class api_v3_ContributionPageTest extends CiviUnitTestCase {
     $this->assertEquals($membership['contact_id'], $contribution['contact_id']);
     $this->assertEquals($expectedMembershipStatus, $membership['status_id']);
     $this->callAPISuccess('contribution_recur', 'getsingle', ['id' => $contribution['contribution_recur_id']]);
+    $this->assertEquals($contribution['contribution_recur_id'], $membership['contribution_recur_id']);
 
     $this->callAPISuccess('line_item', 'getsingle', ['contribution_id' => $contribution['id'], 'entity_id' => $membership['id']]);
     //renew it with processor setting completed - should extend membership
index be3c2059ecd7d5c98f88bf73b61aea3b03455fd9..a63b33bb9a45ba4a4da491b61d2aea4bfe60fdf5 100644 (file)
@@ -117,13 +117,15 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
 
   /**
    * Clean up after each test.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function tearDown() {
     $this->quickCleanUpFinancialEntities();
     $this->quickCleanup(['civicrm_uf_match']);
     $financialAccounts = $this->callAPISuccess('FinancialAccount', 'get', []);
     foreach ($financialAccounts['values'] as $financialAccount) {
-      if ($financialAccount['name'] == 'Test Tax financial account ' || $financialAccount['name'] == 'Test taxable financial Type') {
+      if ($financialAccount['name'] === 'Test Tax financial account ' || $financialAccount['name'] === 'Test taxable financial Type') {
         $entityFinancialTypes = $this->callAPISuccess('EntityFinancialAccount', 'get', [
           'financial_account_id' => $financialAccount['id'],
         ]);
@@ -133,6 +135,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
         $this->callAPISuccess('FinancialAccount', 'delete', ['id' => $financialAccount['id']]);
       }
     }
+    $this->restoreUFGroupOne();
   }
 
   /**
@@ -3058,6 +3061,9 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
     $this->_individualId = $this->createLoggedInUser();
     $contributionID = $this->createPendingParticipantContribution();
     $this->createJoinedProfile(['entity_id' => $this->_ids['event']['test'], 'entity_table' => 'civicrm_event']);
+    $this->createJoinedProfile(['entity_id' => $this->_ids['event']['test'], 'entity_table' => 'civicrm_event', 'weight' => 2], ['name' => 'post_1', 'title' => 'title_post_2', 'frontend_title' => 'public 2']);
+    $this->createJoinedProfile(['entity_id' => $this->_ids['event']['test'], 'entity_table' => 'civicrm_event', 'weight' => 3], ['name' => 'post_2', 'title' => 'title_post_3', 'frontend_title' => 'public 3']);
+    $this->eliminateUFGroupOne();
 
     $this->callAPISuccess('contribution', 'completetransaction', [
       'id' => $contributionID,
@@ -3074,7 +3080,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
       'contact_id' => $this->_individualId,
     ])['values'];
 
-    $this->assertEquals(3, count($activities));
+    $this->assertCount(3, $activities);
     $activityNames = array_count_values(CRM_Utils_Array::collect('activity_name', $activities));
     // record two activities before and after completing payment for Event registration
     $this->assertEquals(2, $activityNames['Event Registration']);
@@ -3087,7 +3093,9 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
       'This letter is a confirmation that your registration has been received and your status has been updated to Registered.',
       'First Name: Logged In',
       'Public title',
-    ], ['Back end title']);
+      'public 2',
+      'public 3',
+    ], ['Back end title', 'title_post_2', 'title_post_3']);
     $mut->stop();
   }
 
index b037e91f4b2903eed76fe7c6de2cb8753ce4be8f..378150e185187b518598acf91f987841908a6ff5 100644 (file)
@@ -620,4 +620,35 @@ class api_v3_CustomValueTest extends CiviUnitTestCase {
     $this->assertEquals(count($customFieldValues), $result['count']);
   }
 
+  /**
+   * Test getdisplayvalue api and verify if it returns
+   * the custom text for display.
+   */
+  public function testGetDisplayValue() {
+    list($cid, $customFieldValues) = $this->_testGetCustomValueMultiple();
+    foreach ($customFieldValues as $field => $value) {
+      list(, $customFieldID) = explode("_", $field);
+      $result = $this->callAPISuccess('CustomValue', 'getdisplayvalue', [
+        'entity_id' => $cid,
+        'custom_field_id' => $customFieldID,
+      ]);
+      $expectedValue = [
+        'display' => $value,
+        'raw' => $value,
+      ];
+      $this->checkArrayEquals($result['values'][$customFieldID], $expectedValue);
+
+      $customDisplayValue = $this->callAPISuccess('CustomValue', 'getdisplayvalue', [
+        'entity_id' => $cid,
+        'custom_field_id' => $customFieldID,
+        'custom_field_value' => "Test Custom Display - {$value}",
+      ]);
+      $expectedValue = [
+        'display' => "Test Custom Display - {$value}",
+        'raw' => "Test Custom Display - {$value}",
+      ];
+      $this->checkArrayEquals($customDisplayValue['values'][$customFieldID], $expectedValue);
+    }
+  }
+
 }
index 1d8fa229707699abd2981bdb36250c06e1eeb91d..6cdf544f88a4973df24078f86eeb61a6df5a73cb 100644 (file)
@@ -119,6 +119,30 @@ class api_v3_JobProcessMailingTest extends CiviUnitTestCase {
     $this->_mut->assertRecipients($this->getRecipients(1, 2));
   }
 
+  /**
+   * Test what happens when a contact is set to decesaed
+   */
+  public function testDecesasedRecepient() {
+    $contactID = $this->individualCreate(['first_name' => 'test dead recipeint', 'email' => 'mailtestdead@civicrm.org']);
+    $this->callAPISuccess('group_contact', 'create', [
+      'contact_id' => $contactID,
+      'group_id' => $this->_groupID,
+      'status' => 'Added',
+    ]);
+    $this->createContactsInGroup(2, $this->_groupID);
+    Civi::settings()->add([
+      'mailerBatchLimit' => 2,
+    ]);
+    $mailing = $this->callAPISuccess('mailing', 'create', $this->_params);
+    $this->assertEquals(3, $this->callAPISuccess('MailingRecipients', 'get', ['mailing_id' => $mailing['id']])['count']);
+    $this->_mut->assertRecipients([]);
+    $this->callAPISuccess('Contact', 'create', ['id' => $contactID, 'is_deceased' => 1, 'contact_type' => 'Individual']);
+    $this->callAPISuccess('job', 'process_mailing', []);
+    // Check that the deceased contact is not found in the mailing.
+    $this->_mut->assertRecipients($this->getRecipients(1, 2));
+
+  }
+
   /**
    * Test pause and resume on Mailing.
    */
index f8e1d8bc2c9f349c6bff6d6e5d52cd91dc11e86d..6434ffbfd1abdf49f4333a6310d985f6ae539c19 100644 (file)
@@ -132,6 +132,16 @@ class api_v3_MailingTest extends CiviUnitTestCase {
     $this->assertTrue(isset($types['values']['traditional']));
   }
 
+  /**
+   * Check that default header+footer are available.
+   */
+  public function testHeaderFooterOptions() {
+    $headers = $this->callAPISuccess('Mailing', 'getoptions', ['field' => 'header']);
+    $this->assertTrue(in_array('Mailing Header', $headers['values']));
+    $footers = $this->callAPISuccess('Mailing', 'getoptions', ['field' => 'footer']);
+    $this->assertTrue(in_array('Mailing Footer', $footers['values']));
+  }
+
   /**
    * The `template_options` field should be treated a JSON object.
    *
index 09895d9acb7bee16c48d896732d9ea70012136ca..b90fc7a96baccb9cc070f6b0477047a38da5cd93 100644 (file)
@@ -107,6 +107,52 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     ]);
   }
 
+  /**
+   * Retrieve Payment using trxn_id.
+   */
+  public function testGetPaymentWithTrxnID() {
+    $this->_individualId2 = $this->individualCreate();
+    $params1 = [
+      'contact_id' => $this->_individualId,
+      'trxn_id' => 111111,
+      'total_amount' => 10,
+    ];
+    $contributionID1 = $this->contributionCreate($params1);
+
+    $params2 = [
+      'contact_id' => $this->_individualId2,
+      'trxn_id' => 222222,
+      'total_amount' => 20,
+    ];
+    $contributionID2 = $this->contributionCreate($params2);
+
+    $paymentParams = ['trxn_id' => 111111];
+    $payment = $this->callAPISuccess('payment', 'get', $paymentParams);
+    $expectedResult = [
+      $payment['id'] => [
+        'total_amount' => 10,
+        'trxn_id' => 111111,
+        'status_id' => 1,
+        'is_payment' => 1,
+        'contribution_id' => $contributionID1,
+      ],
+    ];
+    $this->checkPaymentResult($payment, $expectedResult);
+
+    $paymentParams = ['trxn_id' => 222222];
+    $payment = $this->callAPISuccess('payment', 'get', $paymentParams);
+    $expectedResult = [
+      $payment['id'] => [
+        'total_amount' => 20,
+        'trxn_id' => 222222,
+        'status_id' => 1,
+        'is_payment' => 1,
+        'contribution_id' => $contributionID2,
+      ],
+    ];
+    $this->checkPaymentResult($payment, $expectedResult);
+  }
+
   /**
    * Test email receipt for partial payment.
    */
index f2dfc32a81509cd58b75254c341908577d4697e1..0204d4d73583d93c3a92d29ff6ae3c618748a05c 100644 (file)
@@ -87,10 +87,34 @@ class api_v3_SystemCheckTest extends CiviUnitTestCase {
     $this->assertEquals($testedCheck['is_visible'], '0', 'in line ' . __LINE__);
   }
 
+  /**
+   * Disabled items should never show up.
+   *
+   * @param int $version
+   *
+   * @dataProvider versionThreeAndFour
+   */
+  public function testIsInactive($version) {
+    $this->_apiversion = $version;
+    $this->callAPISuccess('StatusPreference', 'create', [
+      'name' => 'checkDefaultMailbox',
+      'is_active' => 0,
+    ]);
+    $result = $this->callAPISuccess('System', 'check', [])['values'];
+    foreach ($result as $check) {
+      if ($check['name'] === 'checkDefaultMailbox') {
+        $this->fail('Check should have been skipped');
+      }
+    }
+  }
+
   /**
    * Items hushed through tomorrow shouldn't show up.
+   *
    * @param int $version
+   *
    * @dataProvider versionThreeAndFour
+   * @throws \Exception
    */
   public function testSystemCheckHushFuture($version) {
     $this->_apiversion = $version;
@@ -103,7 +127,7 @@ class api_v3_SystemCheckTest extends CiviUnitTestCase {
     $statusPreference = $this->callAPISuccess('StatusPreference', 'create', $this->_params);
     $result = $this->callAPISuccess('System', 'check', []);
     foreach ($result['values'] as $check) {
-      if ($check['name'] == 'checkDefaultMailbox') {
+      if ($check['name'] === 'checkDefaultMailbox') {
         $testedCheck = $check;
         break;
       }
diff --git a/tests/phpunit/api/v4/Action/BaseCustomValueTest.php b/tests/phpunit/api/v4/Action/BaseCustomValueTest.php
new file mode 100644 (file)
index 0000000..e75acdc
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+use api\v4\Traits\TableDropperTrait;
+
+abstract class BaseCustomValueTest extends UnitTestCase {
+
+  use \api\v4\Traits\OptionCleanupTrait {
+    setUp as setUpOptionCleanup;
+  }
+  use TableDropperTrait;
+
+  /**
+   * Set up baseline for testing
+   */
+  public function setUp() {
+    $this->setUpOptionCleanup();
+    $cleanup_params = [
+      'tablesToTruncate' => [
+        'civicrm_custom_group',
+        'civicrm_custom_field',
+      ],
+    ];
+
+    $this->dropByPrefix('civicrm_value_mycontact');
+    $this->cleanup($cleanup_params);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/BasicActionsTest.php b/tests/phpunit/api/v4/Action/BasicActionsTest.php
new file mode 100644 (file)
index 0000000..0f546d8
--- /dev/null
@@ -0,0 +1,218 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+use Civi\Api4\MockBasicEntity;
+
+/**
+ * @group headless
+ */
+class BasicActionsTest extends UnitTestCase {
+
+  public function testCrud() {
+    MockBasicEntity::delete()->addWhere('id', '>', 0)->execute();
+
+    $id1 = MockBasicEntity::create()->addValue('foo', 'one')->execute()->first()['id'];
+
+    $result = MockBasicEntity::get()->execute();
+    $this->assertCount(1, $result);
+
+    $id2 = MockBasicEntity::create()->addValue('foo', 'two')->execute()->first()['id'];
+
+    $result = MockBasicEntity::get()->selectRowCount()->execute();
+    $this->assertEquals(2, $result->count());
+
+    MockBasicEntity::update()->addWhere('id', '=', $id2)->addValue('foo', 'new')->execute();
+
+    $result = MockBasicEntity::get()->addOrderBy('id', 'DESC')->setLimit(1)->execute();
+    $this->assertCount(1, $result);
+    $this->assertEquals('new', $result->first()['foo']);
+
+    $result = MockBasicEntity::save()
+      ->addRecord(['id' => $id1, 'foo' => 'one updated'])
+      ->addRecord(['id' => $id2])
+      ->addRecord(['foo' => 'three'])
+      ->addDefault('color', 'pink')
+      ->setReload(TRUE)
+      ->execute()
+      ->indexBy('id');
+
+    $this->assertEquals('new', $result[$id2]['foo']);
+    $this->assertEquals('three', $result->last()['foo']);
+    $this->assertCount(3, $result);
+    foreach ($result as $item) {
+      $this->assertEquals('pink', $item['color']);
+    }
+
+    $this->assertEquals('one updated', MockBasicEntity::get()->addWhere('id', '=', $id1)->execute()->first()['foo']);
+
+    MockBasicEntity::delete()->addWhere('id', '=', $id2);
+    $result = MockBasicEntity::get()->execute();
+    $this->assertEquals('one updated', $result->first()['foo']);
+  }
+
+  public function testReplace() {
+    MockBasicEntity::delete()->addWhere('id', '>', 0)->execute();
+
+    $objects = [
+      ['group' => 'one', 'color' => 'red'],
+      ['group' => 'one', 'color' => 'blue'],
+      ['group' => 'one', 'color' => 'green'],
+      ['group' => 'two', 'color' => 'orange'],
+    ];
+
+    foreach ($objects as &$object) {
+      $object['id'] = MockBasicEntity::create()->setValues($object)->execute()->first()['id'];
+    }
+
+    // Keep red, change blue, delete green, and add yellow
+    $replacements = [
+      ['color' => 'red', 'id' => $objects[0]['id']],
+      ['color' => 'not blue', 'id' => $objects[1]['id']],
+      ['color' => 'yellow'],
+    ];
+
+    MockBasicEntity::replace()->addWhere('group', '=', 'one')->setRecords($replacements)->execute();
+
+    $newObjects = MockBasicEntity::get()->addOrderBy('id', 'DESC')->execute()->indexBy('id');
+
+    $this->assertCount(4, $newObjects);
+
+    $this->assertEquals('yellow', $newObjects->first()['color']);
+
+    $this->assertEquals('not blue', $newObjects[$objects[1]['id']]['color']);
+
+    // Ensure group two hasn't been altered
+    $this->assertEquals('orange', $newObjects[$objects[3]['id']]['color']);
+    $this->assertEquals('two', $newObjects[$objects[3]['id']]['group']);
+  }
+
+  public function testBatchFrobnicate() {
+    MockBasicEntity::delete()->addWhere('id', '>', 0)->execute();
+
+    $objects = [
+      ['group' => 'one', 'color' => 'red', 'number' => 10],
+      ['group' => 'one', 'color' => 'blue', 'number' => 20],
+      ['group' => 'one', 'color' => 'green', 'number' => 30],
+      ['group' => 'two', 'color' => 'blue', 'number' => 40],
+    ];
+    foreach ($objects as &$object) {
+      $object['id'] = MockBasicEntity::create()->setValues($object)->execute()->first()['id'];
+    }
+
+    $result = MockBasicEntity::batchFrobnicate()->addWhere('color', '=', 'blue')->execute();
+    $this->assertEquals(2, count($result));
+    $this->assertEquals([400, 1600], \CRM_Utils_Array::collect('frobnication', (array) $result));
+  }
+
+  public function testGetFields() {
+    $getFields = MockBasicEntity::getFields()->execute()->indexBy('name');
+
+    $this->assertCount(6, $getFields);
+    $this->assertEquals('Id', $getFields['id']['title']);
+    // Ensure default data type is "String" when not specified
+    $this->assertEquals('String', $getFields['color']['data_type']);
+
+    // Getfields should default to loadOptions = false and reduce them to bool
+    $this->assertTrue($getFields['group']['options']);
+    $this->assertFalse($getFields['id']['options']);
+
+    // Now load options
+    $getFields = MockBasicEntity::getFields()
+      ->addWhere('name', '=', 'group')
+      ->setLoadOptions(TRUE)
+      ->execute()->indexBy('name');
+
+    $this->assertCount(1, $getFields);
+    $this->assertArrayHasKey('one', $getFields['group']['options']);
+  }
+
+  public function testItemsToGet() {
+    $get = MockBasicEntity::get()
+      ->addWhere('color', 'NOT IN', ['yellow'])
+      ->addWhere('color', 'IN', ['red', 'blue'])
+      ->addWhere('color', '!=', 'green')
+      ->addWhere('group', '=', 'one')
+      ->addWhere('size', 'LIKE', 'big')
+      ->addWhere('shape', 'LIKE', '%a');
+
+    $itemsToGet = new \ReflectionMethod($get, '_itemsToGet');
+    $itemsToGet->setAccessible(TRUE);
+
+    $this->assertEquals(['red', 'blue'], $itemsToGet->invoke($get, 'color'));
+    $this->assertEquals(['one'], $itemsToGet->invoke($get, 'group'));
+    $this->assertEquals(['big'], $itemsToGet->invoke($get, 'size'));
+    $this->assertEmpty($itemsToGet->invoke($get, 'shape'));
+    $this->assertEmpty($itemsToGet->invoke($get, 'weight'));
+  }
+
+  public function testFieldsToGet() {
+    $get = MockBasicEntity::get()
+      ->addWhere('color', '!=', 'green');
+
+    $isFieldSelected = new \ReflectionMethod($get, '_isFieldSelected');
+    $isFieldSelected->setAccessible(TRUE);
+
+    // If no "select" is set, should always return true
+    $this->assertTrue($isFieldSelected->invoke($get, 'color'));
+    $this->assertTrue($isFieldSelected->invoke($get, 'shape'));
+    $this->assertTrue($isFieldSelected->invoke($get, 'size'));
+
+    // With a non-empty "select" fieldsToSelect() will return fields needed to evaluate each clause.
+    $get->addSelect('id');
+    $this->assertTrue($isFieldSelected->invoke($get, 'color'));
+    $this->assertTrue($isFieldSelected->invoke($get, 'id'));
+    $this->assertFalse($isFieldSelected->invoke($get, 'shape'));
+    $this->assertFalse($isFieldSelected->invoke($get, 'size'));
+    $this->assertFalse($isFieldSelected->invoke($get, 'weight'));
+    $this->assertFalse($isFieldSelected->invoke($get, 'group'));
+
+    $get->addClause('OR', ['shape', '=', 'round'], ['AND', [['size', '=', 'big'], ['weight', '!=', 'small']]]);
+    $this->assertTrue($isFieldSelected->invoke($get, 'color'));
+    $this->assertTrue($isFieldSelected->invoke($get, 'id'));
+    $this->assertTrue($isFieldSelected->invoke($get, 'shape'));
+    $this->assertTrue($isFieldSelected->invoke($get, 'size'));
+    $this->assertTrue($isFieldSelected->invoke($get, 'weight'));
+    $this->assertFalse($isFieldSelected->invoke($get, 'group'));
+
+    $get->addOrderBy('group');
+    $this->assertTrue($isFieldSelected->invoke($get, 'group'));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/BasicCustomFieldTest.php b/tests/phpunit/api/v4/Action/BasicCustomFieldTest.php
new file mode 100644 (file)
index 0000000..7542c10
--- /dev/null
@@ -0,0 +1,215 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+
+/**
+ * @group headless
+ */
+class BasicCustomFieldTest extends BaseCustomValueTest {
+
+  public function testWithSingleField() {
+
+    $customGroup = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'MyContactFields')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavColor')
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $contactId = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Johann')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->addValue('MyContactFields.FavColor', 'Red')
+      ->execute()
+      ->first()['id'];
+
+    $contact = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('first_name')
+      ->addSelect('MyContactFields.FavColor')
+      ->addWhere('id', '=', $contactId)
+      ->addWhere('MyContactFields.FavColor', '=', 'Red')
+      ->execute()
+      ->first();
+
+    $this->assertEquals('Red', $contact['MyContactFields.FavColor']);
+
+    Contact::update()
+      ->addWhere('id', '=', $contactId)
+      ->addValue('MyContactFields.FavColor', 'Blue')
+      ->execute();
+
+    $contact = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('MyContactFields.FavColor')
+      ->addWhere('id', '=', $contactId)
+      ->execute()
+      ->first();
+
+    $this->assertEquals('Blue', $contact['MyContactFields.FavColor']);
+  }
+
+  public function testWithTwoFields() {
+
+    $customGroup = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'MyContactFields')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavColor')
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavFood')
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $contactId1 = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Johann')
+      ->addValue('last_name', 'Tester')
+      ->addValue('MyContactFields.FavColor', 'Red')
+      ->addValue('MyContactFields.FavFood', 'Cherry')
+      ->execute()
+      ->first()['id'];
+
+    $contactId2 = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'MaryLou')
+      ->addValue('last_name', 'Tester')
+      ->addValue('MyContactFields.FavColor', 'Purple')
+      ->addValue('MyContactFields.FavFood', 'Grapes')
+      ->execute()
+      ->first()['id'];
+
+    $contact = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('first_name')
+      ->addSelect('MyContactFields.FavColor')
+      ->addSelect('MyContactFields.FavFood')
+      ->addWhere('id', '=', $contactId1)
+      ->addWhere('MyContactFields.FavColor', '=', 'Red')
+      ->addWhere('MyContactFields.FavFood', '=', 'Cherry')
+      ->execute()
+      ->first();
+
+    $this->assertArrayHasKey('MyContactFields.FavColor', $contact);
+    $this->assertEquals('Red', $contact['MyContactFields.FavColor']);
+
+    Contact::update()
+      ->addWhere('id', '=', $contactId1)
+      ->addValue('MyContactFields.FavColor', 'Blue')
+      ->execute();
+
+    $contact = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('MyContactFields.FavColor')
+      ->addWhere('id', '=', $contactId1)
+      ->execute()
+      ->first();
+
+    $this->assertEquals('Blue', $contact['MyContactFields.FavColor']);
+
+    $search = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addClause('OR', ['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes'])
+      ->addSelect('id')
+      ->addOrderBy('id')
+      ->execute()
+      ->indexBy('id');
+
+    $this->assertEquals([$contactId1, $contactId2], array_keys((array) $search));
+
+    $search = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes'])
+      ->addSelect('id')
+      ->addOrderBy('id')
+      ->execute()
+      ->indexBy('id');
+
+    $this->assertNotContains($contactId2, array_keys((array) $search));
+
+    $search = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes'])
+      ->addSelect('id')
+      ->addOrderBy('id')
+      ->execute()
+      ->indexBy('id');
+
+    $this->assertContains($contactId1, array_keys((array) $search));
+    $this->assertNotContains($contactId2, array_keys((array) $search));
+
+    $search = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->setWhere([['NOT', ['OR', [['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes']]]]])
+      ->addSelect('id')
+      ->addOrderBy('id')
+      ->execute()
+      ->indexBy('id');
+
+    $this->assertNotContains($contactId1, array_keys((array) $search));
+    $this->assertNotContains($contactId2, array_keys((array) $search));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/ChainTest.php b/tests/phpunit/api/v4/Action/ChainTest.php
new file mode 100644 (file)
index 0000000..70b5c9d
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class ChainTest extends UnitTestCase {
+
+  public function testGetActionsWithFields() {
+    $actions = \Civi\Api4\Activity::getActions()
+      ->addChain('fields', \Civi\Api4\Activity::getFields()->setAction('$name'), 'name')
+      ->execute()
+      ->indexBy('name');
+
+    $this->assertEquals('Array', $actions['getActions']['fields']['params']['data_type']);
+  }
+
+  public function testGetEntityWithActions() {
+    $entities = \Civi\Api4\Entity::get()
+      ->addSelect('name')
+      ->setChain([
+        'actions' => ['$name', 'getActions', ['select' => ['name']], 'name'],
+      ])
+      ->execute()
+      ->indexBy('name');
+
+    $this->assertArrayHasKey('replace', $entities['Contact']['actions']);
+    $this->assertArrayHasKey('getLinks', $entities['Entity']['actions']);
+    $this->assertArrayNotHasKey('replace', $entities['Entity']['actions']);
+  }
+
+  public function testContactCreateWithGroup() {
+    $firstName = uniqid('cwtf');
+    $lastName = uniqid('cwtl');
+
+    $contact = \Civi\Api4\Contact::create()
+      ->addValue('first_name', $firstName)
+      ->addValue('last_name', $lastName)
+      ->addChain('group', \Civi\Api4\Group::create()->addValue('title', '$display_name'), 0)
+      ->addChain('add_to_group', \Civi\Api4\GroupContact::create()->addValue('contact_id', '$id')->addValue('group_id', '$group.id'), 0)
+      ->addChain('check_group', \Civi\Api4\GroupContact::get()->addWhere('group_id', '=', '$group.id'))
+      ->execute()
+      ->first();
+
+    $this->assertCount(1, $contact['check_group']);
+    $this->assertEquals($contact['id'], $contact['check_group'][0]['contact_id']);
+    $this->assertEquals($contact['group']['id'], $contact['check_group'][0]['group_id']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/ComplexQueryTest.php b/tests/phpunit/api/v4/Action/ComplexQueryTest.php
new file mode 100644 (file)
index 0000000..0f69cd2
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+use Civi\Api4\Activity;
+
+/**
+ * @group headless
+ *
+ * This class tests a series of complex query situations described in the
+ * initial APIv4 specification
+ */
+class ComplexQueryTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $relatedTables = [
+      'civicrm_activity',
+      'civicrm_activity_contact',
+    ];
+    $this->cleanup(['tablesToTruncate' => $relatedTables]);
+    $this->loadDataSet('DefaultDataSet');
+
+    return parent::setUpHeadless();
+  }
+
+  /**
+   * Fetch all phone call activities
+   * Expects at least one activity loaded from the data set.
+   */
+  public function testGetAllHousingSupportActivities() {
+    $results = Activity::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('activity_type.name', '=', 'Phone Call')
+      ->execute();
+
+    $this->assertGreaterThan(0, count($results));
+  }
+
+  /**
+   * Fetch all activities with a blue tag; and return all tags on the activities
+   */
+  public function testGetAllTagsForBlueTaggedActivities() {
+
+  }
+
+  /**
+   * Fetch contacts named 'Bob' and all of their blue activities
+   */
+  public function testGetAllBlueActivitiesForBobs() {
+
+  }
+
+  /**
+   * Get all contacts in a zipcode and return their Home or Work email addresses
+   */
+  public function testGetHomeOrWorkEmailsForContactsWithZipcode() {
+
+  }
+
+  /**
+   * Fetch all activities where Bob is the assignee or source
+   */
+  public function testGetActivitiesWithBobAsAssigneeOrSource() {
+
+  }
+
+  /**
+   * Get all contacts which
+   * (a) have address in zipcode 94117 or 94118 or in city "San Francisco","LA"
+   * and
+   * (b) are not deceased and
+   * (c) have a custom-field "most_important_issue=Environment".
+   */
+  public function testAWholeLotOfConditions() {
+
+  }
+
+  /**
+   * Get participants who attended CiviCon 2012 but not CiviCon 2013.
+   * Return their name and email.
+   */
+  public function testGettingNameAndEmailOfAttendeesOfCiviCon2012Only() {
+
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/ContactApiKeyTest.php b/tests/phpunit/api/v4/Action/ContactApiKeyTest.php
new file mode 100644 (file)
index 0000000..a894fc1
--- /dev/null
@@ -0,0 +1,245 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use Civi\Api4\Email;
+
+/**
+ * @group headless
+ */
+class ContactApiKeyTest extends \api\v4\UnitTestCase {
+
+  public function testGetApiKey() {
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'add contacts', 'edit api keys', 'view all contacts', 'edit all contacts'];
+    $key = uniqid();
+
+    $contact = Contact::create()
+      ->addValue('first_name', 'Api')
+      ->addValue('last_name', 'Key0')
+      ->addValue('api_key', $key)
+      ->addChain('email', Email::create()
+        ->addValue('contact_id', '$id')
+        ->addValue('email', 'test@key.get'),
+        0
+      )
+      ->execute()
+      ->first();
+
+    // With sufficient permission we should see the key
+    $result = Contact::get()
+      ->addWhere('id', '=', $contact['id'])
+      ->addSelect('api_key')
+      ->execute()
+      ->first();
+    $this->assertEquals($key, $result['api_key']);
+
+    // Can also be fetched via join
+    $email = Email::get()
+      ->addSelect('contact.api_key')
+      ->addWhere('id', '=', $contact['email']['id'])
+      ->execute()->first();
+    $this->assertEquals($key, $email['contact.api_key']);
+
+    // Remove permission and we should not see the key
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM'];
+    $result = Contact::get()
+      ->addWhere('id', '=', $contact['id'])
+      ->addSelect('api_key')
+      ->execute()
+      ->first();
+    $this->assertTrue(empty($result['api_key']));
+
+    // Also not available via join
+    $email = Email::get()
+      ->addSelect('contact.api_key')
+      ->addWhere('id', '=', $contact['email']['id'])
+      ->execute()->first();
+    $this->assertTrue(empty($email['contact.api_key']));
+
+    $result = Contact::get()
+      ->addWhere('id', '=', $contact['id'])
+      ->execute()
+      ->first();
+    $this->assertTrue(empty($result['api_key']));
+  }
+
+  public function testCreateWithInsufficientPermissions() {
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'add contacts'];
+    $key = uniqid();
+
+    $error = '';
+    try {
+      Contact::create()
+        ->addValue('first_name', 'Api')
+        ->addValue('last_name', 'Key1')
+        ->addValue('api_key', $key)
+        ->execute()
+        ->first();
+    }
+    catch (\Exception $e) {
+      $error = $e->getMessage();
+    }
+    $this->assertContains('key', $error);
+  }
+
+  public function testUpdateApiKey() {
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'edit all contacts'];
+    $key = uniqid();
+
+    $contact = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Api')
+      ->addValue('last_name', 'Key2')
+      ->addValue('api_key', $key)
+      ->execute()
+      ->first();
+
+    $error = '';
+    try {
+      // Try to update the key without permissions; nothing should happen
+      Contact::update()
+        ->addWhere('id', '=', $contact['id'])
+        ->addValue('api_key', "NotAllowed")
+        ->execute();
+    }
+    catch (\Exception $e) {
+      $error = $e->getMessage();
+    }
+
+    $result = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $contact['id'])
+      ->addSelect('api_key')
+      ->execute()
+      ->first();
+
+    $this->assertContains('key', $error);
+
+    // Assert key is still the same
+    $this->assertEquals($result['api_key'], $key);
+
+    // Now we can update the key
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'administer CiviCRM', 'edit all contacts'];
+
+    Contact::update()
+      ->addWhere('id', '=', $contact['id'])
+      ->addValue('api_key', "IGotThePower!")
+      ->execute();
+
+    $result = Contact::get()
+      ->addWhere('id', '=', $contact['id'])
+      ->addSelect('api_key')
+      ->execute()
+      ->first();
+
+    // Assert key was updated
+    $this->assertEquals($result['api_key'], "IGotThePower!");
+  }
+
+  public function testUpdateOwnApiKey() {
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'edit own api keys', 'edit all contacts'];
+    $key = uniqid();
+
+    $contact = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Api')
+      ->addValue('last_name', 'Key3')
+      ->addValue('api_key', $key)
+      ->execute()
+      ->first();
+
+    $error = '';
+    try {
+      // Try to update the key without permissions; nothing should happen
+      Contact::update()
+        ->addWhere('id', '=', $contact['id'])
+        ->addValue('api_key', "NotAllowed")
+        ->execute();
+    }
+    catch (\Exception $e) {
+      $error = $e->getMessage();
+    }
+
+    $this->assertContains('key', $error);
+
+    $result = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $contact['id'])
+      ->addSelect('api_key')
+      ->execute()
+      ->first();
+
+    // Assert key is still the same
+    $this->assertEquals($result['api_key'], $key);
+
+    // Now we can update the key
+    \CRM_Core_Session::singleton()->set('userID', $contact['id']);
+
+    Contact::update()
+      ->addWhere('id', '=', $contact['id'])
+      ->addValue('api_key', "MyId!")
+      ->execute();
+
+    $result = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $contact['id'])
+      ->addSelect('api_key')
+      ->execute()
+      ->first();
+
+    // Assert key was updated
+    $this->assertEquals($result['api_key'], "MyId!");
+  }
+
+  public function testApiKeyWithGetFields() {
+    // With sufficient permissions the field should exist
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'edit api keys'];
+    $this->assertArrayHasKey('api_key', \civicrm_api4('Contact', 'getFields', [], 'name'));
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'administer CiviCRM'];
+    $this->assertArrayHasKey('api_key', \civicrm_api4('Contact', 'getFields', [], 'name'));
+
+    // Field hidden from non-privileged users...
+    \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'edit own api keys'];
+    $this->assertArrayNotHasKey('api_key', \civicrm_api4('Contact', 'getFields', [], 'name'));
+
+    // ...unless you disable 'checkPermissions'
+    $this->assertArrayHasKey('api_key', \civicrm_api4('Contact', 'getFields', ['checkPermissions' => FALSE], 'name'));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/ContactChecksumTest.php b/tests/phpunit/api/v4/Action/ContactChecksumTest.php
new file mode 100644 (file)
index 0000000..c47f92d
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class ContactChecksumTest extends \api\v4\UnitTestCase {
+
+  public function testGetChecksum() {
+    $contact = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Check')
+      ->addValue('last_name', 'Sum')
+      ->addChain('cs', Contact::getChecksum()->setContactId('$id')->setTtl(500), 0)
+      ->execute()
+      ->first();
+
+    $result = Contact::validateChecksum()
+      ->setContactId($contact['id'])
+      ->setChecksum($contact['cs']['checksum'])
+      ->execute()
+      ->first();
+
+    $this->assertTrue($result['valid']);
+  }
+
+  public function testValidateChecksum() {
+    $cid = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Checker')
+      ->addValue('last_name', 'Sum')
+      ->execute()
+      ->first()['id'];
+
+    $goodCs = \CRM_Contact_BAO_Contact_Utils::generateChecksum($cid, NULL, 500);
+    $badCs = \CRM_Contact_BAO_Contact_Utils::generateChecksum($cid, strtotime('now - 1 week'), 1);
+
+    $result1 = Contact::validateChecksum()
+      ->setContactId($cid)
+      ->setChecksum($goodCs)
+      ->execute()
+      ->first();
+    $this->assertTrue($result1['valid']);
+
+    $result2 = Contact::validateChecksum()
+      ->setContactId($cid)
+      ->setChecksum($badCs)
+      ->execute()
+      ->first();
+    $this->assertFalse($result2['valid']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/ContactGetTest.php b/tests/phpunit/api/v4/Action/ContactGetTest.php
new file mode 100644 (file)
index 0000000..abdd077
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class ContactGetTest extends \api\v4\UnitTestCase {
+
+  public function testGetDeletedContacts() {
+    $last_name = uniqid('deleteContactTest');
+
+    $bob = Contact::create()
+      ->setValues(['first_name' => 'Bob', 'last_name' => $last_name])
+      ->execute()->first();
+
+    $jan = Contact::create()
+      ->setValues(['first_name' => 'Jan', 'last_name' => $last_name])
+      ->execute()->first();
+
+    $del = Contact::create()
+      ->setValues(['first_name' => 'Del', 'last_name' => $last_name, 'is_deleted' => 1])
+      ->execute()->first();
+
+    // Deleted contacts are not fetched by default
+    $this->assertCount(2, Contact::get()->addWhere('last_name', '=', $last_name)->selectRowCount()->execute());
+
+    // You can search for them specifically
+    $contacts = Contact::get()->addWhere('last_name', '=', $last_name)->addWhere('is_deleted', '=', 1)->addSelect('id')->execute();
+    $this->assertEquals($del['id'], $contacts->first()['id']);
+
+    // Or by id
+    $this->assertCount(3, Contact::get()->addWhere('id', 'IN', [$bob['id'], $jan['id'], $del['id']])->selectRowCount()->execute());
+
+    // Putting is_deleted anywhere in the where clause will disable the default
+    $contacts = Contact::get()->addClause('OR', ['last_name', '=', $last_name], ['is_deleted', '=', 0])->addSelect('id')->execute();
+    $this->assertContains($del['id'], $contacts->column('id'));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/CreateCustomValueTest.php b/tests/phpunit/api/v4/Action/CreateCustomValueTest.php
new file mode 100644 (file)
index 0000000..d36742a
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+use Civi\Api4\OptionGroup;
+use Civi\Api4\OptionValue;
+
+/**
+ * @group headless
+ */
+class CreateCustomValueTest extends BaseCustomValueTest {
+
+  public function testGetWithCustomData() {
+    $optionValues = ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue'];
+
+    $customGroup = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'MyContactFields')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'Color')
+      ->addValue('option_values', $optionValues)
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $customField = CustomField::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('label', '=', 'Color')
+      ->execute()
+      ->first();
+
+    $this->assertNotNull($customField['option_group_id']);
+    $optionGroupId = $customField['option_group_id'];
+
+    $optionGroup = OptionGroup::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $optionGroupId)
+      ->execute()
+      ->first();
+
+    $this->assertEquals('Color', $optionGroup['title']);
+
+    $createdOptionValues = OptionValue::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('option_group_id', '=', $optionGroupId)
+      ->execute()
+      ->getArrayCopy();
+
+    $values = array_column($createdOptionValues, 'value');
+    $labels = array_column($createdOptionValues, 'label');
+    $createdOptionValues = array_combine($values, $labels);
+
+    $this->assertEquals($optionValues, $createdOptionValues);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/CreateWithOptionGroupTest.php b/tests/phpunit/api/v4/Action/CreateWithOptionGroupTest.php
new file mode 100644 (file)
index 0000000..3b860ec
--- /dev/null
@@ -0,0 +1,220 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class CreateWithOptionGroupTest extends BaseCustomValueTest {
+
+  /**
+   * Remove the custom tables
+   */
+  public function setUp() {
+    $this->dropByPrefix('civicrm_value_financial');
+    $this->dropByPrefix('civicrm_value_favorite');
+    parent::setUp();
+  }
+
+  public function testGetWithCustomData() {
+    $group = uniqid('fava');
+    $colorField = uniqid('colora');
+    $foodField = uniqid('fooda');
+
+    $customGroupId = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', $group)
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first()['id'];
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', $colorField)
+      ->addValue('name', $colorField)
+      ->addValue('option_values', ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue'])
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', $foodField)
+      ->addValue('name', $foodField)
+      ->addValue('option_values', ['1' => 'Corn', '2' => 'Potatoes', '3' => 'Cheese'])
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $customGroupId = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'FinancialStuff')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first()['id'];
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'Salary')
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Number')
+      ->addValue('data_type', 'Money')
+      ->execute();
+
+    Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Jerome')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->addValue("$group.$colorField", 'r')
+      ->addValue("$group.$foodField", '1')
+      ->addValue('FinancialStuff.Salary', 50000)
+      ->execute();
+
+    $result = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('first_name')
+      ->addSelect("$group.$colorField.label")
+      ->addSelect("$group.$foodField.label")
+      ->addSelect('FinancialStuff.Salary')
+      ->addWhere("$group.$foodField.label", 'IN', ['Corn', 'Potatoes'])
+      ->addWhere('FinancialStuff.Salary', '>', '10000')
+      ->execute()
+      ->first();
+
+    $this->assertEquals('Red', $result["$group.$colorField.label"]);
+    $this->assertEquals('Corn', $result["$group.$foodField.label"]);
+    $this->assertEquals(50000, $result['FinancialStuff.Salary']);
+  }
+
+  public function testWithCustomDataForMultipleContacts() {
+    $group = uniqid('favb');
+    $colorField = uniqid('colorb');
+    $foodField = uniqid('foodb');
+
+    $customGroupId = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', $group)
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first()['id'];
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', $colorField)
+      ->addValue('name', $colorField)
+      ->addValue('option_values', ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue'])
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', $foodField)
+      ->addValue('name', $foodField)
+      ->addValue('option_values', ['1' => 'Corn', '2' => 'Potatoes', '3' => 'Cheese'])
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $customGroupId = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'FinancialStuff')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first()['id'];
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'Salary')
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Number')
+      ->addValue('data_type', 'Money')
+      ->execute();
+
+    Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Red')
+      ->addValue('last_name', 'Corn')
+      ->addValue('contact_type', 'Individual')
+      ->addValue("$group.$colorField", 'r')
+      ->addValue("$group.$foodField", '1')
+      ->addValue('FinancialStuff.Salary', 10000)
+      ->execute();
+
+    Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Blue')
+      ->addValue('last_name', 'Cheese')
+      ->addValue('contact_type', 'Individual')
+      ->addValue("$group.$colorField", 'b')
+      ->addValue("$group.$foodField", '3')
+      ->addValue('FinancialStuff.Salary', 500000)
+      ->execute();
+
+    $result = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('first_name')
+      ->addSelect('last_name')
+      ->addSelect("$group.$colorField.label")
+      ->addSelect("$group.$foodField.label")
+      ->addSelect('FinancialStuff.Salary')
+      ->addWhere("$group.$foodField.label", 'IN', ['Corn', 'Cheese'])
+      ->execute();
+
+    $blueCheese = NULL;
+    foreach ($result as $contact) {
+      if ($contact['first_name'] === 'Blue') {
+        $blueCheese = $contact;
+      }
+    }
+
+    $this->assertEquals('Blue', $blueCheese["$group.$colorField.label"]);
+    $this->assertEquals('Cheese', $blueCheese["$group.$foodField.label"]);
+    $this->assertEquals(500000, $blueCheese['FinancialStuff.Salary']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/CurrentFilterTest.php b/tests/phpunit/api/v4/Action/CurrentFilterTest.php
new file mode 100644 (file)
index 0000000..0dcaf49
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Relationship;
+use api\v4\UnitTestCase;
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class CurrentFilterTest extends UnitTestCase {
+
+  public function testCurrentRelationship() {
+    $cid1 = Contact::create()->addValue('first_name', 'Bob1')->execute()->first()['id'];
+    $cid2 = Contact::create()->addValue('first_name', 'Bob2')->execute()->first()['id'];
+
+    $current = Relationship::create()->setValues([
+      'relationship_type_id' => 1,
+      'contact_id_a' => $cid1,
+      'contact_id_b' => $cid2,
+      'end_date' => 'now + 1 week',
+    ])->execute()->first();
+    $indefinite = Relationship::create()->setValues([
+      'relationship_type_id' => 2,
+      'contact_id_a' => $cid1,
+      'contact_id_b' => $cid2,
+    ])->execute()->first();
+    $expiring = Relationship::create()->setValues([
+      'relationship_type_id' => 3,
+      'contact_id_a' => $cid1,
+      'contact_id_b' => $cid2,
+      'end_date' => 'now',
+    ])->execute()->first();
+    $past = Relationship::create()->setValues([
+      'relationship_type_id' => 3,
+      'contact_id_a' => $cid1,
+      'contact_id_b' => $cid2,
+      'end_date' => 'now - 1 week',
+    ])->execute()->first();
+    $inactive = Relationship::create()->setValues([
+      'relationship_type_id' => 4,
+      'contact_id_a' => $cid1,
+      'contact_id_b' => $cid2,
+      'is_active' => 0,
+    ])->execute()->first();
+
+    $getCurrent = (array) Relationship::get()->setCurrent(TRUE)->execute()->indexBy('id');
+    $notCurrent = (array) Relationship::get()->setCurrent(FALSE)->execute()->indexBy('id');
+    $getAll = (array) Relationship::get()->execute()->indexBy('id');
+
+    $this->assertArrayHasKey($current['id'], $getAll);
+    $this->assertArrayHasKey($indefinite['id'], $getAll);
+    $this->assertArrayHasKey($expiring['id'], $getAll);
+    $this->assertArrayHasKey($past['id'], $getAll);
+    $this->assertArrayHasKey($inactive['id'], $getAll);
+
+    $this->assertArrayHasKey($current['id'], $getCurrent);
+    $this->assertArrayHasKey($indefinite['id'], $getCurrent);
+    $this->assertArrayHasKey($expiring['id'], $getCurrent);
+    $this->assertArrayNotHasKey($past['id'], $getCurrent);
+    $this->assertArrayNotHasKey($inactive['id'], $getCurrent);
+
+    $this->assertArrayNotHasKey($current['id'], $notCurrent);
+    $this->assertArrayNotHasKey($indefinite['id'], $notCurrent);
+    $this->assertArrayNotHasKey($expiring['id'], $notCurrent);
+    $this->assertArrayHasKey($past['id'], $notCurrent);
+    $this->assertArrayHasKey($inactive['id'], $notCurrent);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/CustomValuePerformanceTest.php b/tests/phpunit/api/v4/Action/CustomValuePerformanceTest.php
new file mode 100644 (file)
index 0000000..8a15b02
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+use api\v4\Traits\QueryCounterTrait;
+
+/**
+ * @group headless
+ */
+class CustomValuePerformanceTest extends BaseCustomValueTest {
+
+  use QueryCounterTrait;
+
+  public function testQueryCount() {
+
+    $this->markTestIncomplete();
+
+    $customGroupId = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'MyContactFields')
+      ->addValue('title', 'MyContactFields')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first()['id'];
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavColor')
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('options', ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue'])
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavAnimal')
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavLetter')
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavFood')
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $this->beginQueryCount();
+
+    Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Red')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->addValue('MyContactFields.FavColor', 'r')
+      ->addValue('MyContactFields.FavAnimal', 'Sheep')
+      ->addValue('MyContactFields.FavLetter', 'z')
+      ->addValue('MyContactFields.FavFood', 'Coconuts')
+      ->execute();
+
+    Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('display_name')
+      ->addSelect('MyContactFields.FavColor.label')
+      ->addSelect('MyContactFields.FavColor.weight')
+      ->addSelect('MyContactFields.FavColor.is_default')
+      ->addSelect('MyContactFields.FavAnimal')
+      ->addSelect('MyContactFields.FavLetter')
+      ->addWhere('MyContactFields.FavColor', '=', 'r')
+      ->addWhere('MyContactFields.FavFood', '=', 'Coconuts')
+      ->addWhere('MyContactFields.FavAnimal', '=', 'Sheep')
+      ->addWhere('MyContactFields.FavLetter', '=', 'z')
+      ->execute()
+      ->first();
+
+    // FIXME: This count is artificially high due to the line
+    // $this->entity = Tables::getBriefName(Tables::getClassForTable($targetTable));
+    // In class Joinable. TODO: Investigate why.
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/CustomValueTest.php b/tests/phpunit/api/v4/Action/CustomValueTest.php
new file mode 100644 (file)
index 0000000..f9e87e9
--- /dev/null
@@ -0,0 +1,227 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+use Civi\Api4\CustomValue;
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class CustomValueTest extends BaseCustomValueTest {
+
+  protected $contactID;
+
+  /**
+   * Test CustomValue::GetFields/Get/Create/Update/Replace/Delete
+   */
+  public function testCRUD() {
+    $optionValues = ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue'];
+
+    $group = uniqid('groupc');
+    $colorField = uniqid('colorc');
+    $textField = uniqid('txt');
+
+    $customGroup = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', $group)
+      ->addValue('extends', 'Contact')
+      ->addValue('is_multiple', TRUE)
+      ->execute()
+      ->first();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', $colorField)
+      ->addValue('options', $optionValues)
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', $textField)
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $this->contactID = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Johann')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->execute()
+      ->first()['id'];
+
+    // Retrieve and check the fields of CustomValue = Custom_$group
+    $fields = CustomValue::getFields($group)->execute();
+    $expectedResult = [
+      [
+        'custom_field_id' => 1,
+        'custom_group' => $group,
+        'name' => $colorField,
+        'title' => $colorField,
+        'entity' => "Custom_$group",
+        'data_type' => 'String',
+        'fk_entity' => NULL,
+      ],
+      [
+        'custom_field_id' => 2,
+        'custom_group' => $group,
+        'name' => $textField,
+        'title' => $textField,
+        'entity' => "Custom_$group",
+        'data_type' => 'String',
+        'fk_entity' => NULL,
+      ],
+      [
+        'name' => 'id',
+        'title' => ts('Custom Value ID'),
+        'entity' => "Custom_$group",
+        'data_type' => 'Integer',
+        'fk_entity' => NULL,
+      ],
+      [
+        'name' => 'entity_id',
+        'title' => ts('Entity ID'),
+        'entity' => "Custom_$group",
+        'data_type' => 'Integer',
+        'fk_entity' => 'Contact',
+      ],
+    ];
+
+    foreach ($expectedResult as $key => $field) {
+      foreach ($field as $attr => $value) {
+        $this->assertEquals($expectedResult[$key][$attr], $fields[$key][$attr]);
+      }
+    }
+
+    // CASE 1: Test CustomValue::create
+    // Create two records for a single contact and using CustomValue::get ensure that two records are created
+    CustomValue::create($group)
+      ->addValue($colorField, 'Green')
+      ->addValue("entity_id", $this->contactID)
+      ->execute();
+    CustomValue::create($group)
+      ->addValue($colorField, 'Red')
+      ->addValue("entity_id", $this->contactID)
+      ->execute();
+    // fetch custom values using API4 CustomValue::get
+    $result = CustomValue::get($group)->execute();
+
+    // check if two custom values are created
+    $this->assertEquals(2, count($result));
+    $expectedResult = [
+      [
+        'id' => 1,
+        $colorField => 'Green',
+        'entity_id' => $this->contactID,
+      ],
+      [
+        'id' => 2,
+        $colorField => 'Red',
+        'entity_id' => $this->contactID,
+      ],
+    ];
+    // match the data
+    foreach ($expectedResult as $key => $field) {
+      foreach ($field as $attr => $value) {
+        $this->assertEquals($expectedResult[$key][$attr], $result[$key][$attr]);
+      }
+    }
+
+    // CASE 2: Test CustomValue::update
+    // Update a records whose id is 1 and change the custom field (name = Color) value to 'White' from 'Green'
+    CustomValue::update($group)
+      ->addWhere("id", "=", 1)
+      ->addValue($colorField, 'White')
+      ->execute();
+
+    // ensure that the value is changed for id = 1
+    $color = CustomValue::get($group)
+      ->addWhere("id", "=", 1)
+      ->execute()
+      ->first()[$colorField];
+    $this->assertEquals('White', $color);
+
+    // CASE 3: Test CustomValue::replace
+    // create a second contact which will be used to replace the custom values, created earlier
+    $secondContactID = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Adam')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->execute()
+      ->first()['id'];
+    // Replace all the records which was created earlier with entity_id = first contact
+    //  with custom record [$colorField => 'Rainbow', 'entity_id' => $secondContactID]
+    CustomValue::replace($group)
+      ->setRecords([[$colorField => 'Rainbow', 'entity_id' => $secondContactID]])
+      ->addWhere('entity_id', '=', $this->contactID)
+      ->execute();
+
+    // Check the two records created earlier is replaced by new contact
+    $result = CustomValue::get($group)->execute();
+    $this->assertEquals(1, count($result));
+
+    $expectedResult = [
+      [
+        'id' => 3,
+        $colorField => 'Rainbow',
+        'entity_id' => $secondContactID,
+      ],
+    ];
+    foreach ($expectedResult as $key => $field) {
+      foreach ($field as $attr => $value) {
+        $this->assertEquals($expectedResult[$key][$attr], $result[$key][$attr]);
+      }
+    }
+
+    // CASE 4: Test CustomValue::delete
+    // There is only record left whose id = 3, delete that record on basis of criteria id = 3
+    CustomValue::delete($group)->addWhere("id", "=", 3)->execute();
+    $result = CustomValue::get($group)->execute();
+    // check that there are no custom values present
+    $this->assertEquals(0, count($result));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/DateTest.php b/tests/phpunit/api/v4/Action/DateTest.php
new file mode 100644 (file)
index 0000000..a143068
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use Civi\Api4\Relationship;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class DateTest extends UnitTestCase {
+
+  public function testRelationshipDate() {
+    $c1 = Contact::create()
+      ->addValue('first_name', 'c')
+      ->addValue('last_name', 'one')
+      ->execute()
+      ->first()['id'];
+    $c2 = Contact::create()
+      ->addValue('first_name', 'c')
+      ->addValue('last_name', 'two')
+      ->execute()
+      ->first()['id'];
+    $r = Relationship::create()
+      ->addValue('contact_id_a', $c1)
+      ->addValue('contact_id_b', $c2)
+      ->addValue('relationship_type_id', 1)
+      ->addValue('start_date', 'now')
+      ->addValue('end_date', 'now + 1 week')
+      ->execute()
+      ->first()['id'];
+    $result = Relationship::get()
+      ->addWhere('start_date', '=', 'now')
+      ->addWhere('end_date', '>', 'now + 1 day')
+      ->execute()
+      ->indexBy('id');
+    $this->assertArrayHasKey($r, $result);
+    $result = Relationship::get()
+      ->addWhere('start_date', '<', 'now')
+      ->execute()
+      ->indexBy('id');
+    $this->assertArrayNotHasKey($r, $result);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/EvaluateConditionTest.php b/tests/phpunit/api/v4/Action/EvaluateConditionTest.php
new file mode 100644 (file)
index 0000000..acb0dc8
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\MockBasicEntity;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class EvaluateConditionTest extends UnitTestCase {
+
+  public function testEvaluateCondition() {
+    $action = MockBasicEntity::get();
+    $reflection = new \ReflectionClass($action);
+    $method = $reflection->getMethod('evaluateCondition');
+    $method->setAccessible(TRUE);
+
+    $data = [
+      'nada' => 0,
+      'uno' => 1,
+      'dos' => 2,
+      'apple' => 'red',
+      'banana' => 'yellow',
+      'values' => ['one' => 1, 'two' => 2, 'three' => 3],
+    ];
+
+    $this->assertFalse($method->invoke($action, '$uno > $dos', $data));
+    $this->assertTrue($method->invoke($action, '$uno < $dos', $data));
+    $this->assertTrue($method->invoke($action, '$apple == "red" && $banana != "red"', $data));
+    $this->assertFalse($method->invoke($action, '$apple == "red" && $banana != "yellow"', $data));
+    $this->assertTrue($method->invoke($action, '$values.one == $uno', $data));
+    $this->assertTrue($method->invoke($action, '$values.one + $dos == $values.three', $data));
+    $this->assertTrue($method->invoke($action, 'empty($nada)', $data));
+    $this->assertFalse($method->invoke($action, 'empty($values)', $data));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/EventTest.php b/tests/phpunit/api/v4/Action/EventTest.php
new file mode 100644 (file)
index 0000000..052629c
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ */
+
+use Civi\Api4\Event;
+
+/**
+ * @group headless
+ */
+class EventTest extends \api\v4\UnitTestCase {
+
+  /**
+   * Test that the event api filters out templates by default.
+   *
+   * @throws \Civi\API\Exception\UnauthorizedException
+   */
+  public function testTemplateFilterByDefault() {
+    Event::create()->setValues(['template_title' => 'Big Event', 'is_template' => 1, 'start_date' => 'now', 'event_type_id' => 'Meeting'])->execute();
+    Event::create()->setValues(['title' => 'Bigger Event', 'start_date' => 'now', 'event_type_id' => 'Meeting'])->execute();
+    $this->assertEquals(1, Event::get()->selectRowCount()->execute()->count());
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/ExtendFromIndividualTest.php b/tests/phpunit/api/v4/Action/ExtendFromIndividualTest.php
new file mode 100644 (file)
index 0000000..cee9a65
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+
+/**
+ * @group headless
+ */
+class ExtendFromIndividualTest extends BaseCustomValueTest {
+
+  public function testGetWithNonStandardExtends() {
+
+    $customGroup = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'MyContactFields')
+      // not Contact
+      ->addValue('extends', 'Individual')
+      ->execute()
+      ->first();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavColor')
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $contactId = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Johann')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->addValue('MyContactFields.FavColor', 'Red')
+      ->execute()
+      ->first()['id'];
+
+    $contact = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('display_name')
+      ->addSelect('MyContactFields.FavColor')
+      ->addWhere('id', '=', $contactId)
+      ->execute()
+      ->first();
+
+    $this->assertEquals('Red', $contact['MyContactFields.FavColor']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/FkJoinTest.php b/tests/phpunit/api/v4/Action/FkJoinTest.php
new file mode 100644 (file)
index 0000000..3e4217a
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+use Civi\Api4\Activity;
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class FkJoinTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $relatedTables = [
+      'civicrm_activity',
+      'civicrm_phone',
+      'civicrm_activity_contact',
+    ];
+    $this->cleanup(['tablesToTruncate' => $relatedTables]);
+    $this->loadDataSet('DefaultDataSet');
+
+    return parent::setUpHeadless();
+  }
+
+  /**
+   * Fetch all phone call activities. Expects a single activity
+   * loaded from the data set.
+   */
+  public function testThreeLevelJoin() {
+    $results = Activity::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('activity_type.name', '=', 'Phone Call')
+      ->execute();
+
+    $this->assertCount(1, $results);
+  }
+
+  public function testActivityContactJoin() {
+    $results = Activity::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('assignees.id')
+      ->addSelect('assignees.first_name')
+      ->addSelect('assignees.display_name')
+      ->addWhere('assignees.first_name', '=', 'Phoney')
+      ->execute();
+
+    $firstResult = $results->first();
+
+    $this->assertCount(1, $results);
+    $this->assertTrue(is_array($firstResult['assignees']));
+
+    $firstAssignee = array_shift($firstResult['assignees']);
+    $this->assertEquals($firstAssignee['first_name'], 'Phoney');
+  }
+
+  public function testContactPhonesJoin() {
+    $testContact = $this->getReference('test_contact_1');
+    $testPhone = $this->getReference('test_phone_1');
+
+    $results = Contact::get()
+      ->setCheckPermissions(FALSE)
+      ->addSelect('phones.phone')
+      ->addWhere('id', '=', $testContact['id'])
+      ->addWhere('phones.location_type.name', '=', 'Home')
+      ->execute()
+      ->first();
+
+    $this->assertArrayHasKey('phones', $results);
+    $this->assertCount(1, $results['phones']);
+    $firstPhone = array_shift($results['phones']);
+    $this->assertEquals($testPhone['phone'], $firstPhone['phone']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/GetExtraFieldsTest.php b/tests/phpunit/api/v4/Action/GetExtraFieldsTest.php
new file mode 100644 (file)
index 0000000..8557000
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class GetExtraFieldsTest extends UnitTestCase {
+
+  public function testBAOFieldsWillBeReturned() {
+    $returnedFields = Contact::getFields()
+      ->execute()
+      ->getArrayCopy();
+
+    $baseFields = \CRM_Contact_BAO_Contact::fields();
+    $baseFieldNames = array_column($baseFields, 'name');
+    $returnedFieldNames = array_column($returnedFields, 'name');
+    $notReturned = array_diff($baseFieldNames, $returnedFieldNames);
+
+    $this->assertEmpty($notReturned);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/GetFromArrayTest.php b/tests/phpunit/api/v4/Action/GetFromArrayTest.php
new file mode 100644 (file)
index 0000000..eab416f
--- /dev/null
@@ -0,0 +1,198 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+use Civi\Api4\MockArrayEntity;
+
+/**
+ * @group headless
+ */
+class GetFromArrayTest extends UnitTestCase {
+
+  public function testArrayGetWithLimit() {
+    $result = MockArrayEntity::get()
+      ->setOffset(2)
+      ->setLimit(2)
+      ->execute();
+    $this->assertEquals(3, $result[0]['field1']);
+    $this->assertEquals(4, $result[1]['field1']);
+    $this->assertEquals(2, count($result));
+  }
+
+  public function testArrayGetWithSort() {
+    $result = MockArrayEntity::get()
+      ->addOrderBy('field1', 'DESC')
+      ->execute();
+    $this->assertEquals([5, 4, 3, 2, 1], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addOrderBy('field5', 'DESC')
+      ->addOrderBy('field2', 'ASC')
+      ->execute();
+    $this->assertEquals([3, 2, 5, 4, 1], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addOrderBy('field3', 'ASC')
+      ->addOrderBy('field2', 'ASC')
+      ->execute();
+    $this->assertEquals([3, 1, 2, 5, 4], array_column((array) $result, 'field1'));
+  }
+
+  public function testArrayGetWithSelect() {
+    $result = MockArrayEntity::get()
+      ->addSelect('field1')
+      ->addSelect('field3')
+      ->setLimit(4)
+      ->execute();
+    $this->assertEquals([
+      [
+        'field1' => 1,
+        'field3' => NULL,
+      ],
+      [
+        'field1' => 2,
+        'field3' => 0,
+      ],
+      [
+        'field1' => 3,
+      ],
+      [
+        'field1' => 4,
+        'field3' => 1,
+      ],
+    ], (array) $result);
+  }
+
+  public function testArrayGetWithWhere() {
+    $result = MockArrayEntity::get()
+      ->addWhere('field2', '=', 'yack')
+      ->execute();
+    $this->assertEquals([2], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field5', '!=', 'banana')
+      ->addWhere('field3', 'IS NOT NULL')
+      ->execute();
+    $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field1', '>=', '4')
+      ->execute();
+    $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field1', '<', '2')
+      ->execute();
+    $this->assertEquals([1], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field2', 'LIKE', '%ra%')
+      ->execute();
+    $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field3', 'IS NULL')
+      ->execute();
+    $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field3', '=', '0')
+      ->execute();
+    $this->assertEquals([2], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field2', 'LIKE', '%ra')
+      ->execute();
+    $this->assertEquals([1], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field2', 'LIKE', 'ra')
+      ->execute();
+    $this->assertEquals(0, count($result));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field2', 'NOT LIKE', '%ra%')
+      ->execute();
+    $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field6', '=', '0')
+      ->execute();
+    $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field6', '=', 0)
+      ->execute();
+    $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field1', 'BETWEEN', [3, 5])
+      ->execute();
+    $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addWhere('field1', 'NOT BETWEEN', [3, 4])
+      ->execute();
+    $this->assertEquals([1, 2, 5], array_column((array) $result, 'field1'));
+  }
+
+  public function testArrayGetWithNestedWhereClauses() {
+    $result = MockArrayEntity::get()
+      ->addClause('OR', ['field2', 'LIKE', '%ra'], ['field2', 'LIKE', 'x ray'])
+      ->execute();
+    $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addClause('OR', ['field2', '=', 'zebra'], ['field2', '=', 'yack'])
+      ->addClause('OR', ['field5', '!=', 'apple'], ['field3', 'IS NULL'])
+      ->execute();
+    $this->assertEquals([1, 2], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addClause('NOT', ['field2', '!=', 'yack'])
+      ->execute();
+    $this->assertEquals([2], array_column((array) $result, 'field1'));
+
+    $result = MockArrayEntity::get()
+      ->addClause('OR', ['field1', '=', 2], ['AND', [['field5', '=', 'apple'], ['field3', '=', 1]]])
+      ->execute();
+    $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/IndexTest.php b/tests/phpunit/api/v4/Action/IndexTest.php
new file mode 100644 (file)
index 0000000..ed27b9f
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class IndexTest extends UnitTestCase {
+
+  public function testIndex() {
+    // Results indexed by name
+    $resultByName = civicrm_api4('Activity', 'getActions', [], 'name');
+    $this->assertInstanceOf('Civi\Api4\Generic\Result', $resultByName);
+    $this->assertEquals('get', $resultByName['get']['name']);
+
+    // Get result at index 0
+    $firstResult = civicrm_api4('Activity', 'getActions', [], 0);
+    $this->assertInstanceOf('Civi\Api4\Generic\Result', $firstResult);
+    $this->assertArrayHasKey('name', $firstResult);
+
+    $this->assertEquals($resultByName->first(), (array) $firstResult);
+  }
+
+  public function testBadIndexInt() {
+    $error = '';
+    try {
+      civicrm_api4('Activity', 'getActions', [], 99);
+    }
+    catch (\API_Exception $e) {
+      $error = $e->getMessage();
+    }
+    $this->assertContains('not found', $error);
+  }
+
+  public function testBadIndexString() {
+    $error = '';
+    try {
+      civicrm_api4('Activity', 'getActions', [], 'xyz');
+    }
+    catch (\API_Exception $e) {
+      $error = $e->getMessage();
+    }
+    $this->assertContains('not found', $error);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/NullValueTest.php b/tests/phpunit/api/v4/Action/NullValueTest.php
new file mode 100644 (file)
index 0000000..95fc845
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class NullValueTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $format = '{contact.first_name}{ }{contact.last_name}';
+    \Civi::settings()->set('display_name_format', $format);
+    return parent::setUpHeadless();
+  }
+
+  public function testStringNull() {
+    $contact = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Joseph')
+      ->addValue('last_name', 'null')
+      ->addValue('contact_type', 'Individual')
+      ->execute()
+      ->first();
+
+    $this->assertSame('Null', $contact['last_name']);
+    $this->assertSame('Joseph Null', $contact['display_name']);
+  }
+
+  public function testSettingToNull() {
+    $contact = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'ILoveMy')
+      ->addValue('last_name', 'LastName')
+      ->addValue('contact_type', 'Individual')
+      ->execute()
+      ->first();
+
+    $this->assertSame('ILoveMy LastName', $contact['display_name']);
+    $contactId = $contact['id'];
+
+    $contact = Contact::update()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $contactId)
+      ->addValue('last_name', NULL)
+      ->execute()
+      ->first();
+
+    $this->assertSame(NULL, $contact['last_name']);
+    $this->assertSame('ILoveMy', $contact['display_name']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/ReplaceTest.php b/tests/phpunit/api/v4/Action/ReplaceTest.php
new file mode 100644 (file)
index 0000000..5e40602
--- /dev/null
@@ -0,0 +1,206 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+use Civi\Api4\CustomValue;
+use Civi\Api4\Email;
+use api\v4\Traits\TableDropperTrait;
+use api\v4\UnitTestCase;
+use Civi\Api4\Contact;
+
+/**
+ * @group headless
+ */
+class ReplaceTest extends UnitTestCase {
+  use TableDropperTrait;
+
+  /**
+   * Set up baseline for testing
+   */
+  public function setUp() {
+    $tablesToTruncate = [
+      'civicrm_custom_group',
+      'civicrm_custom_field',
+      'civicrm_email',
+    ];
+    $this->dropByPrefix('civicrm_value_replacetest');
+    $this->cleanup(['tablesToTruncate' => $tablesToTruncate]);
+    parent::setUp();
+  }
+
+  public function testEmailReplace() {
+    $cid1 = Contact::create()
+      ->addValue('first_name', 'Lotsa')
+      ->addValue('last_name', 'Emails')
+      ->execute()
+      ->first()['id'];
+    $cid2 = Contact::create()
+      ->addValue('first_name', 'Notso')
+      ->addValue('last_name', 'Many')
+      ->execute()
+      ->first()['id'];
+    $e0 = Email::create()
+      ->setValues(['contact_id' => $cid2, 'email' => 'nosomany@example.com', 'location_type_id' => 1])
+      ->execute()
+      ->first()['id'];
+    $e1 = Email::create()
+      ->setValues(['contact_id' => $cid1, 'email' => 'first@example.com', 'location_type_id' => 1])
+      ->execute()
+      ->first()['id'];
+    $e2 = Email::create()
+      ->setValues(['contact_id' => $cid1, 'email' => 'second@example.com', 'location_type_id' => 1])
+      ->execute()
+      ->first()['id'];
+    $replacement = [
+      ['email' => 'firstedited@example.com', 'id' => $e1],
+      ['contact_id' => $cid1, 'email' => 'third@example.com', 'location_type_id' => 1],
+    ];
+    $replaced = Email::replace()
+      ->setRecords($replacement)
+      ->addWhere('contact_id', '=', $cid1)
+      ->execute();
+    // Should have saved 2 records
+    $this->assertEquals(2, $replaced->count());
+    // Should have deleted email2
+    $this->assertEquals([['id' => $e2]], $replaced->deleted);
+    // Verify contact now has the new email records
+    $results = Email::get()
+      ->addWhere('contact_id', '=', $cid1)
+      ->execute()
+      ->indexBy('id');
+    $this->assertEquals('firstedited@example.com', $results[$e1]['email']);
+    $this->assertEquals(2, $results->count());
+    $this->assertArrayNotHasKey($e2, (array) $results);
+    $this->assertArrayNotHasKey($e0, (array) $results);
+    unset($results[$e1]);
+    foreach ($results as $result) {
+      $this->assertEquals('third@example.com', $result['email']);
+    }
+    // Validate our other contact's email did not get deleted
+    $c2email = Email::get()
+      ->addWhere('contact_id', '=', $cid2)
+      ->execute()
+      ->first();
+    $this->assertEquals('nosomany@example.com', $c2email['email']);
+  }
+
+  public function testCustomValueReplace() {
+    $customGroup = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'replaceTest')
+      ->addValue('extends', 'Contact')
+      ->addValue('is_multiple', TRUE)
+      ->execute()
+      ->first();
+
+    CustomField::create()
+      ->addValue('label', 'Custom1')
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'String')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'Custom2')
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'String')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $cid1 = Contact::create()
+      ->addValue('first_name', 'Lotsa')
+      ->addValue('last_name', 'Data')
+      ->execute()
+      ->first()['id'];
+    $cid2 = Contact::create()
+      ->addValue('first_name', 'Notso')
+      ->addValue('last_name', 'Much')
+      ->execute()
+      ->first()['id'];
+
+    // Contact 2 gets one row
+    CustomValue::create('replaceTest')
+      ->setCheckPermissions(FALSE)
+      ->addValue('Custom1', "2 1")
+      ->addValue('Custom2', "2 1")
+      ->addValue('entity_id', $cid2)
+      ->execute();
+
+    // Create 3 rows for contact 1
+    foreach ([1, 2, 3] as $i) {
+      CustomValue::create('replaceTest')
+        ->setCheckPermissions(FALSE)
+        ->addValue('Custom1', "1 $i")
+        ->addValue('Custom2', "1 $i")
+        ->addValue('entity_id', $cid1)
+        ->execute();
+    }
+
+    $cid1Records = CustomValue::get('replaceTest')
+      ->setCheckPermissions(FALSE)
+      ->addWhere('entity_id', '=', $cid1)
+      ->execute();
+
+    $this->assertCount(3, $cid1Records);
+    $this->assertCount(1, CustomValue::get('replaceTest')->setCheckPermissions(FALSE)->addWhere('entity_id', '=', $cid2)->execute());
+
+    $result = CustomValue::replace('replaceTest')
+      ->addWhere('entity_id', '=', $cid1)
+      ->addRecord(['Custom1' => 'new one', 'Custom2' => 'new two'])
+      ->addRecord(['id' => $cid1Records[0]['id'], 'Custom1' => 'changed one', 'Custom2' => 'changed two'])
+      ->execute();
+
+    $this->assertCount(2, $result);
+    $this->assertCount(2, $result->deleted);
+
+    $newRecords = CustomValue::get('replaceTest')
+      ->setCheckPermissions(FALSE)
+      ->addWhere('entity_id', '=', $cid1)
+      ->execute()
+      ->indexBy('id');
+
+    $this->assertEquals('new one', $newRecords->last()['Custom1']);
+    $this->assertEquals('new two', $newRecords->last()['Custom2']);
+    $this->assertEquals('changed one', $newRecords[$cid1Records[0]['id']]['Custom1']);
+    $this->assertEquals('changed two', $newRecords[$cid1Records[0]['id']]['Custom2']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/RequiredFieldTest.php b/tests/phpunit/api/v4/Action/RequiredFieldTest.php
new file mode 100644 (file)
index 0000000..5be510b
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Event;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class RequiredFieldTest extends UnitTestCase {
+
+  public function testRequired() {
+    $msg = '';
+    try {
+      Event::create()->execute();
+    }
+    catch (\API_Exception $e) {
+      $msg = $e->getMessage();
+    }
+    $this->assertEquals('Mandatory values missing from Api4 Event::create: title, event_type_id, start_date', $msg);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/UpdateContactTest.php b/tests/phpunit/api/v4/Action/UpdateContactTest.php
new file mode 100644 (file)
index 0000000..ab287aa
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use api\v4\UnitTestCase;
+
+/**
+ * Class UpdateContactTest
+ * @package api\v4\Action
+ * @group headless
+ */
+class UpdateContactTest extends UnitTestCase {
+
+  public function testUpdateWithIdInWhere() {
+    $contactId = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Johann')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->execute()
+      ->first()['id'];
+
+    $contact = Contact::update()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $contactId)
+      ->addValue('first_name', 'Testy')
+      ->execute()
+      ->first();
+    $this->assertEquals('Testy', $contact['first_name']);
+    $this->assertEquals('Tester', $contact['last_name']);
+  }
+
+  public function testUpdateWithIdInValues() {
+    $contactId = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Bobby')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->execute()
+      ->first()['id'];
+
+    $contact = Contact::update()
+      ->setCheckPermissions(FALSE)
+      ->addValue('id', $contactId)
+      ->addValue('first_name', 'Billy')
+      ->execute();
+    $this->assertCount(1, $contact);
+    $this->assertEquals($contactId, $contact[0]['id']);
+    $this->assertEquals('Billy', $contact[0]['first_name']);
+    $this->assertEquals('Tester', $contact[0]['last_name']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Action/UpdateCustomValueTest.php b/tests/phpunit/api/v4/Action/UpdateCustomValueTest.php
new file mode 100644 (file)
index 0000000..7da8640
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Action;
+
+use Civi\Api4\Contact;
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+use CRM_Core_BAO_CustomValueTable as CustomValueTable;
+
+/**
+ * @group headless
+ */
+class UpdateCustomValueTest extends BaseCustomValueTest {
+
+  public function testGetWithCustomData() {
+
+    $customGroup = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'MyContactFields')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first();
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavColor')
+      ->addValue('custom_group_id', $customGroup['id'])
+      ->addValue('html_type', 'Text')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $contactId = Contact::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('first_name', 'Red')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->addValue('MyContactFields.FavColor', 'Red')
+      ->execute()
+      ->first()['id'];
+
+    Contact::update()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $contactId)
+      ->addValue('first_name', 'Red')
+      ->addValue('last_name', 'Tester')
+      ->addValue('contact_type', 'Individual')
+      ->addValue('MyContactFields.FavColor', 'Blue')
+      ->execute();
+
+    $result = CustomValueTable::getEntityValues($contactId, 'Contact');
+
+    $this->assertEquals(1, count($result));
+    $this->assertContains('Blue', $result);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/AllTests.php b/tests/phpunit/api/v4/AllTests.php
new file mode 100644 (file)
index 0000000..45aedb9
--- /dev/null
@@ -0,0 +1,103 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+// vim: set si ai expandtab tabstop=4 shiftwidth=4 softtabstop=4:
+
+/**
+ *  File for the api_v4_AllTests class
+ *
+ *  (PHP 5)
+ *
+ * @author Walt Haas <walt@dharmatech.org> (801) 534-1262
+ * @copyright Copyright CiviCRM LLC (C) 2009
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html
+ *              GNU Affero General Public License version 3
+ * @version   $Id: AllTests.php 40328 2012-05-11 23:06:13Z allen $
+ * @package   CiviCRM
+ *
+ *   This file is part of CiviCRM
+ *
+ *   CiviCRM is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU Affero General Public License
+ *   as published by the Free Software Foundation; either version 3 of
+ *   the License, or (at your option) any later version.
+ *
+ *   CiviCRM is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU Affero General Public License for more details.
+ *
+ *   You should have received a copy of the GNU Affero General Public
+ *   License along with this program.  If not, see
+ *   <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ *  Class containing the APIv4 test suite
+ *
+ * @package   CiviCRM
+ */
+class api_v4_AllTests extends CiviTestSuite {
+  private static $instance = NULL;
+
+  /**
+   */
+  private static function getInstance() {
+    if (is_null(self::$instance)) {
+      self::$instance = new self();
+    }
+    return self::$instance;
+  }
+
+  /**
+   *  Build test suite dynamically.
+   */
+  public static function suite() {
+    $inst = self::getInstance();
+    return $inst->implSuite(__FILE__);
+  }
+
+}
+// class AllTests
+
+// -- set Emacs parameters --
+// Local variables:
+// mode: php;
+// tab-width: 4
+// c-basic-offset: 4
+// c-hanging-comment-ender-p: nil
+// indent-tabs-mode: nil
+// End:
diff --git a/tests/phpunit/api/v4/DataSets/ConformanceTest.json b/tests/phpunit/api/v4/DataSets/ConformanceTest.json
new file mode 100644 (file)
index 0000000..1028c5b
--- /dev/null
@@ -0,0 +1,42 @@
+{
+  "Contact": [
+    {
+      "first_name": "Janice",
+      "last_name": "Voss",
+      "contact_type": "Individual",
+      "@ref": "test_contact_1"
+    }
+  ],
+  "CustomGroup": [
+    {
+      "name": "MyFavoriteThings",
+      "extends": "Contact"
+    }
+  ],
+  "Event": [
+    {
+      "start_date": "20401010000000",
+      "title": "The Singularity",
+      "event_type_id": "major_historical_event"
+    }
+  ],
+  "Group": [
+    {
+      "name": "the_group",
+      "title": "The Group"
+    }
+  ],
+  "Mapping": [
+    {
+      "name": "the_mapping",
+      "mapping_type_id": "1"
+    }
+  ],
+  "Activity": [
+    {
+      "subject": "Test A Phone Activity",
+      "activity_type": "Phone Call",
+      "source_contact_id": "@ref test_contact_1.id"
+    }
+  ]
+}
diff --git a/tests/phpunit/api/v4/DataSets/DefaultDataSet.json b/tests/phpunit/api/v4/DataSets/DefaultDataSet.json
new file mode 100644 (file)
index 0000000..7d4a91b
--- /dev/null
@@ -0,0 +1,45 @@
+{
+  "Contact": [
+    {
+      "first_name": "Phoney",
+      "last_name": "Contact",
+      "contact_type": "Individual",
+      "@ref": "test_contact_1"
+    },
+    {
+      "first_name": "Second",
+      "last_name": "Test",
+      "contact_type": "Individual",
+      "@ref": "test_contact_2"
+    }
+  ],
+  "Activity": [
+    {
+      "subject": "Test Phone Activity",
+      "activity_type": "Phone Call",
+      "source_contact_id": "@ref test_contact_1.id"
+    },
+    {
+      "subject": "Another Activity",
+      "activity_type": "Meeting",
+      "source_contact_id": "@ref test_contact_1.id",
+      "assignee_contact_id": [
+        "@ref test_contact_1.id",
+        "@ref test_contact_2.id"
+      ]
+    }
+  ],
+  "Phone": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "phone": "+35355439483",
+      "location_type_id": "1",
+      "@ref": "test_phone_1"
+    },
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "phone": "+3538733439483",
+      "location_type_id": "2"
+    }
+  ]
+}
diff --git a/tests/phpunit/api/v4/DataSets/MultiContactMultiEmail.json b/tests/phpunit/api/v4/DataSets/MultiContactMultiEmail.json
new file mode 100644 (file)
index 0000000..ce3fbca
--- /dev/null
@@ -0,0 +1,42 @@
+{
+  "Contact": [
+    {
+      "first_name": "First",
+      "last_name": "Contact",
+      "contact_type": "Individual",
+      "@ref": "test_contact_1"
+    },
+    {
+      "first_name": "Second",
+      "last_name": "Contact",
+      "contact_type": "Individual",
+      "@ref": "test_contact_2"
+    }
+  ],
+  "Email": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "email": "test_contact_one_home@fakedomain.com",
+      "location_type_id": 1,
+      "@ref": "test_email_1"
+    },
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "email": "test_contact_one_work@fakedomain.com",
+      "location_type_id": 2,
+      "@ref": "test_email_2"
+    },
+    {
+      "contact_id": "@ref test_contact_2.id",
+      "email": "test_contact_two_home@fakedomain.com",
+      "location_type_id": 1,
+      "@ref": "test_email_3"
+    },
+    {
+      "contact_id": "@ref test_contact_2.id",
+      "email": "test_contact_two_work@fakedomain.com",
+      "location_type_id": 2,
+      "@ref": "test_email_4"
+    }
+  ]
+}
diff --git a/tests/phpunit/api/v4/DataSets/SingleContact.json b/tests/phpunit/api/v4/DataSets/SingleContact.json
new file mode 100644 (file)
index 0000000..73e7369
--- /dev/null
@@ -0,0 +1,81 @@
+{
+  "Contact": [
+    {
+      "first_name": "Single",
+      "last_name": "Contact",
+      "contact_type": "Individual",
+      "preferred_communication_method": "1",
+      "@ref": "test_contact_1"
+    }
+  ],
+  "Activity": [
+    {
+      "subject": "Won A Nobel Prize",
+      "activity_type": "Meeting",
+      "source_contact_id": "@ref test_contact_1.id",
+      "@ref": "test_activity_1"
+    },
+    {
+      "subject": "Cleaned The House",
+      "activity_type": "Meeting",
+      "source_contact_id": "@ref test_contact_1.id",
+      "assignee_contact_id": [
+        "@ref test_contact_1.id"
+      ],
+      "@ref": "test_activity_2"
+    }
+  ],
+  "Phone": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "phone": "+1111111111111",
+      "location_type_id": 1
+    },
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "phone": "+2222222222222",
+      "location_type_id": 2
+    }
+  ],
+  "Email": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "email": "test_contact_home@fakedomain.com",
+      "location_type_id": 1
+    },
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "email": "test_contact_work@fakedomain.com",
+      "location_type_id": 2
+    }
+  ],
+  "Address": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "street_address": "123 Sesame St.",
+      "location_type_id": 1
+    }
+  ],
+  "Website": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "url": "http://test.com",
+      "website_id": 1
+    }
+  ],
+  "OpenID": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "openid": "123",
+      "allowed_to_login": 1,
+      "location_type_id": 1
+    }
+  ],
+  "IM": [
+    {
+      "contact_id": "@ref test_contact_1.id",
+      "name": "123",
+      "location_type_id": 1
+    }
+  ]
+}
diff --git a/tests/phpunit/api/v4/Entity/ConformanceTest.php b/tests/phpunit/api/v4/Entity/ConformanceTest.php
new file mode 100644 (file)
index 0000000..296368e
--- /dev/null
@@ -0,0 +1,283 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Entity;
+
+use Civi\Api4\Entity;
+use api\v4\Traits\TableDropperTrait;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class ConformanceTest extends UnitTestCase {
+
+  use TableDropperTrait;
+  use \api\v4\Traits\OptionCleanupTrait {
+    setUp as setUpOptionCleanup;
+  }
+
+  /**
+   * @var \api\v4\Service\TestCreationParameterProvider
+   */
+  protected $creationParamProvider;
+
+  /**
+   * Set up baseline for testing
+   */
+  public function setUp() {
+    $tablesToTruncate = [
+      'civicrm_custom_group',
+      'civicrm_custom_field',
+      'civicrm_group',
+      'civicrm_event',
+      'civicrm_participant',
+    ];
+    $this->dropByPrefix('civicrm_value_myfavorite');
+    $this->cleanup(['tablesToTruncate' => $tablesToTruncate]);
+    $this->setUpOptionCleanup();
+    $this->loadDataSet('ConformanceTest');
+    $this->creationParamProvider = \Civi::container()->get('test.param_provider');
+    parent::setUp();
+    // calculateTaxAmount() for contribution triggers a deprecation notice
+    \PHPUnit\Framework\Error\Deprecated::$enabled = FALSE;
+  }
+
+  public function getEntities() {
+    return Entity::get()->setCheckPermissions(FALSE)->execute()->column('name');
+  }
+
+  /**
+   * Fixme: This should use getEntities as a dataProvider but that fails for some reason
+   */
+  public function testConformance() {
+    $entities = $this->getEntities();
+    $this->assertNotEmpty($entities);
+
+    foreach ($entities as $data) {
+      $entity = $data;
+      $entityClass = 'Civi\Api4\\' . $entity;
+
+      $actions = $this->checkActions($entityClass);
+
+      // Go no further if it's not a CRUD entity
+      if (array_diff(['get', 'create', 'update', 'delete'], array_keys($actions))) {
+        continue;
+      }
+
+      $this->checkFields($entityClass, $entity);
+      $id = $this->checkCreation($entity, $entityClass);
+      $this->checkGet($entityClass, $id, $entity);
+      $this->checkGetCount($entityClass, $id, $entity);
+      $this->checkUpdateFailsFromCreate($entityClass, $id);
+      $this->checkWrongParamType($entityClass);
+      $this->checkDeleteWithNoId($entityClass);
+      $this->checkDeletion($entityClass, $id);
+      $this->checkPostDelete($entityClass, $id, $entity);
+    }
+  }
+
+  /**
+   * @param string $entityClass
+   * @param $entity
+   */
+  protected function checkFields($entityClass, $entity) {
+    $fields = $entityClass::getFields()
+      ->setCheckPermissions(FALSE)
+      ->setIncludeCustom(FALSE)
+      ->execute()
+      ->indexBy('name');
+
+    $errMsg = sprintf('%s is missing required ID field', $entity);
+    $subset = ['data_type' => 'Integer'];
+
+    $this->assertArraySubset($subset, $fields['id'], $errMsg);
+  }
+
+  /**
+   * @param string $entityClass
+   */
+  protected function checkActions($entityClass) {
+    $actions = $entityClass::getActions()
+      ->setCheckPermissions(FALSE)
+      ->execute()
+      ->indexBy('name');
+
+    $this->assertNotEmpty($actions);
+    return (array) $actions;
+  }
+
+  /**
+   * @param string $entity
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   *
+   * @return mixed
+   */
+  protected function checkCreation($entity, $entityClass) {
+    $requiredParams = $this->creationParamProvider->getRequired($entity);
+    $createResult = $entityClass::create()
+      ->setValues($requiredParams)
+      ->setCheckPermissions(FALSE)
+      ->execute()
+      ->first();
+
+    $this->assertArrayHasKey('id', $createResult, "create missing ID");
+    $id = $createResult['id'];
+
+    $this->assertGreaterThanOrEqual(1, $id, "$entity ID not positive");
+
+    return $id;
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   * @param int $id
+   */
+  protected function checkUpdateFailsFromCreate($entityClass, $id) {
+    $exceptionThrown = '';
+    try {
+      $entityClass::create()
+        ->setCheckPermissions(FALSE)
+        ->addValue('id', $id)
+        ->execute();
+    }
+    catch (\API_Exception $e) {
+      $exceptionThrown = $e->getMessage();
+    }
+    $this->assertContains('id', $exceptionThrown);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   * @param int $id
+   * @param string $entity
+   */
+  protected function checkGet($entityClass, $id, $entity) {
+    $getResult = $entityClass::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $id)
+      ->execute();
+
+    $errMsg = sprintf('Failed to fetch a %s after creation', $entity);
+    $this->assertEquals($id, $getResult->first()['id'], $errMsg);
+    $this->assertEquals(1, $getResult->count(), $errMsg);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   * @param int $id
+   * @param string $entity
+   */
+  protected function checkGetCount($entityClass, $id, $entity) {
+    $getResult = $entityClass::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $id)
+      ->selectRowCount()
+      ->execute();
+    $errMsg = sprintf('%s getCount failed', $entity);
+    $this->assertEquals(1, $getResult->count(), $errMsg);
+
+    $getResult = $entityClass::get()
+      ->setCheckPermissions(FALSE)
+      ->selectRowCount()
+      ->execute();
+    $errMsg = sprintf('%s getCount failed', $entity);
+    $this->assertGreaterThanOrEqual(1, $getResult->count(), $errMsg);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   */
+  protected function checkDeleteWithNoId($entityClass) {
+    $exceptionThrown = '';
+    try {
+      $entityClass::delete()
+        ->execute();
+    }
+    catch (\API_Exception $e) {
+      $exceptionThrown = $e->getMessage();
+    }
+    $this->assertContains('required', $exceptionThrown);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   */
+  protected function checkWrongParamType($entityClass) {
+    $exceptionThrown = '';
+    try {
+      $entityClass::get()
+        ->setCheckPermissions('nada')
+        ->execute();
+    }
+    catch (\API_Exception $e) {
+      $exceptionThrown = $e->getMessage();
+    }
+    $this->assertContains('checkPermissions', $exceptionThrown);
+    $this->assertContains('type', $exceptionThrown);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   * @param int $id
+   */
+  protected function checkDeletion($entityClass, $id) {
+    $deleteResult = $entityClass::delete()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $id)
+      ->execute();
+
+    // should get back an array of deleted id
+    $this->assertEquals([['id' => $id]], (array) $deleteResult);
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractEntity|string $entityClass
+   * @param int $id
+   * @param string $entity
+   */
+  protected function checkPostDelete($entityClass, $id, $entity) {
+    $getDeletedResult = $entityClass::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('id', '=', $id)
+      ->execute();
+
+    $errMsg = sprintf('Entity "%s" was not deleted', $entity);
+    $this->assertEquals(0, count($getDeletedResult), $errMsg);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Entity/ContactJoinTest.php b/tests/phpunit/api/v4/Entity/ContactJoinTest.php
new file mode 100644 (file)
index 0000000..31d870c
--- /dev/null
@@ -0,0 +1,138 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Entity;
+
+use Civi\Api4\Contact;
+use Civi\Api4\OptionValue;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class ContactJoinTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $relatedTables = [
+      'civicrm_address',
+      'civicrm_email',
+      'civicrm_phone',
+      'civicrm_openid',
+      'civicrm_im',
+      'civicrm_website',
+      'civicrm_activity',
+      'civicrm_activity_contact',
+    ];
+
+    $this->cleanup(['tablesToTruncate' => $relatedTables]);
+    $this->loadDataSet('SingleContact');
+
+    return parent::setUpHeadless();
+  }
+
+  public function testContactJoin() {
+
+    $contact = $this->getReference('test_contact_1');
+    $entitiesToTest = ['Address', 'OpenID', 'IM', 'Website', 'Email', 'Phone'];
+
+    foreach ($entitiesToTest as $entity) {
+      $results = civicrm_api4($entity, 'get', [
+        'where' => [['contact_id', '=', $contact['id']]],
+        'select' => ['contact.display_name', 'contact.id'],
+      ]);
+      foreach ($results as $result) {
+        $this->assertEquals($contact['id'], $result['contact.id']);
+        $this->assertEquals($contact['display_name'], $result['contact.display_name']);
+      }
+    }
+  }
+
+  public function testJoinToPCMWillReturnArray() {
+    $contact = Contact::create()->setValues([
+      'preferred_communication_method' => [1, 2, 3],
+      'contact_type' => 'Individual',
+      'first_name' => 'Test',
+      'last_name' => 'PCM',
+    ])->execute()->first();
+
+    $fetchedContact = Contact::get()
+      ->addWhere('id', '=', $contact['id'])
+      ->addSelect('preferred_communication_method')
+      ->execute()
+      ->first();
+
+    $this->assertCount(3, $fetchedContact["preferred_communication_method"]);
+  }
+
+  public function testJoinToPCMOptionValueWillShowLabel() {
+    $options = OptionValue::get()
+      ->addWhere('option_group.name', '=', 'preferred_communication_method')
+      ->execute()
+      ->getArrayCopy();
+
+    $optionValues = array_column($options, 'value');
+    $labels = array_column($options, 'label');
+
+    $contact = Contact::create()->setValues([
+      'preferred_communication_method' => $optionValues,
+      'contact_type' => 'Individual',
+      'first_name' => 'Test',
+      'last_name' => 'PCM',
+    ])->execute()->first();
+
+    $contact2 = Contact::create()->setValues([
+      'preferred_communication_method' => $optionValues,
+      'contact_type' => 'Individual',
+      'first_name' => 'Test',
+      'last_name' => 'PCM2',
+    ])->execute()->first();
+
+    $contactIds = array_column([$contact, $contact2], 'id');
+
+    $fetchedContact = Contact::get()
+      ->addWhere('id', 'IN', $contactIds)
+      ->addSelect('preferred_communication_method.label')
+      ->execute()
+      ->first();
+
+    $preferredMethod = $fetchedContact['preferred_communication_method'];
+    $returnedLabels = array_column($preferredMethod, 'label');
+
+    $this->assertEquals($labels, $returnedLabels);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Entity/EntityTest.php b/tests/phpunit/api/v4/Entity/EntityTest.php
new file mode 100644 (file)
index 0000000..27a6f15
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Entity;
+
+use Civi\Api4\Entity;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class EntityTest extends UnitTestCase {
+
+  public function testEntityGet() {
+    $result = Entity::get()
+      ->setCheckPermissions(FALSE)
+      ->execute()
+      ->indexBy('name');
+    $this->assertArrayHasKey('Entity', $result,
+      "Entity::get missing itself");
+    $this->assertArrayHasKey('Participant', $result,
+      "Entity::get missing Participant");
+  }
+
+  public function testEntity() {
+    $result = Entity::getActions()
+      ->setCheckPermissions(FALSE)
+      ->execute()
+      ->indexBy('name');
+    $this->assertNotContains(
+      'create',
+      array_keys((array) $result),
+      "Entity entity has more than basic actions");
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Entity/ParticipantTest.php b/tests/phpunit/api/v4/Entity/ParticipantTest.php
new file mode 100644 (file)
index 0000000..e6ccc7c
--- /dev/null
@@ -0,0 +1,256 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Entity;
+
+use Civi\Api4\Participant;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class ParticipantTest extends UnitTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $cleanup_params = [
+      'tablesToTruncate' => [
+        'civicrm_event',
+        'civicrm_participant',
+      ],
+    ];
+    $this->cleanup($cleanup_params);
+  }
+
+  public function testGetActions() {
+    $result = Participant::getActions()
+      ->setCheckPermissions(FALSE)
+      ->execute()
+      ->indexBy('name');
+
+    $getParams = $result['get']['params'];
+    $whereDescription = 'Criteria for selecting items.';
+
+    $this->assertEquals(TRUE, $getParams['checkPermissions']['default']);
+    $this->assertEquals($whereDescription, $getParams['where']['description']);
+  }
+
+  public function testGet() {
+    $rows = $this->getRowCount('civicrm_participant');
+    if ($rows > 0) {
+      $this->markTestSkipped('Participant table must be empty');
+    }
+
+    // With no records:
+    $result = Participant::get()->setCheckPermissions(FALSE)->execute();
+    $this->assertEquals(0, $result->count(), "count of empty get is not 0");
+
+    // Check that the $result knows what the inputs were
+    $this->assertEquals('Participant', $result->entity);
+    $this->assertEquals('get', $result->action);
+    $this->assertEquals(4, $result->version);
+
+    // Create some test related records before proceeding
+    $participantCount = 20;
+    $contactCount = 7;
+    $eventCount = 5;
+
+    // All events will either have this number or one less because of the
+    // rotating participation creation method.
+    $expectedFirstEventCount = ceil($participantCount / $eventCount);
+
+    $dummy = [
+      'contacts' => $this->createEntity([
+        'type' => 'Individual',
+        'count' => $contactCount,
+        'seq' => 1,
+      ]),
+      'events' => $this->createEntity([
+        'type' => 'Event',
+        'count' => $eventCount,
+        'seq' => 1,
+      ]),
+      'sources' => ['Paddington', 'Springfield', 'Central'],
+    ];
+
+    // - create dummy participants record
+    for ($i = 0; $i < $participantCount; $i++) {
+      $dummy['participants'][$i] = $this->sample([
+        'type' => 'Participant',
+        'overrides' => [
+          'event_id' => $dummy['events'][$i % $eventCount]['id'],
+          'contact_id' => $dummy['contacts'][$i % $contactCount]['id'],
+          // 3 = number of sources
+          'source' => $dummy['sources'][$i % 3],
+        ],
+      ])['sample_params'];
+
+      Participant::create()
+        ->setValues($dummy['participants'][$i])
+        ->setCheckPermissions(FALSE)
+        ->execute();
+    }
+    $sqlCount = $this->getRowCount('civicrm_participant');
+    $this->assertEquals($participantCount, $sqlCount, "Unexpected count");
+
+    $firstEventId = $dummy['events'][0]['id'];
+    $secondEventId = $dummy['events'][1]['id'];
+    $firstContactId = $dummy['contacts'][0]['id'];
+
+    $firstOnlyResult = Participant::get()
+      ->setCheckPermissions(FALSE)
+      ->addClause('AND', ['event_id', '=', $firstEventId])
+      ->execute();
+
+    $this->assertEquals($expectedFirstEventCount, count($firstOnlyResult),
+      "count of first event is not $expectedFirstEventCount");
+
+    // get first two events using different methods
+    $firstTwo = Participant::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('event_id', 'IN', [$firstEventId, $secondEventId])
+      ->execute();
+
+    $firstResult = $result->first();
+
+    // verify counts
+    // count should either twice the first event count or one less
+    $this->assertLessThanOrEqual(
+      $expectedFirstEventCount * 2,
+      count($firstTwo),
+      "count is too high"
+    );
+
+    $this->assertGreaterThanOrEqual(
+      $expectedFirstEventCount * 2 - 1,
+      count($firstTwo),
+      "count is too low"
+    );
+
+    $firstParticipantResult = Participant::get()
+      ->setCheckPermissions(FALSE)
+      ->addWhere('event_id', '=', $firstEventId)
+      ->addWhere('contact_id', '=', $firstContactId)
+      ->execute();
+
+    $this->assertEquals(1, count($firstParticipantResult), "more than one registration");
+
+    $firstParticipantId = $firstParticipantResult->first()['id'];
+
+    // get a result which excludes $first_participant
+    $otherParticipantResult = Participant::get()
+      ->setCheckPermissions(FALSE)
+      ->setSelect(['id'])
+      ->addClause('NOT', [
+        ['event_id', '=', $firstEventId],
+        ['contact_id', '=', $firstContactId],
+      ])
+      ->execute()
+      ->indexBy('id');
+
+    // check alternate syntax for NOT
+    $otherParticipantResult2 = Participant::get()
+      ->setCheckPermissions(FALSE)
+      ->setSelect(['id'])
+      ->addClause('NOT', 'AND', [
+        ['event_id', '=', $firstEventId],
+        ['contact_id', '=', $firstContactId],
+      ])
+      ->execute()
+      ->indexBy('id');
+
+    $this->assertEquals($otherParticipantResult, $otherParticipantResult2);
+
+    $this->assertEquals($participantCount - 1,
+      count($otherParticipantResult),
+      "failed to exclude a single record on complex criteria");
+    // check the record we have excluded is the right one:
+
+    $this->assertFalse(
+      $otherParticipantResult->offsetExists($firstParticipantId),
+      'excluded wrong record');
+
+    // retrieve a participant record and update some records
+    $patchRecord = [
+      'source' => "not " . $firstResult['source'],
+    ];
+
+    Participant::update()
+      ->addWhere('event_id', '=', $firstEventId)
+      ->setCheckPermissions(FALSE)
+      ->setLimit(20)
+      ->setValues($patchRecord)
+      ->setCheckPermissions(FALSE)
+      ->execute();
+
+    // - delete some records
+    $secondEventId = $dummy['events'][1]['id'];
+    $deleteResult = Participant::delete()
+      ->addWhere('event_id', '=', $secondEventId)
+      ->setCheckPermissions(FALSE)
+      ->execute();
+    $expectedDeletes = [2, 7, 12, 17];
+    $this->assertEquals($expectedDeletes, array_column((array) $deleteResult, 'id'),
+      "didn't delete every second record as expected");
+
+    $sqlCount = $this->getRowCount('civicrm_participant');
+    $this->assertEquals(
+      $participantCount - count($expectedDeletes),
+      $sqlCount,
+      "records not gone from database after delete");
+
+    // Try creating is_test participants
+    foreach ($dummy['contacts'] as $contact) {
+      Participant::create()
+        ->addValue('is_test', 1)
+        ->addValue('contact_id', $contact['id'])
+        ->addValue('event_id', $secondEventId)
+        ->execute();
+    }
+
+    // By default is_test participants are hidden
+    $this->assertCount(0, Participant::get()->selectRowCount()->addWhere('event_id', '=', $secondEventId)->execute());
+
+    // Test records show up if you add is_test to the query
+    $testParticipants = Participant::get()->addWhere('event_id', '=', $secondEventId)->addWhere('is_test', '=', 1)->addSelect('id')->execute();
+    $this->assertCount($contactCount, $testParticipants);
+
+    // Or if you search by id
+    $this->assertCount(1, Participant::get()->selectRowCount()->addWhere('id', '=', $testParticipants->first()['id'])->execute());
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Entity/RouteTest.php b/tests/phpunit/api/v4/Entity/RouteTest.php
new file mode 100644 (file)
index 0000000..b9fc45a
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Entity;
+
+use Civi\Api4\Route;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class RouteTest extends UnitTestCase {
+
+  public function testGet() {
+    $result = Route::get()->addWhere('path', '=', 'civicrm/admin')->execute();
+    $this->assertEquals(1, $result->count());
+
+    $result = Route::get()->addWhere('path', 'LIKE', 'civicrm/admin/%')->execute();
+    $this->assertGreaterThan(10, $result->count());
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Entity/SettingTest.php b/tests/phpunit/api/v4/Entity/SettingTest.php
new file mode 100644 (file)
index 0000000..00fc4ea
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Entity;
+
+use Civi\Api4\Setting;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class SettingTest extends UnitTestCase {
+
+  public function testSettingASetting() {
+    $setting = Setting::set()->addValue('menubar_position', 'above-crm-container')->setCheckPermissions(FALSE)->execute()->first();
+    $this->assertEquals('above-crm-container', $setting['value']);
+    $setting = Setting::get()->addSelect('menubar_position')->setCheckPermissions(FALSE)->execute()->first();
+    $this->assertEquals('above-crm-container', $setting['value']);
+
+    $setting = Setting::revert()->addSelect('menubar_position')->setCheckPermissions(FALSE)->execute()->indexBy('name')->column('value');
+    $this->assertEquals(['menubar_position' => 'over-cms-menu'], $setting);
+    $setting = civicrm_api4('Setting', 'get', ['select' => ['menubar_position'], 'checkPermissions' => FALSE], 0);
+    $this->assertEquals('over-cms-menu', $setting['value']);
+  }
+
+  public function testInvalidSetting() {
+    $message = '';
+    try {
+      Setting::set()->addValue('not_a_real_setting!', 'hello')->setCheckPermissions(FALSE)->execute();
+    }
+    catch (\API_Exception $e) {
+      $message = $e->getMessage();
+    }
+    $this->assertContains('setting', $message);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Mock/Api4/Action/MockArrayEntity/Get.php b/tests/phpunit/api/v4/Mock/Api4/Action/MockArrayEntity/Get.php
new file mode 100644 (file)
index 0000000..c18db65
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4\Action\MockArrayEntity;
+
+/**
+ * This class demonstrates how the getRecords method of Basic\Get can be overridden.
+ */
+class Get extends \Civi\Api4\Generic\BasicGetAction {
+
+  public function getRecords() {
+    return [
+      [
+        'field1' => 1,
+        'field2' => 'zebra',
+        'field3' => NULL,
+        'field4' => [1, 2, 3],
+        'field5' => 'apple',
+      ],
+      [
+        'field1' => 2,
+        'field2' => 'yack',
+        'field3' => 0,
+        'field4' => [2, 3, 4],
+        'field5' => 'banana',
+        'field6' => '',
+      ],
+      [
+        'field1' => 3,
+        'field2' => 'x ray',
+        'field4' => [3, 4, 5],
+        'field5' => 'banana',
+        'field6' => 0,
+      ],
+      [
+        'field1' => 4,
+        'field2' => 'wildebeest',
+        'field3' => 1,
+        'field4' => [4, 5, 6],
+        'field5' => 'apple',
+        'field6' => '0',
+      ],
+      [
+        'field1' => 5,
+        'field2' => 'vole',
+        'field3' => 1,
+        'field4' => [4, 5, 6],
+        'field5' => 'apple',
+        'field6' => 0,
+      ],
+    ];
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Mock/Api4/MockArrayEntity.php b/tests/phpunit/api/v4/Mock/Api4/MockArrayEntity.php
new file mode 100644 (file)
index 0000000..12324c3
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+use Civi\Api4\Generic\BasicGetFieldsAction;
+
+/**
+ * MockArrayEntity entity.
+ *
+ * @method Generic\BasicGetAction get()
+ *
+ * @package Civi\Api4
+ */
+class MockArrayEntity extends Generic\AbstractEntity {
+
+  public static function getFields() {
+    return new BasicGetFieldsAction(static::class, __FUNCTION__, function() {
+      return [];
+    });
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Mock/Api4/MockBasicEntity.php b/tests/phpunit/api/v4/Mock/Api4/MockBasicEntity.php
new file mode 100644 (file)
index 0000000..30b2619
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace Civi\Api4;
+
+use api\v4\Mock\MockEntityDataStorage;
+
+/**
+ * MockBasicEntity entity.
+ *
+ * @package Civi\Api4
+ */
+class MockBasicEntity extends Generic\AbstractEntity {
+
+  /**
+   * @return Generic\BasicGetFieldsAction
+   */
+  public static function getFields() {
+    return new Generic\BasicGetFieldsAction(static::class, __FUNCTION__, function() {
+      return [
+        [
+          'name' => 'id',
+          'type' => 'Integer',
+        ],
+        [
+          'name' => 'group',
+          'options' => [
+            'one' => 'One',
+            'two' => 'Two',
+          ],
+        ],
+        [
+          'name' => 'color',
+        ],
+        [
+          'name' => 'shape',
+        ],
+        [
+          'name' => 'size',
+        ],
+        [
+          'name' => 'weight',
+        ],
+      ];
+    });
+  }
+
+  /**
+   * @return Generic\BasicGetAction
+   */
+  public static function get() {
+    return new Generic\BasicGetAction('MockBasicEntity', __FUNCTION__, [MockEntityDataStorage::CLASS, 'get']);
+  }
+
+  /**
+   * @return Generic\BasicCreateAction
+   */
+  public static function create() {
+    return new Generic\BasicCreateAction(static::class, __FUNCTION__, [MockEntityDataStorage::CLASS, 'write']);
+  }
+
+  /**
+   * @return Generic\BasicSaveAction
+   */
+  public static function save() {
+    return new Generic\BasicSaveAction(self::getEntityName(), __FUNCTION__, 'id', [MockEntityDataStorage::CLASS, 'write']);
+  }
+
+  /**
+   * @return Generic\BasicUpdateAction
+   */
+  public static function update() {
+    return new Generic\BasicUpdateAction(self::getEntityName(), __FUNCTION__, 'id', [MockEntityDataStorage::CLASS, 'write']);
+  }
+
+  /**
+   * @return Generic\BasicBatchAction
+   */
+  public static function delete() {
+    return new Generic\BasicBatchAction('MockBasicEntity', __FUNCTION__, 'id', [MockEntityDataStorage::CLASS, 'delete']);
+  }
+
+  /**
+   * @return Generic\BasicBatchAction
+   */
+  public static function batchFrobnicate() {
+    return new Generic\BasicBatchAction('MockBasicEntity', __FUNCTION__, ['id', 'number'], function ($item) {
+      return [
+        'id' => $item['id'],
+        'frobnication' => $item['number'] * $item['number'],
+      ];
+    });
+  }
+
+  /**
+   * @return Generic\BasicReplaceAction
+   */
+  public static function replace() {
+    return new Generic\BasicReplaceAction('MockBasicEntity', __FUNCTION__);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Mock/MockEntityDataStorage.php b/tests/phpunit/api/v4/Mock/MockEntityDataStorage.php
new file mode 100644 (file)
index 0000000..6ab6d97
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Mock;
+
+/**
+ * Simple data backend for mock basic api.
+ */
+class MockEntityDataStorage {
+
+  private static $data = [];
+
+  private static $nextId = 1;
+
+  public static function get() {
+    return self::$data;
+  }
+
+  public static function write($record) {
+    if (empty($record['id'])) {
+      $record['id'] = self::$nextId++;
+      self::$data[$record['id']] = $record;
+    }
+    else {
+      self::$data[$record['id']] = $record + self::$data[$record['id']];
+    }
+    return $record;
+  }
+
+  public static function delete($record) {
+    unset(self::$data[$record['id']]);
+    return $record;
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Mock/MockV4ReflectionBase.php b/tests/phpunit/api/v4/Mock/MockV4ReflectionBase.php
new file mode 100644 (file)
index 0000000..a8a32fb
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Mock;
+
+/**
+ * Class TestV4ReflectionBase
+ *
+ * This is the base class.
+ *
+ * @internal
+ */
+class MockV4ReflectionBase {
+  /**
+   * This is the foo property.
+   *
+   * In general, you can do nothing with it.
+   *
+   * @var array
+   */
+  public $foo = [];
+
+}
diff --git a/tests/phpunit/api/v4/Mock/MockV4ReflectionChild.php b/tests/phpunit/api/v4/Mock/MockV4ReflectionChild.php
new file mode 100644 (file)
index 0000000..5ce88e7
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Mock;
+
+/**
+ * @inheritDoc
+ */
+class MockV4ReflectionChild extends MockV4ReflectionBase {
+  /**
+   * @var array
+   * @inheritDoc
+   *
+   * In the child class, foo has been barred.
+   */
+  public $foo = ['bar' => 1];
+
+}
diff --git a/tests/phpunit/api/v4/Mock/MockV4ReflectionGrandchild.php b/tests/phpunit/api/v4/Mock/MockV4ReflectionGrandchild.php
new file mode 100644 (file)
index 0000000..a481008
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Mock;
+
+/**
+ * Grandchild class
+ *
+ * This is an extended description.
+ *
+ * There is a line break in this description.
+ *
+ * @inheritdoc
+ */
+class MockV4ReflectionGrandchild extends MockV4ReflectionChild {
+
+}
diff --git a/tests/phpunit/api/v4/Query/Api4SelectQueryComplexJoinTest.php b/tests/phpunit/api/v4/Query/Api4SelectQueryComplexJoinTest.php
new file mode 100644 (file)
index 0000000..6b5acd0
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Query;
+
+use Civi\Api4\Query\Api4SelectQuery;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class Api4SelectQueryComplexJoinTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $relatedTables = [
+      'civicrm_address',
+      'civicrm_email',
+      'civicrm_phone',
+      'civicrm_openid',
+      'civicrm_im',
+      'civicrm_website',
+      'civicrm_activity',
+      'civicrm_activity_contact',
+    ];
+    $this->cleanup(['tablesToTruncate' => $relatedTables]);
+    $this->loadDataSet('SingleContact');
+    return parent::setUpHeadless();
+  }
+
+  public function testWithComplexRelatedEntitySelect() {
+    $query = new Api4SelectQuery('Contact', FALSE, civicrm_api4('Contact', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->select[] = 'id';
+    $query->select[] = 'display_name';
+    $query->select[] = 'phones.phone';
+    $query->select[] = 'emails.email';
+    $query->select[] = 'emails.location_type.name';
+    $query->select[] = 'created_activities.contact_id';
+    $query->select[] = 'created_activities.activity.subject';
+    $query->select[] = 'created_activities.activity.activity_type.name';
+    $query->where[] = ['first_name', '=', 'Single'];
+    $query->where[] = ['id', '=', $this->getReference('test_contact_1')['id']];
+    $results = $query->run();
+
+    $testActivities = [
+      $this->getReference('test_activity_1'),
+      $this->getReference('test_activity_2'),
+    ];
+    $activitySubjects = array_column($testActivities, 'subject');
+
+    $this->assertCount(1, $results);
+    $firstResult = array_shift($results);
+    $this->assertArrayHasKey('created_activities', $firstResult);
+    $firstCreatedActivity = array_shift($firstResult['created_activities']);
+    $this->assertArrayHasKey('activity', $firstCreatedActivity);
+    $firstActivity = $firstCreatedActivity['activity'];
+    $this->assertContains($firstActivity['subject'], $activitySubjects);
+    $this->assertArrayHasKey('activity_type', $firstActivity);
+    $activityType = $firstActivity['activity_type'];
+    $this->assertArrayHasKey('name', $activityType);
+  }
+
+  public function testWithSelectOfOrphanDeepValues() {
+    $query = new Api4SelectQuery('Contact', FALSE, civicrm_api4('Contact', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->select[] = 'id';
+    $query->select[] = 'first_name';
+    // emails not selected
+    $query->select[] = 'emails.location_type.name';
+    $results = $query->run();
+    $firstResult = array_shift($results);
+
+    $this->assertEmpty($firstResult['emails']);
+  }
+
+  public function testOrderDoesNotMatter() {
+    $query = new Api4SelectQuery('Contact', FALSE, civicrm_api4('Contact', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->select[] = 'id';
+    $query->select[] = 'first_name';
+    // before emails selection
+    $query->select[] = 'emails.location_type.name';
+    $query->select[] = 'emails.email';
+    $query->where[] = ['emails.email', 'IS NOT NULL'];
+    $results = $query->run();
+    $firstResult = array_shift($results);
+
+    $this->assertNotEmpty($firstResult['emails'][0]['location_type']['name']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Query/Api4SelectQueryTest.php b/tests/phpunit/api/v4/Query/Api4SelectQueryTest.php
new file mode 100644 (file)
index 0000000..65d2317
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Query;
+
+use Civi\Api4\Query\Api4SelectQuery;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class Api4SelectQueryTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $relatedTables = [
+      'civicrm_address',
+      'civicrm_email',
+      'civicrm_phone',
+      'civicrm_openid',
+      'civicrm_im',
+      'civicrm_website',
+      'civicrm_activity',
+      'civicrm_activity_contact',
+    ];
+    $this->cleanup(['tablesToTruncate' => $relatedTables]);
+    $this->loadDataSet('DefaultDataSet');
+    $displayNameFormat = '{contact.first_name}{ }{contact.last_name}';
+    \Civi::settings()->set('display_name_format', $displayNameFormat);
+
+    return parent::setUpHeadless();
+  }
+
+  public function testWithSingleWhereJoin() {
+    $phoneNum = $this->getReference('test_phone_1')['phone'];
+
+    $query = new Api4SelectQuery('Contact', FALSE, civicrm_api4('Contact', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->where[] = ['phones.phone', '=', $phoneNum];
+    $results = $query->run();
+
+    $this->assertCount(1, $results);
+  }
+
+  public function testOneToManyJoin() {
+    $phoneNum = $this->getReference('test_phone_1')['phone'];
+
+    $query = new Api4SelectQuery('Contact', FALSE, civicrm_api4('Contact', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->select[] = 'id';
+    $query->select[] = 'first_name';
+    $query->select[] = 'phones.phone';
+    $query->where[] = ['phones.phone', '=', $phoneNum];
+    $results = $query->run();
+
+    $this->assertCount(1, $results);
+    $firstResult = array_shift($results);
+    $this->assertArrayHasKey('phones', $firstResult);
+    $firstPhone = array_shift($firstResult['phones']);
+    $this->assertEquals($phoneNum, $firstPhone['phone']);
+  }
+
+  public function testManyToOneJoin() {
+    $phoneNum = $this->getReference('test_phone_1')['phone'];
+    $contact = $this->getReference('test_contact_1');
+
+    $query = new Api4SelectQuery('Phone', FALSE, civicrm_api4('Phone', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->select[] = 'id';
+    $query->select[] = 'phone';
+    $query->select[] = 'contact.display_name';
+    $query->select[] = 'contact.first_name';
+    $query->where[] = ['phone', '=', $phoneNum];
+    $results = $query->run();
+
+    $this->assertCount(1, $results);
+    $firstResult = array_shift($results);
+    $this->assertEquals($contact['display_name'], $firstResult['contact.display_name']);
+  }
+
+  public function testOneToManyMultipleJoin() {
+    $query = new Api4SelectQuery('Contact', FALSE, civicrm_api4('Contact', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->select[] = 'id';
+    $query->select[] = 'first_name';
+    $query->select[] = 'phones.phone';
+    $query->where[] = ['first_name', '=', 'Phoney'];
+    $results = $query->run();
+    $result = array_pop($results);
+
+    $this->assertEquals('Phoney', $result['first_name']);
+    $this->assertCount(2, $result['phones']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Query/OneToOneJoinTest.php b/tests/phpunit/api/v4/Query/OneToOneJoinTest.php
new file mode 100644 (file)
index 0000000..2fd0e0c
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Query;
+
+use Civi\Api4\Contact;
+use api\v4\UnitTestCase;
+
+/**
+ * Class OneToOneJoinTest
+ * @package api\v4\Query
+ * @group headless
+ */
+class OneToOneJoinTest extends UnitTestCase {
+
+  public function testOneToOneJoin() {
+    $armenianContact = Contact::create()
+      ->addValue('first_name', 'Contact')
+      ->addValue('last_name', 'One')
+      ->addValue('contact_type', 'Individual')
+      ->addValue('preferred_language', 'hy_AM')
+      ->execute()
+      ->first();
+
+    $basqueContact = Contact::create()
+      ->addValue('first_name', 'Contact')
+      ->addValue('last_name', 'Two')
+      ->addValue('contact_type', 'Individual')
+      ->addValue('preferred_language', 'eu_ES')
+      ->execute()
+      ->first();
+
+    $contacts = Contact::get()
+      ->addWhere('id', 'IN', [$armenianContact['id'], $basqueContact['id']])
+      ->addSelect('preferred_language.label')
+      ->addSelect('last_name')
+      ->execute()
+      ->indexBy('last_name')
+      ->getArrayCopy();
+
+    $this->assertEquals($contacts['One']['preferred_language.label'], 'Armenian');
+    $this->assertEquals($contacts['Two']['preferred_language.label'], 'Basque');
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Query/OptionValueJoinTest.php b/tests/phpunit/api/v4/Query/OptionValueJoinTest.php
new file mode 100644 (file)
index 0000000..854383d
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Query;
+
+use Civi\Api4\Query\Api4SelectQuery;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class OptionValueJoinTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $relatedTables = [
+      'civicrm_address',
+      'civicrm_email',
+      'civicrm_phone',
+      'civicrm_openid',
+      'civicrm_im',
+      'civicrm_website',
+      'civicrm_activity',
+      'civicrm_activity_contact',
+    ];
+
+    $this->cleanup(['tablesToTruncate' => $relatedTables]);
+    $this->loadDataSet('SingleContact');
+
+    return parent::setUpHeadless();
+  }
+
+  public function testCommunicationMethodJoin() {
+    $query = new Api4SelectQuery('Contact', FALSE, civicrm_api4('Contact', 'getFields', ['includeCustom' => FALSE, 'checkPermissions' => FALSE, 'action' => 'get'], 'name'));
+    $query->select[] = 'first_name';
+    $query->select[] = 'preferred_communication_method.label';
+    $query->where[] = ['preferred_communication_method', 'IS NOT NULL'];
+    $results = $query->run();
+    $first = array_shift($results);
+    $firstPreferredMethod = array_shift($first['preferred_communication_method']);
+
+    $this->assertEquals(
+      'Phone',
+      $firstPreferredMethod['label']
+    );
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Query/SelectQueryMultiJoinTest.php b/tests/phpunit/api/v4/Query/SelectQueryMultiJoinTest.php
new file mode 100644 (file)
index 0000000..f591373
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Query;
+
+use Civi\Api4\Contact;
+use Civi\Api4\Email;
+use api\v4\UnitTestCase;
+
+/**
+ * Class SelectQueryMultiJoinTest
+ * @package api\v4\Query
+ * @group headless
+ */
+class SelectQueryMultiJoinTest extends UnitTestCase {
+
+  public function setUpHeadless() {
+    $this->cleanup(['tablesToTruncate' => ['civicrm_contact', 'civicrm_email']]);
+    $this->loadDataSet('MultiContactMultiEmail');
+    return parent::setUpHeadless();
+  }
+
+  public function testOneToManySelect() {
+    $results = Contact::get()
+      ->addSelect('emails.email')
+      ->execute()
+      ->indexBy('id')
+      ->getArrayCopy();
+
+    $firstContactId = $this->getReference('test_contact_1')['id'];
+    $secondContactId = $this->getReference('test_contact_2')['id'];
+
+    $firstContact = $results[$firstContactId];
+    $secondContact = $results[$secondContactId];
+    $firstContactEmails = array_column($firstContact['emails'], 'email');
+    $secondContactEmails = array_column($secondContact['emails'], 'email');
+
+    $expectedFirstEmails = [
+      'test_contact_one_home@fakedomain.com',
+      'test_contact_one_work@fakedomain.com',
+    ];
+    $expectedSecondEmails = [
+      'test_contact_two_home@fakedomain.com',
+      'test_contact_two_work@fakedomain.com',
+    ];
+
+    $this->assertEquals($expectedFirstEmails, $firstContactEmails);
+    $this->assertEquals($expectedSecondEmails, $secondContactEmails);
+  }
+
+  public function testManyToOneSelect() {
+    $results = Email::get()
+      ->addSelect('contact.display_name')
+      ->execute()
+      ->indexBy('id')
+      ->getArrayCopy();
+
+    $firstEmail = $this->getReference('test_email_1');
+    $secondEmail = $this->getReference('test_email_2');
+    $thirdEmail = $this->getReference('test_email_3');
+    $fourthEmail = $this->getReference('test_email_4');
+    $firstContactEmailIds = [$firstEmail['id'], $secondEmail['id']];
+    $secondContactEmailIds = [$thirdEmail['id'], $fourthEmail['id']];
+
+    foreach ($results as $id => $email) {
+      $displayName = $email['contact.display_name'];
+      if (in_array($id, $firstContactEmailIds)) {
+        $this->assertEquals('First Contact', $displayName);
+      }
+      elseif (in_array($id, $secondContactEmailIds)) {
+        $this->assertEquals('Second Contact', $displayName);
+      }
+    }
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Service/Schema/SchemaMapRealTableTest.php b/tests/phpunit/api/v4/Service/Schema/SchemaMapRealTableTest.php
new file mode 100644 (file)
index 0000000..f7e0ad6
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Service\Schema;
+
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class SchemaMapRealTableTest extends UnitTestCase {
+
+  public function testAutoloadWillPopulateTablesByDefault() {
+    $map = \Civi::container()->get('schema_map');
+    $this->assertNotEmpty($map->getTables());
+  }
+
+  public function testSimplePathWillExist() {
+    $map = \Civi::container()->get('schema_map');
+    $path = $map->getPath('civicrm_contact', 'emails');
+    $this->assertCount(1, $path);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Service/Schema/SchemaMapperTest.php b/tests/phpunit/api/v4/Service/Schema/SchemaMapperTest.php
new file mode 100644 (file)
index 0000000..5d33a07
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Service\Schema;
+
+use Civi\Api4\Service\Schema\Joinable\Joinable;
+use Civi\Api4\Service\Schema\SchemaMap;
+use Civi\Api4\Service\Schema\Table;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class SchemaMapperTest extends UnitTestCase {
+
+  public function testWillHaveNoPathWithNoTables() {
+    $map = new SchemaMap();
+    $this->assertEmpty($map->getPath('foo', 'bar'));
+  }
+
+  public function testWillHavePathWithSingleJump() {
+    $phoneTable = new Table('civicrm_phone');
+    $locationTable = new Table('civicrm_location_type');
+    $link = new Joinable('civicrm_location_type', 'id', 'location');
+    $phoneTable->addTableLink('location_type_id', $link);
+
+    $map = new SchemaMap();
+    $map->addTables([$phoneTable, $locationTable]);
+
+    $this->assertNotEmpty($map->getPath('civicrm_phone', 'location'));
+  }
+
+  public function testWillHavePathWithDoubleJump() {
+    $activity = new Table('activity');
+    $activityContact = new Table('activity_contact');
+    $middleLink = new Joinable('activity_contact', 'activity_id');
+    $contactLink = new Joinable('contact', 'id');
+    $activity->addTableLink('id', $middleLink);
+    $activityContact->addTableLink('contact_id', $contactLink);
+
+    $map = new SchemaMap();
+    $map->addTables([$activity, $activityContact]);
+
+    $this->assertNotEmpty($map->getPath('activity', 'contact'));
+  }
+
+  public function testPathWithTripleJoin() {
+    $first = new Table('first');
+    $second = new Table('second');
+    $third = new Table('third');
+    $first->addTableLink('id', new Joinable('second', 'id'));
+    $second->addTableLink('id', new Joinable('third', 'id'));
+    $third->addTableLink('id', new Joinable('fourth', 'id'));
+
+    $map = new SchemaMap();
+    $map->addTables([$first, $second, $third]);
+
+    $this->assertNotEmpty($map->getPath('first', 'fourth'));
+  }
+
+  public function testCircularReferenceWillNotBreakIt() {
+    $contactTable = new Table('contact');
+    $carTable = new Table('car');
+    $carLink = new Joinable('car', 'id');
+    $ownerLink = new Joinable('contact', 'id');
+    $contactTable->addTableLink('car_id', $carLink);
+    $carTable->addTableLink('owner_id', $ownerLink);
+
+    $map = new SchemaMap();
+    $map->addTables([$contactTable, $carTable]);
+
+    $this->assertEmpty($map->getPath('contact', 'foo'));
+  }
+
+  public function testCannotGoOverJoinLimit() {
+    $first = new Table('first');
+    $second = new Table('second');
+    $third = new Table('third');
+    $fourth = new Table('fourth');
+    $first->addTableLink('id', new Joinable('second', 'id'));
+    $second->addTableLink('id', new Joinable('third', 'id'));
+    $third->addTableLink('id', new Joinable('fourth', 'id'));
+    $fourth->addTableLink('id', new Joinable('fifth', 'id'));
+
+    $map = new SchemaMap();
+    $map->addTables([$first, $second, $third, $fourth]);
+
+    $this->assertEmpty($map->getPath('first', 'fifth'));
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Service/TestCreationParameterProvider.php b/tests/phpunit/api/v4/Service/TestCreationParameterProvider.php
new file mode 100644 (file)
index 0000000..6a44e31
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Service;
+
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\SpecGatherer;
+
+class TestCreationParameterProvider {
+
+  /**
+   * @var \Civi\Api4\Service\Spec\SpecGatherer
+   */
+  protected $gatherer;
+
+  /**
+   * @param \Civi\Api4\Service\Spec\SpecGatherer $gatherer
+   */
+  public function __construct(SpecGatherer $gatherer) {
+    $this->gatherer = $gatherer;
+  }
+
+  /**
+   * @param $entity
+   *
+   * @return array
+   */
+  public function getRequired($entity) {
+    $createSpec = $this->gatherer->getSpec($entity, 'create', FALSE);
+    $requiredFields = array_merge($createSpec->getRequiredFields(), $createSpec->getConditionalRequiredFields());
+
+    if ($entity === 'Contact') {
+      $requiredFields[] = $createSpec->getFieldByName('first_name');
+      $requiredFields[] = $createSpec->getFieldByName('last_name');
+    }
+
+    $requiredParams = [];
+    foreach ($requiredFields as $requiredField) {
+      $value = $this->getRequiredValue($requiredField);
+      $requiredParams[$requiredField->getName()] = $value;
+    }
+
+    unset($requiredParams['id']);
+
+    return $requiredParams;
+  }
+
+  /**
+   * Attempt to get a value using field option, defaults, FKEntity, or a random
+   * value based on the data type.
+   *
+   * @param \Civi\Api4\Service\Spec\FieldSpec $field
+   *
+   * @return mixed
+   * @throws \Exception
+   */
+  private function getRequiredValue(FieldSpec $field) {
+
+    if ($field->getOptions()) {
+      return $this->getOption($field);
+    }
+    elseif ($field->getDefaultValue()) {
+      return $field->getDefaultValue();
+    }
+    elseif ($field->getFkEntity()) {
+      return $this->getFkID($field, $field->getFkEntity());
+    }
+    elseif (in_array($field->getName(), ['entity_id', 'contact_id'])) {
+      return $this->getFkID($field, 'Contact');
+    }
+
+    $randomValue = $this->getRandomValue($field->getDataType());
+
+    if ($randomValue) {
+      return $randomValue;
+    }
+
+    throw new \Exception('Could not provide default value');
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Spec\FieldSpec $field
+   *
+   * @return mixed
+   */
+  private function getOption(FieldSpec $field) {
+    $options = $field->getOptions();
+    return array_rand($options);
+  }
+
+  /**
+   * @param \Civi\Api4\Service\Spec\FieldSpec $field
+   * @param string $fkEntity
+   *
+   * @return mixed
+   * @throws \Exception
+   */
+  private function getFkID(FieldSpec $field, $fkEntity) {
+    $params = ['checkPermissions' => FALSE];
+    // Be predictable about what type of contact we select
+    if ($fkEntity === 'Contact') {
+      $params['where'] = [['contact_type', '=', 'Individual']];
+    }
+    $entityList = civicrm_api4($fkEntity, 'get', $params);
+    if ($entityList->count() < 1) {
+      $msg = sprintf('At least one %s is required in test', $fkEntity);
+      throw new \Exception($msg);
+    }
+
+    return $entityList->last()['id'];
+  }
+
+  /**
+   * @param $dataType
+   *
+   * @return int|null|string
+   */
+  private function getRandomValue($dataType) {
+    switch ($dataType) {
+      case 'Boolean':
+        return TRUE;
+
+      case 'Integer':
+        return rand(1, 2000);
+
+      case 'String':
+        return \CRM_Utils_String::createRandom(10, implode('', range('a', 'z')));
+
+      case 'Text':
+        return \CRM_Utils_String::createRandom(100, implode('', range('a', 'z')));
+
+      case 'Money':
+        return sprintf('%d.%2d', rand(0, 2000), rand(10, 99));
+
+      case 'Date':
+        return '20100102';
+
+      case 'Timestamp':
+        return 'now';
+    }
+
+    return NULL;
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Spec/RequestSpecTest.php b/tests/phpunit/api/v4/Spec/RequestSpecTest.php
new file mode 100644 (file)
index 0000000..4c1dc6e
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Spec;
+
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\RequestSpec;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class RequestSpecTest extends UnitTestCase {
+
+  public function testRequiredFieldFetching() {
+    $spec = new RequestSpec('Contact', 'get');
+    $requiredField = new FieldSpec('name', 'Contact');
+    $requiredField->setRequired(TRUE);
+    $nonRequiredField = new FieldSpec('age', 'Contact', 'Integer');
+    $nonRequiredField->setRequired(FALSE);
+    $spec->addFieldSpec($requiredField);
+    $spec->addFieldSpec($nonRequiredField);
+
+    $requiredFields = $spec->getRequiredFields();
+
+    $this->assertCount(1, $requiredFields);
+    $this->assertEquals('name', array_shift($requiredFields)->getName());
+  }
+
+  public function testGettingFieldNames() {
+    $spec = new RequestSpec('Contact', 'get');
+    $nameField = new FieldSpec('name', 'Contact');
+    $ageField = new FieldSpec('age', 'Contact', 'Integer');
+    $spec->addFieldSpec($nameField);
+    $spec->addFieldSpec($ageField);
+
+    $fieldNames = $spec->getFieldNames();
+
+    $this->assertCount(2, $fieldNames);
+    $this->assertEquals(['name', 'age'], $fieldNames);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Spec/SpecFormatterTest.php b/tests/phpunit/api/v4/Spec/SpecFormatterTest.php
new file mode 100644 (file)
index 0000000..f80b3da
--- /dev/null
@@ -0,0 +1,128 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Spec;
+
+use Civi\Api4\Service\Spec\CustomFieldSpec;
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\RequestSpec;
+use Civi\Api4\Service\Spec\SpecFormatter;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class SpecFormatterTest extends UnitTestCase {
+
+  public function testSpecToArray() {
+    $spec = new RequestSpec('Contact', 'get');
+    $fieldName = 'last_name';
+    $field = new FieldSpec($fieldName, 'Contact');
+    $spec->addFieldSpec($field);
+    $arraySpec = SpecFormatter::specToArray($spec->getFields());
+
+    $this->assertEquals('String', $arraySpec[$fieldName]['data_type']);
+  }
+
+  /**
+   * @dataProvider arrayFieldSpecProvider
+   *
+   * @param array $fieldData
+   * @param string $expectedName
+   * @param string $expectedType
+   */
+  public function testArrayToField($fieldData, $expectedName, $expectedType) {
+    $field = SpecFormatter::arrayToField($fieldData, 'TestEntity');
+
+    $this->assertEquals($expectedName, $field->getName());
+    $this->assertEquals($expectedType, $field->getDataType());
+  }
+
+  public function testCustomFieldWillBeReturned() {
+    $customGroupId = 1432;
+    $customFieldId = 3333;
+    $name = 'MyFancyField';
+
+    $data = [
+      'custom_group_id' => $customGroupId,
+      'custom_group.name' => 'my_group',
+      'id' => $customFieldId,
+      'name' => $name,
+      'data_type' => 'String',
+      'html_type' => 'Multi-Select',
+    ];
+
+    /** @var \Civi\Api4\Service\Spec\CustomFieldSpec $field */
+    $field = SpecFormatter::arrayToField($data, 'TestEntity');
+
+    $this->assertInstanceOf(CustomFieldSpec::class, $field);
+    $this->assertEquals('my_group', $field->getCustomGroupName());
+    $this->assertEquals($customFieldId, $field->getCustomFieldId());
+    $this->assertEquals(\CRM_Core_DAO::SERIALIZE_SEPARATOR_BOOKEND, $field->getSerialize());
+    $this->assertEquals('Select', $field->getInputType());
+    $this->assertTrue($field->getInputAttrs()['multiple']);
+  }
+
+  /**
+   * @return array
+   */
+  public function arrayFieldSpecProvider() {
+    return [
+      [
+        [
+          'name' => 'Foo',
+          'title' => 'Bar',
+          'type' => \CRM_Utils_Type::T_STRING,
+        ],
+        'Foo',
+        'String',
+      ],
+      [
+        [
+          'name' => 'MyField',
+          'title' => 'Bar',
+          'type' => \CRM_Utils_Type::T_STRING,
+          // this should take precedence
+          'data_type' => 'Boolean',
+        ],
+        'MyField',
+        'Boolean',
+      ],
+    ];
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Spec/SpecGathererTest.php b/tests/phpunit/api/v4/Spec/SpecGathererTest.php
new file mode 100644 (file)
index 0000000..368054a
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Spec;
+
+use Civi\Api4\Service\Spec\FieldSpec;
+use Civi\Api4\Service\Spec\Provider\Generic\SpecProviderInterface;
+use Civi\Api4\Service\Spec\SpecGatherer;
+use api\v4\Traits\OptionCleanupTrait;
+use api\v4\UnitTestCase;
+use Civi\Api4\CustomField;
+use Civi\Api4\CustomGroup;
+use api\v4\Traits\TableDropperTrait;
+use Prophecy\Argument;
+
+/**
+ * @group headless
+ */
+class SpecGathererTest extends UnitTestCase {
+
+  use TableDropperTrait;
+  use OptionCleanupTrait;
+
+  public function setUpHeadless() {
+    $this->dropByPrefix('civicrm_value_favorite');
+    $this->cleanup([
+      'tablesToTruncate' => [
+        'civicrm_custom_group',
+        'civicrm_custom_field',
+      ],
+    ]);
+    return parent::setUpHeadless();
+  }
+
+  public function testBasicFieldsGathering() {
+    $gatherer = new SpecGatherer();
+    $specs = $gatherer->getSpec('Contact', 'get', FALSE);
+    $contactDAO = _civicrm_api3_get_DAO('Contact');
+    $contactFields = $contactDAO::fields();
+    $specFieldNames = $specs->getFieldNames();
+    $contactFieldNames = array_column($contactFields, 'name');
+
+    $this->assertEmpty(array_diff_key($contactFieldNames, $specFieldNames));
+  }
+
+  public function testWithSpecProvider() {
+    $gather = new SpecGatherer();
+
+    $provider = $this->prophesize(SpecProviderInterface::class);
+    $provider->applies('Contact', 'create')->willReturn(TRUE);
+    $provider->modifySpec(Argument::any())->will(function ($args) {
+      /** @var \Civi\Api4\Service\Spec\RequestSpec $spec */
+      $spec = $args[0];
+      $spec->addFieldSpec(new FieldSpec('foo', 'Contact'));
+    });
+    $gather->addSpecProvider($provider->reveal());
+
+    $spec = $gather->getSpec('Contact', 'create', FALSE);
+    $fieldNames = $spec->getFieldNames();
+
+    $this->assertContains('foo', $fieldNames);
+  }
+
+  public function testPseudoConstantOptionsWillBeAdded() {
+    $customGroupId = CustomGroup::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('name', 'FavoriteThings')
+      ->addValue('extends', 'Contact')
+      ->execute()
+      ->first()['id'];
+
+    $options = ['r' => 'Red', 'g' => 'Green', 'p' => 'Pink'];
+
+    CustomField::create()
+      ->setCheckPermissions(FALSE)
+      ->addValue('label', 'FavColor')
+      ->addValue('custom_group_id', $customGroupId)
+      ->addValue('option_values', $options)
+      ->addValue('html_type', 'Select')
+      ->addValue('data_type', 'String')
+      ->execute();
+
+    $gatherer = new SpecGatherer();
+    $spec = $gatherer->getSpec('Contact', 'get', TRUE);
+
+    $regularField = $spec->getFieldByName('contact_type');
+    $this->assertNotEmpty($regularField->getOptions());
+    $this->assertContains('Individual', $regularField->getOptions());
+
+    $customField = $spec->getFieldByName('FavoriteThings.FavColor');
+    $this->assertNotEmpty($customField->getOptions());
+    $this->assertContains('Green', $customField->getOptions());
+    $this->assertEquals('Pink', $customField->getOptions()['p']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Traits/OptionCleanupTrait.php b/tests/phpunit/api/v4/Traits/OptionCleanupTrait.php
new file mode 100644 (file)
index 0000000..9c1ed5c
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+namespace api\v4\Traits;
+
+trait OptionCleanupTrait {
+
+  /**
+   * @var int
+   */
+  protected $optionGroupMaxId;
+
+  /**
+   * @var int
+   */
+  protected $optionValueMaxId;
+
+  public function setUp() {
+    $this->optionGroupMaxId = \CRM_Core_DAO::singleValueQuery('SELECT MAX(id) FROM civicrm_option_group');
+    $this->optionValueMaxId = \CRM_Core_DAO::singleValueQuery('SELECT MAX(id) FROM civicrm_option_value');
+  }
+
+  public function tearDown() {
+    if ($this->optionValueMaxId) {
+      \CRM_Core_DAO::executeQuery('DELETE FROM civicrm_option_value WHERE id > ' . $this->optionValueMaxId);
+    }
+    if ($this->optionGroupMaxId) {
+      \CRM_Core_DAO::executeQuery('DELETE FROM civicrm_option_group WHERE id > ' . $this->optionGroupMaxId);
+    }
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Traits/QueryCounterTrait.php b/tests/phpunit/api/v4/Traits/QueryCounterTrait.php
new file mode 100644 (file)
index 0000000..c8a8c04
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Traits;
+
+use CRM_Utils_Array as ArrayHelper;
+
+trait QueryCounterTrait {
+
+  /**
+   * @var int
+   */
+  protected $startCount = 0;
+
+  /**
+   * Start the query counter
+   */
+  protected function beginQueryCount() {
+    $this->startCount = $this->getCurrentGlobalQueryCount();
+  }
+
+  /**
+   * @return int
+   *   The number of queries since the counter was started
+   */
+  protected function getQueryCount() {
+    return $this->getCurrentGlobalQueryCount() - $this->startCount;
+  }
+
+  /**
+   * @return int
+   * @throws \Exception
+   */
+  private function getCurrentGlobalQueryCount() {
+    global $_DB_DATAOBJECT;
+
+    if (!$_DB_DATAOBJECT) {
+      throw new \Exception('Database object not set so cannot count queries');
+    }
+
+    return ArrayHelper::value('RESULTSEQ', $_DB_DATAOBJECT, 0);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Traits/TableDropperTrait.php b/tests/phpunit/api/v4/Traits/TableDropperTrait.php
new file mode 100644 (file)
index 0000000..91f5ccd
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Traits;
+
+trait TableDropperTrait {
+
+  /**
+   * @param $prefix
+   */
+  protected function dropByPrefix($prefix) {
+    $sql = "SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) " .
+      "AS statement FROM information_schema.tables " .
+      "WHERE table_name LIKE '%s%%' AND table_schema = DATABASE();";
+    $sql = sprintf($sql, $prefix);
+    $dropTableQuery = \CRM_Core_DAO::executeQuery($sql);
+    $dropTableQuery->fetch();
+    $dropTableQuery = $dropTableQuery->statement;
+
+    if ($dropTableQuery) {
+      \CRM_Core_DAO::executeQuery($dropTableQuery);
+    }
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Traits/TestDataLoaderTrait.php b/tests/phpunit/api/v4/Traits/TestDataLoaderTrait.php
new file mode 100644 (file)
index 0000000..9692505
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Traits;
+
+/**
+ * This probably should be a separate class
+ */
+trait TestDataLoaderTrait {
+
+  /**
+   * @var array
+   *   References to entities used for loading test data
+   */
+  protected $references;
+
+  /**
+   * Creates entities from a JSON data set
+   *
+   * @param $path
+   */
+  protected function loadDataSet($path) {
+    if (!file_exists($path)) {
+      $path = __DIR__ . '/../DataSets/' . $path . '.json';
+    }
+
+    $dataSet = json_decode(file_get_contents($path), TRUE);
+    foreach ($dataSet as $entityName => $entities) {
+      foreach ($entities as $entityValues) {
+
+        $entityValues = $this->replaceReferences($entityValues);
+
+        $params = ['values' => $entityValues, 'checkPermissions' => FALSE];
+        $result = civicrm_api4($entityName, 'create', $params);
+        if (isset($entityValues['@ref'])) {
+          $this->references[$entityValues['@ref']] = $result->first();
+        }
+      }
+    }
+  }
+
+  /**
+   * @param $name
+   *
+   * @return null|mixed
+   */
+  protected function getReference($name) {
+    return isset($this->references[$name]) ? $this->references[$name] : NULL;
+  }
+
+  /**
+   * @param array $entityValues
+   *
+   * @return array
+   */
+  private function replaceReferences($entityValues) {
+    foreach ($entityValues as $name => $value) {
+      if (is_array($value)) {
+        $entityValues[$name] = $this->replaceReferences($value);
+      }
+      elseif (substr($value, 0, 4) === '@ref') {
+        $referenceName = substr($value, 5);
+        list ($reference, $property) = explode('.', $referenceName);
+        $entityValues[$name] = $this->references[$reference][$property];
+      }
+    }
+    return $entityValues;
+  }
+
+}
diff --git a/tests/phpunit/api/v4/UnitTestCase.php b/tests/phpunit/api/v4/UnitTestCase.php
new file mode 100644 (file)
index 0000000..f0474b7
--- /dev/null
@@ -0,0 +1,276 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4;
+
+use api\v4\Traits\TestDataLoaderTrait;
+use Civi\Test\HeadlessInterface;
+use Civi\Test\TransactionalInterface;
+
+/**
+ * @group headless
+ */
+class UnitTestCase extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface {
+
+  use TestDataLoaderTrait;
+
+  /**
+   * @see CiviUnitTestCase
+   *
+   * @param string $name
+   * @param array $data
+   * @param string $dataName
+   */
+  public function __construct($name = NULL, array $data = [], $dataName = '') {
+    parent::__construct($name, $data, $dataName);
+    error_reporting(E_ALL & ~E_NOTICE);
+  }
+
+  public function setUpHeadless() {
+    return \Civi\Test::headless()->apply();
+  }
+
+  /**
+   * Tears down the fixture, for example, closes a network connection.
+   *
+   * This method is called after a test is executed.
+   */
+  public function tearDown() {
+    parent::tearDown();
+  }
+
+  /**
+   * Quick clean by emptying tables created for the test.
+   *
+   * @param array $params
+   */
+  public function cleanup($params) {
+    $params += [
+      'tablesToTruncate' => [],
+    ];
+    \CRM_Core_DAO::executeQuery("SET FOREIGN_KEY_CHECKS = 0;");
+    foreach ($params['tablesToTruncate'] as $table) {
+      \Civi::log()->info('truncating: ' . $table);
+      $sql = "TRUNCATE TABLE $table";
+      \CRM_Core_DAO::executeQuery($sql);
+    }
+    \CRM_Core_DAO::executeQuery("SET FOREIGN_KEY_CHECKS = 1;");
+  }
+
+  /**
+   * Quick record counter
+   *
+   * @param string $table_name
+   * @returns int record count
+   */
+  public function getRowCount($table_name) {
+    $sql = "SELECT count(id) FROM $table_name";
+    return (int) \CRM_Core_DAO::singleValueQuery($sql);
+  }
+
+  /**
+   * Create sample entities (using V3 for now).
+   *
+   * @param array $params
+   *   (type, seq, overrides, count)
+   * @return array
+   *   (either single, or array of array if count >1)
+   * @throws \CiviCRM_API3_Exception
+   * @throws \Exception
+   */
+  public static function createEntity($params) {
+    $params += [
+      'count' => 1,
+      'seq' => 0,
+    ];
+    $entities = [];
+    $entity = NULL;
+    for ($i = 0; $i < $params['count']; $i++) {
+      $params['seq']++;
+      $data = self::sample($params);
+      $api_params = ['sequential' => 1] + $data['sample_params'];
+      $result = civicrm_api3($data['entity'], 'create', $api_params);
+      if ($result['is_error']) {
+        throw new \Exception("creating $data[entity] failed");
+      }
+      $entity = $result['values'][0];
+      if (!($entity['id'] > 0)) {
+        throw new \Exception("created entity is malformed");
+      }
+      $entities[] = $entity;
+    }
+    return $params['count'] == 1 ? $entity : $entities;
+  }
+
+  /**
+   * Helper function for creating sample entities.
+   *
+   * Depending on the supplied sequence integer, plucks values from the dummy data.
+   * Constructs a foreign entity when an ID is required but isn't supplied in the overrides.
+   *
+   * Inspired by CiviUnitTestCase::
+   * @todo - extract this function to own class and share with CiviUnitTestCase?
+   * @param array $params
+   * - type: string roughly matching entity type
+   * - seq: (optional) int sequence number for the values of this type
+   * - overrides: (optional) array of fill in parameters
+   *
+   * @return array
+   *   - entity: string API entity type (usually the type supplied except for contact subtypes)
+   *   - sample_params: array API sample_params properties of sample entity
+   */
+  public static function sample($params) {
+    $params += [
+      'seq' => 0,
+      'overrides' => [],
+    ];
+    $type = $params['type'];
+    // sample data - if field is array then chosed based on `seq`
+    $sample_params = [];
+    if (in_array($type, ['Individual', 'Organization', 'Household'])) {
+      $sample_params['contact_type'] = $type;
+      $entity = 'Contact';
+    }
+    else {
+      $entity = $type;
+    }
+    // use the seq to pluck a set of params out
+    foreach (self::sampleData($type) as $key => $value) {
+      if (is_array($value)) {
+        $sample_params[$key] = $value[$params['seq'] % count($value)];
+      }
+      else {
+        $sample_params[$key] = $value;
+      }
+    }
+    if ($type == 'Individual') {
+      $sample_params['email'] = strtolower(
+        $sample_params['first_name'] . '_' . $sample_params['last_name'] . '@civicrm.org'
+      );
+      $sample_params['prefix_id'] = 3;
+      $sample_params['suffix_id'] = 3;
+    }
+    if (!count($sample_params)) {
+      throw new \Exception("unknown sample type: $type");
+    }
+    $sample_params = $params['overrides'] + $sample_params;
+    // make foreign enitiies if they haven't been supplied
+    foreach ($sample_params as $key => $value) {
+      if (substr($value, 0, 6) === 'dummy.') {
+        $foreign_entity = self::createEntity([
+          'type' => substr($value, 6),
+          'seq' => $params['seq'],
+        ]);
+        $sample_params[$key] = $foreign_entity['id'];
+      }
+    }
+    return compact("entity", "sample_params");
+  }
+
+  /**
+   * Provider of sample data.
+   *
+   * @return array
+   *   Array values represent a set of allowable items.
+   *   Strings in the form "dummy.Entity" require creating a foreign entity first.
+   */
+  public static function sampleData($type) {
+    $data = [
+      'Individual' => [
+        // The number of values in each list need to be coprime numbers to not have duplicates
+        'first_name' => ['Anthony', 'Joe', 'Terrence', 'Lucie', 'Albert', 'Bill', 'Kim'],
+        'middle_name' => ['J.', 'M.', 'P', 'L.', 'K.', 'A.', 'B.', 'C.', 'D', 'E.', 'Z.'],
+        'last_name' => ['Anderson', 'Miller', 'Smith', 'Collins', 'Peterson'],
+        'contact_type' => 'Individual',
+      ],
+      'Organization' => [
+        'organization_name' => [
+          'Unit Test Organization',
+          'Acme',
+          'Roberts and Sons',
+          'Cryo Space Labs',
+          'Sharper Pens',
+        ],
+      ],
+      'Household' => [
+        'household_name' => ['Unit Test household'],
+      ],
+      'Event' => [
+        'title' => 'Annual CiviCRM meet',
+        'summary' => 'If you have any CiviCRM related issues or want to track where CiviCRM is heading, Sign up now',
+        'description' => 'This event is intended to give brief idea about progess of CiviCRM and giving solutions to common user issues',
+        'event_type_id' => 1,
+        'is_public' => 1,
+        'start_date' => 20081021,
+        'end_date' => 20081023,
+        'is_online_registration' => 1,
+        'registration_start_date' => 20080601,
+        'registration_end_date' => 20081015,
+        'max_participants' => 100,
+        'event_full_text' => 'Sorry! We are already full',
+        'is_monetary' => 0,
+        'is_active' => 1,
+        'is_show_location' => 0,
+      ],
+      'Participant' => [
+        'event_id' => 'dummy.Event',
+        'contact_id' => 'dummy.Individual',
+        'status_id' => 2,
+        'role_id' => 1,
+        'register_date' => 20070219,
+        'source' => 'Wimbeldon',
+        'event_level' => 'Payment',
+      ],
+      'Contribution' => [
+        'contact_id' => 'dummy.Individual',
+        // donation, 2 = member, 3 = campaign contribution, 4=event
+        'financial_type_id' => 1,
+        'total_amount' => 7.3,
+      ],
+      'Activity' => [
+        //'activity_type_id' => 1,
+        'subject' => 'unit testing',
+        'source_contact_id' => 'dummy.Individual',
+      ],
+    ];
+    if ($type == 'Contact') {
+      $type = 'Individual';
+    }
+    return $data[$type];
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Utils/ArrayInsertionServiceTest.php b/tests/phpunit/api/v4/Utils/ArrayInsertionServiceTest.php
new file mode 100644 (file)
index 0000000..ef4168c
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Utils;
+
+use Civi\Api4\Utils\ArrayInsertionUtil;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class ArrayInsertionServiceTest extends UnitTestCase {
+
+  public function testInsertWillWork() {
+    $arr = [];
+    $path = ['foo' => FALSE, 'bar' => FALSE];
+    $inserter = new ArrayInsertionUtil();
+    $inserter::insert($arr, $path, ['LALA']);
+
+    $expected = [
+      'foo' => [
+        'bar' => 'LALA',
+      ],
+    ];
+
+    $this->assertEquals($expected, $arr);
+  }
+
+  public function testInsertionOfContactEmailLocation() {
+    $contacts = [
+      [
+        'id' => 1,
+        'first_name' => 'Jim',
+      ],
+      [
+        'id' => 2,
+        'first_name' => 'Karen',
+      ],
+    ];
+    $emails = [
+      [
+        'email' => 'jim@jim.com',
+        'id' => 2,
+        '_parent_id' => 1,
+      ],
+    ];
+    $locationTypes = [
+      [
+        'name' => 'Home',
+        'id' => 3,
+        '_parent_id' => 2,
+      ],
+    ];
+
+    $emailPath = ['emails' => TRUE];
+    $locationPath = ['emails' => TRUE, 'location' => FALSE];
+    $inserter = new ArrayInsertionUtil();
+
+    foreach ($contacts as &$contact) {
+      $inserter::insert($contact, $emailPath, $emails);
+      $inserter::insert($contact, $locationPath, $locationTypes);
+    }
+
+    $locationType = $contacts[0]['emails'][0]['location']['name'];
+    $this->assertEquals('Home', $locationType);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/Utils/ReflectionUtilsTest.php b/tests/phpunit/api/v4/Utils/ReflectionUtilsTest.php
new file mode 100644 (file)
index 0000000..f1e9f4d
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 5                                                  |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2019                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2019
+ * $Id$
+ *
+ */
+
+
+namespace api\v4\Utils;
+
+use Civi\Api4\Utils\ReflectionUtils;
+use api\v4\Mock\MockV4ReflectionGrandchild;
+use api\v4\UnitTestCase;
+
+/**
+ * @group headless
+ */
+class ReflectionUtilsTest extends UnitTestCase {
+
+  /**
+   * Test that class annotations are returned across @inheritDoc
+   */
+  public function testGetDocBlockForClass() {
+    $grandChild = new MockV4ReflectionGrandchild();
+    $reflection = new \ReflectionClass($grandChild);
+    $doc = ReflectionUtils::getCodeDocs($reflection);
+
+    $this->assertEquals(TRUE, $doc['internal']);
+    $this->assertEquals('Grandchild class', $doc['description']);
+
+    $expectedComment = 'This is an extended description.
+
+There is a line break in this description.
+
+This is the base class.';
+
+    $this->assertEquals($expectedComment, $doc['comment']);
+  }
+
+  /**
+   * Test that property annotations are returned across @inheritDoc
+   */
+  public function testGetDocBlockForProperty() {
+    $grandChild = new MockV4ReflectionGrandchild();
+    $reflection = new \ReflectionClass($grandChild);
+    $doc = ReflectionUtils::getCodeDocs($reflection->getProperty('foo'), 'Property');
+
+    $this->assertEquals('This is the foo property.', $doc['description']);
+    $this->assertEquals("In the child class, foo has been barred.\n\nIn general, you can do nothing with it.", $doc['comment']);
+  }
+
+}
diff --git a/tests/phpunit/api/v4/services.xml b/tests/phpunit/api/v4/services.xml
new file mode 100644 (file)
index 0000000..3310b03
--- /dev/null
@@ -0,0 +1,10 @@
+<container xmlns="http://symfony.com/schema/dic/services"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+
+    <services>
+        <service id="test.param_provider" class="api\v4\Service\TestCreationParameterProvider">
+            <argument type="service" id="spec_gatherer"/>
+        </service>
+    </services>
+</container>
index 671c4d7440d1db693bf3cf10e732649efd912a69..2e682bc0db51253824050b4d71b2a6a467c760d8 100755 (executable)
@@ -50,7 +50,7 @@ array_shift($argv);
 // Convert class names to file names
 $CIVICRM_UF = 'UnitTests';
 foreach ($argv as $k => $v) {
-  if (preg_match('/^(CRM_|api_v3_|EnvTest|WebTest_|E2E_)/', $v)) {
+  if (preg_match('/^(CRM_|api_v3_|api_v4_|EnvTest|WebTest_|E2E_)/', $v)) {
     $argv[$k] = 'tests/phpunit/' . strtr($v, '_', '/') . '.php';
   }
   elseif (preg_match('/^Civi\\\\/', $v)) {
index 8c47a84fa8ed03d0141fad6f425ab90f5e397695..d2f5593b3de657f5ffd4b7ae7fa1511938f87ed7 100644 (file)
     </html>
     <add>4.7</add>
   </field>
+   <field>
+    <name>is_template</name>
+    <title>Is a Template Contribution</title>
+    <type>boolean</type>
+    <default>0</default>
+    <import>true</import>
+    <comment>Shows this is a template for recurring contributions.</comment>
+    <html>
+      <type>CheckBox</type>
+    </html>
+    <add>5.20</add>
+  </field>
 </table>
index 351eef9129f2837329f58afaabe2b6254cedea46..9c08b4738bce0bd87e43ba515ec21c6f1bfa79f0 100644 (file)
     <comment>if true - billing block is required for online contribution page</comment>
     <add>4.6</add>
   </field>
+  <field>
+    <name>frontend_title</name>
+    <title>Public Title</title>
+    <type>varchar</type>
+    <length>255</length>
+    <localizable>true</localizable>
+    <default>NULL</default>
+    <comment>Contribution Page Public title</comment>
+    <html>
+      <type>Text</type>
+    </html>
+    <add>5.20</add>
+    <uniqueName>contribution_page_frontend_title</uniqueName>
+  </field>
 </table>
index 3e9ff7f5507bd867eda334ec0f34d7501f7fc954..183a1af5b09a671663178f595a2ef75cdf09a27e 100644 (file)
       <size>9</size>
     </html>
   </field>
+  <index>
+    <name>index_geo_code_1_geo_code_2</name>
+    <fieldName>geo_code_1</fieldName>
+    <fieldName>geo_code_2</fieldName>
+  </index>
   <field>
     <name>manual_geo_code</name>
     <title>Is Manually Geocoded</title>
index 7e924e641a3047797348cb37d6f001005c062651..7ae28e74bdbd27397d754e23fc6a93d5b7bbe02f 100644 (file)
     <comment>These values are per-check, and can't be compared across checks.</comment>
     <add>4.7</add>
   </field>
+  <field>
+    <name>is_active</name>
+    <title>Check Is Active</title>
+    <type>boolean</type>
+    <default>1</default>
+    <comment>Is this status check active?</comment>
+    <add>5.19</add>
+  </field>
 </table>
index 55290a872ed0679caa009df562695193126c03c5..f7f0bb05d7b963b62f658268c1964a05fb9c90f3 100644 (file)
     <comment>Last 4 digits of credit card</comment>
     <add>4.7</add>
   </field>
+  <field>
+    <name>order_reference</name>
+    <uniqueName>financial_trxn_order_reference</uniqueName>
+    <title>Order Reference</title>
+    <type>varchar</type>
+    <length>255</length>
+    <html>
+      <type>Text</type>
+      <size>25</size>
+    </html>
+    <comment>Payment Processor external order reference</comment>
+    <add>5.20</add>
+  </field>
 </table>
index 0ef0930f0a87702b6b5907387abfa703fafba538..e4f8a0eaeec44211cfe309d8c78d6adaeb7d3db9 100644 (file)
     <name>header_id</name>
     <title>Mailing Header</title>
     <type>int unsigned</type>
+    <pseudoconstant>
+      <table>civicrm_mailing_component</table>
+      <keyColumn>id</keyColumn>
+      <labelColumn>name</labelColumn>
+      <condition>component_type = "Header"</condition>
+    </pseudoconstant>
     <comment>FK to the header component.</comment>
   </field>
   <foreignKey>
     <name>footer_id</name>
     <title>Mailing Footer</title>
     <type>int unsigned</type>
+    <pseudoconstant>
+      <table>civicrm_mailing_component</table>
+      <keyColumn>id</keyColumn>
+      <labelColumn>name</labelColumn>
+      <condition>component_type = "Footer"</condition>
+    </pseudoconstant>
     <comment>FK to the footer component.</comment>
   </field>
   <foreignKey>
index 4a39b8feb7236f1ba77a2f6aeb81118a96d1bb1a..82639e761e97f4a934c41b7de1edd845c7d86b57 100644 (file)
@@ -574,7 +574,8 @@ SET @devellastID:=LAST_INSERT_ID();
 INSERT INTO civicrm_navigation
 ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight )
 VALUES
-( @domainID, 'civicrm/api', '{ts escape="sql" skip="true"}API Explorer{/ts}','API Explorer', 'administer CiviCRM', '', @devellastID, '1', NULL, 1 ),
+( @domainID, 'civicrm/api', '{ts escape="sql" skip="true"}Api Explorer v3{/ts}', 'API Explorer', 'administer CiviCRM', '', @devellastID, '1', NULL, 1 ),
+( @domainID, 'civicrm/api4#/explorer', '{ts escape="sql" skip="true"}Api Explorer v4{/ts}', 'Api Explorer v4', 'administer CiviCRM', '', @devellastID, '1', NULL, 2 ),
 ( @domainID, 'https://civicrm.org/developer-documentation?src=iam', '{ts escape="sql" skip="true"}Developer Docs{/ts}', 'Developer Docs', 'administer CiviCRM', '', @devellastID, '1', NULL, 3 );
 
 INSERT INTO civicrm_navigation
index 5e17f30e9462f6e4804cf1fa578ee1257a03b845..e824915ca553921f828b05525ebc10e743b5eb6a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="iso-8859-1" ?>
 <version>
-  <version_no>5.19.alpha1</version_no>
+  <version_no>5.20.alpha1</version_no>
 </version>