From 9877d7fc1b510e98af8b92913c6cd59bcac29b73 Mon Sep 17 00:00:00 2001 From: Kevin Cristiano <kcristiano@kcristiano.com> Date: Wed, 1 Jun 2022 07:24:44 -0400 Subject: [PATCH] civicrm release-5.50.0 --- civicrm.php | 4 +- civicrm/CRM/Activity/Form/Activity.php | 2 +- civicrm/CRM/Activity/Import/Form/MapField.php | 6 +- civicrm/CRM/Activity/Import/Form/Preview.php | 38 +- civicrm/CRM/Activity/Import/Form/Summary.php | 9 +- civicrm/CRM/Activity/Import/Parser.php | 361 - .../CRM/Activity/Import/Parser/Activity.php | 328 +- civicrm/CRM/Admin/Form/Extensions.php | 5 +- civicrm/CRM/Api4/Page/AJAX.php | 6 + civicrm/CRM/Api4/Page/Api4Explorer.php | 2 - civicrm/CRM/Campaign/DAO/Survey.php | 5 +- civicrm/CRM/Campaign/Form/Campaign.php | 13 +- civicrm/CRM/Case/BAO/Case.php | 2 +- civicrm/CRM/Case/Page/AJAX.php | 2 +- .../CRM/Contact/BAO/Contact/Permission.php | 62 +- civicrm/CRM/Contact/BAO/Contact/Utils.php | 89 +- civicrm/CRM/Contact/BAO/GroupContactCache.php | 10 +- civicrm/CRM/Contact/DAO/SavedSearch.php | 9 +- civicrm/CRM/Contact/Form/Contact.php | 2 +- .../Form/Edit/CommunicationPreferences.php | 2 - civicrm/CRM/Contact/Form/Edit/Email.php | 2 +- .../CRM/Contact/Import/Form/DataSource.php | 283 +- civicrm/CRM/Contact/Import/Form/MapField.php | 385 +- civicrm/CRM/Contact/Import/Form/Preview.php | 355 +- civicrm/CRM/Contact/Import/Form/Summary.php | 35 +- civicrm/CRM/Contact/Import/ImportJob.php | 59 +- civicrm/CRM/Contact/Import/MetadataTrait.php | 16 - civicrm/CRM/Contact/Import/Parser.php | 1092 --- civicrm/CRM/Contact/Import/Parser/Contact.php | 1594 +++- civicrm/CRM/Contact/Page/View.php | 3 + civicrm/CRM/Contact/Page/View/Summary.php | 125 +- civicrm/CRM/Contribute/BAO/Contribution.php | 26 +- .../CRM/Contribute/BAO/ContributionRecur.php | 5 +- .../Contribute/Form/CancelSubscription.php | 10 +- .../Form/ContributionPage/Settings.php | 9 +- .../CRM/Contribute/Import/Form/MapField.php | 16 +- .../CRM/Contribute/Import/Form/Preview.php | 30 +- .../CRM/Contribute/Import/Form/Summary.php | 5 +- .../Contribute/Import/Parser/Contribution.php | 81 +- civicrm/CRM/Contribute/Page/Tab.php | 9 +- civicrm/CRM/Core/BAO/CustomGroup.php | 405 +- civicrm/CRM/Core/BAO/File.php | 16 +- civicrm/CRM/Core/BAO/FinancialTrxn.php | 89 +- civicrm/CRM/Core/BAO/Job.php | 2 - civicrm/CRM/Core/BAO/UserJob.php | 89 + civicrm/CRM/Core/Config.php | 2 +- civicrm/CRM/Core/DAO.php | 8 +- civicrm/CRM/Core/DAO/AllCoreTables.data.php | 5 + civicrm/CRM/Core/DAO/AllCoreTables.php | 14 +- civicrm/CRM/Core/DAO/CustomGroup.php | 7 +- civicrm/CRM/Core/DAO/UserJob.php | 436 + civicrm/CRM/Core/Error.php | 52 +- civicrm/CRM/Core/Form/Tag.php | 1 + civicrm/CRM/Core/Lock.php | 2 +- civicrm/CRM/Core/ManagedEntities.php | 389 +- civicrm/CRM/Core/Page/FakeError.php | 59 + civicrm/CRM/Core/Payment/AuthorizeNetIPN.php | 35 +- civicrm/CRM/Core/Payment/Elavon.php | 16 +- civicrm/CRM/Core/Payment/FirstData.php | 12 +- civicrm/CRM/Core/Payment/Manual.php | 14 +- civicrm/CRM/Core/Payment/PayJunction.php | 13 +- civicrm/CRM/Core/Payment/PayPalImpl.php | 34 +- civicrm/CRM/Core/Payment/PayPalProIPN.php | 10 +- civicrm/CRM/Core/Payment/Realex.php | 16 +- civicrm/CRM/Core/Permission.php | 12 + civicrm/CRM/Core/Permission/Drupal6.php | 204 - civicrm/CRM/Core/PseudoConstant.php | 2 +- civicrm/CRM/Core/SelectValues.php | 30 +- civicrm/CRM/Core/xml/Menu/Import.xml | 14 + civicrm/CRM/Core/xml/Menu/Misc.xml | 7 + civicrm/CRM/Custom/Import/Form/DataSource.php | 22 + civicrm/CRM/Custom/Import/Form/MapField.php | 7 +- civicrm/CRM/Custom/Import/Form/Preview.php | 32 +- civicrm/CRM/Custom/Import/Parser.php | 374 - civicrm/CRM/Custom/Import/Parser/Api.php | 357 +- civicrm/CRM/Custom/Page/Group.php | 3 +- civicrm/CRM/Event/BAO/Event.php | 13 + civicrm/CRM/Event/BAO/Participant.php | 14 +- .../CRM/Event/Form/ManageEvent/EventInfo.php | 6 +- .../Event/Form/ManageEvent/Registration.php | 8 +- civicrm/CRM/Event/Form/Registration.php | 4 +- .../CRM/Event/Form/Registration/Confirm.php | 39 +- .../Form/Registration/ParticipantConfirm.php | 5 +- civicrm/CRM/Event/Import/Form/MapField.php | 19 +- civicrm/CRM/Event/Import/Form/Preview.php | 32 +- civicrm/CRM/Event/Import/Form/Summary.php | 9 +- civicrm/CRM/Event/Import/Parser.php | 405 - .../CRM/Event/Import/Parser/Participant.php | 379 +- civicrm/CRM/Financial/BAO/FinancialTrxn.php | 85 + civicrm/CRM/Financial/DAO/FinancialTrxn.php | 38 +- .../CRM/Financial/Page/FinancialAccount.php | 8 + civicrm/CRM/Import/DataSource.php | 447 +- civicrm/CRM/Import/DataSource/CSV.php | 57 +- civicrm/CRM/Import/DataSource/SQL.php | 48 +- civicrm/CRM/Import/Form/DataSource.php | 44 +- civicrm/CRM/Import/Form/DataSourceConfig.php | 80 + civicrm/CRM/Import/Form/MapField.php | 2 +- civicrm/CRM/Import/Form/Preview.php | 10 +- civicrm/CRM/Import/Form/Summary.php | 2 +- civicrm/CRM/Import/Forms.php | 554 ++ civicrm/CRM/Import/ImportProcessor.php | 78 +- civicrm/CRM/Import/Parser.php | 208 +- civicrm/CRM/Mailing/Event/BAO/Confirm.php | 6 +- civicrm/CRM/Mailing/Form/Approve.php | 11 +- civicrm/CRM/Member/Form/MembershipView.php | 18 +- civicrm/CRM/Member/Form/Task/Label.php | 1 + civicrm/CRM/Member/Import/Form/MapField.php | 16 +- civicrm/CRM/Member/Import/Form/Preview.php | 30 +- civicrm/CRM/Member/Import/Form/Summary.php | 5 +- .../CRM/Member/Import/Parser/Membership.php | 66 +- civicrm/CRM/PCP/Form/Campaign.php | 2 +- civicrm/CRM/Price/BAO/PriceSet.php | 11 +- civicrm/CRM/Price/Form/Field.php | 6 + civicrm/CRM/Report/Form.php | 12 +- civicrm/CRM/Upgrade/Form.php | 9 + civicrm/CRM/Upgrade/Incremental/Base.php | 30 + civicrm/CRM/Upgrade/Incremental/General.php | 17 + .../CRM/Upgrade/Incremental/php/FiveFifty.php | 71 + .../Incremental/sql/5.50.alpha1.mysql.tpl | 55 + civicrm/CRM/Upgrade/Snapshot.php | 220 + civicrm/CRM/Utils/API/HTMLInputCoder.php | 2 + civicrm/CRM/Utils/Address/BatchUpdate.php | 31 +- .../CRM/Utils/Check/Component/Security.php | 35 + civicrm/CRM/Utils/Date.php | 53 + civicrm/CRM/Utils/Hook.php | 32 +- civicrm/CRM/Utils/Hook/WordPress.php | 2 - civicrm/CRM/Utils/System.php | 1 + civicrm/CRM/Utils/System/Base.php | 11 + civicrm/CRM/Utils/System/Drupal6.php | 823 -- civicrm/CRM/Utils/System/Drupal8.php | 7 +- civicrm/CRM/Utils/System/WordPress.php | 20 + civicrm/Civi/API/Request.php | 16 +- civicrm/Civi/Api4/Action/Entity/Get.php | 8 +- .../Civi/Api4/Action/Managed/Reconcile.php | 49 + civicrm/Civi/Api4/CaseType.php | 1 + .../Api4/Event/CreateApi4RequestEvent.php | 39 +- .../CreateApi4RequestSubscriber.php | 54 - civicrm/Civi/Api4/Generic/AbstractAction.php | 2 +- .../Civi/Api4/Generic/AbstractSaveAction.php | 2 +- civicrm/Civi/Api4/Generic/DAOGetAction.php | 15 +- .../Civi/Api4/Generic/DAOGetFieldsAction.php | 27 + civicrm/Civi/Api4/Generic/Result.php | 60 +- .../Generic/Traits/ArrayQueryActionTrait.php | 17 +- civicrm/Civi/Api4/Managed.php | 11 +- .../Api4/Provider/ActionObjectProvider.php | 16 +- civicrm/Civi/Api4/Query/Api4SelectQuery.php | 36 +- civicrm/Civi/Api4/Query/SqlEquation.php | 8 +- civicrm/Civi/Api4/Query/SqlExpression.php | 4 +- civicrm/Civi/Api4/Query/SqlField.php | 19 +- civicrm/Civi/Api4/Query/SqlFunction.php | 12 +- .../Civi/Api4/Query/SqlFunctionCURDATE.php | 4 +- civicrm/Civi/Api4/Query/SqlFunctionMONTH.php | 46 + civicrm/Civi/Api4/Query/SqlFunctionNOW.php | 41 + civicrm/Civi/Api4/Query/SqlNull.php | 2 +- civicrm/Civi/Api4/Query/SqlNumber.php | 2 +- civicrm/Civi/Api4/Query/SqlString.php | 2 +- civicrm/Civi/Api4/Query/SqlWild.php | 2 +- .../Spec/Provider/CustomGroupSpecProvider.php | 37 + .../Spec/Provider/DomainGetSpecProvider.php | 50 + .../FinancialTrxnCreationSpecProvider.php | 47 + .../Civi/Api4/Service/Spec/SpecFormatter.php | 8 + civicrm/Civi/Api4/UserJob.php | 24 + civicrm/Civi/Api4/Utils/CoreUtil.php | 17 +- civicrm/Civi/Api4/Utils/FormattingUtil.php | 10 +- civicrm/Civi/Core/Container.php | 3 +- civicrm/Civi/Crypto/CryptoRegistry.php | 2 +- civicrm/Civi/Test/HttpTestTrait.php | 16 + civicrm/ang/api4Explorer.ang.php | 2 +- civicrm/ang/api4Explorer/Explorer.html | 1 - civicrm/ang/api4Explorer/Explorer.js | 96 +- civicrm/ang/api4Explorer/SaveSearch.html | 26 - civicrm/ang/crmMailing/Templates.js | 17 +- civicrm/api/v3/CustomGroup.php | 10 +- civicrm/api/v3/Rule.php | 4 +- civicrm/api/v3/RuleGroup.php | 2 +- civicrm/api/v3/utils.php | 8 +- civicrm/civicrm-version.php | 2 +- civicrm/composer.json | 6 +- civicrm/composer.lock | 42 +- civicrm/css/civicrm.css | 24 - .../Civi/AfformAdmin/AfformAdminMeta.php | 255 +- .../Civi/Api4/Action/Afform/LoadAdminData.php | 2 +- .../ext/afform/admin/ang/afGuiEditor.ang.php | 2 +- .../ang/afGuiEditor/afGuiEditor.component.js | 8 +- .../ang/afGuiEditor/afGuiEntity.component.js | 4 +- .../ang/afGuiEditor/afGuiSearch.component.js | 8 +- .../elements/afGuiContainer.component.js | 7 +- .../elements/afGuiField.component.js | 2 +- civicrm/ext/afform/admin/info.xml | 5 +- .../core/Civi/Api4/Action/Afform/Revert.php | 4 +- .../core/Civi/Api4/Utils/AfformSaveTrait.php | 5 +- civicrm/ext/afform/core/afform.php | 5 +- civicrm/ext/afform/core/info.xml | 4 +- civicrm/ext/afform/html/info.xml | 4 +- civicrm/ext/afform/mock/info.xml | 4 +- civicrm/ext/authx/authx.php | 10 +- civicrm/ext/authx/info.xml | 14 +- civicrm/ext/authx/settings/authx.setting.php | 2 +- .../tests/phpunit/Civi/Authx/AllFlowsTest.php | 92 +- civicrm/ext/civicrm_admin_ui/info.xml | 4 +- civicrm/ext/civigrant/info.xml | 4 +- ...tionValue_cg_extends_objects_grant.mgd.php | 24 + civicrm/ext/ckeditor4/info.xml | 4 +- .../ext/contributioncancelactions/info.xml | 4 +- civicrm/ext/eventcart/info.xml | 4 +- .../ext/ewaysingle/CRM/Core/Payment/eWAY.php | 13 +- civicrm/ext/ewaysingle/info.xml | 4 +- civicrm/ext/financialacls/info.xml | 4 +- civicrm/ext/flexmailer/info.xml | 4 +- civicrm/ext/greenwich/info.xml | 4 +- civicrm/ext/legacycustomsearches/info.xml | 4 +- civicrm/ext/message_admin/info.xml | 4 +- civicrm/ext/oauth-client/info.xml | 4 +- .../CRM/Core/Payment/PayflowPro.php | 28 +- civicrm/ext/payflowpro/info.xml | 4 +- civicrm/ext/recaptcha/info.xml | 4 +- .../CRM/Search/BAO/SearchSegment.php | 31 + .../CRM/Search/DAO/SearchDisplay.php | 9 +- .../CRM/Search/DAO/SearchSegment.php | 314 + .../ext/search_kit/CRM/Search/Upgrader.php | 24 + .../SearchDisplay/AbstractRunAction.php | 22 +- .../search_kit/Civi/Api4/SearchSegment.php | 11 + .../SearchSegmentExtraFieldProvider.php | 100 + .../Provider/SearchSegmentSpecProvider.php} | 8 +- .../search_kit/ang/crmSearchAdmin.module.js | 35 +- .../crmSearchAdmin.component.js | 74 +- .../crmSearchAdminDisplay.component.js | 2 +- .../crmSearchAdminImport.component.js | 2 +- .../crmSearchAdminLinkGroup.component.js | 2 +- .../crmSearchAdminSearchListing.component.js | 4 +- .../searchListing/searchList.html | 15 +- .../crmSearchAdminSegment.component.js | 134 + .../searchSegment/crmSearchAdminSegment.html | 78 + .../searchSegment/editDialog.html | 3 + .../searchSegmentListing/buttons.html | 12 + .../crmSearchAdminSegmentListing.component.js | 101 + .../searchSegmentListing/segments.html | 1 + .../traits/searchDisplayBaseTrait.service.js | 26 +- .../ang/crmSearchDisplayGrid.ang.php | 5 +- .../crmSearchDisplayGrid.component.js | 3 +- .../crmSearchDisplayList.component.js | 3 +- .../crmSearchDisplayTable.component.js | 4 +- .../crmSearchInputVal.component.js | 8 +- civicrm/ext/search_kit/css/crmSearchAdmin.css | 5 +- .../search_kit/css/crmSearchDisplayGrid.css | 23 + civicrm/ext/search_kit/info.xml | 4 +- civicrm/ext/search_kit/search_kit.civix.php | 5 + civicrm/ext/search_kit/search_kit.php | 11 + civicrm/ext/search_kit/sql/auto_install.sql | 20 + civicrm/ext/search_kit/sql/auto_uninstall.sql | 1 + .../v4/SearchSegment/SearchSegmentTest.php | 322 + .../xml/schema/CRM/Search/SearchDisplay.xml | 1 + .../CRM/Search/SearchSegment.entityType.php | 10 + .../xml/schema/CRM/Search/SearchSegment.xml | 90 + civicrm/ext/sequentialcreditnotes/info.xml | 4 +- civicrm/install/civicrm.php | 7 - civicrm/install/index.php | 2 +- civicrm/js/crm.datepicker.js | 1 + civicrm/mixin/afform-entity-php@1/mixin.php | 40 + civicrm/mixin/ang-php@1/mixin.php | 1 + civicrm/mixin/case-xml@1/mixin.php | 1 + civicrm/mixin/menu-xml@1/mixin.php | 1 + civicrm/mixin/mgd-php@1/mixin.php | 7 +- civicrm/mixin/setting-php@1/mixin.php | 1 + civicrm/mixin/theme-php@1/mixin.php | 1 + civicrm/release-notes.md | 108 +- civicrm/release-notes/5.45.3.md | 39 + .../release-notes/{5.49.4.md => 5.46.1.md} | 18 +- civicrm/release-notes/5.46.2.md | 43 + civicrm/release-notes/5.46.3.md | 42 + civicrm/release-notes/5.47.1.md | 38 + civicrm/release-notes/5.47.2.md | 51 + civicrm/release-notes/5.47.3.md | 56 + civicrm/release-notes/5.47.4.md | 39 + civicrm/release-notes/5.48.1.md | 46 + civicrm/release-notes/5.48.2.md | 42 + civicrm/release-notes/5.50.0.md | 773 ++ civicrm/sql/civicrm.mysql | 27 + civicrm/sql/civicrm_data.mysql | 38 +- civicrm/sql/civicrm_drop.mysql | 1 + civicrm/sql/civicrm_generated.mysql | 8147 +++++++++-------- civicrm/templates/CRM/ACL/Page/EntityRole.tpl | 2 +- .../templates/CRM/Activity/Form/Selector.tpl | 2 +- .../CRM/Activity/Import/Form/DataSource.tpl | 25 +- .../CRM/Activity/Import/Form/Preview.tpl | 18 - .../CRM/Activity/Import/Form/Summary.tpl | 20 - .../CRM/Activity/Selector/Activity.tpl | 2 +- .../templates/CRM/Admin/Form/Extensions.tpl | 4 +- .../CRM/Admin/Form/ScheduleReminders.tpl | 10 + civicrm/templates/CRM/Admin/Page/Access.tpl | 4 +- .../templates/CRM/Admin/Page/ContactType.tpl | 2 +- .../CRM/Admin/Page/EventTemplate.tpl | 2 +- .../CRM/Admin/Page/Extensions/AddNew.tpl | 2 +- .../CRM/Admin/Page/Extensions/Main.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Job.tpl | 2 +- .../templates/CRM/Admin/Page/LabelFormats.tpl | 4 +- .../templates/CRM/Admin/Page/LocationType.tpl | 2 +- .../templates/CRM/Admin/Page/MailSettings.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Mapping.tpl | 2 +- .../CRM/Admin/Page/MessageTemplates.tpl | 2 +- civicrm/templates/CRM/Admin/Page/Options.tpl | 2 +- .../CRM/Admin/Page/ParticipantStatusType.tpl | 4 +- .../CRM/Admin/Page/PaymentProcessor.tpl | 2 +- .../templates/CRM/Admin/Page/PdfFormats.tpl | 4 +- .../CRM/Admin/Page/PreferencesDate.tpl | 2 +- .../CRM/Admin/Page/RelationshipType.tpl | 2 +- .../templates/CRM/Admin/Page/Reminders.tpl | 2 +- civicrm/templates/CRM/Badge/Page/Layout.tpl | 2 +- .../templates/CRM/Campaign/Form/Petition.tpl | 12 + .../CRM/Campaign/Page/SurveyType.tpl | 4 +- civicrm/templates/CRM/Case/Page/Tab.tpl | 2 +- .../templates/CRM/Contact/Form/Contact.hlp | 8 +- .../CRM/Contact/Import/Form/DataSource.tpl | 34 +- .../CRM/Contact/Import/Form/MapField.tpl | 2 +- .../CRM/Contact/Import/Form/MapTable.tpl | 201 +- .../CRM/Contact/Import/Form/Preview.tpl | 21 +- .../CRM/Contact/Import/Form/Summary.tpl | 24 +- .../CRM/Contact/Page/ContactImage.tpl | 2 +- .../CRM/Contact/Page/DedupeRules.tpl | 2 +- .../CRM/Contact/Page/View/Summary.tpl | 2 +- .../CRM/Contribute/Import/Form/DataSource.tpl | 34 +- .../CRM/Contribute/Import/Form/Preview.tpl | 18 - .../CRM/Contribute/Import/Form/Summary.tpl | 20 - .../CRM/Contribute/Page/ContributionType.tpl | 2 +- .../CRM/Contribute/Page/DashBoard.tpl | 4 +- .../CRM/Contribute/Page/ManagePremiums.tpl | 2 +- .../templates/CRM/Contribute/Page/Premium.tpl | 2 +- civicrm/templates/CRM/Contribute/Page/Tab.tpl | 12 +- .../CRM/Custom/Import/Form/DataSource.tpl | 27 +- .../CRM/Event/Import/Form/DataSource.tpl | 30 +- .../CRM/Event/Import/Form/Preview.tpl | 18 - .../CRM/Event/Import/Form/Summary.tpl | 20 - .../templates/CRM/Event/Page/ManageEvent.tpl | 4 +- civicrm/templates/CRM/Event/Page/Tab.tpl | 14 +- .../CRM/Financial/Page/FinancialAccount.tpl | 2 +- .../CRM/Financial/Page/FinancialType.tpl | 2 +- .../Financial/Page/FinancialTypeAccount.tpl | 2 +- civicrm/templates/CRM/Form/attachment.tpl | 20 +- civicrm/templates/CRM/Form/default.tpl | 2 +- civicrm/templates/CRM/Group/Form/Edit.tpl | 6 +- .../templates/CRM/Group/Page/GroupRows.tpl | 2 +- .../templates/CRM/Import/Form/DataSource.tpl | 68 + .../CRM/Import/Form/DataSourceConfig.tpl} | 14 +- civicrm/templates/CRM/Mailing/Page/Browse.tpl | 2 +- .../templates/CRM/Mailing/Page/Component.tpl | 2 +- civicrm/templates/CRM/Mailing/Page/Report.tpl | 8 +- .../CRM/Member/Import/Form/DataSource.tpl | 59 +- .../CRM/Member/Import/Form/Preview.tpl | 18 - .../CRM/Member/Import/Form/Summary.tpl | 20 - .../CRM/Member/Page/MembershipStatus.tpl | 4 +- .../CRM/Member/Page/MembershipType.tpl | 4 +- civicrm/templates/CRM/PCP/Page/PCP.tpl | 2 +- civicrm/templates/CRM/Pledge/Page/Tab.tpl | 5 +- civicrm/templates/CRM/Price/Form/LineItem.tpl | 3 +- civicrm/templates/CRM/Price/Page/Field.tpl | 4 +- civicrm/templates/CRM/Price/Page/LineItem.tpl | 3 +- civicrm/templates/CRM/Price/Page/Option.tpl | 4 +- civicrm/templates/CRM/Price/Page/Set.tpl | 2 +- civicrm/templates/CRM/Report/Page/Options.tpl | 2 +- civicrm/templates/CRM/SMS/Page/Provider.tpl | 2 +- civicrm/templates/CRM/UF/Page/Field.tpl | 4 +- civicrm/templates/CRM/UF/Page/Group.tpl | 4 +- civicrm/templates/CRM/common/CMSPrint.tpl | 17 +- civicrm/templates/CRM/common/TabHeader.tpl | 2 +- civicrm/templates/CRM/common/WizardHeader.tpl | 6 +- .../CRM/common/civicrm.settings.php.template | 3 - civicrm/vendor/autoload.php | 2 +- civicrm/vendor/composer/autoload_real.php | 14 +- civicrm/vendor/composer/autoload_static.php | 12 +- civicrm/vendor/composer/installed.json | 32 +- civicrm/vendor/league/csv/CHANGELOG.md | 153 +- civicrm/vendor/league/csv/composer.json | 42 +- civicrm/vendor/league/csv/src/AbstractCsv.php | 79 +- .../league/csv/src/CannotInsertRecord.php | 4 +- .../league/csv/src/CharsetConverter.php | 60 +- .../league/csv/src/ColumnConsistency.php | 2 +- .../vendor/league/csv/src/EncloseField.php | 20 +- .../vendor/league/csv/src/EscapeFormula.php | 17 +- .../vendor/league/csv/src/HTMLConverter.php | 73 +- .../vendor/league/csv/src/InvalidArgument.php | 21 + civicrm/vendor/league/csv/src/MapIterator.php | 2 +- .../csv/src/Polyfill/EmptyEscapeParser.php | 38 +- .../vendor/league/csv/src/RFC4180Field.php | 16 +- civicrm/vendor/league/csv/src/Reader.php | 171 +- civicrm/vendor/league/csv/src/ResultSet.php | 110 +- civicrm/vendor/league/csv/src/Statement.php | 44 +- civicrm/vendor/league/csv/src/Stream.php | 141 +- civicrm/vendor/league/csv/src/SyntaxError.php | 21 + .../league/csv/src/TabularDataReader.php | 103 + .../league/csv/src/UnavailableFeature.php | 21 + civicrm/vendor/league/csv/src/Writer.php | 43 +- .../vendor/league/csv/src/XMLConverter.php | 33 +- civicrm/vendor/league/csv/src/functions.php | 167 +- civicrm/xml/schema/Campaign/Survey.xml | 3 + civicrm/xml/schema/Contact/SavedSearch.xml | 1 + civicrm/xml/schema/Core/CustomGroup.xml | 5 +- civicrm/xml/schema/Core/UserJob.xml | 156 + civicrm/xml/schema/Core/files.xml | 1 + civicrm/xml/templates/civicrm_currency.tpl | 10 - civicrm/xml/templates/civicrm_data.tpl | 8 +- .../xml/templates/civicrm_state_province.tpl | 18 +- civicrm/xml/version.xml | 2 +- 402 files changed, 15576 insertions(+), 11705 deletions(-) delete mode 100644 civicrm/CRM/Activity/Import/Parser.php delete mode 100644 civicrm/CRM/Contact/Import/Parser.php create mode 100644 civicrm/CRM/Core/BAO/UserJob.php create mode 100644 civicrm/CRM/Core/DAO/UserJob.php create mode 100644 civicrm/CRM/Core/Page/FakeError.php delete mode 100644 civicrm/CRM/Core/Permission/Drupal6.php delete mode 100644 civicrm/CRM/Custom/Import/Parser.php delete mode 100644 civicrm/CRM/Event/Import/Parser.php create mode 100644 civicrm/CRM/Financial/BAO/FinancialTrxn.php create mode 100644 civicrm/CRM/Import/Form/DataSourceConfig.php create mode 100644 civicrm/CRM/Import/Forms.php create mode 100644 civicrm/CRM/Upgrade/Incremental/php/FiveFifty.php create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.50.alpha1.mysql.tpl create mode 100644 civicrm/CRM/Upgrade/Snapshot.php delete mode 100644 civicrm/CRM/Utils/System/Drupal6.php create mode 100644 civicrm/Civi/Api4/Action/Managed/Reconcile.php delete mode 100644 civicrm/Civi/Api4/Event/Subscriber/CreateApi4RequestSubscriber.php create mode 100644 civicrm/Civi/Api4/Query/SqlFunctionMONTH.php create mode 100644 civicrm/Civi/Api4/Query/SqlFunctionNOW.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/CustomGroupSpecProvider.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/DomainGetSpecProvider.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/FinancialTrxnCreationSpecProvider.php create mode 100644 civicrm/Civi/Api4/UserJob.php delete mode 100644 civicrm/ang/api4Explorer/SaveSearch.html create mode 100644 civicrm/ext/civigrant/managed/OptionValue_cg_extends_objects_grant.mgd.php create mode 100644 civicrm/ext/search_kit/CRM/Search/BAO/SearchSegment.php create mode 100644 civicrm/ext/search_kit/CRM/Search/DAO/SearchSegment.php create mode 100644 civicrm/ext/search_kit/Civi/Api4/SearchSegment.php create mode 100644 civicrm/ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentExtraFieldProvider.php rename civicrm/{Civi/Api4/Service/Spec/Provider/CustomGroupCreationSpecProvider.php => ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentSpecProvider.php} (79%) create mode 100644 civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.component.js create mode 100644 civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.html create mode 100644 civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/editDialog.html create mode 100644 civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/buttons.html create mode 100644 civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/crmSearchAdminSegmentListing.component.js create mode 100644 civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/segments.html create mode 100644 civicrm/ext/search_kit/css/crmSearchDisplayGrid.css create mode 100644 civicrm/ext/search_kit/tests/phpunit/api/v4/SearchSegment/SearchSegmentTest.php create mode 100644 civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.entityType.php create mode 100644 civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.xml create mode 100644 civicrm/mixin/afform-entity-php@1/mixin.php create mode 100644 civicrm/release-notes/5.45.3.md rename civicrm/release-notes/{5.49.4.md => 5.46.1.md} (62%) create mode 100644 civicrm/release-notes/5.46.2.md create mode 100644 civicrm/release-notes/5.46.3.md create mode 100644 civicrm/release-notes/5.47.1.md create mode 100644 civicrm/release-notes/5.47.2.md create mode 100644 civicrm/release-notes/5.47.3.md create mode 100644 civicrm/release-notes/5.47.4.md create mode 100644 civicrm/release-notes/5.48.1.md create mode 100644 civicrm/release-notes/5.48.2.md create mode 100644 civicrm/release-notes/5.50.0.md create mode 100644 civicrm/templates/CRM/Import/Form/DataSource.tpl rename civicrm/{CRM/Utils/Hook/Drupal6.php => templates/CRM/Import/Form/DataSourceConfig.tpl} (74%) create mode 100644 civicrm/vendor/league/csv/src/InvalidArgument.php create mode 100644 civicrm/vendor/league/csv/src/SyntaxError.php create mode 100644 civicrm/vendor/league/csv/src/TabularDataReader.php create mode 100644 civicrm/vendor/league/csv/src/UnavailableFeature.php create mode 100644 civicrm/xml/schema/Core/UserJob.xml diff --git a/civicrm.php b/civicrm.php index b1e09f9eed..c3db3dd797 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /** * Plugin Name: CiviCRM * Description: CiviCRM - Growing and Sustaining Relationships - * Version: 5.49.4 + * Version: 5.50.0 * Requires at least: 4.9 * Requires PHP: 7.2 * Author: CiviCRM LLC @@ -36,7 +36,7 @@ if (!defined('ABSPATH')) { } // Set version here: changing it forces Javascript and CSS to reload. -define('CIVICRM_PLUGIN_VERSION', '5.49.4'); +define('CIVICRM_PLUGIN_VERSION', '5.50.0'); // Store reference to this file. if (!defined('CIVICRM_PLUGIN_FILE')) { diff --git a/civicrm/CRM/Activity/Form/Activity.php b/civicrm/CRM/Activity/Form/Activity.php index 4845e864e1..ab071e004a 100644 --- a/civicrm/CRM/Activity/Form/Activity.php +++ b/civicrm/CRM/Activity/Form/Activity.php @@ -526,7 +526,7 @@ class CRM_Activity_Form_Activity extends CRM_Contact_Form_Task { * @return array */ public function getOptionalQuickFormElements(): array { - return ['separation', 'tag']; + return array_merge(['separation', 'tag'], $this->optionalQuickFormElements); } /** diff --git a/civicrm/CRM/Activity/Import/Form/MapField.php b/civicrm/CRM/Activity/Import/Form/MapField.php index 215ec9ecca..8008bc0412 100644 --- a/civicrm/CRM/Activity/Import/Form/MapField.php +++ b/civicrm/CRM/Activity/Import/Form/MapField.php @@ -325,10 +325,6 @@ class CRM_Activity_Import_Form_MapField extends CRM_Import_Form_MapField { return; } - $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - $mapperKeys = []; $mapper = []; $mapperKeys = $this->controller->exportValue($this->_name, 'mapper'); @@ -391,7 +387,7 @@ class CRM_Activity_Import_Form_MapField extends CRM_Import_Form_MapField { } $parser = new CRM_Activity_Import_Parser_Activity($mapperKeysMain); - $parser->run($fileName, $separator, $mapper, $skipColumnHeader, + $parser->run($this->getSubmittedValue('uploadFile'), $this->getSubmittedValue('fieldSeparator'), $mapper, $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_PREVIEW ); diff --git a/civicrm/CRM/Activity/Import/Form/Preview.php b/civicrm/CRM/Activity/Import/Form/Preview.php index b12ffef366..e991b978e0 100644 --- a/civicrm/CRM/Activity/Import/Form/Preview.php +++ b/civicrm/CRM/Activity/Import/Form/Preview.php @@ -24,13 +24,11 @@ class CRM_Activity_Import_Form_Preview extends CRM_Import_Form_Preview { * Set variables up before form is built. */ public function preProcess() { - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - + parent::preProcess(); // Get the data from the session. $dataValues = $this->get('dataValues'); $mapper = $this->get('mapper'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $mismatchCount = $this->get('unMatchCount'); // Get the mapping name displayed if the mappingId is set. @@ -42,26 +40,13 @@ class CRM_Activity_Import_Form_Preview extends CRM_Import_Form_Preview { } $this->assign('savedMappingName', $mappingId ? $mapDAO->name : NULL); - if ($skipColumnHeader) { - $this->assign('skipColumnHeader', $skipColumnHeader); - $this->assign('rowDisplayCount', 3); - } - else { - $this->assign('rowDisplayCount', 2); - } - if ($invalidRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Activity_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Activity_Import_Parser_Activity'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } - if ($conflictRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Activity_Import_Parser'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - } - if ($mismatchCount) { - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Activity_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Activity_Import_Parser_Activity'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } @@ -72,9 +57,7 @@ class CRM_Activity_Import_Form_Preview extends CRM_Import_Form_Preview { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', 'downloadErrorRecordsUrl', - 'downloadConflictRecordsUrl', 'downloadMismatchRecordsUrl', ]; $this->setStatusUrl(); @@ -91,10 +74,7 @@ class CRM_Activity_Import_Form_Preview extends CRM_Import_Form_Preview { */ public function postProcess() { $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $onDuplicate = $this->get('onDuplicate'); $mapper = $this->controller->exportValue('MapField', 'mapper'); @@ -115,9 +95,11 @@ class CRM_Activity_Import_Form_Preview extends CRM_Import_Form_Preview { } $mapperFields[] = implode(' - ', $header); } - $parser->run($fileName, $separator, + $parser->run( + $this->getSubmittedValue('uploadFile'), + $this->getSubmittedValue('fieldSeparator'), $mapperFields, - $skipColumnHeader, + $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_IMPORT, $onDuplicate, $this->get('statusID'), @@ -146,11 +128,9 @@ class CRM_Activity_Import_Form_Preview extends CRM_Import_Form_Preview { fclose($fd); $this->set('errorFile', $errorFile); - $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Activity_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Activity_Import_Parser_Activity'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Activity_Import_Parser'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Activity_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Activity_Import_Parser_Activity'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } } diff --git a/civicrm/CRM/Activity/Import/Form/Summary.php b/civicrm/CRM/Activity/Import/Form/Summary.php index b8fc8327ab..a4c9b66e97 100644 --- a/civicrm/CRM/Activity/Import/Form/Summary.php +++ b/civicrm/CRM/Activity/Import/Form/Summary.php @@ -33,16 +33,15 @@ class CRM_Activity_Import_Form_Summary extends CRM_Import_Form_Summary { $this->set('totalRowCount', $totalRowCount); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $duplicateRowCount = $this->get('duplicateRowCount'); $onDuplicate = $this->get('onDuplicate'); $mismatchCount = $this->get('unMatchCount'); if ($duplicateRowCount > 0) { - $urlParams = 'type=' . CRM_Import_Parser::DUPLICATE . '&parser=CRM_Activity_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::DUPLICATE . '&parser=CRM_Activity_Import_Parser_Activity'; $this->set('downloadDuplicateRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } elseif ($mismatchCount) { - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Activity_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Activity_Import_Parser_Activity'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } else { @@ -68,7 +67,7 @@ class CRM_Activity_Import_Form_Summary extends CRM_Import_Form_Summary { // Only subtract dupes from successful import if we're skipping. $this->set('validRowCount', $totalRowCount - $invalidRowCount - - $conflictRowCount - $duplicateRowCount - $mismatchCount + $duplicateRowCount - $mismatchCount ); } $this->assign('dupeActionString', $dupeActionString); @@ -77,8 +76,6 @@ class CRM_Activity_Import_Form_Summary extends CRM_Import_Form_Summary { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', - 'downloadConflictRecordsUrl', 'downloadErrorRecordsUrl', 'duplicateRowCount', 'downloadDuplicateRecordsUrl', diff --git a/civicrm/CRM/Activity/Import/Parser.php b/civicrm/CRM/Activity/Import/Parser.php deleted file mode 100644 index 6e4d290bf5..0000000000 --- a/civicrm/CRM/Activity/Import/Parser.php +++ /dev/null @@ -1,361 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ -abstract class CRM_Activity_Import_Parser extends CRM_Import_Parser { - - protected $_fileName; - - /** - * Imported file size. - * @var int - */ - protected $_fileSize; - - /** - * Separator being used. - * @var string - */ - protected $_separator; - - /** - * Total number of lines in file. - * @var int - */ - protected $_lineCount; - - /** - * Whether the file has a column header or not. - * - * @var bool - */ - protected $_haveColumnHeader; - - /** - * @param array $fileName - * @param string $separator - * @param $mapper - * @param bool $skipColumnHeader - * @param int $mode - * @param int $onDuplicate - * @param int $statusID - * @param int $totalRowCount - * - * @return mixed - * @throws Exception - */ - public function run( - array $fileName, - $separator, - $mapper, - $skipColumnHeader = FALSE, - $mode = self::MODE_PREVIEW, - $onDuplicate = self::DUPLICATE_SKIP, - $statusID = NULL, - $totalRowCount = NULL - ) { - - $fileName = $fileName['name']; - - $this->init(); - - $this->_haveColumnHeader = $skipColumnHeader; - - $this->_separator = $separator; - - $fd = fopen($fileName, "r"); - if (!$fd) { - return FALSE; - } - - $this->_lineCount = $this->_warningCount = 0; - $this->_invalidRowCount = $this->_validCount = 0; - $this->_totalCount = $this->_conflictCount = 0; - - $this->_errors = []; - $this->_warnings = []; - $this->_conflicts = []; - - $this->_fileSize = number_format(filesize($fileName) / 1024.0, 2); - - if ($mode == self::MODE_MAPFIELD) { - $this->_rows = []; - } - else { - $this->_activeFieldCount = count($this->_activeFields); - } - if ($statusID) { - $this->progressImport($statusID); - $startTimestamp = $currTimestamp = $prevTimestamp = time(); - } - - while (!feof($fd)) { - $this->_lineCount++; - - $values = fgetcsv($fd, 8192, $separator); - if (!$values) { - continue; - } - - self::encloseScrub($values); - - // skip column header if we're not in mapfield mode - if ($mode != self::MODE_MAPFIELD && $skipColumnHeader) { - $skipColumnHeader = FALSE; - continue; - } - - // Trim whitespace around the values. - - $empty = TRUE; - foreach ($values as $k => $v) { - $values[$k] = trim($v, " \t\r\n"); - } - - if (CRM_Utils_System::isNull($values)) { - continue; - } - - $this->_totalCount++; - - if ($mode == self::MODE_MAPFIELD) { - $returnCode = $this->mapField($values); - } - elseif ($mode == self::MODE_PREVIEW) { - $returnCode = $this->preview($values); - } - elseif ($mode == self::MODE_SUMMARY) { - $returnCode = $this->summary($values); - } - elseif ($mode == self::MODE_IMPORT) { - $returnCode = $this->import($onDuplicate, $values); - if ($statusID && (($this->_lineCount % 50) == 0)) { - $prevTimestamp = $this->progressImport($statusID, FALSE, $startTimestamp, $prevTimestamp, $totalRowCount); - } - } - else { - $returnCode = self::ERROR; - } - - // note that a line could be valid but still produce a warning - if ($returnCode & self::VALID) { - $this->_validCount++; - if ($mode == self::MODE_MAPFIELD) { - $this->_rows[] = $values; - $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); - } - } - - if ($returnCode & self::WARNING) { - $this->_warningCount++; - if ($this->_warningCount < $this->_maxWarningCount) { - $this->_warningCount[] = $line; - } - } - - if ($returnCode & self::ERROR) { - $this->_invalidRowCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_errors[] = $values; - } - - if ($returnCode & self::CONFLICT) { - $this->_conflictCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_conflicts[] = $values; - } - - if ($returnCode & self::DUPLICATE) { - $this->_duplicateCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_duplicates[] = $values; - if ($onDuplicate != self::DUPLICATE_SKIP) { - $this->_validCount++; - } - } - - // we give the derived class a way of aborting the process - // note that the return code could be multiple code or'ed together - if ($returnCode & self::STOP) { - break; - } - - // if we are done processing the maxNumber of lines, break - if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { - break; - } - } - - fclose($fd); - - if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { - $customHeaders = $mapper; - - $customfields = CRM_Core_BAO_CustomField::getFields('Activity'); - foreach ($customHeaders as $key => $value) { - if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { - $customHeaders[$key] = $customfields[$id][0]; - } - } - if ($this->_invalidRowCount) { - // removed view url for invlaid contacts - $headers = array_merge( - [ts('Line Number'), ts('Reason')], - $customHeaders - ); - $this->_errorFileName = self::errorFileName(self::ERROR); - self::exportCSV($this->_errorFileName, $headers, $this->_errors); - } - if ($this->_conflictCount) { - $headers = array_merge( - [ts('Line Number'), ts('Reason')], - $customHeaders - ); - $this->_conflictFileName = self::errorFileName(self::CONFLICT); - self::exportCSV($this->_conflictFileName, $headers, $this->_conflicts); - } - if ($this->_duplicateCount) { - $headers = array_merge( - [ts('Line Number'), ts('View Activity History URL')], - $customHeaders - ); - - $this->_duplicateFileName = self::errorFileName(self::DUPLICATE); - self::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); - } - } - return $this->fini(); - } - - /** - * Given a list of the importable field keys that the user has selected set the active fields array to this list. - * - * @param array $fieldKeys - */ - public function setActiveFields($fieldKeys) { - $this->_activeFieldCount = count($fieldKeys); - foreach ($fieldKeys as $key) { - if (empty($this->_fields[$key])) { - $this->_activeFields[] = new CRM_Activity_Import_Field('', ts('- do not import -')); - } - else { - $this->_activeFields[] = clone($this->_fields[$key]); - } - } - } - - /** - * @param string $name - * @param $title - * @param int $type - * @param string $headerPattern - * @param string $dataPattern - */ - public function addField($name, $title, $type = CRM_Utils_Type::T_INT, $headerPattern = '//', $dataPattern = '//') { - if (empty($name)) { - $this->_fields['doNotImport'] = new CRM_Activity_Import_Field($name, $title, $type, $headerPattern, $dataPattern); - } - else { - - $tempField = CRM_Contact_BAO_Contact::importableFields('Individual', NULL); - if (!array_key_exists($name, $tempField)) { - $this->_fields[$name] = new CRM_Activity_Import_Field($name, $title, $type, $headerPattern, $dataPattern); - } - else { - $this->_fields[$name] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, CRM_Utils_Array::value('hasLocationType', $tempField[$name])); - } - } - } - - /** - * Store parser values. - * - * @param CRM_Core_Session $store - * - * @param int $mode - */ - public function set($store, $mode = self::MODE_SUMMARY) { - $store->set('fileSize', $this->_fileSize); - $store->set('lineCount', $this->_lineCount); - $store->set('separator', $this->_separator); - $store->set('fields', $this->getSelectValues()); - - $store->set('headerPatterns', $this->getHeaderPatterns()); - $store->set('dataPatterns', $this->getDataPatterns()); - $store->set('columnCount', $this->_activeFieldCount); - - $store->set('totalRowCount', $this->_totalCount); - $store->set('validRowCount', $this->_validCount); - $store->set('invalidRowCount', $this->_invalidRowCount); - $store->set('conflictRowCount', $this->_conflictCount); - - if ($this->_invalidRowCount) { - $store->set('errorsFileName', $this->_errorFileName); - } - if ($this->_conflictCount) { - $store->set('conflictsFileName', $this->_conflictFileName); - } - if (isset($this->_rows) && !empty($this->_rows)) { - $store->set('dataValues', $this->_rows); - } - - if ($mode == self::MODE_IMPORT) { - $store->set('duplicateRowCount', $this->_duplicateCount); - if ($this->_duplicateCount) { - $store->set('duplicatesFileName', $this->_duplicateFileName); - } - } - } - - /** - * Export data to a CSV file. - * - * @param string $fileName - * @param array $header - * @param array $data - */ - public static function exportCSV($fileName, $header, $data) { - $output = []; - $fd = fopen($fileName, 'w'); - - foreach ($header as $key => $value) { - $header[$key] = "\"$value\""; - } - $config = CRM_Core_Config::singleton(); - $output[] = implode($config->fieldSeparator, $header); - - foreach ($data as $datum) { - foreach ($datum as $key => $value) { - $datum[$key] = "\"$value\""; - } - $output[] = implode($config->fieldSeparator, $datum); - } - fwrite($fd, implode("\n", $output)); - fclose($fd); - } - -} diff --git a/civicrm/CRM/Activity/Import/Parser/Activity.php b/civicrm/CRM/Activity/Import/Parser/Activity.php index a1d3cdfa8b..19f4361ebe 100644 --- a/civicrm/CRM/Activity/Import/Parser/Activity.php +++ b/civicrm/CRM/Activity/Import/Parser/Activity.php @@ -19,7 +19,7 @@ /** * Class to parse activity csv files. */ -class CRM_Activity_Import_Parser_Activity extends CRM_Activity_Import_Parser { +class CRM_Activity_Import_Parser_Activity extends CRM_Import_Parser { protected $_mapperKeys; @@ -32,21 +32,43 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Activity_Import_Parser { */ protected $_newActivity; + protected $_fileName; + + /** + * Imported file size. + * @var int + */ + protected $_fileSize; + + /** + * Separator being used. + * @var string + */ + protected $_separator; + + /** + * Total number of lines in file. + * @var int + */ + protected $_lineCount; + + /** + * Whether the file has a column header or not. + * + * @var bool + */ + protected $_haveColumnHeader; + /** * Class constructor. * * @param array $mapperKeys */ - public function __construct($mapperKeys) { + public function __construct($mapperKeys = []) { parent::__construct(); $this->_mapperKeys = $mapperKeys; } - /** - * Function of undocumented functionality required by the interface. - */ - protected function fini() {} - /** * The initializer code, called before the processing. */ @@ -97,18 +119,6 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Activity_Import_Parser { } } - /** - * Handle the values in mapField mode. - * - * @param array $values - * The array of values belonging to this line. - * - * @return bool - */ - public function mapField(&$values) { - return CRM_Import_Parser::VALID; - } - /** * Handle the values in preview mode. * @@ -436,4 +446,284 @@ class CRM_Activity_Import_Parser_Activity extends CRM_Activity_Import_Parser { return $params; } + /** + * @param array $fileName + * @param string $separator + * @param $mapper + * @param bool $skipColumnHeader + * @param int $mode + * @param int $onDuplicate + * @param int $statusID + * @param int $totalRowCount + * + * @return mixed + * @throws Exception + */ + public function run( + array $fileName, + $separator, + $mapper, + $skipColumnHeader = FALSE, + $mode = self::MODE_PREVIEW, + $onDuplicate = self::DUPLICATE_SKIP, + $statusID = NULL, + $totalRowCount = NULL + ) { + + $fileName = $fileName['name']; + + $this->init(); + + $this->_haveColumnHeader = $skipColumnHeader; + + $this->_separator = $separator; + + $fd = fopen($fileName, "r"); + if (!$fd) { + return FALSE; + } + + $this->_lineCount = 0; + $this->_invalidRowCount = $this->_validCount = 0; + $this->_totalCount = 0; + + $this->_errors = []; + $this->_warnings = []; + + $this->_fileSize = number_format(filesize($fileName) / 1024.0, 2); + + if ($mode == self::MODE_MAPFIELD) { + $this->_rows = []; + } + else { + $this->_activeFieldCount = count($this->_activeFields); + } + if ($statusID) { + $this->progressImport($statusID); + $startTimestamp = $currTimestamp = $prevTimestamp = time(); + } + + while (!feof($fd)) { + $this->_lineCount++; + + $values = fgetcsv($fd, 8192, $separator); + if (!$values) { + continue; + } + + self::encloseScrub($values); + + // skip column header if we're not in mapfield mode + if ($mode != self::MODE_MAPFIELD && $skipColumnHeader) { + $skipColumnHeader = FALSE; + continue; + } + + // Trim whitespace around the values. + + $empty = TRUE; + foreach ($values as $k => $v) { + $values[$k] = trim($v, " \t\r\n"); + } + + if (CRM_Utils_System::isNull($values)) { + continue; + } + + $this->_totalCount++; + + if ($mode == self::MODE_MAPFIELD) { + $returnCode = CRM_Import_Parser::VALID; + } + elseif ($mode == self::MODE_PREVIEW) { + $returnCode = $this->preview($values); + } + elseif ($mode == self::MODE_SUMMARY) { + $returnCode = $this->summary($values); + } + elseif ($mode == self::MODE_IMPORT) { + $returnCode = $this->import($onDuplicate, $values); + if ($statusID && (($this->_lineCount % 50) == 0)) { + $prevTimestamp = $this->progressImport($statusID, FALSE, $startTimestamp, $prevTimestamp, $totalRowCount); + } + } + else { + $returnCode = self::ERROR; + } + + // note that a line could be valid but still produce a warning + if ($returnCode & self::VALID) { + $this->_validCount++; + if ($mode == self::MODE_MAPFIELD) { + $this->_rows[] = $values; + $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); + } + } + + if ($returnCode & self::ERROR) { + $this->_invalidRowCount++; + $recordNumber = $this->_lineCount; + if ($this->_haveColumnHeader) { + $recordNumber--; + } + array_unshift($values, $recordNumber); + $this->_errors[] = $values; + } + + if ($returnCode & self::DUPLICATE) { + $this->_duplicateCount++; + $recordNumber = $this->_lineCount; + if ($this->_haveColumnHeader) { + $recordNumber--; + } + array_unshift($values, $recordNumber); + $this->_duplicates[] = $values; + if ($onDuplicate != self::DUPLICATE_SKIP) { + $this->_validCount++; + } + } + + // if we are done processing the maxNumber of lines, break + if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { + break; + } + } + + fclose($fd); + + if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { + $customHeaders = $mapper; + + $customfields = CRM_Core_BAO_CustomField::getFields('Activity'); + foreach ($customHeaders as $key => $value) { + if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { + $customHeaders[$key] = $customfields[$id][0]; + } + } + if ($this->_invalidRowCount) { + // removed view url for invlaid contacts + $headers = array_merge( + [ts('Line Number'), ts('Reason')], + $customHeaders + ); + $this->_errorFileName = self::errorFileName(self::ERROR); + self::exportCSV($this->_errorFileName, $headers, $this->_errors); + } + + if ($this->_duplicateCount) { + $headers = array_merge( + [ts('Line Number'), ts('View Activity History URL')], + $customHeaders + ); + + $this->_duplicateFileName = self::errorFileName(self::DUPLICATE); + self::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); + } + } + } + + /** + * Given a list of the importable field keys that the user has selected set the active fields array to this list. + * + * @param array $fieldKeys + */ + public function setActiveFields($fieldKeys) { + $this->_activeFieldCount = count($fieldKeys); + foreach ($fieldKeys as $key) { + if (empty($this->_fields[$key])) { + $this->_activeFields[] = new CRM_Activity_Import_Field('', ts('- do not import -')); + } + else { + $this->_activeFields[] = clone($this->_fields[$key]); + } + } + } + + /** + * @param string $name + * @param $title + * @param int $type + * @param string $headerPattern + * @param string $dataPattern + */ + public function addField($name, $title, $type = CRM_Utils_Type::T_INT, $headerPattern = '//', $dataPattern = '//') { + if (empty($name)) { + $this->_fields['doNotImport'] = new CRM_Activity_Import_Field($name, $title, $type, $headerPattern, $dataPattern); + } + else { + + $tempField = CRM_Contact_BAO_Contact::importableFields('Individual', NULL); + if (!array_key_exists($name, $tempField)) { + $this->_fields[$name] = new CRM_Activity_Import_Field($name, $title, $type, $headerPattern, $dataPattern); + } + else { + $this->_fields[$name] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, CRM_Utils_Array::value('hasLocationType', $tempField[$name])); + } + } + } + + /** + * Store parser values. + * + * @param CRM_Core_Session $store + * + * @param int $mode + */ + public function set($store, $mode = self::MODE_SUMMARY) { + $store->set('fileSize', $this->_fileSize); + $store->set('lineCount', $this->_lineCount); + $store->set('separator', $this->_separator); + $store->set('fields', $this->getSelectValues()); + + $store->set('headerPatterns', $this->getHeaderPatterns()); + $store->set('dataPatterns', $this->getDataPatterns()); + $store->set('columnCount', $this->_activeFieldCount); + + $store->set('totalRowCount', $this->_totalCount); + $store->set('validRowCount', $this->_validCount); + $store->set('invalidRowCount', $this->_invalidRowCount); + + if ($this->_invalidRowCount) { + $store->set('errorsFileName', $this->_errorFileName); + } + + if (isset($this->_rows) && !empty($this->_rows)) { + $store->set('dataValues', $this->_rows); + } + + if ($mode == self::MODE_IMPORT) { + $store->set('duplicateRowCount', $this->_duplicateCount); + if ($this->_duplicateCount) { + $store->set('duplicatesFileName', $this->_duplicateFileName); + } + } + } + + /** + * Export data to a CSV file. + * + * @param string $fileName + * @param array $header + * @param array $data + */ + public static function exportCSV($fileName, $header, $data) { + $output = []; + $fd = fopen($fileName, 'w'); + + foreach ($header as $key => $value) { + $header[$key] = "\"$value\""; + } + $config = CRM_Core_Config::singleton(); + $output[] = implode($config->fieldSeparator, $header); + + foreach ($data as $datum) { + foreach ($datum as $key => $value) { + $datum[$key] = "\"$value\""; + } + $output[] = implode($config->fieldSeparator, $datum); + } + fwrite($fd, implode("\n", $output)); + fclose($fd); + } + } diff --git a/civicrm/CRM/Admin/Form/Extensions.php b/civicrm/CRM/Admin/Form/Extensions.php index 83fba1bdcb..936f5a6f72 100644 --- a/civicrm/CRM/Admin/Form/Extensions.php +++ b/civicrm/CRM/Admin/Form/Extensions.php @@ -49,7 +49,10 @@ class CRM_Admin_Form_Extensions extends CRM_Admin_Form { if (!CRM_Utils_Type::validate($this->_key, 'ExtensionKey') && !empty($this->_key)) { throw new CRM_Core_Exception('Extension Key does not match expected standard'); } - $this->label = $remoteExtensionRows[$this->_key]['label'] ?? $this->_key; + + $name = $remoteExtensionRows[$this->_key]['label'] ?? $localExtensionRows[$this->_key]['label'] ?? NULL; + $this->label = $name ? sprintf('%s (<em>%s</em>)', htmlentities($name), htmlentities($this->_key)) + : sprintf('<em>%s</em>', htmlentities($this->_key)); $session = CRM_Core_Session::singleton(); $url = CRM_Utils_System::url('civicrm/admin/extensions', 'reset=1&action=browse'); $session->pushUserContext($url); diff --git a/civicrm/CRM/Api4/Page/AJAX.php b/civicrm/CRM/Api4/Page/AJAX.php index 64edf46f44..4816ea9c97 100644 --- a/civicrm/CRM/Api4/Page/AJAX.php +++ b/civicrm/CRM/Api4/Page/AJAX.php @@ -142,6 +142,12 @@ class CRM_Api4_Page_AJAX extends CRM_Core_Page { } unset($vals['rowCount']); $vals['count'] = $result->count(); + $vals['countFetched'] = $result->countFetched(); + if (in_array('row_count', $params['select'] ?? [])) { + // We can only return countMatched (whose value is independent of LIMIT clauses) if row_count was in the select. + $vals['countMatched'] = $result->count(); + } + return $vals; } diff --git a/civicrm/CRM/Api4/Page/Api4Explorer.php b/civicrm/CRM/Api4/Page/Api4Explorer.php index 249991cfee..b27a565a80 100644 --- a/civicrm/CRM/Api4/Page/Api4Explorer.php +++ b/civicrm/CRM/Api4/Page/Api4Explorer.php @@ -21,7 +21,6 @@ class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page { public function run() { $apiDoc = new ReflectionFunction('civicrm_api4'); - $groupOptions = civicrm_api4('Group', 'getFields', ['loadOptions' => TRUE, 'select' => ['options', 'name'], 'where' => [['name', 'IN', ['visibility', 'group_type']]]]); $extensions = \CRM_Extension_System::singleton()->getMapper(); $vars = [ @@ -30,7 +29,6 @@ class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page { 'schema' => (array) \Civi\Api4\Entity::get()->setChain(['fields' => ['$name', 'getFields']])->execute(), 'docs' => \Civi\Api4\Utils\ReflectionUtils::parseDocBlock($apiDoc->getDocComment()), 'functions' => self::getSqlFunctions(), - 'groupOptions' => array_column((array) $groupOptions, 'options', 'name'), 'authxEnabled' => $extensions->isActiveModule('authx'), 'restUrl' => rtrim(CRM_Utils_System::url('civicrm/ajax/api4/CRMAPI4ENTITY/CRMAPI4ACTION', NULL, TRUE, NULL, FALSE), '/'), ]; diff --git a/civicrm/CRM/Campaign/DAO/Survey.php b/civicrm/CRM/Campaign/DAO/Survey.php index 370172d9d2..594c5ab5ea 100644 --- a/civicrm/CRM/Campaign/DAO/Survey.php +++ b/civicrm/CRM/Campaign/DAO/Survey.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Campaign/Survey.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:5a3eaa2d7c9afb84333c3a4601b63ab8) + * (GenCodeChecksum:4718703121139e11dd903b604879b125) */ /** @@ -300,6 +300,9 @@ class CRM_Campaign_DAO_Survey extends CRM_Core_DAO { 'entity' => 'Survey', 'bao' => 'CRM_Campaign_BAO_Survey', 'localizable' => 1, + 'html' => [ + 'type' => 'Text', + ], 'add' => '3.3', ], 'campaign_id' => [ diff --git a/civicrm/CRM/Campaign/Form/Campaign.php b/civicrm/CRM/Campaign/Form/Campaign.php index e558d4502b..838405521b 100644 --- a/civicrm/CRM/Campaign/Form/Campaign.php +++ b/civicrm/CRM/Campaign/Form/Campaign.php @@ -249,6 +249,8 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { ]; $this->addButtons($buttons); + + $this->addFormRule(['CRM_Campaign_Form_Campaign', 'formRule']); } /** @@ -256,15 +258,18 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { * All local rules are added near the element * * @param $fields - * @param $files - * @param $errors * * @return bool|array - * @see valid_date */ - public static function formRule($fields, $files, $errors) { + public static function formRule($fields) { $errors = []; + // Validate start/end date inputs + $validateDates = \CRM_Utils_Date::validateStartEndDatepickerInputs('start_date', $fields['start_date'], 'end_date', $fields['end_date']); + if ($validateDates !== TRUE) { + $errors[$validateDates['key']] = $validateDates['message']; + } + return empty($errors) ? TRUE : $errors; } diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php index 8b0c90d5ad..b2a0db357b 100644 --- a/civicrm/CRM/Case/BAO/Case.php +++ b/civicrm/CRM/Case/BAO/Case.php @@ -1574,7 +1574,7 @@ HERESQL; $relatedContacts = self::getRelatedContacts($caseId); $groupInfo = []; - $globalContacts = self::getGlobalContacts($groupInfo); + $globalContacts = self::getGlobalContacts($groupInfo, NULL, FALSE, FALSE, 0, 0); //unset values which are not required. foreach ($globalContacts as $k => & $v) { diff --git a/civicrm/CRM/Case/Page/AJAX.php b/civicrm/CRM/Case/Page/AJAX.php index 09ed2df5be..ce0d51b087 100644 --- a/civicrm/CRM/Case/Page/AJAX.php +++ b/civicrm/CRM/Case/Page/AJAX.php @@ -23,7 +23,7 @@ class CRM_Case_Page_AJAX { /** * @throws \CRM_Core_Exception */ - public function processCaseTags() { + public static function processCaseTags() { $caseId = CRM_Utils_Type::escape($_POST['case_id'], 'Positive'); $tags = CRM_Utils_Type::escape($_POST['tag'], 'String'); diff --git a/civicrm/CRM/Contact/BAO/Contact/Permission.php b/civicrm/CRM/Contact/BAO/Contact/Permission.php index 4c39541e5a..1deec754ac 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Permission.php +++ b/civicrm/CRM/Contact/BAO/Contact/Permission.php @@ -18,12 +18,16 @@ class CRM_Contact_BAO_Contact_Permission { /** * @var bool + * + * @deprecated */ - public static $useTempTable = TRUE; + public static $useTempTable = FALSE; /** * Set whether to use a temporary table or not when building ACL Cache * @param bool $useTemporaryTable + * + * @deprecated */ public static function setUseTemporaryTable($useTemporaryTable = TRUE) { self::$useTempTable = $useTemporaryTable; @@ -31,7 +35,10 @@ class CRM_Contact_BAO_Contact_Permission { /** * Get variable for determining if we should use Temporary Table or not + * * @return bool + * + * @deprecated */ public static function getUseTemporaryTable() { return self::$useTempTable; @@ -195,7 +202,7 @@ WHERE contact_a.id = %1 AND $permission * * @param int $userID - contact_id of the ACLed user * @param int|string $type the type of operation (view|edit) - * @param bool $force - Should we force a recompute. + * @param bool $force - Should we force a recompute (only used for unit tests) * */ public static function cache($userID, $type = CRM_Core_Permission::VIEW, $force = FALSE) { @@ -223,10 +230,29 @@ WHERE contact_a.id = %1 AND $permission if (!$force) { // skip if already calculated if (!empty(Civi::$statics[__CLASS__]['processed'][$type][$userID])) { + // \Civi::log()->debug("CRM_Contact_BAO_Contact_Permission::cache already called. Operation: $operation; UserID: $userID"); return; } + } + + // grab a lock so other processes don't compete and do the same query + $lock = Civi::lockManager()->acquire("data.core.aclcontact.{$userID}"); + if (!$lock->isAcquired()) { + // this can cause inconsistent results since we don"t know if the other process + // will fill up the cache before our calling routine needs it. + // The default 3 second timeout should be enough for the other process to finish. + // However this routine does not return the status either, so basically + // its a "lets return and hope for the best" + // \Civi::log()->debug("cache: aclcontact lock not acquired for user: $userID"); + return; + } - // run a query to see if the cache is filled + if (!$force) { + // Check if the cache has already been built for this userID + // The lock guards against simultaneous building of the cache but we don't clear individual userIDs from the cache, + // instead we truncate the whole table before calling cache() which may then be called multiple times. + // The only way we get to this point with the cache already filled is if two processes call cache() almost simultaneously + // and the lock completes before the next process reaches the "get lock" call. $sql = " SELECT count(*) FROM civicrm_acl_contact_cache @@ -236,20 +262,13 @@ AND $operationClause $count = CRM_Core_DAO::singleValueQuery($sql, $queryParams); if ($count > 0) { Civi::$statics[__CLASS__]['processed'][$type][$userID] = 1; + $lock->release(); + // \Civi::log()->debug("CRM_Contact_BAO_Contact_Permission::cache already called via check query. Operation: $operation; UserID: $userID"); return; } } - // grab a lock so other processes don't compete and do the same query - $lock = Civi::lockManager()->acquire("data.core.aclcontact.{$userID}"); - if (!$lock->isAcquired()) { - // this can cause inconsistent results since we don't know if the other process - // will fill up the cache before our calling routine needs it. - // The default 3 second timeout should be enough for the other process to finish. - // However this routine does not return the status either, so basically - // its a "lets return and hope for the best" - return; - } + // \Civi::log()->debug("cache: building for $userID; operation=$operation; force=$force"); $tables = []; $whereTables = []; @@ -270,19 +289,8 @@ AND $operationClause AND ac.user_id IS NULL ";*/ $sql = " $from WHERE $permission"; - $useTempTable = self::getUseTemporaryTable(); - if ($useTempTable) { - $aclContactsTempTable = CRM_Utils_SQL_TempTable::build()->setCategory('aclccache')->setMemory(); - $tempTable = $aclContactsTempTable->getName(); - $aclContactsTempTable->createWithColumns('contact_id int, UNIQUE INDEX UI_contact (contact_id)'); - CRM_Core_DAO::executeQuery("INSERT INTO {$tempTable} (contact_id) SELECT DISTINCT contact_a.id {$sql}"); - CRM_Core_DAO::executeQuery("INSERT IGNORE INTO civicrm_acl_contact_cache (user_id, contact_id, operation) SELECT {$userID}, contact_id, '{$operation}' FROM {$tempTable}"); - $aclContactsTempTable->drop(); - } - else { - $sql = "SELECT DISTINCT $userID as user_id, contact_a.id as contact_id, '{$operation}' as operation" . $sql; - CRM_Core_DAO::executeQuery("INSERT IGNORE INTO civicrm_acl_contact_cache (user_id, contact_id, operation) {$sql}"); - } + $sql = "SELECT $userID as user_id, contact_a.id as contact_id, '{$operation}' as operation" . $sql . ' GROUP BY contact_a.id'; + CRM_Core_DAO::executeQuery("INSERT INTO civicrm_acl_contact_cache (user_id, contact_id, operation) {$sql}"); // Add in a row for the logged in contact. Do not try to combine with the above query or an ugly OR will appear in // the permission clause. @@ -290,7 +298,7 @@ AND $operationClause ($type == CRM_Core_Permission::VIEW && CRM_Core_Permission::check('view my contact'))) { if (!CRM_Core_DAO::singleValueQuery(" SELECT count(*) FROM civicrm_acl_contact_cache WHERE user_id = %1 AND contact_id = %1 AND operation = '{$operation}' LIMIT 1", $queryParams)) { - CRM_Core_DAO::executeQuery("INSERT IGNORE INTO civicrm_acl_contact_cache ( user_id, contact_id, operation ) VALUES(%1, %1, '{$operation}')", $queryParams); + CRM_Core_DAO::executeQuery("INSERT INTO civicrm_acl_contact_cache ( user_id, contact_id, operation ) VALUES(%1, %1, '{$operation}')", $queryParams); } } Civi::$statics[__CLASS__]['processed'][$type][$userID] = 1; diff --git a/civicrm/CRM/Contact/BAO/Contact/Utils.php b/civicrm/CRM/Contact/BAO/Contact/Utils.php index 0e8610d065..fb8d5bacac 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Utils.php +++ b/civicrm/CRM/Contact/BAO/Contact/Utils.php @@ -249,7 +249,7 @@ WHERE id IN ( $idString ) * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function createCurrentEmployerRelationship($contactID, $employerID, $previousEmployerID = NULL, $newContact = FALSE) { + public static function createCurrentEmployerRelationship($contactID, $employerID, $previousEmployerID = NULL, $newContact = FALSE): void { if (!$employerID) { // This function is not called in core with no organization & should not be // Refs CRM-15368,CRM-15547 @@ -258,11 +258,11 @@ WHERE id IN ( $idString ) } if (!is_numeric($employerID)) { $dupeIDs = CRM_Contact_BAO_Contact::getDuplicateContacts(['organization_name' => $employerID], 'Organization', 'Unsupervised', [], FALSE); - $employerID = reset($dupeIDs) ?: Contact::create(FALSE) + $employerID = (int) (reset($dupeIDs) ?: Contact::create(FALSE) ->setValues([ 'contact_type' => 'Organization', 'organization_name' => $employerID, - ])->execute()->first()['id']; + ])->execute()->first()['id']); } $relationshipTypeID = CRM_Contact_BAO_RelationshipType::getEmployeeRelationshipTypeID(); @@ -272,9 +272,28 @@ WHERE id IN ( $idString ) CRM_Core_Error::deprecatedWarning('attempting to create an employer with invalid contact types is deprecated'); return; } - // create employee of relationship - [$duplicate, $relationshipIds] - = self::legacyCreateMultiple($relationshipTypeID, $employerID, $contactID); + $relationshipIds = []; + $duplicate = CRM_Contact_BAO_Relationship::checkDuplicateRelationship( + [ + 'contact_id_a' => $contactID, + 'contact_id_b' => $employerID, + 'relationship_type_id' => $relationshipTypeID, + ], + $contactID, + $employerID + ); + if (!$duplicate) { + $params = [ + 'is_active' => TRUE, + 'contact_check' => [$employerID => TRUE], + 'contact_id_a' => $contactID, + 'contact_id_b' => $employerID, + 'relationship_type_id' => $relationshipTypeID, + ]; + $relationship = CRM_Contact_BAO_Relationship::add($params); + CRM_Contact_BAO_Relationship::addRecent($params, $relationship); + $relationshipIds = [$relationship->id]; + } // In case we change employer, clean previous employer related records. if (!$previousEmployerID && !$newContact) { @@ -318,64 +337,6 @@ WHERE id IN ( $idString ) } } - /** - * Previously shared function in need of cleanup. - * - * Takes an associative array and creates a relationship object. - * - * @deprecated For single creates use the api instead (it's tested). - * For multiple a new variant of this function needs to be written and migrated to as this is a bit - * nasty - * - * @param int $relationshipTypeID - * @param int $organizationID - * @param int $contactID - * - * @return array - * @throws \CRM_Core_Exception - * @throws \CiviCRM_API3_Exception - */ - private static function legacyCreateMultiple(int $relationshipTypeID, int $organizationID, int $contactID): array { - $params = [ - 'is_active' => TRUE, - 'relationship_type_id' => $relationshipTypeID . '_a_b', - 'contact_check' => [$organizationID => TRUE], - ]; - $ids = ['contact' => $contactID]; - - $relationshipIds = []; - // check if the relationship is valid between contacts. - // step 1: check if the relationship is valid if not valid skip and keep the count - // step 2: check the if two contacts already have a relationship if yes skip and keep the count - // step 3: if valid relationship then add the relation and keep the count - - // step 1 - $contactFields = [ - 'contact_id_a' => $contactID, - 'contact_id_b' => $organizationID, - 'relationship_type_id' => $relationshipTypeID, - ]; - - if ( - CRM_Contact_BAO_Relationship::checkDuplicateRelationship( - $contactFields, - $contactID, - // step 2 - $organizationID - ) - ) { - return [1, []]; - } - - $singleInstanceParams = array_merge($params, $contactFields); - $relationship = CRM_Contact_BAO_Relationship::add($singleInstanceParams); - $relationshipIds[] = $relationship->id; - - CRM_Contact_BAO_Relationship::addRecent($params, $relationship); - - return [0, $relationshipIds]; - } - /** * Create related memberships for current employer. * diff --git a/civicrm/CRM/Contact/BAO/GroupContactCache.php b/civicrm/CRM/Contact/BAO/GroupContactCache.php index e32acb047c..21e606fe2e 100644 --- a/civicrm/CRM/Contact/BAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/BAO/GroupContactCache.php @@ -370,7 +370,7 @@ WHERE id IN ( $groupIDs ) * * The groups are refreshable if both the following conditions are met: * 1) the cache date in the database is null or stale - * 2) a mysql lock can be aquired for the group. + * 2) a mysql lock can be acquired for the group. * * @param array $groupIDs * @@ -767,9 +767,13 @@ ORDER BY gc.contact_id, g.children private static function updateCacheFromTempTable(CRM_Utils_SQL_TempTable $groupContactsTempTable, array $groupIDs): void { $tempTable = $groupContactsTempTable->getName(); + // @fixme: GROUP BY is here to guard against having duplicate contacts in the temptable. + // That used to happen for an unknown reason and probably doesn't anymore so we *should* + // be able to remove GROUP BY here safely. CRM_Core_DAO::executeQuery( - "INSERT IGNORE INTO civicrm_group_contact_cache (contact_id, group_id) - SELECT DISTINCT contact_id, group_id FROM $tempTable + "INSERT INTO civicrm_group_contact_cache (contact_id, group_id) + SELECT contact_id, group_id FROM $tempTable + GROUP BY contact_id,group_id "); foreach ($groupIDs as $groupID) { self::updateCacheTime([$groupID], TRUE); diff --git a/civicrm/CRM/Contact/DAO/SavedSearch.php b/civicrm/CRM/Contact/DAO/SavedSearch.php index 4666188af3..1d52252db8 100644 --- a/civicrm/CRM/Contact/DAO/SavedSearch.php +++ b/civicrm/CRM/Contact/DAO/SavedSearch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/SavedSearch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:935938d45a416234d369d2db97a08311) + * (GenCodeChecksum:1b324e028960b1c8fd94ecdc973a6fdc) */ /** @@ -23,6 +23,13 @@ class CRM_Contact_DAO_SavedSearch extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_saved_search'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-search-plus'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * diff --git a/civicrm/CRM/Contact/Form/Contact.php b/civicrm/CRM/Contact/Form/Contact.php index 8beb4d3e11..1fac598d16 100644 --- a/civicrm/CRM/Contact/Form/Contact.php +++ b/civicrm/CRM/Contact/Form/Contact.php @@ -811,7 +811,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { CRM_Contact_Form_Location::buildQuickForm($this); // add attachment - $this->addField('image_URL', ['maxlength' => '255', 'label' => ts('Browse/Upload Image')]); + $this->addField('image_URL', ['maxlength' => '255', 'label' => ts('Browse/Upload Image'), 'accept' => 'image/png, image/jpeg, image/gif']); // add the dedupe button $this->addElement('xbutton', diff --git a/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php b/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php index f9ba9b32ff..1252d35c3e 100644 --- a/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php +++ b/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php @@ -68,8 +68,6 @@ class CRM_Contact_Form_Edit_CommunicationPreferences { //using for display purpose. $form->assign('commPreference', $commPreference); - $form->addField('preferred_mail_format', ['entity' => 'contact', 'label' => ts('Email Format')]); - $form->addField('is_opt_out', ['entity' => 'contact', 'label' => ts('NO BULK EMAILS (User Opt Out)')]); $form->addField('communication_style_id', ['entity' => 'contact', 'type' => 'RadioGroup']); diff --git a/civicrm/CRM/Contact/Form/Edit/Email.php b/civicrm/CRM/Contact/Form/Edit/Email.php index fb073da005..0808b5b055 100644 --- a/civicrm/CRM/Contact/Form/Edit/Email.php +++ b/civicrm/CRM/Contact/Form/Edit/Email.php @@ -71,7 +71,7 @@ class CRM_Contact_Form_Edit_Email { //Bulkmail checkbox $form->assign('multipleBulk', $multipleBulk); $js = ['id' => 'Email_' . $blockId . '_IsBulkmail', 'aria-label' => ts('Bulk Mailing for Email %1?', [1 => $blockId])]; - if (!$blockEdit) { + if (!$blockEdit && !$multipleBulk) { $js['onClick'] = 'singleSelect( this.id );'; } $form->addElement('advcheckbox', "email[$blockId][is_bulkmail]", NULL, '', $js); diff --git a/civicrm/CRM/Contact/Import/Form/DataSource.php b/civicrm/CRM/Contact/Import/Form/DataSource.php index 9336485841..6ba0d22a39 100644 --- a/civicrm/CRM/Contact/Import/Form/DataSource.php +++ b/civicrm/CRM/Contact/Import/Form/DataSource.php @@ -18,15 +18,7 @@ /** * This class delegates to the chosen DataSource to grab the data to be imported. */ -class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { - - private $_dataSource; - - private $_dataSourceIsValid = FALSE; - - private $_dataSourceClassFile; - - private $_dataSourceClass; +class CRM_Contact_Import_Form_DataSource extends CRM_Import_Forms { /** * Get any smarty elements that may not be present in the form. @@ -59,7 +51,7 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { } while ($file = readdir($handler)) { - if ($file != '.' && $file != '..' && + if ($file !== '.' && $file !== '..' && in_array($file, $errorFiles) && !is_writable($config->uploadDir . $file) ) { $results[] = $file; @@ -72,65 +64,19 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { 2 => $config->uploadDir, ])); } - - $this->_dataSourceIsValid = FALSE; - $this->_dataSource = CRM_Utils_Request::retrieveValue( - 'dataSource', - 'String', - NULL, - FALSE, - 'GET' - ); - - $this->_params = $this->controller->exportValues($this->_name); - if (!$this->_dataSource) { - //considering dataSource as base criteria instead of hidden_dataSource. - $this->_dataSource = CRM_Utils_Array::value('dataSource', - $_POST, - CRM_Utils_Array::value('dataSource', - $this->_params - ) - ); - $this->assign('showOnlyDataSourceFormPane', FALSE); - } - else { - $this->assign('showOnlyDataSourceFormPane', TRUE); - } - - $dataSources = $this->_getDataSources(); - if ($this->_dataSource && isset($dataSources[$this->_dataSource])) { - $this->_dataSourceIsValid = TRUE; - $this->assign('showDataSourceFormPane', TRUE); - $dataSourcePath = explode('_', $this->_dataSource); - $templateFile = 'CRM/Contact/Import/Form/' . $dataSourcePath[3] . ".tpl"; - } - elseif ($this->_dataSource) { - $this->invalidConfig('Invalid data source'); - } - $this->assign('dataSourceFormTemplateFile', $templateFile ?? NULL); } /** * Build the form object. + * + * @throws \CRM_Core_Exception */ public function buildQuickForm() { - // If there's a dataSource in the query string, we need to load - // the form from the chosen DataSource class - if ($this->_dataSourceIsValid) { - $this->_dataSourceClassFile = str_replace('_', '/', $this->_dataSource) . ".php"; - require_once $this->_dataSourceClassFile; - $this->_dataSourceClass = new $this->_dataSource(); - $this->_dataSourceClass->buildQuickForm($this); - } - - // Get list of data sources and display them as options - $dataSources = $this->_getDataSources(); + $this->assign('urlPath', 'civicrm/import/datasource'); + $this->assign('urlPathVar', 'snippet=4&user_job_id=' . $this->get('user_job_id')); - $this->assign('urlPath', "civicrm/import"); - $this->assign('urlPathVar', 'snippet=4'); - - $this->add('select', 'dataSource', ts('Data Source'), $dataSources, TRUE, + $this->add('select', 'dataSource', ts('Data Source'), $this->getDataSources(), TRUE, ['onchange' => 'buildDataSourceFormBlock(this.value);'] ); @@ -164,12 +110,11 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { } $this->addRadio('contactType', ts('Contact Type'), $contactTypeOptions, [], NULL, FALSE, $contactTypeAttributes); - $this->addElement('select', 'subType', ts('Subtype')); - $this->addElement('select', 'dedupe', ts('Dedupe Rule')); + $this->addElement('select', 'contactSubType', ts('Subtype')); + $this->addElement('select', 'dedupe_rule_id', ts('Dedupe Rule')); CRM_Core_Form_Date::buildAllowedDateFormats($this); - $config = CRM_Core_Config::singleton(); $geoCode = FALSE; if (CRM_Utils_GeocodeProvider::getUsableClassName()) { $geoCode = TRUE; @@ -182,6 +127,7 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { if (Civi::settings()->get('address_standardization_provider') === 'USPS') { $this->addElement('checkbox', 'disableUSPS', ts('Disable USPS address validation during import?')); } + $this->buildDataSourceFields(); $this->addButtons([ [ @@ -200,18 +146,15 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { /** * Set the default values of various form elements. * - * access public - * * @return array * reference to the array of default values */ public function setDefaultValues() { - $config = CRM_Core_Config::singleton(); $defaults = [ - 'dataSource' => 'CRM_Import_DataSource_CSV', + 'dataSource' => $this->getDefaultDataSource(), 'onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP, 'contactType' => CRM_Import_Parser::CONTACT_INDIVIDUAL, - 'fieldSeparator' => $config->fieldSeparator, + 'fieldSeparator' => CRM_Core_Config::singleton()->fieldSeparator, ]; if ($this->get('loadedMapping')) { @@ -221,154 +164,90 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Core_Form { return $defaults; } - /** - * @return array - * @throws Exception - */ - private function _getDataSources() { - // Hmm... file-system scanners don't really belong in forms... - if (isset(Civi::$statics[__CLASS__]['datasources'])) { - return Civi::$statics[__CLASS__]['datasources']; - } - - // Open the data source dir and scan it for class files - global $civicrm_root; - $dataSourceDir = $civicrm_root . DIRECTORY_SEPARATOR . 'CRM' . DIRECTORY_SEPARATOR . 'Import' . DIRECTORY_SEPARATOR . 'DataSource' . DIRECTORY_SEPARATOR; - $dataSources = []; - if (!is_dir($dataSourceDir)) { - $this->invalidConfig("Import DataSource directory $dataSourceDir does not exist"); - } - if (!$dataSourceHandle = opendir($dataSourceDir)) { - $this->invalidConfig("Unable to access DataSource directory $dataSourceDir"); - } - - while (($dataSourceFile = readdir($dataSourceHandle)) !== FALSE) { - $fileType = filetype($dataSourceDir . $dataSourceFile); - $matches = []; - if (($fileType === 'file' || $fileType === 'link') && - preg_match('/^(.+)\.php$/', $dataSourceFile, $matches) - ) { - $dataSourceClass = "CRM_Import_DataSource_" . $matches[1]; - require_once $dataSourceDir . DIRECTORY_SEPARATOR . $dataSourceFile; - $object = new $dataSourceClass(); - $info = $object->getInfo(); - if ($object->checkPermission()) { - $dataSources[$dataSourceClass] = $info['title']; - } - } - } - closedir($dataSourceHandle); - - Civi::$statics[__CLASS__]['datasources'] = $dataSources; - return $dataSources; - } - /** * Call the DataSource's postProcess method. + * + * @throws \CRM_Core_Exception + * @throws \API_Exception */ public function postProcess() { $this->controller->resetPage('MapField'); + if (!$this->getUserJobID()) { + $this->createUserJob(); + } + else { + $this->flushDataSource(); + $this->updateUserJobMetadata('submitted_values', $this->getSubmittedValues()); + } + // Setup the params array + $this->_params = $this->controller->exportValues($this->_name); - if ($this->_dataSourceIsValid) { - // Setup the params array - $this->_params = $this->controller->exportValues($this->_name); - - $storeParams = [ - 'onDuplicate' => $this->exportValue('onDuplicate'), - 'dedupe' => $this->exportValue('dedupe'), - 'contactType' => $this->exportValue('contactType'), - 'contactSubType' => $this->exportValue('subType'), - 'dateFormats' => $this->exportValue('dateFormats'), - 'savedMapping' => $this->exportValue('savedMapping'), - ]; - - foreach ($storeParams as $storeName => $value) { - $this->set($storeName, $value); - } - $this->set('disableUSPS', !empty($this->_params['disableUSPS'])); - - $this->set('dataSource', $this->_params['dataSource']); - $this->set('skipColumnHeader', CRM_Utils_Array::value('skipColumnHeader', $this->_params)); - - CRM_Core_Session::singleton()->set('dateTypes', $storeParams['dateFormats']); + // @todo - this params are being set here because they were / possibly still + // are in some places being accessed by forms later in the flow + // ie CRM_Contact_Import_Form_MapField, CRM_Contact_Import_Form_Preview + // or CRM_Contact_Import_Form_Summary using `$this->get() + // which was the old way of saving values submitted on this form such that + // the other forms could access them. Now they should use + // `getSubmittedValue` or simply not get them if the only + // reason is to pass to the Parser which can itself + // call 'getSubmittedValue' + // Once the mentioned forms no longer call $this->get() all this 'setting' + // is obsolete. + $storeParams = [ + 'onDuplicate' => $this->getSubmittedValue('onDuplicate'), + 'dedupe' => $this->getSubmittedValue('dedupe_rule_id'), + 'contactType' => $this->getSubmittedValue('contactType'), + 'dateFormats' => $this->getSubmittedValue('dateFormats'), + 'savedMapping' => $this->getSubmittedValue('savedMapping'), + ]; - // Get the PEAR::DB object - $dao = new CRM_Core_DAO(); - $db = $dao->getDatabaseConnection(); + foreach ($storeParams as $storeName => $value) { + $this->set($storeName, $value); + } + $this->set('disableUSPS', $this->getSubmittedValue('disableUSPS')); + $this->set('dataSource', $this->getSubmittedValue('dataSource')); + $this->set('skipColumnHeader', CRM_Utils_Array::value('skipColumnHeader', $this->_params)); + + CRM_Core_Session::singleton()->set('dateTypes', $storeParams['dateFormats']); + + $this->instantiateDataSource(); + + $mapper = []; + + $parser = new CRM_Contact_Import_Parser_Contact($mapper); + $parser->setMaxLinesToProcess(100); + $parser->setUserJobID($this->getUserJobID()); + $parser->run(NULL, + [], + CRM_Import_Parser::MODE_MAPFIELD, + $this->getSubmittedValue('contactType'), + '_id', + '_status', + CRM_Import_Parser::DUPLICATE_SKIP, + NULL, NULL, FALSE, + CRM_Contact_Import_Parser_Contact::DEFAULT_TIMEOUT, + $this->getSubmittedValue('contactSubType'), + $this->getSubmittedValue('dedupe_rule_id') + ); - //hack to prevent multiple tables. - $this->_params['import_table_name'] = $this->get('importTableName'); - if (!$this->_params['import_table_name']) { - $this->_params['import_table_name'] = 'civicrm_import_job_' . md5(uniqid(rand(), TRUE)); - } + // add all the necessary variables to the form + $parser->set($this); - $this->_dataSourceClass->postProcess($this->_params, $db, $this); - - // We should have the data in the DB now, parse it - $importTableName = $this->get('importTableName'); - $fieldNames = $this->_prepareImportTable($db, $importTableName); - $mapper = []; - - $parser = new CRM_Contact_Import_Parser_Contact($mapper); - $parser->setMaxLinesToProcess(100); - $parser->run($importTableName, - $mapper, - CRM_Import_Parser::MODE_MAPFIELD, - $storeParams['contactType'], - $fieldNames['pk'], - $fieldNames['status'], - CRM_Import_Parser::DUPLICATE_SKIP, - NULL, NULL, FALSE, - CRM_Contact_Import_Parser::DEFAULT_TIMEOUT, - $storeParams['contactSubType'], - $storeParams['dedupe'] - ); - - // add all the necessary variables to the form - $parser->set($this); - } - else { - $this->invalidConfig("Invalid DataSource on form post. This shouldn't happen!"); - } } /** - * Add a PK and status column to the import table so we can track our progress. - * Returns the name of the primary key and status columns + * Instantiate the datasource. * - * @param $db - * @param string $importTableName + * This gives the datasource a chance to do any table creation etc. * - * @return array + * @throws \CRM_Core_Exception */ - private function _prepareImportTable($db, $importTableName) { - /* TODO: Add a check for an existing _status field; - * if it exists, create __status instead and return that - */ - - $statusFieldName = '_status'; - $primaryKeyName = '_id'; - - $this->set('primaryKeyName', $primaryKeyName); - $this->set('statusFieldName', $statusFieldName); - - /* Make sure the PK is always last! We rely on this later. - * Should probably stop doing that at some point, but it - * would require moving to associative arrays rather than - * relying on numerical order of the fields. This could in - * turn complicate matters for some DataSources, which - * would also not be good. Decisions, decisions... - */ - - $alterQuery = "ALTER TABLE $importTableName - ADD COLUMN $statusFieldName VARCHAR(32) - DEFAULT 'NEW' NOT NULL, - ADD COLUMN ${statusFieldName}Msg TEXT, - ADD COLUMN $primaryKeyName INT PRIMARY KEY NOT NULL - AUTO_INCREMENT"; - $db->query($alterQuery); - - return ['status' => $statusFieldName, 'pk' => $primaryKeyName]; + private function instantiateDataSource(): void { + $dataSource = $this->getDataSourceObject(); + // Get the PEAR::DB object + $dao = new CRM_Core_DAO(); + $db = $dao->getDatabaseConnection(); + $dataSource->postProcess($this->_params, $db, $this); } /** diff --git a/civicrm/CRM/Contact/Import/Form/MapField.php b/civicrm/CRM/Contact/Import/Form/MapField.php index c85e9bbae8..7a1d38498f 100644 --- a/civicrm/CRM/Contact/Import/Form/MapField.php +++ b/civicrm/CRM/Contact/Import/Form/MapField.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\MappingField; + /** * This class gets the name of the file to upload. */ @@ -30,17 +32,8 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { */ protected $_formattedFieldNames; - /** - * On duplicate. - * - * @var int - */ - public $_onDuplicate; - protected $_dedupeFields; - protected static $customFields; - /** * Attempt to match header labels with our mapper fields. * @@ -75,44 +68,20 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { /** * Set variables up before form is built. + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \Civi\API\Exception\UnauthorizedException */ public function preProcess() { - $dataSource = $this->get('dataSource'); - $skipColumnHeader = $this->get('skipColumnHeader'); - $this->_mapperFields = $this->get('fields'); - $this->_importTableName = $this->get('importTableName'); - $this->_onDuplicate = $this->get('onDuplicate'); - $this->_contactSubType = $this->get('contactSubType'); - $highlightedFields = []; - $highlightedFields[] = 'email'; - $highlightedFields[] = 'external_identifier'; + $this->_mapperFields = $this->getAvailableFields(); + $this->_contactSubType = $this->getSubmittedValue('contactSubType'); //format custom field names, CRM-2676 - switch ($this->get('contactType')) { - case CRM_Import_Parser::CONTACT_INDIVIDUAL: - $contactType = 'Individual'; - $highlightedFields[] = 'first_name'; - $highlightedFields[] = 'last_name'; - break; - - case CRM_Import_Parser::CONTACT_HOUSEHOLD: - $contactType = 'Household'; - $highlightedFields[] = 'household_name'; - break; - - case CRM_Import_Parser::CONTACT_ORGANIZATION: - $contactType = 'Organization'; - $highlightedFields[] = 'organization_name'; - break; - } + $contactType = $this->getContactType(); + $this->_contactType = $contactType; - if ($this->_onDuplicate == CRM_Import_Parser::DUPLICATE_SKIP) { - unset($this->_mapperFields['id']); - } - else { - $highlightedFields[] = 'id'; - } - if ($this->_onDuplicate != CRM_Import_Parser::DUPLICATE_NOCHECK) { + if ($this->isIgnoreDuplicates()) { //Mark Dedupe Rule Fields as required, since it's used in matching contact foreach (CRM_Contact_BAO_ContactType::basicTypes() as $cType) { $ruleParams = [ @@ -133,53 +102,29 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { } // retrieve and highlight required custom fields $formattedFieldNames = $this->formatCustomFieldName($this->_mapperFields); - self::$customFields = CRM_Core_BAO_CustomField::getFields($this->_contactType); - foreach (self::$customFields as $key => $attr) { - if (!empty($attr['is_required'])) { - $highlightedFields[] = "custom_$key"; - } - } - $this->assign('highlightedFields', $highlightedFields); - $this->_formattedFieldNames[$contactType] = $this->_mapperFields = array_merge($this->_mapperFields, $formattedFieldNames); - $columnNames = []; - //get original col headers from csv if present. - if ($dataSource == 'CRM_Import_DataSource_CSV' && $skipColumnHeader) { - $columnNames = $this->get('originalColHeader'); - } - else { - // get the field names from the temp. DB table - $columnsQuery = "SHOW FIELDS FROM $this->_importTableName - WHERE Field NOT LIKE '\_%'"; - $columnsResult = CRM_Core_DAO::executeQuery($columnsQuery); - while ($columnsResult->fetch()) { - $columnNames[] = $columnsResult->Field; - } - } + $this->assign('highlightedFields', $this->getHighlightedFields()); + $this->_formattedFieldNames[$contactType] = $this->_mapperFields = array_merge($this->_mapperFields, $formattedFieldNames); - $showColNames = TRUE; - if ($dataSource === 'CRM_Import_DataSource_CSV' && !$skipColumnHeader) { - $showColNames = FALSE; - } - $this->assign('showColNames', $showColNames); + $columnNames = $this->getColumnHeaders(); - $this->_columnCount = count($columnNames); + $this->_columnCount = $this->getNumberOfColumns(); $this->_columnNames = $columnNames; - $this->assign('columnNames', $columnNames); + $this->assign('columnNames', $this->getColumnHeaders()); //$this->_columnCount = $this->get( 'columnCount' ); $this->assign('columnCount', $this->_columnCount); - $this->_dataValues = $this->get('dataValues'); + $this->_dataValues = array_values($this->getDataRows([], 2)); $this->assign('dataValues', $this->_dataValues); - $this->assign('rowDisplayCount', 2); } /** * Build the form object. * * @throws \CiviCRM_API3_Exception + * @throws \CRM_Core_Exception */ public function buildQuickForm() { - $savedMappingID = (int) $this->get('savedMapping'); + $savedMappingID = (int) $this->getSubmittedValue('savedMapping'); $this->buildSavedMappingFields($savedMappingID); $this->addFormRule(['CRM_Contact_Import_Form_MapField', 'formRule']); @@ -193,12 +138,8 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $this->_location_types = ['Primary' => ts('Primary')] + CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'); $defaultLocationType = CRM_Core_BAO_LocationType::getDefault(); - - // Pass default location to js - if ($defaultLocationType) { - $this->assign('defaultLocationType', $defaultLocationType->id); - $this->assign('defaultLocationTypeLabel', $this->_location_types[$defaultLocationType->id]); - } + $this->assign('defaultLocationType', $defaultLocationType->id); + $this->assign('defaultLocationTypeLabel', $this->_location_types[$defaultLocationType->id]); /* Initialize all field usages to false */ foreach ($mapperKeys as $key) { @@ -243,7 +184,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { foreach ($mapperKeys as $key) { // check if there is a _a_b or _b_a in the key if (strpos($key, '_a_b') || strpos($key, '_b_a')) { - list($id, $first, $second) = explode('_', $key); + [$id, $first, $second] = explode('_', $key); } else { $id = $first = $second = NULL; @@ -286,7 +227,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { //Modified the Relationship fields if the fields are //present in dedupe rule - if ($this->_onDuplicate != CRM_Import_Parser::DUPLICATE_NOCHECK && !empty($this->_dedupeFields[$cType]) && + if ($this->isIgnoreDuplicates() && !empty($this->_dedupeFields[$cType]) && is_array($this->_dedupeFields[$cType]) ) { static $cTypeArray = []; @@ -348,13 +289,13 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $processor->setMappingID($savedMappingID); $processor->setFormName($formName); $processor->setMetadata($this->getContactImportMetadata()); - $processor->setContactTypeByConstant($this->get('contactType')); - $processor->setContactSubType($this->get('contactSubType')); + $processor->setContactTypeByConstant($this->getSubmittedValue('contactType')); + $processor->setContactSubType($this->getSubmittedValue('contactSubType')); for ($i = 0; $i < $this->_columnCount; $i++) { $sel = &$this->addElement('hierselect', "mapper[$i]", ts('Mapper for Field %1', [1 => $i]), NULL); - if ($this->get('savedMapping') && $processor->getFieldName($i)) { + if ($this->getSubmittedValue('savedMapping') && $processor->getFieldName($i)) { $defaults["mapper[$i]"] = $processor->getSavedQuickformDefaultsForColumn($i); $js .= $processor->getQuickFormJSForField($i); } @@ -390,13 +331,6 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $js .= "</script>\n"; $this->assign('initHideBoxes', $js); - //set warning if mismatch in more than - if (isset($mappingName) && - ($this->_columnCount != count($mappingName)) - ) { - CRM_Core_Session::singleton()->setStatus(ts('The data columns in this import file appear to be different from the saved mapping. Please verify that you have selected the correct saved mapping before continuing.')); - } - $this->setDefaults($defaults); $this->addButtons([ @@ -423,7 +357,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { * @param array $fields * Posted values of the form. * - * @return array + * @return array|true * list of errors to be posted back to the form */ public static function formRule($fields) { @@ -444,16 +378,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { if (!empty($fields['saveMapping'])) { $template->assign('isCheked', TRUE); } - - if (!empty($errors)) { - $_flag = 1; - $assignError = new CRM_Core_Page(); - $assignError->assign('mappingDetailsError', $_flag); - return $errors; - } - else { - return TRUE; - } + return empty($errors) ? TRUE : $errors; } /** @@ -519,6 +444,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { * * @return \CRM_Contact_Import_Parser_Contact * @throws \CiviCRM_API3_Exception + * @throws \CRM_Core_Exception */ public function submit($params, $mapperKeys) { $mapper = $mapperKeysMain = $locations = []; @@ -559,7 +485,7 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { } //relationship contact mapper info. - list($id, $first, $second) = CRM_Utils_System::explode('_', $fldName, 3); + [$id, $first, $second] = CRM_Utils_System::explode('_', $fldName, 3); if (($first === 'a' && $second === 'b') || ($first === 'b' && $second === 'a') ) { @@ -591,87 +517,14 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { } $this->set('columnNames', $this->_columnNames); - $this->set('websites', $parserParameters['mapperWebsiteType']); - $this->set('locations', $locations); - $this->set('phones', $parserParameters['mapperPhoneType']); - $this->set('ims', $parserParameters['mapperImProvider']); - $this->set('related', $parserParameters['mapperRelated']); - $this->set('relatedContactType', $parserParameters['relatedContactType']); - $this->set('relatedContactDetails', $parserParameters['relatedContactDetails']); - $this->set('relatedContactLocType', $parserParameters['relatedContactLocType']); - $this->set('relatedContactPhoneType', $parserParameters['relatedContactPhoneType']); - $this->set('relatedContactImProvider', $parserParameters['relatedContactImProvider']); - $this->set('relatedContactWebsiteType', $parserParameters['relatedContactWebsiteType']); - $this->set('mapper', $mapper); // store mapping Id to display it in the preview page $this->set('loadMappingId', CRM_Utils_Array::value('mappingId', $params)); //Updating Mapping Records if (!empty($params['updateMapping'])) { - - $mappingFields = new CRM_Core_DAO_MappingField(); - $mappingFields->mapping_id = $params['mappingId']; - $mappingFields->find(); - - $mappingFieldsId = []; - while ($mappingFields->fetch()) { - if ($mappingFields->id) { - $mappingFieldsId[$mappingFields->column_number] = $mappingFields->id; - } - } - for ($i = 0; $i < $this->_columnCount; $i++) { - $updateMappingFields = new CRM_Core_DAO_MappingField(); - $updateMappingFields->id = $mappingFieldsId[$i] ?? NULL; - $updateMappingFields->mapping_id = $params['mappingId']; - $updateMappingFields->column_number = $i; - - $mapperKeyParts = explode('_', $mapperKeys[$i][0], 3); - $id = $mapperKeyParts[0] ?? NULL; - $first = $mapperKeyParts[1] ?? NULL; - $second = $mapperKeyParts[2] ?? NULL; - if (($first == 'a' && $second == 'b') || ($first == 'b' && $second == 'a')) { - $updateMappingFields->relationship_type_id = $id; - $updateMappingFields->relationship_direction = "{$first}_{$second}"; - $updateMappingFields->name = ucwords(str_replace("_", " ", $mapperKeys[$i][1])); - // get phoneType id and provider id separately - // before updating mappingFields of phone and IM for related contact, CRM-3140 - if (CRM_Utils_Array::value('1', $mapperKeys[$i]) == 'url') { - $updateMappingFields->website_type_id = $mapperKeys[$i][2] ?? NULL; - } - else { - if (CRM_Utils_Array::value('1', $mapperKeys[$i]) == 'phone') { - $updateMappingFields->phone_type_id = $mapperKeys[$i][3] ?? NULL; - } - elseif (CRM_Utils_Array::value('1', $mapperKeys[$i]) == 'im') { - $updateMappingFields->im_provider_id = $mapperKeys[$i][3] ?? NULL; - } - $updateMappingFields->location_type_id = isset($mapperKeys[$i][2]) && is_numeric($mapperKeys[$i][2]) ? $mapperKeys[$i][2] : NULL; - } - } - else { - $updateMappingFields->name = $mapper[$i]; - $updateMappingFields->relationship_type_id = 'NULL'; - $updateMappingFields->relationship_type_direction = 'NULL'; - // to store phoneType id and provider id separately - // before updating mappingFields for phone and IM, CRM-3140 - if (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'url') { - $updateMappingFields->website_type_id = $mapperKeys[$i][1] ?? NULL; - } - else { - if (($mapperKeys[$i][0] ?? NULL) === 'phone' || ($mapperKeys[$i][0] ?? NULL) === 'phone_ext') { - $updateMappingFields->phone_type_id = $mapperKeys[$i][2] ?? NULL; - } - elseif (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'im') { - $updateMappingFields->im_provider_id = $mapperKeys[$i][2] ?? NULL; - } - $locationTypeID = $parserParameters['mapperLocType'][$i]; - // location_type_id is NULL for non-location fields, and for Primary location. - $updateMappingFields->location_type_id = is_numeric($locationTypeID) ? $locationTypeID : 'null'; - } - } - $updateMappingFields->save(); + $this->saveMappingField($params['mappingId'], $i, TRUE); } } @@ -685,25 +538,10 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $saveMapping = civicrm_api3('Mapping', 'create', $mappingParams); - $contactType = $this->get('contactType'); - switch ($contactType) { - case CRM_Import_Parser::CONTACT_INDIVIDUAL: - $cType = 'Individual'; - break; - - case CRM_Import_Parser::CONTACT_HOUSEHOLD: - $cType = 'Household'; - break; - - case CRM_Import_Parser::CONTACT_ORGANIZATION: - $cType = 'Organization'; - } - - $mappingID = NULL; - for ($i = 0; $i < $this->_columnCount; $i++) { - $mappingID = $this->saveMappingField($mapperKeys, $saveMapping, $cType, $i, $mapper, $parserParameters); + foreach (array_keys($this->getColumnHeaders()) as $i) { + $this->saveMappingField($saveMapping['id'], $i); } - $this->set('savedMapping', $mappingID); + $this->set('savedMapping', $saveMapping['id']); } $parser = new CRM_Contact_Import_Parser_Contact($mapperKeysMain, $parserParameters['mapperLocType'], $parserParameters['mapperPhoneType'], @@ -712,84 +550,113 @@ class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField { $parserParameters['relatedContactPhoneType'], $parserParameters['relatedContactImProvider'], $parserParameters['mapperWebsiteType'], $parserParameters['relatedContactWebsiteType'] ); + $parser->setUserJobID($this->getUserJobID()); - $primaryKeyName = $this->get('primaryKeyName'); - $statusFieldName = $this->get('statusFieldName'); - $parser->run($this->_importTableName, + $parser->run(NULL, $mapper, CRM_Import_Parser::MODE_PREVIEW, - $this->get('contactType'), - $primaryKeyName, - $statusFieldName, - $this->_onDuplicate, + NULL, + '_id', + '_status', + (int) $this->getSubmittedValue('onDuplicate'), NULL, NULL, FALSE, - CRM_Contact_Import_Parser::DEFAULT_TIMEOUT, - $this->get('contactSubType'), - $this->get('dedupe') + CRM_Contact_Import_Parser_Contact::DEFAULT_TIMEOUT, + $this->getSubmittedValue('contactSubType'), + $this->getSubmittedValue('dedupe_rule_id') ); return $parser; } /** - * @param $mapperKeys - * @param array $saveMapping - * @param string $cType - * @param int $i - * @param array $mapper - * @param array $parserParameters + * Save the mapping field. + * + * @param int $mappingID + * @param int $columnNumber + * @param bool $isUpdate * - * @return int + * @throws \API_Exception + * @throws \CRM_Core_Exception */ - protected function saveMappingField($mapperKeys, array $saveMapping, string $cType, int $i, array $mapper, array $parserParameters): int { - $saveMappingFields = new CRM_Core_DAO_MappingField(); - $saveMappingFields->mapping_id = $saveMapping['id']; - $saveMappingFields->contact_type = $cType; - $saveMappingFields->column_number = $i; - - $mapperKeyParts = explode('_', $mapperKeys[$i][0], 3); - $id = $mapperKeyParts[0] ?? NULL; - $first = $mapperKeyParts[1] ?? NULL; - $second = $mapperKeyParts[2] ?? NULL; - if (($first == 'a' && $second == 'b') || ($first == 'b' && $second == 'a')) { - $saveMappingFields->name = ucwords(str_replace("_", " ", $mapperKeys[$i][1])); - $saveMappingFields->relationship_type_id = $id; - $saveMappingFields->relationship_direction = "{$first}_{$second}"; - // to get phoneType id and provider id separately - // before saving mappingFields of phone and IM for related contact, CRM-3140 - if (CRM_Utils_Array::value('1', $mapperKeys[$i]) == 'url') { - $saveMappingFields->website_type_id = $mapperKeys[$i][2] ?? NULL; - } - else { - if (CRM_Utils_Array::value('1', $mapperKeys[$i]) == 'phone') { - $saveMappingFields->phone_type_id = $mapperKeys[$i][3] ?? NULL; - } - elseif (CRM_Utils_Array::value('1', $mapperKeys[$i]) == 'im') { - $saveMappingFields->im_provider_id = $mapperKeys[$i][3] ?? NULL; - } - $saveMappingFields->location_type_id = (isset($mapperKeys[$i][2]) && $mapperKeys[$i][2] !== 'Primary') ? $mapperKeys[$i][2] : NULL; - } + protected function saveMappingField(int $mappingID, int $columnNumber, bool $isUpdate = FALSE): void { + $fieldMapping = (array) $this->getSubmittedValue('mapper')[$columnNumber]; + $mappedField = $this->getMappedField($fieldMapping, $mappingID, $columnNumber); + if ($isUpdate) { + MappingField::update(FALSE) + ->setValues($mappedField) + ->addWhere('column_number', '=', $columnNumber) + ->addWhere('mapping_id', '=', $mappingID) + ->execute(); } else { - $saveMappingFields->name = $mapper[$i]; - $locationTypeID = $parserParameters['mapperLocType'][$i]; - // to get phoneType id and provider id separately - // before saving mappingFields of phone and IM, CRM-3140 - if (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'url') { - $saveMappingFields->website_type_id = $mapperKeys[$i][1] ?? NULL; - } - else { - if (($mapperKeys[$i][0] ?? NULL) === 'phone' || ($mapperKeys[$i][0] ?? NULL) === 'phone_ext') { - $saveMappingFields->phone_type_id = $mapperKeys[$i][2] ?? NULL; - } - elseif (CRM_Utils_Array::value('0', $mapperKeys[$i]) == 'im') { - $saveMappingFields->im_provider_id = $mapperKeys[$i][2] ?? NULL; - } - $saveMappingFields->location_type_id = is_numeric($locationTypeID) ? $locationTypeID : NULL; + MappingField::create(FALSE) + ->setValues($mappedField)->execute(); + } + } + + /** + * Get the field mapped to the savable format. + * + * @param array $fieldMapping + * @param int $mappingID + * @param int $columnNumber + * + * @return array + * @throws \CRM_Core_Exception + */ + protected function getMappedField(array $fieldMapping, int $mappingID, int $columnNumber): array { + return (new CRM_Contact_Import_Parser_Contact())->setContactType($this->getContactType())->getMappingFieldFromMapperInput($fieldMapping, $mappingID, $columnNumber); + } + + /** + * Did the user specify duplicates matching should not be attempted. + * + * @return bool + * @throws \CRM_Core_Exception + */ + private function isIgnoreDuplicates(): bool { + return ((int) $this->getSubmittedValue('onDuplicate')) === CRM_Import_Parser::DUPLICATE_NOCHECK; + } + + /** + * Did the user specify duplicates should be skipped and not imported. + * + * @return bool + * + * @throws \CRM_Core_Exception + */ + private function isSkipDuplicates(): bool { + return ((int) $this->getSubmittedValue('onDuplicate')) === CRM_Import_Parser::DUPLICATE_SKIP; + } + + /** + * Get the fields to be highlighted in the UI. + * + * The highlighted fields are those used to match + * to an existing contact. + * + * @return array + * + * @throws \CRM_Core_Exception + */ + private function getHighlightedFields(): array { + $entityFields = [ + 'Individual' => ['first_name', 'last_name'], + 'Organization' => ['organization_name'], + 'Household' => ['household_name'], + ]; + $highlightedFields = $entityFields[$this->getContactType()]; + $highlightedFields[] = 'email'; + $highlightedFields[] = 'external_identifier'; + if (!$this->isSkipDuplicates()) { + $highlightedFields[] = 'id'; + } + $customFields = CRM_Core_BAO_CustomField::getFields($this->getContactType()); + foreach ($customFields as $key => $attr) { + if (!empty($attr['is_required'])) { + $highlightedFields[] = "custom_$key"; } - $saveMappingFields->relationship_type_id = NULL; } - $saveMappingFields->save(); - return $saveMappingFields->mapping_id; + return $highlightedFields; } } diff --git a/civicrm/CRM/Contact/Import/Form/Preview.php b/civicrm/CRM/Contact/Import/Form/Preview.php index 2e8028a01e..931cd856ad 100644 --- a/civicrm/CRM/Contact/Import/Form/Preview.php +++ b/civicrm/CRM/Contact/Import/Form/Preview.php @@ -29,13 +29,11 @@ class CRM_Contact_Import_Form_Preview extends CRM_Import_Form_Preview { /** * Set variables up before form is built. + * + * @throws \API_Exception + * @throws \CRM_Core_Exception */ public function preProcess() { - //get the data from the session - $dataValues = $this->get('dataValues'); - $mapper = $this->get('mapper'); - $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $mismatchCount = $this->get('unMatchCount'); $columnNames = $this->get('columnNames'); $this->_disableUSPS = $this->get('disableUSPS'); @@ -62,57 +60,21 @@ class CRM_Contact_Import_Form_Preview extends CRM_Import_Form_Preview { $this->set('tag', $tag); } - if ($invalidRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Contact_Import_Parser'; - $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - } - - if ($conflictRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Contact_Import_Parser'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - } + $this->assign('downloadErrorRecordsUrl', $this->getDownloadURL(CRM_Import_Parser::ERROR)); + $this->assign('invalidRowCount', $this->getRowCount(CRM_Import_Parser::ERROR)); + $this->assign('validRowCount', $this->getRowCount(CRM_Import_Parser::VALID)); + $this->assign('totalRowCount', $this->getRowCount([])); if ($mismatchCount) { - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contact_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contact_Import_Parser_Contact'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } - $properties = array( - 'mapper', - 'locations', - 'phones', - 'ims', - 'dataValues', - 'columnCount', - 'totalRowCount', - 'validRowCount', - 'invalidRowCount', - 'conflictRowCount', - 'downloadErrorRecordsUrl', - 'downloadConflictRecordsUrl', - 'downloadMismatchRecordsUrl', - 'related', - 'relatedContactDetails', - 'relatedContactLocType', - 'relatedContactPhoneType', - 'relatedContactImProvider', - 'websites', - 'relatedContactWebsiteType', - ); + $this->assign('mapper', $this->getMappedFieldLabels()); - foreach ($properties as $property) { - $this->assign($property, $this->get($property)); - } + $this->assign('dataValues', $this->getDataRows([], 2)); $this->setStatusUrl(); - - $showColNames = TRUE; - if ('CRM_Import_DataSource_CSV' == $this->get('dataSource') && - !$this->get('skipColumnHeader') - ) { - $showColNames = FALSE; - } - $this->assign('showColNames', $showColNames); } /** @@ -208,15 +170,16 @@ class CRM_Contact_Import_Form_Preview extends CRM_Import_Form_Preview { /** * Process the mapped fields and map it into the uploaded file. + * + * @throws \API_Exception */ public function postProcess() { $importJobParams = array( 'doGeocodeAddress' => $this->controller->exportValue('DataSource', 'doGeocodeAddress'), 'invalidRowCount' => $this->get('invalidRowCount'), - 'conflictRowCount' => $this->get('conflictRowCount'), 'onDuplicate' => $this->get('onDuplicate'), - 'dedupe' => $this->get('dedupe'), + 'dedupe' => $this->getSubmittedValue('dedupe_rule_id'), 'newGroupName' => $this->controller->exportValue($this->_name, 'newGroupName'), 'newGroupDesc' => $this->controller->exportValue($this->_name, 'newGroupDesc'), 'newGroupType' => $this->controller->exportValue($this->_name, 'newGroupType'), @@ -227,17 +190,17 @@ class CRM_Contact_Import_Form_Preview extends CRM_Import_Form_Preview { 'tag' => $this->controller->exportValue($this->_name, 'tag'), 'allTags' => $this->get('tag'), 'mapper' => $this->controller->exportValue('MapField', 'mapper'), - 'mapFields' => $this->get('fields'), + 'mapFields' => $this->getAvailableFields(), 'contactType' => $this->get('contactType'), - 'contactSubType' => $this->get('contactSubType'), - 'primaryKeyName' => $this->get('primaryKeyName'), - 'statusFieldName' => $this->get('statusFieldName'), + 'contactSubType' => $this->getSubmittedValue('contactSubType'), + 'primaryKeyName' => '_id', + 'statusFieldName' => '_status', 'statusID' => $this->get('statusID'), 'totalRowCount' => $this->get('totalRowCount'), + 'userJobID' => $this->getUserJobID(), ); - $tableName = $this->get('importTableName'); - $importJob = new CRM_Contact_Import_ImportJob($tableName); + $importJob = new CRM_Contact_Import_ImportJob(); $importJob->setJobParams($importJobParams); // If ACL applies to the current user, update cache before running the import. @@ -280,279 +243,33 @@ class CRM_Contact_Import_Form_Preview extends CRM_Import_Form_Preview { $this->set('errorFile', $errorFile); - $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Contact_Import_Parser'; - $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Contact_Import_Parser'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contact_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contact_Import_Parser_Contact'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } //hack to clean db //if job complete drop table. - $importJob->isComplete(TRUE); + $importJob->isComplete(); } /** - * Process the mapped fields and map it into the uploaded file. + * Get the mapped fields as an array of labels. + * + * e.g + * ['First Name', 'Employee Of - First Name', 'Home - Street Address'] + * + * @return array + * @throws \API_Exception + * @throws \CRM_Core_Exception */ - public function postProcessOld() { - - $doGeocodeAddress = $this->controller->exportValue('DataSource', 'doGeocodeAddress'); - $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); - $onDuplicate = $this->get('onDuplicate'); - $newGroupName = $this->controller->exportValue($this->_name, 'newGroupName'); - $newGroupDesc = $this->controller->exportValue($this->_name, 'newGroupDesc'); - $newGroupType = $this->controller->exportValue($this->_name, 'newGroupType'); - $groups = $this->controller->exportValue($this->_name, 'groups'); - $allGroups = $this->get('groups'); - $newTagName = $this->controller->exportValue($this->_name, 'newTagName'); - $newTagDesc = $this->controller->exportValue($this->_name, 'newTagDesc'); - $tag = $this->controller->exportValue($this->_name, 'tag'); - $allTags = $this->get('tag'); - - $mapper = $this->controller->exportValue('MapField', 'mapper'); - - $mapperKeys = []; - $mapperLocTypes = []; - $mapperPhoneTypes = []; - $mapperRelated = []; - $mapperRelatedContactType = []; - $mapperRelatedContactDetails = []; - $mapperRelatedContactLocType = []; - $mapperRelatedContactPhoneType = []; - - foreach ($mapper as $key => $value) { - $mapperKeys[$key] = $mapper[$key][0]; - if (is_numeric($mapper[$key][1])) { - $mapperLocTypes[$key] = $mapper[$key][1]; - } - else { - $mapperLocTypes[$key] = NULL; - } - - if (CRM_Utils_Array::value($key, $mapperKeys) == 'phone') { - $mapperPhoneTypes[$key] = $mapper[$key][2]; - } - else { - $mapperPhoneTypes[$key] = NULL; - } - - list($id, $first, $second) = explode('_', $mapper[$key][0]); - if (($first == 'a' && $second == 'b') || ($first == 'b' && $second == 'a')) { - $relationType = new CRM_Contact_DAO_RelationshipType(); - $relationType->id = $id; - $relationType->find(TRUE); - $fieldName = "contact_type_$second"; - $mapperRelatedContactType[$key] = $relationType->$fieldName; - $mapperRelated[$key] = $mapper[$key][0]; - $mapperRelatedContactDetails[$key] = $mapper[$key][1]; - $mapperRelatedContactLocType[$key] = $mapper[$key][2]; - $mapperRelatedContactPhoneType[$key] = $mapper[$key][3]; - } - else { - $mapperRelated[$key] = NULL; - $mapperRelatedContactType[$key] = NULL; - $mapperRelatedContactDetails[$key] = NULL; - $mapperRelatedContactLocType[$key] = NULL; - $mapperRelatedContactPhoneType[$key] = NULL; - } - } - - $parser = new CRM_Contact_Import_Parser_Contact($mapperKeys, $mapperLocTypes, - $mapperPhoneTypes, $mapperRelated, $mapperRelatedContactType, - $mapperRelatedContactDetails, $mapperRelatedContactLocType, - $mapperRelatedContactPhoneType - ); - - $mapFields = $this->get('fields'); - - $locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'); - $phoneTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Phone', 'phone_type_id'); - - foreach ($mapper as $key => $value) { - $header = []; - list($id, $first, $second) = explode('_', $mapper[$key][0]); - if (($first == 'a' && $second == 'b') || ($first == 'b' && $second == 'a')) { - $relationType = new CRM_Contact_DAO_RelationshipType(); - $relationType->id = $id; - $relationType->find(TRUE); - - $header[] = $relationType->name_a_b; - $header[] = ucwords(str_replace("_", " ", $mapper[$key][1])); - - if (isset($mapper[$key][2])) { - $header[] = $locationTypes[$mapper[$key][2]]; - } - if (isset($mapper[$key][3])) { - $header[] = $phoneTypes[$mapper[$key][3]]; - } - } - else { - if (isset($mapFields[$mapper[$key][0]])) { - $header[] = $mapFields[$mapper[$key][0]]; - if (isset($mapper[$key][1])) { - $header[] = $locationTypes[$mapper[$key][1]]; - } - if (isset($mapper[$key][2])) { - $header[] = $phoneTypes[$mapper[$key][2]]; - } - } - } - $mapperFields[] = implode(' - ', $header); - } - - $tableName = $this->get('importTableName'); - //print "Running parser on table: $tableName<br/>"; - $parser->run($tableName, $mapperFields, - CRM_Import_Parser::MODE_IMPORT, - $this->get('contactType'), - $this->get('primaryKeyName'), - $this->get('statusFieldName'), - $onDuplicate, - $this->get('statusID'), - $this->get('totalRowCount'), - $doGeocodeAddress, - CRM_Contact_Import_Parser::DEFAULT_TIMEOUT, - $this->get('contactSubType'), - $this->get('dedupe') - ); - - // add the new contacts to selected groups - $contactIds = $parser->getImportedContacts(); - - // add the new related contacts to selected groups - $relatedContactIds = &$parser->getRelatedImportedContacts(); - - $this->set('relatedCount', count($relatedContactIds)); - $newGroupId = NULL; - - //changed below if-statement "if ($newGroup) {" to "if ($newGroupName) {" - if ($newGroupName) { - /* Create a new group */ - - $gParams = array( - 'name' => $newGroupName, - 'title' => $newGroupName, - 'description' => $newGroupDesc, - 'group_type' => $newGroupType, - 'is_active' => TRUE, - ); - $group = CRM_Contact_BAO_Group::create($gParams); - $groups[] = $newGroupId = $group->id; - } - - if (is_array($groups)) { - $groupAdditions = []; - foreach ($groups as $groupId) { - $addCount = CRM_Contact_BAO_GroupContact::addContactsToGroup($contactIds, $groupId); - if (!empty($relatedContactIds)) { - $addRelCount = CRM_Contact_BAO_GroupContact::addContactsToGroup($relatedContactIds, $groupId); - } - $totalCount = $addCount[1] + $addRelCount[1]; - if ($groupId == $newGroupId) { - $name = $newGroupName; - $new = TRUE; - } - else { - $name = $allGroups[$groupId]; - $new = FALSE; - } - $groupAdditions[] = array( - 'url' => CRM_Utils_System::url('civicrm/group/search', - 'reset=1&force=1&context=smog&gid=' . $groupId - ), - 'name' => $name, - 'added' => $totalCount, - 'notAdded' => $addCount[2] + $addRelCount[2], - 'new' => $new, - ); - } - $this->set('groupAdditions', $groupAdditions); - } - - $newTagId = NULL; - if ($newTagName) { - /* Create a new Tag */ - - $tagParams = array( - 'name' => $newTagName, - 'title' => $newTagName, - 'description' => $newTagDesc, - 'is_active' => TRUE, - ); - $addedTag = CRM_Core_BAO_Tag::add($tagParams); - $tag[$addedTag->id] = 1; - } - //add Tag to Import - - if (is_array($tag)) { - - $tagAdditions = []; - foreach ($tag as $tagId => $val) { - $addTagCount = CRM_Core_BAO_EntityTag::addContactsToTag($contactIds, $tagId); - if (!empty($relatedContactIds)) { - $addRelTagCount = CRM_Core_BAO_EntityTag::addContactsToTag($relatedContactIds, $tagId); - } - $totalTagCount = $addTagCount[1] + $addRelTagCount[1]; - if ($tagId == $addedTag->id) { - $tagName = $newTagName; - $new = TRUE; - } - else { - $tagName = $allTags[$tagId]; - $new = FALSE; - } - $tagAdditions[] = array( - 'url' => CRM_Utils_System::url('civicrm/contact/search', - 'reset=1&force=1&context=smog&id=' . $tagId - ), - 'name' => $tagName, - 'added' => $totalTagCount, - 'notAdded' => $addTagCount[2] + $addRelTagCount[2], - 'new' => $new, - ); - } - $this->set('tagAdditions', $tagAdditions); - } - - // add all the necessary variables to the form - $parser->set($this, CRM_Import_Parser::MODE_IMPORT); - - // check if there is any error occurred - - $errorStack = CRM_Core_Error::singleton(); - $errors = $errorStack->getErrors(); - $errorMessage = []; - - if (is_array($errors)) { - foreach ($errors as $key => $value) { - $errorMessage[] = $value['message']; - } - - // there is no fileName since this is a sql import - // so fudge it - $config = CRM_Core_Config::singleton(); - $errorFile = $config->uploadDir . "sqlImport.error.log"; - if ($fd = fopen($errorFile, 'w')) { - fwrite($fd, implode('\n', $errorMessage)); - } - fclose($fd); - - $this->set('errorFile', $errorFile); - - $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Contact_Import_Parser'; - $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlparams)); - - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Contact_Import_Parser'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contact_Import_Parser'; - $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); + protected function getMappedFieldLabels(): array { + $mapper = []; + $parser = new CRM_Contact_Import_Parser_Contact(); + $parser->setUserJobID($this->getUserJobID()); + foreach ($this->getSubmittedValue('mapper') as $columnNumber => $mappedField) { + $mapper[$columnNumber] = $parser->getMappedFieldLabel($parser->getMappingFieldFromMapperInput($mappedField, 0, $columnNumber)); } + return $mapper; } } diff --git a/civicrm/CRM/Contact/Import/Form/Summary.php b/civicrm/CRM/Contact/Import/Form/Summary.php index dc94f8dcd8..6ca002b3c7 100644 --- a/civicrm/CRM/Contact/Import/Form/Summary.php +++ b/civicrm/CRM/Contact/Import/Form/Summary.php @@ -27,22 +27,21 @@ class CRM_Contact_Import_Form_Summary extends CRM_Import_Form_Summary { // set the error message path to display $this->assign('errorFile', $this->get('errorFile')); - $totalRowCount = $this->get('totalRowCount'); + $totalRowCount = $this->getRowCount(); $relatedCount = $this->get('relatedCount'); $totalRowCount += $relatedCount; $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $duplicateRowCount = $this->get('duplicateRowCount'); $onDuplicate = $this->get('onDuplicate'); $mismatchCount = $this->get('unMatchCount'); $unparsedAddressCount = $this->get('unparsedAddressCount'); if ($duplicateRowCount > 0) { - $urlParams = 'type=' . CRM_Import_Parser::DUPLICATE . '&parser=CRM_Contact_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::DUPLICATE . '&parser=CRM_Contact_Import_Parser_Contact'; $this->set('downloadDuplicateRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } elseif ($mismatchCount) { - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contact_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contact_Import_Parser_Contact'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } else { @@ -50,7 +49,7 @@ class CRM_Contact_Import_Form_Summary extends CRM_Import_Form_Summary { $this->set('duplicateRowCount', $duplicateRowCount); } if ($unparsedAddressCount) { - $urlParams = 'type=' . CRM_Import_Parser::UNPARSED_ADDRESS_WARNING . '&parser=CRM_Contact_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::UNPARSED_ADDRESS_WARNING . '&parser=CRM_Contact_Import_Parser_Contact'; $this->assign('downloadAddressRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); $unparsedStreetAddressString = ts('Records imported successfully but unable to parse some of the street addresses'); $this->assign('unparsedStreetAddressString', $unparsedStreetAddressString); @@ -75,20 +74,12 @@ class CRM_Contact_Import_Form_Summary extends CRM_Import_Form_Summary { } //now we also create relative contact in update and fill mode $this->set('validRowCount', $totalRowCount - $invalidRowCount - - $conflictRowCount - $duplicateRowCount - $mismatchCount + $duplicateRowCount - $mismatchCount ); $this->assign('dupeActionString', $dupeActionString); $properties = [ - 'totalRowCount', - 'validRowCount', - 'invalidRowCount', - 'conflictRowCount', - 'downloadConflictRecordsUrl', - 'downloadErrorRecordsUrl', - 'duplicateRowCount', - 'downloadDuplicateRecordsUrl', 'downloadMismatchRecordsUrl', 'groupAdditions', 'tagAdditions', @@ -98,7 +89,12 @@ class CRM_Contact_Import_Form_Summary extends CRM_Import_Form_Summary { foreach ($properties as $property) { $this->assign($property, $this->get($property)); } - + $this->assign('totalRowCount', $this->getRowCount()); + $this->assign('validRowCount', $this->getRowCount(CRM_Import_Parser::VALID)); + $this->assign('invalidRowCount', $this->getRowCount(CRM_Import_Parser::ERROR)); + $this->assign('duplicateRowCount', $this->getRowCount(CRM_Import_Parser::DUPLICATE)); + $this->assign('downloadDuplicateRecordsUrl', $this->getDownloadURL(CRM_Import_Parser::DUPLICATE)); + $this->assign('downloadErrorRecordsUrl', $this->getDownloadURL(CRM_Import_Parser::ERROR)); $session = CRM_Core_Session::singleton(); $session->pushUserContext(CRM_Utils_System::url('civicrm/import/contact', 'reset=1')); } @@ -107,15 +103,6 @@ class CRM_Contact_Import_Form_Summary extends CRM_Import_Form_Summary { * Clean up the import table we used. */ public function postProcess() { - $dao = new CRM_Core_DAO(); - $db = $dao->getDatabaseConnection(); - - $importTableName = $this->get('importTableName'); - // do a basic sanity check here - if (strpos($importTableName, 'civicrm_import_job_') === 0) { - $query = "DROP TABLE IF EXISTS $importTableName"; - $db->query($query); - } } } diff --git a/civicrm/CRM/Contact/Import/ImportJob.php b/civicrm/CRM/Contact/Import/ImportJob.php index 7e0bd84c6a..f9f3c49cc9 100644 --- a/civicrm/CRM/Contact/Import/ImportJob.php +++ b/civicrm/CRM/Contact/Import/ImportJob.php @@ -26,7 +26,6 @@ class CRM_Contact_Import_ImportJob { protected $_doGeocodeAddress; protected $_invalidRowCount; - protected $_conflictRowCount; protected $_onDuplicate; protected $_dedupe; protected $_newGroupName; @@ -43,38 +42,12 @@ class CRM_Contact_Import_ImportJob { protected $_mapperKeys = []; protected $_mapFields; - protected $_parser; - /** - * @param string|null $tableName - * @param string|null $createSql - * @param bool $createTable - * - * @throws \CRM_Core_Exception + * @var CRM_Contact_Import_Parser_Contact */ - public function __construct($tableName = NULL, $createSql = NULL, $createTable = FALSE) { - $dao = new CRM_Core_DAO(); - $db = $dao->getDatabaseConnection(); - - if ($createTable) { - if (!$createSql) { - throw new CRM_Core_Exception(ts('Either an existing table name or an SQL query to build one are required')); - } - if ($tableName) { - // Drop previous table if passed in and create new one. - $db->query("DROP TABLE IF EXISTS $tableName"); - } - $table = CRM_Utils_SQL_TempTable::build()->setDurable(); - $tableName = $table->getName(); - $table->createWithQuery($createSql); - } - - if (!$tableName) { - throw new CRM_Core_Exception(ts('Import Table is required.')); - } + protected $_parser; - $this->_tableName = $tableName; - } + protected $_userJobID; /** * @return null|string @@ -84,26 +57,12 @@ class CRM_Contact_Import_ImportJob { } /** - * @param bool $dropIfComplete + * Has the job completed. * * @return bool - * @throws Exception */ - public function isComplete($dropIfComplete = TRUE) { - if (!$this->_statusFieldName) { - throw new CRM_Core_Exception("Could not get name of the import status field"); - } - $query = "SELECT * FROM $this->_tableName - WHERE $this->_statusFieldName = 'NEW' LIMIT 1"; - $result = CRM_Core_DAO::executeQuery($query); - if ($result->fetch()) { - return FALSE; - } - if ($dropIfComplete) { - $query = "DROP TABLE $this->_tableName"; - CRM_Core_DAO::executeQuery($query); - } - return TRUE; + public function isComplete(): bool { + return $this->_parser->isComplete(); } /** @@ -218,8 +177,8 @@ class CRM_Contact_Import_ImportJob { $parserParameters['mapperWebsiteType'], $parserParameters['relatedContactWebsiteType'] ); - - $this->_parser->run($this->_tableName, $mapperFields, + $this->_parser->setUserJobID($this->_userJobID); + $this->_parser->run(NULL, $mapperFields, CRM_Import_Parser::MODE_IMPORT, $this->_contactType, $this->_primaryKeyName, @@ -228,7 +187,7 @@ class CRM_Contact_Import_ImportJob { $this->_statusID, $this->_totalRowCount, $this->_doGeocodeAddress, - CRM_Contact_Import_Parser::DEFAULT_TIMEOUT, + CRM_Contact_Import_Parser_Contact::DEFAULT_TIMEOUT, $this->_contactSubType, $this->_dedupe ); diff --git a/civicrm/CRM/Contact/Import/MetadataTrait.php b/civicrm/CRM/Contact/Import/MetadataTrait.php index ba55c45f38..fc8d570484 100644 --- a/civicrm/CRM/Contact/Import/MetadataTrait.php +++ b/civicrm/CRM/Contact/Import/MetadataTrait.php @@ -103,20 +103,4 @@ trait CRM_Contact_Import_MetadataTrait { return CRM_Utils_Array::collect('title', $this->getContactImportMetadata()); } - /** - * Get configured contact type. - */ - protected function getContactType() { - return $this->_contactType ?? 'Individual'; - } - - /** - * Get configured contact sub type. - * - * @return string - */ - protected function getContactSubType() { - return $this->_contactSubType ?? NULL; - } - } diff --git a/civicrm/CRM/Contact/Import/Parser.php b/civicrm/CRM/Contact/Import/Parser.php deleted file mode 100644 index 59068aa950..0000000000 --- a/civicrm/CRM/Contact/Import/Parser.php +++ /dev/null @@ -1,1092 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ -abstract class CRM_Contact_Import_Parser extends CRM_Import_Parser { - - protected $_tableName; - - /** - * Total number of lines in file - * - * @var int - */ - protected $_rowCount; - - /** - * Running total number of un-matched Contacts. - * - * @var int - */ - protected $_unMatchCount; - - /** - * Array of unmatched lines. - * - * @var array - */ - protected $_unMatch; - - /** - * Total number of contacts with unparsed addresses - * @var int - */ - protected $_unparsedAddressCount; - - /** - * Filename of mismatch data - * - * @var string - */ - protected $_misMatchFilemName; - - protected $_primaryKeyName; - protected $_statusFieldName; - - protected $fieldMetadata = []; - /** - * On duplicate - * - * @var int - */ - public $_onDuplicate; - - /** - * Dedupe rule group id to use if set - * - * @var int - */ - public $_dedupeRuleGroupID = NULL; - - /** - * Run import. - * - * @param string $tableName - * @param array $mapper - * @param int $mode - * @param int $contactType - * @param string $primaryKeyName - * @param string $statusFieldName - * @param int $onDuplicate - * @param int $statusID - * @param int $totalRowCount - * @param bool $doGeocodeAddress - * @param int $timeout - * @param string $contactSubType - * @param int $dedupeRuleGroupID - * - * @return mixed - */ - public function run( - $tableName, - $mapper = [], - $mode = self::MODE_PREVIEW, - $contactType = self::CONTACT_INDIVIDUAL, - $primaryKeyName = '_id', - $statusFieldName = '_status', - $onDuplicate = self::DUPLICATE_SKIP, - $statusID = NULL, - $totalRowCount = NULL, - $doGeocodeAddress = FALSE, - $timeout = CRM_Contact_Import_Parser::DEFAULT_TIMEOUT, - $contactSubType = NULL, - $dedupeRuleGroupID = NULL - ) { - - // TODO: Make the timeout actually work - $this->_onDuplicate = $onDuplicate; - $this->_dedupeRuleGroupID = $dedupeRuleGroupID; - - switch ($contactType) { - case CRM_Import_Parser::CONTACT_INDIVIDUAL: - $this->_contactType = 'Individual'; - break; - - case CRM_Import_Parser::CONTACT_HOUSEHOLD: - $this->_contactType = 'Household'; - break; - - case CRM_Import_Parser::CONTACT_ORGANIZATION: - $this->_contactType = 'Organization'; - } - - $this->_contactSubType = $contactSubType; - - $this->init(); - - $this->_rowCount = $this->_warningCount = 0; - $this->_invalidRowCount = $this->_validCount = 0; - $this->_totalCount = $this->_conflictCount = 0; - - $this->_errors = []; - $this->_warnings = []; - $this->_conflicts = []; - $this->_unparsedAddresses = []; - - $this->_tableName = $tableName; - $this->_primaryKeyName = $primaryKeyName; - $this->_statusFieldName = $statusFieldName; - - if ($mode == self::MODE_MAPFIELD) { - $this->_rows = []; - } - else { - $this->_activeFieldCount = count($this->_activeFields); - } - - if ($mode == self::MODE_IMPORT) { - //get the key of email field - foreach ($mapper as $key => $value) { - if (strtolower($value) == 'email') { - $emailKey = $key; - break; - } - } - } - - if ($statusID) { - $this->progressImport($statusID); - $startTimestamp = $currTimestamp = $prevTimestamp = time(); - } - // get the contents of the temp. import table - $query = "SELECT * FROM $tableName"; - if ($mode == self::MODE_IMPORT) { - $query .= " WHERE $statusFieldName = 'NEW'"; - } - - $result = CRM_Core_DAO::executeQuery($query); - - while ($result->fetch()) { - $values = array_values($result->toArray()); - $this->_rowCount++; - - /* trim whitespace around the values */ - foreach ($values as $k => $v) { - $values[$k] = trim($v, " \t\r\n"); - } - if (CRM_Utils_System::isNull($values)) { - continue; - } - - $this->_totalCount++; - - if ($mode == self::MODE_MAPFIELD) { - $returnCode = $this->mapField($values); - } - elseif ($mode == self::MODE_PREVIEW) { - $returnCode = $this->preview($values); - } - elseif ($mode == self::MODE_SUMMARY) { - $returnCode = $this->summary($values); - } - elseif ($mode == self::MODE_IMPORT) { - //print "Running parser in import mode<br/>\n"; - $returnCode = $this->import($onDuplicate, $values, $doGeocodeAddress); - if ($statusID && (($this->_rowCount % 50) == 0)) { - $prevTimestamp = $this->progressImport($statusID, FALSE, $startTimestamp, $prevTimestamp, $totalRowCount); - } - } - else { - $returnCode = self::ERROR; - } - - // note that a line could be valid but still produce a warning - if ($returnCode & self::VALID) { - $this->_validCount++; - if ($mode == self::MODE_MAPFIELD) { - $this->_rows[] = $values; - $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); - } - } - - if ($returnCode & self::WARNING) { - $this->_warningCount++; - if ($this->_warningCount < $this->_maxWarningCount) { - $this->_warningCount[] = $line; - } - } - - if ($returnCode & self::ERROR) { - $this->_invalidRowCount++; - array_unshift($values, $this->_rowCount); - $this->_errors[] = $values; - } - - if ($returnCode & self::CONFLICT) { - $this->_conflictCount++; - array_unshift($values, $this->_rowCount); - $this->_conflicts[] = $values; - } - - if ($returnCode & self::NO_MATCH) { - $this->_unMatchCount++; - array_unshift($values, $this->_rowCount); - $this->_unMatch[] = $values; - } - - if ($returnCode & self::DUPLICATE) { - $this->_duplicateCount++; - array_unshift($values, $this->_rowCount); - $this->_duplicates[] = $values; - if ($onDuplicate != self::DUPLICATE_SKIP) { - $this->_validCount++; - } - } - - if ($returnCode & self::UNPARSED_ADDRESS_WARNING) { - $this->_unparsedAddressCount++; - array_unshift($values, $this->_rowCount); - $this->_unparsedAddresses[] = $values; - } - // we give the derived class a way of aborting the process - // note that the return code could be multiple code or'ed together - if ($returnCode & self::STOP) { - break; - } - - // if we are done processing the maxNumber of lines, break - if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { - break; - } - - // see if we've hit our timeout yet - /* if ( $the_thing_with_the_stuff ) { - do_something( ); - } */ - } - - if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { - $customHeaders = $mapper; - - $customfields = CRM_Core_BAO_CustomField::getFields($this->_contactType); - foreach ($customHeaders as $key => $value) { - if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { - $customHeaders[$key] = $customfields[$id][0]; - } - } - - if ($this->_invalidRowCount) { - // removed view url for invlaid contacts - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_errorFileName = self::errorFileName(self::ERROR); - self::exportCSV($this->_errorFileName, $headers, $this->_errors); - } - if ($this->_conflictCount) { - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_conflictFileName = self::errorFileName(self::CONFLICT); - self::exportCSV($this->_conflictFileName, $headers, $this->_conflicts); - } - if ($this->_duplicateCount) { - $headers = array_merge([ - ts('Line Number'), - ts('View Contact URL'), - ], $customHeaders); - - $this->_duplicateFileName = self::errorFileName(self::DUPLICATE); - self::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); - } - if ($this->_unMatchCount) { - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - - $this->_misMatchFilemName = self::errorFileName(self::NO_MATCH); - self::exportCSV($this->_misMatchFilemName, $headers, $this->_unMatch); - } - if ($this->_unparsedAddressCount) { - $headers = array_merge([ - ts('Line Number'), - ts('Contact Edit URL'), - ], $customHeaders); - $this->_errorFileName = self::errorFileName(self::UNPARSED_ADDRESS_WARNING); - self::exportCSV($this->_errorFileName, $headers, $this->_unparsedAddresses); - } - } - //echo "$this->_totalCount,$this->_invalidRowCount,$this->_conflictCount,$this->_duplicateCount"; - return $this->fini(); - } - - /** - * Given a list of the importable field keys that the user has selected. - * set the active fields array to this list - * - * @param array $fieldKeys - * Mapped array of values. - */ - public function setActiveFields($fieldKeys) { - $this->_activeFieldCount = count($fieldKeys); - foreach ($fieldKeys as $key) { - if (empty($this->_fields[$key])) { - $this->_activeFields[] = new CRM_Contact_Import_Field('', ts('- do not import -')); - } - else { - $this->_activeFields[] = clone($this->_fields[$key]); - } - } - } - - /** - * @param $elements - */ - public function setActiveFieldLocationTypes($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_hasLocationType = $elements[$i]; - } - } - - /** - * @param $elements - */ - - /** - * @param $elements - */ - public function setActiveFieldPhoneTypes($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_phoneType = $elements[$i]; - } - } - - /** - * @param $elements - */ - public function setActiveFieldWebsiteTypes($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_websiteType = $elements[$i]; - } - } - - /** - * Set IM Service Provider type fields. - * - * @param array $elements - * IM service provider type ids. - */ - public function setActiveFieldImProviders($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_imProvider = $elements[$i]; - } - } - - /** - * @param $elements - */ - public function setActiveFieldRelated($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_related = $elements[$i]; - } - } - - /** - * @param $elements - */ - public function setActiveFieldRelatedContactType($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_relatedContactType = $elements[$i]; - } - } - - /** - * @param $elements - */ - public function setActiveFieldRelatedContactDetails($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_relatedContactDetails = $elements[$i]; - } - } - - /** - * @param $elements - */ - public function setActiveFieldRelatedContactLocType($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_relatedContactLocType = $elements[$i]; - } - } - - /** - * Set active field for related contact's phone type. - * - * @param array $elements - */ - public function setActiveFieldRelatedContactPhoneType($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_relatedContactPhoneType = $elements[$i]; - } - } - - /** - * @param $elements - */ - public function setActiveFieldRelatedContactWebsiteType($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_relatedContactWebsiteType = $elements[$i]; - } - } - - /** - * Set IM Service Provider type fields for related contacts. - * - * @param array $elements - * IM service provider type ids of related contact. - */ - public function setActiveFieldRelatedContactImProvider($elements) { - for ($i = 0; $i < count($elements); $i++) { - $this->_activeFields[$i]->_relatedContactImProvider = $elements[$i]; - } - } - - /** - * Format the field values for input to the api. - * - * @return array - * (reference ) associative array of name/value pairs - */ - public function &getActiveFieldParams() { - $params = []; - - for ($i = 0; $i < $this->_activeFieldCount; $i++) { - if ($this->_activeFields[$i]->_name == 'do_not_import') { - continue; - } - - if (isset($this->_activeFields[$i]->_value)) { - if (isset($this->_activeFields[$i]->_hasLocationType)) { - if (!isset($params[$this->_activeFields[$i]->_name])) { - $params[$this->_activeFields[$i]->_name] = []; - } - - $value = [ - $this->_activeFields[$i]->_name => $this->_activeFields[$i]->_value, - 'location_type_id' => $this->_activeFields[$i]->_hasLocationType, - ]; - - if (isset($this->_activeFields[$i]->_phoneType)) { - $value['phone_type_id'] = $this->_activeFields[$i]->_phoneType; - } - - // get IM service Provider type id - if (isset($this->_activeFields[$i]->_imProvider)) { - $value['provider_id'] = $this->_activeFields[$i]->_imProvider; - } - - $params[$this->_activeFields[$i]->_name][] = $value; - } - elseif (isset($this->_activeFields[$i]->_websiteType)) { - $value = [ - $this->_activeFields[$i]->_name => $this->_activeFields[$i]->_value, - 'website_type_id' => $this->_activeFields[$i]->_websiteType, - ]; - - $params[$this->_activeFields[$i]->_name][] = $value; - } - - if (!isset($params[$this->_activeFields[$i]->_name])) { - if (!isset($this->_activeFields[$i]->_related)) { - $params[$this->_activeFields[$i]->_name] = $this->_activeFields[$i]->_value; - } - } - - //minor fix for CRM-4062 - if (isset($this->_activeFields[$i]->_related)) { - if (!isset($params[$this->_activeFields[$i]->_related])) { - $params[$this->_activeFields[$i]->_related] = []; - } - - if (!isset($params[$this->_activeFields[$i]->_related]['contact_type']) && !empty($this->_activeFields[$i]->_relatedContactType)) { - $params[$this->_activeFields[$i]->_related]['contact_type'] = $this->_activeFields[$i]->_relatedContactType; - } - - if (isset($this->_activeFields[$i]->_relatedContactLocType) && !empty($this->_activeFields[$i]->_value)) { - if (!empty($params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails]) && - !is_array($params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails]) - ) { - $params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails] = []; - } - $value = [ - $this->_activeFields[$i]->_relatedContactDetails => $this->_activeFields[$i]->_value, - 'location_type_id' => $this->_activeFields[$i]->_relatedContactLocType, - ]; - - if (isset($this->_activeFields[$i]->_relatedContactPhoneType)) { - $value['phone_type_id'] = $this->_activeFields[$i]->_relatedContactPhoneType; - } - - // get IM service Provider type id for related contact - if (isset($this->_activeFields[$i]->_relatedContactImProvider)) { - $value['provider_id'] = $this->_activeFields[$i]->_relatedContactImProvider; - } - - $params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails][] = $value; - } - elseif (isset($this->_activeFields[$i]->_relatedContactWebsiteType)) { - $params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails][] = [ - 'url' => $this->_activeFields[$i]->_value, - 'website_type_id' => $this->_activeFields[$i]->_relatedContactWebsiteType, - ]; - } - elseif (empty($this->_activeFields[$i]->_value) && isset($this->_activeFields[$i]->_relatedContactLocType)) { - if (empty($params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails])) { - $params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails] = []; - } - } - else { - $params[$this->_activeFields[$i]->_related][$this->_activeFields[$i]->_relatedContactDetails] = $this->_activeFields[$i]->_value; - } - } - } - } - - return $params; - } - - /** - * @param string $name - * @param $title - * @param int $type - * @param string $headerPattern - * @param string $dataPattern - * @param bool $hasLocationType - */ - public function addField( - $name, $title, $type = CRM_Utils_Type::T_INT, - $headerPattern = '//', $dataPattern = '//', - $hasLocationType = FALSE - ) { - $this->_fields[$name] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); - if (empty($name)) { - $this->_fields['doNotImport'] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); - } - } - - /** - * Store parser values. - * - * @param CRM_Core_Session $store - * - * @param int $mode - */ - public function set($store, $mode = self::MODE_SUMMARY) { - $store->set('rowCount', $this->_rowCount); - $store->set('fields', $this->getSelectValues()); - $store->set('fieldTypes', $this->getSelectTypes()); - - $store->set('columnCount', $this->_activeFieldCount); - - $store->set('totalRowCount', $this->_totalCount); - $store->set('validRowCount', $this->_validCount); - $store->set('invalidRowCount', $this->_invalidRowCount); - $store->set('conflictRowCount', $this->_conflictCount); - $store->set('unMatchCount', $this->_unMatchCount); - - switch ($this->_contactType) { - case 'Individual': - $store->set('contactType', CRM_Import_Parser::CONTACT_INDIVIDUAL); - break; - - case 'Household': - $store->set('contactType', CRM_Import_Parser::CONTACT_HOUSEHOLD); - break; - - case 'Organization': - $store->set('contactType', CRM_Import_Parser::CONTACT_ORGANIZATION); - } - - if ($this->_invalidRowCount) { - $store->set('errorsFileName', $this->_errorFileName); - } - if ($this->_conflictCount) { - $store->set('conflictsFileName', $this->_conflictFileName); - } - if (isset($this->_rows) && !empty($this->_rows)) { - $store->set('dataValues', $this->_rows); - } - - if ($this->_unMatchCount) { - $store->set('mismatchFileName', $this->_misMatchFilemName); - } - - if ($mode == self::MODE_IMPORT) { - $store->set('duplicateRowCount', $this->_duplicateCount); - $store->set('unparsedAddressCount', $this->_unparsedAddressCount); - if ($this->_duplicateCount) { - $store->set('duplicatesFileName', $this->_duplicateFileName); - } - if ($this->_unparsedAddressCount) { - $store->set('errorsFileName', $this->_errorFileName); - } - } - //echo "$this->_totalCount,$this->_invalidRowCount,$this->_conflictCount,$this->_duplicateCount"; - } - - /** - * Export data to a CSV file. - * - * @param string $fileName - * @param array $header - * @param array $data - */ - public static function exportCSV($fileName, $header, $data) { - - if (file_exists($fileName) && !is_writable($fileName)) { - CRM_Core_Error::movedSiteError($fileName); - } - //hack to remove '_status', '_statusMsg' and '_id' from error file - $errorValues = []; - $dbRecordStatus = ['IMPORTED', 'ERROR', 'DUPLICATE', 'INVALID', 'NEW']; - foreach ($data as $rowCount => $rowValues) { - $count = 0; - foreach ($rowValues as $key => $val) { - if (in_array($val, $dbRecordStatus) && $count == (count($rowValues) - 3)) { - break; - } - $errorValues[$rowCount][$key] = $val; - $count++; - } - } - $data = $errorValues; - - $output = []; - $fd = fopen($fileName, 'w'); - - foreach ($header as $key => $value) { - $header[$key] = "\"$value\""; - } - $config = CRM_Core_Config::singleton(); - $output[] = implode($config->fieldSeparator, $header); - - foreach ($data as $datum) { - foreach ($datum as $key => $value) { - $datum[$key] = "\"$value\""; - } - $output[] = implode($config->fieldSeparator, $datum); - } - fwrite($fd, implode("\n", $output)); - fclose($fd); - } - - /** - * Update the record with PK $id in the import database table. - * - * @deprecated - call setImportStatus directly as the parameters are simpler, - * - * @param int $id - * @param array $params - */ - public function updateImportRecord($id, $params): void { - $this->setImportStatus((int) $id, $params[$this->_statusFieldName] ?? '', $params["{$this->_statusFieldName}Msg"] ?? ''); - } - - /** - * Set the import status for the given record. - * - * If this is a sql import then the sql table will be used and the update - * will not happen as the relevant fields don't exist in the table - hence - * the checks that statusField & primary key are set. - * - * @param int $id - * @param string $status - * @param string $message - */ - public function setImportStatus(int $id, string $status, string $message): void { - if ($this->_statusFieldName && $this->_primaryKeyName) { - CRM_Core_DAO::executeQuery(" - UPDATE $this->_tableName - SET $this->_statusFieldName = %1, - {$this->_statusFieldName}Msg = %2 - WHERE $this->_primaryKeyName = %3 - ", [ - 1 => [$status, 'String'], - 2 => [$message, 'String'], - 3 => [$id, 'Integer'], - ]); - } - } - - /** - * Format contact parameters. - * - * @todo this function needs re-writing & re-merging into the main function. - * - * Here be dragons. - * - * @param array $values - * @param array $params - * - * @return bool - */ - protected function formatContactParameters(&$values, &$params) { - // Crawl through the possible classes: - // Contact - // Individual - // Household - // Organization - // Location - // Address - // Email - // Phone - // IM - // Note - // Custom - - // first add core contact values since for other Civi modules they are not added - $contactFields = CRM_Contact_DAO_Contact::fields(); - _civicrm_api3_store_values($contactFields, $values, $params); - - if (isset($values['contact_type'])) { - // we're an individual/household/org property - - $fields[$values['contact_type']] = CRM_Contact_DAO_Contact::fields(); - - _civicrm_api3_store_values($fields[$values['contact_type']], $values, $params); - return TRUE; - } - - // Cache the various object fields - // @todo - remove this after confirming this is just a compilation of other-wise-cached fields. - static $fields = []; - - if (isset($values['individual_prefix'])) { - if (!empty($params['prefix_id'])) { - $prefixes = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'prefix_id'); - $params['prefix'] = $prefixes[$params['prefix_id']]; - } - else { - $params['prefix'] = $values['individual_prefix']; - } - return TRUE; - } - - if (isset($values['individual_suffix'])) { - if (!empty($params['suffix_id'])) { - $suffixes = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'suffix_id'); - $params['suffix'] = $suffixes[$params['suffix_id']]; - } - else { - $params['suffix'] = $values['individual_suffix']; - } - return TRUE; - } - - // CRM-4575 - if (isset($values['email_greeting'])) { - if (!empty($params['email_greeting_id'])) { - $emailGreetingFilter = [ - 'contact_type' => $params['contact_type'] ?? NULL, - 'greeting_type' => 'email_greeting', - ]; - $emailGreetings = CRM_Core_PseudoConstant::greeting($emailGreetingFilter); - $params['email_greeting'] = $emailGreetings[$params['email_greeting_id']]; - } - else { - $params['email_greeting'] = $values['email_greeting']; - } - - return TRUE; - } - - if (isset($values['postal_greeting'])) { - if (!empty($params['postal_greeting_id'])) { - $postalGreetingFilter = [ - 'contact_type' => $params['contact_type'] ?? NULL, - 'greeting_type' => 'postal_greeting', - ]; - $postalGreetings = CRM_Core_PseudoConstant::greeting($postalGreetingFilter); - $params['postal_greeting'] = $postalGreetings[$params['postal_greeting_id']]; - } - else { - $params['postal_greeting'] = $values['postal_greeting']; - } - return TRUE; - } - - if (isset($values['addressee'])) { - $params['addressee'] = $values['addressee']; - return TRUE; - } - - if (isset($values['gender'])) { - if (!empty($params['gender_id'])) { - $genders = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'gender_id'); - $params['gender'] = $genders[$params['gender_id']]; - } - else { - $params['gender'] = $values['gender']; - } - return TRUE; - } - - if (!empty($values['preferred_communication_method'])) { - $comm = []; - $pcm = array_change_key_case(array_flip(CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'preferred_communication_method')), CASE_LOWER); - - $preffComm = explode(',', $values['preferred_communication_method']); - foreach ($preffComm as $v) { - $v = strtolower(trim($v)); - if (array_key_exists($v, $pcm)) { - $comm[$pcm[$v]] = 1; - } - } - - $params['preferred_communication_method'] = $comm; - return TRUE; - } - - // format the website params. - if (!empty($values['url'])) { - static $websiteFields; - if (!is_array($websiteFields)) { - $websiteFields = CRM_Core_DAO_Website::fields(); - } - if (!array_key_exists('website', $params) || - !is_array($params['website']) - ) { - $params['website'] = []; - } - - $websiteCount = count($params['website']); - _civicrm_api3_store_values($websiteFields, $values, - $params['website'][++$websiteCount] - ); - - return TRUE; - } - - if (isset($values['note'])) { - // add a note field - if (!isset($params['note'])) { - $params['note'] = []; - } - $noteBlock = count($params['note']) + 1; - - $params['note'][$noteBlock] = []; - if (!isset($fields['Note'])) { - $fields['Note'] = CRM_Core_DAO_Note::fields(); - } - - // get the current logged in civicrm user - $session = CRM_Core_Session::singleton(); - $userID = $session->get('userID'); - - if ($userID) { - $values['contact_id'] = $userID; - } - - _civicrm_api3_store_values($fields['Note'], $values, $params['note'][$noteBlock]); - - return TRUE; - } - - // Check for custom field values - $customFields = CRM_Core_BAO_CustomField::getFields(CRM_Utils_Array::value('contact_type', $values), - FALSE, FALSE, NULL, NULL, FALSE, FALSE, FALSE - ); - - foreach ($values as $key => $value) { - if ($customFieldID = CRM_Core_BAO_CustomField::getKeyID($key)) { - // check if it's a valid custom field id - - if (!array_key_exists($customFieldID, $customFields)) { - return civicrm_api3_create_error('Invalid custom field ID'); - } - else { - $params[$key] = $value; - } - } - } - return TRUE; - } - - /** - * Format location block ready for importing. - * - * There is some test coverage for this in CRM_Contact_Import_Parser_ContactTest - * e.g. testImportPrimaryAddress. - * - * @param array $values - * @param array $params - * - * @return bool - */ - protected function formatLocationBlock(&$values, &$params) { - $blockTypes = [ - 'phone' => 'Phone', - 'email' => 'Email', - 'im' => 'IM', - 'openid' => 'OpenID', - 'phone_ext' => 'Phone', - ]; - foreach ($blockTypes as $blockFieldName => $block) { - if (!array_key_exists($blockFieldName, $values)) { - continue; - } - $blockIndex = $values['location_type_id'] . (!empty($values['phone_type_id']) ? '_' . $values['phone_type_id'] : ''); - - // block present in value array. - if (!array_key_exists($blockFieldName, $params) || !is_array($params[$blockFieldName])) { - $params[$blockFieldName] = []; - } - - $fields[$block] = $this->getMetadataForEntity($block); - - // copy value to dao field name. - if ($blockFieldName == 'im') { - $values['name'] = $values[$blockFieldName]; - } - - _civicrm_api3_store_values($fields[$block], $values, - $params[$blockFieldName][$blockIndex] - ); - - $this->fillPrimary($params[$blockFieldName][$blockIndex], $values, $block, CRM_Utils_Array::value('id', $params)); - - if (empty($params['id']) && (count($params[$blockFieldName]) == 1)) { - $params[$blockFieldName][$blockIndex]['is_primary'] = TRUE; - } - - // we only process single block at a time. - return TRUE; - } - - // handle address fields. - if (!array_key_exists('address', $params) || !is_array($params['address'])) { - $params['address'] = []; - } - - // Note: we doing multiple value formatting here for address custom fields, plus putting into right format. - // The actual formatting (like date, country ..etc) for address custom fields is taken care of while saving - // the address in CRM_Core_BAO_Address::create method - if (!empty($values['location_type_id'])) { - static $customFields = []; - if (empty($customFields)) { - $customFields = CRM_Core_BAO_CustomField::getFields('Address'); - } - // make a copy of values, as we going to make changes - $newValues = $values; - foreach ($values as $key => $val) { - $customFieldID = CRM_Core_BAO_CustomField::getKeyID($key); - if ($customFieldID && array_key_exists($customFieldID, $customFields)) { - - $htmlType = $customFields[$customFieldID]['html_type'] ?? NULL; - if (CRM_Core_BAO_CustomField::isSerialized($customFields[$customFieldID]) && $val) { - $mulValues = explode(',', $val); - $customOption = CRM_Core_BAO_CustomOption::getCustomOption($customFieldID, TRUE); - $newValues[$key] = []; - foreach ($mulValues as $v1) { - foreach ($customOption as $v2) { - if ((strtolower($v2['label']) == strtolower(trim($v1))) || - (strtolower($v2['value']) == strtolower(trim($v1))) - ) { - if ($htmlType == 'CheckBox') { - $newValues[$key][$v2['value']] = 1; - } - else { - $newValues[$key][] = $v2['value']; - } - } - } - } - } - } - } - // consider new values - $values = $newValues; - } - - $fields['Address'] = $this->getMetadataForEntity('Address'); - // @todo this is kinda replicated below.... - _civicrm_api3_store_values($fields['Address'], $values, $params['address'][$values['location_type_id']]); - - $addressFields = [ - 'county', - 'country', - 'state_province', - 'supplemental_address_1', - 'supplemental_address_2', - 'supplemental_address_3', - 'StateProvince.name', - ]; - foreach (array_keys($customFields) as $customFieldID) { - $addressFields[] = 'custom_' . $customFieldID; - } - - foreach ($addressFields as $field) { - if (array_key_exists($field, $values)) { - if (!array_key_exists('address', $params)) { - $params['address'] = []; - } - $params['address'][$values['location_type_id']][$field] = $values[$field]; - } - } - - $this->fillPrimary($params['address'][$values['location_type_id']], $values, 'address', CRM_Utils_Array::value('id', $params)); - return TRUE; - } - - /** - * Get the field metadata for the relevant entity. - * - * @param string $entity - * - * @return array - */ - protected function getMetadataForEntity($entity) { - if (!isset($this->fieldMetadata[$entity])) { - $className = "CRM_Core_DAO_$entity"; - $this->fieldMetadata[$entity] = $className::fields(); - } - return $this->fieldMetadata[$entity]; - } - - /** - * Fill in the primary location. - * - * If the contact has a primary address we update it. Otherwise - * we add an address of the default location type. - * - * @param array $params - * Address block parameters - * @param array $values - * Input values - * @param string $entity - * - address, email, phone - * @param int|null $contactID - * - * @throws \CiviCRM_API3_Exception - */ - protected function fillPrimary(&$params, $values, $entity, $contactID) { - if ($values['location_type_id'] === 'Primary') { - if ($contactID) { - $primary = civicrm_api3($entity, 'get', [ - 'return' => 'location_type_id', - 'contact_id' => $contactID, - 'is_primary' => 1, - 'sequential' => 1, - ]); - } - $defaultLocationType = CRM_Core_BAO_LocationType::getDefault(); - $params['location_type_id'] = (int) (isset($primary) && $primary['count']) ? $primary['values'][0]['location_type_id'] : $defaultLocationType->id; - $params['is_primary'] = 1; - } - } - -} diff --git a/civicrm/CRM/Contact/Import/Parser/Contact.php b/civicrm/CRM/Contact/Import/Parser/Contact.php index c46a60338f..f670fa1e62 100644 --- a/civicrm/CRM/Contact/Import/Parser/Contact.php +++ b/civicrm/CRM/Contact/Import/Parser/Contact.php @@ -10,6 +10,7 @@ */ use Civi\Api4\Contact; +use Civi\Api4\RelationshipType; require_once 'CRM/Utils/DeprecatedUtils.php'; require_once 'api/v3/utils.php'; @@ -23,7 +24,7 @@ require_once 'api/v3/utils.php'; /** * class to parse contact csv files */ -class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { +class CRM_Contact_Import_Parser_Contact extends CRM_Import_Parser { use CRM_Contact_Import_MetadataTrait; @@ -47,8 +48,6 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { protected $_householdNameIndex; protected $_organizationNameIndex; - protected $_allEmails; - protected $_phoneIndex; /** @@ -95,6 +94,71 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { */ protected $_unparsedStreetAddressContacts; + protected $_tableName; + + /** + * Total number of lines in file + * + * @var int + */ + protected $_rowCount; + + /** + * Running total number of un-matched Contacts. + * + * @var int + */ + protected $_unMatchCount; + + /** + * Array of unmatched lines. + * + * @var array + */ + protected $_unMatch; + + /** + * Total number of contacts with unparsed addresses + * @var int + */ + protected $_unparsedAddressCount; + + /** + * Filename of mismatch data + * + * @var string + */ + protected $_misMatchFilemName; + + protected $_primaryKeyName; + protected $_statusFieldName; + + protected $fieldMetadata = []; + + /** + * Relationship labels. + * + * Temporary cache of labels to reduce queries in getRelationshipLabels. + * + * @var array + * e.g ['5a_b' => 'Employer', '5b_a' => 'Employee'] + */ + protected $relationshipLabels = []; + + /** + * On duplicate + * + * @var int + */ + public $_onDuplicate; + + /** + * Dedupe rule group id to use if set + * + * @var int + */ + public $_dedupeRuleGroupID = NULL; + /** * Class constructor. * @@ -112,7 +176,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { * @param array $mapperRelatedContactWebsiteType */ public function __construct( - $mapperKeys, $mapperLocType = [], $mapperPhoneType = [], $mapperImProvider = [], $mapperRelated = [], $mapperRelatedContactType = [], $mapperRelatedContactDetails = [], $mapperRelatedContactLocType = [], $mapperRelatedContactPhoneType = [], $mapperRelatedContactImProvider = [], + $mapperKeys = [], $mapperLocType = [], $mapperPhoneType = [], $mapperImProvider = [], $mapperRelated = [], $mapperRelatedContactType = [], $mapperRelatedContactDetails = [], $mapperRelatedContactLocType = [], $mapperRelatedContactPhoneType = [], $mapperRelatedContactImProvider = [], $mapperWebsiteType = [], $mapperRelatedContactWebsiteType = [] ) { parent::__construct(); @@ -140,7 +204,6 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { foreach ($this->getImportableFieldsMetadata() as $name => $field) { $this->addField($name, $field['title'], CRM_Utils_Array::value('type', $field), CRM_Utils_Array::value('headerPattern', $field), CRM_Utils_Array::value('dataPattern', $field), CRM_Utils_Array::value('hasLocationType', $field)); } - $this->_newContacts = []; $this->setActiveFields($this->_mapperKeys); @@ -172,7 +235,6 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { foreach ($this->_mapperKeys as $key) { if (substr($key, 0, 5) == 'email' && substr($key, 0, 14) != 'email_greeting') { $this->_emailIndex = $index; - $this->_allEmails = []; } if (substr($key, 0, 5) == 'phone') { $this->_phoneIndex = $index; @@ -209,25 +271,55 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { } /** - * Handle the values in mapField mode. + * Gets the fields available for importing in a key-name, title format. * - * @param array $values - * The array of values belonging to this line. + * @return array + * eg. ['first_name' => 'First Name'.....] + * + * @throws \API_Exception + * + * @todo - we are constructing the metadata before we + * have set the contact type so we re-do it here. + * + * Once we have cleaned up the way the mapper is handled + * we can ditch all the existing _construct parameters in favour + * of just the userJobID - there are current open PRs towards this end. + */ + public function getAvailableFields(): array { + $this->setFieldMetadata(); + $return = []; + foreach ($this->getImportableFieldsMetadata() as $name => $field) { + if ($name === 'id' && $this->isSkipDuplicates()) { + // Duplicates are being skipped so id matching is not availble. + continue; + } + $return[$name] = $field['title']; + } + return $return; + } + + /** + * Did the user specify duplicates should be skipped and not imported. * * @return bool + * + * @throws \API_Exception */ - public function mapField(&$values) { - return CRM_Import_Parser::VALID; + private function isSkipDuplicates(): bool { + return ((int) $this->getSubmittedValue('onDuplicate')) === CRM_Import_Parser::DUPLICATE_SKIP; } /** * Handle the values in preview mode. * + * Function will be deprecated in favour of validateValues. + * * @param array $values * The array of values belonging to this line. * * @return bool * the result of this processing + * CRM_Import_Parser::ERROR or CRM_Import_Parser::VALID */ public function preview(&$values) { return $this->summary($values); @@ -236,136 +328,23 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { /** * Handle the values in summary mode. * + * Function will be deprecated in favour of validateValues. + * * @param array $values * The array of values belonging to this line. * - * @return bool + * @return int * the result of this processing + * CRM_Import_Parser::ERROR or CRM_Import_Parser::VALID */ public function summary(&$values): int { - $erroneousField = NULL; - $this->setActiveFieldValues($values, $erroneousField); $rowNumber = (int) ($values[count($values) - 1]); - $errorMessage = NULL; - $errorRequired = FALSE; - switch ($this->_contactType) { - case 'Individual': - $missingNames = []; - if ($this->_firstNameIndex < 0 || empty($values[$this->_firstNameIndex])) { - $errorRequired = TRUE; - $missingNames[] = ts('First Name'); - } - if ($this->_lastNameIndex < 0 || empty($values[$this->_lastNameIndex])) { - $errorRequired = TRUE; - $missingNames[] = ts('Last Name'); - } - if ($errorRequired) { - $and = ' ' . ts('and') . ' '; - $errorMessage = ts('Missing required fields:') . ' ' . implode($and, $missingNames); - } - break; - - case 'Household': - if ($this->_householdNameIndex < 0 || empty($values[$this->_householdNameIndex])) { - $errorRequired = TRUE; - $errorMessage = ts('Missing required fields:') . ' ' . ts('Household Name'); - } - break; - - case 'Organization': - if ($this->_organizationNameIndex < 0 || empty($values[$this->_organizationNameIndex])) { - $errorRequired = TRUE; - $errorMessage = ts('Missing required fields:') . ' ' . ts('Organization Name'); - } - break; - } - - if ($this->_emailIndex >= 0) { - /* If we don't have the required fields, bail */ - - if ($this->_contactType === 'Individual' && !$this->_updateWithId) { - if ($errorRequired && empty($values[$this->_emailIndex])) { - if ($errorMessage) { - $errorMessage .= ' ' . ts('OR') . ' ' . ts('Email Address'); - } - else { - $errorMessage = ts('Missing required field:') . ' ' . ts('Email Address'); - } - array_unshift($values, $errorMessage); - $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); - - return CRM_Import_Parser::ERROR; - } - } - - $email = $values[$this->_emailIndex] ?? NULL; - if ($email) { - /* If the email address isn't valid, bail */ - - if (!CRM_Utils_Rule::email($email)) { - $errorMessage = ts('Invalid Email address'); - array_unshift($values, $errorMessage); - $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); - - return CRM_Import_Parser::ERROR; - } - - /* otherwise, count it and move on */ - $this->_allEmails[$email] = $this->_lineCount; - } - } - elseif ($errorRequired && !$this->_updateWithId) { - if ($errorMessage) { - $errorMessage .= ' ' . ts('OR') . ' ' . ts('Email Address'); - } - else { - $errorMessage = ts('Missing required field:') . ' ' . ts('Email Address'); - } - array_unshift($values, $errorMessage); - $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); - - return CRM_Import_Parser::ERROR; - } - - //check for duplicate external Identifier - $externalID = $values[$this->_externalIdentifierIndex] ?? NULL; - if ($externalID) { - /* If it's a dupe,external Identifier */ - - if ($externalDupe = CRM_Utils_Array::value($externalID, $this->_allExternalIdentifiers)) { - $errorMessage = ts('External ID conflicts with record %1', [1 => $externalDupe]); - array_unshift($values, $errorMessage); - $this->setImportStatus($rowNumber, 'ERROR', $errorMessage); - return CRM_Import_Parser::ERROR; - } - //otherwise, count it and move on - $this->_allExternalIdentifiers[$externalID] = $this->_lineCount; - } - - //Checking error in custom data - $params = &$this->getActiveFieldParams(); - $params['contact_type'] = $this->_contactType; - //date-format part ends - - $errorMessage = NULL; - - //CRM-5125 - //add custom fields for contact sub type - $csType = NULL; - if (!empty($this->_contactSubType)) { - $csType = $this->_contactSubType; + try { + $this->validateValues($values); } - - //checking error in custom data - $this->isErrorInCustomData($params, $errorMessage, $csType, $this->_relationships); - - //checking error in core data - $this->isErrorInCoreData($params, $errorMessage); - if ($errorMessage) { - $tempMsg = "Invalid value for field(s) : $errorMessage"; - $this->setImportStatus($rowNumber, 'ERROR', $tempMsg); - array_unshift($values, $tempMsg); - $errorMessage = NULL; + catch (CRM_Core_Exception $e) { + $this->setImportStatus($rowNumber, 'ERROR', $e->getMessage()); + array_unshift($values, $e->getMessage()); return CRM_Import_Parser::ERROR; } $this->setImportStatus($rowNumber, 'NEW', ''); @@ -391,8 +370,6 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { * @param array $values * The array of values belonging to this line. * - * @param bool $doGeocodeAddress - * * @return bool * the result of this processing * @@ -400,9 +377,9 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { * @throws \CRM_Core_Exception * @throws \API_Exception */ - public function import($onDuplicate, &$values, $doGeocodeAddress = FALSE) { + public function import($onDuplicate, &$values) { $this->_unparsedStreetAddressContacts = []; - if (!$doGeocodeAddress) { + if (!$this->getSubmittedValue('doGeocodeAddress')) { // CRM-5854, reset the geocode method to null to prevent geocoding CRM_Utils_GeocodeProvider::disableForSession(); } @@ -413,11 +390,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $statusFieldName = $this->_statusFieldName; if ($response != CRM_Import_Parser::VALID) { - $importRecordParams = [ - $statusFieldName => 'INVALID', - "${statusFieldName}Msg" => "Invalid (Error Code: $response)", - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'Invalid', "Invalid (Error Code: $response)"); return $response; } @@ -457,11 +430,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { else { $errorMessage = ts('External ID already exists in Database.'); array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'ERROR', $errorMessage); return CRM_Import_Parser::DUPLICATE; } } @@ -498,7 +467,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $statusFieldName => 'ERROR', "${statusFieldName}Msg" => $errorMessage, ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } foreach ($possibleMatches as $possibleID) { @@ -655,11 +624,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if ($onDuplicate == CRM_Import_Parser::DUPLICATE_SKIP) { $errorMessage = "Skipping duplicate record"; array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'DUPLICATE', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'DUPLICATE', $errorMessage); return CRM_Import_Parser::DUPLICATE; } @@ -816,11 +781,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { else { $errorMessage = $relatedNewContact['error_message']; array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } } @@ -944,11 +905,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { // Not a dupe, so we had an error $errorMessage = $newContact['error_message']; array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } @@ -1264,12 +1221,6 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { return $this->_newRelatedContacts; } - /** - * The initializer code, called before the processing. - */ - public function fini() { - } - /** * Check if an error in custom data. * @@ -1282,6 +1233,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { */ public static function isErrorInCustomData($params, &$errorMessage, $csType = NULL, $relationships = NULL) { $dateType = CRM_Core_Session::singleton()->get("dateTypes"); + $errors = []; if (!empty($params['contact_sub_type'])) { $csType = $params['contact_sub_type'] ?? NULL; @@ -1315,11 +1267,11 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { /* check if it's a valid custom field id */ if (!array_key_exists($customFieldID, $customFields)) { - self::addToErrorMsg(ts('field ID'), $errorMessage); + $errors[] = ts('field ID'); } // validate null values for required custom fields of type boolean if (!empty($customFields[$customFieldID]['is_required']) && (empty($params['custom_' . $customFieldID]) && !is_numeric($params['custom_' . $customFieldID])) && $customFields[$customFieldID]['data_type'] == 'Boolean') { - self::addToErrorMsg($customFields[$customFieldID]['label'] . '::' . $customFields[$customFieldID]['groupTitle'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label'] . '::' . $customFields[$customFieldID]['groupTitle']; } //For address custom fields, we do get actual custom field value as an inner array of @@ -1341,12 +1293,12 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $value = $params[$key]; } else { - self::addToErrorMsg($customFields[$customFieldID]['label'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label']; } } elseif ($dataType == 'Boolean') { if (CRM_Utils_String::strtoboolstr($value) === FALSE) { - self::addToErrorMsg($customFields[$customFieldID]['label'] . '::' . $customFields[$customFieldID]['groupTitle'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label'] . '::' . $customFields[$customFieldID]['groupTitle']; } } // need not check for label filed import @@ -1358,7 +1310,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if ((!$isSerialized && !in_array($htmlType, $selectHtmlTypes)) || $dataType == 'Boolean' || $dataType == 'ContactReference') { $valid = CRM_Core_BAO_CustomValue::typecheck($dataType, $value); if (!$valid) { - self::addToErrorMsg($customFields[$customFieldID]['label'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label']; } } @@ -1381,7 +1333,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { } if (!$flag) { - self::addToErrorMsg($customFields[$customFieldID]['label'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label']; } } } @@ -1394,7 +1346,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { } } if (!$flag) { - self::addToErrorMsg($customFields[$customFieldID]['label'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label']; } } elseif ($isSerialized && $dataType === 'StateProvince') { @@ -1405,7 +1357,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { continue; } else { - self::addToErrorMsg($customFields[$customFieldID]['label'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label']; } } } @@ -1431,7 +1383,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { } if ($error) { - self::addToErrorMsg($customFields[$customFieldID]['label'], $errorMessage); + $errors[] = $customFields[$customFieldID]['label']; } } } @@ -1465,6 +1417,9 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { self::isErrorInCustomData($params[$key], $errorMessage, $csType, $relationships); } } + if ($errors) { + $errorMessage .= ($errorMessage ? '; ' : '') . implode('; ', $errors); + } } /** @@ -1510,6 +1465,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { * A string containing all the error-fields. */ public function isErrorInCoreData($params, &$errorMessage) { + $errors = []; foreach ($params as $key => $value) { if ($value) { $session = CRM_Core_Session::singleton(); @@ -1519,34 +1475,34 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { case 'birth_date': if (CRM_Utils_Date::convertToDefaultDate($params, $dateType, $key)) { if (!CRM_Utils_Rule::date($params[$key])) { - self::addToErrorMsg(ts('Birth Date'), $errorMessage); + $errors[] = ts('Birth Date'); } } else { - self::addToErrorMsg(ts('Birth-Date'), $errorMessage); + $errors[] = ts('Birth-Date'); } break; case 'deceased_date': if (CRM_Utils_Date::convertToDefaultDate($params, $dateType, $key)) { if (!CRM_Utils_Rule::date($params[$key])) { - self::addToErrorMsg(ts('Deceased Date'), $errorMessage); + $errors[] = ts('Deceased Date'); } } else { - self::addToErrorMsg(ts('Deceased Date'), $errorMessage); + $errors[] = ts('Deceased Date'); } break; case 'is_deceased': if (CRM_Utils_String::strtoboolstr($value) === FALSE) { - self::addToErrorMsg(ts('Deceased'), $errorMessage); + $errors[] = ts('Deceased'); } break; case 'gender_id': if (!self::checkGender($value)) { - self::addToErrorMsg(ts('Gender'), $errorMessage); + $errors[] = ts('Gender'); } break; @@ -1555,28 +1511,28 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $preffComm = explode(',', $value); foreach ($preffComm as $v) { if (!self::in_value(trim($v), CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'preferred_communication_method'))) { - self::addToErrorMsg(ts('Preferred Communication Method'), $errorMessage); + $errors[] = ts('Preferred Communication Method'); } } break; case 'preferred_mail_format': if (!array_key_exists(strtolower($value), array_change_key_case(CRM_Core_SelectValues::pmf(), CASE_LOWER))) { - self::addToErrorMsg(ts('Preferred Mail Format'), $errorMessage); + $errors[] = ts('Preferred Mail Format'); } break; case 'individual_prefix': case 'prefix_id': if (!self::in_value($value, CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'prefix_id'))) { - self::addToErrorMsg(ts('Individual Prefix'), $errorMessage); + $errors[] = ts('Individual Prefix'); } break; case 'individual_suffix': case 'suffix_id': if (!self::in_value($value, CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'suffix_id'))) { - self::addToErrorMsg(ts('Individual Suffix'), $errorMessage); + $errors[] = ts('Individual Suffix'); } break; @@ -1590,7 +1546,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { continue; } else { - self::addToErrorMsg(ts('State/Province'), $errorMessage); + $errors[] = ts('State/Province'); } } } @@ -1614,10 +1570,10 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { continue; } if (self::in_value($stateValue['country'], $countryIsoCodes) || self::in_value($stateValue['country'], $countryNames)) { - self::addToErrorMsg(ts('Country input value is in table but not "available": "This Country is valid but is NOT in the list of Available Countries currently configured for your site. This can be viewed and modifed from Administer > Localization > Languages Currency Locations." '), $errorMessage); + $errors[] = ts('Country input value is in table but not "available": "This Country is valid but is NOT in the list of Available Countries currently configured for your site. This can be viewed and modifed from Administer > Localization > Languages Currency Locations." '); } else { - self::addToErrorMsg(ts('Country input value not in country table: "The Country value appears to be invalid. It does not match any value in CiviCRM table of countries."'), $errorMessage); + $errors[] = ts('Country input value not in country table: "The Country value appears to be invalid. It does not match any value in CiviCRM table of countries."'); } } } @@ -1630,7 +1586,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if ($county['county']) { $countyNames = CRM_Core_PseudoConstant::county(); if (!empty($county['county']) && !in_array($county['county'], $countyNames)) { - self::addToErrorMsg(ts('County input value not in county table: The County value appears to be invalid. It does not match any value in CiviCRM table of counties.'), $errorMessage); + $errors[] = ts('County input value not in county table: The County value appears to be invalid. It does not match any value in CiviCRM table of counties.'); } } } @@ -1644,7 +1600,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (CRM_Utils_Rule::numeric($codeValue['geo_code_1'])) { continue; } - self::addToErrorMsg(ts('Geo code 1'), $errorMessage); + $errors[] = ts('Geo code 1'); } } } @@ -1657,7 +1613,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (CRM_Utils_Rule::numeric($codeValue['geo_code_2'])) { continue; } - self::addToErrorMsg(ts('Geo code 2'), $errorMessage); + $errors[] = ts('Geo code 2'); } } } @@ -1672,7 +1628,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { 'greeting_type' => 'email_greeting', ]; if (!self::in_value($value, CRM_Core_PseudoConstant::greeting($emailGreetingFilter))) { - self::addToErrorMsg(ts('Email Greeting must be one of the configured format options. Check Administer >> System Settings >> Option Groups >> Email Greetings for valid values'), $errorMessage); + $errors[] = ts('Email Greeting must be one of the configured format options. Check Administer >> System Settings >> Option Groups >> Email Greetings for valid values'); } break; @@ -1682,7 +1638,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { 'greeting_type' => 'postal_greeting', ]; if (!self::in_value($value, CRM_Core_PseudoConstant::greeting($postalGreetingFilter))) { - self::addToErrorMsg(ts('Postal Greeting must be one of the configured format options. Check Administer >> System Settings >> Option Groups >> Postal Greetings for valid values'), $errorMessage); + $errors[] = ts('Postal Greeting must be one of the configured format options. Check Administer >> System Settings >> Option Groups >> Postal Greetings for valid values'); } break; @@ -1692,7 +1648,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { 'greeting_type' => 'addressee', ]; if (!self::in_value($value, CRM_Core_PseudoConstant::greeting($addresseeFilter))) { - self::addToErrorMsg(ts('Addressee must be one of the configured format options. Check Administer >> System Settings >> Option Groups >> Addressee for valid values'), $errorMessage); + $errors[] = ts('Addressee must be one of the configured format options. Check Administer >> System Settings >> Option Groups >> Addressee for valid values'); } break; @@ -1700,7 +1656,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (array_key_exists('email_greeting', $params)) { $emailGreetingLabel = key(CRM_Core_OptionGroup::values('email_greeting', TRUE, NULL, NULL, 'AND v.name = "Customized"')); if (CRM_Utils_Array::value('email_greeting', $params) != $emailGreetingLabel) { - self::addToErrorMsg(ts('Email Greeting - Custom'), $errorMessage); + $errors[] = ts('Email Greeting - Custom'); } } break; @@ -1709,7 +1665,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (array_key_exists('postal_greeting', $params)) { $postalGreetingLabel = key(CRM_Core_OptionGroup::values('postal_greeting', TRUE, NULL, NULL, 'AND v.name = "Customized"')); if (CRM_Utils_Array::value('postal_greeting', $params) != $postalGreetingLabel) { - self::addToErrorMsg(ts('Postal Greeting - Custom'), $errorMessage); + $errors[] = ts('Postal Greeting - Custom'); } } break; @@ -1718,7 +1674,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (array_key_exists('addressee', $params)) { $addresseeLabel = key(CRM_Core_OptionGroup::values('addressee', TRUE, NULL, NULL, 'AND v.name = "Customized"')); if (CRM_Utils_Array::value('addressee', $params) != $addresseeLabel) { - self::addToErrorMsg(ts('Addressee - Custom'), $errorMessage); + $errors[] = ts('Addressee - Custom'); } } break; @@ -1727,7 +1683,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (is_array($value)) { foreach ($value as $values) { if (!empty($values['url']) && !CRM_Utils_Rule::url($values['url'])) { - self::addToErrorMsg(ts('Website'), $errorMessage); + $errors[] = ts('Website'); break; } } @@ -1741,7 +1697,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { case 'do_not_trade': if (CRM_Utils_Rule::boolean($value) == FALSE) { $key = ucwords(str_replace("_", " ", $key)); - self::addToErrorMsg($key, $errorMessage); + $errors[] = $key; } break; @@ -1749,7 +1705,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { if (is_array($value)) { foreach ($value as $values) { if (!empty($values['email']) && !CRM_Utils_Rule::email($values['email'])) { - self::addToErrorMsg($key, $errorMessage); + $errors[] = $key; break; } } @@ -1764,6 +1720,9 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { } } } + if ($errors) { + $errorMessage .= ($errorMessage ? '; ' : '') . implode('; ', $errors); + } } /** @@ -2048,9 +2007,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { */ public function processMessage(&$values, $statusFieldName, $returnCode) { if (empty($this->_unparsedStreetAddressContacts)) { - $importRecordParams = [ - $statusFieldName => 'IMPORTED', - ]; + $this->setImportStatus((int) ($values[count($values) - 1]), 'IMPORTED', ''); } else { $errorMessage = ts("Record imported successfully but unable to parse the street address: "); @@ -2059,13 +2016,9 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { $errorMessage .= "\n Contact ID:" . $contactValue['id'] . " <a href=\"$contactUrl\"> " . $contactValue['streetAddress'] . "</a>"; } array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; $returnCode = CRM_Import_Parser::UNPARSED_ADDRESS_WARNING; + $this->setImportStatus((int) ($values[count($values) - 1]), 'ERROR', $errorMessage); } - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); return $returnCode; } @@ -2260,15 +2213,10 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { // If we duplicate more than one record, skip no matter what if (count($cids) > 1) { $errorMessage = ts('Record duplicates multiple contacts'); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - //combine error msg to avoid mismatch between error file columns. $errorMessage .= "\n" . $url_string; array_unshift($values, $errorMessage); - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } @@ -2299,11 +2247,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { // different kind of error other than DUPLICATE $errorMessage = $newContact['error_message']; array_unshift($values, $errorMessage); - $importRecordParams = [ - $statusFieldName => 'ERROR', - "${statusFieldName}Msg" => $errorMessage, - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'ERROR', $errorMessage); return CRM_Import_Parser::ERROR; } @@ -2318,18 +2262,11 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { //CRM-262 No Duplicate Checking if ($onDuplicate == CRM_Import_Parser::DUPLICATE_SKIP) { array_unshift($values, $url_string); - $importRecordParams = [ - $statusFieldName => 'DUPLICATE', - "${statusFieldName}Msg" => "Skipping duplicate record", - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'DUPLICATE', 'Skipping duplicate record'); return CRM_Import_Parser::DUPLICATE; } - $importRecordParams = [ - $statusFieldName => 'IMPORTED', - ]; - $this->updateImportRecord($values[count($values) - 1], $importRecordParams); + $this->setImportStatus((int) $values[count($values) - 1], 'Imported', ''); //return warning if street address is not parsed, CRM-5886 return $this->processMessage($values, $statusFieldName, CRM_Import_Parser::VALID); } @@ -2495,4 +2432,1199 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { } } + /** + * Run import. + * + * @param string $tableName + * @param array $mapper + * @param int $mode + * @param int $contactType + * @param string $primaryKeyName + * @param string $statusFieldName + * @param int $onDuplicate + * @param int $statusID + * @param int $totalRowCount + * + * @return mixed + * @throws \API_Exception + */ + public function run( + $tableName, + $mapper = [], + $mode = self::MODE_PREVIEW, + $contactType = self::CONTACT_INDIVIDUAL, + $primaryKeyName = '_id', + $statusFieldName = '_status', + $onDuplicate = self::DUPLICATE_SKIP, + $statusID = NULL, + $totalRowCount = NULL + ) { + + // TODO: Make the timeout actually work + $this->_onDuplicate = $onDuplicate = $this->getSubmittedValue('onDuplicate'); + $this->_dedupeRuleGroupID = $this->getSubmittedValue('dedupe_rule_id'); + // Since $this->_contactType is still being called directly do a get call + // here to make sure it is instantiated. + $this->getContactType(); + $this->getContactSubType(); + + $this->init(); + + $this->_rowCount = 0; + $this->_invalidRowCount = $this->_validCount = 0; + $this->_totalCount = 0; + + $this->_errors = []; + $this->_warnings = []; + $this->_unparsedAddresses = []; + + $this->_tableName = $tableName = $this->getUserJob()['metadata']['DataSource']['table_name']; + $this->_primaryKeyName = '_id'; + $this->_statusFieldName = '_status'; + + if ($mode == self::MODE_MAPFIELD) { + $this->_rows = []; + } + else { + $this->_activeFieldCount = count($this->_activeFields); + } + + if ($statusID) { + $this->progressImport($statusID); + $startTimestamp = $currTimestamp = $prevTimestamp = time(); + } + // get the contents of the temp. import table + $query = "SELECT * FROM $tableName"; + if ($mode == self::MODE_IMPORT) { + $query .= " WHERE _status = 'NEW'"; + } + if ($this->_maxLinesToProcess > 0) { + // Note this would only be the case in MapForm mode, where it is set to 100 + // rows. In fact mapField really only needs 2 rows - the reason for + // 100 seems to be that the other import classes are processing a + // csv file, and there was a concern that some rows might have more + // columns than others - hence checking 100 rows perhaps seemed like + // a good precaution presumably when determining the activeFieldsCount + // which is the number of columns a row might have. + // However, the mapField class may no longer use activeFieldsCount for contact + // to be continued.... + $query .= ' LIMIT ' . $this->_maxLinesToProcess; + } + + $result = CRM_Core_DAO::executeQuery($query); + + while ($result->fetch()) { + $values = array_values($result->toArray()); + $this->_rowCount++; + + /* trim whitespace around the values */ + foreach ($values as $k => $v) { + $values[$k] = trim($v, " \t\r\n"); + } + + $this->_totalCount++; + + if ($mode == self::MODE_MAPFIELD) { + $returnCode = CRM_Import_Parser::VALID; + } + elseif ($mode == self::MODE_PREVIEW) { + $returnCode = $this->preview($values); + } + elseif ($mode == self::MODE_SUMMARY) { + $returnCode = $this->summary($values); + } + elseif ($mode == self::MODE_IMPORT) { + try { + $returnCode = $this->import($onDuplicate, $values); + } + catch (CiviCRM_API3_Exception $e) { + // When we catch errors here we are not adding to the errors array - mostly + // because that will become obsolete once https://github.com/civicrm/civicrm-core/pull/23292 + // is merged and this will replace it as the main way to handle errors (ie. update the table + // and move on). + $this->setImportStatus((int) $values[count($values) - 1], 'ERROR', $e->getMessage()); + } + if ($statusID && (($this->_rowCount % 50) == 0)) { + $prevTimestamp = $this->progressImport($statusID, FALSE, $startTimestamp, $prevTimestamp, $totalRowCount); + } + } + else { + $returnCode = self::ERROR; + } + + // note that a line could be valid but still produce a warning + if ($returnCode & self::VALID) { + $this->_validCount++; + if ($mode == self::MODE_MAPFIELD) { + $this->_rows[] = $values; + $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); + } + } + + if ($returnCode & self::ERROR) { + $this->_invalidRowCount++; + array_unshift($values, $this->_rowCount); + $this->_errors[] = $values; + } + + if ($returnCode & self::NO_MATCH) { + $this->_unMatchCount++; + array_unshift($values, $this->_rowCount); + $this->_unMatch[] = $values; + } + + if ($returnCode & self::DUPLICATE) { + $this->_duplicateCount++; + array_unshift($values, $this->_rowCount); + $this->_duplicates[] = $values; + if ($onDuplicate != self::DUPLICATE_SKIP) { + $this->_validCount++; + } + } + + if ($returnCode & self::UNPARSED_ADDRESS_WARNING) { + $this->_unparsedAddressCount++; + array_unshift($values, $this->_rowCount); + $this->_unparsedAddresses[] = $values; + } + + // see if we've hit our timeout yet + /* if ( $the_thing_with_the_stuff ) { + do_something( ); + } */ + } + + if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { + $customHeaders = $mapper; + + $customfields = CRM_Core_BAO_CustomField::getFields($this->_contactType); + foreach ($customHeaders as $key => $value) { + if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { + $customHeaders[$key] = $customfields[$id][0]; + } + } + + if ($this->_unMatchCount) { + $headers = array_merge([ + ts('Line Number'), + ts('Reason'), + ], $customHeaders); + + $this->_misMatchFilemName = self::errorFileName(self::NO_MATCH); + self::exportCSV($this->_misMatchFilemName, $headers, $this->_unMatch); + } + if ($this->_unparsedAddressCount) { + $headers = array_merge([ + ts('Line Number'), + ts('Contact Edit URL'), + ], $customHeaders); + $this->_errorFileName = self::errorFileName(self::UNPARSED_ADDRESS_WARNING); + self::exportCSV($this->_errorFileName, $headers, $this->_unparsedAddresses); + } + } + } + + /** + * Given a list of the importable field keys that the user has selected. + * set the active fields array to this list + * + * @param array $fieldKeys + * Mapped array of values. + */ + public function setActiveFields($fieldKeys) { + $this->_activeFieldCount = count($fieldKeys); + foreach ($fieldKeys as $key) { + if (empty($this->_fields[$key])) { + $this->_activeFields[] = new CRM_Contact_Import_Field('', ts('- do not import -')); + } + else { + $this->_activeFields[] = clone($this->_fields[$key]); + } + } + } + + /** + * @param $elements + */ + public function setActiveFieldLocationTypes($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_hasLocationType = $elements[$i]; + } + } + + /** + * @param $elements + */ + + /** + * @param $elements + */ + public function setActiveFieldPhoneTypes($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_phoneType = $elements[$i]; + } + } + + /** + * @param $elements + */ + public function setActiveFieldWebsiteTypes($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_websiteType = $elements[$i]; + } + } + + /** + * Set IM Service Provider type fields. + * + * @param array $elements + * IM service provider type ids. + */ + public function setActiveFieldImProviders($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_imProvider = $elements[$i]; + } + } + + /** + * @param $elements + */ + public function setActiveFieldRelated($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_related = $elements[$i]; + } + } + + /** + * @param $elements + */ + public function setActiveFieldRelatedContactType($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_relatedContactType = $elements[$i]; + } + } + + /** + * @param $elements + */ + public function setActiveFieldRelatedContactDetails($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_relatedContactDetails = $elements[$i]; + } + } + + /** + * @param $elements + */ + public function setActiveFieldRelatedContactLocType($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_relatedContactLocType = $elements[$i]; + } + } + + /** + * Set active field for related contact's phone type. + * + * @param array $elements + */ + public function setActiveFieldRelatedContactPhoneType($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_relatedContactPhoneType = $elements[$i]; + } + } + + /** + * @param $elements + */ + public function setActiveFieldRelatedContactWebsiteType($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_relatedContactWebsiteType = $elements[$i]; + } + } + + /** + * Set IM Service Provider type fields for related contacts. + * + * @param array $elements + * IM service provider type ids of related contact. + */ + public function setActiveFieldRelatedContactImProvider($elements) { + for ($i = 0; $i < count($elements); $i++) { + $this->_activeFields[$i]->_relatedContactImProvider = $elements[$i]; + } + } + + /** + * Format the field values for input to the api. + * + * @return array + * (reference ) associative array of name/value pairs + */ + public function &getActiveFieldParams() { + $params = []; + + for ($i = 0; $i < $this->_activeFieldCount; $i++) { + $fieldName = $this->_activeFields[$i]->_name; + if ($fieldName === 'do_not_import') { + continue; + } + $relatedContactFieldName = $this->_activeFields[$i]->_relatedContactDetails; + $relatedContactType = $this->_activeFields[$i]->_relatedContactType; + $relatedContactLocationTypeID = $this->_activeFields[$i]->_relatedContactLocType; + $relatedContactWebsiteTypeID = $this->_activeFields[$i]->_relatedContactWebsiteType ?? NULL; + $relatedContactIMProviderID = $this->_activeFields[$i]->_relatedContactImProvider ?? NULL; + $relatedContactPhoneTypeID = $this->_activeFields[$i]->_relatedContactPhoneType ?? NULL; + // The key is in the format 5_a_b where 5 is the relationship_type_id and a_b is the direction. + $relatedContactKey = $this->_activeFields[$i]->_related; + + $locationTypeID = $this->_activeFields[$i]->_hasLocationType; + $phoneTypeID = $this->_activeFields[$i]->_phoneType; + $imProviderID = $this->_activeFields[$i]->_imProvider ?? NULL; + $websiteTypeID = $this->_activeFields[$i]->_websiteType ?? NULL; + + $importedValue = $this->_activeFields[$i]->_value; + + if (isset($importedValue)) { + if (isset($locationTypeID)) { + if (!isset($params[$fieldName])) { + $params[$fieldName] = []; + } + + $value = [ + $fieldName => $importedValue, + 'location_type_id' => $locationTypeID, + ]; + + if (isset($phoneTypeID)) { + $value['phone_type_id'] = $phoneTypeID; + } + + // get IM service Provider type id + if (isset($imProviderID)) { + $value['provider_id'] = $imProviderID; + } + + $params[$fieldName][] = $value; + } + elseif (isset($websiteTypeID)) { + $value = [ + $fieldName => $importedValue, + 'website_type_id' => $websiteTypeID, + ]; + + $params[$fieldName][] = $value; + } + + if (!isset($params[$fieldName])) { + if (!isset($relatedContactKey)) { + $params[$fieldName] = $importedValue; + } + } + + //minor fix for CRM-4062 + if (isset($relatedContactKey)) { + if (!isset($params[$relatedContactKey])) { + $params[$relatedContactKey] = []; + } + + if (!isset($params[$relatedContactKey]['contact_type']) && !empty($relatedContactType)) { + $params[$relatedContactKey]['contact_type'] = $relatedContactType; + } + + if (isset($relatedContactLocationTypeID) && !empty($importedValue)) { + if (!empty($params[$relatedContactKey][$relatedContactFieldName]) && + !is_array($params[$relatedContactKey][$relatedContactFieldName]) + ) { + $params[$relatedContactKey][$relatedContactFieldName] = []; + } + $value = [ + $relatedContactFieldName => $importedValue, + 'location_type_id' => $relatedContactLocationTypeID, + ]; + + if (isset($relatedContactPhoneTypeID)) { + $value['phone_type_id'] = $relatedContactPhoneTypeID; + } + + // get IM service Provider type id for related contact + if (isset($relatedContactIMProviderID)) { + $value['provider_id'] = $relatedContactIMProviderID; + } + + $params[$relatedContactKey][$relatedContactFieldName][] = $value; + } + elseif (isset($relatedContactWebsiteTypeID)) { + $params[$relatedContactKey][$relatedContactFieldName][] = [ + 'url' => $importedValue, + 'website_type_id' => $relatedContactWebsiteTypeID, + ]; + } + elseif (empty($importedValue) && isset($relatedContactLocationTypeID)) { + if (empty($params[$relatedContactKey][$relatedContactFieldName])) { + $params[$relatedContactKey][$relatedContactFieldName] = []; + } + } + else { + $params[$relatedContactKey][$relatedContactFieldName] = $importedValue; + } + } + } + } + + return $params; + } + + /** + * @param string $name + * @param $title + * @param int $type + * @param string $headerPattern + * @param string $dataPattern + * @param bool $hasLocationType + */ + public function addField( + $name, $title, $type = CRM_Utils_Type::T_INT, + $headerPattern = '//', $dataPattern = '//', + $hasLocationType = FALSE + ) { + $this->_fields[$name] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); + if (empty($name)) { + $this->_fields['doNotImport'] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); + } + } + + /** + * Store parser values. + * + * @param CRM_Core_Session $store + * + * @param int $mode + */ + public function set($store, $mode = self::MODE_SUMMARY) { + // @todo - this params are being set here because they were / possibly still + // are in some places being accessed by forms later in the flow + // ie CRM_Contact_Import_Form_MapField, CRM_Contact_Import_Form_Preview + // or CRM_Contact_Import_Form_Summary using `$this->get() + // which was the old way of saving values submitted on this form such that + // the other forms could access them. Now they should use + // `getSubmittedValue` or simply not get them if the only + // reason is to pass to the Parser which can itself + // call 'getSubmittedValue' + // Once the mentioned forms no longer call $this->get() all this 'setting' + // is obsolete. + $store->set('rowCount', $this->_rowCount); + $store->set('fieldTypes', $this->getSelectTypes()); + + $store->set('columnCount', $this->_activeFieldCount); + + $store->set('totalRowCount', $this->_totalCount); + $store->set('validRowCount', $this->_validCount); + $store->set('invalidRowCount', $this->_invalidRowCount); + $store->set('unMatchCount', $this->_unMatchCount); + + switch ($this->_contactType) { + case 'Individual': + $store->set('contactType', CRM_Import_Parser::CONTACT_INDIVIDUAL); + break; + + case 'Household': + $store->set('contactType', CRM_Import_Parser::CONTACT_HOUSEHOLD); + break; + + case 'Organization': + $store->set('contactType', CRM_Import_Parser::CONTACT_ORGANIZATION); + } + + if (isset($this->_rows) && !empty($this->_rows)) { + $store->set('dataValues', $this->_rows); + } + + if ($this->_unMatchCount) { + $store->set('mismatchFileName', $this->_misMatchFilemName); + } + + if ($mode == self::MODE_IMPORT) { + $store->set('duplicateRowCount', $this->_duplicateCount); + $store->set('unparsedAddressCount', $this->_unparsedAddressCount); + if ($this->_duplicateCount) { + $store->set('duplicatesFileName', $this->_duplicateFileName); + } + } + } + + /** + * Export data to a CSV file. + * + * @param string $fileName + * @param array $header + * @param array $data + */ + public static function exportCSV($fileName, $header, $data) { + + if (file_exists($fileName) && !is_writable($fileName)) { + CRM_Core_Error::movedSiteError($fileName); + } + //hack to remove '_status', '_statusMsg' and '_id' from error file + $errorValues = []; + $dbRecordStatus = ['IMPORTED', 'ERROR', 'DUPLICATE', 'INVALID', 'NEW']; + foreach ($data as $rowCount => $rowValues) { + $count = 0; + foreach ($rowValues as $key => $val) { + if (in_array($val, $dbRecordStatus) && $count == (count($rowValues) - 3)) { + break; + } + $errorValues[$rowCount][$key] = $val; + $count++; + } + } + $data = $errorValues; + + $output = []; + $fd = fopen($fileName, 'w'); + + foreach ($header as $key => $value) { + $header[$key] = "\"$value\""; + } + $config = CRM_Core_Config::singleton(); + $output[] = implode($config->fieldSeparator, $header); + + foreach ($data as $datum) { + foreach ($datum as $key => $value) { + $datum[$key] = "\"$value\""; + } + $output[] = implode($config->fieldSeparator, $datum); + } + fwrite($fd, implode("\n", $output)); + fclose($fd); + } + + /** + * Set the import status for the given record. + * + * If this is a sql import then the sql table will be used and the update + * will not happen as the relevant fields don't exist in the table - hence + * the checks that statusField & primary key are set. + * + * @param int $id + * @param string $status + * @param string $message + */ + public function setImportStatus(int $id, string $status, string $message): void { + if ($this->_statusFieldName && $this->_primaryKeyName) { + CRM_Core_DAO::executeQuery(" + UPDATE $this->_tableName + SET $this->_statusFieldName = %1, + {$this->_statusFieldName}Msg = %2 + WHERE $this->_primaryKeyName = %3 + ", [ + 1 => [$status, 'String'], + 2 => [$message, 'String'], + 3 => [$id, 'Integer'], + ]); + } + } + + /** + * Format contact parameters. + * + * @todo this function needs re-writing & re-merging into the main function. + * + * Here be dragons. + * + * @param array $values + * @param array $params + * + * @return bool + */ + protected function formatContactParameters(&$values, &$params) { + // Crawl through the possible classes: + // Contact + // Individual + // Household + // Organization + // Location + // Address + // Email + // Phone + // IM + // Note + // Custom + + // first add core contact values since for other Civi modules they are not added + $contactFields = CRM_Contact_DAO_Contact::fields(); + _civicrm_api3_store_values($contactFields, $values, $params); + + if (isset($values['contact_type'])) { + // we're an individual/household/org property + + $fields[$values['contact_type']] = CRM_Contact_DAO_Contact::fields(); + + _civicrm_api3_store_values($fields[$values['contact_type']], $values, $params); + return TRUE; + } + + // Cache the various object fields + // @todo - remove this after confirming this is just a compilation of other-wise-cached fields. + static $fields = []; + + if (isset($values['individual_prefix'])) { + if (!empty($params['prefix_id'])) { + $prefixes = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'prefix_id'); + $params['prefix'] = $prefixes[$params['prefix_id']]; + } + else { + $params['prefix'] = $values['individual_prefix']; + } + return TRUE; + } + + if (isset($values['individual_suffix'])) { + if (!empty($params['suffix_id'])) { + $suffixes = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'suffix_id'); + $params['suffix'] = $suffixes[$params['suffix_id']]; + } + else { + $params['suffix'] = $values['individual_suffix']; + } + return TRUE; + } + + // CRM-4575 + if (isset($values['email_greeting'])) { + if (!empty($params['email_greeting_id'])) { + $emailGreetingFilter = [ + 'contact_type' => $params['contact_type'] ?? NULL, + 'greeting_type' => 'email_greeting', + ]; + $emailGreetings = CRM_Core_PseudoConstant::greeting($emailGreetingFilter); + $params['email_greeting'] = $emailGreetings[$params['email_greeting_id']]; + } + else { + $params['email_greeting'] = $values['email_greeting']; + } + + return TRUE; + } + + if (isset($values['postal_greeting'])) { + if (!empty($params['postal_greeting_id'])) { + $postalGreetingFilter = [ + 'contact_type' => $params['contact_type'] ?? NULL, + 'greeting_type' => 'postal_greeting', + ]; + $postalGreetings = CRM_Core_PseudoConstant::greeting($postalGreetingFilter); + $params['postal_greeting'] = $postalGreetings[$params['postal_greeting_id']]; + } + else { + $params['postal_greeting'] = $values['postal_greeting']; + } + return TRUE; + } + + if (isset($values['addressee'])) { + $params['addressee'] = $values['addressee']; + return TRUE; + } + + if (isset($values['gender'])) { + if (!empty($params['gender_id'])) { + $genders = CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'gender_id'); + $params['gender'] = $genders[$params['gender_id']]; + } + else { + $params['gender'] = $values['gender']; + } + return TRUE; + } + + if (!empty($values['preferred_communication_method'])) { + $comm = []; + $pcm = array_change_key_case(array_flip(CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', 'preferred_communication_method')), CASE_LOWER); + + $preffComm = explode(',', $values['preferred_communication_method']); + foreach ($preffComm as $v) { + $v = strtolower(trim($v)); + if (array_key_exists($v, $pcm)) { + $comm[$pcm[$v]] = 1; + } + } + + $params['preferred_communication_method'] = $comm; + return TRUE; + } + + // format the website params. + if (!empty($values['url'])) { + static $websiteFields; + if (!is_array($websiteFields)) { + $websiteFields = CRM_Core_DAO_Website::fields(); + } + if (!array_key_exists('website', $params) || + !is_array($params['website']) + ) { + $params['website'] = []; + } + + $websiteCount = count($params['website']); + _civicrm_api3_store_values($websiteFields, $values, + $params['website'][++$websiteCount] + ); + + return TRUE; + } + + if (isset($values['note'])) { + // add a note field + if (!isset($params['note'])) { + $params['note'] = []; + } + $noteBlock = count($params['note']) + 1; + + $params['note'][$noteBlock] = []; + if (!isset($fields['Note'])) { + $fields['Note'] = CRM_Core_DAO_Note::fields(); + } + + // get the current logged in civicrm user + $session = CRM_Core_Session::singleton(); + $userID = $session->get('userID'); + + if ($userID) { + $values['contact_id'] = $userID; + } + + _civicrm_api3_store_values($fields['Note'], $values, $params['note'][$noteBlock]); + + return TRUE; + } + + // Check for custom field values + $customFields = CRM_Core_BAO_CustomField::getFields(CRM_Utils_Array::value('contact_type', $values), + FALSE, FALSE, NULL, NULL, FALSE, FALSE, FALSE + ); + + foreach ($values as $key => $value) { + if ($customFieldID = CRM_Core_BAO_CustomField::getKeyID($key)) { + // check if it's a valid custom field id + + if (!array_key_exists($customFieldID, $customFields)) { + return civicrm_api3_create_error('Invalid custom field ID'); + } + else { + $params[$key] = $value; + } + } + } + return TRUE; + } + + /** + * Format location block ready for importing. + * + * There is some test coverage for this in CRM_Contact_Import_Parser_ContactTest + * e.g. testImportPrimaryAddress. + * + * @param array $values + * @param array $params + * + * @return bool + */ + protected function formatLocationBlock(&$values, &$params) { + $blockTypes = [ + 'phone' => 'Phone', + 'email' => 'Email', + 'im' => 'IM', + 'openid' => 'OpenID', + 'phone_ext' => 'Phone', + ]; + foreach ($blockTypes as $blockFieldName => $block) { + if (!array_key_exists($blockFieldName, $values)) { + continue; + } + $blockIndex = $values['location_type_id'] . (!empty($values['phone_type_id']) ? '_' . $values['phone_type_id'] : ''); + + // block present in value array. + if (!array_key_exists($blockFieldName, $params) || !is_array($params[$blockFieldName])) { + $params[$blockFieldName] = []; + } + + $fields[$block] = $this->getMetadataForEntity($block); + + // copy value to dao field name. + if ($blockFieldName == 'im') { + $values['name'] = $values[$blockFieldName]; + } + + _civicrm_api3_store_values($fields[$block], $values, + $params[$blockFieldName][$blockIndex] + ); + + $this->fillPrimary($params[$blockFieldName][$blockIndex], $values, $block, CRM_Utils_Array::value('id', $params)); + + if (empty($params['id']) && (count($params[$blockFieldName]) == 1)) { + $params[$blockFieldName][$blockIndex]['is_primary'] = TRUE; + } + + // we only process single block at a time. + return TRUE; + } + + // handle address fields. + if (!array_key_exists('address', $params) || !is_array($params['address'])) { + $params['address'] = []; + } + + // Note: we doing multiple value formatting here for address custom fields, plus putting into right format. + // The actual formatting (like date, country ..etc) for address custom fields is taken care of while saving + // the address in CRM_Core_BAO_Address::create method + if (!empty($values['location_type_id'])) { + static $customFields = []; + if (empty($customFields)) { + $customFields = CRM_Core_BAO_CustomField::getFields('Address'); + } + // make a copy of values, as we going to make changes + $newValues = $values; + foreach ($values as $key => $val) { + $customFieldID = CRM_Core_BAO_CustomField::getKeyID($key); + if ($customFieldID && array_key_exists($customFieldID, $customFields)) { + + $htmlType = $customFields[$customFieldID]['html_type'] ?? NULL; + if (CRM_Core_BAO_CustomField::isSerialized($customFields[$customFieldID]) && $val) { + $mulValues = explode(',', $val); + $customOption = CRM_Core_BAO_CustomOption::getCustomOption($customFieldID, TRUE); + $newValues[$key] = []; + foreach ($mulValues as $v1) { + foreach ($customOption as $v2) { + if ((strtolower($v2['label']) == strtolower(trim($v1))) || + (strtolower($v2['value']) == strtolower(trim($v1))) + ) { + if ($htmlType == 'CheckBox') { + $newValues[$key][$v2['value']] = 1; + } + else { + $newValues[$key][] = $v2['value']; + } + } + } + } + } + } + } + // consider new values + $values = $newValues; + } + + $fields['Address'] = $this->getMetadataForEntity('Address'); + // @todo this is kinda replicated below.... + _civicrm_api3_store_values($fields['Address'], $values, $params['address'][$values['location_type_id']]); + + $addressFields = [ + 'county', + 'country', + 'state_province', + 'supplemental_address_1', + 'supplemental_address_2', + 'supplemental_address_3', + 'StateProvince.name', + ]; + foreach (array_keys($customFields) as $customFieldID) { + $addressFields[] = 'custom_' . $customFieldID; + } + + foreach ($addressFields as $field) { + if (array_key_exists($field, $values)) { + if (!array_key_exists('address', $params)) { + $params['address'] = []; + } + $params['address'][$values['location_type_id']][$field] = $values[$field]; + } + } + + $this->fillPrimary($params['address'][$values['location_type_id']], $values, 'address', CRM_Utils_Array::value('id', $params)); + return TRUE; + } + + /** + * Get the field metadata for the relevant entity. + * + * @param string $entity + * + * @return array + */ + protected function getMetadataForEntity($entity) { + if (!isset($this->fieldMetadata[$entity])) { + $className = "CRM_Core_DAO_$entity"; + $this->fieldMetadata[$entity] = $className::fields(); + } + return $this->fieldMetadata[$entity]; + } + + /** + * Fill in the primary location. + * + * If the contact has a primary address we update it. Otherwise + * we add an address of the default location type. + * + * @param array $params + * Address block parameters + * @param array $values + * Input values + * @param string $entity + * - address, email, phone + * @param int|null $contactID + * + * @throws \CiviCRM_API3_Exception + */ + protected function fillPrimary(&$params, $values, $entity, $contactID) { + if ($values['location_type_id'] === 'Primary') { + if ($contactID) { + $primary = civicrm_api3($entity, 'get', [ + 'return' => 'location_type_id', + 'contact_id' => $contactID, + 'is_primary' => 1, + 'sequential' => 1, + ]); + } + $defaultLocationType = CRM_Core_BAO_LocationType::getDefault(); + $params['location_type_id'] = (int) (isset($primary) && $primary['count']) ? $primary['values'][0]['location_type_id'] : $defaultLocationType->id; + $params['is_primary'] = 1; + } + } + + /** + * Get the civicrm_mapping_field appropriate layout for the mapper input. + * + * The input looks something like ['street_address', 1] + * and would be mapped to ['name' => 'street_address', 'location_type_id' => + * 1] + * + * @param array $fieldMapping + * @param int $mappingID + * @param int $columnNumber + * + * @return array + * @throws \API_Exception + */ + public function getMappingFieldFromMapperInput(array $fieldMapping, int $mappingID, int $columnNumber): array { + $isRelationshipField = preg_match('/\d*_a_b|b_a$/', $fieldMapping[0]); + $fieldName = $isRelationshipField ? $fieldMapping[1] : $fieldMapping[0]; + $locationTypeID = NULL; + $possibleLocationField = $isRelationshipField ? 2 : 1; + if ($fieldName !== 'url' && is_numeric($fieldMapping[$possibleLocationField] ?? NULL)) { + $locationTypeID = $fieldMapping[$possibleLocationField]; + } + return [ + 'name' => $fieldName, + 'mapping_id' => $mappingID, + 'relationship_type_id' => $isRelationshipField ? substr($fieldMapping[0], 0, -4) : NULL, + 'relationship_direction' => $isRelationshipField ? substr($fieldMapping[0], -3) : NULL, + 'column_number' => $columnNumber, + 'contact_type' => $this->getContactType(), + 'website_type_id' => $fieldName !== 'url' ? NULL : ($isRelationshipField ? $fieldMapping[2] : $fieldMapping[1]), + 'phone_type_id' => $fieldName !== 'phone' ? NULL : ($isRelationshipField ? $fieldMapping[3] : $fieldMapping[2]), + 'im_provider_id' => $fieldName !== 'im' ? NULL : ($isRelationshipField ? $fieldMapping[3] : $fieldMapping[2]), + 'location_type_id' => $locationTypeID, + ]; + } + + /** + * @param array $mappedField + * Field detail as would be saved in field_mapping table + * or as returned from getMappingFieldFromMapperInput + * + * @return string + * @throws \API_Exception + */ + public function getMappedFieldLabel(array $mappedField): string { + $this->setFieldMetadata(); + $title = []; + if ($mappedField['relationship_type_id']) { + $title[] = $this->getRelationshipLabel($mappedField['relationship_type_id'], $mappedField['relationship_direction']); + } + $title[] = $this->getImportableFieldsMetadata()[$mappedField['name']]['title']; + if ($mappedField['location_type_id']) { + $title[] = CRM_Core_PseudoConstant::getLabel('CRM_Core_BAO_Address', 'location_type_id', $mappedField['location_type_id']); + } + if ($mappedField['website_type_id']) { + $title[] = CRM_Core_PseudoConstant::getLabel('CRM_Core_BAO_Website', 'website_type_id', $mappedField['website_type_id']); + } + if ($mappedField['phone_type_id']) { + $title[] = CRM_Core_PseudoConstant::getLabel('CRM_Core_BAO_Phone', 'phone_type_id', $mappedField['phone_type_id']); + } + if ($mappedField['im_provider_id']) { + $title[] = CRM_Core_PseudoConstant::getLabel('CRM_Core_BAO_IM', 'provider_id', $mappedField['provider_id']); + } + return implode(' - ', $title); + } + + /** + * Get the relevant label for the relationship. + * + * @param int $id + * @param string $direction + * + * @return string + * @throws \API_Exception + */ + protected function getRelationshipLabel(int $id, string $direction): string { + if (empty($this->relationshipLabels[$id . $direction])) { + $this->relationshipLabels[$id . $direction] = + $fieldName = 'label_' . $direction; + $this->relationshipLabels[$id . $direction] = (string) RelationshipType::get(FALSE) + ->addWhere('id', '=', $id) + ->addSelect($fieldName)->execute()->first()[$fieldName]; + } + return $this->relationshipLabels[$id . $direction]; + } + + /** + * Transform the input parameters into the form handled by the input routine. + * + * @param array $values + * Input parameters as they come in from the datasource + * eg. ['Bob', 'Smith', 'bob@example.org', '123-456'] + * + * @return array + * Parameters mapped to CiviCRM fields based on the mapping + * and specified contact type. eg. + * [ + * 'contact_type' => 'Individual', + * 'first_name' => 'Bob', + * 'last_name' => 'Smith', + * 'phone' => ['phone' => '123', 'location_type_id' => 1, 'phone_type_id' => 1], + * '5_a_b' => ['contact_type' => 'Organization', 'url' => ['url' => 'https://example.org', 'website_type_id' => 1]] + * 'im' => ['im' => 'my-handle', 'location_type_id' => 1, 'provider_id' => 1], + * + * @throws \API_Exception + */ + public function getMappedRow(array $values): array { + $this->setActiveFieldValues($values); + $params = $this->getActiveFieldParams(); + $params['contact_type'] = $this->getContactType(); + return $params; + } + + /** + * Is the job complete. + * + * This function transitionally accesses the table from the userJob + * directly - but the function should be moved to the dataSource class. + * + * @throws \API_Exception + */ + public function isComplete() { + $tableName = $this->getUserJob()['metadata']['DataSource']['table_name']; + return (bool) CRM_Core_DAO::singleValueQuery("SELECT count(*) FROM $tableName WHERE _status = 'NEW' LIMIT 1"); + } + + /** + * Validate the import values. + * + * The values array represents a row in the datasource. + * + * @param array $values + */ + public function validateValues(array $values): void { + $errorMessage = NULL; + $errorRequired = FALSE; + $params = $this->getMappedRow($values); + switch ($this->_contactType) { + case 'Individual': + $missingNames = []; + if ($this->_firstNameIndex < 0 || empty($values[$this->_firstNameIndex])) { + $errorRequired = TRUE; + $missingNames[] = ts('First Name'); + } + if ($this->_lastNameIndex < 0 || empty($values[$this->_lastNameIndex])) { + $errorRequired = TRUE; + $missingNames[] = ts('Last Name'); + } + if ($errorRequired) { + $and = ' ' . ts('and') . ' '; + $errorMessage = ts('Missing required fields:') . ' ' . implode($and, $missingNames); + } + break; + + case 'Household': + if ($this->_householdNameIndex < 0 || empty($values[$this->_householdNameIndex])) { + $errorRequired = TRUE; + $errorMessage = ts('Missing required fields:') . ' ' . ts('Household Name'); + } + break; + + case 'Organization': + if ($this->_organizationNameIndex < 0 || empty($values[$this->_organizationNameIndex])) { + $errorRequired = TRUE; + $errorMessage = ts('Missing required fields:') . ' ' . ts('Organization Name'); + } + break; + } + + if ($this->_emailIndex >= 0) { + /* If we don't have the required fields, bail */ + + if ($this->_contactType === 'Individual' && !$this->_updateWithId) { + if ($errorRequired && empty($values[$this->_emailIndex])) { + if ($errorMessage) { + $errorMessage .= ' ' . ts('OR') . ' ' . ts('Email Address'); + } + else { + $errorMessage = ts('Missing required field:') . ' ' . ts('Email Address'); + } + throw new CRM_Core_Exception($errorMessage); + } + } + + $email = $values[$this->_emailIndex] ?? NULL; + if ($email) { + if (!CRM_Utils_Rule::email($email)) { + throw new CRM_Core_Exception($errorMessage); + } + } + } + elseif ($errorRequired && !$this->_updateWithId) { + if ($errorMessage) { + $errorMessage .= ' ' . ts('OR') . ' ' . ts('Email Address'); + } + else { + $errorMessage = ts('Missing required field:') . ' ' . ts('Email Address'); + } + throw new CRM_Core_Exception($errorMessage); + } + + //check for duplicate external Identifier + $externalID = $values[$this->_externalIdentifierIndex] ?? NULL; + if ($externalID) { + /* If it's a dupe,external Identifier */ + + if ($externalDupe = CRM_Utils_Array::value($externalID, $this->_allExternalIdentifiers)) { + $errorMessage = ts('External ID conflicts with record %1', [1 => $externalDupe]); + throw new CRM_Core_Exception($errorMessage); + } + //otherwise, count it and move on + $this->_allExternalIdentifiers[$externalID] = $this->_lineCount; + } + + //date-format part ends + + $errorMessage = NULL; + + //CRM-5125 + //add custom fields for contact sub type + $csType = NULL; + if (!empty($this->_contactSubType)) { + $csType = $this->_contactSubType; + } + + //checking error in custom data + $this->isErrorInCustomData($params, $errorMessage, $csType, $this->_relationships); + + //checking error in core data + $this->isErrorInCoreData($params, $errorMessage); + if ($errorMessage) { + $tempMsg = "Invalid value for field(s) : $errorMessage"; + throw new CRM_Core_Exception($tempMsg); + } + } + } diff --git a/civicrm/CRM/Contact/Page/View.php b/civicrm/CRM/Contact/Page/View.php index 180a528c9c..3069497500 100644 --- a/civicrm/CRM/Contact/Page/View.php +++ b/civicrm/CRM/Contact/Page/View.php @@ -207,6 +207,9 @@ class CRM_Contact_Page_View extends CRM_Core_Page { // Add links for actions menu self::addUrls($this, $this->_contactId); $this->assign('groupOrganizationUrl', $this->getGroupOrganizationUrl($contactType)); + + // Assign deleteURL variable, used as part of ContactImage.tpl + self::$_template->ensureVariablesAreAssigned(['deleteURL']); } /** diff --git a/civicrm/CRM/Contact/Page/View/Summary.php b/civicrm/CRM/Contact/Page/View/Summary.php index d49f41c691..85b388a1b8 100644 --- a/civicrm/CRM/Contact/Page/View/Summary.php +++ b/civicrm/CRM/Contact/Page/View/Summary.php @@ -104,7 +104,9 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { /** * View summary details of a contact. * + * @throws \API_Exception * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ public function view() { // Add js for tabs, in-place editing, and jstree for tags @@ -122,7 +124,6 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { $session->pushUserContext($url); $this->assignFieldMetadataToTemplate('Contact'); - $params = []; $defaults = [ // Set empty default values for these - they will be overwritten when the contact is // loaded in CRM_Contact_BAO_Contact::retrieve if there are real values @@ -144,19 +145,16 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { // for Demographics.tpl 'age' => ['y' => '', 'm' => ''], 'birth_date' => '', - // for Website.tpl (the others don't seem to enotice for some reason). - 'website' => [], ]; - $params['contact_id'] = $this->_contactId; - - CRM_Contact_BAO_Contact::getValues(array_merge(['id' => $this->_contactId], $params), $defaults); - $defaults['im'] = CRM_Core_BAO_IM::getValues(['contact_id' => $params['contact_id']]); - $defaults['email'] = CRM_Core_BAO_Email::getValues(['contact_id' => $params['contact_id']]); - $defaults['openid'] = CRM_Core_BAO_OpenID::getValues(['contact_id' => $params['contact_id']]); - $defaults['phone'] = CRM_Core_BAO_Phone::getValues(['contact_id' => $params['contact_id']]); - $defaults['address'] = CRM_Core_BAO_Address::getValues(['contact_id' => $params['contact_id']], TRUE); - CRM_Core_BAO_Website::getValues($params, $defaults); + CRM_Contact_BAO_Contact::getValues(['id' => $this->_contactId], $defaults); + $defaults['im'] = $this->getLocationValues($this->_contactId, 'IM'); + $defaults['email'] = $this->getLocationValues($this->_contactId, 'Email'); + $defaults['openid'] = $this->getLocationValues($this->_contactId, 'OpenID'); + $defaults['phone'] = $this->getLocationValues($this->_contactId, 'Phone'); + // This microformat magic is still required... + $defaults['address'] = CRM_Core_BAO_Address::getValues(['contact_id' => $this->_contactId], TRUE); + $defaults['website'] = $this->getLocationValues($this->_contactId, 'Website'); // Copy employer fields to the current_employer keys. if (($defaults['contact_type'] === 'Individual') && !empty($defaults['employer_id']) && !empty($defaults['organization_name'])) { $defaults['current_employer'] = $defaults['organization_name']; @@ -167,57 +165,23 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { $mailingBackend = Civi::settings()->get('mailing_backend'); $this->assign('mailingOutboundOption', $mailingBackend['outBound_option']); - $communicationType = [ - 'phone' => [ - 'type' => 'phoneType', - 'id' => 'phone_type', - 'daoName' => 'CRM_Core_DAO_Phone', - 'fieldName' => 'phone_type_id', - ], - 'im' => [ - 'type' => 'IMProvider', - 'id' => 'provider', - 'daoName' => 'CRM_Core_DAO_IM', - 'fieldName' => 'provider_id', - ], - 'website' => [ - 'type' => 'websiteType', - 'id' => 'website_type', - 'daoName' => 'CRM_Core_DAO_Website', - 'fieldName' => 'website_type_id', - ], - 'address' => ['skip' => TRUE, 'customData' => 1], - 'email' => ['skip' => TRUE], - 'openid' => ['skip' => TRUE], - ]; + if (!empty($defaults['address'])) { + foreach ($defaults['address'] as & $val) { + CRM_Utils_Array::lookupValue($val, 'location_type', CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id', ['labelColumn' => 'display_name']), FALSE); + } - foreach ($communicationType as $key => $value) { - if (!empty($defaults[$key])) { - foreach ($defaults[$key] as & $val) { - CRM_Utils_Array::lookupValue($val, 'location_type', CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id', ['labelColumn' => 'display_name']), FALSE); - if (empty($value['skip'])) { - $daoName = $value['daoName']; - $pseudoConst = $daoName::buildOptions($value['fieldName'], 'get'); - CRM_Utils_Array::lookupValue($val, $value['id'], $pseudoConst, FALSE); - } - } - if (isset($value['customData'])) { - foreach ($defaults[$key] as $blockId => $blockVal) { - $idValue = $blockVal['id']; - if ($key == 'address') { - if (!empty($blockVal['master_id'])) { - $idValue = $blockVal['master_id']; - } - } - $groupTree = CRM_Core_BAO_CustomGroup::getTree(ucfirst($key), NULL, $idValue, NULL, [], - NULL, TRUE, NULL, FALSE, CRM_Core_Permission::VIEW); - // we setting the prefix to dnc_ below so that we don't overwrite smarty's grouptree var. - $defaults[$key][$blockId]['custom'] = CRM_Core_BAO_CustomGroup::buildCustomDataView($this, $groupTree, FALSE, NULL, "dnc_"); - } - // reset template variable since that won't be of any use, and could be misleading - $this->assign("dnc_viewCustomData", NULL); + foreach ($defaults['address'] as $blockId => $blockVal) { + $idValue = $blockVal['id']; + if (!empty($blockVal['master_id'])) { + $idValue = $blockVal['master_id']; } + $groupTree = CRM_Core_BAO_CustomGroup::getTree(ucfirst('address'), NULL, $idValue, NULL, [], + NULL, TRUE, NULL, FALSE, CRM_Core_Permission::VIEW); + // we setting the prefix to dnc_ below so that we don't overwrite smarty's grouptree var. + $defaults['address'][$blockId]['custom'] = CRM_Core_BAO_CustomGroup::buildCustomDataView($this, $groupTree, FALSE, NULL, "dnc_"); } + // reset template variable since that won't be of any use, and could be misleading + $this->assign("dnc_viewCustomData", NULL); } $defaults['gender_display'] = CRM_Core_PseudoConstant::getLabel('CRM_Contact_DAO_Contact', 'gender_id', $defaults['gender_id'] ?? NULL); @@ -478,4 +442,45 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { return $allTabs; } + /** + * Get the values for the location entity for this contact. + * + * The form layer requires that we put the label values into keys too. + * Unfortunately smarty can't handle {$location_type_id:label} - ie + * the colon - so we need to map the value over in the php layer. + * + * @param int $contact_id + * @param string $entity + * + * @return array + * @throws \API_Exception + */ + protected function getLocationValues(int $contact_id, string $entity): array { + $fieldMap = [ + 'location_type_id' => 'location_type', + 'provider_id' => 'provider', + 'phone_type_id' => 'phone_type', + 'website_type_id' => 'website_type', + ]; + $optionFields = array_keys((array) civicrm_api4($entity, 'getFields', [ + 'where' => [['options', 'IS NOT EMPTY'], ['name', 'IN', array_keys($fieldMap)]], + ], 'name')); + $select = ['*', 'custom.*']; + foreach ($optionFields as $optionField) { + $select[] = $optionField . ':label'; + } + $locationEntities = (array) civicrm_api4($entity, 'get', [ + 'select' => $select, + 'where' => [['contact_id', '=', $contact_id]], + 'orderBy' => $entity === 'Website' ? [] : ['is_primary' => 'DESC'], + ], 'id'); + + foreach ($locationEntities as $index => $locationEntity) { + foreach ($optionFields as $optionField) { + $locationEntities[$index][$fieldMap[$optionField]] = $locationEntity[$optionField . ':label']; + } + } + return $locationEntities; + } + } diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 7be657231b..0250cb4339 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -205,7 +205,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution im $contribution->trxn_result_code = $params['trxn_result_code'] ?? NULL; $contribution->payment_processor = $params['payment_processor'] ?? NULL; - //add Account details + // Loading contribution used to be required for recordFinancialAccounts. $params['contribution'] = $contribution; if (empty($params['is_post_payment_create'])) { // If this is being called from the Payment.create api/ BAO then that Entity @@ -215,7 +215,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution im // Note that leveraging this parameter for any other code flow is not supported and // is likely to break in future and / or cause serious problems in your data. // https://github.com/civicrm/civicrm-core/pull/14673 - self::recordFinancialAccounts($params); + self::recordFinancialAccounts($params, $contribution); } if (self::isUpdateToRecurringContribution($params)) { @@ -3073,11 +3073,11 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac * * @param array $params * Contribution object, line item array and params for trxn. - * + * @param \CRM_Contribute_DAO_Contribution $contribution * * @return null|\CRM_Core_BAO_FinancialTrxn */ - public static function recordFinancialAccounts(&$params) { + public static function recordFinancialAccounts(&$params, CRM_Contribute_DAO_Contribution $contribution) { $skipRecords = $return = FALSE; $isUpdate = !empty($params['prevContribution']); @@ -3097,7 +3097,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $entityTable = 'civicrm_membership'; } else { - $entityId = $params['contribution']->id; + $entityId = $contribution->id; $entityTable = 'civicrm_contribution'; } @@ -3154,16 +3154,24 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac if (!isset($totalAmount) && !empty($params['prevContribution'])) { $totalAmount = $params['total_amount'] = $params['prevContribution']->total_amount; } + if (empty($contribution->currency)) { + $contribution->find(TRUE); + } //build financial transaction params $trxnParams = [ - 'contribution_id' => $params['contribution']->id, + 'contribution_id' => $contribution->id, 'to_financial_account_id' => $params['to_financial_account_id'], - 'trxn_date' => !empty($params['contribution']->receive_date) ? $params['contribution']->receive_date : date('YmdHis'), + // If receive_date is not deliberately passed in we assume 'now'. + // test testCompleteTransactionWithReceiptDateSet ensures we don't + // default to loading the stored contribution receive_date. + // Note that as we deprecate completetransaction in favour + // of Payment.create handling of trxn_date will tighten up. + 'trxn_date' => $params['receive_date'] ?? date('YmdHis'), 'total_amount' => $totalAmount, 'fee_amount' => $params['fee_amount'] ?? NULL, 'net_amount' => CRM_Utils_Array::value('net_amount', $params, $totalAmount), - 'currency' => $params['contribution']->currency, - 'trxn_id' => $params['contribution']->trxn_id, + 'currency' => $contribution->currency, + 'trxn_id' => $contribution->trxn_id, // @todo - this is getting the status id from the contribution - that is BAD - ie the contribution could be partially // paid but each payment is completed. The work around is to pass in the status_id in the trxn_params but // this should really default to completed (after discussion). diff --git a/civicrm/CRM/Contribute/BAO/ContributionRecur.php b/civicrm/CRM/Contribute/BAO/ContributionRecur.php index cc23834d86..e68e08d179 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/BAO/ContributionRecur.php @@ -995,11 +995,12 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) ->execute() ->first(); - if ($contribution->total_amount === NULL) { + if ($contribution->total_amount === NULL || $contribution->currency === NULL) { + // The contribution has not been fully loaded, so fetch a full copy now. $contribution->find(TRUE); } - if (!CRM_Utils_Money::equals($contributionRecur['amount'], $contribution->total_amount, $contribution->currency)) { + if ($contribution->currency !== $contributionRecur['currency'] || !CRM_Utils_Money::equals($contributionRecur['amount'], $contribution->total_amount, $contribution->currency)) { ContributionRecur::update(FALSE) ->addValue('amount', $contribution->total_amount) ->addValue('currency', $contribution->currency) diff --git a/civicrm/CRM/Contribute/Form/CancelSubscription.php b/civicrm/CRM/Contribute/Form/CancelSubscription.php index 4bcf840841..529de295e0 100644 --- a/civicrm/CRM/Contribute/Form/CancelSubscription.php +++ b/civicrm/CRM/Contribute/Form/CancelSubscription.php @@ -100,8 +100,16 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib $this->setTitle($this->_mid ? ts('Cancel Auto-renewal') : ts('Cancel Recurring Contribution')); $this->assign('mode', $this->_mode); + if ($this->isSelfService() || !$this->_paymentProcessorObj->supports('cancelRecurring')) { + // If we are self service (contact is cancelling for themselves via a cancel link) + // or the processor does not support cancellation then remove the fields + // specifying whether to notify the processor. + unset($this->entityFields['send_cancel_request']); + } if ($this->isSelfService()) { - unset($this->entityFields['send_cancel_request'], $this->entityFields['is_notify']); + // Arguably the is_notify field should be removed in self-service mode. + // Historically this has been the case... + unset($this->entityFields['is_notify']); } if ($this->getSubscriptionDetails()->contact_id) { diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php b/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php index 6e0341dcb8..b6991b9fdf 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php @@ -252,11 +252,10 @@ class CRM_Contribute_Form_ContributionPage_Settings extends CRM_Contribute_Form_ } } - //CRM-11494 - $start = CRM_Utils_Date::processDate($values['start_date']); - $end = CRM_Utils_Date::processDate($values['end_date']); - if (($end < $start) && ($end != 0)) { - $errors['end_date'] = ts('End date should be after Start date.'); + // Validate start/end date inputs + $validateDates = \CRM_Utils_Date::validateStartEndDatepickerInputs('start_date', $values['start_date'], 'end_date', $values['end_date']); + if ($validateDates !== TRUE) { + $errors[$validateDates['key']] = $validateDates['message']; } if (!empty($self->_values['payment_processor']) && $financialType = CRM_Contribute_BAO_Contribution::validateFinancialType($values['financial_type_id'])) { diff --git a/civicrm/CRM/Contribute/Import/Form/MapField.php b/civicrm/CRM/Contribute/Import/Form/MapField.php index 8b20bb9793..10c4144cb1 100644 --- a/civicrm/CRM/Contribute/Import/Form/MapField.php +++ b/civicrm/CRM/Contribute/Import/Form/MapField.php @@ -144,7 +144,8 @@ class CRM_Contribute_Import_Form_MapField extends CRM_Import_Form_MapField { * @throws \CiviCRM_API3_Exception */ public function buildQuickForm() { - $savedMappingID = $this->get('savedMapping'); + $savedMappingID = $this->getSubmittedValue('savedMapping'); + $this->buildSavedMappingFields($savedMappingID); $this->addFormRule([ @@ -423,10 +424,6 @@ class CRM_Contribute_Import_Form_MapField extends CRM_Import_Form_MapField { return; } - $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - $mapper = $mapperKeys = $mapperKeysMain = $mapperSoftCredit = $softCreditFields = $mapperPhoneType = $mapperSoftCreditType = []; $mapperKeys = $this->controller->exportValue($this->_name, 'mapper'); @@ -511,8 +508,13 @@ class CRM_Contribute_Import_Form_MapField extends CRM_Import_Form_MapField { } $parser = new CRM_Contribute_Import_Parser_Contribution($mapperKeysMain, $mapperSoftCredit, $mapperPhoneType); - $parser->run($fileName, $separator, $mapper, $skipColumnHeader, - CRM_Import_Parser::MODE_PREVIEW, $this->get('contactType') + $parser->run( + $this->getSubmittedValue('uploadFile'), + $this->getSubmittedValue('fieldSeparator'), + $mapper, + $this->getSubmittedValue('skipColumnHeader'), + CRM_Import_Parser::MODE_PREVIEW, + $this->get('contactType') ); // add all the necessary variables to the form diff --git a/civicrm/CRM/Contribute/Import/Form/Preview.php b/civicrm/CRM/Contribute/Import/Form/Preview.php index a1849368a6..6640b01d19 100644 --- a/civicrm/CRM/Contribute/Import/Form/Preview.php +++ b/civicrm/CRM/Contribute/Import/Form/Preview.php @@ -24,15 +24,13 @@ class CRM_Contribute_Import_Form_Preview extends CRM_Import_Form_Preview { * Set variables up before form is built. */ public function preProcess() { - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - + parent::preProcess(); //get the data from the session $dataValues = $this->get('dataValues'); $mapper = $this->get('mapper'); $softCreditFields = $this->get('softCreditFields'); $mapperSoftCreditType = $this->get('mapperSoftCreditType'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $mismatchCount = $this->get('unMatchCount'); //get the mapping name displayed if the mappingId is set @@ -44,24 +42,11 @@ class CRM_Contribute_Import_Form_Preview extends CRM_Import_Form_Preview { } $this->assign('savedMappingName', $mappingId ? $mapDAO->name : NULL); - if ($skipColumnHeader) { - $this->assign('skipColumnHeader', $skipColumnHeader); - $this->assign('rowDisplayCount', 3); - } - else { - $this->assign('rowDisplayCount', 2); - } - if ($invalidRowCount) { $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Contribute_Import_Parser_Contribution'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } - if ($conflictRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Contribute_Import_Parser_Contribution'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - } - if ($mismatchCount) { $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contribute_Import_Parser_Contribution'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); @@ -76,9 +61,7 @@ class CRM_Contribute_Import_Form_Preview extends CRM_Import_Form_Preview { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', 'downloadErrorRecordsUrl', - 'downloadConflictRecordsUrl', 'downloadMismatchRecordsUrl', ]; $this->setStatusUrl(); @@ -93,10 +76,7 @@ class CRM_Contribute_Import_Form_Preview extends CRM_Import_Form_Preview { */ public function postProcess() { $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $onDuplicate = $this->get('onDuplicate'); $mapperSoftCreditType = $this->get('mapperSoftCreditType'); @@ -127,9 +107,11 @@ class CRM_Contribute_Import_Form_Preview extends CRM_Import_Form_Preview { } $mapperFields[] = implode(' - ', $header); } - $parser->run($fileName, $separator, + $parser->run( + $this->getSubmittedValue('uploadFile'), + $this->getSubmittedValue('fieldSeparator'), $mapperFields, - $skipColumnHeader, + $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_IMPORT, $this->get('contactType'), $onDuplicate, @@ -161,8 +143,6 @@ class CRM_Contribute_Import_Form_Preview extends CRM_Import_Form_Preview { $this->set('errorFile', $errorFile); $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Contribute_Import_Parser_Contribution'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Contribute_Import_Parser_Contribution'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Contribute_Import_Parser_Contribution'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } diff --git a/civicrm/CRM/Contribute/Import/Form/Summary.php b/civicrm/CRM/Contribute/Import/Form/Summary.php index 6714befabc..b1fc36d05c 100644 --- a/civicrm/CRM/Contribute/Import/Form/Summary.php +++ b/civicrm/CRM/Contribute/Import/Form/Summary.php @@ -45,7 +45,6 @@ class CRM_Contribute_Import_Form_Summary extends CRM_Import_Form_Summary { $this->set('downloadPledgePaymentErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } $validPledgePaymentRowCount = $this->get('validPledgePaymentRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $duplicateRowCount = $this->get('duplicateRowCount'); $onDuplicate = $this->get('onDuplicate'); $mismatchCount = $this->get('unMatchCount'); @@ -80,7 +79,7 @@ class CRM_Contribute_Import_Form_Summary extends CRM_Import_Form_Summary { /* only subtract dupes from successful import if we're skipping */ $this->set('validRowCount', $totalRowCount - $invalidRowCount - - $conflictRowCount - $duplicateRowCount - $mismatchCount - $invalidSoftCreditRowCount - $invalidPledgePaymentRowCount + $duplicateRowCount - $mismatchCount - $invalidSoftCreditRowCount - $invalidPledgePaymentRowCount ); } $this->assign('dupeActionString', $dupeActionString); @@ -91,8 +90,6 @@ class CRM_Contribute_Import_Form_Summary extends CRM_Import_Form_Summary { 'invalidRowCount', 'validSoftCreditRowCount', 'invalidSoftCreditRowCount', - 'conflictRowCount', - 'downloadConflictRecordsUrl', 'downloadErrorRecordsUrl', 'duplicateRowCount', 'downloadDuplicateRecordsUrl', diff --git a/civicrm/CRM/Contribute/Import/Parser/Contribution.php b/civicrm/CRM/Contribute/Import/Parser/Contribution.php index b7ce5392c6..4a639e2f5a 100644 --- a/civicrm/CRM/Contribute/Import/Parser/Contribution.php +++ b/civicrm/CRM/Contribute/Import/Parser/Contribution.php @@ -42,7 +42,7 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { * @param null $mapperPhoneType * @param array $mapperSoftCreditType */ - public function __construct(&$mapperKeys, $mapperSoftCredit = [], $mapperPhoneType = NULL, $mapperSoftCreditType = []) { + public function __construct(&$mapperKeys = [], $mapperSoftCredit = [], $mapperPhoneType = NULL, $mapperSoftCreditType = []) { parent::__construct(); $this->_mapperKeys = &$mapperKeys; $this->_mapperSoftCredit = &$mapperSoftCredit; @@ -189,13 +189,12 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { return FALSE; } - $this->_lineCount = $this->_warningCount = $this->_validSoftCreditRowCount = $this->_validPledgePaymentRowCount = 0; + $this->_lineCount = $this->_validSoftCreditRowCount = $this->_validPledgePaymentRowCount = 0; $this->_invalidRowCount = $this->_validCount = $this->_invalidSoftCreditRowCount = $this->_invalidPledgePaymentRowCount = 0; - $this->_totalCount = $this->_conflictCount = 0; + $this->_totalCount = 0; $this->_errors = []; $this->_warnings = []; - $this->_conflicts = []; $this->_pledgePaymentErrors = []; $this->_softCreditErrors = []; if ($statusID) { @@ -242,7 +241,7 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { $this->_totalCount++; if ($mode == self::MODE_MAPFIELD) { - $returnCode = $this->mapField($values); + $returnCode = CRM_Import_Parser::VALID; } elseif ($mode == self::MODE_PREVIEW) { $returnCode = $this->preview($values); @@ -287,13 +286,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { } } - if ($returnCode == self::WARNING) { - $this->_warningCount++; - if ($this->_warningCount < $this->_maxWarningCount) { - $this->_warningCount[] = $line; - } - } - if ($returnCode == self::ERROR) { $this->_invalidRowCount++; $recordNumber = $this->_lineCount; @@ -324,16 +316,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { $this->_softCreditErrors[] = $values; } - if ($returnCode == self::CONFLICT) { - $this->_conflictCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_conflicts[] = $values; - } - if ($returnCode == self::DUPLICATE) { $this->_duplicateCount++; $recordNumber = $this->_lineCount; @@ -347,12 +329,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { } } - // we give the derived class a way of aborting the process - // note that the return code could be multiple code or'ed together - if ($returnCode == self::STOP) { - break; - } - // if we are done processing the maxNumber of lines, break if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { break; @@ -400,14 +376,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { self::exportCSV($this->_softCreditErrorsFileName, $headers, $this->_softCreditErrors); } - if ($this->_conflictCount) { - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_conflictFileName = self::errorFileName(self::CONFLICT); - self::exportCSV($this->_conflictFileName, $headers, $this->_conflicts); - } if ($this->_duplicateCount) { $headers = array_merge([ ts('Line Number'), @@ -418,7 +386,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { self::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); } } - return $this->fini(); } /** @@ -550,7 +517,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { $store->set('validSoftCreditRowCount', $this->_validSoftCreditRowCount); $store->set('invalidPledgePaymentRowCount', $this->_invalidPledgePaymentRowCount); $store->set('validPledgePaymentRowCount', $this->_validPledgePaymentRowCount); - $store->set('conflictRowCount', $this->_conflictCount); switch ($this->_contactType) { case 'Individual': @@ -568,9 +534,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { if ($this->_invalidRowCount) { $store->set('errorsFileName', $this->_errorFileName); } - if ($this->_conflictCount) { - $store->set('conflictsFileName', $this->_conflictFileName); - } if (isset($this->_rows) && !empty($this->_rows)) { $store->set('dataValues', $this->_rows); } @@ -752,18 +715,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { } } - /** - * Handle the values in mapField mode. - * - * @param array $values - * The array of values belonging to this line. - * - * @return bool - */ - public function mapField(&$values) { - return CRM_Import_Parser::VALID; - } - /** * Handle the values in preview mode. * @@ -886,13 +837,7 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { return CRM_Import_Parser::ERROR; } - if ($onDuplicate != CRM_Import_Parser::DUPLICATE_UPDATE) { - $formatted['custom'] = CRM_Core_BAO_CustomField::postProcess($formatted, - NULL, - 'Contribution' - ); - } - else { + if ($onDuplicate == CRM_Import_Parser::DUPLICATE_UPDATE) { //fix for CRM-2219 - Update Contribution // onDuplicate == CRM_Import_Parser::DUPLICATE_UPDATE if (!empty($paramValues['invoice_id']) || !empty($paramValues['trxn_id']) || !empty($paramValues['contribution_id'])) { @@ -901,15 +846,10 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { 'trxn_id' => $paramValues['trxn_id'] ?? NULL, 'invoice_id' => $paramValues['invoice_id'] ?? NULL, ]; - $ids['contribution'] = CRM_Contribute_BAO_Contribution::checkDuplicateIds($dupeIds); if ($ids['contribution']) { $formatted['id'] = $ids['contribution']; - $formatted['custom'] = CRM_Core_BAO_CustomField::postProcess($formatted, - $formatted['id'], - 'Contribution' - ); //process note if (!empty($paramValues['note'])) { $noteID = []; @@ -953,8 +893,9 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { } $formatted['id'] = $ids['contribution']; - $newContribution = CRM_Contribute_BAO_Contribution::create($formatted); - $this->_newContributions[] = $newContribution->id; + + $newContribution = civicrm_api3('contribution', 'create', $formatted); + $this->_newContributions[] = $newContribution['id']; //return soft valid since we need to show how soft credits were added if (!empty($formatted['soft_credit'])) { @@ -1123,12 +1064,6 @@ class CRM_Contribute_Import_Parser_Contribution extends CRM_Import_Parser { return $this->_newContributions; } - /** - * The initializer code, called before the processing. - */ - public function fini() { - } - /** * Format date fields from input to mysql. * diff --git a/civicrm/CRM/Contribute/Page/Tab.php b/civicrm/CRM/Contribute/Page/Tab.php index 56411d1bc0..f8ab5c536e 100644 --- a/civicrm/CRM/Contribute/Page/Tab.php +++ b/civicrm/CRM/Contribute/Page/Tab.php @@ -82,15 +82,10 @@ class CRM_Contribute_Page_Tab extends CRM_Core_Page { $links[CRM_Core_Action::DISABLE] = [ 'name' => ts('Cancel'), 'title' => ts('Cancel'), - 'ref' => 'crm-enable-disable', + 'url' => 'civicrm/contribute/unsubscribe', + 'qs' => 'reset=1&crid=%%crid%%&cid=%%cid%%&context=' . $context, ]; - 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'), diff --git a/civicrm/CRM/Core/BAO/CustomGroup.php b/civicrm/CRM/Core/BAO/CustomGroup.php index 0988048481..d53aac1c70 100644 --- a/civicrm/CRM/Core/BAO/CustomGroup.php +++ b/civicrm/CRM/Core/BAO/CustomGroup.php @@ -1693,75 +1693,19 @@ ORDER BY civicrm_custom_group.weight, } /** - * @param $table + * Get table name for extends. + * + * @param string $entityName * * @return string * @throws Exception */ - public static function mapTableName($table) { - switch ($table) { - case 'Contact': - case 'Individual': - case 'Household': - case 'Organization': - return 'civicrm_contact'; - - case 'Activity': - return 'civicrm_activity'; - - case 'Group': - return 'civicrm_group'; - - case 'Contribution': - return 'civicrm_contribution'; - - case 'ContributionRecur': - return 'civicrm_contribution_recur'; - - case 'Relationship': - return 'civicrm_relationship'; - - case 'Event': - return 'civicrm_event'; - - case 'Membership': - return 'civicrm_membership'; - - case 'Participant': - case 'ParticipantRole': - case 'ParticipantEventName': - case 'ParticipantEventType': - return 'civicrm_participant'; - - case 'Grant': - return 'civicrm_grant'; - - case 'Pledge': - return 'civicrm_pledge'; - - case 'Address': - return 'civicrm_address'; - - case 'Campaign': - return 'civicrm_campaign'; - - default: - $query = " -SELECT IF( EXISTS(SELECT name FROM civicrm_contact_type WHERE name like %1), 1, 0 )"; - $qParams = [1 => [$table, 'String']]; - $result = CRM_Core_DAO::singleValueQuery($query, $qParams); - - if ($result) { - return 'civicrm_contact'; - } - else { - $extendObjs = CRM_Core_OptionGroup::values('cg_extend_objects', FALSE, FALSE, FALSE, NULL, 'name'); - if (array_key_exists($table, $extendObjs)) { - return $extendObjs[$table]; - } - throw new CRM_Core_Exception('Unknown error'); - } + public static function mapTableName($entityName) { + $options = array_column(self::getCustomGroupExtendsOptions(), 'table_name', 'id'); + if (isset($options[$entityName])) { + return $options[$entityName]; } + throw new CRM_Core_Exception('Unknown error'); } /** @@ -1896,7 +1840,7 @@ SELECT IF( EXISTS(SELECT name FROM civicrm_contact_type WHERE name like %1), 1, * @return array|int * @throws \CRM_Core_Exception */ - public static function buildCustomDataView(&$form, $groupTree, $returnCount = FALSE, $gID = NULL, $prefix = NULL, $customValueId = NULL, $entityId = NULL, $checkEditPermission = FALSE) { + public static function buildCustomDataView($form, $groupTree, $returnCount = FALSE, $gID = NULL, $prefix = NULL, $customValueId = NULL, $entityId = NULL, $checkEditPermission = FALSE) { // Filter out pesky extra info unset($groupTree['info']); @@ -1988,7 +1932,7 @@ SELECT IF( EXISTS(SELECT name FROM civicrm_contact_type WHERE name like %1), 1, 'groupId', 'skipTitle', ]); - $form->assign_by_ref("{$prefix}viewCustomData", $details); + $form->assign("{$prefix}viewCustomData", $details); return $details; } } @@ -2070,46 +2014,203 @@ SELECT civicrm_custom_group.id as groupID, civicrm_custom_group.title as groupT } /** - * Get the list of types for objects that a custom group extends to. + * Deprecated function, use APIv4 getFields instead. * + * @deprecated * @param array $types * Var which should have the list appended. - * - * @return array - * Array of types. - * @throws \Exception */ public static function getExtendedObjectTypes(&$types = []) { - static $flag = FALSE, $objTypes = []; - - if (!$flag) { - $extendObjs = []; - CRM_Core_OptionValue::getValues(['name' => 'cg_extend_objects'], $extendObjs, 'weight', TRUE); + $cache = Civi::cache('metadata'); + if (!$cache->has(__FUNCTION__)) { + $objTypes = []; + + $extendObjs = \Civi\Api4\OptionValue::get(FALSE) + ->addSelect('value', 'grouping') + ->addWhere('option_group_id:name', '=', 'cg_extend_objects') + ->addWhere('grouping', 'IS NOT EMPTY') + ->addWhere('is_active', '=', TRUE) + ->execute()->indexBy('value')->column('grouping'); + + foreach ($extendObjs as $entityName => $grouping) { + try { + $objTypes[$entityName] = civicrm_api4($entityName, 'getFields', [ + 'loadOptions' => TRUE, + 'where' => [['name', '=', $grouping]], + 'checkPermissions' => FALSE, + 'select' => ['options'], + ], 0)['options'] ?? NULL; + } + catch (\Civi\API\Exception\NotImplementedException $e) { + // Skip if component is disabled + } + } + $cache->set(__FUNCTION__, $objTypes); + } + else { + $objTypes = $cache->get(__FUNCTION__); + } - foreach ($extendObjs as $ovId => $ovValues) { - if ($ovValues['description']) { - // description is expected to be a callback func to subtypes - list($callback, $args) = explode(';', trim($ovValues['description'])); + $types = array_merge($types, $objTypes); + } - if (empty($args)) { - $args = []; + /** + * Loads pseudoconstant option values for the `extends_entity_column_value` field. + * + * @param $context + * @param array $params + * @param array $props + * @return array + */ + public static function getExtendsEntityColumnValueOptions($context, $params, $props = []) { + // Requesting this option list only makes sense if the value of 'extends' is known or can be looked up + if (!empty($props['id']) || !empty($props['name']) || !empty($props['extends']) || !empty($props['extends_entity_column_id'])) { + $id = $props['id'] ?? NULL; + $name = $props['name'] ?? NULL; + $extends = $props['extends'] ?? NULL; + $entityColumnId = $props['extends_entity_column_id'] ?? NULL; + + if (!array_key_exists('extends_entity_column_id', $props) && ($id || $name)) { + $entityColumnId = CRM_Core_DAO::getFieldValue(parent::class, $id ?: $name, 'extends_entity_column_id', $id ? 'id' : 'name'); + } + // If there is an entityColumnId (currently only used by Participants) use grouping from that sub-type. + if ($entityColumnId) { + $pseudoSelectors = array_column(self::getExtendsEntityColumnIdOptions(), NULL, 'id'); + $grouping = $pseudoSelectors[$entityColumnId]['grouping']; + $extends = $pseudoSelectors[$entityColumnId]['extends']; + } + else { + if (!$extends) { + $extends = CRM_Core_DAO::getFieldValue(parent::class, $id ?: $name, 'extends', $id ? 'id' : 'name'); + } + $allTypes = array_column(self::getCustomGroupExtendsOptions(), NULL, 'id'); + $grouping = $allTypes[$extends]['grouping'] ?? NULL; + } + if (!$grouping) { + return []; + } + $getFieldsValues = []; + // For contact types + if (in_array($extends, CRM_Contact_BAO_ContactType::basicTypes(TRUE), TRUE)) { + $getFieldsValues['contact_type'] = $extends; + $extends = 'Contact'; + } + try { + $field = civicrm_api4($extends, 'getFields', [ + 'checkPermissions' => FALSE, + 'loadOptions' => ['id', 'name', 'label'], + 'where' => [['name', '=', $grouping]], + 'values' => $getFieldsValues, + ])->first(); + if ($field['options']) { + return $field['options']; + } + // This is to support the ParticipantEventName which groups by event_id, a field with no pseudoconstant + elseif ($field['fk_entity']) { + $fkFields = civicrm_api4($field['entity'], 'getFields', [ + 'checkPermissions' => FALSE, + ])->indexBy('name'); + $fkIdField = \Civi\Api4\Utils\CoreUtil::getIdFieldName($field['fk_entity']); + $fkLabelField = \Civi\Api4\Utils\CoreUtil::getInfoItem($field['fk_entity'], 'label_field'); + $fkNameField = isset($fkFields['name']) ? 'name' : 'id'; + $select = [$fkIdField, $fkNameField, $fkLabelField]; + $where = []; + if (isset($fkFields['is_active'])) { + $where[] = ['is_active', '=', TRUE]; } - - if (!is_array($args)) { - throw new CRM_Core_Exception('Arg is not of type array'); + $fkEntities = civicrm_api4($field['fk_entity'], 'get', [ + 'checkPermissions' => !(isset($params['check_permissions']) && !$params['check_permissions']), + 'select' => $select, + 'where' => $where, + ]); + $fkOptions = []; + foreach ($fkEntities as $item) { + $fkOptions[] = [ + 'id' => $item[$fkIdField], + 'name' => $item[$fkNameField], + 'label' => $item[$fkLabelField], + ]; } + return $fkOptions; + } + } + catch (\Civi\API\Exception\NotImplementedException $e) { + // Component disabled + return []; + } + } + return []; + } - list($className) = explode('::', $callback); - require_once str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; - - $objTypes[$ovValues['value']] = call_user_func_array($callback, $args); + /** + * Loads pseudoconstant option values for the `extends_entity_column_id` field. + * + * @param string $context + * @param array $params + * @param array $props + * @return array + */ + public static function getExtendsEntityColumnIdOptions($context = NULL, $params = [], $props = []) { + $ogId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', 'custom_data_type', 'id', 'name'); + $optionValues = CRM_Core_BAO_OptionValue::getOptionValuesArray($ogId); + + // There is no explicit link between the result in the custom_data_type group and the entity + // they correspond to. So we rely on the convention of each option's 'name' beginning with + // the name of the entity. + $extendsEntities = array_column(self::getCustomGroupExtendsOptions(), 'id'); + // Sort enties by strlen to ensure the correct one is matched + usort($extendsEntities, function($a, $b) { + return strlen($b) <=> strlen($a); + }); + // Match the entity which is at the beginning of the 'name'. Note: at the time of this writing there + // are only 3 items in the option_group and they are all for "Participant". So we could just return + // "Participant" but that would prevent extensions from creating enties with complex custom fields. + $getEntityName = function($optionValueName) use ($extendsEntities) { + foreach ($extendsEntities as $entityName) { + if (strpos($optionValueName, $entityName) === 0) { + return $entityName; } } - $flag = TRUE; + }; + + $result = []; + foreach ($optionValues as $optionValue) { + $result[] = [ + 'id' => $optionValue['value'], + 'name' => $optionValue['name'], + 'label' => $optionValue['label'], + 'grouping' => $optionValue['grouping'] ?? NULL, + // For internal use & filtering. Not returned by APIv4 getFields.options. + 'extends' => $getEntityName($optionValue['name']), + ]; } - $types = array_merge($types, $objTypes); - return $objTypes; + if (!empty($props['extends'])) { + $result = CRM_Utils_Array::findAll($result, ['extends' => $props['extends']]); + } + return $result; + } + + /** + * @inheritDoc + */ + public static function buildOptions($fieldName, $context = NULL, $props = []) { + // This is necessary in order to pass $props to the callback function + if ($fieldName === 'extends_entity_column_value') { + $options = self::getExtendsEntityColumnValueOptions($context, [], $props); + return CRM_Core_PseudoConstant::formatArrayOptions($context, $options); + } + // Provides filtering by 'extends' entity + if ($fieldName === 'extends_entity_column_id') { + $options = self::getExtendsEntityColumnIdOptions($context, [], $props); + return CRM_Core_PseudoConstant::formatArrayOptions($context, $options); + } + // Legacy support for APIv3 which also needs the ParticipantEventName etc pseudo-selectors + if ($fieldName === 'extends' && ($props['version'] ?? NULL) == 3) { + $options = CRM_Core_SelectValues::customGroupExtends(); + return CRM_Core_PseudoConstant::formatArrayOptions($context, $options); + } + return parent::buildOptions($fieldName, $context, $props); } /** @@ -2237,24 +2338,26 @@ SELECT civicrm_custom_group.id as groupID, civicrm_custom_group.title as groupT return [$multipleFieldGroups, $groupTree]; } + /** + * Use APIv4 getFields (or self::getExtendsEntityColumnValueOptions) instead of this beast. + * @deprecated + * @return array + */ public static function getSubTypes(): array { $sel2 = []; $activityType = CRM_Core_PseudoConstant::activityType(FALSE, TRUE, FALSE, 'label', TRUE); $eventType = CRM_Core_OptionGroup::values('event_type'); - $grantType = CRM_Core_OptionGroup::values('grant_type'); $campaignTypes = CRM_Campaign_PseudoConstant::campaignType(); $membershipType = CRM_Member_BAO_MembershipType::getMembershipTypes(FALSE); $participantRole = CRM_Core_OptionGroup::values('participant_role'); asort($activityType); asort($eventType); - asort($grantType); asort($membershipType); asort($participantRole); $sel2['Event'] = $eventType; - $sel2['Grant'] = $grantType; $sel2['Activity'] = $activityType; $sel2['Campaign'] = $campaignTypes; $sel2['Membership'] = $membershipType; @@ -2300,4 +2403,116 @@ SELECT civicrm_custom_group.id as groupID, civicrm_custom_group.title as groupT return in_array($groupId, $allowedGroups); } + /** + * List all possible values for `CustomGroup.extends`. + * + * This includes the fake entities "Individual", "Organization", "Household" + * but not the extra options from `custom_data_type` used on the form ("ParticipantStatus", etc). + * + * Returns a mix of hard-coded array and `cg_extend_objects` OptionValues. + * The 'id' return key maps to the 'value' in `cg_extend_objects`. + * The 'grouping' key refers to the entity field used to select a sub-type. + * The 'table_name' key is for internal use (is not returned by getFields.loadOptions), and + * maps to the 'name' in `cg_extend_objects`. We don't return it as the 'name' in getFields because + * it is not always unique (since contact types are pseudo-entities in this list). + * + * @return array{id: string, label: string, grouping: string, table_name: string}[] + */ + public static function getCustomGroupExtendsOptions() { + $options = [ + [ + 'id' => 'Activity', + 'label' => ts('Activities'), + 'grouping' => 'activity_type_id', + 'table_name' => 'civicrm_activity', + ], + [ + 'id' => 'Relationship', + 'label' => ts('Relationships'), + 'grouping' => 'relationship_type_id', + 'table_name' => 'civicrm_relationship', + ], + [ + 'id' => 'Contribution', + 'label' => ts('Contributions'), + 'grouping' => 'financial_type_id', + 'table_name' => 'civicrm_contribution', + ], + [ + 'id' => 'ContributionRecur', + 'label' => ts('Recurring Contributions'), + 'grouping' => NULL, + 'table_name' => 'civicrm_contribution_recur', + ], + [ + 'id' => 'Group', + 'label' => ts('Groups'), + 'grouping' => NULL, + 'table_name' => 'civicrm_group', + ], + [ + 'id' => 'Membership', + 'label' => ts('Memberships'), + 'grouping' => 'membership_type_id', + 'table_name' => 'civicrm_membership', + ], + [ + 'id' => 'Event', + 'label' => ts('Events'), + 'grouping' => 'event_type_id', + 'table_name' => 'civicrm_event', + ], + [ + 'id' => 'Participant', + 'label' => ts('Participants'), + 'grouping' => NULL, + 'table_name' => 'civicrm_participant', + ], + [ + 'id' => 'Pledge', + 'label' => ts('Pledges'), + 'grouping' => 'TODO', + 'table_name' => 'civicrm_pledge', + ], + [ + 'id' => 'Address', + 'label' => ts('Addresses'), + 'grouping' => NULL, + 'table_name' => 'civicrm_address', + ], + [ + 'id' => 'Campaign', + 'label' => ts('Campaigns'), + 'grouping' => 'campaign_type_id', + 'table_name' => 'civicrm_campaign', + ], + [ + 'id' => 'Contact', + 'label' => ts('Contacts'), + 'grouping' => NULL, + 'table_name' => 'civicrm_contact', + ], + ]; + // `CustomGroup.extends` stores contact type as if it were an entity. + foreach (CRM_Contact_BAO_ContactType::basicTypePairs(TRUE) as $contactType => $contactTypeLabel) { + $options[] = [ + 'id' => $contactType, + 'label' => $contactTypeLabel, + 'grouping' => 'contact_sub_type', + 'table_name' => 'civicrm_contact', + ]; + } + $ogId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', 'cg_extend_objects', 'id', 'name'); + $ogValues = CRM_Core_BAO_OptionValue::getOptionValuesArray($ogId); + foreach ($ogValues as $ogValue) { + $options[] = [ + 'id' => $ogValue['value'], + 'label' => $ogValue['label'], + 'grouping' => $ogValue['grouping'] ?? NULL, + 'table_name' => $ogValue['name'], + ]; + } + return $options; + } + } diff --git a/civicrm/CRM/Core/BAO/File.php b/civicrm/CRM/Core/BAO/File.php index dc2e7ac026..150c3b6e31 100644 --- a/civicrm/CRM/Core/BAO/File.php +++ b/civicrm/CRM/Core/BAO/File.php @@ -428,6 +428,8 @@ AND CEF.entity_id = %2"; * @param int $entityID * @param null $numAttachments * @param bool $ajaxDelete + * + * @throws \CRM_Core_Exception */ public static function buildAttachment(&$form, $entityTable, $entityID = NULL, $numAttachments = NULL, $ajaxDelete = FALSE) { @@ -442,15 +444,11 @@ AND CEF.entity_id = %2"; $maxFileSize = $config->maxFileSize ? $config->maxFileSize : 2; $currentAttachmentInfo = self::getEntityFile($entityTable, $entityID, TRUE); - $totalAttachments = 0; + $totalAttachments = $currentAttachmentInfo ? count($currentAttachmentInfo) : 0; if ($currentAttachmentInfo) { - $totalAttachments = count($currentAttachmentInfo); $form->add('checkbox', 'is_delete_attachment', ts('Delete All Attachment(s)')); - $form->assign('currentAttachmentInfo', $currentAttachmentInfo); - } - else { - $form->assign('currentAttachmentInfo', NULL); } + $form->assign('currentAttachmentInfo', $currentAttachmentInfo); if ($totalAttachments) { if ($totalAttachments >= $numAttachments) { @@ -487,8 +485,9 @@ AND CEF.entity_id = %2"; 'placeholder' => ts('Description'), ]); + $tagField = "tag_$i"; if (!empty($tags)) { - $form->add('select', "tag_$i", ts('Tags'), $tags, FALSE, + $form->add('select', $tagField, ts('Tags'), $tags, FALSE, [ 'id' => "tags_$i", 'multiple' => 'multiple', @@ -497,6 +496,9 @@ AND CEF.entity_id = %2"; ] ); } + else { + $form->addOptionalQuickFormElement($tagField); + } CRM_Core_Form_Tag::buildQuickForm($form, $parentNames, 'civicrm_file', NULL, FALSE, TRUE, "file_taglist_$i"); } } diff --git a/civicrm/CRM/Core/BAO/FinancialTrxn.php b/civicrm/CRM/Core/BAO/FinancialTrxn.php index 27a385df85..33d2083254 100644 --- a/civicrm/CRM/Core/BAO/FinancialTrxn.php +++ b/civicrm/CRM/Core/BAO/FinancialTrxn.php @@ -14,52 +14,7 @@ * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing */ -class CRM_Core_BAO_FinancialTrxn extends CRM_Financial_DAO_FinancialTrxn { - - /** - * Takes an associative array and creates a financial transaction object. - * - * @param array $params - * (reference ) an assoc array of name/value pairs. - * - * @return CRM_Financial_DAO_FinancialTrxn - */ - public static function create($params) { - $trxn = new CRM_Financial_DAO_FinancialTrxn(); - $trxn->copyValues($params); - - if (isset($params['fee_amount']) && is_numeric($params['fee_amount'])) { - if (!isset($params['total_amount'])) { - $trxn->fetch(); - $params['total_amount'] = $trxn->total_amount; - } - $trxn->net_amount = $params['total_amount'] - $params['fee_amount']; - } - - if (empty($params['id']) && !CRM_Utils_Rule::currencyCode($trxn->currency)) { - $trxn->currency = CRM_Core_Config::singleton()->defaultCurrency; - } - - $trxn->save(); - - if (!empty($params['id'])) { - // For an update entity financial transaction record will already exist. Return early. - return $trxn; - } - - // Save to entity_financial_trxn table. - $entityFinancialTrxnParams = [ - 'entity_table' => CRM_Utils_Array::value('entity_table', $params, 'civicrm_contribution'), - 'entity_id' => CRM_Utils_Array::value('entity_id', $params, CRM_Utils_Array::value('contribution_id', $params)), - 'financial_trxn_id' => $trxn->id, - 'amount' => $params['total_amount'], - ]; - - $entityTrxn = new CRM_Financial_DAO_EntityFinancialTrxn(); - $entityTrxn->copyValues($entityFinancialTrxnParams); - $entityTrxn->save(); - return $trxn; - } +class CRM_Core_BAO_FinancialTrxn extends CRM_Financial_BAO_FinancialTrxn { /** * @param int $contributionId @@ -184,29 +139,6 @@ LIMIT 1;"; return self::getFinancialTrxnId($contributionID, 'DESC', FALSE, " AND cft.status_id = $refundStatusID"); } - /** - * Given an entity_id and entity_table, check for corresponding entity_financial_trxn and financial_trxn record. - * @todo This should be moved to separate BAO for EntityFinancialTrxn when we start adding more code for that object. - * - * @param int $entity_id - * Id of the entity usually the contactID. - * - * @return array - * array of category id's the contact belongs to. - * - */ - public static function getFinancialTrxnTotal($entity_id) { - $query = " - SELECT (ft.amount+SUM(ceft.amount)) AS total FROM civicrm_entity_financial_trxn AS ft -LEFT JOIN civicrm_entity_financial_trxn AS ceft ON ft.financial_trxn_id = ceft.entity_id -WHERE ft.entity_table = 'civicrm_contribution' AND ft.entity_id = %1 - "; - - $sqlParams = [1 => [$entity_id, 'Integer']]; - return CRM_Core_DAO::singleValueQuery($query, $sqlParams); - - } - /** * Given an financial_trxn_id check for previous entity_financial_trxn. * @@ -717,23 +649,4 @@ WHERE ceft.entity_id = %1"; return TRUE; } - /** - * Generate and assign an arbitrary value to a field of a test object. - * - * Always set is_payment to 1 as this is used for Payment api as well as FinancialTrxn. - * - * @param string $fieldName - * @param array $fieldDef - * @param int $counter - * The globally-unique ID of the test object. - */ - protected function assignTestValue($fieldName, &$fieldDef, $counter) { - if ($fieldName === 'is_payment') { - $this->is_payment = 1; - } - else { - parent::assignTestValue($fieldName, $fieldDef, $counter); - } - } - } diff --git a/civicrm/CRM/Core/BAO/Job.php b/civicrm/CRM/Core/BAO/Job.php index a8dbcdde44..e07d3b2398 100644 --- a/civicrm/CRM/Core/BAO/Job.php +++ b/civicrm/CRM/Core/BAO/Job.php @@ -13,8 +13,6 @@ * * @package CRM * @copyright CiviCRM LLC https://civicrm.org/licensing - * $Id: $ - * */ /** diff --git a/civicrm/CRM/Core/BAO/UserJob.php b/civicrm/CRM/Core/BAO/UserJob.php new file mode 100644 index 0000000000..193d7186e0 --- /dev/null +++ b/civicrm/CRM/Core/BAO/UserJob.php @@ -0,0 +1,89 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * This class contains user jobs functionality. + */ +class CRM_Core_BAO_UserJob extends CRM_Core_DAO_UserJob { + + /** + * Restrict access to the relevant user. + * + * Note that it is likely we might want to permit other users such as + * sysadmins to access other people's user_jobs in future but it has been + * kept tightly restricted for initial simplicity (ie do we want to + * use an existing permission? a new permission ? do they require + * 'view all contacts' etc. + * + * @inheritDoc + */ + public function addSelectWhereClause(): array { + $clauses['created_id'] = '= ' . (int) CRM_Core_Session::getLoggedInContactID(); + return $clauses; + } + + /** + * Get the statuses for Import Jobs. + * + * @return array + */ + public static function getStatuses(): array { + return [ + [ + 'id' => 1, + 'name' => 'completed', + 'label' => ts('Completed'), + ], + [ + 'id' => 2, + 'name' => 'draft', + 'label' => ts('Draft'), + ], + [ + 'id' => 3, + 'name' => 'scheduled', + 'label' => ts('Scheduled'), + ], + [ + 'id' => 4, + 'name' => 'in_progress', + 'label' => ts('In Progress'), + ], + ]; + } + + /** + * Get the types Import Jobs. + * + * This is largely a placeholder at this stage. It will likely wind + * up as an option value so extensions can add different types. + * + * However, for now it just holds the one type being worked on. + * + * @return array + */ + public static function getTypes(): array { + return [ + [ + 'id' => 1, + 'name' => 'contact_import', + 'label' => ts('Contact Import'), + ], + ]; + } + +} diff --git a/civicrm/CRM/Core/Config.php b/civicrm/CRM/Core/Config.php index c1db7ff809..a9041e60d0 100644 --- a/civicrm/CRM/Core/Config.php +++ b/civicrm/CRM/Core/Config.php @@ -222,7 +222,7 @@ class CRM_Core_Config extends CRM_Core_Config_MagicMerge { * @param int $domainID * @param bool $reset * - * @return int|null + * @return int */ public static function domainID($domainID = NULL, $reset = FALSE) { static $domain; diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index 4e954132f8..3a8ba271be 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -384,7 +384,7 @@ class CRM_Core_DAO extends DB_DataObject { else { $options = CRM_Core_PseudoConstant::get($daoName, $fieldName); if (is_array($options)) { - $this->$dbName = $options[0]; + $this->$dbName = $options[0] ?? NULL; } else { $defaultValues = explode(',', $options); @@ -2280,12 +2280,6 @@ SELECT contact_id // Prefer to instantiate BAO's instead of DAO's (when possible) // so that assignTestValue()/assignTestFK() can be overloaded. $baoName = str_replace('_DAO_', '_BAO_', $daoName); - if ($baoName === 'CRM_Financial_BAO_FinancialTrxn') { - // OMG OMG OMG this is so incredibly bad. The BAO is insanely named. - // @todo create a new class called what the BAO SHOULD be - // that extends BAO-crazy-name.... migrate. - $baoName = 'CRM_Core_BAO_FinancialTrxn'; - } if (class_exists($baoName)) { $daoName = $baoName; } diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.data.php b/civicrm/CRM/Core/DAO/AllCoreTables.data.php index 5dd43a0831..872b1cddea 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.data.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.data.php @@ -367,6 +367,11 @@ return [ 'class' => 'CRM_Core_DAO_UFMatch', 'table' => 'civicrm_uf_match', ], + 'CRM_Core_DAO_UserJob' => [ + 'name' => 'UserJob', + 'class' => 'CRM_Core_DAO_UserJob', + 'table' => 'civicrm_user_job', + ], 'CRM_Core_DAO_Timezone' => [ 'name' => 'Timezone', 'class' => 'CRM_Core_DAO_Timezone', diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.php b/civicrm/CRM/Core/DAO/AllCoreTables.php index 51ffc8f1f3..19009e09fd 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.php @@ -218,12 +218,11 @@ class CRM_Core_DAO_AllCoreTables { // This map only applies to APIv3 $map = [ 'acl' => 'Acl', - 'ACL' => 'Acl', 'im' => 'Im', - 'IM' => 'Im', + 'pcp' => 'Pcp', ]; - if ($legacyV3 && isset($map[$name])) { - return $map[$name]; + if ($legacyV3 && isset($map[strtolower($name)])) { + return $map[strtolower($name)]; } $fragments = explode('_', $name); @@ -234,9 +233,10 @@ class CRM_Core_DAO_AllCoreTables { $fragment = 'UF' . ucfirst(substr($fragment, 2)); } } - // Special case: UFGroup, UFJoin, UFMatch, UFField (if passed in underscore-separated) - if ($fragments[0] === 'Uf') { - $fragments[0] = 'UF'; + // Exceptions to CamelCase: UFGroup, UFJoin, UFMatch, UFField, ACL, IM, PCP + $exceptions = ['Uf', 'Acl', 'Im', 'Pcp']; + if (in_array($fragments[0], $exceptions)) { + $fragments[0] = strtoupper($fragments[0]); } return implode('', $fragments); } diff --git a/civicrm/CRM/Core/DAO/CustomGroup.php b/civicrm/CRM/Core/DAO/CustomGroup.php index 55448549ca..56f2fa07c4 100644 --- a/civicrm/CRM/Core/DAO/CustomGroup.php +++ b/civicrm/CRM/Core/DAO/CustomGroup.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/CustomGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:65d78bdab80228a63775214faab08ee0) + * (GenCodeChecksum:fb6ed39a4e35bd2bcdc1a6cd549f4976) */ /** @@ -348,7 +348,7 @@ class CRM_Core_DAO_CustomGroup extends CRM_Core_DAO { 'bao' => 'CRM_Core_BAO_CustomGroup', 'localizable' => 0, 'pseudoconstant' => [ - 'callback' => 'CRM_Core_SelectValues::customGroupExtends', + 'callback' => 'CRM_Core_BAO_CustomGroup::getCustomGroupExtendsOptions', ], 'add' => '1.1', ], @@ -385,6 +385,9 @@ class CRM_Core_DAO_CustomGroup extends CRM_Core_DAO { 'bao' => 'CRM_Core_BAO_CustomGroup', 'localizable' => 0, 'serialize' => self::SERIALIZE_SEPARATOR_BOOKEND, + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_BAO_CustomGroup::getExtendsEntityColumnValueOptions', + ], 'add' => '1.6', ], 'style' => [ diff --git a/civicrm/CRM/Core/DAO/UserJob.php b/civicrm/CRM/Core/DAO/UserJob.php new file mode 100644 index 0000000000..ebe7e1ee75 --- /dev/null +++ b/civicrm/CRM/Core/DAO/UserJob.php @@ -0,0 +1,436 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from xml/schema/CRM/Core/UserJob.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:58e6fcaa028d157bfa074a073111239d) + */ + +/** + * Database access object for the UserJob entity. + */ +class CRM_Core_DAO_UserJob extends CRM_Core_DAO { + const EXT = 'civicrm'; + const TABLE_ADDED = '5.50'; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_user_job'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = FALSE; + + /** + * Job ID + * + * @var int|string|null + * (SQL type: int unsigned) + * Note that values will be retrieved from the database as a string. + */ + public $id; + + /** + * Unique name for job. + * + * @var string|null + * (SQL type: varchar(64)) + * Note that values will be retrieved from the database as a string. + */ + public $name; + + /** + * FK to contact table. + * + * @var int|string|null + * (SQL type: int unsigned) + * Note that values will be retrieved from the database as a string. + */ + public $created_id; + + /** + * Date and time this job was created. + * + * @var string + * (SQL type: timestamp) + * Note that values will be retrieved from the database as a string. + */ + public $created_date; + + /** + * Date and time this import job started. + * + * @var string + * (SQL type: timestamp) + * Note that values will be retrieved from the database as a string. + */ + public $start_date; + + /** + * Date and time this import job ended. + * + * @var string + * (SQL type: timestamp) + * Note that values will be retrieved from the database as a string. + */ + public $end_date; + + /** + * Date and time to clean up after this import job (temp table deletion date). + * + * @var string + * (SQL type: timestamp) + * Note that values will be retrieved from the database as a string. + */ + public $expires_date; + + /** + * @var int|string + * (SQL type: int unsigned) + * Note that values will be retrieved from the database as a string. + */ + public $status_id; + + /** + * @var int|string + * (SQL type: int unsigned) + * Note that values will be retrieved from the database as a string. + */ + public $type_id; + + /** + * FK to Queue + * + * @var int|string|null + * (SQL type: int unsigned) + * Note that values will be retrieved from the database as a string. + */ + public $queue_id; + + /** + * Data pertaining to job configuration + * + * @var string|null + * (SQL type: text) + * Note that values will be retrieved from the database as a string. + */ + public $metadata; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_user_job'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? ts('User Jobs') : ts('User Job'); + } + + /** + * Returns foreign keys and entity references. + * + * @return array + * [CRM_Core_Reference_Interface] + */ + public static function getReferenceColumns() { + if (!isset(Civi::$statics[__CLASS__]['links'])) { + Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'created_id', 'civicrm_contact', 'id'); + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), 'queue_id', 'civicrm_queue', 'id'); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); + } + return Civi::$statics[__CLASS__]['links']; + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('User Job ID'), + 'description' => ts('Job ID'), + 'required' => TRUE, + 'where' => 'civicrm_user_job.id', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'html' => [ + 'type' => 'Number', + ], + 'readonly' => TRUE, + 'add' => '5.50', + ], + 'name' => [ + 'name' => 'name', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => ts('User job name'), + 'description' => ts('Unique name for job.'), + 'maxlength' => 64, + 'size' => CRM_Utils_Type::BIG, + 'where' => 'civicrm_user_job.name', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'add' => '5.50', + ], + 'created_id' => [ + 'name' => 'created_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Created By Contact ID'), + 'description' => ts('FK to contact table.'), + 'where' => 'civicrm_user_job.created_id', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'FKClassName' => 'CRM_Contact_DAO_Contact', + 'html' => [ + 'label' => ts("Created By"), + ], + 'add' => '5.50', + ], + 'created_date' => [ + 'name' => 'created_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Import Job Created Date'), + 'description' => ts('Date and time this job was created.'), + 'required' => TRUE, + 'where' => 'civicrm_user_job.created_date', + 'default' => 'CURRENT_TIMESTAMP', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select Date', + 'formatType' => 'activityDateTime', + ], + 'readonly' => TRUE, + 'add' => '5.50', + ], + 'start_date' => [ + 'name' => 'start_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Import Job Started Date'), + 'description' => ts('Date and time this import job started.'), + 'required' => FALSE, + 'where' => 'civicrm_user_job.start_date', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select Date', + 'formatType' => 'activityDateTime', + ], + 'readonly' => TRUE, + 'add' => '5.50', + ], + 'end_date' => [ + 'name' => 'end_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Job Ended Date'), + 'description' => ts('Date and time this import job ended.'), + 'required' => FALSE, + 'where' => 'civicrm_user_job.end_date', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select Date', + 'formatType' => 'activityDateTime', + ], + 'add' => '5.50', + ], + 'expires_date' => [ + 'name' => 'expires_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Import Job Expires Date'), + 'description' => ts('Date and time to clean up after this import job (temp table deletion date).'), + 'required' => FALSE, + 'where' => 'civicrm_user_job.expires_date', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select Date', + 'formatType' => 'activityDateTime', + ], + 'add' => '5.50', + ], + 'status_id' => [ + 'name' => 'status_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('User Job Status ID'), + 'required' => TRUE, + 'where' => 'civicrm_user_job.status_id', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'html' => [ + 'label' => ts("Job Status"), + ], + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_BAO_UserJob::getStatuses', + ], + 'add' => '5.50', + ], + 'type_id' => [ + 'name' => 'type_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('User Job Type ID'), + 'required' => TRUE, + 'where' => 'civicrm_user_job.type_id', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'html' => [ + 'label' => ts("Job Type"), + ], + 'pseudoconstant' => [ + 'callback' => 'CRM_Core_BAO_UserJob::getTypes', + ], + 'add' => '5.50', + ], + 'queue_id' => [ + 'name' => 'queue_id', + 'type' => CRM_Utils_Type::T_INT, + 'title' => ts('Queue ID'), + 'description' => ts('FK to Queue'), + 'where' => 'civicrm_user_job.queue_id', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'FKClassName' => 'CRM_Queue_DAO_Queue', + 'html' => [ + 'label' => ts("Queue"), + ], + 'add' => NULL, + ], + 'metadata' => [ + 'name' => 'metadata', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => ts('Job metadata'), + 'description' => ts('Data pertaining to job configuration'), + 'where' => 'civicrm_user_job.metadata', + 'table_name' => 'civicrm_user_job', + 'entity' => 'UserJob', + 'bao' => 'CRM_Core_BAO_UserJob', + 'localizable' => 0, + 'serialize' => self::SERIALIZE_JSON, + 'add' => '5.50', + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * Return a mapping from field-name to the corresponding key (as used in fields()). + * + * @return array + * Array(string $name => string $uniqueName). + */ + public static function &fieldKeys() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'user_job', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'user_job', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = [ + 'UI_name' => [ + 'name' => 'UI_name', + 'field' => [ + 0 => 'name', + ], + 'localizable' => FALSE, + 'unique' => TRUE, + 'sig' => 'civicrm_user_job::1::name', + ], + ]; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/CRM/Core/Error.php b/civicrm/CRM/Core/Error.php index 763a2605d3..accc3f0e76 100644 --- a/civicrm/CRM/Core/Error.php +++ b/civicrm/CRM/Core/Error.php @@ -204,9 +204,11 @@ class CRM_Core_Error extends PEAR_ErrorStack { CRM_Core_Error::debug_var('Fatal Error Details', $error, TRUE, TRUE, '', PEAR_LOG_ERR); CRM_Core_Error::backtrace('backTrace', TRUE); + $exit = TRUE; if ($config->initialized) { $content = $template->fetch('CRM/common/fatal.tpl'); echo CRM_Utils_System::theme($content); + $exit = CRM_Utils_System::shouldExitAfterFatal(); } else { echo "Sorry. A non-recoverable error has occurred. The error trace below might help to resolve the issue<p>"; @@ -217,7 +219,13 @@ class CRM_Core_Error extends PEAR_ErrorStack { exit; } $runOnce = TRUE; - self::abend(CRM_Core_Error::FATAL_ERROR); + + if ($exit) { + self::abend(CRM_Core_Error::FATAL_ERROR); + } + else { + self::inpageExceptionDisplay(CRM_Core_Error::FATAL_ERROR); + } } /** @@ -442,9 +450,14 @@ class CRM_Core_Error extends PEAR_ErrorStack { } echo CRM_Utils_System::theme($content); + $exit = CRM_Utils_System::shouldExitAfterFatal(); - // fin - self::abend(CRM_Core_Error::FATAL_ERROR); + if ($exit) { + self::abend(CRM_Core_Error::FATAL_ERROR); + } + else { + self::inpageExceptionDisplay(CRM_Core_Error::FATAL_ERROR); + } } /** @@ -998,7 +1011,7 @@ class CRM_Core_Error extends PEAR_ErrorStack { /** * Terminate execution abnormally. * - * @param string $code + * @param int $code */ protected static function abend($code) { // do a hard rollback of any pending transactions @@ -1007,6 +1020,37 @@ class CRM_Core_Error extends PEAR_ErrorStack { CRM_Utils_System::civiExit($code); } + /** + * Show in-page exception + * For situations where where calling abend will block the ability for a branded error screen + * + * Although the host page will run past this point, CiviCRM should not, + * therefore we trigger the civi.exit events + * + * @param string $code + */ + protected static function inpageExceptionDisplay($code) { + // do a hard rollback of any pending transactions + // if we've come here, its because of some unexpected PEAR errors + CRM_Core_Transaction::forceRollbackIfEnabled(); + + if ($code > 0 && !headers_sent()) { + http_response_code(500); + } + + // move things to CiviCRM cache as needed + CRM_Core_Session::storeSessionObjects(); + + if (Civi\Core\Container::isContainerBooted()) { + Civi::dispatcher()->dispatch('civi.core.exit'); + } + + $userSystem = CRM_Core_Config::singleton()->userSystem; + if (is_callable([$userSystem, 'onCiviExit'])) { + $userSystem->onCiviExit(); + } + } + /** * @param array $error * @param int $type diff --git a/civicrm/CRM/Core/Form/Tag.php b/civicrm/CRM/Core/Form/Tag.php index ef8c89df4e..ba4c6cadbf 100644 --- a/civicrm/CRM/Core/Form/Tag.php +++ b/civicrm/CRM/Core/Form/Tag.php @@ -86,6 +86,7 @@ class CRM_Core_Form_Tag { } } + $form->addExpectedSmartyVariable('tagsetInfo'); if (!empty($tagset)) { // assign current tagsets which is used in postProcess $form->_tagsetInfo = $tagset; diff --git a/civicrm/CRM/Core/Lock.php b/civicrm/CRM/Core/Lock.php index 5f3362dc00..cc4c049b52 100644 --- a/civicrm/CRM/Core/Lock.php +++ b/civicrm/CRM/Core/Lock.php @@ -22,7 +22,7 @@ class CRM_Core_Lock implements \Civi\Core\Lock\LockInterface { * Prior to version 5.7.5 mysql only supports a single named lock. This variable is * part of the skullduggery involved in 'say it's no so Frank'. * - * See further comments on the aquire function. + * See further comments on the acquire function. * * @var bool */ diff --git a/civicrm/CRM/Core/ManagedEntities.php b/civicrm/CRM/Core/ManagedEntities.php index bbae0344b5..25a4e8ff5b 100644 --- a/civicrm/CRM/Core/ManagedEntities.php +++ b/civicrm/CRM/Core/ManagedEntities.php @@ -28,20 +28,6 @@ class CRM_Core_ManagedEntities { */ protected $moduleIndex; - /** - * Actions arising from the managed entities. - * - * @var array - */ - protected $managedActions = []; - - /** - * @var array - * List of all entity declarations. - * @see CRM_Utils_Hook::managed() - */ - protected $declarations; - /** * Get an instance. * @param bool $fresh @@ -115,19 +101,15 @@ class CRM_Core_ManagedEntities { * Identify any enabled/disabled modules. Add new entities, update * existing entities, and remove orphaned (stale) entities. * - * @param bool $ignoreUpgradeMode - * Unused. + * @param array $modules + * Limits scope of reconciliation to specific module(s). * @throws \CRM_Core_Exception */ - public function reconcile($ignoreUpgradeMode = FALSE) { - $this->loadDeclarations(); - if ($error = $this->validate($this->getDeclarations())) { - throw new CRM_Core_Exception($error); - } - $this->loadManagedEntityActions(); - $this->reconcileEnabledModules(); - $this->reconcileDisabledModules(); - $this->reconcileUnknownModules(); + public function reconcile($modules = NULL) { + $modules = $modules ? (array) $modules : NULL; + $declarations = $this->getDeclarations($modules); + $plan = $this->createPlan($declarations, $modules); + $this->reconcileEntities($plan); } /** @@ -139,230 +121,114 @@ class CRM_Core_ManagedEntities { $mgd = new \CRM_Core_DAO_Managed(); $mgd->copyValues($params); $mgd->find(TRUE); - $this->loadDeclarations(); - $declarations = CRM_Utils_Array::findAll($this->declarations, [ + $declarations = $this->getDeclarations([$mgd->module]); + $declarations = CRM_Utils_Array::findAll($declarations, [ 'module' => $mgd->module, 'name' => $mgd->name, 'entity' => $mgd->entity_type, ]); if ($mgd->id && isset($declarations[0])) { - $this->updateExistingEntity($mgd, ['update' => 'always'] + $declarations[0]); + $this->updateExistingEntity(['update' => 'always'] + $declarations[0] + $mgd->toArray()); return TRUE; } return FALSE; } /** - * For all enabled modules, add new entities, update - * existing entities, and remove orphaned (stale) entities. - */ - protected function reconcileEnabledModules(): void { - // Note: any thing currently declared is necessarily from - // an active module -- because we got it from a hook! - - // index by moduleName,name - $decls = $this->createDeclarationIndex($this->moduleIndex, $this->getDeclarations()); - foreach ($decls as $moduleName => $todos) { - if ($this->isModuleEnabled($moduleName)) { - $this->reconcileEnabledModule($moduleName); - } - } - } - - /** - * For one enabled module, add new entities, update existing entities, - * and remove orphaned (stale) entities. + * Take appropriate action on every managed entity. * - * @param string $module + * @param array[] $plan */ - protected function reconcileEnabledModule(string $module): void { - foreach ($this->getManagedEntitiesToUpdate(['module' => $module]) as $todo) { - $dao = new CRM_Core_DAO_Managed(); - $dao->module = $todo['module']; - $dao->name = $todo['name']; - $dao->entity_type = $todo['entity_type']; - $dao->entity_id = $todo['entity_id']; - $dao->entity_modified_date = $todo['entity_modified_date']; - $dao->id = $todo['id']; - $this->updateExistingEntity($dao, $todo); + private function reconcileEntities(array $plan): void { + foreach ($this->filterPlanByAction($plan, 'update') as $item) { + $this->updateExistingEntity($item); } - - foreach ($this->getManagedEntitiesToDelete(['module' => $module]) as $todo) { - $dao = new CRM_Core_DAO_Managed(); - $dao->module = $todo['module']; - $dao->name = $todo['name']; - $dao->entity_type = $todo['entity_type']; - $dao->id = $todo['id']; - $dao->cleanup = $todo['cleanup']; - $dao->entity_id = $todo['entity_id']; - $this->removeStaleEntity($dao); + // reverse-order so that child entities are cleaned up before their parents + foreach (array_reverse($this->filterPlanByAction($plan, 'delete')) as $item) { + $this->removeStaleEntity($item); } - foreach ($this->getManagedEntitiesToCreate(['module' => $module]) as $todo) { - $this->insertNewEntity($todo); + foreach ($this->filterPlanByAction($plan, 'create') as $item) { + $this->insertNewEntity($item); + } + foreach ($this->filterPlanByAction($plan, 'disable') as $item) { + $this->disableEntity($item); } - } - - /** - * Get the managed entities to be created. - * - * @param array $filters - * - * @return array - */ - protected function getManagedEntitiesToCreate(array $filters = []): array { - return $this->getManagedEntities(array_merge($filters, ['managed_action' => 'create'])); - } - - /** - * Get the managed entities to be updated. - * - * @param array $filters - * - * @return array - */ - protected function getManagedEntitiesToUpdate(array $filters = []): array { - return $this->getManagedEntities(array_merge($filters, ['managed_action' => 'update'])); - } - - /** - * Get the managed entities to be deleted. - * - * @param array $filters - * - * @return array - */ - protected function getManagedEntitiesToDelete(array $filters = []): array { - // Return array in reverse-order so that child entities are cleaned up before their parents - return array_reverse($this->getManagedEntities(array_merge($filters, ['managed_action' => 'delete']))); } /** * Get the managed entities that fit the criteria. * - * @param array $filters + * @param array[] $plan + * @param string $action * * @return array */ - protected function getManagedEntities(array $filters = []): array { - $return = []; - foreach ($this->managedActions as $actionKey => $action) { - foreach ($filters as $filterKey => $filterValue) { - if ($action[$filterKey] !== $filterValue) { - continue 2; - } - } - $return[$actionKey] = $action; - } - return $return; - } - - /** - * For all disabled modules, disable any managed entities. - */ - protected function reconcileDisabledModules() { - if (empty($this->moduleIndex[FALSE])) { - return; - } - - $in = CRM_Core_DAO::escapeStrings(array_keys($this->moduleIndex[FALSE])); - $dao = new CRM_Core_DAO_Managed(); - $dao->whereAdd("module in ($in)"); - $dao->orderBy('id DESC'); - $dao->find(); - while ($dao->fetch()) { - $this->disableEntity($dao); - - } - } - - /** - * Remove any orphaned (stale) entities that are linked to - * unknown modules. - */ - protected function reconcileUnknownModules() { - $knownModules = []; - if (array_key_exists(0, $this->moduleIndex) && is_array($this->moduleIndex[0])) { - $knownModules = array_merge($knownModules, array_keys($this->moduleIndex[0])); - } - if (array_key_exists(1, $this->moduleIndex) && is_array($this->moduleIndex[1])) { - $knownModules = array_merge($knownModules, array_keys($this->moduleIndex[1])); - } - - $dao = new CRM_Core_DAO_Managed(); - if (!empty($knownModules)) { - $in = CRM_Core_DAO::escapeStrings($knownModules); - $dao->whereAdd("module NOT IN ($in)"); - $dao->orderBy('id DESC'); - } - $dao->find(); - while ($dao->fetch()) { - $this->removeStaleEntity($dao); - } + private function filterPlanByAction(array $plan, string $action): array { + return CRM_Utils_Array::findAll($plan, ['managed_action' => $action]); } /** * Create a new entity. * - * @param array $todo + * @param array $item * Entity specification (per hook_civicrm_managedEntities). */ - protected function insertNewEntity($todo) { - $params = $todo['params']; + protected function insertNewEntity(array $item) { + $params = $item['params']; // APIv4 if ($params['version'] == 4) { $params['checkPermissions'] = FALSE; // Use "save" instead of "create" action to accommodate a "match" param $params['records'] = [$params['values']]; unset($params['values']); - $result = civicrm_api4($todo['entity_type'], 'save', $params); + $result = civicrm_api4($item['entity_type'], 'save', $params); $id = $result->first()['id']; } // APIv3 else { - $result = civicrm_api($todo['entity_type'], 'create', $params); + $result = civicrm_api($item['entity_type'], 'create', $params); if (!empty($result['is_error'])) { - $this->onApiError($todo['entity_type'], 'create', $params, $result); + $this->onApiError($item['entity_type'], 'create', $params, $result); } $id = $result['id']; } $dao = new CRM_Core_DAO_Managed(); - $dao->module = $todo['module']; - $dao->name = $todo['name']; - $dao->entity_type = $todo['entity_type']; + $dao->module = $item['module']; + $dao->name = $item['name']; + $dao->entity_type = $item['entity_type']; $dao->entity_id = $id; - $dao->cleanup = $todo['cleanup'] ?? NULL; + $dao->cleanup = $item['cleanup'] ?? NULL; $dao->save(); } /** * Update an entity which is believed to exist. * - * @param CRM_Core_DAO_Managed $dao - * @param array $todo + * @param array $item * Entity specification (per hook_civicrm_managedEntities). */ - protected function updateExistingEntity($dao, $todo) { - $policy = $todo['update'] ?? 'always'; + private function updateExistingEntity(array $item) { + $policy = $item['update'] ?? 'always'; $doUpdate = ($policy === 'always'); if ($policy === 'unmodified') { // If this is not an APIv4 managed entity, the entity_modidfied_date will always be null - if (!CRM_Core_BAO_Managed::isApi4ManagedType($dao->entity_type)) { - Civi::log()->warning('ManagedEntity update policy "unmodified" specified for entity type ' . $dao->entity_type . ' which is not an APIv4 ManagedEntity. Falling back to policy "always".'); + if (!CRM_Core_BAO_Managed::isApi4ManagedType($item['entity_type'])) { + Civi::log()->warning('ManagedEntity update policy "unmodified" specified for entity type ' . $item['entity_type'] . ' which is not an APIv4 ManagedEntity. Falling back to policy "always".'); } - $doUpdate = empty($dao->entity_modified_date); + $doUpdate = empty($item['entity_modified_date']); } - if ($doUpdate && $todo['params']['version'] == 3) { - $defaults = ['id' => $dao->entity_id]; - if ($this->isActivationSupported($dao->entity_type)) { + if ($doUpdate && $item['params']['version'] == 3) { + $defaults = ['id' => $item['entity_id']]; + if ($this->isActivationSupported($item['entity_type'])) { $defaults['is_active'] = 1; } - $params = array_merge($defaults, $todo['params']); + $params = array_merge($defaults, $item['params']); $manager = CRM_Extension_System::singleton()->getManager(); - if ($dao->entity_type === 'Job' && !$manager->extensionIsBeingInstalledOrEnabled($dao->module)) { + if ($item['entity_type'] === 'Job' && !$manager->extensionIsBeingInstalledOrEnabled($item['module'])) { // Special treatment for scheduled jobs: // // If we're being called as part of enabling/installing a module then @@ -378,21 +244,23 @@ class CRM_Core_ManagedEntities { unset($params['is_active']); } - $result = civicrm_api($dao->entity_type, 'create', $params); + $result = civicrm_api($item['entity_type'], 'create', $params); if ($result['is_error']) { - $this->onApiError($dao->entity_type, 'create', $params, $result); + $this->onApiError($item['entity_type'], 'create', $params, $result); } } - elseif ($doUpdate && $todo['params']['version'] == 4) { - $params = ['checkPermissions' => FALSE] + $todo['params']; - $params['values']['id'] = $dao->entity_id; + elseif ($doUpdate && $item['params']['version'] == 4) { + $params = ['checkPermissions' => FALSE] + $item['params']; + $params['values']['id'] = $item['entity_id']; // 'match' param doesn't apply to "update" action unset($params['match']); - civicrm_api4($dao->entity_type, 'update', $params); + civicrm_api4($item['entity_type'], 'update', $params); } - if (isset($todo['cleanup']) || $doUpdate) { - $dao->cleanup = $todo['cleanup'] ?? NULL; + if (isset($item['cleanup']) || $doUpdate) { + $dao = new CRM_Core_DAO_Managed(); + $dao->id = $item['id']; + $dao->cleanup = $item['cleanup'] ?? NULL; // Reset the `entity_modified_date` timestamp if reverting record. $dao->entity_modified_date = $doUpdate ? 'null' : NULL; $dao->update(); @@ -403,24 +271,26 @@ class CRM_Core_ManagedEntities { * Update an entity which (a) is believed to exist and which (b) ought to be * inactive. * - * @param CRM_Core_DAO_Managed $dao + * @param array $item * * @throws \CiviCRM_API3_Exception */ - protected function disableEntity($dao): void { - $entity_type = $dao->entity_type; + protected function disableEntity(array $item): void { + $entity_type = $item['entity_type']; if ($this->isActivationSupported($entity_type)) { // FIXME cascading for payproc types? $params = [ 'version' => 3, - 'id' => $dao->entity_id, + 'id' => $item['entity_id'], 'is_active' => 0, ]; - $result = civicrm_api($dao->entity_type, 'create', $params); + $result = civicrm_api($item['entity_type'], 'create', $params); if ($result['is_error']) { - $this->onApiError($dao->entity_type, 'create', $params, $result); + $this->onApiError($item['entity_type'], 'create', $params, $result); } // Reset the `entity_modified_date` timestamp to indicate that the entity has not been modified by the user. + $dao = new CRM_Core_DAO_Managed(); + $dao->id = $item['id']; $dao->entity_modified_date = 'null'; $dao->update(); } @@ -429,11 +299,11 @@ class CRM_Core_ManagedEntities { /** * Remove a stale entity (if policy allows). * - * @param CRM_Core_DAO_Managed $dao + * @param array $item * @throws CRM_Core_Exception */ - protected function removeStaleEntity($dao) { - $policy = empty($dao->cleanup) ? 'always' : $dao->cleanup; + protected function removeStaleEntity(array $item) { + $policy = empty($item['cleanup']) ? 'always' : $item['cleanup']; switch ($policy) { case 'always': $doDelete = TRUE; @@ -444,12 +314,12 @@ class CRM_Core_ManagedEntities { break; case 'unused': - if (CRM_Core_BAO_Managed::isApi4ManagedType($dao->entity_type)) { - $getRefCount = \Civi\Api4\Utils\CoreUtil::getRefCount($dao->entity_type, $dao->entity_id); + if (CRM_Core_BAO_Managed::isApi4ManagedType($item['entity_type'])) { + $getRefCount = \Civi\Api4\Utils\CoreUtil::getRefCount($item['entity_type'], $item['entity_id']); } else { - $getRefCount = civicrm_api3($dao->entity_type, 'getrefcount', [ - 'id' => $dao->entity_id, + $getRefCount = civicrm_api3($item['entity_type'], 'getrefcount', [ + 'id' => $item['entity_id'], ])['values']; } @@ -468,43 +338,34 @@ class CRM_Core_ManagedEntities { // APIv4 delete - deletion from `civicrm_managed` will be taken care of by // CRM_Core_BAO_Managed::on_hook_civicrm_post() - if ($doDelete && CRM_Core_BAO_Managed::isApi4ManagedType($dao->entity_type)) { - civicrm_api4($dao->entity_type, 'delete', [ + if ($doDelete && CRM_Core_BAO_Managed::isApi4ManagedType($item['entity_type'])) { + civicrm_api4($item['entity_type'], 'delete', [ 'checkPermissions' => FALSE, - 'where' => [['id', '=', $dao->entity_id]], + 'where' => [['id', '=', $item['entity_id']]], ]); } // APIv3 delete elseif ($doDelete) { $params = [ 'version' => 3, - 'id' => $dao->entity_id, + 'id' => $item['entity_id'], ]; - $check = civicrm_api3($dao->entity_type, 'get', $params); + $check = civicrm_api3($item['entity_type'], 'get', $params); if ($check['count']) { - $result = civicrm_api($dao->entity_type, 'delete', $params); + $result = civicrm_api($item['entity_type'], 'delete', $params); if ($result['is_error']) { - if (isset($dao->name)) { - $params['name'] = $dao->name; + if (isset($item['name'])) { + $params['name'] = $item['name']; } - $this->onApiError($dao->entity_type, 'delete', $params, $result); + $this->onApiError($item['entity_type'], 'delete', $params, $result); } } CRM_Core_DAO::executeQuery('DELETE FROM civicrm_managed WHERE id = %1', [ - 1 => [$dao->id, 'Integer'], + 1 => [$item['id'], 'Integer'], ]); } } - /** - * Get declarations. - * - * @return array|null - */ - protected function getDeclarations() { - return $this->declarations; - } - /** * @param array $modules * Array<CRM_Core_Module>. @@ -547,22 +408,20 @@ class CRM_Core_ManagedEntities { /** * @param array $declarations * - * @return string|bool - * string on error, or FALSE + * @throws CRM_Core_Exception */ protected function validate($declarations) { foreach ($declarations as $module => $declare) { foreach (['name', 'module', 'entity', 'params'] as $key) { if (empty($declare[$key])) { $str = print_r($declare, TRUE); - return ts('Managed Entity (%1) is missing field "%2": %3', [$module, $key, $str]); + throw new CRM_Core_Exception(ts('Managed Entity (%1) is missing field "%2": %3', [$module, $key, $str])); } } if (!$this->isModuleRecognised($declare['module'])) { - return ts('Entity declaration references invalid or inactive module name [%1]', [$declare['module']]); + throw new CRM_Core_Exception(ts('Entity declaration references invalid or inactive module name [%1]', [$declare['module']])); } } - return FALSE; } /** @@ -598,20 +457,6 @@ class CRM_Core_ManagedEntities { return isset($this->moduleIndex[FALSE][$module]); } - /** - * @param array $declarations - * - * @return array - */ - protected function cleanDeclarations(array $declarations): array { - foreach ($declarations as $name => &$declare) { - if (!array_key_exists('name', $declare)) { - $declare['name'] = $name; - } - } - return $declarations; - } - /** * @param string $entity * @param string $action @@ -652,38 +497,59 @@ class CRM_Core_ManagedEntities { } /** - * Load declarations into the class property. + * Load managed entity declarations. * * This picks it up from hooks and enabled components. + * + * @param array|null $modules + * Limit reconciliation specified modules. + * @return array[] */ - protected function loadDeclarations(): void { - $this->declarations = []; - foreach (CRM_Core_Component::getEnabledComponents() as $component) { - $this->declarations = array_merge($this->declarations, $component->getManagedEntities()); + protected function getDeclarations($modules = NULL): array { + $declarations = []; + // Exclude components if given a module name. + if (!$modules || $modules === ['civicrm']) { + foreach (CRM_Core_Component::getEnabledComponents() as $component) { + $declarations = array_merge($declarations, $component->getManagedEntities()); + } } - CRM_Utils_Hook::managed($this->declarations); - $this->declarations = $this->cleanDeclarations($this->declarations); + CRM_Utils_Hook::managed($declarations, $modules); + $this->validate($declarations); + foreach (array_keys($declarations) as $name) { + $declarations[$name] += ['name' => $name]; + } + return $declarations; } - protected function loadManagedEntityActions(): void { - $managedEntities = Managed::get(FALSE)->addSelect('*')->execute(); - $this->managedActions = []; + /** + * Builds $this->managedActions array + * + * @param array $declarations + * @param array|null $modules + * @return array[] + */ + protected function createPlan(array $declarations, $modules = NULL): array { + $where = $modules ? [['module', 'IN', $modules]] : []; + $managedEntities = Managed::get(FALSE) + ->setWhere($where) + ->execute(); + $plan = []; foreach ($managedEntities as $managedEntity) { $key = "{$managedEntity['module']}_{$managedEntity['name']}_{$managedEntity['entity_type']}"; - // Set to 'delete' - it will be overwritten below if it is to be updated. - $action = 'delete'; - $this->managedActions[$key] = array_merge($managedEntity, ['managed_action' => $action]); + // Set to disable or delete if module is disabled or missing - it will be overwritten below module is active. + $action = $this->isModuleDisabled($managedEntity['module']) ? 'disable' : 'delete'; + $plan[$key] = array_merge($managedEntity, ['managed_action' => $action]); } - foreach ($this->declarations as $declaration) { + foreach ($declarations as $declaration) { $key = "{$declaration['module']}_{$declaration['name']}_{$declaration['entity']}"; - if (isset($this->managedActions[$key])) { - $this->managedActions[$key]['params'] = $declaration['params']; - $this->managedActions[$key]['managed_action'] = 'update'; - $this->managedActions[$key]['cleanup'] = $declaration['cleanup'] ?? NULL; - $this->managedActions[$key]['update'] = $declaration['update'] ?? 'always'; + if (isset($plan[$key])) { + $plan[$key]['params'] = $declaration['params']; + $plan[$key]['managed_action'] = 'update'; + $plan[$key]['cleanup'] = $declaration['cleanup'] ?? NULL; + $plan[$key]['update'] = $declaration['update'] ?? 'always'; } else { - $this->managedActions[$key] = [ + $plan[$key] = [ 'module' => $declaration['module'], 'name' => $declaration['name'], 'entity_type' => $declaration['entity'], @@ -694,6 +560,7 @@ class CRM_Core_ManagedEntities { ]; } } + return $plan; } } diff --git a/civicrm/CRM/Core/Page/FakeError.php b/civicrm/CRM/Core/Page/FakeError.php new file mode 100644 index 0000000000..a98dda740c --- /dev/null +++ b/civicrm/CRM/Core/Page/FakeError.php @@ -0,0 +1,59 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * The "civicrm/dev/fake-error" page is a mock to facilitate E2E testing of the error-reporting mechanism. + * Use this page to provoke common/representative errors. + * + * Of course, we don't want to permit arbitrary users to provoke arbitrary errors -- that could + * lead to noisy/confusing logs. + * + * This has two main modes: + * + * - If you give no parameters (or unsigned parameters), it simply says "Hello world". + * - If you give an authentic JWT with the claim `civi.fake-error`, then it will report + * one of the pre-canned error messages. + */ +class CRM_Core_Page_FakeError extends CRM_Core_Page { + + public function run() { + try { + /** @var \Civi\Crypto\CryptoJwt $jwt */ + $jwt = Civi::service('crypto.jwt'); + $claims = $jwt->decode(CRM_Utils_Request::retrieve('token', 'String')); + } + catch (\Exception $e) { + $claims = []; + } + + if (empty($claims['civi.fake-error'])) { + echo 'Hello world'; + return; + } + + switch ($claims['civi.fake-error']) { + case 'exception': + throw new \CRM_Core_Exception("This is a fake problem (exception)."); + + case 'fatal': + CRM_Core_Error::fatal('This is a fake problem (fatal).'); + break; + + case 'permission': + CRM_Utils_System::permissionDenied(); + break; + + default: + return 'Unrecognized error type.'; + } + } + +} diff --git a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php index 939bd86836..79b0585618 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php @@ -52,7 +52,7 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { $this->getInput($input); // load post ids in $ids - $this->getIDs($ids, $input); + $this->getIDs($ids); $paymentProcessorID = $this->getPaymentProcessorID(); // Check if the contribution exists @@ -118,10 +118,9 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { $now = date('YmdHis'); $isFirstOrLastRecurringPayment = FALSE; - if ($input['response_code'] == 1) { + if ($this->isSuccess()) { // Approved if ($first) { - $recur->start_date = $now; $recur->trxn_id = $recur->processor_id; $isFirstOrLastRecurringPayment = CRM_Core_Payment::RECURRING_PAYMENT_START; } @@ -168,7 +167,6 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { public function getInput(&$input) { $input['amount'] = $this->retrieve('x_amount', 'String'); $input['subscription_id'] = $this->getRecurProcessorID(); - $input['response_code'] = $this->retrieve('x_response_code', 'Integer'); $input['response_reason_code'] = $this->retrieve('x_response_reason_code', 'String', FALSE); $input['response_reason_text'] = $this->retrieve('x_response_reason_text', 'String', FALSE); $input['subscription_paynum'] = $this->retrieve('x_subscription_paynum', 'Integer', FALSE, 0); @@ -180,7 +178,7 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { } // Only assume trxn_id 'should' have been returned for success. // Per CRM-17611 it would also not be passed back for a decline. - elseif ($input['response_code'] == 1) { + elseif ($this->isSuccess()) { $input['is_test'] = 1; $input['trxn_id'] = md5(uniqid(rand(), TRUE)); } @@ -201,18 +199,26 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { } } + /** + * Was the transaction successful. + * + * @return bool + * @throws \CRM_Core_Exception + */ + private function isSuccess(): bool { + return $this->retrieve('x_response_code', 'Integer') === 1; + } + /** * Get ids from input. * * @param array $ids - * @param array $input * * @throws \CRM_Core_Exception */ - public function getIDs(&$ids, $input) { + public function getIDs(&$ids) { $ids['contribution'] = $this->getContributionID(); - $contributionRecur = $this->getContributionRecurObject($this->getRecurProcessorID(), (int) $this->retrieve('x_cust_id', 'Integer', FALSE, 0), $this->getContributionID()); - $ids['contributionRecur'] = (int) $contributionRecur->id; + $ids['contributionRecur'] = $this->getContributionRecurID(); } /** @@ -350,4 +356,15 @@ INNER JOIN civicrm_contribution co ON co.contribution_recur_id = cr.id return (int) $this->retrieve('x_invoice_num', 'Integer'); } + /** + * Get the id of the recurring contribution. + * + * @return int + * @throws \CRM_Core_Exception + */ + protected function getContributionRecurID(): int { + $contributionRecur = $this->getContributionRecurObject($this->getRecurProcessorID(), (int) $this->retrieve('x_cust_id', 'Integer', FALSE, 0), $this->getContributionID()); + return (int) $contributionRecur->id; + } + } diff --git a/civicrm/CRM/Core/Payment/Elavon.php b/civicrm/CRM/Core/Payment/Elavon.php index 75e2a37d21..fbc74d4344 100644 --- a/civicrm/CRM/Core/Payment/Elavon.php +++ b/civicrm/CRM/Core/Payment/Elavon.php @@ -96,14 +96,13 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { public function doPayment(&$params, $component = 'contribute') { $propertyBag = \Civi\Payment\PropertyBag::cast($params); $this->_component = $component; - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + $result = $this->setStatusPaymentPending([]); // If we have a $0 amount, skip call to processor and set payment_status to Completed. // Conceivably a processor might override this - perhaps for setting up a token - but we don't // have an example of that at the moment. if ($propertyBag->getAmount() == 0) { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); return $result; } @@ -217,8 +216,8 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { $trxn_id = (string) CRM_Core_DAO::singleValueQuery($query); $trxn_id = (int) str_replace('test', '', $trxn_id); ++$trxn_id; - $params['trxn_id'] = sprintf('test%08d', $trxn_id); - return $params; + $result['trxn_id'] = sprintf('test%08d', $trxn_id); + return $result; } throw new PaymentProcessorException('Error: [approval code related to test transaction but mode was ' . $this->_mode, 9099); } @@ -231,14 +230,13 @@ class CRM_Core_Payment_Elavon extends CRM_Core_Payment { // Success ! if ($this->_mode !== 'test') { // 'trxn_id' is varchar(255) field. returned value is length 37 - $params['trxn_id'] = $processorResponse['ssl_txn_id']; + $result['trxn_id'] = $processorResponse['ssl_txn_id']; } $params['trxn_result_code'] = $processorResponse['ssl_approval_code'] . "-Cvv2:" . $processorResponse['ssl_cvv2_response'] . "-avs:" . $processorResponse['ssl_avs_response']; - $params['payment_status_id'] = array_search('Completed', $statuses); - $params['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); - return $params; + return $result; } } diff --git a/civicrm/CRM/Core/Payment/FirstData.php b/civicrm/CRM/Core/Payment/FirstData.php index f6968c7e71..e0e6cdd427 100644 --- a/civicrm/CRM/Core/Payment/FirstData.php +++ b/civicrm/CRM/Core/Payment/FirstData.php @@ -150,14 +150,13 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { public function doPayment(&$params, $component = 'contribute') { $propertyBag = \Civi\Payment\PropertyBag::cast($params); $this->_component = $component; - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + $result = $this->setStatusPaymentPending([]); // If we have a $0 amount, skip call to processor and set payment_status to Completed. // Conceivably a processor might override this - perhaps for setting up a token - but we don't // have an example of that at the moment. if ($propertyBag->getAmount() == 0) { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); return $result; } @@ -301,9 +300,8 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { // Success ! //============= $params['trxn_result_code'] = $processorResponse['r_message']; - $params['trxn_id'] = $processorResponse['r_ref']; - $params['payment_status_id'] = array_search('Completed', $statuses); - $params['payment_status'] = 'Completed'; + $result['trxn_id'] = $processorResponse['r_ref']; + $result = $this->setStatusPaymentCompleted($result); CRM_Core_Error::debug_log_message("r_authresponse " . $processorResponse['r_authresponse']); CRM_Core_Error::debug_log_message("r_code " . $processorResponse['r_code']); CRM_Core_Error::debug_log_message("r_tdate " . $processorResponse['r_tdate']); @@ -314,7 +312,7 @@ class CRM_Core_Payment_FirstData extends CRM_Core_Payment { CRM_Core_Error::debug_log_message("r_message " . $processorResponse['r_message']); CRM_Core_Error::debug_log_message("r_ref " . $processorResponse['r_ref']); CRM_Core_Error::debug_log_message("r_time " . $processorResponse['r_time']); - return $params; + return $result; } } diff --git a/civicrm/CRM/Core/Payment/Manual.php b/civicrm/CRM/Core/Payment/Manual.php index 7889ccc2ed..360055e5c8 100644 --- a/civicrm/CRM/Core/Payment/Manual.php +++ b/civicrm/CRM/Core/Payment/Manual.php @@ -111,8 +111,18 @@ class CRM_Core_Payment_Manual extends CRM_Core_Payment { * @throws \Civi\Payment\Exception\PaymentProcessorException */ public function doPayment(&$params, $component = 'contribute') { - $params['payment_status_id'] = $this->getResult(); - return $params; + $result['payment_status_id'] = $this->getResult(); + if ($result['payment_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending')) { + $result = $this->setStatusPaymentPending($result); + } + elseif ($result['payment_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed')) { + $result = $this->setStatusPaymentCompleted($result); + } + else { + throw new \Civi\Payment\Exception\PaymentProcessorException('Result from doPayment MUST be one of Completed|Pending'); + } + + return $result; } /** diff --git a/civicrm/CRM/Core/Payment/PayJunction.php b/civicrm/CRM/Core/Payment/PayJunction.php index 0d67cfb032..2d0de55d3f 100644 --- a/civicrm/CRM/Core/Payment/PayJunction.php +++ b/civicrm/CRM/Core/Payment/PayJunction.php @@ -53,14 +53,13 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { public function doPayment(&$params, $component = 'contribute') { $propertyBag = \Civi\Payment\PropertyBag::cast($params); $this->_component = $component; - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + $result = $this->setStatusPaymentPending([]); // If we have a $0 amount, skip call to processor and set payment_status to Completed. // Conceivably a processor might override this - perhaps for setting up a token - but we don't // have an example of that at the moment. if ($propertyBag->getAmount() == 0) { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); return $result; } @@ -165,11 +164,9 @@ class CRM_Core_Payment_PayJunction extends CRM_Core_Payment { // Success $params['trxn_result_code'] = $pjpgResponse['dc_response_code']; - $params['trxn_id'] = $pjpgResponse['dc_transaction_id']; - $params['payment_status_id'] = array_search('Completed', $statuses); - $params['payment_status'] = 'Completed'; - - return $params; + $result['trxn_id'] = $pjpgResponse['dc_transaction_id']; + $result = $this->setStatusPaymentCompleted($result); + return $result; } // end function doDirectPayment diff --git a/civicrm/CRM/Core/Payment/PayPalImpl.php b/civicrm/CRM/Core/Payment/PayPalImpl.php index 6d854859c0..f16370d206 100644 --- a/civicrm/CRM/Core/Payment/PayPalImpl.php +++ b/civicrm/CRM/Core/Payment/PayPalImpl.php @@ -488,17 +488,14 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $this->_component = $component; if ($this->isPayPalType($this::PAYPAL_EXPRESS) || ($this->isPayPalType($this::PAYPAL_PRO) && !empty($params['token']))) { return $this->doExpressCheckout($params); - } - - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + $result = $this->setStatusPaymentPending([]); // If we have a $0 amount, skip call to processor and set payment_status to Completed. // Conceivably a processor might override this - perhaps for setting up a token - but we don't // have an example of that at the mome. if ($params['amount'] == 0) { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); return $result; } @@ -510,13 +507,10 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $result = $this->doPaymentPayPalButton($params, $component); if (is_array($result) && !isset($result['payment_status_id'])) { if (!empty($params['is_recur'])) { - // See comment block. - $result['payment_status_id'] = array_search('Pending', $statuses); - $result['payment_status'] = 'Pending'; + $result = $this->setStatusPaymentPending($result); } else { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); } } } @@ -551,6 +545,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { public function doPaymentPayPalButton(&$params, $component = 'contribute') { $args = []; + $result = $this->setStatusPaymentPending([]); + $this->initialize($args, 'DoDirectPayment'); $args['paymentAction'] = 'Sale'; @@ -602,20 +598,26 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { // Allow further manipulation of the arguments via custom hooks .. CRM_Utils_Hook::alterPaymentProcessorParams($this, $params, $args); - $result = $this->invokeAPI($args); + $apiResult = $this->invokeAPI($args); $params['recurr_profile_id'] = NULL; if (CRM_Utils_Array::value('is_recur', $params) == 1) { - $params['recurr_profile_id'] = $result['profileid']; + $params['recurr_profile_id'] = $apiResult['profileid']; } /* Success */ + $result = $this->setStatusPaymentCompleted($result); + $doQueryParams = [ + 'gross_amount' => $apiResult['amt'] ?? NULL, + 'trxn_id' => $apiResult['transactionid'] ?? NULL, + 'is_recur' => $params['is_recur'] ?? FALSE, + ]; + $params = array_merge($params, $this->doQuery($doQueryParams)); - $params['trxn_id'] = $result['transactionid'] ?? NULL; - $params['gross_amount'] = $result['amt'] ?? NULL; - $params = array_merge($params, $this->doQuery($params)); - return $params; + $result['fee_amount'] = $params['fee_amount'] ?? 0; + $result['trxn_id'] = $apiResult['transactionid'] ?? NULL; + return $result; } /** diff --git a/civicrm/CRM/Core/Payment/PayPalProIPN.php b/civicrm/CRM/Core/Payment/PayPalProIPN.php index f8afbb1cd5..5ff6e0d317 100644 --- a/civicrm/CRM/Core/Payment/PayPalProIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalProIPN.php @@ -288,10 +288,7 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { break; case 'recurring_payment': - if ($first) { - $recur->start_date = $now; - } - else { + if (!$first) { if ($input['paymentStatus'] !== 'Completed') { throw new CRM_Core_Exception("Ignore all IPN payments that are not completed"); } @@ -319,11 +316,6 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { $subscriptionPaymentStatus = CRM_Core_Payment::RECURRING_PAYMENT_END; } - // make sure the contribution status is not done - // since order of ipn's is unknown - if ($recur->contribution_status_id != $contributionStatuses['Completed']) { - $recur->contribution_status_id = $contributionStatuses['In Progress']; - } break; } diff --git a/civicrm/CRM/Core/Payment/Realex.php b/civicrm/CRM/Core/Payment/Realex.php index f82eb024df..56d95a7734 100644 --- a/civicrm/CRM/Core/Payment/Realex.php +++ b/civicrm/CRM/Core/Payment/Realex.php @@ -66,14 +66,13 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { public function doPayment(&$params, $component = 'contribute') { $propertyBag = \Civi\Payment\PropertyBag::cast($params); $this->_component = $component; - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + $result = $this->setStatusPaymentPending([]); // If we have a $0 amount, skip call to processor and set payment_status to Completed. // Conceivably a processor might override this - perhaps for setting up a token - but we don't // have an example of that at the moment. if ($propertyBag->getAmount() == 0) { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); return $result; } @@ -81,7 +80,7 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { throw new PaymentProcessorException(ts('RealAuth requires curl with SSL support'), 9001); } - $result = $this->setRealexFields($params); + $this->setRealexFields($params); /********************************************************** * Check to see if we have a duplicate before we send @@ -185,14 +184,13 @@ class CRM_Core_Payment_Realex extends CRM_Core_Payment { 'trxn_result_code' => $response['RESULT'], ]; - $params['trxn_id'] = $response['PASREF']; $params['trxn_result_code'] = serialize($extras); $params['currencyID'] = $this->_getParam('currency'); - $params['fee_amount'] = 0; - $params['payment_status_id'] = array_search('Completed', $statuses); - $params['payment_status'] = 'Completed'; + $result['trxn_id'] = $response['PASREF']; + $result['fee_amount'] = 0; + $result = $this->setStatusPaymentCompleted($result); - return $params; + return $result; } /** diff --git a/civicrm/CRM/Core/Permission.php b/civicrm/CRM/Core/Permission.php index 8645a83684..921e59549f 100644 --- a/civicrm/CRM/Core/Permission.php +++ b/civicrm/CRM/Core/Permission.php @@ -1543,6 +1543,18 @@ class CRM_Core_Permission { $permissions['option_value'] = $permissions['uf_group']; $permissions['option_group'] = $permissions['option_value']; + // User Job permissions - we access these using acls on the get action. + // For create it probably makes sense (at least initially) to be stricter + // as the forms doing the work can set the permission check to FALSE. + $permissions['user_job'] = [ + 'get' => [ + 'access CiviCRM', + ], + 'default' => [ + 'administer CiviCRM', + ], + ]; + $permissions['custom_value'] = [ 'gettree' => ['access CiviCRM'], ]; diff --git a/civicrm/CRM/Core/Permission/Drupal6.php b/civicrm/CRM/Core/Permission/Drupal6.php deleted file mode 100644 index 5bae3568bd..0000000000 --- a/civicrm/CRM/Core/Permission/Drupal6.php +++ /dev/null @@ -1,204 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ - -/** - * - */ -class CRM_Core_Permission_Drupal6 extends CRM_Core_Permission_DrupalBase { - - /** - * Is this user someone with access for the entire system. - * - * @var bool - */ - protected $_viewAdminUser = FALSE; - protected $_editAdminUser = FALSE; - - /** - * Am in in view permission or edit permission? - * @var bool - */ - protected $_viewPermission = FALSE; - protected $_editPermission = FALSE; - - /** - * The current set of permissioned groups for the user. - * - * @var array - */ - protected $_viewPermissionedGroups; - protected $_editPermissionedGroups; - - /** - * Given a permission string, check for access requirements - * - * @param string $str - * The permission to check. - * - * @param int $userId - * - * @return bool - * true if yes, else false - */ - public function check($str, $userId = NULL) { - $str = $this->translatePermission($str, 'Drupal6', [ - 'view user account' => 'access user profiles', - 'administer users' => 'administer users', - ]); - if ($str == CRM_Core_Permission::ALWAYS_DENY_PERMISSION) { - return FALSE; - } - if ($str == CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION) { - return TRUE; - } - if (function_exists('user_access')) { - $account = NULL; - if ($userId || $userId === 0) { - $account = user_load($userId); - } - return user_access($str, $account); - } - return TRUE; - } - - /** - * Given a roles array, check for access requirements - * - * @param array $array - * The roles to check. - * - * @return bool - * true if yes, else false - */ - public function checkGroupRole($array) { - if (function_exists('user_load') && isset($array)) { - $user = user_load(['uid' => $GLOBALS['user']->uid]); - //if giver roles found in user roles - return true - foreach ($array as $key => $value) { - if (in_array($value, $user->roles)) { - return TRUE; - } - } - } - return FALSE; - } - - /** - * Get all the contact emails for users that have a specific role. - * - * @param string $roleName - * Name of the role we are interested in. - * - * @return string - * a comma separated list of email addresses - */ - public function roleEmails($roleName) { - static $_cache = []; - - if (isset($_cache[$roleName])) { - return $_cache[$roleName]; - } - - $uids = []; - $sql = " - SELECT {users}.uid - FROM {users} - LEFT JOIN {users_roles} ON {users}.uid = {users_roles}.uid - INNER JOIN {role} ON ( {role}.rid = {users_roles}.rid OR {role}.rid = 2 ) - WHERE {role}. name LIKE '%%{$roleName}%%' - AND {users}.status = 1 - "; - - $query = db_query($sql); - while ($result = db_fetch_object($query)) { - $uids[] = $result->uid; - } - - $_cache[$roleName] = self::getContactEmails($uids); - return $_cache[$roleName]; - } - - /** - * Get all the contact emails for users that have a specific permission. - * - * @param string $permissionName - * Name of the permission we are interested in. - * - * @return string - * a comma separated list of email addresses - */ - public function permissionEmails($permissionName) { - static $_cache = []; - - if (isset($_cache[$permissionName])) { - return $_cache[$permissionName]; - } - - $uids = []; - $sql = " - SELECT {users}.uid, {permission}.perm - FROM {users} - LEFT JOIN {users_roles} ON {users}.uid = {users_roles}.uid - INNER JOIN {permission} ON ( {permission}.rid = {users_roles}.rid OR {permission}.rid = 2 ) - WHERE {permission}.perm LIKE '%%{$permissionName}%%' - AND {users}.status = 1 - "; - - $query = db_query($sql); - while ($result = db_fetch_object($query)) { - $uids[] = $result->uid; - } - - $_cache[$permissionName] = self::getContactEmails($uids); - return $_cache[$permissionName]; - } - - /** - * @inheritDoc - */ - public function isModulePermissionSupported() { - return TRUE; - } - - /** - * @inheritDoc - * - * Does nothing in Drupal 6. - */ - public function upgradePermissions($permissions) { - // D6 allows us to be really lazy... things get cleaned up when the admin form is next submitted... - } - - /** - * Get the permissions defined in the hook_civicrm_permission implementation - * of the given module. - * - * @param $module - * - * @return array - * Array of permissions, in the same format as CRM_Core_Permission::getCorePermissions(). - */ - public function getModulePermissions($module):array { - $return_permissions = []; - $fn_name = "{$module}_civicrm_permission"; - if (function_exists($fn_name)) { - $fn_name($return_permissions); - } - return $return_permissions; - } - -} diff --git a/civicrm/CRM/Core/PseudoConstant.php b/civicrm/CRM/Core/PseudoConstant.php index c24d734fca..ca7189dc31 100644 --- a/civicrm/CRM/Core/PseudoConstant.php +++ b/civicrm/CRM/Core/PseudoConstant.php @@ -1598,7 +1598,7 @@ WHERE id = %1 * List of options, each as a record of id+name+label. * Ex: [['id' => 123, 'name' => 'foo_bar', 'label' => 'Foo Bar']] */ - private static function formatArrayOptions($context, array &$options) { + public static function formatArrayOptions($context, array &$options) { // Already flat; return keys/values according to context if (!isset($options[0]) || !is_array($options[0])) { // For validate context, machine names are expected in place of labels. diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index 6f309fedd5..389e988553 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -223,33 +223,17 @@ class CRM_Core_SelectValues { } /** - * Various pre defined extensions for dynamic properties and groups. + * List of entities to present on the Custom Group form. * - * @return array + * Includes pseudo-entities for Participant, in order to present sub-types on the form. * + * @return array */ public static function customGroupExtends() { - $customGroupExtends = [ - 'Activity' => ts('Activities'), - 'Relationship' => ts('Relationships'), - 'Contribution' => ts('Contributions'), - 'ContributionRecur' => ts('Recurring Contributions'), - 'Group' => ts('Groups'), - 'Membership' => ts('Memberships'), - 'Event' => ts('Events'), - 'Participant' => ts('Participants'), - 'ParticipantRole' => ts('Participants (Role)'), - 'ParticipantEventName' => ts('Participants (Event Name)'), - 'ParticipantEventType' => ts('Participants (Event Type)'), - 'Pledge' => ts('Pledges'), - 'Grant' => ts('Grants'), - 'Address' => ts('Addresses'), - 'Campaign' => ts('Campaigns'), - ]; - $contactTypes = ['Contact' => ts('Contacts')] + self::contactType(); - $extendObjs = CRM_Core_OptionGroup::values('cg_extend_objects'); - $customGroupExtends = array_merge($contactTypes, $customGroupExtends, $extendObjs); - return $customGroupExtends; + $customGroupExtends = array_column(CRM_Core_BAO_CustomGroup::getCustomGroupExtendsOptions(), 'label', 'id'); + // ParticipantRole, ParticipantEventName, etc. + $pseudoSelectors = CRM_Core_OptionGroup::values('custom_data_type', FALSE, FALSE, FALSE, NULL, 'label', TRUE, FALSE, 'name'); + return array_merge($customGroupExtends, $pseudoSelectors); } /** diff --git a/civicrm/CRM/Core/xml/Menu/Import.xml b/civicrm/CRM/Core/xml/Menu/Import.xml index e874e2a5b0..33d935c634 100644 --- a/civicrm/CRM/Core/xml/Menu/Import.xml +++ b/civicrm/CRM/Core/xml/Menu/Import.xml @@ -17,6 +17,12 @@ <page_callback>CRM_Contact_Import_Controller</page_callback> <weight>410</weight> </item> + <item> + <path>civicrm/import/outcome</path> + <title>Import results</title> + <access_arguments>access CiviCRM</access_arguments> + <page_callback>CRM_Import_Forms::outputCSV</page_callback> + </item> <item> <path>civicrm/import/activity</path> <title>Import Activities</title> @@ -39,4 +45,12 @@ <page_callback>CRM_Contact_Import_Page_AJAX::status</page_callback> <access_arguments>import contacts,access CiviCRM</access_arguments> </item> + <item> + <path>civicrm/import/datasource</path> + <title>Import</title> + <access_arguments>access CiviCRM</access_arguments> + <page_type>1</page_type> + <page_callback>CRM_Import_Form_DataSourceConfig</page_callback> + <weight>450</weight> + </item> </menu> diff --git a/civicrm/CRM/Core/xml/Menu/Misc.xml b/civicrm/CRM/Core/xml/Menu/Misc.xml index 5be55e8322..89b5f35e4f 100644 --- a/civicrm/CRM/Core/xml/Menu/Misc.xml +++ b/civicrm/CRM/Core/xml/Menu/Misc.xml @@ -178,6 +178,13 @@ <title>QUnit</title> <access_arguments>administer CiviCRM</access_arguments> </item> + <item> + <path>civicrm/dev/fake-error</path> + <page_callback>CRM_Core_Page_FakeError</page_callback> + <title>Fake Error</title> + <is_public>true</is_public> + <access_arguments>*always allow*</access_arguments> + </item> <item> <path>civicrm/profile-editor/schema</path> <page_callback>CRM_UF_Page_ProfileEditor::getSchemaJSON</page_callback> diff --git a/civicrm/CRM/Custom/Import/Form/DataSource.php b/civicrm/CRM/Custom/Import/Form/DataSource.php index 4257fd0dc6..92514fc07b 100644 --- a/civicrm/CRM/Custom/Import/Form/DataSource.php +++ b/civicrm/CRM/Custom/Import/Form/DataSource.php @@ -24,6 +24,28 @@ class CRM_Custom_Import_Form_DataSource extends CRM_Import_Form_DataSource { const IMPORT_ENTITY = 'Multi value custom data'; + /** + * Get the import entity (translated). + * + * Used for template layer text. + * + * @return string + */ + protected function getTranslatedEntity(): string { + return ts('Multi-value Custom Data'); + } + + /** + * Get the import entity plural (translated). + * + * Used for template layer text. + * + * @return string + */ + protected function getTranslatedEntities(): string { + return ts('multi-value custom data records'); + } + /** * @return array */ diff --git a/civicrm/CRM/Custom/Import/Form/MapField.php b/civicrm/CRM/Custom/Import/Form/MapField.php index 64cc0c6287..79bb9e4376 100644 --- a/civicrm/CRM/Custom/Import/Form/MapField.php +++ b/civicrm/CRM/Custom/Import/Form/MapField.php @@ -35,8 +35,6 @@ class CRM_Custom_Import_Form_MapField extends CRM_Contact_Import_Form_MapField { $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); $this->_onDuplicate = $this->get('onDuplicate'); if ($skipColumnHeader) { - //showColNames needs to be true to show "Column Names" column - $this->assign('showColNames', $skipColumnHeader); $this->assign('columnNames', $columnNames); /* if we had a column header to skip, stash it for later */ $this->_columnHeaders = $this->_dataValues[0]; @@ -144,9 +142,6 @@ class CRM_Custom_Import_Form_MapField extends CRM_Contact_Import_Form_MapField { return; } - $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); $this->_entity = $this->controller->exportValue('DataSource', 'entity'); $mapper = []; @@ -211,7 +206,7 @@ class CRM_Custom_Import_Form_MapField extends CRM_Contact_Import_Form_MapField { $parser = new $this->_parser($mapperKeysMain); $parser->setEntity($this->_multipleCustomData); - $parser->run($fileName, $separator, $mapper, $skipColumnHeader, + $parser->run($this->getSubmittedValue('uploadFile'), $this->getSubmittedValue('fieldSeparator'), $mapper, $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_PREVIEW, $this->get('contactType') ); // add all the necessary variables to the form diff --git a/civicrm/CRM/Custom/Import/Form/Preview.php b/civicrm/CRM/Custom/Import/Form/Preview.php index 0abfd72195..b917b928e1 100644 --- a/civicrm/CRM/Custom/Import/Form/Preview.php +++ b/civicrm/CRM/Custom/Import/Form/Preview.php @@ -5,7 +5,7 @@ */ class CRM_Custom_Import_Form_Preview extends CRM_Import_Form_Preview { public $_parser = 'CRM_Custom_Import_Parser_Api'; - protected $_importParserUrl = '&parser=CRM_Custom_Import_Parser'; + protected $_importParserUrl = '&parser=CRM_Custom_Import_Parser_Api'; /** * Set variables up before form is built. @@ -13,13 +13,11 @@ class CRM_Custom_Import_Form_Preview extends CRM_Import_Form_Preview { * @return void */ public function preProcess() { - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - + parent::preProcess(); //get the data from the session $dataValues = $this->get('dataValues'); $mapper = $this->get('mapper'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $mismatchCount = $this->get('unMatchCount'); $entity = $this->get('_entity'); @@ -32,24 +30,11 @@ class CRM_Custom_Import_Form_Preview extends CRM_Import_Form_Preview { } $this->assign('savedMappingName', $mappingId ? $mapDAO->name : NULL); - if ($skipColumnHeader) { - $this->assign('skipColumnHeader', $skipColumnHeader); - $this->assign('rowDisplayCount', 3); - } - else { - $this->assign('rowDisplayCount', 2); - } - if ($invalidRowCount) { $urlParams = 'type=' . CRM_Import_Parser::ERROR . $this->_importParserUrl; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } - if ($conflictRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . $this->_importParserUrl; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - } - if ($mismatchCount) { $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . $this->_importParserUrl; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); @@ -62,9 +47,7 @@ class CRM_Custom_Import_Form_Preview extends CRM_Import_Form_Preview { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', 'downloadErrorRecordsUrl', - 'downloadConflictRecordsUrl', 'downloadMismatchRecordsUrl', ]; @@ -80,11 +63,8 @@ class CRM_Custom_Import_Form_Preview extends CRM_Import_Form_Preview { * @return void */ public function postProcess() { - $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); + $fileName = $this->getSubmittedValue('uploadFile'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $onDuplicate = $this->get('onDuplicate'); $entity = $this->get('_entity'); @@ -107,9 +87,9 @@ class CRM_Custom_Import_Form_Preview extends CRM_Import_Form_Preview { } $mapperFields[] = implode(' - ', $header); } - $parser->run($fileName, $separator, + $parser->run($this->getSubmittedValue('uploadFile'), $this->getSubmittedValue('fieldSeparator'), $mapperFields, - $skipColumnHeader, + $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_IMPORT, $this->get('contactType'), $onDuplicate @@ -139,8 +119,6 @@ class CRM_Custom_Import_Form_Preview extends CRM_Import_Form_Preview { $this->set('errorFile', $errorFile); $urlParams = 'type=' . CRM_Import_Parser::ERROR . $this->_importParserUrl; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . $this->_importParserUrl; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . $this->_importParserUrl; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } diff --git a/civicrm/CRM/Custom/Import/Parser.php b/civicrm/CRM/Custom/Import/Parser.php deleted file mode 100644 index 7ac8b810bf..0000000000 --- a/civicrm/CRM/Custom/Import/Parser.php +++ /dev/null @@ -1,374 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ -abstract class CRM_Custom_Import_Parser extends CRM_Import_Parser { - - protected $_fileName; - - /** - * Imported file size. - * - * @var int - */ - protected $_fileSize; - - /** - * Separator being used - * @var string - */ - protected $_separator; - - /** - * Total number of lines in file - * @var int - */ - protected $_lineCount; - - /** - * Whether the file has a column header or not - * - * @var bool - */ - protected $_haveColumnHeader; - - /** - * @param string $fileName - * @param string $separator - * @param int $mapper - * @param bool $skipColumnHeader - * @param int|string $mode - * @param int|string $contactType - * @param int $onDuplicate - * - * @return mixed - * @throws Exception - */ - public function run( - $fileName, - $separator, - $mapper, - $skipColumnHeader = FALSE, - $mode = self::MODE_PREVIEW, - $contactType = self::CONTACT_INDIVIDUAL, - $onDuplicate = self::DUPLICATE_SKIP - ) { - if (!is_array($fileName)) { - throw new CRM_Core_Exception('Unable to determine import file'); - } - $fileName = $fileName['name']; - - switch ($contactType) { - case CRM_Import_Parser::CONTACT_INDIVIDUAL: - $this->_contactType = 'Individual'; - break; - - case CRM_Import_Parser::CONTACT_HOUSEHOLD: - $this->_contactType = 'Household'; - break; - - case CRM_Import_Parser::CONTACT_ORGANIZATION: - $this->_contactType = 'Organization'; - } - $this->init(); - - $this->_haveColumnHeader = $skipColumnHeader; - - $this->_separator = $separator; - - $fd = fopen($fileName, "r"); - if (!$fd) { - return FALSE; - } - - $this->_lineCount = $this->_warningCount = 0; - $this->_invalidRowCount = $this->_validCount = 0; - $this->_totalCount = $this->_conflictCount = 0; - - $this->_errors = []; - $this->_warnings = []; - $this->_conflicts = []; - - $this->_fileSize = number_format(filesize($fileName) / 1024.0, 2); - - if ($mode == self::MODE_MAPFIELD) { - $this->_rows = []; - } - else { - $this->_activeFieldCount = count($this->_activeFields); - } - - while (!feof($fd)) { - $this->_lineCount++; - - $values = fgetcsv($fd, 8192, $separator); - if (!$values) { - continue; - } - - self::encloseScrub($values); - - // skip column header if we're not in mapfield mode - if ($mode != self::MODE_MAPFIELD && $skipColumnHeader) { - $skipColumnHeader = FALSE; - continue; - } - - /* trim whitespace around the values */ - - $empty = TRUE; - foreach ($values as $k => $v) { - $values[$k] = trim($v, " \t\r\n"); - } - - if (CRM_Utils_System::isNull($values)) { - continue; - } - - $this->_totalCount++; - - if ($mode == self::MODE_MAPFIELD) { - $returnCode = $this->mapField($values); - } - elseif ($mode == self::MODE_PREVIEW) { - $returnCode = $this->preview($values); - } - elseif ($mode == self::MODE_SUMMARY) { - $returnCode = $this->summary($values); - } - elseif ($mode == self::MODE_IMPORT) { - $returnCode = $this->import($onDuplicate, $values); - } - else { - $returnCode = self::ERROR; - } - - // note that a line could be valid but still produce a warning - if ($returnCode & self::VALID) { - $this->_validCount++; - if ($mode == self::MODE_MAPFIELD) { - $this->_rows[] = $values; - $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); - } - } - - if ($returnCode & self::WARNING) { - $this->_warningCount++; - if ($this->_warningCount < $this->_maxWarningCount) { - $this->_warnings[] = $this->_lineCount; - } - } - - if ($returnCode & self::ERROR) { - $this->_invalidRowCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_errors[] = $values; - } - - if ($returnCode & self::CONFLICT) { - $this->_conflictCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_conflicts[] = $values; - } - - if ($returnCode & self::DUPLICATE) { - $this->_duplicateCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_duplicates[] = $values; - if ($onDuplicate != self::DUPLICATE_SKIP) { - $this->_validCount++; - } - } - - // we give the derived class a way of aborting the process - // note that the return code could be multiple code or'ed together - if ($returnCode & self::STOP) { - break; - } - - // if we are done processing the maxNumber of lines, break - if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { - break; - } - } - - fclose($fd); - - if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { - $customHeaders = $mapper; - - $customfields = CRM_Core_BAO_CustomField::getFields('Activity'); - foreach ($customHeaders as $key => $value) { - if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { - $customHeaders[$key] = $customfields[$id][0]; - } - } - if ($this->_invalidRowCount) { - // removed view url for invlaid contacts - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_errorFileName = self::errorFileName(self::ERROR); - CRM_Contact_Import_Parser::exportCSV($this->_errorFileName, $headers, $this->_errors); - } - if ($this->_conflictCount) { - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_conflictFileName = self::errorFileName(self::CONFLICT); - CRM_Contact_Import_Parser::exportCSV($this->_conflictFileName, $headers, $this->_conflicts); - } - if ($this->_duplicateCount) { - $headers = array_merge([ - ts('Line Number'), - ts('View Activity History URL'), - ], $customHeaders); - - $this->_duplicateFileName = self::errorFileName(self::DUPLICATE); - CRM_Contact_Import_Parser::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); - } - } - return $this->fini(); - } - - /** - * Given a list of the importable field keys that the user has selected - * set the active fields array to this list - * - * @param array $fieldKeys mapped array of values - * - * @return void - */ - public function setActiveFields($fieldKeys) { - $this->_activeFieldCount = count($fieldKeys); - foreach ($fieldKeys as $key) { - if (empty($this->_fields[$key])) { - $this->_activeFields[] = new CRM_Custom_Import_Field('', ts('- do not import -')); - } - else { - $this->_activeFields[] = clone($this->_fields[$key]); - } - } - } - - /** - * Format the field values for input to the api. - * - * @return array - * (reference ) associative array of name/value pairs - */ - public function &getActiveFieldParams() { - $params = []; - for ($i = 0; $i < $this->_activeFieldCount; $i++) { - if (isset($this->_activeFields[$i]->_value) - && !isset($params[$this->_activeFields[$i]->_name]) - && !isset($this->_activeFields[$i]->_related) - ) { - $params[$this->_activeFields[$i]->_name] = $this->_activeFields[$i]->_value; - } - } - return $params; - } - - /** - * Store parser values. - * - * @param CRM_Core_Session $store - * - * @param int $mode - * - * @return void - */ - public function set($store, $mode = self::MODE_SUMMARY) { - $store->set('fileSize', $this->_fileSize); - $store->set('lineCount', $this->_lineCount); - $store->set('separator', $this->_separator); - $store->set('fields', $this->getSelectValues()); - $store->set('fieldTypes', $this->getSelectTypes()); - - $store->set('headerPatterns', $this->getHeaderPatterns()); - $store->set('dataPatterns', $this->getDataPatterns()); - $store->set('columnCount', $this->_activeFieldCount); - $store->set('_entity', $this->_entity); - $store->set('totalRowCount', $this->_totalCount); - $store->set('validRowCount', $this->_validCount); - $store->set('invalidRowCount', $this->_invalidRowCount); - $store->set('conflictRowCount', $this->_conflictCount); - - switch ($this->_contactType) { - case 'Individual': - $store->set('contactType', CRM_Import_Parser::CONTACT_INDIVIDUAL); - break; - - case 'Household': - $store->set('contactType', CRM_Import_Parser::CONTACT_HOUSEHOLD); - break; - - case 'Organization': - $store->set('contactType', CRM_Import_Parser::CONTACT_ORGANIZATION); - } - - if ($this->_invalidRowCount) { - $store->set('errorsFileName', $this->_errorFileName); - } - if ($this->_conflictCount) { - $store->set('conflictsFileName', $this->_conflictFileName); - } - if (isset($this->_rows) && !empty($this->_rows)) { - $store->set('dataValues', $this->_rows); - } - - if ($mode == self::MODE_IMPORT) { - $store->set('duplicateRowCount', $this->_duplicateCount); - if ($this->_duplicateCount) { - $store->set('duplicatesFileName', $this->_duplicateFileName); - } - } - } - - /** - * @param string $name - * @param $title - * @param int $type - * @param string $headerPattern - * @param string $dataPattern - * @param bool $hasLocationType - */ - public function addField( - $name, $title, $type = CRM_Utils_Type::T_INT, - $headerPattern = '//', $dataPattern = '//', - $hasLocationType = FALSE - ) { - $this->_fields[$name] = new CRM_Custom_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); - if (empty($name)) { - $this->_fields['doNotImport'] = new CRM_Custom_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); - } - } - -} diff --git a/civicrm/CRM/Custom/Import/Parser/Api.php b/civicrm/CRM/Custom/Import/Parser/Api.php index 28320ca624..042c910c02 100644 --- a/civicrm/CRM/Custom/Import/Parser/Api.php +++ b/civicrm/CRM/Custom/Import/Parser/Api.php @@ -3,7 +3,7 @@ /** * Class CRM_Custom_Import_Parser_Api */ -class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { +class CRM_Custom_Import_Parser_Api extends CRM_Import_Parser { protected $_entity = ''; protected $_fields = []; @@ -17,6 +17,34 @@ class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { */ protected $_params = []; + protected $_fileName; + + /** + * Imported file size. + * + * @var int + */ + protected $_fileSize; + + /** + * Separator being used + * @var string + */ + protected $_separator; + + /** + * Total number of lines in file + * @var int + */ + protected $_lineCount; + + /** + * Whether the file has a column header or not + * + * @var bool + */ + protected $_haveColumnHeader; + /** * Class constructor. * @@ -24,7 +52,7 @@ class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { * @param null $mapperLocType * @param null $mapperPhoneType */ - public function __construct(&$mapperKeys, $mapperLocType = NULL, $mapperPhoneType = NULL) { + public function __construct(&$mapperKeys = [], $mapperLocType = NULL, $mapperPhoneType = NULL) { parent::__construct(); $this->_mapperKeys = &$mapperKeys; } @@ -58,18 +86,6 @@ class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { $this->setActiveFields($this->_mapperKeys); } - /** - * Handle the values in mapField mode. - * - * @param array $values - * The array of values belonging to this line. - * - * @return bool - */ - public function mapField(&$values) { - return CRM_Import_Parser::VALID; - } - /** * Handle the values in preview mode. * @@ -94,13 +110,11 @@ class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { * @see CRM_Custom_Import_Parser_BaseClass::summary() */ public function summary(&$values) { - $erroneousField = NULL; - $response = $this->setActiveFieldValues($values, $erroneousField); + $this->setActiveFieldValues($values); $errorRequired = FALSE; $missingField = ''; $this->_params = &$this->getActiveFieldParams(); - $formatted = $this->_params; $this->_updateWithId = FALSE; $this->_parseStreetAddress = CRM_Utils_Array::value('street_address_parsing', CRM_Core_BAO_Setting::valueOptions(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'address_options'), FALSE); @@ -186,7 +200,7 @@ class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { } /** - * Adapted from CRM_Contact_Import_Parser::formatCommonData + * Adapted from CRM_Contact_Import_Parser_Contact::formatCommonData * * TODO: Is this function even necessary? All values get passed to the api anyway. * @@ -288,14 +302,6 @@ class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { $this->_multipleCustomData = $entity; } - /** - * The initializer code, called before the processing - * - * @return void - */ - public function fini() { - } - /** * Return the field ids and names (with groups) for import purpose. * @@ -338,4 +344,303 @@ class CRM_Custom_Import_Parser_Api extends CRM_Custom_Import_Parser { return $importableFields; } + /** + * @param string $fileName + * @param string $separator + * @param int $mapper + * @param bool $skipColumnHeader + * @param int|string $mode + * @param int|string $contactType + * @param int $onDuplicate + * + * @return mixed + * @throws Exception + */ + public function run( + $fileName, + $separator, + $mapper, + $skipColumnHeader = FALSE, + $mode = self::MODE_PREVIEW, + $contactType = self::CONTACT_INDIVIDUAL, + $onDuplicate = self::DUPLICATE_SKIP + ) { + if (!is_array($fileName)) { + throw new CRM_Core_Exception('Unable to determine import file'); + } + $fileName = $fileName['name']; + + switch ($contactType) { + case CRM_Import_Parser::CONTACT_INDIVIDUAL: + $this->_contactType = 'Individual'; + break; + + case CRM_Import_Parser::CONTACT_HOUSEHOLD: + $this->_contactType = 'Household'; + break; + + case CRM_Import_Parser::CONTACT_ORGANIZATION: + $this->_contactType = 'Organization'; + } + $this->init(); + + $this->_haveColumnHeader = $skipColumnHeader; + + $this->_separator = $separator; + + $fd = fopen($fileName, "r"); + if (!$fd) { + return FALSE; + } + + $this->_lineCount = $this->_warningCount = 0; + $this->_invalidRowCount = $this->_validCount = 0; + $this->_totalCount = 0; + + $this->_errors = []; + $this->_warnings = []; + + $this->_fileSize = number_format(filesize($fileName) / 1024.0, 2); + + if ($mode == self::MODE_MAPFIELD) { + $this->_rows = []; + } + else { + $this->_activeFieldCount = count($this->_activeFields); + } + + while (!feof($fd)) { + $this->_lineCount++; + + $values = fgetcsv($fd, 8192, $separator); + if (!$values) { + continue; + } + + self::encloseScrub($values); + + // skip column header if we're not in mapfield mode + if ($mode != self::MODE_MAPFIELD && $skipColumnHeader) { + $skipColumnHeader = FALSE; + continue; + } + + /* trim whitespace around the values */ + + $empty = TRUE; + foreach ($values as $k => $v) { + $values[$k] = trim($v, " \t\r\n"); + } + + if (CRM_Utils_System::isNull($values)) { + continue; + } + + $this->_totalCount++; + + if ($mode == self::MODE_MAPFIELD) { + $returnCode = CRM_Import_Parser::VALID; + } + elseif ($mode == self::MODE_PREVIEW) { + $returnCode = $this->preview($values); + } + elseif ($mode == self::MODE_SUMMARY) { + $returnCode = $this->summary($values); + } + elseif ($mode == self::MODE_IMPORT) { + $returnCode = $this->import($onDuplicate, $values); + } + else { + $returnCode = self::ERROR; + } + + // note that a line could be valid but still produce a warning + if ($returnCode & self::VALID) { + $this->_validCount++; + if ($mode == self::MODE_MAPFIELD) { + $this->_rows[] = $values; + $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); + } + } + + if ($returnCode & self::WARNING) { + $this->_warningCount++; + if ($this->_warningCount < $this->_maxWarningCount) { + $this->_warnings[] = $this->_lineCount; + } + } + + if ($returnCode & self::ERROR) { + $this->_invalidRowCount++; + $recordNumber = $this->_lineCount; + if ($this->_haveColumnHeader) { + $recordNumber--; + } + array_unshift($values, $recordNumber); + $this->_errors[] = $values; + } + + if ($returnCode & self::DUPLICATE) { + $this->_duplicateCount++; + $recordNumber = $this->_lineCount; + if ($this->_haveColumnHeader) { + $recordNumber--; + } + array_unshift($values, $recordNumber); + $this->_duplicates[] = $values; + if ($onDuplicate != self::DUPLICATE_SKIP) { + $this->_validCount++; + } + } + + // if we are done processing the maxNumber of lines, break + if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { + break; + } + } + + fclose($fd); + + if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { + $customHeaders = $mapper; + + $customfields = CRM_Core_BAO_CustomField::getFields('Activity'); + foreach ($customHeaders as $key => $value) { + if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { + $customHeaders[$key] = $customfields[$id][0]; + } + } + if ($this->_invalidRowCount) { + // removed view url for invlaid contacts + $headers = array_merge([ + ts('Line Number'), + ts('Reason'), + ], $customHeaders); + $this->_errorFileName = self::errorFileName(self::ERROR); + CRM_Contact_Import_Parser_Contact::exportCSV($this->_errorFileName, $headers, $this->_errors); + } + + if ($this->_duplicateCount) { + $headers = array_merge([ + ts('Line Number'), + ts('View Activity History URL'), + ], $customHeaders); + + $this->_duplicateFileName = self::errorFileName(self::DUPLICATE); + CRM_Contact_Import_Parser_Contact::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); + } + } + } + + /** + * Given a list of the importable field keys that the user has selected + * set the active fields array to this list + * + * @param array $fieldKeys mapped array of values + * + * @return void + */ + public function setActiveFields($fieldKeys) { + $this->_activeFieldCount = count($fieldKeys); + foreach ($fieldKeys as $key) { + if (empty($this->_fields[$key])) { + $this->_activeFields[] = new CRM_Custom_Import_Field('', ts('- do not import -')); + } + else { + $this->_activeFields[] = clone($this->_fields[$key]); + } + } + } + + /** + * Format the field values for input to the api. + * + * @return array + * (reference ) associative array of name/value pairs + */ + public function &getActiveFieldParams() { + $params = []; + for ($i = 0; $i < $this->_activeFieldCount; $i++) { + if (isset($this->_activeFields[$i]->_value) + && !isset($params[$this->_activeFields[$i]->_name]) + && !isset($this->_activeFields[$i]->_related) + ) { + $params[$this->_activeFields[$i]->_name] = $this->_activeFields[$i]->_value; + } + } + return $params; + } + + /** + * Store parser values. + * + * @param CRM_Core_Session $store + * + * @param int $mode + * + * @return void + */ + public function set($store, $mode = self::MODE_SUMMARY) { + $store->set('fileSize', $this->_fileSize); + $store->set('lineCount', $this->_lineCount); + $store->set('separator', $this->_separator); + $store->set('fields', $this->getSelectValues()); + $store->set('fieldTypes', $this->getSelectTypes()); + + $store->set('headerPatterns', $this->getHeaderPatterns()); + $store->set('dataPatterns', $this->getDataPatterns()); + $store->set('columnCount', $this->_activeFieldCount); + $store->set('_entity', $this->_entity); + $store->set('totalRowCount', $this->_totalCount); + $store->set('validRowCount', $this->_validCount); + $store->set('invalidRowCount', $this->_invalidRowCount); + + switch ($this->_contactType) { + case 'Individual': + $store->set('contactType', CRM_Import_Parser::CONTACT_INDIVIDUAL); + break; + + case 'Household': + $store->set('contactType', CRM_Import_Parser::CONTACT_HOUSEHOLD); + break; + + case 'Organization': + $store->set('contactType', CRM_Import_Parser::CONTACT_ORGANIZATION); + } + + if ($this->_invalidRowCount) { + $store->set('errorsFileName', $this->_errorFileName); + } + + if (isset($this->_rows) && !empty($this->_rows)) { + $store->set('dataValues', $this->_rows); + } + + if ($mode == self::MODE_IMPORT) { + $store->set('duplicateRowCount', $this->_duplicateCount); + if ($this->_duplicateCount) { + $store->set('duplicatesFileName', $this->_duplicateFileName); + } + } + } + + /** + * @param string $name + * @param $title + * @param int $type + * @param string $headerPattern + * @param string $dataPattern + * @param bool $hasLocationType + */ + public function addField( + $name, $title, $type = CRM_Utils_Type::T_INT, + $headerPattern = '//', $dataPattern = '//', + $hasLocationType = FALSE + ) { + $this->_fields[$name] = new CRM_Custom_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); + if (empty($name)) { + $this->_fields['doNotImport'] = new CRM_Custom_Import_Field($name, $title, $type, $headerPattern, $dataPattern, $hasLocationType); + } + } + } diff --git a/civicrm/CRM/Custom/Page/Group.php b/civicrm/CRM/Custom/Page/Group.php index 919e5260e2..60185a2710 100644 --- a/civicrm/CRM/Custom/Page/Group.php +++ b/civicrm/CRM/Custom/Page/Group.php @@ -132,14 +132,13 @@ class CRM_Custom_Page_Group extends CRM_Core_Page { $customGroup[$id]['extends_display'] = $customGroupExtends[$customGroup[$id]['extends']]; } - //fix for Displaying subTypes + // FIXME: This hardcoded array is mostly redundant with CRM_Core_BAO_CustomGroup::getSubTypes $subTypes = []; $subTypes['Activity'] = CRM_Core_PseudoConstant::activityType(FALSE, TRUE, FALSE, 'label', TRUE); $subTypes['Contribution'] = CRM_Contribute_PseudoConstant::financialType(); $subTypes['Membership'] = CRM_Member_BAO_MembershipType::getMembershipTypes(FALSE); $subTypes['Event'] = CRM_Core_OptionGroup::values('event_type'); - $subTypes['Grant'] = CRM_Core_OptionGroup::values('grant_type'); $subTypes['Campaign'] = CRM_Campaign_PseudoConstant::campaignType(); $subTypes['Participant'] = []; $subTypes['ParticipantRole'] = CRM_Core_OptionGroup::values('participant_role'); diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index 0aadbbae0d..559e651d67 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -112,6 +112,19 @@ class CRM_Event_BAO_Event extends CRM_Event_DAO_Event { $copy = self::copy($params['template_id']); $params['id'] = $copy->id; unset($params['template_id']); + + //fix for api from template creation bug + civicrm_api4('ActionSchedule', 'update', [ + 'checkPermissions' => FALSE, + 'values' => [ + 'mapping_id' => CRM_Event_ActionMapping::EVENT_NAME_MAPPING_ID, + ], + 'where' => [ + ['entity_value', '=', $copy->id], + ['mapping_id', '=', CRM_Event_ActionMapping::EVENT_TPL_MAPPING_ID], + ], + ]); + } } diff --git a/civicrm/CRM/Event/BAO/Participant.php b/civicrm/CRM/Event/BAO/Participant.php index ec9a4eb7af..858f4aca55 100644 --- a/civicrm/CRM/Event/BAO/Participant.php +++ b/civicrm/CRM/Event/BAO/Participant.php @@ -1168,7 +1168,7 @@ UPDATE civicrm_participant } //thumb rule is if we triggering primary participant need to triggered additional - $allParticipantIds = $primaryANDAdditonalIds = []; + $allParticipantIds = $primaryANDAdditionalIds = []; foreach ($participantIds as $id) { $allParticipantIds[] = $id; if (self::isPrimaryParticipant($id)) { @@ -1181,7 +1181,7 @@ UPDATE civicrm_participant } if (!empty($additionalIds)) { $allParticipantIds = array_merge($allParticipantIds, $additionalIds); - $primaryANDAdditonalIds[$id] = $additionalIds; + $primaryANDAdditionalIds[$id] = $additionalIds; } } } @@ -1291,8 +1291,8 @@ UPDATE civicrm_participant } //check is it primary and has additional. - if (array_key_exists($participantId, $primaryANDAdditonalIds)) { - foreach ($primaryANDAdditonalIds[$participantId] as $additionalId) { + if (array_key_exists($participantId, $primaryANDAdditionalIds)) { + foreach ($primaryANDAdditionalIds[$participantId] as $additionalId) { if ($emailType) { $mail = self::sendTransitionParticipantMail($additionalId, @@ -1866,10 +1866,10 @@ WHERE civicrm_participant.contact_id = {$contactID} AND $details['ineligible_message'] = ts('This event registration can not be transferred or cancelled. Contact the event organizer if you have questions.'); return $details; } - //verify participant status is still Registered - if ($details['status'] != 'Registered') { + // Verify participant status is one that can be self-cancelled + if (!in_array($details['status'], ['Registered', 'Pending from pay later', 'On waitlist'])) { $details['eligible'] = FALSE; - $details['ineligible_message'] = "You cannot transfer or cancel your registration for " . $eventTitle . ' as you are not currently registered for this event.'; + $details['ineligible_message'] = ts('You cannot transfer or cancel your registration for %1 as you are not currently registered for this event.', [1 => $eventTitle]); return $details; } // Determine if it's too late to self-service cancel/transfer. diff --git a/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php b/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php index 4e9ab1bd75..3a649b8d43 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php +++ b/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php @@ -197,8 +197,10 @@ class CRM_Event_Form_ManageEvent_EventInfo extends CRM_Event_Form_ManageEvent { public static function formRule($values) { $errors = []; - if (!empty($values['end_date']) && ($values['end_date'] < $values['start_date'])) { - $errors['end_date'] = ts('End date should be after Start date.'); + // Validate start/end date inputs + $validateDates = \CRM_Utils_Date::validateStartEndDatepickerInputs('start_date', $values['start_date'], 'end_date', $values['end_date']); + if ($validateDates !== TRUE) { + $errors[$validateDates['key']] = $validateDates['message']; } //CRM-4286 diff --git a/civicrm/CRM/Event/Form/ManageEvent/Registration.php b/civicrm/CRM/Event/Form/ManageEvent/Registration.php index 53a6d5e99a..87b7ac5eda 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Registration.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Registration.php @@ -458,10 +458,10 @@ class CRM_Event_Form_ManageEvent_Registration extends CRM_Event_Form_ManageEvent } } - if (isset($values['registration_start_date']) && isset($values['registration_end_date'])) { - if ($values['registration_end_date'] < $values['registration_start_date']) { - $errorMsg['registration_end_date'] = ts('Registration end date should be after Registration start date'); - } + // Validate start/end date inputs + $validateDates = \CRM_Utils_Date::validateStartEndDatepickerInputs('registration_start_date', $values['registration_start_date'], 'registration_end_date', $values['registration_end_date']); + if ($validateDates !== TRUE) { + $errorMsg[$validateDates['key']] = $validateDates['message']; } //check that the selected profiles have either firstname+lastname or email required diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php index d9a8624d0e..e20c5d5c3d 100644 --- a/civicrm/CRM/Event/Form/Registration.php +++ b/civicrm/CRM/Event/Form/Registration.php @@ -1539,8 +1539,8 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { //lets get additional participant id to cancel. if ($this->_allowConfirmation && is_array($cancelledIds)) { - $additonalId = $value['participant_id'] ?? NULL; - if ($additonalId && $key = array_search($additonalId, $cancelledIds)) { + $additionalId = $value['participant_id'] ?? NULL; + if ($additionalId && $key = array_search($additionalId, $cancelledIds)) { unset($cancelledIds[$key]); } } diff --git a/civicrm/CRM/Event/Form/Registration/Confirm.php b/civicrm/CRM/Event/Form/Registration/Confirm.php index f1fcdc57ce..f07e2597b6 100644 --- a/civicrm/CRM/Event/Form/Registration/Confirm.php +++ b/civicrm/CRM/Event/Form/Registration/Confirm.php @@ -59,9 +59,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { $this->_params[0]['is_pay_later'] = $this->get('is_pay_later'); $this->assign('is_pay_later', $this->_params[0]['is_pay_later']); - if ($this->_params[0]['is_pay_later']) { - $this->assign('pay_later_receipt', $this->_values['event']['pay_later_receipt']); - } + $this->assign('pay_later_receipt', $this->_params[0]['is_pay_later'] ? $this->_values['event']['pay_later_receipt'] : NULL); CRM_Utils_Hook::eventDiscount($this, $this->_params); @@ -420,14 +418,14 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { elseif ($participantNum) { $participantCount[$participantNum] = 'participant'; } - $totalTaxAmount += CRM_Utils_Array::value('tax_amount', $record, 0); + $totalTaxAmount += $record['tax_amount'] ?? 0; if (!empty($record['is_primary'])) { $taxAmount = &$params[$participantNum]['tax_amount']; } //lets get additional participant id to cancel. if ($this->_allowConfirmation && is_array($cancelledIds)) { - $additonalId = $record['participant_id'] ?? NULL; - if ($additonalId && $key = array_search($additonalId, $cancelledIds)) { + $additionalId = $record['participant_id'] ?? NULL; + if ($additionalId && $key = array_search($additionalId, $cancelledIds)) { unset($cancelledIds[$key]); } } @@ -561,7 +559,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { } //passing contribution id is already registered. - $contribution = $this->processContribution($this, $value, $result, $contactID, $pending, $this->_paymentProcessor); + $contribution = $this->processContribution($value, $result, $contactID, $pending); $value['contributionID'] = $contribution->id; $value['receive_date'] = $contribution->receive_date; $value['trxn_id'] = $contribution->trxn_id; @@ -876,23 +874,21 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { /** * Process the contribution. * - * @param CRM_Core_Form $form * @param array $params * @param array $result * @param int $contactID * @param bool $pending - * @param array $paymentProcessor * * @return \CRM_Contribute_BAO_Contribution * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - protected function processContribution( - &$form, $params, $result, $contactID, - $pending = FALSE, - $paymentProcessor = NULL + private function processContribution( + $params, $result, $contactID, + $pending = FALSE ) { + $form = $this; // Note this used to be shared with the backoffice form & no longer is, some code may no longer be required. $transaction = new CRM_Core_Transaction(); @@ -920,13 +916,12 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { 'campaign_id' => $params['campaign_id'] ?? NULL, 'card_type_id' => $params['card_type_id'] ?? NULL, 'pan_truncation' => $params['pan_truncation'] ?? NULL, + // The ternary is probably redundant - paymentProcessor should always be set. + // For pay-later contributions it will be the pay-later processor. + 'payment_processor' => $this->_paymentProcessor ? $this->_paymentProcessor['id'] : NULL, + 'payment_instrument_id' => $this->_paymentProcessor ? $this->_paymentProcessor['payment_instrument_id'] : NULL, ]; - if ($paymentProcessor) { - $contribParams['payment_instrument_id'] = $paymentProcessor['payment_instrument_id']; - $contribParams['payment_processor'] = $paymentProcessor['id']; - } - if (!$pending && $result) { $contribParams += [ 'fee_amount' => $result['fee_amount'] ?? NULL, @@ -1225,6 +1220,12 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { /** * Submit in test mode. * + * Do not use this - we have figured out how to emulate form in tests now. + * + * See ConfirmTest. + * + * @deprecated + * * @param $params */ public static function testSubmit($params) { @@ -1235,7 +1236,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration { $form->controller = new CRM_Event_Controller_Registration(); $form->_params = $params['params']; // This happens in buildQuickForm so emulate here. - $form->_amount = $form->_totalAmount = CRM_Utils_Rule::cleanMoney(CRM_Utils_Array::value('totalAmount', $params)); + $form->_amount = $form->_totalAmount = $params['totalAmount'] ?? 0; $form->set('params', $params['params']); $form->_values['custom_pre_id'] = $params['custom_pre_id'] ?? NULL; $form->_values['custom_post_id'] = $params['custom_post_id'] ?? NULL; diff --git a/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php b/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php index 5fed52f49c..dcfb115ef2 100644 --- a/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php +++ b/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php @@ -41,7 +41,6 @@ class CRM_Event_Form_Registration_ParticipantConfirm extends CRM_Event_Form_Regi //get the contact and event id and assing to session. $values = []; - $csContactID = NULL; if ($this->_participantId) { $params = ['id' => $this->_participantId]; CRM_Core_DAO::commonRetrieve('CRM_Event_DAO_Participant', $params, $values, @@ -98,8 +97,8 @@ class CRM_Event_Form_Registration_ParticipantConfirm extends CRM_Event_Form_Regi //need to confirm that though participant confirming //registration - but is there enough space to confirm. $emptySeats = CRM_Event_BAO_Participant::eventFull($this->_eventId, TRUE, FALSE, TRUE, FALSE, TRUE); - $additonalIds = CRM_Event_BAO_Participant::getAdditionalParticipantIds($this->_participantId); - $requireSpace = 1 + count($additonalIds); + $additionalIds = CRM_Event_BAO_Participant::getAdditionalParticipantIds($this->_participantId); + $requireSpace = 1 + count($additionalIds); if ($emptySeats !== NULL && ($requireSpace > $emptySeats)) { $statusMsg = ts("Unfortunately there are currently no available spaces for the %1 event.", [1 => $values['title']]); } diff --git a/civicrm/CRM/Event/Import/Form/MapField.php b/civicrm/CRM/Event/Import/Form/MapField.php index bf7472a1af..239769addc 100644 --- a/civicrm/CRM/Event/Import/Form/MapField.php +++ b/civicrm/CRM/Event/Import/Form/MapField.php @@ -366,11 +366,6 @@ class CRM_Event_Import_Form_MapField extends CRM_Import_Form_MapField { return; } - $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - - $mapperKeys = []; $mapper = []; $mapperKeys = $this->controller->exportValue($this->_name, 'mapper'); $mapperKeysMain = []; @@ -404,12 +399,6 @@ class CRM_Event_Import_Form_MapField extends CRM_Import_Form_MapField { $updateMappingFields->id = $mappingFieldsId[$i]; $updateMappingFields->mapping_id = $params['mappingId']; $updateMappingFields->column_number = $i; - - $explodedValues = explode('_', $mapperKeys[$i][0]); - $id = $explodedValues[0] ?? NULL; - $first = $explodedValues[1] ?? NULL; - $second = $explodedValues[2] ?? NULL; - $updateMappingFields->name = $mapper[$i]; $updateMappingFields->save(); } @@ -428,12 +417,6 @@ class CRM_Event_Import_Form_MapField extends CRM_Import_Form_MapField { $saveMappingFields = new CRM_Core_DAO_MappingField(); $saveMappingFields->mapping_id = $saveMapping->id; $saveMappingFields->column_number = $i; - - $explodedValues = explode('_', $mapperKeys[$i][0]); - $id = $explodedValues[0] ?? NULL; - $first = $explodedValues[1] ?? NULL; - $second = $explodedValues[2] ?? NULL; - $saveMappingFields->name = $mapper[$i]; $saveMappingFields->save(); } @@ -441,7 +424,7 @@ class CRM_Event_Import_Form_MapField extends CRM_Import_Form_MapField { } $parser = new CRM_Event_Import_Parser_Participant($mapperKeysMain); - $parser->run($fileName, $separator, $mapper, $skipColumnHeader, + $parser->run($this->getSubmittedValue('uploadFile'), $this->getSubmittedValue('fieldSeparator'), $mapper, $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_PREVIEW, $this->get('contactType') ); // add all the necessary variables to the form diff --git a/civicrm/CRM/Event/Import/Form/Preview.php b/civicrm/CRM/Event/Import/Form/Preview.php index ccec35738a..79a76fde22 100644 --- a/civicrm/CRM/Event/Import/Form/Preview.php +++ b/civicrm/CRM/Event/Import/Form/Preview.php @@ -27,13 +27,12 @@ class CRM_Event_Import_Form_Preview extends CRM_Import_Form_Preview { * @return void */ public function preProcess() { - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); + parent::preProcess(); //get the data from the session $dataValues = $this->get('dataValues'); $mapper = $this->get('mapper'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $mismatchCount = $this->get('unMatchCount'); //get the mapping name displayed if the mappingId is set @@ -45,26 +44,13 @@ class CRM_Event_Import_Form_Preview extends CRM_Import_Form_Preview { } $this->assign('savedMappingName', $mappingId ? $mapDAO->name : NULL); - if ($skipColumnHeader) { - $this->assign('skipColumnHeader', $skipColumnHeader); - $this->assign('rowDisplayCount', 3); - } - else { - $this->assign('rowDisplayCount', 2); - } - if ($invalidRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Event_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Event_Import_Parser_Participant'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } - if ($conflictRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Event_Import_Parser'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - } - if ($mismatchCount) { - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Event_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Event_Import_Parser_Participant'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } @@ -75,9 +61,7 @@ class CRM_Event_Import_Form_Preview extends CRM_Import_Form_Preview { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', 'downloadErrorRecordsUrl', - 'downloadConflictRecordsUrl', 'downloadMismatchRecordsUrl', ]; @@ -95,9 +79,7 @@ class CRM_Event_Import_Form_Preview extends CRM_Import_Form_Preview { public function postProcess() { $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $onDuplicate = $this->get('onDuplicate'); $mapper = $this->controller->exportValue('MapField', 'mapper'); @@ -120,7 +102,7 @@ class CRM_Event_Import_Form_Preview extends CRM_Import_Form_Preview { } $parser->run($fileName, $separator, $mapperFields, - $skipColumnHeader, + $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_IMPORT, $this->get('contactType'), $onDuplicate @@ -148,11 +130,9 @@ class CRM_Event_Import_Form_Preview extends CRM_Import_Form_Preview { fclose($fd); $this->set('errorFile', $errorFile); - $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Event_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Event_Import_Parser_Participant'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Event_Import_Parser'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Event_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Event_Import_Parser_Participant'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } } diff --git a/civicrm/CRM/Event/Import/Form/Summary.php b/civicrm/CRM/Event/Import/Form/Summary.php index 42beb0d376..6184807db9 100644 --- a/civicrm/CRM/Event/Import/Form/Summary.php +++ b/civicrm/CRM/Event/Import/Form/Summary.php @@ -35,16 +35,15 @@ class CRM_Event_Import_Form_Summary extends CRM_Import_Form_Summary { $this->set('totalRowCount', $totalRowCount); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $duplicateRowCount = $this->get('duplicateRowCount'); $onDuplicate = $this->get('onDuplicate'); $mismatchCount = $this->get('unMatchCount'); if ($duplicateRowCount > 0) { - $urlParams = 'type=' . CRM_Import_Parser::DUPLICATE . '&parser=CRM_Event_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::DUPLICATE . '&parser=CRM_Event_Import_Parser_Participant'; $this->set('downloadDuplicateRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } elseif ($mismatchCount) { - $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Event_Import_Parser'; + $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Event_Import_Parser_Participant'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } else { @@ -70,7 +69,7 @@ class CRM_Event_Import_Form_Summary extends CRM_Import_Form_Summary { /* only subtract dupes from successful import if we're skipping */ $this->set('validRowCount', $totalRowCount - $invalidRowCount - - $conflictRowCount - $duplicateRowCount - $mismatchCount + $duplicateRowCount - $mismatchCount ); } $this->assign('dupeActionString', $dupeActionString); @@ -79,8 +78,6 @@ class CRM_Event_Import_Form_Summary extends CRM_Import_Form_Summary { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', - 'downloadConflictRecordsUrl', 'downloadErrorRecordsUrl', 'duplicateRowCount', 'downloadDuplicateRecordsUrl', diff --git a/civicrm/CRM/Event/Import/Parser.php b/civicrm/CRM/Event/Import/Parser.php deleted file mode 100644 index ee1ddff787..0000000000 --- a/civicrm/CRM/Event/Import/Parser.php +++ /dev/null @@ -1,405 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ -abstract class CRM_Event_Import_Parser extends CRM_Import_Parser { - - protected $_fileName; - - /** - * Imported file size. - * - * @var int - */ - protected $_fileSize; - - /** - * Separator being used. - * - * @var string - */ - protected $_separator; - - /** - * Total number of lines in file. - * - * @var int - */ - protected $_lineCount; - - /** - * Whether the file has a column header or not - * - * @var bool - */ - protected $_haveColumnHeader; - - /** - * @param string $fileName - * @param string $separator - * @param $mapper - * @param bool $skipColumnHeader - * @param int $mode - * @param int $contactType - * @param int $onDuplicate - * - * @return mixed - * @throws Exception - */ - public function run( - $fileName, - $separator, - $mapper, - $skipColumnHeader = FALSE, - $mode = self::MODE_PREVIEW, - $contactType = self::CONTACT_INDIVIDUAL, - $onDuplicate = self::DUPLICATE_SKIP - ) { - if (!is_array($fileName)) { - throw new CRM_Core_Exception('Unable to determine import file'); - } - $fileName = $fileName['name']; - - switch ($contactType) { - case self::CONTACT_INDIVIDUAL: - $this->_contactType = 'Individual'; - break; - - case self::CONTACT_HOUSEHOLD: - $this->_contactType = 'Household'; - break; - - case self::CONTACT_ORGANIZATION: - $this->_contactType = 'Organization'; - } - - $this->init(); - - $this->_haveColumnHeader = $skipColumnHeader; - - $this->_separator = $separator; - - $fd = fopen($fileName, "r"); - if (!$fd) { - return FALSE; - } - - $this->_lineCount = $this->_warningCount = 0; - $this->_invalidRowCount = $this->_validCount = 0; - $this->_totalCount = $this->_conflictCount = 0; - - $this->_errors = []; - $this->_warnings = []; - $this->_conflicts = []; - - $this->_fileSize = number_format(filesize($fileName) / 1024.0, 2); - - if ($mode == self::MODE_MAPFIELD) { - $this->_rows = []; - } - else { - $this->_activeFieldCount = count($this->_activeFields); - } - - while (!feof($fd)) { - $this->_lineCount++; - - $values = fgetcsv($fd, 8192, $separator); - if (!$values) { - continue; - } - - self::encloseScrub($values); - - // skip column header if we're not in mapfield mode - if ($mode != self::MODE_MAPFIELD && $skipColumnHeader) { - $skipColumnHeader = FALSE; - continue; - } - - /* trim whitespace around the values */ - - $empty = TRUE; - foreach ($values as $k => $v) { - $values[$k] = trim($v, " \t\r\n"); - } - - if (CRM_Utils_System::isNull($values)) { - continue; - } - - $this->_totalCount++; - - if ($mode == self::MODE_MAPFIELD) { - $returnCode = $this->mapField($values); - } - elseif ($mode == self::MODE_PREVIEW) { - $returnCode = $this->preview($values); - } - elseif ($mode == self::MODE_SUMMARY) { - $returnCode = $this->summary($values); - } - elseif ($mode == self::MODE_IMPORT) { - $returnCode = $this->import($onDuplicate, $values); - } - else { - $returnCode = self::ERROR; - } - - // note that a line could be valid but still produce a warning - if ($returnCode & self::VALID) { - $this->_validCount++; - if ($mode == self::MODE_MAPFIELD) { - $this->_rows[] = $values; - $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); - } - } - - if ($returnCode & self::WARNING) { - $this->_warningCount++; - if ($this->_warningCount < $this->_maxWarningCount) { - $this->_warningCount[] = $line; - } - } - - if ($returnCode & self::ERROR) { - $this->_invalidRowCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_errors[] = $values; - } - - if ($returnCode & self::CONFLICT) { - $this->_conflictCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_conflicts[] = $values; - } - - if ($returnCode & self::DUPLICATE) { - $this->_duplicateCount++; - $recordNumber = $this->_lineCount; - if ($this->_haveColumnHeader) { - $recordNumber--; - } - array_unshift($values, $recordNumber); - $this->_duplicates[] = $values; - if ($onDuplicate != self::DUPLICATE_SKIP) { - $this->_validCount++; - } - } - - // we give the derived class a way of aborting the process - // note that the return code could be multiple code or'ed together - if ($returnCode & self::STOP) { - break; - } - - // if we are done processing the maxNumber of lines, break - if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { - break; - } - } - - fclose($fd); - - if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { - $customHeaders = $mapper; - - $customfields = CRM_Core_BAO_CustomField::getFields('Participant'); - foreach ($customHeaders as $key => $value) { - if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { - $customHeaders[$key] = $customfields[$id][0]; - } - } - - if ($this->_invalidRowCount) { - // removed view url for invlaid contacts - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_errorFileName = self::errorFileName(self::ERROR); - self::exportCSV($this->_errorFileName, $headers, $this->_errors); - } - if ($this->_conflictCount) { - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_conflictFileName = self::errorFileName(self::CONFLICT); - self::exportCSV($this->_conflictFileName, $headers, $this->_conflicts); - } - if ($this->_duplicateCount) { - $headers = array_merge([ - ts('Line Number'), - ts('View Participant URL'), - ], $customHeaders); - - $this->_duplicateFileName = self::errorFileName(self::DUPLICATE); - self::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); - } - } - return $this->fini(); - } - - /** - * Given a list of the importable field keys that the user has selected - * set the active fields array to this list - * - * @param array $fieldKeys mapped array of values - * - * @return void - */ - public function setActiveFields($fieldKeys) { - $this->_activeFieldCount = count($fieldKeys); - foreach ($fieldKeys as $key) { - if (empty($this->_fields[$key])) { - $this->_activeFields[] = new CRM_Event_Import_Field('', ts('- do not import -')); - } - else { - $this->_activeFields[] = clone($this->_fields[$key]); - } - } - } - - /** - * @param string $name - * @param $title - * @param int $type - * @param string $headerPattern - * @param string $dataPattern - */ - public function addField($name, $title, $type = CRM_Utils_Type::T_INT, $headerPattern = '//', $dataPattern = '//') { - if (empty($name)) { - $this->_fields['doNotImport'] = new CRM_Event_Import_Field($name, $title, $type, $headerPattern, $dataPattern); - } - else { - - //$tempField = CRM_Contact_BAO_Contact::importableFields('Individual', null ); - $tempField = CRM_Contact_BAO_Contact::importableFields('All', NULL); - if (!array_key_exists($name, $tempField)) { - $this->_fields[$name] = new CRM_Event_Import_Field($name, $title, $type, $headerPattern, $dataPattern); - } - else { - $this->_fields[$name] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, - CRM_Utils_Array::value('hasLocationType', $tempField[$name]) - ); - } - } - } - - /** - * Store parser values. - * - * @param CRM_Core_Session $store - * - * @param int $mode - * - * @return void - */ - public function set($store, $mode = self::MODE_SUMMARY) { - $store->set('fileSize', $this->_fileSize); - $store->set('lineCount', $this->_lineCount); - $store->set('separator', $this->_separator); - $store->set('fields', $this->getSelectValues()); - $store->set('fieldTypes', $this->getSelectTypes()); - - $store->set('headerPatterns', $this->getHeaderPatterns()); - $store->set('dataPatterns', $this->getDataPatterns()); - $store->set('columnCount', $this->_activeFieldCount); - - $store->set('totalRowCount', $this->_totalCount); - $store->set('validRowCount', $this->_validCount); - $store->set('invalidRowCount', $this->_invalidRowCount); - $store->set('conflictRowCount', $this->_conflictCount); - - switch ($this->_contactType) { - case 'Individual': - $store->set('contactType', CRM_Import_Parser::CONTACT_INDIVIDUAL); - break; - - case 'Household': - $store->set('contactType', CRM_Import_Parser::CONTACT_HOUSEHOLD); - break; - - case 'Organization': - $store->set('contactType', CRM_Import_Parser::CONTACT_ORGANIZATION); - } - - if ($this->_invalidRowCount) { - $store->set('errorsFileName', $this->_errorFileName); - } - if ($this->_conflictCount) { - $store->set('conflictsFileName', $this->_conflictFileName); - } - if (isset($this->_rows) && !empty($this->_rows)) { - $store->set('dataValues', $this->_rows); - } - - if ($mode == self::MODE_IMPORT) { - $store->set('duplicateRowCount', $this->_duplicateCount); - if ($this->_duplicateCount) { - $store->set('duplicatesFileName', $this->_duplicateFileName); - } - } - } - - /** - * Export data to a CSV file. - * - * @param string $fileName - * @param array $header - * @param array $data - * - * @return void - */ - public static function exportCSV($fileName, $header, $data) { - $output = []; - $fd = fopen($fileName, 'w'); - - foreach ($header as $key => $value) { - $header[$key] = "\"$value\""; - } - $config = CRM_Core_Config::singleton(); - $output[] = implode($config->fieldSeparator, $header); - - foreach ($data as $datum) { - foreach ($datum as $key => $value) { - if (is_array($value)) { - foreach ($value[0] as $k1 => $v1) { - if ($k1 == 'location_type_id') { - continue; - } - $datum[$k1] = $v1; - } - } - else { - $datum[$key] = "\"$value\""; - } - } - $output[] = implode($config->fieldSeparator, $datum); - } - fwrite($fd, implode("\n", $output)); - fclose($fd); - } - -} diff --git a/civicrm/CRM/Event/Import/Parser/Participant.php b/civicrm/CRM/Event/Import/Parser/Participant.php index 26679da936..adbd4d43f8 100644 --- a/civicrm/CRM/Event/Import/Parser/Participant.php +++ b/civicrm/CRM/Event/Import/Parser/Participant.php @@ -20,7 +20,7 @@ require_once 'CRM/Utils/DeprecatedUtils.php'; /** * class to parse membership csv files */ -class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { +class CRM_Event_Import_Parser_Participant extends CRM_Import_Parser { protected $_mapperKeys; private $_contactIdIndex; @@ -36,12 +36,43 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { */ protected $_newParticipants; + + protected $_fileName; + + /** + * Imported file size. + * + * @var int + */ + protected $_fileSize; + + /** + * Separator being used. + * + * @var string + */ + protected $_separator; + + /** + * Total number of lines in file. + * + * @var int + */ + protected $_lineCount; + + /** + * Whether the file has a column header or not + * + * @var bool + */ + protected $_haveColumnHeader; + /** * Class constructor. * * @param array $mapperKeys */ - public function __construct(&$mapperKeys) { + public function __construct(&$mapperKeys = []) { parent::__construct(); $this->_mapperKeys = &$mapperKeys; } @@ -101,18 +132,6 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { } } - /** - * Handle the values in mapField mode. - * - * @param array $values - * The array of values belonging to this line. - * - * @return bool - */ - public function mapField(&$values) { - return CRM_Import_Parser::VALID; - } - /** * Handle the values in preview mode. * @@ -136,10 +155,7 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { * the result of this processing */ public function summary(&$values) { - $erroneousField = NULL; - - $response = $this->setActiveFieldValues($values, $erroneousField); - $errorRequired = FALSE; + $this->setActiveFieldValues($values); $index = -1; if ($this->_eventIndex > -1 && $this->_eventTitleIndex > -1) { @@ -472,14 +488,6 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { return $this->_newParticipants; } - /** - * The initializer code, called before the processing - * - * @return void - */ - public function fini() { - } - /** * Format values * @@ -699,4 +707,323 @@ class CRM_Event_Import_Parser_Participant extends CRM_Event_Import_Parser { return TRUE; } + /** + * @param string $fileName + * @param string $separator + * @param $mapper + * @param bool $skipColumnHeader + * @param int $mode + * @param int $contactType + * @param int $onDuplicate + * + * @return mixed + * @throws Exception + */ + public function run( + $fileName, + $separator, + $mapper, + $skipColumnHeader = FALSE, + $mode = self::MODE_PREVIEW, + $contactType = self::CONTACT_INDIVIDUAL, + $onDuplicate = self::DUPLICATE_SKIP + ) { + if (!is_array($fileName)) { + throw new CRM_Core_Exception('Unable to determine import file'); + } + $fileName = $fileName['name']; + + switch ($contactType) { + case self::CONTACT_INDIVIDUAL: + $this->_contactType = 'Individual'; + break; + + case self::CONTACT_HOUSEHOLD: + $this->_contactType = 'Household'; + break; + + case self::CONTACT_ORGANIZATION: + $this->_contactType = 'Organization'; + } + + $this->init(); + + $this->_haveColumnHeader = $skipColumnHeader; + + $this->_separator = $separator; + + $fd = fopen($fileName, "r"); + if (!$fd) { + return FALSE; + } + + $this->_lineCount = 0; + $this->_invalidRowCount = $this->_validCount = 0; + $this->_totalCount = 0; + + $this->_errors = []; + $this->_warnings = []; + + $this->_fileSize = number_format(filesize($fileName) / 1024.0, 2); + + if ($mode == self::MODE_MAPFIELD) { + $this->_rows = []; + } + else { + $this->_activeFieldCount = count($this->_activeFields); + } + + while (!feof($fd)) { + $this->_lineCount++; + + $values = fgetcsv($fd, 8192, $separator); + if (!$values) { + continue; + } + + self::encloseScrub($values); + + // skip column header if we're not in mapfield mode + if ($mode != self::MODE_MAPFIELD && $skipColumnHeader) { + $skipColumnHeader = FALSE; + continue; + } + + /* trim whitespace around the values */ + + $empty = TRUE; + foreach ($values as $k => $v) { + $values[$k] = trim($v, " \t\r\n"); + } + + if (CRM_Utils_System::isNull($values)) { + continue; + } + + $this->_totalCount++; + + if ($mode == self::MODE_MAPFIELD) { + $returnCode = CRM_Import_Parser::VALID; + } + elseif ($mode == self::MODE_PREVIEW) { + $returnCode = $this->preview($values); + } + elseif ($mode == self::MODE_SUMMARY) { + $returnCode = $this->summary($values); + } + elseif ($mode == self::MODE_IMPORT) { + $returnCode = $this->import($onDuplicate, $values); + } + else { + $returnCode = self::ERROR; + } + + // note that a line could be valid but still produce a warning + if ($returnCode & self::VALID) { + $this->_validCount++; + if ($mode == self::MODE_MAPFIELD) { + $this->_rows[] = $values; + $this->_activeFieldCount = max($this->_activeFieldCount, count($values)); + } + } + + if ($returnCode & self::ERROR) { + $this->_invalidRowCount++; + $recordNumber = $this->_lineCount; + if ($this->_haveColumnHeader) { + $recordNumber--; + } + array_unshift($values, $recordNumber); + $this->_errors[] = $values; + } + + if ($returnCode & self::DUPLICATE) { + $this->_duplicateCount++; + $recordNumber = $this->_lineCount; + if ($this->_haveColumnHeader) { + $recordNumber--; + } + array_unshift($values, $recordNumber); + $this->_duplicates[] = $values; + if ($onDuplicate != self::DUPLICATE_SKIP) { + $this->_validCount++; + } + } + + // if we are done processing the maxNumber of lines, break + if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { + break; + } + } + + fclose($fd); + + if ($mode == self::MODE_PREVIEW || $mode == self::MODE_IMPORT) { + $customHeaders = $mapper; + + $customfields = CRM_Core_BAO_CustomField::getFields('Participant'); + foreach ($customHeaders as $key => $value) { + if ($id = CRM_Core_BAO_CustomField::getKeyID($value)) { + $customHeaders[$key] = $customfields[$id][0]; + } + } + + if ($this->_invalidRowCount) { + // removed view url for invlaid contacts + $headers = array_merge([ + ts('Line Number'), + ts('Reason'), + ], $customHeaders); + $this->_errorFileName = self::errorFileName(self::ERROR); + self::exportCSV($this->_errorFileName, $headers, $this->_errors); + } + if ($this->_duplicateCount) { + $headers = array_merge([ + ts('Line Number'), + ts('View Participant URL'), + ], $customHeaders); + + $this->_duplicateFileName = self::errorFileName(self::DUPLICATE); + self::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); + } + } + } + + /** + * Given a list of the importable field keys that the user has selected + * set the active fields array to this list + * + * @param array $fieldKeys mapped array of values + * + * @return void + */ + public function setActiveFields($fieldKeys) { + $this->_activeFieldCount = count($fieldKeys); + foreach ($fieldKeys as $key) { + if (empty($this->_fields[$key])) { + $this->_activeFields[] = new CRM_Event_Import_Field('', ts('- do not import -')); + } + else { + $this->_activeFields[] = clone($this->_fields[$key]); + } + } + } + + /** + * @param string $name + * @param $title + * @param int $type + * @param string $headerPattern + * @param string $dataPattern + */ + public function addField($name, $title, $type = CRM_Utils_Type::T_INT, $headerPattern = '//', $dataPattern = '//') { + if (empty($name)) { + $this->_fields['doNotImport'] = new CRM_Event_Import_Field($name, $title, $type, $headerPattern, $dataPattern); + } + else { + + //$tempField = CRM_Contact_BAO_Contact::importableFields('Individual', null ); + $tempField = CRM_Contact_BAO_Contact::importableFields('All', NULL); + if (!array_key_exists($name, $tempField)) { + $this->_fields[$name] = new CRM_Event_Import_Field($name, $title, $type, $headerPattern, $dataPattern); + } + else { + $this->_fields[$name] = new CRM_Contact_Import_Field($name, $title, $type, $headerPattern, $dataPattern, + CRM_Utils_Array::value('hasLocationType', $tempField[$name]) + ); + } + } + } + + /** + * Store parser values. + * + * @param CRM_Core_Session $store + * + * @param int $mode + * + * @return void + */ + public function set($store, $mode = self::MODE_SUMMARY) { + $store->set('fileSize', $this->_fileSize); + $store->set('lineCount', $this->_lineCount); + $store->set('separator', $this->_separator); + $store->set('fields', $this->getSelectValues()); + $store->set('fieldTypes', $this->getSelectTypes()); + + $store->set('headerPatterns', $this->getHeaderPatterns()); + $store->set('dataPatterns', $this->getDataPatterns()); + $store->set('columnCount', $this->_activeFieldCount); + + $store->set('totalRowCount', $this->_totalCount); + $store->set('validRowCount', $this->_validCount); + $store->set('invalidRowCount', $this->_invalidRowCount); + + switch ($this->_contactType) { + case 'Individual': + $store->set('contactType', CRM_Import_Parser::CONTACT_INDIVIDUAL); + break; + + case 'Household': + $store->set('contactType', CRM_Import_Parser::CONTACT_HOUSEHOLD); + break; + + case 'Organization': + $store->set('contactType', CRM_Import_Parser::CONTACT_ORGANIZATION); + } + + if ($this->_invalidRowCount) { + $store->set('errorsFileName', $this->_errorFileName); + } + if (isset($this->_rows) && !empty($this->_rows)) { + $store->set('dataValues', $this->_rows); + } + + if ($mode == self::MODE_IMPORT) { + $store->set('duplicateRowCount', $this->_duplicateCount); + if ($this->_duplicateCount) { + $store->set('duplicatesFileName', $this->_duplicateFileName); + } + } + } + + /** + * Export data to a CSV file. + * + * @param string $fileName + * @param array $header + * @param array $data + * + * @return void + */ + public static function exportCSV($fileName, $header, $data) { + $output = []; + $fd = fopen($fileName, 'w'); + + foreach ($header as $key => $value) { + $header[$key] = "\"$value\""; + } + $config = CRM_Core_Config::singleton(); + $output[] = implode($config->fieldSeparator, $header); + + foreach ($data as $datum) { + foreach ($datum as $key => $value) { + if (is_array($value)) { + foreach ($value[0] as $k1 => $v1) { + if ($k1 == 'location_type_id') { + continue; + } + $datum[$k1] = $v1; + } + } + else { + $datum[$key] = "\"$value\""; + } + } + $output[] = implode($config->fieldSeparator, $datum); + } + fwrite($fd, implode("\n", $output)); + fclose($fd); + } + } diff --git a/civicrm/CRM/Financial/BAO/FinancialTrxn.php b/civicrm/CRM/Financial/BAO/FinancialTrxn.php new file mode 100644 index 0000000000..183a6bcffc --- /dev/null +++ b/civicrm/CRM/Financial/BAO/FinancialTrxn.php @@ -0,0 +1,85 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ +class CRM_Financial_BAO_FinancialTrxn extends CRM_Financial_DAO_FinancialTrxn { + + /** + * Takes an associative array and creates a financial transaction object. + * + * @param array $params + * + * @return CRM_Financial_DAO_FinancialTrxn + */ + public static function create(array $params): CRM_Financial_DAO_FinancialTrxn { + $trxn = new CRM_Financial_DAO_FinancialTrxn(); + $trxn->copyValues($params); + + if (isset($params['fee_amount']) && is_numeric($params['fee_amount'])) { + if (!isset($params['total_amount'])) { + $trxn->fetch(); + $params['total_amount'] = $trxn->total_amount; + } + $trxn->net_amount = $params['total_amount'] - $params['fee_amount']; + } + + if (empty($params['id']) && !CRM_Utils_Rule::currencyCode($trxn->currency)) { + $trxn->currency = CRM_Core_Config::singleton()->defaultCurrency; + } + + $trxn->save(); + + if (!empty($params['id'])) { + // For an update entity financial transaction record will already exist. Return early. + return $trxn; + } + + // Save to entity_financial_trxn table. + $entityFinancialTrxnParams = [ + 'entity_table' => CRM_Utils_Array::value('entity_table', $params, 'civicrm_contribution'), + 'entity_id' => CRM_Utils_Array::value('entity_id', $params, CRM_Utils_Array::value('contribution_id', $params)), + 'financial_trxn_id' => $trxn->id, + 'amount' => $params['total_amount'], + ]; + + $entityTrxn = new CRM_Financial_DAO_EntityFinancialTrxn(); + $entityTrxn->copyValues($entityFinancialTrxnParams); + $entityTrxn->save(); + return $trxn; + } + + /** + * Generate and assign an arbitrary value to a field of a test object. + * + * Always set is_payment to 1 as this is used for Payment api as well as + * FinancialTrxn. + * + * @param string $fieldName + * @param array $fieldDef + * @param int $counter + * The globally-unique ID of the test object. + * + * @throws \CRM_Core_Exception + */ + protected function assignTestValue($fieldName, &$fieldDef, $counter): void { + if ($fieldName === 'is_payment') { + $this->is_payment = 1; + } + else { + parent::assignTestValue($fieldName, $fieldDef, $counter); + } + } + +} diff --git a/civicrm/CRM/Financial/DAO/FinancialTrxn.php b/civicrm/CRM/Financial/DAO/FinancialTrxn.php index 709ec8760e..1b0e03bb71 100644 --- a/civicrm/CRM/Financial/DAO/FinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/FinancialTrxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/FinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:91bd49e83b574c92b7633805f6e0a903) + * (GenCodeChecksum:42b3816549d81b8573d28f1e91c8b956) */ /** @@ -242,7 +242,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.id', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -258,7 +258,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.from_financial_account_id', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'FKClassName' => 'CRM_Financial_DAO_FinancialAccount', 'html' => [ @@ -280,7 +280,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.to_financial_account_id', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'FKClassName' => 'CRM_Financial_DAO_FinancialAccount', 'html' => [ @@ -303,7 +303,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'default' => NULL, 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Select Date', @@ -324,7 +324,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.total_amount', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'add' => '1.3', ], @@ -340,7 +340,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.fee_amount', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'add' => '1.3', ], @@ -356,7 +356,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.net_amount', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'add' => '1.3', ], @@ -375,7 +375,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'default' => NULL, 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Select', @@ -401,7 +401,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'default' => '0', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'add' => '4.7', ], @@ -415,7 +415,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.trxn_id', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Text', @@ -432,7 +432,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.trxn_result_code', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'add' => '1.3', ], @@ -447,7 +447,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'export' => TRUE, 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'pseudoconstant' => [ 'optionGroupName' => 'contribution_status', @@ -463,7 +463,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.payment_processor_id', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'FKClassName' => 'CRM_Financial_DAO_PaymentProcessor', 'html' => [ @@ -485,7 +485,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.payment_instrument_id', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Select', @@ -504,7 +504,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.card_type_id', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Select', @@ -525,7 +525,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.check_number', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Text', @@ -542,7 +542,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.pan_truncation', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Text', @@ -559,7 +559,7 @@ class CRM_Financial_DAO_FinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_financial_trxn.order_reference', 'table_name' => 'civicrm_financial_trxn', 'entity' => 'FinancialTrxn', - 'bao' => 'CRM_Financial_DAO_FinancialTrxn', + 'bao' => 'CRM_Financial_BAO_FinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Text', diff --git a/civicrm/CRM/Financial/Page/FinancialAccount.php b/civicrm/CRM/Financial/Page/FinancialAccount.php index 51202f77d7..35271c083c 100644 --- a/civicrm/CRM/Financial/Page/FinancialAccount.php +++ b/civicrm/CRM/Financial/Page/FinancialAccount.php @@ -105,6 +105,14 @@ class CRM_Financial_Page_FinancialAccount extends CRM_Core_Page_Basic { } } + // Ensure keys are always set to avoid Smarty notices + if (!isset($contributionType[$dao->id]['accounting_code'])) { + $contributionType[$dao->id]['accounting_code'] = FALSE; + } + if (!isset($contributionType[$dao->id]['account_type_code'])) { + $contributionType[$dao->id]['account_type_code'] = FALSE; + } + $contributionType[$dao->id]['action'] = CRM_Core_Action::formLink(self::links(), $action, ['id' => $dao->id], ts('more'), diff --git a/civicrm/CRM/Import/DataSource.php b/civicrm/CRM/Import/DataSource.php index e7a8cc8459..419b19a5c1 100644 --- a/civicrm/CRM/Import/DataSource.php +++ b/civicrm/CRM/Import/DataSource.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\UserJob; + /** * This class defines the DataSource interface but must be subclassed to be * useful. @@ -22,40 +24,328 @@ abstract class CRM_Import_DataSource { /** - * Provides information about the data source. + * @var \CRM_Core_DAO + */ + private $queryResultObject; + + /** + * @var int + */ + private $limit; + + /** + * @param int $limit + * + * @return CRM_Import_DataSource + */ + public function setLimit(int $limit): CRM_Import_DataSource { + $this->limit = $limit; + $this->queryResultObject = NULL; + return $this; + } + + /** + * @param int $offset + * + * @return CRM_Import_DataSource + */ + public function setOffset(int $offset): CRM_Import_DataSource { + $this->offset = $offset; + $this->queryResultObject = NULL; + return $this; + } + + /** + * @var int + */ + private $offset; + + /** + * Statuses of rows to fetch. + * + * @var array + */ + private $statuses = []; + + /** + * Current row. + * + * @var array + */ + private $row; + + /** + * @param array $statuses + * + * @return self + */ + public function setStatuses(array $statuses): self { + $this->statuses = $statuses; + $this->queryResultObject = NULL; + return $this; + } + + /** + * Class constructor. + * + * @param int|null $userJobID + */ + public function __construct(int $userJobID = NULL) { + if ($userJobID) { + $this->setUserJobID($userJobID); + } + } + + /** + * Form fields declared for this datasource. + * + * @var string[] + */ + protected $submittableFields = []; + + /** + * User job id. + * + * This is the primary key of the civicrm_user_job table which is used to + * track the import. + * + * @var int + */ + protected $userJobID; + + /** + * @return int|null + */ + public function getUserJobID(): ?int { + return $this->userJobID; + } + + /** + * Set user job ID. + * + * @param int $userJobID + */ + public function setUserJobID(int $userJobID): void { + $this->userJobID = $userJobID; + } + + /** + * User job details. + * + * This is the relevant row from civicrm_user_job. + * + * @var array + */ + protected $userJob; + + /** + * Get User Job. + * + * API call to retrieve the userJob row. * * @return array - * Description of this data source, including: - * - title: string, translated, required - * - permissions: array, optional * + * @throws \API_Exception */ - abstract public function getInfo(); + protected function getUserJob(): array { + if (!$this->userJob) { + $this->userJob = UserJob::get() + ->addWhere('id', '=', $this->getUserJobID()) + ->execute() + ->first(); + } + return $this->userJob; + } /** - * Set variables up before form is built. + * Get submitted value. * - * @param CRM_Core_Form $form + * Get a value submitted on the form. + * + * @return mixed + * + * @throws \API_Exception */ - abstract public function preProcess(&$form); + protected function getSubmittedValue(string $valueName) { + return $this->getUserJob()['metadata']['submitted_values'][$valueName]; + } /** - * This is function is called by the form object to get the DataSource's form snippet. + * Get rows as an array. * - * It should add all fields necessary to get the data uploaded to the temporary table in the DB. + * The array has all values. * - * @param CRM_Core_Form $form + * @param bool $nonAssociative + * Return as a non-associative array? + * + * @return array + * + * @throws \API_Exception + * @throws \CRM_Core_Exception */ - abstract public function buildQuickForm(&$form); + public function getRows(bool $nonAssociative = TRUE): array { + $rows = []; + while ($this->getRow()) { + // Historically we expect a non-associative array... + $rows[] = $nonAssociative ? array_values($this->row) : $this->row; + } + $this->queryResultObject = NULL; + return $rows; + } + + /** + * Get the next row. + * + * @return array|null + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + public function getRow(): ?array { + if (!$this->queryResultObject) { + $this->instantiateQueryObject(); + } + if (!$this->queryResultObject->fetch()) { + return NULL; + } + $values = $this->queryResultObject->toArray(); + /* trim whitespace around the values */ + foreach ($values as $k => $v) { + $values[$k] = trim($v, " \t\r\n"); + } + $this->row = $values; + return $values; + } + + /** + * Get row count. + * + * The array has all values. + * + * @return int + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + public function getRowCount(array $statuses = []): int { + $this->statuses = $statuses; + $query = 'SELECT count(*) FROM ' . $this->getTableName() . ' ' . $this->getStatusClause(); + return CRM_Core_DAO::singleValueQuery($query); + } + + /** + * Get an array of column headers, if any. + * + * Null is returned when there are none - ie because a csv file does not + * have an initial header row. + * + * This is presented to the user in the MapField screen so + * that can see what fields they are mapping. + * + * @return array + * @throws \API_Exception + */ + public function getColumnHeaders(): array { + return $this->getUserJob()['metadata']['DataSource']['column_headers']; + } + + /** + * Get an array of column headers, if any. + * + * Null is returned when there are none - ie because a csv file does not + * have an initial header row. + * + * This is presented to the user in the MapField screen so + * that can see what fields they are mapping. + * + * @return int + * @throws \API_Exception + */ + public function getNumberOfColumns(): int { + return $this->getUserJob()['metadata']['DataSource']['number_of_columns']; + } + + /** + * Generated metadata relating to the the datasource. + * + * This is values that are computed within the DataSource class and + * which are stored in the userJob metadata in the DataSource key - eg. + * + * ['table_name' => $] + * + * Will be in the user_job.metadata field encoded into the json like + * + * `{'DataSource' : ['table_name' => $], 'submitted_values' : .....}` + * + * @var array + */ + protected $dataSourceMetadata = []; /** - * Process the form submission. + * Get metadata about the datasource. + * + * @return array + * + * @throws \API_Exception + */ + public function getDataSourceMetadata(): array { + if (!$this->dataSourceMetadata && $this->getUserJobID()) { + $this->dataSourceMetadata = $this->getUserJob()['metadata']['DataSource']; + } + + return $this->dataSourceMetadata; + } + + /** + * Get the table name for the datajob. + * + * @return string|null + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + protected function getTableName(): ?string { + // The old name is still stored... + $tableName = $this->getDataSourceMetadata()['table_name']; + if (!$tableName) { + return NULL; + } + if (strpos($tableName, 'civicrm_tmp_') !== 0 + || !CRM_Utils_Rule::alphanumeric($tableName)) { + // The table name is generated and stored by code, not users so it + // should be safe - but a check seems prudent all the same. + throw new CRM_Core_Exception('Table cannot be deleted'); + } + return $tableName; + } + + /** + * Get the fields declared for this datasource. + * + * @return string[] + */ + public function getSubmittableFields(): array { + return $this->submittableFields; + } + + /** + * Provides information about the data source. + * + * @return array + * Description of this data source, including: + * - title: string, translated, required + * - permissions: array, optional + * + */ + abstract public function getInfo(); + + /** + * This is function is called by the form object to get the DataSource's form snippet. + * + * It should add all fields necessary to get the data uploaded to the temporary table in the DB. * - * @param array $params - * @param string $db * @param CRM_Core_Form $form */ - abstract public function postProcess(&$params, &$db, &$form); + abstract public function buildQuickForm(&$form); /** * Determine if the current user has access to this data source. @@ -67,4 +357,129 @@ abstract class CRM_Import_DataSource { return empty($info['permissions']) || CRM_Core_Permission::check($info['permissions']); } + /** + * @param string $key + * @param array $data + * + * @throws \API_Exception + * @throws \Civi\API\Exception\UnauthorizedException + */ + protected function updateUserJobMetadata(string $key, array $data): void { + $metaData = array_merge( + $this->getUserJob()['metadata'], + [$key => $data] + ); + UserJob::update(FALSE) + ->addWhere('id', '=', $this->getUserJobID()) + ->setValues(['metadata' => $metaData]) + ->execute(); + $this->userJob['metadata'] = $metaData; + } + + /** + * Purge any datasource related assets when the datasource is dropped. + * + * This is the datasource's chance to delete any tables etc that it created + * which will now not be used. + * + * @param array $newParams + * If the dataSource is being updated to another variant of the same + * class (eg. the csv upload was set to no column headers and they + * have resubmitted WITH skipColumnHeader (first row is a header) then + * the dataSource is still CSV and the params for the new intance + * are passed in. When changing from csv to SQL (for example) newParams is + * empty. + * + * @return array + * The details to update the DataSource key in the userJob metadata to. + * Generally and empty array but it the datasource decided (for example) + * that the table it created earlier is still consistent with the new params + * then it might decided not to drop the table and would want to retain + * some metadata. + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * + * @noinspection PhpUnusedParameterInspection + */ + public function purge(array $newParams = []) :array { + // The old name is still stored... + $oldTableName = $this->getTableName(); + if ($oldTableName) { + CRM_Core_DAO::executeQuery('DROP TABLE IF EXISTS ' . $oldTableName); + } + return []; + } + + /** + * Add a status columns to the import table. + * + * We add + * _id - primary key + * _status + * _statusMsg + * + * Note that + * 1) the use of the preceding underscore has 2 purposes - it avoids clashing + * with an id field (code comments from 14 years ago suggest perhaps there + * could be cases where it still clashes but time didn't tell in this case) + * 2) the show fields query used to get the column names excluded the + * administrative fields, relying on this convention. + * 3) we have the capitalisation on _statusMsg - @todo change to _status_message + * + * @param string $tableName + */ + protected function addTrackingFieldsToTable(string $tableName): void { + CRM_Core_DAO::executeQuery(" + ALTER TABLE $tableName + ADD COLUMN _status VARCHAR(32) DEFAULT 'NEW' NOT NULL, + ADD COLUMN _statusMsg TEXT, + ADD COLUMN _id INT PRIMARY KEY NOT NULL AUTO_INCREMENT" + ); + } + + /** + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + private function instantiateQueryObject(): void { + $query = 'SELECT * FROM ' . $this->getTableName() . ' ' . $this->getStatusClause(); + if ($this->limit) { + $query .= ' LIMIT ' . $this->limit . ($this->offset ? (' OFFSET ' . $this->offset) : NULL); + } + $this->queryResultObject = CRM_Core_DAO::executeQuery($query); + } + + /** + * Get the mapping of constants to database status codes. + * + * @return array[] + */ + protected function getStatusMapping(): array { + return [ + CRM_Import_Parser::VALID => ['imported', 'new'], + CRM_Import_Parser::ERROR => ['error', 'invalid'], + CRM_Import_Parser::DUPLICATE => ['duplicate'], + ]; + } + + /** + * Get the status filter clause. + * + * @return string + */ + private function getStatusClause(): string { + if (!empty($this->statuses)) { + $statuses = []; + foreach ($this->statuses as $status) { + foreach ($this->getStatusMapping()[$status] as $statusName) { + $statuses[] = '"' . $statusName . '"'; + } + } + return ' WHERE _status IN (' . implode(',', $statuses) . ')'; + } + return ''; + } + } diff --git a/civicrm/CRM/Import/DataSource/CSV.php b/civicrm/CRM/Import/DataSource/CSV.php index aaad75f717..8ea4f0cda9 100644 --- a/civicrm/CRM/Import/DataSource/CSV.php +++ b/civicrm/CRM/Import/DataSource/CSV.php @@ -19,21 +19,20 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { NUM_ROWS_TO_INSERT = 100; /** - * Provides information about the data source. + * Form fields declared for this datasource. * - * @return array - * collection of info about this data source + * @var string[] */ - public function getInfo() { - return ['title' => ts('Comma-Separated Values (CSV)')]; - } + protected $submittableFields = ['skipColumnHeader', 'uploadField']; /** - * Set variables up before form is built. + * Provides information about the data source. * - * @param CRM_Core_Form $form + * @return array + * collection of info about this data source */ - public function preProcess(&$form) { + public function getInfo(): array { + return ['title' => ts('Comma-Separated Values (CSV)')]; } /** @@ -49,9 +48,7 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { public function buildQuickForm(&$form) { $form->add('hidden', 'hidden_dataSource', 'CRM_Import_DataSource_CSV'); - $config = CRM_Core_Config::singleton(); - - $uploadFileSize = CRM_Utils_Number::formatUnitSize($config->maxFileSize . 'm', TRUE); + $uploadFileSize = CRM_Utils_Number::formatUnitSize(Civi::settings()->get('maxFileSize') . 'm', TRUE); //Fetch uploadFileSize from php_ini when $config->maxFileSize is set to "no limit". if (empty($uploadFileSize)) { $uploadFileSize = CRM_Utils_Number::formatUnitSize(ini_get('upload_max_filesize'), TRUE); @@ -77,35 +74,32 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { * @param string $db * @param \CRM_Core_Form $form * + * @throws \API_Exception * @throws \CRM_Core_Exception + * @throws \API_Exception */ public function postProcess(&$params, &$db, &$form) { - $file = $params['uploadFile']['name']; - $result = self::_CsvToTable($db, - $file, - CRM_Utils_Array::value('skipColumnHeader', $params, FALSE), - CRM_Utils_Array::value('import_table_name', $params), - CRM_Utils_Array::value('fieldSeparator', $params, ',') + $result = self::_CsvToTable( + $this->getSubmittedValue('uploadFile')['name'], + $this->getSubmittedValue('skipColumnHeader'), + $this->getSubmittedValue('fieldSeparator') ?? ',' ); + $this->addTrackingFieldsToTable($result['import_table_name']); - $form->set('originalColHeader', CRM_Utils_Array::value('original_col_header', $result)); - - $table = $result['import_table_name']; - $importJob = new CRM_Contact_Import_ImportJob($table); - $form->set('importTableName', $importJob->getTableName()); + $this->updateUserJobMetadata('DataSource', [ + 'table_name' => $result['import_table_name'], + 'column_headers' => $this->getSubmittedValue('skipColumnHeader') ? $result['column_headers'] : [], + 'number_of_columns' => $result['number_of_columns'], + ]); } /** * Create a table that matches the CSV file and populate it with the file's contents * - * @param object $db - * Handle to the database connection. * @param string $file * File name to load. * @param bool $headers * Whether the first row contains headers. - * @param string $tableName - * Name of table from which data imported. * @param string $fieldSeparator * Character that separates the various columns in the file. * @@ -114,10 +108,8 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { * @throws \CRM_Core_Exception */ private static function _CsvToTable( - &$db, $file, $headers = FALSE, - $tableName = NULL, $fieldSeparator = ',' ) { $result = []; @@ -141,7 +133,7 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { // create the column names from the CSV header or as col_0, col_1, etc. if ($headers) { //need to get original headers. - $result['original_col_header'] = $firstrow; + $result['column_headers'] = $firstrow; $strtolower = function_exists('mb_strtolower') ? 'mb_strtolower' : 'strtolower'; $columns = array_map($strtolower, $firstrow); @@ -186,9 +178,6 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { } } - if ($tableName) { - CRM_Core_DAO::executeQuery("DROP TABLE IF EXISTS $tableName"); - } $table = CRM_Utils_SQL_TempTable::build()->setDurable(); $tableName = $table->getName(); CRM_Core_DAO::executeQuery("DROP TABLE IF EXISTS $tableName"); @@ -248,7 +237,7 @@ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { //get the import tmp table name. $result['import_table_name'] = $tableName; - + $result['number_of_columns'] = $numColumns; return $result; } diff --git a/civicrm/CRM/Import/DataSource/SQL.php b/civicrm/CRM/Import/DataSource/SQL.php index c1cbb61e1e..7cee46dfba 100644 --- a/civicrm/CRM/Import/DataSource/SQL.php +++ b/civicrm/CRM/Import/DataSource/SQL.php @@ -16,27 +16,26 @@ */ class CRM_Import_DataSource_SQL extends CRM_Import_DataSource { + /** + * Form fields declared for this datasource. + * + * @var string[] + */ + protected $submittableFields = ['sqlQuery']; + /** * Provides information about the data source. * * @return array * collection of info about this data source */ - public function getInfo() { + public function getInfo(): array { return [ 'title' => ts('SQL Query'), 'permissions' => ['import SQL datasource'], ]; } - /** - * Set variables up before form is built. - * - * @param CRM_Core_Form $form - */ - public function preProcess(&$form) { - } - /** * This is function is called by the form object to get the DataSource's * form snippet. It should add all fields necesarry to get the data @@ -64,14 +63,14 @@ class CRM_Import_DataSource_SQL extends CRM_Import_DataSource { $errors = []; // Makeshift query validation (case-insensitive regex matching on word boundaries) - $forbidden = ['ALTER', 'CREATE', 'DELETE', 'DESCRIBE', 'DROP', 'SHOW', 'UPDATE', 'information_schema']; + $forbidden = ['ALTER', 'CREATE', 'DELETE', 'DESCRIBE', 'DROP', 'SHOW', 'UPDATE', 'REPLACE', 'information_schema']; foreach ($forbidden as $pattern) { if (preg_match("/\\b$pattern\\b/i", $fields['sqlQuery'])) { $errors['sqlQuery'] = ts('The query contains the forbidden %1 command.', [1 => $pattern]); } } - return $errors ? $errors : TRUE; + return $errors ?: TRUE; } /** @@ -81,15 +80,32 @@ class CRM_Import_DataSource_SQL extends CRM_Import_DataSource { * @param string $db * @param \CRM_Core_Form $form * + * @throws \API_Exception * @throws \CRM_Core_Exception + * @throws \Civi\API\Exception\UnauthorizedException */ public function postProcess(&$params, &$db, &$form) { - $importJob = new CRM_Contact_Import_ImportJob( - CRM_Utils_Array::value('import_table_name', $params), - $params['sqlQuery'], TRUE - ); + $table = CRM_Utils_SQL_TempTable::build()->setDurable(); + $tableName = $table->getName(); + $table->createWithQuery($this->getSubmittedValue('sqlQuery')); + + // Get the names of the fields to be imported. Any fields starting with an + // underscore are considered to be internal to the import process) + $columnsResult = CRM_Core_DAO::executeQuery( + 'SHOW FIELDS FROM ' . $tableName . " + WHERE Field NOT LIKE '\_%'"); + + $columnNames = []; + while ($columnsResult->fetch()) { + $columnNames[] = $columnsResult->Field; + } - $form->set('importTableName', $importJob->getTableName()); + $this->addTrackingFieldsToTable($tableName); + $this->updateUserJobMetadata('DataSource', [ + 'table_name' => $tableName, + 'column_headers' => $columnNames, + 'number_of_columns' => count($columnNames), + ]); } } diff --git a/civicrm/CRM/Import/Form/DataSource.php b/civicrm/CRM/Import/Form/DataSource.php index 36de82c71f..bf8c60984d 100644 --- a/civicrm/CRM/Import/Form/DataSource.php +++ b/civicrm/CRM/Import/Form/DataSource.php @@ -17,7 +17,7 @@ /** * Base class for upload-only import forms (all but Contact import). */ -abstract class CRM_Import_Form_DataSource extends CRM_Core_Form { +abstract class CRM_Import_Form_DataSource extends CRM_Import_Forms { /** * Set variables up before form is built. @@ -32,6 +32,30 @@ abstract class CRM_Import_Form_DataSource extends CRM_Core_Form { // check for post max size CRM_Utils_Number::formatUnitSize(ini_get('post_max_size'), TRUE); + $this->assign('importEntity', $this->getTranslatedEntity()); + $this->assign('importEntities', $this->getTranslatedEntities()); + } + + /** + * Get the import entity (translated). + * + * Used for template layer text. + * + * @return string + */ + protected function getTranslatedEntity(): string { + return (string) Civi\Api4\Utils\CoreUtil::getInfoItem($this::IMPORT_ENTITY, 'title'); + } + + /** + * Get the import entity plural (translated). + * + * Used for template layer text. + * + * @return string + */ + protected function getTranslatedEntities(): string { + return (string) Civi\Api4\Utils\CoreUtil::getInfoItem($this::IMPORT_ENTITY, 'title_plural'); } /** @@ -132,14 +156,7 @@ abstract class CRM_Import_Form_DataSource extends CRM_Core_Form { */ protected function submitFileForMapping($parserClassName, $entity = NULL) { $this->controller->resetPage('MapField'); - - $fileName = $this->controller->exportValue($this->_name, 'uploadFile'); - $skipColumnHeader = $this->controller->exportValue($this->_name, 'skipColumnHeader'); - - $session = CRM_Core_Session::singleton(); - $session->set("dateTypes", $this->get('dateFormats')); - - $separator = $this->controller->exportValue($this->_name, 'fieldSeparator'); + CRM_Core_Session::singleton()->set('dateTypes', $this->getSubmittedValue('dateFormats')); $mapper = []; @@ -148,12 +165,13 @@ abstract class CRM_Import_Form_DataSource extends CRM_Core_Form { $parser->setEntity($this->get($entity)); } $parser->setMaxLinesToProcess(100); - $parser->run($fileName, - $separator, + $parser->run( + $this->getSubmittedValue('uploadFile'), + $this->getSubmittedValue('fieldSeparator'), [], - $skipColumnHeader, + $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_MAPFIELD, - $this->get('contactType') + $this->getSubmittedValue('contactType') ); // add all the necessary variables to the form diff --git a/civicrm/CRM/Import/Form/DataSourceConfig.php b/civicrm/CRM/Import/Form/DataSourceConfig.php new file mode 100644 index 0000000000..e5ddfc870b --- /dev/null +++ b/civicrm/CRM/Import/Form/DataSourceConfig.php @@ -0,0 +1,80 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +/** + * This class allows datasource specific fields to be added to the datasource form. + */ +class CRM_Import_Form_DataSourceConfig extends CRM_Import_Forms { + + /** + * Set variables up before form is built. + * + * @throws \CRM_Core_Exception + */ + public function preProcess(): void { + $dataSourcePath = explode('_', $this->getDataSourceClassName()); + $templateFile = 'CRM/Contact/Import/Form/' . $dataSourcePath[3] . '.tpl'; + $this->assign('dataSourceFormTemplateFile', $templateFile ?? NULL); + if (CRM_Utils_Request::retrieveValue('user_job_id', 'Integer')) { + $this->setUserJobID(CRM_Utils_Request::retrieveValue('user_job_id', 'Integer')); + } + } + + /** + * Build the form object. + * + * @throws \CRM_Core_Exception + */ + public function buildQuickForm(): void { + $this->buildDataSourceFields(); + } + + /** + * Set defaults. + * + * @return array + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + public function setDefaultValues() { + $defaults = []; + if ($this->userJobID) { + foreach ($this->getDataSourceFields() as $fieldName) { + $defaults[$fieldName] = $this->getSubmittedValue($fieldName); + } + } + return $defaults; + } + + /** + * Get the submitted value, as saved in the user job. + * + * This form is not in the same flow as the DataSource but + * the value we want is saved to the userJob so load it from there. + * + * @param string $fieldName + * + * @return mixed|null + * @throws \API_Exception + */ + public function getSubmittedValue(string $fieldName) { + $userJob = $this->getUserJob(); + return $userJob['metadata']['submitted_values'][$fieldName]; + } + +} diff --git a/civicrm/CRM/Import/Form/MapField.php b/civicrm/CRM/Import/Form/MapField.php index 7fba797c8c..083f4aceb7 100644 --- a/civicrm/CRM/Import/Form/MapField.php +++ b/civicrm/CRM/Import/Form/MapField.php @@ -19,7 +19,7 @@ * * TODO: CRM-11254 - There's still a lot of duplicate code in the 5 child classes that should be moved here */ -abstract class CRM_Import_Form_MapField extends CRM_Core_Form { +abstract class CRM_Import_Form_MapField extends CRM_Import_Forms { /** * Cache of preview data values diff --git a/civicrm/CRM/Import/Form/Preview.php b/civicrm/CRM/Import/Form/Preview.php index 5067a22c48..3ba704f339 100644 --- a/civicrm/CRM/Import/Form/Preview.php +++ b/civicrm/CRM/Import/Form/Preview.php @@ -21,7 +21,7 @@ * TODO: CRM-11254 - if preProcess and postProcess functions can be reconciled between the 5 child classes, * those classes can be removed entirely and this class will not need to be abstract */ -abstract class CRM_Import_Form_Preview extends CRM_Core_Form { +abstract class CRM_Import_Form_Preview extends CRM_Import_Forms { /** * Return a descriptive name for the page, used in wizard header. @@ -32,6 +32,14 @@ abstract class CRM_Import_Form_Preview extends CRM_Core_Form { return ts('Preview'); } + /** + * Assign common values to the template. + */ + public function preProcess() { + $this->assign('skipColumnHeader', $this->getSubmittedValue('skipColumnHeader')); + $this->assign('rowDisplayCount', $this->getSubmittedValue('skipColumnHeader') ? 3 : 2); + } + /** * Build the form object. */ diff --git a/civicrm/CRM/Import/Form/Summary.php b/civicrm/CRM/Import/Form/Summary.php index e12cbb4fa1..b27af617ee 100644 --- a/civicrm/CRM/Import/Form/Summary.php +++ b/civicrm/CRM/Import/Form/Summary.php @@ -21,7 +21,7 @@ * TODO: CRM-11254 - if preProcess and postProcess functions can be reconciled between the 5 child classes, * those classes can be removed entirely and this class will not need to be abstract */ -abstract class CRM_Import_Form_Summary extends CRM_Core_Form { +abstract class CRM_Import_Form_Summary extends CRM_Import_Forms { /** * Build the form object. diff --git a/civicrm/CRM/Import/Forms.php b/civicrm/CRM/Import/Forms.php new file mode 100644 index 0000000000..3816383234 --- /dev/null +++ b/civicrm/CRM/Import/Forms.php @@ -0,0 +1,554 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +use Civi\Api4\UserJob; +use League\Csv\Writer; + +/** + * This class helps the forms within the import flow access submitted & parsed values. + */ +class CRM_Import_Forms extends CRM_Core_Form { + + /** + * User job id. + * + * This is the primary key of the civicrm_user_job table which is used to + * track the import. + * + * @var int + */ + protected $userJobID; + + /** + * @return int|null + */ + public function getUserJobID(): ?int { + if (!$this->userJobID && $this->get('user_job_id')) { + $this->userJobID = $this->get('user_job_id'); + } + return $this->userJobID; + } + + /** + * Set user job ID. + * + * @param int $userJobID + */ + public function setUserJobID(int $userJobID): void { + $this->userJobID = $userJobID; + // This set allows other forms in the flow ot use $this->get('user_job_id'). + $this->set('user_job_id', $userJobID); + } + + /** + * User job details. + * + * This is the relevant row from civicrm_user_job. + * + * @var array + */ + protected $userJob; + + /** + * Get User Job. + * + * API call to retrieve the userJob row. + * + * @return array + * + * @throws \API_Exception + */ + protected function getUserJob(): array { + if (!$this->userJob) { + $this->userJob = UserJob::get() + ->addWhere('id', '=', $this->getUserJobID()) + ->execute() + ->first(); + } + return $this->userJob; + } + + /** + * Get submitted values stored in the user job. + * + * @return array + * @throws \API_Exception + */ + protected function getUserJobSubmittedValues(): array { + return $this->getUserJob()['metadata']['submitted_values']; + } + + /** + * Fields that may be submitted on any form in the flow. + * + * @var string[] + */ + protected $submittableFields = [ + // Skip column header is actually a field that would be added from the + // datasource - but currently only in contact, it is always there for + // other imports, ditto uploadFile. + 'skipColumnHeader' => 'DataSource', + 'fieldSeparator' => 'DataSource', + 'uploadFile' => 'DataSource', + 'contactType' => 'DataSource', + 'contactSubType' => 'DataSource', + 'dateFormats' => 'DataSource', + 'savedMapping' => 'DataSource', + 'dataSource' => 'DataSource', + 'dedupe_rule_id' => 'DataSource', + 'onDuplicate' => 'DataSource', + 'disableUSPS' => 'DataSource', + 'doGeocodeAddress' => 'DataSource', + // Note we don't add the save mapping instructions for MapField here + // (eg 'updateMapping') - as they really are an action for that form + // rather than part of the mapping config. + 'mapper' => 'MapField', + ]; + + /** + * Get the submitted value, accessing it from whatever form in the flow it is + * submitted on. + * + * @param string $fieldName + * + * @return mixed|null + * @throws \CRM_Core_Exception + */ + public function getSubmittedValue(string $fieldName) { + if ($fieldName === 'dataSource') { + // Hard-coded handling for DataSource as it affects the contents of + // getSubmittableFields and can cause a loop. + return $this->controller->exportValue('DataSource', 'dataSource'); + } + $mappedValues = $this->getSubmittableFields(); + if (array_key_exists($fieldName, $mappedValues)) { + return $this->controller->exportValue($mappedValues[$fieldName], $fieldName); + } + return parent::getSubmittedValue($fieldName); + + } + + /** + * Get values submitted on any form in the multi-page import flow. + * + * @return array + */ + public function getSubmittedValues(): array { + $values = []; + foreach (array_keys($this->getSubmittableFields()) as $key) { + $values[$key] = $this->getSubmittedValue($key); + } + return $values; + } + + /** + * Get the available datasource. + * + * Permission dependent, this will look like + * [ + * 'CRM_Import_DataSource_CSV' => 'Comma-Separated Values (CSV)', + * 'CRM_Import_DataSource_SQL' => 'SQL Query', + * ] + * + * The label is translated. + * + * @return array + */ + protected function getDataSources(): array { + $dataSources = []; + foreach (['CRM_Import_DataSource_SQL', 'CRM_Import_DataSource_CSV'] as $dataSourceClass) { + $object = new $dataSourceClass(); + if ($object->checkPermission()) { + $dataSources[$dataSourceClass] = $object->getInfo()['title']; + } + } + return $dataSources; + } + + /** + * Get the name of the datasource class. + * + * This function prioritises retrieving from GET and POST over 'submitted'. + * The reason for this is the submitted array will hold the previous submissions + * data until after buildForm is called. + * + * This is problematic in the forward->back flow & option changing flow. As in.... + * + * 1) Load DataSource form - initial default datasource is set to CSV and the + * form is via ajax (this calls DataSourceConfig to get the data). + * 2) User changes the source to SQL - the ajax updates the html but the + * form was built with the expectation that the csv-specific fields would be + * required. + * 3) When the user submits Quickform calls preProcess and buildForm and THEN + * retrieves the submitted values based on what has been added in buildForm. + * Only the submitted values for fields added in buildForm are available - but + * these have to be added BEFORE the submitted values are determined. Hence + * we look in the POST or GET to get the updated value. + * + * Note that an imminent refactor will involve storing the values in the + * civicrm_user_job table - this will hopefully help with a known (not new) + * issue whereby the previously submitted values (eg. skipColumnHeader has + * been checked or sql has been filled in) are not loaded via the ajax request. + * + * @return string|null + * + * @throws \CRM_Core_Exception + */ + protected function getDataSourceClassName(): string { + $className = CRM_Utils_Request::retrieveValue( + 'dataSource', + 'String' + ); + if (!$className) { + $className = $this->getSubmittedValue('dataSource'); + } + if (!$className) { + $className = $this->getDefaultDataSource(); + } + if ($this->getDataSources()[$className]) { + return $className; + } + throw new CRM_Core_Exception('Invalid data source'); + } + + /** + * Allow the datasource class to add fields. + * + * This is called as a snippet in DataSourceConfig and + * also from DataSource::buildForm to add the fields such + * that quick form picks them up. + * + * @throws \CRM_Core_Exception + */ + protected function buildDataSourceFields(): void { + $dataSourceClass = $this->getDataSourceObject(); + if ($dataSourceClass) { + $dataSourceClass->buildQuickForm($this); + } + } + + /** + * Flush datasource on re-submission of the form. + * + * If the form has been re-submitted the datasource might have changed. + * We tell the dataSource class to remove any tables (and potentially files) + * created last form submission. + * + * If the DataSource in use is unchanged (ie still CSV or still SQL) + * we also pass in the new variables. In theory it could decide that they + * have not actually changed and it doesn't need to do any cleanup. + * + * In practice the datasource classes blast away as they always have for now + * - however, the sql class, for example, might realise the fields it cares + * about are unchanged and not flush the table. + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + protected function flushDataSource(): void { + // If the form has been resubmitted the datasource might have changed. + // We give the datasource a chance to clean up any tables it might have + // created. If we are still using the same type of datasource (e.g still + // an sql query + $oldDataSource = $this->getUserJobSubmittedValues()['dataSource']; + $oldDataSourceObject = new $oldDataSource($this->getUserJobID()); + $newParams = $this->getSubmittedValue('dataSource') === $oldDataSource ? $this->getSubmittedValues() : []; + $oldDataSourceObject->purge($newParams); + } + + /** + * Get the relevant datasource object. + * + * @return \CRM_Import_DataSource|null + * + * @throws \CRM_Core_Exception + */ + protected function getDataSourceObject(): ?CRM_Import_DataSource { + $className = $this->getDataSourceClassName(); + if ($className) { + /* @var CRM_Import_DataSource $dataSource */ + return new $className($this->getUserJobID()); + } + return NULL; + } + + /** + * Allow the datasource class to add fields. + * + * This is called as a snippet in DataSourceConfig and + * also from DataSource::buildForm to add the fields such + * that quick form picks them up. + * + * @throws \CRM_Core_Exception + */ + protected function getDataSourceFields(): array { + $className = $this->getDataSourceClassName(); + if ($className) { + /* @var CRM_Import_DataSource $dataSourceClass */ + $dataSourceClass = new $className(); + return $dataSourceClass->getSubmittableFields(); + } + return []; + } + + /** + * Get the default datasource. + * + * @return string + */ + protected function getDefaultDataSource(): string { + return 'CRM_Import_DataSource_CSV'; + } + + /** + * Get the fields that can be submitted in the Import form flow. + * + * These could be on any form in the flow & are accessed the same way from + * all forms. + * + * @return string[] + * @throws \CRM_Core_Exception + */ + protected function getSubmittableFields(): array { + $dataSourceFields = array_fill_keys($this->getDataSourceFields(), 'DataSource'); + return array_merge($this->submittableFields, $dataSourceFields); + } + + /** + * Get the contact type selected for the import (on the datasource form). + * + * @return string + * e.g Individual, Organization, Household. + * + * @throws \CRM_Core_Exception + */ + protected function getContactType(): string { + $contactTypeMapping = [ + CRM_Import_Parser::CONTACT_INDIVIDUAL => 'Individual', + CRM_Import_Parser::CONTACT_HOUSEHOLD => 'Household', + CRM_Import_Parser::CONTACT_ORGANIZATION => 'Organization', + ]; + return $contactTypeMapping[$this->getSubmittedValue('contactType')]; + } + + /** + * Get the contact sub type selected for the import (on the datasource form). + * + * @return string|null + * e.g Staff. + * + * @throws \CRM_Core_Exception + */ + protected function getContactSubType(): ?string { + return $this->getSubmittedValue('contactSubType'); + } + + /** + * Create a user job to track the import. + * + * @return int + * + * @throws \API_Exception + */ + protected function createUserJob(): int { + $id = UserJob::create(FALSE) + ->setValues([ + 'created_id' => CRM_Core_Session::getLoggedInContactID(), + 'type_id:name' => 'contact_import', + 'status_id:name' => 'draft', + // This suggests the data could be cleaned up after this. + 'expires_date' => '+ 1 week', + 'metadata' => [ + 'submitted_values' => $this->getSubmittedValues(), + ], + ]) + ->execute() + ->first()['id']; + $this->setUserJobID($id); + return $id; + } + + /** + * @param string $key + * @param array $data + * + * @throws \API_Exception + * @throws \Civi\API\Exception\UnauthorizedException + */ + protected function updateUserJobMetadata(string $key, array $data): void { + $metaData = array_merge( + $this->getUserJob()['metadata'], + [$key => $data] + ); + UserJob::update(FALSE) + ->addWhere('id', '=', $this->getUserJobID()) + ->setValues(['metadata' => $metaData]) + ->execute(); + $this->userJob['metadata'] = $metaData; + } + + /** + * Get column headers for the datasource or empty array if none apply. + * + * This would be the first row of a csv or the fields in an sql query. + * + * If the csv does not have a header row it will be empty. + * + * @return array + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + protected function getColumnHeaders(): array { + return $this->getDataSourceObject()->getColumnHeaders(); + } + + /** + * Get the number of importable columns in the data source. + * + * @return int + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + protected function getNumberOfColumns(): int { + return $this->getDataSourceObject()->getNumberOfColumns(); + } + + /** + * Get x data rows from the datasource. + * + * At this stage we are fetching from what has been stored in the form + * during `postProcess` on the DataSource form. + * + * In the future we will use the dataSource object, likely + * supporting offset as well. + * + * @return array|int + * One or more of the statues available - e.g + * CRM_Import_Parser::VALID + * or [CRM_Import_Parser::ERROR, CRM_Import_Parser::VALID] + * + * @throws \CRM_Core_Exception + * @throws \API_Exception + */ + protected function getDataRows($statuses = [], int $limit = 0): array { + $statuses = (array) $statuses; + return $this->getDataSourceObject()->setLimit($limit)->setStatuses($statuses)->getRows(); + } + + /** + * Get the number of rows with the specified status. + * + * @param array|int $statuses + * + * @return int + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + protected function getRowCount($statuses = []) { + $statuses = (array) $statuses; + return $this->getDataSourceObject()->getRowCount($statuses); + } + + /** + * Outputs and downloads the csv of outcomes from an import job. + * + * This gets the rows from the temp table that match the relevant status + * and output them as a csv. + * + * @throws \API_Exception + * @throws \League\Csv\CannotInsertRecord + * @throws \CRM_Core_Exception + */ + public static function outputCSV(): void { + $userJobID = CRM_Utils_Request::retrieveValue('user_job_id', 'Integer', NULL, TRUE); + $status = CRM_Utils_Request::retrieveValue('status', 'String', NULL, TRUE); + $saveFileName = CRM_Import_Parser::saveFileName($status); + + $form = new CRM_Import_Forms(); + $form->controller = new CRM_Core_Controller(); + $form->set('user_job_id', $userJobID); + + $form->getUserJob(); + $writer = Writer::createFromFileObject(new SplTempFileObject()); + $headers = $form->getColumnHeaders(); + if ($headers) { + array_unshift($headers, ts('Reason')); + array_unshift($headers, ts('Line Number')); + $writer->insertOne($headers); + } + $writer->addFormatter(['CRM_Import_Forms', 'reorderOutput']); + // Note this might be more inefficient that iterating the result + // set & doing insertOne - possibly something to explore later. + $writer->insertAll($form->getDataRows($status)); + + CRM_Utils_System::setHttpHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0'); + CRM_Utils_System::setHttpHeader('Content-Description', 'File Transfer'); + CRM_Utils_System::setHttpHeader('Content-Type', 'text/csv; charset=UTF-8'); + $writer->output($saveFileName); + CRM_Utils_System::civiExit(); + } + + /** + * When outputting the row as a csv, more the last 2 rows to the start. + * + * This is because the id and status message fields are at the end. It may make sense + * to move them to the start later, when order code cleanup has happened... + * + * @param array $record + */ + public static function reorderOutput(array $record): array { + $rowNumber = array_pop($record); + $message = array_pop($record); + // Also pop off the status - but we are not going to use this at this stage. + array_pop($record); + array_unshift($record, $message); + array_unshift($record, $rowNumber); + return $record; + } + + /** + * Get the url to download the relevant csv file. + * @param string $status + * + * @return string + */ + protected function getDownloadURL(string $status): string { + return CRM_Utils_System::url('civicrm/import/outcome', [ + 'user_job_id' => $this->get('user_job_id'), + 'status' => $status, + 'reset' => 1, + ]); + } + + /** + * Get the fields available for import selection. + * + * @return array + * e.g ['first_name' => 'First Name', 'last_name' => 'Last Name'.... + * + * @throws \API_Exception + */ + protected function getAvailableFields(): array { + $parser = new CRM_Contact_Import_Parser_Contact(); + $parser->setUserJobID($this->getUserJobID()); + return $parser->getAvailableFields(); + } + +} diff --git a/civicrm/CRM/Import/ImportProcessor.php b/civicrm/CRM/Import/ImportProcessor.php index 27508e0aea..12b38d6b53 100644 --- a/civicrm/CRM/Import/ImportProcessor.php +++ b/civicrm/CRM/Import/ImportProcessor.php @@ -1,5 +1,8 @@ <?php +use Civi\Api4\Mapping; +use Civi\Api4\MappingField; + /** * Class CRM_Import_ImportProcessor. * @@ -24,6 +27,27 @@ class CRM_Import_ImportProcessor { */ protected $metadata = []; + /** + * Id of the created user job. + * + * @var int + */ + protected $userJobID; + + /** + * @return int + */ + public function getUserJobID(): int { + return $this->userJobID; + } + + /** + * @param int $userJobID + */ + public function setUserJobID(int $userJobID): void { + $this->userJobID = $userJobID; + } + /** * Metadata keyed by field title. * @@ -415,8 +439,8 @@ class CRM_Import_ImportProcessor { $this->getFieldWebsiteTypes() // $mapperRelatedContactWebsiteType = [] ); + $importer->setUserJobID($this->getUserJobID()); $importer->init(); - $importer->_contactType = $this->getContactType(); return $importer; } @@ -426,6 +450,29 @@ class CRM_Import_ImportProcessor { * @throws \CiviCRM_API3_Exception */ protected function loadSavedMapping() { + $fields = civicrm_api3('MappingField', 'get', [ + 'mapping_id' => $this->getMappingID(), + 'options' => ['limit' => 0], + ])['values']; + foreach ($fields as $index => $field) { + $fieldSpec = $this->getMetadata()[$fields[$index]['name']]; + $fields[$index]['label'] = $fieldSpec['title']; + if (empty($field['location_type_id']) && !empty($fieldSpec['hasLocationType'])) { + $fields[$index]['location_type_id'] = 'Primary'; + } + } + $this->mappingFields = $this->rekeyBySortedColumnNumbers($fields); + } + + /** + * Load the mapping from the database into the pre-5.50 format. + * + * This is preserved as a copy the upgrade script can use - since the + * upgrade allows the other to be 'fixed'. + * + * @throws \CiviCRM_API3_Exception + */ + protected function legacyLoadSavedMapping() { $fields = civicrm_api3('MappingField', 'get', [ 'mapping_id' => $this->getMappingID(), 'options' => ['limit' => 0], @@ -568,4 +615,33 @@ class CRM_Import_ImportProcessor { return [(string) $this->getFieldName($column), $this->getLocationTypeID($column), $this->getPhoneOrIMTypeID($column)]; } + /** + * This exists for use in the FiveFifty Upgrade + * + * @throws \API_Exception|\CiviCRM_API3_Exception + */ + public static function convertSavedFields(): void { + $mappings = Mapping::get(FALSE) + ->setSelect(['id', 'contact_type']) + ->addWhere('mapping_type_id:name', '=', 'Import Contact') + ->execute(); + + foreach ($mappings as $mapping) { + $processor = new CRM_Import_ImportProcessor(); + $processor->setMappingID($mapping['id']); + $processor->setMetadata(CRM_Contact_BAO_Contact::importableFields('All')); + $processor->legacyLoadSavedMapping();; + foreach ($processor->getMappingFields() as $field) { + // The if is mostly precautionary against running this more than once + // - which is common in dev if not live... + if ($field['name']) { + MappingField::update(FALSE) + ->setValues(['name' => $field['name']]) + ->addWhere('id', '=', $field['id']) + ->execute(); + } + } + } + } + } diff --git a/civicrm/CRM/Import/Parser.php b/civicrm/CRM/Import/Parser.php index eb05e31038..1880d33b9a 100644 --- a/civicrm/CRM/Import/Parser.php +++ b/civicrm/CRM/Import/Parser.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\UserJob; + /** * * @package CRM @@ -41,6 +43,92 @@ abstract class CRM_Import_Parser { const CONTACT_INDIVIDUAL = 1, CONTACT_HOUSEHOLD = 2, CONTACT_ORGANIZATION = 4; + /** + * User job id. + * + * This is the primary key of the civicrm_user_job table which is used to + * track the import. + * + * @var int + */ + protected $userJobID; + + /** + * @return int|null + */ + public function getUserJobID(): ?int { + return $this->userJobID; + } + + /** + * Set user job ID. + * + * @param int $userJobID + */ + public function setUserJobID(int $userJobID): void { + $this->userJobID = $userJobID; + } + + /** + * Get User Job. + * + * API call to retrieve the userJob row. + * + * @return array + * + * @throws \API_Exception + */ + protected function getUserJob(): array { + return UserJob::get() + ->addWhere('id', '=', $this->getUserJobID()) + ->execute() + ->first(); + } + + /** + * Get the submitted value, as stored on the user job. + * + * @param string $fieldName + * + * @return mixed + * + * @throws \API_Exception + */ + protected function getSubmittedValue(string $fieldName) { + return $this->getUserJob()['metadata']['submitted_values'][$fieldName]; + } + + /** + * Get configured contact type. + * + * @throws \API_Exception + */ + protected function getContactType() { + if (!$this->_contactType) { + $contactTypeMapping = [ + CRM_Import_Parser::CONTACT_INDIVIDUAL => 'Individual', + CRM_Import_Parser::CONTACT_HOUSEHOLD => 'Household', + CRM_Import_Parser::CONTACT_ORGANIZATION => 'Organization', + ]; + $this->_contactType = $contactTypeMapping[$this->getSubmittedValue('contactType')]; + } + return $this->_contactType; + } + + /** + * Get configured contact type. + * + * @return string|null + * + * @throws \API_Exception + */ + public function getContactSubType() { + if (!$this->_contactSubType) { + $this->_contactSubType = $this->getSubmittedValue('contactSubType'); + } + return $this->_contactSubType; + } + /** * Total number of non empty lines * @var int @@ -72,18 +160,6 @@ abstract class CRM_Import_Parser { */ protected $_errors; - /** - * Total number of conflict lines - * @var int - */ - protected $_conflictCount; - - /** - * Array of conflict lines - * @var array - */ - protected $_conflicts; - /** * Total number of duplicate (from database) lines * @var int @@ -96,12 +172,6 @@ abstract class CRM_Import_Parser { */ protected $_duplicates; - /** - * Running total number of warnings - * @var int - */ - protected $_warningCount; - /** * Maximum number of warnings to store * @var int @@ -178,13 +248,6 @@ abstract class CRM_Import_Parser { */ protected $_errorFileName; - /** - * Filename of conflict data - * - * @var string - */ - protected $_conflictFileName; - /** * Filename of duplicate data * @@ -195,77 +258,51 @@ abstract class CRM_Import_Parser { /** * Contact type * - * @var int + * @var string */ public $_contactType; - /** - * Contact sub-type - * - * @var int - */ - public $_contactSubType; /** - * Class constructor. - */ - public function __construct() { - $this->_maxLinesToProcess = 0; - } - - /** - * Abstract function definitions. - */ - abstract protected function init(); - - /** - * @return mixed - */ - abstract protected function fini(); - - /** - * Map field. - * - * @param array $values + * @param string $contactType * - * @return mixed + * @return CRM_Import_Parser */ - abstract protected function mapField(&$values); + public function setContactType(string $contactType): CRM_Import_Parser { + $this->_contactType = $contactType; + return $this; + } /** - * Preview. - * - * @param array $values + * Contact sub-type * - * @return mixed + * @var int|null */ - abstract protected function preview(&$values); + public $_contactSubType; /** - * @param $values + * @param int|null $contactSubType * - * @return mixed + * @return self */ - abstract protected function summary(&$values); + public function setContactSubType(?int $contactSubType): self { + $this->_contactSubType = $contactSubType; + return $this; + } /** - * @param $onDuplicate - * @param $values - * - * @return mixed + * Class constructor. */ - abstract protected function import($onDuplicate, &$values); + public function __construct() { + $this->_maxLinesToProcess = 0; + } /** * Set and validate field values. * * @param array $elements * array. - * @param $erroneousField - * reference. - * - * @return int */ - public function setActiveFieldValues($elements, &$erroneousField = NULL) { + public function setActiveFieldValues($elements): void { $maxCount = count($elements) < $this->_activeFieldCount ? count($elements) : $this->_activeFieldCount; for ($i = 0; $i < $maxCount; $i++) { $this->_activeFields[$i]->setValue($elements[$i]); @@ -275,18 +312,6 @@ abstract class CRM_Import_Parser { for (; $i < $this->_activeFieldCount; $i++) { $this->_activeFields[$i]->resetValue(); } - - // now validate the fields and return false if error - $valid = self::VALID; - for ($i = 0; $i < $this->_activeFieldCount; $i++) { - if (!$this->_activeFields[$i]->validate()) { - // no need to do any more validation - $erroneousField = $i; - $valid = self::ERROR; - break; - } - } - return $valid; } /** @@ -458,10 +483,6 @@ abstract class CRM_Import_Parser { $fileName .= '.errors'; break; - case self::CONFLICT: - $fileName .= '.conflicts'; - break; - case self::DUPLICATE: $fileName .= '.duplicates'; break; @@ -494,10 +515,6 @@ abstract class CRM_Import_Parser { $fileName = 'Import_Errors.csv'; break; - case self::CONFLICT: - $fileName = 'Import_Conflicts.csv'; - break; - case self::DUPLICATE: $fileName = 'Import_Duplicates.csv'; break; @@ -993,12 +1010,7 @@ abstract class CRM_Import_Parser { if ((strtolower(trim($customLabel['label'])) == strtolower(trim($v1))) || (strtolower(trim($customValue)) == strtolower(trim($v1))) ) { - if ($fieldType == 'CheckBox') { - $values[$customValue] = 1; - } - else { - $values[] = $customValue; - } + $values[] = $customValue; } } } diff --git a/civicrm/CRM/Mailing/Event/BAO/Confirm.php b/civicrm/CRM/Mailing/Event/BAO/Confirm.php index a94ecb089e..c6b8f73e68 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Confirm.php +++ b/civicrm/CRM/Mailing/Event/BAO/Confirm.php @@ -93,7 +93,11 @@ class CRM_Mailing_Event_BAO_Confirm extends CRM_Mailing_Event_DAO_Confirm { $component->is_active = 1; $component->component_type = 'Welcome'; - $component->find(TRUE); + // we should return early if welcome email temaplate is disabled + // this means confirmation email will not be sent + if (!$component->find(TRUE)) { + return $group->title; + } $html = $component->body_html; diff --git a/civicrm/CRM/Mailing/Form/Approve.php b/civicrm/CRM/Mailing/Form/Approve.php index ff5c6ddfe2..1cd4140b03 100644 --- a/civicrm/CRM/Mailing/Form/Approve.php +++ b/civicrm/CRM/Mailing/Form/Approve.php @@ -129,15 +129,14 @@ class CRM_Mailing_Form_Approve extends CRM_Core_Form { // get the submitted form values. $params = $this->controller->exportValues($this->_name); - $ids = []; if (isset($this->_mailingID)) { - $ids['mailing_id'] = $this->_mailingID; + $params['id'] = $this->_mailingID; } else { - $ids['mailing_id'] = $this->get('mailing_id'); + $params['id'] = $this->get('mailing_id'); } - if (!$ids['mailing_id']) { + if (!$params['id']) { CRM_Core_Error::statusBounce(ts('No mailing id has been able to be determined')); } @@ -154,14 +153,14 @@ class CRM_Mailing_Form_Approve extends CRM_Core_Form { // also delete any jobs associated with this mailing $job = new CRM_Mailing_BAO_MailingJob(); - $job->mailing_id = $ids['mailing_id']; + $job->mailing_id = $params['id']; while ($job->fetch()) { CRM_Mailing_BAO_MailingJob::del($job->id); } } else { $mailing = new CRM_Mailing_BAO_Mailing(); - $mailing->id = $ids['mailing_id']; + $mailing->id = $params['id']; $mailing->find(TRUE); $params['scheduled_date'] = CRM_Utils_Date::processDate($mailing->scheduled_date); diff --git a/civicrm/CRM/Member/Form/MembershipView.php b/civicrm/CRM/Member/Form/MembershipView.php index 8df997d583..a8af679e49 100644 --- a/civicrm/CRM/Member/Form/MembershipView.php +++ b/civicrm/CRM/Member/Form/MembershipView.php @@ -154,8 +154,22 @@ class CRM_Member_Form_MembershipView extends CRM_Core_Form { $this->assign('context', $context); if ($this->membershipID) { - $params = ['id' => $this->membershipID]; - CRM_Member_BAO_Membership::retrieve($params, $values); + $values = \Civi\Api4\Membership::get() + ->addSelect('*', 'status_id:label', 'membership_type_id:label', 'membership_type_id.financial_type_id', 'status_id.is_current_member') + ->addWhere('id', '=', $this->membershipID) + ->execute() + ->first(); + + // Ensure keys expected by MembershipView.tpl are set correctly + // Some of these defaults are overwritten dependant on context below + $values['financialTypeId'] = $values['membership_type_id.financial_type_id']; + $values['membership_type'] = $values['membership_type_id:label']; + $values['status'] = $values['status_id:label']; + $values['active'] = $values['status_id.is_current_member']; + $values['owner_contact_id'] = FALSE; + $values['owner_display_name'] = FALSE; + $values['campaign'] = FALSE; + if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()) { $finTypeId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType', $values['membership_type_id'], 'financial_type_id'); $finType = CRM_Contribute_PseudoConstant::financialType($finTypeId); diff --git a/civicrm/CRM/Member/Form/Task/Label.php b/civicrm/CRM/Member/Form/Task/Label.php index c6fddc7c0b..ff61829195 100644 --- a/civicrm/CRM/Member/Form/Task/Label.php +++ b/civicrm/CRM/Member/Form/Task/Label.php @@ -112,6 +112,7 @@ class CRM_Member_Form_Task_Label extends CRM_Member_Form_Task { $memberships = civicrm_api3('membership', 'get', [ 'id' => ['IN' => $this->_memberIds], 'return' => 'contact_id', + 'options' => ['limit' => 0], ]); foreach ($memberships['values'] as $id => $membership) { if (isset($rows[$membership['contact_id']])) { diff --git a/civicrm/CRM/Member/Import/Form/MapField.php b/civicrm/CRM/Member/Import/Form/MapField.php index c06c9afeeb..d73c996e3f 100644 --- a/civicrm/CRM/Member/Import/Form/MapField.php +++ b/civicrm/CRM/Member/Import/Form/MapField.php @@ -392,10 +392,6 @@ class CRM_Member_Import_Form_MapField extends CRM_Import_Form_MapField { return; } - $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - $mapperKeys = []; $mapper = []; $mapperKeys = $this->controller->exportValue($this->_name, 'mapper'); @@ -446,11 +442,6 @@ class CRM_Member_Import_Form_MapField extends CRM_Import_Form_MapField { $updateMappingFields->id = $mappingFieldsId[$i]; $updateMappingFields->mapping_id = $params['mappingId']; $updateMappingFields->column_number = $i; - - $mapperKeyParts = explode('_', $mapperKeys[$i][0], 3); - $id = $mapperKeyParts[0] ?? NULL; - $first = $mapperKeyParts[1] ?? NULL; - $second = $mapperKeyParts[2] ?? NULL; $updateMappingFields->name = $mapper[$i]; $updateMappingFields->save(); } @@ -470,11 +461,6 @@ class CRM_Member_Import_Form_MapField extends CRM_Import_Form_MapField { $saveMappingFields = new CRM_Core_DAO_MappingField(); $saveMappingFields->mapping_id = $saveMapping->id; $saveMappingFields->column_number = $i; - - $mapperKeyParts = explode('_', $mapperKeys[$i][0], 3); - $id = $mapperKeyParts[0] ?? NULL; - $first = $mapperKeyParts[1] ?? NULL; - $second = $mapperKeyParts[2] ?? NULL; $saveMappingFields->name = $mapper[$i]; $saveMappingFields->save(); } @@ -482,7 +468,7 @@ class CRM_Member_Import_Form_MapField extends CRM_Import_Form_MapField { } $parser = new CRM_Member_Import_Parser_Membership($mapperKeysMain, $mapperLocType, $mapperPhoneType); - $parser->run($fileName, $separator, $mapper, $skipColumnHeader, + $parser->run($this->getSubmittedValue('uploadFile'), $this->getSubmittedValue('fieldSeparator'), $mapper, $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_PREVIEW, $this->get('contactType') ); // add all the necessary variables to the form diff --git a/civicrm/CRM/Member/Import/Form/Preview.php b/civicrm/CRM/Member/Import/Form/Preview.php index dd84e13468..4c43964b58 100644 --- a/civicrm/CRM/Member/Import/Form/Preview.php +++ b/civicrm/CRM/Member/Import/Form/Preview.php @@ -27,13 +27,11 @@ class CRM_Member_Import_Form_Preview extends CRM_Import_Form_Preview { * @return void */ public function preProcess() { - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); - + parent::preProcess(); //get the data from the session $dataValues = $this->get('dataValues'); $mapper = $this->get('mapper'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $mismatchCount = $this->get('unMatchCount'); //get the mapping name displayed if the mappingId is set @@ -45,24 +43,11 @@ class CRM_Member_Import_Form_Preview extends CRM_Import_Form_Preview { } $this->assign('savedMappingName', $mappingId ? $mapDAO->name : NULL); - if ($skipColumnHeader) { - $this->assign('skipColumnHeader', $skipColumnHeader); - $this->assign('rowDisplayCount', 3); - } - else { - $this->assign('rowDisplayCount', 2); - } - if ($invalidRowCount) { $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Member_Import_Parser_Membership'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } - if ($conflictRowCount) { - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Member_Import_Parser_Membership'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - } - if ($mismatchCount) { $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Member_Import_Parser_Membership'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); @@ -75,9 +60,7 @@ class CRM_Member_Import_Form_Preview extends CRM_Import_Form_Preview { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', 'downloadErrorRecordsUrl', - 'downloadConflictRecordsUrl', 'downloadMismatchRecordsUrl', ]; $this->setStatusUrl(); @@ -94,11 +77,8 @@ class CRM_Member_Import_Form_Preview extends CRM_Import_Form_Preview { * @return void */ public function postProcess() { - $fileName = $this->controller->exportValue('DataSource', 'uploadFile'); - $separator = $this->controller->exportValue('DataSource', 'fieldSeparator'); - $skipColumnHeader = $this->controller->exportValue('DataSource', 'skipColumnHeader'); + $fileName = $this->getSubmittedValue('uploadFile'); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $onDuplicate = $this->get('onDuplicate'); $mapper = $this->controller->exportValue('MapField', 'mapper'); @@ -138,9 +118,9 @@ class CRM_Member_Import_Form_Preview extends CRM_Import_Form_Preview { } $mapperFields[] = implode(' - ', $header); } - $parser->run($fileName, $separator, + $parser->run($this->getSubmittedValue('uploadFile'), $this->getSubmittedValue('fieldSeparator'), $mapperFields, - $skipColumnHeader, + $this->getSubmittedValue('skipColumnHeader'), CRM_Import_Parser::MODE_IMPORT, $this->get('contactType'), $onDuplicate, @@ -171,8 +151,6 @@ class CRM_Member_Import_Form_Preview extends CRM_Import_Form_Preview { $this->set('errorFile', $errorFile); $urlParams = 'type=' . CRM_Import_Parser::ERROR . '&parser=CRM_Member_Import_Parser_Membership'; $this->set('downloadErrorRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); - $urlParams = 'type=' . CRM_Import_Parser::CONFLICT . '&parser=CRM_Member_Import_Parser_Membership'; - $this->set('downloadConflictRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); $urlParams = 'type=' . CRM_Import_Parser::NO_MATCH . '&parser=CRM_Member_Import_Parser_Membership'; $this->set('downloadMismatchRecordsUrl', CRM_Utils_System::url('civicrm/export', $urlParams)); } diff --git a/civicrm/CRM/Member/Import/Form/Summary.php b/civicrm/CRM/Member/Import/Form/Summary.php index 890725426b..a21a567b6a 100644 --- a/civicrm/CRM/Member/Import/Form/Summary.php +++ b/civicrm/CRM/Member/Import/Form/Summary.php @@ -35,7 +35,6 @@ class CRM_Member_Import_Form_Summary extends CRM_Import_Form_Summary { $this->set('totalRowCount', $totalRowCount); $invalidRowCount = $this->get('invalidRowCount'); - $conflictRowCount = $this->get('conflictRowCount'); $duplicateRowCount = $this->get('duplicateRowCount'); $onDuplicate = $this->get('onDuplicate'); $mismatchCount = $this->get('unMatchCount'); @@ -70,7 +69,7 @@ class CRM_Member_Import_Form_Summary extends CRM_Import_Form_Summary { /* only subtract dupes from successful import if we're skipping */ $this->set('validRowCount', $totalRowCount - $invalidRowCount - - $conflictRowCount - $duplicateRowCount - $mismatchCount + $duplicateRowCount - $mismatchCount ); } $this->assign('dupeActionString', $dupeActionString); @@ -79,8 +78,6 @@ class CRM_Member_Import_Form_Summary extends CRM_Import_Form_Summary { 'totalRowCount', 'validRowCount', 'invalidRowCount', - 'conflictRowCount', - 'downloadConflictRecordsUrl', 'downloadErrorRecordsUrl', 'duplicateRowCount', 'downloadDuplicateRecordsUrl', diff --git a/civicrm/CRM/Member/Import/Parser/Membership.php b/civicrm/CRM/Member/Import/Parser/Membership.php index a4e4758fa9..0e643ceb51 100644 --- a/civicrm/CRM/Member/Import/Parser/Membership.php +++ b/civicrm/CRM/Member/Import/Parser/Membership.php @@ -72,7 +72,7 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { * * @param $mapperKeys */ - public function __construct($mapperKeys) { + public function __construct($mapperKeys = []) { parent::__construct(); $this->_mapperKeys = $mapperKeys; } @@ -131,13 +131,12 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { return FALSE; } - $this->_lineCount = $this->_warningCount = 0; + $this->_lineCount = 0; $this->_invalidRowCount = $this->_validCount = 0; - $this->_totalCount = $this->_conflictCount = 0; + $this->_totalCount = 0; $this->_errors = []; $this->_warnings = []; - $this->_conflicts = []; $this->_fileSize = number_format(filesize($fileName) / 1024.0, 2); @@ -180,7 +179,7 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { $this->_totalCount++; if ($mode == self::MODE_MAPFIELD) { - $returnCode = $this->mapField($values); + $returnCode = CRM_Import_Parser::VALID; } elseif ($mode == self::MODE_PREVIEW) { $returnCode = $this->preview($values); @@ -207,13 +206,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { } } - if ($returnCode & self::WARNING) { - $this->_warningCount++; - if ($this->_warningCount < $this->_maxWarningCount) { - $this->_warningCount[] = $line; - } - } - if ($returnCode & self::ERROR) { $this->_invalidRowCount++; $recordNumber = $this->_lineCount; @@ -221,13 +213,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { $this->_errors[] = $values; } - if ($returnCode & self::CONFLICT) { - $this->_conflictCount++; - $recordNumber = $this->_lineCount; - array_unshift($values, $recordNumber); - $this->_conflicts[] = $values; - } - if ($returnCode & self::DUPLICATE) { $this->_duplicateCount++; $recordNumber = $this->_lineCount; @@ -238,12 +223,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { } } - // we give the derived class a way of aborting the process - // note that the return code could be multiple code or'ed together - if ($returnCode & self::STOP) { - break; - } - // if we are done processing the maxNumber of lines, break if ($this->_maxLinesToProcess > 0 && $this->_validCount >= $this->_maxLinesToProcess) { break; @@ -271,14 +250,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { self::exportCSV($this->_errorFileName, $headers, $this->_errors); } - if ($this->_conflictCount) { - $headers = array_merge([ - ts('Line Number'), - ts('Reason'), - ], $customHeaders); - $this->_conflictFileName = self::errorFileName(self::CONFLICT); - self::exportCSV($this->_conflictFileName, $headers, $this->_conflicts); - } if ($this->_duplicateCount) { $headers = array_merge([ ts('Line Number'), @@ -289,7 +260,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { self::exportCSV($this->_duplicateFileName, $headers, $this->_duplicates); } } - return $this->fini(); } /** @@ -381,7 +351,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { $store->set('totalRowCount', $this->_totalCount); $store->set('validRowCount', $this->_validCount); $store->set('invalidRowCount', $this->_invalidRowCount); - $store->set('conflictRowCount', $this->_conflictCount); switch ($this->_contactType) { case 'Individual': @@ -399,9 +368,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { if ($this->_invalidRowCount) { $store->set('errorsFileName', $this->_errorFileName); } - if ($this->_conflictCount) { - $store->set('conflictsFileName', $this->_conflictFileName); - } if (isset($this->_rows) && !empty($this->_rows)) { $store->set('dataValues', $this->_rows); } @@ -493,18 +459,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { } } - /** - * Handle the values in mapField mode. - * - * @param array $values - * The array of values belonging to this line. - * - * @return bool - */ - public function mapField(&$values) { - return CRM_Import_Parser::VALID; - } - /** * Handle the values in preview mode. * @@ -528,8 +482,8 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { * the result of this processing */ public function summary(&$values) { - $erroneousField = NULL; - $this->setActiveFieldValues($values, $erroneousField); + + $this->setActiveFieldValues($values); $errorRequired = FALSE; @@ -950,14 +904,6 @@ class CRM_Member_Import_Parser_Membership extends CRM_Import_Parser { return $this->_newMemberships; } - /** - * The initializer code, called before the processing - * - * @return void - */ - public function fini() { - } - /** * to calculate join, start and end dates * diff --git a/civicrm/CRM/PCP/Form/Campaign.php b/civicrm/CRM/PCP/Form/Campaign.php index 40efeadcd7..bf24d4ce25 100644 --- a/civicrm/CRM/PCP/Form/Campaign.php +++ b/civicrm/CRM/PCP/Form/Campaign.php @@ -262,7 +262,7 @@ class CRM_PCP_Form_Campaign extends CRM_Core_Form { $supporterUrl = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$pcp->contact_id}", TRUE, NULL, FALSE, - FALSE + FALSE, TRUE ); $this->assign('supporterUrl', $supporterUrl); $supporterName = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $pcp->contact_id, 'display_name'); diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php index b09f917bbc..a0aeb3bc09 100644 --- a/civicrm/CRM/Price/BAO/PriceSet.php +++ b/civicrm/CRM/Price/BAO/PriceSet.php @@ -728,28 +728,23 @@ WHERE id = %1"; * @return string * Text for civicrm_contribution.amount_level field. */ - public static function getAmountLevelText($params) { + public static function getAmountLevelText($params): string { $priceSetID = $params['priceSetId']; $priceFieldSelection = self::filterPriceFieldsFromParams($priceSetID, $params); $priceFieldMetadata = self::getCachedPriceSetDetail($priceSetID); - $displayParticipantCount = NULL; $amount_level = []; foreach ($priceFieldMetadata['fields'] as $field) { if (!empty($priceFieldSelection[$field['id']])) { - $qtyString = ''; - if ($field['is_enter_qty']) { - $qtyString = ' - ' . (float) $params['price_' . $field['id']]; - } // We deliberately & specifically exclude contribution amount as it has a specific meaning. // ie. it represents the default price field for a contribution. Another approach would be not // to give it a label if we don't want it to show. if ($field['label'] !== ts('Contribution Amount')) { - $amount_level[] = $field['label'] . $qtyString; + $amount_level[] = $field['label'] . ($field['is_enter_qty'] ? ' - ' . (float) $params['price_' . $field['id']] : ''); } } } - return CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, $amount_level) . $displayParticipantCount . CRM_Core_DAO::VALUE_SEPARATOR; + return CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, $amount_level) . CRM_Core_DAO::VALUE_SEPARATOR; } /** diff --git a/civicrm/CRM/Price/Form/Field.php b/civicrm/CRM/Price/Form/Field.php index 7a1386af03..ed12cd3e77 100644 --- a/civicrm/CRM/Price/Form/Field.php +++ b/civicrm/CRM/Price/Form/Field.php @@ -435,6 +435,12 @@ class CRM_Price_Form_Field extends CRM_Core_Form { $errors['count'] = ts('Participant Count must be greater than zero.'); } + // Validate start/end date inputs + $validateDates = \CRM_Utils_Date::validateStartEndDatepickerInputs('active_on', $fields['active_on'], 'expire_on', $fields['expire_on']); + if ($validateDates !== TRUE) { + $errors[$validateDates['key']] = $validateDates['message']; + } + if ($form->_action & CRM_Core_Action::ADD) { if ($fields['html_type'] != 'Text') { $countemptyrows = 0; diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index 9793e13e9d..3ce289b632 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -2507,10 +2507,12 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND if (!empty($value['no_display'])) { unset($this->_columnHeaders[$key]); } - foreach (['colspan', 'type'] as $expectedKey) { - if (!isset($this->_columnHeaders[$key][$expectedKey])) { - // Ensure it is set to prevent smarty notices. - $this->_columnHeaders[$key][$expectedKey] = FALSE; + else { + foreach (['colspan', 'type'] as $expectedKey) { + if (!isset($this->_columnHeaders[$key][$expectedKey])) { + // Ensure it is set to prevent smarty notices. + $this->_columnHeaders[$key][$expectedKey] = FALSE; + } } } } @@ -3510,7 +3512,7 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND $value = CRM_Utils_Array::value($op, $pair) . " " . CRM_Utils_Array::value($val, $field['options'], $val); } - elseif ($val) { + elseif ($val || $val == '0') { $value = CRM_Utils_Array::value($op, $pair) . " " . $val; } } diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index 18acacd007..8a92589f6b 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -536,6 +536,15 @@ SET version = '$version' ); $queue->createItem($task, ['weight' => 0]); + if (empty(CRM_Upgrade_Snapshot::getActivationIssues())) { + $task = new CRM_Queue_Task( + ['CRM_Upgrade_Snapshot', 'cleanupTask'], + ['civicrm'], + "Cleanup old upgrade snapshots" + ); + $queue->createItem($task, ['weight' => 0]); + } + $task = new CRM_Queue_Task( ['CRM_Upgrade_Form', 'disableOldExtensions'], [$postUpgradeMessageFile], diff --git a/civicrm/CRM/Upgrade/Incremental/Base.php b/civicrm/CRM/Upgrade/Incremental/Base.php index 7e8cae3aed..b109b5772f 100644 --- a/civicrm/CRM/Upgrade/Incremental/Base.php +++ b/civicrm/CRM/Upgrade/Incremental/Base.php @@ -158,6 +158,36 @@ class CRM_Upgrade_Incremental_Base { $queue->createItem($task, ['weight' => -1]); } + /** + * Add a task to store a snapshot of some data (if upgrade-snapshots are supported). + * + * If there is a large amount of data, this may actually add multiple tasks. + * + * Ex :$this->addSnapshotTask('event_dates', CRM_Utils_SQL_Select::from('civicrm_event') + * ->select('id, start_date, end_date')); + * + * @param string $name + * Logical name for the snapshot. This will become part of the table. + * @param \CRM_Utils_SQL_Select $select + * @throws \CRM_Core_Exception + */ + protected function addSnapshotTask(string $name, CRM_Utils_SQL_Select $select): void { + CRM_Upgrade_Snapshot::createTableName('civicrm', $this->getMajorMinor(), $name); + // ^^ To simplify QA -- we should always throw an exception for bad snapshot names, even if the local policy doesn't use snapshots. + + if (!empty(CRM_Upgrade_Snapshot::getActivationIssues())) { + return; + } + + $queue = CRM_Queue_Service::singleton()->load([ + 'type' => 'Sql', + 'name' => CRM_Upgrade_Form::QUEUE_NAME, + ]); + foreach (CRM_Upgrade_Snapshot::createTasks('civicrm', $this->getMajorMinor(), $name, $select) as $task) { + $queue->createItem($task, ['weight' => -1]); + } + } + /** * Add a task to activate an extension. This task will run post-upgrade (after all * changes to core DB are settled). diff --git a/civicrm/CRM/Upgrade/Incremental/General.php b/civicrm/CRM/Upgrade/Incremental/General.php index 3b95537b40..0f54db34bc 100644 --- a/civicrm/CRM/Upgrade/Incremental/General.php +++ b/civicrm/CRM/Upgrade/Incremental/General.php @@ -129,6 +129,23 @@ class CRM_Upgrade_Incremental_General { 2 => 'https://github.com/JMAConsulting/biz.jmaconsulting.financialaclreport', ]); } + + $snapshotIssues = CRM_Upgrade_Snapshot::getActivationIssues(); + if ($snapshotIssues) { + $preUpgradeMessage .= '<details>'; + $preUpgradeMessage .= '<summary>' . ts('This upgrade will NOT use automatic snapshots.') . '</summary>'; + $preUpgradeMessage .= '<p>' . ts('If an upgrade problem is discovered in the future, automatic snapshots may help recover. However, they also require additional storage and may not be available or appropriate in all configurations.') . '</p>'; + $preUpgradeMessage .= ts('Here are the reasons why automatic snapshots are disabled:'); + $preUpgradeMessage .= '<ul>' . implode("", array_map( + function($issue) { + return sprintf('<li>%s</li>', $issue); + }, $snapshotIssues)) . '</ul>'; + $preUpgradeMessage .= '<p>' . ts('You may enable snapshots in "<code>%1</code>" by setting the experimental option "<code>%2</code>".', [ + 1 => 'civicrm.settings.php', + 2 => htmlentities('define(\'CIVICRM_UPGRADE_SNAPSHOT\', TRUE)'), + ]) . '</p>'; + $preUpgradeMessage .= '</details>'; + } } /** diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveFifty.php b/civicrm/CRM/Upgrade/Incremental/php/FiveFifty.php new file mode 100644 index 0000000000..7d600df0de --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveFifty.php @@ -0,0 +1,71 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Upgrade logic for the 5.50.x series. + * + * Each minor version in the series is handled by either a `5.50.x.mysql.tpl` file, + * or a function in this class named `upgrade_5_50_x`. + * If only a .tpl file exists for a version, it will be run automatically. + * If the function exists, it must explicitly add the 'runSql' task if there is a corresponding .mysql.tpl. + * + * This class may also implement `setPreUpgradeMessage()` and `setPostUpgradeMessage()` functions. + */ +class CRM_Upgrade_Incremental_php_FiveFifty extends CRM_Upgrade_Incremental_Base { + + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { + parent::setPreUpgradeMessage($preUpgradeMessage, $rev, $currentVer); + if ($rev === '5.50.alpha1') { + $preUpgradeMessage = '<p>' . ts('To improve data-protection, CiviCRM (5.50+) may create snapshots of upgraded data ("snap_*" tables). The upgrader will automatically prune old snapshots. The "snap_*" tables should generally follow the same backup/replication rules as other MySQL tables, but advanced administrators may fine-tune per preference.') . '</p>' + . $preUpgradeMessage; + // The issue here is that most backup/replication rules are per-database (eg `mysqldump DB_NAME`), but some + // systems have special filters in their backup configuration (eg `civicrm_*` vs `civicrm_tmp_*` vs `log_civicrm_*`). + // We want to let these users know there's a change -- without scaring the regular users who don't have that. + } + } + + /** + * Upgrade step; adds tasks including 'runSql'. + * + * @param string $rev + * The version number matching this function name + */ + public function upgrade_5_50_alpha1($rev): void { + $this->addSnapshotTask('mappings', CRM_Utils_SQL_Select::from('civicrm_mapping')); + $this->addSnapshotTask('fields', CRM_Utils_SQL_Select::from('civicrm_mapping_field')); + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + $this->addTask(ts('Convert import mappings to use names'), 'convertMappingFieldLabelsToNames', $rev); + + } + + /** + * Convert saved mapping fields for contact imports to use name rather than + * label. + * + * Currently the 'name' column in civicrm_mapping_field holds names like + * 'First Name' or, more tragically 'Contact ID (match to contact)'. + * + * This updates them to hold the name - eg. 'first_name' in conjunction with + * a + * change in the contact import. + * + * (Getting the other entities done is a stretch goal). + * + * @return bool + * @throws \API_Exception + * @throws \CiviCRM_API3_Exception + */ + public static function convertMappingFieldLabelsToNames(): bool { + CRM_Import_ImportProcessor::convertSavedFields(); + return TRUE; + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.50.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.50.alpha1.mysql.tpl new file mode 100644 index 0000000000..35543d3146 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.50.alpha1.mysql.tpl @@ -0,0 +1,55 @@ +{* file to handle db changes in 5.50.alpha1 during upgrade *} + +CREATE TABLE IF NOT EXISTS `civicrm_user_job` ( +`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Job ID', +`name` varchar(64) COMMENT 'Unique name for job.', +`created_id` int unsigned COMMENT 'FK to contact table.', +`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time this job was created.', +`start_date` timestamp NULL COMMENT 'Date and time this import job started.', +`end_date` timestamp NULL COMMENT 'Date and time this import job ended.', +`expires_date` timestamp NULL COMMENT 'Date and time to clean up after this import job (temp table deletion date).', +`status_id` int unsigned NOT NULL, +`type_id` int unsigned NOT NULL, +`queue_id` int unsigned COMMENT 'FK to Queue', +`metadata` text COMMENT 'Data pertaining to job configuration', +PRIMARY KEY (`id`), +UNIQUE INDEX `UI_name`(name), +CONSTRAINT FK_civicrm_user_job_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, +CONSTRAINT FK_civicrm_user_job_queue_id FOREIGN KEY (`queue_id`) REFERENCES `civicrm_queue`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; + +-- Add missing Parishes for Bermuda +SELECT @country_id := id from civicrm_country where name = 'Bermuda' AND iso_code = 'BM'; +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'DEV', 'Devonshire'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'HAM', 'Hamilton Parish'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'HA', 'City of Hamilton'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'PAG', 'Paget'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'PEM', 'Pembroke'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'SG', 'Town of St. George'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'SGE', 'Saint George\'s'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'SAN', 'Sandys'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'SMI', 'Smiths'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'SOU', 'Southampton'); +INSERT IGNORE INTO `civicrm_state_province` (`country_id`, `abbreviation`, `name`) VALUES (@country_id, 'WAR', 'Warwick'); + +SELECT @option_group_id_cgeo := max(id) FROM civicrm_option_group WHERE name = 'cg_extend_objects'; + +UPDATE civicrm_option_value + SET `grouping` = 'case_type_id', {localize field='description'}description = NULL{/localize} + WHERE option_group_id = @option_group_id_cgeo AND value = 'Case'; + +SELECT @option_group_id_cdt := max(id) FROM civicrm_option_group WHERE name = 'custom_data_type'; + +UPDATE civicrm_option_value + SET {localize field='label'}label = '{ts escape="sql"}Participants (Role){/ts}'{/localize}, `grouping` = 'role_id' + WHERE option_group_id = @option_group_id_cdt AND name = 'ParticipantRole'; + +UPDATE civicrm_option_value + SET {localize field='label'}label = '{ts escape="sql"}Participants (Event Name){/ts}'{/localize}, `grouping` = 'event_id' + WHERE option_group_id = @option_group_id_cdt AND name = 'ParticipantEventName'; + +UPDATE civicrm_option_value + SET {localize field='label'}label = '{ts escape="sql"}Participants (Event Type){/ts}'{/localize}, `grouping` = 'event_id.event_type_id' + WHERE option_group_id = @option_group_id_cdt AND name = 'ParticipantEventType'; + diff --git a/civicrm/CRM/Upgrade/Snapshot.php b/civicrm/CRM/Upgrade/Snapshot.php new file mode 100644 index 0000000000..9f5a493844 --- /dev/null +++ b/civicrm/CRM/Upgrade/Snapshot.php @@ -0,0 +1,220 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Provide helpers for recording data snapshots during an upgrade. + */ +class CRM_Upgrade_Snapshot { + + public static $pageSize = 50 * 1000; + + /** + * How long should we retain old snapshots? + * + * Time is measured in terms of MINOR versions - eg "4" means "retain for 4 MINOR versions". + * Thus, on v5.60, you could delete any snapshots predating 5.56. + * + * @var int + */ + public static $cleanupAfter = 4; + + /** + * List of reasons why the snapshots are not running. + * + * @var array|null + */ + private static $activationIssues; + + /** + * Get a list of reasons why the snapshots should not run. + * @return array + * List of printable messages. + */ + public static function getActivationIssues(): array { + if (static::$activationIssues === NULL) { + $policy = CRM_Utils_Constant::value('CIVICRM_UPGRADE_SNAPSHOT', 'auto'); + if ($policy === TRUE) { + return []; + } + + $limits = [ + 'civicrm_contact' => 200 * 1000, + 'civicrm_contribution' => 200 * 1000, + 'civicrm_activity' => 200 * 1000, + 'civicrm_case' => 200 * 1000, + 'civicrm_mailing' => 200 * 1000, + 'civicrm_event' => 200 * 1000, + ]; + + static::$activationIssues = []; + foreach ($limits as $table => $limit) { + try { + $count = CRM_Core_DAO::singleValueQuery("SELECT count(*) FROM `{$table}`"); + } + catch (\Exception $e) { + $count = 0; + } + if ($count > $limit) { + static::$activationIssues["count_{$table}"] = ts('Table "%1" has a large number of records (%2 > %3).', [ + 1 => $table, + 2 => $count, + 3 => $limit, + ]); + } + } + + if (CRM_Core_I18n::isMultilingual()) { + static::$activationIssues['multilingual'] = ts('Multilingual snapshots have not been implemented.'); + } + + if ($policy === FALSE) { + static::$activationIssues['override'] = ts('Snapshots disabled by override (CIVICRM_UPGRADE_SNAPSHOT).'); + } + } + + return static::$activationIssues; + } + + /** + * Create the name of a MySQL snapshot table. + * + * @param string $owner + * Name of the component/module/extension that owns the snapshot. + * Ex: 'civicrm', 'sequentialcreditnotes', 'oauth_client' + * @param string $version + * Ex: '5.50' + * @param string $name + * Ex: 'dates' + * @return string + * Ex: 'snap_civicrm_v5_50_dates' + * @throws \CRM_Core_Exception + * If the resulting table name would be invalid, then this throws an exception. + */ + public static function createTableName(string $owner, string $version, string $name): string { + $versionParts = explode('.', $version); + if (count($versionParts) !== 2) { + throw new \CRM_Core_Exception("Snapshot support is currently only defined for two-part version (MAJOR.MINOR). Found ($version)."); + // If you change this, be sure to consider `cleanupTask()` as well. + // One reason you might change it -- if you were going to track with the internal schema-numbers from an extension. + // Of course, you could get similar effect with "0.{$schemaNumber}" eg "5002" ==> "0.5002" + } + $versionExpr = ($versionParts[0] . '_' . $versionParts[1]); + + $table = sprintf('snap_%s_v%s_%s', $owner, $versionExpr, $name); + if (!preg_match(';^[a-z0-9_]+$;', $table)) { + throw new CRM_Core_Exception("Malformed snapshot name ($table)"); + } + if (strlen($table) > 64) { + throw new CRM_Core_Exception("Snapshot name is too long ($table)"); + } + + return $table; + } + + /** + * Build a set of queueable tasks which will store a snapshot. + * + * @param string $owner + * Name of the component/module/extension that owns the snapshot. + * Ex: 'civicrm', 'sequentialcreditnotes', 'oauth_client' + * @param string $version + * Ex: '5.50' + * @param string $name + * @param \CRM_Utils_SQL_Select $select + * @throws \CRM_Core_Exception + */ + public static function createTasks(string $owner, string $version, string $name, CRM_Utils_SQL_Select $select): iterable { + $destTable = static::createTableName($owner, $version, $name); + $srcTable = \Civi\Test\Invasive::get([$select, 'from']); + + // Sometimes, backups fail and people rollback and try again. Reset prior snapshots. + CRM_Core_DAO::executeQuery("DROP TABLE IF EXISTS `{$destTable}`"); + + $maxId = CRM_Core_DAO::singleValueQuery("SELECT MAX(id) FROM `{$srcTable}`"); + $pageSize = CRM_Upgrade_Snapshot::$pageSize; + for ($offset = 0; $offset <= $maxId; $offset += $pageSize) { + $title = ts('Create snapshot from "%1" (%2: %3 => %4)', [ + 1 => $srcTable, + 2 => $name, + 3 => $offset, + 4 => $offset + $pageSize, + ]); + $pageSelect = $select->copy()->where('id >= #MIN AND id < #MAX', [ + 'MIN' => $offset, + 'MAX' => $offset + $pageSize, + ]); + $sqlAction = ($offset === 0) ? "CREATE TABLE {$destTable} ROW_FORMAT=COMPRESSED AS " : "INSERT INTO {$destTable} "; + // Note: 'CREATE TABLE AS' implicitly preserves the character-set of the source-material, so we don't set that explicitly. + yield new CRM_Queue_Task( + [static::class, 'insertSnapshotTask'], + [$sqlAction . $pageSelect->toSQL()], + $title + ); + } + } + + /** + * @param \CRM_Queue_TaskContext $ctx + * @param string $sql + * @return bool + */ + public static function insertSnapshotTask(CRM_Queue_TaskContext $ctx, string $sql): bool { + CRM_Core_DAO::executeQuery($sql); + // If anyone works on multilingual support, you might need to set $i18nRewrite. But doesn't matter since skip ML completely. + return TRUE; + } + + /** + * Cleanup any old snapshot tables. + * + * @param CRM_Queue_TaskContext|null $ctx + * @param string $owner + * Ex: 'civicrm', 'sequentialcreditnotes', 'oauth_client' + * @param string|null $version + * The current version of CiviCRM. + * @param int|null $cleanupAfter + * How long should we retain old snapshots? + * Time is measured in terms of MINOR versions - eg "4" means "retain for 4 MINOR versions". + * Thus, on v5.60, you could delete any snapshots predating 5.56. + * @return bool + */ + public static function cleanupTask(?CRM_Queue_TaskContext $ctx = NULL, string $owner = 'civicrm', ?string $version = NULL, ?int $cleanupAfter = NULL): bool { + $version = $version ?: CRM_Core_BAO_Domain::version(); + $cleanupAfter = $cleanupAfter ?: static::$cleanupAfter; + + [$major, $minor] = explode('.', $version); + $cutoff = $major . '.' . max(0, $minor - $cleanupAfter); + + $dao = new CRM_Core_DAO(); + $query = " + SELECT TABLE_NAME as tableName + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = %1 + AND TABLE_NAME LIKE %2 + "; + $tables = CRM_Core_DAO::executeQuery($query, [ + 1 => [$dao->database(), 'String'], + 2 => ["snap_{$owner}_v%", 'String'], + ])->fetchMap('tableName', 'tableName'); + + $oldTables = array_filter($tables, function($table) use ($owner, $cutoff) { + if (preg_match(";^snap_{$owner}_v(\d+)_(\d+)_;", $table, $m)) { + $generatedVer = $m[1] . '.' . $m[2]; + return (bool) version_compare($generatedVer, $cutoff, '<'); + } + return FALSE; + }); + + array_map(['CRM_Core_BAO_SchemaHandler', 'dropTable'], $oldTables); + return TRUE; + } + +} diff --git a/civicrm/CRM/Utils/API/HTMLInputCoder.php b/civicrm/CRM/Utils/API/HTMLInputCoder.php index ef0feed724..928a4ec7d6 100644 --- a/civicrm/CRM/Utils/API/HTMLInputCoder.php +++ b/civicrm/CRM/Utils/API/HTMLInputCoder.php @@ -113,6 +113,8 @@ class CRM_Utils_API_HTMLInputCoder extends CRM_Utils_API_AbstractFieldCoder { 'api_params', // SearchDisplay entity 'settings', + // SearchSegment items + 'items', ]; $custom = CRM_Core_DAO::executeQuery('SELECT id FROM civicrm_custom_field WHERE html_type = "RichTextEditor"'); while ($custom->fetch()) { diff --git a/civicrm/CRM/Utils/Address/BatchUpdate.php b/civicrm/CRM/Utils/Address/BatchUpdate.php index 22177485f3..d26d35941b 100644 --- a/civicrm/CRM/Utils/Address/BatchUpdate.php +++ b/civicrm/CRM/Utils/Address/BatchUpdate.php @@ -116,7 +116,7 @@ class CRM_Utils_Address_BatchUpdate { */ public function processContacts($processGeocode, $parseStreetAddress) { // build where clause. - $clause = ['( c.id = a.contact_id )']; + $clause = []; $params = []; if ($this->start) { $clause[] = "( c.id >= %1 )"; @@ -137,19 +137,22 @@ class CRM_Utils_Address_BatchUpdate { $whereClause = implode(' AND ', $clause); $query = " - SELECT c.id, - a.id as address_id, - a.street_address, - a.city, - a.postal_code, - a.country_id, - s.name as state, - o.name as country - FROM civicrm_contact c - INNER JOIN civicrm_address a ON a.contact_id = c.id - LEFT JOIN civicrm_country o ON a.country_id = o.id - LEFT JOIN civicrm_state_province s ON a.state_province_id = s.id - WHERE {$whereClause} + SELECT c.id, + a.id as address_id, + a.street_address, + a.city, + a.postal_code, + a.country_id, + s.name as state, + o.name as country + FROM civicrm_address a + LEFT JOIN civicrm_contact c + ON a.contact_id = c.id + LEFT JOIN civicrm_country o + ON a.country_id = o.id + LEFT JOIN civicrm_state_province s + ON a.state_province_id = s.id + WHERE {$whereClause} ORDER BY a.id "; diff --git a/civicrm/CRM/Utils/Check/Component/Security.php b/civicrm/CRM/Utils/Check/Component/Security.php index da8735e78a..f449a09518 100644 --- a/civicrm/CRM/Utils/Check/Component/Security.php +++ b/civicrm/CRM/Utils/Check/Component/Security.php @@ -187,6 +187,41 @@ class CRM_Utils_Check_Component_Security extends CRM_Utils_Check_Component { return $messages; } + /** + * Check that the site is configured with a signing-key. + * + * The current infrastructure for signatures was introduced circa 5.36. Specifically, + * most sites should now define `CIVICRM_SIGN_KEYS`. However, this could be missing for + * sites which either (a) upgraded from an earlier release or (b) used an unpatched installer. + * + * @return CRM_Utils_Check_Message[] + */ + public function checkSigningKey(): array { + $messages = []; + + try { + $found = !empty(Civi::service('crypto.registry')->findKey('SIGN')); + // Subtle point: We really want to know if there are any `SIGN`ing keys. The most + // typical way to define `SIGN`ing keys is to configure `CIVICRM_SIGN_KEYS`. + } + catch (\Civi\Crypto\Exception\CryptoException $e) { + $found = FALSE; + } + if (!$found) { + $messages[] = new CRM_Utils_Check_Message( + __FUNCTION__, + ts('Some components and extensions may need to generate cryptographic signatures. Please configure <a %1>CIVICRM_SIGN_KEYS</a>. ', + [1 => 'href="https://docs.civicrm.org/sysadmin/en/latest/setup/secret-keys/" target="_blank"'] + ), + ts('Signing Key Recommended'), + \Psr\Log\LogLevel::NOTICE, + 'fa-lock' + ); + } + + return $messages; + } + /** * Check that some files are not present. * diff --git a/civicrm/CRM/Utils/Date.php b/civicrm/CRM/Utils/Date.php index 1802632da5..ddbc21e652 100644 --- a/civicrm/CRM/Utils/Date.php +++ b/civicrm/CRM/Utils/Date.php @@ -2215,4 +2215,57 @@ class CRM_Utils_Date { return $dateObject->format($format); } + /** + * Check if the value returned by a date picker has a date section (ie: includes + * a '-' character) if it includes a time section (ie: includes a ':'). + * + * @param string $value + * A date/time string input from a datepicker value. + * + * @return bool + * TRUE if valid, FALSE if there is a time without a date. + */ + public static function datePickerValueWithTimeHasDate($value) { + // If there's no : (time) or a : and a - (date) then return true + return ( + strpos($value, ':') === FALSE + || strpos($value, ':') !== FALSE && strpos($value, '-') !== FALSE + ); + } + + /** + * Validate start and end dates entered on a form to make sure they are + * logical. Expects the form keys to be start_date and end_date. + * + * @param string $startFormKey + * The form element key of the 'start date' + * @param string $startValue + * The value of the 'start date' + * @param string $endFormKey + * The form element key of the 'end date' + * @param string $endValue + * The value of the 'end date' + * + * @return array|bool + * TRUE if valid, an array of the erroneous form key, and error message to + * use otherwise. + */ + public static function validateStartEndDatepickerInputs($startFormKey, $startValue, $endFormKey, $endValue) { + + // Check date as well as time is set + if (!empty($startValue) && !self::datePickerValueWithTimeHasDate($startValue)) { + return ['key' => $startFormKey, 'message' => ts('Please enter a date as well as a time.')]; + } + if (!empty($endValue) && !self::datePickerValueWithTimeHasDate($endValue)) { + return ['key' => $endFormKey, 'message' => ts('Please enter a date as well as a time.')]; + } + + // Check end date is after start date + if (!empty($startValue) && !empty($endValue) && $endValue < $startValue) { + return ['key' => $endFormKey, 'message' => ts('The end date should be after the start date.')]; + } + + return TRUE; + } + } diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php index a9679480a0..9b43e025f2 100644 --- a/civicrm/CRM/Utils/Hook.php +++ b/civicrm/CRM/Utils/Hook.php @@ -702,6 +702,21 @@ abstract class CRM_Utils_Hook { /** * This hook is called for declaring managed entities via API. * + * @code + * // Example: Optimal skeleton for backward/forward compatibility + * function example_civicrm_managed(&$entities, ?array $modules = NULL) { + * if ($modules !== NULL && !in_array(E::LONG_NAME, $modules, TRUE)) { + * return; + * } + * $entities[] = [ + * 'module' => E::LONG_NAME, + * 'name' => 'my_option_value', + * 'entity' => 'OptionValue', + * 'params' => [...], + * ]; + * } + * @endCode + * * @param array $entities * List of pending entities. Each entity is an array with keys: * + 'module': string; for module-extensions, this is the fully-qualifed name (e.g. "com.example.mymodule"); for CMS modules, the name is prefixed by the CMS (e.g. "drupal.mymodule") @@ -715,15 +730,26 @@ abstract class CRM_Utils_Hook { * - 'always' (default): always delete orphaned records * - 'never': never delete orphaned records * - 'unused': only delete orphaned records if there are no other references to it in the DB. (This is determined by calling the API's "getrefcount" action.) + * @param array|NULL $modules + * (Added circa v5.50) If given, only report entities related to $modules. NULL is a wildcard ("all modules"). * + * This parameter is _advisory_ and is not supplied on older versions. + * Listeners SHOULD self-censor (only report entities which match the filter). + * However, all pre-existing listeners were unaware of this option, and they WILL over-report. + * Over-reported data will be discarded. * @return null * the return value is ignored */ - public static function managed(&$entities) { - return self::singleton()->invoke(['entities'], $entities, - self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, + public static function managed(&$entities, ?array $modules = NULL) { + self::singleton()->invoke(['entities', 'modules'], $entities, $modules, + self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, 'civicrm_managed' ); + if ($modules) { + $entities = array_filter($entities, function($entity) use ($modules) { + return in_array($entity['module'], $modules, TRUE); + }); + } } /** diff --git a/civicrm/CRM/Utils/Hook/WordPress.php b/civicrm/CRM/Utils/Hook/WordPress.php index 4a2c63f377..6d9a7e9224 100644 --- a/civicrm/CRM/Utils/Hook/WordPress.php +++ b/civicrm/CRM/Utils/Hook/WordPress.php @@ -149,8 +149,6 @@ class CRM_Utils_Hook_WordPress extends CRM_Utils_Hook { * * We need to do this to preserve the CiviCRM hook signatures for hooks that require * a return value, since the WordPress Plugin API seems to be incompatible with them. - * - * Copied and adapted from: CRM/Utils/Hook/Drupal6.php */ public function buildModuleList() { if ($this->isBuilt === FALSE) { diff --git a/civicrm/CRM/Utils/System.php b/civicrm/CRM/Utils/System.php index addc25b46b..4514547628 100644 --- a/civicrm/CRM/Utils/System.php +++ b/civicrm/CRM/Utils/System.php @@ -38,6 +38,7 @@ * @method static array synchronizeUsers() Create CRM contacts for all existing CMS users. * @method static void appendCoreResources(\Civi\Core\Event\GenericHookEvent $e) Callback for hook_civicrm_coreResourceList. * @method static void alterAssetUrl(\Civi\Core\Event\GenericHookEvent $e) Callback for hook_civicrm_getAssetUrl. + * @method static exitAfterFatal() Should the current execution exit after a fatal error? */ class CRM_Utils_System { diff --git a/civicrm/CRM/Utils/System/Base.php b/civicrm/CRM/Utils/System/Base.php index a4660834c5..336d07568a 100644 --- a/civicrm/CRM/Utils/System/Base.php +++ b/civicrm/CRM/Utils/System/Base.php @@ -1099,4 +1099,15 @@ abstract class CRM_Utils_System_Base { return []; } + /** + * Should the current execution exit after a fatal error? + * This is the appropriate functionality in most cases. + * + * @internal + * @return bool + */ + public function shouldExitAfterFatal() { + return TRUE; + } + } diff --git a/civicrm/CRM/Utils/System/Drupal6.php b/civicrm/CRM/Utils/System/Drupal6.php deleted file mode 100644 index 18f737761d..0000000000 --- a/civicrm/CRM/Utils/System/Drupal6.php +++ /dev/null @@ -1,823 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -/** - * - * @package CRM - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ - -/** - * Drupal specific stuff goes here. - */ -class CRM_Utils_System_Drupal6 extends CRM_Utils_System_DrupalBase { - - /** - * Theme output. - * - * If we are using a theming system, invoke theme, else just print the content. - * - * @param string $content - * The content that will be themed. - * @param bool $print - * Are we displaying to the screen or bypassing theming?. - * @param bool $maintenance - * For maintenance mode. - * - * @return null|string - * prints content on stdout - */ - public function theme(&$content, $print = FALSE, $maintenance = FALSE) { - // TODO: Simplify; this was copied verbatim from CiviCRM 3.4's multi-UF theming function, but that's more complex than necessary - if (function_exists('theme') && !$print) { - if ($maintenance) { - drupal_set_breadcrumb(''); - drupal_maintenance_theme(); - } - - // Arg 3 for D6 theme() is "show_blocks". Previously, we passed - // through a badly named variable ("$args") which was almost always - // TRUE (except on fatal error screen). However, this feature is - // non-functional on D6 default themes, was purposefully removed from - // D7, has no analog in other our other CMS's, and clutters the code. - // Hard-wiring to TRUE should be OK. - $out = theme('page', $content, TRUE); - } - else { - $out = $content; - } - - print $out; - return NULL; - } - - /** - * Create user. - * - * @inheritDoc - */ - public function createUser(&$params, $mail) { - $form_state = []; - $form_state['values'] = [ - 'name' => $params['cms_name'], - 'mail' => $params[$mail], - 'op' => 'Create new account', - ]; - - $admin = user_access('administer users'); - if (!variable_get('user_email_verification', TRUE) || $admin) { - $form_state['values']['pass']['pass1'] = $params['cms_pass']; - $form_state['values']['pass']['pass2'] = $params['cms_pass']; - } - - $config = CRM_Core_Config::singleton(); - - // we also need to redirect b - $config->inCiviCRM = TRUE; - - $form = drupal_retrieve_form('user_register', $form_state); - $form['#post'] = $form_state['values']; - drupal_prepare_form('user_register', $form, $form_state); - - // remove the captcha element from the form prior to processing - unset($form['captcha']); - - drupal_process_form('user_register', $form, $form_state); - - $config->inCiviCRM = FALSE; - - if (form_get_errors() || !isset($form_state['user'])) { - return FALSE; - } - return $form_state['user']->uid; - } - - /** - * @inheritDoc - */ - public function updateCMSName($ufID, $ufName) { - // CRM-5555 - if (function_exists('user_load')) { - $user = user_load(['uid' => $ufID]); - if ($user->mail != $ufName) { - user_save($user, ['mail' => $ufName]); - $user = user_load(['uid' => $ufID]); - } - } - } - - /** - * Check if username and email exists in the drupal db. - * - * @param array $params - * Array of name and mail values. - * @param array $errors - * Array of errors. - * @param string $emailName - * Field label for the 'email'. - */ - public function checkUserNameEmailExists(&$params, &$errors, $emailName = 'email') { - $config = CRM_Core_Config::singleton(); - - $dao = new CRM_Core_DAO(); - $name = $dao->escape(CRM_Utils_Array::value('name', $params)); - $email = $dao->escape(CRM_Utils_Array::value('mail', $params)); - _user_edit_validate(NULL, $params); - $errors = form_get_errors(); - if ($errors) { - if (!empty($errors['name'])) { - $errors['cms_name'] = $errors['name']; - } - if (!empty($errors['mail'])) { - $errors[$emailName] = $errors['mail']; - } - // also unset drupal messages to avoid twice display of errors - unset($_SESSION['messages']); - } - - // Do the name check manually. - $nameError = user_validate_name($params['name']); - if ($nameError) { - $errors['cms_name'] = $nameError; - } - - // LOWER in query below roughly translates to 'hurt my database without deriving any benefit' See CRM-19811. - $sql = " - SELECT name, mail - FROM {users} - WHERE (LOWER(name) = LOWER('$name')) OR (LOWER(mail) = LOWER('$email')) - "; - - $result = db_query($sql); - $row = db_fetch_array($result); - if (!$row) { - return; - } - - $user = NULL; - - if (!empty($row)) { - $dbName = $row['name'] ?? NULL; - $dbEmail = $row['mail'] ?? NULL; - if (strtolower($dbName) == strtolower($name)) { - $errors['cms_name'] = ts('The username %1 is already taken. Please select another username.', - [1 => $name] - ); - } - if (strtolower($dbEmail) == strtolower($email)) { - if (empty($email)) { - $errors[$emailName] = ts('You cannot create an email account for a contact with no email', - [1 => $email] - ); - } - else { - $errors[$emailName] = ts('This email %1 already has an account associated with it. Please select another email.', - [1 => $email] - ); - } - } - } - } - - /** - * @inheritDoc - */ - public function setTitle($title, $pageTitle = NULL) { - if (!$pageTitle) { - $pageTitle = $title; - } - if (arg(0) == 'civicrm') { - //set drupal title - drupal_set_title($pageTitle); - } - } - - /** - * @inheritDoc - */ - public function appendBreadCrumb($breadCrumbs) { - $breadCrumb = drupal_get_breadcrumb(); - - if (is_array($breadCrumbs)) { - foreach ($breadCrumbs as $crumbs) { - if (stripos($crumbs['url'], 'id%%')) { - $args = ['cid', 'mid']; - foreach ($args as $a) { - $val = CRM_Utils_Request::retrieve($a, 'Positive', CRM_Core_DAO::$_nullObject, - FALSE, NULL, $_GET - ); - if ($val) { - $crumbs['url'] = str_ireplace("%%{$a}%%", $val, $crumbs['url']); - } - } - } - $breadCrumb[] = "<a href=\"{$crumbs['url']}\">{$crumbs['title']}</a>"; - } - } - drupal_set_breadcrumb($breadCrumb); - } - - /** - * @inheritDoc - */ - public function resetBreadCrumb() { - $bc = []; - drupal_set_breadcrumb($bc); - } - - /** - * Append a string to the head of the html file. - * - * @param string $head - * The new string to be appended. - */ - public function addHTMLHead($head) { - drupal_set_html_head($head); - } - - /** - * Add a css file. - * - * @param string $url - * absolute path to file - * @param string $region - * location within the document: 'html-header', 'page-header', 'page-footer'. - * - * Note: This function is not to be called directly - * @see CRM_Core_Region::render() - * - * @return bool - * TRUE if we support this operation in this CMS, FALSE otherwise - */ - public function addStyleUrl($url, $region) { - if ($region != 'html-header' || !$this->formatResourceUrl($url)) { - return FALSE; - } - drupal_add_css($url); - return TRUE; - } - - /** - * @inheritDoc - */ - public function mapConfigToSSL() { - global $base_url; - $base_url = str_replace('http://', 'https://', $base_url); - } - - /** - * Get the name of the table that stores the user details. - * - * @return string - */ - protected function getUsersTableName() { - $userFrameworkUsersTableName = Civi::settings()->get('userFrameworkUsersTableName'); - if (empty($userFrameworkUsersTableName)) { - $userFrameworkUsersTableName = 'users'; - } - return $userFrameworkUsersTableName; - } - - /** - * @inheritDoc - */ - public function authenticate($name, $password, $loadCMSBootstrap = FALSE, $realPath = NULL) { - //@todo this 'PEAR-y' stuff is only required when bookstrap is not being loaded which is rare - // if ever now. - // probably if bootstrap is loaded this call - // CRM_Utils_System::loadBootStrap($bootStrapParams, TRUE, TRUE, $realPath); would be - // sufficient to do what this fn does. It does exist as opposed to return which might need some hanky-panky to make - // safe in the unknown situation where authenticate might be called & it is important that - // false is returned - require_once 'DB.php'; - - $config = CRM_Core_Config::singleton(); - - $ufDSN = CRM_Utils_SQL::autoSwitchDSN($config->userFrameworkDSN); - try { - $dbDrupal = DB::connect($ufDSN); - } - catch (Exception $e) { - throw new CRM_Core_Exception("Cannot connect to drupal db via $ufDSN, " . $e->getMessage()); - } - - $strtolower = function_exists('mb_strtolower') ? 'mb_strtolower' : 'strtolower'; - $dbpassword = md5($password); - $name = $dbDrupal->escapeSimple($strtolower($name)); - $userFrameworkUsersTableName = $this->getUsersTableName(); - $sql = 'SELECT u.* FROM ' . $userFrameworkUsersTableName . " u WHERE LOWER(u.name) = '$name' AND u.pass = '$dbpassword' AND u.status = 1"; - $query = $dbDrupal->query($sql); - - $user = NULL; - // need to change this to make sure we matched only one row - while ($row = $query->fetchRow(DB_FETCHMODE_ASSOC)) { - CRM_Core_BAO_UFMatch::synchronizeUFMatch($user, $row['uid'], $row['mail'], 'Drupal'); - $contactID = CRM_Core_BAO_UFMatch::getContactId($row['uid']); - if (!$contactID) { - return FALSE; - } - else { - //success - if ($loadCMSBootstrap) { - $bootStrapParams = []; - if ($name && $password) { - $bootStrapParams = [ - 'name' => $name, - 'pass' => $password, - ]; - } - CRM_Utils_System::loadBootStrap($bootStrapParams, TRUE, TRUE, $realPath); - } - return [$contactID, $row['uid'], mt_rand()]; - } - } - return FALSE; - } - - /** - * @inheritDoc - */ - public function loadUser($username) { - global $user; - $user = user_load(['name' => $username]); - if (empty($user->uid)) { - return FALSE; - } - - $uid = $user->uid; - $contact_id = CRM_Core_BAO_UFMatch::getContactId($uid); - - // lets store contact id and user id in session - $session = CRM_Core_Session::singleton(); - $session->set('ufID', $uid); - $session->set('userID', $contact_id); - return TRUE; - } - - /** - * Perform any post login activities required by the UF - - * e.g. for drupal : records a watchdog message about the new session, - * saves the login timestamp, calls hook_user op 'login' and generates a new session. - * - * @param array $params - * - * FIXME: Document values accepted/required by $params - */ - public function userLoginFinalize($params = []) { - user_authenticate_finalize($params); - } - - /** - * Determine the native ID of the CMS user. - * - * @param string $username - * @return int|null - */ - public function getUfId($username) { - $user = user_load(['name' => $username]); - if (empty($user->uid)) { - return NULL; - } - return $user->uid; - } - - /** - * @inheritDoc - */ - public function logout() { - module_load_include('inc', 'user', 'user.pages'); - return user_logout(); - } - - /** - * Load drupal bootstrap. - * - * @param array $params - * Either uid, or name & pass. - * @param bool $loadUser - * Boolean Require CMS user load. - * @param bool $throwError - * If true, print error on failure and exit. - * @param bool|string $realPath path to script - * - * @return bool - */ - public function loadBootStrap($params = [], $loadUser = TRUE, $throwError = TRUE, $realPath = NULL) { - //take the cms root path. - $cmsPath = $this->cmsRootPath($realPath); - - if (!file_exists("$cmsPath/includes/bootstrap.inc")) { - if ($throwError) { - echo '<br />Sorry, could not locate bootstrap.inc\n'; - exit(); - } - return FALSE; - } - // load drupal bootstrap - chdir($cmsPath); - define('DRUPAL_ROOT', $cmsPath); - - // For drupal multi-site CRM-11313 - if ($realPath && strpos($realPath, 'sites/all/modules/') === FALSE) { - preg_match('@sites/([^/]*)/modules@s', $realPath, $matches); - if (!empty($matches[1])) { - $_SERVER['HTTP_HOST'] = $matches[1]; - } - } - require_once 'includes/bootstrap.inc'; - // @ to suppress notices eg 'DRUPALFOO already defined'. - @drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); - - // explicitly setting error reporting, since we cannot handle drupal related notices - error_reporting(1); - if (!function_exists('module_exists') || !module_exists('civicrm')) { - if ($throwError) { - echo '<br />Sorry, could not load drupal bootstrap.'; - exit(); - } - return FALSE; - } - - // seems like we've bootstrapped drupal - $config = CRM_Core_Config::singleton(); - - // lets also fix the clean url setting - // CRM-6948 - $config->cleanURL = (int) variable_get('clean_url', '0'); - - // we need to call the config hook again, since we now know - // all the modules that are listening on it, does not apply - // to J! and WP as yet - // CRM-8655 - CRM_Utils_Hook::config($config); - - if (!$loadUser) { - return TRUE; - } - global $user; - // If $uid is passed in, authentication has been done already. - $uid = $params['uid'] ?? NULL; - if (!$uid) { - //load user, we need to check drupal permissions. - $name = CRM_Utils_Array::value('name', $params, FALSE) ? $params['name'] : trim(CRM_Utils_Array::value('name', $_REQUEST)); - $pass = CRM_Utils_Array::value('pass', $params, FALSE) ? $params['pass'] : trim(CRM_Utils_Array::value('pass', $_REQUEST)); - - if ($name) { - $user = user_authenticate(['name' => $name, 'pass' => $pass]); - if (!$user->uid) { - if ($throwError) { - echo '<br />Sorry, unrecognized username or password.'; - exit(); - } - return FALSE; - } - else { - return TRUE; - } - } - } - - if ($uid) { - $account = user_load($uid); - if ($account && $account->uid) { - $user = $account; - return TRUE; - } - } - - if ($throwError) { - echo '<br />Sorry, can not load CMS user account.'; - exit(); - } - - // CRM-6948: When using loadBootStrap, it's implicit that CiviCRM has already loaded its settings - // which means that define(CIVICRM_CLEANURL) was correctly set. - // So we correct it - $config = CRM_Core_Config::singleton(); - $config->cleanURL = (int) variable_get('clean_url', '0'); - - // CRM-8655: Drupal wasn't available during bootstrap, so hook_civicrm_config never executes - CRM_Utils_Hook::config($config); - - return FALSE; - } - - /** - * Get CMS root path. - * - * @param string $scriptFilename - * - * @return null|string - */ - public function cmsRootPath($scriptFilename = NULL) { - $cmsRoot = $valid = NULL; - - if (!is_null($scriptFilename)) { - $path = $scriptFilename; - } - else { - $path = $_SERVER['SCRIPT_FILENAME']; - } - - if (function_exists('drush_get_context')) { - // drush anyway takes care of multisite install etc - return drush_get_context('DRUSH_DRUPAL_ROOT'); - } - - global $civicrm_paths; - if (!empty($civicrm_paths['cms.root']['path'])) { - return $civicrm_paths['cms.root']['path']; - } - - // CRM-7582 - $pathVars = explode('/', - str_replace('//', '/', - str_replace('\\', '/', $path) - ) - ); - - //lets store first var, - //need to get back for windows. - $firstVar = array_shift($pathVars); - - //lets remove sript name to reduce one iteration. - array_pop($pathVars); - - //CRM-7429 --do check for upper most 'includes' dir, - //which would effectually work for multisite installation. - do { - $cmsRoot = $firstVar . '/' . implode('/', $pathVars); - $cmsIncludePath = "$cmsRoot/includes"; - // Stop if we found bootstrap. - if (file_exists("$cmsIncludePath/bootstrap.inc")) { - $valid = TRUE; - break; - } - //remove one directory level. - array_pop($pathVars); - } while (count($pathVars)); - - return ($valid) ? $cmsRoot : NULL; - } - - /** - * @inheritDoc - */ - public function isUserLoggedIn() { - $isloggedIn = FALSE; - if (function_exists('user_is_logged_in')) { - $isloggedIn = user_is_logged_in(); - } - - return $isloggedIn; - } - - /** - * @inheritDoc - */ - public function getLoggedInUfID() { - $ufID = NULL; - if (function_exists('user_is_logged_in') && - user_is_logged_in() && - function_exists('user_uid_optional_to_arg') - ) { - $ufID = user_uid_optional_to_arg([]); - } - - return $ufID; - } - - /** - * @inheritDoc - */ - public function languageNegotiationURL($url, $addLanguagePart = TRUE, $removeLanguagePart = FALSE) { - if (empty($url)) { - return $url; - } - - //up to d6 only, already we have code in place for d7 - $config = CRM_Core_Config::singleton(); - if (function_exists('variable_get') && - module_exists('locale') - ) { - global $language; - - //get the mode. - $mode = variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE); - - //url prefix / path. - if (isset($language->prefix) && - $language->prefix && - in_array($mode, [ - LANGUAGE_NEGOTIATION_PATH, - LANGUAGE_NEGOTIATION_PATH_DEFAULT, - ]) - ) { - - if ($addLanguagePart) { - $url .= $language->prefix . '/'; - } - if ($removeLanguagePart) { - $url = str_replace("/{$language->prefix}/", '/', $url); - } - } - if (isset($language->domain) && - $language->domain && - $mode == LANGUAGE_NEGOTIATION_DOMAIN - ) { - - if ($addLanguagePart) { - $url = CRM_Utils_File::addTrailingSlash($language->domain, '/'); - } - if ($removeLanguagePart && defined('CIVICRM_UF_BASEURL')) { - $url = str_replace('\\', '/', $url); - $parseUrl = parse_url($url); - - //kinda hackish but not sure how to do it right - //hope http_build_url() will help at some point. - if (is_array($parseUrl) && !empty($parseUrl)) { - $urlParts = explode('/', $url); - $hostKey = array_search($parseUrl['host'], $urlParts); - $ufUrlParts = parse_url(CIVICRM_UF_BASEURL); - $urlParts[$hostKey] = $ufUrlParts['host']; - $url = implode('/', $urlParts); - } - } - } - } - - return $url; - } - - /** - * Find any users/roles/security-principals with the given permission - * and replace it with one or more permissions. - * - * @param string $oldPerm - * @param array $newPerms - * Array, strings. - */ - public function replacePermission($oldPerm, $newPerms) { - $roles = user_roles(FALSE, $oldPerm); - foreach ($roles as $rid => $roleName) { - $permList = db_result(db_query('SELECT perm FROM {permission} WHERE rid = %d', $rid)); - $perms = drupal_map_assoc(explode(', ', $permList)); - unset($perms[$oldPerm]); - $perms = $perms + drupal_map_assoc($newPerms); - $permList = implode(', ', $perms); - db_query('UPDATE {permission} SET perm = "%s" WHERE rid = %d', $permList, $rid); - /* @codingStandardsIgnoreStart - if ( ! empty( $roles ) ) { - $rids = implode(',', array_keys($roles)); - db_query( 'UPDATE {permission} SET perm = CONCAT( perm, \', edit all events\') WHERE rid IN (' . implode(',', array_keys($roles)) . ')' ); - db_query( "UPDATE {permission} SET perm = REPLACE( perm, '%s', '%s' ) WHERE rid IN ($rids)", - $oldPerm, implode(', ', $newPerms) ); - @codingStandardsIgnoreEnd */ - } - } - - /** - * @inheritDoc - */ - public function getModules() { - $result = []; - $q = db_query('SELECT name, status FROM {system} WHERE type = \'module\' AND schema_version <> -1'); - while ($row = db_fetch_object($q)) { - $result[] = new CRM_Core_Module('drupal.' . $row->name, $row->status == 1); - } - return $result; - } - - /** - * @inheritDoc - */ - public function getLoginURL($destination = '') { - $config = CRM_Core_Config::singleton(); - $loginURL = $config->userFrameworkBaseURL; - $loginURL .= 'user'; - if (!empty($destination)) { - // append destination so user is returned to form they came from after login - $loginURL .= '?destination=' . urlencode($destination); - } - return $loginURL; - } - - /** - * Wrapper for og_membership creation. - * - * @param int $ogID - * Organic Group ID. - * @param int $drupalID - * Drupal User ID. - */ - public function og_membership_create($ogID, $drupalID) { - og_save_subscription($ogID, $drupalID, ['is_active' => 1]); - } - - /** - * Wrapper for og_membership deletion. - * - * @param int $ogID - * Organic Group ID. - * @param int $drupalID - * Drupal User ID. - */ - public function og_membership_delete($ogID, $drupalID) { - og_delete_subscription($ogID, $drupalID); - } - - /** - * @inheritDoc - */ - public function getTimeZoneString() { - global $user; - // Note that 0 is a valid timezone (GMT) so we use strlen not empty to check. - if (variable_get('configurable_timezones', 1) && $user->uid && isset($user->timezone) && strlen($user->timezone)) { - $timezone = $user->timezone; - } - else { - $timezone = variable_get('date_default_timezone', NULL); - } - - // Retrieved timezone will be represented as GMT offset in seconds but, according - // to the doc for the overridden method, ought to be returned as a region string - // (e.g., America/Havana). - if (strlen($timezone)) { - $timezone = timezone_name_from_abbr("", (int) $timezone); - } - - if (!$timezone) { - $timezone = parent::getTimeZoneString(); - } - - return $timezone; - } - - /** - * @inheritDoc - */ - public function setHttpHeader($name, $value) { - drupal_set_header("$name: $value"); - } - - /** - * @inheritDoc - */ - public function synchronizeUsers() { - $config = CRM_Core_Config::singleton(); - if (PHP_SAPI != 'cli') { - set_time_limit(300); - } - $rows = []; - $id = 'uid'; - $mail = 'mail'; - $name = 'name'; - - $result = db_query("SELECT uid, mail, name FROM {users} where mail != ''"); - - while ($row = db_fetch_array($result)) { - $rows[] = $row; - } - - $user = new StdClass(); - $uf = $config->userFramework; - $contactCount = 0; - $contactCreated = 0; - $contactMatching = 0; - foreach ($rows as $row) { - $user->$id = $row[$id]; - $user->$mail = $row[$mail]; - $user->$name = $row[$name]; - $contactCount++; - if ($match = CRM_Core_BAO_UFMatch::synchronizeUFMatch($user, $row[$id], $row[$mail], $uf, 1, 'Individual', TRUE)) { - $contactCreated++; - } - else { - $contactMatching++; - } - } - - return [ - 'contactCount' => $contactCount, - 'contactMatching' => $contactMatching, - 'contactCreated' => $contactCreated, - ]; - } - - /** - * Return the CMS-specific url for its permissions page - * @return array - */ - public function getCMSPermissionsUrlParams() { - return ['ufAccessURL' => url('admin/user/permissions')]; - } - -} diff --git a/civicrm/CRM/Utils/System/Drupal8.php b/civicrm/CRM/Utils/System/Drupal8.php index d52e4c457b..61ded60865 100644 --- a/civicrm/CRM/Utils/System/Drupal8.php +++ b/civicrm/CRM/Utils/System/Drupal8.php @@ -419,8 +419,11 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { $kernel->preHandle($request); $container = $kernel->rebuildContainer(); // Add our request to the stack and route context. - $request->attributes->set(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT, new \Symfony\Component\Routing\Route('<none>')); - $request->attributes->set(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_NAME, '<none>'); + $routeInterface = class_exists('\Drupal\Core\Routing\RouteObjectInterface') + ? '\Drupal\Core\Routing\RouteObjectInterface' + : '\Symfony\Cmf\Component\Routing\RouteObjectInterface'; + $request->attributes->set($routeInterface::ROUTE_OBJECT, new \Symfony\Component\Routing\Route('<none>')); + $request->attributes->set($routeInterface::ROUTE_NAME, '<none>'); $container->get('request_stack')->push($request); $container->get('router.request_context')->fromRequest($request); diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index 241eeaca6c..66942c8ced 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -602,6 +602,8 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { */ public function permissionDenied() { status_header(403); + global $civicrm_wp_title; + $civicrm_wp_title = ts('You do not have permission to access this page.'); throw new CRM_Core_Exception(ts('You do not have permission to access this page.')); } @@ -1473,4 +1475,22 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { return !$this->isUserRegistrationPermitted(); } + /** + * Should the current execution exit after a fatal error? + * + * In WordPress, it is not usually possible to trigger theming outside of the WordPress theme process, + * meaning that in order to render an error inside the theme we cannot exit on error. + * + * @internal + * @return bool + */ + public function shouldExitAfterFatal() { + $ret = TRUE; + if (!is_admin() && !wp_doing_ajax()) { + $ret = FALSE; + } + + return apply_filters('civicrm_exit_after_fatal', $ret); + } + } diff --git a/civicrm/Civi/API/Request.php b/civicrm/Civi/API/Request.php index 3a8d2da50b..55765a9bcb 100644 --- a/civicrm/Civi/API/Request.php +++ b/civicrm/Civi/API/Request.php @@ -10,7 +10,7 @@ */ namespace Civi\API; -use Civi\Api4\Event\CreateApi4RequestEvent; +use Civi\Api4\Utils\CoreUtil; /** * Class Request @@ -45,14 +45,9 @@ class Request { ]; case 4: - // Load the API kernel service for registering API providers, as - // otherwise subscribers to the civi.api4.createRequest event registered - // through the EventSubscriberInterface will not be registered. - \Civi::service('civi_api_kernel'); - $e = new CreateApi4RequestEvent($entity); - \Civi::dispatcher()->dispatch('civi.api4.createRequest', $e); - $callable = [$e->className, $action]; - if (!$e->className || !is_callable($callable)) { + $className = CoreUtil::getApiClass($entity); + $callable = [$className, $action]; + if (!$className || !is_callable($callable)) { throw new \Civi\API\Exception\NotImplementedException("API ($entity, $action) does not exist (join the API team and implement it!)"); } // Check enabled components @@ -60,7 +55,8 @@ class Request { if ($daoName && defined("{$daoName}::COMPONENT") && !\CRM_Core_Component::isEnabled($daoName::COMPONENT)) { throw new \Civi\API\Exception\NotImplementedException("$entity API is not available because " . $daoName::COMPONENT . " component is disabled"); } - $apiRequest = call_user_func_array($callable, $e->args); + $args = (array) CoreUtil::getInfoItem($entity, 'class_args'); + $apiRequest = call_user_func_array($callable, $args); foreach ($params as $name => $param) { $setter = 'set' . ucfirst($name); $apiRequest->$setter($param); diff --git a/civicrm/Civi/Api4/Action/Entity/Get.php b/civicrm/Civi/Api4/Action/Entity/Get.php index 9a8ccbb5f9..13b96573fe 100644 --- a/civicrm/Civi/Api4/Action/Entity/Get.php +++ b/civicrm/Civi/Api4/Action/Entity/Get.php @@ -28,11 +28,15 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { protected $includeCustom; /** - * Returns all APIv4 entities + * Returns all APIv4 entities from core, enabled components and enabled extensions. */ protected function getRecords() { $provider = \Civi::service('action_object_provider'); - return $provider->getEntities(); + return array_filter($provider->getEntities(), function($entity) { + // Only include DAO entities from enabled components + $daoName = $entity['dao'] ?? NULL; + return (!$daoName || !defined("{$daoName}::COMPONENT") || \CRM_Core_Component::isEnabled($daoName::COMPONENT)); + }); } } diff --git a/civicrm/Civi/Api4/Action/Managed/Reconcile.php b/civicrm/Civi/Api4/Action/Managed/Reconcile.php new file mode 100644 index 0000000000..e0be357877 --- /dev/null +++ b/civicrm/Civi/Api4/Action/Managed/Reconcile.php @@ -0,0 +1,49 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Action\Managed; + +use Civi\Api4\Generic\Result; + +/** + * Refresh managed entities. + * + * @since 5.50 + * @method $this setModules(array $modules) Set modules + * @method array getModules() Get modules param + */ +class Reconcile extends \Civi\Api4\Generic\AbstractAction { + + /** + * Limit scope of reconcile to specific module(s). + * + * @var array + */ + protected $modules = NULL; + + /** + * @param string $moduleName + * @return $this + */ + public function addModule(string $moduleName) { + $this->modules[] = $moduleName; + return $this; + } + + /** + * @param \Civi\Api4\Generic\Result $result + */ + public function _run(Result $result) { + \CRM_Core_ManagedEntities::singleton()->reconcile($this->modules); + } + +} diff --git a/civicrm/Civi/Api4/CaseType.php b/civicrm/Civi/Api4/CaseType.php index 3de80b7965..618454281c 100644 --- a/civicrm/Civi/Api4/CaseType.php +++ b/civicrm/Civi/Api4/CaseType.php @@ -21,5 +21,6 @@ namespace Civi\Api4; * @package Civi\Api4 */ class CaseType extends Generic\DAOEntity { + use Generic\Traits\ManagedEntity; } diff --git a/civicrm/Civi/Api4/Event/CreateApi4RequestEvent.php b/civicrm/Civi/Api4/Event/CreateApi4RequestEvent.php index 7a77989609..499559b185 100644 --- a/civicrm/Civi/Api4/Event/CreateApi4RequestEvent.php +++ b/civicrm/Civi/Api4/Event/CreateApi4RequestEvent.php @@ -1,5 +1,4 @@ <?php - /* +--------------------------------------------------------------------+ | Copyright CiviCRM LLC. All rights reserved. | @@ -14,43 +13,9 @@ namespace Civi\Api4\Event; use Civi\Core\Event\GenericHookEvent; /** - * civi.api4.createRequest event. - * - * This event fires whenever resolving the name of an api entity to an api class. - * - * e.g. the entity name "Contact" resolves to the class `Civi\Api4\Contact` - * and the entity "Case" resolves to `Civi\Api4\CiviCase` + * Unused event, kept around to prevent undefined class errors in extensions that listen for it. + * @deprecated */ class CreateApi4RequestEvent extends GenericHookEvent { - /** - * Name of the entity to matched to an api class - * - * @var string - */ - public $entityName; - - /** - * Resolved fully-namespaced class name. - * - * @var string - */ - public $className; - - /** - * Additional arguments which should be passed to the action factory function. - * - * For example, `Civi\Api4\CustomValue` factory functions require the name of the custom group. - * - * @var array - */ - public $args = []; - - /** - * Event constructor - */ - public function __construct($entityName) { - $this->entityName = $entityName; - } - } diff --git a/civicrm/Civi/Api4/Event/Subscriber/CreateApi4RequestSubscriber.php b/civicrm/Civi/Api4/Event/Subscriber/CreateApi4RequestSubscriber.php deleted file mode 100644 index 505dc5f9e2..0000000000 --- a/civicrm/Civi/Api4/Event/Subscriber/CreateApi4RequestSubscriber.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/* - +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC. All rights reserved. | - | | - | This work is published under the GNU AGPLv3 license with some | - | permitted exceptions and without any warranty. For full license | - | and copyright information, see https://civicrm.org/licensing | - +--------------------------------------------------------------------+ - */ - -namespace Civi\Api4\Event\Subscriber; - -use Civi\API\Events; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; - -/** - * Resolve class for core and custom entities - * - * This runs while getting the class name for an entity / action. - */ -class CreateApi4RequestSubscriber implements EventSubscriberInterface { - - /** - * @return array - */ - public static function getSubscribedEvents() { - return [ - 'civi.api4.createRequest' => [ - ['onApiRequestCreate', Events::W_LATE], - ], - ]; - } - - /** - * @param \Civi\Api4\Event\CreateApi4RequestEvent $event - */ - public function onApiRequestCreate(\Civi\Api4\Event\CreateApi4RequestEvent $event) { - // Most entities match the name of the class - $className = 'Civi\Api4\\' . $event->entityName; - if (class_exists($className)) { - $event->className = $className; - return; - } - // Lookup non-standard entities requiring arguments or with a mismatched classname - $provider = \Civi::service('action_object_provider'); - $info = $provider->getEntities()[$event->entityName] ?? NULL; - if ($info) { - $event->className = $info['class']; - $event->args = $info['class_args'] ?? []; - } - } - -} diff --git a/civicrm/Civi/Api4/Generic/AbstractAction.php b/civicrm/Civi/Api4/Generic/AbstractAction.php index a531cddc72..0abc53a3fd 100644 --- a/civicrm/Civi/Api4/Generic/AbstractAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractAction.php @@ -398,7 +398,7 @@ abstract class AbstractAction implements \ArrayAccess { * @return array */ public function getPermissions() { - $permissions = call_user_func([CoreUtil::getApiClass($this->_entityName), 'permissions']); + $permissions = call_user_func([CoreUtil::getApiClass($this->_entityName), 'permissions'], $this->_entityName); $permissions += [ // applies to getFields, getActions, etc. 'meta' => ['access CiviCRM'], diff --git a/civicrm/Civi/Api4/Generic/AbstractSaveAction.php b/civicrm/Civi/Api4/Generic/AbstractSaveAction.php index 94b932efd3..d61718d646 100644 --- a/civicrm/Civi/Api4/Generic/AbstractSaveAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractSaveAction.php @@ -204,7 +204,7 @@ abstract class AbstractSaveAction extends AbstractAction { 'action' => 'get', 'where' => [ ['type', 'IN', ['Field', 'Custom']], - ['name', 'NOT IN', CoreUtil::getInfoItem($this->getEntityName(), 'primary_key')], + ['name', 'NOT IN', (array) CoreUtil::getInfoItem($this->getEntityName(), 'primary_key')], ], ], ['name']); } diff --git a/civicrm/Civi/Api4/Generic/DAOGetAction.php b/civicrm/Civi/Api4/Generic/DAOGetAction.php index 94f1402f52..0c33d2acc0 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetAction.php @@ -109,19 +109,28 @@ class DAOGetAction extends AbstractGetAction { $onlyCount = $this->getSelect() === ['row_count']; if (!$onlyCount) { + // Typical case: fetch various fields. $query = new Api4SelectQuery($this); $rows = $query->run(); \CRM_Utils_API_HTMLInputCoder::singleton()->decodeRows($rows); $result->exchangeArray($rows); + // No need to fetch count if we got a result set below the limit if (!$this->getLimit() || count($rows) < $this->getLimit()) { - $result->rowCount = count($rows) + $this->getOffset(); - $getCount = FALSE; + if ($getCount) { + $result->setCountMatched(count($rows) + $this->getOffset()); + $getCount = FALSE; + } + else { + // Set rowCount for backward compatibility. + $result->rowCount = count($rows) + $this->getOffset(); + } } } + if ($getCount) { $query = new Api4SelectQuery($this); - $result->rowCount = $query->getCount(); + $result->setCountMatched($query->getCount()); } } diff --git a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php index e11ac0c8f7..e877e6dd8b 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php @@ -12,6 +12,9 @@ namespace Civi\Api4\Generic; +use Civi\Api4\Utils\CoreUtil; +use Civi\Api4\Utils\FormattingUtil; + /** * @inheritDoc * @method bool getIncludeCustom() @@ -36,6 +39,7 @@ class DAOGetFieldsAction extends BasicGetFieldsAction { // Any fields name with a dot in it is either custom or an implicit join $includeCustom = strpos(implode('', $fieldsToGet), '.') !== FALSE; } + $this->formatValues(); $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $includeCustom, $this->values); $fields = $this->specToArray($spec->getFields($fieldsToGet)); foreach ($fieldsToGet ?? [] as $fieldName) { @@ -91,6 +95,29 @@ class DAOGetFieldsAction extends BasicGetFieldsAction { } } + /** + * Special handling for pseudoconstant replacements. + * + * Normally this would involve calling getFields... but this IS getFields. + * + * @throws \API_Exception + */ + private function formatValues() { + foreach (array_keys($this->values) as $key) { + if (strpos($key, ':')) { + [$fieldName, $suffix] = explode(':', $key); + $context = FormattingUtil::$pseudoConstantContexts[$suffix] ?? NULL; + if (!$context) { + throw new \API_Exception('Illegal expression'); + } + $baoName = CoreUtil::getBAOFromApiName($this->getEntityName()); + $options = $baoName::buildOptions($fieldName, $context); + $this->values[$fieldName] = FormattingUtil::replacePseudoconstant($options, $this->values[$key], TRUE); + unset($this->values[$key]); + } + } + } + public function fields() { $fields = parent::fields(); $fields[] = [ diff --git a/civicrm/Civi/Api4/Generic/Result.php b/civicrm/Civi/Api4/Generic/Result.php index 77720c9685..3689bee311 100644 --- a/civicrm/Civi/Api4/Generic/Result.php +++ b/civicrm/Civi/Api4/Generic/Result.php @@ -41,10 +41,21 @@ class Result extends \ArrayObject implements \JsonSerializable { */ public $version = 4; /** + * Not for public use. Instead, please use countFetched(), countMatched() and count(). + * * @var int */ public $rowCount; + /** + * How many entities matched the query, regardless of LIMIT clauses. + * + * This requires that row_count is included in the SELECT. + * + * @var int + */ + protected $matchedCount; + private $indexedBy; /** @@ -132,7 +143,17 @@ class Result extends \ArrayObject implements \JsonSerializable { } /** - * Returns the number of results + * Returns the number of results. + * + * If row_count was included in the select fields, then this will be the + * number of matched entities, even if this differs from the number of + * entities fetched. + * + * If row_count was not included, then this returns the number of entities + * fetched, which may or may not be the number of matches. + * + * Your code might be easier to reason about if you use countFetched() or + * countMatched() instead. * * @return int */ @@ -140,6 +161,43 @@ class Result extends \ArrayObject implements \JsonSerializable { return $this->rowCount ?? parent::count(); } + /** + * Returns the number of results fetched. + * + * If a limit was used, this will be a number up to that limit. + * + * In the case that *only* the row_count was fetched, this will be zero, since no *entities* were fetched. + * + * @return int + */ + public function countFetched() :int { + return parent::count(); + } + + /** + * Returns the number of results + * + * @return int + */ + public function countMatched() :int { + if (!isset($this->matchedCount)) { + throw new \API_Exception("countMatched can only be used if there was no limit set or if row_count was included in the select fields."); + } + return $this->matchedCount; + } + + /** + * Provides a way for API implementations to set the *matched* count. + * + * The matched count is the number of matching entities, regardless of any imposed limit clause. + */ + public function setCountMatched(int $c) { + $this->matchedCount = $c; + + // Set rowCount for backward compatibility. + $this->rowCount = $c; + } + /** * Reduce each result to one field * diff --git a/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php index 70a53af8b3..b740f5e72b 100644 --- a/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/ArrayQueryActionTrait.php @@ -30,8 +30,21 @@ trait ArrayQueryActionTrait { protected function queryArray($values, $result) { $values = $this->filterArray($values); $values = $this->sortArray($values); - // Set total count before applying limit - $result->rowCount = count($values); + + if (in_array('row_count', $this->getSelect())) { + $result->setCountMatched(count($values)); + } + else { + // Set total count before applying limit + // + // This is kept here for backward compatibility, but could be confusing because + // the API behaviour is different with ArrayQueryActionTrait than with DAO + // queries. With DAO queries, the rowCount is only the same as the total + // matched count in specific cases, whereas with the implementation here we are + // setting rowCount explicitly to the matches count, before we apply limit. + $result->rowCount = count($values); + } + $values = $this->limitArray($values); $values = $this->selectArray($values); $result->exchangeArray($values); diff --git a/civicrm/Civi/Api4/Managed.php b/civicrm/Civi/Api4/Managed.php index e406dad63d..d10e4fcc15 100644 --- a/civicrm/Civi/Api4/Managed.php +++ b/civicrm/Civi/Api4/Managed.php @@ -11,7 +11,7 @@ namespace Civi\Api4; /** - * Managed (Managed entities). + * Managed entities API. * * Managed entities allow extensions to add and manage entities. * @@ -22,4 +22,13 @@ namespace Civi\Api4; */ class Managed extends Generic\DAOEntity { + /** + * @param bool $checkPermissions + * @return Action\Managed\Reconcile + */ + public static function reconcile($checkPermissions = TRUE) { + return (new Action\Managed\Reconcile(__CLASS__, __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + } diff --git a/civicrm/Civi/Api4/Provider/ActionObjectProvider.php b/civicrm/Civi/Api4/Provider/ActionObjectProvider.php index 2c284e3cc0..4d6dda02df 100644 --- a/civicrm/Civi/Api4/Provider/ActionObjectProvider.php +++ b/civicrm/Civi/Api4/Provider/ActionObjectProvider.php @@ -152,7 +152,8 @@ class ActionObjectProvider implements EventSubscriberInterface, ProviderInterfac if (!$entities) { // Load entities declared in API files foreach ($this->getAllApiClasses() as $className) { - $this->loadEntity($className, $entities); + $info = $className::getInfo(); + $entities[$info['name']] = $info; } // Allow extensions to modify the list of entities $event = GenericHookEvent::create(['entities' => &$entities]); @@ -164,19 +165,6 @@ class ActionObjectProvider implements EventSubscriberInterface, ProviderInterfac return $entities; } - /** - * @param \Civi\Api4\Generic\AbstractEntity $className - * @param array $entities - */ - private function loadEntity($className, array &$entities) { - $info = $className::getInfo(); - $daoName = $info['dao'] ?? NULL; - // Only include DAO entities from enabled components - if (!$daoName || !defined("{$daoName}::COMPONENT") || \CRM_Core_Component::isEnabled($daoName::COMPONENT)) { - $entities[$info['name']] = $info; - } - } - /** * Scan all api directories to discover entities * @return \Civi\Api4\Generic\AbstractEntity[] diff --git a/civicrm/Civi/Api4/Query/Api4SelectQuery.php b/civicrm/Civi/Api4/Query/Api4SelectQuery.php index a7de66a00f..71ab0d2092 100644 --- a/civicrm/Civi/Api4/Query/Api4SelectQuery.php +++ b/civicrm/Civi/Api4/Query/Api4SelectQuery.php @@ -271,7 +271,7 @@ class Api4SelectQuery { throw new \API_Exception('Cannot use existing field name as alias'); } $this->selectAliases[$alias] = $expr->getExpr(); - $this->query->select($expr->render($this->apiFieldSpec) . " AS `$alias`"); + $this->query->select($expr->render($this) . " AS `$alias`"); } } } @@ -327,7 +327,7 @@ class Api4SelectQuery { try { $expr = $this->getExpression($item); - $column = $expr->render($this->apiFieldSpec); + $column = $this->renderExpr($expr); // Use FIELD() function to sort on pseudoconstant values $suffix = strstr($item, ':'); @@ -376,7 +376,7 @@ class Api4SelectQuery { */ protected function buildGroupBy() { foreach ($this->getGroupBy() as $item) { - $this->query->groupBy($this->getExpression($item)->render($this->apiFieldSpec)); + $this->query->groupBy($this->renderExpr($this->getExpression($item))); } } @@ -441,7 +441,7 @@ class Api4SelectQuery { * @throws \API_Exception * @throws \Exception */ - protected function composeClause(array $clause, string $type, int $depth) { + public function composeClause(array $clause, string $type, int $depth) { $field = NULL; // Pad array for unary operators [$expr, $operator, $value] = array_pad($clause, 3, NULL); @@ -465,7 +465,7 @@ class Api4SelectQuery { ]; FormattingUtil::formatInputValue($value, NULL, $fauxField, $operator); } - $fieldAlias = $expr->render($this->apiFieldSpec); + $fieldAlias = $expr->render($this); } // For HAVING, expr must be an item in the SELECT clause elseif ($type === 'HAVING') { @@ -508,7 +508,7 @@ class Api4SelectQuery { elseif ($type === 'ON' || ($type === 'WHERE' && $isExpression)) { $expr = $this->getExpression($expr); $fieldName = count($expr->getFields()) === 1 ? $expr->getFields()[0] : NULL; - $fieldAlias = $expr->render($this->apiFieldSpec); + $fieldAlias = $expr->render($this); if (is_string($value)) { $valExpr = $this->getExpression($value); if ($expr->getType() === 'SqlField' && $valExpr->getType() === 'SqlString') { @@ -517,7 +517,7 @@ class Api4SelectQuery { return $this->createSQLClause($fieldAlias, $operator, $value, $this->apiFieldSpec[$fieldName], $depth); } else { - $value = $valExpr->render($this->apiFieldSpec); + $value = $valExpr->render($this); return sprintf('%s %s %s', $fieldAlias, $operator, $value); } } @@ -992,13 +992,13 @@ class Api4SelectQuery { // If this condition makes an explicit link between the bridge and another entity if ($op === '=' && $sideB && ($sideA === "$alias.{$baseRef->getReferenceKey()}" || $sideB === "$alias.{$baseRef->getReferenceKey()}")) { $expr = $sideA === "$alias.{$baseRef->getReferenceKey()}" ? $sideB : $sideA; - $bridgeConditions[] = "`$bridgeAlias`.`{$baseRef->getReferenceKey()}` = " . $this->getExpression($expr)->render($this->apiFieldSpec); + $bridgeConditions[] = "`$bridgeAlias`.`{$baseRef->getReferenceKey()}` = " . $this->getExpression($expr)->render($this); return FALSE; } // Explicit link with dynamic "entity_table" column elseif ($op === '=' && $baseRef->getTypeColumn() && ($sideA === "$alias.{$baseRef->getTypeColumn()}" || $sideB === "$alias.{$baseRef->getTypeColumn()}")) { $expr = $sideA === "$alias.{$baseRef->getTypeColumn()}" ? $sideB : $sideA; - $bridgeConditions[] = "`$bridgeAlias`.`{$baseRef->getTypeColumn()}` = " . $this->getExpression($expr)->render($this->apiFieldSpec); + $bridgeConditions[] = "`$bridgeAlias`.`{$baseRef->getTypeColumn()}` = " . $this->getExpression($expr)->render($this); return FALSE; } return TRUE; @@ -1287,6 +1287,24 @@ class Api4SelectQuery { ]; } + /** + * Returns rendered expression or alias if it is already aliased in the SELECT clause. + * + * @param $expr + * @return mixed|string + */ + protected function renderExpr($expr) { + $exprVal = explode(':', $expr->getExpr())[0]; + // If this expression is already in use in the select clause, use the existing alias + // This allows calculated fields to be reused in SELECT, GROUP BY and ORDER BY + foreach ($this->selectAliases as $alias => $selectVal) { + if ($exprVal === explode(':', $selectVal)[0]) { + return "`$alias`"; + } + } + return $expr->render($this); + } + /** * Add something to the api's debug output if debugging is enabled * diff --git a/civicrm/Civi/Api4/Query/SqlEquation.php b/civicrm/Civi/Api4/Query/SqlEquation.php index caaba24fb4..0b2f22334f 100644 --- a/civicrm/Civi/Api4/Query/SqlEquation.php +++ b/civicrm/Civi/Api4/Query/SqlEquation.php @@ -64,10 +64,10 @@ class SqlEquation extends SqlExpression { /** * Render the expression for insertion into the sql query * - * @param array $fieldList + * @param Civi\Api4\Query\Api4SelectQuery $query * @return string */ - public function render(array $fieldList): string { + public function render(Api4SelectQuery $query): string { $output = []; foreach ($this->args as $arg) { // Just an operator @@ -76,10 +76,10 @@ class SqlEquation extends SqlExpression { } // Surround fields with COALESCE to handle null values elseif (is_a($arg, SqlField::class)) { - $output[] = 'COALESCE(' . $arg->render($fieldList) . ', 0)'; + $output[] = 'COALESCE(' . $arg->render($query) . ', 0)'; } else { - $output[] = $arg->render($fieldList); + $output[] = $arg->render($query); } } return '(' . implode(' ', $output) . ')'; diff --git a/civicrm/Civi/Api4/Query/SqlExpression.php b/civicrm/Civi/Api4/Query/SqlExpression.php index 46a81c0f1d..fca26025b3 100644 --- a/civicrm/Civi/Api4/Query/SqlExpression.php +++ b/civicrm/Civi/Api4/Query/SqlExpression.php @@ -140,10 +140,10 @@ abstract class SqlExpression { /** * Renders expression to a sql string, replacing field names with column names. * - * @param array $fieldList + * @param Civi\Api4\Query\Api4SelectQuery $query * @return string */ - abstract public function render(array $fieldList): string; + abstract public function render(Api4SelectQuery $query): string; /** * @return string diff --git a/civicrm/Civi/Api4/Query/SqlField.php b/civicrm/Civi/Api4/Query/SqlField.php index a665f68609..0dde50583b 100644 --- a/civicrm/Civi/Api4/Query/SqlField.php +++ b/civicrm/Civi/Api4/Query/SqlField.php @@ -11,8 +11,6 @@ namespace Civi\Api4\Query; -use Civi\API\Exception\UnauthorizedException; - /** * Sql column expression */ @@ -27,18 +25,13 @@ class SqlField extends SqlExpression { $this->fields[] = $this->expr; } - public function render(array $fieldList): string { - if (!isset($fieldList[$this->expr])) { - throw new \API_Exception("Invalid field '{$this->expr}'"); - } - if ($fieldList[$this->expr] === FALSE) { - throw new UnauthorizedException("Unauthorized field '{$this->expr}'"); - } - if (!empty($fieldList[$this->expr]['sql_renderer'])) { - $renderer = $fieldList[$this->expr]['sql_renderer']; - return $renderer($fieldList[$this->expr]); + public function render(Api4SelectQuery $query): string { + $field = $query->getField($this->expr, TRUE); + if (!empty($field['sql_renderer'])) { + $renderer = $field['sql_renderer']; + return $renderer($field, $query); } - return $fieldList[$this->expr]['sql_name']; + return $field['sql_name']; } public static function getTitle(): string { diff --git a/civicrm/Civi/Api4/Query/SqlFunction.php b/civicrm/Civi/Api4/Query/SqlFunction.php index 5b146ee979..7cdb358aac 100644 --- a/civicrm/Civi/Api4/Query/SqlFunction.php +++ b/civicrm/Civi/Api4/Query/SqlFunction.php @@ -106,13 +106,13 @@ abstract class SqlFunction extends SqlExpression { /** * Render the expression for insertion into the sql query * - * @param array $fieldList + * @param Civi\Api4\Query\Api4SelectQuery $query * @return string */ - public function render(array $fieldList): string { + public function render(Api4SelectQuery $query): string { $output = ''; foreach ($this->args as $arg) { - $rendered = $this->renderArg($arg, $fieldList); + $rendered = $this->renderArg($arg, $query); if (strlen($rendered)) { $output .= (strlen($output) ? ' ' : '') . $rendered; } @@ -122,16 +122,16 @@ abstract class SqlFunction extends SqlExpression { /** * @param array $arg - * @param array $fieldList + * @param Civi\Api4\Query\Api4SelectQuery $query * @return string */ - private function renderArg($arg, $fieldList): string { + private function renderArg($arg, Api4SelectQuery $query): string { $rendered = implode(' ', $arg['prefix']); foreach ($arg['expr'] ?? [] as $idx => $expr) { if (strlen($rendered) || $idx) { $rendered .= $idx ? ', ' : ' '; } - $rendered .= $expr->render($fieldList); + $rendered .= $expr->render($query); } if ($arg['suffix']) { $rendered .= (strlen($rendered) ? ' ' : '') . implode(' ', $arg['suffix']); diff --git a/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php b/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php index 951e4498c5..dc843b28ed 100644 --- a/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php +++ b/civicrm/Civi/Api4/Query/SqlFunctionCURDATE.php @@ -18,6 +18,8 @@ class SqlFunctionCURDATE extends SqlFunction { protected static $category = self::CATEGORY_DATE; + protected static $dataType = 'Date'; + protected static function params(): array { return []; } @@ -26,7 +28,7 @@ class SqlFunctionCURDATE extends SqlFunction { * @return string */ public static function getTitle(): string { - return ts('Now'); + return ts('Today'); } /** diff --git a/civicrm/Civi/Api4/Query/SqlFunctionMONTH.php b/civicrm/Civi/Api4/Query/SqlFunctionMONTH.php new file mode 100644 index 0000000000..4f903347a6 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionMONTH.php @@ -0,0 +1,46 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionMONTH extends SqlFunction { + + protected static $category = self::CATEGORY_DATE; + + protected static $dataType = 'Integer'; + + protected static function params(): array { + return [ + [ + 'max_expr' => 1, + 'optional' => FALSE, + ], + ]; + } + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Month only'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('The numeric month (1-12) of a date.'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlFunctionNOW.php b/civicrm/Civi/Api4/Query/SqlFunctionNOW.php new file mode 100644 index 0000000000..d6764c6363 --- /dev/null +++ b/civicrm/Civi/Api4/Query/SqlFunctionNOW.php @@ -0,0 +1,41 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Query; + +/** + * Sql function + */ +class SqlFunctionNOW extends SqlFunction { + + protected static $category = self::CATEGORY_DATE; + + protected static $dataType = 'Timestamp'; + + protected static function params(): array { + return []; + } + + /** + * @return string + */ + public static function getTitle(): string { + return ts('Now'); + } + + /** + * @return string + */ + public static function getDescription(): string { + return ts('The current date and time.'); + } + +} diff --git a/civicrm/Civi/Api4/Query/SqlNull.php b/civicrm/Civi/Api4/Query/SqlNull.php index 5b804ba7e9..a56720f3d5 100644 --- a/civicrm/Civi/Api4/Query/SqlNull.php +++ b/civicrm/Civi/Api4/Query/SqlNull.php @@ -19,7 +19,7 @@ class SqlNull extends SqlExpression { protected function initialize() { } - public function render(array $fieldList): string { + public function render(Api4SelectQuery $query): string { return 'NULL'; } diff --git a/civicrm/Civi/Api4/Query/SqlNumber.php b/civicrm/Civi/Api4/Query/SqlNumber.php index 04e7424aa0..14025f707c 100644 --- a/civicrm/Civi/Api4/Query/SqlNumber.php +++ b/civicrm/Civi/Api4/Query/SqlNumber.php @@ -22,7 +22,7 @@ class SqlNumber extends SqlExpression { \CRM_Utils_Type::validate($this->expr, 'Float'); } - public function render(array $fieldList): string { + public function render(Api4SelectQuery $query): string { return $this->expr; } diff --git a/civicrm/Civi/Api4/Query/SqlString.php b/civicrm/Civi/Api4/Query/SqlString.php index 53228498d3..51b5422c98 100644 --- a/civicrm/Civi/Api4/Query/SqlString.php +++ b/civicrm/Civi/Api4/Query/SqlString.php @@ -27,7 +27,7 @@ class SqlString extends SqlExpression { $this->expr = str_replace(['\\\\', "\\$quot", $backslash], [$backslash, $quot, '\\\\'], $str); } - public function render(array $fieldList): string { + public function render(Api4SelectQuery $query): string { return '"' . \CRM_Core_DAO::escapeString($this->expr) . '"'; } diff --git a/civicrm/Civi/Api4/Query/SqlWild.php b/civicrm/Civi/Api4/Query/SqlWild.php index f0679f58a2..090f864f5f 100644 --- a/civicrm/Civi/Api4/Query/SqlWild.php +++ b/civicrm/Civi/Api4/Query/SqlWild.php @@ -19,7 +19,7 @@ class SqlWild extends SqlExpression { protected function initialize() { } - public function render(array $fieldList): string { + public function render(Api4SelectQuery $query): string { return '*'; } diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/CustomGroupSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/CustomGroupSpecProvider.php new file mode 100644 index 0000000000..86498fc6fe --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/CustomGroupSpecProvider.php @@ -0,0 +1,37 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\RequestSpec; + +class CustomGroupSpecProvider implements Generic\SpecProviderInterface { + + /** + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + $action = $spec->getAction(); + + $spec->getFieldByName('extends') + ->setRequired($action === 'create') + ->setSuffixes(['name', 'label', 'grouping']); + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity === 'CustomGroup'; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/DomainGetSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/DomainGetSpecProvider.php new file mode 100644 index 0000000000..ddb52a8894 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/DomainGetSpecProvider.php @@ -0,0 +1,50 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\FieldSpec; +use Civi\Api4\Service\Spec\RequestSpec; + +class DomainGetSpecProvider implements Generic\SpecProviderInterface { + + /** + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + $field = new FieldSpec('is_active', $spec->getEntity(), 'Boolean'); + $field->setLabel(ts('Active Domain')) + ->setTitle(ts('Active')) + ->setColumnName('id') + ->setDescription(ts('Is this the current active domain')) + ->setType('Extra') + ->setSqlRenderer([__CLASS__, 'renderIsActiveDomain']); + $spec->addFieldSpec($field); + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity === 'Domain' && $action === 'get'; + } + + /** + * @param array $field + * return string + */ + public static function renderIsActiveDomain(array $field): string { + $currentDomain = \CRM_Core_Config::domainID(); + return "IF({$field['sql_name']} = '$currentDomain', '1', '0')"; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/FinancialTrxnCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/FinancialTrxnCreationSpecProvider.php new file mode 100644 index 0000000000..eca80431f6 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/FinancialTrxnCreationSpecProvider.php @@ -0,0 +1,47 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\FieldSpec; +use Civi\Api4\Service\Spec\RequestSpec; + +class FinancialTrxnCreationSpecProvider implements Generic\SpecProviderInterface { + + /** + * Modify the api spec. + * + * @param \Civi\Api4\Service\Spec\RequestSpec $spec + */ + public function modifySpec(RequestSpec $spec): void { + $spec->getFieldByName('to_financial_account_id')->setRequired(TRUE); + $field = new FieldSpec('entity_id', 'FinancialTrxn', 'Integer'); + $field->setRequired(TRUE); + $field->setTitle(ts('Related entity (eg. contribution) id')); + $spec->addFieldSpec($field); + $spec->getFieldByName('status_id')->setDefaultValue(1); + $spec->getFieldByName('total_amount')->setRequired(TRUE); + } + + /** + * Specify the entity & action it applies to. + * + * @param string $entity + * @param string $action + * + * @return bool + */ + public function applies($entity, $action): bool { + return $entity === 'FinancialTrxn' && $action === 'create'; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php index 54b1019090..ad7a79b3c7 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php @@ -262,6 +262,14 @@ class SpecFormatter { } } } + elseif ($returnFormat && !empty($pseudoconstant['callback'])) { + $callbackOptions = call_user_func(\Civi\Core\Resolver::singleton()->get($pseudoconstant['callback']), NULL, [], $values); + foreach ($callbackOptions as $callbackOption) { + if (is_array($callbackOption) && !empty($callbackOption['id']) && isset($optionIndex[$callbackOption['id']])) { + $options[$optionIndex[$callbackOption['id']]] += $callbackOption; + } + } + } } } if (isset($props)) { diff --git a/civicrm/Civi/Api4/UserJob.php b/civicrm/Civi/Api4/UserJob.php new file mode 100644 index 0000000000..80761394e1 --- /dev/null +++ b/civicrm/Civi/Api4/UserJob.php @@ -0,0 +1,24 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ +namespace Civi\Api4; + +/** + * UserJob entity. + * + * This entity allows tracking of imports, including associated temp tables. + * + * @searchable secondary + * @since 5.50 + * @package Civi\Api4 + */ +class UserJob extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Utils/CoreUtil.php b/civicrm/Civi/Api4/Utils/CoreUtil.php index caf56d700b..8bb34dedce 100644 --- a/civicrm/Civi/Api4/Utils/CoreUtil.php +++ b/civicrm/Civi/Api4/Utils/CoreUtil.php @@ -14,7 +14,6 @@ namespace Civi\Api4\Utils; use Civi\API\Exception\NotImplementedException; use Civi\API\Request; -use Civi\Api4\Event\CreateApi4RequestEvent; use CRM_Core_DAO_AllCoreTables as AllCoreTables; class CoreUtil { @@ -39,9 +38,11 @@ class CoreUtil { * @return string|\Civi\Api4\Generic\AbstractEntity */ public static function getApiClass($entityName) { - $e = new CreateApi4RequestEvent($entityName); - \Civi::dispatcher()->dispatch('civi.api4.createRequest', $e); - return $e->className; + $className = 'Civi\Api4\\' . $entityName; + if (class_exists($className)) { + return $className; + } + return self::getInfoItem($entityName, 'class'); } /** @@ -114,7 +115,7 @@ class CoreUtil { * @throws \Civi\API\Exception\UnauthorizedException */ public static function getCustomGroupExtends(string $entityName) { - // Custom_group.extends pretty much maps 1-1 with entity names, except for a couple oddballs (Contact, Participant). + // Custom_group.extends pretty much maps 1-1 with entity names, except for Contact. switch ($entityName) { case 'Contact': return [ @@ -122,12 +123,6 @@ class CoreUtil { 'column' => 'id', ]; - case 'Participant': - return [ - 'extends' => ['Participant', 'ParticipantRole', 'ParticipantEventName', 'ParticipantEventType'], - 'column' => 'id', - ]; - case 'RelationshipCache': return [ 'extends' => ['Relationship'], diff --git a/civicrm/Civi/Api4/Utils/FormattingUtil.php b/civicrm/Civi/Api4/Utils/FormattingUtil.php index 87ee2d7ae3..5d6991622e 100644 --- a/civicrm/Civi/Api4/Utils/FormattingUtil.php +++ b/civicrm/Civi/Api4/Utils/FormattingUtil.php @@ -30,7 +30,7 @@ class FormattingUtil { /** * @var string[] */ - public static $pseudoConstantSuffixes = ['name', 'abbr', 'label', 'color', 'description', 'icon']; + public static $pseudoConstantSuffixes = ['name', 'abbr', 'label', 'color', 'description', 'icon', 'grouping']; /** * Massage values into the format the BAO expects for a write operation @@ -192,7 +192,6 @@ class FormattingUtil { * @throws \CRM_Core_Exception */ public static function formatOutputValues(&$results, $fields, $action = 'get', $selectAliases = []) { - $fieldOptions = []; foreach ($results as &$result) { $contactTypePaths = []; foreach ($result as $key => $value) { @@ -211,16 +210,17 @@ class FormattingUtil { } // Evaluate pseudoconstant suffixes $suffix = strrpos($fieldName, ':'); + $fieldOptions = NULL; if ($suffix) { - $fieldOptions[$fieldName] = $fieldOptions[$fieldName] ?? self::getPseudoconstantList($field, $fieldName, $result, $action); + $fieldOptions = self::getPseudoconstantList($field, $fieldName, $result, $action); $dataType = NULL; } if ($fieldExpr->supportsExpansion) { if (!empty($field['serialize']) && is_string($value)) { $value = \CRM_Core_DAO::unSerializeField($value, $field['serialize']); } - if (isset($fieldOptions[$fieldName])) { - $value = self::replacePseudoconstant($fieldOptions[$fieldName], $value); + if (isset($fieldOptions)) { + $value = self::replacePseudoconstant($fieldOptions, $value); } } // Keep track of contact types for self::contactFieldsToRemove diff --git a/civicrm/Civi/Core/Container.php b/civicrm/Civi/Core/Container.php index 92c9a9482d..6da903c0d5 100644 --- a/civicrm/Civi/Core/Container.php +++ b/civicrm/Civi/Core/Container.php @@ -232,7 +232,7 @@ class Container { $container->setDefinition('pear_mail', new Definition('Mail')) ->setFactory('CRM_Utils_Mail::createMailer')->setPublic(TRUE); - $container->setDefinition('crypto.registry', new Definition('Civi\Crypto\CryptoService')) + $container->setDefinition('crypto.registry', new Definition('Civi\Crypto\CryptoRegistry')) ->setFactory('Civi\Crypto\CryptoRegistry::createDefaultRegistry')->setPublic(TRUE); $container->setDefinition('crypto.token', new Definition('Civi\Crypto\CryptoToken', [])) @@ -617,6 +617,7 @@ class Container { \CRM_Extension_System::singleton(TRUE); \CRM_Extension_System::singleton()->getClassLoader()->register(); \CRM_Extension_System::singleton()->getMixinLoader()->run(); + \CRM_Utils_Hook::singleton()->commonBuildModuleList('civicrm_boot'); $bootServices['dispatcher.boot']->setDispatchPolicy($mainDispatchPolicy); $runtime->includeCustomPath(); diff --git a/civicrm/Civi/Crypto/CryptoRegistry.php b/civicrm/Civi/Crypto/CryptoRegistry.php index 27f0a9de8f..5c6fd958da 100644 --- a/civicrm/Civi/Crypto/CryptoRegistry.php +++ b/civicrm/Civi/Crypto/CryptoRegistry.php @@ -61,7 +61,7 @@ class CryptoRegistry { * @throws \CRM_Core_Exception * @throws \Civi\Crypto\Exception\CryptoException */ - public static function createDefaultRegistry() { + public static function createDefaultRegistry(): CryptoRegistry { $registry = new static(); $registry->addCipherSuite(new \Civi\Crypto\PhpseclibCipherSuite()); diff --git a/civicrm/Civi/Test/HttpTestTrait.php b/civicrm/Civi/Test/HttpTestTrait.php index 99e6eb122e..0f6637a58c 100644 --- a/civicrm/Civi/Test/HttpTestTrait.php +++ b/civicrm/Civi/Test/HttpTestTrait.php @@ -145,6 +145,22 @@ trait HttpTestTrait { return $this; } + /** + * @param string $regexp + * @param \Psr\Http\Message\ResponseInterface $response + * @param string $message + */ + protected function assertBodyRegexp($regexp, $response = NULL, $message = NULL) { + if ($message) { + $message .= "\n"; + } + + $response = $this->resolveResponse($response); + $this->assertRegexp($regexp, (string) $response->getBody(), + $message . 'Response body does not match pattern' . $this->formatFailure($response)); + return $this; + } + /** * @param \Psr\Http\Message\ResponseInterface|null $response * @return \Psr\Http\Message\ResponseInterface diff --git a/civicrm/ang/api4Explorer.ang.php b/civicrm/ang/api4Explorer.ang.php index d0ac2be6ec..e539892ca5 100644 --- a/civicrm/ang/api4Explorer.ang.php +++ b/civicrm/ang/api4Explorer.ang.php @@ -15,5 +15,5 @@ return [ 'basePages' => [], 'bundles' => ['bootstrap3'], 'permissions' => ['access debug output', 'edit groups', 'administer reserved groups'], - 'requires' => ['crmUi', 'crmUtil', 'ngRoute', 'crmRouteBinder', 'ui.sortable', 'api4', 'ngSanitize', 'dialogService', 'checklist-model'], + 'requires' => ['crmUi', 'crmUtil', 'ngRoute', 'crmRouteBinder', 'ui.sortable', 'api4', 'ngSanitize'], ]; diff --git a/civicrm/ang/api4Explorer/Explorer.html b/civicrm/ang/api4Explorer/Explorer.html index d78bd81451..e6d1e4a0f7 100644 --- a/civicrm/ang/api4Explorer/Explorer.html +++ b/civicrm/ang/api4Explorer/Explorer.html @@ -16,7 +16,6 @@ </span> <input class="form-control api4-index" type="search" ng-model="index" ng-mouseenter="help('index', paramDoc('$index'))" 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()" ng-mouseenter="help(ts('Execute'), executeDoc())" ng-mouseleave="help()">{{:: ts('Execute') }}</button> - <button class="btn btn-primary pull-right" crm-icon="fa-save" ng-show="perm.editGroups && action === 'get'" ng-click="save()" ng-mouseenter="help(ts('Save smart group'), saveDoc())" ng-mouseleave="help()">{{:: ts('Save...') }}</button> </div> </div> <div class="panel-body"> diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index ee6e9864ea..4d299cf9ec 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -19,7 +19,7 @@ }); }); - angular.module('api4Explorer').controller('Api4Explorer', function($scope, $routeParams, $location, $timeout, $http, crmUiHelp, crmApi4, dialogService) { + angular.module('api4Explorer').controller('Api4Explorer', function($scope, $routeParams, $location, $timeout, $http, crmUiHelp, crmApi4) { var ts = $scope.ts = CRM.ts(), ctrl = $scope.$ctrl = this; $scope.entities = entities; @@ -37,7 +37,6 @@ $scope.crmUrl = CRM.url; $scope.perm = { accessDebugOutput: CRM.checkPerm('access debug output'), - editGroups: CRM.checkPerm('edit groups') }; marked.setOptions({highlight: prettyPrintOne}); var getMetaParams = {}, @@ -1122,102 +1121,9 @@ return doc; }; - $scope.saveDoc = function() { - return { - description: ts('Save API call as a smart group.'), - comment: ts('Create a SavedSearch using these API params to populate a smart group.') + - '\n\n' + ts('NOTE: you must select contact id as the only field.') - }; - }; - $scope.$watch('params', writeCode, true); $scope.$watch('index', writeCode); writeCode(); - - $scope.save = function() { - $scope.params.limit = $scope.params.offset = 0; - if ($scope.params.chain.length) { - CRM.alert(ts('Smart groups are not compatible with API chaining.'), ts('Error'), 'error', {expires: 5000}); - return; - } - if ($scope.params.select.length !== 1 || !_.includes($scope.params.select[0], 'id')) { - CRM.alert(ts('To create a smart group, the API must select contact id and no other fields.'), ts('Error'), 'error', {expires: 5000}); - return; - } - var model = { - title: '', - description: '', - visibility: 'User and User Admin Only', - group_type: [], - id: null, - entity: $scope.entity, - params: JSON.parse(angular.toJson($scope.params)) - }; - model.params.version = 4; - delete model.params.chain; - delete model.params.debug; - delete model.params.limit; - delete model.params.offset; - delete model.params.orderBy; - delete model.params.checkPermissions; - var options = CRM.utils.adjustDialogDefaults({ - width: '500px', - autoOpen: false, - title: ts('Save smart group') - }); - dialogService.open('saveSearchDialog', '~/api4Explorer/SaveSearch.html', model, options); - }; - }); - - angular.module('api4Explorer').controller('SaveSearchCtrl', function($scope, crmApi4, dialogService) { - var ts = $scope.ts = CRM.ts(), - model = $scope.model; - $scope.groupEntityRefParams = { - entity: 'Group', - api: { - params: {is_hidden: 0, is_active: 1, 'saved_search_id.api_entity': model.entity}, - extra: ['saved_search_id', 'description', 'visibility', 'group_type'] - }, - select: { - allowClear: true, - minimumInputLength: 0, - placeholder: ts('Select existing group') - } - }; - if (!CRM.checkPerm('administer reserved groups')) { - $scope.groupEntityRefParams.api.params.is_reserved = 0; - } - $scope.perm = { - administerReservedGroups: CRM.checkPerm('administer reserved groups') - }; - $scope.options = CRM.vars.api4.groupOptions; - $scope.$watch('model.id', function(id) { - if (id) { - _.assign(model, $('#api-save-search-select-group').select2('data').extra); - } - }); - $scope.cancel = function() { - dialogService.cancel('saveSearchDialog'); - }; - $scope.save = function() { - $('.ui-dialog:visible').block(); - var group = model.id ? {id: model.id} : {title: model.title}; - group.description = model.description; - group.visibility = model.visibility; - group.group_type = model.group_type; - group.saved_search_id = '$id'; - var savedSearch = { - api_entity: model.entity, - api_params: model.params - }; - if (group.id) { - savedSearch.id = model.saved_search_id; - } - crmApi4('SavedSearch', 'save', {records: [savedSearch], chain: {group: ['Group', 'save', {'records': [group]}]}}) - .then(function(result) { - dialogService.close('saveSearchDialog', result[0]); - }); - }; }); angular.module('api4Explorer').component('crmApi4Clause', { diff --git a/civicrm/ang/api4Explorer/SaveSearch.html b/civicrm/ang/api4Explorer/SaveSearch.html deleted file mode 100644 index a59d01de9c..0000000000 --- a/civicrm/ang/api4Explorer/SaveSearch.html +++ /dev/null @@ -1,26 +0,0 @@ -<form id="bootstrap-theme"> - <div ng-controller="SaveSearchCtrl"> - <input class="form-control" id="api-save-search-select-group" ng-model="model.id" crm-entityref="groupEntityRefParams" > - <label ng-show="!model.id">{{:: ts('Or') }}</label> - <input class="form-control" placeholder="Create new group" ng-model="model.title" ng-show="!model.id"> - <hr /> - <label>{{:: ts('Description:') }}</label> - <textarea class="form-control" ng-model="model.description"></textarea> - <label>{{:: ts('Group Type:') }}</label> - <div class="form-inline"> - <div class="checkbox" ng-repeat="(key, label) in options.group_type"> - <label> - <input type="checkbox" checklist-model="model.group_type" checklist-value="key"> - {{ label }} - </label> - </div> - </div> - <label>{{:: ts('Visibility:') }}</label> - <select class="form-control" ng-model="model.visibility" ng-options="name as value for (name, value) in options.visibility"></select> - <hr /> - <div class="buttons pull-right"> - <button type="button" ng-click="cancel()" class="btn btn-danger">{{:: ts('Cancel') }}</button> - <button ng-click="save()" class="btn btn-primary" ng-disabled="!model.title && !model.id">{{:: ts('Save') }}</button> - </div> - </div> -</form> diff --git a/civicrm/ang/crmMailing/Templates.js b/civicrm/ang/crmMailing/Templates.js index b67e7b1162..334bb7321c 100644 --- a/civicrm/ang/crmMailing/Templates.js +++ b/civicrm/ang/crmMailing/Templates.js @@ -45,7 +45,7 @@ var value = el.val(); - CRM.api3('MessageTemplate', 'getlist', { params: { id: value }, label_field: 'msg_title' }).then(function(tlist) { + CRM.api3('MessageTemplate', 'getlist', {params: {id: value}, label_field: 'msg_title'}).then(function(tlist) { var template = {}; @@ -72,7 +72,7 @@ } rcpAjaxState.page_i = page_num - rcpAjaxState.page_n; - var filterParams = { is_active: 1, workflow_name: { "IS NULL": 1 } }; + var filterParams = {is_active: 1, workflow_name: {"IS NULL": 1}}; var params = { input: input, @@ -90,7 +90,7 @@ var results = { children: $.map(data.values, function(obj) { - return { id: obj.id, text: obj.label }; + return {id: obj.id, text: obj.label}; }) }; @@ -98,13 +98,10 @@ results.text = ts('Message Templates'); } - var more = data.more_results; - - if (more && !data.more_results) { - rcpAjaxState.page_n += rcpAjaxState.page_i; - } - - return { more: more, results: [ results ] }; + return { + more: data.more_results, + results: [results] + }; }, } }); diff --git a/civicrm/api/v3/CustomGroup.php b/civicrm/api/v3/CustomGroup.php index f45c9ca302..e80f232480 100644 --- a/civicrm/api/v3/CustomGroup.php +++ b/civicrm/api/v3/CustomGroup.php @@ -16,16 +16,10 @@ */ /** - * Use this API to create a new group. - * - * The 'extends' value accepts an array or a comma separated string. - * e.g array( - * 'Individual','Contact') or 'Individual,Contact' - * See the CRM Data Model for custom_group property definitions - * $params['class_name'] is a required field, class being extended. + * Create or modify a custom field group. * * @param array $params - * Array per getfields metadata. + * For legacy reasons, 'extends' can be passed as an array (for setting Participant column_value) * * @return array * @todo $params['extends'] is array format - is that std compatible diff --git a/civicrm/api/v3/Rule.php b/civicrm/api/v3/Rule.php index 24a0f02ec5..f43db917b4 100644 --- a/civicrm/api/v3/Rule.php +++ b/civicrm/api/v3/Rule.php @@ -27,7 +27,7 @@ * API result array */ function civicrm_api3_rule_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Rule'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'DedupeRule'); } /** @@ -67,5 +67,5 @@ function civicrm_api3_rule_delete($params) { * API result array */ function civicrm_api3_rule_get($params) { - return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, TRUE, 'Rule'); + return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, TRUE, 'DedupeRule'); } diff --git a/civicrm/api/v3/RuleGroup.php b/civicrm/api/v3/RuleGroup.php index 0fcfa1f1ae..fe40d28ae0 100644 --- a/civicrm/api/v3/RuleGroup.php +++ b/civicrm/api/v3/RuleGroup.php @@ -67,5 +67,5 @@ function civicrm_api3_rule_group_delete($params) { * API result array */ function civicrm_api3_rule_group_get($params) { - return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, TRUE, 'DedupeRuleGroup'); } diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index a7ce83160e..4f0674e884 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -320,7 +320,7 @@ function _civicrm_api3_get_DAO($name) { if ($name === 'MailingRecipients') { return 'CRM_Mailing_DAO_Recipients'; } - if ($name === 'AclRole') { + if ($name === 'AclRole' || $name === 'ACLRole') { return 'CRM_ACL_DAO_ACLEntityRole'; } // FIXME: DAO should be renamed CRM_SMS_DAO_SmsProvider @@ -1128,6 +1128,10 @@ function _civicrm_api3_custom_format_params($params, &$values, $extends, $entity * @param string $entity */ function _civicrm_api3_format_params_for_create(&$params, $entity) { + if (!$entity) { + return; + } + $entity = CRM_Core_DAO_AllCoreTables::convertEntityNameToCamel($entity); $nonGenericEntities = array_merge(['Contact'], CRM_Contact_BAO_ContactType::basicTypes(TRUE)); $customFieldEntities = array_diff_key(CRM_Core_SelectValues::customGroupExtends(), array_fill_keys($nonGenericEntities, 1)); @@ -1958,7 +1962,7 @@ function _civicrm_api_get_fields($entity, $unique = FALSE, &$params = []) { * @return array */ function _civicrm_api_get_custom_fields($entity, &$params) { - $entity = _civicrm_api_get_camel_name($entity); + $entity = CRM_Core_DAO_AllCoreTables::convertEntityNameToCamel($entity); if ($entity == 'Contact') { // Use sub-type if available, otherwise "NULL" to fetch from all contact types $entity = $params['contact_type'] ?? NULL; diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 57e3e13e9c..7dc1605552 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.49.4', + return array( 'version' => '5.50.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.json b/civicrm/composer.json index 51f89205f1..e2edf902b4 100644 --- a/civicrm/composer.json +++ b/civicrm/composer.json @@ -38,7 +38,7 @@ "include-path": ["vendor/tecnickcom"], "config": { "platform": { - "php": "7.2" + "php": "7.2.5" }, "allow-plugins": { "civicrm/composer-compile-plugin": true, @@ -47,7 +47,7 @@ } }, "require": { - "php": "~7.2 || ~8", + "php": "~7.2.5 || ~7.3 || ~8", "cache/integration-tests": "~0.17.0", "dompdf/dompdf" : "~1.2.1", "firebase/php-jwt": ">=3 <6", @@ -79,7 +79,7 @@ "pear/log": "1.13.3", "adrienrn/php-mimetyper": "0.2.2", "civicrm/composer-downloads-plugin": "^3.0", - "league/csv": "^9.2", + "league/csv": "^9.6", "league/oauth2-client": "^2.4", "league/oauth2-google": "^3.0", "tplaner/when": "~3.0.0", diff --git a/civicrm/composer.lock b/civicrm/composer.lock index f588180ec8..190c30fea3 100644 --- a/civicrm/composer.lock +++ b/civicrm/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4cb8d7de594faef8145b91723bc83f47", + "content-hash": "945c89fdfb2c4e96b7ae8b522a215c40", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -1252,31 +1252,34 @@ }, { "name": "league/csv", - "version": "9.2.1", + "version": "9.6.2", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "b574a7d8b28f1528e011d8652fb7d2e83410d4c9" + "reference": "f28da6e483bf979bac10e2add384c90ae9983e4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/b574a7d8b28f1528e011d8652fb7d2e83410d4c9", - "reference": "b574a7d8b28f1528e011d8652fb7d2e83410d4c9", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/f28da6e483bf979bac10e2add384c90ae9983e4e", + "reference": "f28da6e483bf979bac10e2add384c90ae9983e4e", "shasum": "" }, "require": { + "ext-json": "*", "ext-mbstring": "*", - "php": ">=7.0.10" + "php": ">=7.2.5" }, "require-dev": { "ext-curl": "*", - "friendsofphp/php-cs-fixer": "^2.12", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-phpunit": "^0.9.4", - "phpstan/phpstan-strict-rules": "^0.9.0", - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12.0", + "phpstan/phpstan-phpunit": "^0.12.0", + "phpstan/phpstan-strict-rules": "^0.12.0", + "phpunit/phpunit": "^8.5" }, "suggest": { + "ext-dom": "Required to use the XMLConverter and or the HTMLConverter classes", "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters" }, "type": "library", @@ -1305,24 +1308,31 @@ "role": "Developer" } ], - "description": "Csv data manipulation made easy in PHP", + "description": "CSV data manipulation made easy in PHP", "homepage": "http://csv.thephpleague.com", "keywords": [ + "convert", "csv", "export", "filter", "import", "read", + "transform", "write" ], "support": { "docs": "https://csv.thephpleague.com", - "forum": "https://groups.google.com/forum/#!forum/thephpleague", "issues": "https://github.com/thephpleague/csv/issues", "rss": "https://github.com/thephpleague/csv/releases.atom", "source": "https://github.com/thephpleague/csv" }, - "time": "2019-06-07T06:24:33+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2020-12-10T19:40:30+00:00" }, { "name": "league/oauth2-client", @@ -5077,13 +5087,13 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~7.2 || ~8", + "php": "~7.2.5 || ~7.3 || ~8", "ext-intl": "*", "ext-json": "*" }, "platform-dev": [], "platform-overrides": { - "php": "7.2" + "php": "7.2.5" }, "plugin-api-version": "2.2.0" } diff --git a/civicrm/css/civicrm.css b/civicrm/css/civicrm.css index 26c93d3075..58fb66bf88 100644 --- a/civicrm/css/civicrm.css +++ b/civicrm/css/civicrm.css @@ -3900,30 +3900,6 @@ span.crm-status-icon { border: 1px solid grey; } -/* search kit grid layout styling */ -.crm-search-display-grid-container { - display: grid; - grid-gap: 1em; - align-items: center; - justify-items: center; -} - -.crm-search-display-grid-layout-2 { - grid-template-columns: repeat(2, 1fr); -} - -.crm-search-display-grid-layout-3 { - grid-template-columns: repeat(3, 1fr); -} - -.crm-search-display-grid-layout-4 { - grid-template-columns: repeat(4, 1fr); -} - -.crm-search-display-grid-layout-5 { - grid-template-columns: repeat(5, 1fr); -} - /* Dedupe rules */ .crm-dedupe-rules-form-block-used div { max-width: 800px; diff --git a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php index 51cd1c151f..fb04981aaa 100644 --- a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php +++ b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php @@ -4,6 +4,7 @@ namespace Civi\AfformAdmin; use Civi\Api4\Entity; use Civi\Api4\Utils\CoreUtil; +use Civi\Core\Event\GenericHookEvent; use CRM_AfformAdmin_ExtensionUtil as E; class AfformAdminMeta { @@ -33,25 +34,6 @@ class AfformAdminMeta { ]; } - /** - * @param $entityName - * @return array|void - */ - public static function getAfformEntity($entityName) { - // Optimization: look here before scanning every other extension - global $civicrm_root; - $fileName = \CRM_Utils_File::addTrailingSlash($civicrm_root) . "ext/afform/admin/afformEntities/$entityName.php"; - if (is_file($fileName)) { - return include $fileName; - } - foreach (\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles() as $ext) { - $fileName = \CRM_Utils_File::addTrailingSlash(dirname($ext['filePath'])) . "afformEntities/$entityName.php"; - if (is_file($fileName)) { - return include $fileName; - } - } - } - /** * Get info about an api entity, with special handling for contact types * @param string $entityName @@ -148,138 +130,149 @@ class AfformAdminMeta { * * @return array */ - public static function getGuiSettings() { - $data = [ - 'entities' => [ + public static function getMetadata() { + $data = \Civi::cache('metadata')->get('afform_admin.metadata'); + if (!$data) { + $entities = [ '*' => [ 'label' => E::ts('Content Block'), 'icon' => 'fa-pencil-square-o', 'fields' => [], ], - ], - ]; - - // Explicitly load Contact and Custom entities because they do not have afformEntity files - $entities = Entity::get(TRUE) - ->addClause('OR', ['name', '=', 'Contact'], ['type', 'CONTAINS', 'CustomValue']) - ->execute()->indexBy('name'); - foreach ($entities as $name => $entity) { - $data['entities'][$name] = self::entityToAfformMeta($entity); - } - - $contactTypes = \CRM_Contact_BAO_ContactType::basicTypeInfo(); + ]; - // Call getFields on getFields to get input type labels - $inputTypeLabels = \Civi\Api4\Contact::getFields() - ->setLoadOptions(TRUE) - ->setAction('getFields') - ->addWhere('name', '=', 'input_type') - ->execute() - ->column('options')[0]; + // Explicitly load Contact and Custom entities because they do not have afformEntity files + $contactAndCustom = Entity::get(TRUE) + ->addClause('OR', ['name', '=', 'Contact'], ['type', 'CONTAINS', 'CustomValue']) + ->execute()->indexBy('name'); + foreach ($contactAndCustom as $name => $entity) { + $entities[$name] = self::entityToAfformMeta($entity); + } - // Scan all extensions for entities & input types - foreach (\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles() as $ext) { - $dir = \CRM_Utils_File::addTrailingSlash(dirname($ext['filePath'])); - if (is_dir($dir)) { - // Scan for entities - foreach (glob($dir . 'afformEntities/*.php') as $file) { - $entityInfo = include $file; - $entityName = basename($file, '.php'); - $apiInfo = self::getApiEntity($entityInfo['entity'] ?? $entityName); - // Skip disabled contact types & entities from disabled components/extensions - if (!$apiInfo) { - continue; - } - $entityInfo += $apiInfo; - $data['entities'][$entityName] = $entityInfo; - } - // Scan for input types, use label from getFields if available - foreach (glob($dir . 'ang/afGuiEditor/inputType/*.html') as $file) { - $name = basename($file, '.html'); - $data['inputType'][] = [ - 'name' => $name, - 'label' => $inputTypeLabels[$name] ?? E::ts($name), - ]; - } + // Call getFields on getFields to get input type labels + $inputTypeLabels = \Civi\Api4\Contact::getFields() + ->setLoadOptions(TRUE) + ->setAction('getFields') + ->addWhere('name', '=', 'input_type') + ->execute() + ->column('options')[0]; + // Scan for input types, use label from getFields if available + $inputTypes = []; + foreach (glob(__DIR__ . '/../../ang/afGuiEditor/inputType/*.html') as $file) { + $name = basename($file, '.html'); + $inputTypes[] = [ + 'name' => $name, + 'label' => $inputTypeLabels[$name] ?? E::ts($name), + ]; } - } - // Todo: add method for extensions to define other elements - $data['elements'] = [ - 'container' => [ - 'title' => E::ts('Container'), - 'element' => [ - '#tag' => 'div', - 'class' => 'af-container', - '#children' => [], + // Static elements + $elements = [ + 'container' => [ + 'title' => E::ts('Container'), + 'element' => [ + '#tag' => 'div', + 'class' => 'af-container', + '#children' => [], + ], ], - ], - 'text' => [ - 'title' => E::ts('Text box'), - 'element' => [ - '#tag' => 'p', - 'class' => 'af-text', - '#children' => [ - ['#text' => E::ts('Enter text')], + 'text' => [ + 'title' => E::ts('Text box'), + 'element' => [ + '#tag' => 'p', + 'class' => 'af-text', + '#children' => [ + ['#text' => E::ts('Enter text')], + ], ], ], - ], - 'markup' => [ - 'title' => E::ts('Rich content'), - 'element' => [ - '#tag' => 'div', - 'class' => 'af-markup', - '#markup' => FALSE, + 'markup' => [ + 'title' => E::ts('Rich content'), + 'element' => [ + '#tag' => 'div', + 'class' => 'af-markup', + '#markup' => FALSE, + ], ], - ], - 'submit' => [ - 'title' => E::ts('Submit Button'), - 'element' => [ - '#tag' => 'button', - 'class' => 'af-button btn btn-primary', - 'crm-icon' => 'fa-check', - 'ng-click' => 'afform.submit()', - '#children' => [ - ['#text' => E::ts('Submit')], + 'submit' => [ + 'title' => E::ts('Submit Button'), + 'afform_type' => ['form'], + 'element' => [ + '#tag' => 'button', + 'class' => 'af-button btn btn-primary', + 'crm-icon' => 'fa-check', + 'ng-click' => 'afform.submit()', + '#children' => [ + ['#text' => E::ts('Submit')], + ], ], ], - ], - 'fieldset' => [ - 'title' => E::ts('Fieldset'), - 'element' => [ - '#tag' => 'fieldset', - 'af-fieldset' => NULL, - 'class' => 'af-container', - 'af-title' => E::ts('Enter title'), - '#children' => [], + 'reset' => [ + 'title' => E::ts('Reset Button'), + 'afform_type' => ['form', 'search'], + 'element' => [ + '#tag' => 'button', + 'class' => 'af-button btn btn-warning', + 'type' => 'reset', + 'crm-icon' => 'fa-undo', + '#children' => [ + ['#text' => E::ts('Reset')], + ], + ], ], - ], - ]; + 'fieldset' => [ + 'title' => E::ts('Fieldset'), + 'afform_type' => ['form'], + 'element' => [ + '#tag' => 'fieldset', + 'af-fieldset' => NULL, + 'class' => 'af-container', + 'af-title' => E::ts('Enter title'), + '#children' => [], + ], + ], + ]; - $data['styles'] = [ - 'default' => E::ts('Default'), - 'primary' => E::ts('Primary'), - 'success' => E::ts('Success'), - 'info' => E::ts('Info'), - 'warning' => E::ts('Warning'), - 'danger' => E::ts('Danger'), - ]; + $styles = [ + 'default' => E::ts('Default'), + 'primary' => E::ts('Primary'), + 'success' => E::ts('Success'), + 'info' => E::ts('Info'), + 'warning' => E::ts('Warning'), + 'danger' => E::ts('Danger'), + ]; - $data['permissions'] = []; - $perms = \Civi\Api4\Permission::get() - ->addWhere('group', 'IN', ['afformGeneric', 'const', 'civicrm', 'cms']) - ->addWhere('is_active', '=', 1) - ->setOrderBy(['title' => 'ASC']) - ->execute(); - foreach ($perms as $perm) { - $data['permissions'][] = [ - 'id' => $perm['name'], - 'text' => $perm['title'], - 'description' => $perm['description'] ?? NULL, + $perms = \Civi\Api4\Permission::get() + ->addWhere('group', 'IN', ['afformGeneric', 'const', 'civicrm', 'cms']) + ->addWhere('is_active', '=', 1) + ->setOrderBy(['title' => 'ASC']) + ->execute(); + $permissions = []; + foreach ($perms as $perm) { + $permissions[] = [ + 'id' => $perm['name'], + 'text' => $perm['title'], + 'description' => $perm['description'] ?? NULL, + ]; + } + + $dateRanges = \CRM_Utils_Array::makeNonAssociative(\CRM_Core_OptionGroup::values('relative_date_filters'), 'id', 'label'); + $dateRanges = array_merge([['id' => '{}', 'label' => E::ts('Choose Date Range')]], $dateRanges); + + // Allow data to be modified by event listeners + $data = [ + // @see afform-entity-php/mixin.php + 'entities' => &$entities, + 'inputTypes' => &$inputTypes, + 'elements' => &$elements, + 'styles' => &$styles, + 'permissions' => &$permissions, + 'dateRanges' => &$dateRanges, ]; + $event = GenericHookEvent::create($data); + \Civi::dispatcher()->dispatch('civi.afform_admin.metadata', $event); + \Civi::cache('metadata')->set('afform_admin.metadata', $data); } - $dateRanges = \CRM_Utils_Array::makeNonAssociative(\CRM_Core_OptionGroup::values('relative_date_filters'), 'id', 'label'); - $data['dateRanges'] = array_merge([['id' => '{}', 'label' => E::ts('Choose Date Range')]], $dateRanges); return $data; } diff --git a/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php b/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php index e1dba58065..3c0e68ac55 100644 --- a/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php +++ b/civicrm/ext/afform/admin/Civi/Api4/Action/Afform/LoadAdminData.php @@ -135,7 +135,7 @@ class LoadAdminData extends \Civi\Api4\Generic\AbstractAction { if ($info['definition']['type'] === 'form') { if ($newForm) { $entities[] = $this->entity; - $defaultEntity = AfformAdminMeta::getAfformEntity($this->entity); + $defaultEntity = AfformAdminMeta::getMetadata()['entities'][$this->entity] ?? []; if (!empty($defaultEntity['boilerplate'])) { $scanBlocks($defaultEntity['boilerplate']); } diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor.ang.php b/civicrm/ext/afform/admin/ang/afGuiEditor.ang.php index c792ee0d64..f2953b222e 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor.ang.php +++ b/civicrm/ext/afform/admin/ang/afGuiEditor.ang.php @@ -9,7 +9,7 @@ return [ 'css' => ['ang/afGuiEditor.css'], 'partials' => ['ang/afGuiEditor'], 'requires' => ['crmUi', 'crmUtil', 'dialogService', 'api4', 'crmMonaco', 'ui.sortable'], - 'settingsFactory' => ['Civi\AfformAdmin\AfformAdminMeta', 'getGuiSettings'], + 'settingsFactory' => ['Civi\AfformAdmin\AfformAdminMeta', 'getMetadata'], 'basePages' => [], 'exports' => [ 'af-gui-editor' => 'E', diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js index f99ca04689..e7c010e10a 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js @@ -370,15 +370,17 @@ this.getSortableOptions = function(entityName) { if (!sortableOptions[entityName + '']) { sortableOptions[entityName + ''] = { - helper: 'clone', appendTo: '#afGuiEditor-canvas-body > af-gui-container', containment: '#afGuiEditor-canvas-body', update: editor.onDrop, items: '> div:not(.disabled)', connectWith: '#afGuiEditor-canvas ' + (entityName ? '[data-entity="' + entityName + '"] > ' : '') + '[ui-sortable]', placeholder: 'af-gui-dropzone', - tolerance: 'pointer', - scrollSpeed: 8 + scrollSpeed: 8, + helper: function(e, $el) { + // Prevent draggable item from being too large for the drop zones. + return $el.clone().css({width: '50px', height: '20px'}); + } }; } return sortableOptions[entityName + '']; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js index 001a580b46..f8a051f675 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js @@ -122,7 +122,9 @@ $scope.elementList.length = 0; $scope.elementTitles.length = 0; _.each(afGui.meta.elements, function(element, name) { - if (!search || _.contains(name, search) || _.contains(element.title.toLowerCase(), search)) { + if ( + (!element.afform_type || _.contains(element.afform_type, 'form')) && + (!search || _.contains(name, search) || _.contains(element.title.toLowerCase(), search))) { var node = _.cloneDeep(element.element); if (name === 'fieldset') { if (!ctrl.editor.allowEntityConfig) { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js index 0247479f76..d6f93f6c07 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js @@ -157,11 +157,11 @@ $scope.elementList.length = 0; $scope.elementTitles.length = 0; _.each(afGui.meta.elements, function(element, name) { - if (!search || _.contains(name, search) || _.contains(element.title.toLowerCase(), search)) { + if ( + (!element.afform_type || _.contains(element.afform_type, 'search')) && + (!search || _.contains(name, search) || _.contains(element.title.toLowerCase(), search)) + ) { var node = _.cloneDeep(element.element); - if (name === 'fieldset') { - return; - } $scope.elementList.push(node); $scope.elementTitles.push(element.title); } diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js index 4942691352..c59cc898ca 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js @@ -46,9 +46,12 @@ connectWith: '[ui-sortable]', cancel: 'input,textarea,button,select,option,a,.dropdown-menu', placeholder: 'af-gui-dropzone', - tolerance: 'pointer', scrollSpeed: 8, - containment: '#afGuiEditor-canvas-body' + containment: '#afGuiEditor-canvas-body', + helper: function(e, $el) { + // Prevent draggable item from being too large for the drop zones. + return $el.clone().css({width: '50px', height: '20px'}); + } }; $scope.isSelectedFieldset = function(entityName) { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js index f740d3d3f6..0102c32e9b 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js @@ -31,7 +31,7 @@ this.$onInit = function() { ctrl.hasDefaultValue = !!getSet('afform_default'); ctrl.fieldDefn = angular.extend({}, ctrl.getDefn(), ctrl.node.defn); - ctrl.inputTypes = _.transform(_.cloneDeep(afGui.meta.inputType), function(inputTypes, type) { + ctrl.inputTypes = _.transform(_.cloneDeep(afGui.meta.inputTypes), function(inputTypes, type) { if (inputTypeCanBe(type.name)) { // Change labels for EntityRef fields if (ctrl.getDefn().input_type === 'EntityRef') { diff --git a/civicrm/ext/afform/admin/info.xml b/civicrm/ext/afform/admin/info.xml index 3ad8e4d904..a259b921a9 100644 --- a/civicrm/ext/afform/admin/info.xml +++ b/civicrm/ext/afform/admin/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>beta</develStage> <compatibility> - <ver>5.23</ver> + <ver>5.50</ver> </compatibility> <comments>Form Builder provides a UI to administer and edit forms. It is an optional admin tool and not required for the forms to function.</comments> <requires> @@ -33,5 +33,6 @@ <mixin>ang-php@1.0.0</mixin> <mixin>menu-xml@1.0.0</mixin> <mixin>mgd-php@1.0.0</mixin> + <mixin>afform-entity-php@1.0.0</mixin> </mixins> </extension> diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Revert.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Revert.php index 272d02d406..0fbfb399d7 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Revert.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Revert.php @@ -3,6 +3,7 @@ namespace Civi\Api4\Action\Afform; use Civi\Api4\Generic\Result; +use CRM_Afform_ExtensionUtil as E; /** * @inheritDoc @@ -32,8 +33,7 @@ class Revert extends \Civi\Api4\Generic\BasicBatchAction { _afform_clear(); if ($this->flushManaged) { - // FIXME: more targeted reconciliation - \CRM_Core_ManagedEntities::singleton()->reconcile(); + \CRM_Core_ManagedEntities::singleton()->reconcile(E::LONG_NAME); } if ($this->flushMenu) { \CRM_Core_Menu::store(); diff --git a/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php b/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php index 286ca52c3e..0d109351af 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php +++ b/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php @@ -2,6 +2,8 @@ namespace Civi\Api4\Utils; +use CRM_Afform_ExtensionUtil as E; + /** * Class AfformSaveTrait * @package Civi\Api4\Action\Afform @@ -70,8 +72,7 @@ trait AfformSaveTrait { $isChanged('is_dashlet') || (!empty($meta['is_dashlet']) && $isChanged('title')) ) { - // FIXME: more targeted reconciliation - \CRM_Core_ManagedEntities::singleton()->reconcile(); + \CRM_Core_ManagedEntities::singleton()->reconcile(E::LONG_NAME); } // Right now, permission-checks are completely on-demand. diff --git a/civicrm/ext/afform/core/afform.php b/civicrm/ext/afform/core/afform.php index aa7834d2ec..1fdb6bd9ff 100644 --- a/civicrm/ext/afform/core/afform.php +++ b/civicrm/ext/afform/core/afform.php @@ -125,7 +125,10 @@ function afform_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed */ -function afform_civicrm_managed(&$entities) { +function afform_civicrm_managed(&$entities, $modules) { + if ($modules && !in_array(E::LONG_NAME, $modules, TRUE)) { + return; + } /** @var \CRM_Afform_AfformScanner $scanner */ if (\Civi::container()->has('afform_scanner')) { $scanner = \Civi::service('afform_scanner'); diff --git a/civicrm/ext/afform/core/info.xml b/civicrm/ext/afform/core/info.xml index f51907e668..e129889ddb 100644 --- a/civicrm/ext/afform/core/info.xml +++ b/civicrm/ext/afform/core/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>beta</develStage> <compatibility> - <ver>5.23</ver> + <ver>5.50</ver> </compatibility> <comments>The Form Core extension is required to use any dynamic form. To administer and edit forms, also install the Form Builder extension.</comments> <civix> diff --git a/civicrm/ext/afform/html/info.xml b/civicrm/ext/afform/html/info.xml index 6184ad2fe4..98189cd9e9 100644 --- a/civicrm/ext/afform/html/info.xml +++ b/civicrm/ext/afform/html/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>alpha</develStage> <compatibility> - <ver>5.23</ver> + <ver>5.50</ver> </compatibility> <requires> <ext>org.civicrm.afform</ext> diff --git a/civicrm/ext/afform/mock/info.xml b/civicrm/ext/afform/mock/info.xml index 24e44887b4..2ecd79900c 100644 --- a/civicrm/ext/afform/mock/info.xml +++ b/civicrm/ext/afform/mock/info.xml @@ -12,13 +12,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-09</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>alpha</develStage> <compatibility> - <ver>5.23</ver> + <ver>5.50</ver> </compatibility> <requires> <ext>org.civicrm.afform</ext> diff --git a/civicrm/ext/authx/authx.php b/civicrm/ext/authx/authx.php index 220be9577a..01642b67da 100644 --- a/civicrm/ext/authx/authx.php +++ b/civicrm/ext/authx/authx.php @@ -13,7 +13,7 @@ Civi::dispatcher()->addListener('civi.invoke.auth', function($e) { return (new \Civi\Authx\Authenticator())->auth($e, ['flow' => 'xheader', 'cred' => $_SERVER['HTTP_X_CIVI_AUTH'], 'siteKey' => $siteKey]); } - if (!empty($_SERVER['HTTP_AUTHORIZATION'])) { + if (!empty($_SERVER['HTTP_AUTHORIZATION']) && !empty(Civi::settings()->get('authx_header_cred'))) { return (new \Civi\Authx\Authenticator())->auth($e, ['flow' => 'header', 'cred' => $_SERVER['HTTP_AUTHORIZATION'], 'siteKey' => $siteKey]); } @@ -138,6 +138,7 @@ function authx_civicrm_config(&$config) { */ function authx_civicrm_install() { _authx_civix_civicrm_install(); + } /** @@ -165,6 +166,13 @@ function authx_civicrm_uninstall() { */ function authx_civicrm_enable() { _authx_civix_civicrm_enable(); + // If the system is already using HTTP `Authorization:` headers before installation/re-activation, then + // it's probably an extra/independent layer of security. + // Only activate support for `Authorization:` if this looks like a clean/amenable environment. + // @link https://github.com/civicrm/civicrm-core/pull/22837 + if (empty($_SERVER['HTTP_AUTHORIZATION']) && NULL === Civi::settings()->getExplicit('authx_header_cred')) { + Civi::settings()->set('authx_header_cred', ['jwt', 'api_key']); + } } /** diff --git a/civicrm/ext/authx/info.xml b/civicrm/ext/authx/info.xml index 026712e1d8..d2294aa678 100644 --- a/civicrm/ext/authx/info.xml +++ b/civicrm/ext/authx/info.xml @@ -2,25 +2,25 @@ <extension key="authx" type="module"> <file>authx</file> <name>AuthX</name> - <description>Extended authentication module</description> + <description>Extended authentication services</description> <license>AGPL-3.0</license> <maintainer> <author>Tim Otten</author> <email>totten@civicrm.org</email> </maintainer> <urls> - <url desc="Main Extension Page">http://FIXME</url> - <url desc="Documentation">http://FIXME</url> - <url desc="Support">http://FIXME</url> + <url desc="Documentation">https://docs.civicrm.org/dev/en/latest/framework/authx/</url> + <url desc="Chat">https://chat.civicrm.org/civicrm/channels/dev</url> + <url desc="Issues">https://lab.civicrm.org/dev/core/-/issues</url> <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-02-11</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>alpha</develStage> <compatibility> - <ver>5.0</ver> + <ver>5.50</ver> </compatibility> - <comments>This is a new, undeveloped module</comments> + <comments>AuthX enables remote applications to connect to CiviCRM. Use it to enable and disable different forms of authentication (such as username-password, API key, and/or JWT).</comments> <classloader> <psr4 prefix="Civi\" path="Civi"/> </classloader> diff --git a/civicrm/ext/authx/settings/authx.setting.php b/civicrm/ext/authx/settings/authx.setting.php index 67d20f82a2..6beacd6722 100644 --- a/civicrm/ext/authx/settings/authx.setting.php +++ b/civicrm/ext/authx/settings/authx.setting.php @@ -94,7 +94,7 @@ $_authx_settings = function() { $s['authx_legacyrest_cred']['default'] = ['jwt', 'api_key']; $s['authx_legacyrest_user']['default'] = 'require'; $s['authx_param_cred']['default'] = ['jwt', 'api_key']; - $s['authx_header_cred']['default'] = ['jwt', 'api_key']; + $s['authx_header_cred']['default'] = []; /* @see \authx_civicrm_install() */ $s['authx_xheader_cred']['default'] = ['jwt', 'api_key']; $s['authx_pipe_cred']['default'] = ['jwt', 'api_key']; diff --git a/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php b/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php index 3b63dda50a..b446671e1f 100644 --- a/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php +++ b/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php @@ -128,7 +128,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf // Phase 1: Request fails if this credential type is not enabled \Civi::settings()->set("authx_{$flowType}_cred", []); $response = $http->send($request); - $this->assertFailedDueToProhibition($response); + $this->assertNotAuthenticated($flowType === 'header' ? 'anon' : 'prohibit', $response); // Phase 2: Request succeeds if this credential type is enabled \Civi::settings()->set("authx_{$flowType}_cred", [$credType]); @@ -159,7 +159,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf // Phase 1: Request fails if this credential type is not enabled \Civi::settings()->set("authx_{$flowType}_cred", []); $response = $http->send($request); - $this->assertFailedDueToProhibition($response); + $this->assertNotAuthenticated($flowType === 'header' ? 'anon' : 'prohibit', $response); // Phase 2: Request succeeds if this credential type is enabled \Civi::settings()->set("authx_{$flowType}_cred", [$credType]); @@ -365,6 +365,59 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf $this->assertMyContact($this->getDemoCID(), $this->getDemoUID(), 'api_key', 'login', $response); } + /** + * Suppose a deployment has two layers of authorization: + * + * (1) a generic/site-wide HTTP restriction (perhaps enforced by a reverse proxy) + * (2) anything/everything else (CMS/login-form/parameter/X-Civi-Auth stuff). + * + * Layer (1) has an `Authorization:` header that should be ignored by `authx`. + * + * This test submits both layer (1) and layer (2) credentials and ensures that authx respects + * the layer (2). + */ + public function testIgnoredHeaderAuthorization() { + // We may submit some other credential - it will be used. + $flowType = 'param'; + $credType = 'api_key'; + + \Civi::settings()->set("authx_header_cred", []); + \Civi::settings()->set("authx_{$flowType}_cred", [$credType]); + + $http = $this->createGuzzle(['http_errors' => FALSE]); + + // We submit both the irrelevant `Authorization:` and the relevant `?_authx=...` (DemoCID). + $request = $this->applyAuth($this->requestMyContact(), 'api_key', 'header', $this->getLebowskiCID()); + $request = $this->applyAuth($request, $credType, $flowType, $this->getDemoCID()); + // $request = $request->withAddedHeader('Authorization', $irrelevantAuthorization); + $response = $http->send($request); + $this->assertMyContact($this->getDemoCID(), $this->getDemoUID(), $credType, $flowType, $response); + if (!in_array('sendsExcessCookies', $this->quirks)) { + $this->assertNoCookies($response); + } + } + + /** + * Similar to testIgnoredHeaderAuthorization(), but the Civi/CMS user is anonymous. + */ + public function testIgnoredHeaderAuthorization_anon() { + $http = $this->createGuzzle(['http_errors' => FALSE]); + + /** @var \Psr\Http\Message\RequestInterface $request */ + + // Variant 1: The `Authorization:` header is ignored (even if the content is totally fake/inauthentic). + \Civi::settings()->set("authx_header_cred", []); + $request = $this->requestMyContact()->withAddedHeader('Authorization', 'Basic ' . base64_encode("not:real")); + $response = $http->send($request); + $this->assertAnonymousContact($response); + + // Variant 2: The `Authorization:` header is ignored (even if the content is sorta-real-ish for LebowskiCID). + \Civi::settings()->set("authx_header_cred", []); + $request = $this->applyAuth($this->requestMyContact(), 'api_key', 'header', $this->getLebowskiCID()); + $response = $http->send($request); + $this->assertAnonymousContact($response); + } + /** * This consumer intends to make stateless requests with a handful of different identities, * but their browser happens to be cookie-enabled. Ensure that identities do not leak between requests. @@ -429,6 +482,8 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \GuzzleHttp\Exception\GuzzleException */ public function testJwtMiddleware() { + \Civi::settings()->revert("authx_param_cred"); + // HTTP GET with a specific user. Choose flow automatically. $response = $this->createGuzzle()->get('civicrm/authx/id', [ 'authx_user' => $GLOBALS['_CV']['DEMO_USER'], @@ -740,6 +795,28 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf return NULL; } + /** + * Assert that a request was not authenticated. + * + * @param string $mode + * Expect that the 'prohibited' or 'anon' + * @param \Psr\Http\Message\ResponseInterface $response + */ + private function assertNotAuthenticated(string $mode, $response) { + switch ($mode) { + case 'anon': + $this->assertAnonymousContact($response); + break; + + case 'prohibit': + $this->assertFailedDueToProhibition($response); + break; + + default: + throw new \RuntimeException("Invalid option: mode=$mode"); + } + } + /** * @param \Psr\Http\Message\ResponseInterface $response */ @@ -777,17 +854,6 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf return $this; } - /** - * @param $regexp - * @param \Psr\Http\Message\ResponseInterface $response - */ - private function assertBodyRegexp($regexp, $response = NULL) { - $response = $this->resolveResponse($response); - $this->assertRegexp($regexp, (string) $response->getBody(), - 'Response body does not match pattern' . $this->formatFailure($response)); - return $this; - } - /** * @return int * @throws \CiviCRM_API3_Exception diff --git a/civicrm/ext/civicrm_admin_ui/info.xml b/civicrm/ext/civicrm_admin_ui/info.xml index 0a24ac5079..2f2d433870 100644 --- a/civicrm/ext/civicrm_admin_ui/info.xml +++ b/civicrm/ext/civicrm_admin_ui/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2022-01-02</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>alpha</develStage> <compatibility> - <ver>5.47</ver> + <ver>5.50</ver> </compatibility> <requires> <ext>org.civicrm.search_kit</ext> diff --git a/civicrm/ext/civigrant/info.xml b/civicrm/ext/civigrant/info.xml index 8befa4634b..bc476e4d48 100644 --- a/civicrm/ext/civigrant/info.xml +++ b/civicrm/ext/civigrant/info.xml @@ -13,10 +13,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-11-11</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.47</ver> + <ver>5.50</ver> </compatibility> <comments>CiviGrant was originally a core component before migrating to an extension</comments> <requires> diff --git a/civicrm/ext/civigrant/managed/OptionValue_cg_extends_objects_grant.mgd.php b/civicrm/ext/civigrant/managed/OptionValue_cg_extends_objects_grant.mgd.php new file mode 100644 index 0000000000..3ce34ab566 --- /dev/null +++ b/civicrm/ext/civigrant/managed/OptionValue_cg_extends_objects_grant.mgd.php @@ -0,0 +1,24 @@ +<?php +use CRM_Grant_ExtensionUtil as E; + +// This enables custom fields for Grant entities +return [ + [ + 'name' => 'cg_extend_objects:Grant', + 'entity' => 'OptionValue', + 'cleanup' => 'always', + 'update' => 'always', + 'params' => [ + 'version' => 4, + 'values' => [ + 'option_group_id.name' => 'cg_extend_objects', + 'label' => E::ts('Grants'), + 'value' => 'Grant', + 'name' => 'civicrm_grant', + 'is_reserved' => TRUE, + 'is_active' => TRUE, + 'grouping' => 'grant_type_id', + ], + ], + ], +]; diff --git a/civicrm/ext/ckeditor4/info.xml b/civicrm/ext/ckeditor4/info.xml index 78919477f2..3ec625af26 100644 --- a/civicrm/ext/ckeditor4/info.xml +++ b/civicrm/ext/ckeditor4/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">https://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-05-23</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.39</ver> + <ver>5.50</ver> </compatibility> <comments>This is the version of CKEditor that originally shipped with CiviCRM core</comments> <classloader> diff --git a/civicrm/ext/contributioncancelactions/info.xml b/civicrm/ext/contributioncancelactions/info.xml index 6ce07c7a1f..024b5ccfc7 100644 --- a/civicrm/ext/contributioncancelactions/info.xml +++ b/civicrm/ext/contributioncancelactions/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-12</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.32</ver> + <ver>5.50</ver> </compatibility> <comments>This code has been moved from core to a separate extension in 5.32. Note that if you disable it failed or cancelled contributions will not cause related memberships and participant records to be updated</comments> <classloader> diff --git a/civicrm/ext/eventcart/info.xml b/civicrm/ext/eventcart/info.xml index 7cdf60e073..b9a2c59512 100644 --- a/civicrm/ext/eventcart/info.xml +++ b/civicrm/ext/eventcart/info.xml @@ -13,13 +13,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-03</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.29</ver> + <ver>5.50</ver> </compatibility> <classloader> <psr4 prefix="Civi\" path="Civi"/> diff --git a/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php b/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php index 7dc7d233b5..a36c28c5ec 100644 --- a/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php +++ b/civicrm/ext/ewaysingle/CRM/Core/Payment/eWAY.php @@ -140,14 +140,13 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { public function doPayment(&$params, $component = 'contribute') { $propertyBag = \Civi\Payment\PropertyBag::cast($params); $this->_component = $component; - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + $result = $this->setStatusPaymentPending([]); // If we have a $0 amount, skip call to processor and set payment_status to Completed. // Conceivably a processor might override this - perhaps for setting up a token - but we don't // have an example of that at the moment. if ($propertyBag->getAmount() == 0) { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); return $result; } @@ -335,11 +334,9 @@ class CRM_Core_Payment_eWAY extends CRM_Core_Payment { $beaglestatus = ': ' . $beaglestatus; } $params['trxn_result_code'] = $eWAYResponse->Status() . $beaglestatus; - $params['trxn_id'] = $eWAYResponse->TransactionNumber(); - $params['payment_status_id'] = array_search('Completed', $statuses); - $params['payment_status'] = 'Completed'; - - return $params; + $result['trxn_id'] = $eWAYResponse->TransactionNumber(); + $result = $this->setStatusPaymentCompleted($result); + return $result; } /** diff --git a/civicrm/ext/ewaysingle/info.xml b/civicrm/ext/ewaysingle/info.xml index 66904f32d8..758c571ef2 100644 --- a/civicrm/ext/ewaysingle/info.xml +++ b/civicrm/ext/ewaysingle/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-07</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.31</ver> + <ver>5.50</ver> </compatibility> <comments>This is an extension to contain the eWAY Single Currency Payment Processor</comments> <classloader> diff --git a/civicrm/ext/financialacls/info.xml b/civicrm/ext/financialacls/info.xml index 3cacc40a19..96d8372707 100644 --- a/civicrm/ext/financialacls/info.xml +++ b/civicrm/ext/financialacls/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-27</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.30</ver> + <ver>5.50</ver> </compatibility> <tags> <tag>mgmt:hidden</tag> diff --git a/civicrm/ext/flexmailer/info.xml b/civicrm/ext/flexmailer/info.xml index dd0a188df0..6125b1ee73 100644 --- a/civicrm/ext/flexmailer/info.xml +++ b/civicrm/ext/flexmailer/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-08-05</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <comments> FlexMailer is an email delivery engine which replaces the internal guts @@ -23,7 +23,7 @@ to provide richer email features. </comments> <compatibility> - <ver>5.29</ver> + <ver>5.50</ver> </compatibility> <classloader> <psr4 prefix="Civi\FlexMailer\" path="src"/> diff --git a/civicrm/ext/greenwich/info.xml b/civicrm/ext/greenwich/info.xml index ae2a1ba504..ac2ee38cde 100644 --- a/civicrm/ext/greenwich/info.xml +++ b/civicrm/ext/greenwich/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-07-21</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.31</ver> + <ver>5.50</ver> </compatibility> <classloader> <psr4 prefix="Civi\" path="Civi"/> diff --git a/civicrm/ext/legacycustomsearches/info.xml b/civicrm/ext/legacycustomsearches/info.xml index 2332bbf483..2fdf832377 100644 --- a/civicrm/ext/legacycustomsearches/info.xml +++ b/civicrm/ext/legacycustomsearches/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-07-25</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <tags> <tag>mgmt:hidden</tag> </tags> <compatibility> - <ver>5.40</ver> + <ver>5.50</ver> </compatibility> <comments>This is hidden on install to give extensions that require it time to add it to their requires and to allow us to get it out of GroupContact load</comments> <classloader> diff --git a/civicrm/ext/message_admin/info.xml b/civicrm/ext/message_admin/info.xml index ab232a0338..e632c9996d 100644 --- a/civicrm/ext/message_admin/info.xml +++ b/civicrm/ext/message_admin/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-06-12</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>alpha</develStage> <compatibility> - <ver>5.43</ver> + <ver>5.50</ver> </compatibility> <requires> <ext>org.civicrm.afform</ext> diff --git a/civicrm/ext/oauth-client/info.xml b/civicrm/ext/oauth-client/info.xml index 0af2d90758..2af18503ce 100644 --- a/civicrm/ext/oauth-client/info.xml +++ b/civicrm/ext/oauth-client/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-10-23</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.38</ver> + <ver>5.50</ver> </compatibility> <requires> <ext version="~4.5">org.civicrm.afform</ext> diff --git a/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php b/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php index 2146fbfa8e..acd64bb021 100644 --- a/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php +++ b/civicrm/ext/payflowpro/CRM/Core/Payment/PayflowPro.php @@ -70,14 +70,13 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { public function doPayment(&$params, $component = 'contribute') { $propertyBag = \Civi\Payment\PropertyBag::cast($params); $this->_component = $component; - $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate'); + $result = $this->setStatusPaymentPending([]); // If we have a $0 amount, skip call to processor and set payment_status to Completed. // Conceivably a processor might override this - perhaps for setting up a token - but we don't // have an example of that at the moment. if ($propertyBag->getAmount() == 0) { - $result['payment_status_id'] = array_search('Completed', $statuses); - $result['payment_status'] = 'Completed'; + $result = $this->setStatusPaymentCompleted($result); return $result; } @@ -295,22 +294,22 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { /* * Payment successfully sent to gateway - process the response now */ - $result = strstr($responseData, 'RESULT'); - if (empty($result)) { + $responseResult = strstr($responseData, 'RESULT'); + if (empty($responseResult)) { throw new PaymentProcessorException('No RESULT code from PayPal.', 9016); } $nvpArray = []; - while (strlen($result)) { + while (strlen($responseResult)) { // name - $keypos = strpos($result, '='); - $keyval = substr($result, 0, $keypos); + $keypos = strpos($responseResult, '='); + $keyval = substr($responseResult, 0, $keypos); // value - $valuepos = strpos($result, '&') ? strpos($result, '&') : strlen($result); - $valval = substr($result, $keypos + 1, $valuepos - $keypos - 1); + $valuepos = strpos($responseResult, '&') ? strpos($responseResult, '&') : strlen($responseResult); + $valval = substr($responseResult, $keypos + 1, $valuepos - $keypos - 1); // decoding the respose $nvpArray[$keyval] = $valval; - $result = substr($result, $valuepos + 1, strlen($result)); + $responseResult = substr($responseResult, $valuepos + 1, strlen($responseResult)); } // get the result code to validate. $result_code = $nvpArray['RESULT']; @@ -337,7 +336,7 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { * CiviCRM as part of the transact * but not further processing is done. Business rules would need to be defined *******************************************************/ - $params['trxn_id'] = ($nvpArray['PNREF'] ?? '') . ($nvpArray['TRXPNREF'] ?? ''); + $result['trxn_id'] = ($nvpArray['PNREF'] ?? '') . ($nvpArray['TRXPNREF'] ?? ''); //'trxn_id' is varchar(255) field. returned value is length 12 $params['trxn_result_code'] = $nvpArray['AUTHCODE'] . "-Cvv2:" . $nvpArray['CVV2MATCH'] . "-avs:" . $nvpArray['AVSADDR']; @@ -345,9 +344,8 @@ class CRM_Core_Payment_PayflowPro extends CRM_Core_Payment { $params['recur_trxn_id'] = $nvpArray['PROFILEID']; //'trxn_id' is varchar(255) field. returned value is length 12 } - $params['payment_status_id'] = array_search('Completed', $statuses); - $params['payment_status'] = 'Completed'; - return $params; + $result = $this->setStatusPaymentCompleted($result); + return $result; case 1: throw new PaymentProcessorException('There is a payment processor configuration problem. This is usually due to invalid account information or ip restrictions on the account. You can verify ip restriction by logging // into Manager. See Service Settings >> Allowed IP Addresses. ', 9003); diff --git a/civicrm/ext/payflowpro/info.xml b/civicrm/ext/payflowpro/info.xml index 9e8e753020..60014e716e 100644 --- a/civicrm/ext/payflowpro/info.xml +++ b/civicrm/ext/payflowpro/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-13</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.0</ver> + <ver>5.50</ver> </compatibility> <comments>This extension is extraction of the original Core Payflow Pro Payment Processor</comments> <classloader> diff --git a/civicrm/ext/recaptcha/info.xml b/civicrm/ext/recaptcha/info.xml index 6e36ad1615..e80c26d180 100644 --- a/civicrm/ext/recaptcha/info.xml +++ b/civicrm/ext/recaptcha/info.xml @@ -13,13 +13,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-04-03</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.37</ver> + <ver>5.50</ver> </compatibility> <classloader> <psr4 prefix="Civi\" path="Civi"/> diff --git a/civicrm/ext/search_kit/CRM/Search/BAO/SearchSegment.php b/civicrm/ext/search_kit/CRM/Search/BAO/SearchSegment.php new file mode 100644 index 0000000000..68fe706327 --- /dev/null +++ b/civicrm/ext/search_kit/CRM/Search/BAO/SearchSegment.php @@ -0,0 +1,31 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Search Segment BAO + */ +class CRM_Search_BAO_SearchSegment extends CRM_Search_DAO_SearchSegment { + + /** + * Retrieve pseudoconstant options for $this->entity_name field + * @return array + */ + public static function getDAOEntityOptions() { + return Civi\Api4\Entity::get(FALSE) + ->addSelect('name', 'title_plural') + ->addOrderBy('title_plural') + ->addWhere('type', 'CONTAINS', 'DAOEntity') + ->execute() + ->indexBy('name') + ->column('title_plural'); + } + +} diff --git a/civicrm/ext/search_kit/CRM/Search/DAO/SearchDisplay.php b/civicrm/ext/search_kit/CRM/Search/DAO/SearchDisplay.php index 3ecead8308..033d4b4816 100644 --- a/civicrm/ext/search_kit/CRM/Search/DAO/SearchDisplay.php +++ b/civicrm/ext/search_kit/CRM/Search/DAO/SearchDisplay.php @@ -6,7 +6,7 @@ * * Generated from org.civicrm.search_kit/xml/schema/CRM/Search/SearchDisplay.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:d67945fe44bd5c7f1822580239f044ab) + * (GenCodeChecksum:1ba9d436c0e83839fe2b88a9d304762a) */ use CRM_Search_ExtensionUtil as E; @@ -24,6 +24,13 @@ class CRM_Search_DAO_SearchDisplay extends CRM_Core_DAO { */ public static $_tableName = 'civicrm_search_display'; + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-clone'; + /** * Should CiviCRM log any modifications to this table in the civicrm_log table. * diff --git a/civicrm/ext/search_kit/CRM/Search/DAO/SearchSegment.php b/civicrm/ext/search_kit/CRM/Search/DAO/SearchSegment.php new file mode 100644 index 0000000000..1e312b2a9e --- /dev/null +++ b/civicrm/ext/search_kit/CRM/Search/DAO/SearchSegment.php @@ -0,0 +1,314 @@ +<?php + +/** + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + * + * Generated from org.civicrm.search_kit/xml/schema/CRM/Search/SearchSegment.xml + * DO NOT EDIT. Generated by CRM_Core_CodeGen + * (GenCodeChecksum:b347dd437336ecd5880d5924b879d218) + */ +use CRM_Search_ExtensionUtil as E; + +/** + * Database access object for the SearchSegment entity. + */ +class CRM_Search_DAO_SearchSegment extends CRM_Core_DAO { + const EXT = E::LONG_NAME; + const TABLE_ADDED = ''; + + /** + * Static instance to hold the table name. + * + * @var string + */ + public static $_tableName = 'civicrm_search_segment'; + + /** + * Icon associated with this entity. + * + * @var string + */ + public static $_icon = 'fa-object-group'; + + /** + * Field to show when displaying a record. + * + * @var string + */ + public static $_labelField = 'label'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + public static $_log = TRUE; + + /** + * Unique SearchSegment ID + * + * @var int|string|null + * (SQL type: int unsigned) + * Note that values will be retrieved from the database as a string. + */ + public $id; + + /** + * Unique name + * + * @var string + * (SQL type: varchar(255)) + * Note that values will be retrieved from the database as a string. + */ + public $name; + + /** + * Label for identifying search segment (will appear as name of calculated field) + * + * @var string + * (SQL type: varchar(255)) + * Note that values will be retrieved from the database as a string. + */ + public $label; + + /** + * Description will appear when selecting SearchSegment in the fields dropdown. + * + * @var string|null + * (SQL type: varchar(255)) + * Note that values will be retrieved from the database as a string. + */ + public $description; + + /** + * Entity for which this set is used. + * + * @var string + * (SQL type: varchar(255)) + * Note that values will be retrieved from the database as a string. + */ + public $entity_name; + + /** + * All items in set + * + * @var string|null + * (SQL type: text) + * Note that values will be retrieved from the database as a string. + */ + public $items; + + /** + * Class constructor. + */ + public function __construct() { + $this->__table = 'civicrm_search_segment'; + parent::__construct(); + } + + /** + * Returns localized title of this entity. + * + * @param bool $plural + * Whether to return the plural version of the title. + */ + public static function getEntityTitle($plural = FALSE) { + return $plural ? E::ts('Search Segments') : E::ts('Search Segment'); + } + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields() { + if (!isset(Civi::$statics[__CLASS__]['fields'])) { + Civi::$statics[__CLASS__]['fields'] = [ + 'id' => [ + 'name' => 'id', + 'type' => CRM_Utils_Type::T_INT, + 'description' => E::ts('Unique SearchSegment ID'), + 'required' => TRUE, + 'where' => 'civicrm_search_segment.id', + 'table_name' => 'civicrm_search_segment', + 'entity' => 'SearchSegment', + 'bao' => 'CRM_Search_DAO_SearchSegment', + 'localizable' => 0, + 'html' => [ + 'type' => 'Number', + ], + 'readonly' => TRUE, + 'add' => NULL, + ], + 'name' => [ + 'name' => 'name', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Search Segment Name'), + 'description' => E::ts('Unique name'), + 'required' => TRUE, + 'maxlength' => 255, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_search_segment.name', + 'table_name' => 'civicrm_search_segment', + 'entity' => 'SearchSegment', + 'bao' => 'CRM_Search_DAO_SearchSegment', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'add' => NULL, + ], + 'label' => [ + 'name' => 'label', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Label'), + 'description' => E::ts('Label for identifying search segment (will appear as name of calculated field)'), + 'required' => TRUE, + 'maxlength' => 255, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_search_segment.label', + 'table_name' => 'civicrm_search_segment', + 'entity' => 'SearchSegment', + 'bao' => 'CRM_Search_DAO_SearchSegment', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'add' => NULL, + ], + 'description' => [ + 'name' => 'description', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Description'), + 'description' => E::ts('Description will appear when selecting SearchSegment in the fields dropdown.'), + 'maxlength' => 255, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_search_segment.description', + 'table_name' => 'civicrm_search_segment', + 'entity' => 'SearchSegment', + 'bao' => 'CRM_Search_DAO_SearchSegment', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'add' => NULL, + ], + 'entity_name' => [ + 'name' => 'entity_name', + 'type' => CRM_Utils_Type::T_STRING, + 'title' => E::ts('Entity'), + 'description' => E::ts('Entity for which this set is used.'), + 'required' => TRUE, + 'maxlength' => 255, + 'size' => CRM_Utils_Type::HUGE, + 'where' => 'civicrm_search_segment.entity_name', + 'table_name' => 'civicrm_search_segment', + 'entity' => 'SearchSegment', + 'bao' => 'CRM_Search_DAO_SearchSegment', + 'localizable' => 0, + 'html' => [ + 'type' => 'Text', + ], + 'pseudoconstant' => [ + 'callback' => 'CRM_Search_BAO_SearchSegment::getDAOEntityOptions', + ], + 'add' => NULL, + ], + 'items' => [ + 'name' => 'items', + 'type' => CRM_Utils_Type::T_TEXT, + 'title' => E::ts('Items'), + 'description' => E::ts('All items in set'), + 'where' => 'civicrm_search_segment.items', + 'table_name' => 'civicrm_search_segment', + 'entity' => 'SearchSegment', + 'bao' => 'CRM_Search_DAO_SearchSegment', + 'localizable' => 0, + 'serialize' => self::SERIALIZE_JSON, + 'add' => NULL, + ], + ]; + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + } + return Civi::$statics[__CLASS__]['fields']; + } + + /** + * Return a mapping from field-name to the corresponding key (as used in fields()). + * + * @return array + * Array(string $name => string $uniqueName). + */ + public static function &fieldKeys() { + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) { + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + } + return Civi::$statics[__CLASS__]['fieldKeys']; + } + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName() { + return self::$_tableName; + } + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog() { + return self::$_log; + } + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, 'search_segment', $prefix, []); + return $r; + } + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export($prefix = FALSE) { + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, 'search_segment', $prefix, []); + return $r; + } + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) { + $indices = [ + 'UI_name' => [ + 'name' => 'UI_name', + 'field' => [ + 0 => 'name', + ], + 'localizable' => FALSE, + 'unique' => TRUE, + 'sig' => 'civicrm_search_segment::1::name', + ], + ]; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + } + +} diff --git a/civicrm/ext/search_kit/CRM/Search/Upgrader.php b/civicrm/ext/search_kit/CRM/Search/Upgrader.php index 98fbc009b8..9d5f43a5c6 100644 --- a/civicrm/ext/search_kit/CRM/Search/Upgrader.php +++ b/civicrm/ext/search_kit/CRM/Search/Upgrader.php @@ -189,4 +189,28 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { return TRUE; } + /** + * Add SearchSegment table + * @return bool + */ + public function upgrade_1007(): bool { + $this->ctx->log->info('Applying update 1007 - add SearchSegment table.'); + if (!CRM_Core_DAO::singleValueQuery("SHOW TABLES LIKE 'civicrm_search_segment'")) { + $createTable = " +CREATE TABLE `civicrm_search_segment` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique SearchSegment ID', + `name` varchar(255) NOT NULL COMMENT 'Unique name', + `label` varchar(255) NOT NULL COMMENT 'Label for identifying search segment (will appear as name of calculated field)', + `description` varchar(255) COMMENT 'Description will appear when selecting SearchSegment in the fields dropdown.', + `entity_name` varchar(255) NOT NULL COMMENT 'Entity for which this set is used.', + `items` text COMMENT 'All items in set', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name) +) +ENGINE=InnoDB ROW_FORMAT=DYNAMIC"; + CRM_Core_DAO::executeQuery($createTable, [], TRUE, NULL, FALSE, FALSE); + } + return TRUE; + } + } diff --git a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php index 63a59d9da4..5928ffc190 100644 --- a/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php +++ b/civicrm/ext/search_kit/Civi/Api4/Action/SearchDisplay/AbstractRunAction.php @@ -1084,7 +1084,7 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { ], [ 'name' => 'user_contact_id', - 'fieldName' => 'result_row_num', + 'fieldName' => 'user_contact_id', 'title' => ts('Current User ID'), 'label' => ts('Current User ID'), 'description' => ts('Contact ID of the current user if logged in'), @@ -1092,6 +1092,26 @@ abstract class AbstractRunAction extends \Civi\Api4\Generic\AbstractAction { 'data_type' => 'Integer', 'readonly' => TRUE, ], + [ + 'name' => 'CURDATE()', + 'fieldName' => 'CURDATE()', + 'title' => ts('Current Date'), + 'label' => ts('Current Date'), + 'description' => ts('System date at the moment the search is run'), + 'type' => 'Pseudo', + 'data_type' => 'Date', + 'readonly' => TRUE, + ], + [ + 'name' => 'NOW()', + 'fieldName' => 'NOW()', + 'title' => ts('Current Date + Time'), + 'label' => ts('Current Date + Time'), + 'description' => ts('System date and time at the moment the search is run'), + 'type' => 'Pseudo', + 'data_type' => 'Timestamp', + 'readonly' => TRUE, + ], ]; } diff --git a/civicrm/ext/search_kit/Civi/Api4/SearchSegment.php b/civicrm/ext/search_kit/Civi/Api4/SearchSegment.php new file mode 100644 index 0000000000..65a59ed3b5 --- /dev/null +++ b/civicrm/ext/search_kit/Civi/Api4/SearchSegment.php @@ -0,0 +1,11 @@ +<?php +namespace Civi\Api4; + +/** + * Data segmentation sets for searches. + * + * @package Civi\Api4 + */ +class SearchSegment extends Generic\DAOEntity { + +} diff --git a/civicrm/ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentExtraFieldProvider.php b/civicrm/ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentExtraFieldProvider.php new file mode 100644 index 0000000000..fc4c07a50a --- /dev/null +++ b/civicrm/ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentExtraFieldProvider.php @@ -0,0 +1,100 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Query\Api4SelectQuery; +use Civi\Api4\SearchSegment; +use Civi\Api4\Service\Spec\FieldSpec; +use Civi\Api4\Service\Spec\RequestSpec; + +class SearchSegmentExtraFieldProvider implements Generic\SpecProviderInterface { + + /** + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + foreach (self::getSets($spec->getEntity()) as $fullName => $set) { + $field = new FieldSpec($fullName, $spec->getEntity()); + $field->setLabel($set['label']); + $field->setColumnName('id'); + $field->setOptions(array_column($set['items'], 'label')); + $field->setSuffixes(['label']); + $field->setSqlRenderer([__CLASS__, 'renderSql']); + $spec->addFieldSpec($field); + } + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity !== 'SearchSegment' && $action === 'get'; + } + + /** + * @param string $entity + * @return array[] + */ + private static function getSets($entity) { + if (!isset(\Civi::$statics['all_search_segments'])) { + \Civi::$statics['all_search_segments'] = []; + try { + $searchSegments = SearchSegment::get(FALSE)->addOrderBy('label')->execute(); + } + // Suppress SearchSegment BAO/table not found error e.g. during upgrade mode + catch (\Exception $e) { + return []; + } + foreach ($searchSegments as $set) { + \Civi::$statics['all_search_segments'][$set['entity_name']]['segment_' . $set['name']] = $set; + } + } + return \Civi::$statics['all_search_segments'][$entity] ?? []; + } + + /** + * Generates the sql case statement with a clause for each item. + * + * @param array $field + * @param Civi\Api4\Query\Api4SelectQuery $query + * @return string + */ + public static function renderSql(array $field, Api4SelectQuery $query): string { + $set = self::getSets($field['entity'])[$field['name']]; + + // Field prefix to use if entity comes from a join + $prefix = ($field['explicit_join'] ? $field['explicit_join'] . '.' : '') . ($field['implicit_join'] ? $field['implicit_join'] . '.' : ''); + $cases = []; + foreach ($set['items'] as $index => $item) { + $conditions = []; + foreach ($item['when'] ?? [] as $clause) { + // Add field prefix + $clause[0] = $prefix . $clause[0]; + $conditions[] = $query->composeClause($clause, 'WHERE', 0); + } + // If no conditions, this is the ELSE clause + if (!$conditions) { + $elseClause = 'ELSE ' . (int) $index; + } + else { + $cases[] = 'WHEN ' . implode(' AND ', $conditions) . ' THEN ' . (int) $index; + } + } + // Place ELSE clause at the end + if (isset($elseClause)) { + $cases[] = $elseClause; + } + return 'CASE ' . implode("\n ", $cases) . "\nEND"; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/CustomGroupCreationSpecProvider.php b/civicrm/ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentSpecProvider.php similarity index 79% rename from civicrm/Civi/Api4/Service/Spec/Provider/CustomGroupCreationSpecProvider.php rename to civicrm/ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentSpecProvider.php index 726134b381..10fe1bc537 100644 --- a/civicrm/Civi/Api4/Service/Spec/Provider/CustomGroupCreationSpecProvider.php +++ b/civicrm/ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchSegmentSpecProvider.php @@ -1,5 +1,4 @@ <?php - /* +--------------------------------------------------------------------+ | Copyright CiviCRM LLC. All rights reserved. | @@ -10,24 +9,25 @@ +--------------------------------------------------------------------+ */ + namespace Civi\Api4\Service\Spec\Provider; use Civi\Api4\Service\Spec\RequestSpec; -class CustomGroupCreationSpecProvider implements Generic\SpecProviderInterface { +class SearchSegmentSpecProvider implements Generic\SpecProviderInterface { /** * @inheritDoc */ public function modifySpec(RequestSpec $spec) { - $spec->getFieldByName('extends')->setRequired(TRUE); + $spec->getFieldByName('name')->setRequired(FALSE); } /** * @inheritDoc */ public function applies($entity, $action) { - return $entity === 'CustomGroup' && $action === 'create'; + return $entity === 'SearchSegment'; } } diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js b/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js index 6e9ea5f3d9..a74b1f89be 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin.module.js @@ -72,19 +72,20 @@ if (!this.tab) { this.tab = this.tabs[0].name; } + this.searchSegmentCount = null; }) // Controller for creating a new search .controller('searchCreate', function($scope, $routeParams, $location) { searchEntity = $routeParams.entity; - $scope.$ctrl = this; + var ctrl = $scope.$ctrl = this; this.savedSearch = { api_entity: searchEntity }; // Changing entity will refresh the angular page $scope.$watch('$ctrl.savedSearch.api_entity', function(newEntity, oldEntity) { if (newEntity && oldEntity && newEntity !== oldEntity) { - $location.url('/create/' + newEntity); + $location.url('/create/' + newEntity + (ctrl.savedSearch.label ? '?label=' + ctrl.savedSearch.label : '')); } }); }) @@ -96,7 +97,7 @@ $scope.$ctrl = this; }) - .factory('searchMeta', function($q, formatForSelect2) { + .factory('searchMeta', function($q, crmApi4, formatForSelect2) { function getEntity(entityName) { if (entityName) { return _.find(CRM.crmSearchAdmin.schema, {name: entityName}); @@ -275,7 +276,7 @@ var splitAs = expr.split(' AS '), info = {fn: null, args: [], alias: _.last(splitAs)}, bracketPos = expr.indexOf('('); - if (bracketPos >= 0) { + if (bracketPos >= 0 && !_.findWhere(CRM.crmSearchAdmin.pseudoFields, {name: expr})) { parseFnArgs(info, splitAs[0]); } else { var arg = parseArg(splitAs[0]); @@ -348,6 +349,32 @@ }); }); }, + // Ensure option lists are loaded for all fields with options + // Sets an optionsLoaded property on each entity to avoid duplicate requests + loadFieldOptions: function(entities) { + var entitiesToLoad = _.transform(entities, function(entitiesToLoad, entityName) { + var entity = getEntity(entityName); + if (!('optionsLoaded' in entity)) { + entity.optionsLoaded = false; + entitiesToLoad[entityName] = [entityName, 'getFields', { + loadOptions: ['id', 'name', 'label', 'description', 'color', 'icon'], + where: [['options', '!=', false]], + select: ['options'] + }, {name: 'options'}]; + } + }, {}); + if (!_.isEmpty(entitiesToLoad)) { + crmApi4(entitiesToLoad).then(function(results) { + _.each(results, function(fields, entityName) { + var entity = getEntity(entityName); + _.each(fields, function(options, fieldName) { + _.find(entity.fields, {name: fieldName}).options = options; + }); + entity.optionsLoaded = true; + }); + }); + } + }, pickIcon: function() { var deferred = $q.defer(); $('#crm-search-admin-icon-picker').off('change').siblings('.crm-icon-picker-button').click(); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js index d95e711e80..9c8d80cc4b 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -58,6 +58,13 @@ deep: true, default: defaults }); + + $scope.$bindToRoute({ + param: 'label', + expr: '$ctrl.savedSearch.label', + format: 'raw', + default: '' + }); } $scope.mainEntitySelect = searchMeta.getPrimaryAndSecondaryEntitySelect(); @@ -443,7 +450,7 @@ }; $scope.fieldsForGroupBy = function() { - return {results: ctrl.getAllFields('', ['Field', 'Custom'], function(key) { + return {results: ctrl.getAllFields('', ['Field', 'Custom', 'Extra'], function(key) { return _.contains(ctrl.savedSearch.api_params.groupBy, key); }) }; @@ -481,6 +488,7 @@ this.getAllFields = function(suffix, allowedTypes, disabledIf, topJoin) { disabledIf = disabledIf || _.noop; + allowedTypes = allowedTypes || ['Field', 'Custom', 'Extra', 'Filter']; function formatEntityFields(entityName, join) { var prefix = join ? join.alias + '.' : '', @@ -508,7 +516,7 @@ if (disabledIf(item.id)) { item.disabled = true; } - if (!allowedTypes || _.includes(allowedTypes, field.type)) { + if (_.includes(allowedTypes, field.type)) { result.push(item); } }); @@ -543,7 +551,7 @@ }); // Include SearchKit's pseudo-fields if specifically requested - if (allowedTypes && _.includes(allowedTypes, 'Pseudo')) { + if (_.includes(allowedTypes, 'Pseudo')) { result.push({ text: ts('Extra'), icon: 'fa-gear', @@ -575,57 +583,27 @@ return _.findIndex(CRM.crmSearchAdmin.pseudoFields, {name: name}) >= 0; }; - /** - * Fetch pseudoconstants for main entity + joined entities - * - * Sets an optionsLoaded property on each entity to avoid duplicate requests - * - * @var string entity - optional additional entity to load - */ + // Ensure options are loaded for main entity + joined entities + // And an optional additional entity function loadFieldOptions(entity) { - var mainEntity = searchMeta.getEntity(ctrl.savedSearch.api_entity), - entities = {}; - - function enqueue(entity) { - entity.optionsLoaded = false; - entities[entity.name] = [entity.name, 'getFields', { - loadOptions: ['id', 'name', 'label', 'description', 'color', 'icon'], - where: [['options', '!=', false]], - select: ['options'] - }, {name: 'options'}]; - } - - if (typeof mainEntity.optionsLoaded === 'undefined') { - enqueue(mainEntity); - } - - // Optional additional entity - if (entity && typeof searchMeta.getEntity(entity).optionsLoaded === 'undefined') { - enqueue(searchMeta.getEntity(entity)); - } + // Main entity + var entitiesToLoad = [ctrl.savedSearch.api_entity]; + // Join entities + bridge entities _.each(ctrl.savedSearch.api_params.join, function(join) { - var joinInfo = searchMeta.getJoin(join[0]), - joinEntity = searchMeta.getEntity(joinInfo.entity), - bridgeEntity = joinInfo.bridge ? searchMeta.getEntity(joinInfo.bridge) : null; - if (typeof joinEntity.optionsLoaded === 'undefined') { - enqueue(joinEntity); - } - if (bridgeEntity && typeof bridgeEntity.optionsLoaded === 'undefined') { - enqueue(bridgeEntity); + var joinInfo = searchMeta.getJoin(join[0]); + entitiesToLoad.push(joinInfo.entity); + if (joinInfo.bridge) { + entitiesToLoad.push(joinInfo.bridge); } }); - if (!_.isEmpty(entities)) { - crmApi4(entities).then(function(results) { - _.each(results, function(fields, entityName) { - var entity = searchMeta.getEntity(entityName); - _.each(fields, function(options, fieldName) { - _.find(entity.fields, {name: fieldName}).options = options; - }); - entity.optionsLoaded = true; - }); - }); + + // Optional additional entity + if (entity) { + entitiesToLoad.push(entity); } + + searchMeta.loadFieldOptions(entitiesToLoad); } // Build a list of all possible links to main entity & join entities diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js index 39f15f6325..5956e2b3b6 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js @@ -312,7 +312,7 @@ text: ts('Columns'), children: ctrl.crmSearchAdmin.getSelectFields(disabledIf) } - ].concat(ctrl.crmSearchAdmin.getAllFields('', ['Field', 'Custom'], disabledIf)) + ].concat(ctrl.crmSearchAdmin.getAllFields('', ['Field', 'Custom', 'Extra'], disabledIf)) }; }; diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminImport.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminImport.component.js index 909c9d66d1..886c99fea4 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminImport.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminImport.component.js @@ -110,7 +110,7 @@ crmApi4(apiCalls) .then(function(result) { CRM.alert( - result.length === 1 ? ts('1 record successfully imported.') : ts('%1 records successfully imported.', {1: results.length}), + result.length === 1 ? ts('1 record successfully imported.') : ts('%1 records successfully imported.', {1: result.length}), ts('Saved'), 'success' ); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js index 4956b302de..7d2c2be802 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js @@ -50,7 +50,7 @@ this.sortableOptions = { containment: 'tbody', - direction: 'vertical', + axis: 'y', helper: function(e, ui) { // Prevent table row width from changing during drag ui.children().each(function() { diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js index ddff68cda3..e0bf1e62fc 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/crmSearchAdminSearchListing.component.js @@ -79,7 +79,7 @@ // Get the names of in-use filters function getActiveFilters() { return _.keys(_.pick(ctrl.filters, function(val) { - return val !== null && (val === true || val === false || val.length); + return val !== null && (_.includes(['boolean', 'number'], typeof val) || val.length); })); } @@ -190,7 +190,7 @@ searchMeta.fieldToColumn('label', { label: true, title: ts('Edit Label'), - editable: {entity: 'SavedSearch', id: 'id', name: 'label', value: 'label'} + editable: true }), searchMeta.fieldToColumn('api_entity:label', { label: ts('For'), diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/searchList.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/searchList.html index 770e7b7236..629efe7648 100644 --- a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/searchList.html +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchListing/searchList.html @@ -10,11 +10,21 @@ <span class="badge">{{ tab.rowCount }}</span> </a> </li> + <li ng-class="{active: $ctrl.tab === 'segment'}"> + <a href ng-click="$ctrl.tab = 'segment'"><i class="crm-i fa-object-group"></i> + {{:: ts('Data Segmentation') }} + <span class="badge">{{ $ctrl.searchSegmentCount }}</span> + </a> + </li> </ul> - <a class="btn btn-primary" href="#/create/Contact/"> + <a class="btn btn-primary" href="#/create/Contact/" ng-if="$ctrl.tab !== 'segment'"> <i class="crm-i fa-plus"></i> {{:: ts('New Search') }} </a> + <a class="btn btn-primary" href ng-if="$ctrl.tab === 'segment'" title="{{:: ts('New Data Segment') }}" crm-dialog-popup="searchSegmentDialog" popup-tpl="~/crmSearchAdmin/searchSegment/editDialog.html"> + <i class="crm-i fa-plus"></i> + {{:: ts('New Segment') }} + </a> </div> <div ng-repeat="tab in $ctrl.tabs" ng-show="$ctrl.tab === tab.name"> @@ -35,4 +45,7 @@ </div> <crm-search-admin-search-listing filters="tab.filters" tab-count="tab.rowCount"></crm-search-admin-search-listing> </div> + <div ng-show="$ctrl.tab === 'segment'"> + <crm-search-admin-segment-listing total-count="$ctrl.searchSegmentCount"></crm-search-admin-segment-listing> + </div> </form> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.component.js new file mode 100644 index 0000000000..e059acddd8 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.component.js @@ -0,0 +1,134 @@ +(function(angular, $, _) { + "use strict"; + + angular.module('crmSearchAdmin').component('crmSearchAdminSegment', { + bindings: { + segmentId: '<', + }, + templateUrl: '~/crmSearchAdmin/searchSegment/crmSearchAdminSegment.html', + controller: function ($scope, searchMeta, dialogService, crmApi4, crmStatus) { + var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), + ctrl = this, + originalEntity, + originalField; + + this.entitySelect = searchMeta.getPrimaryAndSecondaryEntitySelect(); + + ctrl.saving = false; + ctrl.segment = {items: []}; + + // Drag-n-drop settings for reordering items + this.sortableOptions = { + containment: 'fieldset', + axis: 'y', + handle: '.crm-draggable', + forcePlaceholderSize: true, + helper: function(e, ui) { + // Prevent table row width from changing during drag + ui.children().each(function() { + $(this).width($(this).width()); + }); + return ui; + } + }; + + this.$onInit = function() { + if (ctrl.segmentId) { + $('.ui-dialog:visible').block(); + crmApi4('SearchSegment', 'get', { + where: [['id', '=', ctrl.segmentId]] + }, 0).then(function(segment) { + ctrl.segment = segment; + originalEntity = segment.entity_name; + originalField = 'segment_' + segment.name; + searchMeta.loadFieldOptions([segment.entity_name]); + $('.ui-dialog:visible').unblock(); + }); + } + }; + + this.onChangeEntity = function() { + ctrl.segment.items.length = 0; + if (ctrl.segment.entity_name) { + searchMeta.loadFieldOptions([ctrl.segment.entity_name]); + ctrl.addItem(true); + } + }; + + function getDefaultField() { + var item = _.findLast(ctrl.segment.items, function(item) { + return item.when && item.when[0] && item.when[0][0]; + }); + return item ? item.when[0][0] : searchMeta.getEntity(ctrl.segment.entity_name).fields[0].name; + } + + this.addItem = function(addCondition) { + var item = {label: ''}; + if (addCondition) { + ctrl.addCondition(item); + } + ctrl.segment.items.push(item); + }; + + this.addCondition = function(item) { + var defaultField = getDefaultField(); + item.when = item.when || []; + item.when.push([defaultField, '=']); + }; + + this.hasDefault = function() { + return !!_.findLast(ctrl.segment.items, function(item) { + return !item.when || !item.when[0].length; + }); + }; + + this.getField = function(fieldName) { + return searchMeta.getField(fieldName, ctrl.segment.entity_name); + }; + + // Select2-formatted fields that can be used in "when" clause, including :name suffix if applicable + this.selectFields = function() { + var fields = {results: []}; + _.each(searchMeta.getEntity(ctrl.segment.entity_name).fields, function(field) { + var item = { + id: field.name + (field.suffixes && _.includes(field.suffixes, 'name') ? ':name' : ''), + text: field.label, + description: field.description + }; + fields.results.push(item); + }); + return fields; + }; + + this.save = function() { + crmStatus({}, crmApi4('SearchSegment', 'save', { + records: [ctrl.segment], + chain: { + fields: [ctrl.segment.entity_name, 'getFields', { + loadOptions: ['id', 'name', 'label', 'description', 'color', 'icon'], + where: [['type', '=', 'Extra'], ['name', 'LIKE', 'segment_%']] + }] + } + }, 0)).then(function(saved) { + // If entity changed, remove field from orignal entity + if (originalEntity) { + _.remove(searchMeta.getEntity(originalEntity).fields, {name: originalField}); + } + // Refresh all segment fields in this entity + var entity = searchMeta.getEntity(ctrl.segment.entity_name); + _.remove(entity.fields, function(field) { + return field.name.indexOf('segment_') === 0; + }); + _.each(saved.fields, function(field) { + field.fieldName = field.name; + entity.fields.push(field); + }); + entity.fields = _.sortBy(entity.fields, 'label'); + dialogService.close('searchSegmentDialog'); + }); + }; + + } + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.html new file mode 100644 index 0000000000..4ab34a597b --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/crmSearchAdminSegment.html @@ -0,0 +1,78 @@ +<div id="bootstrap-theme"> + <form name="searchSegmentForm"> + <label for="search-segment-label">{{:: ts('Name') }} <span class="crm-marker">*</span></label> + <input id="search-segment-label" class="form-control" ng-model="$ctrl.segment.label" required> + <div class="help-block">{{:: ts('Name of the new computed search field.') }}</div> + <br> + <label for="search-segment-description">{{:: ts('Description') }}</label> + <textarea id="search-segment-description" class="form-control" ng-model="$ctrl.segment.description"></textarea> + <br> + <div class="form-inline"> + <label for="search-segment-entity_name">{{:: ts('For') }} <span class="crm-marker">*</span></label> + <input id="search-segment-entity_name" class="form-control collapsible-optgroups" required ng-model="$ctrl.segment.entity_name" ng-change="$ctrl.onChangeEntity()" crm-ui-select="{allowClear: false, data: $ctrl.entitySelect, placeholder: ts('Entity')}"> + </div> + <br> + <fieldset> + <legend>{{:: ts('Items') }}</legend> + <table class="table" ng-if="$ctrl.segment.entity_name"> + <thead> + <tr> + <td></td> + <td>{{:: ts('Label') }}</td> + <td style="min-width: 60%">{{:: ts('Conditions') }}</td> + <td></td> + </tr> + </thead> + <tbody ui-sortable="$ctrl.sortableOptions" ng-model="$ctrl.segment.items"> + <tr ng-repeat="item in $ctrl.segment.items"> + <td class="crm-draggable"> + <i class="crm-i fa-arrows crm-search-move-icon"></i> + </td> + <td> + <input class="form-control" ng-model="item.label" required> + </td> + <td> + <div ng-repeat="condition in item.when" class="form-inline"> + <input class="form-control" ng-model="condition[0]" crm-ui-select="{data: $ctrl.selectFields, allowClear: false}" > + <crm-search-condition clause="condition" field="$ctrl.getField(condition[0])" offset="1" option-key="'name'" class="form-group"></crm-search-condition> + <a class="crm-hover-button" ng-if="$index" ng-click="item.when.splice($index, 1)"> + <i class="crm-i fa-times" aria-hidden="true"></i> + </a> + </div> + <div ng-if="item.when && item.when.length"> + <button class="btn btn-xs btn-secondary" ng-click="$ctrl.addCondition(item)"> + <i class="crm-i fa-plus"></i> + {{:: ts('Add Condition') }} + </button> + </div> + <div ng-if="!item.when || !item.when.length"> + <em>{{:: ts('Default Item') }}</em> + </div> + </td> + <td class="text-right"> + <button type="button" class="btn btn-xs btn-danger" ng-click="$ctrl.segment.items.splice($index, 1)"> + <i class="crm-i fa-trash"></i> + </button> + </td> + </tr> + </tbody> + <tfoot> + <tr> + <td colspan="4"> + <button class="btn btn-sm btn-primary" ng-click="$ctrl.addItem(true)"> + <i class="crm-i fa-plus"></i> + {{:: ts('Add Item') }} + </button> + <button class="btn btn-sm btn-primary" ng-click="$ctrl.addItem(false)" ng-if="!$ctrl.hasDefault()"> + <i class="crm-i fa-plus"></i> + {{:: ts('Default Item') }} + </button> + </td> + </tr> + </tfoot> + </table> + </fieldset> + + <crm-dialog-button text="ts('Save')" icons="{primary: $ctrl.saving ? 'fa-spinner fa-spin' : 'fa-save'}" on-click="$ctrl.save()" disabled="!searchSegmentForm.$valid || $ctrl.saving || !$ctrl.segment.items.length" /> + </form> +</div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/editDialog.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/editDialog.html new file mode 100644 index 0000000000..4042add700 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegment/editDialog.html @@ -0,0 +1,3 @@ +<div crm-dialog="searchSegmentDialog"> + <crm-search-admin-segment segment-id="model.data.id"></crm-search-admin-segment> +</div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/buttons.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/buttons.html new file mode 100644 index 0000000000..64b87c6f1e --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/buttons.html @@ -0,0 +1,12 @@ +<div class="text-right"> + <div class="btn-group btn-group-xs"> + <a class="btn btn-primary" href crm-dialog-popup="searchSegmentDialog" popup-tpl="~/crmSearchAdmin/searchSegment/editDialog.html" popup-data="row" title="{{:: ts('Edit Data Segment') }}"> + <i class="crm-i fa-pencil"></i> + {{:: ts('Edit') }} + </a> + <a class="btn btn-danger" href crm-confirm="{type: 'delete', obj: row.data}" on-yes="$ctrl.deleteSegment(row)" > + <i class="crm-i fa-trash"></i> + {{:: ts('Delete') }} + </a> + </div> +</div> diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/crmSearchAdminSegmentListing.component.js b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/crmSearchAdminSegmentListing.component.js new file mode 100644 index 0000000000..16ad1dc19d --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/crmSearchAdminSegmentListing.component.js @@ -0,0 +1,101 @@ +(function(angular, $, _) { + "use strict"; + + // Specialized searchDisplay, only used by Admins + angular.module('crmSearchAdmin').component('crmSearchAdminSegmentListing', { + bindings: { + filters: '<', + totalCount: '=' + }, + templateUrl: '~/crmSearchDisplayTable/crmSearchDisplayTable.html', + controller: function($scope, $element, crmApi4, searchMeta, searchDisplayBaseTrait, searchDisplaySortableTrait) { + var ts = $scope.ts = CRM.ts('org.civicrm.search_kit'), + // Mix in traits to this controller + ctrl = angular.extend(this, searchDisplayBaseTrait, searchDisplaySortableTrait); + + this.apiEntity = 'SearchSegment'; + this.search = { + api_entity: 'SearchSegment', + api_params: { + version: 4, + select: [ + 'id', + 'label', + 'description', + 'entity_name', + 'entity_name:label', + 'CONCAT("segment_", name) AS field_name', + 'items' + ], + join: [], + where: [], + groupBy: [] + } + }; + + this.$onInit = function() { + buildDisplaySettings(); + this.initializeDisplay($scope, $element); + }; + + this.deleteSegment = function(row) { + ctrl.runSearch( + [['SearchSegment', 'delete', {where: [['id', '=', row.key]]}]], + {start: ts('Deleting...'), success: ts('Segment Deleted')}, + row + ); + // Delete field from metadata + var entity = searchMeta.getEntity(row.data.entity_name); + _.remove(entity.fields, {name: row.data.field_name}); + }; + + function buildDisplaySettings() { + ctrl.display = { + type: 'table', + settings: { + limit: CRM.crmSearchAdmin.defaultPagerSize, + pager: {show_count: true, expose_limit: true}, + actions: false, + classes: ['table', 'table-striped'], + sort: [['label', 'ASC']], + // Do not make columns editable because it would require a metadata refresh + columns: [ + { + key: 'label', + label: ts('Label'), + type: 'field' + }, + { + key: 'description', + label: ts('Description'), + type: 'field' + }, + { + key: 'entity_name:label', + label: ts('For'), + type: 'field', + empty_value: ts('Missing'), + cssRules: [ + ['font-italic', 'entity_name:label', 'IS EMPTY'] + ] + }, + { + type: 'include', + label: ts('Items'), + path: '~/crmSearchAdmin/searchSegmentListing/segments.html' + }, + { + type: 'include', + label: '', + path: '~/crmSearchAdmin/searchSegmentListing/buttons.html' + } + ] + } + }; + ctrl.settings = ctrl.display.settings; + } + + } + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/segments.html b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/segments.html new file mode 100644 index 0000000000..80fe0d2776 --- /dev/null +++ b/civicrm/ext/search_kit/ang/crmSearchAdmin/searchSegmentListing/segments.html @@ -0,0 +1 @@ +<span ng-repeat="item in row.data.items">{{:: item.label }}<span ng-if="!$last">, </span></span> diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js index 11d0ab5050..bffde300df 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js @@ -28,13 +28,19 @@ }); }, 800); - // If search is embedded in contact summary tab, display count in tab-header + // Update totalCount variable if used. + // Integrations can pass in `total-count="somevar" to keep track of the number of results returned + // FIXME: Additional hack to directly update tabHeader for contact summary tab. It would be better to + // decouple the contactTab code into a separate directive that checks totalCount. var contactTab = $element.closest('.crm-contact-page .ui-tabs-panel').attr('id'); - if (contactTab) { - var unwatchCount = $scope.$watch('$ctrl.rowCount', function(rowCount) { - if (typeof rowCount === 'number') { - unwatchCount(); - CRM.tabHeader.updateCount(contactTab.replace('contact-', '#tab_'), rowCount); + if (contactTab || typeof ctrl.totalCount !== 'undefined') { + $scope.$watch('$ctrl.rowCount', function(rowCount) { + // Update totalCount only if no user filters are set + if (typeof rowCount === 'number' && angular.equals({}, ctrl.getAfformFilters())) { + ctrl.totalCount = rowCount; + if (contactTab) { + CRM.tabHeader.updateCount(contactTab.replace('contact-', '#tab_'), rowCount); + } } }); } @@ -76,6 +82,12 @@ $scope.$watch('$ctrl.filters', onChangeFilters, true); }, + getAfformFilters: function() { + return _.pick(this.afFieldset ? this.afFieldset.getFieldData() : {}, function(val) { + return val !== null && (_.includes(['boolean', 'number'], typeof val) || val.length); + }); + }, + // Generate params for the SearchDisplay.run api getApiParams: function(mode) { return { @@ -85,7 +97,7 @@ sort: this.sort, limit: this.limit, seed: this.seed, - filters: _.assign({}, (this.afFieldset ? this.afFieldset.getFieldData() : {}), this.filters), + filters: _.assign({}, this.getAfformFilters(), this.filters), afform: this.afFieldset ? this.afFieldset.getFormName() : null }; }, diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayGrid.ang.php b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid.ang.php index 727e6d5f4f..d0a4566899 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayGrid.ang.php +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid.ang.php @@ -1,5 +1,5 @@ <?php -// Module for rendering List Search Displays. +// Module for rendering Grid Search Displays. return [ 'js' => [ 'ang/crmSearchDisplayGrid.module.js', @@ -8,6 +8,9 @@ return [ 'partials' => [ 'ang/crmSearchDisplayGrid', ], + 'css' => [ + 'css/crmSearchDisplayGrid.css', + ], 'basePages' => ['civicrm/search', 'civicrm/admin/search'], 'requires' => ['crmSearchDisplay', 'crmUi', 'ui.bootstrap'], 'bundles' => ['bootstrap3'], diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.component.js b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.component.js index d66e594382..300d861d0f 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayGrid/crmSearchDisplayGrid.component.js @@ -8,7 +8,8 @@ display: '<', apiParams: '<', settings: '<', - filters: '<' + filters: '<', + totalCount: '=' }, require: { afFieldset: '?^^afFieldset' diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.component.js b/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.component.js index e033c007d5..7982f36307 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.component.js @@ -8,7 +8,8 @@ display: '<', apiParams: '<', settings: '<', - filters: '<' + filters: '<', + totalCount: '=' }, require: { afFieldset: '?^^afFieldset' diff --git a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js index d1c859ef49..76e500910e 100644 --- a/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js @@ -7,7 +7,8 @@ search: '<', display: '<', settings: '<', - filters: '<' + filters: '<', + totalCount: '=' }, require: { afFieldset: '?^^afFieldset' @@ -18,7 +19,6 @@ // Mix in traits to this controller ctrl = angular.extend(this, searchDisplayBaseTrait, searchDisplayTasksTrait, searchDisplaySortableTrait); - this.$onInit = function() { this.initializeDisplay($scope, $element); diff --git a/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js index 2c9ac721c5..a249019898 100644 --- a/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js +++ b/civicrm/ext/search_kit/ang/crmSearchTasks/crmSearchInput/crmSearchInputVal.component.js @@ -21,7 +21,7 @@ this.ngModel.$render = function() { ctrl.value = ctrl.ngModel.$viewValue; - if (!rendered && field.input_type === 'Date') { + if (!rendered && isDateField(field)) { setDateType(); } rendered = true; @@ -102,7 +102,7 @@ return '~/crmSearchTasks/crmSearchInput/text.html'; } - if (field.input_type === 'Date') { + if (isDateField(field)) { return '~/crmSearchTasks/crmSearchInput/date.html'; } @@ -134,6 +134,10 @@ return {results: formatForSelect2(field.options || [], ctrl.optionKey || 'id', 'label', ['description', 'color', 'icon'])}; }; + function isDateField(field) { + return field.data_type === 'Date' || field.data_type === 'Timestamp'; + } + } }); diff --git a/civicrm/ext/search_kit/css/crmSearchAdmin.css b/civicrm/ext/search_kit/css/crmSearchAdmin.css index f422f42775..57f7ae53c0 100644 --- a/civicrm/ext/search_kit/css/crmSearchAdmin.css +++ b/civicrm/ext/search_kit/css/crmSearchAdmin.css @@ -108,10 +108,11 @@ display: inline-block; } -#bootstrap-theme.crm-search i.crm-search-move-icon { +#bootstrap-theme i.crm-i.crm-search-move-icon { opacity: .5; } -#bootstrap-theme.crm-search .crm-draggable:hover > * > i.crm-search-move-icon { +#bootstrap-theme .crm-draggable:hover > i.crm-i.crm-search-move-icon, +#bootstrap-theme .crm-draggable:hover > * > i.crm-i.crm-search-move-icon { opacity: 1; } diff --git a/civicrm/ext/search_kit/css/crmSearchDisplayGrid.css b/civicrm/ext/search_kit/css/crmSearchDisplayGrid.css new file mode 100644 index 0000000000..7d512894b9 --- /dev/null +++ b/civicrm/ext/search_kit/css/crmSearchDisplayGrid.css @@ -0,0 +1,23 @@ +/* search kit grid layout styling */ +.crm-search-display-grid-container { + display: grid; + grid-gap: 1em; + align-items: center; + justify-items: center; +} + +.crm-search-display-grid-layout-2 { + grid-template-columns: repeat(2, 1fr); +} + +.crm-search-display-grid-layout-3 { + grid-template-columns: repeat(3, 1fr); +} + +.crm-search-display-grid-layout-4 { + grid-template-columns: repeat(4, 1fr); +} + +.crm-search-display-grid-layout-5 { + grid-template-columns: repeat(5, 1fr); +} diff --git a/civicrm/ext/search_kit/info.xml b/civicrm/ext/search_kit/info.xml index 1cfe31cbbc..f664028d5b 100644 --- a/civicrm/ext/search_kit/info.xml +++ b/civicrm/ext/search_kit/info.xml @@ -15,10 +15,10 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2021-01-06</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <develStage>stable</develStage> <compatibility> - <ver>5.38</ver> + <ver>5.50</ver> </compatibility> <comments>This extension is still in beta. Click on the chat link above to discuss development, report problems or ask questions.</comments> <classloader> diff --git a/civicrm/ext/search_kit/search_kit.civix.php b/civicrm/ext/search_kit/search_kit.civix.php index 6cac24cef1..da7a7cfa9d 100644 --- a/civicrm/ext/search_kit/search_kit.civix.php +++ b/civicrm/ext/search_kit/search_kit.civix.php @@ -300,5 +300,10 @@ function _search_kit_civix_civicrm_entityTypes(&$entityTypes) { 'class' => 'CRM_Search_DAO_SearchDisplay', 'table' => 'civicrm_search_display', ], + 'CRM_Search_DAO_SearchSegment' => [ + 'name' => 'SearchSegment', + 'class' => 'CRM_Search_DAO_SearchSegment', + 'table' => 'civicrm_search_segment', + ], ]); } diff --git a/civicrm/ext/search_kit/search_kit.php b/civicrm/ext/search_kit/search_kit.php index b3163c327a..bf742583e3 100644 --- a/civicrm/ext/search_kit/search_kit.php +++ b/civicrm/ext/search_kit/search_kit.php @@ -92,3 +92,14 @@ function search_kit_civicrm_pre($op, $entity, $id, &$params) { ->execute(); } } + +/** + * Implements hook_civicrm_post(). + */ +function search_kit_civicrm_post($op, $entity, $id, $object) { + // Flush fieldSpec cache when saving a SearchSegment + if ($entity === 'SearchSegment') { + \Civi::$statics['all_search_segments'] = NULL; + \Civi::cache('metadata')->clear(); + } +} diff --git a/civicrm/ext/search_kit/sql/auto_install.sql b/civicrm/ext/search_kit/sql/auto_install.sql index 4a4db8ad6c..4f5d09fd84 100644 --- a/civicrm/ext/search_kit/sql/auto_install.sql +++ b/civicrm/ext/search_kit/sql/auto_install.sql @@ -17,6 +17,7 @@ SET FOREIGN_KEY_CHECKS=0; +DROP TABLE IF EXISTS `civicrm_search_segment`; DROP TABLE IF EXISTS `civicrm_search_display`; SET FOREIGN_KEY_CHECKS=1; @@ -46,3 +47,22 @@ CREATE TABLE `civicrm_search_display` ( CONSTRAINT FK_civicrm_search_display_saved_search_id FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; + +-- /******************************************************* +-- * +-- * civicrm_search_segment +-- * +-- * Data segmentation sets for searches. +-- * +-- *******************************************************/ +CREATE TABLE `civicrm_search_segment` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Unique SearchSegment ID', + `name` varchar(255) NOT NULL COMMENT 'Unique name', + `label` varchar(255) NOT NULL COMMENT 'Label for identifying search segment (will appear as name of calculated field)', + `description` varchar(255) COMMENT 'Description will appear when selecting SearchSegment in the fields dropdown.', + `entity_name` varchar(255) NOT NULL COMMENT 'Entity for which this set is used.', + `items` text COMMENT 'All items in set', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name) +) +ENGINE=InnoDB ROW_FORMAT=DYNAMIC; diff --git a/civicrm/ext/search_kit/sql/auto_uninstall.sql b/civicrm/ext/search_kit/sql/auto_uninstall.sql index e1c88f5cb2..43aa40194f 100644 --- a/civicrm/ext/search_kit/sql/auto_uninstall.sql +++ b/civicrm/ext/search_kit/sql/auto_uninstall.sql @@ -15,6 +15,7 @@ SET FOREIGN_KEY_CHECKS=0; +DROP TABLE IF EXISTS `civicrm_search_segment`; DROP TABLE IF EXISTS `civicrm_search_display`; SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchSegment/SearchSegmentTest.php b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchSegment/SearchSegmentTest.php new file mode 100644 index 0000000000..12cbbab8d5 --- /dev/null +++ b/civicrm/ext/search_kit/tests/phpunit/api/v4/SearchSegment/SearchSegmentTest.php @@ -0,0 +1,322 @@ +<?php +namespace api\v4\SearchDisplay; + +use Civi\Api4\Activity; +use Civi\Api4\Contact; +use Civi\Api4\Contribution; +use Civi\Api4\CustomField; +use Civi\Api4\CustomGroup; +use Civi\Api4\Relationship; +use Civi\Api4\SearchSegment; +use Civi\Test\HeadlessInterface; + +/** + * @group headless + */ +class SearchSegmentTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface { + + public function setUpHeadless() { + // Civi\Test has many helpers, like install(), uninstall(), sql(), and sqlFile(). + // See: https://docs.civicrm.org/dev/en/latest/testing/phpunit/#civitest + return \Civi\Test::headless() + ->installMe(__DIR__) + ->apply(); + } + + public function tearDown(): void { + foreach (['Activity', 'SearchSegment', 'CustomGroup', 'Contact'] as $entity) { + civicrm_api4($entity, 'delete', [ + 'checkPermissions' => FALSE, + 'where' => [['id', '>', '0']], + ]); + } + parent::tearDown(); + } + + /** + * Test running a searchDisplay with a numeric range segment. + */ + public function testRangeSearchSegment() { + $cid = Contact::create(FALSE)->execute()->single()['id']; + + $sampleData = [ + ['total_amount' => 1.5], + ['total_amount' => 10], + ['total_amount' => 20], + ['total_amount' => 25], + ['total_amount' => 32], + ['total_amount' => 33], + ['total_amount' => 56], + ]; + Contribution::save(FALSE) + ->addDefault('contact_id', $cid) + ->addDefault('financial_type_id:name', 'Donation') + ->addDefault('receive_date', 'now') + ->setRecords($sampleData)->execute(); + + SearchSegment::create(FALSE) + ->addValue('label', 'Giving Tier') + ->addValue('entity_name', 'Contribution') + ->addValue('description', 'Tiers by donation amount') + ->addValue('items', [ + [ + 'label' => 'Low ball', + 'when' => [['total_amount', '<', 10]], + ], + [ + 'label' => 'Minor league', + 'when' => [['total_amount', '>=', 10], ['total_amount', '<', 25]], + ], + [ + 'label' => 'Major league', + 'when' => [['total_amount', '>=', 25], ['total_amount', '<', 40]], + ], + // No conditions makes this the ELSE clause + [ + 'label' => 'Heavy hitter', + ], + ]) + ->execute(); + + $getField = Contribution::getFields(FALSE) + ->addWhere('name', '=', 'segment_Giving_Tier') + ->setLoadOptions(TRUE) + ->execute()->single(); + + $this->assertEquals('Giving Tier', $getField['label']); + $this->assertEquals('Extra', $getField['type']); + $this->assertEquals(['Low ball', 'Minor league', 'Major league', 'Heavy hitter'], $getField['options']); + + $params = [ + 'checkPermissions' => FALSE, + 'return' => 'page:1', + 'savedSearch' => [ + 'api_entity' => 'Contribution', + 'api_params' => [ + 'version' => 4, + 'select' => [ + 'segment_Giving_Tier:label', + 'AVG(total_amount) AS AVG_total_amount', + 'COUNT(total_amount) AS COUNT_total_amount', + ], + 'where' => [['contact_id', '=', $cid]], + 'groupBy' => [ + 'segment_Giving_Tier', + ], + 'join' => [], + 'having' => [], + ], + ], + 'sort' => [['segment_Giving_Tier:label', 'ASC']], + ]; + + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(4, $result); + + // Results should be in alphabetical order by giving tier + $this->assertEquals('Heavy hitter', $result[0]['columns'][0]['val']); + $this->assertEquals(56.0, $result[0]['data']['AVG_total_amount']); + $this->assertEquals(1, $result[0]['data']['COUNT_total_amount']); + + $this->assertEquals('Low ball', $result[1]['columns'][0]['val']); + $this->assertEquals(1.5, $result[1]['data']['AVG_total_amount']); + $this->assertEquals(1, $result[1]['data']['COUNT_total_amount']); + + $this->assertEquals('Major league', $result[2]['columns'][0]['val']); + $this->assertEquals(30.0, $result[2]['data']['AVG_total_amount']); + $this->assertEquals(3, $result[2]['data']['COUNT_total_amount']); + + $this->assertEquals('Minor league', $result[3]['columns'][0]['val']); + $this->assertEquals(15.0, $result[3]['data']['AVG_total_amount']); + $this->assertEquals(2, $result[3]['data']['COUNT_total_amount']); + } + + /** + * Tests a segment based on custom data using a bridge join + */ + public function testSegmentCustomField() { + CustomGroup::create(FALSE) + ->addValue('title', 'TestActivitySegment') + ->addValue('extends', 'Activity') + ->execute(); + CustomField::create(FALSE) + ->addValue('label', 'ActColor') + ->addValue('custom_group_id.name', 'TestActivitySegment') + ->addValue('html_type', 'Select') + ->addValue('option_values', ['r' => 'Red', 'g' => 'Green', 'b' => 'Blue', 'k' => 'Black']) + ->execute(); + $cid = Contact::create(FALSE)->execute()->single()['id']; + + $sampleData = [ + ['TestActivitySegment.ActColor' => 'r'], + ['TestActivitySegment.ActColor' => 'g'], + ['TestActivitySegment.ActColor' => 'b'], + ['TestActivitySegment.ActColor' => 'k'], + ['TestActivitySegment.ActColor' => 'k'], + [], + ]; + Activity::save(FALSE) + ->addDefault('source_contact_id', $cid) + ->addDefault('activity_type_id:name', 'Meeting') + ->addDefault('activity_date_time', 'now') + ->setRecords($sampleData)->execute(); + + SearchSegment::create(FALSE) + ->addValue('label', 'Activity Cluster') + ->addValue('entity_name', 'Activity') + ->addValue('description', 'Clusters based on activity custom field') + ->addValue('items', [ + [ + 'label' => 'Primary Color', + 'when' => [['TestActivitySegment.ActColor:label', 'IN', ['Red', 'Blue']]], + ], + [ + 'label' => 'Secondary Color', + 'when' => [['TestActivitySegment.ActColor:label', 'NOT IN', ['Red', 'Blue', 'Black']]], + ], + [ + 'label' => 'Not a Color!', + ], + ]) + ->execute(); + + $getField = Activity::getFields(FALSE) + ->addWhere('name', '=', 'segment_Activity_Cluster') + ->setLoadOptions(TRUE) + ->execute()->single(); + $this->assertEquals('Activity Cluster', $getField['label']); + $this->assertEquals(['Primary Color', 'Secondary Color', 'Not a Color!'], $getField['options']); + + $params = [ + 'checkPermissions' => FALSE, + 'return' => 'page:1', + 'savedSearch' => [ + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => [ + 'Activity_01.segment_Activity_Cluster:label', + 'COUNT(Activity_01.id) AS COUNT_id', + ], + 'where' => [['id', '=', $cid]], + 'groupBy' => [ + 'Activity_01.segment_Activity_Cluster', + ], + 'join' => [ + [ + 'Activity AS Activity_01', + 'LEFT', + 'ActivityContact', + ['id', '=', 'Activity_01.contact_id'], + ['Activity_01.record_type_id:name', '=', '"Activity Source"'], + ], + ], + 'having' => [], + ], + ], + 'sort' => [['Activity_01.segment_Activity_Cluster:label', 'ASC']], + ]; + + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(3, $result); + + $this->assertEquals('Not a Color!', $result[0]['columns'][0]['val']); + $this->assertEquals(3, $result[0]['data']['COUNT_id']); + + $this->assertEquals('Primary Color', $result[1]['columns'][0]['val']); + $this->assertEquals(2, $result[1]['data']['COUNT_id']); + + $this->assertEquals('Secondary Color', $result[2]['columns'][0]['val']); + $this->assertEquals(1, $result[2]['data']['COUNT_id']); + } + + /** + * Uses a calc field as the basis for a segment, + * and fetches it via related contact join, just to test that extra bit of complexity + */ + public function testSegmentCalcField() { + $cid = Contact::create(FALSE)->execute()->single()['id']; + $sampleData = [ + ['birth_date' => 'now - 1 year - 1 month'], + ['birth_date' => 'now - 12 year - 1 month'], + ['birth_date' => 'now - 13 year - 1 month'], + ['birth_date' => 'now - 30 year - 1 month'], + ['birth_date' => 'now - 33 year - 1 month'], + [], + ]; + Contact::save(FALSE) + ->setRecords($sampleData) + ->addChain('rel', Relationship::create() + ->addValue('relationship_type_id', 1) + ->addValue('contact_id_b', $cid) + ->addValue('contact_id_a', '$id') + ) + ->execute(); + + SearchSegment::create(FALSE) + ->addValue('label', 'Age Range') + ->addValue('entity_name', 'Contact') + ->addValue('description', 'Babies, Children, Adults') + ->addValue('items', [ + [ + 'label' => 'Baby', + 'when' => [['age_years', '<', 2]], + ], + [ + 'label' => 'Child', + 'when' => [['age_years', '>=', 2], ['age_years', '<', 18]], + ], + [ + 'label' => 'Adult', + 'when' => [['age_years', '>=', 18]], + ], + ]) + ->execute(); + + $params = [ + 'checkPermissions' => FALSE, + 'return' => 'page:1', + 'savedSearch' => [ + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => [ + 'Related_Contact.segment_Age_Range:label', + 'COUNT(Related_Contact.id) AS COUNT_id', + ], + 'where' => [['id', '=', $cid]], + 'groupBy' => [ + 'Related_Contact.segment_Age_Range', + ], + 'join' => [ + [ + 'Contact AS Related_Contact', + 'INNER', + 'RelationshipCache', + ['id', '=', 'Related_Contact.far_contact_id'], + ['Related_Contact.near_relation:name', '=', '"Child of"'], + ], + ], + 'having' => [], + ], + ], + 'sort' => [['Related_Contact.segment_Age_Range:label', 'DESC']], + ]; + + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(4, $result); + + $this->assertEquals('Child', $result[0]['columns'][0]['val']); + $this->assertEquals(2, $result[0]['data']['COUNT_id']); + + $this->assertEquals('Baby', $result[1]['columns'][0]['val']); + $this->assertEquals(1, $result[1]['data']['COUNT_id']); + + $this->assertEquals('Adult', $result[2]['columns'][0]['val']); + $this->assertEquals(2, $result[2]['data']['COUNT_id']); + + $this->assertNull($result[3]['columns'][0]['val']); + $this->assertEquals(1, $result[3]['data']['COUNT_id']); + } + +} diff --git a/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchDisplay.xml b/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchDisplay.xml index d2dde8906d..e4300979e2 100644 --- a/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchDisplay.xml +++ b/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchDisplay.xml @@ -6,6 +6,7 @@ <name>civicrm_search_display</name> <comment>Search Kit - saved search displays</comment> <log>true</log> + <icon>fa-clone</icon> <field> <name>id</name> diff --git a/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.entityType.php b/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.entityType.php new file mode 100644 index 0000000000..b2c740942f --- /dev/null +++ b/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.entityType.php @@ -0,0 +1,10 @@ +<?php +// This file declares a new entity type. For more details, see "hook_civicrm_entityTypes" at: +// https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes +return [ + [ + 'name' => 'SearchSegment', + 'class' => 'CRM_Search_DAO_SearchSegment', + 'table' => 'civicrm_search_segment', + ], +]; diff --git a/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.xml b/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.xml new file mode 100644 index 0000000000..180740802f --- /dev/null +++ b/civicrm/ext/search_kit/xml/schema/CRM/Search/SearchSegment.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Search</base> + <class>SearchSegment</class> + <name>civicrm_search_segment</name> + <comment>Data segmentation sets for searches.</comment> + <log>true</log> + <icon>fa-object-group</icon> + <labelField>label</labelField> + + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Unique SearchSegment ID</comment> + <html> + <type>Number</type> + </html> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <field> + <name>name</name> + <title>Search Segment Name</title> + <comment>Unique name</comment> + <required>true</required> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + </html> + </field> + + <field> + <name>label</name> + <title>Label</title> + <comment>Label for identifying search segment (will appear as name of calculated field)</comment> + <required>true</required> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + </html> + </field> + + <field> + <name>description</name> + <type>varchar</type> + <title>Description</title> + <length>255</length> + <comment>Description will appear when selecting SearchSegment in the fields dropdown.</comment> + <html> + <type>Text</type> + </html> + </field> + + <field> + <name>entity_name</name> + <title>Entity</title> + <comment>Entity for which this set is used.</comment> + <required>true</required> + <type>varchar</type> + <length>255</length> + <pseudoconstant> + <callback>CRM_Search_BAO_SearchSegment::getDAOEntityOptions</callback> + </pseudoconstant> + <html> + <type>Text</type> + </html> + </field> + + <field> + <name>items</name> + <type>text</type> + <title>Items</title> + <comment>All items in set</comment> + <serialize>JSON</serialize> + </field> + + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + </index> + +</table> diff --git a/civicrm/ext/sequentialcreditnotes/info.xml b/civicrm/ext/sequentialcreditnotes/info.xml index 05d944d20a..ed2e291caf 100644 --- a/civicrm/ext/sequentialcreditnotes/info.xml +++ b/civicrm/ext/sequentialcreditnotes/info.xml @@ -15,13 +15,13 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-01-28</releaseDate> - <version>5.49.4</version> + <version>5.50.0</version> <tags> <tag>mgmt:hidden</tag> </tags> <develStage>stable</develStage> <compatibility> - <ver>5.24</ver> + <ver>5.50</ver> </compatibility> <mixins> <mixin>setting-php@1.0.0</mixin> diff --git a/civicrm/install/civicrm.php b/civicrm/install/civicrm.php index 5179735d08..6d08fcf94f 100644 --- a/civicrm/install/civicrm.php +++ b/civicrm/install/civicrm.php @@ -227,13 +227,6 @@ function civicrm_config(&$config) { $params['CMSdbHost'] = $config['drupal']['server']; $params['CMSdbName'] = addslashes($config['drupal']['database']); } - elseif (version_compare(VERSION, '6.0') >= 0) { - $params['cms'] = 'Drupal6'; - $params['CMSdbUser'] = addslashes($config['drupal']['username']); - $params['CMSdbPass'] = addslashes($config['drupal']['password']); - $params['CMSdbHost'] = $config['drupal']['server']; - $params['CMSdbName'] = addslashes($config['drupal']['database']); - } } elseif ($installType == 'drupal') { $params['cms'] = $config['cms']; diff --git a/civicrm/install/index.php b/civicrm/install/index.php index 0c6b62c2c9..a7c96f1f2e 100644 --- a/civicrm/install/index.php +++ b/civicrm/install/index.php @@ -254,7 +254,7 @@ else { if ($installType == 'drupal') { // Ensure that they have downloaded the correct version of CiviCRM - if ($civicrm_version['cms'] != 'Drupal' && $civicrm_version['cms'] != 'Drupal6') { + if ($civicrm_version['cms'] != 'Drupal') { $errorTitle = ts("Oops! Incorrect CiviCRM version"); $errorMsg = ts("This installer can only be used for the Drupal version of CiviCRM."); errorDisplayPage($errorTitle, $errorMsg); diff --git a/civicrm/js/crm.datepicker.js b/civicrm/js/crm.datepicker.js index ee628f118e..19a40e98af 100644 --- a/civicrm/js/crm.datepicker.js +++ b/civicrm/js/crm.datepicker.js @@ -44,6 +44,7 @@ .change(updateDataField) .timeEntry({ spinnerImage: '', + useMouseWheel: false, show24Hours: settings.time === true || settings.time === undefined ? CRM.config.timeIs24Hr : settings.time == '24' }); if (!placeholder) { diff --git a/civicrm/mixin/afform-entity-php@1/mixin.php b/civicrm/mixin/afform-entity-php@1/mixin.php new file mode 100644 index 0000000000..15b7400b8b --- /dev/null +++ b/civicrm/mixin/afform-entity-php@1/mixin.php @@ -0,0 +1,40 @@ +<?php + +/** + * Auto-register "afformEntities/*.php" files. + * + * @mixinName afform-entity-php + * @mixinVersion 1.0.0 + * @since 5.50 + * + * @param CRM_Extension_MixInfo $mixInfo + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + * @param \CRM_Extension_BootCache $bootCache + * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. + */ +return function ($mixInfo, $bootCache) { + + /** + * @param \Civi\Core\Event\GenericHookEvent $e + */ + Civi::dispatcher()->addListener('civi.afform_admin.metadata', function ($e) use ($mixInfo) { + // When deactivating on a polyfill/pre-mixin system, listeners may not cleanup automatically. + if (!$mixInfo->isActive() || !is_dir($mixInfo->getPath('afformEntities'))) { + return; + } + + $files = (array) glob($mixInfo->getPath('afformEntities/*.php')); + foreach ($files as $file) { + $entityInfo = include $file; + $entityName = basename($file, '.php'); + $apiInfo = \Civi\AfformAdmin\AfformAdminMeta::getApiEntity($entityInfo['entity'] ?? $entityName); + // Skip disabled contact types & entities from disabled components/extensions + if (!$apiInfo) { + continue; + } + $entityInfo += $apiInfo; + $e->entities[$entityName] = $entityInfo; + } + }); + +}; diff --git a/civicrm/mixin/ang-php@1/mixin.php b/civicrm/mixin/ang-php@1/mixin.php index 6719db3571..c75326b5dd 100644 --- a/civicrm/mixin/ang-php@1/mixin.php +++ b/civicrm/mixin/ang-php@1/mixin.php @@ -5,6 +5,7 @@ * * @mixinName ang-php * @mixinVersion 1.0.0 + * @since 5.45 * * @param CRM_Extension_MixInfo $mixInfo * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. diff --git a/civicrm/mixin/case-xml@1/mixin.php b/civicrm/mixin/case-xml@1/mixin.php index 649c51e3c6..d1d0d6b5ab 100644 --- a/civicrm/mixin/case-xml@1/mixin.php +++ b/civicrm/mixin/case-xml@1/mixin.php @@ -5,6 +5,7 @@ * * @mixinName case-xml * @mixinVersion 1.0.0 + * @since 5.45 * * @param CRM_Extension_MixInfo $mixInfo * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. diff --git a/civicrm/mixin/menu-xml@1/mixin.php b/civicrm/mixin/menu-xml@1/mixin.php index 4c0b2276c0..4632460812 100644 --- a/civicrm/mixin/menu-xml@1/mixin.php +++ b/civicrm/mixin/menu-xml@1/mixin.php @@ -5,6 +5,7 @@ * * @mixinName menu-xml * @mixinVersion 1.0.0 + * @since 5.45 * * @param CRM_Extension_MixInfo $mixInfo * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. diff --git a/civicrm/mixin/mgd-php@1/mixin.php b/civicrm/mixin/mgd-php@1/mixin.php index 39d45b14ab..026602e44c 100644 --- a/civicrm/mixin/mgd-php@1/mixin.php +++ b/civicrm/mixin/mgd-php@1/mixin.php @@ -4,7 +4,8 @@ * Auto-register "**.mgd.php" files. * * @mixinName mgd-php - * @mixinVersion 1.0.0 + * @mixinVersion 1.1.0 + * @since 5.45 * * @param CRM_Extension_MixInfo $mixInfo * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. @@ -23,6 +24,10 @@ return function ($mixInfo, $bootCache) { return; } + if (is_array($event->modules) && !in_array($mixInfo->longName, $event->modules, TRUE)) { + return; + } + $mgdFiles = CRM_Utils_File::findFiles($mixInfo->getPath(), '*.mgd.php'); sort($mgdFiles); foreach ($mgdFiles as $file) { diff --git a/civicrm/mixin/setting-php@1/mixin.php b/civicrm/mixin/setting-php@1/mixin.php index 7195af40de..dff70f3d5b 100644 --- a/civicrm/mixin/setting-php@1/mixin.php +++ b/civicrm/mixin/setting-php@1/mixin.php @@ -5,6 +5,7 @@ * * @mixinName setting-php * @mixinVersion 1.0.0 + * @since 5.45 * * @param CRM_Extension_MixInfo $mixInfo * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. diff --git a/civicrm/mixin/theme-php@1/mixin.php b/civicrm/mixin/theme-php@1/mixin.php index c49b60538f..726d2187ad 100644 --- a/civicrm/mixin/theme-php@1/mixin.php +++ b/civicrm/mixin/theme-php@1/mixin.php @@ -5,6 +5,7 @@ * * @mixinName theme-php * @mixinVersion 1.0.0 + * @since 5.45 * * @param CRM_Extension_MixInfo $mixInfo * On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like. diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index 60db337bb8..b0c9f9112b 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -15,15 +15,17 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress -## CiviCRM 5.49.4 +## CiviCRM 5.50.0 Released June 1, 2022 -- **[Synopsis](release-notes/5.49.4.md#synopsis)** -- **[Security advisories](release-notes/5.49.4.md#security)** -- **[Bugs resolved](release-notes/5.49.4.md#bugs)** -- **[Credits](release-notes/5.49.4.md#credits)** -- **[Feedback](release-notes/5.49.4.md#feedback)** +- **[Synopsis](release-notes/5.50.0.md#synopsis)** +- **[Security advisories](release-notes/5.50.0.md#security)** +- **[Features](release-notes/5.50.0.md#features)** +- **[Bugs resolved](release-notes/5.50.0.md#bugs)** +- **[Miscellany](release-notes/5.50.0.md#misc)** +- **[Credits](release-notes/5.50.0.md#credits)** +- **[Feedback](release-notes/5.50.0.md#feedback)** ## CiviCRM 5.49.3 @@ -63,6 +65,24 @@ Released May 4, 2022 - **[Credits](release-notes/5.49.0.md#credits)** - **[Feedback](release-notes/5.49.0.md#feedback)** +## CiviCRM 5.48.2 + +Released April 20, 2022 + +- **[Synopsis](release-notes/5.48.2.md#synopsis)** +- **[Bugs resolved](release-notes/5.48.2.md#bugs)** +- **[Credits](release-notes/5.48.2.md#credits)** +- **[Feedback](release-notes/5.48.2.md#feedback)** + +## CiviCRM 5.48.1 + +Released April 12, 2022 + +- **[Synopsis](release-notes/5.48.1.md#synopsis)** +- **[Bugs resolved](release-notes/5.48.1.md#bugs)** +- **[Credits](release-notes/5.48.1.md#credits)** +- **[Feedback](release-notes/5.48.1.md#feedback)** + ## CiviCRM 5.48.0 Released April 6, 2022 @@ -74,6 +94,45 @@ Released April 6, 2022 - **[Credits](release-notes/5.48.0.md#credits)** - **[Feedback](release-notes/5.48.0.md#feedback)** +## CiviCRM 5.47.4 + +Released April 6, 2022 + +- **[Synopsis](release-notes/5.47.4.md#synopsis)** +- **[Security advisories](release-notes/5.47.4.md#security)** +- **[Bugs resolved](release-notes/5.47.4.md#bugs)** +- **[Credits](release-notes/5.47.4.md#credits)** +- **[Feedback](release-notes/5.47.4.md#feedback)** + +## CiviCRM 5.47.3 + +Released March 27, 2022 + +- **[Synopsis](release-notes/5.47.3.md#synopsis)** +- **[Features removed](release-notes/5.47.3.md#features)** +- **[Bugs resolved](release-notes/5.47.3.md#bugs)** +- **[Credits](release-notes/5.47.3.md#credits)** +- **[Feedback](release-notes/5.47.3.md#feedback)** + +## CiviCRM 5.47.2 + +Released March 16, 2022 + +- **[Synopsis](release-notes/5.47.2.md#synopsis)** +- **[Security advisories](release-notes/5.47.2.md#security)** +- **[Bugs resolved](release-notes/5.47.2.md#bugs)** +- **[Credits](release-notes/5.47.2.md#credits)** +- **[Feedback](release-notes/5.47.2.md#feedback)** + +## CiviCRM 5.47.1 + +Released March 9, 2022 + +- **[Synopsis](release-notes/5.47.1.md#synopsis)** +- **[Bugs resolved](release-notes/5.47.1.md#bugs)** +- **[Credits](release-notes/5.47.1.md#credits)** +- **[Feedback](release-notes/5.47.1.md#feedback)** + ## CiviCRM 5.47.0 Released March 4, 2022 @@ -85,6 +144,34 @@ Released March 4, 2022 - **[Credits](release-notes/5.47.0.md#credits)** - **[Feedback](release-notes/5.47.0.md#feedback)** +## CiviCRM 5.46.3 + +Released March 16, 2022 + +- **[Synopsis](release-notes/5.46.3.md#synopsis)** +- **[Security advisories](release-notes/5.46.3.md#security)** +- **[Bugs resolved](release-notes/5.46.3.md#bugs)** +- **[Credits](release-notes/5.46.3.md#credits)** +- **[Feedback](release-notes/5.46.3.md#feedback)** + +## CiviCRM 5.46.2 + +Released February 10, 2022 + +- **[Synopsis](release-notes/5.46.2.md#synopsis)** +- **[Bugs resolved](release-notes/5.46.2.md#bugs)** +- **[Credits](release-notes/5.46.2.md#credits)** +- **[Feedback](release-notes/5.46.2.md#feedback)** + +## CiviCRM 5.46.1 + +Released February 9, 2022 + +- **[Synopsis](release-notes/5.46.1.md#synopsis)** +- **[Bugs resolved](release-notes/5.46.1.md#bugs)** +- **[Credits](release-notes/5.46.1.md#credits)** +- **[Feedback](release-notes/5.46.1.md#feedback)** + ## CiviCRM 5.46.0 Released February 3, 2022 @@ -96,6 +183,15 @@ Released February 3, 2022 - **[Credits](release-notes/5.46.0.md#credits)** - **[Feedback](release-notes/5.46.0.md#feedback)** +## CiviCRM 5.45.3 + +Released February 3, 2022 + +- **[Synopsis](release-notes/5.45.3.md#synopsis)** +- **[Bugs resolved](release-notes/5.45.3.md#bugs)** +- **[Credits](release-notes/5.45.3.md#credits)** +- **[Feedback](release-notes/5.45.3.md#feedback)** + ## CiviCRM 5.45.2 Released January 28, 2022 diff --git a/civicrm/release-notes/5.45.3.md b/civicrm/release-notes/5.45.3.md new file mode 100644 index 0000000000..ec85bdf806 --- /dev/null +++ b/civicrm/release-notes/5.45.3.md @@ -0,0 +1,39 @@ +# CiviCRM 5.45.3 + +Released February 3, 2022 + +- **[Synopsis](#synopsis)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name=synopsis></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| Change the database schema? | no | +| Alter the API? | no | +| Require attention to configuration options? | no | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| Introduce features? | no | +| Fix bugs? | no | + +## <a name=bugs></a>Bugs resolved + +* **_Managed Entities_: Fix crash during upgrade ([dev/core#3045](https://lab.civicrm.org/dev/core/-/issues/3045): [#22642](https://github.com/civicrm/civicrm-core/pull/22642))** + + The configurations affected by this issue could not be positively identified. However, affected users reported that the patch fixed the issue. + +## <a name=credits></a>Credits + +This release was developed by the following authors and reviewers: + +CiviCoop - Jaap Jansma; CiviCRM - Coleman Watts, Tim Otten; JMA Consulting - Seamus Lee; +Third Sector Design - William Mortada, Kurund Jalmi; Wikimedia Foundation - Eileen +McNaughton + +## <a name=feedback></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.49.4.md b/civicrm/release-notes/5.46.1.md similarity index 62% rename from civicrm/release-notes/5.49.4.md rename to civicrm/release-notes/5.46.1.md index 9be24e4b48..4d07c8d666 100644 --- a/civicrm/release-notes/5.49.4.md +++ b/civicrm/release-notes/5.46.1.md @@ -1,6 +1,6 @@ -# CiviCRM 5.49.4 +# CiviCRM 5.46.1 -Released June 1, 2022 +Released February 9, 2022 - **[Synopsis](#synopsis)** - **[Bugs resolved](#bugs)** @@ -18,23 +18,17 @@ Released June 1, 2022 | Introduce features? | no | | **Fix bugs?** | **yes** | -## <a name="security"></a>Security advisories - -- **[CIVI-SA-2022-07](https://civicrm.org/advisory/civi-sa-2022-07-apiv3-access-bypass)**: APIv3 Access Bypass - ## <a name="bugs"></a>Bugs resolved -* **_Recent Items_: Fix "Authorization failed" error on checksum requests ([#23607](https://github.com/civicrm/civicrm-core/pull/23607))** - - This issue causes a fatal error on some configurations (such as public-facing `webform`s that rely on checksums), - even if the screen does not display "Recent Items". +* **_Custom Data_: Error when displaying monetary certain values ([dev/core#3059](https://lab.civicrm.org/dev/core/-/issues/3059): [#22727](https://github.com/civicrm/civicrm-core/pull/22727))** +* **_Status Check_: API-based staus-check fails due to incorrect permissioning ([dev/core#3055](https://lab.civicrm.org/dev/core/-/issues/3055): [#22733](https://github.com/civicrm/civicrm-core/pull/22733))** ## <a name="credits"></a>Credits This release was developed by the following authors and reviewers: -Wikimedia Foundation - Eileen McNaughton; MJW Consulting - Matthew Wire; JMA Consulting - -Seamus Lee; CiviCRM - Tim Otten, Coleman Watts; Artful Robot - Rich Lott +Wikimedia Foundation - Eileen McNaughton; Megaphone Technology Consulting - Jon Goldberg; +Dave D; CiviCRM - Tim Otten, Coleman Watts; BrightMinded Ltd - Bradley Taylor ## <a name="feedback"></a>Feedback diff --git a/civicrm/release-notes/5.46.2.md b/civicrm/release-notes/5.46.2.md new file mode 100644 index 0000000000..f9cf1ac4d6 --- /dev/null +++ b/civicrm/release-notes/5.46.2.md @@ -0,0 +1,43 @@ +# CiviCRM 5.46.2 + +Released February 10, 2022 + +- **[Synopsis](#synopsis)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| Change the database schema? | no | +| **Alter the API?** | **yes** | +| 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 + +* **_APIv3_: `Duplicatecheck` has hard failure when `rule_type` is omitted ([dev/core#3065](https://lab.civicrm.org/dev/core/-/issues/3065): [#22741](https://github.com/civicrm/civicrm-core/pull/22741))** + + This change restores compatibility with certain webform_civicrm configurations. + +* **_APIv3_: Relations with numerical names no longer resolved ([dev/core#3063](https://lab.civicrm.org/dev/core/-/issues/3063): [#22751](https://github.com/civicrm/civicrm-core/pull/22751))** + + This change restores compatibility with certain REST API consumers. + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Wikimedia Foundation - Eileen McNaughton; Semper IT - Karin Gerritsen; Mikey O'Toole; +Megaphone Technology Consulting - Jon Goldberg; JMA Consulting - Seamus Lee; CiviCRM - +Coleman Watts, Tim Otten + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.46.3.md b/civicrm/release-notes/5.46.3.md new file mode 100644 index 0000000000..a03e5504fd --- /dev/null +++ b/civicrm/release-notes/5.46.3.md @@ -0,0 +1,42 @@ +# CiviCRM 5.46.3 + +Released March 16, 2022 + +- **[Synopsis](#synopsis)** +- **[Security advisories](#security)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| 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="security"></a>Security advisories + +- **[CIVI-SA-2022-01: CiviContribute, Access Bypass](https://civicrm.org/advisory/civi-sa-2022-01-civicontribute-access-bypass)** +- **[CIVI-SA-2022-02: CiviEvent Importer, SQL Injection](https://civicrm.org/advisory/civi-sa-2022-02-civievent-importer-sql-injection)** +- **[CIVI-SA-2022-03: Permission Advice](https://civicrm.org/advisory/civi-sa-2022-03-permission-advice)** +- **[CIVI-SA-2022-04: jQuery UI v1.13](https://civicrm.org/advisory/civi-sa-2022-04-jquery-ui-v113)** +- **[CIVI-SA-2022-05: CKEditor v4.18](https://civicrm.org/advisory/civi-sa-2022-05-ckeditor-v418)** + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Tadpole Collective - Kevin Cristiano; JMA Consulting - Seamus Lee; Coop +SymbioTIC - Mathieu Lutfy; CiviCRM - Tim Otten; Bob Silvern; Artful Robot - +Rich Lott + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.47.1.md b/civicrm/release-notes/5.47.1.md new file mode 100644 index 0000000000..f858b568b4 --- /dev/null +++ b/civicrm/release-notes/5.47.1.md @@ -0,0 +1,38 @@ +# CiviCRM 5.47.1 + +Released March 9, 2022 + +- **[Synopsis](#synopsis)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| Change the database schema? | no | +| Alter the API? | no | +| Require attention to configuration options? | no | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| Introduce features? | no | +| **Fix bugs?** | **yes** | + +## <a name="bugs"></a>Bugs resolved + +* **_CiviGrant_: Fix a conflict between upgraded data and default data ([#22913](https://github.com/civicrm/civicrm-core/pull/22913))** +* **_CiviGrant_: Fix migrated menu data ([dev/core#3100](https://lab.civicrm.org/dev/core/-/issues/3100): [#22911](https://github.com/civicrm/civicrm-core/pull/22911))** +* **_CiviGrant_: Fix support for grant data in Drupal Views ([drupal#654](https://github.com/civicrm/civicrm-drupal/pull/654))** + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Wikimedia Foundation - Eileen McNaughton; Semper IT - Karin Gerritsen; JMA Consulting - +Seamus Lee; Dave D; Daniel Strum; CiviCRM - Coleman Watts, Tim Otten + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.47.2.md b/civicrm/release-notes/5.47.2.md new file mode 100644 index 0000000000..31e445abf3 --- /dev/null +++ b/civicrm/release-notes/5.47.2.md @@ -0,0 +1,51 @@ +# CiviCRM 5.47.2 + +Released March 16, 2022 + +- **[Synopsis](#synopsis)** +- **[Security advisories](#security)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| Change the database schema? | no | +| Alter the API? | no | +| Require attention to configuration options? | no | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| Introduce features? | no | +| **Fix bugs?** | **yes** | + +## <a name="security"></a>Security advisories + +- **[CIVI-SA-2022-01: CiviContribute, Access Bypass](https://civicrm.org/advisory/civi-sa-2022-01-civicontribute-access-bypass)** +- **[CIVI-SA-2022-02: CiviEvent Importer, SQL Injection](https://civicrm.org/advisory/civi-sa-2022-02-civievent-importer-sql-injection)** +- **[CIVI-SA-2022-03: Permission Advice](https://civicrm.org/advisory/civi-sa-2022-03-permission-advice)** +- **[CIVI-SA-2022-04: jQuery UI v1.13](https://civicrm.org/advisory/civi-sa-2022-04-jquery-ui-v113)** +- **[CIVI-SA-2022-05: CKEditor v4.18](https://civicrm.org/advisory/civi-sa-2022-05-ckeditor-v418)** + +## <a name="bugs"></a>Bugs resolved + +* **_CiviEvent_: Skip status-check if CiviEvent is disabled ([#22898](https://github.com/civicrm/civicrm-core/pull/22898))** +* **_CiviGrant_: Fix error when editing grant ([dev/core#3118](https://lab.civicrm.org/dev/core/-/issues/3118): [#22947](https://github.com/civicrm/civicrm-core/pull/22947))** +* **_Search API_: Restore compatibility with `CRM_Contact_BAO_Query_Interface` ([#22933](https://github.com/civicrm/civicrm-core/pull/22933))** +* **_Upgrader_: Add warning about CiviEvent upgrade issues ([#22958](https://github.com/civicrm/civicrm-core/pull/22958/))** +* **_Upgrader_: Clear cache with old CiviGrant data ([dev/core#3112](https://lab.civicrm.org/dev/core/-/issues/3112): [#22932](https://github.com/civicrm/civicrm-core/pull/22932))** + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Wikimedia Foundation - Eileen McNaughton; Tadpole Collective - Kevin Cristiano; Symbiotic - Mathieu Lutfy; Semper IT - +Karin Gerritsen; San Diego 350 - Bob Silvern; Megaphone Technology Consulting - Jon Goldberg; JMA Consulting - Seamus +Lee; Dave D; CiviCRM - Coleman Watts, Tim Otten; Circle Interactive - Pradeep Nayak, Matt Trim; Artful Robot - Richard +Lott; AGH Strategies - Andie Hunt + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.47.3.md b/civicrm/release-notes/5.47.3.md new file mode 100644 index 0000000000..dbc04f8cfb --- /dev/null +++ b/civicrm/release-notes/5.47.3.md @@ -0,0 +1,56 @@ +# CiviCRM 5.47.3 + +Released March 27, 2022 + +- **[Synopsis](#synopsis)** +- **[Features removed](#features)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| **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? | no | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features removed + +* **_CiviEvent_: Revert timezone changes ([dev/core#2122](https://lab.civicrm.org/dev/core/-/issues/2122): [#22940](https://github.com/civicrm/civicrm-core/pull/22940), [#22930](https://github.com/civicrm/civicrm-core/pull/22930))** + + v5.47.0 added timezone support to CiviEvent. Due to open issues which can affect downstream integrations and the accuracy of times, it is being removed from 5.47.3. + + The schema and API for CiviEvent will now match v5.46. + + If you use CiviEvent and ran v5.47.0-v5.47.2, please read the [CiviEvent v5.47 Timezone Notice](https://civicrm.org/redirect/event-timezone-5.47). + +## <a name="bugs"></a>Bugs resolved + +* **_Afform_: Admin screen does show "Submit Actions" for custom forms ([dev/core#2522](https://lab.civicrm.org/dev/core/-/issues/2522): [#23024](https://github.com/civicrm/civicrm-core/pull/23024))** +* **_CiviMember_: "New Membership" fails when "Price Set" is present but not selected ([dev/core#3134](https://lab.civicrm.org/dev/core/-/issues/3134): [#23027](https://github.com/civicrm/civicrm-core/pull/23027))** +* **_CiviReport_: Title and statistics appear twice (in print/PDF view) ([dev/core#3126](https://lab.civicrm.org/dev/core/-/issues/3126): [#22976](https://github.com/civicrm/civicrm-core/pull/22976))** +* **_Search Kit_: Fix multi-valued filters in custom forms ([#23012](https://github.com/civicrm/civicrm-core/pull/23012))** +* **_Upgrader_: Post-upgrade message no longer displayed ([dev/core#3119](https://lab.civicrm.org/dev/core/-/issues/3119): [#22985](https://github.com/civicrm/civicrm-core/pull/22985))** +* **_WordPress_: Function `is_favicon()` doesn't exist on WordPress <v5.4 ([wordpress#275](https://github.com/civicrm/civicrm-wordpress/pull/275))** + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Wikimedia Foundation - Eileen McNaughton; Third Sector Design - William Mortada; Tadpole +Collective - Kevin Cristiano; Squiffle Consulting - Aidan Saunders; Semper IT - Karin +Gerritsen; schoel-bis; JMA Consulting - Seamus Lee; guitarman; Ginkgo Street Labs - +Michael Z Daryabeygi; Fuzion - Luke Stewart, Peter Davis; Dave D; CiviCRM - Tim Otten, +Coleman Watts; Christian Wach; chris_bluejac; barijohn; Artful Robot - Rich Lott; +Agileware - Francis Whittle, Justin Freeman; AGH Strategies - Andie Hunt + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.47.4.md b/civicrm/release-notes/5.47.4.md new file mode 100644 index 0000000000..695d4168db --- /dev/null +++ b/civicrm/release-notes/5.47.4.md @@ -0,0 +1,39 @@ +# CiviCRM 5.47.4 + +Released April 6, 2022 + +- **[Synopsis](#synopsis)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| Change the database schema? | no | +| Alter the API? | no | +| Require attention to configuration options? | no | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| Introduce features? | no | +| **Fix bugs?** | **yes** | + +## <a name="security"></a>Security advisories + +- **[CIVI-SA-2022-06: Dompdf 1.12.1](https://civicrm.org/advisory/civi-sa-2022-06-dompdf-121)** + +## <a name="bugs"></a>Bugs resolved + +* **_Upgrader_: Fix upgrade error on multilingual sites ([dev/core#3151](https://lab.civicrm.org/dev/core/-/issues/3151): [#23063](https://github.com/civicrm/civicrm-core/pull/23063))** + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Wikimedia Foundation - Eileen McNaughton; Stephen Palmstrom; Joseph Lacey; JMA Consulting - Seamus Lee; Fuzion - Luke Stewart; Dave D; CiviCRM - Tim Otten; Artful Robot - Rich Lott + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.48.1.md b/civicrm/release-notes/5.48.1.md new file mode 100644 index 0000000000..9bd0c75276 --- /dev/null +++ b/civicrm/release-notes/5.48.1.md @@ -0,0 +1,46 @@ +# CiviCRM 5.48.1 + +Released April 12, 2022 + +- **[Synopsis](#synopsis)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| Change the database schema? | no | +| Alter the API? | no | +| **Require attention to configuration options?** | **yes** | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| Introduce features? | no | +| **Fix bugs?** | **yes** | + +## <a name="bugs"></a>Bugs resolved + +* **_CiviGrant_: Custom statuses renamed during migration ([dev/core#3161](https://lab.civicrm.org/dev/core/-/issues/3161): [#23130](https://github.com/civicrm/civicrm-core/pull/23130), [#23140](https://github.com/civicrm/civicrm-core/pull/23140))** + + CiviGrant supports configurable statuses ("Administer => CiviGrant => Grant Status"). If one of the _default statuses_ was + _modified_, then the status could have reverted to its default name. + + This fix prevents similar problems in new upgrades. However, if you previously used an affected version (5.47.0-5.48.0), + then please review the list in "Administer => CiviGrant => Grant Status". + +* **_CiviMail_: Fix validation error on sites that do not use Flexmailer ([#23141](https://github.com/civicrm/civicrm-core/pull/23141))** +* **_Upgrader_: Fix "No such table" error for web-user who navigates toward upgrade screen ([dev/core#3166](https://lab.civicrm.org/dev/core/-/issues/3166): [#23148](https://github.com/civicrm/civicrm-core/pull/23148))** + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Wikimedia Foundation - Eileen McNaughton; Tadpole Collective - Kevin Cristiano; Stephen +Palmstrom; Lighthouse Consulting and Design - Brian Shaughnessy; JMA Consulting - Seamus +Lee; Dave D; CiviCRM - Coleman Watts, Tim Otten + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.48.2.md b/civicrm/release-notes/5.48.2.md new file mode 100644 index 0000000000..5913966c6e --- /dev/null +++ b/civicrm/release-notes/5.48.2.md @@ -0,0 +1,42 @@ +# CiviCRM 5.48.2 + +Released April 20, 2022 + +- **[Synopsis](#synopsis)** +- **[Bugs resolved](#bugs)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +| --------------------------------------------------------------- | -------- | +| 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 + +* **_CiviContribute_: Fix SQL error when interpreting ACL ([#23235](https://github.com/civicrm/civicrm-core/pull/23235))** +* **_CiviContribute_: Fix buttons on bottom of "View Contribution" dialog ([#23202](https://github.com/civicrm/civicrm-core/pull/23202))** +* **_CiviContribute_: Fix "Download Invoice" button ([dev/core#3168](https://lab.civicrm.org/dev/core/-/issues/3168): [#23255](https://github.com/civicrm/civicrm-core/pull/23255))** +* **_CiviMember_: Fix malformed query when user has no access to any financial ACLs ([#23228](https://github.com/civicrm/civicrm-core/pull/23228))** +* **_Relationships_: Restore support for "Employer" relationships with "Individual" employers ([dev/core#3182](https://lab.civicrm.org/dev/core/-/issues/3182): [#23226](https://github.com/civicrm/civicrm-core/pull/23226))** +* **_Search Kit_: Prevent error when sorting on a non-aggregated column ([#23247](https://github.com/civicrm/civicrm-core/pull/23247))** + +## <a name="credits"></a>Credits + +This release was developed by the following authors and reviewers: + +Wikimedia Foundation - Eileen McNaughton; Phil McKerracher; Megaphone Technology +Consulting - Jon Goldberg; JMA Consulting - Seamus Lee; CiviDesk - Yashodha Chaku; Dave D; +CiviCRM - Coleman Watts, Tim Otten + +## <a name="feedback"></a>Feedback + +These release notes are edited by Tim Otten and Andie Hunt. If you'd like to +provide feedback on them, please login to https://chat.civicrm.org/civicrm and +contact `@agh1`. diff --git a/civicrm/release-notes/5.50.0.md b/civicrm/release-notes/5.50.0.md new file mode 100644 index 0000000000..1300f62ad2 --- /dev/null +++ b/civicrm/release-notes/5.50.0.md @@ -0,0 +1,773 @@ +# CiviCRM 5.50.0 + +Released June 1, 2022 + +- **[Synopsis](#synopsis)** +- **[Security advisories](#security)** +- **[Features](#features)** +- **[Bugs resolved](#bugs)** +- **[Miscellany](#misc)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +|:--------------------------------------------------------------- |:-------:| +| Fix security vulnerabilities? | **yes** | +| **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="security"></a>Security advisories + +- **[CIVI-SA-2022-07: APIv3 Access Bypass](https://civicrm.org/advisory/civi-sa-2022-07-apiv3-access-bypass)** + +## <a name="features"></a>Features + +### Core CiviCRM + +- **System Check - Add a reminder about CIVICRM_SIGN_KEYS. + ([23224](https://github.com/civicrm/civicrm-core/pull/23224))** + + Adds a system status check that generates a reminder about cryptographic + signing keys. + +- **Restrict allowed uploads - contact image + ([23147](https://github.com/civicrm/civicrm-core/pull/23147))** + + Restrict file types allowed for the contact image field. + +- **Add tracking table for import jobs + ([dev/core#1307](https://lab.civicrm.org/dev/core/-/issues/1307): + [23199](https://github.com/civicrm/civicrm-core/pull/23199) and + [23245](https://github.com/civicrm/civicrm-core/pull/23245))** + + This adds a new table for the purpose of tracking user jobs (e.g. imports) and + associated temp tables and starts tracking the submittedValues and data source + with it. + +- **CustomFields - Improve metadata about which custom groups belong to which + entities ([23336](https://github.com/civicrm/civicrm-core/pull/23336))** + + Makes the relationship between Custom Field Groups, entity types and subtypes + discoverable via APIv4 metadata. + +- **Upgrader - Add support for automatic snapshots + ([23522](https://github.com/civicrm/civicrm-core/pull/23522) and + [23544](https://github.com/civicrm/civicrm-core/pull/23594))** + + This adds a utility for recording a snapshot of certain columns in a database + table prior to applying any upgrade steps to it. This will make it easier to + roll back or compare changes if necessary after the upgrade. + + The snapshot tables begin with the prefix `snap_civicrm_` and will be cleaned + up after a certain number of minor version upgrades. For now, the feature is + disabled by default, but you may enable it by adding + + define('CIVICRM_UPGRADE_SNAPSHOT', TRUE); + + to the settings file. + +- **Api4 - minor fixes and updates + ([23310](https://github.com/civicrm/civicrm-core/pull/23310))** + + A few minor tweaks to APIv4 to improve working with extensions that have + virtual entities. + +- **APIv4 - Add NOW() date function + ([23378](https://github.com/civicrm/civicrm-core/pull/23378))** + + Adds a function for NOW to APIv4 which returns the full date+time, and + distinguishes it from CURDATE which just returns the date part. + +- **APIv4 - Add MONTH sql function + ([23377](https://github.com/civicrm/civicrm-core/pull/23377))** + + Adds the MONTH function to APIv4 & SearchKit, which enables e.g. filtering + birthdays by month. + +- **APIv4 - Add `is_active` extra field to Domain entity + ([22159](https://github.com/civicrm/civicrm-core/pull/22159))** + + Adds a new calculated field to APIv4 making it easier to get the current + active domain. + +- **APIv4 - Add `Managed::reconcile` action. + ([23243](https://github.com/civicrm/civicrm-core/pull/23243))** + + Adds APIv4 wrapper around ManagedEntities->reconcile(); + +- **Implement countFetched() and countMatched() on api4 results. + ([22115](https://github.com/civicrm/civicrm-core/pull/22115))** + + Provides clearer methods for finding out how many API4 results you've got. + +- **SearchKit - Add data segmentation functionality + ([23059](https://github.com/civicrm/civicrm-core/pull/23059))** + + Creates virtual fields based on flexible segmentation criteria. + +- **SearchKit - Add date pseudo-fields + ([23381](https://github.com/civicrm/civicrm-core/pull/23381))** + + Exposes date pseudo-fields to SearchKit. + +- **make survey title available in form builder + ([23322](https://github.com/civicrm/civicrm-core/pull/23322))** + + Makes the Survey title field available in Afform. + +- **Afform - Dispatch event to alter admin metadata; provide mixin + ([23303](https://github.com/civicrm/civicrm-core/pull/23303))** + + Makes Form-Builder more extensible by allowing extensions to add to the list + of available entities, elements, input types, styles, etc. + +- **Afform - Improve dragging into dropzones + ([23239](https://github.com/civicrm/civicrm-core/pull/23239))** + + Improves the drag-n-drop UX in Afform when composing complex layouts. + +- **AfformGui - Optional reset button for search and submit forms + ([dev/core#3430](https://lab.civicrm.org/dev/core/-/issues/3430): + [23334](https://github.com/civicrm/civicrm-core/pull/23334))** + + Adds a "reset" button for search forms. + +- **Add icons for SavedSearch and SearchDisplay entities + ([23149](https://github.com/civicrm/civicrm-core/pull/23149))** + + Improves user experience by adding icons for Saved Search and Search Display + entities. + +- **Simplify and improve performance of query to insert updated cache + ([21943](https://github.com/civicrm/civicrm-core/pull/21943))** + + Caching performance improvement. + +### CiviCampaign + +- **Make links to sign a petition easily accessible on the form. + ([23316](https://github.com/civicrm/civicrm-core/pull/23316))** + + Adds links to the bottom of the petition edit form so users can more easily + publicize their petition. + +### CiviCase + +- **Activity Type + Activity Status + Case Type not being Combined Correctly in + Search Builder + ([dev/core#3249](https://lab.civicrm.org/dev/core/-/issues/3249): + [23313](https://github.com/civicrm/civicrm-core/pull/23313))** + + This makes `CaseType` in APIv4 a managed entity. This is part of a move + towards having all cases defined in configuration and deprecating XML-defined + case types. + +### CiviContribute + +- **Define return parameters for doPayment + ([dev/financial#141](https://lab.civicrm.org/dev/financial/-/issues/141): + [22683](https://github.com/civicrm/civicrm-core/pull/22683))** + + Updates return parameters on all payment processors to match expected results. + +### Drupal Integration + +- **Extend command drush civicrm-ext-list for Drupal 8 + ([72](https://github.com/civicrm/civicrm-drupal-8/pull/72))** + + Extends the `drush civicrm-ext-list` command to work for drupal 8. + +### Wordpress Integration + +- **WordPress - Display site-theme/decorations on error screens + ([22805](https://github.com/civicrm/civicrm-core/pull/22805))** + + Improve error screen user experience by displaying site theme/decorations. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **Improve validation of start and end dates for events, contribution pages and + more (Work Towards + [dev/core#2846](https://lab.civicrm.org/dev/core/-/issues/2846): + [21513](https://github.com/civicrm/civicrm-core/pull/21513))** + + Applies form-level validation to start and end dates. + +- **Report Filter Statistics don't show filters with value of "0" + ([dev/core#3164](https://lab.civicrm.org/dev/core/-/issues/3164): + [23191](https://github.com/civicrm/civicrm-core/pull/23191))** + +- **Fix 'Authorization Failed' regression when submitting eg. webform via + checksum ([23607](https://github.com/civicrm/civicrm-core/pull/23607))** + + This resolves a bug where accessing an entity through APIv3, coming in via a + checksum link, results in a failed authorization for the step of updating the + recent items stack via APIv4. + +- **Manage Extensions - Hide nag for core exts + ([dev/core#3171](https://lab.civicrm.org/dev/core/-/issues/3171): + [23204](https://github.com/civicrm/civicrm-core/pull/23204))** + +- **AuthX: Breaks sites when Basic Auth is enabled + ([dev/core#3416](https://lab.civicrm.org/dev/core/-/issues/3416): + [22837](https://github.com/civicrm/civicrm-core/pull/22837))** + +- **Save button on API4 explorer is misleading + ([dev/core#3155](https://lab.civicrm.org/dev/core/-/issues/3155): + [23144](https://github.com/civicrm/civicrm-core/pull/23144))** + +- **APIv4 - Support pseudoconstant suffixes in getFields + ([23348](https://github.com/civicrm/civicrm-core/pull/23348))** + +- **APIv4 - Deprecate unnecessary event + ([23311](https://github.com/civicrm/civicrm-core/pull/23311))** + +- **SearchKit - Consistently check for date field + ([23354](https://github.com/civicrm/civicrm-core/pull/23354))** + +- **SearchKit - Ensure all date and timestamp fields are presented with datepicker + ([23335](https://github.com/civicrm/civicrm-core/pull/23335))** + +- **SearchKit - Keep label when switching entity + ([23319](https://github.com/civicrm/civicrm-core/pull/23319))** + +- **SearchKit - Move grid css to its own file + ([23315](https://github.com/civicrm/civicrm-core/pull/23315))** + +- **SearchKit - Fix 'undefined var' error after import + ([23572](https://github.com/civicrm/civicrm-core/pull/23572))** + + Fixes an unresponsive screen after importing multiple records into SearchKit + (using the Import dialog). + +- **add missing Parishes of Bermuda (civicrm_state_province) + ([23339](https://github.com/civicrm/civicrm-core/pull/23339))** + +- **PR 22070 follow-up: reinstate respecting no_display on report column headers + ([23321](https://github.com/civicrm/civicrm-core/pull/23321))** + + Respect no_display on report column headers. + +- **Remove preferred email format from inline edit + ([23269](https://github.com/civicrm/civicrm-core/pull/23269))** + +- **Do not escape wizard class - procede straight to Hogwarts + ([23185](https://github.com/civicrm/civicrm-core/pull/23185))** + +- **jira/browse/CRM-18217 On the website front-end, CiviCRM page heading should + start from h2 and not h1 + ([23324](https://github.com/civicrm/civicrm-core/pull/23324))** + +- **Disable scrolling on time inputs + ([dev/user-interface#47](https://lab.civicrm.org/dev/user-interface/-/issues/47): + [23264](https://github.com/civicrm/civicrm-core/pull/23264))** + +- **SearchKit - Fix selection of fields when creating a Data Segment + ([23265](https://github.com/civicrm/civicrm-core/pull/23265))** + +- **APIv4 - Fix fatal error on getFields when passing in contact id + ([23389](https://github.com/civicrm/civicrm-core/pull/23389))** + +- **ACLCache: Efficiency. Fix duplicate inserts + ([21993](https://github.com/civicrm/civicrm-core/pull/21993))** + +- **Update expired root certs (5.50) + ([23387](https://github.com/civicrm/civicrm-core/pull/23387))** + +- **Fix 'Table already exists' error when running 5.50 upgrade twice + ([23355](https://github.com/civicrm/civicrm-core/pull/23355))** + +- **5.50.alpha1.mysql.tpl - Escape `grouping` (reserved word in MySQL 8.0) + ([23396](https://github.com/civicrm/civicrm-core/pull/23396))** + +- **Import code cleanup (Work Towards + [dev/core#3414](https://lab.civicrm.org/dev/core/-/issues/3414): + [23291](https://github.com/civicrm/civicrm-core/pull/23291))** + + Stop dropping temp table on finish of contact import job. + +- **[Import] Upgrade saved import names for contacts + ([23288](https://github.com/civicrm/civicrm-core/pull/23288))** + + Fixes the Contact import such that the name field hold the name of the field + being upgraded to rather than the label (and fixes the import such that it + expects name going forwards). + +- **[Import] Enotice fix on contact import field mapping screen + ([23306](https://github.com/civicrm/civicrm-core/pull/23306))** + +- **[Import] Output errors, duplicates csvs directly from the user job table + ([23292](https://github.com/civicrm/civicrm-core/pull/23292))** + +- **Import - fix comment + ([23361](https://github.com/civicrm/civicrm-core/pull/23361))** + +- **resolve TypeError: unsupported operand types: string + int; + ([23015](https://github.com/civicrm/civicrm-core/pull/23015))** + +- **Ensure tags fields are assigned to tpl for email form test + ([23183](https://github.com/civicrm/civicrm-core/pull/23183))** + +- **Don't overescape links in pledge tab + ([23206](https://github.com/civicrm/civicrm-core/pull/23206))** + +- **Don't overescape tab links + ([23205](https://github.com/civicrm/civicrm-core/pull/23205))** + +- **🪲 🪳 Bug Fix: The option "Enable multiple bulk email address for a contact" + does not apply when editing a Contact, only works for inline edit of email + addresses ([23082](https://github.com/civicrm/civicrm-core/pull/23082))** + +- **Translation - distinguish between 'On' for date and 'On'/'Off' + ([23379](https://github.com/civicrm/civicrm-core/pull/23379))** + +- **getSelfServiceEligibility: fix string translation + ([23163](https://github.com/civicrm/civicrm-core/pull/23163))** + +- **Centralise skipColumnHeader to one function (fixes notices, cleans code) + ([23135](https://github.com/civicrm/civicrm-core/pull/23135))** + +- **âœðŸ¼ Fix spelling of "additional". Numerous uses of "additonal" + ([23162](https://github.com/civicrm/civicrm-core/pull/23162))** + +- **Ensure deleteURL variable for ContactImage.tpl + ([23150](https://github.com/civicrm/civicrm-core/pull/23150))** + +- **Don't overescape weights in default-escape mode + ([23152](https://github.com/civicrm/civicrm-core/pull/23152))** + +- **Avoid PHP notices on FinancialAccount table + ([23151](https://github.com/civicrm/civicrm-core/pull/23151))** + +- **Apply nodefaults to row actions + ([23207](https://github.com/civicrm/civicrm-core/pull/23207))** + +- **Add nodefaults to access.tpl + ([23208](https://github.com/civicrm/civicrm-core/pull/23208))** + +- **Add nodefaults to group edit form + ([23225](https://github.com/civicrm/civicrm-core/pull/23225))** + +- **Add smarty:nodefaults to ManageEvent page. + ([23173](https://github.com/civicrm/civicrm-core/pull/23173))** + +- **Add smarty:nodefaults to default.tpl form. + ([23153](https://github.com/civicrm/civicrm-core/pull/23153))** + +- **Apply nodefaults to contact tabs for escape-on-output + ([23232](https://github.com/civicrm/civicrm-core/pull/23232))** + +- **MultipleRecordFieldsListing.tpl - JS strings should us JS escaping + ([23499](https://github.com/civicrm/civicrm-core/pull/23499))** + +### CiviCampaign + +- **update-supporter-url + ([23287](https://github.com/civicrm/civicrm-core/pull/23287))** + +### CiviCase + +- **Case Resources cuts off at 25 contacts when creating case activity + ([dev/core#3431](https://lab.civicrm.org/dev/core/-/issues/3431): + [23327](https://github.com/civicrm/civicrm-core/pull/23327))** + + Case activity only has 25 contacts listed from Case Resources in the Send Copy + section. + +### CiviContribute + +- **Paypal pro, a.net ipn - do not update start date, status + ([23156](https://github.com/civicrm/civicrm-core/pull/23156))** + +- **Compare currencies as well as amounts on template Contribution change + ([23298](https://github.com/civicrm/civicrm-core/pull/23298))** + +- **Start to fix misnamed FinancialTrxn bao + ([23190](https://github.com/civicrm/civicrm-core/pull/23190))** + +- **ensure checkbox custom fields on contributions import properly + ([23246](https://github.com/civicrm/civicrm-core/pull/23246))** + +- **Always assign pay_later_receipt + ([23080](https://github.com/civicrm/civicrm-core/pull/23080))** + +- **Contribution dashboard links work in escape-on-output mode + ([23174](https://github.com/civicrm/civicrm-core/pull/23174))** + +- **Improve financial trxn spec to require required fields + ([22571](https://github.com/civicrm/civicrm-core/pull/22571))** + +- **Always use cancelSubscription form for cancelling recurring contributions + ([23210](https://github.com/civicrm/civicrm-core/pull/23210))** + +- **financialacls core extension uses a global callback in + hook_civicrm_container, which might be iffy + ([dev/core#3184](https://lab.civicrm.org/dev/core/-/issues/3184): + [23268](https://github.com/civicrm/civicrm-core/pull/23268))** + + Definitively load main files during bootstrap. + +- **Fix empty money handling + ([23528](https://github.com/civicrm/civicrm-core/pull/23528))** + + Tokens representing money fields will now default to 0 for empty values. + +- **Calculate unit_price based on qty + ([23566](https://github.com/civicrm/civicrm-core/pull/23566))** + + This resolves a bug when a template contribution was created for a recurring + contribution: the unit_price on the line item was set to match the line_total, + ignoring qty. + +### CiviEvent + +- **batch geocode API does not process event addresses + ([dev/core#3439](https://lab.civicrm.org/dev/core/-/issues/3439): + [23351](https://github.com/civicrm/civicrm-core/pull/23351))** + +- **Event template scheduled reminders lost when creating a new event using API4 + ([dev/core#3183](https://lab.civicrm.org/dev/core/-/issues/3183): + [23238](https://github.com/civicrm/civicrm-core/pull/23238))** + +- **Scheduled Reminders "Additional Recipients" feature sends at wrong time, is + incompatible with tokens + ([dev/core#1836](https://lab.civicrm.org/dev/core/-/issues/1836): + [23101](https://github.com/civicrm/civicrm-core/pull/23101))** + +- **Event self-service cancel: allow cancelling Waitlist registration + ([23164](https://github.com/civicrm/civicrm-core/pull/23164))** + +### CiviMail + +- **send group subscription welcome email only if template is enabled + ([23139](https://github.com/civicrm/civicrm-core/pull/23139))** + +### CiviMember + +- **Limit issue fix + ([23229](https://github.com/civicrm/civicrm-core/pull/23229))** + + Remove limit when printing labels from member search action. + +- **Set default values on MembershipView to stop PHP notices + ([22664](https://github.com/civicrm/civicrm-core/pull/22664))** + +### Drupal Integration + +- **Epic: Drupal 10 readiness (Work Towards + [dev/drupal#176](https://lab.civicrm.org/dev/drupal/-/issues/176): + [23302](https://github.com/civicrm/civicrm-core/pull/23302))** + + Fixes the 'Error: Class "Symfony\Cmf\Component\Routing\RouteObjectInterface" + not found' when using cv in drupal 9 and 10. + +## <a name="misc"></a>Miscellany + +- **ManagedEntities - Allow targeted reconciliation. Add hook parameter. + Simplify logic. + ([22959](https://github.com/civicrm/civicrm-core/pull/22959))** + +- **DAOs out of date + ([23362](https://github.com/civicrm/civicrm-core/pull/23362))** + +- **[Import] Rename dedupe rule id field from dedupe to dedupe_rule_id field + ([23263](https://github.com/civicrm/civicrm-core/pull/23263))** + +- **Add import function to parser + ([23338](https://github.com/civicrm/civicrm-core/pull/23338))** + +- **I have no words + ([23244](https://github.com/civicrm/civicrm-core/pull/23244))** + +- **Update phpleague/csv from 9.2 to 9.6 (supports php 8) + ([dev/core#3172](https://lab.civicrm.org/dev/core/-/issues/3172): + [23180](https://github.com/civicrm/civicrm-core/pull/23180))** + +- **Stop adding obsolete currencies to new installs + ([23345](https://github.com/civicrm/civicrm-core/pull/23345))** + +- **Managed entity cleanup + ([23251](https://github.com/civicrm/civicrm-core/pull/23251))** + +- **Take a reality check on moneyCleaning in test + ([23215](https://github.com/civicrm/civicrm-core/pull/23215))** + +- **Minor simplification of getAmountLevelText + ([23159](https://github.com/civicrm/civicrm-core/pull/23159))** + +- **Standardise activity datasource text + ([23217](https://github.com/civicrm/civicrm-core/pull/23217))** + +- **Standardise participant import text + ([23218](https://github.com/civicrm/civicrm-core/pull/23218))** + +- **Standardize DataSource file for Contribution & Membership + ([23186](https://github.com/civicrm/civicrm-core/pull/23186))** + +- **Release - Set version compatibility for core extensions when updating core + ([23143](https://github.com/civicrm/civicrm-core/pull/23143))** + +- **Make static function static - processCaseTags + ([23278](https://github.com/civicrm/civicrm-core/pull/23278))** + +- **Whitespace cleanup in template file + ([23277](https://github.com/civicrm/civicrm-core/pull/23277))** + +- **IDE cheer - cast var explicitly to an int + ([23350](https://github.com/civicrm/civicrm-core/pull/23350))** + +- **Remove unused variable + ([23352](https://github.com/civicrm/civicrm-core/pull/23352))** + +- **Minor function simplification in private function + ([23364](https://github.com/civicrm/civicrm-core/pull/23364))** + +- **ManagedEntities - Update version number for mgd-php + ([23422](https://github.com/civicrm/civicrm-core/pull/23422))** + +- **Minor readability improvement + ([23157](https://github.com/civicrm/civicrm-core/pull/23157))** + +- **Cleanup crmMailing/Templates.js + ([23188](https://github.com/civicrm/civicrm-core/pull/23188))** + +- **Further simplify variable retrieval + ([23172](https://github.com/civicrm/civicrm-core/pull/23172))** + +- **Remove unused parameter from private function + ([23194](https://github.com/civicrm/civicrm-core/pull/23194))** + +- **Remove code only needed by Drupal6 + ([23212](https://github.com/civicrm/civicrm-core/pull/23212))** + +- **Remove unused function + ([23200](https://github.com/civicrm/civicrm-core/pull/23200))** + +- **Remove an unset variable + ([23285](https://github.com/civicrm/civicrm-core/pull/23285))** + +- **Remove some copy & paste + ([23171](https://github.com/civicrm/civicrm-core/pull/23171))** + +- **Remove another good intention - unused variables + ([23275](https://github.com/civicrm/civicrm-core/pull/23275))** + +- **Reduce use of reference + ([23165](https://github.com/civicrm/civicrm-core/pull/23165))** + +- **Remove-single-value-loop + ([23155](https://github.com/civicrm/civicrm-core/pull/23155))** + +- **[REF] [Import] Use shared file instead of now-identical files + ([23216](https://github.com/civicrm/civicrm-core/pull/23216))** + +- **[REF] [Import] Standardise import text for CustomData import + ([23219](https://github.com/civicrm/civicrm-core/pull/23219))** + +- **[Ref] [Import] [csv] Remove non-functional code + ([23195](https://github.com/civicrm/civicrm-core/pull/23195))** + +- **[REF] [Import] Handle limit with more sanity + ([23262](https://github.com/civicrm/civicrm-core/pull/23262))** + +- **[Import] [Ref] Simplify string concatenation + ([23330](https://github.com/civicrm/civicrm-core/pull/23330))** + +- **[REF][Import] (minor) Extract getHightlightedFields + ([23304](https://github.com/civicrm/civicrm-core/pull/23304))** + +- **[REF] [Import] Obsolete if removal + ([23253](https://github.com/civicrm/civicrm-core/pull/23253))** + +- **[REF] [Import] [Custom] Remove another in-between class + ([23222](https://github.com/civicrm/civicrm-core/pull/23222))** + +- **[REF] [Import] [Trivial] Minor test fixes + ([23341](https://github.com/civicrm/civicrm-core/pull/23341))** + +- **[REF] [Import] Trivial - simplify variable + ([23347](https://github.com/civicrm/civicrm-core/pull/23347))** + +- **[REF] [Import] Ensure jobID is set in contact flow + ([23280](https://github.com/civicrm/civicrm-core/pull/23280))** + +- **[REF] [Import] call non-deprecated function instead of deprecated + ([23293](https://github.com/civicrm/civicrm-core/pull/23293))** + +- **[REF] [Import] [Trivial] Make 'mapper' field available as a submittable + value throughout the flow + ([23308](https://github.com/civicrm/civicrm-core/pull/23308))** + +- **[REF] [Import] Extract getContactType + ([23284](https://github.com/civicrm/civicrm-core/pull/23284))** + +- **[REF] [Import] [Trivial] Make mapperKeys parameter optional in construct + ([23307](https://github.com/civicrm/civicrm-core/pull/23307))** + +- **[REF] [Import] [Trivial] Extract duplicate match options + ([23300](https://github.com/civicrm/civicrm-core/pull/23300))** + +- **[REF] [Import] Remove another good intention from the import class + ([23261](https://github.com/civicrm/civicrm-core/pull/23261))** + +- **[REF] [Import] Stop overloading dataSource form + ([23237](https://github.com/civicrm/civicrm-core/pull/23237))** + +- **[REF] [Import] Remove meaningless code + ([23242](https://github.com/civicrm/civicrm-core/pull/23242))** + +- **[REF] [Import] remove pointless fini functions. + ([23241](https://github.com/civicrm/civicrm-core/pull/23241))** + +- **[REF] [Import] Remove warning count - never returned + ([23240](https://github.com/civicrm/civicrm-core/pull/23240))** + +- **[Ref] [Import] Remove another good intention....mapField + ([23236](https://github.com/civicrm/civicrm-core/pull/23236))** + +- **[REF] [Import] Remove last in-between parser class + ([23227](https://github.com/civicrm/civicrm-core/pull/23227))** + +- **[Ref] [Import] Remove another 'in-between' class + ([23221](https://github.com/civicrm/civicrm-core/pull/23221))** + +- **[REF] [Import] [Contact] Remove in-between class + ([23223](https://github.com/civicrm/civicrm-core/pull/23223))** + +- **[Ref] [Import] Cleanup cleanup on old tables for form re-submission + ([23276](https://github.com/civicrm/civicrm-core/pull/23276))** + +- **[REF] [Import] Trivial - simplify variable + ([23360](https://github.com/civicrm/civicrm-core/pull/23360))** + +- **[REF][Import] [Contact] Clean up preview screen + ([23340](https://github.com/civicrm/civicrm-core/pull/23340))** + +- **[Import] [Ref] [Contact] Extract row mapping and add test + ([23342](https://github.com/civicrm/civicrm-core/pull/23342))** + +- **[Ref] [Import] Add extra functions to DataSource + ([23344](https://github.com/civicrm/civicrm-core/pull/23344))** + +- **[REF] [Import] Trivial - simplify variable + ([23349](https://github.com/civicrm/civicrm-core/pull/23349))** + +- **(REF) CryptoRegistry - Fix type declaration + ([23220](https://github.com/civicrm/civicrm-core/pull/23220))** + +- **[REF] [Import] extract validation functionality + ([23371](https://github.com/civicrm/civicrm-core/pull/23371))** + +- **[REF] [Import] Trivial - simplify variables + ([23369](https://github.com/civicrm/civicrm-core/pull/23369))** + +- **[Ref] Get rid of private deprecated legacy function + ([23375](https://github.com/civicrm/civicrm-core/pull/23375))** + +- **[REF] Do not treat site having a default location type as optional + ([23282](https://github.com/civicrm/civicrm-core/pull/23282))** + +- **[REF] Minor code simplifcation - reduce silly lines + ([23368](https://github.com/civicrm/civicrm-core/pull/23368))** + +- **[REF] [Import] Remove unused tpl assign showColNames + ([23366](https://github.com/civicrm/civicrm-core/pull/23366))** + +- **[Import] [Ref] [Minor] Simplify error handling with a try-catch block + ([23370](https://github.com/civicrm/civicrm-core/pull/23370))** + +- **[Ref][Import] Remove another good intention - random email counting + ([23367](https://github.com/civicrm/civicrm-core/pull/23367))** + +- **[REF] [Import] Simplify dataSource contract - remove unused preProcess + ([23272](https://github.com/civicrm/civicrm-core/pull/23272))** + +- **[REF] [Import] Trivial - simplify variables + ([23363](https://github.com/civicrm/civicrm-core/pull/23363))** + +- **(REF) Fix test to use full flow + ([23160](https://github.com/civicrm/civicrm-core/pull/23160))** + +- **[REF] Extract getContributionRecurID + ([23158](https://github.com/civicrm/civicrm-core/pull/23158))** + +- **[REF] [Import] Stop passing submittedValues as parameters + ([23343](https://github.com/civicrm/civicrm-core/pull/23343))** + +- **[REF] [Import] Remove another good intention - import 'conflicts' + ([23380](https://github.com/civicrm/civicrm-core/pull/23380))** + +- **[REF] Code cleanup on location entities for the Contact Summary screen + ([22967](https://github.com/civicrm/civicrm-core/pull/22967))** + +- **[REF] Fix test to use form flow / helper + ([23211](https://github.com/civicrm/civicrm-core/pull/23211))** + +- **[REF][Test] Update loadMappingTest to use form flow + ([23286](https://github.com/civicrm/civicrm-core/pull/23286))** + +- **[REF] Do not pass form properties within the form + ([23213](https://github.com/civicrm/civicrm-core/pull/23213))** + +- **(NFC) authx - Update descriptions and links in `info.xml` + ([23169](https://github.com/civicrm/civicrm-core/pull/23169))** + +- **(NFC) mixin/**.php - Add @since tags + ([23423](https://github.com/civicrm/civicrm-core/pull/23423) and + [23440](https://github.com/civicrm/civicrm-core/pull/23440))** + +- **(NFC) Skip CliRunnerTest on php80+drush+Backdrop + ([23184](https://github.com/civicrm/civicrm-core/pull/23184))** + +- **NFC Minor cleanup to Participant confirm + ([23357](https://github.com/civicrm/civicrm-core/pull/23357))** + +- **[NFC] Fix APIv4 docblock annotations for Managed API + ([23359](https://github.com/civicrm/civicrm-core/pull/23359))** + +- **E2E_Core_ErrorTest - Demonstrate whether error pages are well-formed + ([23257](https://github.com/civicrm/civicrm-core/pull/23257))** + +- **(E2E) `testErrorChrome` - Update assertions for page-chrome + ([23397](https://github.com/civicrm/civicrm-core/pull/23397))** + +- **(E2E) testErrorChrome - Skip Backdrop and D8+ (much like D7) + ([23398](https://github.com/civicrm/civicrm-core/pull/23398))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Alice Frumin, Andie Hunt; Agileware - Justin Freeman; +Benjamin W; BrightMinded Ltd - Bradley Taylor; Circle Interactive - Pradeep +Nayak; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; Coop +SymbioTIC - Mathieu Lutfy, Samuel Vanhove; Dave D; Freeform Solutions - Herb +van den Dool; Ginkgo Street Labs - Michael Z Daryabeygi; iXiam - Luciano +Spiegel; JMA Consulting - Monish Deb, Seamus Lee; John Kingsnorth; Joinery - +Allen Shaw; Lighthouse Consulting and Design - Brian Shaughnessy; Megaphone +Technology Consulting - Jon Goldberg; MJW Consulting - Matthew Wire; Progressive +Technology Project - Jamie McClelland; Third Sector Design - Kurund Jalmi; +Wikimedia Foundation - Eileen McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +Andreas Howiller; Andy Burns; Artful Robot - Rich Lott; Australian Greens - John +Twyman; Betty Dolfing; Christian Wach; Circle Interactive - Dave Jenkins, Matt +Trim; CiviCoop - Jaap Jansma; iXiam - Vangelis Pantazis; JMA Consulting - Edsel +Lopez; John Kingsnorth; Joinery - Allen Shaw; Nicol Wistreich; Tadpole +Collective - Kevin Cristiano + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andie Hunt. If you'd like +to provide feedback on them, please log in to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index 09ce030ce1..0e8ec1e4d5 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -97,6 +97,7 @@ DROP TABLE IF EXISTS `civicrm_setting`; DROP TABLE IF EXISTS `civicrm_website`; DROP TABLE IF EXISTS `civicrm_openid`; DROP TABLE IF EXISTS `civicrm_timezone`; +DROP TABLE IF EXISTS `civicrm_user_job`; DROP TABLE IF EXISTS `civicrm_uf_match`; DROP TABLE IF EXISTS `civicrm_tag`; DROP TABLE IF EXISTS `civicrm_state_province`; @@ -1913,6 +1914,32 @@ CREATE TABLE `civicrm_uf_match` ( ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; +-- /******************************************************* +-- * +-- * civicrm_user_job +-- * +-- * Tracking for user jobs (eg. imports). +-- * +-- *******************************************************/ +CREATE TABLE `civicrm_user_job` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Job ID', + `name` varchar(64) COMMENT 'Unique name for job.', + `created_id` int unsigned COMMENT 'FK to contact table.', + `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date and time this job was created.', + `start_date` timestamp NULL COMMENT 'Date and time this import job started.', + `end_date` timestamp NULL COMMENT 'Date and time this import job ended.', + `expires_date` timestamp NULL COMMENT 'Date and time to clean up after this import job (temp table deletion date).', + `status_id` int unsigned NOT NULL, + `type_id` int unsigned NOT NULL, + `queue_id` int unsigned COMMENT 'FK to Queue', + `metadata` text COMMENT 'Data pertaining to job configuration', + PRIMARY KEY (`id`), + UNIQUE INDEX `UI_name`(name), + CONSTRAINT FK_civicrm_user_job_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, + CONSTRAINT FK_civicrm_user_job_queue_id FOREIGN KEY (`queue_id`) REFERENCES `civicrm_queue`(`id`) ON DELETE SET NULL +) +ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC; + -- /******************************************************* -- * -- * civicrm_timezone diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index 97ad641cb4..74a4f2f766 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -4427,7 +4427,23 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1170, "DIN", "Dinagat Islands"), -- Add missing state for Colombia -(NULL, 1048, "HUI", "Huila"); +(NULL, 1048, "HUI", "Huila"), + +-- Add missing parishes for Bermuda + (NULL, 1023, 'DEV', 'Devonshire'), + (NULL, 1023, 'HAM', 'Hamilton Parish'), + (NULL, 1023, 'HA', 'City of Hamilton'), + (NULL, 1023, 'PAG', 'Paget'), + (NULL, 1023, 'PEM', 'Pembroke'), + (NULL, 1023, 'SG', 'Town of St. George'), + (NULL, 1023, 'SGE', 'Saint George\'s'), + (NULL, 1023, 'SAN', 'Sandys'), + (NULL, 1023, 'SMI', 'Smiths'), + (NULL, 1023, 'SOU', 'Southampton'), + (NULL, 1023, 'WAR', 'Warwick') + + -- end of statement: + ; -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | @@ -4495,7 +4511,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 52, "RSD", "Дин.","941", "Serbian Dinar"), ( 53, "CUP", "₱", "192", "Cuban Peso"), ( 54, "CVE", NULL, "132", "Cape Verde Escudo"), -( 55, "CYP", "£", "196", "Cyprus Pound"), ( 56, "CZK", "KÄ", "203", "Czech Koruna"), ( 57, "DJF", NULL, "262", "Djibouti Franc"), ( 58, "DKK", "kr", "208", "Danish Krone"), @@ -4512,7 +4527,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 70, "GMD", NULL, "270", "Gambian Dalasi"), ( 71, "GNF", NULL, "324", "Guinea Franc"), ( 72, "GTQ", "Q", "320", "Guatemalan Quetzal"), -( 73, "GWP", NULL, "624", "Guinea-Bissau Peso"), ( 74, "GYD", "$", "328", "Guyana Dollar"), ( 75, "HKD","HK$", "344", "Hong Kong Dollar"), ( 76, "HNL", "L", "340", "Honduran Lempira"), @@ -4537,8 +4551,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 95, "LKR", "₨", "144", "Sri Lanka Rupee"), ( 96, "LRD", "$", "430", "Liberian Dollar"), ( 97, "LSL", NULL, "426", "Lesotho Loti"), -( 98, "LTL", "Lt", "440", "Lithuanian Litas"), -( 99, "LVL", "Ls", "428", "Latvian Lats"), (100, "LYD", NULL, "434", "Libyan Dinar"), (101, "MAD", NULL, "504", "Moroccan Dirham"), (102, "MDL", NULL, "498", "Moldovan Leu"), @@ -4547,7 +4559,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES (105, "MMK", NULL, "104", "Myanmar Kyat"), (106, "MOP", NULL, "446", "Macao Pataca"), (107, "MRO", NULL, "478", "Mauritanian Ouguiya"), -(108, "MTL", "Lm", "470", "Maltese Lira"), (109, "MUR", "₨", "480", "Mauritius Rupee"), (110, "MVR", NULL, "462", "Maldive Rufiyaa"), (111, "MWK", NULL, "454", "Malawi Kwacha"), @@ -4568,19 +4579,15 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES (126, "PKR", "₨", "586", "Pakistan Rupee"), (127, "PYG", "Gs", "600", "Paraguay Guarani"), (128, "QAR", "ï·¼", "634", "Qatari Rial"), -(129, "ROL", NULL, "642", "Romanian Old Leu"), (130, "RON","lei", "946", "Romanian New Leu"), (131, "RUB","руб", "643", "Russian Rouble"), (132, "RWF", NULL, "646", "Rwanda Franc"), (133, "SAR", "ï·¼", "682", "Saudi Riyal"), (134, "SBD", "$", "090", "Solomon Islands Dollar"), (135, "SCR", "₨", "690", "Seychelles Rupee"), -(136, "SDD", NULL, "736", "Sudanese Dinar"), (137, "SEK", "kr", "752", "Swedish Krona"), (138, "SGD", "$", "702", "Singapore Dollar"), (139, "SHP", "£", "654", "Saint Helena Pound"), -(140, "SIT", NULL, "705", "Slovenian Tolar"), -(141, "SKK","SIT", "703", "Slovak Koruna"), (142, "SLL", NULL, "694", "Leone"), (143, "SOS", "S", "706", "Somali Shilling"), (144, "SRD", "$", "968", "Surinam Dollar"), @@ -4589,7 +4596,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES (147, "SYP", "£", "760", "Syrian Pound"), (148, "SZL", NULL, "748", "Eswatini Lilangeni"), (149, "TJS", NULL, "972", "Tajik Somoni"), -(150, "TMM", NULL, "795", "Turkmenistan Manat"), (151, "TND", NULL, "788", "Tunisian Dinar"), (152, "TOP", NULL, "776", "Tongan Pa'anga"), (153, "TRY","YTL", "949", "New Turkish Lira"), @@ -5301,9 +5307,9 @@ VALUES (@option_group_id_pht, 'Voicemail' , 5, 'Voicemail' , NULL, 0, 0, 5, NULL, 0, 0, 1, NULL, NULL, NULL), -- custom data types. - (@option_group_id_cdt, 'Participant Role', '1', 'ParticipantRole', NULL, 0, 0, 1, NULL, 0, 0, 1, NULL, NULL , NULL), - (@option_group_id_cdt, 'Participant Event Name', '2', 'ParticipantEventName', NULL, 0, 0, 2, NULL, 0, 0, 1, NULL, NULL , NULL), - (@option_group_id_cdt, 'Participant Event Type', '3', 'ParticipantEventType', NULL, 0, 0, 3, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, 'Participants (Role)', '1', 'ParticipantRole', 'role_id', 0, 0, 1, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, 'Participants (Event Name)', '2', 'ParticipantEventName', 'event_id', 0, 0, 2, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, 'Participants (Event Type)', '3', 'ParticipantEventType', 'event_id.event_type_id', 0, 0, 3, NULL, 0, 0, 1, NULL, NULL , NULL), -- visibility. (@option_group_id_vis, 'Public', 1, 'public', NULL, 0, 0, 1, NULL, 0, 0, 1, NULL, NULL , NULL), @@ -5713,7 +5719,7 @@ VALUES -- custom group objects (@option_group_id_cgeo, 'Survey', 'Survey', 'civicrm_survey', NULL, 0, 0, 1, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_cgeo, 'Cases', 'Case', 'civicrm_case', NULL, 0, 0, 2, 'CRM_Case_PseudoConstant::caseType;', 0, 0, 1, NULL, NULL, NULL); + (@option_group_id_cgeo, 'Cases', 'Case', 'civicrm_case', 'case_type_id', 0, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL); -- CRM-6138 -- @@ -23787,4 +23793,4 @@ INSERT INTO `civicrm_report_instance` ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) VALUES ( @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}'); -UPDATE civicrm_domain SET version = '5.49.4'; +UPDATE civicrm_domain SET version = '5.50.0'; diff --git a/civicrm/sql/civicrm_drop.mysql b/civicrm/sql/civicrm_drop.mysql index 1effeeb13c..41294ce302 100644 --- a/civicrm/sql/civicrm_drop.mysql +++ b/civicrm/sql/civicrm_drop.mysql @@ -95,6 +95,7 @@ DROP TABLE IF EXISTS `civicrm_setting`; DROP TABLE IF EXISTS `civicrm_website`; DROP TABLE IF EXISTS `civicrm_openid`; DROP TABLE IF EXISTS `civicrm_timezone`; +DROP TABLE IF EXISTS `civicrm_user_job`; DROP TABLE IF EXISTS `civicrm_uf_match`; DROP TABLE IF EXISTS `civicrm_tag`; DROP TABLE IF EXISTS `civicrm_state_province`; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index ec48e0aa6e..3efd90c1d0 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 8.0.28, for Linux (x86_64) +-- MySQL dump 10.13 Distrib 8.0.29, for Linux (x86_64) -- -- Host: 127.0.0.1 Database: 47testcivi_yg7kx -- ------------------------------------------------------ --- Server version 8.0.28 +-- Server version 8.0.29 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -162,647 +162,647 @@ 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','2021-06-13 23:45:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (2,NULL,9,'Subject for Tell a Friend','2022-04-02 08:49:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (3,NULL,10,'Subject for Pledge Acknowledgment','2021-10-25 10:27:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (4,NULL,9,'Subject for Tell a Friend','2021-07-04 13:55:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (5,NULL,9,'Subject for Tell a Friend','2022-02-23 12:54:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (6,NULL,9,'Subject for Tell a Friend','2021-05-19 01:41:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (7,NULL,10,'Subject for Pledge Acknowledgment','2022-03-16 00:21:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (8,NULL,9,'Subject for Tell a Friend','2021-11-01 01:26:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (9,NULL,10,'Subject for Pledge Acknowledgment','2021-07-02 00:43:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (10,NULL,9,'Subject for Tell a Friend','2021-05-22 23:50:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (11,NULL,10,'Subject for Pledge Acknowledgment','2022-02-23 15:41:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (12,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 21:28:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (13,NULL,9,'Subject for Tell a Friend','2021-06-17 05:43:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (14,NULL,9,'Subject for Tell a Friend','2021-09-15 14:09:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (15,NULL,10,'Subject for Pledge Acknowledgment','2021-05-09 23:16:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (16,NULL,9,'Subject for Tell a Friend','2021-08-06 18:12:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (17,NULL,10,'Subject for Pledge Acknowledgment','2021-10-11 13:11:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (18,NULL,10,'Subject for Pledge Acknowledgment','2021-10-06 06:14:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (19,NULL,9,'Subject for Tell a Friend','2021-07-04 02:14:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (20,NULL,10,'Subject for Pledge Acknowledgment','2021-05-30 03:46:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (21,NULL,9,'Subject for Tell a Friend','2022-03-25 09:42:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (22,NULL,9,'Subject for Tell a Friend','2021-05-26 02:34:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (23,NULL,10,'Subject for Pledge Acknowledgment','2021-07-06 20:22:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (24,NULL,9,'Subject for Tell a Friend','2021-08-06 17:10:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (25,NULL,10,'Subject for Pledge Acknowledgment','2021-04-25 10:25:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (26,NULL,9,'Subject for Tell a Friend','2021-11-14 16:32:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (27,NULL,9,'Subject for Tell a Friend','2021-07-10 17:42:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (28,NULL,10,'Subject for Pledge Acknowledgment','2021-05-22 04:07:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (29,NULL,10,'Subject for Pledge Acknowledgment','2022-04-06 08:09:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (30,NULL,10,'Subject for Pledge Acknowledgment','2021-04-18 09:38:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (31,NULL,10,'Subject for Pledge Acknowledgment','2021-10-17 23:35:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (32,NULL,9,'Subject for Tell a Friend','2021-04-20 18:12:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (33,NULL,9,'Subject for Tell a Friend','2021-06-27 22:06:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (34,NULL,10,'Subject for Pledge Acknowledgment','2022-03-17 21:56:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (35,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 08:27:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (36,NULL,10,'Subject for Pledge Acknowledgment','2021-11-05 03:15:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (37,NULL,10,'Subject for Pledge Acknowledgment','2021-06-26 23:14:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (38,NULL,10,'Subject for Pledge Acknowledgment','2022-03-31 23:48:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (39,NULL,9,'Subject for Tell a Friend','2021-08-25 14:02:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (40,NULL,9,'Subject for Tell a Friend','2021-06-22 17:22:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (41,NULL,9,'Subject for Tell a Friend','2022-01-10 08:22:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (42,NULL,9,'Subject for Tell a Friend','2021-04-24 22:33:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (43,NULL,9,'Subject for Tell a Friend','2021-07-07 00:35:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (44,NULL,10,'Subject for Pledge Acknowledgment','2021-11-18 23:44:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (45,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 00:24:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (46,NULL,9,'Subject for Tell a Friend','2021-05-04 17:29:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (47,NULL,10,'Subject for Pledge Acknowledgment','2022-03-20 11:33:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (48,NULL,9,'Subject for Tell a Friend','2022-01-30 06:08:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (49,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 21:24:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (50,NULL,9,'Subject for Tell a Friend','2022-01-03 22:45:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (51,NULL,9,'Subject for Tell a Friend','2021-09-18 13:26:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (52,NULL,10,'Subject for Pledge Acknowledgment','2021-04-24 16:39:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (53,NULL,10,'Subject for Pledge Acknowledgment','2021-06-17 15:18:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (54,NULL,9,'Subject for Tell a Friend','2022-04-05 00:36:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (55,NULL,10,'Subject for Pledge Acknowledgment','2021-12-17 05:34:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (56,NULL,10,'Subject for Pledge Acknowledgment','2021-04-17 09:52:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (57,NULL,9,'Subject for Tell a Friend','2021-09-26 16:47:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (58,NULL,10,'Subject for Pledge Acknowledgment','2021-12-20 06:01:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (59,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 23:34:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (60,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 14:20:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (61,NULL,9,'Subject for Tell a Friend','2021-05-10 18:38:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (62,NULL,9,'Subject for Tell a Friend','2021-08-14 20:10:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (63,NULL,9,'Subject for Tell a Friend','2021-08-14 09:29:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (64,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 10:39:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (65,NULL,10,'Subject for Pledge Acknowledgment','2021-05-23 22:56:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (66,NULL,9,'Subject for Tell a Friend','2021-08-26 06:37:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (67,NULL,10,'Subject for Pledge Acknowledgment','2021-09-24 15:57:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (68,NULL,9,'Subject for Tell a Friend','2021-05-07 20:27:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (69,NULL,10,'Subject for Pledge Acknowledgment','2021-09-14 02:43:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (70,NULL,9,'Subject for Tell a Friend','2022-04-06 04:02:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (71,NULL,10,'Subject for Pledge Acknowledgment','2021-06-29 03:40:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (72,NULL,9,'Subject for Tell a Friend','2021-12-08 02:53:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (73,NULL,10,'Subject for Pledge Acknowledgment','2021-08-13 15:33:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (74,NULL,9,'Subject for Tell a Friend','2021-05-13 05:03:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (75,NULL,9,'Subject for Tell a Friend','2021-10-26 20:03:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (76,NULL,9,'Subject for Tell a Friend','2021-05-24 03:34:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (77,NULL,10,'Subject for Pledge Acknowledgment','2022-02-24 10:10:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (78,NULL,10,'Subject for Pledge Acknowledgment','2021-05-16 06:43:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (79,NULL,9,'Subject for Tell a Friend','2021-10-21 11:20:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (80,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 00:42:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (81,NULL,9,'Subject for Tell a Friend','2021-07-03 23:25:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (82,NULL,9,'Subject for Tell a Friend','2021-08-08 16:01:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (83,NULL,9,'Subject for Tell a Friend','2021-05-08 04:39:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (84,NULL,10,'Subject for Pledge Acknowledgment','2022-02-24 10:40:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (85,NULL,10,'Subject for Pledge Acknowledgment','2021-07-13 11:00:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (86,NULL,10,'Subject for Pledge Acknowledgment','2022-02-24 06:47:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (87,NULL,9,'Subject for Tell a Friend','2021-08-31 03:31:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (88,NULL,9,'Subject for Tell a Friend','2022-03-25 20:36:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (89,NULL,9,'Subject for Tell a Friend','2021-12-22 15:55:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (90,NULL,9,'Subject for Tell a Friend','2021-09-27 04:14:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (91,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 09:50:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (92,NULL,10,'Subject for Pledge Acknowledgment','2021-09-16 10:00:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (93,NULL,9,'Subject for Tell a Friend','2021-06-15 15:19:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (94,NULL,9,'Subject for Tell a Friend','2021-08-06 23:28:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (95,NULL,10,'Subject for Pledge Acknowledgment','2022-04-09 06:21:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (96,NULL,9,'Subject for Tell a Friend','2021-12-01 21:04:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (97,NULL,9,'Subject for Tell a Friend','2021-09-08 07:25:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (98,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 19:25:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (99,NULL,9,'Subject for Tell a Friend','2021-09-10 16:37:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (100,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 12:34:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (101,NULL,10,'Subject for Pledge Acknowledgment','2021-11-30 17:52:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (102,NULL,9,'Subject for Tell a Friend','2021-07-13 04:01:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (103,NULL,9,'Subject for Tell a Friend','2021-09-25 04:44:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (104,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 16:15:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (105,NULL,10,'Subject for Pledge Acknowledgment','2022-03-26 02:31:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (106,NULL,9,'Subject for Tell a Friend','2021-12-19 09:26:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (107,NULL,9,'Subject for Tell a Friend','2021-11-23 10:25:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (108,NULL,9,'Subject for Tell a Friend','2021-07-25 06:50:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (109,NULL,10,'Subject for Pledge Acknowledgment','2021-10-22 23:52:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (110,NULL,9,'Subject for Tell a Friend','2022-01-30 04:03:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (111,NULL,9,'Subject for Tell a Friend','2021-08-31 18:12:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (112,NULL,9,'Subject for Tell a Friend','2021-06-25 05:40:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (113,NULL,9,'Subject for Tell a Friend','2021-09-17 23:38:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (114,NULL,10,'Subject for Pledge Acknowledgment','2021-12-20 09:08:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (115,NULL,10,'Subject for Pledge Acknowledgment','2022-01-04 23:56:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (116,NULL,10,'Subject for Pledge Acknowledgment','2022-01-27 01:54:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (117,NULL,9,'Subject for Tell a Friend','2021-09-18 17:26:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (118,NULL,10,'Subject for Pledge Acknowledgment','2021-11-17 01:44:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (119,NULL,9,'Subject for Tell a Friend','2021-05-06 16:11:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (120,NULL,10,'Subject for Pledge Acknowledgment','2022-01-22 03:29:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (121,NULL,10,'Subject for Pledge Acknowledgment','2021-06-22 13:13:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (122,NULL,10,'Subject for Pledge Acknowledgment','2021-06-28 00:26:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (123,NULL,9,'Subject for Tell a Friend','2021-10-07 00:20:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (124,NULL,9,'Subject for Tell a Friend','2021-12-21 20:49:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (125,NULL,9,'Subject for Tell a Friend','2021-08-07 19:00:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (126,NULL,10,'Subject for Pledge Acknowledgment','2021-05-09 00:23:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (127,NULL,9,'Subject for Tell a Friend','2021-12-19 11:33:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (128,NULL,10,'Subject for Pledge Acknowledgment','2021-12-30 14:40:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (129,NULL,9,'Subject for Tell a Friend','2021-07-28 05:33:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (130,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 03:34:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (131,NULL,10,'Subject for Pledge Acknowledgment','2021-07-28 20:27:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (132,NULL,10,'Subject for Pledge Acknowledgment','2021-11-29 18:02:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (133,NULL,9,'Subject for Tell a Friend','2021-09-30 21:04:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (134,NULL,9,'Subject for Tell a Friend','2022-01-21 19:45:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (135,NULL,9,'Subject for Tell a Friend','2021-11-03 11:00:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (136,NULL,10,'Subject for Pledge Acknowledgment','2021-08-23 06:35:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (137,NULL,9,'Subject for Tell a Friend','2021-07-08 01:51:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (138,NULL,9,'Subject for Tell a Friend','2021-10-03 11:45:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (139,NULL,10,'Subject for Pledge Acknowledgment','2021-10-22 12:49:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (140,NULL,9,'Subject for Tell a Friend','2021-11-28 02:04:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (141,NULL,10,'Subject for Pledge Acknowledgment','2021-04-30 07:16:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (142,NULL,9,'Subject for Tell a Friend','2022-01-29 18:31:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (143,NULL,10,'Subject for Pledge Acknowledgment','2021-08-03 21:17:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (144,NULL,10,'Subject for Pledge Acknowledgment','2021-08-01 10:04:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (145,NULL,10,'Subject for Pledge Acknowledgment','2021-11-30 09:54:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (146,NULL,10,'Subject for Pledge Acknowledgment','2021-08-11 12:38:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (147,NULL,9,'Subject for Tell a Friend','2021-11-12 08:22:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (148,NULL,10,'Subject for Pledge Acknowledgment','2022-03-01 18:24:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (149,NULL,10,'Subject for Pledge Acknowledgment','2021-06-05 01:34:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (150,NULL,9,'Subject for Tell a Friend','2022-02-13 19:39:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (151,NULL,10,'Subject for Pledge Acknowledgment','2021-10-08 11:08:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (152,NULL,9,'Subject for Tell a Friend','2021-07-23 08:08:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (153,NULL,9,'Subject for Tell a Friend','2021-10-07 02:13:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (154,NULL,10,'Subject for Pledge Acknowledgment','2021-11-08 01:21:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (155,NULL,9,'Subject for Tell a Friend','2021-08-27 01:44:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (156,NULL,9,'Subject for Tell a Friend','2021-07-02 13:54:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (157,NULL,9,'Subject for Tell a Friend','2021-09-05 03:26:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (158,NULL,10,'Subject for Pledge Acknowledgment','2021-11-26 18:24:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (159,NULL,9,'Subject for Tell a Friend','2021-06-24 19:40:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (160,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 21:26:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (161,NULL,9,'Subject for Tell a Friend','2022-03-29 06:23:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (162,NULL,10,'Subject for Pledge Acknowledgment','2021-10-12 21:44:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (163,NULL,10,'Subject for Pledge Acknowledgment','2021-10-17 10:02:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (164,NULL,10,'Subject for Pledge Acknowledgment','2022-03-30 23:17:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (165,NULL,10,'Subject for Pledge Acknowledgment','2021-10-17 14:35:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (166,NULL,10,'Subject for Pledge Acknowledgment','2022-04-04 23:24:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (167,NULL,9,'Subject for Tell a Friend','2022-04-02 03:17:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (168,NULL,10,'Subject for Pledge Acknowledgment','2021-07-19 17:11:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (169,NULL,10,'Subject for Pledge Acknowledgment','2021-06-27 02:32:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (170,NULL,10,'Subject for Pledge Acknowledgment','2021-10-07 01:43:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (171,NULL,9,'Subject for Tell a Friend','2021-04-20 04:20:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (172,NULL,10,'Subject for Pledge Acknowledgment','2022-01-15 03:57:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (173,NULL,10,'Subject for Pledge Acknowledgment','2021-12-21 18:52:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (174,NULL,9,'Subject for Tell a Friend','2022-02-12 21:36:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (175,NULL,10,'Subject for Pledge Acknowledgment','2021-04-16 10:58:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (176,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 17:57:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (177,NULL,9,'Subject for Tell a Friend','2021-05-04 04:36:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (178,NULL,9,'Subject for Tell a Friend','2021-10-25 11:33:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (179,NULL,10,'Subject for Pledge Acknowledgment','2021-09-01 23:01:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (180,NULL,9,'Subject for Tell a Friend','2022-02-27 19:58:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (181,NULL,9,'Subject for Tell a Friend','2021-12-10 00:42:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (182,NULL,9,'Subject for Tell a Friend','2021-06-15 13:35:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (183,NULL,10,'Subject for Pledge Acknowledgment','2021-04-14 13:34:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (184,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 10:16:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (185,NULL,9,'Subject for Tell a Friend','2021-07-05 20:53:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (186,NULL,9,'Subject for Tell a Friend','2021-05-16 07:17:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (187,NULL,10,'Subject for Pledge Acknowledgment','2021-05-25 07:18:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (188,NULL,10,'Subject for Pledge Acknowledgment','2021-11-06 18:28:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (189,NULL,10,'Subject for Pledge Acknowledgment','2022-04-01 18:28:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (190,NULL,10,'Subject for Pledge Acknowledgment','2021-06-08 19:22:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (191,NULL,10,'Subject for Pledge Acknowledgment','2021-05-11 16:34:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (192,NULL,9,'Subject for Tell a Friend','2022-01-21 20:30:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (193,NULL,9,'Subject for Tell a Friend','2022-02-24 01:07:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (194,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 13:00:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (195,NULL,10,'Subject for Pledge Acknowledgment','2021-08-01 14:32:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (196,NULL,10,'Subject for Pledge Acknowledgment','2021-12-23 05:13:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (197,NULL,9,'Subject for Tell a Friend','2021-11-05 00:05:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (198,NULL,9,'Subject for Tell a Friend','2021-09-12 23:49:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (199,NULL,9,'Subject for Tell a Friend','2022-01-19 09:45:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (200,NULL,9,'Subject for Tell a Friend','2021-10-20 14:41:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (201,NULL,9,'Subject for Tell a Friend','2021-05-09 23:36:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (202,NULL,10,'Subject for Pledge Acknowledgment','2021-11-24 21:31:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (203,NULL,9,'Subject for Tell a Friend','2021-06-09 07:07:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (204,NULL,10,'Subject for Pledge Acknowledgment','2021-12-22 11:45:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (205,NULL,9,'Subject for Tell a Friend','2021-10-03 22:03:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (206,NULL,10,'Subject for Pledge Acknowledgment','2022-01-19 16:38:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (207,NULL,10,'Subject for Pledge Acknowledgment','2021-06-30 16:15:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (208,NULL,10,'Subject for Pledge Acknowledgment','2021-11-02 00:33:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (209,NULL,10,'Subject for Pledge Acknowledgment','2022-03-07 12:52:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (210,NULL,10,'Subject for Pledge Acknowledgment','2021-06-13 02:37:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (211,NULL,9,'Subject for Tell a Friend','2021-05-26 09:17:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (212,NULL,10,'Subject for Pledge Acknowledgment','2022-03-13 02:07:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (213,NULL,10,'Subject for Pledge Acknowledgment','2021-09-11 18:53:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (214,NULL,10,'Subject for Pledge Acknowledgment','2021-09-30 16:08:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (215,NULL,9,'Subject for Tell a Friend','2022-02-17 02:56:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (216,NULL,9,'Subject for Tell a Friend','2021-09-19 23:27:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (217,NULL,10,'Subject for Pledge Acknowledgment','2021-06-11 13:07:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (218,NULL,10,'Subject for Pledge Acknowledgment','2021-06-14 02:48:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (219,NULL,9,'Subject for Tell a Friend','2022-02-07 10:04:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (220,NULL,10,'Subject for Pledge Acknowledgment','2021-05-02 10:18:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (221,NULL,9,'Subject for Tell a Friend','2021-11-14 06:23:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (222,NULL,10,'Subject for Pledge Acknowledgment','2021-05-28 12:30:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (223,NULL,10,'Subject for Pledge Acknowledgment','2021-12-24 10:58:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (224,NULL,9,'Subject for Tell a Friend','2022-02-21 04:25:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (225,NULL,9,'Subject for Tell a Friend','2021-06-22 13:15:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (226,NULL,9,'Subject for Tell a Friend','2021-05-05 21:07:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (227,NULL,10,'Subject for Pledge Acknowledgment','2021-09-14 23:00:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (228,NULL,9,'Subject for Tell a Friend','2022-03-30 21:28:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (229,NULL,9,'Subject for Tell a Friend','2022-03-04 22:00:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (230,NULL,9,'Subject for Tell a Friend','2021-05-11 07:54:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (231,NULL,9,'Subject for Tell a Friend','2021-12-05 17:12:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (232,NULL,10,'Subject for Pledge Acknowledgment','2022-02-22 23:59:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (233,NULL,10,'Subject for Pledge Acknowledgment','2021-09-10 20:47:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (234,NULL,9,'Subject for Tell a Friend','2021-07-14 11:38:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (235,NULL,9,'Subject for Tell a Friend','2022-01-19 06:56:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (236,NULL,10,'Subject for Pledge Acknowledgment','2021-05-17 12:50:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (237,NULL,10,'Subject for Pledge Acknowledgment','2021-08-17 00:00:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (238,NULL,9,'Subject for Tell a Friend','2021-12-29 04:38:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (239,NULL,10,'Subject for Pledge Acknowledgment','2022-04-08 18:08:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (240,NULL,10,'Subject for Pledge Acknowledgment','2022-01-01 05:47:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (241,NULL,10,'Subject for Pledge Acknowledgment','2021-09-30 01:27:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (242,NULL,9,'Subject for Tell a Friend','2021-10-17 13:08:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (243,NULL,10,'Subject for Pledge Acknowledgment','2021-09-26 04:26:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (244,NULL,10,'Subject for Pledge Acknowledgment','2021-10-30 15:41:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (245,NULL,9,'Subject for Tell a Friend','2022-01-16 22:37:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (246,NULL,9,'Subject for Tell a Friend','2022-02-28 01:06:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (247,NULL,10,'Subject for Pledge Acknowledgment','2021-06-22 22:03:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (248,NULL,10,'Subject for Pledge Acknowledgment','2021-05-20 15:43:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (249,NULL,9,'Subject for Tell a Friend','2021-06-24 18:17:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (250,NULL,9,'Subject for Tell a Friend','2022-03-18 05:09:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (251,NULL,10,'Subject for Pledge Acknowledgment','2021-10-27 02:25:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (252,NULL,9,'Subject for Tell a Friend','2021-10-01 16:17:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (253,NULL,10,'Subject for Pledge Acknowledgment','2021-08-12 20:54:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (254,NULL,9,'Subject for Tell a Friend','2022-01-06 10:51:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (255,NULL,10,'Subject for Pledge Acknowledgment','2022-03-24 16:26:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (256,NULL,9,'Subject for Tell a Friend','2022-02-11 12:59:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (257,NULL,10,'Subject for Pledge Acknowledgment','2021-05-17 19:34:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (258,NULL,10,'Subject for Pledge Acknowledgment','2021-12-14 01:34:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (259,NULL,9,'Subject for Tell a Friend','2021-09-28 06:16:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (260,NULL,10,'Subject for Pledge Acknowledgment','2021-12-31 20:52:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (261,NULL,10,'Subject for Pledge Acknowledgment','2021-07-29 15:43:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (262,NULL,10,'Subject for Pledge Acknowledgment','2022-02-26 14:50:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (263,NULL,9,'Subject for Tell a Friend','2022-04-04 14:26:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (264,NULL,9,'Subject for Tell a Friend','2021-06-08 09:25:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (265,NULL,9,'Subject for Tell a Friend','2021-08-26 23:15:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (266,NULL,10,'Subject for Pledge Acknowledgment','2021-06-09 10:22:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (267,NULL,9,'Subject for Tell a Friend','2021-09-12 11:14:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (268,NULL,9,'Subject for Tell a Friend','2021-07-28 06:20:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (269,NULL,10,'Subject for Pledge Acknowledgment','2021-12-31 01:54:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (270,NULL,10,'Subject for Pledge Acknowledgment','2022-04-04 14:39:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (271,NULL,9,'Subject for Tell a Friend','2021-06-25 15:45:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (272,NULL,9,'Subject for Tell a Friend','2022-01-05 19:55:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (273,NULL,9,'Subject for Tell a Friend','2022-01-29 23:49:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (274,NULL,10,'Subject for Pledge Acknowledgment','2021-07-12 20:20:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (275,NULL,10,'Subject for Pledge Acknowledgment','2021-04-17 14:39:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (276,NULL,10,'Subject for Pledge Acknowledgment','2021-05-20 18:53:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (277,NULL,9,'Subject for Tell a Friend','2021-09-30 02:40:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (278,NULL,10,'Subject for Pledge Acknowledgment','2021-10-13 03:22:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (279,NULL,10,'Subject for Pledge Acknowledgment','2021-04-23 23:49:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (280,NULL,10,'Subject for Pledge Acknowledgment','2021-11-01 09:12:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (281,NULL,10,'Subject for Pledge Acknowledgment','2021-11-17 00:12:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (282,NULL,10,'Subject for Pledge Acknowledgment','2021-09-20 13:10:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (283,NULL,9,'Subject for Tell a Friend','2021-08-26 02:08:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (284,NULL,9,'Subject for Tell a Friend','2021-06-27 11:26:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (285,NULL,10,'Subject for Pledge Acknowledgment','2021-05-29 20:50:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (286,NULL,10,'Subject for Pledge Acknowledgment','2021-04-26 23:33:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (287,NULL,10,'Subject for Pledge Acknowledgment','2021-12-09 05:00:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (288,NULL,9,'Subject for Tell a Friend','2021-12-15 01:49:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (289,NULL,10,'Subject for Pledge Acknowledgment','2021-08-24 06:24:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (290,NULL,9,'Subject for Tell a Friend','2022-01-14 16:59:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (291,NULL,9,'Subject for Tell a Friend','2021-07-16 09:33:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (292,NULL,10,'Subject for Pledge Acknowledgment','2022-02-16 21:13:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (293,NULL,10,'Subject for Pledge Acknowledgment','2021-06-29 18:05:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (294,NULL,10,'Subject for Pledge Acknowledgment','2021-10-10 04:25:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (295,NULL,9,'Subject for Tell a Friend','2021-05-12 04:09:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (296,NULL,9,'Subject for Tell a Friend','2021-12-14 00:27:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (297,NULL,9,'Subject for Tell a Friend','2022-04-05 02:49:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (298,NULL,10,'Subject for Pledge Acknowledgment','2021-12-23 18:24:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (299,NULL,10,'Subject for Pledge Acknowledgment','2021-11-14 09:45:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (300,NULL,10,'Subject for Pledge Acknowledgment','2021-07-15 13:41:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (301,NULL,9,'Subject for Tell a Friend','2021-10-26 08:45:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (302,NULL,9,'Subject for Tell a Friend','2021-04-17 10:02:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (303,NULL,10,'Subject for Pledge Acknowledgment','2021-12-05 01:03:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (304,NULL,10,'Subject for Pledge Acknowledgment','2021-05-12 21:41:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (305,NULL,9,'Subject for Tell a Friend','2022-02-03 18:49:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (306,NULL,9,'Subject for Tell a Friend','2021-10-24 15:56:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (307,NULL,9,'Subject for Tell a Friend','2021-06-19 04:28:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (308,NULL,9,'Subject for Tell a Friend','2021-10-04 23:17:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (309,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 05:03:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (310,NULL,9,'Subject for Tell a Friend','2021-08-15 05:01:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (311,NULL,10,'Subject for Pledge Acknowledgment','2021-05-03 14:49:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (312,NULL,10,'Subject for Pledge Acknowledgment','2021-12-17 10:28:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (313,NULL,9,'Subject for Tell a Friend','2021-08-07 04:10:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (314,NULL,9,'Subject for Tell a Friend','2022-03-14 08:51:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (315,NULL,10,'Subject for Pledge Acknowledgment','2022-01-21 04:27:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (316,NULL,9,'Subject for Tell a Friend','2021-09-14 19:00:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (317,NULL,9,'Subject for Tell a Friend','2021-11-04 17:09:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (318,NULL,10,'Subject for Pledge Acknowledgment','2022-02-25 11:31:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (319,NULL,9,'Subject for Tell a Friend','2021-05-28 16:31:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (320,NULL,9,'Subject for Tell a Friend','2022-02-12 21:39:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (321,NULL,10,'Subject for Pledge Acknowledgment','2021-06-13 07:40:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (322,NULL,9,'Subject for Tell a Friend','2021-11-12 17:39:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (323,NULL,10,'Subject for Pledge Acknowledgment','2021-12-10 11:26:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (324,NULL,9,'Subject for Tell a Friend','2022-01-11 18:44:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (325,NULL,9,'Subject for Tell a Friend','2022-01-06 19:14:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (326,NULL,10,'Subject for Pledge Acknowledgment','2022-03-10 23:41:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (327,NULL,10,'Subject for Pledge Acknowledgment','2021-12-25 20:41:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (328,NULL,10,'Subject for Pledge Acknowledgment','2021-12-06 15:35:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (329,NULL,9,'Subject for Tell a Friend','2022-02-04 02:56:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (330,NULL,9,'Subject for Tell a Friend','2022-02-22 20:57:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (331,NULL,9,'Subject for Tell a Friend','2021-08-27 11:52:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (332,NULL,9,'Subject for Tell a Friend','2022-02-04 16:33:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (333,NULL,9,'Subject for Tell a Friend','2021-12-01 04:39:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (334,NULL,10,'Subject for Pledge Acknowledgment','2021-05-25 19:44:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (335,NULL,10,'Subject for Pledge Acknowledgment','2021-08-28 03:32:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (336,NULL,9,'Subject for Tell a Friend','2021-07-25 09:00:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (337,NULL,9,'Subject for Tell a Friend','2021-07-09 13:05:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (338,NULL,9,'Subject for Tell a Friend','2021-07-21 20:10:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (339,NULL,10,'Subject for Pledge Acknowledgment','2021-04-15 23:17:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (340,NULL,9,'Subject for Tell a Friend','2021-06-22 10:48:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (341,NULL,10,'Subject for Pledge Acknowledgment','2021-10-07 21:50:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:17','2022-04-14 03:30:17'), - (342,NULL,10,'Subject for Pledge Acknowledgment','2021-07-17 10:20:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (343,NULL,9,'Subject for Tell a Friend','2021-04-30 13:50:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (344,NULL,9,'Subject for Tell a Friend','2021-09-03 09:14:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (345,NULL,10,'Subject for Pledge Acknowledgment','2022-02-07 02:04:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (346,NULL,9,'Subject for Tell a Friend','2021-06-06 21:41:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (347,NULL,10,'Subject for Pledge Acknowledgment','2021-12-20 09:12:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (348,NULL,10,'Subject for Pledge Acknowledgment','2021-05-06 00:51:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (349,NULL,9,'Subject for Tell a Friend','2021-08-13 07:57:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (350,NULL,9,'Subject for Tell a Friend','2021-08-11 07:49:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (351,NULL,9,'Subject for Tell a Friend','2021-07-05 04:38:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (352,NULL,10,'Subject for Pledge Acknowledgment','2022-01-05 18:40:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (353,NULL,9,'Subject for Tell a Friend','2021-04-20 14:03:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (354,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 05:35:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (355,NULL,10,'Subject for Pledge Acknowledgment','2021-12-16 15:53:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (356,NULL,10,'Subject for Pledge Acknowledgment','2021-09-15 19:24:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (357,NULL,10,'Subject for Pledge Acknowledgment','2022-04-07 12:08:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (358,NULL,9,'Subject for Tell a Friend','2021-06-07 19:52:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (359,NULL,9,'Subject for Tell a Friend','2022-01-07 15:23:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (360,NULL,10,'Subject for Pledge Acknowledgment','2021-04-22 18:55:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (361,NULL,10,'Subject for Pledge Acknowledgment','2022-03-04 12:15:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (362,NULL,10,'Subject for Pledge Acknowledgment','2022-02-06 08:07:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (363,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 09:06:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (364,NULL,10,'Subject for Pledge Acknowledgment','2021-11-28 10:47:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (365,NULL,10,'Subject for Pledge Acknowledgment','2021-06-29 06:42:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (366,NULL,9,'Subject for Tell a Friend','2021-12-18 05:44:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (367,NULL,9,'Subject for Tell a Friend','2021-05-02 07:45:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (368,NULL,10,'Subject for Pledge Acknowledgment','2021-07-25 17:22:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (369,NULL,10,'Subject for Pledge Acknowledgment','2021-08-28 14:18:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (370,NULL,9,'Subject for Tell a Friend','2022-01-06 19:01:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (371,NULL,10,'Subject for Pledge Acknowledgment','2021-09-16 04:38:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (372,NULL,10,'Subject for Pledge Acknowledgment','2022-03-07 04:19:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (373,NULL,9,'Subject for Tell a Friend','2021-10-12 21:44:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (374,NULL,9,'Subject for Tell a Friend','2022-02-24 21:50:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (375,NULL,9,'Subject for Tell a Friend','2021-04-20 23:09:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (376,NULL,9,'Subject for Tell a Friend','2021-08-04 02:25:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (377,NULL,10,'Subject for Pledge Acknowledgment','2022-04-02 06:17:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (378,NULL,10,'Subject for Pledge Acknowledgment','2021-10-18 22:18:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (379,NULL,9,'Subject for Tell a Friend','2021-08-12 21:47:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (380,NULL,10,'Subject for Pledge Acknowledgment','2021-08-29 11:47:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (381,NULL,9,'Subject for Tell a Friend','2021-08-10 18:41:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (382,NULL,9,'Subject for Tell a Friend','2022-01-12 15:05:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (383,NULL,9,'Subject for Tell a Friend','2021-12-18 09:32:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (384,NULL,10,'Subject for Pledge Acknowledgment','2021-12-01 00:09:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (385,NULL,10,'Subject for Pledge Acknowledgment','2021-06-01 11:37:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (386,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 19:26:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (387,NULL,9,'Subject for Tell a Friend','2021-12-09 18:04:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (388,NULL,9,'Subject for Tell a Friend','2021-06-01 02:52:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (389,NULL,9,'Subject for Tell a Friend','2022-03-26 04:48:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (390,NULL,10,'Subject for Pledge Acknowledgment','2022-01-28 18:51:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (391,NULL,9,'Subject for Tell a Friend','2021-09-11 22:58:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (392,NULL,9,'Subject for Tell a Friend','2021-11-11 14:29:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (393,NULL,10,'Subject for Pledge Acknowledgment','2021-12-10 04:32:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (394,NULL,9,'Subject for Tell a Friend','2021-06-01 18:18:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (395,NULL,9,'Subject for Tell a Friend','2022-03-11 21:30:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (396,NULL,9,'Subject for Tell a Friend','2021-09-09 08:04:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (397,NULL,9,'Subject for Tell a Friend','2021-06-16 21:52:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (398,NULL,9,'Subject for Tell a Friend','2021-05-25 11:06:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (399,NULL,9,'Subject for Tell a Friend','2022-04-11 07:09:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (400,NULL,9,'Subject for Tell a Friend','2022-01-04 11:49:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (401,NULL,9,'Subject for Tell a Friend','2021-11-29 05:57:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (402,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 17:50:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (403,NULL,9,'Subject for Tell a Friend','2021-07-10 12:16:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (404,NULL,10,'Subject for Pledge Acknowledgment','2022-02-16 18:26:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (405,NULL,10,'Subject for Pledge Acknowledgment','2021-12-18 05:58:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (406,NULL,9,'Subject for Tell a Friend','2021-08-22 02:02:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (407,NULL,9,'Subject for Tell a Friend','2022-01-29 03:54:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (408,NULL,10,'Subject for Pledge Acknowledgment','2021-08-08 15:47:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (409,NULL,9,'Subject for Tell a Friend','2021-05-13 03:46:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (410,NULL,9,'Subject for Tell a Friend','2022-02-04 03:25:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (411,NULL,10,'Subject for Pledge Acknowledgment','2021-11-21 05:34:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (412,NULL,9,'Subject for Tell a Friend','2021-06-04 02:42:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (413,NULL,10,'Subject for Pledge Acknowledgment','2021-05-11 22:42:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (414,NULL,9,'Subject for Tell a Friend','2021-12-14 02:58:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (415,NULL,10,'Subject for Pledge Acknowledgment','2021-05-22 01:49:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (416,NULL,9,'Subject for Tell a Friend','2022-01-24 01:47:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (417,NULL,10,'Subject for Pledge Acknowledgment','2021-06-06 09:25:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (418,NULL,9,'Subject for Tell a Friend','2021-09-18 05:15:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (419,NULL,9,'Subject for Tell a Friend','2021-07-05 11:59:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (420,NULL,9,'Subject for Tell a Friend','2021-04-17 23:12:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (421,NULL,10,'Subject for Pledge Acknowledgment','2022-01-31 12:35:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (422,NULL,9,'Subject for Tell a Friend','2021-04-23 03:18:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (423,NULL,9,'Subject for Tell a Friend','2021-11-15 09:56:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (424,NULL,9,'Subject for Tell a Friend','2022-02-25 14:37:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (425,NULL,10,'Subject for Pledge Acknowledgment','2021-12-16 10:31:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (426,NULL,10,'Subject for Pledge Acknowledgment','2021-08-01 13:18:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (427,NULL,9,'Subject for Tell a Friend','2021-06-02 07:42:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (428,NULL,10,'Subject for Pledge Acknowledgment','2021-11-27 10:45:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (429,NULL,9,'Subject for Tell a Friend','2021-11-23 04:30:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (430,NULL,9,'Subject for Tell a Friend','2021-04-26 10:14:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (431,NULL,10,'Subject for Pledge Acknowledgment','2021-07-01 09:53:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (432,NULL,9,'Subject for Tell a Friend','2021-06-09 10:38:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (433,NULL,10,'Subject for Pledge Acknowledgment','2021-09-26 07:41:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (434,NULL,10,'Subject for Pledge Acknowledgment','2021-08-02 01:47:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (435,NULL,9,'Subject for Tell a Friend','2021-12-23 01:16:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (436,NULL,9,'Subject for Tell a Friend','2021-05-23 17:46:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (437,NULL,10,'Subject for Pledge Acknowledgment','2021-09-08 01:25:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (438,NULL,10,'Subject for Pledge Acknowledgment','2022-04-12 12:51:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (439,NULL,9,'Subject for Tell a Friend','2021-10-29 13:01:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (440,NULL,9,'Subject for Tell a Friend','2021-06-19 08:47:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (441,NULL,9,'Subject for Tell a Friend','2021-08-21 00:18:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (442,NULL,10,'Subject for Pledge Acknowledgment','2022-03-01 03:15:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (443,NULL,10,'Subject for Pledge Acknowledgment','2021-04-15 23:14:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (444,NULL,9,'Subject for Tell a Friend','2022-01-10 11:48:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (445,NULL,9,'Subject for Tell a Friend','2021-07-29 11:09:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (446,NULL,9,'Subject for Tell a Friend','2022-04-13 17:48:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (447,NULL,10,'Subject for Pledge Acknowledgment','2021-09-04 14:12:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (448,NULL,9,'Subject for Tell a Friend','2021-07-24 06:43:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (449,NULL,10,'Subject for Pledge Acknowledgment','2021-04-18 16:30:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (450,NULL,10,'Subject for Pledge Acknowledgment','2021-05-21 07:08:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (451,1,6,'$ 125 April Mailer 1','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (452,2,6,'$ 50 Online: Save the Penguins','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (453,3,6,'£ 25 April Mailer 1','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (454,4,6,'$ 50 Online: Save the Penguins','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (455,5,6,'$ 50 Online: Save the Penguins','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (456,6,6,'$ 500 April Mailer 1','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (457,7,6,'$ 1750 Online: Save the Penguins','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (458,8,6,'$ 50 Online: Save the Penguins','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (459,9,6,'$ 10 Online: Help CiviCRM','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (460,10,6,'$ 250 Online: Help CiviCRM','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (461,11,6,'Â¥ 500 ','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (462,12,6,'$ 50 Online: Save the Penguins','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (463,13,6,'$ 50 ','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (464,14,6,'$ 50 ','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (465,15,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (466,16,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (467,17,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (468,18,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (469,19,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (470,20,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (471,21,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (472,22,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (473,23,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (474,24,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (475,25,6,'$ 25 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (476,26,6,'$ 10 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (477,27,6,'$ 10 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (478,28,6,'$ 10 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (479,29,6,'$ 10 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (480,30,6,'$ 10 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (481,31,6,'€ 5 Recurring contribution','2022-06-14 13:30:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (482,1,7,'General','2022-04-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (483,2,7,'Student','2022-04-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (484,3,7,'General','2022-04-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (485,4,7,'Student','2022-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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (486,5,7,'General','2020-03-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (487,6,7,'Student','2022-04-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (488,7,7,'General','2022-04-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (489,8,7,'Student','2022-04-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (490,9,7,'General','2022-04-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (491,10,7,'Student','2021-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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (492,11,7,'Lifetime','2022-04-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (493,12,7,'Student','2022-04-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (494,13,7,'General','2022-04-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (495,14,7,'Student','2022-04-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (496,15,7,'General','2019-12-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (497,16,7,'Student','2022-03-30 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (498,17,7,'General','2022-03-29 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (499,18,7,'Student','2022-03-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (500,19,7,'General','2022-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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (501,20,7,'General','2019-11-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (502,21,7,'General','2022-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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (503,22,7,'Lifetime','2022-03-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (504,23,7,'General','2022-03-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (505,24,7,'Student','2022-03-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (506,25,7,'Student','2021-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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (507,26,7,'Student','2022-03-20 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (508,27,7,'General','2022-03-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (509,28,7,'Student','2022-03-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (510,29,7,'General','2022-03-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (511,30,7,'General','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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (512,32,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (513,33,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (514,34,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (515,35,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (516,36,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (517,37,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (518,38,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (519,39,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (520,40,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (521,41,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (523,43,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (524,44,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (525,45,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (526,46,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (527,47,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (528,48,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (529,49,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (530,50,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (531,51,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (532,52,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (533,53,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (534,54,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (535,55,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (536,56,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (537,57,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (538,58,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (539,59,6,'$ 50.00 - Student Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (540,60,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (541,61,6,'$ 100.00 - General Membership: Offline signup','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (543,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (544,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (545,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (546,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (547,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (548,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (549,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (550,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (551,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (552,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (553,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (554,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (555,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (556,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (557,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (558,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (559,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (560,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (561,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (562,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (563,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (564,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (565,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (566,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (567,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (568,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (569,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (570,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (571,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (572,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (573,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (574,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (575,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (576,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (577,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (578,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (579,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (580,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (581,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (582,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (583,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (584,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (585,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (586,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (587,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (588,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (589,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (590,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (591,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (592,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,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (594,64,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (595,65,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (596,66,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (599,69,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (600,70,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (602,72,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (603,73,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (604,74,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (605,75,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (606,76,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (607,77,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (608,78,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (609,79,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (612,82,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (613,83,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (614,84,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (615,85,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (616,86,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (618,88,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (620,90,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (623,93,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (624,94,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (625,95,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (626,96,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (627,97,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (628,98,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (629,99,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (630,100,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (631,101,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (632,102,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (633,103,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (634,104,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (635,105,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (636,106,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (637,107,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (638,108,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (639,109,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (640,110,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (641,111,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'), - (642,112,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-04-14 13:30:18',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-04-14 03:30:18','2022-04-14 03:30:18'); + (1,NULL,9,'Subject for Tell a Friend','2022-03-23 16:56:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (2,NULL,10,'Subject for Pledge Acknowledgment','2021-05-21 04:01:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (3,NULL,9,'Subject for Tell a Friend','2021-10-11 13:25:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (4,NULL,10,'Subject for Pledge Acknowledgment','2022-02-12 09:06:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (5,NULL,10,'Subject for Pledge Acknowledgment','2021-09-21 08:33:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (6,NULL,10,'Subject for Pledge Acknowledgment','2022-04-05 13:33:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (7,NULL,9,'Subject for Tell a Friend','2021-08-27 20:32:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (8,NULL,9,'Subject for Tell a Friend','2021-08-28 06:24:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (9,NULL,9,'Subject for Tell a Friend','2021-11-01 06:06:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (10,NULL,10,'Subject for Pledge Acknowledgment','2021-10-16 06:27:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (11,NULL,9,'Subject for Tell a Friend','2022-04-19 14:37:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (12,NULL,9,'Subject for Tell a Friend','2022-04-07 09:43:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (13,NULL,10,'Subject for Pledge Acknowledgment','2021-07-12 00:31:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (14,NULL,9,'Subject for Tell a Friend','2022-03-12 12:13:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (15,NULL,9,'Subject for Tell a Friend','2021-06-24 11:55:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (16,NULL,10,'Subject for Pledge Acknowledgment','2021-07-28 23:10:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (17,NULL,10,'Subject for Pledge Acknowledgment','2021-06-26 03:30:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (18,NULL,10,'Subject for Pledge Acknowledgment','2022-03-28 02:31:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (19,NULL,9,'Subject for Tell a Friend','2022-03-04 00:55:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (20,NULL,10,'Subject for Pledge Acknowledgment','2021-05-16 07:57:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (21,NULL,9,'Subject for Tell a Friend','2022-02-23 20:04:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (22,NULL,10,'Subject for Pledge Acknowledgment','2021-06-27 21:47:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (23,NULL,10,'Subject for Pledge Acknowledgment','2021-07-20 03:41:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (24,NULL,10,'Subject for Pledge Acknowledgment','2022-02-27 05:07:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (25,NULL,9,'Subject for Tell a Friend','2021-11-02 02:11:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (26,NULL,9,'Subject for Tell a Friend','2022-01-14 01:58:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (27,NULL,10,'Subject for Pledge Acknowledgment','2021-11-18 11:02:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (28,NULL,10,'Subject for Pledge Acknowledgment','2021-08-29 15:27:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (29,NULL,10,'Subject for Pledge Acknowledgment','2021-07-24 13:21:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (30,NULL,9,'Subject for Tell a Friend','2021-07-07 21:11:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (31,NULL,10,'Subject for Pledge Acknowledgment','2021-10-08 19:43:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (32,NULL,10,'Subject for Pledge Acknowledgment','2021-12-31 07:09:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (33,NULL,9,'Subject for Tell a Friend','2022-03-12 15:36:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (34,NULL,9,'Subject for Tell a Friend','2021-07-21 12:37:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (35,NULL,10,'Subject for Pledge Acknowledgment','2022-01-08 17:11:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (36,NULL,9,'Subject for Tell a Friend','2021-11-14 05:47:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (37,NULL,10,'Subject for Pledge Acknowledgment','2021-08-17 21:47:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (38,NULL,10,'Subject for Pledge Acknowledgment','2021-07-06 11:06:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (39,NULL,10,'Subject for Pledge Acknowledgment','2021-10-08 10:28:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (40,NULL,9,'Subject for Tell a Friend','2021-05-27 07:36:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (41,NULL,10,'Subject for Pledge Acknowledgment','2022-02-21 07:20:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (42,NULL,9,'Subject for Tell a Friend','2022-01-11 13:44:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (43,NULL,9,'Subject for Tell a Friend','2021-10-26 06:16:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (44,NULL,9,'Subject for Tell a Friend','2022-04-03 21:30:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (45,NULL,10,'Subject for Pledge Acknowledgment','2022-04-17 23:11:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (46,NULL,9,'Subject for Tell a Friend','2021-08-17 14:25:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (47,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 20:00:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (48,NULL,10,'Subject for Pledge Acknowledgment','2022-04-24 06:29:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (49,NULL,10,'Subject for Pledge Acknowledgment','2021-07-29 14:13:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (50,NULL,9,'Subject for Tell a Friend','2021-05-25 13:55:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (51,NULL,10,'Subject for Pledge Acknowledgment','2021-12-24 07:30:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (52,NULL,10,'Subject for Pledge Acknowledgment','2022-03-02 00:07:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (53,NULL,9,'Subject for Tell a Friend','2021-08-19 16:35:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (54,NULL,10,'Subject for Pledge Acknowledgment','2021-07-21 09:55:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (55,NULL,9,'Subject for Tell a Friend','2021-09-23 00:50:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (56,NULL,9,'Subject for Tell a Friend','2022-03-28 17:59:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (57,NULL,10,'Subject for Pledge Acknowledgment','2021-11-29 16:31:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (58,NULL,9,'Subject for Tell a Friend','2021-12-25 00:17:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (59,NULL,9,'Subject for Tell a Friend','2021-12-18 09:29:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (60,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 10:47:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (61,NULL,9,'Subject for Tell a Friend','2021-10-19 16:02:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (62,NULL,9,'Subject for Tell a Friend','2021-07-03 10:35:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (63,NULL,10,'Subject for Pledge Acknowledgment','2022-04-11 04:05:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (64,NULL,10,'Subject for Pledge Acknowledgment','2022-03-08 11:55:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (65,NULL,9,'Subject for Tell a Friend','2022-03-22 18:02:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (66,NULL,9,'Subject for Tell a Friend','2022-04-05 04:14:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (67,NULL,10,'Subject for Pledge Acknowledgment','2022-04-07 00:08:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (68,NULL,10,'Subject for Pledge Acknowledgment','2021-06-18 07:58:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (69,NULL,9,'Subject for Tell a Friend','2021-12-05 05:08:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (70,NULL,10,'Subject for Pledge Acknowledgment','2021-06-19 19:54:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (71,NULL,9,'Subject for Tell a Friend','2021-08-17 18:31:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (72,NULL,10,'Subject for Pledge Acknowledgment','2022-03-16 22:06:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (73,NULL,9,'Subject for Tell a Friend','2021-05-13 09:35:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (74,NULL,10,'Subject for Pledge Acknowledgment','2021-08-30 00:03:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (75,NULL,9,'Subject for Tell a Friend','2021-07-01 20:23:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (76,NULL,10,'Subject for Pledge Acknowledgment','2021-11-27 13:04:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (77,NULL,10,'Subject for Pledge Acknowledgment','2022-03-15 22:58:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (78,NULL,9,'Subject for Tell a Friend','2021-06-17 17:28:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (79,NULL,9,'Subject for Tell a Friend','2021-06-18 19:11:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (80,NULL,9,'Subject for Tell a Friend','2022-03-14 05:53:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (81,NULL,9,'Subject for Tell a Friend','2022-04-20 23:20:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (82,NULL,10,'Subject for Pledge Acknowledgment','2021-07-26 04:04:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (83,NULL,10,'Subject for Pledge Acknowledgment','2021-09-06 19:30:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (84,NULL,9,'Subject for Tell a Friend','2021-05-19 05:36:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (85,NULL,9,'Subject for Tell a Friend','2021-07-19 06:32:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (86,NULL,9,'Subject for Tell a Friend','2021-08-27 12:20:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (87,NULL,10,'Subject for Pledge Acknowledgment','2022-01-29 01:56:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (88,NULL,10,'Subject for Pledge Acknowledgment','2021-11-30 10:34:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (89,NULL,9,'Subject for Tell a Friend','2021-12-12 06:44:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (90,NULL,9,'Subject for Tell a Friend','2022-05-04 10:07:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (91,NULL,10,'Subject for Pledge Acknowledgment','2021-05-20 01:59:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (92,NULL,9,'Subject for Tell a Friend','2021-06-15 18:55:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (93,NULL,9,'Subject for Tell a Friend','2022-04-27 04:26:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (94,NULL,9,'Subject for Tell a Friend','2021-10-07 06:51:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (95,NULL,10,'Subject for Pledge Acknowledgment','2021-08-16 06:50:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (96,NULL,10,'Subject for Pledge Acknowledgment','2021-09-26 06:41:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (97,NULL,10,'Subject for Pledge Acknowledgment','2021-12-19 00:20:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (98,NULL,9,'Subject for Tell a Friend','2021-06-18 21:33:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (99,NULL,9,'Subject for Tell a Friend','2021-10-02 06:15:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (100,NULL,9,'Subject for Tell a Friend','2021-07-25 06:50:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (101,NULL,9,'Subject for Tell a Friend','2021-11-21 06:05:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (102,NULL,9,'Subject for Tell a Friend','2021-09-02 12:26:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (103,NULL,9,'Subject for Tell a Friend','2021-07-08 07:34:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (104,NULL,9,'Subject for Tell a Friend','2021-09-21 06:49:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (105,NULL,9,'Subject for Tell a Friend','2021-10-10 04:40:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (106,NULL,10,'Subject for Pledge Acknowledgment','2022-04-17 04:31:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (107,NULL,10,'Subject for Pledge Acknowledgment','2021-10-29 22:55:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (108,NULL,10,'Subject for Pledge Acknowledgment','2022-01-31 14:48:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (109,NULL,10,'Subject for Pledge Acknowledgment','2022-02-24 12:06:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (110,NULL,10,'Subject for Pledge Acknowledgment','2021-12-28 14:03:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (111,NULL,10,'Subject for Pledge Acknowledgment','2021-05-25 01:15:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (112,NULL,10,'Subject for Pledge Acknowledgment','2021-05-31 20:16:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (113,NULL,9,'Subject for Tell a Friend','2021-05-12 02:35:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (114,NULL,9,'Subject for Tell a Friend','2021-07-23 03:53:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (115,NULL,10,'Subject for Pledge Acknowledgment','2021-10-27 06:18:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (116,NULL,9,'Subject for Tell a Friend','2021-06-02 10:10:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (117,NULL,9,'Subject for Tell a Friend','2021-05-08 01:59:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (118,NULL,10,'Subject for Pledge Acknowledgment','2022-01-19 02:45:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (119,NULL,9,'Subject for Tell a Friend','2021-10-12 14:43:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (120,NULL,10,'Subject for Pledge Acknowledgment','2021-11-22 20:52:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (121,NULL,9,'Subject for Tell a Friend','2022-03-25 13:04:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (122,NULL,9,'Subject for Tell a Friend','2022-04-12 15:22:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (123,NULL,9,'Subject for Tell a Friend','2021-12-09 17:32:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (124,NULL,10,'Subject for Pledge Acknowledgment','2021-08-31 09:44:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (125,NULL,10,'Subject for Pledge Acknowledgment','2021-07-14 07:55:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (126,NULL,10,'Subject for Pledge Acknowledgment','2021-05-13 07:28:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (127,NULL,10,'Subject for Pledge Acknowledgment','2021-07-20 03:00:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (128,NULL,9,'Subject for Tell a Friend','2021-11-27 19:23:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (129,NULL,10,'Subject for Pledge Acknowledgment','2021-12-24 16:42:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (130,NULL,10,'Subject for Pledge Acknowledgment','2021-06-08 03:54:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (131,NULL,9,'Subject for Tell a Friend','2021-10-19 18:10:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (132,NULL,9,'Subject for Tell a Friend','2021-06-08 18:32:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (133,NULL,10,'Subject for Pledge Acknowledgment','2022-03-31 03:58:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (134,NULL,9,'Subject for Tell a Friend','2021-08-08 20:03:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (135,NULL,9,'Subject for Tell a Friend','2022-01-27 14:17:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (136,NULL,10,'Subject for Pledge Acknowledgment','2021-08-05 12:31:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (137,NULL,10,'Subject for Pledge Acknowledgment','2021-09-22 21:05:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (138,NULL,9,'Subject for Tell a Friend','2022-03-01 17:11:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (139,NULL,9,'Subject for Tell a Friend','2021-10-11 12:14:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (140,NULL,10,'Subject for Pledge Acknowledgment','2021-10-09 12:55:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (141,NULL,9,'Subject for Tell a Friend','2021-08-10 16:16:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (142,NULL,10,'Subject for Pledge Acknowledgment','2021-09-16 05:39:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (143,NULL,9,'Subject for Tell a Friend','2021-12-11 18:48:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (144,NULL,9,'Subject for Tell a Friend','2021-08-02 04:05:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (145,NULL,10,'Subject for Pledge Acknowledgment','2021-06-05 01:48:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (146,NULL,9,'Subject for Tell a Friend','2022-02-25 13:38:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (147,NULL,10,'Subject for Pledge Acknowledgment','2021-07-02 17:37:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (148,NULL,9,'Subject for Tell a Friend','2022-02-24 09:00:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (149,NULL,9,'Subject for Tell a Friend','2021-10-20 01:32:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (150,NULL,10,'Subject for Pledge Acknowledgment','2021-11-21 22:42:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (151,NULL,9,'Subject for Tell a Friend','2021-07-14 00:36:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (152,NULL,9,'Subject for Tell a Friend','2021-10-17 01:42:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (153,NULL,10,'Subject for Pledge Acknowledgment','2021-07-26 09:56:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (154,NULL,9,'Subject for Tell a Friend','2022-03-12 13:50:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (155,NULL,9,'Subject for Tell a Friend','2022-01-21 20:43:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (156,NULL,10,'Subject for Pledge Acknowledgment','2021-10-07 09:44:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (157,NULL,10,'Subject for Pledge Acknowledgment','2021-09-01 07:18:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (158,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 18:47:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (159,NULL,10,'Subject for Pledge Acknowledgment','2021-10-13 06:22:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (160,NULL,9,'Subject for Tell a Friend','2022-03-08 23:01:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (161,NULL,10,'Subject for Pledge Acknowledgment','2021-10-20 20:07:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (162,NULL,9,'Subject for Tell a Friend','2021-05-26 05:39:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (163,NULL,9,'Subject for Tell a Friend','2022-04-11 01:12:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (164,NULL,9,'Subject for Tell a Friend','2021-12-17 22:04:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (165,NULL,9,'Subject for Tell a Friend','2022-04-05 01:51:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (166,NULL,10,'Subject for Pledge Acknowledgment','2021-06-24 22:50:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (167,NULL,10,'Subject for Pledge Acknowledgment','2021-08-21 15:09:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (168,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 11:09:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (169,NULL,9,'Subject for Tell a Friend','2021-08-15 18:27:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (170,NULL,10,'Subject for Pledge Acknowledgment','2021-07-13 03:05:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (171,NULL,9,'Subject for Tell a Friend','2021-08-03 09:23:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (172,NULL,9,'Subject for Tell a Friend','2021-08-29 23:09:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (173,NULL,10,'Subject for Pledge Acknowledgment','2022-02-21 22:38:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (174,NULL,10,'Subject for Pledge Acknowledgment','2022-01-21 04:13:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (175,NULL,10,'Subject for Pledge Acknowledgment','2021-08-14 06:12:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (176,NULL,10,'Subject for Pledge Acknowledgment','2022-04-09 01:50:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (177,NULL,10,'Subject for Pledge Acknowledgment','2022-04-29 16:37:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (178,NULL,9,'Subject for Tell a Friend','2021-05-09 22:28:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (179,NULL,9,'Subject for Tell a Friend','2021-10-08 21:43:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (180,NULL,10,'Subject for Pledge Acknowledgment','2021-08-12 12:05:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (181,NULL,9,'Subject for Tell a Friend','2021-06-25 13:14:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (182,NULL,10,'Subject for Pledge Acknowledgment','2021-06-20 20:48:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (183,NULL,10,'Subject for Pledge Acknowledgment','2021-08-14 14:32:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (184,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 23:53:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (185,NULL,9,'Subject for Tell a Friend','2021-07-03 01:14:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (186,NULL,9,'Subject for Tell a Friend','2021-12-30 15:43:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (187,NULL,9,'Subject for Tell a Friend','2022-04-25 14:15:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (188,NULL,9,'Subject for Tell a Friend','2021-11-18 19:17:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (189,NULL,10,'Subject for Pledge Acknowledgment','2021-06-09 00:28:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (190,NULL,10,'Subject for Pledge Acknowledgment','2021-11-15 14:52:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (191,NULL,10,'Subject for Pledge Acknowledgment','2021-11-11 12:53:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (192,NULL,10,'Subject for Pledge Acknowledgment','2021-08-03 08:57:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (193,NULL,9,'Subject for Tell a Friend','2022-04-02 07:32:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (194,NULL,10,'Subject for Pledge Acknowledgment','2021-06-25 02:41:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (195,NULL,10,'Subject for Pledge Acknowledgment','2022-04-01 16:18:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (196,NULL,9,'Subject for Tell a Friend','2021-05-10 01:56:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (197,NULL,9,'Subject for Tell a Friend','2021-08-12 13:57:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (198,NULL,9,'Subject for Tell a Friend','2021-11-14 12:47:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (199,NULL,9,'Subject for Tell a Friend','2022-02-03 03:44:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (200,NULL,9,'Subject for Tell a Friend','2022-02-15 23:25:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (201,NULL,9,'Subject for Tell a Friend','2021-12-07 02:36:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (202,NULL,9,'Subject for Tell a Friend','2021-10-30 07:46:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (203,NULL,10,'Subject for Pledge Acknowledgment','2022-03-30 18:18:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (204,NULL,10,'Subject for Pledge Acknowledgment','2022-03-15 01:50:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (205,NULL,10,'Subject for Pledge Acknowledgment','2022-03-13 13:39:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (206,NULL,10,'Subject for Pledge Acknowledgment','2022-02-13 06:57:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (207,NULL,10,'Subject for Pledge Acknowledgment','2021-08-01 19:24:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (208,NULL,9,'Subject for Tell a Friend','2022-04-01 06:57:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (209,NULL,10,'Subject for Pledge Acknowledgment','2022-03-13 02:57:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (210,NULL,9,'Subject for Tell a Friend','2021-08-29 23:55:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (211,NULL,9,'Subject for Tell a Friend','2021-12-23 21:33:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (212,NULL,10,'Subject for Pledge Acknowledgment','2021-08-06 22:46:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (213,NULL,10,'Subject for Pledge Acknowledgment','2021-06-25 21:14:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (214,NULL,10,'Subject for Pledge Acknowledgment','2021-08-30 03:21:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (215,NULL,10,'Subject for Pledge Acknowledgment','2021-08-10 09:34:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (216,NULL,10,'Subject for Pledge Acknowledgment','2021-11-29 05:12:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (217,NULL,9,'Subject for Tell a Friend','2021-09-20 05:20:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (218,NULL,9,'Subject for Tell a Friend','2022-02-24 08:18:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (219,NULL,9,'Subject for Tell a Friend','2022-04-01 15:39:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (220,NULL,10,'Subject for Pledge Acknowledgment','2021-08-18 03:51:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (221,NULL,10,'Subject for Pledge Acknowledgment','2022-02-17 13:14:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (222,NULL,10,'Subject for Pledge Acknowledgment','2021-08-21 22:37:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (223,NULL,9,'Subject for Tell a Friend','2022-01-29 11:37:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (224,NULL,9,'Subject for Tell a Friend','2022-04-01 03:26:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (225,NULL,9,'Subject for Tell a Friend','2021-08-07 02:03:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (226,NULL,9,'Subject for Tell a Friend','2022-03-20 22:52:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (227,NULL,9,'Subject for Tell a Friend','2021-05-27 20:44:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (228,NULL,10,'Subject for Pledge Acknowledgment','2022-01-20 12:10:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (229,NULL,10,'Subject for Pledge Acknowledgment','2021-12-19 22:48:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (230,NULL,9,'Subject for Tell a Friend','2021-12-04 01:20:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (231,NULL,9,'Subject for Tell a Friend','2021-07-13 15:15:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (232,NULL,9,'Subject for Tell a Friend','2021-08-26 22:04:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (233,NULL,9,'Subject for Tell a Friend','2021-10-07 04:27:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (234,NULL,10,'Subject for Pledge Acknowledgment','2021-07-14 04:22:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (235,NULL,9,'Subject for Tell a Friend','2021-05-18 00:57:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (236,NULL,10,'Subject for Pledge Acknowledgment','2022-01-14 12:45:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (237,NULL,10,'Subject for Pledge Acknowledgment','2022-01-17 00:48:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (238,NULL,9,'Subject for Tell a Friend','2021-12-26 11:03:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (239,NULL,10,'Subject for Pledge Acknowledgment','2022-02-09 06:54:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (240,NULL,9,'Subject for Tell a Friend','2021-11-04 13:11:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (241,NULL,9,'Subject for Tell a Friend','2021-08-11 10:14:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (242,NULL,9,'Subject for Tell a Friend','2022-02-22 12:57:50',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (243,NULL,9,'Subject for Tell a Friend','2021-05-06 12:19:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (244,NULL,9,'Subject for Tell a Friend','2022-02-24 16:31:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (245,NULL,9,'Subject for Tell a Friend','2022-04-04 07:15:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (246,NULL,10,'Subject for Pledge Acknowledgment','2022-01-04 21:47:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (247,NULL,9,'Subject for Tell a Friend','2021-06-29 05:16:39',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (248,NULL,10,'Subject for Pledge Acknowledgment','2021-06-09 23:45:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (249,NULL,10,'Subject for Pledge Acknowledgment','2022-01-25 00:35:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (250,NULL,9,'Subject for Tell a Friend','2022-01-21 08:09:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (251,NULL,10,'Subject for Pledge Acknowledgment','2021-12-04 07:23:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'), + (252,NULL,9,'Subject for Tell a Friend','2022-02-11 05:24:35',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (253,NULL,10,'Subject for Pledge Acknowledgment','2022-01-15 18:11:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (254,NULL,10,'Subject for Pledge Acknowledgment','2022-03-23 17:28:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (255,NULL,9,'Subject for Tell a Friend','2022-01-07 10:10:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (256,NULL,10,'Subject for Pledge Acknowledgment','2022-01-08 03:21:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (257,NULL,9,'Subject for Tell a Friend','2021-12-27 19:02:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (258,NULL,9,'Subject for Tell a Friend','2021-09-09 06:38:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (259,NULL,9,'Subject for Tell a Friend','2022-02-13 04:33:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (260,NULL,9,'Subject for Tell a Friend','2021-08-05 18:47:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (261,NULL,9,'Subject for Tell a Friend','2021-05-17 04:53:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (262,NULL,10,'Subject for Pledge Acknowledgment','2021-05-26 22:09:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (263,NULL,9,'Subject for Tell a Friend','2021-08-28 04:10:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (264,NULL,10,'Subject for Pledge Acknowledgment','2021-05-09 20:35:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (265,NULL,9,'Subject for Tell a Friend','2021-06-12 22:32:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (266,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 10:58:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (267,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 17:49:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (268,NULL,10,'Subject for Pledge Acknowledgment','2021-11-15 08:41:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (269,NULL,10,'Subject for Pledge Acknowledgment','2022-02-19 14:12:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (270,NULL,10,'Subject for Pledge Acknowledgment','2022-02-24 20:17:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (271,NULL,9,'Subject for Tell a Friend','2021-08-04 12:56:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (272,NULL,9,'Subject for Tell a Friend','2021-12-23 21:31:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (273,NULL,10,'Subject for Pledge Acknowledgment','2021-08-29 10:28:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (274,NULL,10,'Subject for Pledge Acknowledgment','2021-08-12 06:09:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (275,NULL,9,'Subject for Tell a Friend','2021-11-27 22:45:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (276,NULL,9,'Subject for Tell a Friend','2021-09-09 02:59:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (277,NULL,10,'Subject for Pledge Acknowledgment','2022-03-10 15:40:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (278,NULL,9,'Subject for Tell a Friend','2021-11-17 16:51:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (279,NULL,9,'Subject for Tell a Friend','2021-12-10 06:14:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (280,NULL,9,'Subject for Tell a Friend','2021-06-26 09:09:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (281,NULL,10,'Subject for Pledge Acknowledgment','2021-09-25 23:02:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (282,NULL,10,'Subject for Pledge Acknowledgment','2022-04-08 17:33:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (283,NULL,9,'Subject for Tell a Friend','2021-06-06 13:03:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (284,NULL,10,'Subject for Pledge Acknowledgment','2021-07-11 15:43:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (285,NULL,10,'Subject for Pledge Acknowledgment','2022-01-20 04:00:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (286,NULL,9,'Subject for Tell a Friend','2021-10-20 03:58:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (287,NULL,10,'Subject for Pledge Acknowledgment','2021-05-27 12:53:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (288,NULL,10,'Subject for Pledge Acknowledgment','2021-12-30 22:03:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (289,NULL,9,'Subject for Tell a Friend','2022-04-01 11:46:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (290,NULL,9,'Subject for Tell a Friend','2022-04-19 06:16:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (291,NULL,9,'Subject for Tell a Friend','2021-09-24 09:53:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (292,NULL,10,'Subject for Pledge Acknowledgment','2021-10-01 10:12:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (293,NULL,9,'Subject for Tell a Friend','2021-06-25 09:00:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (294,NULL,9,'Subject for Tell a Friend','2022-01-25 03:29:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (295,NULL,10,'Subject for Pledge Acknowledgment','2021-08-17 01:05:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (296,NULL,10,'Subject for Pledge Acknowledgment','2021-12-24 14:58:41',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (297,NULL,9,'Subject for Tell a Friend','2021-11-12 07:07:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (298,NULL,9,'Subject for Tell a Friend','2022-03-16 00:51:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (299,NULL,9,'Subject for Tell a Friend','2021-05-17 20:33:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (300,NULL,9,'Subject for Tell a Friend','2021-10-08 01:50:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (301,NULL,10,'Subject for Pledge Acknowledgment','2022-03-04 00:12:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (302,NULL,10,'Subject for Pledge Acknowledgment','2021-05-19 03:15:54',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (303,NULL,9,'Subject for Tell a Friend','2022-04-13 21:49:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (304,NULL,10,'Subject for Pledge Acknowledgment','2021-12-05 07:39:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (305,NULL,10,'Subject for Pledge Acknowledgment','2021-12-05 04:40:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (306,NULL,9,'Subject for Tell a Friend','2022-04-28 23:41:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (307,NULL,9,'Subject for Tell a Friend','2022-02-20 17:36:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (308,NULL,9,'Subject for Tell a Friend','2022-02-11 06:11:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (309,NULL,10,'Subject for Pledge Acknowledgment','2022-02-16 08:08:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (310,NULL,9,'Subject for Tell a Friend','2021-06-24 01:27:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (311,NULL,10,'Subject for Pledge Acknowledgment','2022-04-18 10:45:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (312,NULL,9,'Subject for Tell a Friend','2022-03-15 13:30:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (313,NULL,9,'Subject for Tell a Friend','2021-06-13 14:36:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (314,NULL,9,'Subject for Tell a Friend','2021-06-16 19:44:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (315,NULL,10,'Subject for Pledge Acknowledgment','2022-01-18 10:01:42',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (316,NULL,10,'Subject for Pledge Acknowledgment','2021-10-05 17:55:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (317,NULL,9,'Subject for Tell a Friend','2022-01-16 23:16:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (318,NULL,10,'Subject for Pledge Acknowledgment','2022-01-14 03:11:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (319,NULL,9,'Subject for Tell a Friend','2021-12-23 08:37:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (320,NULL,9,'Subject for Tell a Friend','2022-04-23 13:40:27',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (321,NULL,10,'Subject for Pledge Acknowledgment','2022-03-09 11:49:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (322,NULL,10,'Subject for Pledge Acknowledgment','2021-12-04 14:56:46',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (323,NULL,9,'Subject for Tell a Friend','2021-05-05 23:14:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (324,NULL,9,'Subject for Tell a Friend','2022-01-15 08:50:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (325,NULL,10,'Subject for Pledge Acknowledgment','2021-05-29 07:51:55',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (326,NULL,9,'Subject for Tell a Friend','2022-04-24 08:00:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (327,NULL,10,'Subject for Pledge Acknowledgment','2022-02-12 02:52:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (328,NULL,9,'Subject for Tell a Friend','2021-07-13 16:58:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (329,NULL,9,'Subject for Tell a Friend','2022-02-09 19:59:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (330,NULL,9,'Subject for Tell a Friend','2021-08-20 18:12:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (331,NULL,10,'Subject for Pledge Acknowledgment','2022-01-02 20:02:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (332,NULL,9,'Subject for Tell a Friend','2021-11-16 19:09:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (333,NULL,9,'Subject for Tell a Friend','2021-12-02 12:42:16',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (334,NULL,9,'Subject for Tell a Friend','2021-10-04 21:02:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (335,NULL,10,'Subject for Pledge Acknowledgment','2021-12-06 00:13:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (336,NULL,10,'Subject for Pledge Acknowledgment','2021-11-02 21:18:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (337,NULL,10,'Subject for Pledge Acknowledgment','2021-11-23 22:20:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (338,NULL,10,'Subject for Pledge Acknowledgment','2021-09-11 00:58:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (339,NULL,10,'Subject for Pledge Acknowledgment','2022-02-16 22:26:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (340,NULL,10,'Subject for Pledge Acknowledgment','2022-05-04 03:25:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (341,NULL,10,'Subject for Pledge Acknowledgment','2022-03-15 14:32:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (342,NULL,10,'Subject for Pledge Acknowledgment','2021-07-29 03:12:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (343,NULL,9,'Subject for Tell a Friend','2021-12-16 12:25:30',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (344,NULL,9,'Subject for Tell a Friend','2021-06-29 15:32:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (345,NULL,10,'Subject for Pledge Acknowledgment','2021-05-07 18:16:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (346,NULL,10,'Subject for Pledge Acknowledgment','2021-07-04 14:30:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (347,NULL,10,'Subject for Pledge Acknowledgment','2022-03-30 04:48:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (348,NULL,9,'Subject for Tell a Friend','2021-10-13 04:14:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (349,NULL,9,'Subject for Tell a Friend','2021-08-19 01:50:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (350,NULL,9,'Subject for Tell a Friend','2021-09-06 06:58:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (351,NULL,9,'Subject for Tell a Friend','2022-01-11 04:53:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (352,NULL,9,'Subject for Tell a Friend','2021-06-04 18:34:32',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (353,NULL,10,'Subject for Pledge Acknowledgment','2021-07-04 05:26:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (354,NULL,10,'Subject for Pledge Acknowledgment','2021-05-27 13:21:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (355,NULL,9,'Subject for Tell a Friend','2022-04-25 12:08:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (356,NULL,9,'Subject for Tell a Friend','2021-08-27 13:24:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (357,NULL,10,'Subject for Pledge Acknowledgment','2022-02-15 22:47:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (358,NULL,10,'Subject for Pledge Acknowledgment','2021-11-30 07:52:43',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (359,NULL,9,'Subject for Tell a Friend','2021-12-06 22:28:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (360,NULL,10,'Subject for Pledge Acknowledgment','2021-12-11 21:39:56',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (361,NULL,10,'Subject for Pledge Acknowledgment','2021-08-24 05:40:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (362,NULL,10,'Subject for Pledge Acknowledgment','2022-03-02 14:17:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (363,NULL,10,'Subject for Pledge Acknowledgment','2022-01-09 09:14:19',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (364,NULL,10,'Subject for Pledge Acknowledgment','2022-03-24 18:34:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (365,NULL,9,'Subject for Tell a Friend','2021-09-24 12:20:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (366,NULL,10,'Subject for Pledge Acknowledgment','2021-09-02 08:26:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (367,NULL,10,'Subject for Pledge Acknowledgment','2021-10-11 07:47:13',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (368,NULL,9,'Subject for Tell a Friend','2021-05-22 15:58:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (369,NULL,9,'Subject for Tell a Friend','2021-07-18 06:58:07',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (370,NULL,10,'Subject for Pledge Acknowledgment','2022-02-18 01:48:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (371,NULL,10,'Subject for Pledge Acknowledgment','2021-05-24 03:26:17',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (372,NULL,9,'Subject for Tell a Friend','2021-11-24 23:01:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (373,NULL,9,'Subject for Tell a Friend','2021-07-20 18:32:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (374,NULL,9,'Subject for Tell a Friend','2022-04-09 13:04:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (375,NULL,9,'Subject for Tell a Friend','2021-08-25 18:20:34',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (376,NULL,9,'Subject for Tell a Friend','2021-06-27 18:51:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (377,NULL,10,'Subject for Pledge Acknowledgment','2021-07-29 04:40:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (378,NULL,9,'Subject for Tell a Friend','2021-11-10 12:13:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (379,NULL,10,'Subject for Pledge Acknowledgment','2021-09-24 08:33:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (380,NULL,10,'Subject for Pledge Acknowledgment','2021-07-16 18:30:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (381,NULL,10,'Subject for Pledge Acknowledgment','2022-02-01 23:29:04',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (382,NULL,10,'Subject for Pledge Acknowledgment','2022-01-31 18:31:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (383,NULL,9,'Subject for Tell a Friend','2021-05-05 07:12:05',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (384,NULL,9,'Subject for Tell a Friend','2022-01-12 00:18:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (385,NULL,9,'Subject for Tell a Friend','2021-12-06 17:32:38',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (386,NULL,10,'Subject for Pledge Acknowledgment','2021-10-03 21:28:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (387,NULL,9,'Subject for Tell a Friend','2021-05-12 20:29:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (388,NULL,9,'Subject for Tell a Friend','2021-11-21 08:37:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (389,NULL,10,'Subject for Pledge Acknowledgment','2022-03-08 23:57:44',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (390,NULL,9,'Subject for Tell a Friend','2022-04-23 01:50:36',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (391,NULL,10,'Subject for Pledge Acknowledgment','2021-07-28 16:07:47',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (392,NULL,10,'Subject for Pledge Acknowledgment','2021-12-26 19:34:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (393,NULL,10,'Subject for Pledge Acknowledgment','2021-10-07 22:29:10',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (394,NULL,9,'Subject for Tell a Friend','2021-10-26 21:33:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (395,NULL,10,'Subject for Pledge Acknowledgment','2021-11-07 22:18:12',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (396,NULL,9,'Subject for Tell a Friend','2021-10-11 00:00:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (397,NULL,9,'Subject for Tell a Friend','2021-06-17 11:39:28',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (398,NULL,9,'Subject for Tell a Friend','2021-05-06 15:01:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (399,NULL,10,'Subject for Pledge Acknowledgment','2021-10-22 07:43:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (400,NULL,10,'Subject for Pledge Acknowledgment','2021-12-09 05:40:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (401,NULL,9,'Subject for Tell a Friend','2021-08-19 04:31:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (402,NULL,9,'Subject for Tell a Friend','2022-03-31 18:56:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (403,NULL,10,'Subject for Pledge Acknowledgment','2021-06-04 13:20:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (404,NULL,10,'Subject for Pledge Acknowledgment','2021-10-28 15:39:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (405,NULL,9,'Subject for Tell a Friend','2021-11-18 14:07:40',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (406,NULL,9,'Subject for Tell a Friend','2021-08-31 09:32:45',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (407,NULL,10,'Subject for Pledge Acknowledgment','2021-07-05 14:20:26',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (408,NULL,9,'Subject for Tell a Friend','2021-05-22 04:41:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (409,NULL,9,'Subject for Tell a Friend','2022-04-01 03:39:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (410,NULL,9,'Subject for Tell a Friend','2021-08-07 11:59:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (411,NULL,9,'Subject for Tell a Friend','2022-03-11 23:11:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (412,NULL,10,'Subject for Pledge Acknowledgment','2021-11-20 02:20:37',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (413,NULL,9,'Subject for Tell a Friend','2021-11-02 22:19:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (414,NULL,10,'Subject for Pledge Acknowledgment','2021-06-11 20:22:01',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (415,NULL,9,'Subject for Tell a Friend','2021-07-11 08:20:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (416,NULL,9,'Subject for Tell a Friend','2021-10-17 23:07:21',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (417,NULL,10,'Subject for Pledge Acknowledgment','2022-05-02 21:26:51',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (418,NULL,9,'Subject for Tell a Friend','2021-11-05 13:00:24',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (419,NULL,9,'Subject for Tell a Friend','2022-02-01 16:43:22',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (420,NULL,9,'Subject for Tell a Friend','2021-09-27 13:11:31',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (421,NULL,10,'Subject for Pledge Acknowledgment','2021-06-22 06:47:48',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (422,NULL,9,'Subject for Tell a Friend','2022-04-08 05:38:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (423,NULL,10,'Subject for Pledge Acknowledgment','2021-12-29 14:05:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (424,NULL,9,'Subject for Tell a Friend','2021-10-29 23:20:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (425,NULL,9,'Subject for Tell a Friend','2021-10-17 10:20:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (426,NULL,10,'Subject for Pledge Acknowledgment','2022-01-21 04:31:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (427,NULL,9,'Subject for Tell a Friend','2021-09-22 22:33:53',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (428,NULL,10,'Subject for Pledge Acknowledgment','2021-06-27 06:49:18',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (429,NULL,10,'Subject for Pledge Acknowledgment','2021-11-27 23:18:29',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (430,NULL,9,'Subject for Tell a Friend','2021-11-05 21:25:06',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (431,NULL,10,'Subject for Pledge Acknowledgment','2022-04-16 01:51:57',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (432,NULL,9,'Subject for Tell a Friend','2021-12-26 16:49:15',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (433,NULL,10,'Subject for Pledge Acknowledgment','2022-01-13 15:04:11',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (434,NULL,9,'Subject for Tell a Friend','2022-03-25 06:43:58',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (435,NULL,10,'Subject for Pledge Acknowledgment','2022-05-03 01:44:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (436,NULL,9,'Subject for Tell a Friend','2021-10-14 18:31:52',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (437,NULL,10,'Subject for Pledge Acknowledgment','2021-05-05 17:44:08',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (438,NULL,10,'Subject for Pledge Acknowledgment','2021-09-10 04:45:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (439,NULL,10,'Subject for Pledge Acknowledgment','2022-01-17 04:26:23',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (440,NULL,9,'Subject for Tell a Friend','2022-02-23 09:09:09',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (441,NULL,9,'Subject for Tell a Friend','2021-05-07 13:30:03',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (442,NULL,9,'Subject for Tell a Friend','2021-08-20 12:26:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (443,NULL,9,'Subject for Tell a Friend','2021-10-18 21:55:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (444,NULL,10,'Subject for Pledge Acknowledgment','2021-05-15 15:45:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (445,NULL,9,'Subject for Tell a Friend','2022-03-01 20:43:02',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (446,NULL,9,'Subject for Tell a Friend','2021-12-27 03:15:33',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (447,NULL,9,'Subject for Tell a Friend','2022-02-17 03:55:59',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (448,NULL,10,'Subject for Pledge Acknowledgment','2022-02-03 03:08:14',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (449,NULL,10,'Subject for Pledge Acknowledgment','2021-12-30 07:50:49',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (450,NULL,9,'Subject for Tell a Friend','2021-09-01 19:24:20',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (451,1,6,'$ 125 April Mailer 1','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (452,2,6,'$ 50 Online: Save the Penguins','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (453,3,6,'£ 25 April Mailer 1','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (454,4,6,'$ 50 Online: Save the Penguins','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (455,5,6,'$ 50 Online: Save the Penguins','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (456,6,6,'$ 500 April Mailer 1','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (457,7,6,'$ 1750 Online: Save the Penguins','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (458,8,6,'$ 50 Online: Save the Penguins','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (459,9,6,'$ 10 Online: Help CiviCRM','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (460,10,6,'$ 250 Online: Help CiviCRM','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (461,11,6,'Â¥ 500 ','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (462,12,6,'$ 50 Online: Save the Penguins','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (463,13,6,'$ 50 ','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (464,14,6,'$ 50 ','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (465,15,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (466,16,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (467,17,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (468,18,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (469,19,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (470,20,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (471,21,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (472,22,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (473,23,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (474,24,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (475,25,6,'$ 25 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (476,26,6,'$ 10 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (477,27,6,'$ 10 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (478,28,6,'$ 10 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (479,29,6,'$ 10 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (480,30,6,'$ 10 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (481,31,6,'€ 5 Recurring contribution','2022-07-04 18:47:25',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (482,1,7,'General','2022-05-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (483,2,7,'Student','2022-05-03 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (484,3,7,'General','2022-05-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (485,4,7,'Student','2022-05-01 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (486,5,7,'General','2020-04-02 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (487,6,7,'Student','2022-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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (488,7,7,'General','2022-04-28 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (489,8,7,'Student','2022-04-27 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (490,9,7,'General','2022-04-26 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (491,10,7,'General','2020-02-22 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (492,11,7,'Lifetime','2022-04-24 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (493,12,7,'Student','2022-04-23 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (494,13,7,'General','2022-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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (495,14,7,'Student','2022-04-21 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (496,15,7,'General','2020-01-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (497,16,7,'Student','2022-04-19 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (498,17,7,'General','2022-04-18 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (499,18,7,'Student','2022-04-17 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (500,19,7,'General','2022-04-16 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (501,20,7,'General','2019-12-04 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (502,21,7,'General','2022-04-14 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (503,22,7,'Lifetime','2022-04-13 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (504,23,7,'General','2022-04-12 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (505,24,7,'Student','2022-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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (506,25,7,'General','2019-10-25 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (507,26,7,'Student','2022-04-09 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (508,27,7,'General','2022-04-08 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (509,28,7,'Student','2022-04-07 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (510,29,7,'General','2022-04-06 00:00:00',NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (511,30,7,'General','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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (512,32,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (513,33,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (514,34,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (515,35,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (516,36,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (517,37,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (518,38,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (519,39,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (520,40,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (521,41,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (522,42,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (523,43,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (524,44,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (525,45,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (526,46,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (527,47,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (528,48,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (529,49,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (530,50,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (531,51,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (532,52,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (533,53,6,'$ 1200.00 - Lifetime Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (534,54,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (535,55,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (536,56,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (537,57,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (538,58,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (539,59,6,'$ 50.00 - Student Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (540,60,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (541,61,6,'$ 100.00 - General Membership: Offline signup','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Membership Payment',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (543,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (544,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (545,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (546,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (547,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (548,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (549,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (550,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (551,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (552,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (553,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (554,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (555,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (556,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (557,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (558,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (559,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (560,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (561,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (562,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (563,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (564,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (565,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (566,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (567,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (568,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (569,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (570,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (571,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (572,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (573,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (574,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (575,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (576,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (577,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (578,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (579,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (580,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (581,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (582,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (583,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (584,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (585,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (586,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (587,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (588,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (589,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (590,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (591,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (592,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,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (593,63,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (594,64,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (595,65,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (596,66,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (597,67,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (598,68,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (599,69,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (600,70,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (601,71,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (602,72,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (603,73,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (604,74,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (605,75,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (606,76,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (607,77,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (608,78,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (609,79,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (610,80,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (611,81,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (612,82,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (613,83,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (614,84,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (615,85,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (616,86,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (617,87,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (618,88,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (619,89,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (620,90,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (621,91,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (622,92,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (623,93,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (624,94,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (625,95,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (626,96,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (627,97,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (628,98,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (629,99,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (630,100,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (631,101,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (632,102,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (633,103,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (634,104,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (635,105,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (636,106,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (637,107,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (638,108,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (639,109,6,'$ 50.00 - Fall Fundraiser Dinner : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (640,110,6,'$ 50.00 - Summer Solstice Festival Day Concert : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (641,111,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'), + (642,112,6,'$ 800.00 - Rain-forest Cup Youth Soccer Tournament : Offline registration','2022-05-04 18:47:25',NULL,NULL,NULL,NULL,'Participant',2,NULL,NULL,0,NULL,0,NULL,1,NULL,NULL,0,NULL,NULL,NULL,0,'2022-05-04 18:47:25','2022-05-04 18:47:25'); /*!40000 ALTER TABLE `civicrm_activity` ENABLE KEYS */; UNLOCK TABLES; @@ -813,825 +813,832 @@ 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 - (37,24,1,3), - (203,134,1,3), - (271,181,1,3), - (301,201,1,3), - (637,423,1,3), - (222,147,2,3), - (264,177,2,3), - (314,211,2,3), - (440,297,2,3), - (635,422,2,3), - (679,451,2,2), - (735,507,2,2), - (765,537,2,2), - (505,338,3,3), - (628,418,3,3), - (236,156,4,3), - (680,452,4,2), - (683,455,4,2), - (63,42,5,3), - (364,245,5,3), - (403,271,5,3), - (3,2,6,3), - (186,123,6,3), - (279,186,6,3), - (681,453,6,2), - (72,48,7,3), - (297,199,7,3), - (299,200,7,3), - (802,574,7,2), - (77,51,8,3), - (85,57,8,3), - (682,454,8,2), - (774,546,8,2), - (114,76,9,3), - (609,406,9,3), - (136,90,10,3), - (325,219,10,3), - (585,392,10,3), - (134,89,11,3), - (147,97,11,3), - (266,178,11,3), - (625,416,11,3), - (123,82,12,3), - (592,396,12,3), - (810,582,12,2), - (445,301,13,3), - (145,96,14,3), - (213,140,14,3), - (479,322,14,3), - (809,581,14,2), - (360,242,15,3), - (421,284,15,3), - (651,432,15,3), - (684,456,16,2), - (777,549,16,2), - (251,167,17,3), - (495,332,17,3), - (808,580,17,2), - (438,296,18,3), - (730,502,18,2), - (760,532,18,2), - (6,4,19,3), - (345,231,19,3), - (407,273,19,3), - (466,314,19,3), - (685,457,19,2), - (295,198,20,3), - (815,587,20,2), - (8,5,21,3), - (476,320,21,3), - (25,16,22,3), - (725,497,22,2), - (755,527,22,2), - (307,205,23,3), - (321,216,23,3), - (512,343,23,3), - (578,388,23,3), - (722,494,23,2), - (752,524,23,2), - (150,99,24,3), - (188,124,24,3), - (482,324,24,3), - (560,376,24,3), - (676,448,24,3), - (201,133,25,3), - (611,407,25,3), - (229,152,28,3), - (648,430,28,3), - (92,62,29,3), - (227,151,29,2), - (228,152,29,2), - (230,153,29,2), - (232,154,29,2), - (233,155,29,2), - (235,156,29,2), - (237,157,29,2), - (239,158,29,2), - (240,159,29,2), - (242,160,29,2), - (243,161,29,2), - (245,162,29,2), - (246,163,29,2), - (247,164,29,2), - (248,165,29,2), - (249,166,29,2), - (250,167,29,2), - (252,168,29,2), - (253,169,29,2), - (254,170,29,2), - (255,171,29,2), - (257,172,29,2), - (258,173,29,2), - (259,174,29,2), - (261,175,29,2), - (262,176,29,2), - (263,177,29,2), - (265,178,29,2), - (267,179,29,2), - (268,180,29,2), - (270,181,29,2), - (272,182,29,2), - (274,183,29,2), - (275,184,29,2), - (276,185,29,2), - (278,186,29,2), - (280,187,29,2), - (281,188,29,2), - (282,189,29,2), - (283,190,29,2), - (284,191,29,2), - (285,192,29,2), - (287,193,29,2), - (289,194,29,2), - (290,195,29,2), - (291,196,29,2), - (292,197,29,2), - (294,198,29,2), - (296,199,29,2), - (298,200,29,2), - (300,201,29,2), - (302,202,29,2), - (303,203,29,2), - (305,204,29,2), - (306,205,29,2), - (308,206,29,2), - (309,207,29,2), - (310,208,29,2), - (311,209,29,2), - (312,210,29,2), - (313,211,29,2), - (315,212,29,2), - (316,213,29,2), - (317,214,29,2), - (318,215,29,2), - (320,216,29,2), - (322,217,29,2), - (323,218,29,2), - (324,219,29,2), - (326,220,29,2), - (327,221,29,2), - (329,222,29,2), - (330,223,29,2), - (331,224,29,2), - (333,225,29,2), - (335,226,29,2), - (337,227,29,2), - (338,228,29,2), - (340,229,29,2), - (342,230,29,2), - (344,231,29,2), - (346,232,29,2), - (347,233,29,2), - (348,234,29,2), - (350,235,29,2), - (352,236,29,2), - (353,237,29,2), - (354,238,29,2), - (356,239,29,2), - (357,240,29,2), - (358,241,29,2), - (359,242,29,2), - (361,243,29,2), - (362,244,29,2), - (363,245,29,2), - (365,246,29,2), - (367,247,29,2), - (368,248,29,2), - (369,249,29,2), - (371,250,29,2), - (373,251,29,2), - (374,252,29,2), - (376,253,29,2), - (377,254,29,2), - (379,255,29,2), - (380,256,29,2), - (382,257,29,2), - (383,258,29,2), - (384,259,29,2), - (386,260,29,2), - (387,261,29,2), - (388,262,29,2), - (389,263,29,2), - (391,264,29,2), - (393,265,29,2), - (395,266,29,2), - (396,267,29,2), - (398,268,29,2), - (400,269,29,2), - (401,270,29,2), - (402,271,29,2), - (404,272,29,2), - (406,273,29,2), - (408,274,29,2), - (409,275,29,2), - (410,276,29,2), - (411,277,29,2), - (413,278,29,2), - (414,279,29,2), - (415,280,29,2), - (416,281,29,2), - (417,282,29,2), - (418,283,29,2), - (420,284,29,2), - (422,285,29,2), - (423,286,29,2), - (424,287,29,2), - (425,288,29,2), - (427,289,29,2), - (428,290,29,2), - (430,291,29,2), - (432,292,29,2), - (433,293,29,2), - (434,294,29,2), - (435,295,29,2), - (437,296,29,2), - (439,297,29,2), - (441,298,29,2), - (442,299,29,2), - (443,300,29,2), - (13,8,30,3), - (343,230,30,3), - (457,308,30,3), - (712,484,30,2), - (742,514,30,2), - (791,563,30,2), - (130,87,32,3), - (140,93,32,3), - (451,305,32,3), - (655,435,32,3), - (663,440,32,3), - (691,463,32,2), - (692,464,32,2), - (101,68,33,3), - (328,221,33,3), - (234,155,34,3), - (556,374,34,3), - (688,460,34,2), - (732,504,34,2), - (762,534,34,2), - (42,27,35,3), - (196,129,35,3), - (48,32,36,3), - (714,486,36,2), - (744,516,36,2), - (811,583,37,2), + (403,265,1,3), + (805,570,1,2), + (135,90,2,3), + (336,224,2,3), + (591,390,2,3), + (686,451,2,2), + (721,486,2,2), + (751,516,2,2), + (153,101,3,3), + (187,123,3,3), + (313,208,3,3), + (421,278,3,3), + (437,289,3,3), + (460,303,3,3), + (510,334,3,3), + (531,350,3,3), + (556,368,3,3), + (639,420,3,3), + (140,93,4,3), + (687,452,4,2), + (690,455,4,2), + (812,577,4,2), + (446,294,5,3), + (657,432,5,3), + (2,1,6,3), + (688,453,6,2), + (464,306,7,3), + (588,388,7,3), + (794,559,7,2), + (68,46,8,3), + (672,442,8,3), + (689,454,8,2), + (270,179,9,3), + (334,223,9,3), + (444,293,9,3), + (558,369,10,3), + (681,447,10,3), + (61,42,11,3), + (485,319,11,3), + (650,427,11,3), + (105,71,12,3), + (499,328,12,3), + (630,415,12,3), + (637,419,12,3), + (85,58,13,3), + (366,242,13,3), + (581,384,14,3), + (685,450,14,3), + (647,425,15,3), + (738,503,15,2), + (768,533,15,2), + (77,53,16,3), + (161,105,16,3), + (425,280,16,3), + (627,413,16,3), + (691,456,16,2), + (259,171,17,3), + (393,259,17,3), + (491,323,17,3), + (73,50,18,3), + (24,15,19,3), + (234,154,19,3), + (692,457,19,2), + (410,271,20,3), + (660,434,20,3), + (242,160,21,3), + (251,165,21,3), + (370,244,22,3), + (533,351,22,3), + (743,508,22,2), + (773,538,22,2), + (37,25,23,3), + (670,441,23,3), + (90,61,24,3), + (423,279,24,3), + (745,510,25,2), + (775,540,25,2), + (338,225,26,3), + (609,402,26,3), + (82,56,27,3), + (226,149,27,3), + (247,163,27,3), + (471,310,27,3), + (58,40,29,3), + (216,143,29,3), + (450,297,29,3), + (304,201,30,3), + (412,272,30,3), + (121,81,31,3), + (183,121,32,3), + (306,202,32,3), + (375,247,32,3), + (382,252,32,3), + (607,401,32,3), + (698,463,32,2), + (699,464,32,2), + (151,100,33,3), + (811,576,33,2), + (573,378,34,3), + (695,460,34,2), + (785,550,34,2), + (180,119,35,3), + (268,178,35,3), + (722,487,35,2), + (752,517,35,2), + (228,151,36,2), + (230,152,36,2), + (232,153,36,2), + (233,154,36,2), + (235,155,36,2), + (237,156,36,2), + (238,157,36,2), + (239,158,36,2), + (240,159,36,2), + (241,160,36,2), + (243,161,36,2), + (244,162,36,2), + (246,163,36,2), + (248,164,36,2), + (250,165,36,2), + (252,166,36,2), + (253,167,36,2), + (254,168,36,2), + (255,169,36,2), + (257,170,36,2), + (258,171,36,2), + (260,172,36,2), + (262,173,36,2), + (263,174,36,2), + (264,175,36,2), + (265,176,36,2), + (266,177,36,2), + (267,178,36,2), + (269,179,36,2), + (271,180,36,2), + (272,181,36,2), + (274,182,36,2), + (275,183,36,2), + (276,184,36,2), + (277,185,36,2), + (279,186,36,2), + (281,187,36,2), + (283,188,36,2), + (285,189,36,2), + (286,190,36,2), + (287,191,36,2), + (288,192,36,2), + (289,193,36,2), + (291,194,36,2), + (292,195,36,2), + (293,196,36,2), + (295,197,36,2), + (297,198,36,2), + (299,199,36,2), + (301,200,36,2), + (303,201,36,2), + (305,202,36,2), + (307,203,36,2), + (308,204,36,2), + (309,205,36,2), + (310,206,36,2), + (311,207,36,2), + (312,208,36,2), + (314,209,36,2), + (315,210,36,2), + (317,211,36,2), + (319,212,36,2), + (320,213,36,2), + (321,214,36,2), + (322,215,36,2), + (323,216,36,2), + (324,217,36,2), + (326,218,36,2), + (328,219,36,2), + (330,220,36,2), + (331,221,36,2), + (332,222,36,2), + (333,223,36,2), + (335,224,36,2), + (337,225,36,2), + (339,226,36,2), + (341,227,36,2), + (343,228,36,2), + (344,229,36,2), + (345,230,36,2), + (347,231,36,2), + (349,232,36,2), + (351,233,36,2), + (353,234,36,2), + (354,235,36,2), + (356,236,36,2), + (357,237,36,2), + (358,238,36,2), + (360,239,36,2), + (361,240,36,2), + (363,241,36,2), + (365,242,36,2), + (367,243,36,2), + (369,244,36,2), + (371,245,36,2), + (373,246,36,2), + (374,247,36,2), + (376,248,36,2), + (377,249,36,2), + (378,250,36,2), + (380,251,36,2), + (381,252,36,2), + (383,253,36,2), + (384,254,36,2), + (385,255,36,2), + (387,256,36,2), + (388,257,36,2), + (390,258,36,2), + (392,259,36,2), + (394,260,36,2), + (396,261,36,2), + (398,262,36,2), + (399,263,36,2), + (401,264,36,2), + (402,265,36,2), + (404,266,36,2), + (405,267,36,2), + (406,268,36,2), + (407,269,36,2), + (408,270,36,2), + (409,271,36,2), + (411,272,36,2), + (413,273,36,2), + (414,274,36,2), + (415,275,36,2), + (417,276,36,2), + (419,277,36,2), + (420,278,36,2), + (422,279,36,2), + (424,280,36,2), + (426,281,36,2), + (427,282,36,2), + (428,283,36,2), + (430,284,36,2), + (431,285,36,2), + (432,286,36,2), + (434,287,36,2), + (435,288,36,2), + (436,289,36,2), + (438,290,36,2), + (440,291,36,2), + (442,292,36,2), + (443,293,36,2), + (445,294,36,2), + (447,295,36,2), + (448,296,36,2), + (449,297,36,2), + (451,298,36,2), + (453,299,36,2), + (455,300,36,2), + (478,314,36,3), + (208,138,37,3), + (624,411,37,3), + (724,489,37,2), + (754,519,37,2), + (302,200,38,3), (98,66,39,3), - (771,543,39,2), - (226,150,40,3), - (277,185,40,3), - (497,333,40,3), - (528,353,40,3), - (793,565,40,2), - (216,142,41,3), - (392,264,41,3), - (789,561,41,2), - (426,288,42,3), - (493,331,42,3), - (501,336,42,3), - (471,317,43,3), - (690,462,43,2), - (782,554,43,2), - (412,277,44,3), - (491,330,44,3), - (164,108,45,3), - (375,252,45,3), - (546,367,45,3), - (256,171,46,3), - (514,344,46,3), - (673,446,46,3), - (59,40,47,3), - (455,307,47,3), - (534,358,47,3), - (780,552,47,2), - (334,225,48,3), - (397,267,48,3), - (34,22,49,3), - (132,88,49,3), - (273,182,49,3), - (370,249,49,3), - (616,410,49,3), - (521,349,50,3), - (90,61,51,3), - (94,63,51,3), - (104,70,51,3), - (293,197,51,3), - (332,224,51,3), - (341,229,51,3), - (32,21,52,3), - (190,125,52,3), - (536,359,52,3), - (121,81,53,3), - (160,106,53,3), - (399,268,53,3), - (646,429,53,3), - (710,482,53,2), - (740,512,53,2), - (260,174,54,3), - (286,192,54,3), - (784,556,55,2), - (167,110,56,3), - (453,306,56,3), - (736,508,56,2), - (766,538,56,2), - (778,550,56,2), - (355,238,57,3), - (405,272,57,3), - (669,444,57,3), - (799,571,57,2), - (715,487,58,2), - (745,517,58,2), - (693,465,59,2), - (694,466,59,2), - (695,467,59,2), - (696,468,59,2), - (697,469,59,2), - (698,470,59,2), - (699,471,59,2), - (700,472,59,2), - (701,473,59,2), - (702,474,59,2), - (703,475,59,2), - (525,351,60,3), - (544,366,60,3), - (550,370,60,3), - (800,572,60,2), - (193,127,61,3), - (523,350,61,3), - (602,401,61,3), - (717,489,61,2), - (747,519,61,2), - (792,564,61,2), - (567,381,62,3), - (605,403,63,3), - (50,33,64,3), - (112,75,64,3), - (171,112,64,3), - (385,259,64,3), - (419,283,64,3), - (10,6,65,3), - (107,72,65,3), - (118,79,65,3), - (244,161,65,3), - (349,234,65,3), - (181,119,66,3), - (588,394,66,3), - (772,544,66,2), - (142,94,67,3), - (205,135,67,3), - (558,375,67,3), - (724,496,67,2), - (754,526,67,2), - (173,113,68,3), - (351,235,68,3), - (723,495,68,2), - (753,525,68,2), - (20,13,69,3), - (22,14,69,3), - (169,111,70,3), - (208,137,70,3), - (460,310,70,3), - (598,399,70,3), - (600,400,70,3), - (639,424,70,3), - (590,395,71,3), - (689,461,71,2), - (807,579,71,2), - (783,555,72,2), - (484,325,74,3), - (447,302,75,3), - (65,43,76,3), - (210,138,76,3), - (269,180,77,3), - (288,193,77,3), - (431,291,78,3), - (241,159,79,3), - (57,39,80,3), - (661,439,80,3), - (711,483,80,2), - (741,513,80,2), - (178,117,81,3), - (366,246,81,3), - (643,427,81,3), - (671,445,81,3), - (40,26,82,3), - (686,458,82,2), - (29,19,83,3), - (776,548,83,2), - (238,157,84,3), - (508,340,84,3), - (630,419,84,3), - (336,226,85,3), - (564,379,85,3), - (125,83,86,3), - (569,382,86,3), - (576,387,87,3), - (580,389,87,3), - (231,153,88,3), - (503,337,88,3), - (632,420,88,3), - (781,553,88,2), - (61,41,89,3), - (436,295,89,3), - (474,319,89,3), - (665,441,89,3), - (737,509,89,2), - (767,539,89,2), - (319,215,90,3), - (156,103,91,3), - (469,316,91,3), - (571,383,91,3), - (594,397,91,3), - (16,10,92,3), - (304,203,92,3), - (464,313,92,3), - (687,459,92,2), - (372,250,93,3), - (390,263,93,3), - (622,414,93,3), - (69,46,94,3), - (154,102,94,3), - (339,228,94,3), - (779,551,95,2), - (162,107,96,3), - (619,412,96,3), - (798,570,96,2), - (381,256,97,3), - (596,398,97,3), - (81,54,98,3), - (110,74,99,3), - (378,254,99,3), - (489,329,99,3), - (554,373,99,3), - (704,476,99,2), - (705,477,99,2), - (706,478,99,2), - (707,479,99,2), - (708,480,99,2), - (394,265,100,3), - (429,290,100,3), - (517,346,100,3), - (75,50,101,3), - (583,391,101,3), - (614,409,101,3), - (657,436,101,3), - (729,501,102,2), - (759,531,102,2), - (709,481,103,2), - (805,577,105,2), - (728,500,106,2), - (758,530,106,2), - (806,578,107,2), - (796,568,109,2), - (727,499,110,2), - (757,529,110,2), - (733,505,113,2), - (763,535,113,2), - (797,569,115,2), - (801,573,118,2), - (720,492,122,2), - (750,522,122,2), - (795,567,124,2), - (819,591,130,2), - (718,490,134,2), - (748,520,134,2), - (734,506,137,2), - (764,536,137,2), - (719,491,139,2), - (749,521,139,2), - (794,566,141,2), - (731,503,142,2), - (761,533,142,2), - (787,559,143,2), - (788,560,145,2), - (775,547,147,2), - (817,589,148,2), - (818,590,155,2), - (803,575,158,2), - (444,301,163,2), - (446,302,163,2), - (448,303,163,2), - (449,304,163,2), - (450,305,163,2), - (452,306,163,2), - (454,307,163,2), - (456,308,163,2), - (458,309,163,2), - (459,310,163,2), - (461,311,163,2), - (462,312,163,2), - (463,313,163,2), - (465,314,163,2), - (467,315,163,2), - (468,316,163,2), - (470,317,163,2), - (472,318,163,2), - (473,319,163,2), - (475,320,163,2), - (477,321,163,2), - (478,322,163,2), - (480,323,163,2), - (481,324,163,2), - (483,325,163,2), - (485,326,163,2), - (486,327,163,2), - (487,328,163,2), - (488,329,163,2), - (490,330,163,2), - (492,331,163,2), - (494,332,163,2), - (496,333,163,2), - (498,334,163,2), - (499,335,163,2), - (500,336,163,2), - (502,337,163,2), - (504,338,163,2), - (506,339,163,2), - (507,340,163,2), - (509,341,163,2), - (510,342,163,2), - (511,343,163,2), - (513,344,163,2), - (515,345,163,2), - (516,346,163,2), - (518,347,163,2), - (519,348,163,2), - (520,349,163,2), - (522,350,163,2), - (524,351,163,2), - (526,352,163,2), - (527,353,163,2), - (529,354,163,2), - (530,355,163,2), - (531,356,163,2), - (532,357,163,2), - (533,358,163,2), - (535,359,163,2), - (537,360,163,2), - (538,361,163,2), - (539,362,163,2), - (540,363,163,2), - (541,364,163,2), - (542,365,163,2), - (543,366,163,2), - (545,367,163,2), - (547,368,163,2), - (548,369,163,2), - (549,370,163,2), - (551,371,163,2), - (552,372,163,2), - (553,373,163,2), - (555,374,163,2), - (557,375,163,2), - (559,376,163,2), - (561,377,163,2), - (562,378,163,2), - (563,379,163,2), - (565,380,163,2), - (566,381,163,2), - (568,382,163,2), - (570,383,163,2), - (572,384,163,2), - (573,385,163,2), - (574,386,163,2), - (575,387,163,2), - (577,388,163,2), - (579,389,163,2), - (581,390,163,2), - (582,391,163,2), - (584,392,163,2), - (586,393,163,2), - (587,394,163,2), - (589,395,163,2), - (591,396,163,2), - (593,397,163,2), - (595,398,163,2), - (597,399,163,2), - (599,400,163,2), - (601,401,163,2), - (603,402,163,2), - (604,403,163,2), - (606,404,163,2), - (607,405,163,2), - (608,406,163,2), - (610,407,163,2), - (612,408,163,2), - (613,409,163,2), - (615,410,163,2), - (617,411,163,2), - (618,412,163,2), - (620,413,163,2), - (621,414,163,2), - (623,415,163,2), - (624,416,163,2), - (626,417,163,2), - (627,418,163,2), - (629,419,163,2), - (631,420,163,2), - (633,421,163,2), - (634,422,163,2), - (636,423,163,2), - (638,424,163,2), - (640,425,163,2), - (641,426,163,2), - (642,427,163,2), - (644,428,163,2), - (645,429,163,2), - (647,430,163,2), - (649,431,163,2), - (650,432,163,2), - (652,433,163,2), - (653,434,163,2), - (654,435,163,2), - (656,436,163,2), - (658,437,163,2), - (659,438,163,2), - (660,439,163,2), - (662,440,163,2), - (664,441,163,2), - (666,442,163,2), - (667,443,163,2), - (668,444,163,2), - (670,445,163,2), - (672,446,163,2), - (674,447,163,2), - (675,448,163,2), - (677,449,163,2), - (678,450,163,2), - (716,488,166,2), - (746,518,166,2), - (812,584,168,2), - (773,545,169,2), - (721,493,171,2), - (751,523,171,2), - (813,585,173,2), - (738,510,177,2), - (768,540,177,2), - (820,592,178,2), - (804,576,179,2), - (785,557,180,2), - (790,562,184,2), - (713,485,185,2), - (743,515,185,2), - (1,1,186,2), - (2,2,186,2), - (4,3,186,2), - (5,4,186,2), - (7,5,186,2), - (9,6,186,2), - (11,7,186,2), - (12,8,186,2), - (14,9,186,2), - (15,10,186,2), - (17,11,186,2), - (18,12,186,2), - (19,13,186,2), - (21,14,186,2), - (23,15,186,2), - (24,16,186,2), - (26,17,186,2), - (27,18,186,2), - (28,19,186,2), - (30,20,186,2), - (31,21,186,2), - (33,22,186,2), - (35,23,186,2), - (36,24,186,2), - (38,25,186,2), - (39,26,186,2), - (41,27,186,2), - (43,28,186,2), - (44,29,186,2), - (45,30,186,2), - (46,31,186,2), - (47,32,186,2), - (49,33,186,2), - (51,34,186,2), - (52,35,186,2), - (53,36,186,2), - (54,37,186,2), - (55,38,186,2), - (56,39,186,2), - (58,40,186,2), - (60,41,186,2), - (62,42,186,2), - (64,43,186,2), - (66,44,186,2), - (67,45,186,2), - (68,46,186,2), - (70,47,186,2), - (71,48,186,2), - (73,49,186,2), - (74,50,186,2), - (76,51,186,2), - (78,52,186,2), - (79,53,186,2), - (80,54,186,2), - (82,55,186,2), - (83,56,186,2), - (84,57,186,2), - (86,58,186,2), - (87,59,186,2), - (88,60,186,2), - (89,61,186,2), - (91,62,186,2), - (93,63,186,2), - (95,64,186,2), - (96,65,186,2), - (97,66,186,2), - (99,67,186,2), - (100,68,186,2), - (102,69,186,2), - (103,70,186,2), - (105,71,186,2), - (106,72,186,2), - (108,73,186,2), - (109,74,186,2), - (111,75,186,2), - (113,76,186,2), - (115,77,186,2), - (116,78,186,2), - (117,79,186,2), - (119,80,186,2), - (120,81,186,2), - (122,82,186,2), - (124,83,186,2), - (126,84,186,2), - (127,85,186,2), - (128,86,186,2), - (129,87,186,2), - (131,88,186,2), - (133,89,186,2), - (135,90,186,2), - (137,91,186,2), - (138,92,186,2), - (139,93,186,2), - (141,94,186,2), - (143,95,186,2), - (144,96,186,2), - (146,97,186,2), - (148,98,186,2), - (149,99,186,2), - (151,100,186,2), - (152,101,186,2), - (153,102,186,2), - (155,103,186,2), - (157,104,186,2), - (158,105,186,2), - (159,106,186,2), - (161,107,186,2), - (163,108,186,2), - (165,109,186,2), - (166,110,186,2), - (168,111,186,2), - (170,112,186,2), - (172,113,186,2), - (174,114,186,2), - (175,115,186,2), - (176,116,186,2), - (177,117,186,2), - (179,118,186,2), - (180,119,186,2), - (182,120,186,2), - (183,121,186,2), - (184,122,186,2), - (185,123,186,2), - (187,124,186,2), - (189,125,186,2), - (191,126,186,2), - (192,127,186,2), - (194,128,186,2), - (195,129,186,2), - (197,130,186,2), - (198,131,186,2), - (199,132,186,2), - (200,133,186,2), - (202,134,186,2), - (204,135,186,2), - (206,136,186,2), - (207,137,186,2), - (209,138,186,2), - (211,139,186,2), - (212,140,186,2), - (214,141,186,2), - (215,142,186,2), - (217,143,186,2), - (218,144,186,2), - (219,145,186,2), - (220,146,186,2), - (221,147,186,2), - (223,148,186,2), - (224,149,186,2), - (225,150,186,2), - (814,586,186,2), - (786,558,188,2), - (739,511,197,2), - (769,541,197,2), - (726,498,199,2), - (756,528,199,2), - (816,588,200,2); + (742,507,39,2), + (772,537,39,2), + (96,65,40,3), + (493,324,40,3), + (142,94,41,3), + (231,152,41,3), + (601,397,41,3), + (798,563,41,2), + (17,11,43,3), + (117,79,43,3), + (527,348,43,3), + (697,462,43,2), + (102,69,44,3), + (359,238,44,3), + (350,232,45,3), + (429,283,45,3), + (389,257,46,3), + (734,499,46,2), + (764,529,46,2), + (39,26,47,3), + (261,172,47,3), + (570,376,47,3), + (645,424,47,3), + (32,21,48,3), + (372,245,48,3), + (677,445,48,3), + (340,226,49,3), + (391,258,49,3), + (674,443,49,3), + (795,560,49,2), + (539,355,50,3), + (586,387,51,3), + (111,75,52,3), + (224,148,52,3), + (280,186,52,3), + (787,552,52,2), + (138,92,53,3), + (568,375,53,3), + (635,418,53,3), + (814,579,53,2), + (213,141,54,3), + (282,187,54,3), + (362,240,54,3), + (730,495,54,2), + (760,525,54,2), + (256,169,55,3), + (501,329,55,3), + (579,383,55,3), + (19,12,56,3), + (44,30,56,3), + (115,78,56,3), + (133,89,56,3), + (454,299,56,3), + (482,317,56,3), + (506,332,56,3), + (529,349,56,3), + (663,436,56,3), + (802,567,56,2), + (599,396,57,3), + (746,511,57,2), + (776,541,57,2), + (788,553,58,2), + (236,155,59,3), + (245,162,59,3), + (613,405,59,3), + (700,465,59,2), + (701,466,59,2), + (702,467,59,2), + (703,468,59,2), + (704,469,59,2), + (705,470,59,2), + (706,471,59,2), + (707,472,59,2), + (708,473,59,2), + (709,474,59,2), + (710,475,59,2), + (108,73,60,3), + (119,80,60,3), + (300,199,60,3), + (522,344,60,3), + (642,422,60,3), + (668,440,60,3), + (733,498,60,2), + (763,528,60,2), + (790,555,60,2), + (723,488,61,2), + (753,518,61,2), + (784,549,61,2), + (199,132,62,3), + (294,196,62,3), + (535,352,62,3), + (583,385,62,3), + (159,104,63,3), + (284,188,63,3), + (503,330,64,3), + (596,394,64,3), + (654,430,64,3), + (290,193,65,3), + (679,446,65,3), + (796,561,65,2), + (22,14,66,3), + (456,300,66,3), + (476,313,67,3), + (740,505,67,2), + (770,535,67,2), + (822,587,67,2), + (125,84,68,3), + (813,578,68,2), + (298,198,69,3), + (368,243,69,3), + (92,62,70,3), + (155,102,70,3), + (318,211,70,3), + (825,590,70,2), + (185,122,71,3), + (696,461,71,2), + (807,572,71,2), + (149,99,72,3), + (395,260,72,3), + (566,374,72,3), + (14,9,73,3), + (197,131,73,3), + (325,217,73,3), + (400,263,73,3), + (439,290,73,3), + (622,410,73,3), + (791,556,73,2), + (175,116,74,3), + (466,307,74,3), + (496,326,74,3), + (778,543,74,2), + (177,117,75,3), + (801,566,75,2), + (278,185,76,3), + (441,291,76,3), + (552,365,76,3), + (210,139,77,3), + (346,230,77,3), + (520,343,77,3), + (379,250,78,3), + (632,416,78,3), + (823,588,78,2), + (204,135,79,3), + (806,571,79,2), + (65,44,80,3), + (127,85,80,3), + (433,286,80,3), + (416,275,81,3), + (541,356,82,3), + (693,458,82,2), + (728,493,82,2), + (758,523,82,2), + (170,113,83,3), + (249,164,84,3), + (468,308,84,3), + (273,181,85,3), + (352,233,85,3), + (620,409,85,3), + (80,55,86,3), + (296,197,86,3), + (737,502,86,2), + (767,532,86,2), + (221,146,87,3), + (418,276,87,3), + (564,373,87,3), + (793,558,87,2), + (29,19,88,3), + (348,231,88,3), + (487,320,88,3), + (508,333,88,3), + (172,114,89,3), + (327,218,89,3), + (355,235,89,3), + (545,359,89,3), + (12,8,90,3), + (615,406,90,3), + (5,3,91,3), + (397,261,91,3), + (603,398,91,3), + (129,86,92,3), + (316,210,92,3), + (364,241,92,3), + (452,298,92,3), + (618,408,92,3), + (694,459,92,2), + (48,33,93,3), + (229,151,93,3), + (474,312,93,3), + (87,59,94,3), + (157,103,96,3), + (386,255,96,3), + (817,582,96,2), + (10,7,98,3), + (63,43,98,3), + (193,128,98,3), + (329,219,98,3), + (50,34,99,3), + (147,98,99,3), + (562,372,99,3), + (711,476,99,2), + (712,477,99,2), + (713,478,99,2), + (714,479,99,2), + (715,480,99,2), + (202,134,100,3), + (218,144,100,3), + (342,227,100,3), + (717,482,100,2), + (747,512,100,2), + (789,554,100,2), + (53,36,101,3), + (819,584,101,2), + (779,544,102,2), + (716,481,103,2), + (816,581,104,2), + (810,575,107,2), + (1,1,110,2), + (3,2,110,2), + (4,3,110,2), + (6,4,110,2), + (7,5,110,2), + (8,6,110,2), + (9,7,110,2), + (11,8,110,2), + (13,9,110,2), + (15,10,110,2), + (16,11,110,2), + (18,12,110,2), + (20,13,110,2), + (21,14,110,2), + (23,15,110,2), + (25,16,110,2), + (26,17,110,2), + (27,18,110,2), + (28,19,110,2), + (30,20,110,2), + (31,21,110,2), + (33,22,110,2), + (34,23,110,2), + (35,24,110,2), + (36,25,110,2), + (38,26,110,2), + (40,27,110,2), + (41,28,110,2), + (42,29,110,2), + (43,30,110,2), + (45,31,110,2), + (46,32,110,2), + (47,33,110,2), + (49,34,110,2), + (51,35,110,2), + (52,36,110,2), + (54,37,110,2), + (55,38,110,2), + (56,39,110,2), + (57,40,110,2), + (59,41,110,2), + (60,42,110,2), + (62,43,110,2), + (64,44,110,2), + (66,45,110,2), + (67,46,110,2), + (69,47,110,2), + (70,48,110,2), + (71,49,110,2), + (72,50,110,2), + (74,51,110,2), + (75,52,110,2), + (76,53,110,2), + (78,54,110,2), + (79,55,110,2), + (81,56,110,2), + (83,57,110,2), + (84,58,110,2), + (86,59,110,2), + (88,60,110,2), + (89,61,110,2), + (91,62,110,2), + (93,63,110,2), + (94,64,110,2), + (95,65,110,2), + (97,66,110,2), + (99,67,110,2), + (100,68,110,2), + (101,69,110,2), + (103,70,110,2), + (104,71,110,2), + (106,72,110,2), + (107,73,110,2), + (109,74,110,2), + (110,75,110,2), + (112,76,110,2), + (113,77,110,2), + (114,78,110,2), + (116,79,110,2), + (118,80,110,2), + (120,81,110,2), + (122,82,110,2), + (123,83,110,2), + (124,84,110,2), + (126,85,110,2), + (128,86,110,2), + (130,87,110,2), + (131,88,110,2), + (132,89,110,2), + (134,90,110,2), + (136,91,110,2), + (137,92,110,2), + (139,93,110,2), + (141,94,110,2), + (143,95,110,2), + (144,96,110,2), + (145,97,110,2), + (146,98,110,2), + (148,99,110,2), + (150,100,110,2), + (152,101,110,2), + (154,102,110,2), + (156,103,110,2), + (158,104,110,2), + (160,105,110,2), + (162,106,110,2), + (163,107,110,2), + (164,108,110,2), + (165,109,110,2), + (166,110,110,2), + (167,111,110,2), + (168,112,110,2), + (169,113,110,2), + (171,114,110,2), + (173,115,110,2), + (174,116,110,2), + (176,117,110,2), + (178,118,110,2), + (179,119,110,2), + (181,120,110,2), + (182,121,110,2), + (184,122,110,2), + (186,123,110,2), + (188,124,110,2), + (189,125,110,2), + (190,126,110,2), + (191,127,110,2), + (192,128,110,2), + (194,129,110,2), + (195,130,110,2), + (196,131,110,2), + (198,132,110,2), + (200,133,110,2), + (201,134,110,2), + (203,135,110,2), + (205,136,110,2), + (206,137,110,2), + (207,138,110,2), + (209,139,110,2), + (211,140,110,2), + (212,141,110,2), + (214,142,110,2), + (215,143,110,2), + (217,144,110,2), + (219,145,110,2), + (220,146,110,2), + (222,147,110,2), + (223,148,110,2), + (225,149,110,2), + (227,150,110,2), + (725,490,111,2), + (755,520,111,2), + (827,592,111,2), + (732,497,115,2), + (762,527,115,2), + (727,492,117,2), + (757,522,117,2), + (809,574,133,2), + (821,586,134,2), + (719,484,135,2), + (749,514,135,2), + (782,547,137,2), + (792,557,139,2), + (744,509,140,2), + (774,539,140,2), + (780,545,140,2), + (741,506,142,2), + (771,536,142,2), + (826,591,150,2), + (799,564,151,2), + (781,546,153,2), + (736,501,155,2), + (766,531,155,2), + (800,565,157,2), + (804,569,162,2), + (718,483,168,2), + (748,513,168,2), + (726,491,170,2), + (756,521,170,2), + (783,548,171,2), + (818,583,174,2), + (820,585,176,2), + (457,301,177,2), + (458,302,177,2), + (459,303,177,2), + (461,304,177,2), + (462,305,177,2), + (463,306,177,2), + (465,307,177,2), + (467,308,177,2), + (469,309,177,2), + (470,310,177,2), + (472,311,177,2), + (473,312,177,2), + (475,313,177,2), + (477,314,177,2), + (479,315,177,2), + (480,316,177,2), + (481,317,177,2), + (483,318,177,2), + (484,319,177,2), + (486,320,177,2), + (488,321,177,2), + (489,322,177,2), + (490,323,177,2), + (492,324,177,2), + (494,325,177,2), + (495,326,177,2), + (497,327,177,2), + (498,328,177,2), + (500,329,177,2), + (502,330,177,2), + (504,331,177,2), + (505,332,177,2), + (507,333,177,2), + (509,334,177,2), + (511,335,177,2), + (512,336,177,2), + (513,337,177,2), + (514,338,177,2), + (515,339,177,2), + (516,340,177,2), + (517,341,177,2), + (518,342,177,2), + (519,343,177,2), + (521,344,177,2), + (523,345,177,2), + (524,346,177,2), + (525,347,177,2), + (526,348,177,2), + (528,349,177,2), + (530,350,177,2), + (532,351,177,2), + (534,352,177,2), + (536,353,177,2), + (537,354,177,2), + (538,355,177,2), + (540,356,177,2), + (542,357,177,2), + (543,358,177,2), + (544,359,177,2), + (546,360,177,2), + (547,361,177,2), + (548,362,177,2), + (549,363,177,2), + (550,364,177,2), + (551,365,177,2), + (553,366,177,2), + (554,367,177,2), + (555,368,177,2), + (557,369,177,2), + (559,370,177,2), + (560,371,177,2), + (561,372,177,2), + (563,373,177,2), + (565,374,177,2), + (567,375,177,2), + (569,376,177,2), + (571,377,177,2), + (572,378,177,2), + (574,379,177,2), + (575,380,177,2), + (576,381,177,2), + (577,382,177,2), + (578,383,177,2), + (580,384,177,2), + (582,385,177,2), + (584,386,177,2), + (585,387,177,2), + (587,388,177,2), + (589,389,177,2), + (590,390,177,2), + (592,391,177,2), + (593,392,177,2), + (594,393,177,2), + (595,394,177,2), + (597,395,177,2), + (598,396,177,2), + (600,397,177,2), + (602,398,177,2), + (604,399,177,2), + (605,400,177,2), + (606,401,177,2), + (608,402,177,2), + (610,403,177,2), + (611,404,177,2), + (612,405,177,2), + (614,406,177,2), + (616,407,177,2), + (617,408,177,2), + (619,409,177,2), + (621,410,177,2), + (623,411,177,2), + (625,412,177,2), + (626,413,177,2), + (628,414,177,2), + (629,415,177,2), + (631,416,177,2), + (633,417,177,2), + (634,418,177,2), + (636,419,177,2), + (638,420,177,2), + (640,421,177,2), + (641,422,177,2), + (643,423,177,2), + (644,424,177,2), + (646,425,177,2), + (648,426,177,2), + (649,427,177,2), + (651,428,177,2), + (652,429,177,2), + (653,430,177,2), + (655,431,177,2), + (656,432,177,2), + (658,433,177,2), + (659,434,177,2), + (661,435,177,2), + (662,436,177,2), + (664,437,177,2), + (665,438,177,2), + (666,439,177,2), + (667,440,177,2), + (669,441,177,2), + (671,442,177,2), + (673,443,177,2), + (675,444,177,2), + (676,445,177,2), + (678,446,177,2), + (680,447,177,2), + (682,448,177,2), + (683,449,177,2), + (684,450,177,2), + (815,580,177,2), + (739,504,178,2), + (769,534,178,2), + (720,485,182,2), + (750,515,182,2), + (808,573,183,2), + (735,500,189,2), + (765,530,189,2), + (797,562,190,2), + (729,494,191,2), + (759,524,191,2), + (824,589,191,2), + (731,496,192,2), + (761,526,192,2), + (786,551,196,2), + (803,568,201,2); /*!40000 ALTER TABLE `civicrm_activity_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -1642,192 +1649,190 @@ UNLOCK TABLES; LOCK TABLES `civicrm_address` WRITE; /*!40000 ALTER TABLE `civicrm_address` DISABLE KEYS */; INSERT INTO `civicrm_address` (`id`, `contact_id`, `location_type_id`, `is_primary`, `is_billing`, `street_address`, `street_number`, `street_number_suffix`, `street_number_predirectional`, `street_name`, `street_type`, `street_number_postdirectional`, `street_unit`, `supplemental_address_1`, `supplemental_address_2`, `supplemental_address_3`, `city`, `county_id`, `state_province_id`, `postal_code_suffix`, `postal_code`, `usps_adc`, `country_id`, `geo_code_1`, `geo_code_2`, `manual_geo_code`, `timezone`, `name`, `master_id`) VALUES - (1,181,1,1,0,'930L El Camino Blvd N',930,'L',NULL,'El Camino','Blvd','N',NULL,NULL,NULL,NULL,'Castroville',1,1004,NULL,'95012',NULL,1228,36.768856,-121.75105,0,NULL,NULL,NULL), - (2,163,1,1,0,'187I Bay Dr E',187,'I',NULL,'Bay','Dr','E',NULL,NULL,NULL,NULL,'Honolulu',1,1010,NULL,'96841',NULL,1228,24.859832,-168.021815,0,NULL,NULL,NULL), - (3,197,1,1,0,'882M Second Ln SE',882,'M',NULL,'Second','Ln','SE',NULL,NULL,NULL,NULL,'Williams',1,1013,NULL,'47470',NULL,1228,38.845709,-86.68869,0,NULL,NULL,NULL), - (4,94,1,1,0,'80K Lincoln St N',80,'K',NULL,'Lincoln','St','N',NULL,NULL,NULL,NULL,'San Diego',1,1004,NULL,'92175',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), - (5,22,1,1,0,'96E Second Ave SW',96,'E',NULL,'Second','Ave','SW',NULL,NULL,NULL,NULL,'Vancouver',1,1046,NULL,'98664',NULL,1228,45.62104,-122.57947,0,NULL,NULL,NULL), - (6,67,1,1,0,'452M Maple Way NE',452,'M',NULL,'Maple','Way','NE',NULL,NULL,NULL,NULL,'Carson City',1,1021,NULL,'48811',NULL,1228,43.184647,-84.84871,0,NULL,NULL,NULL), - (7,85,1,1,0,'187H Van Ness Dr W',187,'H',NULL,'Van Ness','Dr','W',NULL,NULL,NULL,NULL,'Riverton',1,1006,NULL,'06065',NULL,1228,41.961127,-73.01859,0,NULL,NULL,NULL), - (8,40,1,1,0,'204V Caulder St SW',204,'V',NULL,'Caulder','St','SW',NULL,NULL,NULL,NULL,'Tyler',1,1042,NULL,'75709',NULL,1228,32.31265,-95.39191,0,NULL,NULL,NULL), - (9,8,1,1,0,'430N Lincoln Blvd NW',430,'N',NULL,'Lincoln','Blvd','NW',NULL,NULL,NULL,NULL,'Everett',1,1020,NULL,'02149',NULL,1228,42.409916,-71.0522,0,NULL,NULL,NULL), - (10,11,1,1,0,'825C Bay Rd E',825,'C',NULL,'Bay','Rd','E',NULL,NULL,NULL,NULL,'Ireland',1,1013,NULL,'47545',NULL,1228,38.413906,-87.0006,0,NULL,NULL,NULL), - (11,149,1,1,0,'64W Pine Ln N',64,'W',NULL,'Pine','Ln','N',NULL,NULL,NULL,NULL,'Sterling Heights',1,1021,NULL,'48312',NULL,1228,42.558151,-83.00446,0,NULL,NULL,NULL), - (12,126,1,1,0,'943H Martin Luther King Dr E',943,'H',NULL,'Martin Luther King','Dr','E',NULL,NULL,NULL,NULL,'Medora',1,1012,NULL,'62003',NULL,1228,39.177478,-90.142329,0,NULL,NULL,NULL), - (13,7,1,1,0,'561P El Camino Dr N',561,'P',NULL,'El Camino','Dr','N',NULL,NULL,NULL,NULL,'Spiceland',1,1013,NULL,'47385',NULL,1228,39.832904,-85.44117,0,NULL,NULL,NULL), - (14,120,1,1,0,'748T Main Pl SE',748,'T',NULL,'Main','Pl','SE',NULL,NULL,NULL,NULL,'Elkhorn',1,1047,NULL,'24831',NULL,1228,37.385757,-81.41415,0,NULL,NULL,NULL), - (15,25,1,1,0,'652O Green Pl NW',652,'O',NULL,'Green','Pl','NW',NULL,NULL,NULL,NULL,'Alvaton',1,1016,NULL,'42122',NULL,1228,36.86316,-86.35202,0,NULL,NULL,NULL), - (16,143,1,1,0,'282X Beech Ln SE',282,'X',NULL,'Beech','Ln','SE',NULL,NULL,NULL,NULL,'Canton',1,1034,NULL,'44709',NULL,1228,40.836508,-81.38548,0,NULL,NULL,NULL), - (17,82,1,1,0,'201A States Ln E',201,'A',NULL,'States','Ln','E',NULL,NULL,NULL,NULL,'Cape Girardeau',1,1024,NULL,'63702',NULL,1228,37.350624,-89.509405,0,NULL,NULL,NULL), - (18,166,1,1,0,'918R Maple Ln S',918,'R',NULL,'Maple','Ln','S',NULL,NULL,NULL,NULL,'Alcoa',1,1041,NULL,'37701',NULL,1228,35.784708,-83.97956,0,NULL,NULL,NULL), - (19,36,1,1,0,'273I Jackson Path E',273,'I',NULL,'Jackson','Path','E',NULL,NULL,NULL,NULL,'East Claridon',1,1034,NULL,'44033',NULL,1228,41.53335,-81.111175,0,NULL,NULL,NULL), - (20,176,1,1,0,'268V Pine Path E',268,'V',NULL,'Pine','Path','E',NULL,NULL,NULL,NULL,'Washington',1,1050,NULL,'20534',NULL,1228,38.894075,-77.01254,0,NULL,NULL,NULL), - (21,27,1,1,0,'26R Van Ness St E',26,'R',NULL,'Van Ness','St','E',NULL,NULL,NULL,NULL,'De Soto',1,1015,NULL,'66018',NULL,1228,38.961396,-94.97681,0,NULL,NULL,NULL), - (22,170,1,1,0,'579U States Ave NE',579,'U',NULL,'States','Ave','NE',NULL,NULL,NULL,NULL,'Witten',1,1040,NULL,'57584',NULL,1228,43.528885,-100.09039,0,NULL,NULL,NULL), - (23,196,1,1,0,'440V Second Dr W',440,'V',NULL,'Second','Dr','W',NULL,NULL,NULL,NULL,'Churchs Ferry',1,1033,NULL,'58325',NULL,1228,48.272135,-99.16654,0,NULL,NULL,NULL), - (24,6,1,1,0,'774Z Van Ness Rd E',774,'Z',NULL,'Van Ness','Rd','E',NULL,NULL,NULL,NULL,'Lutsen',1,1022,NULL,'55612',NULL,1228,47.757804,-90.63836,0,NULL,NULL,NULL), - (25,3,1,1,0,'195V Woodbridge Ln W',195,'V',NULL,'Woodbridge','Ln','W',NULL,NULL,NULL,NULL,'Pacific Grove',1,1004,NULL,'93950',NULL,1228,36.619065,-121.92102,0,NULL,NULL,NULL), - (26,2,1,1,0,'283Q Bay St N',283,'Q',NULL,'Bay','St','N',NULL,NULL,NULL,NULL,'Alleyton',1,1042,NULL,'78935',NULL,1228,29.698797,-96.45594,0,NULL,NULL,NULL), - (27,192,1,1,0,'91H Martin Luther King Ln SW',91,'H',NULL,'Martin Luther King','Ln','SW',NULL,NULL,NULL,NULL,'Gloster',1,1017,NULL,'71030',NULL,1228,32.191147,-93.8191,0,NULL,NULL,NULL), - (28,9,1,1,0,'161H Lincoln Ave NE',161,'H',NULL,'Lincoln','Ave','NE',NULL,NULL,NULL,NULL,'Idamay',1,1047,NULL,'26576',NULL,1228,39.494727,-80.25872,0,NULL,NULL,NULL), - (29,173,1,1,0,'74C Maple Blvd SW',74,'C',NULL,'Maple','Blvd','SW',NULL,NULL,NULL,NULL,'East Waterboro',1,1018,NULL,'04030',NULL,1228,43.585861,-70.6793,0,NULL,NULL,NULL), - (30,199,1,1,0,'506C El Camino Pl SW',506,'C',NULL,'El Camino','Pl','SW',NULL,NULL,NULL,NULL,'Vermont',1,1012,NULL,'61484',NULL,1228,40.292388,-90.42833,0,NULL,NULL,NULL), - (31,131,1,1,0,'273K Lincoln Way SW',273,'K',NULL,'Lincoln','Way','SW',NULL,NULL,NULL,NULL,'Rock Island',1,1042,NULL,'77470',NULL,1228,29.520292,-96.57348,0,NULL,NULL,NULL), - (32,63,1,1,0,'473D Jackson Rd E',473,'D',NULL,'Jackson','Rd','E',NULL,NULL,NULL,NULL,'Albany',1,1031,NULL,'12262',NULL,1228,42.614852,-73.970812,0,NULL,NULL,NULL), - (33,29,1,1,0,'179R Dowlen St S',179,'R',NULL,'Dowlen','St','S',NULL,NULL,NULL,NULL,'Lees Summit',1,1024,NULL,'64081',NULL,1228,38.908657,-94.40285,0,NULL,NULL,NULL), - (34,182,1,1,0,'317F Van Ness Ln W',317,'F',NULL,'Van Ness','Ln','W',NULL,NULL,NULL,NULL,'Orchard Park',1,1031,NULL,'14127',NULL,1228,42.759917,-78.75294,0,NULL,NULL,NULL), - (35,118,1,1,0,'421L Dowlen Ln N',421,'L',NULL,'Dowlen','Ln','N',NULL,NULL,NULL,NULL,'Meridian',1,1023,NULL,'39305',NULL,1228,32.439945,-88.70918,0,NULL,NULL,NULL), - (36,57,1,1,0,'861X Bay St SW',861,'X',NULL,'Bay','St','SW',NULL,NULL,NULL,NULL,'State Park',1,1039,NULL,'29147',NULL,1228,34.005992,-80.970766,0,NULL,NULL,NULL), - (37,162,1,1,0,'463P States Ave E',463,'P',NULL,'States','Ave','E',NULL,NULL,NULL,NULL,'Morrow',1,1034,NULL,'45152',NULL,1228,39.350319,-84.11606,0,NULL,NULL,NULL), - (38,16,1,1,0,'698F States Pl SE',698,'F',NULL,'States','Pl','SE',NULL,NULL,NULL,NULL,'Maryville',1,1012,NULL,'62062',NULL,1228,38.726548,-89.9572,0,NULL,NULL,NULL), - (39,60,1,1,0,'868Q Caulder Dr SE',868,'Q',NULL,'Caulder','Dr','SE',NULL,NULL,NULL,NULL,'Hammond',1,1031,NULL,'13646',NULL,1228,44.444242,-75.69227,0,NULL,NULL,NULL), - (40,64,1,1,0,'490I Cadell Pl S',490,'I',NULL,'Cadell','Pl','S',NULL,NULL,NULL,NULL,'Garfield',1,1029,NULL,'07026',NULL,1228,40.879858,-74.10807,0,NULL,NULL,NULL), - (41,112,1,1,0,'873Q El Camino Ln N',873,'Q',NULL,'El Camino','Ln','N',NULL,NULL,NULL,NULL,'Schwertner',1,1042,NULL,'76573',NULL,1228,30.805512,-97.470456,0,NULL,NULL,NULL), - (42,4,1,1,0,'856M Lincoln Ave SW',856,'M',NULL,'Lincoln','Ave','SW',NULL,NULL,NULL,NULL,'Lake Villa',1,1012,NULL,'60046',NULL,1228,42.410687,-88.05462,0,NULL,NULL,NULL), - (43,153,1,1,0,'802E Lincoln Pl NW',802,'E',NULL,'Lincoln','Pl','NW',NULL,NULL,NULL,NULL,'Highfalls',1,1032,NULL,'27259',NULL,1228,35.492077,-79.479016,0,NULL,NULL,NULL), - (44,19,1,1,0,'584X Maple Way W',584,'X',NULL,'Maple','Way','W',NULL,NULL,NULL,NULL,'Edison',1,1029,NULL,'08820',NULL,1228,40.575503,-74.35781,0,NULL,NULL,NULL), - (45,134,1,1,0,'415E States Blvd W',415,'E',NULL,'States','Blvd','W',NULL,NULL,NULL,NULL,'Mico',1,1042,NULL,'78056',NULL,1228,29.54825,-98.90353,0,NULL,NULL,NULL), - (46,105,1,1,0,'247R Jackson Blvd S',247,'R',NULL,'Jackson','Blvd','S',NULL,NULL,NULL,NULL,'Chapel Hill',1,1032,NULL,'27515',NULL,1228,36.05251,-79.107692,0,NULL,NULL,NULL), - (47,76,1,1,0,'682O El Camino Ave SW',682,'O',NULL,'El Camino','Ave','SW',NULL,NULL,NULL,NULL,'Stamford',1,1006,NULL,'06927',NULL,1228,41.308873,-73.363661,0,NULL,NULL,NULL), - (48,178,1,1,0,'667C Bay Ave NW',667,'C',NULL,'Bay','Ave','NW',NULL,NULL,NULL,NULL,'Newport',1,1016,NULL,'41072',NULL,1228,38.963761,-84.368926,0,NULL,NULL,NULL), - (49,24,1,1,0,'255W Main Rd SW',255,'W',NULL,'Main','Rd','SW',NULL,NULL,NULL,NULL,'Jeddo',1,1021,NULL,'48032',NULL,1228,43.125531,-82.59617,0,NULL,NULL,NULL), - (50,37,1,1,0,'528H Pine Rd NW',528,'H',NULL,'Pine','Rd','NW',NULL,NULL,NULL,NULL,'Fisher',1,1003,NULL,'72429',NULL,1228,35.49293,-90.95873,0,NULL,NULL,NULL), - (51,156,1,1,0,'882Z Pine Ave NW',882,'Z',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Lenoir City',1,1041,NULL,'37772',NULL,1228,35.800329,-84.23281,0,NULL,NULL,NULL), - (52,172,1,1,0,'475X Woodbridge Blvd W',475,'X',NULL,'Woodbridge','Blvd','W',NULL,NULL,NULL,NULL,'Sutherlin',1,1036,NULL,'97479',NULL,1228,43.397697,-123.27314,0,NULL,NULL,NULL), - (53,70,1,1,0,'127O States Ave NE',127,'O',NULL,'States','Ave','NE',NULL,NULL,NULL,NULL,'Warner Robins',1,1009,NULL,'31098',NULL,1228,32.614742,-83.59829,0,NULL,NULL,NULL), - (54,90,1,1,0,'221P Main Ln S',221,'P',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Odessa',1,1042,NULL,'79761',NULL,1228,31.854455,-102.35906,0,NULL,NULL,NULL), - (55,124,1,1,0,'480L States Ln SW',480,'L',NULL,'States','Ln','SW',NULL,NULL,NULL,NULL,'Mooreville',1,1023,NULL,'38857',NULL,1228,34.280996,-88.57745,0,NULL,NULL,NULL), - (56,165,1,1,0,'420X Martin Luther King Ave E',420,'X',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Pettigrew',1,1003,NULL,'72752',NULL,1228,35.824911,-93.56071,0,NULL,NULL,NULL), - (57,191,1,1,0,'567G Van Ness Ave S',567,'G',NULL,'Van Ness','Ave','S',NULL,NULL,NULL,NULL,'Glen Allen',1,1000,NULL,'35559',NULL,1228,33.909001,-87.73186,0,NULL,NULL,NULL), - (58,179,1,1,0,'671Q Main Ln NW',671,'Q',NULL,'Main','Ln','NW',NULL,NULL,NULL,NULL,'Saint Cloud',1,1008,NULL,'34771',NULL,1228,28.271939,-81.19645,0,NULL,NULL,NULL), - (59,42,1,1,0,'683W Caulder Pl NW',683,'W',NULL,'Caulder','Pl','NW',NULL,NULL,NULL,NULL,'Caldwell',1,1011,NULL,'83607',NULL,1228,43.675651,-116.73825,0,NULL,NULL,NULL), - (60,20,1,1,0,'92Y Maple Pl NE',92,'Y',NULL,'Maple','Pl','NE',NULL,NULL,NULL,NULL,'Laquey',1,1024,NULL,'65534',NULL,1228,37.689335,-92.28363,0,NULL,NULL,NULL), - (61,184,1,1,0,'18L Northpoint St E',18,'L',NULL,'Northpoint','St','E',NULL,NULL,NULL,NULL,'Killeen',1,1042,NULL,'76540',NULL,1228,31.085833,-97.357099,0,NULL,NULL,NULL), - (62,180,1,1,0,'41F College St W',41,'F',NULL,'College','St','W',NULL,NULL,NULL,NULL,'Norway',1,1014,NULL,'52318',NULL,1228,41.900443,-91.90704,0,NULL,NULL,NULL), - (63,127,1,1,0,'384W Main Ln S',384,'W',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Stronghurst',1,1012,NULL,'61480',NULL,1228,40.727428,-90.91347,0,NULL,NULL,NULL), - (64,41,1,1,0,'460S States Blvd W',460,'S',NULL,'States','Blvd','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27656',NULL,1228,35.797692,-78.625265,0,NULL,NULL,NULL), - (65,141,1,1,0,'950Y Maple Path SE',950,'Y',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Los Angeles',1,1004,NULL,'90022',NULL,1228,34.023662,-118.15581,0,NULL,NULL,NULL), - (66,47,1,1,0,'624Z Second Blvd SW',624,'Z',NULL,'Second','Blvd','SW',NULL,NULL,NULL,NULL,'Pineland',1,1039,NULL,'29934',NULL,1228,32.602042,-81.12453,0,NULL,NULL,NULL), - (67,169,1,1,0,'837B Second Blvd NW',837,'B',NULL,'Second','Blvd','NW',NULL,NULL,NULL,NULL,'Athens',1,1009,NULL,'30606',NULL,1228,33.945619,-83.41732,0,NULL,NULL,NULL), - (68,136,1,1,0,'443J Martin Luther King Ln SE',443,'J',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Nevada',1,1014,NULL,'50201',NULL,1228,42.026021,-93.4484,0,NULL,NULL,NULL), - (69,73,1,1,0,'758N Northpoint Rd SW',758,'N',NULL,'Northpoint','Rd','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1000,NULL,'36274',NULL,1228,33.159848,-85.36865,0,NULL,NULL,NULL), - (70,135,1,1,0,'490Q Caulder Dr W',490,'Q',NULL,'Caulder','Dr','W',NULL,NULL,NULL,NULL,'Issue',1,1019,NULL,'20645',NULL,1228,38.30126,-76.91539,0,NULL,NULL,NULL), - (71,129,3,1,0,'425Y Lincoln Rd S',425,'Y',NULL,'Lincoln','Rd','S',NULL,'Disbursements',NULL,NULL,'Cincinnati',1,1034,NULL,'45271',NULL,1228,39.166759,-84.53822,0,NULL,NULL,NULL), - (72,13,2,1,0,'425Y Lincoln Rd S',425,'Y',NULL,'Lincoln','Rd','S',NULL,'Disbursements',NULL,NULL,'Cincinnati',1,1034,NULL,'45271',NULL,1228,39.166759,-84.53822,0,NULL,NULL,71), - (73,193,3,1,0,'867I Northpoint Blvd NW',867,'I',NULL,'Northpoint','Blvd','NW',NULL,'Payables Dept.',NULL,NULL,'Covington',1,1017,NULL,'70433',NULL,1228,30.470793,-90.10491,0,NULL,NULL,NULL), - (74,25,2,0,0,'867I Northpoint Blvd NW',867,'I',NULL,'Northpoint','Blvd','NW',NULL,'Payables Dept.',NULL,NULL,'Covington',1,1017,NULL,'70433',NULL,1228,30.470793,-90.10491,0,NULL,NULL,73), - (75,198,3,1,0,'368K Jackson Rd W',368,'K',NULL,'Jackson','Rd','W',NULL,'Donor Relations',NULL,NULL,'Teutopolis',1,1012,NULL,'62467',NULL,1228,39.125573,-88.45609,0,NULL,NULL,NULL), - (76,114,3,1,0,'811E Van Ness Dr NW',811,'E',NULL,'Van Ness','Dr','NW',NULL,'Disbursements',NULL,NULL,'Laplace',1,1017,NULL,'70000',NULL,1228,30.08677,-90.513522,0,NULL,NULL,NULL), - (77,150,2,1,0,'811E Van Ness Dr NW',811,'E',NULL,'Van Ness','Dr','NW',NULL,'Disbursements',NULL,NULL,'Laplace',1,1017,NULL,'70000',NULL,1228,30.08677,-90.513522,0,NULL,NULL,76), - (78,128,3,1,0,'777P States Path E',777,'P',NULL,'States','Path','E',NULL,'Receiving',NULL,NULL,'San Diego',1,1004,NULL,'92147',NULL,1228,33.016928,-116.846046,0,NULL,NULL,NULL), - (79,159,3,1,0,'270E Martin Luther King Dr E',270,'E',NULL,'Martin Luther King','Dr','E',NULL,'Receiving',NULL,NULL,'Stockton Springs',1,1018,NULL,'04981',NULL,1228,44.499082,-68.85667,0,NULL,NULL,NULL), - (80,132,2,1,0,'270E Martin Luther King Dr E',270,'E',NULL,'Martin Luther King','Dr','E',NULL,'Receiving',NULL,NULL,'Stockton Springs',1,1018,NULL,'04981',NULL,1228,44.499082,-68.85667,0,NULL,NULL,79), - (81,155,3,1,0,'593V Van Ness St S',593,'V',NULL,'Van Ness','St','S',NULL,'Attn: Accounting',NULL,NULL,'Maple Plain',1,1022,NULL,'55571',NULL,1228,45.015914,-93.47188,0,NULL,NULL,NULL), - (82,88,2,1,0,'593V Van Ness St S',593,'V',NULL,'Van Ness','St','S',NULL,'Attn: Accounting',NULL,NULL,'Maple Plain',1,1022,NULL,'55571',NULL,1228,45.015914,-93.47188,0,NULL,NULL,81), - (83,77,3,1,0,'910Q Caulder Path N',910,'Q',NULL,'Caulder','Path','N',NULL,'Donor Relations',NULL,NULL,'Warsaw',1,1034,NULL,'43844',NULL,1228,40.33503,-82.04314,0,NULL,NULL,NULL), - (84,108,3,1,0,'378E Lincoln Dr SE',378,'E',NULL,'Lincoln','Dr','SE',NULL,'Subscriptions Dept',NULL,NULL,'Waunakee',1,1048,NULL,'53597',NULL,1228,43.182873,-89.45408,0,NULL,NULL,NULL), - (85,185,2,1,0,'378E Lincoln Dr SE',378,'E',NULL,'Lincoln','Dr','SE',NULL,'Subscriptions Dept',NULL,NULL,'Waunakee',1,1048,NULL,'53597',NULL,1228,43.182873,-89.45408,0,NULL,NULL,84), - (86,72,3,1,0,'371D Jackson Ln SE',371,'D',NULL,'Jackson','Ln','SE',NULL,'Urgent',NULL,NULL,'Campbellsville',1,1016,NULL,'42719',NULL,1228,37.337936,-85.330374,0,NULL,NULL,NULL), - (87,2,2,0,0,'371D Jackson Ln SE',371,'D',NULL,'Jackson','Ln','SE',NULL,'Urgent',NULL,NULL,'Campbellsville',1,1016,NULL,'42719',NULL,1228,37.337936,-85.330374,0,NULL,NULL,86), - (88,66,3,1,0,'288I Cadell Ave SE',288,'I',NULL,'Cadell','Ave','SE',NULL,'Cuffe Parade',NULL,NULL,'Tucson',1,1002,NULL,'85703',NULL,1228,31.970131,-111.890713,0,NULL,NULL,NULL), - (89,19,2,0,0,'288I Cadell Ave SE',288,'I',NULL,'Cadell','Ave','SE',NULL,'Cuffe Parade',NULL,NULL,'Tucson',1,1002,NULL,'85703',NULL,1228,31.970131,-111.890713,0,NULL,NULL,88), - (90,84,3,1,0,'187X Martin Luther King Pl W',187,'X',NULL,'Martin Luther King','Pl','W',NULL,'c/o OPDC',NULL,NULL,'Fairbury',1,1012,NULL,'61739',NULL,1228,40.741158,-88.51546,0,NULL,NULL,NULL), - (91,186,2,1,0,'187X Martin Luther King Pl W',187,'X',NULL,'Martin Luther King','Pl','W',NULL,'c/o OPDC',NULL,NULL,'Fairbury',1,1012,NULL,'61739',NULL,1228,40.741158,-88.51546,0,NULL,NULL,90), - (92,35,3,1,0,'987Z Pine Path S',987,'Z',NULL,'Pine','Path','S',NULL,'Receiving',NULL,NULL,'Greeneville',1,1041,NULL,'37744',NULL,1228,36.182289,-82.73948,0,NULL,NULL,NULL), - (93,45,3,1,0,'694S Northpoint Blvd E',694,'S',NULL,'Northpoint','Blvd','E',NULL,'Subscriptions Dept',NULL,NULL,'Turkey Creek',1,1017,NULL,'70585',NULL,1228,30.871853,-92.40532,0,NULL,NULL,NULL), - (94,110,2,1,0,'694S Northpoint Blvd E',694,'S',NULL,'Northpoint','Blvd','E',NULL,'Subscriptions Dept',NULL,NULL,'Turkey Creek',1,1017,NULL,'70585',NULL,1228,30.871853,-92.40532,0,NULL,NULL,93), - (95,17,3,1,0,'404H Pine Pl SW',404,'H',NULL,'Pine','Pl','SW',NULL,'Disbursements',NULL,NULL,'Weyauwega',1,1048,NULL,'54983',NULL,1228,44.319005,-88.9404,0,NULL,NULL,NULL), - (96,167,2,1,0,'404H Pine Pl SW',404,'H',NULL,'Pine','Pl','SW',NULL,'Disbursements',NULL,NULL,'Weyauwega',1,1048,NULL,'54983',NULL,1228,44.319005,-88.9404,0,NULL,NULL,95), - (97,119,3,1,0,'546D Dowlen Path NW',546,'D',NULL,'Dowlen','Path','NW',NULL,'Attn: Accounting',NULL,NULL,'Haviland',1,1034,NULL,'45851',NULL,1228,41.030911,-84.60213,0,NULL,NULL,NULL), - (98,162,2,0,0,'546D Dowlen Path NW',546,'D',NULL,'Dowlen','Path','NW',NULL,'Attn: Accounting',NULL,NULL,'Haviland',1,1034,NULL,'45851',NULL,1228,41.030911,-84.60213,0,NULL,NULL,97), - (99,92,3,1,0,'233B Lincoln Ln NW',233,'B',NULL,'Lincoln','Ln','NW',NULL,'Community Relations',NULL,NULL,'New Haven',1,1006,NULL,'06502',NULL,1228,41.365709,-72.927507,0,NULL,NULL,NULL), - (100,168,3,1,0,'809Q Bay Ave E',809,'Q',NULL,'Bay','Ave','E',NULL,'Receiving',NULL,NULL,'Parowan',1,1043,NULL,'84761',NULL,1228,37.886163,-112.83945,0,NULL,NULL,NULL), - (101,79,3,1,0,'960O Second Blvd N',960,'O',NULL,'Second','Blvd','N',NULL,'Mailstop 101',NULL,NULL,'Plummer',1,1011,NULL,'83851',NULL,1228,47.322203,-116.88379,0,NULL,NULL,NULL), - (102,145,3,1,0,'693L Woodbridge Way NE',693,'L',NULL,'Woodbridge','Way','NE',NULL,'Attn: Development',NULL,NULL,'Bradley',1,1008,NULL,'33835',NULL,1228,27.710056,-81.95196,0,NULL,NULL,NULL), - (103,189,2,1,0,'693L Woodbridge Way NE',693,'L',NULL,'Woodbridge','Way','NE',NULL,'Attn: Development',NULL,NULL,'Bradley',1,1008,NULL,'33835',NULL,1228,27.710056,-81.95196,0,NULL,NULL,102), - (104,98,1,1,0,'882Z Pine Ave NW',882,'Z',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Lenoir City',1,1041,NULL,'37772',NULL,1228,35.800329,-84.23281,0,NULL,NULL,51), - (105,187,1,1,0,'882Z Pine Ave NW',882,'Z',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Lenoir City',1,1041,NULL,'37772',NULL,1228,35.800329,-84.23281,0,NULL,NULL,51), - (106,75,1,1,0,'882Z Pine Ave NW',882,'Z',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Lenoir City',1,1041,NULL,'37772',NULL,1228,35.800329,-84.23281,0,NULL,NULL,51), - (107,37,1,0,0,'882Z Pine Ave NW',882,'Z',NULL,'Pine','Ave','NW',NULL,NULL,NULL,NULL,'Lenoir City',1,1041,NULL,'37772',NULL,1228,35.800329,-84.23281,0,NULL,NULL,51), - (108,125,1,1,0,'475X Woodbridge Blvd W',475,'X',NULL,'Woodbridge','Blvd','W',NULL,NULL,NULL,NULL,'Sutherlin',1,1036,NULL,'97479',NULL,1228,43.397697,-123.27314,0,NULL,NULL,52), - (109,147,1,1,0,'475X Woodbridge Blvd W',475,'X',NULL,'Woodbridge','Blvd','W',NULL,NULL,NULL,NULL,'Sutherlin',1,1036,NULL,'97479',NULL,1228,43.397697,-123.27314,0,NULL,NULL,52), - (110,26,1,1,0,'475X Woodbridge Blvd W',475,'X',NULL,'Woodbridge','Blvd','W',NULL,NULL,NULL,NULL,'Sutherlin',1,1036,NULL,'97479',NULL,1228,43.397697,-123.27314,0,NULL,NULL,52), - (111,158,1,1,0,'475X Woodbridge Blvd W',475,'X',NULL,'Woodbridge','Blvd','W',NULL,NULL,NULL,NULL,'Sutherlin',1,1036,NULL,'97479',NULL,1228,43.397697,-123.27314,0,NULL,NULL,52), - (112,175,1,1,0,'127O States Ave NE',127,'O',NULL,'States','Ave','NE',NULL,NULL,NULL,NULL,'Warner Robins',1,1009,NULL,'31098',NULL,1228,32.614742,-83.59829,0,NULL,NULL,53), - (113,116,1,1,0,'127O States Ave NE',127,'O',NULL,'States','Ave','NE',NULL,NULL,NULL,NULL,'Warner Robins',1,1009,NULL,'31098',NULL,1228,32.614742,-83.59829,0,NULL,NULL,53), - (114,13,1,0,0,'127O States Ave NE',127,'O',NULL,'States','Ave','NE',NULL,NULL,NULL,NULL,'Warner Robins',1,1009,NULL,'31098',NULL,1228,32.614742,-83.59829,0,NULL,NULL,53), - (115,137,1,1,0,'169C Woodbridge Ave E',169,'C',NULL,'Woodbridge','Ave','E',NULL,NULL,NULL,NULL,'Joes',1,1005,NULL,'80822',NULL,1228,39.633953,-102.69795,0,NULL,NULL,NULL), - (116,157,1,1,0,'221P Main Ln S',221,'P',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Odessa',1,1042,NULL,'79761',NULL,1228,31.854455,-102.35906,0,NULL,NULL,54), - (117,171,1,1,0,'221P Main Ln S',221,'P',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Odessa',1,1042,NULL,'79761',NULL,1228,31.854455,-102.35906,0,NULL,NULL,54), - (118,43,1,1,0,'221P Main Ln S',221,'P',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Odessa',1,1042,NULL,'79761',NULL,1228,31.854455,-102.35906,0,NULL,NULL,54), - (119,95,1,1,0,'221P Main Ln S',221,'P',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Odessa',1,1042,NULL,'79761',NULL,1228,31.854455,-102.35906,0,NULL,NULL,54), - (120,58,1,1,0,'480L States Ln SW',480,'L',NULL,'States','Ln','SW',NULL,NULL,NULL,NULL,'Mooreville',1,1023,NULL,'38857',NULL,1228,34.280996,-88.57745,0,NULL,NULL,55), - (121,144,1,1,0,'480L States Ln SW',480,'L',NULL,'States','Ln','SW',NULL,NULL,NULL,NULL,'Mooreville',1,1023,NULL,'38857',NULL,1228,34.280996,-88.57745,0,NULL,NULL,55), - (122,86,1,1,0,'480L States Ln SW',480,'L',NULL,'States','Ln','SW',NULL,NULL,NULL,NULL,'Mooreville',1,1023,NULL,'38857',NULL,1228,34.280996,-88.57745,0,NULL,NULL,55), - (123,53,1,1,0,'480L States Ln SW',480,'L',NULL,'States','Ln','SW',NULL,NULL,NULL,NULL,'Mooreville',1,1023,NULL,'38857',NULL,1228,34.280996,-88.57745,0,NULL,NULL,55), - (124,138,1,1,0,'420X Martin Luther King Ave E',420,'X',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Pettigrew',1,1003,NULL,'72752',NULL,1228,35.824911,-93.56071,0,NULL,NULL,56), - (125,150,1,0,0,'420X Martin Luther King Ave E',420,'X',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Pettigrew',1,1003,NULL,'72752',NULL,1228,35.824911,-93.56071,0,NULL,NULL,56), - (126,87,1,1,0,'420X Martin Luther King Ave E',420,'X',NULL,'Martin Luther King','Ave','E',NULL,NULL,NULL,NULL,'Pettigrew',1,1003,NULL,'72752',NULL,1228,35.824911,-93.56071,0,NULL,NULL,56), - (127,78,1,1,0,'889O Dowlen Way W',889,'O',NULL,'Dowlen','Way','W',NULL,NULL,NULL,NULL,'Brockton',1,1020,NULL,'02302',NULL,1228,42.08715,-71.00222,0,NULL,NULL,NULL), - (128,123,1,1,0,'567G Van Ness Ave S',567,'G',NULL,'Van Ness','Ave','S',NULL,NULL,NULL,NULL,'Glen Allen',1,1000,NULL,'35559',NULL,1228,33.909001,-87.73186,0,NULL,NULL,57), - (129,177,1,1,0,'567G Van Ness Ave S',567,'G',NULL,'Van Ness','Ave','S',NULL,NULL,NULL,NULL,'Glen Allen',1,1000,NULL,'35559',NULL,1228,33.909001,-87.73186,0,NULL,NULL,57), - (130,28,1,1,0,'567G Van Ness Ave S',567,'G',NULL,'Van Ness','Ave','S',NULL,NULL,NULL,NULL,'Glen Allen',1,1000,NULL,'35559',NULL,1228,33.909001,-87.73186,0,NULL,NULL,57), - (131,161,1,1,0,'567G Van Ness Ave S',567,'G',NULL,'Van Ness','Ave','S',NULL,NULL,NULL,NULL,'Glen Allen',1,1000,NULL,'35559',NULL,1228,33.909001,-87.73186,0,NULL,NULL,57), - (132,201,1,1,0,'671Q Main Ln NW',671,'Q',NULL,'Main','Ln','NW',NULL,NULL,NULL,NULL,'Saint Cloud',1,1008,NULL,'34771',NULL,1228,28.271939,-81.19645,0,NULL,NULL,58), - (133,34,1,1,0,'671Q Main Ln NW',671,'Q',NULL,'Main','Ln','NW',NULL,NULL,NULL,NULL,'Saint Cloud',1,1008,NULL,'34771',NULL,1228,28.271939,-81.19645,0,NULL,NULL,58), - (134,83,1,1,0,'671Q Main Ln NW',671,'Q',NULL,'Main','Ln','NW',NULL,NULL,NULL,NULL,'Saint Cloud',1,1008,NULL,'34771',NULL,1228,28.271939,-81.19645,0,NULL,NULL,58), - (135,49,1,1,0,'962P Northpoint Path E',962,'P',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Saint Louis',1,1024,NULL,'63127',NULL,1228,38.53987,-90.40024,0,NULL,NULL,NULL), - (136,30,1,1,0,'683W Caulder Pl NW',683,'W',NULL,'Caulder','Pl','NW',NULL,NULL,NULL,NULL,'Caldwell',1,1011,NULL,'83607',NULL,1228,43.675651,-116.73825,0,NULL,NULL,59), - (137,148,1,1,0,'683W Caulder Pl NW',683,'W',NULL,'Caulder','Pl','NW',NULL,NULL,NULL,NULL,'Caldwell',1,1011,NULL,'83607',NULL,1228,43.675651,-116.73825,0,NULL,NULL,59), - (138,18,1,1,0,'683W Caulder Pl NW',683,'W',NULL,'Caulder','Pl','NW',NULL,NULL,NULL,NULL,'Caldwell',1,1011,NULL,'83607',NULL,1228,43.675651,-116.73825,0,NULL,NULL,59), - (139,110,1,0,0,'683W Caulder Pl NW',683,'W',NULL,'Caulder','Pl','NW',NULL,NULL,NULL,NULL,'Caldwell',1,1011,NULL,'83607',NULL,1228,43.675651,-116.73825,0,NULL,NULL,59), - (140,194,1,1,0,'92Y Maple Pl NE',92,'Y',NULL,'Maple','Pl','NE',NULL,NULL,NULL,NULL,'Laquey',1,1024,NULL,'65534',NULL,1228,37.689335,-92.28363,0,NULL,NULL,60), - (141,102,1,1,0,'92Y Maple Pl NE',92,'Y',NULL,'Maple','Pl','NE',NULL,NULL,NULL,NULL,'Laquey',1,1024,NULL,'65534',NULL,1228,37.689335,-92.28363,0,NULL,NULL,60), - (142,188,1,1,0,'92Y Maple Pl NE',92,'Y',NULL,'Maple','Pl','NE',NULL,NULL,NULL,NULL,'Laquey',1,1024,NULL,'65534',NULL,1228,37.689335,-92.28363,0,NULL,NULL,60), - (143,195,1,1,0,'92Y Maple Pl NE',92,'Y',NULL,'Maple','Pl','NE',NULL,NULL,NULL,NULL,'Laquey',1,1024,NULL,'65534',NULL,1228,37.689335,-92.28363,0,NULL,NULL,60), - (144,48,1,1,0,'18L Northpoint St E',18,'L',NULL,'Northpoint','St','E',NULL,NULL,NULL,NULL,'Killeen',1,1042,NULL,'76540',NULL,1228,31.085833,-97.357099,0,NULL,NULL,61), - (145,111,1,1,0,'18L Northpoint St E',18,'L',NULL,'Northpoint','St','E',NULL,NULL,NULL,NULL,'Killeen',1,1042,NULL,'76540',NULL,1228,31.085833,-97.357099,0,NULL,NULL,61), - (146,107,1,1,0,'18L Northpoint St E',18,'L',NULL,'Northpoint','St','E',NULL,NULL,NULL,NULL,'Killeen',1,1042,NULL,'76540',NULL,1228,31.085833,-97.357099,0,NULL,NULL,61), - (147,80,1,1,0,'709W Green Ave S',709,'W',NULL,'Green','Ave','S',NULL,NULL,NULL,NULL,'Port Saint Lucie',1,1008,NULL,'34953',NULL,1228,27.246754,-80.38145,0,NULL,NULL,NULL), - (148,139,1,1,0,'41F College St W',41,'F',NULL,'College','St','W',NULL,NULL,NULL,NULL,'Norway',1,1014,NULL,'52318',NULL,1228,41.900443,-91.90704,0,NULL,NULL,62), - (149,39,1,1,0,'41F College St W',41,'F',NULL,'College','St','W',NULL,NULL,NULL,NULL,'Norway',1,1014,NULL,'52318',NULL,1228,41.900443,-91.90704,0,NULL,NULL,62), - (150,46,1,1,0,'41F College St W',41,'F',NULL,'College','St','W',NULL,NULL,NULL,NULL,'Norway',1,1014,NULL,'52318',NULL,1228,41.900443,-91.90704,0,NULL,NULL,62), - (151,152,1,1,0,'452K Pine Ave N',452,'K',NULL,'Pine','Ave','N',NULL,NULL,NULL,NULL,'Scottsmoor',1,1008,NULL,'32775',NULL,1228,28.76507,-80.87315,0,NULL,NULL,NULL), - (152,65,1,1,0,'384W Main Ln S',384,'W',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Stronghurst',1,1012,NULL,'61480',NULL,1228,40.727428,-90.91347,0,NULL,NULL,63), - (153,140,1,1,0,'384W Main Ln S',384,'W',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Stronghurst',1,1012,NULL,'61480',NULL,1228,40.727428,-90.91347,0,NULL,NULL,63), - (154,93,1,1,0,'384W Main Ln S',384,'W',NULL,'Main','Ln','S',NULL,NULL,NULL,NULL,'Stronghurst',1,1012,NULL,'61480',NULL,1228,40.727428,-90.91347,0,NULL,NULL,63), - (155,109,1,1,0,'362N Beech Blvd NW',362,'N',NULL,'Beech','Blvd','NW',NULL,NULL,NULL,NULL,'Sacramento',1,1016,NULL,'42372',NULL,1228,37.41277,-87.28063,0,NULL,NULL,NULL), - (156,130,1,1,0,'460S States Blvd W',460,'S',NULL,'States','Blvd','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27656',NULL,1228,35.797692,-78.625265,0,NULL,NULL,64), - (157,5,1,1,0,'460S States Blvd W',460,'S',NULL,'States','Blvd','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27656',NULL,1228,35.797692,-78.625265,0,NULL,NULL,64), - (158,21,1,1,0,'460S States Blvd W',460,'S',NULL,'States','Blvd','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27656',NULL,1228,35.797692,-78.625265,0,NULL,NULL,64), - (159,81,1,1,0,'460S States Blvd W',460,'S',NULL,'States','Blvd','W',NULL,NULL,NULL,NULL,'Raleigh',1,1032,NULL,'27656',NULL,1228,35.797692,-78.625265,0,NULL,NULL,64), - (160,164,1,1,0,'950Y Maple Path SE',950,'Y',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Los Angeles',1,1004,NULL,'90022',NULL,1228,34.023662,-118.15581,0,NULL,NULL,65), - (161,122,1,1,0,'950Y Maple Path SE',950,'Y',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Los Angeles',1,1004,NULL,'90022',NULL,1228,34.023662,-118.15581,0,NULL,NULL,65), - (162,14,1,1,0,'950Y Maple Path SE',950,'Y',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Los Angeles',1,1004,NULL,'90022',NULL,1228,34.023662,-118.15581,0,NULL,NULL,65), - (163,96,1,1,0,'950Y Maple Path SE',950,'Y',NULL,'Maple','Path','SE',NULL,NULL,NULL,NULL,'Los Angeles',1,1004,NULL,'90022',NULL,1228,34.023662,-118.15581,0,NULL,NULL,65), - (164,146,1,1,0,'624Z Second Blvd SW',624,'Z',NULL,'Second','Blvd','SW',NULL,NULL,NULL,NULL,'Pineland',1,1039,NULL,'29934',NULL,1228,32.602042,-81.12453,0,NULL,NULL,66), - (165,54,1,1,0,'624Z Second Blvd SW',624,'Z',NULL,'Second','Blvd','SW',NULL,NULL,NULL,NULL,'Pineland',1,1039,NULL,'29934',NULL,1228,32.602042,-81.12453,0,NULL,NULL,66), - (166,142,1,1,0,'624Z Second Blvd SW',624,'Z',NULL,'Second','Blvd','SW',NULL,NULL,NULL,NULL,'Pineland',1,1039,NULL,'29934',NULL,1228,32.602042,-81.12453,0,NULL,NULL,66), - (167,61,1,1,0,'624Z Second Blvd SW',624,'Z',NULL,'Second','Blvd','SW',NULL,NULL,NULL,NULL,'Pineland',1,1039,NULL,'29934',NULL,1228,32.602042,-81.12453,0,NULL,NULL,66), - (168,74,1,1,0,'837B Second Blvd NW',837,'B',NULL,'Second','Blvd','NW',NULL,NULL,NULL,NULL,'Athens',1,1009,NULL,'30606',NULL,1228,33.945619,-83.41732,0,NULL,NULL,67), - (169,190,1,1,0,'837B Second Blvd NW',837,'B',NULL,'Second','Blvd','NW',NULL,NULL,NULL,NULL,'Athens',1,1009,NULL,'30606',NULL,1228,33.945619,-83.41732,0,NULL,NULL,67), - (170,174,1,1,0,'837B Second Blvd NW',837,'B',NULL,'Second','Blvd','NW',NULL,NULL,NULL,NULL,'Athens',1,1009,NULL,'30606',NULL,1228,33.945619,-83.41732,0,NULL,NULL,67), - (171,52,1,1,0,'501K Green St E',501,'K',NULL,'Green','St','E',NULL,NULL,NULL,NULL,'Atwood',1,1015,NULL,'67730',NULL,1228,39.810204,-101.1109,0,NULL,NULL,NULL), - (172,154,1,1,0,'443J Martin Luther King Ln SE',443,'J',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Nevada',1,1014,NULL,'50201',NULL,1228,42.026021,-93.4484,0,NULL,NULL,68), - (173,12,1,1,0,'443J Martin Luther King Ln SE',443,'J',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Nevada',1,1014,NULL,'50201',NULL,1228,42.026021,-93.4484,0,NULL,NULL,68), - (174,106,1,1,0,'443J Martin Luther King Ln SE',443,'J',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Nevada',1,1014,NULL,'50201',NULL,1228,42.026021,-93.4484,0,NULL,NULL,68), - (175,167,1,0,0,'443J Martin Luther King Ln SE',443,'J',NULL,'Martin Luther King','Ln','SE',NULL,NULL,NULL,NULL,'Nevada',1,1014,NULL,'50201',NULL,1228,42.026021,-93.4484,0,NULL,NULL,68), - (176,121,1,1,0,'758N Northpoint Rd SW',758,'N',NULL,'Northpoint','Rd','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1000,NULL,'36274',NULL,1228,33.159848,-85.36865,0,NULL,NULL,69), - (177,55,1,1,0,'758N Northpoint Rd SW',758,'N',NULL,'Northpoint','Rd','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1000,NULL,'36274',NULL,1228,33.159848,-85.36865,0,NULL,NULL,69), - (178,133,1,1,0,'758N Northpoint Rd SW',758,'N',NULL,'Northpoint','Rd','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1000,NULL,'36274',NULL,1228,33.159848,-85.36865,0,NULL,NULL,69), - (179,101,1,1,0,'758N Northpoint Rd SW',758,'N',NULL,'Northpoint','Rd','SW',NULL,NULL,NULL,NULL,'Roanoke',1,1000,NULL,'36274',NULL,1228,33.159848,-85.36865,0,NULL,NULL,69), - (180,132,1,0,0,'490Q Caulder Dr W',490,'Q',NULL,'Caulder','Dr','W',NULL,NULL,NULL,NULL,'Issue',1,1019,NULL,'20645',NULL,1228,38.30126,-76.91539,0,NULL,NULL,70), - (181,113,1,1,0,'490Q Caulder Dr W',490,'Q',NULL,'Caulder','Dr','W',NULL,NULL,NULL,NULL,'Issue',1,1019,NULL,'20645',NULL,1228,38.30126,-76.91539,0,NULL,NULL,70), - (182,33,1,1,0,'490Q Caulder Dr W',490,'Q',NULL,'Caulder','Dr','W',NULL,NULL,NULL,NULL,'Issue',1,1019,NULL,'20645',NULL,1228,38.30126,-76.91539,0,NULL,NULL,70), - (183,44,1,1,0,'490Q Caulder Dr W',490,'Q',NULL,'Caulder','Dr','W',NULL,NULL,NULL,NULL,'Issue',1,1019,NULL,'20645',NULL,1228,38.30126,-76.91539,0,NULL,NULL,70), - (184,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), - (185,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), - (186,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); + (1,65,1,1,0,'118C Second Pl N',118,'C',NULL,'Second','Pl','N',NULL,NULL,NULL,NULL,'New York',1,1031,NULL,'10007',NULL,1228,40.714754,-74.00721,0,NULL,NULL,NULL), + (2,170,1,1,0,'674N College Way SE',674,'N',NULL,'College','Way','SE',NULL,NULL,NULL,NULL,'Chandler',1,1002,NULL,'85226',NULL,1228,33.312208,-111.93177,0,NULL,NULL,NULL), + (3,197,1,1,0,'314S Bay St SW',314,'S',NULL,'Bay','St','SW',NULL,NULL,NULL,NULL,'Schaumburg',1,1012,NULL,'60195',NULL,1228,42.067809,-88.10828,0,NULL,NULL,NULL), + (4,116,1,1,0,'642A Beech Blvd SE',642,'A',NULL,'Beech','Blvd','SE',NULL,NULL,NULL,NULL,'Georgetown',1,1016,NULL,'40324',NULL,1228,38.221179,-84.55465,0,NULL,NULL,NULL), + (5,147,1,1,0,'514Q Cadell Blvd SW',514,'Q',NULL,'Cadell','Blvd','SW',NULL,NULL,NULL,NULL,'Quinby',1,1045,NULL,'23423',NULL,1228,37.549044,-75.73237,0,NULL,NULL,NULL), + (6,149,1,1,0,'290R Northpoint Dr SE',290,'R',NULL,'Northpoint','Dr','SE',NULL,NULL,NULL,NULL,'Pattersonville',1,1031,NULL,'12137',NULL,1228,42.862695,-74.11759,0,NULL,NULL,NULL), + (7,136,1,1,0,'683G Woodbridge Way E',683,'G',NULL,'Woodbridge','Way','E',NULL,NULL,NULL,NULL,'Cotton Plant',1,1003,NULL,'72036',NULL,1228,35.011873,-91.25449,0,NULL,NULL,NULL), + (8,28,1,1,0,'753U Lincoln Blvd SE',753,'U',NULL,'Lincoln','Blvd','SE',NULL,NULL,NULL,NULL,'Weber City',1,1045,NULL,'24290',NULL,1228,36.617348,-82.5666,0,NULL,NULL,NULL), + (9,54,1,1,0,'939C Main Ave NE',939,'C',NULL,'Main','Ave','NE',NULL,NULL,NULL,NULL,'Burlington',1,1044,NULL,'05402',NULL,1228,44.442117,-73.082525,0,NULL,NULL,NULL), + (10,9,1,1,0,'585T Jackson Pl NE',585,'T',NULL,'Jackson','Pl','NE',NULL,NULL,NULL,NULL,'Powellville',1,1019,NULL,'21852',NULL,1228,38.388434,-75.6276,0,NULL,NULL,NULL), + (11,160,1,1,0,'490J Van Ness Pl E',490,'J',NULL,'Van Ness','Pl','E',NULL,NULL,NULL,NULL,'Asheville',1,1032,NULL,'28813',NULL,1228,35.50042,-82.502644,0,NULL,NULL,NULL), + (12,130,1,1,0,'577F Jackson Ln S',577,'F',NULL,'Jackson','Ln','S',NULL,NULL,NULL,NULL,'Touchet',1,1046,NULL,'99360',NULL,1228,46.059286,-118.67264,0,NULL,NULL,NULL), + (13,193,1,1,0,'243J Beech Ln N',243,'J',NULL,'Beech','Ln','N',NULL,NULL,NULL,NULL,'Calmar',1,1014,NULL,'52132',NULL,1228,43.194235,-91.89585,0,NULL,NULL,NULL), + (14,66,1,1,0,'282L Cadell Rd SE',282,'L',NULL,'Cadell','Rd','SE',NULL,NULL,NULL,NULL,'Tampa',1,1008,NULL,'33610',NULL,1228,27.993498,-82.40914,0,NULL,NULL,NULL), + (15,77,1,1,0,'667I Northpoint Path S',667,'I',NULL,'Northpoint','Path','S',NULL,NULL,NULL,NULL,'Clarkedale',1,1003,NULL,'72325',NULL,1228,35.286354,-90.253781,0,NULL,NULL,NULL), + (16,179,1,1,0,'567S Bay Rd SW',567,'S',NULL,'Bay','Rd','SW',NULL,NULL,NULL,NULL,'Dallas',1,1042,NULL,'75284',NULL,1228,32.767268,-96.777626,0,NULL,NULL,NULL), + (17,132,1,1,0,'145I Pine Path SW',145,'I',NULL,'Pine','Path','SW',NULL,NULL,NULL,NULL,'Boise',1,1011,NULL,'83712',NULL,1228,43.595763,-116.16367,0,NULL,NULL,NULL), + (18,68,1,1,0,'446E States Blvd SE',446,'E',NULL,'States','Blvd','SE',NULL,NULL,NULL,NULL,'Baker',1,1027,NULL,'89311',NULL,1228,38.941805,-114.12592,0,NULL,NULL,NULL), + (19,142,1,1,0,'700M States Way NW',700,'M',NULL,'States','Way','NW',NULL,NULL,NULL,NULL,'Stratton',1,1018,NULL,'04982',NULL,1228,45.137607,-70.44606,0,NULL,NULL,NULL), + (20,151,1,1,0,'939M Woodbridge Dr SW',939,'M',NULL,'Woodbridge','Dr','SW',NULL,NULL,NULL,NULL,'Pompano Beach',1,1008,NULL,'33093',NULL,1228,26.145724,-80.448254,0,NULL,NULL,NULL), + (21,138,1,1,0,'963G College Pl NE',963,'G',NULL,'College','Pl','NE',NULL,NULL,NULL,NULL,'Arkabutla',1,1023,NULL,'38602',NULL,1228,34.686272,-90.106756,0,NULL,NULL,NULL), + (22,38,1,1,0,'64J Martin Luther King Pl S',64,'J',NULL,'Martin Luther King','Pl','S',NULL,NULL,NULL,NULL,'New Haven',1,1006,NULL,'06538',NULL,1228,41.365709,-72.927507,0,NULL,NULL,NULL), + (23,172,1,1,0,'689J Main Pl NW',689,'J',NULL,'Main','Pl','NW',NULL,NULL,NULL,NULL,'Kingdom City',1,1024,NULL,'65262',NULL,1228,38.959191,-91.92948,0,NULL,NULL,NULL), + (24,196,1,1,0,'903B Green Way NE',903,'B',NULL,'Green','Way','NE',NULL,NULL,NULL,NULL,'Las Vegas',1,1027,NULL,'89124',NULL,1228,36.101538,-115.39948,0,NULL,NULL,NULL), + (25,194,1,1,0,'81K Bay Path S',81,'K',NULL,'Bay','Path','S',NULL,NULL,NULL,NULL,'Jericho',1,1044,NULL,'05465',NULL,1228,44.486113,-72.96317,0,NULL,NULL,NULL), + (26,87,1,1,0,'473F Maple St W',473,'F',NULL,'Maple','St','W',NULL,NULL,NULL,NULL,'Evergreen',1,1005,NULL,'80437',NULL,1228,39.522014,-105.223945,0,NULL,NULL,NULL), + (27,67,1,1,0,'625P Dowlen Way E',625,'P',NULL,'Dowlen','Way','E',NULL,NULL,NULL,NULL,'Idledale',1,1005,NULL,'80453',NULL,1228,39.668426,-105.244245,0,NULL,NULL,NULL), + (28,88,1,1,0,'900L Beech Ln N',900,'L',NULL,'Beech','Ln','N',NULL,NULL,NULL,NULL,'Denver',1,1005,NULL,'80215',NULL,1228,39.744437,-105.10441,0,NULL,NULL,NULL), + (29,42,1,1,0,'917R Bay Ave SW',917,'R',NULL,'Bay','Ave','SW',NULL,NULL,NULL,NULL,'Tenants Harbor',1,1018,NULL,'04860',NULL,1228,43.9464,-69.23524,0,NULL,NULL,NULL), + (30,29,1,1,0,'555W Main Dr W',555,'W',NULL,'Main','Dr','W',NULL,NULL,NULL,NULL,'Brookside',1,1000,NULL,'35036',NULL,1228,33.63815,-86.91956,0,NULL,NULL,NULL), + (31,32,1,1,0,'240T Dowlen Pl NE',240,'T',NULL,'Dowlen','Pl','NE',NULL,NULL,NULL,NULL,'Malin',1,1036,NULL,'97632',NULL,1228,42.026248,-121.41706,0,NULL,NULL,NULL), + (32,75,1,1,0,'324K Northpoint Dr E',324,'K',NULL,'Northpoint','Dr','E',NULL,NULL,NULL,NULL,'Oakland',1,1004,NULL,'94606',NULL,1228,37.793177,-122.24352,0,NULL,NULL,NULL), + (33,178,1,1,0,'603L Beech Dr W',603,'L',NULL,'Beech','Dr','W',NULL,NULL,NULL,NULL,'El Paso',1,1042,NULL,'88541',NULL,1228,31.694842,-106.299987,0,NULL,NULL,NULL), + (34,92,1,1,0,'180H Caulder Ave NE',180,'H',NULL,'Caulder','Ave','NE',NULL,NULL,NULL,NULL,'Shadehill',1,1040,NULL,'57653',NULL,1228,45.690446,-102.25384,0,NULL,NULL,NULL), + (35,13,1,1,0,'465H Second Rd S',465,'H',NULL,'Second','Rd','S',NULL,NULL,NULL,NULL,'Earleville',1,1019,NULL,'21919',NULL,1228,39.425542,-75.96164,0,NULL,NULL,NULL), + (36,103,1,1,0,'502C El Camino Ave S',502,'C',NULL,'El Camino','Ave','S',NULL,NULL,NULL,NULL,'Newport',1,1029,NULL,'08345',NULL,1228,39.28341,-75.15464,0,NULL,NULL,NULL), + (37,174,1,1,0,'619R Beech Pl SW',619,'R',NULL,'Beech','Pl','SW',NULL,NULL,NULL,NULL,'Cayey',1,1056,NULL,'00737',NULL,1228,18.102967,-66.139274,0,NULL,NULL,NULL), + (38,50,1,1,0,'366J States Way E',366,'J',NULL,'States','Way','E',NULL,NULL,NULL,NULL,'Nelson',1,1004,NULL,'95958',NULL,1228,39.556251,-121.803777,0,NULL,NULL,NULL), + (39,175,1,1,0,'743G Bay Pl SW',743,'G',NULL,'Bay','Pl','SW',NULL,NULL,NULL,NULL,'Monroe',1,1046,NULL,'98272',NULL,1228,47.860245,-121.93734,0,NULL,NULL,NULL), + (40,188,1,1,0,'797E Cadell Ln W',797,'E',NULL,'Cadell','Ln','W',NULL,NULL,NULL,NULL,'Douglas',1,1002,NULL,'85607',NULL,1228,31.382775,-109.55035,0,NULL,NULL,NULL), + (41,106,1,1,0,'662O Dowlen Path E',662,'O',NULL,'Dowlen','Path','E',NULL,NULL,NULL,NULL,'Henderson',1,1027,NULL,'89015',NULL,1228,36.030927,-114.96787,0,NULL,NULL,NULL), + (42,79,1,1,0,'407P Woodbridge Dr NW',407,'P',NULL,'Woodbridge','Dr','NW',NULL,NULL,NULL,NULL,'Saint James',1,1024,NULL,'65559',NULL,1228,38.011872,-91.61179,0,NULL,NULL,NULL), + (43,25,1,1,0,'51D Main Blvd SW',51,'D',NULL,'Main','Blvd','SW',NULL,NULL,NULL,NULL,'Joplin',1,1024,NULL,'64803',NULL,1228,37.206219,-94.335453,0,NULL,NULL,NULL), + (44,198,1,1,0,'78F Cadell Path S',78,'F',NULL,'Cadell','Path','S',NULL,NULL,NULL,NULL,'Caliente',1,1004,NULL,'93518',NULL,1228,35.381552,-118.54748,0,NULL,NULL,NULL), + (45,5,1,1,0,'777C Martin Luther King Ln N',777,'C',NULL,'Martin Luther King','Ln','N',NULL,NULL,NULL,NULL,'Oquawka',1,1012,NULL,'61469',NULL,1228,40.957929,-90.93608,0,NULL,NULL,NULL), + (46,33,1,1,0,'670L Second Dr W',670,'L',NULL,'Second','Dr','W',NULL,NULL,NULL,NULL,'Radersburg',1,1025,NULL,'59641',NULL,1228,46.206922,-111.634364,0,NULL,NULL,NULL), + (47,12,1,1,0,'773P States Blvd E',773,'P',NULL,'States','Blvd','E',NULL,NULL,NULL,NULL,'Parker Ford',1,1037,NULL,'19457',NULL,1228,40.204252,-75.58449,0,NULL,NULL,NULL), + (48,150,1,1,0,'583Z States Ln N',583,'Z',NULL,'States','Ln','N',NULL,NULL,NULL,NULL,'Ferndale',1,1004,NULL,'95536',NULL,1228,40.561448,-124.25781,0,NULL,NULL,NULL), + (49,182,1,1,0,'610E Green Ln NE',610,'E',NULL,'Green','Ln','NE',NULL,NULL,NULL,NULL,'Oak Bluffs',1,1020,NULL,'02557',NULL,1228,41.417376,-70.560032,0,NULL,NULL,NULL), + (50,6,1,1,0,'505S Northpoint St SW',505,'S',NULL,'Northpoint','St','SW',NULL,NULL,NULL,NULL,'Ball Ground',1,1009,NULL,'30107',NULL,1228,34.344939,-84.37204,0,NULL,NULL,NULL), + (51,125,1,1,0,'459W Maple Pl NW',459,'W',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Purdys',1,1031,NULL,'10578',NULL,1228,41.3252,-73.66906,0,NULL,NULL,NULL), + (52,55,1,1,0,'813W Second Ln S',813,'W',NULL,'Second','Ln','S',NULL,NULL,NULL,NULL,'Plantersville',1,1023,NULL,'38862',NULL,1228,34.179513,-88.63454,0,NULL,NULL,NULL), + (53,156,1,1,0,'353B Lincoln Path SE',353,'B',NULL,'Lincoln','Path','SE',NULL,NULL,NULL,NULL,'Roseburg North',1,1036,NULL,'97795',NULL,1228,43.276877,-123.348568,0,NULL,NULL,NULL), + (54,51,1,1,0,'814Z Green Ave W',814,'Z',NULL,'Green','Ave','W',NULL,NULL,NULL,NULL,'Lobeco',1,1039,NULL,'29931',NULL,1228,32.538432,-80.702594,0,NULL,NULL,NULL), + (55,34,1,1,0,'641H Beech Ave SE',641,'H',NULL,'Beech','Ave','SE',NULL,NULL,NULL,NULL,'Salinas',1,1004,NULL,'93901',NULL,1228,36.665879,-121.65497,0,NULL,NULL,NULL), + (56,56,1,1,0,'916O Northpoint Path E',916,'O',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Longview',1,1042,NULL,'75601',NULL,1228,32.505248,-94.73172,0,NULL,NULL,NULL), + (57,96,1,1,0,'449S Green Rd SE',449,'S',NULL,'Green','Rd','SE',NULL,NULL,NULL,NULL,'Cuney',1,1042,NULL,'75759',NULL,1228,32.034127,-95.41776,0,NULL,NULL,NULL), + (58,124,1,1,0,'41M College Blvd NE',41,'M',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Wellston',1,1034,NULL,'45692',NULL,1228,39.117212,-82.54811,0,NULL,NULL,NULL), + (59,183,1,1,0,'820I Jackson Rd NW',820,'I',NULL,'Jackson','Rd','NW',NULL,NULL,NULL,NULL,'Malvern',1,1000,NULL,'36349',NULL,1228,31.121244,-85.559235,0,NULL,NULL,NULL), + (60,31,1,1,0,'548E El Camino Ave NW',548,'E',NULL,'El Camino','Ave','NW',NULL,NULL,NULL,NULL,'Tippo',1,1023,NULL,'38962',NULL,1228,33.90263,-90.16305,0,NULL,NULL,NULL), + (61,122,1,1,0,'648J Caulder St NE',648,'J',NULL,'Caulder','St','NE',NULL,NULL,NULL,NULL,'Turners',1,1024,NULL,'65765',NULL,1228,37.25807,-93.343673,0,NULL,NULL,NULL), + (62,64,1,1,0,'228V Pine Way S',228,'V',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Rubicon',1,1048,NULL,'53078',NULL,1228,43.3182,-88.45169,0,NULL,NULL,NULL), + (63,47,1,1,0,'101I Main Ave SW',101,'I',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stoddard',1,1048,NULL,'54658',NULL,1228,43.68804,-91.19665,0,NULL,NULL,NULL), + (64,24,1,1,0,'841K Caulder Ave S',841,'K',NULL,'Caulder','Ave','S',NULL,NULL,NULL,NULL,'Bowman',1,1009,NULL,'30624',NULL,1228,34.193943,-83.03375,0,NULL,NULL,NULL), + (65,190,1,1,0,'66C Beech Way N',66,'C',NULL,'Beech','Way','N',NULL,NULL,NULL,NULL,'Middle Island',1,1031,NULL,'11953',NULL,1228,40.886267,-72.9552,0,NULL,NULL,NULL), + (66,19,1,1,0,'436V Martin Luther King Pl S',436,'V',NULL,'Martin Luther King','Pl','S',NULL,NULL,NULL,NULL,'Odenton',1,1019,NULL,'21113',NULL,1228,39.079902,-76.70867,0,NULL,NULL,NULL), + (67,165,1,1,0,'876K Lincoln Path NW',876,'K',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kalamazoo',1,1021,NULL,'49004',NULL,1228,42.330089,-85.56635,0,NULL,NULL,NULL), + (68,112,1,1,0,'349P Dowlen Pl N',349,'P',NULL,'Dowlen','Pl','N',NULL,NULL,NULL,NULL,'Waverly',1,1045,NULL,'23891',NULL,1228,36.909845,-77.286287,0,NULL,NULL,NULL), + (69,152,1,1,0,'942R States Path SE',942,'R',NULL,'States','Path','SE',NULL,NULL,NULL,NULL,'Rothschild',1,1048,NULL,'54474',NULL,1228,44.885168,-89.61922,0,NULL,NULL,NULL), + (70,121,3,1,0,'991K Northpoint St W',991,'K',NULL,'Northpoint','St','W',NULL,'Cuffe Parade',NULL,NULL,'Peoria',1,1002,NULL,'85395',NULL,1228,33.580089,-112.246311,0,NULL,NULL,NULL), + (71,29,2,0,0,'991K Northpoint St W',991,'K',NULL,'Northpoint','St','W',NULL,'Cuffe Parade',NULL,NULL,'Peoria',1,1002,NULL,'85395',NULL,1228,33.580089,-112.246311,0,NULL,NULL,70), + (72,139,3,1,0,'298T Northpoint St N',298,'T',NULL,'Northpoint','St','N',NULL,'Subscriptions Dept',NULL,NULL,'North Grafton',1,1020,NULL,'01536',NULL,1228,42.231444,-71.70523,0,NULL,NULL,NULL), + (73,62,2,1,0,'298T Northpoint St N',298,'T',NULL,'Northpoint','St','N',NULL,'Subscriptions Dept',NULL,NULL,'North Grafton',1,1020,NULL,'01536',NULL,1228,42.231444,-71.70523,0,NULL,NULL,72), + (74,93,3,1,0,'332C Dowlen Dr SW',332,'C',NULL,'Dowlen','Dr','SW',NULL,'Disbursements',NULL,NULL,'Fort Lauderdale',1,1008,NULL,'33315',NULL,1228,26.094385,-80.15422,0,NULL,NULL,NULL), + (75,184,2,1,0,'332C Dowlen Dr SW',332,'C',NULL,'Dowlen','Dr','SW',NULL,'Disbursements',NULL,NULL,'Fort Lauderdale',1,1008,NULL,'33315',NULL,1228,26.094385,-80.15422,0,NULL,NULL,74), + (76,71,3,1,0,'718B Martin Luther King Path W',718,'B',NULL,'Martin Luther King','Path','W',NULL,'Disbursements',NULL,NULL,'Mendota',1,1012,NULL,'61342',NULL,1228,41.543149,-89.10696,0,NULL,NULL,NULL), + (77,14,2,1,0,'718B Martin Luther King Path W',718,'B',NULL,'Martin Luther King','Path','W',NULL,'Disbursements',NULL,NULL,'Mendota',1,1012,NULL,'61342',NULL,1228,41.543149,-89.10696,0,NULL,NULL,76), + (78,169,3,1,0,'700F Northpoint Rd NE',700,'F',NULL,'Northpoint','Rd','NE',NULL,'Churchgate',NULL,NULL,'Appleton',1,1048,NULL,'54915',NULL,1228,44.244753,-88.37783,0,NULL,NULL,NULL), + (79,33,2,0,0,'700F Northpoint Rd NE',700,'F',NULL,'Northpoint','Rd','NE',NULL,'Churchgate',NULL,NULL,'Appleton',1,1048,NULL,'54915',NULL,1228,44.244753,-88.37783,0,NULL,NULL,78), + (80,95,3,1,0,'674U Second Way SE',674,'U',NULL,'Second','Way','SE',NULL,'Community Relations',NULL,NULL,'Sewanee',1,1041,NULL,'37375',NULL,1228,35.193891,-85.91048,0,NULL,NULL,NULL), + (81,181,2,1,0,'674U Second Way SE',674,'U',NULL,'Second','Way','SE',NULL,'Community Relations',NULL,NULL,'Sewanee',1,1041,NULL,'37375',NULL,1228,35.193891,-85.91048,0,NULL,NULL,80), + (82,120,3,1,0,'971S Van Ness St NE',971,'S',NULL,'Van Ness','St','NE',NULL,'c/o OPDC',NULL,NULL,'Bethlehem',1,1037,NULL,'18016',NULL,1228,40.693376,-75.471156,0,NULL,NULL,NULL), + (83,137,3,1,0,'273E El Camino Ave NE',273,'E',NULL,'El Camino','Ave','NE',NULL,'Disbursements',NULL,NULL,'Apalachicola',1,1008,NULL,'32320',NULL,1228,29.71877,-85.02704,0,NULL,NULL,NULL), + (84,173,3,1,0,'409Q College Rd N',409,'Q',NULL,'College','Rd','N',NULL,'Payables Dept.',NULL,NULL,'Atlanta',1,1009,NULL,'30396',NULL,1228,33.844371,-84.47405,0,NULL,NULL,NULL), + (85,182,2,0,0,'409Q College Rd N',409,'Q',NULL,'College','Rd','N',NULL,'Payables Dept.',NULL,NULL,'Atlanta',1,1009,NULL,'30396',NULL,1228,33.844371,-84.47405,0,NULL,NULL,84), + (86,141,3,1,0,'439M Beech Ln NE',439,'M',NULL,'Beech','Ln','NE',NULL,'Urgent',NULL,NULL,'Robbins',1,1032,NULL,'27325',NULL,1228,35.447663,-79.57555,0,NULL,NULL,NULL), + (87,70,3,1,0,'344O Van Ness Dr E',344,'O',NULL,'Van Ness','Dr','E',NULL,'Attn: Development',NULL,NULL,'Knoxville',1,1041,NULL,'37931',NULL,1228,35.976063,-84.1182,0,NULL,NULL,NULL), + (88,148,2,1,0,'344O Van Ness Dr E',344,'O',NULL,'Van Ness','Dr','E',NULL,'Attn: Development',NULL,NULL,'Knoxville',1,1041,NULL,'37931',NULL,1228,35.976063,-84.1182,0,NULL,NULL,87), + (89,114,3,1,0,'899N Northpoint Way NE',899,'N',NULL,'Northpoint','Way','NE',NULL,'c/o PO Plus',NULL,NULL,'Pickens',1,1047,NULL,'26230',NULL,1228,38.66362,-80.24361,0,NULL,NULL,NULL), + (90,157,3,1,0,'573K Second Ln SE',573,'K',NULL,'Second','Ln','SE',NULL,'Attn: Accounting',NULL,NULL,'Omaha',1,1026,NULL,'68198',NULL,1228,41.291736,-96.171104,0,NULL,NULL,NULL), + (91,37,2,1,0,'573K Second Ln SE',573,'K',NULL,'Second','Ln','SE',NULL,'Attn: Accounting',NULL,NULL,'Omaha',1,1026,NULL,'68198',NULL,1228,41.291736,-96.171104,0,NULL,NULL,90), + (92,98,3,1,0,'96D Martin Luther King Ave NW',96,'D',NULL,'Martin Luther King','Ave','NW',NULL,'Donor Relations',NULL,NULL,'Adelanto',1,1004,NULL,'92301',NULL,1228,34.641695,-117.50803,0,NULL,NULL,NULL), + (93,36,2,1,0,'96D Martin Luther King Ave NW',96,'D',NULL,'Martin Luther King','Ave','NW',NULL,'Donor Relations',NULL,NULL,'Adelanto',1,1004,NULL,'92301',NULL,1228,34.641695,-117.50803,0,NULL,NULL,92), + (94,41,3,1,0,'447Q States Ave E',447,'Q',NULL,'States','Ave','E',NULL,'Donor Relations',NULL,NULL,'Ravenna',1,1034,NULL,'44266',NULL,1228,41.159224,-81.23143,0,NULL,NULL,NULL), + (95,143,2,1,0,'447Q States Ave E',447,'Q',NULL,'States','Ave','E',NULL,'Donor Relations',NULL,NULL,'Ravenna',1,1034,NULL,'44266',NULL,1228,41.159224,-81.23143,0,NULL,NULL,94), + (96,30,3,1,0,'838Z Lincoln Ave E',838,'Z',NULL,'Lincoln','Ave','E',NULL,'Payables Dept.',NULL,NULL,'Riderwood',1,1019,NULL,'21139',NULL,1228,39.438964,-76.592139,0,NULL,NULL,NULL), + (97,8,3,1,0,'227J States Dr W',227,'J',NULL,'States','Dr','W',NULL,'Urgent',NULL,NULL,'New Philadelphia',1,1034,NULL,'44663',NULL,1228,40.477187,-81.44439,0,NULL,NULL,NULL), + (98,105,3,1,0,'766N Jackson St W',766,'N',NULL,'Jackson','St','W',NULL,'Community Relations',NULL,NULL,'Miami',1,1008,NULL,'33159',NULL,1228,25.558428,-80.458168,0,NULL,NULL,NULL), + (99,94,3,1,0,'543Y Dowlen Path NE',543,'Y',NULL,'Dowlen','Path','NE',NULL,'Attn: Development',NULL,NULL,'Bakersfield',1,1004,NULL,'93390',NULL,1228,35.294405,-118.905173,0,NULL,NULL,NULL), + (100,163,3,1,0,'817J Green Path NE',817,'J',NULL,'Green','Path','NE',NULL,'Donor Relations',NULL,NULL,'Evansville',1,1013,NULL,'47750',NULL,1228,37.962292,-87.505512,0,NULL,NULL,NULL), + (101,103,2,0,0,'817J Green Path NE',817,'J',NULL,'Green','Path','NE',NULL,'Donor Relations',NULL,NULL,'Evansville',1,1013,NULL,'47750',NULL,1228,37.962292,-87.505512,0,NULL,NULL,100), + (102,82,1,1,0,'505S Northpoint St SW',505,'S',NULL,'Northpoint','St','SW',NULL,NULL,NULL,NULL,'Ball Ground',1,1009,NULL,'30107',NULL,1228,34.344939,-84.37204,0,NULL,NULL,50), + (103,60,1,1,0,'505S Northpoint St SW',505,'S',NULL,'Northpoint','St','SW',NULL,NULL,NULL,NULL,'Ball Ground',1,1009,NULL,'30107',NULL,1228,34.344939,-84.37204,0,NULL,NULL,50), + (104,129,1,1,0,'505S Northpoint St SW',505,'S',NULL,'Northpoint','St','SW',NULL,NULL,NULL,NULL,'Ball Ground',1,1009,NULL,'30107',NULL,1228,34.344939,-84.37204,0,NULL,NULL,50), + (105,7,1,1,0,'505S Northpoint St SW',505,'S',NULL,'Northpoint','St','SW',NULL,NULL,NULL,NULL,'Ball Ground',1,1009,NULL,'30107',NULL,1228,34.344939,-84.37204,0,NULL,NULL,50), + (106,86,1,1,0,'459W Maple Pl NW',459,'W',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Purdys',1,1031,NULL,'10578',NULL,1228,41.3252,-73.66906,0,NULL,NULL,51), + (107,171,1,1,0,'459W Maple Pl NW',459,'W',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Purdys',1,1031,NULL,'10578',NULL,1228,41.3252,-73.66906,0,NULL,NULL,51), + (108,189,1,1,0,'459W Maple Pl NW',459,'W',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Purdys',1,1031,NULL,'10578',NULL,1228,41.3252,-73.66906,0,NULL,NULL,51), + (109,14,1,0,0,'459W Maple Pl NW',459,'W',NULL,'Maple','Pl','NW',NULL,NULL,NULL,NULL,'Purdys',1,1031,NULL,'10578',NULL,1228,41.3252,-73.66906,0,NULL,NULL,51), + (110,145,1,1,0,'813W Second Ln S',813,'W',NULL,'Second','Ln','S',NULL,NULL,NULL,NULL,'Plantersville',1,1023,NULL,'38862',NULL,1228,34.179513,-88.63454,0,NULL,NULL,52), + (111,113,1,1,0,'813W Second Ln S',813,'W',NULL,'Second','Ln','S',NULL,NULL,NULL,NULL,'Plantersville',1,1023,NULL,'38862',NULL,1228,34.179513,-88.63454,0,NULL,NULL,52), + (112,155,1,1,0,'813W Second Ln S',813,'W',NULL,'Second','Ln','S',NULL,NULL,NULL,NULL,'Plantersville',1,1023,NULL,'38862',NULL,1228,34.179513,-88.63454,0,NULL,NULL,52), + (113,53,1,1,0,'813W Second Ln S',813,'W',NULL,'Second','Ln','S',NULL,NULL,NULL,NULL,'Plantersville',1,1023,NULL,'38862',NULL,1228,34.179513,-88.63454,0,NULL,NULL,52), + (114,85,1,1,0,'353B Lincoln Path SE',353,'B',NULL,'Lincoln','Path','SE',NULL,NULL,NULL,NULL,'Roseburg North',1,1036,NULL,'97795',NULL,1228,43.276877,-123.348568,0,NULL,NULL,53), + (115,90,1,1,0,'353B Lincoln Path SE',353,'B',NULL,'Lincoln','Path','SE',NULL,NULL,NULL,NULL,'Roseburg North',1,1036,NULL,'97795',NULL,1228,43.276877,-123.348568,0,NULL,NULL,53), + (116,81,1,1,0,'353B Lincoln Path SE',353,'B',NULL,'Lincoln','Path','SE',NULL,NULL,NULL,NULL,'Roseburg North',1,1036,NULL,'97795',NULL,1228,43.276877,-123.348568,0,NULL,NULL,53), + (117,119,1,1,0,'353B Lincoln Path SE',353,'B',NULL,'Lincoln','Path','SE',NULL,NULL,NULL,NULL,'Roseburg North',1,1036,NULL,'97795',NULL,1228,43.276877,-123.348568,0,NULL,NULL,53), + (118,176,1,1,0,'814Z Green Ave W',814,'Z',NULL,'Green','Ave','W',NULL,NULL,NULL,NULL,'Lobeco',1,1039,NULL,'29931',NULL,1228,32.538432,-80.702594,0,NULL,NULL,54), + (119,2,1,1,0,'814Z Green Ave W',814,'Z',NULL,'Green','Ave','W',NULL,NULL,NULL,NULL,'Lobeco',1,1039,NULL,'29931',NULL,1228,32.538432,-80.702594,0,NULL,NULL,54), + (120,117,1,1,0,'814Z Green Ave W',814,'Z',NULL,'Green','Ave','W',NULL,NULL,NULL,NULL,'Lobeco',1,1039,NULL,'29931',NULL,1228,32.538432,-80.702594,0,NULL,NULL,54), + (121,154,1,1,0,'814Z Green Ave W',814,'Z',NULL,'Green','Ave','W',NULL,NULL,NULL,NULL,'Lobeco',1,1039,NULL,'29931',NULL,1228,32.538432,-80.702594,0,NULL,NULL,54), + (122,59,1,1,0,'641H Beech Ave SE',641,'H',NULL,'Beech','Ave','SE',NULL,NULL,NULL,NULL,'Salinas',1,1004,NULL,'93901',NULL,1228,36.665879,-121.65497,0,NULL,NULL,55), + (123,99,1,1,0,'641H Beech Ave SE',641,'H',NULL,'Beech','Ave','SE',NULL,NULL,NULL,NULL,'Salinas',1,1004,NULL,'93901',NULL,1228,36.665879,-121.65497,0,NULL,NULL,55), + (124,89,1,1,0,'641H Beech Ave SE',641,'H',NULL,'Beech','Ave','SE',NULL,NULL,NULL,NULL,'Salinas',1,1004,NULL,'93901',NULL,1228,36.665879,-121.65497,0,NULL,NULL,55), + (125,97,1,1,0,'641H Beech Ave SE',641,'H',NULL,'Beech','Ave','SE',NULL,NULL,NULL,NULL,'Salinas',1,1004,NULL,'93901',NULL,1228,36.665879,-121.65497,0,NULL,NULL,55), + (126,168,1,1,0,'916O Northpoint Path E',916,'O',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Longview',1,1042,NULL,'75601',NULL,1228,32.505248,-94.73172,0,NULL,NULL,56), + (127,133,1,1,0,'916O Northpoint Path E',916,'O',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Longview',1,1042,NULL,'75601',NULL,1228,32.505248,-94.73172,0,NULL,NULL,56), + (128,46,1,1,0,'916O Northpoint Path E',916,'O',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Longview',1,1042,NULL,'75601',NULL,1228,32.505248,-94.73172,0,NULL,NULL,56), + (129,153,1,1,0,'916O Northpoint Path E',916,'O',NULL,'Northpoint','Path','E',NULL,NULL,NULL,NULL,'Longview',1,1042,NULL,'75601',NULL,1228,32.505248,-94.73172,0,NULL,NULL,56), + (130,16,1,1,0,'449S Green Rd SE',449,'S',NULL,'Green','Rd','SE',NULL,NULL,NULL,NULL,'Cuney',1,1042,NULL,'75759',NULL,1228,32.034127,-95.41776,0,NULL,NULL,57), + (131,166,1,1,0,'449S Green Rd SE',449,'S',NULL,'Green','Rd','SE',NULL,NULL,NULL,NULL,'Cuney',1,1042,NULL,'75759',NULL,1228,32.034127,-95.41776,0,NULL,NULL,57), + (132,135,1,1,0,'449S Green Rd SE',449,'S',NULL,'Green','Rd','SE',NULL,NULL,NULL,NULL,'Cuney',1,1042,NULL,'75759',NULL,1228,32.034127,-95.41776,0,NULL,NULL,57), + (133,108,1,1,0,'440P Lincoln Path E',440,'P',NULL,'Lincoln','Path','E',NULL,NULL,NULL,NULL,'Thoreau',1,1030,NULL,'87323',NULL,1228,35.495133,-108.19993,0,NULL,NULL,NULL), + (134,74,1,1,0,'41M College Blvd NE',41,'M',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Wellston',1,1034,NULL,'45692',NULL,1228,39.117212,-82.54811,0,NULL,NULL,58), + (135,180,1,1,0,'41M College Blvd NE',41,'M',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Wellston',1,1034,NULL,'45692',NULL,1228,39.117212,-82.54811,0,NULL,NULL,58), + (136,11,1,1,0,'41M College Blvd NE',41,'M',NULL,'College','Blvd','NE',NULL,NULL,NULL,NULL,'Wellston',1,1034,NULL,'45692',NULL,1228,39.117212,-82.54811,0,NULL,NULL,58), + (137,63,1,1,0,'783J Green Way N',783,'J',NULL,'Green','Way','N',NULL,NULL,NULL,NULL,'Samaria',1,1021,NULL,'48177',NULL,1228,41.807647,-83.579334,0,NULL,NULL,NULL), + (138,148,1,0,0,'820I Jackson Rd NW',820,'I',NULL,'Jackson','Rd','NW',NULL,NULL,NULL,NULL,'Malvern',1,1000,NULL,'36349',NULL,1228,31.121244,-85.559235,0,NULL,NULL,59), + (139,200,1,1,0,'820I Jackson Rd NW',820,'I',NULL,'Jackson','Rd','NW',NULL,NULL,NULL,NULL,'Malvern',1,1000,NULL,'36349',NULL,1228,31.121244,-85.559235,0,NULL,NULL,59), + (140,102,1,1,0,'820I Jackson Rd NW',820,'I',NULL,'Jackson','Rd','NW',NULL,NULL,NULL,NULL,'Malvern',1,1000,NULL,'36349',NULL,1228,31.121244,-85.559235,0,NULL,NULL,59), + (141,134,1,1,0,'820I Jackson Rd NW',820,'I',NULL,'Jackson','Rd','NW',NULL,NULL,NULL,NULL,'Malvern',1,1000,NULL,'36349',NULL,1228,31.121244,-85.559235,0,NULL,NULL,59), + (142,118,1,1,0,'548E El Camino Ave NW',548,'E',NULL,'El Camino','Ave','NW',NULL,NULL,NULL,NULL,'Tippo',1,1023,NULL,'38962',NULL,1228,33.90263,-90.16305,0,NULL,NULL,60), + (143,109,1,1,0,'548E El Camino Ave NW',548,'E',NULL,'El Camino','Ave','NW',NULL,NULL,NULL,NULL,'Tippo',1,1023,NULL,'38962',NULL,1228,33.90263,-90.16305,0,NULL,NULL,60), + (144,187,1,1,0,'548E El Camino Ave NW',548,'E',NULL,'El Camino','Ave','NW',NULL,NULL,NULL,NULL,'Tippo',1,1023,NULL,'38962',NULL,1228,33.90263,-90.16305,0,NULL,NULL,60), + (145,186,1,1,0,'3A Bay Dr W',3,'A',NULL,'Bay','Dr','W',NULL,NULL,NULL,NULL,'Hesston',1,1015,NULL,'67062',NULL,1228,38.142541,-97.43368,0,NULL,NULL,NULL), + (146,49,1,1,0,'648J Caulder St NE',648,'J',NULL,'Caulder','St','NE',NULL,NULL,NULL,NULL,'Turners',1,1024,NULL,'65765',NULL,1228,37.25807,-93.343673,0,NULL,NULL,61), + (147,57,1,1,0,'648J Caulder St NE',648,'J',NULL,'Caulder','St','NE',NULL,NULL,NULL,NULL,'Turners',1,1024,NULL,'65765',NULL,1228,37.25807,-93.343673,0,NULL,NULL,61), + (148,52,1,1,0,'648J Caulder St NE',648,'J',NULL,'Caulder','St','NE',NULL,NULL,NULL,NULL,'Turners',1,1024,NULL,'65765',NULL,1228,37.25807,-93.343673,0,NULL,NULL,61), + (149,195,1,1,0,'648J Caulder St NE',648,'J',NULL,'Caulder','St','NE',NULL,NULL,NULL,NULL,'Turners',1,1024,NULL,'65765',NULL,1228,37.25807,-93.343673,0,NULL,NULL,61), + (150,140,1,1,0,'228V Pine Way S',228,'V',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Rubicon',1,1048,NULL,'53078',NULL,1228,43.3182,-88.45169,0,NULL,NULL,62), + (151,48,1,1,0,'228V Pine Way S',228,'V',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Rubicon',1,1048,NULL,'53078',NULL,1228,43.3182,-88.45169,0,NULL,NULL,62), + (152,131,1,1,0,'228V Pine Way S',228,'V',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Rubicon',1,1048,NULL,'53078',NULL,1228,43.3182,-88.45169,0,NULL,NULL,62), + (153,20,1,1,0,'228V Pine Way S',228,'V',NULL,'Pine','Way','S',NULL,NULL,NULL,NULL,'Rubicon',1,1048,NULL,'53078',NULL,1228,43.3182,-88.45169,0,NULL,NULL,62), + (154,37,1,0,0,'101I Main Ave SW',101,'I',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stoddard',1,1048,NULL,'54658',NULL,1228,43.68804,-91.19665,0,NULL,NULL,63), + (155,162,1,1,0,'101I Main Ave SW',101,'I',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stoddard',1,1048,NULL,'54658',NULL,1228,43.68804,-91.19665,0,NULL,NULL,63), + (156,4,1,1,0,'101I Main Ave SW',101,'I',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stoddard',1,1048,NULL,'54658',NULL,1228,43.68804,-91.19665,0,NULL,NULL,63), + (157,78,1,1,0,'101I Main Ave SW',101,'I',NULL,'Main','Ave','SW',NULL,NULL,NULL,NULL,'Stoddard',1,1048,NULL,'54658',NULL,1228,43.68804,-91.19665,0,NULL,NULL,63), + (158,104,1,1,0,'841K Caulder Ave S',841,'K',NULL,'Caulder','Ave','S',NULL,NULL,NULL,NULL,'Bowman',1,1009,NULL,'30624',NULL,1228,34.193943,-83.03375,0,NULL,NULL,64), + (159,69,1,1,0,'841K Caulder Ave S',841,'K',NULL,'Caulder','Ave','S',NULL,NULL,NULL,NULL,'Bowman',1,1009,NULL,'30624',NULL,1228,34.193943,-83.03375,0,NULL,NULL,64), + (160,35,1,1,0,'841K Caulder Ave S',841,'K',NULL,'Caulder','Ave','S',NULL,NULL,NULL,NULL,'Bowman',1,1009,NULL,'30624',NULL,1228,34.193943,-83.03375,0,NULL,NULL,64), + (161,40,1,1,0,'314K Maple Blvd N',314,'K',NULL,'Maple','Blvd','N',NULL,NULL,NULL,NULL,'Victoria',1,1045,NULL,'23974',NULL,1228,36.987595,-78.23285,0,NULL,NULL,NULL), + (162,72,1,1,0,'66C Beech Way N',66,'C',NULL,'Beech','Way','N',NULL,NULL,NULL,NULL,'Middle Island',1,1031,NULL,'11953',NULL,1228,40.886267,-72.9552,0,NULL,NULL,65), + (163,36,1,0,0,'66C Beech Way N',66,'C',NULL,'Beech','Way','N',NULL,NULL,NULL,NULL,'Middle Island',1,1031,NULL,'11953',NULL,1228,40.886267,-72.9552,0,NULL,NULL,65), + (164,110,1,1,0,'66C Beech Way N',66,'C',NULL,'Beech','Way','N',NULL,NULL,NULL,NULL,'Middle Island',1,1031,NULL,'11953',NULL,1228,40.886267,-72.9552,0,NULL,NULL,65), + (165,177,1,1,0,'654U Jackson Rd NW',654,'U',NULL,'Jackson','Rd','NW',NULL,NULL,NULL,NULL,'Fort Lauderdale',1,1008,NULL,'33340',NULL,1228,26.145724,-80.448254,0,NULL,NULL,NULL), + (166,18,1,1,0,'436V Martin Luther King Pl S',436,'V',NULL,'Martin Luther King','Pl','S',NULL,NULL,NULL,NULL,'Odenton',1,1019,NULL,'21113',NULL,1228,39.079902,-76.70867,0,NULL,NULL,66), + (167,111,1,1,0,'436V Martin Luther King Pl S',436,'V',NULL,'Martin Luther King','Pl','S',NULL,NULL,NULL,NULL,'Odenton',1,1019,NULL,'21113',NULL,1228,39.079902,-76.70867,0,NULL,NULL,66), + (168,3,1,1,0,'436V Martin Luther King Pl S',436,'V',NULL,'Martin Luther King','Pl','S',NULL,NULL,NULL,NULL,'Odenton',1,1019,NULL,'21113',NULL,1228,39.079902,-76.70867,0,NULL,NULL,66), + (169,167,1,1,0,'436V Martin Luther King Pl S',436,'V',NULL,'Martin Luther King','Pl','S',NULL,NULL,NULL,NULL,'Odenton',1,1019,NULL,'21113',NULL,1228,39.079902,-76.70867,0,NULL,NULL,66), + (170,128,1,1,0,'876K Lincoln Path NW',876,'K',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kalamazoo',1,1021,NULL,'49004',NULL,1228,42.330089,-85.56635,0,NULL,NULL,67), + (171,201,1,1,0,'876K Lincoln Path NW',876,'K',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kalamazoo',1,1021,NULL,'49004',NULL,1228,42.330089,-85.56635,0,NULL,NULL,67), + (172,143,1,0,0,'876K Lincoln Path NW',876,'K',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kalamazoo',1,1021,NULL,'49004',NULL,1228,42.330089,-85.56635,0,NULL,NULL,67), + (173,159,1,1,0,'876K Lincoln Path NW',876,'K',NULL,'Lincoln','Path','NW',NULL,NULL,NULL,NULL,'Kalamazoo',1,1021,NULL,'49004',NULL,1228,42.330089,-85.56635,0,NULL,NULL,67), + (174,158,1,1,0,'349P Dowlen Pl N',349,'P',NULL,'Dowlen','Pl','N',NULL,NULL,NULL,NULL,'Waverly',1,1045,NULL,'23891',NULL,1228,36.909845,-77.286287,0,NULL,NULL,68), + (175,192,1,1,0,'349P Dowlen Pl N',349,'P',NULL,'Dowlen','Pl','N',NULL,NULL,NULL,NULL,'Waverly',1,1045,NULL,'23891',NULL,1228,36.909845,-77.286287,0,NULL,NULL,68), + (176,191,1,1,0,'349P Dowlen Pl N',349,'P',NULL,'Dowlen','Pl','N',NULL,NULL,NULL,NULL,'Waverly',1,1045,NULL,'23891',NULL,1228,36.909845,-77.286287,0,NULL,NULL,68), + (177,185,1,1,0,'349P Dowlen Pl N',349,'P',NULL,'Dowlen','Pl','N',NULL,NULL,NULL,NULL,'Waverly',1,1045,NULL,'23891',NULL,1228,36.909845,-77.286287,0,NULL,NULL,68), + (178,127,1,1,0,'942R States Path SE',942,'R',NULL,'States','Path','SE',NULL,NULL,NULL,NULL,'Rothschild',1,1048,NULL,'54474',NULL,1228,44.885168,-89.61922,0,NULL,NULL,69), + (179,26,1,1,0,'942R States Path SE',942,'R',NULL,'States','Path','SE',NULL,NULL,NULL,NULL,'Rothschild',1,1048,NULL,'54474',NULL,1228,44.885168,-89.61922,0,NULL,NULL,69), + (180,43,1,1,0,'942R States Path SE',942,'R',NULL,'States','Path','SE',NULL,NULL,NULL,NULL,'Rothschild',1,1048,NULL,'54474',NULL,1228,44.885168,-89.61922,0,NULL,NULL,69), + (181,146,1,1,0,'725E Northpoint Pl N',725,'E',NULL,'Northpoint','Pl','N',NULL,NULL,NULL,NULL,'East Berne',1,1031,NULL,'12059',NULL,1228,42.621933,-74.05574,0,NULL,NULL,NULL), + (182,NULL,1,1,1,'14S El Camino Way E',14,'S',NULL,'El Camino','Way',NULL,NULL,NULL,NULL,NULL,'Collinsville',NULL,1006,NULL,'6022',NULL,1228,41.8328,-72.9253,0,NULL,NULL,NULL), + (183,NULL,1,1,1,'11B Woodbridge Path SW',11,'B',NULL,'Woodbridge','Path',NULL,NULL,NULL,NULL,NULL,'Dayton',NULL,1034,NULL,'45417',NULL,1228,39.7531,-84.2471,0,NULL,NULL,NULL), + (184,NULL,1,1,1,'581O Lincoln Dr SW',581,'O',NULL,'Lincoln','Dr',NULL,NULL,NULL,NULL,NULL,'Santa Fe',NULL,1030,NULL,'87594',NULL,1228,35.5212,-105.982,0,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_address` ENABLE KEYS */; UNLOCK TABLES; @@ -1937,208 +1942,208 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contact` WRITE; /*!40000 ALTER TABLE `civicrm_contact` DISABLE KEYS */; INSERT INTO `civicrm_contact` (`id`, `contact_type`, `contact_sub_type`, `do_not_email`, `do_not_phone`, `do_not_mail`, `do_not_sms`, `do_not_trade`, `is_opt_out`, `legal_identifier`, `external_identifier`, `sort_name`, `display_name`, `nick_name`, `legal_name`, `image_URL`, `preferred_communication_method`, `preferred_language`, `preferred_mail_format`, `hash`, `api_key`, `source`, `first_name`, `middle_name`, `last_name`, `prefix_id`, `suffix_id`, `formal_title`, `communication_style_id`, `email_greeting_id`, `email_greeting_custom`, `email_greeting_display`, `postal_greeting_id`, `postal_greeting_custom`, `postal_greeting_display`, `addressee_id`, `addressee_custom`, `addressee_display`, `job_title`, `gender_id`, `birth_date`, `is_deceased`, `deceased_date`, `household_name`, `primary_contact_id`, `organization_name`, `sic_code`, `user_unique_id`, `employer_id`, `is_deleted`, `created_date`, `modified_date`) VALUES - (1,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Default Organization','Default Organization',NULL,'Default Organization',NULL,NULL,NULL,'Both',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,'Default Organization',NULL,NULL,NULL,0,NULL,'2022-04-14 03:30:06'), - (2,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Alida','Dr. Alida Yadav',NULL,NULL,NULL,NULL,NULL,'Both','3582338734',NULL,'Sample Data','Alida','X','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Dr. Alida Yadav',NULL,NULL,'1990-09-28',0,NULL,NULL,NULL,'Campbellsville Sports Association',NULL,NULL,72,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jensenb@fakemail.com','jensenb@fakemail.com',NULL,NULL,NULL,'3',NULL,'Both','1890258510',NULL,'Sample Data',NULL,NULL,NULL,3,2,NULL,NULL,1,NULL,'Dear jensenb@fakemail.com',1,NULL,'Dear jensenb@fakemail.com',1,NULL,'jensenb@fakemail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (4,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Roland','Roland Müller Sr.',NULL,NULL,NULL,'1',NULL,'Both','1311591085',NULL,'Sample Data','Roland','','Müller',NULL,2,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Roland Müller Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (5,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Barkley, Kenny','Dr. Kenny Barkley Jr.',NULL,NULL,NULL,'4',NULL,'Both','3409558741',NULL,'Sample Data','Kenny','X','Barkley',4,1,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Dr. Kenny Barkley Jr.',NULL,2,'1983-07-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (6,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Esta','Esta Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','1897476',NULL,'Sample Data','Esta','S','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Esta Dimitrov',NULL,1,'1986-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (7,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terry, Kenny','Mr. Kenny Terry',NULL,NULL,NULL,NULL,NULL,'Both','1180301319',NULL,'Sample Data','Kenny','U','Terry',3,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Mr. Kenny Terry',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (8,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Kandace','Kandace Deforest',NULL,NULL,NULL,'1',NULL,'Both','1547944287',NULL,'Sample Data','Kandace','R','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,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (9,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jones, Allen','Mr. Allen Jones III',NULL,NULL,NULL,NULL,NULL,'Both','1899434814',NULL,'Sample Data','Allen','','Jones',3,4,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Mr. Allen Jones III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (10,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Terrell, Angelika','Ms. Angelika Terrell',NULL,NULL,NULL,NULL,NULL,'Both','1430135515',NULL,'Sample Data','Angelika','','Terrell',2,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Ms. Angelika Terrell',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (11,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell, Roland','Mr. Roland Terrell',NULL,NULL,NULL,'2',NULL,'Both','731518019',NULL,'Sample Data','Roland','N','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Mr. Roland Terrell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Brittney','Brittney Reynolds',NULL,NULL,NULL,'5',NULL,'Both','2908689139',NULL,'Sample Data','Brittney','H','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Reynolds',NULL,1,'2014-04-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (13,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Rosario','Rosario Blackwell',NULL,NULL,NULL,'2',NULL,'Both','212312556',NULL,'Sample Data','Rosario','','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Blackwell',NULL,NULL,'1978-08-06',0,NULL,NULL,NULL,'Ohio Legal Services',NULL,NULL,129,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (14,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Roberts, Bob','Dr. Bob Roberts II',NULL,NULL,NULL,'1',NULL,'Both','1182740119',NULL,'Sample Data','Bob','','Roberts',4,3,NULL,NULL,1,NULL,'Dear Bob',1,NULL,'Dear Bob',1,NULL,'Dr. Bob Roberts II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (15,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'González, Margaret','Mrs. Margaret González',NULL,NULL,NULL,NULL,NULL,'Both','361656632',NULL,'Sample Data','Margaret','Q','González',1,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Mrs. Margaret González',NULL,NULL,'1979-05-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (16,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Jay','Mr. Jay Adams',NULL,NULL,NULL,'1',NULL,'Both','1692061820',NULL,'Sample Data','Jay','Y','Adams',3,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Mr. Jay Adams',NULL,2,'1957-05-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (17,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Global Poetry Solutions','Global Poetry Solutions',NULL,NULL,NULL,NULL,NULL,'Both','3307139454',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Poetry Solutions',NULL,NULL,NULL,0,NULL,NULL,167,'Global Poetry Solutions',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (18,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wilson, Sonny','Sonny Wilson Sr.',NULL,NULL,NULL,'1',NULL,'Both','1288997537',NULL,'Sample Data','Sonny','','Wilson',NULL,2,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Wilson Sr.',NULL,2,'1987-03-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (19,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Ashley','Ashley Deforest',NULL,NULL,NULL,NULL,NULL,'Both','4128046694',NULL,'Sample Data','Ashley','D','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Deforest',NULL,1,'1984-02-05',0,NULL,NULL,NULL,'Arizona Literacy Alliance',NULL,NULL,66,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (20,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest family','Deforest family',NULL,NULL,NULL,NULL,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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (21,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Kathleen','Kathleen Barkley',NULL,NULL,NULL,NULL,NULL,'Both','560974379',NULL,'Sample Data','Kathleen','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Barkley',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (22,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Roberts, Truman','Truman Roberts',NULL,NULL,NULL,NULL,NULL,'Both','3664937465',NULL,'Sample Data','Truman','P','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Truman Roberts',NULL,NULL,'1974-12-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Lincoln','Dr. Lincoln Bachman',NULL,NULL,NULL,'3',NULL,'Both','3974009485',NULL,'Sample Data','Lincoln','','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Dr. Lincoln Bachman',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (24,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Jina','Jina Jameson',NULL,NULL,NULL,NULL,NULL,'Both','1333283460',NULL,'Sample Data','Jina','K','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Jameson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (25,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cruz, Bryon','Bryon Cruz',NULL,NULL,NULL,'2',NULL,'Both','2932788589',NULL,'Sample Data','Bryon','X','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Cruz',NULL,2,NULL,0,NULL,NULL,NULL,'Covington Software Solutions',NULL,NULL,193,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (26,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson, Mei','Mei Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2672585422',NULL,'Sample Data','Mei','M','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Jameson',NULL,NULL,'2003-10-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'leem89@sample.co.nz','leem89@sample.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','4025311974',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear leem89@sample.co.nz',1,NULL,'Dear leem89@sample.co.nz',1,NULL,'leem89@sample.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (28,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Craig','Mr. Craig Samuels Sr.',NULL,NULL,NULL,'4',NULL,'Both','810726824',NULL,'Sample Data','Craig','','Samuels',3,2,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Mr. Craig Samuels Sr.',NULL,NULL,'1996-09-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (29,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Brent','Brent Adams',NULL,NULL,NULL,NULL,NULL,'Both','2406910115',NULL,'Sample Data','Brent','','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Adams',NULL,2,'1996-04-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (30,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Scarlet','Mrs. Scarlet Wilson',NULL,NULL,NULL,'5',NULL,'Both','1106922860',NULL,'Sample Data','Scarlet','M','Wilson',1,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Mrs. Scarlet Wilson',NULL,1,'1967-11-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (31,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bh.wattson45@sample.info','bh.wattson45@sample.info',NULL,NULL,NULL,NULL,NULL,'Both','3513321799',NULL,'Sample Data',NULL,NULL,NULL,2,NULL,NULL,NULL,1,NULL,'Dear bh.wattson45@sample.info',1,NULL,'Dear bh.wattson45@sample.info',1,NULL,'bh.wattson45@sample.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (32,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Müller, Claudio','Dr. Claudio Müller Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2143910765',NULL,'Sample Data','Claudio','','Müller',4,2,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Dr. Claudio Müller Sr.',NULL,2,'1961-10-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (33,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jensen, Shauna','Shauna Jensen',NULL,NULL,NULL,'1',NULL,'Both','108136044',NULL,'Sample Data','Shauna','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Jensen',NULL,1,'1989-06-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (34,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'dimitrov.y.sherman74@sample.org','dimitrov.y.sherman74@sample.org',NULL,NULL,NULL,'4',NULL,'Both','2602852671',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear dimitrov.y.sherman74@sample.org',1,NULL,'Dear dimitrov.y.sherman74@sample.org',1,NULL,'dimitrov.y.sherman74@sample.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (35,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Greeneville Technology Network','Greeneville Technology Network',NULL,NULL,NULL,'2',NULL,'Both','2405538225',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Greeneville Technology Network',NULL,NULL,NULL,0,NULL,NULL,NULL,'Greeneville Technology Network',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (36,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Landon','Landon Smith',NULL,NULL,NULL,'3',NULL,'Both','1605229740',NULL,'Sample Data','Landon','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Landon Smith',NULL,2,NULL,1,'2021-04-14',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (37,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samson, Jacob','Jacob Samson',NULL,NULL,NULL,'4',NULL,'Both','1567006775',NULL,'Sample Data','Jacob','','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Samson',NULL,2,'1986-01-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (38,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Ashley','Dr. Ashley Yadav',NULL,NULL,NULL,NULL,NULL,'Both','4195605846',NULL,'Sample Data','Ashley','','Yadav',4,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Yadav',NULL,NULL,'1940-07-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Erik','Erik Roberts',NULL,NULL,NULL,'1',NULL,'Both','210960325',NULL,'Sample Data','Erik','C','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Roberts',NULL,2,'2005-08-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (40,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Lou','Dr. Lou Blackwell',NULL,NULL,NULL,'3',NULL,'Both','2525168848',NULL,'Sample Data','Lou','A','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Dr. Lou Blackwell',NULL,2,'1968-06-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (41,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,'5',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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (42,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Wilson family','Wilson family',NULL,NULL,NULL,'4',NULL,'Both','350510798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wilson family',5,NULL,'Dear Wilson family',2,NULL,'Wilson family',NULL,NULL,NULL,0,NULL,'Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (43,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Nicole','Nicole Jones',NULL,NULL,NULL,'5',NULL,'Both','1891539525',NULL,'Sample Data','Nicole','J','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Jones',NULL,NULL,'2013-12-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (44,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'olsen-jensen.d.omar@testing.org','olsen-jensen.d.omar@testing.org',NULL,NULL,NULL,'4',NULL,'Both','1350075038',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear olsen-jensen.d.omar@testing.org',1,NULL,'Dear olsen-jensen.d.omar@testing.org',1,NULL,'olsen-jensen.d.omar@testing.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (45,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Louisiana Agriculture Network','Louisiana Agriculture Network',NULL,NULL,NULL,NULL,NULL,'Both','2554035526',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Louisiana Agriculture Network',NULL,NULL,NULL,0,NULL,NULL,110,'Louisiana Agriculture Network',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Shad','Dr. Shad Roberts Jr.',NULL,NULL,NULL,NULL,NULL,'Both','808928953',NULL,'Sample Data','Shad','','Roberts',4,1,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Dr. Shad Roberts Jr.',NULL,NULL,'1996-12-02',0,NULL,NULL,NULL,'United Music Systems',NULL,NULL,168,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (47,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,'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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (48,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Cooper, Kandace','Kandace Cooper',NULL,NULL,NULL,'5',NULL,'Both','3097920317',NULL,'Sample Data','Kandace','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Kandace',1,NULL,'Dear Kandace',1,NULL,'Kandace Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Maxwell','Mr. Maxwell Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','2461663646',NULL,'Sample Data','Maxwell','Q','Dimitrov',3,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Mr. Maxwell Dimitrov',NULL,NULL,'1960-11-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (50,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Kenny','Kenny Deforest II',NULL,NULL,NULL,'3',NULL,'Both','2815041303',NULL,'Sample Data','Kenny','','Deforest',NULL,3,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny Deforest II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (51,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Cruz, Bryon','Dr. Bryon Cruz III',NULL,NULL,NULL,NULL,NULL,'Both','2932788589',NULL,'Sample Data','Bryon','D','Cruz',4,4,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Dr. Bryon Cruz III',NULL,2,NULL,0,NULL,NULL,NULL,'California Software Association',NULL,NULL,128,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Billy','Mr. Billy Deforest Sr.',NULL,NULL,NULL,'2',NULL,'Both','3518919730',NULL,'Sample Data','Billy','A','Deforest',3,2,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Mr. Billy Deforest Sr.',NULL,NULL,'1976-07-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (53,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Carlos','Mr. Carlos Yadav',NULL,NULL,NULL,'5',NULL,'Both','2288324304',NULL,'Sample Data','Carlos','D','Yadav',3,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Mr. Carlos Yadav',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (54,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'reynolds.claudio92@airmail.info','reynolds.claudio92@airmail.info',NULL,NULL,NULL,'5',NULL,'Both','3455273165',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear reynolds.claudio92@airmail.info',1,NULL,'Dear reynolds.claudio92@airmail.info',1,NULL,'reynolds.claudio92@airmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (55,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wattson-Prentice, Delana','Mrs. Delana Wattson-Prentice',NULL,NULL,NULL,'5',NULL,'Both','3075095933',NULL,'Sample Data','Delana','','Wattson-Prentice',1,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Mrs. Delana Wattson-Prentice',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (56,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Santina','Ms. Santina McReynolds',NULL,NULL,NULL,'4',NULL,'Both','3055639463',NULL,'Sample Data','Santina','O','McReynolds',2,NULL,NULL,NULL,1,NULL,'Dear Santina',1,NULL,'Dear Santina',1,NULL,'Ms. Santina McReynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (57,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Barry','Dr. Barry Blackwell Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2851899457',NULL,'Sample Data','Barry','C','Blackwell',4,1,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Dr. Barry Blackwell Jr.',NULL,2,'1947-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (58,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav, Elizabeth','Ms. Elizabeth Yadav',NULL,NULL,NULL,NULL,NULL,'Both','2557068242',NULL,'Sample Data','Elizabeth','','Yadav',2,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Ms. Elizabeth Yadav',NULL,1,'1982-04-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (59,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wagner, Valene','Valene Wagner',NULL,NULL,NULL,NULL,NULL,'Both','289435267',NULL,'Sample Data','Valene','U','Wagner',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Wagner',NULL,NULL,'1980-12-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (60,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Parker, Landon','Mr. Landon Parker II',NULL,NULL,NULL,NULL,NULL,'Both','372152677',NULL,'Sample Data','Landon','Z','Parker',3,3,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Mr. Landon Parker II',NULL,2,NULL,0,NULL,NULL,NULL,'Warsaw Empowerment Alliance',NULL,NULL,77,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (61,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'mi.reynolds34@notmail.info','mi.reynolds34@notmail.info',NULL,NULL,NULL,NULL,NULL,'Both','1783079688',NULL,'Sample Data',NULL,NULL,NULL,3,4,NULL,NULL,1,NULL,'Dear mi.reynolds34@notmail.info',1,NULL,'Dear mi.reynolds34@notmail.info',1,NULL,'mi.reynolds34@notmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (62,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Kathlyn','Dr. Kathlyn Jacobs',NULL,NULL,NULL,'3',NULL,'Both','1747055746',NULL,'Sample Data','Kathlyn','','Jacobs',4,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Dr. Kathlyn Jacobs',NULL,1,'1938-02-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (63,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Wilson, Tanya','Tanya Wilson',NULL,NULL,NULL,NULL,NULL,'Both','147078466',NULL,'Sample Data','Tanya','L','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Tanya',1,NULL,'Dear Tanya',1,NULL,'Tanya Wilson',NULL,1,'1967-10-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (64,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Sharyn','Sharyn DÃaz',NULL,NULL,NULL,'4',NULL,'Both','4129279229',NULL,'Sample Data','Sharyn','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn DÃaz',NULL,NULL,'1972-04-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (65,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds-ÅÄ…chowski, Delana','Mrs. Delana McReynolds-ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','581451099',NULL,'Sample Data','Delana','','McReynolds-ÅÄ…chowski',1,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Mrs. Delana McReynolds-ÅÄ…chowski',NULL,NULL,NULL,0,NULL,NULL,NULL,'Idaho Technology Partnership',NULL,NULL,79,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (66,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Arizona Literacy Alliance','Arizona Literacy Alliance',NULL,NULL,NULL,NULL,NULL,'Both','3776701476',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Arizona Literacy Alliance',NULL,NULL,NULL,0,NULL,NULL,19,'Arizona Literacy Alliance',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (67,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'kiarac93@fakemail.biz','kiarac93@fakemail.biz',NULL,NULL,NULL,NULL,NULL,'Both','2618244901',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear kiarac93@fakemail.biz',1,NULL,'Dear kiarac93@fakemail.biz',1,NULL,'kiarac93@fakemail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (68,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Toby','Toby Zope III',NULL,NULL,NULL,NULL,NULL,'Both','1944190028',NULL,'Sample Data','Toby','','Zope',NULL,4,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Zope III',NULL,2,'1976-12-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Kiara','Mrs. Kiara Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3345956952',NULL,'Sample Data','Kiara','','Samuels',1,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Mrs. Kiara Samuels',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (70,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Blackwell family','Blackwell family',NULL,NULL,NULL,NULL,NULL,'Both','3218641510',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Blackwell family',5,NULL,'Dear Blackwell family',2,NULL,'Blackwell family',NULL,NULL,NULL,0,NULL,'Blackwell family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (71,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Olsen, Allen','Dr. Allen Olsen Sr.',NULL,NULL,NULL,'4',NULL,'Both','1167600781',NULL,'Sample Data','Allen','M','Olsen',4,2,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Dr. Allen Olsen Sr.',NULL,2,'1983-11-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (72,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Campbellsville Sports Association','Campbellsville Sports Association',NULL,NULL,NULL,NULL,NULL,'Both','4247621830',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Campbellsville Sports Association',NULL,NULL,NULL,0,NULL,NULL,2,'Campbellsville Sports Association',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (73,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Wattson-Prentice family','Wattson-Prentice family',NULL,NULL,NULL,'1',NULL,'Both','445187270',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wattson-Prentice family',5,NULL,'Dear Wattson-Prentice family',2,NULL,'Wattson-Prentice family',NULL,NULL,NULL,0,NULL,'Wattson-Prentice family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (74,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'iz.deforest@notmail.net','iz.deforest@notmail.net',NULL,NULL,NULL,NULL,NULL,'Both','2621878542',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear iz.deforest@notmail.net',1,NULL,'Dear iz.deforest@notmail.net',1,NULL,'iz.deforest@notmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (75,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'herminiar@lol.net','herminiar@lol.net',NULL,NULL,NULL,NULL,NULL,'Both','2227091884',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear herminiar@lol.net',1,NULL,'Dear herminiar@lol.net',1,NULL,'herminiar@lol.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (76,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samson, Kacey','Kacey Samson',NULL,NULL,NULL,'4',NULL,'Both','277653729',NULL,'Sample Data','Kacey','E','Samson',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Samson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (77,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Warsaw Empowerment Alliance','Warsaw Empowerment Alliance',NULL,NULL,NULL,'2',NULL,'Both','834694959',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Warsaw Empowerment Alliance',NULL,NULL,NULL,0,NULL,NULL,60,'Warsaw Empowerment Alliance',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'chowski.troy@lol.net','chowski.troy@lol.net',NULL,NULL,NULL,NULL,NULL,'Both','3388145836',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear chowski.troy@lol.net',1,NULL,'Dear chowski.troy@lol.net',1,NULL,'chowski.troy@lol.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (79,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Idaho Technology Partnership','Idaho Technology Partnership',NULL,NULL,NULL,NULL,NULL,'Both','2071637648',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Idaho Technology Partnership',NULL,NULL,NULL,0,NULL,NULL,65,'Idaho Technology Partnership',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (80,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'errollee66@infomail.co.nz','errollee66@infomail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','2027008997',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear errollee66@infomail.co.nz',1,NULL,'Dear errollee66@infomail.co.nz',1,NULL,'errollee66@infomail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (81,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Betty','Betty Barkley',NULL,NULL,NULL,'3',NULL,'Both','1739915993',NULL,'Sample Data','Betty','K','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty Barkley',NULL,1,'1977-04-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (82,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'ÅÄ…chowski, Winford','Winford ÅÄ…chowski Sr.',NULL,NULL,NULL,'1',NULL,'Both','2479013986',NULL,'Sample Data','Winford','Y','ÅÄ…chowski',NULL,2,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Winford ÅÄ…chowski Sr.',NULL,NULL,'1965-06-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (83,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Dimitrov, Elizabeth','Mrs. Elizabeth Dimitrov',NULL,NULL,NULL,'1',NULL,'Both','2520947662',NULL,'Sample Data','Elizabeth','','Dimitrov',1,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Mrs. Elizabeth Dimitrov',NULL,NULL,'1985-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (84,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Illinois Action Initiative','Illinois Action Initiative',NULL,NULL,NULL,NULL,NULL,'Both','1242971764',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Illinois Action Initiative',NULL,NULL,NULL,0,NULL,NULL,186,'Illinois Action Initiative',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (85,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen, Kiara','Kiara Jensen',NULL,NULL,NULL,'1',NULL,'Both','4228592498',NULL,'Sample Data','Kiara','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kiara',1,NULL,'Dear Kiara',1,NULL,'Kiara Jensen',NULL,1,'1981-04-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (86,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Teresa','Teresa Yadav',NULL,NULL,NULL,'5',NULL,'Both','2032766377',NULL,'Sample Data','Teresa','U','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Yadav',NULL,1,'2000-02-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (87,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'chowskij@notmail.net','chowskij@notmail.net',NULL,NULL,NULL,NULL,NULL,'Both','599175915',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear chowskij@notmail.net',1,NULL,'Dear chowskij@notmail.net',1,NULL,'chowskij@notmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (88,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Reynolds, Kathleen','Kathleen Reynolds',NULL,NULL,NULL,'3',NULL,'Both','3830837531',NULL,'Sample Data','Kathleen','Z','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Reynolds',NULL,1,'1976-02-19',0,NULL,NULL,NULL,'Van Ness Legal Services',NULL,NULL,155,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (89,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Blackwell, Ray','Dr. Ray Blackwell II',NULL,NULL,NULL,'1',NULL,'Both','386853647',NULL,'Sample Data','Ray','','Blackwell',4,3,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Dr. Ray Blackwell II',NULL,2,'1942-07-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (90,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Jones family','Jones family',NULL,NULL,NULL,NULL,NULL,'Both','1110516799',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Jones family',5,NULL,'Dear Jones family',2,NULL,'Jones family',NULL,NULL,NULL,0,NULL,'Jones family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Kathleen','Kathleen Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2978095571',NULL,'Sample Data','Kathleen','H','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Cooper',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (92,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Friends Software Partners','Friends Software Partners',NULL,NULL,NULL,NULL,NULL,'Both','2895160443',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Friends Software Partners',NULL,NULL,NULL,0,NULL,NULL,NULL,'Friends Software Partners',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (93,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Felisha','Felisha ÅÄ…chowski',NULL,NULL,NULL,'3',NULL,'Both','3530653717',NULL,'Sample Data','Felisha','W','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha ÅÄ…chowski',NULL,1,'1979-02-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (94,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Margaret','Margaret Smith',NULL,NULL,NULL,NULL,NULL,'Both','2299633414',NULL,'Sample Data','Margaret','M','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Margaret Smith',NULL,1,'1984-10-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (95,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jones, Russell','Mr. Russell Jones Sr.',NULL,NULL,NULL,NULL,NULL,'Both','3767927362',NULL,'Sample Data','Russell','','Jones',3,2,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Mr. Russell Jones Sr.',NULL,2,'1962-12-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (96,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'roberts.russell@testing.org','roberts.russell@testing.org',NULL,NULL,NULL,NULL,NULL,'Both','667385010',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear roberts.russell@testing.org',1,NULL,'Dear roberts.russell@testing.org',1,NULL,'roberts.russell@testing.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (97,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Rodrigo','Rodrigo Deforest',NULL,NULL,NULL,NULL,NULL,'Both','560403570',NULL,'Sample Data','Rodrigo','W','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Deforest',NULL,2,'1939-05-30',1,'2021-06-17',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (98,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Damaris','Damaris Robertson',NULL,NULL,NULL,'4',NULL,'Both','2221222554',NULL,'Sample Data','Damaris','Z','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Robertson',NULL,NULL,'1964-08-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (99,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Claudio','Dr. Claudio Dimitrov III',NULL,NULL,NULL,NULL,NULL,'Both','1549704109',NULL,'Sample Data','Claudio','','Dimitrov',4,4,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Dr. Claudio Dimitrov III',NULL,NULL,'1967-07-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (100,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Justina','Justina Deforest',NULL,NULL,NULL,NULL,NULL,'Both','382362918',NULL,'Sample Data','Justina','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Deforest',NULL,NULL,'1997-01-31',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (101,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson, Lincoln','Mr. Lincoln Wattson',NULL,NULL,NULL,NULL,NULL,'Both','3929927020',NULL,'Sample Data','Lincoln','F','Wattson',3,NULL,NULL,NULL,1,NULL,'Dear Lincoln',1,NULL,'Dear Lincoln',1,NULL,'Mr. Lincoln Wattson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (102,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Kacey','Kacey Deforest',NULL,NULL,NULL,'1',NULL,'Both','3280257752',NULL,'Sample Data','Kacey','N','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Deforest',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (103,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Parker, Barry','Barry Parker II',NULL,NULL,NULL,'1',NULL,'Both','259830884',NULL,'Sample Data','Barry','','Parker',NULL,3,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Parker II',NULL,NULL,'1969-03-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Ashley','Ashley McReynolds',NULL,NULL,NULL,'5',NULL,'Both','68872917',NULL,'Sample Data','Ashley','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley McReynolds',NULL,NULL,'1983-01-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (105,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Elizabeth','Elizabeth Terrell',NULL,NULL,NULL,NULL,NULL,'Both','804464213',NULL,'Sample Data','Elizabeth','','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Terrell',NULL,1,'1971-03-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (106,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Erik','Dr. Erik Reynolds II',NULL,NULL,NULL,NULL,NULL,'Both','2291582493',NULL,'Sample Data','Erik','','Reynolds',4,3,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Dr. Erik Reynolds II',NULL,2,'1981-08-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (107,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Lee-Cooper, Carlos','Carlos Lee-Cooper',NULL,NULL,NULL,'3',NULL,'Both','3485162509',NULL,'Sample Data','Carlos','','Lee-Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Lee-Cooper',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (108,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Waunakee Poetry Systems','Waunakee Poetry Systems',NULL,NULL,NULL,NULL,NULL,'Both','3097118381',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Waunakee Poetry Systems',NULL,NULL,NULL,0,NULL,NULL,185,'Waunakee Poetry Systems',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (109,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Ashley','Ashley ÅÄ…chowski II',NULL,NULL,NULL,'4',NULL,'Both','2118847074',NULL,'Sample Data','Ashley','','ÅÄ…chowski',NULL,3,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley ÅÄ…chowski II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Norris','Norris Wilson',NULL,NULL,NULL,'1',NULL,'Both','1089092056',NULL,'Sample Data','Norris','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Norris Wilson',NULL,NULL,'1995-11-04',0,NULL,NULL,NULL,'Louisiana Agriculture Network',NULL,NULL,45,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (111,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Lee-Cooper, Megan','Mrs. Megan Lee-Cooper',NULL,NULL,NULL,NULL,NULL,'Both','3870679573',NULL,'Sample Data','Megan','Z','Lee-Cooper',1,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Mrs. Megan Lee-Cooper',NULL,NULL,'1991-04-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (112,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'irisp@fakemail.biz','irisp@fakemail.biz',NULL,NULL,NULL,'2',NULL,'Both','522408496',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear irisp@fakemail.biz',1,NULL,'Dear irisp@fakemail.biz',1,NULL,'irisp@fakemail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (113,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Russell','Russell Jensen II',NULL,NULL,NULL,NULL,NULL,'Both','1300991464',NULL,'Sample Data','Russell','R','Jensen',NULL,3,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Jensen II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (114,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Laplace Education Services','Laplace Education Services',NULL,NULL,NULL,NULL,NULL,'Both','1652245600',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Laplace Education Services',NULL,NULL,NULL,0,NULL,NULL,150,'Laplace Education Services',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (115,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Samson, Rosario','Dr. Rosario Samson',NULL,NULL,NULL,NULL,NULL,'Both','2618822778',NULL,'Sample Data','Rosario','','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Dr. Rosario Samson',NULL,2,'1946-03-26',1,'2021-12-12',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (116,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Barry','Dr. Barry Blackwell',NULL,NULL,NULL,'2',NULL,'Both','2851899457',NULL,'Sample Data','Barry','','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Dr. Barry Blackwell',NULL,2,'1974-02-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (117,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Parker, Maxwell','Mr. Maxwell Parker III',NULL,NULL,NULL,NULL,NULL,'Both','2668760835',NULL,'Sample Data','Maxwell','C','Parker',3,4,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Mr. Maxwell Parker III',NULL,2,'1982-09-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (118,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Felisha','Dr. Felisha Samson',NULL,NULL,NULL,NULL,NULL,'Both','1987564812',NULL,'Sample Data','Felisha','','Samson',4,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Dr. Felisha Samson',NULL,1,'1950-09-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (119,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Ohio Advocacy Initiative','Ohio Advocacy Initiative',NULL,NULL,NULL,'1',NULL,'Both','961789765',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Ohio Advocacy Initiative',NULL,NULL,NULL,0,NULL,NULL,162,'Ohio Advocacy Initiative',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (120,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jacobs, Bryon','Mr. Bryon Jacobs',NULL,NULL,NULL,NULL,NULL,'Both','2100976885',NULL,'Sample Data','Bryon','','Jacobs',3,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Mr. Bryon Jacobs',NULL,2,'1998-06-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (121,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Valene','Valene Prentice',NULL,NULL,NULL,'1',NULL,'Both','2953436948',NULL,'Sample Data','Valene','','Prentice',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Prentice',NULL,1,'1965-12-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (122,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Landon','Dr. Landon Roberts Jr.',NULL,NULL,NULL,'5',NULL,'Both','83700418',NULL,'Sample Data','Landon','M','Roberts',4,1,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Dr. Landon Roberts Jr.',NULL,2,'1992-11-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (123,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel-Samuels, Betty','Mrs. Betty Patel-Samuels',NULL,NULL,NULL,'1',NULL,'Both','3345996502',NULL,'Sample Data','Betty','P','Patel-Samuels',1,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Mrs. Betty Patel-Samuels',NULL,NULL,'1957-08-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (124,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav family','Yadav family',NULL,NULL,NULL,'4',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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (125,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Jameson, Bryon','Bryon Jameson III',NULL,NULL,NULL,'1',NULL,'Both','2718998405',NULL,'Sample Data','Bryon','O','Jameson',NULL,4,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Jameson III',NULL,2,'1965-11-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (126,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Troy','Troy Samson Sr.',NULL,NULL,NULL,'4',NULL,'Both','4145447526',NULL,'Sample Data','Troy','S','Samson',NULL,2,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Samson Sr.',NULL,2,'1999-03-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (127,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski family','ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,'Both','2407077255',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski family',5,NULL,'Dear ÅÄ…chowski family',2,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (128,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'California Software Association','California Software Association',NULL,NULL,NULL,NULL,NULL,'Both','2561982224',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'California Software Association',NULL,NULL,NULL,0,NULL,NULL,51,'California Software Association',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (129,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Ohio Legal Services','Ohio Legal Services',NULL,NULL,NULL,NULL,NULL,'Both','443820992',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Ohio Legal Services',NULL,NULL,NULL,0,NULL,NULL,13,'Ohio Legal Services',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (130,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest-Barkley, Iris','Iris Deforest-Barkley',NULL,NULL,NULL,NULL,NULL,'Both','3744044018',NULL,'Sample Data','Iris','Q','Deforest-Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Deforest-Barkley',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (131,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Jones, Ray','Ray Jones III',NULL,NULL,NULL,'3',NULL,'Both','3868531541',NULL,'Sample Data','Ray','S','Jones',NULL,4,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray Jones III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (132,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'jensena74@testmail.com','jensena74@testmail.com',NULL,NULL,NULL,'4',NULL,'Both','4177506260',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear jensena74@testmail.com',1,NULL,'Dear jensena74@testmail.com',1,NULL,'jensena74@testmail.com',NULL,NULL,NULL,0,NULL,NULL,NULL,'Martin Luther King Legal Network',NULL,NULL,159,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson-Prentice, Jerome','Mr. Jerome Wattson-Prentice III',NULL,NULL,NULL,'2',NULL,'Both','458802801',NULL,'Sample Data','Jerome','W','Wattson-Prentice',3,4,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Mr. Jerome Wattson-Prentice III',NULL,2,'1982-09-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (134,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Müller, Erik','Erik Müller',NULL,NULL,NULL,'3',NULL,'Both','826359334',NULL,'Sample Data','Erik','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Müller',NULL,2,'1954-08-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (135,'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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (136,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds family','Reynolds family',NULL,NULL,NULL,NULL,NULL,'Both','4119726021',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Reynolds family',5,NULL,'Dear Reynolds family',2,NULL,'Reynolds family',NULL,NULL,NULL,0,NULL,'Reynolds family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (137,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Blackwell, Junko','Dr. Junko Blackwell',NULL,NULL,NULL,'3',NULL,'Both','1008682261',NULL,'Sample Data','Junko','','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Dr. Junko Blackwell',NULL,1,'1982-02-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (138,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Ivey','Mrs. Ivey ÅÄ…chowski',NULL,NULL,NULL,'3',NULL,'Both','118293942',NULL,'Sample Data','Ivey','U','ÅÄ…chowski',1,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Mrs. Ivey ÅÄ…chowski',NULL,1,'1985-01-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (139,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson-Roberts, Juliann','Mrs. Juliann Wattson-Roberts',NULL,NULL,NULL,NULL,NULL,'Both','3363612056',NULL,'Sample Data','Juliann','','Wattson-Roberts',1,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Mrs. Juliann Wattson-Roberts',NULL,NULL,'1967-11-20',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'clintchowski59@infomail.biz','clintchowski59@infomail.biz',NULL,NULL,NULL,'4',NULL,'Both','1427923778',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear clintchowski59@infomail.biz',1,NULL,'Dear clintchowski59@infomail.biz',1,NULL,'clintchowski59@infomail.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (141,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts family','Roberts family',NULL,NULL,NULL,NULL,NULL,'Both','2097305882',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Roberts family',5,NULL,'Dear Roberts family',2,NULL,'Roberts family',NULL,NULL,NULL,0,NULL,'Roberts family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (142,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'princessr21@example.co.in','princessr21@example.co.in',NULL,NULL,NULL,'5',NULL,'Both','1094326703',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear princessr21@example.co.in',1,NULL,'Dear princessr21@example.co.in',1,NULL,'princessr21@example.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (143,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'nielsen.jerome@testing.biz','nielsen.jerome@testing.biz',NULL,NULL,NULL,'1',NULL,'Both','928673549',NULL,'Sample Data',NULL,NULL,NULL,4,4,NULL,NULL,1,NULL,'Dear nielsen.jerome@testing.biz',1,NULL,'Dear nielsen.jerome@testing.biz',1,NULL,'nielsen.jerome@testing.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (144,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Clint','Clint Yadav Sr.',NULL,NULL,NULL,NULL,NULL,'Both','947157423',NULL,'Sample Data','Clint','','Yadav',NULL,2,NULL,NULL,1,NULL,'Dear Clint',1,NULL,'Dear Clint',1,NULL,'Clint Yadav Sr.',NULL,2,'2003-11-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (145,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Urban Advocacy Center','Urban Advocacy Center',NULL,NULL,NULL,NULL,NULL,'Both','4195756185',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Advocacy Center',NULL,NULL,NULL,0,NULL,NULL,189,'Urban Advocacy Center',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (146,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice-Reynolds, Bernadette','Ms. Bernadette Prentice-Reynolds',NULL,NULL,NULL,'5',NULL,'Both','597958727',NULL,'Sample Data','Bernadette','','Prentice-Reynolds',2,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Ms. Bernadette Prentice-Reynolds',NULL,1,'1963-04-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (147,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Bernadette','Bernadette Jameson',NULL,NULL,NULL,'3',NULL,'Both','1573122444',NULL,'Sample Data','Bernadette','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Bernadette',1,NULL,'Dear Bernadette',1,NULL,'Bernadette Jameson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (148,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Sanford','Mr. Sanford Wilson III',NULL,NULL,NULL,NULL,NULL,'Both','1265340885',NULL,'Sample Data','Sanford','F','Wilson',3,4,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Mr. Sanford Wilson III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (149,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov, Magan','Dr. Magan Ivanov',NULL,NULL,NULL,NULL,NULL,'Both','4273390544',NULL,'Sample Data','Magan','','Ivanov',4,NULL,NULL,NULL,1,NULL,'Dear Magan',1,NULL,'Dear Magan',1,NULL,'Dr. Magan Ivanov',NULL,1,'1950-04-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (150,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Junko','Dr. Junko ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','213828340',NULL,'Sample Data','Junko','','ÅÄ…chowski',4,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Dr. Junko ÅÄ…chowski',NULL,1,'1980-01-21',0,NULL,NULL,NULL,'Laplace Education Services',NULL,NULL,114,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (151,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Jensen, Josefa','Josefa Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3194240835',NULL,'Sample Data','Josefa','C','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Josefa Jensen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (152,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Kenny','Dr. Kenny Roberts Sr.',NULL,NULL,NULL,'5',NULL,'Both','438284626',NULL,'Sample Data','Kenny','','Roberts',4,2,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Dr. Kenny Roberts Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (153,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Troy','Troy Jensen',NULL,NULL,NULL,NULL,NULL,'Both','2894692674',NULL,'Sample Data','Troy','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Troy',1,NULL,'Dear Troy',1,NULL,'Troy Jensen',NULL,NULL,'1978-10-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (154,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Reynolds, Merrie','Merrie Reynolds',NULL,NULL,NULL,'5',NULL,'Both','4012463447',NULL,'Sample Data','Merrie','N','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Reynolds',NULL,1,'1990-11-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (155,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Van Ness Legal Services','Van Ness Legal Services',NULL,NULL,NULL,'4',NULL,'Both','3833343610',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Van Ness Legal Services',NULL,NULL,NULL,0,NULL,NULL,88,'Van Ness Legal Services',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (156,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson family','Robertson family',NULL,NULL,NULL,'5',NULL,'Both','3444393980',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Robertson family',5,NULL,'Dear Robertson family',2,NULL,'Robertson family',NULL,NULL,NULL,0,NULL,'Robertson family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (157,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Robertson-Jones, Beula','Dr. Beula Robertson-Jones',NULL,NULL,NULL,NULL,NULL,'Both','2432491290',NULL,'Sample Data','Beula','','Robertson-Jones',4,NULL,NULL,NULL,1,NULL,'Dear Beula',1,NULL,'Dear Beula',1,NULL,'Dr. Beula Robertson-Jones',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (158,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Jay','Jay Jameson',NULL,NULL,NULL,NULL,NULL,'Both','3822627115',NULL,'Sample Data','Jay','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Jameson',NULL,2,'1960-04-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (159,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Martin Luther King Legal Network','Martin Luther King Legal Network',NULL,NULL,NULL,NULL,NULL,'Both','3676595163',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Legal Network',NULL,NULL,NULL,0,NULL,NULL,132,'Martin Luther King Legal Network',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (160,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'samuelsj@notmail.net','samuelsj@notmail.net',NULL,NULL,NULL,NULL,NULL,'Both','1458160064',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear samuelsj@notmail.net',1,NULL,'Dear samuelsj@notmail.net',1,NULL,'samuelsj@notmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (161,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels, Jackson','Jackson Samuels II',NULL,NULL,NULL,'5',NULL,'Both','257936857',NULL,'Sample Data','Jackson','','Samuels',NULL,3,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Samuels II',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (162,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Heidi','Heidi Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3979188807',NULL,'Sample Data','Heidi','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Heidi',1,NULL,'Dear Heidi',1,NULL,'Heidi Jensen',NULL,1,NULL,0,NULL,NULL,NULL,'Ohio Advocacy Initiative',NULL,NULL,119,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (163,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Adams, Brittney','Brittney Adams',NULL,NULL,NULL,'4',NULL,'Both','1087046630',NULL,'Sample Data','Brittney','T','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Adams',NULL,1,'1964-10-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen-Roberts, Junko','Ms. Junko Olsen-Roberts',NULL,NULL,NULL,NULL,NULL,'Both','723841881',NULL,'Sample Data','Junko','','Olsen-Roberts',2,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Ms. Junko Olsen-Roberts',NULL,1,'1997-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (165,'Household',NULL,1,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski family','ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,'Both','2407077255',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear ÅÄ…chowski family',5,NULL,'Dear ÅÄ…chowski family',2,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,0,NULL,'ÅÄ…chowski family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Rosario','Rosario Smith',NULL,NULL,NULL,'4',NULL,'Both','701125213',NULL,'Sample Data','Rosario','T','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Smith',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (167,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Reynolds, Maria','Maria Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','3684751871',NULL,'Sample Data','Maria','B','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Reynolds',NULL,2,'1974-02-02',0,NULL,NULL,NULL,'Global Poetry Solutions',NULL,NULL,17,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (168,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'United Music Systems','United Music Systems',NULL,NULL,NULL,NULL,NULL,'Both','3812884701',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'United Music Systems',NULL,NULL,NULL,0,NULL,NULL,46,'United Music Systems',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (169,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest family','Deforest family',NULL,NULL,NULL,'2',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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (170,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Sanford','Sanford Patel',NULL,NULL,NULL,'1',NULL,'Both','2297805409',NULL,'Sample Data','Sanford','','Patel',NULL,NULL,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Patel',NULL,2,NULL,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (171,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Jones, Barry','Barry Jones Jr.',NULL,NULL,NULL,'4',NULL,'Both','1410678296',NULL,'Sample Data','Barry','M','Jones',NULL,1,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Jones Jr.',NULL,NULL,'2003-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (172,'Household',NULL,0,0,0,0,0,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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (173,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Cooper, Andrew','Andrew Cooper Sr.',NULL,NULL,NULL,'5',NULL,'Both','1042798620',NULL,'Sample Data','Andrew','','Cooper',NULL,2,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Andrew Cooper Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (174,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Deforest, Valene','Valene Deforest',NULL,NULL,NULL,'5',NULL,'Both','2243502587',NULL,'Sample Data','Valene','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Deforest',NULL,1,'2009-08-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (175,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Elizabeth','Elizabeth Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','197038680',NULL,'Sample Data','Elizabeth','M','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Blackwell',NULL,1,'1990-01-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (176,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wattson, Teresa','Mrs. Teresa Wattson',NULL,NULL,NULL,'4',NULL,'Both','1261567310',NULL,'Sample Data','Teresa','H','Wattson',1,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Mrs. Teresa Wattson',NULL,NULL,'1950-04-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Jay','Jay Samuels II',NULL,NULL,NULL,'2',NULL,'Both','3940355907',NULL,'Sample Data','Jay','N','Samuels',NULL,3,NULL,NULL,1,NULL,'Dear Jay',1,NULL,'Dear Jay',1,NULL,'Jay Samuels II',NULL,2,'1975-01-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Claudio','Claudio Grant',NULL,NULL,NULL,'3',NULL,'Both','682174254',NULL,'Sample Data','Claudio','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Claudio',1,NULL,'Dear Claudio',1,NULL,'Claudio Grant',NULL,2,'1993-10-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (179,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov family','Dimitrov family',NULL,NULL,NULL,'4',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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (180,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts family','Roberts family',NULL,NULL,NULL,NULL,NULL,'Both','2097305882',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Roberts family',5,NULL,'Dear Roberts family',2,NULL,'Roberts family',NULL,NULL,NULL,0,NULL,'Roberts family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (181,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Jackson','Jackson Samuels',NULL,NULL,NULL,NULL,NULL,'Both','257936857',NULL,'Sample Data','Jackson','','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Samuels',NULL,NULL,'1965-11-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (182,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman, Toby','Toby Bachman Jr.',NULL,NULL,NULL,NULL,NULL,'Both','3370727882',NULL,'Sample Data','Toby','S','Bachman',NULL,1,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby Bachman Jr.',NULL,2,'1995-10-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (183,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Betty','Betty McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','2136104008',NULL,'Sample Data','Betty','X','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Betty McReynolds',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (184,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Lee-Cooper family','Lee-Cooper family',NULL,NULL,NULL,NULL,NULL,'Both','91381114',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Lee-Cooper family',5,NULL,'Dear Lee-Cooper family',2,NULL,'Lee-Cooper family',NULL,NULL,NULL,0,NULL,'Lee-Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (185,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Grant, Eleonor','Eleonor Grant',NULL,NULL,NULL,NULL,NULL,'Both','3113635238',NULL,'Sample Data','Eleonor','','Grant',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Grant',NULL,1,'1997-08-12',0,NULL,NULL,NULL,'Waunakee Poetry Systems',NULL,NULL,108,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (186,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Arlyne','Arlyne Adams',NULL,NULL,NULL,'2',NULL,'Both','4065496202',NULL,'Sample Data','Arlyne','T','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Adams',NULL,NULL,NULL,0,NULL,NULL,NULL,'Illinois Action Initiative',NULL,NULL,84,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (187,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Scott','Scott Robertson Sr.',NULL,NULL,NULL,'3',NULL,'Both','284541050',NULL,'Sample Data','Scott','','Robertson',NULL,2,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Robertson Sr.',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (188,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Deforest, Ashley','Mrs. Ashley Deforest',NULL,NULL,NULL,'3',NULL,'Both','4128046694',NULL,'Sample Data','Ashley','J','Deforest',1,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Mrs. Ashley Deforest',NULL,1,'1999-11-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (189,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Valene','Valene Dimitrov',NULL,NULL,NULL,'2',NULL,'Both','1409634663',NULL,'Sample Data','Valene','D','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Valene',1,NULL,'Dear Valene',1,NULL,'Valene Dimitrov',NULL,1,'1999-02-23',0,NULL,NULL,NULL,'Urban Advocacy Center',NULL,NULL,145,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (190,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Deforest, Damaris','Damaris Deforest',NULL,NULL,NULL,'3',NULL,'Both','3392043942',NULL,'Sample Data','Damaris','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Deforest',NULL,NULL,'2006-01-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:16'), - (191,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Samuels family','Samuels family',NULL,NULL,NULL,NULL,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,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jameson, Juliann','Juliann Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2654217870',NULL,'Sample Data','Juliann','W','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Jameson',NULL,1,'1952-08-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (193,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Covington Software Solutions','Covington Software Solutions',NULL,NULL,NULL,'4',NULL,'Both','1201466224',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Covington Software Solutions',NULL,NULL,NULL,0,NULL,NULL,25,'Covington Software Solutions',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (194,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Deforest, Ivey','Ms. Ivey Deforest',NULL,NULL,NULL,NULL,NULL,'Both','1981648661',NULL,'Sample Data','Ivey','L','Deforest',2,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ms. Ivey Deforest',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (195,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Sonny','Sonny Deforest II',NULL,NULL,NULL,NULL,NULL,'Both','2565284656',NULL,'Sample Data','Sonny','','Deforest',NULL,3,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Sonny Deforest II',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (196,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Maria','Mr. Maria Jensen Sr.',NULL,NULL,NULL,NULL,NULL,'Both','27867278',NULL,'Sample Data','Maria','','Jensen',3,2,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Mr. Maria Jensen Sr.',NULL,2,'1944-08-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (197,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Jones, Brittney','Brittney Jones',NULL,NULL,NULL,'2',NULL,'Both','4034608446',NULL,'Sample Data','Brittney','T','Jones',NULL,NULL,NULL,NULL,1,NULL,'Dear Brittney',1,NULL,'Dear Brittney',1,NULL,'Brittney Jones',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (198,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'Jackson Legal Fund','Jackson Legal Fund',NULL,NULL,NULL,'5',NULL,'Both','3387946642',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Jackson Legal Fund',NULL,NULL,NULL,0,NULL,NULL,NULL,'Jackson Legal Fund',NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (199,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Robertson, Junko','Junko Robertson',NULL,NULL,NULL,NULL,NULL,'Both','1317703823',NULL,'Sample Data','Junko','','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Junko',1,NULL,'Dear Junko',1,NULL,'Junko Robertson',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (200,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'bryont90@testmail.info','bryont90@testmail.info',NULL,NULL,NULL,NULL,NULL,'Both','1232881007',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear bryont90@testmail.info',1,NULL,'Dear bryont90@testmail.info',1,NULL,'bryont90@testmail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:14'), - (201,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Megan','Mrs. Megan Dimitrov',NULL,NULL,NULL,'4',NULL,'Both','604448148',NULL,'Sample Data','Megan','','Dimitrov',1,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Mrs. Megan Dimitrov',NULL,NULL,'1974-10-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:14','2022-04-14 03:30:15'), - (202,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Jenny','Jenny Lee',NULL,NULL,NULL,NULL,'en_US','Both','9f5e2b94ae1d6dc957ea7b05635b7bcf',NULL,NULL,'Jenny',NULL,'Lee',NULL,NULL,NULL,1,1,NULL,'Dear Jenny',1,NULL,'Dear Jenny',1,NULL,'Jenny Lee','Volunteer coordinator',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-04-14 03:30:16','2022-04-14 03:30:16'); + (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,'2022-05-04 18:47:18'), + (2,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Jacob','Jacob McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','4202313565',NULL,'Sample Data','Jacob','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob McReynolds',NULL,NULL,'2011-01-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (3,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Maxwell','Maxwell Wilson III',NULL,NULL,NULL,NULL,NULL,'Both','2894206629',NULL,'Sample Data','Maxwell','','Wilson',NULL,4,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Wilson III',NULL,2,'1982-05-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (4,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Ivanov-Samuels, Allen','Dr. Allen Ivanov-Samuels',NULL,NULL,NULL,NULL,NULL,'Both','3181456686',NULL,'Sample Data','Allen','','Ivanov-Samuels',4,NULL,NULL,NULL,1,NULL,'Dear Allen',1,NULL,'Dear Allen',1,NULL,'Dr. Allen Ivanov-Samuels',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (5,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen, Jerome','Dr. Jerome Olsen Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2369616352',NULL,'Sample Data','Jerome','','Olsen',4,2,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Olsen Sr.',NULL,2,'1991-01-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (6,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Müller family','Müller family',NULL,NULL,NULL,'1',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,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (7,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Wagner, Carlos','Mr. Carlos Wagner Sr.',NULL,NULL,NULL,'2',NULL,'Both','277045912',NULL,'Sample Data','Carlos','Z','Wagner',3,2,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Mr. Carlos Wagner Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (8,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'New Philadelphia Empowerment Partners','New Philadelphia Empowerment Partners',NULL,NULL,NULL,'3',NULL,'Both','788186389',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'New Philadelphia Empowerment Partners',NULL,NULL,NULL,0,NULL,NULL,NULL,'New Philadelphia Empowerment Partners',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (9,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Juliann','Juliann Parker',NULL,NULL,NULL,NULL,NULL,'Both','1013304220',NULL,'Sample Data','Juliann','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Juliann Parker',NULL,1,'1945-02-13',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (10,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Shauna','Mrs. Shauna McReynolds',NULL,NULL,NULL,'4',NULL,'Both','3277027646',NULL,'Sample Data','Shauna','X','McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Mrs. Shauna McReynolds',NULL,NULL,'1936-04-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (11,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Shauna','Ms. Shauna Parker',NULL,NULL,NULL,NULL,NULL,'Both','631094939',NULL,'Sample Data','Shauna','U','Parker',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Parker',NULL,1,'1983-09-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (12,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Merrie','Merrie Bachman',NULL,NULL,NULL,'4',NULL,'Both','2483805039',NULL,'Sample Data','Merrie','','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Merrie',1,NULL,'Dear Merrie',1,NULL,'Merrie Bachman',NULL,1,'1996-07-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (13,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Blackwell, Craig','Dr. Craig Blackwell Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2607395408',NULL,'Sample Data','Craig','K','Blackwell',4,2,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Dr. Craig Blackwell Sr.',NULL,2,'1994-01-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (14,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Olsen, Sanford','Sanford Olsen III',NULL,NULL,NULL,'4',NULL,'Both','2408737591',NULL,'Sample Data','Sanford','Z','Olsen',NULL,4,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Olsen III',NULL,NULL,NULL,0,NULL,NULL,NULL,'Martin Luther King Music School',NULL,NULL,71,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (15,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz, Elbert','Elbert Cruz',NULL,NULL,NULL,NULL,NULL,'Both','418027726',NULL,'Sample Data','Elbert','','Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Elbert',1,NULL,'Dear Elbert',1,NULL,'Elbert Cruz',NULL,2,'1942-10-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (16,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Rebekah','Rebekah Zope',NULL,NULL,NULL,NULL,NULL,'Both','1246541996',NULL,'Sample Data','Rebekah','','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Rebekah',1,NULL,'Dear Rebekah',1,NULL,'Rebekah Zope',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (17,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Rolando','Mr. Rolando Smith Jr.',NULL,NULL,NULL,'2',NULL,'Both','1810396759',NULL,'Sample Data','Rolando','E','Smith',3,1,NULL,NULL,1,NULL,'Dear Rolando',1,NULL,'Dear Rolando',1,NULL,'Mr. Rolando Smith Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (18,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Esta','Ms. Esta Wilson',NULL,NULL,NULL,NULL,NULL,'Both','4062984803',NULL,'Sample Data','Esta','','Wilson',2,NULL,NULL,NULL,1,NULL,'Dear Esta',1,NULL,'Dear Esta',1,NULL,'Ms. Esta Wilson',NULL,NULL,'1956-09-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (19,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson family','Wilson family',NULL,NULL,NULL,NULL,NULL,'Both','350510798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wilson family',5,NULL,'Dear Wilson family',2,NULL,'Wilson family',NULL,NULL,NULL,0,NULL,'Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (20,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'lwilson@example.net','lwilson@example.net',NULL,NULL,NULL,'2',NULL,'Both','3070531292',NULL,'Sample Data',NULL,NULL,NULL,3,NULL,NULL,NULL,1,NULL,'Dear lwilson@example.net',1,NULL,'Dear lwilson@example.net',1,NULL,'lwilson@example.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (21,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Smith, Ashley','Dr. Ashley Smith Sr.',NULL,NULL,NULL,NULL,NULL,'Both','2874632377',NULL,'Sample Data','Ashley','R','Smith',4,2,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Smith Sr.',NULL,2,'1987-05-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (22,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Scarlet','Ms. Scarlet Grant',NULL,NULL,NULL,'5',NULL,'Both','188081876',NULL,'Sample Data','Scarlet','','Grant',2,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Ms. Scarlet Grant',NULL,NULL,'1977-06-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (23,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman, Carlos','Carlos Bachman',NULL,NULL,NULL,'4',NULL,'Both','4021780594',NULL,'Sample Data','Carlos','G','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Bachman',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (24,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley-Adams family','Barkley-Adams family',NULL,NULL,NULL,NULL,NULL,'Both','946540938',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Barkley-Adams family',5,NULL,'Dear Barkley-Adams family',2,NULL,'Barkley-Adams family',NULL,NULL,NULL,0,NULL,'Barkley-Adams family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (25,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts, Arlyne','Mrs. Arlyne Roberts',NULL,NULL,NULL,NULL,NULL,'Both','2937963567',NULL,'Sample Data','Arlyne','O','Roberts',1,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Mrs. Arlyne Roberts',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (26,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Bachman-Olsen, Rosario','Mr. Rosario Bachman-Olsen Jr.',NULL,NULL,NULL,NULL,NULL,'Both','847648697',NULL,'Sample Data','Rosario','J','Bachman-Olsen',3,1,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Mr. Rosario Bachman-Olsen Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (27,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Juliann','Dr. Juliann Prentice',NULL,NULL,NULL,NULL,NULL,'Both','4163234057',NULL,'Sample Data','Juliann','L','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Dr. Juliann Prentice',NULL,1,'1942-11-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (28,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Bachman, Teddy','Teddy Bachman II',NULL,NULL,NULL,NULL,NULL,'Both','352195656',NULL,'Sample Data','Teddy','A','Bachman',NULL,3,NULL,NULL,1,NULL,'Dear Teddy',1,NULL,'Dear Teddy',1,NULL,'Teddy Bachman II',NULL,2,'1957-04-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (29,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Jed','Dr. Jed McReynolds III',NULL,NULL,NULL,'4',NULL,'Both','4285977189',NULL,'Sample Data','Jed','','McReynolds',4,4,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Dr. Jed McReynolds III',NULL,NULL,'1964-09-04',0,NULL,NULL,NULL,'Arizona Arts Services',NULL,NULL,121,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (30,'Organization',NULL,0,1,0,0,1,0,NULL,NULL,'Riderwood Wellness Center','Riderwood Wellness Center',NULL,NULL,NULL,NULL,NULL,'Both','2418668429',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Riderwood Wellness Center',NULL,NULL,NULL,0,NULL,NULL,NULL,'Riderwood Wellness Center',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (31,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper family','Cooper family',NULL,NULL,NULL,NULL,NULL,'Both','1133003930',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cooper family',5,NULL,'Dear Cooper family',2,NULL,'Cooper family',NULL,NULL,NULL,0,NULL,'Cooper family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (32,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Roberts, Scott','Scott Roberts',NULL,NULL,NULL,'3',NULL,'Both','2696601244',NULL,'Sample Data','Scott','Q','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Scott Roberts',NULL,NULL,'1942-05-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (33,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Blackwell, Jackson','Dr. Jackson Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','1298045172',NULL,'Sample Data','Jackson','H','Blackwell',4,NULL,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Dr. Jackson Blackwell',NULL,NULL,'1968-04-10',0,NULL,NULL,NULL,'Wisconsin Software Partners',NULL,NULL,169,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (34,'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,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (35,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley-Adams, Kathleen','Mrs. Kathleen Barkley-Adams',NULL,NULL,NULL,'5',NULL,'Both','1399560203',NULL,'Sample Data','Kathleen','S','Barkley-Adams',1,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Mrs. Kathleen Barkley-Adams',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (36,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Adams-Roberts, Jackson','Jackson Adams-Roberts III',NULL,NULL,NULL,NULL,NULL,'Both','594657110',NULL,'Sample Data','Jackson','P','Adams-Roberts',NULL,4,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Adams-Roberts III',NULL,2,'1995-01-28',0,NULL,NULL,NULL,'Global Education Initiative',NULL,NULL,98,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (37,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'esamuels@airmail.co.in','esamuels@airmail.co.in',NULL,NULL,NULL,'2',NULL,'Both','112253343',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear esamuels@airmail.co.in',1,NULL,'Dear esamuels@airmail.co.in',1,NULL,'esamuels@airmail.co.in',NULL,NULL,NULL,0,NULL,NULL,NULL,'Nebraska Peace Alliance',NULL,NULL,157,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (38,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jensen, Kathleen','Kathleen Jensen',NULL,NULL,NULL,'5',NULL,'Both','2413791663',NULL,'Sample Data','Kathleen','C','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Jensen',NULL,NULL,'1968-05-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (39,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wattson, Mei','Mei Wattson',NULL,NULL,NULL,'2',NULL,'Both','1845197516',NULL,'Sample Data','Mei','','Wattson',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Wattson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (40,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Barkley, Andrew','Mr. Andrew Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2695684527',NULL,'Sample Data','Andrew','','Barkley',3,NULL,NULL,NULL,1,NULL,'Dear Andrew',1,NULL,'Dear Andrew',1,NULL,'Mr. Andrew Barkley',NULL,2,'1991-07-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (41,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Ohio Education Fund','Ohio Education Fund',NULL,NULL,NULL,NULL,NULL,'Both','4166813883',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Ohio Education Fund',NULL,NULL,NULL,0,NULL,NULL,143,'Ohio Education Fund',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (42,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'DÃaz, Ashley','Mr. Ashley DÃaz',NULL,NULL,NULL,NULL,NULL,'Both','2703610004',NULL,'Sample Data','Ashley','','DÃaz',3,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Mr. Ashley DÃaz',NULL,NULL,'1988-01-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (43,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman-Olsen, Allan','Mr. Allan Bachman-Olsen II',NULL,NULL,NULL,NULL,NULL,'Both','4140750272',NULL,'Sample Data','Allan','S','Bachman-Olsen',3,3,NULL,NULL,1,NULL,'Dear Allan',1,NULL,'Dear Allan',1,NULL,'Mr. Allan Bachman-Olsen II',NULL,2,'1989-02-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (44,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Grant, Barry','Mr. Barry Grant Jr.',NULL,NULL,NULL,'3',NULL,'Both','3594746483',NULL,'Sample Data','Barry','','Grant',3,1,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Mr. Barry Grant Jr.',NULL,NULL,'1952-12-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (45,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Omar','Omar Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','3390193104',NULL,'Sample Data','Omar','L','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Omar',1,NULL,'Dear Omar',1,NULL,'Omar Dimitrov',NULL,2,'1996-12-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (46,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Jerome','Dr. Jerome Nielsen II',NULL,NULL,NULL,'5',NULL,'Both','3652715063',NULL,'Sample Data','Jerome','','Nielsen',4,3,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Nielsen II',NULL,NULL,'1998-06-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (47,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Ivanov-Samuels family','Ivanov-Samuels family',NULL,NULL,NULL,NULL,NULL,'Both','2393315887',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Ivanov-Samuels family',5,NULL,'Dear Ivanov-Samuels family',2,NULL,'Ivanov-Samuels family',NULL,NULL,NULL,0,NULL,'Ivanov-Samuels family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (48,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wilson, Jacob','Jacob Wilson',NULL,NULL,NULL,NULL,NULL,'Both','1516069791',NULL,'Sample Data','Jacob','','Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Jacob Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (49,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel-Terrell, Alida','Ms. Alida Patel-Terrell',NULL,NULL,NULL,NULL,NULL,'Both','3889156471',NULL,'Sample Data','Alida','G','Patel-Terrell',2,NULL,NULL,NULL,1,NULL,'Dear Alida',1,NULL,'Dear Alida',1,NULL,'Ms. Alida Patel-Terrell',NULL,1,'1988-09-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (50,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jones, Sherman','Sherman Jones Sr.',NULL,NULL,NULL,NULL,NULL,'Both','4211495725',NULL,'Sample Data','Sherman','P','Jones',NULL,2,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Sherman Jones Sr.',NULL,2,'1967-12-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (51,'Household',NULL,0,1,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,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (52,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Ashlie','Ashlie Terrell',NULL,NULL,NULL,NULL,NULL,'Both','3023355040',NULL,'Sample Data','Ashlie','','Terrell',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie Terrell',NULL,NULL,'1990-07-06',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (53,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Olsen, Billy','Billy Olsen',NULL,NULL,NULL,NULL,NULL,'Both','1744279777',NULL,'Sample Data','Billy','F','Olsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Billy Olsen',NULL,NULL,'1963-06-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (54,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Samson, Landon','Mr. Landon Samson',NULL,NULL,NULL,'2',NULL,'Both','1562429969',NULL,'Sample Data','Landon','B','Samson',3,NULL,NULL,NULL,1,NULL,'Dear Landon',1,NULL,'Dear Landon',1,NULL,'Mr. Landon Samson',NULL,2,'1939-03-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (55,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen-Jameson family','Olsen-Jameson family',NULL,NULL,NULL,NULL,NULL,'Both','1402144473',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen-Jameson family',5,NULL,'Dear Olsen-Jameson family',2,NULL,'Olsen-Jameson family',NULL,NULL,NULL,0,NULL,'Olsen-Jameson family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (56,'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,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (57,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Terrell, Sharyn','Ms. Sharyn Terrell',NULL,NULL,NULL,'5',NULL,'Both','1538962314',NULL,'Sample Data','Sharyn','J','Terrell',2,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Ms. Sharyn Terrell',NULL,NULL,'1994-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (58,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Yadav, Kathleen','Mrs. Kathleen Yadav',NULL,NULL,NULL,'5',NULL,'Both','1878757243',NULL,'Sample Data','Kathleen','','Yadav',1,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Mrs. Kathleen Yadav',NULL,1,'1964-06-21',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (59,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, Elizabeth','Ms. Elizabeth Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3252450799',NULL,'Sample Data','Elizabeth','','Nielsen',2,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Ms. Elizabeth Nielsen',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (60,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Carlos','Mr. Carlos Müller Sr.',NULL,NULL,NULL,'4',NULL,'Both','457253515',NULL,'Sample Data','Carlos','M','Müller',3,2,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Mr. Carlos Müller Sr.',NULL,2,'1981-09-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (61,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Adams, Herminia','Mrs. Herminia Adams',NULL,NULL,NULL,'3',NULL,'Both','1782178525',NULL,'Sample Data','Herminia','','Adams',1,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Mrs. Herminia Adams',NULL,NULL,'1958-06-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (62,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'González, Ray','Ray González Jr.',NULL,NULL,NULL,'2',NULL,'Both','193085819',NULL,'Sample Data','Ray','','González',NULL,1,NULL,NULL,1,NULL,'Dear Ray',1,NULL,'Dear Ray',1,NULL,'Ray González Jr.',NULL,NULL,NULL,0,NULL,NULL,NULL,'North Grafton Music Trust',NULL,NULL,139,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (63,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Arlyne','Dr. Arlyne Parker',NULL,NULL,NULL,NULL,NULL,'Both','3184424840',NULL,'Sample Data','Arlyne','F','Parker',4,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Dr. Arlyne Parker',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (64,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson family','Wilson family',NULL,NULL,NULL,'5',NULL,'Both','350510798',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Wilson family',5,NULL,'Dear Wilson family',2,NULL,'Wilson family',NULL,NULL,NULL,0,NULL,'Wilson family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (65,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jones, Shauna','Ms. Shauna Jones',NULL,NULL,NULL,NULL,NULL,'Both','2088102406',NULL,'Sample Data','Shauna','M','Jones',2,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Ms. Shauna Jones',NULL,1,NULL,1,'2021-11-05',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (66,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Billy','Mr. Billy ÅÄ…chowski',NULL,NULL,NULL,NULL,NULL,'Both','2651887338',NULL,'Sample Data','Billy','','ÅÄ…chowski',3,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Mr. Billy ÅÄ…chowski',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (67,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Nicole','Nicole Smith',NULL,NULL,NULL,NULL,NULL,'Both','1624607505',NULL,'Sample Data','Nicole','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Nicole',1,NULL,'Dear Nicole',1,NULL,'Nicole Smith',NULL,1,'1968-06-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (68,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Felisha','Felisha Müller',NULL,NULL,NULL,'3',NULL,'Both','258703399',NULL,'Sample Data','Felisha','','Müller',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha Müller',NULL,1,'1951-04-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (69,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley-Adams, Iris','Dr. Iris Barkley-Adams',NULL,NULL,NULL,'5',NULL,'Both','3812375814',NULL,'Sample Data','Iris','T','Barkley-Adams',4,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Dr. Iris Barkley-Adams',NULL,NULL,NULL,0,NULL,NULL,NULL,'West Virginia Literacy Services',NULL,NULL,114,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (70,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Tennessee Poetry Network','Tennessee Poetry Network',NULL,NULL,NULL,'5',NULL,'Both','327573635',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Tennessee Poetry Network',NULL,NULL,NULL,0,NULL,NULL,148,'Tennessee Poetry Network',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (71,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Martin Luther King Music School','Martin Luther King Music School',NULL,NULL,NULL,'3',NULL,'Both','735291276',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Martin Luther King Music School',NULL,NULL,NULL,0,NULL,NULL,14,'Martin Luther King Music School',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (72,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Roberts, Rosario','Mr. Rosario Roberts III',NULL,NULL,NULL,'3',NULL,'Both','2207993588',NULL,'Sample Data','Rosario','','Roberts',3,4,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Mr. Rosario Roberts III',NULL,2,'1952-03-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (73,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Barkley, Elizabeth','Elizabeth Barkley',NULL,NULL,NULL,NULL,NULL,'Both','4081845859',NULL,'Sample Data','Elizabeth','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Barkley',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (74,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Parker, Angelika','Mrs. Angelika Parker',NULL,NULL,NULL,'1',NULL,'Both','216332122',NULL,'Sample Data','Angelika','H','Parker',1,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Mrs. Angelika Parker',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (75,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Daren','Daren Robertson',NULL,NULL,NULL,'3',NULL,'Both','3531188522',NULL,'Sample Data','Daren','Z','Robertson',NULL,NULL,NULL,NULL,1,NULL,'Dear Daren',1,NULL,'Dear Daren',1,NULL,'Daren Robertson',NULL,2,'1953-02-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (76,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Smith, Kathlyn','Kathlyn Smith',NULL,NULL,NULL,'3',NULL,'Both','97768727',NULL,'Sample Data','Kathlyn','','Smith',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Smith',NULL,1,'1937-03-13',1,'2022-03-22',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (77,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Reynolds, Russell','Russell Reynolds',NULL,NULL,NULL,NULL,NULL,'Both','2896350648',NULL,'Sample Data','Russell','','Reynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Russell',1,NULL,'Dear Russell',1,NULL,'Russell Reynolds',NULL,2,'1973-04-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (78,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ivanovd79@lol.biz','ivanovd79@lol.biz',NULL,NULL,NULL,'5',NULL,'Both','775344396',NULL,'Sample Data',NULL,NULL,NULL,3,2,NULL,NULL,1,NULL,'Dear ivanovd79@lol.biz',1,NULL,'Dear ivanovd79@lol.biz',1,NULL,'ivanovd79@lol.biz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (79,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, Jackson','Jackson Cooper Jr.',NULL,NULL,NULL,NULL,NULL,'Both','2598878708',NULL,'Sample Data','Jackson','','Cooper',NULL,1,NULL,NULL,1,NULL,'Dear Jackson',1,NULL,'Dear Jackson',1,NULL,'Jackson Cooper Jr.',NULL,2,'1954-01-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (80,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Wilson, Carlos','Carlos Wilson III',NULL,NULL,NULL,NULL,NULL,'Both','61259163',NULL,'Sample Data','Carlos','U','Wilson',NULL,4,NULL,NULL,1,NULL,'Dear Carlos',1,NULL,'Dear Carlos',1,NULL,'Carlos Wilson III',NULL,2,'1972-03-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (81,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley, Kacey','Kacey Barkley',NULL,NULL,NULL,'4',NULL,'Both','2943836442',NULL,'Sample Data','Kacey','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Kacey',1,NULL,'Dear Kacey',1,NULL,'Kacey Barkley',NULL,1,'2002-04-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (82,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Müller, Megan','Dr. Megan Müller',NULL,NULL,NULL,'4',NULL,'Both','2818279030',NULL,'Sample Data','Megan','S','Müller',4,NULL,NULL,NULL,1,NULL,'Dear Megan',1,NULL,'Dear Megan',1,NULL,'Dr. Megan Müller',NULL,1,'1998-12-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (83,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Blackwell, Errol','Mr. Errol Blackwell II',NULL,NULL,NULL,'1',NULL,'Both','3418432727',NULL,'Sample Data','Errol','S','Blackwell',3,3,NULL,NULL,1,NULL,'Dear Errol',1,NULL,'Dear Errol',1,NULL,'Mr. Errol Blackwell II',NULL,NULL,'1950-12-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (84,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Shauna','Shauna Samuels',NULL,NULL,NULL,'4',NULL,'Both','3723668425',NULL,'Sample Data','Shauna','I','Samuels',NULL,NULL,NULL,NULL,1,NULL,'Dear Shauna',1,NULL,'Dear Shauna',1,NULL,'Shauna Samuels',NULL,NULL,'1946-08-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (85,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Barkley, Sanford','Sanford Barkley Sr.',NULL,NULL,NULL,NULL,NULL,'Both','975752860',NULL,'Sample Data','Sanford','','Barkley',NULL,2,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Sanford Barkley Sr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (86,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Cruz, Margaret','Mrs. Margaret Cruz',NULL,NULL,NULL,NULL,NULL,'Both','680750633',NULL,'Sample Data','Margaret','J','Cruz',1,NULL,NULL,NULL,1,NULL,'Dear Margaret',1,NULL,'Dear Margaret',1,NULL,'Mrs. Margaret Cruz',NULL,NULL,'1981-05-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (87,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Prentice, Roland','Dr. Roland Prentice',NULL,NULL,NULL,'1',NULL,'Both','3836132137',NULL,'Sample Data','Roland','L','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Dr. Roland Prentice',NULL,2,'1952-10-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (88,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Dimitrov, Teresa','Teresa Dimitrov',NULL,NULL,NULL,NULL,NULL,'Both','2760564229',NULL,'Sample Data','Teresa','','Dimitrov',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Dimitrov',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (89,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Jacob','Mr. Jacob Nielsen',NULL,NULL,NULL,'5',NULL,'Both','1661720619',NULL,'Sample Data','Jacob','Q','Nielsen',3,NULL,NULL,NULL,1,NULL,'Dear Jacob',1,NULL,'Dear Jacob',1,NULL,'Mr. Jacob Nielsen',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (90,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley, Ashley','Dr. Ashley Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2198515289',NULL,'Sample Data','Ashley','','Barkley',4,NULL,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Dr. Ashley Barkley',NULL,NULL,'1991-07-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (91,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Shad','Shad ÅÄ…chowski II',NULL,NULL,NULL,NULL,NULL,'Both','695965162',NULL,'Sample Data','Shad','Z','ÅÄ…chowski',NULL,3,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Shad ÅÄ…chowski II',NULL,2,'1935-11-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (92,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Blackwell, Herminia','Herminia Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','3534592549',NULL,'Sample Data','Herminia','U','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Blackwell',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (93,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Florida Development Alliance','Florida Development Alliance',NULL,NULL,NULL,'2',NULL,'Both','1678428237',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Florida Development Alliance',NULL,NULL,NULL,0,NULL,NULL,184,'Florida Development Alliance',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (94,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Bakersfield Software Association','Bakersfield Software Association',NULL,NULL,NULL,'4',NULL,'Both','3739204630',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Bakersfield Software Association',NULL,NULL,NULL,0,NULL,NULL,NULL,'Bakersfield Software Association',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (95,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Tennessee Action Partnership','Tennessee Action Partnership',NULL,NULL,NULL,'1',NULL,'Both','3308295721',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Tennessee Action Partnership',NULL,NULL,NULL,0,NULL,NULL,181,'Tennessee Action Partnership',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (96,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Zope family','Zope family',NULL,NULL,NULL,NULL,NULL,'Both','1649131487',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Zope family',5,NULL,'Dear Zope family',2,NULL,'Zope family',NULL,NULL,NULL,0,NULL,'Zope family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (97,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Nielsen, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3387173587',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Nielsen',NULL,2,'1968-06-01',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (98,'Organization',NULL,1,1,0,0,0,0,NULL,NULL,'Global Education Initiative','Global Education Initiative',NULL,NULL,NULL,NULL,NULL,'Both','2436315194',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Education Initiative',NULL,NULL,NULL,0,NULL,NULL,36,'Global Education Initiative',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (99,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Nielsen, Arlyne','Mrs. Arlyne Nielsen',NULL,NULL,NULL,'5',NULL,'Both','3808368075',NULL,'Sample Data','Arlyne','','Nielsen',1,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Mrs. Arlyne Nielsen',NULL,1,'1980-12-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (100,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Deforest, Jina','Jina Deforest',NULL,NULL,NULL,NULL,NULL,'Both','2202699051',NULL,'Sample Data','Jina','','Deforest',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Deforest',NULL,NULL,'1947-04-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (101,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Robertson, Bryon','Dr. Bryon Robertson',NULL,NULL,NULL,'5',NULL,'Both','3912213392',NULL,'Sample Data','Bryon','M','Robertson',4,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Dr. Bryon Robertson',NULL,2,'1989-03-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (102,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Lee, Josefa','Ms. Josefa Cruz-Lee',NULL,NULL,NULL,'4',NULL,'Both','973595470',NULL,'Sample Data','Josefa','G','Cruz-Lee',2,NULL,NULL,NULL,1,NULL,'Dear Josefa',1,NULL,'Dear Josefa',1,NULL,'Ms. Josefa Cruz-Lee',NULL,1,'1978-02-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (103,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Scarlet','Dr. Scarlet González',NULL,NULL,NULL,NULL,NULL,'Both','108214879',NULL,'Sample Data','Scarlet','Q','González',4,NULL,NULL,NULL,1,NULL,'Dear Scarlet',1,NULL,'Dear Scarlet',1,NULL,'Dr. Scarlet González',NULL,NULL,'1949-06-01',0,NULL,NULL,NULL,'Evansville Peace Partners',NULL,NULL,163,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (104,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, Iris','Iris Adams',NULL,NULL,NULL,NULL,NULL,'Both','80644186',NULL,'Sample Data','Iris','R','Adams',NULL,NULL,NULL,NULL,1,NULL,'Dear Iris',1,NULL,'Dear Iris',1,NULL,'Iris Adams',NULL,1,'1989-09-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (105,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Urban Legal Association','Urban Legal Association',NULL,NULL,NULL,'3',NULL,'Both','2553645591',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Urban Legal Association',NULL,NULL,NULL,0,NULL,NULL,NULL,'Urban Legal Association',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (106,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Rosario','Rosario Lee Jr.',NULL,NULL,NULL,'5',NULL,'Both','2332394944',NULL,'Sample Data','Rosario','','Lee',NULL,1,NULL,NULL,1,NULL,'Dear Rosario',1,NULL,'Dear Rosario',1,NULL,'Rosario Lee Jr.',NULL,NULL,'1937-12-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (107,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Kenny','Kenny DÃaz',NULL,NULL,NULL,'5',NULL,'Both','3864119395',NULL,'Sample Data','Kenny','N','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Kenny',1,NULL,'Dear Kenny',1,NULL,'Kenny DÃaz',NULL,2,'1949-09-28',1,'2021-10-26',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (108,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Bryon','Bryon Zope',NULL,NULL,NULL,NULL,NULL,'Both','1177115571',NULL,'Sample Data','Bryon','U','Zope',NULL,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Zope',NULL,2,'1961-05-30',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (109,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Cooper, Angelika','Angelika Cooper',NULL,NULL,NULL,NULL,NULL,'Both','2902339597',NULL,'Sample Data','Angelika','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Angelika',1,NULL,'Dear Angelika',1,NULL,'Angelika Cooper',NULL,1,'2021-09-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (110,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams-Roberts, Arlyne','Arlyne Adams-Roberts',NULL,NULL,NULL,'1',NULL,'Both','2991416932',NULL,'Sample Data','Arlyne','','Adams-Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Arlyne',1,NULL,'Dear Arlyne',1,NULL,'Arlyne Adams-Roberts',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (111,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Wilson, Irvin','Mr. Irvin Wilson',NULL,NULL,NULL,'1',NULL,'Both','441477896',NULL,'Sample Data','Irvin','Z','Wilson',3,NULL,NULL,NULL,1,NULL,'Dear Irvin',1,NULL,'Dear Irvin',1,NULL,'Mr. Irvin Wilson',NULL,2,'1994-09-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (112,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Samuels-Jensen family','Samuels-Jensen family',NULL,NULL,NULL,NULL,NULL,'Both','3928871215',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Samuels-Jensen family',5,NULL,'Dear Samuels-Jensen family',2,NULL,'Samuels-Jensen family',NULL,NULL,NULL,0,NULL,'Samuels-Jensen family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (113,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen-Jameson, Rodrigo','Rodrigo Olsen-Jameson',NULL,NULL,NULL,NULL,NULL,'Both','2248440433',NULL,'Sample Data','Rodrigo','P','Olsen-Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Rodrigo Olsen-Jameson',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (114,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'West Virginia Literacy Services','West Virginia Literacy Services',NULL,NULL,NULL,'5',NULL,'Both','878685447',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'West Virginia Literacy Services',NULL,NULL,NULL,0,NULL,NULL,69,'West Virginia Literacy Services',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (115,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Bryon','Bryon Lee',NULL,NULL,NULL,'1',NULL,'Both','369670244',NULL,'Sample Data','Bryon','','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Bryon',1,NULL,'Dear Bryon',1,NULL,'Bryon Lee',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (116,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Robertson, Jerome','Dr. Jerome Robertson Jr.',NULL,NULL,NULL,'2',NULL,'Both','3716406144',NULL,'Sample Data','Jerome','','Robertson',4,1,NULL,NULL,1,NULL,'Dear Jerome',1,NULL,'Dear Jerome',1,NULL,'Dr. Jerome Robertson Jr.',NULL,NULL,'1976-11-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (117,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'McReynolds, Toby','Toby McReynolds Jr.',NULL,NULL,NULL,NULL,NULL,'Both','771213292',NULL,'Sample Data','Toby','','McReynolds',NULL,1,NULL,NULL,1,NULL,'Dear Toby',1,NULL,'Dear Toby',1,NULL,'Toby McReynolds Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (118,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, Teresa','Teresa Cooper',NULL,NULL,NULL,'1',NULL,'Both','2663106325',NULL,'Sample Data','Teresa','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa Cooper',NULL,1,'1948-09-19',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (119,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Barkley, Mei','Mei Barkley',NULL,NULL,NULL,NULL,NULL,'Both','2552189741',NULL,'Sample Data','Mei','','Barkley',NULL,NULL,NULL,NULL,1,NULL,'Dear Mei',1,NULL,'Dear Mei',1,NULL,'Mei Barkley',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (120,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Van Ness Health Services','Van Ness Health Services',NULL,NULL,NULL,'3',NULL,'Both','2687016547',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Van Ness Health Services',NULL,NULL,NULL,0,NULL,NULL,191,'Van Ness Health Services',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (121,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Arizona Arts Services','Arizona Arts Services',NULL,NULL,NULL,NULL,NULL,'Both','1298931464',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Arizona Arts Services',NULL,NULL,NULL,0,NULL,NULL,29,'Arizona Arts Services',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (122,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell family','Terrell family',NULL,NULL,NULL,'1',NULL,'Both','1136333121',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Terrell family',5,NULL,'Dear Terrell family',2,NULL,'Terrell family',NULL,NULL,NULL,0,NULL,'Terrell family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (123,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'DÃaz, Lou','Lou DÃaz',NULL,NULL,NULL,'1',NULL,'Both','1546158286',NULL,'Sample Data','Lou','','DÃaz',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou DÃaz',NULL,2,'1982-12-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (124,'Household',NULL,0,0,0,0,1,0,NULL,NULL,'Parker family','Parker family',NULL,NULL,NULL,NULL,NULL,'Both','425242179',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Parker family',5,NULL,'Dear Parker family',2,NULL,'Parker family',NULL,NULL,NULL,0,NULL,'Parker family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (125,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen-Cruz family','Olsen-Cruz family',NULL,NULL,NULL,'2',NULL,'Both','1085750359',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Olsen-Cruz family',5,NULL,'Dear Olsen-Cruz family',2,NULL,'Olsen-Cruz family',NULL,NULL,NULL,0,NULL,'Olsen-Cruz family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (126,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman, Jina','Jina Bachman',NULL,NULL,NULL,'3',NULL,'Both','3279663758',NULL,'Sample Data','Jina','P','Bachman',NULL,NULL,NULL,NULL,1,NULL,'Dear Jina',1,NULL,'Dear Jina',1,NULL,'Jina Bachman',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (127,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Olsen, Betty','Dr. Betty Olsen',NULL,NULL,NULL,NULL,NULL,'Both','3171896776',NULL,'Sample Data','Betty','','Olsen',4,NULL,NULL,NULL,1,NULL,'Dear Betty',1,NULL,'Dear Betty',1,NULL,'Dr. Betty Olsen',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (128,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'McReynolds, Lashawnda','Dr. Lashawnda McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','1885036358',NULL,'Sample Data','Lashawnda','V','McReynolds',4,NULL,NULL,NULL,1,NULL,'Dear Lashawnda',1,NULL,'Dear Lashawnda',1,NULL,'Dr. Lashawnda McReynolds',NULL,1,'1978-07-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (129,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Müller, Laree','Ms. Laree Müller',NULL,NULL,NULL,'4',NULL,'Both','4239017350',NULL,'Sample Data','Laree','','Müller',2,NULL,NULL,NULL,1,NULL,'Dear Laree',1,NULL,'Dear Laree',1,NULL,'Ms. Laree Müller',NULL,1,'1985-04-26',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (130,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Truman','Truman Jensen III',NULL,NULL,NULL,NULL,NULL,'Both','3947793065',NULL,'Sample Data','Truman','','Jensen',NULL,4,NULL,NULL,1,NULL,'Dear Truman',1,NULL,'Dear Truman',1,NULL,'Truman Jensen III',NULL,2,'1975-06-14',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (131,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Wilson, Damaris','Mrs. Damaris Wilson',NULL,NULL,NULL,'3',NULL,'Both','226365314',NULL,'Sample Data','Damaris','Z','Wilson',1,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Mrs. Damaris Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (132,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Roberts, Ivey','Ivey Roberts',NULL,NULL,NULL,NULL,NULL,'Both','507631333',NULL,'Sample Data','Ivey','V','Roberts',NULL,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Ivey Roberts',NULL,1,'1966-02-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (133,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Norris','Dr. Norris Nielsen III',NULL,NULL,NULL,NULL,NULL,'Both','2363431158',NULL,'Sample Data','Norris','S','Nielsen',4,4,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Nielsen III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (134,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'cruz.troy@sample.co.uk','cruz.troy@sample.co.uk',NULL,NULL,NULL,'5',NULL,'Both','1753037198',NULL,'Sample Data',NULL,NULL,NULL,NULL,1,NULL,NULL,1,NULL,'Dear cruz.troy@sample.co.uk',1,NULL,'Dear cruz.troy@sample.co.uk',1,NULL,'cruz.troy@sample.co.uk',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (135,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'zopej22@infomail.co.nz','zopej22@infomail.co.nz',NULL,NULL,NULL,NULL,NULL,'Both','38113830',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear zopej22@infomail.co.nz',1,NULL,'Dear zopej22@infomail.co.nz',1,NULL,'zopej22@infomail.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (136,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'herminiaterry65@airmail.net','herminiaterry65@airmail.net',NULL,NULL,NULL,'5',NULL,'Both','2935855282',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear herminiaterry65@airmail.net',1,NULL,'Dear herminiaterry65@airmail.net',1,NULL,'herminiaterry65@airmail.net',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (137,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Florida Technology Solutions','Florida Technology Solutions',NULL,NULL,NULL,'4',NULL,'Both','820948953',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Florida Technology Solutions',NULL,NULL,NULL,0,NULL,NULL,NULL,'Florida Technology Solutions',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (138,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'tanyacooper@fakemail.info','tanyacooper@fakemail.info',NULL,NULL,NULL,'1',NULL,'Both','670956129',NULL,'Sample Data',NULL,NULL,NULL,4,NULL,NULL,NULL,1,NULL,'Dear tanyacooper@fakemail.info',1,NULL,'Dear tanyacooper@fakemail.info',1,NULL,'tanyacooper@fakemail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (139,'Organization',NULL,0,0,0,0,1,0,NULL,NULL,'North Grafton Music Trust','North Grafton Music Trust',NULL,NULL,NULL,'4',NULL,'Both','2050174128',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'North Grafton Music Trust',NULL,NULL,NULL,0,NULL,NULL,62,'North Grafton Music Trust',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (140,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen-Wilson, Sharyn','Sharyn Nielsen-Wilson',NULL,NULL,NULL,'1',NULL,'Both','3252906138',NULL,'Sample Data','Sharyn','K','Nielsen-Wilson',NULL,NULL,NULL,NULL,1,NULL,'Dear Sharyn',1,NULL,'Dear Sharyn',1,NULL,'Sharyn Nielsen-Wilson',NULL,1,'1979-02-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (141,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'North Carolina Arts Alliance','North Carolina Arts Alliance',NULL,NULL,NULL,'5',NULL,'Both','3530843244',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'North Carolina Arts Alliance',NULL,NULL,NULL,0,NULL,NULL,NULL,'North Carolina Arts Alliance',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (142,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Norris','Dr. Norris Lee',NULL,NULL,NULL,'4',NULL,'Both','852217951',NULL,'Sample Data','Norris','','Lee',4,NULL,NULL,NULL,1,NULL,'Dear Norris',1,NULL,'Dear Norris',1,NULL,'Dr. Norris Lee',NULL,2,'1932-10-05',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (143,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Patel-McReynolds, Maria','Maria Patel-McReynolds Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1811015819',NULL,'Sample Data','Maria','I','Patel-McReynolds',NULL,1,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Patel-McReynolds Jr.',NULL,2,'1996-06-18',0,NULL,NULL,NULL,'Ohio Education Fund',NULL,NULL,41,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (144,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Jensen, Lawerence','Lawerence Jensen',NULL,NULL,NULL,'2',NULL,'Both','637585263',NULL,'Sample Data','Lawerence','','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Jensen',NULL,NULL,'1941-10-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (145,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Jameson, Delana','Delana Jameson',NULL,NULL,NULL,'3',NULL,'Both','470285147',NULL,'Sample Data','Delana','A','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Delana',1,NULL,'Dear Delana',1,NULL,'Delana Jameson',NULL,NULL,'1969-03-23',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (146,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Bachman, Rodrigo','Dr. Rodrigo Bachman',NULL,NULL,NULL,NULL,NULL,'Both','1057827767',NULL,'Sample Data','Rodrigo','','Bachman',4,NULL,NULL,NULL,1,NULL,'Dear Rodrigo',1,NULL,'Dear Rodrigo',1,NULL,'Dr. Rodrigo Bachman',NULL,NULL,'1965-06-07',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (147,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Wattson, Barry','Dr. Barry Wattson II',NULL,NULL,NULL,'5',NULL,'Both','3218596255',NULL,'Sample Data','Barry','R','Wattson',4,3,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Dr. Barry Wattson II',NULL,2,'1976-03-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (148,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Lee, Kathleen','Kathleen Lee',NULL,NULL,NULL,NULL,NULL,'Both','2198492721',NULL,'Sample Data','Kathleen','Y','Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Lee',NULL,1,'1964-08-11',0,NULL,NULL,NULL,'Tennessee Poetry Network',NULL,NULL,70,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (149,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ivanovk44@spamalot.org','ivanovk44@spamalot.org',NULL,NULL,NULL,'2',NULL,'Both','2173868536',NULL,'Sample Data',NULL,NULL,NULL,1,NULL,NULL,NULL,1,NULL,'Dear ivanovk44@spamalot.org',1,NULL,'Dear ivanovk44@spamalot.org',1,NULL,'ivanovk44@spamalot.org',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (150,'Individual',NULL,0,1,0,0,1,0,NULL,NULL,'Bachman, Elina','Mrs. Elina Bachman',NULL,NULL,NULL,'1',NULL,'Both','3576497791',NULL,'Sample Data','Elina','Z','Bachman',1,NULL,NULL,NULL,1,NULL,'Dear Elina',1,NULL,'Dear Elina',1,NULL,'Mrs. Elina Bachman',NULL,NULL,'1955-07-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (151,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Terry, Craig','Mr. Craig Terry',NULL,NULL,NULL,'3',NULL,'Both','99954809',NULL,'Sample Data','Craig','','Terry',3,NULL,NULL,NULL,1,NULL,'Dear Craig',1,NULL,'Dear Craig',1,NULL,'Mr. Craig Terry',NULL,2,'1955-05-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (152,'Household',NULL,0,1,0,0,1,0,NULL,NULL,'Bachman-Olsen family','Bachman-Olsen family',NULL,NULL,NULL,'2',NULL,'Both','2711889861',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Bachman-Olsen family',5,NULL,'Dear Bachman-Olsen family',2,NULL,'Bachman-Olsen family',NULL,NULL,NULL,0,NULL,'Bachman-Olsen family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (153,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Nielsen, Sherman','Mr. Sherman Nielsen III',NULL,NULL,NULL,NULL,NULL,'Both','2590733768',NULL,'Sample Data','Sherman','Z','Nielsen',3,4,NULL,NULL,1,NULL,'Dear Sherman',1,NULL,'Dear Sherman',1,NULL,'Mr. Sherman Nielsen III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (154,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'McReynolds, Ashlie','Ashlie McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','3165583766',NULL,'Sample Data','Ashlie','B','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Ashlie',1,NULL,'Dear Ashlie',1,NULL,'Ashlie McReynolds',NULL,1,'1992-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (155,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'louolsen-jameson@example.co.nz','louolsen-jameson@example.co.nz',NULL,NULL,NULL,'4',NULL,'Both','2108655243',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear louolsen-jameson@example.co.nz',1,NULL,'Dear louolsen-jameson@example.co.nz',1,NULL,'louolsen-jameson@example.co.nz',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (156,'Household',NULL,0,1,0,0,0,0,NULL,NULL,'Barkley family','Barkley family',NULL,NULL,NULL,'3',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,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (157,'Organization',NULL,1,0,0,0,0,0,NULL,NULL,'Nebraska Peace Alliance','Nebraska Peace Alliance',NULL,NULL,NULL,'1',NULL,'Both','1550116551',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Nebraska Peace Alliance',NULL,NULL,NULL,0,NULL,NULL,37,'Nebraska Peace Alliance',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (158,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jensen, Kathlyn','Kathlyn Jensen',NULL,NULL,NULL,'4',NULL,'Both','3302532161',NULL,'Sample Data','Kathlyn','U','Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathlyn',1,NULL,'Dear Kathlyn',1,NULL,'Kathlyn Jensen',NULL,1,'1955-07-12',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (159,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel, Maria','Maria Patel Jr.',NULL,NULL,NULL,NULL,NULL,'Both','1297212984',NULL,'Sample Data','Maria','','Patel',NULL,1,NULL,NULL,1,NULL,'Dear Maria',1,NULL,'Dear Maria',1,NULL,'Maria Patel Jr.',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (160,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Zope, Shad','Mr. Shad Zope',NULL,NULL,NULL,'2',NULL,'Both','2740120938',NULL,'Sample Data','Shad','','Zope',3,NULL,NULL,NULL,1,NULL,'Dear Shad',1,NULL,'Dear Shad',1,NULL,'Mr. Shad Zope',NULL,2,'1944-08-27',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (161,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Jameson, Lou','Lou Jameson',NULL,NULL,NULL,'5',NULL,'Both','1885385788',NULL,'Sample Data','Lou','','Jameson',NULL,NULL,NULL,NULL,1,NULL,'Dear Lou',1,NULL,'Dear Lou',1,NULL,'Lou Jameson',NULL,NULL,'1933-01-26',1,'2021-09-09',NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (162,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Ivanov-Samuels, Ashley','Ashley Ivanov-Samuels Jr.',NULL,NULL,NULL,'4',NULL,'Both','2789736375',NULL,'Sample Data','Ashley','V','Ivanov-Samuels',NULL,1,NULL,NULL,1,NULL,'Dear Ashley',1,NULL,'Dear Ashley',1,NULL,'Ashley Ivanov-Samuels Jr.',NULL,NULL,'2015-07-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (163,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Evansville Peace Partners','Evansville Peace Partners',NULL,NULL,NULL,'5',NULL,'Both','4258160315',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Evansville Peace Partners',NULL,NULL,NULL,0,NULL,NULL,103,'Evansville Peace Partners',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (164,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Nielsen, Ivey','Dr. Ivey Nielsen',NULL,NULL,NULL,'1',NULL,'Both','2878114453',NULL,'Sample Data','Ivey','L','Nielsen',4,NULL,NULL,NULL,1,NULL,'Dear Ivey',1,NULL,'Dear Ivey',1,NULL,'Dr. Ivey Nielsen',NULL,NULL,'1959-04-22',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (165,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Patel-McReynolds family','Patel-McReynolds family',NULL,NULL,NULL,NULL,NULL,'Both','1172256433',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Patel-McReynolds family',5,NULL,'Dear Patel-McReynolds family',2,NULL,'Patel-McReynolds family',NULL,NULL,NULL,0,NULL,'Patel-McReynolds family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (166,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Zope, Roland','Dr. Roland Zope Sr.',NULL,NULL,NULL,NULL,NULL,'Both','1007442606',NULL,'Sample Data','Roland','F','Zope',4,2,NULL,NULL,1,NULL,'Dear Roland',1,NULL,'Dear Roland',1,NULL,'Dr. Roland Zope Sr.',NULL,NULL,'1993-09-11',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (167,'Individual',NULL,1,1,0,0,0,0,NULL,NULL,'Wilson, Sonny','Mr. Sonny Wilson',NULL,NULL,NULL,'3',NULL,'Both','1288997537',NULL,'Sample Data','Sonny','','Wilson',3,NULL,NULL,NULL,1,NULL,'Dear Sonny',1,NULL,'Dear Sonny',1,NULL,'Mr. Sonny Wilson',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (168,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'troynielsen98@infomail.info','troynielsen98@infomail.info',NULL,NULL,NULL,NULL,NULL,'Both','3598722785',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear troynielsen98@infomail.info',1,NULL,'Dear troynielsen98@infomail.info',1,NULL,'troynielsen98@infomail.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (169,'Organization',NULL,0,0,0,0,0,0,NULL,NULL,'Wisconsin Software Partners','Wisconsin Software Partners',NULL,NULL,NULL,NULL,NULL,'Both','3701572472',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Wisconsin Software Partners',NULL,NULL,NULL,0,NULL,NULL,33,'Wisconsin Software Partners',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (170,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Blackwell, Jed','Jed Blackwell',NULL,NULL,NULL,NULL,NULL,'Both','38907930',NULL,'Sample Data','Jed','K','Blackwell',NULL,NULL,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Jed Blackwell',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (171,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Olsen-Cruz, Eleonor','Eleonor Olsen-Cruz',NULL,NULL,NULL,NULL,NULL,'Both','4033250154',NULL,'Sample Data','Eleonor','','Olsen-Cruz',NULL,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Eleonor Olsen-Cruz',NULL,1,'2010-07-04',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (172,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Bachman, Juliann','Ms. Juliann Bachman',NULL,NULL,NULL,NULL,NULL,'Both','3603929563',NULL,'Sample Data','Juliann','S','Bachman',2,NULL,NULL,NULL,1,NULL,'Dear Juliann',1,NULL,'Dear Juliann',1,NULL,'Ms. Juliann Bachman',NULL,1,'1940-01-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (173,'Organization',NULL,0,1,0,0,0,0,NULL,NULL,'Global Empowerment Association','Global Empowerment Association',NULL,NULL,NULL,'1',NULL,'Both','1270250093',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,'Global Empowerment Association',NULL,NULL,NULL,0,NULL,NULL,182,'Global Empowerment Association',NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (174,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Yadav, Justina','Justina Yadav',NULL,NULL,NULL,NULL,NULL,'Both','807357097',NULL,'Sample Data','Justina','A','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Justina',1,NULL,'Dear Justina',1,NULL,'Justina Yadav',NULL,1,'1985-11-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (175,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'ÅÄ…chowski, Teresa','Teresa ÅÄ…chowski',NULL,NULL,NULL,'4',NULL,'Both','4252064413',NULL,'Sample Data','Teresa','','ÅÄ…chowski',NULL,NULL,NULL,NULL,1,NULL,'Dear Teresa',1,NULL,'Dear Teresa',1,NULL,'Teresa ÅÄ…chowski',NULL,1,'1940-12-18',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (176,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Yadav-McReynolds, Eleonor','Mrs. Eleonor Yadav-McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','1175861092',NULL,'Sample Data','Eleonor','J','Yadav-McReynolds',1,NULL,NULL,NULL,1,NULL,'Dear Eleonor',1,NULL,'Dear Eleonor',1,NULL,'Mrs. Eleonor Yadav-McReynolds',NULL,NULL,'1971-09-16',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (177,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Adams, BrzÄ™czysÅ‚aw','BrzÄ™czysÅ‚aw Adams III',NULL,NULL,NULL,NULL,NULL,'Both','3378454317',NULL,'Sample Data','BrzÄ™czysÅ‚aw','','Adams',NULL,4,NULL,NULL,1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'Dear BrzÄ™czysÅ‚aw',1,NULL,'BrzÄ™czysÅ‚aw Adams III',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (178,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Kathleen','Kathleen Yadav',NULL,NULL,NULL,NULL,NULL,'Both','1878757243',NULL,'Sample Data','Kathleen','O','Yadav',NULL,NULL,NULL,NULL,1,NULL,'Dear Kathleen',1,NULL,'Dear Kathleen',1,NULL,'Kathleen Yadav',NULL,1,'1936-07-24',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (179,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'González, Felisha','Ms. Felisha González',NULL,NULL,NULL,'2',NULL,'Both','1431109871',NULL,'Sample Data','Felisha','','González',2,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Ms. Felisha González',NULL,1,'1953-10-15',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (180,'Individual',NULL,1,0,0,0,1,0,NULL,NULL,'Parker, Erik','Erik Parker',NULL,NULL,NULL,'3',NULL,'Both','1036871388',NULL,'Sample Data','Erik','','Parker',NULL,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Parker',NULL,2,'2003-05-17',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (181,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Nielsen, Damaris','Damaris Nielsen',NULL,NULL,NULL,NULL,NULL,'Both','3513005932',NULL,'Sample Data','Damaris','F','Nielsen',NULL,NULL,NULL,NULL,1,NULL,'Dear Damaris',1,NULL,'Dear Damaris',1,NULL,'Damaris Nielsen',NULL,1,NULL,0,NULL,NULL,NULL,'Tennessee Action Partnership',NULL,NULL,95,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (182,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Patel, Winford','Mr. Winford Patel',NULL,NULL,NULL,'5',NULL,'Both','2431196191',NULL,'Sample Data','Winford','G','Patel',3,NULL,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Mr. Winford Patel',NULL,2,'1994-03-25',0,NULL,NULL,NULL,'Global Empowerment Association',NULL,NULL,173,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (183,'Household',NULL,0,0,0,0,0,0,NULL,NULL,'Cruz-Lee family','Cruz-Lee family',NULL,NULL,NULL,NULL,NULL,'Both','4061803943',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Cruz-Lee family',5,NULL,'Dear Cruz-Lee family',2,NULL,'Cruz-Lee family',NULL,NULL,NULL,0,NULL,'Cruz-Lee family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (184,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'McReynolds, Felisha','Felisha McReynolds',NULL,NULL,NULL,'4',NULL,'Both','2265905114',NULL,'Sample Data','Felisha','','McReynolds',NULL,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Felisha McReynolds',NULL,1,'1959-10-29',0,NULL,NULL,NULL,'Florida Development Alliance',NULL,NULL,93,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (185,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Samuels, Sanford','Dr. Sanford Samuels III',NULL,NULL,NULL,NULL,NULL,'Both','4251375550',NULL,'Sample Data','Sanford','Q','Samuels',4,4,NULL,NULL,1,NULL,'Dear Sanford',1,NULL,'Dear Sanford',1,NULL,'Dr. Sanford Samuels III',NULL,2,'1974-05-09',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (186,'Individual',NULL,1,0,0,0,0,0,NULL,NULL,'Cooper, Herminia','Herminia Cooper',NULL,NULL,NULL,'5',NULL,'Both','3531219712',NULL,'Sample Data','Herminia','','Cooper',NULL,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Herminia Cooper',NULL,1,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (187,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'lincolncooper47@sample.info','lincolncooper47@sample.info',NULL,NULL,NULL,NULL,NULL,'Both','3826299767',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,NULL,'Dear lincolncooper47@sample.info',1,NULL,'Dear lincolncooper47@sample.info',1,NULL,'lincolncooper47@sample.info',NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (188,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Prentice, Billy','Dr. Billy Prentice',NULL,NULL,NULL,'2',NULL,'Both','3571999002',NULL,'Sample Data','Billy','J','Prentice',4,NULL,NULL,NULL,1,NULL,'Dear Billy',1,NULL,'Dear Billy',1,NULL,'Dr. Billy Prentice',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (189,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Olsen-Cruz, Erik','Erik Olsen-Cruz III',NULL,NULL,NULL,'2',NULL,'Both','1633838496',NULL,'Sample Data','Erik','W','Olsen-Cruz',NULL,4,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Erik Olsen-Cruz III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (190,'Household',NULL,1,0,0,0,0,0,NULL,NULL,'Adams-Roberts family','Adams-Roberts family',NULL,NULL,NULL,'4',NULL,'Both','2595255818',NULL,'Sample Data',NULL,NULL,NULL,NULL,NULL,NULL,NULL,5,NULL,'Dear Adams-Roberts family',5,NULL,'Dear Adams-Roberts family',2,NULL,'Adams-Roberts family',NULL,NULL,NULL,0,NULL,'Adams-Roberts family',NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (191,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels-Jensen, Elizabeth','Elizabeth Samuels-Jensen',NULL,NULL,NULL,NULL,NULL,'Both','3987998453',NULL,'Sample Data','Elizabeth','S','Samuels-Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Elizabeth',1,NULL,'Dear Elizabeth',1,NULL,'Elizabeth Samuels-Jensen',NULL,1,'2016-02-12',0,NULL,NULL,NULL,'Van Ness Health Services',NULL,NULL,120,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (192,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels-Jensen, Maxwell','Maxwell Samuels-Jensen',NULL,NULL,NULL,NULL,NULL,'Both','2531308656',NULL,'Sample Data','Maxwell','H','Samuels-Jensen',NULL,NULL,NULL,NULL,1,NULL,'Dear Maxwell',1,NULL,'Dear Maxwell',1,NULL,'Maxwell Samuels-Jensen',NULL,2,'2017-06-03',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (193,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Samson, Barry','Barry Samson Sr.',NULL,NULL,NULL,'3',NULL,'Both','100370241',NULL,'Sample Data','Barry','','Samson',NULL,2,NULL,NULL,1,NULL,'Dear Barry',1,NULL,'Dear Barry',1,NULL,'Barry Samson Sr.',NULL,NULL,'1949-03-29',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (194,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Samuels, Winford','Dr. Winford Samuels',NULL,NULL,NULL,'3',NULL,'Both','3850006976',NULL,'Sample Data','Winford','I','Samuels',4,NULL,NULL,NULL,1,NULL,'Dear Winford',1,NULL,'Dear Winford',1,NULL,'Dr. Winford Samuels',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (195,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Terrell, Erik','Mr. Erik Terrell',NULL,NULL,NULL,'2',NULL,'Both','3685580578',NULL,'Sample Data','Erik','','Terrell',3,NULL,NULL,NULL,1,NULL,'Dear Erik',1,NULL,'Dear Erik',1,NULL,'Mr. Erik Terrell',NULL,2,'1958-09-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (196,'Individual',NULL,0,1,0,0,0,0,NULL,NULL,'Deforest, Lawerence','Lawerence Deforest II',NULL,NULL,NULL,'5',NULL,'Both','2962516652',NULL,'Sample Data','Lawerence','','Deforest',NULL,3,NULL,NULL,1,NULL,'Dear Lawerence',1,NULL,'Dear Lawerence',1,NULL,'Lawerence Deforest II',NULL,2,'1983-07-28',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (197,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Yadav, Jed','Dr. Jed Yadav Sr.',NULL,NULL,NULL,'4',NULL,'Both','3268610129',NULL,'Sample Data','Jed','P','Yadav',4,2,NULL,NULL,1,NULL,'Dear Jed',1,NULL,'Dear Jed',1,NULL,'Dr. Jed Yadav Sr.',NULL,2,'1965-05-10',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (198,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Smith, Scott','Dr. Scott Smith III',NULL,NULL,NULL,'1',NULL,'Both','786607395',NULL,'Sample Data','Scott','','Smith',4,4,NULL,NULL,1,NULL,'Dear Scott',1,NULL,'Dear Scott',1,NULL,'Dr. Scott Smith III',NULL,2,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (199,'Individual',NULL,1,1,0,0,1,0,NULL,NULL,'Jones, Felisha','Mrs. Felisha Jones',NULL,NULL,NULL,NULL,NULL,'Both','2947770839',NULL,'Sample Data','Felisha','','Jones',1,NULL,NULL,NULL,1,NULL,'Dear Felisha',1,NULL,'Dear Felisha',1,NULL,'Mrs. Felisha Jones',NULL,NULL,'1969-12-02',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:22'), + (200,'Individual',NULL,0,0,0,0,1,0,NULL,NULL,'Cruz-Lee, Brent','Brent Cruz-Lee',NULL,NULL,NULL,'5',NULL,'Both','658326500',NULL,'Sample Data','Brent','','Cruz-Lee',NULL,NULL,NULL,NULL,1,NULL,'Dear Brent',1,NULL,'Dear Brent',1,NULL,'Brent Cruz-Lee',NULL,2,'1990-04-25',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (201,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Patel-McReynolds, Herminia','Ms. Herminia Patel-McReynolds',NULL,NULL,NULL,NULL,NULL,'Both','241456420',NULL,'Sample Data','Herminia','','Patel-McReynolds',2,NULL,NULL,NULL,1,NULL,'Dear Herminia',1,NULL,'Dear Herminia',1,NULL,'Ms. Herminia Patel-McReynolds',NULL,1,'1985-11-08',0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:22','2022-05-04 18:47:23'), + (202,'Individual',NULL,0,0,0,0,0,0,NULL,NULL,'Lee, Jenny','Jenny Lee',NULL,NULL,NULL,NULL,'en_US','Both','e6ea6e338778124f4fe84ac57aaecc7e',NULL,NULL,'Jenny',NULL,'Lee',NULL,NULL,NULL,1,1,NULL,'Dear Jenny',1,NULL,'Dear Jenny',1,NULL,'Jenny Lee','Volunteer coordinator',NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,'2022-05-04 18:47:24','2022-05-04 18:47:24'); /*!40000 ALTER TABLE `civicrm_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -2167,117 +2172,117 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution` WRITE; /*!40000 ALTER TABLE `civicrm_contribution` DISABLE KEYS */; INSERT INTO `civicrm_contribution` (`id`, `contact_id`, `financial_type_id`, `contribution_page_id`, `payment_instrument_id`, `receive_date`, `non_deductible_amount`, `total_amount`, `fee_amount`, `net_amount`, `trxn_id`, `invoice_id`, `invoice_number`, `currency`, `cancel_date`, `cancel_reason`, `receipt_date`, `thankyou_date`, `source`, `amount_level`, `contribution_recur_id`, `is_test`, `is_pay_later`, `contribution_status_id`, `address_id`, `check_number`, `campaign_id`, `creditnote_id`, `tax_amount`, `revenue_recognition_date`, `is_template`) VALUES - (1,2,1,NULL,4,'2012-04-14 13:30:18',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0), - (2,4,1,NULL,1,'2020-01-14 13:30:18',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (3,6,1,NULL,4,'2016-03-20 00:30:18',0.00,25.00,NULL,NULL,'GBP12',NULL,NULL,'GBP',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0), - (4,8,1,NULL,4,'2020-01-14 13:30:18',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0), - (5,4,1,NULL,1,'2020-01-14 13:30:18',0.00,50.00,NULL,NULL,'Q90901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (6,16,1,NULL,4,'2022-01-19 12:48:18',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0), - (7,19,1,NULL,1,'2022-04-12 13:30:18',0.00,1750.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0), - (8,82,1,NULL,1,'2021-08-20 21:41:18',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (9,92,1,NULL,1,'2021-05-14 13:30:18',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (10,34,1,NULL,1,'2017-11-21 15:30:18',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (11,71,1,NULL,1,'2022-04-13 09:30:18',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'JPY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (12,43,1,NULL,1,'2021-01-14 02:56:58',0.00,50.00,NULL,NULL,'P291X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (13,32,1,NULL,1,'2022-01-14 00:00:00',0.00,50.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (14,32,1,NULL,1,'2022-02-14 00:00:00',0.00,50.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (15,59,1,NULL,1,'2021-01-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I591',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (16,59,1,NULL,1,'2021-02-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I592',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (17,59,1,NULL,1,'2021-03-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I593',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (18,59,1,NULL,1,'2021-04-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I594',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (19,59,1,NULL,1,'2021-05-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I595',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (20,59,1,NULL,1,'2021-06-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I596',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (21,59,1,NULL,1,'2021-07-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I597',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (22,59,1,NULL,1,'2021-08-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I598',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (23,59,1,NULL,1,'2021-09-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I599',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (24,59,1,NULL,1,'2021-10-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I5910',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (25,59,1,NULL,1,'2021-11-14 13:30:18',0.00,25.00,NULL,NULL,'PL32I5911',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (26,99,1,NULL,1,'2021-08-14 13:30:18',0.00,10.00,NULL,NULL,'PL32I991',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (27,99,1,NULL,1,'2021-09-14 13:30:18',0.00,10.00,NULL,NULL,'PL32I992',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (28,99,1,NULL,1,'2021-10-14 13:30:18',0.00,10.00,NULL,NULL,'PL32I993',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (29,99,1,NULL,1,'2021-11-14 13:30:18',0.00,10.00,NULL,NULL,'PL32I994',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (30,99,1,NULL,1,'2021-12-14 13:30:18',0.00,10.00,NULL,NULL,'PL32I995',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (31,103,1,NULL,1,'2022-03-14 13:30:18',0.00,5.00,NULL,NULL,'PL32I1031',NULL,NULL,'EUR',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,3,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (32,53,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'5a883e9f141373d0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (33,80,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'2e4337611730f952',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (34,30,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'2b00f8c369a4eb08',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (35,185,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'9fabb124bc204c7b',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (36,36,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'584e4c5ac815c02e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (37,58,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'901461c9f1690b15',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (38,166,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'9e95d2bc32a624d6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (39,61,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'d5add53cdb4db026',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (40,134,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'57ebf6868b78f973',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (41,139,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'ae911eddd684538e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (42,122,2,NULL,1,'2022-04-14 13:30:18',0.00,1200.00,NULL,NULL,'2a18a34ce19008d6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (43,171,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'152c5af6a7c5a397',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (44,23,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'22a84e6e34ddd5b8',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (45,68,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'4e8825a4db31c939',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (46,67,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'5bf7f786194f69d2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (47,22,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'a4eee5fba87a445f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (48,199,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'f07db1159a3b586c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (49,110,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'5ae148f4a65c974f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (50,106,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'89f2885bef90791d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (51,102,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'81d3f5e12fa2a28a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (52,18,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'215e07397041c8cc',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (53,142,2,NULL,1,'2022-04-14 13:30:18',0.00,1200.00,NULL,NULL,'f7e3c868b37a4325',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (54,34,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'aef86e4ca219dd13',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (55,113,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'a1cde7dfd6729f80',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (56,137,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'d1b03d65b61102fd',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (57,2,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'c2eb9cf9a813d751',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (58,56,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'c96f15d653474ceb',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (59,89,2,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'c29a49ec2417dcb1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (60,177,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'1c08e387395f1eb8',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (61,197,2,NULL,1,'2022-04-14 13:30:18',0.00,100.00,NULL,NULL,'98f9e715a8ef7478',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (63,39,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'c40c105aea7c606b',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (64,66,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'b64d3291fcf318e1',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (65,169,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'9c6cf4bae28beb63',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (66,8,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'dbcfa396ae8c6048',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (67,147,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'f8c6db3c7896a527',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (68,83,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'f367c487143095d9',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (69,16,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'48b3b2fb1583accc',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (70,56,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'30a0c170bad9da17',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (71,95,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'e3aaa48ce523e85c',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (72,47,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'8e32409f51bc2adf',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (73,88,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'ff116ee40154cb1f',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (74,43,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'6c6d0c5cc6a26b35',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (75,72,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'de5d6f6062daf74e',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (76,55,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'9e80821a541f8fb9',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (77,180,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'669230755b3aac7a',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (78,188,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'17c3bc04fee36354',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (79,143,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'df9e4dfa9b870127',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (80,145,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'2023b1978c91d4cc',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (81,41,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'53b4462b373569b2',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (82,184,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'290c011a82328437',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (83,30,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'16cf0431caa61b04',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (84,61,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'2770779cd9d01e9e',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (85,40,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'ad8eb58807eb67a9',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (86,141,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'cccec0ff5302efa3',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (87,124,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'5dc28b491a757c3c',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (88,109,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'7eedc4124d8ab293',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (89,115,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'4f14abc2e71986dd',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (90,96,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'87552b7d9efa8637',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (91,57,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'f0d5086ff9868244',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (92,60,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'073ea06faa57d30b',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (93,118,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'7a9df9cd3eb5ac02',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (94,7,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'67af66a6086bd81e',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (95,158,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'99c62972919f3d1f',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (96,179,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'660a71959a6ea204',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (97,105,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'2d8d4184fcac4196',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (98,107,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'a20828653f3f1137',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (99,71,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'c7089de57bbce672',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (100,17,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'412d137e17b65683',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (101,14,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'1b198625ca88ef2a',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (102,12,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'d828aa6d3565df94',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (103,37,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'65519963ac86c7ed',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (104,168,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'b5cfee8ed497694b',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (105,173,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'ba8e52425c181d86',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (106,186,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'4c76baccb7c2b861',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (107,20,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'dd0a4cb09082fbe8',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (108,200,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'e226051c42c71e58',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (109,148,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'3639dce271550b62',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (110,155,4,NULL,1,'2022-04-14 13:30:18',0.00,50.00,NULL,NULL,'a79bec69def12209',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (111,130,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'96041fafb81c17c0',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), - (112,178,4,NULL,1,'2022-04-14 13:30:18',0.00,800.00,NULL,NULL,'6bfa5fb45795298b',NULL,NULL,'USD',NULL,NULL,'2022-04-14 13:30:18',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); + (1,2,1,NULL,4,'2012-05-04 18:47:25',0.00,125.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'1041',NULL,NULL,NULL,NULL,0), + (2,4,1,NULL,1,'2020-02-04 18:47:25',0.00,50.00,NULL,NULL,'P20901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (3,6,1,NULL,4,'2016-04-09 05:47:25',0.00,25.00,NULL,NULL,'GBP12',NULL,NULL,'GBP',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'2095',NULL,NULL,NULL,NULL,0), + (4,8,1,NULL,4,'2020-02-04 18:47:25',0.00,50.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'10552',NULL,NULL,NULL,NULL,0), + (5,4,1,NULL,1,'2020-02-04 18:47:25',0.00,50.00,NULL,NULL,'Q90901X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (6,16,1,NULL,4,'2022-02-08 18:05:25',0.00,500.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'April Mailer 1',NULL,NULL,0,0,1,NULL,'509',NULL,NULL,NULL,NULL,0), + (7,19,1,NULL,1,'2022-05-02 18:47:25',0.00,1750.00,NULL,NULL,NULL,NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,'102',NULL,NULL,NULL,NULL,0), + (8,82,1,NULL,1,'2021-09-10 02:58:25',0.00,50.00,NULL,NULL,'P20193L2',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (9,92,1,NULL,1,'2021-06-04 18:47:25',0.00,10.00,NULL,NULL,'P40232Y3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (10,34,1,NULL,1,'2017-12-12 20:47:25',0.00,250.00,NULL,NULL,'P20193L6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Help CiviCRM',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (11,71,1,NULL,1,'2022-05-03 14:47:25',0.00,500.00,NULL,NULL,'PL71',NULL,NULL,'JPY',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (12,43,1,NULL,1,'2021-02-04 08:14:05',0.00,50.00,NULL,NULL,'P291X1',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Online: Save the Penguins',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (13,32,1,NULL,1,'2022-02-04 00:00:00',0.00,50.00,NULL,NULL,'PL32I',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (14,32,1,NULL,1,'2022-03-04 00:00:00',0.00,50.00,NULL,NULL,'PL32II',NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (15,59,1,NULL,1,'2021-02-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I591',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (16,59,1,NULL,1,'2021-03-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I592',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (17,59,1,NULL,1,'2021-04-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I593',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (18,59,1,NULL,1,'2021-05-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I594',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (19,59,1,NULL,1,'2021-06-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I595',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (20,59,1,NULL,1,'2021-07-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I596',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (21,59,1,NULL,1,'2021-08-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I597',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (22,59,1,NULL,1,'2021-09-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I598',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (23,59,1,NULL,1,'2021-10-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I599',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (24,59,1,NULL,1,'2021-11-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I5910',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (25,59,1,NULL,1,'2021-12-04 18:47:25',0.00,25.00,NULL,NULL,'PL32I5911',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,1,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (26,99,1,NULL,1,'2021-09-04 18:47:25',0.00,10.00,NULL,NULL,'PL32I991',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (27,99,1,NULL,1,'2021-10-04 18:47:25',0.00,10.00,NULL,NULL,'PL32I992',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (28,99,1,NULL,1,'2021-11-04 18:47:25',0.00,10.00,NULL,NULL,'PL32I993',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (29,99,1,NULL,1,'2021-12-04 18:47:25',0.00,10.00,NULL,NULL,'PL32I994',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (30,99,1,NULL,1,'2022-01-04 18:47:25',0.00,10.00,NULL,NULL,'PL32I995',NULL,NULL,'CAD',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,2,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (31,103,1,NULL,1,'2022-04-04 18:47:25',0.00,5.00,NULL,NULL,'PL32I1031',NULL,NULL,'EUR',NULL,NULL,NULL,NULL,'Recurring contribution',NULL,3,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (32,100,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'d9c85393c88cd596',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (33,168,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'00b890837ed6c960',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (34,135,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'c04ae16dbf6d967f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (35,182,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'1b501973e0ee1c15',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (36,2,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'0aeded2c8154700a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (37,35,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'85c47249a3ddcba6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (38,61,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'0ee59e65ffe2070c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (39,37,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'b66fc3490aea18b3',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (40,111,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'082c2062076a1d28',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (41,170,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'01f029476b657e9d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (42,117,2,NULL,1,'2022-05-04 18:47:25',0.00,1200.00,NULL,NULL,'10f11d2d9e6e5616',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (43,82,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'63b0ed9561fa7780',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (44,191,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'b2b0abce0dfbc190',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (45,54,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'517985fa0d5ab91a',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (46,192,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'49959d809e289b3d',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (47,115,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'03257f054c993e87',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (48,60,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'17128ad66f1c4503',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (49,46,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'2e48178a5a7b18e5',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (50,189,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'49e0e3bfab39e564',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (51,155,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'ea4c779831742778',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (52,86,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'16cb89310fd3e0d8',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (53,15,2,NULL,1,'2022-05-04 18:47:25',0.00,1200.00,NULL,NULL,'cc7f90a2726b4247',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Lifetime Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (54,178,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'41fcaa5d172d91bf',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (55,67,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'54faf2ecc1879724',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (56,142,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'5d7bcf571d1aa2b0',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (57,39,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'3b9a02b81d76888e',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (58,22,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'b498dad64ac6247c',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (59,140,2,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'47e756cb52fe87a6',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'Student Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (60,25,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'766cf0fa6954f916',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (61,57,2,NULL,1,'2022-05-04 18:47:25',0.00,100.00,NULL,NULL,'7d7cd7323a72211f',NULL,NULL,'USD',NULL,NULL,NULL,NULL,'General Membership: Offline signup',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (63,74,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'ad906afc299009df',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (64,102,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'4d2083f4307b8f3a',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (65,140,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'0e640185c2188f96',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (66,153,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'63d08c6920a0ca43',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (67,137,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'4ac8dc67b4b031d9',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (68,171,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'03dfa749c620c60e',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (69,61,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'25c029e765afa1f5',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (70,34,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'48da24c83958fc4d',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (71,196,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'6f04edd9a3f8b0b4',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (72,52,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'b84acade775f1b79',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (73,58,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'dce8a8d23d7b893a',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (74,100,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'6ab5af0fb6f7a8ae',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (75,60,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'6d776d4763f9b8db',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (76,73,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'424d08a38367d59c',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (77,139,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'ee89c00b7f57b45a',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (78,87,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'e55d8ffa24512aa2',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (79,7,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'f805c74e2a175965',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (80,49,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'99b37b1a68fcf65f',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (81,65,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'07155e592d15767e',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (82,190,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'e82a842601748b75',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (83,41,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'8b53dce5cb8ca2b9',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (84,151,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'54babef7fc67b10a',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (85,157,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'c5908ae3c756325e',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (86,75,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'c2c5f2ab80ad6d6f',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (87,56,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'00f104abdd46d7d5',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (88,201,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'b9e0c3082d2950d7',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (89,162,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'07acab4ec9d5aa89',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (90,1,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'ee91bc49364d8434',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (91,79,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'7e9792e93db6bc8f',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (92,71,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'651faada3d3ebb17',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (93,183,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'71a147a0b0838a78',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (94,133,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'98707aae2978bf75',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (95,107,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'51a8def6a1eb096a',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (96,33,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'97efceb09a80a487',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (97,4,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'acad8f4145a7e998',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (98,68,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'20e66244c3daa6f3',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (99,53,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'c090a6e440438757',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (100,177,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'f04c70f41e32fe7c',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (101,104,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'0f1627b7f174f5f8',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (102,96,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'31cfb1989c05e456',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (103,174,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'0716249afae9e9bc',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (104,101,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'569d40a3c31d53c1',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (105,176,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'459f01c6d6e70b21',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (106,134,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'15820b216936ed97',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (107,67,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'9b849ecc61058c78',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (108,78,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'a30a94b74ac48b9c',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (109,191,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'ba52c471ed88fe25',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Fall Fundraiser Dinner : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (110,70,4,NULL,1,'2022-05-04 18:47:25',0.00,50.00,NULL,NULL,'df0f15e4540dd801',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Summer Solstice Festival Day Concert : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (111,150,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'e13fe38f61d5a383',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0), + (112,111,4,NULL,1,'2022-05-04 18:47:25',0.00,800.00,NULL,NULL,'9cde729bc4c25ec2',NULL,NULL,'USD',NULL,NULL,'2022-05-04 18:47:25',NULL,'Rain-forest Cup Youth Soccer Tournament : Offline registration',NULL,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL,NULL,0); /*!40000 ALTER TABLE `civicrm_contribution` ENABLE KEYS */; UNLOCK TABLES; @@ -2310,9 +2315,9 @@ UNLOCK TABLES; LOCK TABLES `civicrm_contribution_recur` WRITE; /*!40000 ALTER TABLE `civicrm_contribution_recur` DISABLE KEYS */; INSERT INTO `civicrm_contribution_recur` (`id`, `contact_id`, `amount`, `currency`, `frequency_unit`, `frequency_interval`, `installments`, `start_date`, `create_date`, `modified_date`, `cancel_date`, `cancel_reason`, `end_date`, `processor_id`, `payment_token_id`, `trxn_id`, `invoice_id`, `contribution_status_id`, `is_test`, `cycle_day`, `next_sched_contribution_date`, `failure_count`, `failure_retry_date`, `auto_renew`, `payment_processor_id`, `financial_type_id`, `payment_instrument_id`, `campaign_id`, `is_email_receipt`) VALUES - (1,59,25.00,'USD','month',1,12,'2021-01-14 13:30:18','2022-04-14 13:30:18','2022-04-14 03:30:18',NULL,'',NULL,'CLC45',NULL,'56799',NULL,1,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), - (2,99,10.00,'CAD','month',1,6,'2021-08-14 13:30:18','2022-04-14 13:30:18','2022-04-14 03:30:18','2022-03-14 13:30:18','No longer interested',NULL,'CLR35',NULL,'22799',NULL,3,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), - (3,103,5.00,'EUR','month',3,3,'2022-03-14 13:30:18','2022-04-14 13:30:18','2022-04-14 03:30:18',NULL,'',NULL,'EGR12',NULL,'44889',NULL,5,0,1,'2022-06-14 13:30:18',0,NULL,0,1,NULL,NULL,NULL,1); + (1,59,25.00,'USD','month',1,12,'2021-02-04 18:47:25','2022-05-04 18:47:25','2022-05-04 18:47:25',NULL,'',NULL,'CLC45',NULL,'56799',NULL,1,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), + (2,99,10.00,'CAD','month',1,6,'2021-09-04 18:47:25','2022-05-04 18:47:25','2022-05-04 18:47:25','2022-04-04 18:47:25','No longer interested',NULL,'CLR35',NULL,'22799',NULL,3,0,1,NULL,0,NULL,0,1,NULL,NULL,NULL,1), + (3,103,5.00,'EUR','month',3,3,'2022-04-04 18:47:25','2022-05-04 18:47:25','2022-05-04 18:47:25',NULL,'',NULL,'EGR12',NULL,'44889',NULL,5,0,1,'2022-07-04 18:47:25',0,NULL,0,1,NULL,NULL,NULL,1); /*!40000 ALTER TABLE `civicrm_contribution_recur` ENABLE KEYS */; UNLOCK TABLES; @@ -2323,8 +2328,8 @@ 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,9,23,10.00,'USD',1,1,'Jones Family','Helping Hands',10), - (2,10,23,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); + (1,9,22,10.00,'USD',1,1,'Jones Family','Helping Hands',10), + (2,10,22,250.00,'USD',1,1,'Annie and the kids','Annie Helps',10); /*!40000 ALTER TABLE `civicrm_contribution_soft` ENABLE KEYS */; UNLOCK TABLES; @@ -2933,7 +2938,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES - (1,'Default Domain Name',NULL,'5.49.4',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); + (1,'Default Domain Name',NULL,'5.50.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -2945,211 +2950,189 @@ LOCK TABLES `civicrm_email` WRITE; /*!40000 ALTER TABLE `civicrm_email` DISABLE KEYS */; INSERT INTO `civicrm_email` (`id`, `contact_id`, `location_type_id`, `email`, `is_primary`, `is_billing`, `on_hold`, `is_bulkmail`, `hold_date`, `reset_date`, `signature_text`, `signature_html`) VALUES (1,1,1,'fixme.domainemail@example.org',1,0,0,0,NULL,NULL,NULL,NULL), - (2,181,1,'samuelsj@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (3,181,1,'jsamuels38@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (4,69,1,'samuels.kiara@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (5,69,1,'samuels.kiara@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (6,94,1,'margaretsmith@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (7,94,1,'smith.margaret@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (8,32,1,'claudiom7@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (9,32,1,'mller.claudio56@sample.net',0,0,0,0,NULL,NULL,NULL,NULL), - (10,67,1,'kiarac93@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (11,85,1,'kjensen@mymail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (12,85,1,'kiaraj49@notmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (13,40,1,'blackwell.lou@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (14,40,1,'blackwell.lou@lol.com',0,0,0,0,NULL,NULL,NULL,NULL), - (15,59,1,'valenew12@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), - (16,10,1,'angelikaterrell@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (17,10,1,'terrell.angelika@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (18,8,1,'kandaced5@testmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (19,8,1,'deforestk42@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (20,149,1,'mivanov@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (21,149,1,'magani@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (22,126,1,'samson.troy88@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (23,126,1,'troysamson75@testing.net',0,0,0,0,NULL,NULL,NULL,NULL), - (24,7,1,'terry.u.kenny@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (25,7,1,'terry.kenny@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (26,120,1,'jacobs.bryon45@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (27,143,1,'nielsen.jerome@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (28,82,1,'chowski.y.winford97@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), - (29,185,1,'egrant@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (30,183,1,'bettymcreynolds94@sample.info',1,0,0,0,NULL,NULL,NULL,NULL), - (31,183,1,'bx.mcreynolds@testing.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (32,89,1,'rblackwell@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (33,176,1,'wattson.teresa@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (34,176,1,'wattson.teresa@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (35,15,1,'gonzlez.margaret95@mymail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (36,15,1,'margaretgonzlez@infomail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (37,27,1,'lee.miguel@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (38,27,1,'leem89@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (39,170,1,'sanfordpatel@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), - (40,31,1,'brigettewattson@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (41,31,1,'bh.wattson45@sample.info',0,0,0,0,NULL,NULL,NULL,NULL), - (42,160,1,'samuels.r.justina3@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (43,160,1,'samuelsj@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (44,104,1,'ashleymcreynolds@spamalot.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (45,6,1,'dimitrov.s.esta@mymail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (46,51,1,'bryoncruz88@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (47,51,1,'bd.cruz@testing.org',0,0,0,0,NULL,NULL,NULL,NULL), - (48,115,1,'rsamson@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (49,186,1,'adams.t.arlyne@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (50,186,1,'arlyneadams52@testmail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (51,3,1,'jensen.h.billy@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (52,3,1,'jensenb@fakemail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (53,97,1,'deforest.w.rodrigo@mymail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (54,97,1,'rodrigodeforest@testing.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (55,189,1,'dimitrovv@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), - (56,9,1,'allenjones@lol.org',1,0,0,0,NULL,NULL,NULL,NULL), - (57,9,1,'allenjones@airmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (58,29,1,'adams.brent80@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (59,182,1,'bachmant76@infomail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (60,182,1,'tobybachman@fishmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), - (61,57,1,'blackwellb@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (62,62,1,'kathlynj@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (63,62,1,'kathlynj@testmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (64,50,1,'deforest.kenny43@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (65,50,1,'deforestk@fishmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (66,16,1,'jaya13@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (67,16,1,'adams.jay@mymail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (68,112,1,'irisp@fakemail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (69,200,1,'bryont90@testmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (70,4,1,'rmller72@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (71,4,1,'rolandmller@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (72,153,1,'jensent@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (73,153,1,'troyjensen@infomail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (74,19,1,'deforest.d.ashley@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (75,19,1,'ashleydeforest@fakemail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (76,88,1,'reynoldsk@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), - (77,134,1,'mller.erik@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (78,117,1,'parkerm@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (79,117,1,'parker.maxwell83@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (80,105,1,'terrell.elizabeth@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), - (81,105,1,'terrell.elizabeth@lol.com',0,0,0,0,NULL,NULL,NULL,NULL), - (82,76,1,'samson.e.kacey81@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (83,178,1,'grantc41@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), - (84,178,1,'claudiog@lol.org',0,0,0,0,NULL,NULL,NULL,NULL), - (85,24,1,'jinajameson85@lol.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (86,187,1,'scottr@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (87,75,1,'herminiar@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), - (88,158,1,'jamesonj17@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (89,158,1,'jameson.jay@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (90,125,1,'jameson.o.bryon15@infomail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (91,125,1,'jameson.o.bryon87@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (92,26,1,'meijameson40@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), - (93,137,1,'junkoblackwell18@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (94,137,1,'junkob@airmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (95,175,1,'blackwelle@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (96,95,1,'jones.russell@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (97,95,1,'jones.russell7@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), - (98,171,1,'barryj@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (99,171,1,'bm.jones@example.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (100,43,1,'jones.j.nicole24@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (101,43,1,'nicolej55@example.net',0,0,0,0,NULL,NULL,NULL,NULL), - (102,144,1,'yadav.clint@airmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (103,86,1,'yadavt23@fishmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (104,86,1,'yadav.teresa17@example.org',0,0,0,0,NULL,NULL,NULL,NULL), - (105,78,1,'troy86@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (106,78,1,'chowski.troy@lol.net',0,0,0,0,NULL,NULL,NULL,NULL), - (107,138,1,'iveychowski@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (108,138,1,'chowski.ivey@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (109,87,1,'chowski.josefa13@fakemail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (110,87,1,'chowskij@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (111,161,1,'jsamuels@example.com',1,0,0,0,NULL,NULL,NULL,NULL), - (112,161,1,'jsamuels@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (113,123,1,'bettyp@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), - (114,177,1,'samuels.n.jay@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (115,177,1,'jaysamuels56@testing.info',0,0,0,0,NULL,NULL,NULL,NULL), - (116,28,1,'samuels.craig33@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (117,28,1,'samuelsc@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (118,201,1,'megand@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (119,201,1,'dimitrov.megan20@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (120,34,1,'dimitrov.y.sherman74@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), - (121,110,1,'wilsonn96@fishmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (122,110,1,'wilsonn@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (123,30,1,'sm.wilson@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (124,148,1,'sanfordw18@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (125,148,1,'sf.wilson44@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (126,195,1,'sonnyd54@mymail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (127,195,1,'deforests80@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (128,194,1,'deforesti@airmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (129,188,1,'ashleyd@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (130,80,1,'errollee66@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), - (131,152,1,'kroberts@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), - (132,152,1,'kroberts@spamalot.info',0,0,0,0,NULL,NULL,NULL,NULL), - (133,139,1,'wattson-roberts.juliann@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (134,39,1,'ec.roberts27@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (135,109,1,'ashleychowski@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (136,140,1,'cchowski@spamalot.info',1,0,0,0,NULL,NULL,NULL,NULL), - (137,140,1,'clintchowski59@infomail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (138,93,1,'fw.chowski84@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), - (139,93,1,'fw.chowski@infomail.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (140,81,1,'bettybarkley92@example.net',1,0,0,0,NULL,NULL,NULL,NULL), - (141,5,1,'kx.barkley@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (142,5,1,'kennybarkley@fakemail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (143,96,1,'roberts.russell@testing.org',1,0,0,0,NULL,NULL,NULL,NULL), - (144,164,1,'jolsen-roberts@testing.com',1,0,0,0,NULL,NULL,NULL,NULL), - (145,164,1,'olsen-roberts.junko@testing.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), - (146,14,1,'robertsb39@testing.net',1,0,0,0,NULL,NULL,NULL,NULL), - (147,61,1,'mariareynolds67@testmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (148,61,1,'mi.reynolds34@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (149,146,1,'bprentice-reynolds@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), - (150,146,1,'bernadetteprentice-reynolds49@lol.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (151,54,1,'reynolds.claudio92@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (152,142,1,'reynolds.princess39@notmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (153,142,1,'princessr21@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (154,52,1,'billydeforest@spamalot.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), - (155,52,1,'deforest.a.billy@sample.co.in',0,0,0,0,NULL,NULL,NULL,NULL), - (156,74,1,'iz.deforest@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (157,190,1,'deforest.damaris@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), - (158,174,1,'vdeforest@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (159,174,1,'valenedeforest24@testmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (160,167,1,'mariareynolds@example.net',1,0,0,0,NULL,NULL,NULL,NULL), - (161,167,1,'reynolds.maria@fakemail.biz',0,0,0,0,NULL,NULL,NULL,NULL), - (162,154,1,'reynolds.n.merrie@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), - (163,154,1,'merriereynolds17@notmail.com',0,0,0,0,NULL,NULL,NULL,NULL), - (164,12,1,'reynolds.brittney97@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), - (165,106,1,'erikr@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (166,121,1,'prentice.valene72@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), - (167,121,1,'valenep@testmail.info',0,0,0,0,NULL,NULL,NULL,NULL), - (168,55,1,'delanawattson-prentice@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), - (169,44,1,'od.olsen-jensen@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), - (170,44,1,'olsen-jensen.d.omar@testing.org',0,0,0,0,NULL,NULL,NULL,NULL), - (171,132,1,'jensena74@testmail.com',1,0,0,0,NULL,NULL,NULL,NULL), - (172,113,1,'russellj@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), - (173,113,1,'jensen.r.russell@mymail.net',0,0,0,0,NULL,NULL,NULL,NULL), - (174,198,3,'contact@jacksonlegalfund.org',1,0,0,0,NULL,NULL,NULL,NULL), - (175,114,3,'feedback@laplaceeducation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (176,150,2,'chowski.junko96@laplaceeducation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (177,128,3,'contact@californiasoftwareassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), - (178,51,2,'bd.cruz@californiasoftwareassociation.org',0,0,0,0,NULL,NULL,NULL,NULL), - (179,159,3,'sales@mlkinglegal.org',1,0,0,0,NULL,NULL,NULL,NULL), - (180,132,2,'37@mlkinglegal.org',0,0,0,0,NULL,NULL,NULL,NULL), - (181,155,3,'service@vnlegalservices.org',1,0,0,0,NULL,NULL,NULL,NULL), - (182,88,2,'kathleenreynolds@vnlegalservices.org',0,0,0,0,NULL,NULL,NULL,NULL), - (183,77,3,'info@warsawempowermentalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), - (184,60,2,'lz.parker@warsawempowermentalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), - (185,108,3,'contact@waunakeesystems.org',1,0,0,0,NULL,NULL,NULL,NULL), - (186,185,2,'grant.eleonor22@waunakeesystems.org',0,0,0,0,NULL,NULL,NULL,NULL), - (187,66,3,'feedback@arizonaliteracyalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), - (188,19,2,'ashleydeforest@arizonaliteracyalliance.org',0,0,0,0,NULL,NULL,NULL,NULL), - (189,84,3,'info@illinoisaction.org',1,0,0,0,NULL,NULL,NULL,NULL), - (190,186,2,'adams.arlyne@illinoisaction.org',0,0,0,0,NULL,NULL,NULL,NULL), - (191,35,3,'contact@greenevillenetwork.org',1,0,0,0,NULL,NULL,NULL,NULL), - (192,17,3,'sales@globalsolutions.org',1,0,0,0,NULL,NULL,NULL,NULL), - (193,167,2,'mb.reynolds@globalsolutions.org',0,0,0,0,NULL,NULL,NULL,NULL), - (194,119,3,'sales@ohioinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL), - (195,162,2,'jensen.heidi80@ohioinitiative.org',1,0,0,0,NULL,NULL,NULL,NULL), - (196,92,3,'service@friendspartners.org',1,0,0,0,NULL,NULL,NULL,NULL), - (197,168,3,'sales@unitedmusicsystems.org',1,0,0,0,NULL,NULL,NULL,NULL), - (198,46,2,'shadroberts@unitedmusicsystems.org',1,0,0,0,NULL,NULL,NULL,NULL), - (199,79,3,'feedback@idahotechnology.org',1,0,0,0,NULL,NULL,NULL,NULL), - (200,65,2,'delanamcreynolds-chowski@idahotechnology.org',1,0,0,0,NULL,NULL,NULL,NULL), - (201,145,3,'service@urbanadvocacycenter.org',1,0,0,0,NULL,NULL,NULL,NULL), - (202,189,2,'dimitrovv64@urbanadvocacycenter.org',0,0,0,0,NULL,NULL,NULL,NULL), - (203,202,1,'jenny@example.com',1,0,0,0,NULL,NULL,NULL,NULL), - (204,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), - (205,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), - (206,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); + (2,65,1,'sm.jones56@example.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (3,65,1,'shaunajones@testing.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (4,15,1,'cruz.elbert64@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), + (5,15,1,'elbertc@airmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (6,197,1,'yadav.p.jed94@mymail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (7,197,1,'jedyadav@spamalot.com',0,0,0,0,NULL,NULL,NULL,NULL), + (8,199,1,'felishaj@spamalot.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (9,149,1,'ivanovk44@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), + (10,136,1,'terry.g.herminia88@fishmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (11,136,1,'herminiaterry65@airmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (12,100,1,'deforest.jina20@lol.info',1,0,0,0,NULL,NULL,NULL,NULL), + (13,76,1,'smith.kathlyn1@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (14,107,1,'daz.kenny@sample.org',1,0,0,0,NULL,NULL,NULL,NULL), + (15,130,1,'jensen.truman12@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (16,130,1,'jensen.truman@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (17,193,1,'samsonb6@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (18,66,1,'chowski.billy@example.info',1,0,0,0,NULL,NULL,NULL,NULL), + (19,77,1,'reynoldsr@notmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (20,179,1,'felishagonzlez@lol.com',1,0,0,0,NULL,NULL,NULL,NULL), + (21,179,1,'fgonzlez@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (22,132,1,'roberts.ivey@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (23,132,1,'roberts.ivey@fishmail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (24,142,1,'lee.norris@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (25,138,1,'tanyacooper@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (26,38,1,'kathleenjensen@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (27,172,1,'juliannbachman@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (28,123,1,'daz.lou@example.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (29,194,1,'samuels.winford@fakemail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (30,181,1,'nielsen.damaris96@fakemail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (31,126,1,'jinab@testing.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (32,126,1,'bachmanj@notmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (33,27,1,'jl.prentice8@notmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (34,84,1,'samuelss@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (35,84,1,'samuels.shauna@sample.net',0,0,0,0,NULL,NULL,NULL,NULL), + (36,87,1,'rl.prentice8@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), + (37,44,1,'barrygrant20@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), + (38,44,1,'bgrant@spamalot.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (39,67,1,'nicoles87@fakemail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (40,67,1,'smithn@testmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (41,88,1,'dimitrov.teresa@infomail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (42,88,1,'dimitrovt@fakemail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (43,91,1,'chowskis@infomail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (44,91,1,'sz.chowski11@mymail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (45,17,1,'re.smith61@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (46,17,1,'rolandos21@sample.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (47,164,1,'nielsen.ivey84@lol.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (48,92,1,'hu.blackwell63@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (49,13,1,'ck.blackwell28@infomail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (50,13,1,'blackwellc29@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (51,103,1,'gonzlezs@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), + (52,103,1,'sq.gonzlez94@spamalot.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (53,21,1,'ar.smith26@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (54,21,1,'ar.smith@airmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (55,61,1,'hadams@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (56,61,1,'adamsh71@mymail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (57,175,1,'tchowski@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (58,175,1,'chowski.teresa@spamalot.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (59,62,1,'rayg17@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (60,62,1,'raygonzlez@airmail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (61,106,1,'lee.rosario@lol.net',1,0,0,0,NULL,NULL,NULL,NULL), + (62,79,1,'cooperj62@notmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (63,79,1,'cooperj@airmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (64,184,1,'fmcreynolds75@fishmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (65,39,1,'wattsonm@fakemail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (66,198,1,'smith.scott30@sample.net',1,0,0,0,NULL,NULL,NULL,NULL), + (67,5,1,'olsenj@airmail.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (68,5,1,'jeromeolsen@airmail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (69,73,1,'barkley.elizabeth@sample.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (70,73,1,'barkley.elizabeth@sample.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (71,150,1,'elinab@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (72,182,1,'patelw@lol.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (73,182,1,'winfordpatel48@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (74,82,1,'mllerm@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (75,60,1,'mller.m.carlos30@notmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (76,129,1,'mller.laree8@testmail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (77,129,1,'mller.laree@mymail.com',0,0,0,0,NULL,NULL,NULL,NULL), + (78,14,1,'sanfordolsen@fishmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (79,86,1,'mj.cruz17@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (80,86,1,'margaretc82@example.co.in',0,0,0,0,NULL,NULL,NULL,NULL), + (81,171,1,'eleonorolsen-cruz91@testing.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (82,171,1,'olsen-cruze62@spamalot.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (83,189,1,'erikolsen-cruz82@testmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (84,189,1,'olsen-cruze34@sample.info',0,0,0,0,NULL,NULL,NULL,NULL), + (85,53,1,'olsen.billy41@spamalot.net',1,0,0,0,NULL,NULL,NULL,NULL), + (86,53,1,'olsenb@example.net',0,0,0,0,NULL,NULL,NULL,NULL), + (87,113,1,'rp.olsen-jameson29@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (88,113,1,'rodrigoo@example.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (89,155,1,'louolsen-jameson@example.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (90,85,1,'sbarkley52@airmail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (91,154,1,'mcreynoldsa79@sample.info',1,0,0,0,NULL,NULL,NULL,NULL), + (92,176,1,'eleonory41@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (93,2,1,'mcreynoldsj39@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (94,2,1,'jacobmcreynolds@example.info',0,0,0,0,NULL,NULL,NULL,NULL), + (95,97,1,'bnielsen@testmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (96,59,1,'nielsene@fishmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (97,89,1,'nielsen.jacob78@example.com',1,0,0,0,NULL,NULL,NULL,NULL), + (98,168,1,'troynielsen98@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (99,133,1,'norrisnielsen@infomail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (100,46,1,'jeromen@mymail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (101,46,1,'jeromenielsen96@mymail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (102,108,1,'zopeb65@airmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (103,108,1,'bryonz49@example.net',0,0,0,0,NULL,NULL,NULL,NULL), + (104,16,1,'zoper@infomail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (105,135,1,'zope.justina15@airmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (106,135,1,'zopej22@infomail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (107,74,1,'parker.h.angelika@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (108,74,1,'angelikaparker@lol.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (109,180,1,'parker.erik@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (110,134,1,'cruz.troy@sample.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (111,200,1,'cruz-lee.brent@spamalot.com',1,0,0,0,NULL,NULL,NULL,NULL), + (112,186,1,'hcooper@spamalot.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (113,186,1,'cooper.herminia@fishmail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (114,118,1,'coopert85@airmail.org',1,0,0,0,NULL,NULL,NULL,NULL), + (115,187,1,'lincolncooper47@sample.info',1,0,0,0,NULL,NULL,NULL,NULL), + (116,49,1,'ag.patel-terrell7@testing.info',1,0,0,0,NULL,NULL,NULL,NULL), + (117,52,1,'ashlieterrell@testing.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (118,52,1,'aterrell24@airmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (119,20,1,'lwilson@example.net',1,0,0,0,NULL,NULL,NULL,NULL), + (120,140,1,'sharynnielsen-wilson3@spamalot.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (121,140,1,'nielsen-wilson.sharyn57@testmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (122,131,1,'dz.wilson@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (123,131,1,'wilson.z.damaris@notmail.info',0,0,0,0,NULL,NULL,NULL,NULL), + (124,78,1,'dk.ivanov27@fakemail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (125,78,1,'ivanovd79@lol.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (126,37,1,'esamuels@airmail.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (127,4,1,'ivanov-samuelsa9@spamalot.org',1,0,0,0,NULL,NULL,NULL,NULL), + (128,69,1,'it.barkley-adams@sample.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (129,35,1,'barkley-adamsk@fishmail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (130,35,1,'kathleenbarkley-adams96@fakemail.org',0,0,0,0,NULL,NULL,NULL,NULL), + (131,177,1,'brzczysawadams@fishmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (132,72,1,'roberts.rosario@notmail.com',1,0,0,0,NULL,NULL,NULL,NULL), + (133,36,1,'adams-roberts.jackson59@infomail.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (134,36,1,'jacksona@lol.org',0,0,0,0,NULL,NULL,NULL,NULL), + (135,110,1,'adams-roberts.arlyne@testmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (136,110,1,'arlyneadams-roberts@airmail.co.nz',0,0,0,0,NULL,NULL,NULL,NULL), + (137,167,1,'sonnywilson@fakemail.info',1,0,0,0,NULL,NULL,NULL,NULL), + (138,18,1,'wilsone@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (139,111,1,'wilson.z.irvin@lol.co.uk',1,0,0,0,NULL,NULL,NULL,NULL), + (140,111,1,'wilsoni@mymail.biz',0,0,0,0,NULL,NULL,NULL,NULL), + (141,3,1,'wilson.maxwell77@mymail.biz',1,0,0,0,NULL,NULL,NULL,NULL), + (142,3,1,'wilson.maxwell51@fishmail.co.uk',0,0,0,0,NULL,NULL,NULL,NULL), + (143,158,1,'ku.jensen64@notmail.co.pl',1,0,0,0,NULL,NULL,NULL,NULL), + (144,158,1,'kathlynjensen@notmail.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (145,191,1,'samuels-jensene21@sample.co.nz',1,0,0,0,NULL,NULL,NULL,NULL), + (146,146,1,'bachman.rodrigo@example.co.in',1,0,0,0,NULL,NULL,NULL,NULL), + (147,146,1,'bachman.rodrigo30@lol.co.pl',0,0,0,0,NULL,NULL,NULL,NULL), + (148,43,1,'allanb98@notmail.net',1,0,0,0,NULL,NULL,NULL,NULL), + (149,43,1,'bachman-olsena76@fakemail.net',0,0,0,0,NULL,NULL,NULL,NULL), + (150,121,3,'contact@arizonaservices.org',1,0,0,0,NULL,NULL,NULL,NULL), + (151,29,2,'mcreynoldsj@arizonaservices.org',1,0,0,0,NULL,NULL,NULL,NULL), + (152,139,3,'sales@ngmusictrust.org',1,0,0,0,NULL,NULL,NULL,NULL), + (153,62,2,'gonzlez.ray52@ngmusictrust.org',0,0,0,0,NULL,NULL,NULL,NULL), + (154,93,3,'feedback@floridadevelopmentalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), + (155,184,2,'felisham36@floridadevelopmentalliance.org',0,0,0,0,NULL,NULL,NULL,NULL), + (156,71,3,'info@mlkingmusic.org',1,0,0,0,NULL,NULL,NULL,NULL), + (157,14,2,'olsen.z.sanford20@mlkingmusic.org',0,0,0,0,NULL,NULL,NULL,NULL), + (158,169,3,'info@wisconsinsoftwarepartners.org',1,0,0,0,NULL,NULL,NULL,NULL), + (159,33,2,'blackwell.h.jackson63@wisconsinsoftwarepartners.org',1,0,0,0,NULL,NULL,NULL,NULL), + (160,95,3,'sales@tennesseeaction.org',1,0,0,0,NULL,NULL,NULL,NULL), + (161,181,2,'damarisnielsen@tennesseeaction.org',0,0,0,0,NULL,NULL,NULL,NULL), + (162,120,3,'sales@vnhealthservices.org',1,0,0,0,NULL,NULL,NULL,NULL), + (163,191,2,'samuels-jensen.s.elizabeth95@vnhealthservices.org',0,0,0,0,NULL,NULL,NULL,NULL), + (164,137,3,'contact@floridatechnologysolutions.org',1,0,0,0,NULL,NULL,NULL,NULL), + (165,173,3,'feedback@globalassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (166,182,2,'winfordp@globalassociation.org',0,0,0,0,NULL,NULL,NULL,NULL), + (167,141,3,'feedback@ncartsalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), + (168,70,3,'contact@tennesseepoetry.org',1,0,0,0,NULL,NULL,NULL,NULL), + (169,148,2,'lee.kathleen14@tennesseepoetry.org',1,0,0,0,NULL,NULL,NULL,NULL), + (170,114,3,'contact@wvliteracyservices.org',1,0,0,0,NULL,NULL,NULL,NULL), + (171,69,2,'it.barkley-adams@wvliteracyservices.org',0,0,0,0,NULL,NULL,NULL,NULL), + (172,157,3,'feedback@nebraskaalliance.org',1,0,0,0,NULL,NULL,NULL,NULL), + (173,37,2,'66@nebraskaalliance.org',0,0,0,0,NULL,NULL,NULL,NULL), + (174,41,3,'service@ohioeducationfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (175,143,2,'patel-mcreynolds.i.maria7@ohioeducationfund.org',1,0,0,0,NULL,NULL,NULL,NULL), + (176,8,3,'info@npempowermentpartners.org',1,0,0,0,NULL,NULL,NULL,NULL), + (177,105,3,'sales@urbanassociation.org',1,0,0,0,NULL,NULL,NULL,NULL), + (178,94,3,'info@bakersfieldsoftware.org',1,0,0,0,NULL,NULL,NULL,NULL), + (179,163,3,'contact@evansvillepeace.org',1,0,0,0,NULL,NULL,NULL,NULL), + (180,103,2,'sq.gonzlez77@evansvillepeace.org',0,0,0,0,NULL,NULL,NULL,NULL), + (181,202,1,'jenny@example.com',1,0,0,0,NULL,NULL,NULL,NULL), + (182,NULL,1,'development@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (183,NULL,1,'tournaments@example.org',0,0,0,0,NULL,NULL,NULL,NULL), + (184,NULL,1,'celebration@example.org',0,0,0,0,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_email` ENABLE KEYS */; UNLOCK TABLES; @@ -3283,47 +3266,47 @@ INSERT INTO `civicrm_entity_financial_trxn` (`id`, `entity_table`, `entity_id`, (70,'civicrm_financial_item',35,35,100.00), (71,'civicrm_contribution',40,36,100.00), (72,'civicrm_financial_item',36,36,100.00), - (73,'civicrm_contribution',44,37,100.00), + (73,'civicrm_contribution',41,37,100.00), (74,'civicrm_financial_item',37,37,100.00), - (75,'civicrm_contribution',46,38,100.00), + (75,'civicrm_contribution',44,38,100.00), (76,'civicrm_financial_item',38,38,100.00), - (77,'civicrm_contribution',48,39,100.00), + (77,'civicrm_contribution',46,39,100.00), (78,'civicrm_financial_item',39,39,100.00), - (79,'civicrm_contribution',50,40,100.00), + (79,'civicrm_contribution',48,40,100.00), (80,'civicrm_financial_item',40,40,100.00), - (81,'civicrm_contribution',51,41,100.00), + (81,'civicrm_contribution',50,41,100.00), (82,'civicrm_financial_item',41,41,100.00), - (83,'civicrm_contribution',52,42,100.00), + (83,'civicrm_contribution',51,42,100.00), (84,'civicrm_financial_item',42,42,100.00), - (85,'civicrm_contribution',54,43,100.00), + (85,'civicrm_contribution',52,43,100.00), (86,'civicrm_financial_item',43,43,100.00), - (87,'civicrm_contribution',58,44,100.00), + (87,'civicrm_contribution',54,44,100.00), (88,'civicrm_financial_item',44,44,100.00), - (89,'civicrm_contribution',60,45,100.00), + (89,'civicrm_contribution',56,45,100.00), (90,'civicrm_financial_item',45,45,100.00), - (91,'civicrm_contribution',61,46,100.00), + (91,'civicrm_contribution',58,46,100.00), (92,'civicrm_financial_item',46,46,100.00), - (93,'civicrm_contribution',33,47,50.00), - (94,'civicrm_financial_item',47,47,50.00), - (95,'civicrm_contribution',35,48,50.00), - (96,'civicrm_financial_item',48,48,50.00), - (97,'civicrm_contribution',37,49,50.00), + (93,'civicrm_contribution',60,47,100.00), + (94,'civicrm_financial_item',47,47,100.00), + (95,'civicrm_contribution',61,48,100.00), + (96,'civicrm_financial_item',48,48,100.00), + (97,'civicrm_contribution',33,49,50.00), (98,'civicrm_financial_item',49,49,50.00), - (99,'civicrm_contribution',39,50,50.00), + (99,'civicrm_contribution',35,50,50.00), (100,'civicrm_financial_item',50,50,50.00), - (101,'civicrm_contribution',41,51,50.00), + (101,'civicrm_contribution',37,51,50.00), (102,'civicrm_financial_item',51,51,50.00), - (103,'civicrm_contribution',43,52,50.00), + (103,'civicrm_contribution',39,52,50.00), (104,'civicrm_financial_item',52,52,50.00), - (105,'civicrm_contribution',45,53,50.00), + (105,'civicrm_contribution',43,53,50.00), (106,'civicrm_financial_item',53,53,50.00), - (107,'civicrm_contribution',47,54,50.00), + (107,'civicrm_contribution',45,54,50.00), (108,'civicrm_financial_item',54,54,50.00), - (109,'civicrm_contribution',49,55,50.00), + (109,'civicrm_contribution',47,55,50.00), (110,'civicrm_financial_item',55,55,50.00), - (111,'civicrm_contribution',55,56,50.00), + (111,'civicrm_contribution',49,56,50.00), (112,'civicrm_financial_item',56,56,50.00), - (113,'civicrm_contribution',56,57,50.00), + (113,'civicrm_contribution',55,57,50.00), (114,'civicrm_financial_item',57,57,50.00), (115,'civicrm_contribution',57,58,50.00), (116,'civicrm_financial_item',58,58,50.00), @@ -3443,121 +3426,130 @@ 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 - (39,'civicrm_contact',2,5), - (54,'civicrm_contact',4,4), - (100,'civicrm_contact',5,5), - (22,'civicrm_contact',7,4), - (20,'civicrm_contact',8,4), - (42,'civicrm_contact',9,4), - (43,'civicrm_contact',9,5), - (110,'civicrm_contact',12,4), - (111,'civicrm_contact',12,5), - (51,'civicrm_contact',16,5), - (8,'civicrm_contact',17,2), - (55,'civicrm_contact',19,5), - (17,'civicrm_contact',22,5), - (60,'civicrm_contact',24,4), - (61,'civicrm_contact',24,5), - (23,'civicrm_contact',25,5), - (30,'civicrm_contact',27,4), - (31,'civicrm_contact',27,5), - (16,'civicrm_contact',32,4), - (83,'civicrm_contact',34,5), - (7,'civicrm_contact',35,2), - (62,'civicrm_contact',37,5), - (53,'civicrm_contact',38,5), - (94,'civicrm_contact',39,4), - (95,'civicrm_contact',39,5), - (114,'civicrm_contact',44,4), - (82,'civicrm_contact',49,4), - (50,'civicrm_contact',50,4), - (35,'civicrm_contact',51,4), - (36,'civicrm_contact',51,5), - (107,'civicrm_contact',52,5), - (72,'civicrm_contact',53,5), - (105,'civicrm_contact',54,4), - (106,'civicrm_contact',54,5), - (113,'civicrm_contact',55,4), - (33,'civicrm_contact',56,5), - (48,'civicrm_contact',57,4), - (49,'civicrm_contact',57,5), - (19,'civicrm_contact',59,4), - (104,'civicrm_contact',61,4), - (45,'civicrm_contact',63,4), - (46,'civicrm_contact',63,5), - (52,'civicrm_contact',64,4), - (6,'civicrm_contact',66,2), - (12,'civicrm_contact',69,4), - (13,'civicrm_contact',69,5), - (59,'civicrm_contact',76,4), - (75,'civicrm_contact',78,4), - (76,'civicrm_contact',78,5), - (10,'civicrm_contact',79,3), - (90,'civicrm_contact',80,4), - (98,'civicrm_contact',81,4), - (99,'civicrm_contact',81,5), - (18,'civicrm_contact',85,5), - (28,'civicrm_contact',89,5), - (24,'civicrm_contact',91,4), - (9,'civicrm_contact',92,2), - (15,'civicrm_contact',94,5), - (69,'civicrm_contact',95,5), - (101,'civicrm_contact',96,4), - (102,'civicrm_contact',96,5), - (112,'civicrm_contact',101,5), - (88,'civicrm_contact',102,4), - (89,'civicrm_contact',102,5), - (56,'civicrm_contact',103,5), - (34,'civicrm_contact',104,4), - (5,'civicrm_contact',108,2), - (96,'civicrm_contact',109,5), - (84,'civicrm_contact',110,5), - (91,'civicrm_contact',111,4), - (92,'civicrm_contact',111,5), - (115,'civicrm_contact',113,5), - (68,'civicrm_contact',116,4), - (57,'civicrm_contact',117,4), - (58,'civicrm_contact',117,5), - (103,'civicrm_contact',122,5), - (3,'civicrm_contact',128,1), - (1,'civicrm_contact',129,2), - (67,'civicrm_contact',137,4), - (97,'civicrm_contact',140,5), - (73,'civicrm_contact',144,4), - (74,'civicrm_contact',144,5), - (65,'civicrm_contact',147,4), - (66,'civicrm_contact',147,5), - (85,'civicrm_contact',148,4), - (21,'civicrm_contact',149,5), - (77,'civicrm_contact',150,4), - (78,'civicrm_contact',150,5), - (11,'civicrm_contact',151,5), - (93,'civicrm_contact',152,4), - (4,'civicrm_contact',155,2), - (64,'civicrm_contact',158,4), - (79,'civicrm_contact',161,4), - (14,'civicrm_contact',163,5), - (109,'civicrm_contact',167,5), - (70,'civicrm_contact',171,4), - (71,'civicrm_contact',171,5), - (29,'civicrm_contact',176,4), - (80,'civicrm_contact',177,4), - (81,'civicrm_contact',177,5), - (47,'civicrm_contact',182,5), - (26,'civicrm_contact',183,4), - (27,'civicrm_contact',183,5), - (25,'civicrm_contact',185,4), - (37,'civicrm_contact',186,4), - (38,'civicrm_contact',186,5), - (63,'civicrm_contact',187,4), - (40,'civicrm_contact',189,4), - (41,'civicrm_contact',189,5), - (108,'civicrm_contact',190,5), - (86,'civicrm_contact',195,4), - (87,'civicrm_contact',195,5), - (32,'civicrm_contact',196,4), - (2,'civicrm_contact',198,2), - (44,'civicrm_contact',199,4); + (76,'civicrm_contact',2,5), + (64,'civicrm_contact',7,5), + (9,'civicrm_contact',8,2), + (24,'civicrm_contact',10,4), + (48,'civicrm_contact',13,5), + (67,'civicrm_contact',14,4), + (12,'civicrm_contact',15,4), + (13,'civicrm_contact',15,5), + (44,'civicrm_contact',17,4), + (99,'civicrm_contact',20,4), + (49,'civicrm_contact',21,4), + (50,'civicrm_contact',21,5), + (11,'civicrm_contact',23,5), + (124,'civicrm_contact',26,5), + (37,'civicrm_contact',27,4), + (38,'civicrm_contact',27,5), + (45,'civicrm_contact',32,5), + (60,'civicrm_contact',33,4), + (61,'civicrm_contact',33,5), + (111,'civicrm_contact',36,4), + (112,'civicrm_contact',36,5), + (33,'civicrm_contact',38,5), + (106,'civicrm_contact',40,4), + (8,'civicrm_contact',41,2), + (42,'civicrm_contact',42,4), + (43,'civicrm_contact',42,5), + (100,'civicrm_contact',48,4), + (101,'civicrm_contact',48,5), + (70,'civicrm_contact',53,5), + (22,'civicrm_contact',54,4), + (23,'civicrm_contact',54,5), + (97,'civicrm_contact',57,4), + (98,'civicrm_contact',57,5), + (65,'civicrm_contact',60,4), + (66,'civicrm_contact',60,5), + (86,'civicrm_contact',63,4), + (87,'civicrm_contact',63,5), + (26,'civicrm_contact',66,4), + (27,'civicrm_contact',66,5), + (41,'civicrm_contact',67,4), + (107,'civicrm_contact',69,4), + (108,'civicrm_contact',69,5), + (6,'civicrm_contact',70,2), + (59,'civicrm_contact',73,4), + (102,'civicrm_contact',78,4), + (103,'civicrm_contact',78,5), + (55,'civicrm_contact',79,4), + (39,'civicrm_contact',87,4), + (40,'civicrm_contact',87,5), + (73,'civicrm_contact',90,4), + (74,'civicrm_contact',90,5), + (2,'civicrm_contact',93,2), + (10,'civicrm_contact',94,1), + (77,'civicrm_contact',97,4), + (78,'civicrm_contact',99,4), + (79,'civicrm_contact',99,5), + (32,'civicrm_contact',101,5), + (21,'civicrm_contact',107,4), + (83,'civicrm_contact',108,4), + (84,'civicrm_contact',108,5), + (94,'civicrm_contact',109,5), + (114,'civicrm_contact',111,4), + (115,'civicrm_contact',111,5), + (71,'civicrm_contact',113,5), + (20,'civicrm_contact',115,5), + (72,'civicrm_contact',119,4), + (4,'civicrm_contact',120,1), + (1,'civicrm_contact',121,2), + (25,'civicrm_contact',130,5), + (29,'civicrm_contact',132,4), + (30,'civicrm_contact',132,5), + (82,'civicrm_contact',133,4), + (90,'civicrm_contact',134,4), + (19,'civicrm_contact',136,4), + (31,'civicrm_contact',142,5), + (123,'civicrm_contact',146,4), + (17,'civicrm_contact',147,4), + (18,'civicrm_contact',147,5), + (62,'civicrm_contact',150,4), + (63,'civicrm_contact',150,5), + (80,'civicrm_contact',153,4), + (81,'civicrm_contact',153,5), + (75,'civicrm_contact',154,4), + (7,'civicrm_contact',157,1), + (116,'civicrm_contact',159,4), + (117,'civicrm_contact',159,5), + (104,'civicrm_contact',162,4), + (105,'civicrm_contact',162,5), + (47,'civicrm_contact',164,5), + (85,'civicrm_contact',166,5), + (113,'civicrm_contact',167,4), + (3,'civicrm_contact',169,2), + (14,'civicrm_contact',170,4), + (68,'civicrm_contact',171,4), + (69,'civicrm_contact',171,5), + (34,'civicrm_contact',172,4), + (5,'civicrm_contact',173,2), + (51,'civicrm_contact',174,4), + (52,'civicrm_contact',174,5), + (53,'civicrm_contact',175,5), + (109,'civicrm_contact',177,4), + (110,'civicrm_contact',177,5), + (46,'civicrm_contact',178,4), + (28,'civicrm_contact',179,5), + (88,'civicrm_contact',180,4), + (89,'civicrm_contact',180,5), + (36,'civicrm_contact',181,5), + (56,'civicrm_contact',184,4), + (120,'civicrm_contact',185,4), + (92,'civicrm_contact',186,4), + (93,'civicrm_contact',186,5), + (54,'civicrm_contact',188,4), + (121,'civicrm_contact',192,4), + (122,'civicrm_contact',192,5), + (95,'civicrm_contact',195,4), + (96,'civicrm_contact',195,5), + (35,'civicrm_contact',196,5), + (15,'civicrm_contact',197,5), + (57,'civicrm_contact',198,4), + (58,'civicrm_contact',198,5), + (16,'civicrm_contact',199,4), + (91,'civicrm_contact',200,4), + (118,'civicrm_contact',201,4), + (119,'civicrm_contact',201,5); /*!40000 ALTER TABLE `civicrm_entity_tag` ENABLE KEYS */; UNLOCK TABLES; @@ -3568,9 +3560,9 @@ 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,'2022-10-14 17:00:00','2022-10-16 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,0,0,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,'2022-04-13 12:00:00','2022-04-13 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,0,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,0,0,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), - (3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2022-11-14 07:00:00','2022-11-17 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,0,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,0,0,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (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,'2022-11-04 17:00:00','2022-11-06 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,0,0,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,'2022-05-03 12:00:00','2022-05-03 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,0,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,0,0,NULL,0,0,NULL,NULL,0,NULL,NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0), + (3,'Rain-forest Cup Youth Soccer Tournament','Sign up your team to participate in this fun tournament which benefits several Rain-forest protection groups in the Amazon basin.','This is a FYSA Sanctioned Tournament, which is open to all USSF/FIFA affiliated organizations for boys and girls in age groups: U9-U10 (6v6), U11-U12 (8v8), and U13-U17 (Full Sided).',3,1,1,'2022-12-04 07:00:00','2022-12-07 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,0,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,0,0,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,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,NULL,NULL,1,0,0,0,0,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,0,0,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,0,0,NULL,0,0,NULL,NULL,1,'Paid Conference with Online Registration',NULL,NULL,'USD',NULL,1,1,NULL,NULL,NULL,0); @@ -3654,117 +3646,117 @@ 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,'2022-04-14 03:30:18','2012-04-14 13:30:18',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), - (2,'2022-04-14 03:30:18','2020-01-14 13:30:18',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), - (3,'2022-04-14 03:30:18','2016-03-20 00:30:18',6,'Contribution Amount',25.00,'GBP',1,1,'civicrm_line_item',3), - (4,'2022-04-14 03:30:18','2020-01-14 13:30:18',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), - (5,'2022-04-14 03:30:18','2020-01-14 13:30:18',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',5), - (6,'2022-04-14 03:30:18','2022-01-19 12:48:18',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',6), - (7,'2022-04-14 03:30:18','2022-04-12 13:30:18',19,'Contribution Amount',1750.00,'USD',1,1,'civicrm_line_item',7), - (8,'2022-04-14 03:30:18','2021-08-20 21:41:18',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',8), - (9,'2022-04-14 03:30:18','2021-05-14 13:30:18',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',9), - (10,'2022-04-14 03:30:18','2017-11-21 15:30:18',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',10), - (11,'2022-04-14 03:30:18','2022-04-13 09:30:18',71,'Contribution Amount',500.00,'JPY',1,1,'civicrm_line_item',11), - (12,'2022-04-14 03:30:18','2021-01-14 02:56:58',43,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',12), - (13,'2022-04-14 03:30:18','2022-01-14 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',13), - (14,'2022-04-14 03:30:18','2022-02-14 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',14), - (15,'2022-04-14 03:30:18','2021-01-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',15), - (16,'2022-04-14 03:30:18','2021-02-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',16), - (17,'2022-04-14 03:30:18','2021-03-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',17), - (18,'2022-04-14 03:30:18','2021-04-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',18), - (19,'2022-04-14 03:30:18','2021-05-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',19), - (20,'2022-04-14 03:30:18','2021-06-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',20), - (21,'2022-04-14 03:30:18','2021-07-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',21), - (22,'2022-04-14 03:30:18','2021-08-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',22), - (23,'2022-04-14 03:30:18','2021-09-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',23), - (24,'2022-04-14 03:30:18','2021-10-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',24), - (25,'2022-04-14 03:30:18','2021-11-14 13:30:18',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',25), - (26,'2022-04-14 03:30:18','2021-08-14 13:30:18',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',26), - (27,'2022-04-14 03:30:18','2021-09-14 13:30:18',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',27), - (28,'2022-04-14 03:30:18','2021-10-14 13:30:18',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',28), - (29,'2022-04-14 03:30:18','2021-11-14 13:30:18',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',29), - (30,'2022-04-14 03:30:18','2021-12-14 13:30:18',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',30), - (31,'2022-04-14 03:30:18','2022-03-14 13:30:18',103,'Contribution Amount',5.00,'EUR',1,1,'civicrm_line_item',31), - (32,'2022-04-14 03:30:18','2022-04-14 13:30:18',53,'General',100.00,'USD',2,1,'civicrm_line_item',32), - (33,'2022-04-14 03:30:18','2022-04-14 13:30:18',30,'General',100.00,'USD',2,1,'civicrm_line_item',33), - (34,'2022-04-14 03:30:18','2022-04-14 13:30:18',36,'General',100.00,'USD',2,1,'civicrm_line_item',34), - (35,'2022-04-14 03:30:18','2022-04-14 13:30:18',166,'General',100.00,'USD',2,1,'civicrm_line_item',35), - (36,'2022-04-14 03:30:18','2022-04-14 13:30:18',134,'General',100.00,'USD',2,1,'civicrm_line_item',36), - (37,'2022-04-14 03:30:18','2022-04-14 13:30:18',23,'General',100.00,'USD',2,1,'civicrm_line_item',37), - (38,'2022-04-14 03:30:18','2022-04-14 13:30:18',67,'General',100.00,'USD',2,1,'civicrm_line_item',38), - (39,'2022-04-14 03:30:18','2022-04-14 13:30:18',199,'General',100.00,'USD',2,1,'civicrm_line_item',39), - (40,'2022-04-14 03:30:18','2022-04-14 13:30:18',106,'General',100.00,'USD',2,1,'civicrm_line_item',40), - (41,'2022-04-14 03:30:18','2022-04-14 13:30:18',102,'General',100.00,'USD',2,1,'civicrm_line_item',41), - (42,'2022-04-14 03:30:19','2022-04-14 13:30:18',18,'General',100.00,'USD',2,1,'civicrm_line_item',42), - (43,'2022-04-14 03:30:19','2022-04-14 13:30:18',34,'General',100.00,'USD',2,1,'civicrm_line_item',43), - (44,'2022-04-14 03:30:19','2022-04-14 13:30:18',56,'General',100.00,'USD',2,1,'civicrm_line_item',44), - (45,'2022-04-14 03:30:19','2022-04-14 13:30:18',177,'General',100.00,'USD',2,1,'civicrm_line_item',45), - (46,'2022-04-14 03:30:19','2022-04-14 13:30:18',197,'General',100.00,'USD',2,1,'civicrm_line_item',46), - (47,'2022-04-14 03:30:19','2022-04-14 13:30:18',80,'Student',50.00,'USD',2,1,'civicrm_line_item',47), - (48,'2022-04-14 03:30:19','2022-04-14 13:30:18',185,'Student',50.00,'USD',2,1,'civicrm_line_item',48), - (49,'2022-04-14 03:30:19','2022-04-14 13:30:18',58,'Student',50.00,'USD',2,1,'civicrm_line_item',49), - (50,'2022-04-14 03:30:19','2022-04-14 13:30:18',61,'Student',50.00,'USD',2,1,'civicrm_line_item',50), - (51,'2022-04-14 03:30:19','2022-04-14 13:30:18',139,'Student',50.00,'USD',2,1,'civicrm_line_item',51), - (52,'2022-04-14 03:30:19','2022-04-14 13:30:18',171,'Student',50.00,'USD',2,1,'civicrm_line_item',52), - (53,'2022-04-14 03:30:19','2022-04-14 13:30:18',68,'Student',50.00,'USD',2,1,'civicrm_line_item',53), - (54,'2022-04-14 03:30:19','2022-04-14 13:30:18',22,'Student',50.00,'USD',2,1,'civicrm_line_item',54), - (55,'2022-04-14 03:30:19','2022-04-14 13:30:18',110,'Student',50.00,'USD',2,1,'civicrm_line_item',55), - (56,'2022-04-14 03:30:19','2022-04-14 13:30:18',113,'Student',50.00,'USD',2,1,'civicrm_line_item',56), - (57,'2022-04-14 03:30:19','2022-04-14 13:30:18',137,'Student',50.00,'USD',2,1,'civicrm_line_item',57), - (58,'2022-04-14 03:30:19','2022-04-14 13:30:18',2,'Student',50.00,'USD',2,1,'civicrm_line_item',58), - (59,'2022-04-14 03:30:19','2022-04-14 13:30:18',89,'Student',50.00,'USD',2,1,'civicrm_line_item',59), - (60,'2022-04-14 03:30:19','2022-04-14 13:30:18',122,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',60), - (61,'2022-04-14 03:30:19','2022-04-14 13:30:18',142,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',61), - (62,'2022-04-14 03:30:19','2022-04-14 13:30:18',66,'Soprano',50.00,'USD',2,1,'civicrm_line_item',97), - (63,'2022-04-14 03:30:19','2022-04-14 13:30:18',147,'Soprano',50.00,'USD',2,1,'civicrm_line_item',98), - (64,'2022-04-14 03:30:19','2022-04-14 13:30:18',56,'Soprano',50.00,'USD',2,1,'civicrm_line_item',99), - (65,'2022-04-14 03:30:19','2022-04-14 13:30:18',88,'Soprano',50.00,'USD',2,1,'civicrm_line_item',100), - (66,'2022-04-14 03:30:19','2022-04-14 13:30:18',55,'Soprano',50.00,'USD',2,1,'civicrm_line_item',101), - (67,'2022-04-14 03:30:19','2022-04-14 13:30:18',143,'Soprano',50.00,'USD',2,1,'civicrm_line_item',102), - (68,'2022-04-14 03:30:19','2022-04-14 13:30:18',184,'Soprano',50.00,'USD',2,1,'civicrm_line_item',103), - (69,'2022-04-14 03:30:19','2022-04-14 13:30:18',40,'Soprano',50.00,'USD',2,1,'civicrm_line_item',104), - (70,'2022-04-14 03:30:19','2022-04-14 13:30:18',115,'Soprano',50.00,'USD',2,1,'civicrm_line_item',105), - (71,'2022-04-14 03:30:19','2022-04-14 13:30:18',60,'Soprano',50.00,'USD',2,1,'civicrm_line_item',106), - (72,'2022-04-14 03:30:19','2022-04-14 13:30:18',158,'Soprano',50.00,'USD',2,1,'civicrm_line_item',107), - (73,'2022-04-14 03:30:19','2022-04-14 13:30:18',107,'Soprano',50.00,'USD',2,1,'civicrm_line_item',108), - (74,'2022-04-14 03:30:19','2022-04-14 13:30:18',14,'Soprano',50.00,'USD',2,1,'civicrm_line_item',109), - (75,'2022-04-14 03:30:19','2022-04-14 13:30:18',168,'Soprano',50.00,'USD',2,1,'civicrm_line_item',110), - (76,'2022-04-14 03:30:19','2022-04-14 13:30:18',20,'Soprano',50.00,'USD',2,1,'civicrm_line_item',111), - (77,'2022-04-14 03:30:19','2022-04-14 13:30:18',155,'Soprano',50.00,'USD',2,1,'civicrm_line_item',112), - (78,'2022-04-14 03:30:19','2022-04-14 13:30:18',169,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), - (79,'2022-04-14 03:30:19','2022-04-14 13:30:18',83,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), - (80,'2022-04-14 03:30:19','2022-04-14 13:30:18',95,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',65), - (81,'2022-04-14 03:30:19','2022-04-14 13:30:18',43,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',66), - (82,'2022-04-14 03:30:19','2022-04-14 13:30:18',180,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',67), - (83,'2022-04-14 03:30:19','2022-04-14 13:30:18',145,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',68), - (84,'2022-04-14 03:30:19','2022-04-14 13:30:18',30,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',69), - (85,'2022-04-14 03:30:19','2022-04-14 13:30:18',141,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',70), - (86,'2022-04-14 03:30:19','2022-04-14 13:30:18',124,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',71), - (87,'2022-04-14 03:30:19','2022-04-14 13:30:18',96,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',72), - (88,'2022-04-14 03:30:19','2022-04-14 13:30:18',118,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',73), - (89,'2022-04-14 03:30:19','2022-04-14 13:30:18',179,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',74), - (90,'2022-04-14 03:30:19','2022-04-14 13:30:18',71,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',75), - (91,'2022-04-14 03:30:19','2022-04-14 13:30:18',12,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',76), - (92,'2022-04-14 03:30:19','2022-04-14 13:30:18',173,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',77), - (93,'2022-04-14 03:30:19','2022-04-14 13:30:18',200,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',78), - (94,'2022-04-14 03:30:19','2022-04-14 13:30:18',130,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',79), - (95,'2022-04-14 03:30:19','2022-04-14 13:30:18',178,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',80), - (96,'2022-04-14 03:30:19','2022-04-14 13:30:18',39,'Single',50.00,'USD',4,1,'civicrm_line_item',81), - (97,'2022-04-14 03:30:19','2022-04-14 13:30:18',8,'Single',50.00,'USD',4,1,'civicrm_line_item',82), - (98,'2022-04-14 03:30:19','2022-04-14 13:30:18',16,'Single',50.00,'USD',4,1,'civicrm_line_item',83), - (99,'2022-04-14 03:30:19','2022-04-14 13:30:18',47,'Single',50.00,'USD',4,1,'civicrm_line_item',84), - (100,'2022-04-14 03:30:19','2022-04-14 13:30:18',72,'Single',50.00,'USD',4,1,'civicrm_line_item',85), - (101,'2022-04-14 03:30:19','2022-04-14 13:30:18',188,'Single',50.00,'USD',4,1,'civicrm_line_item',86), - (102,'2022-04-14 03:30:19','2022-04-14 13:30:18',41,'Single',50.00,'USD',4,1,'civicrm_line_item',87), - (103,'2022-04-14 03:30:19','2022-04-14 13:30:18',61,'Single',50.00,'USD',4,1,'civicrm_line_item',88), - (104,'2022-04-14 03:30:19','2022-04-14 13:30:18',109,'Single',50.00,'USD',4,1,'civicrm_line_item',89), - (105,'2022-04-14 03:30:19','2022-04-14 13:30:18',57,'Single',50.00,'USD',4,1,'civicrm_line_item',90), - (106,'2022-04-14 03:30:19','2022-04-14 13:30:18',7,'Single',50.00,'USD',4,1,'civicrm_line_item',91), - (107,'2022-04-14 03:30:19','2022-04-14 13:30:18',105,'Single',50.00,'USD',4,1,'civicrm_line_item',92), - (108,'2022-04-14 03:30:19','2022-04-14 13:30:18',17,'Single',50.00,'USD',4,1,'civicrm_line_item',93), - (109,'2022-04-14 03:30:19','2022-04-14 13:30:18',37,'Single',50.00,'USD',4,1,'civicrm_line_item',94), - (110,'2022-04-14 03:30:19','2022-04-14 13:30:18',186,'Single',50.00,'USD',4,1,'civicrm_line_item',95), - (111,'2022-04-14 03:30:19','2022-04-14 13:30:18',148,'Single',50.00,'USD',4,1,'civicrm_line_item',96); + (1,'2022-05-04 18:47:25','2012-05-04 18:47:25',2,'Contribution Amount',125.00,'USD',1,1,'civicrm_line_item',1), + (2,'2022-05-04 18:47:25','2020-02-04 18:47:25',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',2), + (3,'2022-05-04 18:47:25','2016-04-09 05:47:25',6,'Contribution Amount',25.00,'GBP',1,1,'civicrm_line_item',3), + (4,'2022-05-04 18:47:25','2020-02-04 18:47:25',8,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',4), + (5,'2022-05-04 18:47:25','2020-02-04 18:47:25',4,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',5), + (6,'2022-05-04 18:47:25','2022-02-08 18:05:25',16,'Contribution Amount',500.00,'USD',1,1,'civicrm_line_item',6), + (7,'2022-05-04 18:47:25','2022-05-02 18:47:25',19,'Contribution Amount',1750.00,'USD',1,1,'civicrm_line_item',7), + (8,'2022-05-04 18:47:25','2021-09-10 02:58:25',82,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',8), + (9,'2022-05-04 18:47:25','2021-06-04 18:47:25',92,'Contribution Amount',10.00,'USD',1,1,'civicrm_line_item',9), + (10,'2022-05-04 18:47:25','2017-12-12 20:47:25',34,'Contribution Amount',250.00,'USD',1,1,'civicrm_line_item',10), + (11,'2022-05-04 18:47:25','2022-05-03 14:47:25',71,'Contribution Amount',500.00,'JPY',1,1,'civicrm_line_item',11), + (12,'2022-05-04 18:47:25','2021-02-04 08:14:05',43,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',12), + (13,'2022-05-04 18:47:25','2022-02-04 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',13), + (14,'2022-05-04 18:47:25','2022-03-04 00:00:00',32,'Contribution Amount',50.00,'USD',1,1,'civicrm_line_item',14), + (15,'2022-05-04 18:47:25','2021-02-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',15), + (16,'2022-05-04 18:47:25','2021-03-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',16), + (17,'2022-05-04 18:47:25','2021-04-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',17), + (18,'2022-05-04 18:47:25','2021-05-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',18), + (19,'2022-05-04 18:47:25','2021-06-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',19), + (20,'2022-05-04 18:47:25','2021-07-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',20), + (21,'2022-05-04 18:47:25','2021-08-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',21), + (22,'2022-05-04 18:47:25','2021-09-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',22), + (23,'2022-05-04 18:47:25','2021-10-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',23), + (24,'2022-05-04 18:47:25','2021-11-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',24), + (25,'2022-05-04 18:47:25','2021-12-04 18:47:25',59,'Contribution Amount',25.00,'USD',1,1,'civicrm_line_item',25), + (26,'2022-05-04 18:47:25','2021-09-04 18:47:25',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',26), + (27,'2022-05-04 18:47:25','2021-10-04 18:47:25',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',27), + (28,'2022-05-04 18:47:25','2021-11-04 18:47:25',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',28), + (29,'2022-05-04 18:47:25','2021-12-04 18:47:25',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',29), + (30,'2022-05-04 18:47:25','2022-01-04 18:47:25',99,'Contribution Amount',10.00,'CAD',1,1,'civicrm_line_item',30), + (31,'2022-05-04 18:47:25','2022-04-04 18:47:25',103,'Contribution Amount',5.00,'EUR',1,1,'civicrm_line_item',31), + (32,'2022-05-04 18:47:25','2022-05-04 18:47:25',100,'General',100.00,'USD',2,1,'civicrm_line_item',32), + (33,'2022-05-04 18:47:25','2022-05-04 18:47:25',135,'General',100.00,'USD',2,1,'civicrm_line_item',33), + (34,'2022-05-04 18:47:25','2022-05-04 18:47:25',2,'General',100.00,'USD',2,1,'civicrm_line_item',34), + (35,'2022-05-04 18:47:25','2022-05-04 18:47:25',61,'General',100.00,'USD',2,1,'civicrm_line_item',35), + (36,'2022-05-04 18:47:25','2022-05-04 18:47:25',111,'General',100.00,'USD',2,1,'civicrm_line_item',36), + (37,'2022-05-04 18:47:25','2022-05-04 18:47:25',170,'General',100.00,'USD',2,1,'civicrm_line_item',37), + (38,'2022-05-04 18:47:25','2022-05-04 18:47:25',191,'General',100.00,'USD',2,1,'civicrm_line_item',38), + (39,'2022-05-04 18:47:25','2022-05-04 18:47:25',192,'General',100.00,'USD',2,1,'civicrm_line_item',39), + (40,'2022-05-04 18:47:25','2022-05-04 18:47:25',60,'General',100.00,'USD',2,1,'civicrm_line_item',40), + (41,'2022-05-04 18:47:25','2022-05-04 18:47:25',189,'General',100.00,'USD',2,1,'civicrm_line_item',41), + (42,'2022-05-04 18:47:25','2022-05-04 18:47:25',155,'General',100.00,'USD',2,1,'civicrm_line_item',42), + (43,'2022-05-04 18:47:25','2022-05-04 18:47:25',86,'General',100.00,'USD',2,1,'civicrm_line_item',43), + (44,'2022-05-04 18:47:25','2022-05-04 18:47:25',178,'General',100.00,'USD',2,1,'civicrm_line_item',44), + (45,'2022-05-04 18:47:25','2022-05-04 18:47:25',142,'General',100.00,'USD',2,1,'civicrm_line_item',45), + (46,'2022-05-04 18:47:25','2022-05-04 18:47:25',22,'General',100.00,'USD',2,1,'civicrm_line_item',46), + (47,'2022-05-04 18:47:25','2022-05-04 18:47:25',25,'General',100.00,'USD',2,1,'civicrm_line_item',47), + (48,'2022-05-04 18:47:25','2022-05-04 18:47:25',57,'General',100.00,'USD',2,1,'civicrm_line_item',48), + (49,'2022-05-04 18:47:25','2022-05-04 18:47:25',168,'Student',50.00,'USD',2,1,'civicrm_line_item',49), + (50,'2022-05-04 18:47:25','2022-05-04 18:47:25',182,'Student',50.00,'USD',2,1,'civicrm_line_item',50), + (51,'2022-05-04 18:47:25','2022-05-04 18:47:25',35,'Student',50.00,'USD',2,1,'civicrm_line_item',51), + (52,'2022-05-04 18:47:25','2022-05-04 18:47:25',37,'Student',50.00,'USD',2,1,'civicrm_line_item',52), + (53,'2022-05-04 18:47:25','2022-05-04 18:47:25',82,'Student',50.00,'USD',2,1,'civicrm_line_item',53), + (54,'2022-05-04 18:47:25','2022-05-04 18:47:25',54,'Student',50.00,'USD',2,1,'civicrm_line_item',54), + (55,'2022-05-04 18:47:25','2022-05-04 18:47:25',115,'Student',50.00,'USD',2,1,'civicrm_line_item',55), + (56,'2022-05-04 18:47:25','2022-05-04 18:47:25',46,'Student',50.00,'USD',2,1,'civicrm_line_item',56), + (57,'2022-05-04 18:47:25','2022-05-04 18:47:25',67,'Student',50.00,'USD',2,1,'civicrm_line_item',57), + (58,'2022-05-04 18:47:26','2022-05-04 18:47:25',39,'Student',50.00,'USD',2,1,'civicrm_line_item',58), + (59,'2022-05-04 18:47:26','2022-05-04 18:47:25',140,'Student',50.00,'USD',2,1,'civicrm_line_item',59), + (60,'2022-05-04 18:47:26','2022-05-04 18:47:25',117,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',60), + (61,'2022-05-04 18:47:26','2022-05-04 18:47:25',15,'Lifetime',1200.00,'USD',2,1,'civicrm_line_item',61), + (62,'2022-05-04 18:47:26','2022-05-04 18:47:25',102,'Soprano',50.00,'USD',2,1,'civicrm_line_item',97), + (63,'2022-05-04 18:47:26','2022-05-04 18:47:25',137,'Soprano',50.00,'USD',2,1,'civicrm_line_item',98), + (64,'2022-05-04 18:47:26','2022-05-04 18:47:25',34,'Soprano',50.00,'USD',2,1,'civicrm_line_item',99), + (65,'2022-05-04 18:47:26','2022-05-04 18:47:25',58,'Soprano',50.00,'USD',2,1,'civicrm_line_item',100), + (66,'2022-05-04 18:47:26','2022-05-04 18:47:25',73,'Soprano',50.00,'USD',2,1,'civicrm_line_item',101), + (67,'2022-05-04 18:47:26','2022-05-04 18:47:25',7,'Soprano',50.00,'USD',2,1,'civicrm_line_item',102), + (68,'2022-05-04 18:47:26','2022-05-04 18:47:25',190,'Soprano',50.00,'USD',2,1,'civicrm_line_item',103), + (69,'2022-05-04 18:47:26','2022-05-04 18:47:25',157,'Soprano',50.00,'USD',2,1,'civicrm_line_item',104), + (70,'2022-05-04 18:47:26','2022-05-04 18:47:25',162,'Soprano',50.00,'USD',2,1,'civicrm_line_item',105), + (71,'2022-05-04 18:47:26','2022-05-04 18:47:25',71,'Soprano',50.00,'USD',2,1,'civicrm_line_item',106), + (72,'2022-05-04 18:47:26','2022-05-04 18:47:25',107,'Soprano',50.00,'USD',2,1,'civicrm_line_item',107), + (73,'2022-05-04 18:47:26','2022-05-04 18:47:25',68,'Soprano',50.00,'USD',2,1,'civicrm_line_item',108), + (74,'2022-05-04 18:47:26','2022-05-04 18:47:25',104,'Soprano',50.00,'USD',2,1,'civicrm_line_item',109), + (75,'2022-05-04 18:47:26','2022-05-04 18:47:25',101,'Soprano',50.00,'USD',2,1,'civicrm_line_item',110), + (76,'2022-05-04 18:47:26','2022-05-04 18:47:25',67,'Soprano',50.00,'USD',2,1,'civicrm_line_item',111), + (77,'2022-05-04 18:47:26','2022-05-04 18:47:25',70,'Soprano',50.00,'USD',2,1,'civicrm_line_item',112), + (78,'2022-05-04 18:47:26','2022-05-04 18:47:25',140,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',63), + (79,'2022-05-04 18:47:26','2022-05-04 18:47:25',171,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',64), + (80,'2022-05-04 18:47:26','2022-05-04 18:47:25',196,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',65), + (81,'2022-05-04 18:47:26','2022-05-04 18:47:25',100,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',66), + (82,'2022-05-04 18:47:26','2022-05-04 18:47:25',139,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',67), + (83,'2022-05-04 18:47:26','2022-05-04 18:47:25',49,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',68), + (84,'2022-05-04 18:47:26','2022-05-04 18:47:25',41,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',69), + (85,'2022-05-04 18:47:26','2022-05-04 18:47:25',75,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',70), + (86,'2022-05-04 18:47:26','2022-05-04 18:47:25',56,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',71), + (87,'2022-05-04 18:47:26','2022-05-04 18:47:25',1,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',72), + (88,'2022-05-04 18:47:26','2022-05-04 18:47:25',183,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',73), + (89,'2022-05-04 18:47:26','2022-05-04 18:47:25',33,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',74), + (90,'2022-05-04 18:47:26','2022-05-04 18:47:25',53,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',75), + (91,'2022-05-04 18:47:26','2022-05-04 18:47:25',96,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',76), + (92,'2022-05-04 18:47:26','2022-05-04 18:47:25',176,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',77), + (93,'2022-05-04 18:47:26','2022-05-04 18:47:25',78,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',78), + (94,'2022-05-04 18:47:26','2022-05-04 18:47:25',150,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',79), + (95,'2022-05-04 18:47:26','2022-05-04 18:47:25',111,'Tiny-tots (ages 5-8)',800.00,'USD',4,1,'civicrm_line_item',80), + (96,'2022-05-04 18:47:26','2022-05-04 18:47:25',74,'Single',50.00,'USD',4,1,'civicrm_line_item',81), + (97,'2022-05-04 18:47:26','2022-05-04 18:47:25',153,'Single',50.00,'USD',4,1,'civicrm_line_item',82), + (98,'2022-05-04 18:47:26','2022-05-04 18:47:25',61,'Single',50.00,'USD',4,1,'civicrm_line_item',83), + (99,'2022-05-04 18:47:26','2022-05-04 18:47:25',52,'Single',50.00,'USD',4,1,'civicrm_line_item',84), + (100,'2022-05-04 18:47:26','2022-05-04 18:47:25',60,'Single',50.00,'USD',4,1,'civicrm_line_item',85), + (101,'2022-05-04 18:47:26','2022-05-04 18:47:25',87,'Single',50.00,'USD',4,1,'civicrm_line_item',86), + (102,'2022-05-04 18:47:26','2022-05-04 18:47:25',65,'Single',50.00,'USD',4,1,'civicrm_line_item',87), + (103,'2022-05-04 18:47:26','2022-05-04 18:47:25',151,'Single',50.00,'USD',4,1,'civicrm_line_item',88), + (104,'2022-05-04 18:47:26','2022-05-04 18:47:25',201,'Single',50.00,'USD',4,1,'civicrm_line_item',89), + (105,'2022-05-04 18:47:26','2022-05-04 18:47:25',79,'Single',50.00,'USD',4,1,'civicrm_line_item',90), + (106,'2022-05-04 18:47:26','2022-05-04 18:47:25',133,'Single',50.00,'USD',4,1,'civicrm_line_item',91), + (107,'2022-05-04 18:47:26','2022-05-04 18:47:25',4,'Single',50.00,'USD',4,1,'civicrm_line_item',92), + (108,'2022-05-04 18:47:26','2022-05-04 18:47:25',177,'Single',50.00,'USD',4,1,'civicrm_line_item',93), + (109,'2022-05-04 18:47:26','2022-05-04 18:47:25',174,'Single',50.00,'USD',4,1,'civicrm_line_item',94), + (110,'2022-05-04 18:47:26','2022-05-04 18:47:25',134,'Single',50.00,'USD',4,1,'civicrm_line_item',95), + (111,'2022-05-04 18:47:26','2022-05-04 18:47:25',191,'Single',50.00,'USD',4,1,'civicrm_line_item',96); /*!40000 ALTER TABLE `civicrm_financial_item` ENABLE KEYS */; UNLOCK TABLES; @@ -3775,117 +3767,117 @@ UNLOCK TABLES; LOCK TABLES `civicrm_financial_trxn` WRITE; /*!40000 ALTER TABLE `civicrm_financial_trxn` DISABLE KEYS */; INSERT INTO `civicrm_financial_trxn` (`id`, `from_financial_account_id`, `to_financial_account_id`, `trxn_date`, `total_amount`, `fee_amount`, `net_amount`, `currency`, `is_payment`, `trxn_id`, `trxn_result_code`, `status_id`, `payment_processor_id`, `payment_instrument_id`, `card_type_id`, `check_number`, `pan_truncation`, `order_reference`) VALUES - (1,NULL,6,'2012-04-14 13:30:18',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL), - (2,NULL,6,'2020-01-14 13:30:18',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (3,NULL,6,'2016-03-20 00:30:18',25.00,NULL,NULL,'GBP',1,'GBP12',NULL,1,NULL,4,NULL,'2095',NULL,NULL), - (4,NULL,6,'2020-01-14 13:30:18',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL), - (5,NULL,6,'2020-01-14 13:30:18',50.00,NULL,NULL,'USD',1,'Q90901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (6,NULL,6,'2022-01-19 12:48:18',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL), - (7,NULL,6,'2022-04-12 13:30:18',1750.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,'102',NULL,NULL), - (8,NULL,6,'2021-08-20 21:41:18',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (9,NULL,6,'2021-05-14 13:30:18',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (10,NULL,6,'2017-11-21 15:30:18',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (11,NULL,6,'2022-04-13 09:30:18',500.00,NULL,NULL,'JPY',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (12,NULL,6,'2021-01-14 02:56:58',50.00,NULL,NULL,'USD',1,'P291X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (13,NULL,6,'2022-01-14 00:00:00',50.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (14,NULL,6,'2022-02-14 00:00:00',50.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (15,NULL,6,'2021-01-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I591',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (16,NULL,6,'2021-02-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I592',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (17,NULL,6,'2021-03-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I593',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (18,NULL,6,'2021-04-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I594',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (19,NULL,6,'2021-05-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I595',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (20,NULL,6,'2021-06-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I596',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (21,NULL,6,'2021-07-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I597',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (22,NULL,6,'2021-08-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I598',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (23,NULL,6,'2021-09-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I599',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (24,NULL,6,'2021-10-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I5910',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (25,NULL,6,'2021-11-14 13:30:18',25.00,NULL,NULL,'USD',1,'PL32I5911',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (26,NULL,6,'2021-08-14 13:30:18',10.00,NULL,NULL,'CAD',1,'PL32I991',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (27,NULL,6,'2021-09-14 13:30:18',10.00,NULL,NULL,'CAD',1,'PL32I992',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (28,NULL,6,'2021-10-14 13:30:18',10.00,NULL,NULL,'CAD',1,'PL32I993',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (29,NULL,6,'2021-11-14 13:30:18',10.00,NULL,NULL,'CAD',1,'PL32I994',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (30,NULL,6,'2021-12-14 13:30:18',10.00,NULL,NULL,'CAD',1,'PL32I995',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (31,NULL,6,'2022-03-14 13:30:18',5.00,NULL,NULL,'EUR',1,'PL32I1031',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (32,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'5a883e9f141373d0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (33,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'2b00f8c369a4eb08',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (34,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'584e4c5ac815c02e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (35,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'9e95d2bc32a624d6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (36,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'57ebf6868b78f973',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (37,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'22a84e6e34ddd5b8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (38,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'5bf7f786194f69d2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (39,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'f07db1159a3b586c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (40,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'89f2885bef90791d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (41,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'81d3f5e12fa2a28a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (42,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'215e07397041c8cc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (43,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'aef86e4ca219dd13',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (44,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'c96f15d653474ceb',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (45,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'1c08e387395f1eb8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (46,NULL,6,'2022-04-14 13:30:18',100.00,NULL,NULL,'USD',1,'98f9e715a8ef7478',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (47,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'2e4337611730f952',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (48,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'9fabb124bc204c7b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (49,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'901461c9f1690b15',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (50,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'d5add53cdb4db026',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (51,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'ae911eddd684538e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (52,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'152c5af6a7c5a397',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (53,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'4e8825a4db31c939',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (54,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'a4eee5fba87a445f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (55,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'5ae148f4a65c974f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (56,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'a1cde7dfd6729f80',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (57,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'d1b03d65b61102fd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (58,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'c2eb9cf9a813d751',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (59,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'c29a49ec2417dcb1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (60,NULL,6,'2022-04-14 13:30:18',1200.00,NULL,NULL,'USD',1,'2a18a34ce19008d6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (61,NULL,6,'2022-04-14 13:30:18',1200.00,NULL,NULL,'USD',1,'f7e3c868b37a4325',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (62,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'b64d3291fcf318e1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (63,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'f8c6db3c7896a527',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (64,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'30a0c170bad9da17',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (65,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'ff116ee40154cb1f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (66,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'9e80821a541f8fb9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (67,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'df9e4dfa9b870127',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (68,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'290c011a82328437',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (69,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'ad8eb58807eb67a9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (70,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'4f14abc2e71986dd',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (71,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'073ea06faa57d30b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (72,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'99c62972919f3d1f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (73,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'a20828653f3f1137',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (74,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'1b198625ca88ef2a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (75,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'b5cfee8ed497694b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (76,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'dd0a4cb09082fbe8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (77,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'a79bec69def12209',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (78,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'9c6cf4bae28beb63',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (79,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'f367c487143095d9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (80,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'e3aaa48ce523e85c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (81,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'6c6d0c5cc6a26b35',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (82,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'669230755b3aac7a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (83,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'2023b1978c91d4cc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (84,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'16cf0431caa61b04',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (85,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'cccec0ff5302efa3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (86,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'5dc28b491a757c3c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (87,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'87552b7d9efa8637',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (88,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'7a9df9cd3eb5ac02',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (89,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'660a71959a6ea204',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (90,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'c7089de57bbce672',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (91,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'d828aa6d3565df94',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (92,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'ba8e52425c181d86',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (93,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'e226051c42c71e58',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (94,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'96041fafb81c17c0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (95,NULL,6,'2022-04-14 13:30:18',800.00,NULL,NULL,'USD',1,'6bfa5fb45795298b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (96,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'c40c105aea7c606b',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (97,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'dbcfa396ae8c6048',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (98,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'48b3b2fb1583accc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (99,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'8e32409f51bc2adf',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (100,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'de5d6f6062daf74e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (101,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'17c3bc04fee36354',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (102,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'53b4462b373569b2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (103,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'2770779cd9d01e9e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (104,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'7eedc4124d8ab293',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (105,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'f0d5086ff9868244',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (106,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'67af66a6086bd81e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (107,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'2d8d4184fcac4196',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (108,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'412d137e17b65683',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (109,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'65519963ac86c7ed',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (110,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'4c76baccb7c2b861',NULL,1,NULL,1,NULL,NULL,NULL,NULL), - (111,NULL,6,'2022-04-14 13:30:18',50.00,NULL,NULL,'USD',1,'3639dce271550b62',NULL,1,NULL,1,NULL,NULL,NULL,NULL); + (1,NULL,6,'2012-05-04 18:47:25',125.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'1041',NULL,NULL), + (2,NULL,6,'2020-02-04 18:47:25',50.00,NULL,NULL,'USD',1,'P20901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (3,NULL,6,'2016-04-09 05:47:25',25.00,NULL,NULL,'GBP',1,'GBP12',NULL,1,NULL,4,NULL,'2095',NULL,NULL), + (4,NULL,6,'2020-02-04 18:47:25',50.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'10552',NULL,NULL), + (5,NULL,6,'2020-02-04 18:47:25',50.00,NULL,NULL,'USD',1,'Q90901X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (6,NULL,6,'2022-02-08 18:05:25',500.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,4,NULL,'509',NULL,NULL), + (7,NULL,6,'2022-05-02 18:47:25',1750.00,NULL,NULL,'USD',1,NULL,NULL,1,NULL,1,NULL,'102',NULL,NULL), + (8,NULL,6,'2021-09-10 02:58:25',50.00,NULL,NULL,'USD',1,'P20193L2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (9,NULL,6,'2021-06-04 18:47:25',10.00,NULL,NULL,'USD',1,'P40232Y3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (10,NULL,6,'2017-12-12 20:47:25',250.00,NULL,NULL,'USD',1,'P20193L6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (11,NULL,6,'2022-05-03 14:47:25',500.00,NULL,NULL,'JPY',1,'PL71',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (12,NULL,6,'2021-02-04 08:14:05',50.00,NULL,NULL,'USD',1,'P291X1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (13,NULL,6,'2022-02-04 00:00:00',50.00,NULL,NULL,'USD',1,'PL32I',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (14,NULL,6,'2022-03-04 00:00:00',50.00,NULL,NULL,'USD',1,'PL32II',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (15,NULL,6,'2021-02-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I591',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (16,NULL,6,'2021-03-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I592',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (17,NULL,6,'2021-04-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I593',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (18,NULL,6,'2021-05-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I594',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (19,NULL,6,'2021-06-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I595',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (20,NULL,6,'2021-07-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I596',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (21,NULL,6,'2021-08-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I597',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (22,NULL,6,'2021-09-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I598',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (23,NULL,6,'2021-10-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I599',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (24,NULL,6,'2021-11-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I5910',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (25,NULL,6,'2021-12-04 18:47:25',25.00,NULL,NULL,'USD',1,'PL32I5911',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (26,NULL,6,'2021-09-04 18:47:25',10.00,NULL,NULL,'CAD',1,'PL32I991',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (27,NULL,6,'2021-10-04 18:47:25',10.00,NULL,NULL,'CAD',1,'PL32I992',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (28,NULL,6,'2021-11-04 18:47:25',10.00,NULL,NULL,'CAD',1,'PL32I993',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (29,NULL,6,'2021-12-04 18:47:25',10.00,NULL,NULL,'CAD',1,'PL32I994',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (30,NULL,6,'2022-01-04 18:47:25',10.00,NULL,NULL,'CAD',1,'PL32I995',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (31,NULL,6,'2022-04-04 18:47:25',5.00,NULL,NULL,'EUR',1,'PL32I1031',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (32,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'d9c85393c88cd596',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (33,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'c04ae16dbf6d967f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (34,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'0aeded2c8154700a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (35,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'0ee59e65ffe2070c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (36,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'082c2062076a1d28',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (37,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'01f029476b657e9d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (38,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'b2b0abce0dfbc190',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (39,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'49959d809e289b3d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (40,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'17128ad66f1c4503',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (41,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'49e0e3bfab39e564',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (42,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'ea4c779831742778',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (43,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'16cb89310fd3e0d8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (44,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'41fcaa5d172d91bf',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (45,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'5d7bcf571d1aa2b0',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (46,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'b498dad64ac6247c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (47,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'766cf0fa6954f916',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (48,NULL,6,'2022-05-04 18:47:25',100.00,NULL,NULL,'USD',1,'7d7cd7323a72211f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (49,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'00b890837ed6c960',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (50,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'1b501973e0ee1c15',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (51,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'85c47249a3ddcba6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (52,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'b66fc3490aea18b3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (53,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'63b0ed9561fa7780',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (54,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'517985fa0d5ab91a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (55,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'03257f054c993e87',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (56,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'2e48178a5a7b18e5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (57,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'54faf2ecc1879724',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (58,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'3b9a02b81d76888e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (59,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'47e756cb52fe87a6',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (60,NULL,6,'2022-05-04 18:47:25',1200.00,NULL,NULL,'USD',1,'10f11d2d9e6e5616',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (61,NULL,6,'2022-05-04 18:47:25',1200.00,NULL,NULL,'USD',1,'cc7f90a2726b4247',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (62,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'4d2083f4307b8f3a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (63,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'4ac8dc67b4b031d9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (64,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'48da24c83958fc4d',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (65,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'dce8a8d23d7b893a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (66,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'424d08a38367d59c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (67,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'f805c74e2a175965',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (68,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'e82a842601748b75',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (69,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'c5908ae3c756325e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (70,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'07acab4ec9d5aa89',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (71,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'651faada3d3ebb17',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (72,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'51a8def6a1eb096a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (73,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'20e66244c3daa6f3',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (74,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'0f1627b7f174f5f8',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (75,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'569d40a3c31d53c1',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (76,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'9b849ecc61058c78',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (77,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'df0f15e4540dd801',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (78,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'0e640185c2188f96',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (79,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'03dfa749c620c60e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (80,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'6f04edd9a3f8b0b4',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (81,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'6ab5af0fb6f7a8ae',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (82,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'ee89c00b7f57b45a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (83,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'99b37b1a68fcf65f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (84,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'8b53dce5cb8ca2b9',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (85,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'c2c5f2ab80ad6d6f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (86,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'00f104abdd46d7d5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (87,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'ee91bc49364d8434',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (88,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'71a147a0b0838a78',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (89,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'97efceb09a80a487',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (90,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'c090a6e440438757',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (91,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'31cfb1989c05e456',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (92,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'459f01c6d6e70b21',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (93,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'a30a94b74ac48b9c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (94,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'e13fe38f61d5a383',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (95,NULL,6,'2022-05-04 18:47:25',800.00,NULL,NULL,'USD',1,'9cde729bc4c25ec2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (96,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'ad906afc299009df',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (97,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'63d08c6920a0ca43',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (98,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'25c029e765afa1f5',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (99,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'b84acade775f1b79',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (100,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'6d776d4763f9b8db',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (101,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'e55d8ffa24512aa2',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (102,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'07155e592d15767e',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (103,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'54babef7fc67b10a',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (104,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'b9e0c3082d2950d7',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (105,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'7e9792e93db6bc8f',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (106,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'98707aae2978bf75',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (107,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'acad8f4145a7e998',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (108,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'f04c70f41e32fe7c',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (109,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'0716249afae9e9bc',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (110,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'15820b216936ed97',NULL,1,NULL,1,NULL,NULL,NULL,NULL), + (111,NULL,6,'2022-05-04 18:47:25',50.00,NULL,NULL,'USD',1,'ba52c471ed88fe25',NULL,1,NULL,1,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_financial_trxn` ENABLE KEYS */; UNLOCK TABLES; @@ -3924,89 +3916,89 @@ 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,151,'Added',NULL,NULL), - (2,2,181,'Added',NULL,NULL), - (3,2,69,'Added',NULL,NULL), - (4,2,23,'Added',NULL,NULL), - (5,2,163,'Added',NULL,NULL), - (6,2,197,'Added',NULL,NULL), - (7,2,94,'Added',NULL,NULL), - (8,2,68,'Added',NULL,NULL), - (9,2,32,'Added',NULL,NULL), - (10,2,100,'Added',NULL,NULL), - (11,2,22,'Added',NULL,NULL), - (12,2,67,'Added',NULL,NULL), - (13,2,85,'Added',NULL,NULL), - (14,2,40,'Added',NULL,NULL), - (15,2,59,'Added',NULL,NULL), - (16,2,10,'Added',NULL,NULL), - (17,2,8,'Added',NULL,NULL), - (18,2,11,'Added',NULL,NULL), - (19,2,149,'Added',NULL,NULL), - (20,2,126,'Added',NULL,NULL), - (21,2,7,'Added',NULL,NULL), - (22,2,120,'Added',NULL,NULL), - (23,2,25,'Added',NULL,NULL), - (24,2,143,'Added',NULL,NULL), - (25,2,91,'Added',NULL,NULL), - (26,2,82,'Added',NULL,NULL), - (27,2,185,'Added',NULL,NULL), - (28,2,71,'Added',NULL,NULL), - (29,2,183,'Added',NULL,NULL), - (30,2,166,'Added',NULL,NULL), - (31,2,89,'Added',NULL,NULL), - (32,2,36,'Added',NULL,NULL), - (33,2,176,'Added',NULL,NULL), - (34,2,15,'Added',NULL,NULL), - (35,2,27,'Added',NULL,NULL), - (36,2,170,'Added',NULL,NULL), - (37,2,196,'Added',NULL,NULL), - (38,2,31,'Added',NULL,NULL), - (39,2,56,'Added',NULL,NULL), - (40,2,160,'Added',NULL,NULL), - (41,2,104,'Added',NULL,NULL), - (42,2,6,'Added',NULL,NULL), - (43,2,51,'Added',NULL,NULL), - (44,2,115,'Added',NULL,NULL), - (45,2,186,'Added',NULL,NULL), - (46,2,3,'Added',NULL,NULL), - (47,2,2,'Added',NULL,NULL), - (48,2,97,'Added',NULL,NULL), - (49,2,189,'Added',NULL,NULL), - (50,2,192,'Added',NULL,NULL), - (51,2,9,'Added',NULL,NULL), - (52,2,173,'Added',NULL,NULL), - (53,2,199,'Added',NULL,NULL), - (54,2,131,'Added',NULL,NULL), - (55,2,63,'Added',NULL,NULL), - (56,2,29,'Added',NULL,NULL), - (57,2,182,'Added',NULL,NULL), - (58,2,118,'Added',NULL,NULL), - (59,2,57,'Added',NULL,NULL), - (60,2,62,'Added',NULL,NULL), - (61,3,50,'Added',NULL,NULL), - (62,3,162,'Added',NULL,NULL), - (63,3,16,'Added',NULL,NULL), - (64,3,60,'Added',NULL,NULL), - (65,3,64,'Added',NULL,NULL), - (66,3,112,'Added',NULL,NULL), - (67,3,38,'Added',NULL,NULL), - (68,3,200,'Added',NULL,NULL), - (69,3,4,'Added',NULL,NULL), - (70,3,153,'Added',NULL,NULL), - (71,3,19,'Added',NULL,NULL), - (72,3,88,'Added',NULL,NULL), - (73,3,103,'Added',NULL,NULL), - (74,3,134,'Added',NULL,NULL), - (75,3,117,'Added',NULL,NULL), - (76,4,151,'Added',NULL,NULL), - (77,4,68,'Added',NULL,NULL), - (78,4,59,'Added',NULL,NULL), - (79,4,120,'Added',NULL,NULL), - (80,4,183,'Added',NULL,NULL), - (81,4,170,'Added',NULL,NULL), - (82,4,51,'Added',NULL,NULL), - (83,4,192,'Added',NULL,NULL), + (1,2,23,'Added',NULL,NULL), + (2,2,65,'Added',NULL,NULL), + (3,2,15,'Added',NULL,NULL), + (4,2,22,'Added',NULL,NULL), + (5,2,170,'Added',NULL,NULL), + (6,2,83,'Added',NULL,NULL), + (7,2,197,'Added',NULL,NULL), + (8,2,161,'Added',NULL,NULL), + (9,2,199,'Added',NULL,NULL), + (10,2,116,'Added',NULL,NULL), + (11,2,147,'Added',NULL,NULL), + (12,2,149,'Added',NULL,NULL), + (13,2,136,'Added',NULL,NULL), + (14,2,100,'Added',NULL,NULL), + (15,2,115,'Added',NULL,NULL), + (16,2,76,'Added',NULL,NULL), + (17,2,107,'Added',NULL,NULL), + (18,2,28,'Added',NULL,NULL), + (19,2,54,'Added',NULL,NULL), + (20,2,9,'Added',NULL,NULL), + (21,2,10,'Added',NULL,NULL), + (22,2,160,'Added',NULL,NULL), + (23,2,130,'Added',NULL,NULL), + (24,2,193,'Added',NULL,NULL), + (25,2,66,'Added',NULL,NULL), + (26,2,77,'Added',NULL,NULL), + (27,2,179,'Added',NULL,NULL), + (28,2,45,'Added',NULL,NULL), + (29,2,132,'Added',NULL,NULL), + (30,2,68,'Added',NULL,NULL), + (31,2,142,'Added',NULL,NULL), + (32,2,151,'Added',NULL,NULL), + (33,2,101,'Added',NULL,NULL), + (34,2,138,'Added',NULL,NULL), + (35,2,38,'Added',NULL,NULL), + (36,2,144,'Added',NULL,NULL), + (37,2,172,'Added',NULL,NULL), + (38,2,123,'Added',NULL,NULL), + (39,2,196,'Added',NULL,NULL), + (40,2,194,'Added',NULL,NULL), + (41,2,181,'Added',NULL,NULL), + (42,2,126,'Added',NULL,NULL), + (43,2,27,'Added',NULL,NULL), + (44,2,84,'Added',NULL,NULL), + (45,2,87,'Added',NULL,NULL), + (46,2,44,'Added',NULL,NULL), + (47,2,67,'Added',NULL,NULL), + (48,2,88,'Added',NULL,NULL), + (49,2,42,'Added',NULL,NULL), + (50,2,91,'Added',NULL,NULL), + (51,2,17,'Added',NULL,NULL), + (52,2,29,'Added',NULL,NULL), + (53,2,32,'Added',NULL,NULL), + (54,2,75,'Added',NULL,NULL), + (55,2,178,'Added',NULL,NULL), + (56,2,80,'Added',NULL,NULL), + (57,2,164,'Added',NULL,NULL), + (58,2,92,'Added',NULL,NULL), + (59,2,13,'Added',NULL,NULL), + (60,2,103,'Added',NULL,NULL), + (61,3,21,'Added',NULL,NULL), + (62,3,61,'Added',NULL,NULL), + (63,3,174,'Added',NULL,NULL), + (64,3,50,'Added',NULL,NULL), + (65,3,175,'Added',NULL,NULL), + (66,3,62,'Added',NULL,NULL), + (67,3,188,'Added',NULL,NULL), + (68,3,106,'Added',NULL,NULL), + (69,3,79,'Added',NULL,NULL), + (70,3,25,'Added',NULL,NULL), + (71,3,184,'Added',NULL,NULL), + (72,3,39,'Added',NULL,NULL), + (73,3,198,'Added',NULL,NULL), + (74,3,5,'Added',NULL,NULL), + (75,3,73,'Added',NULL,NULL), + (76,4,23,'Added',NULL,NULL), + (77,4,161,'Added',NULL,NULL), + (78,4,115,'Added',NULL,NULL), + (79,4,160,'Added',NULL,NULL), + (80,4,132,'Added',NULL,NULL), + (81,4,144,'Added',NULL,NULL), + (82,4,27,'Added',NULL,NULL), + (83,4,91,'Added',NULL,NULL), (84,4,202,'Added',NULL,NULL); /*!40000 ALTER TABLE `civicrm_group_contact` ENABLE KEYS */; UNLOCK TABLES; @@ -4126,27 +4118,27 @@ INSERT INTO `civicrm_line_item` (`id`, `entity_table`, `entity_id`, `contributio (34,'civicrm_membership',5,36,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), (35,'civicrm_membership',7,38,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), (36,'civicrm_membership',9,40,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (37,'civicrm_membership',13,44,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (38,'civicrm_membership',15,46,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (39,'civicrm_membership',17,48,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (40,'civicrm_membership',19,50,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (41,'civicrm_membership',20,51,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (42,'civicrm_membership',21,52,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (43,'civicrm_membership',23,54,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (44,'civicrm_membership',27,58,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (45,'civicrm_membership',29,60,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (46,'civicrm_membership',30,61,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), - (47,'civicrm_membership',2,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (48,'civicrm_membership',4,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (49,'civicrm_membership',6,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (50,'civicrm_membership',8,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (51,'civicrm_membership',10,41,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (52,'civicrm_membership',12,43,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (53,'civicrm_membership',14,45,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (54,'civicrm_membership',16,47,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (55,'civicrm_membership',18,49,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (56,'civicrm_membership',24,55,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), - (57,'civicrm_membership',25,56,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (37,'civicrm_membership',10,41,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (38,'civicrm_membership',13,44,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (39,'civicrm_membership',15,46,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (40,'civicrm_membership',17,48,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (41,'civicrm_membership',19,50,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (42,'civicrm_membership',20,51,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (43,'civicrm_membership',21,52,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (44,'civicrm_membership',23,54,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (45,'civicrm_membership',25,56,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (46,'civicrm_membership',27,58,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (47,'civicrm_membership',29,60,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (48,'civicrm_membership',30,61,4,'General',1.00,100.00,100.00,NULL,7,2,0.00,NULL,NULL), + (49,'civicrm_membership',2,33,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (50,'civicrm_membership',4,35,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (51,'civicrm_membership',6,37,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (52,'civicrm_membership',8,39,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (53,'civicrm_membership',12,43,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (54,'civicrm_membership',14,45,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (55,'civicrm_membership',16,47,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (56,'civicrm_membership',18,49,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), + (57,'civicrm_membership',24,55,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (58,'civicrm_membership',26,57,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (59,'civicrm_membership',28,59,4,'Student',1.00,50.00,50.00,NULL,8,2,0.00,NULL,NULL), (60,'civicrm_membership',11,42,4,'Lifetime',1.00,1200.00,1200.00,NULL,9,2,0.00,NULL,NULL), @@ -4211,9 +4203,9 @@ 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,184,204,149,NULL,NULL,NULL,NULL,NULL), - (2,185,205,150,NULL,NULL,NULL,NULL,NULL), - (3,186,206,151,NULL,NULL,NULL,NULL,NULL); + (1,182,182,149,NULL,NULL,NULL,NULL,NULL), + (2,183,183,150,NULL,NULL,NULL,NULL,NULL), + (3,184,184,151,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_loc_block` ENABLE KEYS */; UNLOCK TABLES; @@ -4239,7 +4231,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_log` WRITE; /*!40000 ALTER TABLE `civicrm_log` DISABLE KEYS */; INSERT INTO `civicrm_log` (`id`, `entity_table`, `entity_id`, `data`, `modified_id`, `modified_date`) VALUES - (1,'civicrm_contact',202,'civicrm_contact,202',202,'2022-04-14 13:30:16'); + (1,'civicrm_contact',202,'civicrm_contact,202',202,'2022-05-04 18:47:24'); /*!40000 ALTER TABLE `civicrm_log` ENABLE KEYS */; UNLOCK TABLES; @@ -4655,36 +4647,36 @@ 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,53,1,'2022-04-14','2022-04-14','2024-04-13','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (2,80,2,'2022-04-13','2022-04-13','2023-04-12','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (3,30,1,'2022-04-12','2022-04-12','2024-04-11','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (4,185,2,'2022-04-11','2022-04-11','2023-04-10','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (5,36,1,'2020-03-13','2020-03-13','2022-03-12','Payment',3,0,NULL,NULL,NULL,0,0,NULL,NULL), - (6,58,2,'2022-04-09','2022-04-09','2023-04-08','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (7,166,1,'2022-04-08','2022-04-08','2024-04-07','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (8,61,2,'2022-04-07','2022-04-07','2023-04-06','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (9,134,1,'2022-04-06','2022-04-06','2024-04-05','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (10,139,2,'2021-04-05','2021-04-05','2022-04-04','Check',4,0,NULL,NULL,NULL,0,0,NULL,NULL), - (11,122,3,'2022-04-04','2022-04-04',NULL,'Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (12,171,2,'2022-04-03','2022-04-03','2023-04-02','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (13,23,1,'2022-04-02','2022-04-02','2024-04-01','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (14,68,2,'2022-04-01','2022-04-01','2023-03-31','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (15,67,1,'2019-12-24','2019-12-24','2021-12-23','Check',3,0,NULL,NULL,NULL,0,0,NULL,NULL), - (16,22,2,'2022-03-30','2022-03-30','2023-03-29','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (17,199,1,'2022-03-29','2022-03-29','2024-03-28','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (18,110,2,'2022-03-28','2022-03-28','2023-03-27','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (19,106,1,'2022-03-27','2022-03-27','2024-03-26','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (20,102,1,'2019-11-14','2019-11-14','2021-11-13','Check',3,0,NULL,NULL,NULL,0,0,NULL,NULL), - (21,18,1,'2022-03-25','2022-03-25','2024-03-24','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (22,142,3,'2022-03-24','2022-03-24',NULL,'Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (23,34,1,'2022-03-23','2022-03-23','2024-03-22','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (24,113,2,'2022-03-22','2022-03-22','2023-03-21','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (25,137,2,'2021-03-21','2021-03-21','2022-03-20','Payment',4,0,NULL,NULL,NULL,0,0,NULL,NULL), - (26,2,2,'2022-03-20','2022-03-20','2023-03-19','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (27,56,1,'2022-03-19','2022-03-19','2024-03-18','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (28,89,2,'2022-03-18','2022-03-18','2023-03-17','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (29,177,1,'2022-03-17','2022-03-17','2024-03-16','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), - (30,197,1,'2019-08-26','2019-08-26','2021-08-25','Payment',3,0,NULL,NULL,NULL,0,0,NULL,NULL); + (1,100,1,'2022-05-04','2022-05-04','2024-05-03','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (2,168,2,'2022-05-03','2022-05-03','2023-05-02','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (3,135,1,'2022-05-02','2022-05-02','2024-05-01','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (4,182,2,'2022-05-01','2022-05-01','2023-04-30','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (5,2,1,'2020-04-02','2020-04-02','2022-04-01','Payment',3,0,NULL,NULL,NULL,0,0,NULL,NULL), + (6,35,2,'2022-04-29','2022-04-29','2023-04-28','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (7,61,1,'2022-04-28','2022-04-28','2024-04-27','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (8,37,2,'2022-04-27','2022-04-27','2023-04-26','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (9,111,1,'2022-04-26','2022-04-26','2024-04-25','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (10,170,1,'2020-02-22','2020-02-22','2022-02-21','Payment',3,0,NULL,NULL,NULL,0,0,NULL,NULL), + (11,117,3,'2022-04-24','2022-04-24',NULL,'Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (12,82,2,'2022-04-23','2022-04-23','2023-04-22','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (13,191,1,'2022-04-22','2022-04-22','2024-04-21','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (14,54,2,'2022-04-21','2022-04-21','2023-04-20','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (15,192,1,'2020-01-13','2020-01-13','2022-01-12','Donation',3,0,NULL,NULL,NULL,0,0,NULL,NULL), + (16,115,2,'2022-04-19','2022-04-19','2023-04-18','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (17,60,1,'2022-04-18','2022-04-18','2024-04-17','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (18,46,2,'2022-04-17','2022-04-17','2023-04-16','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (19,189,1,'2022-04-16','2022-04-16','2024-04-15','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (20,155,1,'2019-12-04','2019-12-04','2021-12-03','Payment',3,0,NULL,NULL,NULL,0,0,NULL,NULL), + (21,86,1,'2022-04-14','2022-04-14','2024-04-13','Payment',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (22,15,3,'2022-04-13','2022-04-13',NULL,'Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (23,178,1,'2022-04-12','2022-04-12','2024-04-11','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (24,67,2,'2022-04-11','2022-04-11','2023-04-10','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (25,142,1,'2019-10-25','2019-10-25','2021-10-24','Check',3,0,NULL,NULL,NULL,0,0,NULL,NULL), + (26,39,2,'2022-04-09','2022-04-09','2023-04-08','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (27,22,1,'2022-04-08','2022-04-08','2024-04-07','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (28,140,2,'2022-04-07','2022-04-07','2023-04-06','Donation',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (29,25,1,'2022-04-06','2022-04-06','2024-04-05','Check',1,0,NULL,NULL,NULL,0,0,NULL,NULL), + (30,57,1,'2019-09-15','2019-09-15','2021-09-14','Donation',3,0,NULL,NULL,NULL,0,0,NULL,NULL); /*!40000 ALTER TABLE `civicrm_membership` ENABLE KEYS */; UNLOCK TABLES; @@ -4706,36 +4698,36 @@ 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,26,1,'2022-03-20','2023-03-19',2,'2022-04-14',2,NULL), - (2,21,1,'2022-03-25','2024-03-24',18,'2022-04-14',1,NULL), - (3,16,1,'2022-03-30','2023-03-29',22,'2022-04-14',2,NULL), - (4,13,1,'2022-04-02','2024-04-01',23,'2022-04-14',1,NULL), - (5,3,1,'2022-04-12','2024-04-11',30,'2022-04-14',1,NULL), - (6,23,1,'2022-03-23','2024-03-22',34,'2022-04-14',1,NULL), - (7,5,3,'2020-03-13','2022-03-12',36,'2022-04-14',1,NULL), - (8,1,1,'2022-04-14','2024-04-13',53,'2022-04-14',1,NULL), - (9,27,1,'2022-03-19','2024-03-18',56,'2022-04-14',1,NULL), - (10,6,1,'2022-04-09','2023-04-08',58,'2022-04-14',2,NULL), - (11,8,1,'2022-04-07','2023-04-06',61,'2022-04-14',2,NULL), - (12,15,3,'2019-12-24','2021-12-23',67,'2022-04-14',1,NULL), - (13,14,1,'2022-04-01','2023-03-31',68,'2022-04-14',2,NULL), - (14,2,1,'2022-04-13','2023-04-12',80,'2022-04-14',2,NULL), - (15,28,1,'2022-03-18','2023-03-17',89,'2022-04-14',2,NULL), - (16,20,3,'2019-11-14','2021-11-13',102,'2022-04-14',1,NULL), - (17,19,1,'2022-03-27','2024-03-26',106,'2022-04-14',1,NULL), - (18,18,1,'2022-03-28','2023-03-27',110,'2022-04-14',2,NULL), - (19,24,1,'2022-03-22','2023-03-21',113,'2022-04-14',2,NULL), - (20,11,1,'2022-04-04',NULL,122,'2022-04-14',3,NULL), - (21,9,1,'2022-04-06','2024-04-05',134,'2022-04-14',1,NULL), - (22,25,4,'2021-03-21','2022-03-20',137,'2022-04-14',2,NULL), - (23,10,4,'2021-04-05','2022-04-04',139,'2022-04-14',2,NULL), - (24,22,1,'2022-03-24',NULL,142,'2022-04-14',3,NULL), - (25,7,1,'2022-04-08','2024-04-07',166,'2022-04-14',1,NULL), - (26,12,1,'2022-04-03','2023-04-02',171,'2022-04-14',2,NULL), - (27,29,1,'2022-03-17','2024-03-16',177,'2022-04-14',1,NULL), - (28,4,1,'2022-04-11','2023-04-10',185,'2022-04-14',2,NULL), - (29,30,3,'2019-08-26','2021-08-25',197,'2022-04-14',1,NULL), - (30,17,1,'2022-03-29','2024-03-28',199,'2022-04-14',1,NULL); + (1,5,3,'2020-04-02','2022-04-01',2,'2022-05-04',1,NULL), + (2,22,1,'2022-04-13',NULL,15,'2022-05-04',3,NULL), + (3,27,1,'2022-04-08','2024-04-07',22,'2022-05-04',1,NULL), + (4,29,1,'2022-04-06','2024-04-05',25,'2022-05-04',1,NULL), + (5,6,1,'2022-04-29','2023-04-28',35,'2022-05-04',2,NULL), + (6,8,1,'2022-04-27','2023-04-26',37,'2022-05-04',2,NULL), + (7,26,1,'2022-04-09','2023-04-08',39,'2022-05-04',2,NULL), + (8,18,1,'2022-04-17','2023-04-16',46,'2022-05-04',2,NULL), + (9,14,1,'2022-04-21','2023-04-20',54,'2022-05-04',2,NULL), + (10,30,3,'2019-09-15','2021-09-14',57,'2022-05-04',1,NULL), + (11,17,1,'2022-04-18','2024-04-17',60,'2022-05-04',1,NULL), + (12,7,1,'2022-04-28','2024-04-27',61,'2022-05-04',1,NULL), + (13,24,1,'2022-04-11','2023-04-10',67,'2022-05-04',2,NULL), + (14,12,1,'2022-04-23','2023-04-22',82,'2022-05-04',2,NULL), + (15,21,1,'2022-04-14','2024-04-13',86,'2022-05-04',1,NULL), + (16,1,1,'2022-05-04','2024-05-03',100,'2022-05-04',1,NULL), + (17,9,1,'2022-04-26','2024-04-25',111,'2022-05-04',1,NULL), + (18,16,1,'2022-04-19','2023-04-18',115,'2022-05-04',2,NULL), + (19,11,1,'2022-04-24',NULL,117,'2022-05-04',3,NULL), + (20,3,1,'2022-05-02','2024-05-01',135,'2022-05-04',1,NULL), + (21,28,1,'2022-04-07','2023-04-06',140,'2022-05-04',2,NULL), + (22,25,3,'2019-10-25','2021-10-24',142,'2022-05-04',1,NULL), + (23,20,3,'2019-12-04','2021-12-03',155,'2022-05-04',1,NULL), + (24,2,1,'2022-05-03','2023-05-02',168,'2022-05-04',2,NULL), + (25,10,3,'2020-02-22','2022-02-21',170,'2022-05-04',1,NULL), + (26,23,1,'2022-04-12','2024-04-11',178,'2022-05-04',1,NULL), + (27,4,1,'2022-05-01','2023-04-30',182,'2022-05-04',2,NULL), + (28,19,1,'2022-04-16','2024-04-15',189,'2022-05-04',1,NULL), + (29,13,1,'2022-04-22','2024-04-21',191,'2022-05-04',1,NULL), + (30,15,3,'2020-01-13','2022-01-12',192,'2022-05-04',1,NULL); /*!40000 ALTER TABLE `civicrm_membership_log` ENABLE KEYS */; UNLOCK TABLES; @@ -4816,295 +4808,295 @@ UNLOCK TABLES; LOCK TABLES `civicrm_menu` WRITE; /*!40000 ALTER TABLE `civicrm_menu` DISABLE KEYS */; INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title`, `access_callback`, `access_arguments`, `page_callback`, `page_arguments`, `breadcrumb`, `return_url`, `return_url_args`, `component_id`, `is_active`, `is_public`, `is_exposed`, `is_ssl`, `weight`, `type`, `page_type`, `skipBreadcrumb`, `module_data`) VALUES - (1,1,'civicrm/profile',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), - (2,1,'civicrm/profile/create',NULL,'CiviCRM Profile Create','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Profile_Page_Router\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), - (3,1,'civicrm/profile/view',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Profile_Page_View\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (4,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (5,1,'civicrm/api4',NULL,'CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Api4_Page_Api4Explorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (6,1,'civicrm/activity','action=add&context=standalone','New Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (7,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (8,1,'civicrm/ajax/activity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:15:\"getCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (9,1,'civicrm/ajax/globalrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseGlobalRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (10,1,'civicrm/ajax/clientrelationships',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:26:\"getCaseClientRelationships\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (11,1,'civicrm/ajax/caseroles',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:12:\"getCaseRoles\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (12,1,'civicrm/ajax/contactactivity',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:18:\"getContactActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (13,1,'civicrm/ajax/activity/convert',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:22:\"CRM_Activity_Page_AJAX\";i:1;s:21:\"convertToCaseActivity\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,3,0,'a:0:{}'), - (14,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (15,1,'civicrm/pcp',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Form_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (16,1,'civicrm/pcp/campaign',NULL,'Setup a Personal Campaign Page - Account Information','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:25:\"make online contributions\";}i:1;s:3:\"and\";}','s:22:\"CRM_PCP_Controller_PCP\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,0,1,0,0,'a:0:{}'), - (17,1,'civicrm/pcp/info',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_PCP_Page_PCPInfo\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (18,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,362,1,0,0,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), - (19,1,'civicrm/upgrade',NULL,'Upgrade CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Upgrade_Page_Upgrade\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (20,1,'civicrm/export',NULL,'Download Errors','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (21,1,'civicrm/export/contact',NULL,'Export Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Export_BAO_Export\";i:1;s:6:\"invoke\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,0,1,0,0,'a:0:{}'), - (22,1,'civicrm/export/standalone',NULL,'Export','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Export_Controller_Standalone\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Download Errors\";s:3:\"url\";s:23:\"/civicrm/export?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (23,1,'civicrm/admin/options/acl_role',NULL,'ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (24,1,'civicrm/acl',NULL,'Manage ACLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_ACL_Page_ACL\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (25,1,'civicrm/acl/entityrole',NULL,'Assign Users to ACL Roles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_ACL_Page_EntityRole\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (26,1,'civicrm/acl/basic',NULL,'ACL','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_ACL_Page_ACLBasic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"Manage ACLs\";s:3:\"url\";s:20:\"/civicrm/acl?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (27,1,'civicrm/file',NULL,'Browse Uploaded files','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access uploaded files\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_Page_File\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (28,1,'civicrm/file/delete',NULL,'Delete File','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:17:\"CRM_Core_BAO_File\";i:1;s:16:\"deleteAttachment\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:21:\"Browse Uploaded files\";s:3:\"url\";s:21:\"/civicrm/file?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (29,1,'civicrm/friend',NULL,'Tell a Friend','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:15:\"CRM_Friend_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), - (30,1,'civicrm/logout',NULL,'Log out','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:6:\"logout\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,9999,1,1,0,'a:0:{}'), - (31,1,'civicrm/i18n',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"translate CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Core_I18n_Form\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (32,1,'civicrm/ajax/attachment',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:29:\"CRM_Core_Page_AJAX_Attachment\";i:1;s:10:\"attachFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (33,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (34,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (35,1,'civicrm/ajax/apiexample',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:14:\"getExampleFile\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (36,1,'civicrm/ajax/apidoc',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:26:\"CRM_Admin_Page_APIExplorer\";i:1;s:6:\"getDoc\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (37,1,'civicrm/ajax/rest',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access AJAX API\";}i:1;s:2:\"or\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:4:\"ajax\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (38,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (39,1,'civicrm/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:12:\"loadTemplate\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (40,1,'civicrm/ajax/chart',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:38:\"CRM_Contribute_Form_ContributionCharts\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (41,1,'civicrm/asset/builder',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','a:2:{i:0;s:23:\"\\Civi\\Core\\AssetBuilder\";i:1;s:7:\"pageRun\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (42,1,'civicrm/contribute/ajax/tableview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Contribute_Page_DashBoard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:0:{}'), - (43,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,1,1,0,0,'a:0:{}'), - (44,1,'civicrm/batch',NULL,'Batch Data Entry','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Page_Batch\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (45,1,'civicrm/batch/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Batch\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (46,1,'civicrm/batch/entry',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:20:\"CRM_Batch_Form_Entry\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:16:\"Batch Data Entry\";s:3:\"url\";s:22:\"/civicrm/batch?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (47,1,'civicrm/ajax/batch',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:9:\"batchSave\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (48,1,'civicrm/ajax/batchlist',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Batch_Page_AJAX\";i:1;s:12:\"getBatchList\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (49,1,'civicrm/ajax/inline',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:18:\"CRM_Core_Page_AJAX\";i:1;s:3:\"run\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (50,1,'civicrm/dev/qunit',NULL,'QUnit','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:19:\"CRM_Core_Page_QUnit\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (51,1,'civicrm/profile-editor/schema',NULL,'ProfileEditor','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:25:\"CRM_UF_Page_ProfileEditor\";i:1;s:13:\"getSchemaJSON\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (52,1,'civicrm/a',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"\\Civi\\Angular\\Page\\Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (53,1,'civicrm/ajax/angular-modules',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:26:\"\\Civi\\Angular\\Page\\Modules\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (54,1,'civicrm/ajax/recurringentity/update-mode',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:34:\"CRM_Core_Page_AJAX_RecurringEntity\";i:1;s:10:\"updateMode\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (55,1,'civicrm/recurringentity/preview',NULL,'Confirm dates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Core_Page_RecurringEntityPreview\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (56,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (57,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (58,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (59,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (60,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (61,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (62,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (63,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (64,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (65,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (66,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (67,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (68,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,0,1,0,0,'a:0:{}'), - (69,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), - (70,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,1,0,1,0,400,1,1,0,'a:0:{}'), - (71,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,1,0,1,0,410,1,1,0,'a:0:{}'), - (72,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,1,0,1,0,420,1,1,0,'a:0:{}'), - (73,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,1,0,1,0,420,1,1,0,'a:0:{}'), - (74,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (75,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (76,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (77,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (78,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (79,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (80,1,'civicrm/admin/custom/group/edit',NULL,'Configure 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:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_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:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (81,1,'civicrm/admin/custom/group/preview',NULL,'Custom Field Preview','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 CiviCRM data\";}i:1;s:3:\"and\";}','s:23:\"CRM_Custom_Form_Preview\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{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,1,0,1,1,1,1,0,0,'a:0:{}'), - (82,1,'civicrm/admin/custom/group/delete',NULL,'Delete 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:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteGroup\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{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,1,0,1,1,1,1,0,0,'a:0:{}'), - (83,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,11,1,0,0,'a:0:{}'), - (84,1,'civicrm/admin/custom/group/field/delete',NULL,'Delete Custom Field','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 CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{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,1,0,1,1,1,1,0,0,'a:0:{}'), - (85,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), - (86,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), - (87,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), - (88,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), - (89,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (90,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,21,1,0,0,'a:0:{}'), - (91,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,22,1,0,0,'a:0:{}'), - (92,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,23,1,0,0,'a:0:{}'), - (93,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,24,1,0,0,'a:0:{}'), - (94,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,25,1,0,0,'a:0:{}'), - (95,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,0,1,0,0,'a:0:{}'), - (96,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (97,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,35,1,0,0,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (98,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (99,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,45,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (100,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (101,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,55,1,0,0,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (102,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (103,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,65,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (104,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (105,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (106,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (107,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (108,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,95,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (109,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (110,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (111,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (112,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (113,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (114,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (115,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,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (116,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,1,0,1,1,262,1,0,0,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'), - (117,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (118,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (119,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (120,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (121,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (122,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (123,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (124,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (125,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), - (126,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (127,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (128,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), - (129,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'), - (130,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), - (131,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'), - (132,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), - (133,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (134,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (135,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (136,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (137,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (138,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,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (139,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (140,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (141,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (142,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (143,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (144,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (145,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (146,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (147,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (148,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (149,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,130,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (150,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), - (151,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,1,0,1,1,420,1,0,0,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (152,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,1,0,1,1,430,1,0,0,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (153,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,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), - (154,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'), - (155,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1370,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (156,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1380,1,0,0,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), - (157,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'), - (158,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'), - (159,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,9000,1,1,0,'a:0:{}'), - (160,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (161,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,1,0,1,0,1,1,3,0,'a:0:{}'), - (162,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (163,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,1,0,1,1,380,1,0,0,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'), - (164,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,1,0,1,1,1,1,0,0,'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.\";}'), - (165,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,1,0,1,1,1,1,0,0,'a:0:{}'), - (166,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,1,0,1,1,1,1,0,0,'a:0:{}'), - (167,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (168,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (169,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,1,0,1,1,500,1,0,0,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (170,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,1,0,1,0,610,1,1,0,'a:0:{}'), - (171,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (172,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,399,1,0,0,'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\";}'), - (173,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (174,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,1,0,1,0,0,1,0,0,'a:0:{}'), - (175,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,1,0,1,0,0,1,1,0,'a:0:{}'), - (176,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,1,0,1,0,10,1,1,0,'a:0:{}'), - (177,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (178,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (179,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (180,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,1,0,1,0,12,1,1,0,'a:0:{}'), - (181,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,1,0,1,0,14,1,1,0,'a:0:{}'), - (182,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:3:{i:0;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\";}i:2;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:38:\"/civicrm/contact/search/custom?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,16,1,1,0,'a:0:{}'), - (183,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (184,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (185,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (186,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (187,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (188,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (189,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (190,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (191,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (192,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (193,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (194,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (195,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (196,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (197,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (198,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (199,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (200,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (201,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (202,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (203,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (204,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (205,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (206,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (207,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (208,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,1,1,1,0,0,1,0,0,'a:0:{}'), - (209,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (210,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (211,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (212,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,1,0,1,0,1,1,3,0,'a:0:{}'), - (213,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (214,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (215,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,1,0,1,0,1,1,3,0,'a:0:{}'), - (216,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (217,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (218,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (219,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (220,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (221,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (222,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (223,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (224,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (225,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (226,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (227,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,1,0,1,0,105,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), - (228,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (229,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (230,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (231,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,1,0,1,0,110,1,0,0,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'), - (232,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (233,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (234,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (235,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (236,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (237,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (238,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (239,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (240,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (241,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,1,0,1,0,30,1,1,0,'a:0:{}'), - (242,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,1,0,1,0,1,1,0,0,'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\";}'), - (243,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (244,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (245,1,'civicrm/tag',NULL,'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: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,1,0,1,0,25,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), - (246,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:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (247,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:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (248,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (249,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (250,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,1,0,1,1,540,1,1,0,'a:0:{}'), - (251,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (252,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,1,1,1,0,0,1,0,0,'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,1,0,1,0,800,1,1,0,'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,1,0,1,0,1,1,0,0,'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,1,1,1,0,1,1,0,0,'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,1,1,1,1,1,1,0,0,'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,1,1,1,1,1,1,0,0,'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\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), - (259,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), - (260,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,1,1,1,0,0,1,0,0,'a:0:{}'), - (261,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,1,0,1,1,370,1,0,0,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (262,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,1,0,1,1,375,1,0,0,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (263,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,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (264,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,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (265,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,1,0,1,1,395,1,0,0,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (266,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,398,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (267,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,415,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), - (268,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,1,0,1,0,810,1,1,0,'a:0:{}'), - (269,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,1,0,1,1,820,1,1,0,'a:0:{}'), - (270,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (271,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,1,0,1,1,910,1,0,0,'a:0:{}'), - (272,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,1,0,1,1,930,1,0,0,'a:0:{}'), - (273,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,1,0,1,1,920,1,0,0,'a:0:{}'), - (274,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,1,0,1,1,930,1,0,0,'a:0:{}'), - (275,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,1,0,1,1,940,1,0,0,'a:0:{}'), - (276,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,1,0,1,1,950,1,0,0,'a:0:{}'), - (277,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,1,0,1,1,960,1,0,0,'a:0:{}'), - (278,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,1,0,1,1,950,1,0,0,'a:0:{}'), - (279,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,1,0,1,0,830,1,0,0,'a:0:{}'), - (280,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,1,0,1,0,840,1,1,0,'a:0:{}'), - (281,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,1,0,1,0,850,1,1,0,'a:0:{}'), - (282,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,1,1,1,0,880,1,1,0,'a:0:{}'), - (283,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,1,1,1,0,890,1,1,0,'a:0:{}'), - (284,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,4,1,0,0,'a:0:{}'), - (285,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (286,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (287,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (288,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,450,1,0,0,'a:0:{}'), - (289,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,1,1,1,0,0,1,0,0,'a:0:{}'), + (1,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,1,0,1,0,0,1,0,0,'a:0:{}'), + (2,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,1,0,1,0,0,1,1,0,'a:0:{}'), + (3,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,1,0,1,0,10,1,1,0,'a:0:{}'), + (4,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (5,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (6,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (7,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,1,0,1,0,12,1,1,0,'a:0:{}'), + (8,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,1,0,1,0,14,1,1,0,'a:0:{}'), + (9,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:3:{i:0;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\";}i:2;a:2:{s:5:\"title\";s:13:\"Find Contacts\";s:3:\"url\";s:38:\"/civicrm/contact/search/custom?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,16,1,1,0,'a:0:{}'), + (10,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (11,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (12,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (13,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (14,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (15,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (16,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (17,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (18,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (19,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (20,1,'civicrm/contact/view/delete',NULL,'Delete Contact','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:28:\"CRM_Contact_Form_Task_Delete\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (21,1,'civicrm/contact/view/activity','show=1,cid=%%cid%%','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:21:\"CRM_Activity_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (22,1,'civicrm/activity/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Activity_Form_Activity\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (23,1,'civicrm/activity/email/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Contact_Form_Task_Email\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (24,1,'civicrm/activity/pdf/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_PDF\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (25,1,'civicrm/contact/view/rel','cid=%%cid%%','Relationships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_Relationship\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (26,1,'civicrm/contact/view/group','cid=%%cid%%','Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:34:\"CRM_Contact_Page_View_GroupContact\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (27,1,'civicrm/contact/view/smartgroup','cid=%%cid%%','Smart Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:39:\"CRM_Contact_Page_View_ContactSmartGroup\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (28,1,'civicrm/contact/view/note','cid=%%cid%%','Notes','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:26:\"CRM_Contact_Page_View_Note\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (29,1,'civicrm/contact/view/tag','cid=%%cid%%','Tags','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Tag\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (30,1,'civicrm/contact/view/cd',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:32:\"CRM_Contact_Page_View_CustomData\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (31,1,'civicrm/contact/view/cd/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Form_CustomData\";','s:13:\"addSequence=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (32,1,'civicrm/contact/view/vcard',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Vcard\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (33,1,'civicrm/contact/view/print',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:27:\"CRM_Contact_Page_View_Print\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (34,1,'civicrm/contact/view/log',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:25:\"CRM_Contact_Page_View_Log\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (35,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,1,1,1,0,0,1,0,0,'a:0:{}'), + (36,1,'civicrm/dashlet/activity',NULL,'Activity Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_Activity\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (37,1,'civicrm/dashlet/blog',NULL,'CiviCRM Blog','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Dashlet_Page_Blog\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (38,1,'civicrm/dashlet/getting-started',NULL,'CiviCRM Resources','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Dashlet_Page_GettingStarted\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (39,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,1,0,1,0,1,1,3,0,'a:0:{}'), + (40,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (41,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (42,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,1,0,1,0,1,1,3,0,'a:0:{}'), + (43,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (44,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (45,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (46,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (47,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (48,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (49,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (50,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (51,1,'civicrm/dashlet/myCases',NULL,'Case Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:24:\"CRM_Dashlet_Page_MyCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (52,1,'civicrm/dashlet/allCases',NULL,'All Cases Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:31:\"access all cases and activities\";}i:1;s:3:\"and\";}','s:25:\"CRM_Dashlet_Page_AllCases\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (53,1,'civicrm/dashlet/casedashboard',NULL,'Case Dashboard Dashlet','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Dashlet_Page_CaseDashboard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (54,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,1,0,1,0,105,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (55,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (56,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (57,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (58,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,1,0,1,0,110,1,0,0,'a:1:{s:10:\"adminGroup\";s:6:\"Manage\";}'), + (59,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (60,1,'civicrm/contact/view/useradd','cid=%%cid%%','Add User','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:29:\"CRM_Contact_Page_View_Useradd\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (61,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (62,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (63,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (64,1,'civicrm/activity/sms/add','action=add','Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:8:\"send SMS\";}i:1;s:3:\"and\";}','s:25:\"CRM_Contact_Form_Task_SMS\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (65,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (66,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (67,1,'civicrm/activity/view',NULL,'View Activity','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Form_ActivityView\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (68,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (69,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (70,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (71,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (72,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (73,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,1,0,1,0,1,1,3,0,'a:0:{}'), + (74,1,'civicrm/activity/search',NULL,'Find Activities','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Activity_Controller_Search\";','s:14:\"attachUpload=1\";','a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:12:\"New Activity\";s:3:\"url\";s:63:\"/civicrm/activity?reset=1&action=add&context=standalone\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (75,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (76,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (77,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,1,0,1,0,0,1,0,0,'a:0:{}'), + (78,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (79,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,1,0,1,1,1,1,0,0,'a:0:{}'), + (80,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (81,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (82,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (83,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (84,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (85,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (86,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,1,0,1,0,9999,1,1,0,'a:0:{}'), + (87,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (88,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (89,1,'civicrm/api',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Core_Page_Redirect\";','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (90,1,'civicrm/api3',NULL,'CiviCRM API v3','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_APIExplorer\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (91,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (92,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (93,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (94,1,'civicrm/api/json',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:14:\"CRM_Utils_REST\";i:1;s:8:\"ajaxJson\";}','s:16:\"url=civicrm/api3\";','a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (95,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (96,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (97,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (98,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (99,1,'civicrm/payment/ipn',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Core_Payment\";i:1;s:9:\"handleIPN\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,1,1,0,0,'a:0:{}'), + (100,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (101,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (102,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (103,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (104,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (105,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (106,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (107,1,'civicrm/dev/fake-error',NULL,'Fake Error','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:23:\"CRM_Core_Page_FakeError\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (108,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (109,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (110,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (111,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (112,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (113,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (114,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (115,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (116,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (117,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (118,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (119,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (120,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (121,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (122,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (123,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (124,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (125,1,'civicrm/payment/form',NULL,NULL,'s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Financial_Form_Payment\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,1,1,0,0,1,0,0,'a:0:{}'), + (126,1,'civicrm/payment/edit',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Financial_Form_PaymentEdit\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:11:\"New Payment\";s:3:\"url\";s:39:\"/civicrm/payment?reset=1&action=add\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), + (127,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,1,0,1,0,400,1,1,0,'a:0:{}'), + (128,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,1,0,1,0,410,1,1,0,'a:0:{}'), + (129,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,1,0,1,0,420,1,1,0,'a:0:{}'), + (130,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,1,0,1,0,420,1,1,0,'a:0:{}'), + (131,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (132,1,'civicrm/import/datasource',NULL,'Import','a:2:{i:0;s:19:\"CRM_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_Import_Form_DataSourceConfig\";',NULL,'a:2:{i:0;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,1,0,1,0,450,1,1,0,'a:0:{}'), + (133,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (134,1,'civicrm/tag',NULL,'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: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,1,0,1,0,25,1,0,0,'a:2:{s:4:\"desc\";s:158:\"Tags are useful for segmenting the contacts in your database into categories (e.g. Staff Member, Donor, Volunteer, etc.). Create and edit available tags here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (135,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:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (136,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:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (137,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (138,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (139,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (140,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (141,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (142,1,'civicrm/ajax/api4',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Api4_Permission\";i:1;s:5:\"check\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:18:\"CRM_Api4_Page_AJAX\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (143,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (144,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (145,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,1,1,1,0,0,1,0,0,'a:0:{}'), + (146,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (147,1,'civicrm/admin/pcp','context=contribute','Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:16:\"CRM_PCP_Page_PCP\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,362,1,0,0,'a:2:{s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:10:\"adminGroup\";s:14:\"CiviContribute\";}'), + (148,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (149,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (150,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,1,0,1,0,30,1,1,0,'a:0:{}'), + (151,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,1,0,1,0,1,1,0,0,'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\";}'), + (152,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (153,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (154,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,1,1,1,0,0,1,0,0,'a:0:{}'), + (155,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,1,1,1,0,0,1,0,0,'a:0:{}'), + (156,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (157,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (158,1,'civicrm/admin/custom/group/edit',NULL,'Configure 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:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:21:\"CRM_Custom_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:11:\"Custom Data\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (159,1,'civicrm/admin/custom/group/preview',NULL,'Custom Field Preview','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 CiviCRM data\";}i:1;s:3:\"and\";}','s:23:\"CRM_Custom_Form_Preview\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{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,1,0,1,1,1,1,0,0,'a:0:{}'), + (160,1,'civicrm/admin/custom/group/delete',NULL,'Delete 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:23:\"administer CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteGroup\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{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,1,0,1,1,1,1,0,0,'a:0:{}'), + (161,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,11,1,0,0,'a:0:{}'), + (162,1,'civicrm/admin/custom/group/field/delete',NULL,'Delete Custom Field','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 CiviCRM data\";}i:1;s:3:\"and\";}','s:27:\"CRM_Custom_Form_DeleteField\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{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,1,0,1,1,1,1,0,0,'a:0:{}'), + (163,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), + (164,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), + (165,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), + (166,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:1:{i:0;s:23:\"administer CiviCRM data\";}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,1,0,1,1,1,1,0,0,'a:0:{}'), + (167,1,'civicrm/admin/uf/group',NULL,'Profiles','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Group\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (168,1,'civicrm/admin/uf/group/field',NULL,'CiviCRM Profile Fields','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Page_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,21,1,0,0,'a:0:{}'), + (169,1,'civicrm/admin/uf/group/field/add',NULL,'Add Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,22,1,0,0,'a:0:{}'), + (170,1,'civicrm/admin/uf/group/field/update',NULL,'Edit Field','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Field\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,23,1,0,0,'a:0:{}'), + (171,1,'civicrm/admin/uf/group/add',NULL,'New CiviCRM Profile','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,24,1,0,0,'a:0:{}'), + (172,1,'civicrm/admin/uf/group/update',NULL,'Profile Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:17:\"CRM_UF_Form_Group\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,25,1,0,0,'a:0:{}'), + (173,1,'civicrm/admin/uf/group/setting',NULL,'AdditionalInfo Form','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_UF_Form_AdvanceSetting\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,0,1,0,0,'a:0:{}'), + (174,1,'civicrm/admin/options/activity_type',NULL,'Activity Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (175,1,'civicrm/admin/reltype',NULL,'Relationship Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Page_RelationshipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,35,1,0,0,'a:2:{s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (176,1,'civicrm/admin/options/subtype',NULL,'Contact Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Page_ContactType\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (177,1,'civicrm/admin/options/gender',NULL,'Gender Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,45,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (178,1,'civicrm/admin/options/individual_prefix',NULL,'Individual Prefixes (Ms, Mr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (179,1,'civicrm/admin/options/individual_suffix',NULL,'Individual Suffixes (Jr, Sr...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,55,1,0,0,'a:2:{s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (180,1,'civicrm/admin/locationType',NULL,'Location Types (Home, Work...)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LocationType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (181,1,'civicrm/admin/options/website_type',NULL,'Website Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,65,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (182,1,'civicrm/admin/options/instant_messenger_service',NULL,'Instant Messenger Services','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (183,1,'civicrm/admin/options/mobile_provider',NULL,'Mobile Phone Providers','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (184,1,'civicrm/admin/options/phone_type',NULL,'Phone Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (185,1,'civicrm/admin/setting/preferences/display',NULL,'Display Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Display\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (186,1,'civicrm/admin/setting/search',NULL,'Search Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Form_Setting_Search\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,95,1,0,0,'a:1:{s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (187,1,'civicrm/admin/setting/preferences/date',NULL,'View Date Preferences','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Page_PreferencesDate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (188,1,'civicrm/admin/menu',NULL,'Navigation Menu','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Navigation\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (189,1,'civicrm/admin/options/wordreplacements',NULL,'Word Replacements','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:31:\"CRM_Admin_Form_WordReplacements\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:18:\"Word Replacements.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (190,1,'civicrm/admin/options/custom_search',NULL,'Manage Custom Searches','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:10:\"adminGroup\";s:26:\"Customize Data and Screens\";}'), + (191,1,'civicrm/admin/domain','action=update','Organization Address and Contact Info','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_Contact_Form_Domain\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (192,1,'civicrm/admin/options/from_email_address',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (193,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,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (194,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,1,0,1,1,262,1,0,0,'a:1:{s:4:\"desc\";s:26:\"Add/Edit Message Templates\";}'), + (195,1,'civicrm/admin/scheduleReminders',NULL,'Schedule Reminders','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCRM data\";i:1;s:15:\"edit all events\";}i:1;s:2:\"or\";}','s:32:\"CRM_Admin_Page_ScheduleReminders\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:19:\"Schedule Reminders.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (196,1,'civicrm/admin/weight',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_Weight\";i:1;s:8:\"fixOrder\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (197,1,'civicrm/admin/options/preferred_communication_method',NULL,'Preferred Communication Methods','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (198,1,'civicrm/admin/labelFormats',NULL,'Label Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Page_LabelFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:2:{s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (199,1,'civicrm/admin/pdfFormats',NULL,'Print Page (PDF) Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_PdfFormats\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:2:{s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (200,1,'civicrm/admin/options/communication_style',NULL,'Communication Style Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,75,1,0,0,'a:2:{s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (201,1,'civicrm/admin/options/email_greeting',NULL,'Email Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (202,1,'civicrm/admin/options/postal_greeting',NULL,'Postal Greeting Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:2:{s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (203,1,'civicrm/admin/options/addressee',NULL,'Addressee Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:10:\"adminGroup\";s:14:\"Communications\";}'), + (204,1,'civicrm/admin/setting/localization',NULL,'Languages, Currency, Locations','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Form_Setting_Localization\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (205,1,'civicrm/admin/setting/preferences/address',NULL,'Address Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_Admin_Form_Preferences_Address\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (206,1,'civicrm/admin/setting/date',NULL,'Date Formats','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Date\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,30,1,0,0,'a:1:{s:10:\"adminGroup\";s:12:\"Localization\";}'), + (207,1,'civicrm/admin/options/languages',NULL,'Preferred Languages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:2:{s:4:\"desc\";s:30:\"Options for contact languages.\";s:10:\"adminGroup\";s:12:\"Localization\";}'), + (208,1,'civicrm/admin/access',NULL,'Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_Access\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (209,1,'civicrm/admin/access/wp-permissions',NULL,'WordPress Access Control','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:34:\"CRM_ACL_Form_WordPress_Permissions\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Access Control\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:1:{s:4:\"desc\";s:65:\"Grant access to CiviCRM components and other CiviCRM permissions.\";}'), + (210,1,'civicrm/admin/synchUser',NULL,'Synchronize Users to Contacts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_CMSUser\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:2:{s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:10:\"adminGroup\";s:21:\"Users and Permissions\";}'), + (211,1,'civicrm/admin/configtask',NULL,'Configuration Checklist','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:29:\"CRM_Admin_Page_ConfigTaskList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}','civicrm/admin/configtask',NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (212,1,'civicrm/admin/setting/component',NULL,'Enable CiviCRM Components','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Component\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:2:{s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (213,1,'civicrm/admin/extensions',NULL,'Manage Extensions','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Page_Extensions\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:2:{s:4:\"desc\";s:0:\"\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (214,1,'civicrm/admin/extensions/upgrade',NULL,'Database Upgrades','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Page_ExtensionsUpgrade\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:17:\"Manage Extensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (215,1,'civicrm/admin/setting/smtp',NULL,'Outbound Email Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Smtp\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,20,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (216,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,1,0,1,1,30,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (217,1,'civicrm/admin/setting/mapping',NULL,'Mapping and Geocoding','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Admin_Form_Setting_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,40,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (218,1,'civicrm/admin/setting/misc',NULL,'Misc (Undelete, PDFs, Limits, Logging, etc.)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Form_Setting_Miscellaneous\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,50,1,0,0,'a:2:{s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (219,1,'civicrm/admin/setting/path',NULL,'Directories','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Path\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,60,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (220,1,'civicrm/admin/setting/url',NULL,'Resource URLs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Admin_Form_Setting_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,70,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (221,1,'civicrm/admin/setting/updateConfigBackend',NULL,'Cleanup Caches and Update Paths','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:42:\"CRM_Admin_Form_Setting_UpdateConfigBackend\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,80,1,0,0,'a:2:{s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (222,1,'civicrm/admin/setting/uf',NULL,'CMS Database Integration','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:25:\"CRM_Admin_Form_Setting_UF\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,90,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (223,1,'civicrm/admin/options/safe_file_extension',NULL,'Safe File Extension Options','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,100,1,0,0,'a:2:{s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (224,1,'civicrm/admin/options',NULL,'Option Groups','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,105,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (225,1,'civicrm/admin/mapping',NULL,'Import/Export Mappings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Mapping\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,110,1,0,0,'a:2:{s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (226,1,'civicrm/admin/setting/debug',NULL,'Debugging','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Admin_Form_Setting_Debugging\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,120,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (227,1,'civicrm/admin/setting/preferences/multisite',NULL,'Multi Site Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,130,1,0,0,'a:1:{s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (228,1,'civicrm/admin/setting/preferences/campaign',NULL,'CiviCampaign Component Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,10,1,0,0,'a:3:{s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (229,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,1,0,1,1,420,1,0,0,'a:2:{s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (230,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,1,0,1,1,430,1,0,0,'a:2:{s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (231,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,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (232,1,'civicrm/admin/runjobs',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','a:2:{i:0;s:16:\"CRM_Utils_System\";i:1;s:20:\"executeScheduledJobs\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:36:\"URL used for running scheduled jobs.\";}'), + (233,1,'civicrm/admin/job',NULL,'Scheduled Jobs','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:18:\"CRM_Admin_Page_Job\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1370,1,0,0,'a:2:{s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (234,1,'civicrm/admin/joblog',NULL,'Scheduled Jobs Log','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:25:\"administer CiviCRM system\";}i:1;s:3:\"and\";}','s:21:\"CRM_Admin_Page_JobLog\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1380,1,0,0,'a:2:{s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:10:\"adminGroup\";s:6:\"Manage\";}'), + (235,1,'civicrm/admin/options/grant_type',NULL,'Grant Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:10:\"adminGroup\";s:12:\"Option Lists\";}'), + (236,1,'civicrm/admin/paymentProcessorType',NULL,'Payment Processor Type','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:35:\"CRM_Admin_Page_PaymentProcessorType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:1:{s:4:\"desc\";s:34:\"Payment Processor type information\";}'), + (237,1,'civicrm/admin',NULL,'Administer CiviCRM','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:20:\"CRM_Admin_Page_Admin\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,9000,1,1,0,'a:0:{}'), + (238,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (239,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,1,0,1,0,1,1,3,0,'a:0:{}'), + (240,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (241,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,1,0,1,1,380,1,0,0,'a:2:{s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:10:\"adminGroup\";s:9:\"Customize\";}'), + (242,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,1,0,1,1,1,1,0,0,'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.\";}'), + (243,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,1,0,1,1,1,1,0,0,'a:0:{}'), + (244,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,1,0,1,1,1,1,0,0,'a:0:{}'), + (245,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (246,1,'civicrm/ajax/recipientListing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:16:\"access CiviEvent\";i:1;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Admin_Page_AJAX\";i:1;s:16:\"recipientListing\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (247,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,1,0,1,1,500,1,0,0,'a:2:{s:4:\"desc\";s:27:\"To configure a sms provider\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (248,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,1,0,1,0,610,1,1,0,'a:0:{}'), + (249,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (250,1,'civicrm/admin/badgelayout','action=browse','Event Name Badge Layouts','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Page_Layout\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,399,1,0,0,'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\";}'), + (251,1,'civicrm/admin/badgelayout/add',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:21:\"CRM_Badge_Form_Layout\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?reset=1&action=browse\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (252,1,'civicrm/event',NULL,'CiviEvent Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,1,1,0,1,0,800,1,1,0,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (253,1,'civicrm/participant/add','action=add','Register New Participant','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:9:\"CiviEvent\";}'), + (254,1,'civicrm/event/info',NULL,'Event Information','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:24:\"CRM_Event_Page_EventInfo\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,1,1,0,0,'a:0:{}'), + (255,1,'civicrm/event/register',NULL,'Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:33:\"CRM_Event_Controller_Registration\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,1,1,1,0,0,'a:0:{}'), + (256,1,'civicrm/event/confirm',NULL,'Confirm Event Registration','s:1:\"1\";','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:46:\"CRM_Event_Form_Registration_ParticipantConfirm\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,1,1,1,0,0,'a:0:{}'), + (257,1,'civicrm/event/ical',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','a:2:{i:0;s:19:\"CRM_Event_ICalendar\";i:1;s:3:\"run\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'a:0:{}'), + (258,1,'civicrm/event/list',NULL,'Current and Upcoming Events','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"view event info\";}i:1;s:3:\"and\";}','s:19:\"CRM_Event_Page_List\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}}',NULL,NULL,1,1,1,1,0,0,1,0,0,'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,1,1,1,0,0,1,0,0,'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,1,0,1,1,370,1,0,0,'a:2:{s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (261,1,'civicrm/admin/eventTemplate',NULL,'Event Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:28:\"CRM_Admin_Page_EventTemplate\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,375,1,0,0,'a:2:{s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (262,1,'civicrm/admin/options/event_type',NULL,'Event Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,385,1,0,0,'a:2:{s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (263,1,'civicrm/admin/participant_status',NULL,'Participant Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:36:\"CRM_Admin_Page_ParticipantStatusType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (264,1,'civicrm/admin/options/participant_role',NULL,'Participant Role','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,395,1,0,0,'a:2:{s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (265,1,'civicrm/admin/options/participant_listing',NULL,'Participant Listing Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,398,1,0,0,'a:2:{s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:10:\"adminGroup\";s:9:\"CiviEvent\";}'), + (266,1,'civicrm/admin/options/conference_slot',NULL,'Conference Slot Labels','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:18:\"administer CiviCRM\";i:1;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,415,1,0,0,'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,1,0,1,0,810,1,1,0,'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,1,0,1,1,820,1,1,0,'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,1,0,1,0,1,1,0,0,'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,1,0,1,1,910,1,0,0,'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,1,0,1,1,930,1,0,0,'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,1,0,1,1,920,1,0,0,'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,1,0,1,1,930,1,0,0,'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,1,0,1,1,940,1,0,0,'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,1,0,1,1,950,1,0,0,'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,1,0,1,1,960,1,0,0,'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,1,0,1,1,950,1,0,0,'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,1,0,1,0,830,1,0,0,'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,1,0,1,0,840,1,1,0,'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,1,0,1,0,850,1,1,0,'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,1,1,1,0,880,1,1,0,'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,1,1,1,0,890,1,1,0,'a:0:{}'), + (283,1,'civicrm/contact/view/participant',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:18:\"CRM_Event_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,4,1,0,0,'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,1,0,1,0,1,1,0,0,'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,1,0,1,0,1,1,0,0,'a:0:{}'), + (286,1,'civicrm/event/participant/feeselection',NULL,'Change Registration Selections','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:16:\"access CiviEvent\";}i:1;s:3:\"and\";}','s:38:\"CRM_Event_Form_ParticipantFeeSelection\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:19:\"CiviEvent Dashboard\";s:3:\"url\";s:22:\"/civicrm/event?reset=1\";}i:2;a:2:{s:5:\"title\";s:23:\"Event Participants List\";s:3:\"url\";s:34:\"/civicrm/event/participant?reset=1\";}}',NULL,NULL,1,1,0,1,0,1,1,0,0,'a:0:{}'), + (287,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,1,0,1,1,540,1,1,0,'a:0:{}'), + (288,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (289,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,1,1,1,0,0,1,0,0,'a:0:{}'), (290,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,1,0,1,0,500,1,1,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), (291,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,1,0,1,0,1,1,1,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), (292,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:14:\"CiviContribute\";}'), @@ -5155,113 +5147,115 @@ INSERT INTO `civicrm_menu` (`id`, `domain_id`, `path`, `path_arguments`, `title` (337,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,1,0,1,0,1,1,0,0,'a:0:{}'), (338,1,'civicrm/contribute/widget',NULL,'CiviContribute','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:26:\"CRM_Contribute_Page_Widget\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,1,1,1,0,0,1,0,0,'a:0:{}'), (339,1,'civicrm/contribute/task',NULL,'Contribution Task','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"access CiviContribute\";}i:1;s:3:\"and\";}','s:30:\"CRM_Contribute_Controller_Task\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:24:\"CiviContribute Dashboard\";s:3:\"url\";s:27:\"/civicrm/contribute?reset=1\";}}',NULL,NULL,2,1,0,1,0,1,1,0,0,'a:0:{}'), - (340,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,1,0,1,0,700,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), - (341,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), - (342,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,370,1,0,0,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), - (343,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,380,1,0,0,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), - (344,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,2,1,0,0,'a:0:{}'), - (345,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,1,0,1,0,390,1,0,0,'a:0:{}'), - (346,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,1,0,1,0,710,1,1,0,'a:0:{}'), - (347,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,1,0,1,0,720,1,1,0,'a:0:{}'), - (348,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (349,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,1,0,1,1,1,1,0,0,'a:0:{}'), - (350,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,1,0,1,0,600,1,1,0,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'), - (351,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (352,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,1,0,1,1,410,1,0,0,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (353,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,415,1,0,0,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (354,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,1,0,1,1,420,1,0,0,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), - (355,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,1,0,1,0,610,1,1,0,'a:0:{}'), - (356,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,1,0,1,0,620,1,1,0,'a:0:{}'), - (357,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,1,0,1,0,620,1,1,0,'a:0:{}'), - (358,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,1,0,1,0,625,1,1,0,'a:0:{}'), - (359,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,1,0,1,0,630,1,1,0,'a:0:{}'), - (360,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,1,1,1,0,640,1,0,0,'a:0:{}'), - (361,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,1,1,1,0,645,1,0,0,'a:0:{}'), - (362,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,1,1,1,0,650,1,0,0,'a:0:{}'), - (363,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,1,1,1,0,660,1,0,0,'a:0:{}'), - (364,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,1,1,1,0,660,1,0,0,'a:0:{}'), - (365,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,1,0,1,0,670,1,0,0,'a:0:{}'), - (366,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,1,0,1,0,680,1,0,0,'a:0:{}'), - (367,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,1,1,1,0,685,1,0,0,'a:0:{}'), - (368,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,1,0,1,0,690,1,0,0,'a:0:{}'), - (369,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:47:\"/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,1,0,1,0,695,1,0,0,'a:0:{}'), - (370,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (371,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,1,1,1,0,800,1,0,0,'a:0:{}'), - (372,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,1,0,1,0,850,1,0,0,'a:0:{}'), - (373,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (374,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (375,1,'civicrm/ajax/setupMailAccount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:5:\"setup\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (376,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,1,1,1,0,1,1,0,0,'a:0:{}'), - (377,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,1,1,1,0,1,1,0,0,'a:0:{}'), - (378,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,1,0,1,0,550,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), - (379,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,1,0,1,0,560,1,1,0,'a:0:{}'), - (380,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,570,1,0,0,'a:0:{}'), - (381,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,1,0,1,0,1,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), - (382,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,1,0,1,0,580,1,0,0,'a:0:{}'), - (383,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (384,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,1,0,1,0,900,1,1,0,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), - (385,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,1,0,1,0,1,1,1,0,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), - (386,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,1,0,1,0,910,1,1,0,'a:0:{}'), - (387,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (388,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (389,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (390,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (391,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (392,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:34:\"/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), - (393,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (394,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (395,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,380,1,0,0,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (396,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,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (397,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (398,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (399,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), - (400,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (401,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (402,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,1,0,1,0,1,1,3,0,'a:0:{}'), - (403,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (404,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (405,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (406,1,'civicrm/case/email/add','action=add,task=email','Email','a:2:{i:0;s:19:\"CRM_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_Task_Email\";',NULL,'a:2:{i:0;a: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,1,0,1,0,1,1,0,0,'a:0:{}'), - (407,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,1,0,1,0,1200,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviReport\";}'), - (408,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (409,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,1,0,1,0,1220,1,1,0,'a:0:{}'), - (410,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,1,0,1,0,1241,1,1,0,'a:0:{}'), - (411,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,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:30:\"Register the Report templates.\";}'), - (412,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (413,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,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), - (414,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,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), - (415,1,'civicrm/admin/report/list',NULL,'Reports Listing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), - (416,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), - (417,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), - (418,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), - (419,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), - (420,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,1,0,1,1,1,1,0,0,'a:2:{s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), - (421,1,'civicrm/admin/options/campaign_type',NULL,'Campaign Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,2,1,0,0,'a:3:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), - (422,1,'civicrm/admin/options/campaign_status',NULL,'Campaign Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,3,1,0,0,'a:3:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), - (423,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,4,1,0,0,'a:3:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), - (424,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), - (425,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), - (426,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (427,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (428,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (429,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (430,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (431,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (432,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (433,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (434,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (435,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,1,0,1,0,1,1,0,0,'a:0:{}'), - (436,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor 4','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:33:\"CRM_Ckeditor4_Form_CKEditorConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), - (437,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (438,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (439,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (440,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,1,1,1,1,1,1,0,0,'a:0:{}'), - (441,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (442,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,1,1,1,0,1,1,0,0,'a:0:{}'), - (443,1,'civicrm/contact/search/custom',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:42:\"CRM_Legacycustomsearches_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,1,0,1,0,10,1,1,0,'a:0:{}'), - (444,1,'civicrm/admin/setting/flexmailer',NULL,'Flexmailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'), - (445,1,'civicrm/admin/setting/recaptcha',NULL,'reCAPTCHA Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:43:\"Configure anti-abuse/bot-prevention service\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), - (446,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:49:\"/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:48:\"/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:49:\"/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:49:\"/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:48:\"/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:47:\"/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:53:\"/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:30:\"/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:38:\"/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:37:\"/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:35:\"/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:43:\"/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:56:\"/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:46:\"/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:41:\"/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:37:\"/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:27:\"/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:47:\"/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:44:\"/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:13:\"{weight}.Tags\";a:6:{s:5:\"title\";s:4:\"Tags\";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:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:47:\"/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:40:\"/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:61:\"/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:35:\"/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:33:\"/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:45:\"/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:46:\"/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:40:\"/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:43:\"/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:35:\"/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:40:\"/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:32:\"/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:33:\"/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:40:\"/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:39:\"/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:38:\"/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:53:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, etc.)\";a:6:{s:5:\"title\";s:44:\"Misc (Undelete, PDFs, Limits, Logging, etc.)\";s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:2:\"id\";s:38:\"Misc_Undelete_PDFs_Limits_Logging_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:35:\"/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:34:\"/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:50:\"/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:33:\"/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:30:\"/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:36:\"/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:52:\"/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:26:\"/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:35:\"/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.reCAPTCHA Settings\";a:6:{s:5:\"title\";s:18:\"reCAPTCHA Settings\";s:4:\"desc\";s:43:\"Configure anti-abuse/bot-prevention service\";s:2:\"id\";s:17:\"reCAPTCHASettings\";s:3:\"url\";s:40:\"/civicrm/admin/setting/recaptcha?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:51:\"/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:42:\"/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:46:\"/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:47:\"/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:48:\"/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:28:\"/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:36:\"/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:41:\"/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:47:\"/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:50:\"/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:46:\"/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:6:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:27:\"/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:32:\"/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:58:\"/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:35:\"/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Flexmailer Settings\";a:6:{s:5:\"title\";s:19:\"Flexmailer Settings\";s:4:\"desc\";N;s:2:\"id\";s:18:\"FlexmailerSettings\";s:3:\"url\";s:41:\"/civicrm/admin/setting/flexmailer?reset=1\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:49:\"/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:46:\"/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:29:\"/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:36:\"/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:33:\"/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:40:\"/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:45:\"/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:42:\"/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:47:\"/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:43:\"/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:53:\"/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:34:\"/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,1,0,1,1,1,1,1,0,'a:0:{}'); + (340,1,'civicrm/admin/contribute/pcp',NULL,'Personal Campaign Pages','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:23:\"CRM_PCP_Form_Contribute\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,450,1,0,0,'a:0:{}'), + (341,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,1,1,1,0,0,1,0,0,'a:0:{}'), + (342,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,1,0,1,0,700,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), + (343,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,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:10:\"CiviMember\";}'), + (344,1,'civicrm/admin/member/membershipType',NULL,'Membership Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:30:\"CRM_Member_Page_MembershipType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,370,1,0,0,'a:2:{s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (345,1,'civicrm/admin/member/membershipStatus',NULL,'Membership Status Rules','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:32:\"CRM_Member_Page_MembershipStatus\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,380,1,0,0,'a:2:{s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:10:\"adminGroup\";s:10:\"CiviMember\";}'), + (346,1,'civicrm/contact/view/membership','force=1,cid=%%cid%%','Memberships','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:19:\"CRM_Member_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,2,1,0,0,'a:0:{}'), + (347,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,1,0,1,0,390,1,0,0,'a:0:{}'), + (348,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,1,0,1,0,710,1,1,0,'a:0:{}'), + (349,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,1,0,1,0,720,1,1,0,'a:0:{}'), + (350,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (351,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,1,0,1,1,1,1,0,0,'a:0:{}'), + (352,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,1,0,1,0,600,1,1,0,'a:1:{s:9:\"component\";s:8:\"CiviMail\";}'), + (353,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (354,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,1,0,1,1,410,1,0,0,'a:2:{s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (355,1,'civicrm/admin/options/from_email_address/civimail',NULL,'From Email Addresses','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:4:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}i:3;a:2:{s:5:\"title\";s:20:\"From Email Addresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,415,1,0,0,'a:2:{s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (356,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,1,0,1,1,420,1,0,0,'a:2:{s:4:\"desc\";s:32:\"Configure email account setting.\";s:10:\"adminGroup\";s:8:\"CiviMail\";}'), + (357,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,1,0,1,0,610,1,1,0,'a:0:{}'), + (358,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,1,0,1,0,620,1,1,0,'a:0:{}'), + (359,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,1,0,1,0,620,1,1,0,'a:0:{}'), + (360,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,1,0,1,0,625,1,1,0,'a:0:{}'), + (361,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,1,0,1,0,630,1,1,0,'a:0:{}'), + (362,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,1,1,1,0,640,1,0,0,'a:0:{}'), + (363,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,1,1,1,0,645,1,0,0,'a:0:{}'), + (364,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,1,1,1,0,650,1,0,0,'a:0:{}'), + (365,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,1,1,1,0,660,1,0,0,'a:0:{}'), + (366,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,1,1,1,0,660,1,0,0,'a:0:{}'), + (367,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,1,0,1,0,670,1,0,0,'a:0:{}'), + (368,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,1,0,1,0,680,1,0,0,'a:0:{}'), + (369,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,1,1,1,0,685,1,0,0,'a:0:{}'), + (370,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,1,0,1,0,690,1,0,0,'a:0:{}'), + (371,1,'civicrm/mailing/report/event',NULL,'Mailing Event','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','s:22:\"CRM_Mailing_Page_Event\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}i:2;a:2:{s:5:\"title\";s:14:\"Mailing Report\";s:3:\"url\";s:47:\"/civicrm/mailing/report?reset=1&mid=%%mid%%\";}}',NULL,NULL,4,1,0,1,0,695,1,0,0,'a:0:{}'), + (372,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (373,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,1,1,1,0,800,1,0,0,'a:0:{}'), + (374,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,1,0,1,0,850,1,0,0,'a:0:{}'), + (375,1,'civicrm/contact/view/mailing',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:20:\"CRM_Mailing_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (376,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (377,1,'civicrm/ajax/setupMailAccount',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"access CiviMail\";}i:1;s:3:\"and\";}','a:2:{i:0;s:21:\"CRM_Mailing_Page_AJAX\";i:1;s:5:\"setup\";}',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (378,1,'civicrm/mailing/url',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:20:\"CRM_Mailing_Page_Url\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,1,1,1,0,1,1,0,0,'a:0:{}'), + (379,1,'civicrm/mailing/open',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"*always allow*\";}i:1;s:3:\"and\";}','s:21:\"CRM_Mailing_Page_Open\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:8:\"CiviMail\";s:3:\"url\";s:24:\"/civicrm/mailing?reset=1\";}}',NULL,NULL,4,1,1,1,0,1,1,0,0,'a:0:{}'), + (380,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,1,0,1,0,550,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), + (381,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,1,0,1,0,560,1,1,0,'a:0:{}'), + (382,1,'civicrm/contact/view/pledge','force=1,cid=%%cid%%','Pledges','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviPledge\";}i:1;s:3:\"and\";}','s:19:\"CRM_Pledge_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,570,1,0,0,'a:0:{}'), + (383,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,1,0,1,0,1,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviPledge\";}'), + (384,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,1,0,1,0,580,1,0,0,'a:0:{}'), + (385,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (386,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,1,0,1,0,900,1,1,0,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), + (387,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,1,0,1,0,1,1,1,0,'a:1:{s:9:\"component\";s:8:\"CiviCase\";}'), + (388,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,1,0,1,0,910,1,1,0,'a:0:{}'), + (389,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (390,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (391,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (392,1,'civicrm/contact/view/case',NULL,'Case','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:17:\"CRM_Case_Page_Tab\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (393,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (394,1,'civicrm/contact/view/case/editClient',NULL,'Assign to Another Client','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:14:\"access CiviCRM\";i:1;s:15:\"edit my contact\";i:2;s:15:\"view my contact\";}i:1;s:2:\"or\";}','s:24:\"CRM_Case_Form_EditClient\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:15:\"Contact Summary\";s:3:\"url\";s:45:\"/civicrm/contact/view?reset=1&cid=%%cid%%\";}i:2;a:2:{s:5:\"title\";s:4:\"Case\";s:3:\"url\";s:34:\"/civicrm/contact/view/case?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (395,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (396,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (397,1,'civicrm/admin/setting/case',NULL,'CiviCase Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:27:\"CRM_Admin_Form_Setting_Case\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,380,1,0,0,'a:1:{s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (398,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,1,0,1,1,390,1,0,0,'a:2:{s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (399,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (400,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (401,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,1,0,1,1,400,1,0,0,'a:2:{s:4:\"desc\";s:26:\"List of encounter mediums.\";s:10:\"adminGroup\";s:8:\"CiviCase\";}'), + (402,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (403,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (404,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,1,0,1,0,1,1,3,0,'a:0:{}'), + (405,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (406,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (407,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,1,0,1,0,1,1,0,0,'a:0:{}'), + (408,1,'civicrm/case/email/add','action=add,task=email','Email','a:2:{i:0;s:19:\"CRM_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_Task_Email\";',NULL,'a:2:{i:0;a: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,1,0,1,0,1,1,0,0,'a:0:{}'), + (409,1,'civicrm/report',NULL,'CiviReport','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:22:\"CRM_Report_Page_Report\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,8,1,0,1,0,1200,1,1,0,'a:1:{s:9:\"component\";s:10:\"CiviReport\";}'), + (410,1,'civicrm/report/list',NULL,'CiviCRM Reports','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,1,0,1,0,1,1,0,0,'a:0:{}'), + (411,1,'civicrm/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,1,0,1,0,1220,1,1,0,'a:0:{}'), + (412,1,'civicrm/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,1,0,1,0,1241,1,1,0,'a:0:{}'), + (413,1,'civicrm/admin/report/register',NULL,'Register Report','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer Reports\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Form_Register\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:1:{s:4:\"desc\";s:30:\"Register the Report templates.\";}'), + (414,1,'civicrm/report/instance',NULL,'Report','s:1:\"1\";','a:2:{i:0;a:1:{i:0;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:24:\"CRM_Report_Page_Instance\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:10:\"CiviReport\";s:3:\"url\";s:23:\"/civicrm/report?reset=1\";}}',NULL,NULL,8,1,0,1,0,1,1,0,0,'a:0:{}'), + (415,1,'civicrm/admin/report/template/list',NULL,'Create New Report from Template','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_TemplateList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), + (416,1,'civicrm/admin/report/options/report_template',NULL,'Manage Templates','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:14:\"access CiviCRM\";i:1;s:17:\"access CiviReport\";}i:1;s:3:\"and\";}','s:23:\"CRM_Report_Page_Options\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), + (417,1,'civicrm/admin/report/list',NULL,'Reports Listing','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:28:\"CRM_Report_Page_InstanceList\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:10:\"adminGroup\";s:10:\"CiviReport\";}'), + (418,1,'civicrm/campaign',NULL,'Campaign Dashboard','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:27:\"CRM_Campaign_Page_DashBoard\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,9,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (419,1,'civicrm/campaign/add',NULL,'New Campaign','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Campaign\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (420,1,'civicrm/survey/add',NULL,'New Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (421,1,'civicrm/campaign/vote',NULL,'Conduct Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"reserve campaign contacts\";i:3;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Page_Vote\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (422,1,'civicrm/admin/campaign/surveyType',NULL,'Survey Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:23:\"administer CiviCampaign\";}i:1;s:3:\"and\";}','s:28:\"CRM_Campaign_Page_SurveyType\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (423,1,'civicrm/admin/options/campaign_type',NULL,'Campaign Types','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,2,1,0,0,'a:3:{s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (424,1,'civicrm/admin/options/campaign_status',NULL,'Campaign Status','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,3,1,0,0,'a:3:{s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (425,1,'civicrm/admin/options/engagement_index',NULL,'Engagement Index','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:25:\"administer CiviCRM system\";i:1;s:23:\"administer CiviCRM data\";i:2;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Page_Options\";',NULL,'a:3:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}i:2;a:2:{s:5:\"title\";s:13:\"Option Groups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,4,1,0,0,'a:3:{s:4:\"desc\";s:18:\"Engagement levels.\";s:10:\"adminGroup\";s:12:\"CiviCampaign\";s:9:\"component\";s:12:\"CiviCampaign\";}'), + (426,1,'civicrm/survey/search','op=interview','Record Respondents Interview','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','s:30:\"CRM_Campaign_Controller_Search\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (427,1,'civicrm/campaign/gotv',NULL,'GOTV (Track Voters)','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:4:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:25:\"release campaign contacts\";i:3;s:22:\"gotv campaign contacts\";}i:1;s:2:\"or\";}','s:22:\"CRM_Campaign_Form_Gotv\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,1,0,1,0,1,1,0,0,'a:1:{s:9:\"component\";s:12:\"CiviCampaign\";}'), + (428,1,'civicrm/petition/add',NULL,'New Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:26:\"CRM_Campaign_Form_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (429,1,'civicrm/petition/sign',NULL,'Sign Petition','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:36:\"CRM_Campaign_Form_Petition_Signature\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (430,1,'civicrm/petition/browse',NULL,'View Petition Signatures','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:14:\"access CiviCRM\";}i:1;s:3:\"and\";}','s:26:\"CRM_Campaign_Page_Petition\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (431,1,'civicrm/petition/confirm',NULL,'Email address verified','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:34:\"CRM_Campaign_Page_Petition_Confirm\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (432,1,'civicrm/petition/thankyou',NULL,'Thank You','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:21:\"sign CiviCRM Petition\";}i:1;s:3:\"and\";}','s:35:\"CRM_Campaign_Page_Petition_ThankYou\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,1,1,0,1,1,0,0,'a:0:{}'), + (433,1,'civicrm/campaign/registerInterview',NULL,NULL,'a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:3:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";i:2;s:27:\"interview campaign contacts\";}i:1;s:2:\"or\";}','a:2:{i:0;s:22:\"CRM_Campaign_Page_AJAX\";i:1;s:17:\"registerInterview\";}',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Campaign Dashboard\";s:3:\"url\";s:25:\"/civicrm/campaign?reset=1\";}}',NULL,NULL,9,1,0,1,0,1,1,0,0,'a:0:{}'), + (434,1,'civicrm/survey/configure/main',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:29:\"CRM_Campaign_Form_Survey_Main\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (435,1,'civicrm/survey/configure/questions',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:34:\"CRM_Campaign_Form_Survey_Questions\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (436,1,'civicrm/survey/configure/results',NULL,'Configure Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:32:\"CRM_Campaign_Form_Survey_Results\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (437,1,'civicrm/survey/delete',NULL,'Delete Survey','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:2:{i:0;s:23:\"administer CiviCampaign\";i:1;s:15:\"manage campaign\";}i:1;s:2:\"or\";}','s:31:\"CRM_Campaign_Form_Survey_Delete\";',NULL,'a:1:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}}',NULL,NULL,NULL,1,0,1,0,1,1,0,0,'a:0:{}'), + (438,1,'civicrm/admin/ckeditor',NULL,'Configure CKEditor 4','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:33:\"CRM_Ckeditor4_Form_CKEditorConfig\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:0:{}'), + (439,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (440,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (441,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (442,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,1,1,1,1,1,1,0,0,'a:0:{}'), + (443,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (444,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,1,1,1,0,1,1,0,0,'a:0:{}'), + (445,1,'civicrm/contact/search/custom',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:42:\"CRM_Legacycustomsearches_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,1,0,1,0,10,1,1,0,'a:0:{}'), + (446,1,'civicrm/admin/setting/flexmailer',NULL,'Flexmailer Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:10:\"adminGroup\";s:8:\"CiviMail\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";}'), + (447,1,'civicrm/admin/setting/recaptcha',NULL,'reCAPTCHA Settings','a:2:{i:0;s:19:\"CRM_Core_Permission\";i:1;s:9:\"checkMenu\";}','a:2:{i:0;a:1:{i:0;s:18:\"administer CiviCRM\";}i:1;s:3:\"and\";}','s:22:\"CRM_Admin_Form_Generic\";',NULL,'a:2:{i:0;a:2:{s:5:\"title\";s:7:\"CiviCRM\";s:3:\"url\";s:16:\"/civicrm?reset=1\";}i:1;a:2:{s:5:\"title\";s:18:\"Administer CiviCRM\";s:3:\"url\";s:22:\"/civicrm/admin?reset=1\";}}',NULL,NULL,NULL,1,0,1,1,1,1,0,0,'a:2:{s:4:\"desc\";s:43:\"Configure anti-abuse/bot-prevention service\";s:10:\"adminGroup\";s:15:\"System Settings\";}'), + (448,1,'admin',NULL,NULL,NULL,NULL,NULL,NULL,'a:15:{s:6:\"Manage\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:42:\"{weight}.Find and Merge Duplicate Contacts\";a:6:{s:5:\"title\";s:33:\"Find and Merge Duplicate Contacts\";s:4:\"desc\";s:158:\"Manage the rules used to identify potentially duplicate contact records. Scan for duplicates using a selected rule and merge duplicate contact data as needed.\";s:2:\"id\";s:29:\"FindandMergeDuplicateContacts\";s:3:\"url\";s:36:\"/civicrm/contact/deduperules?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Dedupe Exceptions\";a:6:{s:5:\"title\";s:17:\"Dedupe Exceptions\";s:4:\"desc\";N;s:2:\"id\";s:16:\"DedupeExceptions\";s:3:\"url\";s:33:\"/civicrm/dedupe/exception?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Scheduled Jobs Log\";a:6:{s:5:\"title\";s:18:\"Scheduled Jobs Log\";s:4:\"desc\";s:46:\"Browsing the log of periodially running tasks.\";s:2:\"id\";s:16:\"ScheduledJobsLog\";s:3:\"url\";s:29:\"/civicrm/admin/joblog?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:26:\"Customize Data and Screens\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:13:\"{weight}.Tags\";a:6:{s:5:\"title\";s:4:\"Tags\";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:4:\"Tags\";s:3:\"url\";s:20:\"/civicrm/tag?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Custom Data\";a:6:{s:5:\"title\";s:11:\"Custom Data\";s:4:\"desc\";s:109:\"Configure custom fields to collect and store custom data which is not included in the standard CiviCRM forms.\";s:2:\"id\";s:10:\"CustomData\";s:3:\"url\";s:35:\"/civicrm/admin/custom/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:17:\"{weight}.Profiles\";a:6:{s:5:\"title\";s:8:\"Profiles\";s:4:\"desc\";s:151:\"Profiles allow you to aggregate groups of fields and include them in your site as input forms, contact display pages, and search and listings features.\";s:2:\"id\";s:8:\"Profiles\";s:3:\"url\";s:31:\"/civicrm/admin/uf/group?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Activity Types\";a:6:{s:5:\"title\";s:14:\"Activity Types\";s:4:\"desc\";s:155:\"CiviCRM has several built-in activity types (meetings, phone calls, emails sent). Track other types of interactions by creating custom activity types here.\";s:2:\"id\";s:13:\"ActivityTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/activity_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Relationship Types\";a:6:{s:5:\"title\";s:18:\"Relationship Types\";s:4:\"desc\";s:148:\"Contacts can be linked to each other through Relationships (e.g. Spouse, Employer, etc.). Define the types of relationships you want to record here.\";s:2:\"id\";s:17:\"RelationshipTypes\";s:3:\"url\";s:30:\"/civicrm/admin/reltype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Contact Types\";a:6:{s:5:\"title\";s:13:\"Contact Types\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ContactTypes\";s:3:\"url\";s:38:\"/civicrm/admin/options/subtype?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Gender Options\";a:6:{s:5:\"title\";s:14:\"Gender Options\";s:4:\"desc\";s:79:\"Options for assigning gender to individual contacts (e.g. Male, Female, Other).\";s:2:\"id\";s:13:\"GenderOptions\";s:3:\"url\";s:37:\"/civicrm/admin/options/gender?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Prefixes (Ms, Mr...)\";a:6:{s:5:\"title\";s:31:\"Individual Prefixes (Ms, Mr...)\";s:4:\"desc\";s:66:\"Options for individual contact prefixes (e.g. Ms., Mr., Dr. etc.).\";s:2:\"id\";s:27:\"IndividualPrefixes_Ms_Mr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_prefix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Individual Suffixes (Jr, Sr...)\";a:6:{s:5:\"title\";s:31:\"Individual Suffixes (Jr, Sr...)\";s:4:\"desc\";s:61:\"Options for individual contact suffixes (e.g. Jr., Sr. etc.).\";s:2:\"id\";s:27:\"IndividualSuffixes_Jr_Sr...\";s:3:\"url\";s:48:\"/civicrm/admin/options/individual_suffix?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:39:\"{weight}.Location Types (Home, Work...)\";a:6:{s:5:\"title\";s:30:\"Location Types (Home, Work...)\";s:4:\"desc\";s:94:\"Options for categorizing contact addresses and phone numbers (e.g. Home, Work, Billing, etc.).\";s:2:\"id\";s:26:\"LocationTypes_Home_Work...\";s:3:\"url\";s:35:\"/civicrm/admin/locationType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Website Types\";a:6:{s:5:\"title\";s:13:\"Website Types\";s:4:\"desc\";s:48:\"Options for assigning website types to contacts.\";s:2:\"id\";s:12:\"WebsiteTypes\";s:3:\"url\";s:43:\"/civicrm/admin/options/website_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:35:\"{weight}.Instant Messenger Services\";a:6:{s:5:\"title\";s:26:\"Instant Messenger Services\";s:4:\"desc\";s:79:\"List of IM services which can be used when recording screen-names for contacts.\";s:2:\"id\";s:24:\"InstantMessengerServices\";s:3:\"url\";s:56:\"/civicrm/admin/options/instant_messenger_service?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Mobile Phone Providers\";a:6:{s:5:\"title\";s:22:\"Mobile Phone Providers\";s:4:\"desc\";s:90:\"List of mobile phone providers which can be assigned when recording contact phone numbers.\";s:2:\"id\";s:20:\"MobilePhoneProviders\";s:3:\"url\";s:46:\"/civicrm/admin/options/mobile_provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Phone Type\";a:6:{s:5:\"title\";s:10:\"Phone Type\";s:4:\"desc\";s:80:\"Options for assigning phone type to contacts (e.g Phone,\n Mobile, Fax, Pager)\";s:2:\"id\";s:9:\"PhoneType\";s:3:\"url\";s:41:\"/civicrm/admin/options/phone_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Display Preferences\";a:6:{s:5:\"title\";s:19:\"Display Preferences\";s:4:\"desc\";N;s:2:\"id\";s:18:\"DisplayPreferences\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/display?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Search Preferences\";a:6:{s:5:\"title\";s:18:\"Search Preferences\";s:4:\"desc\";N;s:2:\"id\";s:17:\"SearchPreferences\";s:3:\"url\";s:37:\"/civicrm/admin/setting/search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Navigation Menu\";a:6:{s:5:\"title\";s:15:\"Navigation Menu\";s:4:\"desc\";s:79:\"Add or remove menu items, and modify the order of items on the navigation menu.\";s:2:\"id\";s:14:\"NavigationMenu\";s:3:\"url\";s:27:\"/civicrm/admin/menu?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Word Replacements\";a:6:{s:5:\"title\";s:17:\"Word Replacements\";s:4:\"desc\";s:18:\"Word Replacements.\";s:2:\"id\";s:16:\"WordReplacements\";s:3:\"url\";s:47:\"/civicrm/admin/options/wordreplacements?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Manage Custom Searches\";a:6:{s:5:\"title\";s:22:\"Manage Custom Searches\";s:4:\"desc\";s:225:\"Developers and accidental techies with a bit of PHP and SQL knowledge can create new search forms to handle specific search and reporting needs which aren\'t covered by the built-in Advanced Search and Search Builder features.\";s:2:\"id\";s:20:\"ManageCustomSearches\";s:3:\"url\";s:44:\"/civicrm/admin/options/custom_search?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"CiviContribute\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:32:\"{weight}.Personal Campaign Pages\";a:6:{s:5:\"title\";s:23:\"Personal Campaign Pages\";s:4:\"desc\";s:49:\"View and manage existing personal campaign pages.\";s:2:\"id\";s:21:\"PersonalCampaignPages\";s:3:\"url\";s:49:\"/civicrm/admin/pcp?context=contribute&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Manage Contribution Pages\";a:6:{s:5:\"title\";s:25:\"Manage Contribution Pages\";s:4:\"desc\";s:242:\"CiviContribute allows you to create and maintain any number of Online Contribution Pages. You can create different pages for different programs or campaigns - and customize text, amounts, types of information collected from contributors, etc.\";s:2:\"id\";s:23:\"ManageContributionPages\";s:3:\"url\";s:33:\"/civicrm/admin/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Manage Premiums\";a:6:{s:5:\"title\";s:15:\"Manage Premiums\";s:4:\"desc\";s:175:\"CiviContribute allows you to configure any number of Premiums which can be offered to contributors as incentives / thank-you gifts. Define the premiums you want to offer here.\";s:2:\"id\";s:14:\"ManagePremiums\";s:3:\"url\";s:48:\"/civicrm/admin/contribute/managePremiums?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Financial Types\";a:6:{s:5:\"title\";s:15:\"Financial Types\";s:4:\"desc\";s:64:\"Formerly civicrm_contribution_type merged into this table in 4.1\";s:2:\"id\";s:14:\"FinancialTypes\";s:3:\"url\";s:46:\"/civicrm/admin/financial/financialType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Financial Accounts\";a:6:{s:5:\"title\";s:18:\"Financial Accounts\";s:4:\"desc\";s:128:\"Financial types are used to categorize contributions for reporting and accounting purposes. These are also referred to as Funds.\";s:2:\"id\";s:17:\"FinancialAccounts\";s:3:\"url\";s:49:\"/civicrm/admin/financial/financialAccount?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Payment Methods\";a:6:{s:5:\"title\";s:15:\"Payment Methods\";s:4:\"desc\";s:224:\"You may choose to record the payment instrument used for each contribution. Common payment methods are installed by default (e.g. Check, Cash, Credit Card...). If your site requires additional payment methods, add them here.\";s:2:\"id\";s:14:\"PaymentMethods\";s:3:\"url\";s:49:\"/civicrm/admin/options/payment_instrument?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Accepted Credit Cards\";a:6:{s:5:\"title\";s:21:\"Accepted Credit Cards\";s:4:\"desc\";s:94:\"Credit card options that will be offered to contributors using your Online Contribution pages.\";s:2:\"id\";s:19:\"AcceptedCreditCards\";s:3:\"url\";s:48:\"/civicrm/admin/options/accept_creditcard?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Soft Credit Types\";a:6:{s:5:\"title\";s:17:\"Soft Credit Types\";s:4:\"desc\";s:86:\"Soft Credit Types that will be offered to contributors during soft credit contribution\";s:2:\"id\";s:15:\"SoftCreditTypes\";s:3:\"url\";s:47:\"/civicrm/admin/options/soft_credit_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:42:\"{weight}.CiviContribute Component Settings\";a:6:{s:5:\"title\";s:33:\"CiviContribute Component Settings\";s:4:\"desc\";s:42:\"Configure global CiviContribute behaviors.\";s:2:\"id\";s:31:\"CiviContributeComponentSettings\";s:3:\"url\";s:53:\"/civicrm/admin/setting/preferences/contribute?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:14:\"Communications\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:11:{s:46:\"{weight}.Organization Address and Contact Info\";a:6:{s:5:\"title\";s:37:\"Organization Address and Contact Info\";s:4:\"desc\";s:150:\"Configure primary contact name, email, return-path and address information. This information is used by CiviMail to identify the sending organization.\";s:2:\"id\";s:33:\"OrganizationAddressandContactInfo\";s:3:\"url\";s:47:\"/civicrm/admin/domain?action=update&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:49:\"/civicrm/admin/options/from_email_address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Message Templates\";a:6:{s:5:\"title\";s:17:\"Message Templates\";s:4:\"desc\";s:130:\"Message templates allow you to save and re-use messages with layouts which you can use when sending email to one or more contacts.\";s:2:\"id\";s:16:\"MessageTemplates\";s:3:\"url\";s:39:\"/civicrm/admin/messageTemplates?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Schedule Reminders\";a:6:{s:5:\"title\";s:18:\"Schedule Reminders\";s:4:\"desc\";s:19:\"Schedule Reminders.\";s:2:\"id\";s:17:\"ScheduleReminders\";s:3:\"url\";s:40:\"/civicrm/admin/scheduleReminders?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Preferred Communication Methods\";a:6:{s:5:\"title\";s:31:\"Preferred Communication Methods\";s:4:\"desc\";s:117:\"One or more preferred methods of communication can be assigned to each contact. Customize the available options here.\";s:2:\"id\";s:29:\"PreferredCommunicationMethods\";s:3:\"url\";s:61:\"/civicrm/admin/options/preferred_communication_method?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Label Formats\";a:6:{s:5:\"title\";s:13:\"Label Formats\";s:4:\"desc\";s:67:\"Configure Label Formats that are used when creating mailing labels.\";s:2:\"id\";s:12:\"LabelFormats\";s:3:\"url\";s:35:\"/civicrm/admin/labelFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Print Page (PDF) Formats\";a:6:{s:5:\"title\";s:24:\"Print Page (PDF) Formats\";s:4:\"desc\";s:95:\"Configure PDF Page Formats that can be assigned to Message Templates when creating PDF letters.\";s:2:\"id\";s:20:\"PrintPage_PDFFormats\";s:3:\"url\";s:33:\"/civicrm/admin/pdfFormats?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Communication Style Options\";a:6:{s:5:\"title\";s:27:\"Communication Style Options\";s:4:\"desc\";s:42:\"Options for Communication Style selection.\";s:2:\"id\";s:25:\"CommunicationStyleOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/communication_style?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Email Greeting Formats\";a:6:{s:5:\"title\";s:22:\"Email Greeting Formats\";s:4:\"desc\";s:75:\"Options for assigning email greetings to individual and household contacts.\";s:2:\"id\";s:20:\"EmailGreetingFormats\";s:3:\"url\";s:45:\"/civicrm/admin/options/email_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Postal Greeting Formats\";a:6:{s:5:\"title\";s:23:\"Postal Greeting Formats\";s:4:\"desc\";s:76:\"Options for assigning postal greetings to individual and household contacts.\";s:2:\"id\";s:21:\"PostalGreetingFormats\";s:3:\"url\";s:46:\"/civicrm/admin/options/postal_greeting?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Addressee Formats\";a:6:{s:5:\"title\";s:17:\"Addressee Formats\";s:4:\"desc\";s:83:\"Options for assigning addressee to individual, household and organization contacts.\";s:2:\"id\";s:16:\"AddresseeFormats\";s:3:\"url\";s:40:\"/civicrm/admin/options/addressee?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Localization\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:4:{s:39:\"{weight}.Languages, Currency, Locations\";a:6:{s:5:\"title\";s:30:\"Languages, Currency, Locations\";s:4:\"desc\";N;s:2:\"id\";s:28:\"Languages_Currency_Locations\";s:3:\"url\";s:43:\"/civicrm/admin/setting/localization?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Address Settings\";a:6:{s:5:\"title\";s:16:\"Address Settings\";s:4:\"desc\";N;s:2:\"id\";s:15:\"AddressSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/address?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Date Formats\";a:6:{s:5:\"title\";s:12:\"Date Formats\";s:4:\"desc\";N;s:2:\"id\";s:11:\"DateFormats\";s:3:\"url\";s:35:\"/civicrm/admin/setting/date?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Preferred Languages\";a:6:{s:5:\"title\";s:19:\"Preferred Languages\";s:4:\"desc\";s:30:\"Options for contact languages.\";s:2:\"id\";s:18:\"PreferredLanguages\";s:3:\"url\";s:40:\"/civicrm/admin/options/languages?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:21:\"Users and Permissions\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:2:{s:23:\"{weight}.Access Control\";a:6:{s:5:\"title\";s:14:\"Access Control\";s:4:\"desc\";s:73:\"Grant or deny access to actions (view, edit...), features and components.\";s:2:\"id\";s:13:\"AccessControl\";s:3:\"url\";s:29:\"/civicrm/admin/access?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Synchronize Users to Contacts\";a:6:{s:5:\"title\";s:29:\"Synchronize Users to Contacts\";s:4:\"desc\";s:71:\"Automatically create a CiviCRM contact record for each CMS user record.\";s:2:\"id\";s:26:\"SynchronizeUserstoContacts\";s:3:\"url\";s:32:\"/civicrm/admin/synchUser?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:15:\"System Settings\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:19:{s:32:\"{weight}.Configuration Checklist\";a:6:{s:5:\"title\";s:23:\"Configuration Checklist\";s:4:\"desc\";s:55:\"List of configuration tasks with links to each setting.\";s:2:\"id\";s:22:\"ConfigurationChecklist\";s:3:\"url\";s:33:\"/civicrm/admin/configtask?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:34:\"{weight}.Enable CiviCRM Components\";a:6:{s:5:\"title\";s:25:\"Enable CiviCRM Components\";s:4:\"desc\";s:269:\"Enable or disable components (e.g. CiviEvent, CiviMember, etc.) for your site based on the features you need. We recommend disabling any components not being used in order to simplify the user interface. You can easily re-enable components at any time from this screen.\";s:2:\"id\";s:23:\"EnableCiviCRMComponents\";s:3:\"url\";s:40:\"/civicrm/admin/setting/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Manage Extensions\";a:6:{s:5:\"title\";s:17:\"Manage Extensions\";s:4:\"desc\";s:0:\"\";s:2:\"id\";s:16:\"ManageExtensions\";s:3:\"url\";s:33:\"/civicrm/admin/extensions?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Outbound Email Settings\";a:6:{s:5:\"title\";s:23:\"Outbound Email Settings\";s:4:\"desc\";N;s:2:\"id\";s:21:\"OutboundEmailSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/smtp?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:37:\"{weight}.Settings - Payment Processor\";a:6:{s:5:\"title\";s:28:\"Settings - Payment Processor\";s:4:\"desc\";s:48:\"Payment Processor setup for CiviCRM transactions\";s:2:\"id\";s:25:\"Settings-PaymentProcessor\";s:3:\"url\";s:39:\"/civicrm/admin/paymentProcessor?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:30:\"{weight}.Mapping and Geocoding\";a:6:{s:5:\"title\";s:21:\"Mapping and Geocoding\";s:4:\"desc\";N;s:2:\"id\";s:19:\"MappingandGeocoding\";s:3:\"url\";s:38:\"/civicrm/admin/setting/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:53:\"{weight}.Misc (Undelete, PDFs, Limits, Logging, etc.)\";a:6:{s:5:\"title\";s:44:\"Misc (Undelete, PDFs, Limits, Logging, etc.)\";s:4:\"desc\";s:63:\"Enable undelete/move to trash feature, detailed change logging.\";s:2:\"id\";s:38:\"Misc_Undelete_PDFs_Limits_Logging_etc.\";s:3:\"url\";s:35:\"/civicrm/admin/setting/misc?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Directories\";a:6:{s:5:\"title\";s:11:\"Directories\";s:4:\"desc\";N;s:2:\"id\";s:11:\"Directories\";s:3:\"url\";s:35:\"/civicrm/admin/setting/path?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Resource URLs\";a:6:{s:5:\"title\";s:13:\"Resource URLs\";s:4:\"desc\";N;s:2:\"id\";s:12:\"ResourceURLs\";s:3:\"url\";s:34:\"/civicrm/admin/setting/url?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:40:\"{weight}.Cleanup Caches and Update Paths\";a:6:{s:5:\"title\";s:31:\"Cleanup Caches and Update Paths\";s:4:\"desc\";s:157:\"Reset the Base Directory Path and Base URL settings - generally when a CiviCRM site is moved to another location in the file system and/or to another domain.\";s:2:\"id\";s:27:\"CleanupCachesandUpdatePaths\";s:3:\"url\";s:50:\"/civicrm/admin/setting/updateConfigBackend?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.CMS Database Integration\";a:6:{s:5:\"title\";s:24:\"CMS Database Integration\";s:4:\"desc\";N;s:2:\"id\";s:22:\"CMSDatabaseIntegration\";s:3:\"url\";s:33:\"/civicrm/admin/setting/uf?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:36:\"{weight}.Safe File Extension Options\";a:6:{s:5:\"title\";s:27:\"Safe File Extension Options\";s:4:\"desc\";s:44:\"File Extensions that can be considered safe.\";s:2:\"id\";s:24:\"SafeFileExtensionOptions\";s:3:\"url\";s:50:\"/civicrm/admin/options/safe_file_extension?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Option Groups\";a:6:{s:5:\"title\";s:13:\"Option Groups\";s:4:\"desc\";s:35:\"Access all meta-data option groups.\";s:2:\"id\";s:12:\"OptionGroups\";s:3:\"url\";s:30:\"/civicrm/admin/options?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Import/Export Mappings\";a:6:{s:5:\"title\";s:22:\"Import/Export Mappings\";s:4:\"desc\";s:141:\"Import and Export mappings allow you to easily run the same job multiple times. This option allows you to rename or delete existing mappings.\";s:2:\"id\";s:21:\"Import_ExportMappings\";s:3:\"url\";s:30:\"/civicrm/admin/mapping?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:18:\"{weight}.Debugging\";a:6:{s:5:\"title\";s:9:\"Debugging\";s:4:\"desc\";N;s:2:\"id\";s:9:\"Debugging\";s:3:\"url\";s:36:\"/civicrm/admin/setting/debug?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Multi Site Settings\";a:6:{s:5:\"title\";s:19:\"Multi Site Settings\";s:4:\"desc\";N;s:2:\"id\";s:17:\"MultiSiteSettings\";s:3:\"url\";s:52:\"/civicrm/admin/setting/preferences/multisite?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Scheduled Jobs\";a:6:{s:5:\"title\";s:14:\"Scheduled Jobs\";s:4:\"desc\";s:35:\"Managing periodially running tasks.\";s:2:\"id\";s:13:\"ScheduledJobs\";s:3:\"url\";s:26:\"/civicrm/admin/job?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Sms Providers\";a:6:{s:5:\"title\";s:13:\"Sms Providers\";s:4:\"desc\";s:27:\"To configure a sms provider\";s:2:\"id\";s:12:\"SmsProviders\";s:3:\"url\";s:35:\"/civicrm/admin/sms/provider?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.reCAPTCHA Settings\";a:6:{s:5:\"title\";s:18:\"reCAPTCHA Settings\";s:4:\"desc\";s:43:\"Configure anti-abuse/bot-prevention service\";s:2:\"id\";s:17:\"reCAPTCHASettings\";s:3:\"url\";s:40:\"/civicrm/admin/setting/recaptcha?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"CiviCampaign\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:40:\"{weight}.CiviCampaign Component Settings\";a:6:{s:5:\"title\";s:31:\"CiviCampaign Component Settings\";s:4:\"desc\";s:40:\"Configure global CiviCampaign behaviors.\";s:2:\"id\";s:29:\"CiviCampaignComponentSettings\";s:3:\"url\";s:51:\"/civicrm/admin/setting/preferences/campaign?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:21:\"{weight}.Survey Types\";a:6:{s:5:\"title\";s:12:\"Survey Types\";s:4:\"desc\";N;s:2:\"id\";s:11:\"SurveyTypes\";s:3:\"url\";s:42:\"/civicrm/admin/campaign/surveyType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:23:\"{weight}.Campaign Types\";a:6:{s:5:\"title\";s:14:\"Campaign Types\";s:4:\"desc\";s:47:\"categorize your campaigns using campaign types.\";s:2:\"id\";s:13:\"CampaignTypes\";s:3:\"url\";s:44:\"/civicrm/admin/options/campaign_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Campaign Status\";a:6:{s:5:\"title\";s:15:\"Campaign Status\";s:4:\"desc\";s:34:\"Define statuses for campaign here.\";s:2:\"id\";s:14:\"CampaignStatus\";s:3:\"url\";s:46:\"/civicrm/admin/options/campaign_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Engagement Index\";a:6:{s:5:\"title\";s:16:\"Engagement Index\";s:4:\"desc\";s:18:\"Engagement levels.\";s:2:\"id\";s:15:\"EngagementIndex\";s:3:\"url\";s:47:\"/civicrm/admin/options/engagement_index?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"CiviEvent\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:9:{s:37:\"{weight}.CiviEvent Component Settings\";a:6:{s:5:\"title\";s:28:\"CiviEvent Component Settings\";s:4:\"desc\";s:37:\"Configure global CiviEvent behaviors.\";s:2:\"id\";s:26:\"CiviEventComponentSettings\";s:3:\"url\";s:48:\"/civicrm/admin/setting/preferences/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:33:\"{weight}.Event Name Badge Layouts\";a:6:{s:5:\"title\";s:24:\"Event Name Badge Layouts\";s:4:\"desc\";s:107:\"Configure name badge layouts for event participants, including logos and what data to include on the badge.\";s:2:\"id\";s:21:\"EventNameBadgeLayouts\";s:3:\"url\";s:52:\"/civicrm/admin/badgelayout?action=browse&reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Manage Events\";a:6:{s:5:\"title\";s:13:\"Manage Events\";s:4:\"desc\";s:136:\"Create and edit event configuration including times, locations, online registration forms, and fees. Links for iCal and RSS syndication.\";s:2:\"id\";s:12:\"ManageEvents\";s:3:\"url\";s:28:\"/civicrm/admin/event?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Event Templates\";a:6:{s:5:\"title\";s:15:\"Event Templates\";s:4:\"desc\";s:115:\"Administrators can create Event Templates - which are basically master event records pre-filled with default values\";s:2:\"id\";s:14:\"EventTemplates\";s:3:\"url\";s:36:\"/civicrm/admin/eventTemplate?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:20:\"{weight}.Event Types\";a:6:{s:5:\"title\";s:11:\"Event Types\";s:4:\"desc\";s:143:\"Use Event Types to categorize your events. Event feeds can be filtered by Event Type and participant searches can use Event Type as a criteria.\";s:2:\"id\";s:10:\"EventTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/event_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:27:\"{weight}.Participant Status\";a:6:{s:5:\"title\";s:18:\"Participant Status\";s:4:\"desc\";s:154:\"Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.\";s:2:\"id\";s:17:\"ParticipantStatus\";s:3:\"url\";s:41:\"/civicrm/admin/participant_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Participant Role\";a:6:{s:5:\"title\";s:16:\"Participant Role\";s:4:\"desc\";s:138:\"Define participant roles for events here (e.g. Attendee, Host, Speaker...). You can then assign roles and search for participants by role.\";s:2:\"id\";s:15:\"ParticipantRole\";s:3:\"url\";s:47:\"/civicrm/admin/options/participant_role?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:38:\"{weight}.Participant Listing Templates\";a:6:{s:5:\"title\";s:29:\"Participant Listing Templates\";s:4:\"desc\";s:48:\"Template to control participant listing display.\";s:2:\"id\";s:27:\"ParticipantListingTemplates\";s:3:\"url\";s:50:\"/civicrm/admin/options/participant_listing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:31:\"{weight}.Conference Slot Labels\";a:6:{s:5:\"title\";s:22:\"Conference Slot Labels\";s:4:\"desc\";s:35:\"Define conference slots and labels.\";s:2:\"id\";s:20:\"ConferenceSlotLabels\";s:3:\"url\";s:46:\"/civicrm/admin/options/conference_slot?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviMail\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:6:{s:36:\"{weight}.CiviMail Component Settings\";a:6:{s:5:\"title\";s:27:\"CiviMail Component Settings\";s:4:\"desc\";s:36:\"Configure global CiviMail behaviors.\";s:2:\"id\";s:25:\"CiviMailComponentSettings\";s:3:\"url\";s:50:\"/civicrm/admin/setting/preferences/mailing?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Mailer Settings\";a:6:{s:5:\"title\";s:15:\"Mailer Settings\";s:4:\"desc\";s:61:\"Configure spool period, throttling and other mailer settings.\";s:2:\"id\";s:14:\"MailerSettings\";s:3:\"url\";s:27:\"/civicrm/admin/mail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:49:\"{weight}.Headers, Footers, and Automated Messages\";a:6:{s:5:\"title\";s:40:\"Headers, Footers, and Automated Messages\";s:4:\"desc\";s:143:\"Configure the header and footer used for mailings. Customize the content of automated Subscribe, Unsubscribe, Resubscribe and Opt-out messages.\";s:2:\"id\";s:36:\"Headers_Footers_andAutomatedMessages\";s:3:\"url\";s:32:\"/civicrm/admin/component?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:29:\"{weight}.From Email Addresses\";a:6:{s:5:\"title\";s:20:\"From Email Addresses\";s:4:\"desc\";s:74:\"List of Email Addresses which can be used when sending emails to contacts.\";s:2:\"id\";s:18:\"FromEmailAddresses\";s:3:\"url\";s:58:\"/civicrm/admin/options/from_email_address/civimail?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Mail Accounts\";a:6:{s:5:\"title\";s:13:\"Mail Accounts\";s:4:\"desc\";s:32:\"Configure email account setting.\";s:2:\"id\";s:12:\"MailAccounts\";s:3:\"url\";s:35:\"/civicrm/admin/mailSettings?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:28:\"{weight}.Flexmailer Settings\";a:6:{s:5:\"title\";s:19:\"Flexmailer Settings\";s:4:\"desc\";N;s:2:\"id\";s:18:\"FlexmailerSettings\";s:3:\"url\";s:41:\"/civicrm/admin/setting/flexmailer?reset=1\";s:4:\"icon\";s:23:\"admin/small/Profile.png\";s:5:\"extra\";N;}}}s:10:\"CiviMember\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:38:\"{weight}.CiviMember Component Settings\";a:6:{s:5:\"title\";s:29:\"CiviMember Component Settings\";s:4:\"desc\";s:38:\"Configure global CiviMember behaviors.\";s:2:\"id\";s:27:\"CiviMemberComponentSettings\";s:3:\"url\";s:49:\"/civicrm/admin/setting/preferences/member?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Membership Types\";a:6:{s:5:\"title\";s:16:\"Membership Types\";s:4:\"desc\";s:174:\"Define the types of memberships you want to offer. For each type, you can specify a \'name\' (Gold Member, Honor Society Member...), a description, duration, and a minimum fee.\";s:2:\"id\";s:15:\"MembershipTypes\";s:3:\"url\";s:44:\"/civicrm/admin/member/membershipType?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:32:\"{weight}.Membership Status Rules\";a:6:{s:5:\"title\";s:23:\"Membership Status Rules\";s:4:\"desc\";s:187:\"Status \'rules\' define the current status for a membership based on that membership\'s start and end dates. You can adjust the default status options and rules as needed to meet your needs.\";s:2:\"id\";s:21:\"MembershipStatusRules\";s:3:\"url\";s:46:\"/civicrm/admin/member/membershipStatus?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:12:\"Option Lists\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:20:\"{weight}.Grant Types\";a:6:{s:5:\"title\";s:11:\"Grant Types\";s:4:\"desc\";s:148:\"List of types which can be assigned to Grants. (Enable CiviGrant from Administer > Systme Settings > Enable Components if you want to track grants.)\";s:2:\"id\";s:10:\"GrantTypes\";s:3:\"url\";s:41:\"/civicrm/admin/options/grant_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:9:\"Customize\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:1:{s:19:\"{weight}.Price Sets\";a:6:{s:5:\"title\";s:10:\"Price Sets\";s:4:\"desc\";s:205:\"Price sets allow you to offer multiple options with associated fees (e.g. pre-conference workshops, additional meals, etc.). Configure Price Sets for events which need more than a single set of fee levels.\";s:2:\"id\";s:9:\"PriceSets\";s:3:\"url\";s:28:\"/civicrm/admin/price?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:8:\"CiviCase\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:5:{s:26:\"{weight}.CiviCase Settings\";a:6:{s:5:\"title\";s:17:\"CiviCase Settings\";s:4:\"desc\";N;s:2:\"id\";s:16:\"CiviCaseSettings\";s:3:\"url\";s:35:\"/civicrm/admin/setting/case?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:19:\"{weight}.Case Types\";a:6:{s:5:\"title\";s:10:\"Case Types\";s:4:\"desc\";s:137:\"List of types which can be assigned to Cases. (Enable the Cases tab from System Settings - Enable Components if you want to track cases.)\";s:2:\"id\";s:9:\"CaseTypes\";s:3:\"url\";s:40:\"/civicrm/admin/options/case_type?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Redaction Rules\";a:6:{s:5:\"title\";s:15:\"Redaction Rules\";s:4:\"desc\";s:223:\"List of rules which can be applied to user input strings so that the redacted output can be recognized as repeated instances of the same string or can be identified as a \"semantic type of the data element\" within case data.\";s:2:\"id\";s:14:\"RedactionRules\";s:3:\"url\";s:45:\"/civicrm/admin/options/redaction_rule?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:22:\"{weight}.Case Statuses\";a:6:{s:5:\"title\";s:13:\"Case Statuses\";s:4:\"desc\";s:48:\"List of statuses that can be assigned to a case.\";s:2:\"id\";s:12:\"CaseStatuses\";s:3:\"url\";s:42:\"/civicrm/admin/options/case_status?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:26:\"{weight}.Encounter Mediums\";a:6:{s:5:\"title\";s:17:\"Encounter Mediums\";s:4:\"desc\";s:26:\"List of encounter mediums.\";s:2:\"id\";s:16:\"EncounterMediums\";s:3:\"url\";s:47:\"/civicrm/admin/options/encounter_medium?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}s:10:\"CiviReport\";a:2:{s:12:\"component_id\";N;s:6:\"fields\";a:3:{s:40:\"{weight}.Create New Report from Template\";a:6:{s:5:\"title\";s:31:\"Create New Report from Template\";s:4:\"desc\";s:49:\"Component wise listing of all available templates\";s:2:\"id\";s:27:\"CreateNewReportfromTemplate\";s:3:\"url\";s:43:\"/civicrm/admin/report/template/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:25:\"{weight}.Manage Templates\";a:6:{s:5:\"title\";s:16:\"Manage Templates\";s:4:\"desc\";s:45:\"Browse, Edit and Delete the Report templates.\";s:2:\"id\";s:15:\"ManageTemplates\";s:3:\"url\";s:53:\"/civicrm/admin/report/options/report_template?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}s:24:\"{weight}.Reports Listing\";a:6:{s:5:\"title\";s:15:\"Reports Listing\";s:4:\"desc\";s:60:\"Browse existing report, change report criteria and settings.\";s:2:\"id\";s:14:\"ReportsListing\";s:3:\"url\";s:34:\"/civicrm/admin/report/list?reset=1\";s:4:\"icon\";N;s:5:\"extra\";N;}}}}',NULL,NULL,NULL,1,0,1,1,1,1,1,0,'a:0:{}'); /*!40000 ALTER TABLE `civicrm_menu` ENABLE KEYS */; UNLOCK TABLES; @@ -5612,26 +5606,26 @@ 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`, `note_date`, `created_date`, `modified_date`, `subject`, `privacy`) VALUES - (1,'civicrm_contact',96,'Send reminder for annual dinner',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-07-09 03:43:31',NULL,'0'), - (2,'civicrm_contact',64,'Organize the Terry Fox run',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-09-04 07:25:06',NULL,'0'), - (3,'civicrm_contact',95,'Chart out route map for next 10k run',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-04-29 10:16:02',NULL,'0'), - (4,'civicrm_contact',112,'Contact the Commissioner of Charities',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-09-18 09:57:42',NULL,'0'), - (5,'civicrm_contact',192,'Send reminder for annual dinner',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2022-01-23 12:44:58',NULL,'0'), - (6,'civicrm_contact',12,'Arrange for cricket match with Sunil Gavaskar',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-08-13 17:13:57',NULL,'0'), - (7,'civicrm_contact',111,'Send reminder for annual dinner',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2022-03-20 18:58:26',NULL,'0'), - (8,'civicrm_contact',55,'Reminder screening of \"Black\" on next Friday',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2022-01-16 16:34:11',NULL,'0'), - (9,'civicrm_contact',187,'Organize the Terry Fox run',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-08-18 16:50:50',NULL,'0'), - (10,'civicrm_contact',100,'Send newsletter for April 2005',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-09-01 04:31:23',NULL,'0'), - (11,'civicrm_contact',164,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-12-21 18:59:51',NULL,'0'), - (12,'civicrm_contact',127,'Send newsletter for April 2005',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2022-02-06 04:45:55',NULL,'0'), - (13,'civicrm_contact',10,'Contact the Commissioner of Charities',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-06-05 08:31:19',NULL,'0'), - (14,'civicrm_contact',132,'Connect for presentation',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-10-28 19:00:49',NULL,'0'), - (15,'civicrm_contact',158,'Arrange for cricket match with Sunil Gavaskar',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2022-03-30 07:05:14',NULL,'0'), - (16,'civicrm_contact',57,'Arrange collection of funds from members',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-11-13 20:55:05',NULL,'0'), - (17,'civicrm_contact',80,'Chart out route map for next 10k run',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-12-02 02:48:36',NULL,'0'), - (18,'civicrm_contact',13,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-10-21 07:59:46',NULL,'0'), - (19,'civicrm_contact',100,'Send reminder for annual dinner',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-06-23 12:58:58',NULL,'0'), - (20,'civicrm_contact',31,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-04-14 03:30:16','2022-04-14 03:30:16','2021-10-18 17:43:52',NULL,'0'); + (1,'civicrm_contact',24,'Chart out route map for next 10k run',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2022-01-03 02:19:22',NULL,'0'), + (2,'civicrm_contact',134,'Connect for presentation',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-10-26 02:12:57',NULL,'0'), + (3,'civicrm_contact',61,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2022-01-03 08:47:18',NULL,'0'), + (4,'civicrm_contact',146,'Arrange collection of funds from members',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2022-05-02 03:17:35',NULL,'0'), + (5,'civicrm_contact',125,'Reminder screening of \"Black\" on next Friday',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-06-06 10:34:35',NULL,'0'), + (6,'civicrm_contact',2,'Contact the Commissioner of Charities',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-10-12 04:40:20',NULL,'0'), + (7,'civicrm_contact',197,'Send reminder for annual dinner',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-08-23 10:30:14',NULL,'0'), + (8,'civicrm_contact',29,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-12-03 06:15:24',NULL,'0'), + (9,'civicrm_contact',109,'Organize the Terry Fox run',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-08-22 09:41:05',NULL,'0'), + (10,'civicrm_contact',178,'Send newsletter for April 2005',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-10-30 06:13:48',NULL,'0'), + (11,'civicrm_contact',49,'Send newsletter for April 2005',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-09-26 04:47:14',NULL,'0'), + (12,'civicrm_contact',76,'Arrange for cricket match with Sunil Gavaskar',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-06-20 08:02:00',NULL,'0'), + (13,'civicrm_contact',132,'Send reminder for annual dinner',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-08-02 11:05:43',NULL,'0'), + (14,'civicrm_contact',89,'Invite members for the Steve Prefontaine 10k dream run',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2022-01-08 21:48:15',NULL,'0'), + (15,'civicrm_contact',109,'Send reminder for annual dinner',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2022-02-09 18:14:19',NULL,'0'), + (16,'civicrm_contact',49,'Arrange collection of funds from members',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2022-01-02 23:59:47',NULL,'0'), + (17,'civicrm_contact',157,'Chart out route map for next 10k run',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-10-18 21:39:43',NULL,'0'), + (18,'civicrm_contact',146,'Reminder screening of \"Black\" on next Friday',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-10-31 05:16:00',NULL,'0'), + (19,'civicrm_contact',57,'Contact the Commissioner of Charities',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-08-05 11:28:18',NULL,'0'), + (20,'civicrm_contact',54,'Send newsletter for April 2005',1,'2022-05-04 18:47:24','2022-05-04 18:47:24','2021-07-25 22:54:47',NULL,'0'); /*!40000 ALTER TABLE `civicrm_note` ENABLE KEYS */; UNLOCK TABLES; @@ -6622,56 +6616,56 @@ 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,39,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (2,66,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,169,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,8,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,147,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (6,83,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,16,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,56,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,95,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,47,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (11,88,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,43,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,72,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,55,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,180,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,188,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,143,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,145,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,41,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,184,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,30,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,61,1,2,'3','2009-10-21 00:00:00','Direct Transfer','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (23,40,2,4,'1','2008-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (24,141,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,124,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,109,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (27,115,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,96,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,57,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,60,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,118,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,7,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), - (33,158,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,179,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,105,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,107,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,71,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,17,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,14,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,12,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,37,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,168,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,173,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,186,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,20,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,200,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,148,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,155,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,130,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,178,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); + (1,74,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (2,102,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,140,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,153,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,137,2,1,'1','2008-01-10 00:00:00','Check','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (6,171,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,61,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,34,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,196,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,52,1,2,'2','2008-02-01 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (11,58,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,100,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,60,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,73,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,139,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,87,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,7,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,49,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,65,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,190,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,41,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,151,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,157,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,75,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,56,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,201,1,1,'1','2009-01-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (27,162,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,1,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,79,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,71,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,183,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,133,1,3,'3','2009-07-21 00:00:00','Check','Single',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (33,107,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,33,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,4,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,68,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,53,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,177,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,104,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,96,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,174,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,101,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,176,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,134,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,67,2,4,'1','2009-01-10 00:00:00','Direct Transfer','Soprano',0,0,50.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (46,78,3,1,'4','2009-12-13 00:00:00','Check','Tiny-tots (ages 5-8)',0,0,800.00,NULL,NULL,'USD',NULL,NULL,NULL,NULL,NULL), + (47,191,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,70,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,150,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,111,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; @@ -6805,7 +6799,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,23,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); + (1,22,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; @@ -6827,154 +6821,154 @@ 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,151,1,1,0,NULL,'716-1858',NULL,'7161858',2), - (2,181,1,1,0,NULL,'(410) 691-6721',NULL,'4106916721',1), - (3,181,1,0,0,NULL,'730-2348',NULL,'7302348',2), - (4,163,1,1,0,NULL,'(557) 762-6847',NULL,'5577626847',1), - (5,94,1,1,0,NULL,'387-3366',NULL,'3873366',2), - (6,68,1,1,0,NULL,'(358) 287-5938',NULL,'3582875938',2), - (7,32,1,1,0,NULL,'324-5377',NULL,'3245377',2), - (8,32,1,0,0,NULL,'(328) 810-1198',NULL,'3288101198',1), - (9,100,1,1,0,NULL,'714-6340',NULL,'7146340',2), - (10,100,1,0,0,NULL,'786-4894',NULL,'7864894',2), - (11,22,1,1,0,NULL,'517-4752',NULL,'5174752',1), - (12,67,1,1,0,NULL,'874-6544',NULL,'8746544',2), - (13,85,1,1,0,NULL,'444-7640',NULL,'4447640',2), - (14,85,1,0,0,NULL,'(657) 332-2793',NULL,'6573322793',2), - (15,40,1,1,0,NULL,'350-8402',NULL,'3508402',2), - (16,40,1,0,0,NULL,'(436) 552-7689',NULL,'4365527689',2), - (17,59,1,1,0,NULL,'273-6840',NULL,'2736840',2), - (18,10,1,1,0,NULL,'(545) 494-2572',NULL,'5454942572',2), - (19,8,1,1,0,NULL,'(651) 261-2896',NULL,'6512612896',1), - (20,8,1,0,0,NULL,'869-5743',NULL,'8695743',2), - (21,11,1,1,0,NULL,'763-8792',NULL,'7638792',1), - (22,11,1,0,0,NULL,'507-7698',NULL,'5077698',2), - (23,149,1,1,0,NULL,'(204) 565-3226',NULL,'2045653226',2), - (24,7,1,1,0,NULL,'(453) 898-1101',NULL,'4538981101',1), - (25,7,1,0,0,NULL,'(276) 720-4860',NULL,'2767204860',2), - (26,25,1,1,0,NULL,'888-6971',NULL,'8886971',2), - (27,143,1,1,0,NULL,'(545) 576-9280',NULL,'5455769280',2), - (28,143,1,0,0,NULL,'(400) 883-8613',NULL,'4008838613',2), - (29,91,1,1,0,NULL,'(271) 242-3323',NULL,'2712423323',1), - (30,82,1,1,0,NULL,'(862) 883-4518',NULL,'8628834518',2), - (31,82,1,0,0,NULL,'(860) 417-1585',NULL,'8604171585',2), - (32,185,1,1,0,NULL,'672-2541',NULL,'6722541',2), - (33,183,1,1,0,NULL,'(546) 770-4369',NULL,'5467704369',2), - (34,183,1,0,0,NULL,'(651) 717-5210',NULL,'6517175210',1), - (35,166,1,1,0,NULL,'410-8838',NULL,'4108838',1), - (36,15,1,1,0,NULL,'(680) 303-5931',NULL,'6803035931',1), - (37,170,1,1,0,NULL,'(552) 452-4236',NULL,'5524524236',1), - (38,31,1,1,0,NULL,'395-1126',NULL,'3951126',1), - (39,31,1,0,0,NULL,'(384) 840-1131',NULL,'3848401131',1), - (40,56,1,1,0,NULL,'613-1731',NULL,'6131731',2), - (41,56,1,0,0,NULL,'660-9919',NULL,'6609919',1), - (42,160,1,1,0,NULL,'690-2794',NULL,'6902794',2), - (43,160,1,0,0,NULL,'(808) 587-9487',NULL,'8085879487',2), - (44,104,1,1,0,NULL,'369-1202',NULL,'3691202',1), - (45,104,1,0,0,NULL,'(490) 411-9075',NULL,'4904119075',2), - (46,6,1,1,0,NULL,'(866) 310-4186',NULL,'8663104186',2), - (47,51,1,1,0,NULL,'886-9858',NULL,'8869858',2), - (48,115,1,1,0,NULL,'752-8661',NULL,'7528661',1), - (49,115,1,0,0,NULL,'539-7361',NULL,'5397361',1), - (50,186,1,1,0,NULL,'569-8125',NULL,'5698125',2), - (51,186,1,0,0,NULL,'247-1239',NULL,'2471239',1), - (52,3,1,1,0,NULL,'456-7638',NULL,'4567638',2), - (53,3,1,0,0,NULL,'(585) 274-6048',NULL,'5852746048',2), - (54,2,1,1,0,NULL,'(395) 377-2416',NULL,'3953772416',2), - (55,2,1,0,0,NULL,'776-1069',NULL,'7761069',2), - (56,9,1,1,0,NULL,'809-6020',NULL,'8096020',1), - (57,9,1,0,0,NULL,'(601) 774-9235',NULL,'6017749235',1), - (58,199,1,1,0,NULL,'538-5260',NULL,'5385260',1), - (59,131,1,1,0,NULL,'(753) 890-1726',NULL,'7538901726',1), - (60,29,1,1,0,NULL,'317-5022',NULL,'3175022',2), - (61,29,1,0,0,NULL,'536-1547',NULL,'5361547',2), - (62,57,1,1,0,NULL,'671-1467',NULL,'6711467',2), - (63,57,1,0,0,NULL,'(854) 425-4861',NULL,'8544254861',1), - (64,62,1,1,0,NULL,'(581) 583-9597',NULL,'5815839597',2), - (65,62,1,0,0,NULL,'(414) 882-3981',NULL,'4148823981',1), - (66,162,1,1,0,NULL,'772-1757',NULL,'7721757',1), - (67,162,1,0,0,NULL,'227-8089',NULL,'2278089',2), - (68,16,1,1,0,NULL,'528-1557',NULL,'5281557',2), - (69,60,1,1,0,NULL,'(392) 723-2185',NULL,'3927232185',2), - (70,38,1,1,0,NULL,'(427) 710-5450',NULL,'4277105450',2), - (71,200,1,1,0,NULL,'(699) 755-7706',NULL,'6997557706',1), - (72,103,1,1,0,NULL,'(525) 740-2168',NULL,'5257402168',2), - (73,134,1,1,0,NULL,'(845) 488-5947',NULL,'8454885947',2), - (74,134,1,0,0,NULL,'626-7861',NULL,'6267861',2), - (75,76,1,1,0,NULL,'299-2465',NULL,'2992465',1), - (76,37,1,1,0,NULL,'(287) 624-8307',NULL,'2876248307',1), - (77,98,1,1,0,NULL,'416-9544',NULL,'4169544',2), - (78,98,1,0,0,NULL,'(723) 595-2583',NULL,'7235952583',2), - (79,187,1,1,0,NULL,'(358) 257-5350',NULL,'3582575350',2), - (80,75,1,1,0,NULL,'(684) 864-1028',NULL,'6848641028',1), - (81,158,1,1,0,NULL,'857-4139',NULL,'8574139',1), - (82,125,1,1,0,NULL,'578-8325',NULL,'5788325',2), - (83,147,1,1,0,NULL,'(637) 289-8078',NULL,'6372898078',2), - (84,147,1,0,0,NULL,'223-6980',NULL,'2236980',2), - (85,137,1,1,0,NULL,'(786) 774-2984',NULL,'7867742984',1), - (86,137,1,0,0,NULL,'354-7666',NULL,'3547666',1), - (87,175,1,1,0,NULL,'(402) 706-2393',NULL,'4027062393',2), - (88,175,1,0,0,NULL,'552-7376',NULL,'5527376',2), - (89,116,1,1,0,NULL,'(604) 738-8423',NULL,'6047388423',2), - (90,95,1,1,0,NULL,'(281) 332-1401',NULL,'2813321401',2), - (91,171,1,1,0,NULL,'(715) 290-2940',NULL,'7152902940',1), - (92,171,1,0,0,NULL,'(857) 203-1293',NULL,'8572031293',2), - (93,43,1,1,0,NULL,'575-4356',NULL,'5754356',2), - (94,53,1,1,0,NULL,'(876) 401-2268',NULL,'8764012268',2), - (95,58,1,1,0,NULL,'(391) 812-8050',NULL,'3918128050',2), - (96,58,1,0,0,NULL,'(876) 458-9345',NULL,'8764589345',1), - (97,144,1,1,0,NULL,'(881) 355-7136',NULL,'8813557136',1), - (98,144,1,0,0,NULL,'(829) 331-5688',NULL,'8293315688',2), - (99,87,1,1,0,NULL,'458-6686',NULL,'4586686',2), - (100,161,1,1,0,NULL,'403-7770',NULL,'4037770',1), - (101,123,1,1,0,NULL,'(699) 387-5737',NULL,'6993875737',1), - (102,123,1,0,0,NULL,'(899) 523-9053',NULL,'8995239053',1), - (103,177,1,1,0,NULL,'(210) 757-1032',NULL,'2107571032',2), - (104,83,1,1,0,NULL,'(575) 213-5860',NULL,'5752135860',1), - (105,110,1,1,0,NULL,'(455) 546-8851',NULL,'4555468851',1), - (106,148,1,1,0,NULL,'492-6759',NULL,'4926759',1), - (107,148,1,0,0,NULL,'(607) 813-8380',NULL,'6078138380',1), - (108,195,1,1,0,NULL,'(258) 720-2832',NULL,'2587202832',1), - (109,195,1,0,0,NULL,'226-6350',NULL,'2266350',2), - (110,188,1,1,0,NULL,'(417) 445-4227',NULL,'4174454227',1), - (111,80,1,1,0,NULL,'(897) 358-4393',NULL,'8973584393',1), - (112,80,1,0,0,NULL,'(322) 454-3339',NULL,'3224543339',2), - (113,48,1,1,0,NULL,'638-2076',NULL,'6382076',2), - (114,107,1,1,0,NULL,'756-4344',NULL,'7564344',2), - (115,107,1,0,0,NULL,'729-4220',NULL,'7294220',1), - (116,152,1,1,0,NULL,'(294) 642-1389',NULL,'2946421389',1), - (117,39,1,1,0,NULL,'(549) 611-8612',NULL,'5496118612',2), - (118,39,1,0,0,NULL,'261-5147',NULL,'2615147',2), - (119,46,1,1,0,NULL,'(700) 719-1564',NULL,'7007191564',1), - (120,46,1,0,0,NULL,'834-1042',NULL,'8341042',1), - (121,140,1,1,0,NULL,'(313) 318-2704',NULL,'3133182704',1), - (122,93,1,1,0,NULL,'274-6290',NULL,'2746290',2), - (123,21,1,1,0,NULL,'(340) 788-8610',NULL,'3407888610',1), - (124,21,1,0,0,NULL,'(784) 633-6945',NULL,'7846336945',1), - (125,96,1,1,0,NULL,'(321) 313-5716',NULL,'3213135716',1), - (126,96,1,0,0,NULL,'(612) 206-3948',NULL,'6122063948',2), - (127,146,1,1,0,NULL,'(302) 872-5862',NULL,'3028725862',2), - (128,146,1,0,0,NULL,'(878) 616-2845',NULL,'8786162845',1), - (129,54,1,1,0,NULL,'(896) 730-2030',NULL,'8967302030',1), - (130,54,1,0,0,NULL,'(406) 228-4520',NULL,'4062284520',2), - (131,142,1,1,0,NULL,'671-9525',NULL,'6719525',2), - (132,142,1,0,0,NULL,'772-3766',NULL,'7723766',1), - (133,74,1,1,0,NULL,'386-8289',NULL,'3868289',2), - (134,174,1,1,0,NULL,'(467) 348-3633',NULL,'4673483633',1), - (135,174,1,0,0,NULL,'(622) 813-9446',NULL,'6228139446',1), - (136,167,1,1,0,NULL,'874-6948',NULL,'8746948',1), - (137,167,1,0,0,NULL,'(454) 569-1964',NULL,'4545691964',2), - (138,12,1,1,0,NULL,'(894) 396-1453',NULL,'8943961453',1), - (139,106,1,1,0,NULL,'(798) 410-2052',NULL,'7984102052',2), - (140,106,1,0,0,NULL,'448-7024',NULL,'4487024',2), - (141,55,1,1,0,NULL,'517-7993',NULL,'5177993',1), - (142,55,1,0,0,NULL,'794-3108',NULL,'7943108',1), - (143,133,1,1,0,NULL,'388-1191',NULL,'3881191',1), - (144,44,1,1,0,NULL,'(660) 895-2014',NULL,'6608952014',1), - (145,44,1,0,0,NULL,'(826) 856-2810',NULL,'8268562810',2), - (146,113,1,1,0,NULL,'658-1560',NULL,'6581560',2), - (147,33,1,1,0,NULL,'631-7963',NULL,'6317963',1), - (148,33,1,0,0,NULL,'635-8934',NULL,'6358934',2), + (1,23,1,1,0,NULL,'708-3417',NULL,'7083417',2), + (2,23,1,0,0,NULL,'(279) 477-7352',NULL,'2794777352',2), + (3,65,1,1,0,NULL,'(603) 467-9930',NULL,'6034679930',2), + (4,22,1,1,0,NULL,'627-7356',NULL,'6277356',2), + (5,83,1,1,0,NULL,'294-7244',NULL,'2947244',2), + (6,83,1,0,0,NULL,'(747) 692-7780',NULL,'7476927780',2), + (7,197,1,1,0,NULL,'(425) 560-1332',NULL,'4255601332',1), + (8,161,1,1,0,NULL,'601-4338',NULL,'6014338',2), + (9,161,1,0,0,NULL,'(673) 734-6463',NULL,'6737346463',1), + (10,199,1,1,0,NULL,'637-6321',NULL,'6376321',2), + (11,199,1,0,0,NULL,'215-2253',NULL,'2152253',1), + (12,116,1,1,0,NULL,'(531) 337-3985',NULL,'5313373985',2), + (13,149,1,1,0,NULL,'548-9673',NULL,'5489673',2), + (14,149,1,0,0,NULL,'(416) 750-4367',NULL,'4167504367',2), + (15,100,1,1,0,NULL,'857-1600',NULL,'8571600',2), + (16,115,1,1,0,NULL,'(457) 386-6497',NULL,'4573866497',1), + (17,76,1,1,0,NULL,'500-2696',NULL,'5002696',2), + (18,76,1,0,0,NULL,'278-8782',NULL,'2788782',1), + (19,107,1,1,0,NULL,'(500) 770-2467',NULL,'5007702467',2), + (20,107,1,0,0,NULL,'738-7138',NULL,'7387138',2), + (21,28,1,1,0,NULL,'(689) 587-9122',NULL,'6895879122',2), + (22,54,1,1,0,NULL,'(447) 414-8609',NULL,'4474148609',2), + (23,54,1,0,0,NULL,'(214) 825-2121',NULL,'2148252121',1), + (24,9,1,1,0,NULL,'539-5902',NULL,'5395902',1), + (25,9,1,0,0,NULL,'(435) 478-4584',NULL,'4354784584',2), + (26,10,1,1,0,NULL,'703-5713',NULL,'7035713',1), + (27,160,1,1,0,NULL,'663-1557',NULL,'6631557',1), + (28,130,1,1,0,NULL,'(831) 433-3294',NULL,'8314333294',2), + (29,130,1,0,0,NULL,'852-1565',NULL,'8521565',1), + (30,77,1,1,0,NULL,'(874) 667-8284',NULL,'8746678284',1), + (31,77,1,0,0,NULL,'227-4193',NULL,'2274193',1), + (32,179,1,1,0,NULL,'(795) 320-6519',NULL,'7953206519',1), + (33,179,1,0,0,NULL,'401-1141',NULL,'4011141',1), + (34,45,1,1,0,NULL,'(846) 687-1000',NULL,'8466871000',2), + (35,132,1,1,0,NULL,'853-3743',NULL,'8533743',1), + (36,132,1,0,0,NULL,'834-6740',NULL,'8346740',1), + (37,151,1,1,0,NULL,'(298) 685-2041',NULL,'2986852041',1), + (38,101,1,1,0,NULL,'(277) 352-5501',NULL,'2773525501',1), + (39,101,1,0,0,NULL,'(758) 339-3813',NULL,'7583393813',2), + (40,172,1,1,0,NULL,'(720) 384-1997',NULL,'7203841997',2), + (41,123,1,1,0,NULL,'(728) 708-1019',NULL,'7287081019',2), + (42,196,1,1,0,NULL,'643-9661',NULL,'6439661',2), + (43,194,1,1,0,NULL,'(694) 610-2477',NULL,'6946102477',1), + (44,44,1,1,0,NULL,'293-4224',NULL,'2934224',2), + (45,88,1,1,0,NULL,'(485) 849-6183',NULL,'4858496183',2), + (46,88,1,0,0,NULL,'313-7367',NULL,'3137367',1), + (47,42,1,1,0,NULL,'233-1501',NULL,'2331501',1), + (48,42,1,0,0,NULL,'(780) 581-2509',NULL,'7805812509',1), + (49,91,1,1,0,NULL,'405-2611',NULL,'4052611',1), + (50,17,1,1,0,NULL,'488-2819',NULL,'4882819',1), + (51,75,1,1,0,NULL,'863-2240',NULL,'8632240',2), + (52,164,1,1,0,NULL,'(857) 792-4959',NULL,'8577924959',2), + (53,164,1,0,0,NULL,'(678) 356-2823',NULL,'6783562823',2), + (54,92,1,1,0,NULL,'227-2848',NULL,'2272848',1), + (55,13,1,1,0,NULL,'(468) 393-2241',NULL,'4683932241',1), + (56,103,1,1,0,NULL,'344-8654',NULL,'3448654',2), + (57,103,1,0,0,NULL,'(891) 802-6989',NULL,'8918026989',2), + (58,61,1,1,0,NULL,'(706) 223-9711',NULL,'7062239711',2), + (59,61,1,0,0,NULL,'660-5274',NULL,'6605274',1), + (60,174,1,1,0,NULL,'852-6011',NULL,'8526011',2), + (61,174,1,0,0,NULL,'(342) 504-3867',NULL,'3425043867',2), + (62,50,1,1,0,NULL,'859-9572',NULL,'8599572',1), + (63,175,1,1,0,NULL,'(552) 783-7598',NULL,'5527837598',1), + (64,25,1,1,0,NULL,'333-9488',NULL,'3339488',1), + (65,25,1,0,0,NULL,'547-9248',NULL,'5479248',2), + (66,39,1,1,0,NULL,'(513) 555-3476',NULL,'5135553476',1), + (67,198,1,1,0,NULL,'(681) 685-4997',NULL,'6816854997',1), + (68,5,1,1,0,NULL,'554-2204',NULL,'5542204',2), + (69,33,1,1,0,NULL,'(352) 263-1860',NULL,'3522631860',1), + (70,33,1,0,0,NULL,'(462) 300-9711',NULL,'4623009711',2), + (71,150,1,1,0,NULL,'534-9616',NULL,'5349616',1), + (72,150,1,0,0,NULL,'774-6634',NULL,'7746634',2), + (73,182,1,1,0,NULL,'(854) 482-5636',NULL,'8544825636',1), + (74,182,1,0,0,NULL,'458-8815',NULL,'4588815',2), + (75,7,1,1,0,NULL,'311-1778',NULL,'3111778',1), + (76,82,1,1,0,NULL,'(518) 461-6928',NULL,'5184616928',1), + (77,60,1,1,0,NULL,'(715) 587-6814',NULL,'7155876814',2), + (78,14,1,1,0,NULL,'(455) 225-6757',NULL,'4552256757',2), + (79,14,1,0,0,NULL,'(356) 387-9454',NULL,'3563879454',2), + (80,86,1,1,0,NULL,'386-7358',NULL,'3867358',1), + (81,86,1,0,0,NULL,'213-7429',NULL,'2137429',1), + (82,53,1,1,0,NULL,'(486) 407-2242',NULL,'4864072242',1), + (83,53,1,0,0,NULL,'728-9030',NULL,'7289030',1), + (84,145,1,1,0,NULL,'820-9924',NULL,'8209924',2), + (85,155,1,1,0,NULL,'(534) 495-3215',NULL,'5344953215',2), + (86,85,1,1,0,NULL,'477-3337',NULL,'4773337',2), + (87,85,1,0,0,NULL,'(656) 865-4964',NULL,'6568654964',1), + (88,154,1,1,0,NULL,'(290) 647-6227',NULL,'2906476227',1), + (89,176,1,1,0,NULL,'256-9211',NULL,'2569211',2), + (90,176,1,0,0,NULL,'(428) 384-2993',NULL,'4283842993',2), + (91,2,1,1,0,NULL,'822-1342',NULL,'8221342',2), + (92,117,1,1,0,NULL,'(452) 252-4613',NULL,'4522524613',2), + (93,117,1,0,0,NULL,'387-3364',NULL,'3873364',2), + (94,97,1,1,0,NULL,'(381) 223-3674',NULL,'3812233674',2), + (95,97,1,0,0,NULL,'502-8822',NULL,'5028822',2), + (96,89,1,1,0,NULL,'577-4274',NULL,'5774274',2), + (97,89,1,0,0,NULL,'257-8847',NULL,'2578847',2), + (98,168,1,1,0,NULL,'528-5079',NULL,'5285079',1), + (99,133,1,1,0,NULL,'429-4813',NULL,'4294813',2), + (100,133,1,0,0,NULL,'(549) 391-2605',NULL,'5493912605',2), + (101,46,1,1,0,NULL,'(896) 832-1932',NULL,'8968321932',1), + (102,46,1,0,0,NULL,'845-3253',NULL,'8453253',2), + (103,108,1,1,0,NULL,'527-5780',NULL,'5275780',2), + (104,108,1,0,0,NULL,'498-8218',NULL,'4988218',2), + (105,16,1,1,0,NULL,'(532) 294-4409',NULL,'5322944409',2), + (106,16,1,0,0,NULL,'252-1405',NULL,'2521405',2), + (107,166,1,1,0,NULL,'(548) 368-4937',NULL,'5483684937',1), + (108,135,1,1,0,NULL,'765-5855',NULL,'7655855',2), + (109,63,1,1,0,NULL,'579-5706',NULL,'5795706',2), + (110,63,1,0,0,NULL,'(300) 554-4792',NULL,'3005544792',2), + (111,11,1,1,0,NULL,'(606) 401-9865',NULL,'6064019865',1), + (112,11,1,0,0,NULL,'(828) 818-5288',NULL,'8288185288',2), + (113,134,1,1,0,NULL,'585-7273',NULL,'5857273',2), + (114,134,1,0,0,NULL,'(748) 376-5656',NULL,'7483765656',2), + (115,200,1,1,0,NULL,'726-5776',NULL,'7265776',1), + (116,200,1,0,0,NULL,'481-5231',NULL,'4815231',1), + (117,102,1,1,0,NULL,'(670) 605-7391',NULL,'6706057391',1), + (118,102,1,0,0,NULL,'272-9588',NULL,'2729588',1), + (119,118,1,1,0,NULL,'539-9451',NULL,'5399451',2), + (120,49,1,1,0,NULL,'(782) 303-8939',NULL,'7823038939',1), + (121,49,1,0,0,NULL,'(538) 766-4850',NULL,'5387664850',2), + (122,57,1,1,0,NULL,'(855) 623-9239',NULL,'8556239239',1), + (123,52,1,1,0,NULL,'668-9320',NULL,'6689320',1), + (124,140,1,1,0,NULL,'(289) 273-5548',NULL,'2892735548',2), + (125,48,1,1,0,NULL,'611-3177',NULL,'6113177',2), + (126,78,1,1,0,NULL,'521-3032',NULL,'5213032',2), + (127,78,1,0,0,NULL,'496-3759',NULL,'4963759',1), + (128,40,1,1,0,NULL,'541-2339',NULL,'5412339',2), + (129,104,1,1,0,NULL,'(852) 589-1991',NULL,'8525891991',1), + (130,69,1,1,0,NULL,'(729) 862-9416',NULL,'7298629416',1), + (131,35,1,1,0,NULL,'752-9455',NULL,'7529455',2), + (132,177,1,1,0,NULL,'(362) 740-4409',NULL,'3627404409',1), + (133,177,1,0,0,NULL,'837-8081',NULL,'8378081',2), + (134,72,1,1,0,NULL,'662-4365',NULL,'6624365',2), + (135,110,1,1,0,NULL,'(677) 792-6348',NULL,'6777926348',1), + (136,167,1,1,0,NULL,'730-5692',NULL,'7305692',2), + (137,167,1,0,0,NULL,'(798) 576-1662',NULL,'7985761662',2), + (138,18,1,1,0,NULL,'575-3640',NULL,'5753640',1), + (139,111,1,1,0,NULL,'(447) 481-4956',NULL,'4474814956',1), + (140,111,1,0,0,NULL,'(238) 545-1581',NULL,'2385451581',1), + (141,185,1,1,0,NULL,'598-6736',NULL,'5986736',1), + (142,158,1,1,0,NULL,'(547) 612-4358',NULL,'5476124358',1), + (143,158,1,0,0,NULL,'(360) 506-9362',NULL,'3605069362',2), + (144,192,1,1,0,NULL,'(773) 596-2304',NULL,'7735962304',2), + (145,192,1,0,0,NULL,'616-2704',NULL,'6162704',2), + (146,146,1,1,0,NULL,'735-2949',NULL,'7352949',2), + (147,26,1,1,0,NULL,'778-4613',NULL,'7784613',1), + (148,26,1,0,0,NULL,'(536) 569-4942',NULL,'5365694942',2), (149,NULL,1,0,0,NULL,'204 222-1000',NULL,'2042221000',1), (150,NULL,1,0,0,NULL,'204 223-1000',NULL,'2042231000',1), (151,NULL,1,0,0,NULL,'303 323-1000',NULL,'3033231000',1); @@ -7212,223 +7206,220 @@ 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`, `created_date`, `modified_date`) VALUES - (1,187,37,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (2,75,37,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (3,187,98,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (4,75,98,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (5,75,187,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (6,98,156,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (7,187,156,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (8,75,156,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (9,37,156,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (10,98,37,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (11,147,158,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (12,26,158,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (13,147,125,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (14,26,125,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (15,26,147,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (16,125,172,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (17,147,172,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (18,26,172,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (19,158,172,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (20,125,158,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (21,116,137,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (22,13,137,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (23,116,175,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (24,13,175,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (25,13,116,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (26,175,70,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (27,116,70,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (28,13,70,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (29,137,70,7,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (30,175,137,2,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (31,171,95,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (32,43,95,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (33,171,157,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (34,43,157,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (35,43,171,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (36,157,90,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (37,171,90,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (38,43,90,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (39,95,90,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (40,157,95,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (41,144,53,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (42,86,53,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (43,144,58,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (44,86,58,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (45,86,144,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (46,58,124,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (47,144,124,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (48,86,124,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (49,53,124,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (50,58,53,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (51,150,78,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (52,87,78,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (53,150,138,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (54,87,138,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (55,87,150,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (56,138,165,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (57,150,165,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (58,87,165,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (59,78,165,7,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (60,138,78,2,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (61,177,161,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (62,28,161,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (63,177,123,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (64,28,123,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (65,28,177,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (66,123,191,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (67,177,191,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (68,28,191,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (69,161,191,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (70,123,161,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (71,34,49,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (72,83,49,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (73,34,201,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (74,83,201,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (75,83,34,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (76,201,179,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (77,34,179,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (78,83,179,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (79,49,179,7,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (80,201,49,2,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (81,148,110,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (82,18,110,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (83,148,30,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (84,18,30,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (85,18,148,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (86,30,42,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (87,148,42,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (88,18,42,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (89,110,42,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (90,30,110,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (91,102,195,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (92,188,195,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (93,102,194,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (94,188,194,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (95,188,102,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (96,194,20,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (97,102,20,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (98,188,20,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (99,195,20,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (100,194,195,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (101,111,80,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (102,107,80,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (103,111,48,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (104,107,48,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (105,107,111,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (106,48,184,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (107,111,184,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (108,107,184,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (109,80,184,7,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (110,48,80,2,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (111,39,152,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (112,46,152,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (113,39,139,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (114,46,139,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (115,46,39,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (116,139,180,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (117,39,180,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (118,46,180,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (119,152,180,7,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (120,139,152,2,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (121,140,109,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (122,93,109,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (123,140,65,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (124,93,65,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (125,93,140,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (126,65,127,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (127,140,127,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (128,93,127,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (129,109,127,7,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (130,65,109,2,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (131,5,81,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (132,21,81,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (133,5,130,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (134,21,130,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (135,21,5,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (136,130,41,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (137,5,41,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (138,21,41,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (139,81,41,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (140,130,81,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (141,122,96,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (142,14,96,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (143,122,164,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (144,14,164,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (145,14,122,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (146,164,141,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (147,122,141,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (148,14,141,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (149,96,141,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (150,164,96,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (151,54,61,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (152,142,61,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (153,54,146,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (154,142,146,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (155,142,54,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:15','2022-04-14 03:30:15'), - (156,146,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (157,54,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (158,142,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (159,61,47,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (160,146,61,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (161,190,52,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (162,174,52,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (163,190,74,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (164,174,74,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (165,174,190,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (166,74,169,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (167,190,169,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (168,174,169,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (169,52,169,7,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (170,74,52,2,NULL,NULL,0,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (171,12,167,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (172,106,167,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (173,12,154,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (174,106,154,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (175,106,12,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (176,154,136,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (177,12,136,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (178,106,136,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (179,167,136,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (180,154,167,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (181,55,101,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (182,133,101,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (183,55,121,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (184,133,121,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (185,133,55,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (186,121,73,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (187,55,73,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (188,133,73,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (189,101,73,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (190,121,101,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (191,113,44,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (192,33,44,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (193,113,132,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (194,33,132,1,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (195,33,113,4,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (196,132,135,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (197,113,135,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (198,33,135,8,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (199,44,135,7,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (200,132,44,2,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (201,167,17,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (202,110,45,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (203,19,66,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (204,2,72,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (205,60,77,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (206,65,79,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (207,186,84,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (208,185,108,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (209,150,114,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (210,162,119,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (211,51,128,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (212,13,129,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (213,189,145,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (214,88,155,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (215,132,159,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (216,46,168,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'), - (217,25,193,5,NULL,NULL,1,NULL,0,0,NULL,'2022-04-14 03:30:16','2022-04-14 03:30:16'); + (1,60,7,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (2,129,7,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (3,60,82,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (4,129,82,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (5,129,60,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (6,82,6,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (7,60,6,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (8,129,6,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (9,7,6,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (10,82,7,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (11,171,14,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (12,189,14,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (13,171,86,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (14,189,86,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (15,189,171,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (16,86,125,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (17,171,125,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (18,189,125,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (19,14,125,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (20,86,14,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (21,113,53,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (22,155,53,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (23,113,145,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (24,155,145,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (25,155,113,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (26,145,55,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (27,113,55,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (28,155,55,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (29,53,55,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (30,145,53,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (31,90,119,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (32,81,119,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (33,90,85,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (34,81,85,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (35,81,90,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (36,85,156,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (37,90,156,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (38,81,156,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (39,119,156,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (40,85,119,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (41,2,154,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (42,117,154,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (43,2,176,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (44,117,176,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (45,117,2,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (46,176,51,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (47,2,51,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (48,117,51,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (49,154,51,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (50,176,154,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (51,99,97,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (52,89,97,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (53,99,59,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (54,89,59,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (55,89,99,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (56,59,34,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (57,99,34,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (58,89,34,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (59,97,34,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (60,59,97,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (61,133,153,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (62,46,153,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (63,133,168,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (64,46,168,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (65,46,133,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (66,168,56,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (67,133,56,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (68,46,56,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (69,153,56,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (70,168,153,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (71,166,108,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (72,135,108,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (73,166,16,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (74,135,16,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (75,135,166,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (76,16,96,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (77,166,96,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (78,135,96,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (79,108,96,7,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (80,16,108,2,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (81,180,63,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (82,11,63,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (83,180,74,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (84,11,74,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (85,11,180,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (86,74,124,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (87,180,124,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (88,11,124,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (89,63,124,7,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (90,74,63,2,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (91,200,134,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (92,102,134,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (93,200,148,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (94,102,148,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (95,102,200,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (96,148,183,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (97,200,183,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (98,102,183,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (99,134,183,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (100,148,134,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (101,109,186,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (102,187,186,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (103,109,118,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (104,187,118,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (105,187,109,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (106,118,31,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (107,109,31,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (108,187,31,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (109,186,31,7,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (110,118,186,2,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (111,57,195,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (112,52,195,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (113,57,49,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (114,52,49,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (115,52,57,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (116,49,122,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (117,57,122,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (118,52,122,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (119,195,122,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (120,49,195,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (121,48,20,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (122,131,20,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (123,48,140,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (124,131,140,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (125,131,48,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (126,140,64,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (127,48,64,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (128,131,64,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (129,20,64,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (130,140,20,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (131,162,78,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (132,4,78,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (133,162,37,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (134,4,37,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (135,4,162,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (136,37,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (137,162,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (138,4,47,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (139,78,47,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (140,37,78,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (141,69,40,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (142,35,40,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (143,69,104,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (144,35,104,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (145,35,69,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (146,104,24,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (147,69,24,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (148,35,24,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (149,40,24,7,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (150,104,40,2,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (151,36,177,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (152,110,177,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (153,36,72,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (154,110,72,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (155,110,36,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (156,72,190,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (157,36,190,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (158,110,190,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (159,177,190,7,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (160,72,177,2,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (161,111,167,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (162,3,167,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (163,111,18,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (164,3,18,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (165,3,111,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (166,18,19,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (167,111,19,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (168,3,19,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (169,167,19,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (170,18,167,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (171,201,159,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (172,143,159,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (173,201,128,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (174,143,128,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (175,143,201,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (176,128,165,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (177,201,165,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (178,143,165,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (179,159,165,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (180,128,159,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (181,192,185,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (182,191,185,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (183,192,158,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (184,191,158,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (185,191,192,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (186,158,112,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (187,192,112,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (188,191,112,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (189,185,112,7,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (190,158,185,2,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (191,26,146,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (192,43,146,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (193,26,127,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (194,43,127,1,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (195,43,26,4,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (196,127,152,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (197,26,152,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (198,43,152,8,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (199,146,152,7,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (200,127,146,2,NULL,NULL,0,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (201,143,41,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (202,148,70,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (203,14,71,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (204,184,93,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (205,181,95,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (206,36,98,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (207,69,114,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (208,191,120,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (209,29,121,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (210,62,139,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (211,37,157,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (212,103,163,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (213,33,169,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'), + (214,182,173,5,NULL,NULL,1,NULL,0,0,NULL,'2022-05-04 18:47:23','2022-05-04 18:47:23'); /*!40000 ALTER TABLE `civicrm_relationship` ENABLE KEYS */; UNLOCK TABLES; @@ -7439,440 +7430,434 @@ UNLOCK TABLES; LOCK TABLES `civicrm_relationship_cache` WRITE; /*!40000 ALTER TABLE `civicrm_relationship_cache` DISABLE KEYS */; INSERT INTO `civicrm_relationship_cache` (`id`, `relationship_id`, `relationship_type_id`, `orientation`, `near_contact_id`, `near_relation`, `far_contact_id`, `far_relation`, `is_active`, `start_date`, `end_date`, `case_id`) VALUES - (1,1,1,'a_b',187,'Child of',37,'Parent of',1,NULL,NULL,NULL), - (2,1,1,'b_a',37,'Parent of',187,'Child of',1,NULL,NULL,NULL), - (3,2,1,'a_b',75,'Child of',37,'Parent of',1,NULL,NULL,NULL), - (4,2,1,'b_a',37,'Parent of',75,'Child of',1,NULL,NULL,NULL), - (5,3,1,'a_b',187,'Child of',98,'Parent of',1,NULL,NULL,NULL), - (6,3,1,'b_a',98,'Parent of',187,'Child of',1,NULL,NULL,NULL), - (7,4,1,'a_b',75,'Child of',98,'Parent of',1,NULL,NULL,NULL), - (8,4,1,'b_a',98,'Parent of',75,'Child of',1,NULL,NULL,NULL), - (9,5,4,'a_b',75,'Sibling of',187,'Sibling of',1,NULL,NULL,NULL), - (10,5,4,'b_a',187,'Sibling of',75,'Sibling of',1,NULL,NULL,NULL), - (11,6,8,'a_b',98,'Household Member of',156,'Household Member is',1,NULL,NULL,NULL), - (12,6,8,'b_a',156,'Household Member is',98,'Household Member of',1,NULL,NULL,NULL), - (13,7,8,'a_b',187,'Household Member of',156,'Household Member is',1,NULL,NULL,NULL), - (14,7,8,'b_a',156,'Household Member is',187,'Household Member of',1,NULL,NULL,NULL), - (15,8,8,'a_b',75,'Household Member of',156,'Household Member is',1,NULL,NULL,NULL), - (16,8,8,'b_a',156,'Household Member is',75,'Household Member of',1,NULL,NULL,NULL), - (17,9,7,'a_b',37,'Head of Household for',156,'Head of Household is',1,NULL,NULL,NULL), - (18,9,7,'b_a',156,'Head of Household is',37,'Head of Household for',1,NULL,NULL,NULL), - (19,10,2,'a_b',98,'Spouse of',37,'Spouse of',1,NULL,NULL,NULL), - (20,10,2,'b_a',37,'Spouse of',98,'Spouse of',1,NULL,NULL,NULL), - (21,11,1,'a_b',147,'Child of',158,'Parent of',1,NULL,NULL,NULL), - (22,11,1,'b_a',158,'Parent of',147,'Child of',1,NULL,NULL,NULL), - (23,12,1,'a_b',26,'Child of',158,'Parent of',1,NULL,NULL,NULL), - (24,12,1,'b_a',158,'Parent of',26,'Child of',1,NULL,NULL,NULL), - (25,13,1,'a_b',147,'Child of',125,'Parent of',1,NULL,NULL,NULL), - (26,13,1,'b_a',125,'Parent of',147,'Child of',1,NULL,NULL,NULL), - (27,14,1,'a_b',26,'Child of',125,'Parent of',1,NULL,NULL,NULL), - (28,14,1,'b_a',125,'Parent of',26,'Child of',1,NULL,NULL,NULL), - (29,15,4,'a_b',26,'Sibling of',147,'Sibling of',1,NULL,NULL,NULL), - (30,15,4,'b_a',147,'Sibling of',26,'Sibling of',1,NULL,NULL,NULL), - (31,16,8,'a_b',125,'Household Member of',172,'Household Member is',1,NULL,NULL,NULL), - (32,16,8,'b_a',172,'Household Member is',125,'Household Member of',1,NULL,NULL,NULL), - (33,17,8,'a_b',147,'Household Member of',172,'Household Member is',1,NULL,NULL,NULL), - (34,17,8,'b_a',172,'Household Member is',147,'Household Member of',1,NULL,NULL,NULL), - (35,18,8,'a_b',26,'Household Member of',172,'Household Member is',1,NULL,NULL,NULL), - (36,18,8,'b_a',172,'Household Member is',26,'Household Member of',1,NULL,NULL,NULL), - (37,19,7,'a_b',158,'Head of Household for',172,'Head of Household is',1,NULL,NULL,NULL), - (38,19,7,'b_a',172,'Head of Household is',158,'Head of Household for',1,NULL,NULL,NULL), - (39,20,2,'a_b',125,'Spouse of',158,'Spouse of',1,NULL,NULL,NULL), - (40,20,2,'b_a',158,'Spouse of',125,'Spouse of',1,NULL,NULL,NULL), - (41,21,1,'a_b',116,'Child of',137,'Parent of',1,NULL,NULL,NULL), - (42,21,1,'b_a',137,'Parent of',116,'Child of',1,NULL,NULL,NULL), - (43,22,1,'a_b',13,'Child of',137,'Parent of',1,NULL,NULL,NULL), - (44,22,1,'b_a',137,'Parent of',13,'Child of',1,NULL,NULL,NULL), - (45,23,1,'a_b',116,'Child of',175,'Parent of',1,NULL,NULL,NULL), - (46,23,1,'b_a',175,'Parent of',116,'Child of',1,NULL,NULL,NULL), - (47,24,1,'a_b',13,'Child of',175,'Parent of',1,NULL,NULL,NULL), - (48,24,1,'b_a',175,'Parent of',13,'Child of',1,NULL,NULL,NULL), - (49,25,4,'a_b',13,'Sibling of',116,'Sibling of',1,NULL,NULL,NULL), - (50,25,4,'b_a',116,'Sibling of',13,'Sibling of',1,NULL,NULL,NULL), - (51,26,8,'a_b',175,'Household Member of',70,'Household Member is',1,NULL,NULL,NULL), - (52,26,8,'b_a',70,'Household Member is',175,'Household Member of',1,NULL,NULL,NULL), - (53,27,8,'a_b',116,'Household Member of',70,'Household Member is',1,NULL,NULL,NULL), - (54,27,8,'b_a',70,'Household Member is',116,'Household Member of',1,NULL,NULL,NULL), - (55,28,8,'a_b',13,'Household Member of',70,'Household Member is',1,NULL,NULL,NULL), - (56,28,8,'b_a',70,'Household Member is',13,'Household Member of',1,NULL,NULL,NULL), - (57,29,7,'a_b',137,'Head of Household for',70,'Head of Household is',0,NULL,NULL,NULL), - (58,29,7,'b_a',70,'Head of Household is',137,'Head of Household for',0,NULL,NULL,NULL), - (59,30,2,'a_b',175,'Spouse of',137,'Spouse of',0,NULL,NULL,NULL), - (60,30,2,'b_a',137,'Spouse of',175,'Spouse of',0,NULL,NULL,NULL), - (61,31,1,'a_b',171,'Child of',95,'Parent of',1,NULL,NULL,NULL), - (62,31,1,'b_a',95,'Parent of',171,'Child of',1,NULL,NULL,NULL), - (63,32,1,'a_b',43,'Child of',95,'Parent of',1,NULL,NULL,NULL), - (64,32,1,'b_a',95,'Parent of',43,'Child of',1,NULL,NULL,NULL), - (65,33,1,'a_b',171,'Child of',157,'Parent of',1,NULL,NULL,NULL), - (66,33,1,'b_a',157,'Parent of',171,'Child of',1,NULL,NULL,NULL), - (67,34,1,'a_b',43,'Child of',157,'Parent of',1,NULL,NULL,NULL), - (68,34,1,'b_a',157,'Parent of',43,'Child of',1,NULL,NULL,NULL), - (69,35,4,'a_b',43,'Sibling of',171,'Sibling of',1,NULL,NULL,NULL), - (70,35,4,'b_a',171,'Sibling of',43,'Sibling of',1,NULL,NULL,NULL), - (71,36,8,'a_b',157,'Household Member of',90,'Household Member is',1,NULL,NULL,NULL), - (72,36,8,'b_a',90,'Household Member is',157,'Household Member of',1,NULL,NULL,NULL), - (73,37,8,'a_b',171,'Household Member of',90,'Household Member is',1,NULL,NULL,NULL), - (74,37,8,'b_a',90,'Household Member is',171,'Household Member of',1,NULL,NULL,NULL), - (75,38,8,'a_b',43,'Household Member of',90,'Household Member is',1,NULL,NULL,NULL), - (76,38,8,'b_a',90,'Household Member is',43,'Household Member of',1,NULL,NULL,NULL), - (77,39,7,'a_b',95,'Head of Household for',90,'Head of Household is',1,NULL,NULL,NULL), - (78,39,7,'b_a',90,'Head of Household is',95,'Head of Household for',1,NULL,NULL,NULL), - (79,40,2,'a_b',157,'Spouse of',95,'Spouse of',1,NULL,NULL,NULL), - (80,40,2,'b_a',95,'Spouse of',157,'Spouse of',1,NULL,NULL,NULL), - (81,41,1,'a_b',144,'Child of',53,'Parent of',1,NULL,NULL,NULL), - (82,41,1,'b_a',53,'Parent of',144,'Child of',1,NULL,NULL,NULL), - (83,42,1,'a_b',86,'Child of',53,'Parent of',1,NULL,NULL,NULL), - (84,42,1,'b_a',53,'Parent of',86,'Child of',1,NULL,NULL,NULL), - (85,43,1,'a_b',144,'Child of',58,'Parent of',1,NULL,NULL,NULL), - (86,43,1,'b_a',58,'Parent of',144,'Child of',1,NULL,NULL,NULL), - (87,44,1,'a_b',86,'Child of',58,'Parent of',1,NULL,NULL,NULL), - (88,44,1,'b_a',58,'Parent of',86,'Child of',1,NULL,NULL,NULL), - (89,45,4,'a_b',86,'Sibling of',144,'Sibling of',1,NULL,NULL,NULL), - (90,45,4,'b_a',144,'Sibling of',86,'Sibling of',1,NULL,NULL,NULL), - (91,46,8,'a_b',58,'Household Member of',124,'Household Member is',1,NULL,NULL,NULL), - (92,46,8,'b_a',124,'Household Member is',58,'Household Member of',1,NULL,NULL,NULL), - (93,47,8,'a_b',144,'Household Member of',124,'Household Member is',1,NULL,NULL,NULL), - (94,47,8,'b_a',124,'Household Member is',144,'Household Member of',1,NULL,NULL,NULL), - (95,48,8,'a_b',86,'Household Member of',124,'Household Member is',1,NULL,NULL,NULL), - (96,48,8,'b_a',124,'Household Member is',86,'Household Member of',1,NULL,NULL,NULL), - (97,49,7,'a_b',53,'Head of Household for',124,'Head of Household is',1,NULL,NULL,NULL), - (98,49,7,'b_a',124,'Head of Household is',53,'Head of Household for',1,NULL,NULL,NULL), - (99,50,2,'a_b',58,'Spouse of',53,'Spouse of',1,NULL,NULL,NULL), - (100,50,2,'b_a',53,'Spouse of',58,'Spouse of',1,NULL,NULL,NULL), - (101,51,1,'a_b',150,'Child of',78,'Parent of',1,NULL,NULL,NULL), - (102,51,1,'b_a',78,'Parent of',150,'Child of',1,NULL,NULL,NULL), - (103,52,1,'a_b',87,'Child of',78,'Parent of',1,NULL,NULL,NULL), - (104,52,1,'b_a',78,'Parent of',87,'Child of',1,NULL,NULL,NULL), - (105,53,1,'a_b',150,'Child of',138,'Parent of',1,NULL,NULL,NULL), - (106,53,1,'b_a',138,'Parent of',150,'Child of',1,NULL,NULL,NULL), - (107,54,1,'a_b',87,'Child of',138,'Parent of',1,NULL,NULL,NULL), - (108,54,1,'b_a',138,'Parent of',87,'Child of',1,NULL,NULL,NULL), - (109,55,4,'a_b',87,'Sibling of',150,'Sibling of',1,NULL,NULL,NULL), - (110,55,4,'b_a',150,'Sibling of',87,'Sibling of',1,NULL,NULL,NULL), - (111,56,8,'a_b',138,'Household Member of',165,'Household Member is',1,NULL,NULL,NULL), - (112,56,8,'b_a',165,'Household Member is',138,'Household Member of',1,NULL,NULL,NULL), - (113,57,8,'a_b',150,'Household Member of',165,'Household Member is',1,NULL,NULL,NULL), - (114,57,8,'b_a',165,'Household Member is',150,'Household Member of',1,NULL,NULL,NULL), - (115,58,8,'a_b',87,'Household Member of',165,'Household Member is',1,NULL,NULL,NULL), - (116,58,8,'b_a',165,'Household Member is',87,'Household Member of',1,NULL,NULL,NULL), - (117,59,7,'a_b',78,'Head of Household for',165,'Head of Household is',0,NULL,NULL,NULL), - (118,59,7,'b_a',165,'Head of Household is',78,'Head of Household for',0,NULL,NULL,NULL), - (119,60,2,'a_b',138,'Spouse of',78,'Spouse of',0,NULL,NULL,NULL), - (120,60,2,'b_a',78,'Spouse of',138,'Spouse of',0,NULL,NULL,NULL), - (121,61,1,'a_b',177,'Child of',161,'Parent of',1,NULL,NULL,NULL), - (122,61,1,'b_a',161,'Parent of',177,'Child of',1,NULL,NULL,NULL), - (123,62,1,'a_b',28,'Child of',161,'Parent of',1,NULL,NULL,NULL), - (124,62,1,'b_a',161,'Parent of',28,'Child of',1,NULL,NULL,NULL), - (125,63,1,'a_b',177,'Child of',123,'Parent of',1,NULL,NULL,NULL), - (126,63,1,'b_a',123,'Parent of',177,'Child of',1,NULL,NULL,NULL), - (127,64,1,'a_b',28,'Child of',123,'Parent of',1,NULL,NULL,NULL), - (128,64,1,'b_a',123,'Parent of',28,'Child of',1,NULL,NULL,NULL), - (129,65,4,'a_b',28,'Sibling of',177,'Sibling of',1,NULL,NULL,NULL), - (130,65,4,'b_a',177,'Sibling of',28,'Sibling of',1,NULL,NULL,NULL), - (131,66,8,'a_b',123,'Household Member of',191,'Household Member is',1,NULL,NULL,NULL), - (132,66,8,'b_a',191,'Household Member is',123,'Household Member of',1,NULL,NULL,NULL), - (133,67,8,'a_b',177,'Household Member of',191,'Household Member is',1,NULL,NULL,NULL), - (134,67,8,'b_a',191,'Household Member is',177,'Household Member of',1,NULL,NULL,NULL), - (135,68,8,'a_b',28,'Household Member of',191,'Household Member is',1,NULL,NULL,NULL), - (136,68,8,'b_a',191,'Household Member is',28,'Household Member of',1,NULL,NULL,NULL), - (137,69,7,'a_b',161,'Head of Household for',191,'Head of Household is',1,NULL,NULL,NULL), - (138,69,7,'b_a',191,'Head of Household is',161,'Head of Household for',1,NULL,NULL,NULL), - (139,70,2,'a_b',123,'Spouse of',161,'Spouse of',1,NULL,NULL,NULL), - (140,70,2,'b_a',161,'Spouse of',123,'Spouse of',1,NULL,NULL,NULL), - (141,71,1,'a_b',34,'Child of',49,'Parent of',1,NULL,NULL,NULL), - (142,71,1,'b_a',49,'Parent of',34,'Child of',1,NULL,NULL,NULL), - (143,72,1,'a_b',83,'Child of',49,'Parent of',1,NULL,NULL,NULL), - (144,72,1,'b_a',49,'Parent of',83,'Child of',1,NULL,NULL,NULL), - (145,73,1,'a_b',34,'Child of',201,'Parent of',1,NULL,NULL,NULL), - (146,73,1,'b_a',201,'Parent of',34,'Child of',1,NULL,NULL,NULL), - (147,74,1,'a_b',83,'Child of',201,'Parent of',1,NULL,NULL,NULL), - (148,74,1,'b_a',201,'Parent of',83,'Child of',1,NULL,NULL,NULL), - (149,75,4,'a_b',83,'Sibling of',34,'Sibling of',1,NULL,NULL,NULL), - (150,75,4,'b_a',34,'Sibling of',83,'Sibling of',1,NULL,NULL,NULL), - (151,76,8,'a_b',201,'Household Member of',179,'Household Member is',1,NULL,NULL,NULL), - (152,76,8,'b_a',179,'Household Member is',201,'Household Member of',1,NULL,NULL,NULL), - (153,77,8,'a_b',34,'Household Member of',179,'Household Member is',1,NULL,NULL,NULL), - (154,77,8,'b_a',179,'Household Member is',34,'Household Member of',1,NULL,NULL,NULL), - (155,78,8,'a_b',83,'Household Member of',179,'Household Member is',1,NULL,NULL,NULL), - (156,78,8,'b_a',179,'Household Member is',83,'Household Member of',1,NULL,NULL,NULL), - (157,79,7,'a_b',49,'Head of Household for',179,'Head of Household is',0,NULL,NULL,NULL), - (158,79,7,'b_a',179,'Head of Household is',49,'Head of Household for',0,NULL,NULL,NULL), - (159,80,2,'a_b',201,'Spouse of',49,'Spouse of',0,NULL,NULL,NULL), - (160,80,2,'b_a',49,'Spouse of',201,'Spouse of',0,NULL,NULL,NULL), - (161,81,1,'a_b',148,'Child of',110,'Parent of',1,NULL,NULL,NULL), - (162,81,1,'b_a',110,'Parent of',148,'Child of',1,NULL,NULL,NULL), - (163,82,1,'a_b',18,'Child of',110,'Parent of',1,NULL,NULL,NULL), - (164,82,1,'b_a',110,'Parent of',18,'Child of',1,NULL,NULL,NULL), - (165,83,1,'a_b',148,'Child of',30,'Parent of',1,NULL,NULL,NULL), - (166,83,1,'b_a',30,'Parent of',148,'Child of',1,NULL,NULL,NULL), - (167,84,1,'a_b',18,'Child of',30,'Parent of',1,NULL,NULL,NULL), - (168,84,1,'b_a',30,'Parent of',18,'Child of',1,NULL,NULL,NULL), - (169,85,4,'a_b',18,'Sibling of',148,'Sibling of',1,NULL,NULL,NULL), - (170,85,4,'b_a',148,'Sibling of',18,'Sibling of',1,NULL,NULL,NULL), - (171,86,8,'a_b',30,'Household Member of',42,'Household Member is',1,NULL,NULL,NULL), - (172,86,8,'b_a',42,'Household Member is',30,'Household Member of',1,NULL,NULL,NULL), - (173,87,8,'a_b',148,'Household Member of',42,'Household Member is',1,NULL,NULL,NULL), - (174,87,8,'b_a',42,'Household Member is',148,'Household Member of',1,NULL,NULL,NULL), - (175,88,8,'a_b',18,'Household Member of',42,'Household Member is',1,NULL,NULL,NULL), - (176,88,8,'b_a',42,'Household Member is',18,'Household Member of',1,NULL,NULL,NULL), - (177,89,7,'a_b',110,'Head of Household for',42,'Head of Household is',1,NULL,NULL,NULL), - (178,89,7,'b_a',42,'Head of Household is',110,'Head of Household for',1,NULL,NULL,NULL), - (179,90,2,'a_b',30,'Spouse of',110,'Spouse of',1,NULL,NULL,NULL), - (180,90,2,'b_a',110,'Spouse of',30,'Spouse of',1,NULL,NULL,NULL), - (181,91,1,'a_b',102,'Child of',195,'Parent of',1,NULL,NULL,NULL), - (182,91,1,'b_a',195,'Parent of',102,'Child of',1,NULL,NULL,NULL), - (183,92,1,'a_b',188,'Child of',195,'Parent of',1,NULL,NULL,NULL), - (184,92,1,'b_a',195,'Parent of',188,'Child of',1,NULL,NULL,NULL), - (185,93,1,'a_b',102,'Child of',194,'Parent of',1,NULL,NULL,NULL), - (186,93,1,'b_a',194,'Parent of',102,'Child of',1,NULL,NULL,NULL), - (187,94,1,'a_b',188,'Child of',194,'Parent of',1,NULL,NULL,NULL), - (188,94,1,'b_a',194,'Parent of',188,'Child of',1,NULL,NULL,NULL), - (189,95,4,'a_b',188,'Sibling of',102,'Sibling of',1,NULL,NULL,NULL), - (190,95,4,'b_a',102,'Sibling of',188,'Sibling of',1,NULL,NULL,NULL), - (191,96,8,'a_b',194,'Household Member of',20,'Household Member is',1,NULL,NULL,NULL), - (192,96,8,'b_a',20,'Household Member is',194,'Household Member of',1,NULL,NULL,NULL), - (193,97,8,'a_b',102,'Household Member of',20,'Household Member is',1,NULL,NULL,NULL), - (194,97,8,'b_a',20,'Household Member is',102,'Household Member of',1,NULL,NULL,NULL), - (195,98,8,'a_b',188,'Household Member of',20,'Household Member is',1,NULL,NULL,NULL), - (196,98,8,'b_a',20,'Household Member is',188,'Household Member of',1,NULL,NULL,NULL), - (197,99,7,'a_b',195,'Head of Household for',20,'Head of Household is',1,NULL,NULL,NULL), - (198,99,7,'b_a',20,'Head of Household is',195,'Head of Household for',1,NULL,NULL,NULL), - (199,100,2,'a_b',194,'Spouse of',195,'Spouse of',1,NULL,NULL,NULL), - (200,100,2,'b_a',195,'Spouse of',194,'Spouse of',1,NULL,NULL,NULL), - (201,101,1,'a_b',111,'Child of',80,'Parent of',1,NULL,NULL,NULL), - (202,101,1,'b_a',80,'Parent of',111,'Child of',1,NULL,NULL,NULL), - (203,102,1,'a_b',107,'Child of',80,'Parent of',1,NULL,NULL,NULL), - (204,102,1,'b_a',80,'Parent of',107,'Child of',1,NULL,NULL,NULL), - (205,103,1,'a_b',111,'Child of',48,'Parent of',1,NULL,NULL,NULL), - (206,103,1,'b_a',48,'Parent of',111,'Child of',1,NULL,NULL,NULL), - (207,104,1,'a_b',107,'Child of',48,'Parent of',1,NULL,NULL,NULL), - (208,104,1,'b_a',48,'Parent of',107,'Child of',1,NULL,NULL,NULL), - (209,105,4,'a_b',107,'Sibling of',111,'Sibling of',1,NULL,NULL,NULL), - (210,105,4,'b_a',111,'Sibling of',107,'Sibling of',1,NULL,NULL,NULL), - (211,106,8,'a_b',48,'Household Member of',184,'Household Member is',1,NULL,NULL,NULL), - (212,106,8,'b_a',184,'Household Member is',48,'Household Member of',1,NULL,NULL,NULL), - (213,107,8,'a_b',111,'Household Member of',184,'Household Member is',1,NULL,NULL,NULL), - (214,107,8,'b_a',184,'Household Member is',111,'Household Member of',1,NULL,NULL,NULL), - (215,108,8,'a_b',107,'Household Member of',184,'Household Member is',1,NULL,NULL,NULL), - (216,108,8,'b_a',184,'Household Member is',107,'Household Member of',1,NULL,NULL,NULL), - (217,109,7,'a_b',80,'Head of Household for',184,'Head of Household is',0,NULL,NULL,NULL), - (218,109,7,'b_a',184,'Head of Household is',80,'Head of Household for',0,NULL,NULL,NULL), - (219,110,2,'a_b',48,'Spouse of',80,'Spouse of',0,NULL,NULL,NULL), - (220,110,2,'b_a',80,'Spouse of',48,'Spouse of',0,NULL,NULL,NULL), - (221,111,1,'a_b',39,'Child of',152,'Parent of',1,NULL,NULL,NULL), - (222,111,1,'b_a',152,'Parent of',39,'Child of',1,NULL,NULL,NULL), - (223,112,1,'a_b',46,'Child of',152,'Parent of',1,NULL,NULL,NULL), - (224,112,1,'b_a',152,'Parent of',46,'Child of',1,NULL,NULL,NULL), - (225,113,1,'a_b',39,'Child of',139,'Parent of',1,NULL,NULL,NULL), - (226,113,1,'b_a',139,'Parent of',39,'Child of',1,NULL,NULL,NULL), - (227,114,1,'a_b',46,'Child of',139,'Parent of',1,NULL,NULL,NULL), - (228,114,1,'b_a',139,'Parent of',46,'Child of',1,NULL,NULL,NULL), - (229,115,4,'a_b',46,'Sibling of',39,'Sibling of',1,NULL,NULL,NULL), - (230,115,4,'b_a',39,'Sibling of',46,'Sibling of',1,NULL,NULL,NULL), - (231,116,8,'a_b',139,'Household Member of',180,'Household Member is',1,NULL,NULL,NULL), - (232,116,8,'b_a',180,'Household Member is',139,'Household Member of',1,NULL,NULL,NULL), - (233,117,8,'a_b',39,'Household Member of',180,'Household Member is',1,NULL,NULL,NULL), - (234,117,8,'b_a',180,'Household Member is',39,'Household Member of',1,NULL,NULL,NULL), - (235,118,8,'a_b',46,'Household Member of',180,'Household Member is',1,NULL,NULL,NULL), - (236,118,8,'b_a',180,'Household Member is',46,'Household Member of',1,NULL,NULL,NULL), - (237,119,7,'a_b',152,'Head of Household for',180,'Head of Household is',0,NULL,NULL,NULL), - (238,119,7,'b_a',180,'Head of Household is',152,'Head of Household for',0,NULL,NULL,NULL), - (239,120,2,'a_b',139,'Spouse of',152,'Spouse of',0,NULL,NULL,NULL), - (240,120,2,'b_a',152,'Spouse of',139,'Spouse of',0,NULL,NULL,NULL), - (241,121,1,'a_b',140,'Child of',109,'Parent of',1,NULL,NULL,NULL), - (242,121,1,'b_a',109,'Parent of',140,'Child of',1,NULL,NULL,NULL), - (243,122,1,'a_b',93,'Child of',109,'Parent of',1,NULL,NULL,NULL), - (244,122,1,'b_a',109,'Parent of',93,'Child of',1,NULL,NULL,NULL), - (245,123,1,'a_b',140,'Child of',65,'Parent of',1,NULL,NULL,NULL), - (246,123,1,'b_a',65,'Parent of',140,'Child of',1,NULL,NULL,NULL), - (247,124,1,'a_b',93,'Child of',65,'Parent of',1,NULL,NULL,NULL), - (248,124,1,'b_a',65,'Parent of',93,'Child of',1,NULL,NULL,NULL), - (249,125,4,'a_b',93,'Sibling of',140,'Sibling of',1,NULL,NULL,NULL), - (250,125,4,'b_a',140,'Sibling of',93,'Sibling of',1,NULL,NULL,NULL), - (251,126,8,'a_b',65,'Household Member of',127,'Household Member is',1,NULL,NULL,NULL), - (252,126,8,'b_a',127,'Household Member is',65,'Household Member of',1,NULL,NULL,NULL), - (253,127,8,'a_b',140,'Household Member of',127,'Household Member is',1,NULL,NULL,NULL), - (254,127,8,'b_a',127,'Household Member is',140,'Household Member of',1,NULL,NULL,NULL), - (255,128,8,'a_b',93,'Household Member of',127,'Household Member is',1,NULL,NULL,NULL), - (256,128,8,'b_a',127,'Household Member is',93,'Household Member of',1,NULL,NULL,NULL), - (257,129,7,'a_b',109,'Head of Household for',127,'Head of Household is',0,NULL,NULL,NULL), - (258,129,7,'b_a',127,'Head of Household is',109,'Head of Household for',0,NULL,NULL,NULL), - (259,130,2,'a_b',65,'Spouse of',109,'Spouse of',0,NULL,NULL,NULL), - (260,130,2,'b_a',109,'Spouse of',65,'Spouse of',0,NULL,NULL,NULL), - (261,131,1,'a_b',5,'Child of',81,'Parent of',1,NULL,NULL,NULL), - (262,131,1,'b_a',81,'Parent of',5,'Child of',1,NULL,NULL,NULL), - (263,132,1,'a_b',21,'Child of',81,'Parent of',1,NULL,NULL,NULL), - (264,132,1,'b_a',81,'Parent of',21,'Child of',1,NULL,NULL,NULL), - (265,133,1,'a_b',5,'Child of',130,'Parent of',1,NULL,NULL,NULL), - (266,133,1,'b_a',130,'Parent of',5,'Child of',1,NULL,NULL,NULL), - (267,134,1,'a_b',21,'Child of',130,'Parent of',1,NULL,NULL,NULL), - (268,134,1,'b_a',130,'Parent of',21,'Child of',1,NULL,NULL,NULL), - (269,135,4,'a_b',21,'Sibling of',5,'Sibling of',1,NULL,NULL,NULL), - (270,135,4,'b_a',5,'Sibling of',21,'Sibling of',1,NULL,NULL,NULL), - (271,136,8,'a_b',130,'Household Member of',41,'Household Member is',1,NULL,NULL,NULL), - (272,136,8,'b_a',41,'Household Member is',130,'Household Member of',1,NULL,NULL,NULL), - (273,137,8,'a_b',5,'Household Member of',41,'Household Member is',1,NULL,NULL,NULL), - (274,137,8,'b_a',41,'Household Member is',5,'Household Member of',1,NULL,NULL,NULL), - (275,138,8,'a_b',21,'Household Member of',41,'Household Member is',1,NULL,NULL,NULL), - (276,138,8,'b_a',41,'Household Member is',21,'Household Member of',1,NULL,NULL,NULL), - (277,139,7,'a_b',81,'Head of Household for',41,'Head of Household is',1,NULL,NULL,NULL), - (278,139,7,'b_a',41,'Head of Household is',81,'Head of Household for',1,NULL,NULL,NULL), - (279,140,2,'a_b',130,'Spouse of',81,'Spouse of',1,NULL,NULL,NULL), - (280,140,2,'b_a',81,'Spouse of',130,'Spouse of',1,NULL,NULL,NULL), - (281,141,1,'a_b',122,'Child of',96,'Parent of',1,NULL,NULL,NULL), - (282,141,1,'b_a',96,'Parent of',122,'Child of',1,NULL,NULL,NULL), - (283,142,1,'a_b',14,'Child of',96,'Parent of',1,NULL,NULL,NULL), - (284,142,1,'b_a',96,'Parent of',14,'Child of',1,NULL,NULL,NULL), - (285,143,1,'a_b',122,'Child of',164,'Parent of',1,NULL,NULL,NULL), - (286,143,1,'b_a',164,'Parent of',122,'Child of',1,NULL,NULL,NULL), - (287,144,1,'a_b',14,'Child of',164,'Parent of',1,NULL,NULL,NULL), - (288,144,1,'b_a',164,'Parent of',14,'Child of',1,NULL,NULL,NULL), - (289,145,4,'a_b',14,'Sibling of',122,'Sibling of',1,NULL,NULL,NULL), - (290,145,4,'b_a',122,'Sibling of',14,'Sibling of',1,NULL,NULL,NULL), - (291,146,8,'a_b',164,'Household Member of',141,'Household Member is',1,NULL,NULL,NULL), - (292,146,8,'b_a',141,'Household Member is',164,'Household Member of',1,NULL,NULL,NULL), - (293,147,8,'a_b',122,'Household Member of',141,'Household Member is',1,NULL,NULL,NULL), - (294,147,8,'b_a',141,'Household Member is',122,'Household Member of',1,NULL,NULL,NULL), - (295,148,8,'a_b',14,'Household Member of',141,'Household Member is',1,NULL,NULL,NULL), - (296,148,8,'b_a',141,'Household Member is',14,'Household Member of',1,NULL,NULL,NULL), - (297,149,7,'a_b',96,'Head of Household for',141,'Head of Household is',1,NULL,NULL,NULL), - (298,149,7,'b_a',141,'Head of Household is',96,'Head of Household for',1,NULL,NULL,NULL), - (299,150,2,'a_b',164,'Spouse of',96,'Spouse of',1,NULL,NULL,NULL), - (300,150,2,'b_a',96,'Spouse of',164,'Spouse of',1,NULL,NULL,NULL), - (301,151,1,'a_b',54,'Child of',61,'Parent of',1,NULL,NULL,NULL), - (302,151,1,'b_a',61,'Parent of',54,'Child of',1,NULL,NULL,NULL), - (303,152,1,'a_b',142,'Child of',61,'Parent of',1,NULL,NULL,NULL), - (304,152,1,'b_a',61,'Parent of',142,'Child of',1,NULL,NULL,NULL), - (305,153,1,'a_b',54,'Child of',146,'Parent of',1,NULL,NULL,NULL), - (306,153,1,'b_a',146,'Parent of',54,'Child of',1,NULL,NULL,NULL), - (307,154,1,'a_b',142,'Child of',146,'Parent of',1,NULL,NULL,NULL), - (308,154,1,'b_a',146,'Parent of',142,'Child of',1,NULL,NULL,NULL), - (309,155,4,'a_b',142,'Sibling of',54,'Sibling of',1,NULL,NULL,NULL), - (310,155,4,'b_a',54,'Sibling of',142,'Sibling of',1,NULL,NULL,NULL), - (311,156,8,'a_b',146,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), - (312,156,8,'b_a',47,'Household Member is',146,'Household Member of',1,NULL,NULL,NULL), - (313,157,8,'a_b',54,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), - (314,157,8,'b_a',47,'Household Member is',54,'Household Member of',1,NULL,NULL,NULL), - (315,158,8,'a_b',142,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), - (316,158,8,'b_a',47,'Household Member is',142,'Household Member of',1,NULL,NULL,NULL), - (317,159,7,'a_b',61,'Head of Household for',47,'Head of Household is',1,NULL,NULL,NULL), - (318,159,7,'b_a',47,'Head of Household is',61,'Head of Household for',1,NULL,NULL,NULL), - (319,160,2,'a_b',146,'Spouse of',61,'Spouse of',1,NULL,NULL,NULL), - (320,160,2,'b_a',61,'Spouse of',146,'Spouse of',1,NULL,NULL,NULL), - (321,161,1,'a_b',190,'Child of',52,'Parent of',1,NULL,NULL,NULL), - (322,161,1,'b_a',52,'Parent of',190,'Child of',1,NULL,NULL,NULL), - (323,162,1,'a_b',174,'Child of',52,'Parent of',1,NULL,NULL,NULL), - (324,162,1,'b_a',52,'Parent of',174,'Child of',1,NULL,NULL,NULL), - (325,163,1,'a_b',190,'Child of',74,'Parent of',1,NULL,NULL,NULL), - (326,163,1,'b_a',74,'Parent of',190,'Child of',1,NULL,NULL,NULL), - (327,164,1,'a_b',174,'Child of',74,'Parent of',1,NULL,NULL,NULL), - (328,164,1,'b_a',74,'Parent of',174,'Child of',1,NULL,NULL,NULL), - (329,165,4,'a_b',174,'Sibling of',190,'Sibling of',1,NULL,NULL,NULL), - (330,165,4,'b_a',190,'Sibling of',174,'Sibling of',1,NULL,NULL,NULL), - (331,166,8,'a_b',74,'Household Member of',169,'Household Member is',1,NULL,NULL,NULL), - (332,166,8,'b_a',169,'Household Member is',74,'Household Member of',1,NULL,NULL,NULL), - (333,167,8,'a_b',190,'Household Member of',169,'Household Member is',1,NULL,NULL,NULL), - (334,167,8,'b_a',169,'Household Member is',190,'Household Member of',1,NULL,NULL,NULL), - (335,168,8,'a_b',174,'Household Member of',169,'Household Member is',1,NULL,NULL,NULL), - (336,168,8,'b_a',169,'Household Member is',174,'Household Member of',1,NULL,NULL,NULL), - (337,169,7,'a_b',52,'Head of Household for',169,'Head of Household is',0,NULL,NULL,NULL), - (338,169,7,'b_a',169,'Head of Household is',52,'Head of Household for',0,NULL,NULL,NULL), - (339,170,2,'a_b',74,'Spouse of',52,'Spouse of',0,NULL,NULL,NULL), - (340,170,2,'b_a',52,'Spouse of',74,'Spouse of',0,NULL,NULL,NULL), - (341,171,1,'a_b',12,'Child of',167,'Parent of',1,NULL,NULL,NULL), - (342,171,1,'b_a',167,'Parent of',12,'Child of',1,NULL,NULL,NULL), - (343,172,1,'a_b',106,'Child of',167,'Parent of',1,NULL,NULL,NULL), - (344,172,1,'b_a',167,'Parent of',106,'Child of',1,NULL,NULL,NULL), - (345,173,1,'a_b',12,'Child of',154,'Parent of',1,NULL,NULL,NULL), - (346,173,1,'b_a',154,'Parent of',12,'Child of',1,NULL,NULL,NULL), - (347,174,1,'a_b',106,'Child of',154,'Parent of',1,NULL,NULL,NULL), - (348,174,1,'b_a',154,'Parent of',106,'Child of',1,NULL,NULL,NULL), - (349,175,4,'a_b',106,'Sibling of',12,'Sibling of',1,NULL,NULL,NULL), - (350,175,4,'b_a',12,'Sibling of',106,'Sibling of',1,NULL,NULL,NULL), - (351,176,8,'a_b',154,'Household Member of',136,'Household Member is',1,NULL,NULL,NULL), - (352,176,8,'b_a',136,'Household Member is',154,'Household Member of',1,NULL,NULL,NULL), - (353,177,8,'a_b',12,'Household Member of',136,'Household Member is',1,NULL,NULL,NULL), - (354,177,8,'b_a',136,'Household Member is',12,'Household Member of',1,NULL,NULL,NULL), - (355,178,8,'a_b',106,'Household Member of',136,'Household Member is',1,NULL,NULL,NULL), - (356,178,8,'b_a',136,'Household Member is',106,'Household Member of',1,NULL,NULL,NULL), - (357,179,7,'a_b',167,'Head of Household for',136,'Head of Household is',1,NULL,NULL,NULL), - (358,179,7,'b_a',136,'Head of Household is',167,'Head of Household for',1,NULL,NULL,NULL), - (359,180,2,'a_b',154,'Spouse of',167,'Spouse of',1,NULL,NULL,NULL), - (360,180,2,'b_a',167,'Spouse of',154,'Spouse of',1,NULL,NULL,NULL), - (361,181,1,'a_b',55,'Child of',101,'Parent of',1,NULL,NULL,NULL), - (362,181,1,'b_a',101,'Parent of',55,'Child of',1,NULL,NULL,NULL), - (363,182,1,'a_b',133,'Child of',101,'Parent of',1,NULL,NULL,NULL), - (364,182,1,'b_a',101,'Parent of',133,'Child of',1,NULL,NULL,NULL), - (365,183,1,'a_b',55,'Child of',121,'Parent of',1,NULL,NULL,NULL), - (366,183,1,'b_a',121,'Parent of',55,'Child of',1,NULL,NULL,NULL), - (367,184,1,'a_b',133,'Child of',121,'Parent of',1,NULL,NULL,NULL), - (368,184,1,'b_a',121,'Parent of',133,'Child of',1,NULL,NULL,NULL), - (369,185,4,'a_b',133,'Sibling of',55,'Sibling of',1,NULL,NULL,NULL), - (370,185,4,'b_a',55,'Sibling of',133,'Sibling of',1,NULL,NULL,NULL), - (371,186,8,'a_b',121,'Household Member of',73,'Household Member is',1,NULL,NULL,NULL), - (372,186,8,'b_a',73,'Household Member is',121,'Household Member of',1,NULL,NULL,NULL), - (373,187,8,'a_b',55,'Household Member of',73,'Household Member is',1,NULL,NULL,NULL), - (374,187,8,'b_a',73,'Household Member is',55,'Household Member of',1,NULL,NULL,NULL), - (375,188,8,'a_b',133,'Household Member of',73,'Household Member is',1,NULL,NULL,NULL), - (376,188,8,'b_a',73,'Household Member is',133,'Household Member of',1,NULL,NULL,NULL), - (377,189,7,'a_b',101,'Head of Household for',73,'Head of Household is',1,NULL,NULL,NULL), - (378,189,7,'b_a',73,'Head of Household is',101,'Head of Household for',1,NULL,NULL,NULL), - (379,190,2,'a_b',121,'Spouse of',101,'Spouse of',1,NULL,NULL,NULL), - (380,190,2,'b_a',101,'Spouse of',121,'Spouse of',1,NULL,NULL,NULL), - (381,191,1,'a_b',113,'Child of',44,'Parent of',1,NULL,NULL,NULL), - (382,191,1,'b_a',44,'Parent of',113,'Child of',1,NULL,NULL,NULL), - (383,192,1,'a_b',33,'Child of',44,'Parent of',1,NULL,NULL,NULL), - (384,192,1,'b_a',44,'Parent of',33,'Child of',1,NULL,NULL,NULL), - (385,193,1,'a_b',113,'Child of',132,'Parent of',1,NULL,NULL,NULL), - (386,193,1,'b_a',132,'Parent of',113,'Child of',1,NULL,NULL,NULL), - (387,194,1,'a_b',33,'Child of',132,'Parent of',1,NULL,NULL,NULL), - (388,194,1,'b_a',132,'Parent of',33,'Child of',1,NULL,NULL,NULL), - (389,195,4,'a_b',33,'Sibling of',113,'Sibling of',1,NULL,NULL,NULL), - (390,195,4,'b_a',113,'Sibling of',33,'Sibling of',1,NULL,NULL,NULL), - (391,196,8,'a_b',132,'Household Member of',135,'Household Member is',1,NULL,NULL,NULL), - (392,196,8,'b_a',135,'Household Member is',132,'Household Member of',1,NULL,NULL,NULL), - (393,197,8,'a_b',113,'Household Member of',135,'Household Member is',1,NULL,NULL,NULL), - (394,197,8,'b_a',135,'Household Member is',113,'Household Member of',1,NULL,NULL,NULL), - (395,198,8,'a_b',33,'Household Member of',135,'Household Member is',1,NULL,NULL,NULL), - (396,198,8,'b_a',135,'Household Member is',33,'Household Member of',1,NULL,NULL,NULL), - (397,199,7,'a_b',44,'Head of Household for',135,'Head of Household is',1,NULL,NULL,NULL), - (398,199,7,'b_a',135,'Head of Household is',44,'Head of Household for',1,NULL,NULL,NULL), - (399,200,2,'a_b',132,'Spouse of',44,'Spouse of',1,NULL,NULL,NULL), - (400,200,2,'b_a',44,'Spouse of',132,'Spouse of',1,NULL,NULL,NULL), - (401,201,5,'a_b',167,'Employee of',17,'Employer of',1,NULL,NULL,NULL), - (402,201,5,'b_a',17,'Employer of',167,'Employee of',1,NULL,NULL,NULL), - (403,202,5,'a_b',110,'Employee of',45,'Employer of',1,NULL,NULL,NULL), - (404,202,5,'b_a',45,'Employer of',110,'Employee of',1,NULL,NULL,NULL), - (405,203,5,'a_b',19,'Employee of',66,'Employer of',1,NULL,NULL,NULL), - (406,203,5,'b_a',66,'Employer of',19,'Employee of',1,NULL,NULL,NULL), - (407,204,5,'a_b',2,'Employee of',72,'Employer of',1,NULL,NULL,NULL), - (408,204,5,'b_a',72,'Employer of',2,'Employee of',1,NULL,NULL,NULL), - (409,205,5,'a_b',60,'Employee of',77,'Employer of',1,NULL,NULL,NULL), - (410,205,5,'b_a',77,'Employer of',60,'Employee of',1,NULL,NULL,NULL), - (411,206,5,'a_b',65,'Employee of',79,'Employer of',1,NULL,NULL,NULL), - (412,206,5,'b_a',79,'Employer of',65,'Employee of',1,NULL,NULL,NULL), - (413,207,5,'a_b',186,'Employee of',84,'Employer of',1,NULL,NULL,NULL), - (414,207,5,'b_a',84,'Employer of',186,'Employee of',1,NULL,NULL,NULL), - (415,208,5,'a_b',185,'Employee of',108,'Employer of',1,NULL,NULL,NULL), - (416,208,5,'b_a',108,'Employer of',185,'Employee of',1,NULL,NULL,NULL), - (417,209,5,'a_b',150,'Employee of',114,'Employer of',1,NULL,NULL,NULL), - (418,209,5,'b_a',114,'Employer of',150,'Employee of',1,NULL,NULL,NULL), - (419,210,5,'a_b',162,'Employee of',119,'Employer of',1,NULL,NULL,NULL), - (420,210,5,'b_a',119,'Employer of',162,'Employee of',1,NULL,NULL,NULL), - (421,211,5,'a_b',51,'Employee of',128,'Employer of',1,NULL,NULL,NULL), - (422,211,5,'b_a',128,'Employer of',51,'Employee of',1,NULL,NULL,NULL), - (423,212,5,'a_b',13,'Employee of',129,'Employer of',1,NULL,NULL,NULL), - (424,212,5,'b_a',129,'Employer of',13,'Employee of',1,NULL,NULL,NULL), - (425,213,5,'a_b',189,'Employee of',145,'Employer of',1,NULL,NULL,NULL), - (426,213,5,'b_a',145,'Employer of',189,'Employee of',1,NULL,NULL,NULL), - (427,214,5,'a_b',88,'Employee of',155,'Employer of',1,NULL,NULL,NULL), - (428,214,5,'b_a',155,'Employer of',88,'Employee of',1,NULL,NULL,NULL), - (429,215,5,'a_b',132,'Employee of',159,'Employer of',1,NULL,NULL,NULL), - (430,215,5,'b_a',159,'Employer of',132,'Employee of',1,NULL,NULL,NULL), - (431,216,5,'a_b',46,'Employee of',168,'Employer of',1,NULL,NULL,NULL), - (432,216,5,'b_a',168,'Employer of',46,'Employee of',1,NULL,NULL,NULL), - (433,217,5,'a_b',25,'Employee of',193,'Employer of',1,NULL,NULL,NULL), - (434,217,5,'b_a',193,'Employer of',25,'Employee of',1,NULL,NULL,NULL); + (1,1,1,'a_b',60,'Child of',7,'Parent of',1,NULL,NULL,NULL), + (2,1,1,'b_a',7,'Parent of',60,'Child of',1,NULL,NULL,NULL), + (3,2,1,'a_b',129,'Child of',7,'Parent of',1,NULL,NULL,NULL), + (4,2,1,'b_a',7,'Parent of',129,'Child of',1,NULL,NULL,NULL), + (5,3,1,'a_b',60,'Child of',82,'Parent of',1,NULL,NULL,NULL), + (6,3,1,'b_a',82,'Parent of',60,'Child of',1,NULL,NULL,NULL), + (7,4,1,'a_b',129,'Child of',82,'Parent of',1,NULL,NULL,NULL), + (8,4,1,'b_a',82,'Parent of',129,'Child of',1,NULL,NULL,NULL), + (9,5,4,'a_b',129,'Sibling of',60,'Sibling of',1,NULL,NULL,NULL), + (10,5,4,'b_a',60,'Sibling of',129,'Sibling of',1,NULL,NULL,NULL), + (11,6,8,'a_b',82,'Household Member of',6,'Household Member is',1,NULL,NULL,NULL), + (12,6,8,'b_a',6,'Household Member is',82,'Household Member of',1,NULL,NULL,NULL), + (13,7,8,'a_b',60,'Household Member of',6,'Household Member is',1,NULL,NULL,NULL), + (14,7,8,'b_a',6,'Household Member is',60,'Household Member of',1,NULL,NULL,NULL), + (15,8,8,'a_b',129,'Household Member of',6,'Household Member is',1,NULL,NULL,NULL), + (16,8,8,'b_a',6,'Household Member is',129,'Household Member of',1,NULL,NULL,NULL), + (17,9,7,'a_b',7,'Head of Household for',6,'Head of Household is',1,NULL,NULL,NULL), + (18,9,7,'b_a',6,'Head of Household is',7,'Head of Household for',1,NULL,NULL,NULL), + (19,10,2,'a_b',82,'Spouse of',7,'Spouse of',1,NULL,NULL,NULL), + (20,10,2,'b_a',7,'Spouse of',82,'Spouse of',1,NULL,NULL,NULL), + (21,11,1,'a_b',171,'Child of',14,'Parent of',1,NULL,NULL,NULL), + (22,11,1,'b_a',14,'Parent of',171,'Child of',1,NULL,NULL,NULL), + (23,12,1,'a_b',189,'Child of',14,'Parent of',1,NULL,NULL,NULL), + (24,12,1,'b_a',14,'Parent of',189,'Child of',1,NULL,NULL,NULL), + (25,13,1,'a_b',171,'Child of',86,'Parent of',1,NULL,NULL,NULL), + (26,13,1,'b_a',86,'Parent of',171,'Child of',1,NULL,NULL,NULL), + (27,14,1,'a_b',189,'Child of',86,'Parent of',1,NULL,NULL,NULL), + (28,14,1,'b_a',86,'Parent of',189,'Child of',1,NULL,NULL,NULL), + (29,15,4,'a_b',189,'Sibling of',171,'Sibling of',1,NULL,NULL,NULL), + (30,15,4,'b_a',171,'Sibling of',189,'Sibling of',1,NULL,NULL,NULL), + (31,16,8,'a_b',86,'Household Member of',125,'Household Member is',1,NULL,NULL,NULL), + (32,16,8,'b_a',125,'Household Member is',86,'Household Member of',1,NULL,NULL,NULL), + (33,17,8,'a_b',171,'Household Member of',125,'Household Member is',1,NULL,NULL,NULL), + (34,17,8,'b_a',125,'Household Member is',171,'Household Member of',1,NULL,NULL,NULL), + (35,18,8,'a_b',189,'Household Member of',125,'Household Member is',1,NULL,NULL,NULL), + (36,18,8,'b_a',125,'Household Member is',189,'Household Member of',1,NULL,NULL,NULL), + (37,19,7,'a_b',14,'Head of Household for',125,'Head of Household is',1,NULL,NULL,NULL), + (38,19,7,'b_a',125,'Head of Household is',14,'Head of Household for',1,NULL,NULL,NULL), + (39,20,2,'a_b',86,'Spouse of',14,'Spouse of',1,NULL,NULL,NULL), + (40,20,2,'b_a',14,'Spouse of',86,'Spouse of',1,NULL,NULL,NULL), + (41,21,1,'a_b',113,'Child of',53,'Parent of',1,NULL,NULL,NULL), + (42,21,1,'b_a',53,'Parent of',113,'Child of',1,NULL,NULL,NULL), + (43,22,1,'a_b',155,'Child of',53,'Parent of',1,NULL,NULL,NULL), + (44,22,1,'b_a',53,'Parent of',155,'Child of',1,NULL,NULL,NULL), + (45,23,1,'a_b',113,'Child of',145,'Parent of',1,NULL,NULL,NULL), + (46,23,1,'b_a',145,'Parent of',113,'Child of',1,NULL,NULL,NULL), + (47,24,1,'a_b',155,'Child of',145,'Parent of',1,NULL,NULL,NULL), + (48,24,1,'b_a',145,'Parent of',155,'Child of',1,NULL,NULL,NULL), + (49,25,4,'a_b',155,'Sibling of',113,'Sibling of',1,NULL,NULL,NULL), + (50,25,4,'b_a',113,'Sibling of',155,'Sibling of',1,NULL,NULL,NULL), + (51,26,8,'a_b',145,'Household Member of',55,'Household Member is',1,NULL,NULL,NULL), + (52,26,8,'b_a',55,'Household Member is',145,'Household Member of',1,NULL,NULL,NULL), + (53,27,8,'a_b',113,'Household Member of',55,'Household Member is',1,NULL,NULL,NULL), + (54,27,8,'b_a',55,'Household Member is',113,'Household Member of',1,NULL,NULL,NULL), + (55,28,8,'a_b',155,'Household Member of',55,'Household Member is',1,NULL,NULL,NULL), + (56,28,8,'b_a',55,'Household Member is',155,'Household Member of',1,NULL,NULL,NULL), + (57,29,7,'a_b',53,'Head of Household for',55,'Head of Household is',1,NULL,NULL,NULL), + (58,29,7,'b_a',55,'Head of Household is',53,'Head of Household for',1,NULL,NULL,NULL), + (59,30,2,'a_b',145,'Spouse of',53,'Spouse of',1,NULL,NULL,NULL), + (60,30,2,'b_a',53,'Spouse of',145,'Spouse of',1,NULL,NULL,NULL), + (61,31,1,'a_b',90,'Child of',119,'Parent of',1,NULL,NULL,NULL), + (62,31,1,'b_a',119,'Parent of',90,'Child of',1,NULL,NULL,NULL), + (63,32,1,'a_b',81,'Child of',119,'Parent of',1,NULL,NULL,NULL), + (64,32,1,'b_a',119,'Parent of',81,'Child of',1,NULL,NULL,NULL), + (65,33,1,'a_b',90,'Child of',85,'Parent of',1,NULL,NULL,NULL), + (66,33,1,'b_a',85,'Parent of',90,'Child of',1,NULL,NULL,NULL), + (67,34,1,'a_b',81,'Child of',85,'Parent of',1,NULL,NULL,NULL), + (68,34,1,'b_a',85,'Parent of',81,'Child of',1,NULL,NULL,NULL), + (69,35,4,'a_b',81,'Sibling of',90,'Sibling of',1,NULL,NULL,NULL), + (70,35,4,'b_a',90,'Sibling of',81,'Sibling of',1,NULL,NULL,NULL), + (71,36,8,'a_b',85,'Household Member of',156,'Household Member is',1,NULL,NULL,NULL), + (72,36,8,'b_a',156,'Household Member is',85,'Household Member of',1,NULL,NULL,NULL), + (73,37,8,'a_b',90,'Household Member of',156,'Household Member is',1,NULL,NULL,NULL), + (74,37,8,'b_a',156,'Household Member is',90,'Household Member of',1,NULL,NULL,NULL), + (75,38,8,'a_b',81,'Household Member of',156,'Household Member is',1,NULL,NULL,NULL), + (76,38,8,'b_a',156,'Household Member is',81,'Household Member of',1,NULL,NULL,NULL), + (77,39,7,'a_b',119,'Head of Household for',156,'Head of Household is',1,NULL,NULL,NULL), + (78,39,7,'b_a',156,'Head of Household is',119,'Head of Household for',1,NULL,NULL,NULL), + (79,40,2,'a_b',85,'Spouse of',119,'Spouse of',1,NULL,NULL,NULL), + (80,40,2,'b_a',119,'Spouse of',85,'Spouse of',1,NULL,NULL,NULL), + (81,41,1,'a_b',2,'Child of',154,'Parent of',1,NULL,NULL,NULL), + (82,41,1,'b_a',154,'Parent of',2,'Child of',1,NULL,NULL,NULL), + (83,42,1,'a_b',117,'Child of',154,'Parent of',1,NULL,NULL,NULL), + (84,42,1,'b_a',154,'Parent of',117,'Child of',1,NULL,NULL,NULL), + (85,43,1,'a_b',2,'Child of',176,'Parent of',1,NULL,NULL,NULL), + (86,43,1,'b_a',176,'Parent of',2,'Child of',1,NULL,NULL,NULL), + (87,44,1,'a_b',117,'Child of',176,'Parent of',1,NULL,NULL,NULL), + (88,44,1,'b_a',176,'Parent of',117,'Child of',1,NULL,NULL,NULL), + (89,45,4,'a_b',117,'Sibling of',2,'Sibling of',1,NULL,NULL,NULL), + (90,45,4,'b_a',2,'Sibling of',117,'Sibling of',1,NULL,NULL,NULL), + (91,46,8,'a_b',176,'Household Member of',51,'Household Member is',1,NULL,NULL,NULL), + (92,46,8,'b_a',51,'Household Member is',176,'Household Member of',1,NULL,NULL,NULL), + (93,47,8,'a_b',2,'Household Member of',51,'Household Member is',1,NULL,NULL,NULL), + (94,47,8,'b_a',51,'Household Member is',2,'Household Member of',1,NULL,NULL,NULL), + (95,48,8,'a_b',117,'Household Member of',51,'Household Member is',1,NULL,NULL,NULL), + (96,48,8,'b_a',51,'Household Member is',117,'Household Member of',1,NULL,NULL,NULL), + (97,49,7,'a_b',154,'Head of Household for',51,'Head of Household is',1,NULL,NULL,NULL), + (98,49,7,'b_a',51,'Head of Household is',154,'Head of Household for',1,NULL,NULL,NULL), + (99,50,2,'a_b',176,'Spouse of',154,'Spouse of',1,NULL,NULL,NULL), + (100,50,2,'b_a',154,'Spouse of',176,'Spouse of',1,NULL,NULL,NULL), + (101,51,1,'a_b',99,'Child of',97,'Parent of',1,NULL,NULL,NULL), + (102,51,1,'b_a',97,'Parent of',99,'Child of',1,NULL,NULL,NULL), + (103,52,1,'a_b',89,'Child of',97,'Parent of',1,NULL,NULL,NULL), + (104,52,1,'b_a',97,'Parent of',89,'Child of',1,NULL,NULL,NULL), + (105,53,1,'a_b',99,'Child of',59,'Parent of',1,NULL,NULL,NULL), + (106,53,1,'b_a',59,'Parent of',99,'Child of',1,NULL,NULL,NULL), + (107,54,1,'a_b',89,'Child of',59,'Parent of',1,NULL,NULL,NULL), + (108,54,1,'b_a',59,'Parent of',89,'Child of',1,NULL,NULL,NULL), + (109,55,4,'a_b',89,'Sibling of',99,'Sibling of',1,NULL,NULL,NULL), + (110,55,4,'b_a',99,'Sibling of',89,'Sibling of',1,NULL,NULL,NULL), + (111,56,8,'a_b',59,'Household Member of',34,'Household Member is',1,NULL,NULL,NULL), + (112,56,8,'b_a',34,'Household Member is',59,'Household Member of',1,NULL,NULL,NULL), + (113,57,8,'a_b',99,'Household Member of',34,'Household Member is',1,NULL,NULL,NULL), + (114,57,8,'b_a',34,'Household Member is',99,'Household Member of',1,NULL,NULL,NULL), + (115,58,8,'a_b',89,'Household Member of',34,'Household Member is',1,NULL,NULL,NULL), + (116,58,8,'b_a',34,'Household Member is',89,'Household Member of',1,NULL,NULL,NULL), + (117,59,7,'a_b',97,'Head of Household for',34,'Head of Household is',1,NULL,NULL,NULL), + (118,59,7,'b_a',34,'Head of Household is',97,'Head of Household for',1,NULL,NULL,NULL), + (119,60,2,'a_b',59,'Spouse of',97,'Spouse of',1,NULL,NULL,NULL), + (120,60,2,'b_a',97,'Spouse of',59,'Spouse of',1,NULL,NULL,NULL), + (121,61,1,'a_b',133,'Child of',153,'Parent of',1,NULL,NULL,NULL), + (122,61,1,'b_a',153,'Parent of',133,'Child of',1,NULL,NULL,NULL), + (123,62,1,'a_b',46,'Child of',153,'Parent of',1,NULL,NULL,NULL), + (124,62,1,'b_a',153,'Parent of',46,'Child of',1,NULL,NULL,NULL), + (125,63,1,'a_b',133,'Child of',168,'Parent of',1,NULL,NULL,NULL), + (126,63,1,'b_a',168,'Parent of',133,'Child of',1,NULL,NULL,NULL), + (127,64,1,'a_b',46,'Child of',168,'Parent of',1,NULL,NULL,NULL), + (128,64,1,'b_a',168,'Parent of',46,'Child of',1,NULL,NULL,NULL), + (129,65,4,'a_b',46,'Sibling of',133,'Sibling of',1,NULL,NULL,NULL), + (130,65,4,'b_a',133,'Sibling of',46,'Sibling of',1,NULL,NULL,NULL), + (131,66,8,'a_b',168,'Household Member of',56,'Household Member is',1,NULL,NULL,NULL), + (132,66,8,'b_a',56,'Household Member is',168,'Household Member of',1,NULL,NULL,NULL), + (133,67,8,'a_b',133,'Household Member of',56,'Household Member is',1,NULL,NULL,NULL), + (134,67,8,'b_a',56,'Household Member is',133,'Household Member of',1,NULL,NULL,NULL), + (135,68,8,'a_b',46,'Household Member of',56,'Household Member is',1,NULL,NULL,NULL), + (136,68,8,'b_a',56,'Household Member is',46,'Household Member of',1,NULL,NULL,NULL), + (137,69,7,'a_b',153,'Head of Household for',56,'Head of Household is',1,NULL,NULL,NULL), + (138,69,7,'b_a',56,'Head of Household is',153,'Head of Household for',1,NULL,NULL,NULL), + (139,70,2,'a_b',168,'Spouse of',153,'Spouse of',1,NULL,NULL,NULL), + (140,70,2,'b_a',153,'Spouse of',168,'Spouse of',1,NULL,NULL,NULL), + (141,71,1,'a_b',166,'Child of',108,'Parent of',1,NULL,NULL,NULL), + (142,71,1,'b_a',108,'Parent of',166,'Child of',1,NULL,NULL,NULL), + (143,72,1,'a_b',135,'Child of',108,'Parent of',1,NULL,NULL,NULL), + (144,72,1,'b_a',108,'Parent of',135,'Child of',1,NULL,NULL,NULL), + (145,73,1,'a_b',166,'Child of',16,'Parent of',1,NULL,NULL,NULL), + (146,73,1,'b_a',16,'Parent of',166,'Child of',1,NULL,NULL,NULL), + (147,74,1,'a_b',135,'Child of',16,'Parent of',1,NULL,NULL,NULL), + (148,74,1,'b_a',16,'Parent of',135,'Child of',1,NULL,NULL,NULL), + (149,75,4,'a_b',135,'Sibling of',166,'Sibling of',1,NULL,NULL,NULL), + (150,75,4,'b_a',166,'Sibling of',135,'Sibling of',1,NULL,NULL,NULL), + (151,76,8,'a_b',16,'Household Member of',96,'Household Member is',1,NULL,NULL,NULL), + (152,76,8,'b_a',96,'Household Member is',16,'Household Member of',1,NULL,NULL,NULL), + (153,77,8,'a_b',166,'Household Member of',96,'Household Member is',1,NULL,NULL,NULL), + (154,77,8,'b_a',96,'Household Member is',166,'Household Member of',1,NULL,NULL,NULL), + (155,78,8,'a_b',135,'Household Member of',96,'Household Member is',1,NULL,NULL,NULL), + (156,78,8,'b_a',96,'Household Member is',135,'Household Member of',1,NULL,NULL,NULL), + (157,79,7,'a_b',108,'Head of Household for',96,'Head of Household is',0,NULL,NULL,NULL), + (158,79,7,'b_a',96,'Head of Household is',108,'Head of Household for',0,NULL,NULL,NULL), + (159,80,2,'a_b',16,'Spouse of',108,'Spouse of',0,NULL,NULL,NULL), + (160,80,2,'b_a',108,'Spouse of',16,'Spouse of',0,NULL,NULL,NULL), + (161,81,1,'a_b',180,'Child of',63,'Parent of',1,NULL,NULL,NULL), + (162,81,1,'b_a',63,'Parent of',180,'Child of',1,NULL,NULL,NULL), + (163,82,1,'a_b',11,'Child of',63,'Parent of',1,NULL,NULL,NULL), + (164,82,1,'b_a',63,'Parent of',11,'Child of',1,NULL,NULL,NULL), + (165,83,1,'a_b',180,'Child of',74,'Parent of',1,NULL,NULL,NULL), + (166,83,1,'b_a',74,'Parent of',180,'Child of',1,NULL,NULL,NULL), + (167,84,1,'a_b',11,'Child of',74,'Parent of',1,NULL,NULL,NULL), + (168,84,1,'b_a',74,'Parent of',11,'Child of',1,NULL,NULL,NULL), + (169,85,4,'a_b',11,'Sibling of',180,'Sibling of',1,NULL,NULL,NULL), + (170,85,4,'b_a',180,'Sibling of',11,'Sibling of',1,NULL,NULL,NULL), + (171,86,8,'a_b',74,'Household Member of',124,'Household Member is',1,NULL,NULL,NULL), + (172,86,8,'b_a',124,'Household Member is',74,'Household Member of',1,NULL,NULL,NULL), + (173,87,8,'a_b',180,'Household Member of',124,'Household Member is',1,NULL,NULL,NULL), + (174,87,8,'b_a',124,'Household Member is',180,'Household Member of',1,NULL,NULL,NULL), + (175,88,8,'a_b',11,'Household Member of',124,'Household Member is',1,NULL,NULL,NULL), + (176,88,8,'b_a',124,'Household Member is',11,'Household Member of',1,NULL,NULL,NULL), + (177,89,7,'a_b',63,'Head of Household for',124,'Head of Household is',0,NULL,NULL,NULL), + (178,89,7,'b_a',124,'Head of Household is',63,'Head of Household for',0,NULL,NULL,NULL), + (179,90,2,'a_b',74,'Spouse of',63,'Spouse of',0,NULL,NULL,NULL), + (180,90,2,'b_a',63,'Spouse of',74,'Spouse of',0,NULL,NULL,NULL), + (181,91,1,'a_b',200,'Child of',134,'Parent of',1,NULL,NULL,NULL), + (182,91,1,'b_a',134,'Parent of',200,'Child of',1,NULL,NULL,NULL), + (183,92,1,'a_b',102,'Child of',134,'Parent of',1,NULL,NULL,NULL), + (184,92,1,'b_a',134,'Parent of',102,'Child of',1,NULL,NULL,NULL), + (185,93,1,'a_b',200,'Child of',148,'Parent of',1,NULL,NULL,NULL), + (186,93,1,'b_a',148,'Parent of',200,'Child of',1,NULL,NULL,NULL), + (187,94,1,'a_b',102,'Child of',148,'Parent of',1,NULL,NULL,NULL), + (188,94,1,'b_a',148,'Parent of',102,'Child of',1,NULL,NULL,NULL), + (189,95,4,'a_b',102,'Sibling of',200,'Sibling of',1,NULL,NULL,NULL), + (190,95,4,'b_a',200,'Sibling of',102,'Sibling of',1,NULL,NULL,NULL), + (191,96,8,'a_b',148,'Household Member of',183,'Household Member is',1,NULL,NULL,NULL), + (192,96,8,'b_a',183,'Household Member is',148,'Household Member of',1,NULL,NULL,NULL), + (193,97,8,'a_b',200,'Household Member of',183,'Household Member is',1,NULL,NULL,NULL), + (194,97,8,'b_a',183,'Household Member is',200,'Household Member of',1,NULL,NULL,NULL), + (195,98,8,'a_b',102,'Household Member of',183,'Household Member is',1,NULL,NULL,NULL), + (196,98,8,'b_a',183,'Household Member is',102,'Household Member of',1,NULL,NULL,NULL), + (197,99,7,'a_b',134,'Head of Household for',183,'Head of Household is',1,NULL,NULL,NULL), + (198,99,7,'b_a',183,'Head of Household is',134,'Head of Household for',1,NULL,NULL,NULL), + (199,100,2,'a_b',148,'Spouse of',134,'Spouse of',1,NULL,NULL,NULL), + (200,100,2,'b_a',134,'Spouse of',148,'Spouse of',1,NULL,NULL,NULL), + (201,101,1,'a_b',109,'Child of',186,'Parent of',1,NULL,NULL,NULL), + (202,101,1,'b_a',186,'Parent of',109,'Child of',1,NULL,NULL,NULL), + (203,102,1,'a_b',187,'Child of',186,'Parent of',1,NULL,NULL,NULL), + (204,102,1,'b_a',186,'Parent of',187,'Child of',1,NULL,NULL,NULL), + (205,103,1,'a_b',109,'Child of',118,'Parent of',1,NULL,NULL,NULL), + (206,103,1,'b_a',118,'Parent of',109,'Child of',1,NULL,NULL,NULL), + (207,104,1,'a_b',187,'Child of',118,'Parent of',1,NULL,NULL,NULL), + (208,104,1,'b_a',118,'Parent of',187,'Child of',1,NULL,NULL,NULL), + (209,105,4,'a_b',187,'Sibling of',109,'Sibling of',1,NULL,NULL,NULL), + (210,105,4,'b_a',109,'Sibling of',187,'Sibling of',1,NULL,NULL,NULL), + (211,106,8,'a_b',118,'Household Member of',31,'Household Member is',1,NULL,NULL,NULL), + (212,106,8,'b_a',31,'Household Member is',118,'Household Member of',1,NULL,NULL,NULL), + (213,107,8,'a_b',109,'Household Member of',31,'Household Member is',1,NULL,NULL,NULL), + (214,107,8,'b_a',31,'Household Member is',109,'Household Member of',1,NULL,NULL,NULL), + (215,108,8,'a_b',187,'Household Member of',31,'Household Member is',1,NULL,NULL,NULL), + (216,108,8,'b_a',31,'Household Member is',187,'Household Member of',1,NULL,NULL,NULL), + (217,109,7,'a_b',186,'Head of Household for',31,'Head of Household is',0,NULL,NULL,NULL), + (218,109,7,'b_a',31,'Head of Household is',186,'Head of Household for',0,NULL,NULL,NULL), + (219,110,2,'a_b',118,'Spouse of',186,'Spouse of',0,NULL,NULL,NULL), + (220,110,2,'b_a',186,'Spouse of',118,'Spouse of',0,NULL,NULL,NULL), + (221,111,1,'a_b',57,'Child of',195,'Parent of',1,NULL,NULL,NULL), + (222,111,1,'b_a',195,'Parent of',57,'Child of',1,NULL,NULL,NULL), + (223,112,1,'a_b',52,'Child of',195,'Parent of',1,NULL,NULL,NULL), + (224,112,1,'b_a',195,'Parent of',52,'Child of',1,NULL,NULL,NULL), + (225,113,1,'a_b',57,'Child of',49,'Parent of',1,NULL,NULL,NULL), + (226,113,1,'b_a',49,'Parent of',57,'Child of',1,NULL,NULL,NULL), + (227,114,1,'a_b',52,'Child of',49,'Parent of',1,NULL,NULL,NULL), + (228,114,1,'b_a',49,'Parent of',52,'Child of',1,NULL,NULL,NULL), + (229,115,4,'a_b',52,'Sibling of',57,'Sibling of',1,NULL,NULL,NULL), + (230,115,4,'b_a',57,'Sibling of',52,'Sibling of',1,NULL,NULL,NULL), + (231,116,8,'a_b',49,'Household Member of',122,'Household Member is',1,NULL,NULL,NULL), + (232,116,8,'b_a',122,'Household Member is',49,'Household Member of',1,NULL,NULL,NULL), + (233,117,8,'a_b',57,'Household Member of',122,'Household Member is',1,NULL,NULL,NULL), + (234,117,8,'b_a',122,'Household Member is',57,'Household Member of',1,NULL,NULL,NULL), + (235,118,8,'a_b',52,'Household Member of',122,'Household Member is',1,NULL,NULL,NULL), + (236,118,8,'b_a',122,'Household Member is',52,'Household Member of',1,NULL,NULL,NULL), + (237,119,7,'a_b',195,'Head of Household for',122,'Head of Household is',1,NULL,NULL,NULL), + (238,119,7,'b_a',122,'Head of Household is',195,'Head of Household for',1,NULL,NULL,NULL), + (239,120,2,'a_b',49,'Spouse of',195,'Spouse of',1,NULL,NULL,NULL), + (240,120,2,'b_a',195,'Spouse of',49,'Spouse of',1,NULL,NULL,NULL), + (241,121,1,'a_b',48,'Child of',20,'Parent of',1,NULL,NULL,NULL), + (242,121,1,'b_a',20,'Parent of',48,'Child of',1,NULL,NULL,NULL), + (243,122,1,'a_b',131,'Child of',20,'Parent of',1,NULL,NULL,NULL), + (244,122,1,'b_a',20,'Parent of',131,'Child of',1,NULL,NULL,NULL), + (245,123,1,'a_b',48,'Child of',140,'Parent of',1,NULL,NULL,NULL), + (246,123,1,'b_a',140,'Parent of',48,'Child of',1,NULL,NULL,NULL), + (247,124,1,'a_b',131,'Child of',140,'Parent of',1,NULL,NULL,NULL), + (248,124,1,'b_a',140,'Parent of',131,'Child of',1,NULL,NULL,NULL), + (249,125,4,'a_b',131,'Sibling of',48,'Sibling of',1,NULL,NULL,NULL), + (250,125,4,'b_a',48,'Sibling of',131,'Sibling of',1,NULL,NULL,NULL), + (251,126,8,'a_b',140,'Household Member of',64,'Household Member is',1,NULL,NULL,NULL), + (252,126,8,'b_a',64,'Household Member is',140,'Household Member of',1,NULL,NULL,NULL), + (253,127,8,'a_b',48,'Household Member of',64,'Household Member is',1,NULL,NULL,NULL), + (254,127,8,'b_a',64,'Household Member is',48,'Household Member of',1,NULL,NULL,NULL), + (255,128,8,'a_b',131,'Household Member of',64,'Household Member is',1,NULL,NULL,NULL), + (256,128,8,'b_a',64,'Household Member is',131,'Household Member of',1,NULL,NULL,NULL), + (257,129,7,'a_b',20,'Head of Household for',64,'Head of Household is',1,NULL,NULL,NULL), + (258,129,7,'b_a',64,'Head of Household is',20,'Head of Household for',1,NULL,NULL,NULL), + (259,130,2,'a_b',140,'Spouse of',20,'Spouse of',1,NULL,NULL,NULL), + (260,130,2,'b_a',20,'Spouse of',140,'Spouse of',1,NULL,NULL,NULL), + (261,131,1,'a_b',162,'Child of',78,'Parent of',1,NULL,NULL,NULL), + (262,131,1,'b_a',78,'Parent of',162,'Child of',1,NULL,NULL,NULL), + (263,132,1,'a_b',4,'Child of',78,'Parent of',1,NULL,NULL,NULL), + (264,132,1,'b_a',78,'Parent of',4,'Child of',1,NULL,NULL,NULL), + (265,133,1,'a_b',162,'Child of',37,'Parent of',1,NULL,NULL,NULL), + (266,133,1,'b_a',37,'Parent of',162,'Child of',1,NULL,NULL,NULL), + (267,134,1,'a_b',4,'Child of',37,'Parent of',1,NULL,NULL,NULL), + (268,134,1,'b_a',37,'Parent of',4,'Child of',1,NULL,NULL,NULL), + (269,135,4,'a_b',4,'Sibling of',162,'Sibling of',1,NULL,NULL,NULL), + (270,135,4,'b_a',162,'Sibling of',4,'Sibling of',1,NULL,NULL,NULL), + (271,136,8,'a_b',37,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), + (272,136,8,'b_a',47,'Household Member is',37,'Household Member of',1,NULL,NULL,NULL), + (273,137,8,'a_b',162,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), + (274,137,8,'b_a',47,'Household Member is',162,'Household Member of',1,NULL,NULL,NULL), + (275,138,8,'a_b',4,'Household Member of',47,'Household Member is',1,NULL,NULL,NULL), + (276,138,8,'b_a',47,'Household Member is',4,'Household Member of',1,NULL,NULL,NULL), + (277,139,7,'a_b',78,'Head of Household for',47,'Head of Household is',1,NULL,NULL,NULL), + (278,139,7,'b_a',47,'Head of Household is',78,'Head of Household for',1,NULL,NULL,NULL), + (279,140,2,'a_b',37,'Spouse of',78,'Spouse of',1,NULL,NULL,NULL), + (280,140,2,'b_a',78,'Spouse of',37,'Spouse of',1,NULL,NULL,NULL), + (281,141,1,'a_b',69,'Child of',40,'Parent of',1,NULL,NULL,NULL), + (282,141,1,'b_a',40,'Parent of',69,'Child of',1,NULL,NULL,NULL), + (283,142,1,'a_b',35,'Child of',40,'Parent of',1,NULL,NULL,NULL), + (284,142,1,'b_a',40,'Parent of',35,'Child of',1,NULL,NULL,NULL), + (285,143,1,'a_b',69,'Child of',104,'Parent of',1,NULL,NULL,NULL), + (286,143,1,'b_a',104,'Parent of',69,'Child of',1,NULL,NULL,NULL), + (287,144,1,'a_b',35,'Child of',104,'Parent of',1,NULL,NULL,NULL), + (288,144,1,'b_a',104,'Parent of',35,'Child of',1,NULL,NULL,NULL), + (289,145,4,'a_b',35,'Sibling of',69,'Sibling of',1,NULL,NULL,NULL), + (290,145,4,'b_a',69,'Sibling of',35,'Sibling of',1,NULL,NULL,NULL), + (291,146,8,'a_b',104,'Household Member of',24,'Household Member is',1,NULL,NULL,NULL), + (292,146,8,'b_a',24,'Household Member is',104,'Household Member of',1,NULL,NULL,NULL), + (293,147,8,'a_b',69,'Household Member of',24,'Household Member is',1,NULL,NULL,NULL), + (294,147,8,'b_a',24,'Household Member is',69,'Household Member of',1,NULL,NULL,NULL), + (295,148,8,'a_b',35,'Household Member of',24,'Household Member is',1,NULL,NULL,NULL), + (296,148,8,'b_a',24,'Household Member is',35,'Household Member of',1,NULL,NULL,NULL), + (297,149,7,'a_b',40,'Head of Household for',24,'Head of Household is',0,NULL,NULL,NULL), + (298,149,7,'b_a',24,'Head of Household is',40,'Head of Household for',0,NULL,NULL,NULL), + (299,150,2,'a_b',104,'Spouse of',40,'Spouse of',0,NULL,NULL,NULL), + (300,150,2,'b_a',40,'Spouse of',104,'Spouse of',0,NULL,NULL,NULL), + (301,151,1,'a_b',36,'Child of',177,'Parent of',1,NULL,NULL,NULL), + (302,151,1,'b_a',177,'Parent of',36,'Child of',1,NULL,NULL,NULL), + (303,152,1,'a_b',110,'Child of',177,'Parent of',1,NULL,NULL,NULL), + (304,152,1,'b_a',177,'Parent of',110,'Child of',1,NULL,NULL,NULL), + (305,153,1,'a_b',36,'Child of',72,'Parent of',1,NULL,NULL,NULL), + (306,153,1,'b_a',72,'Parent of',36,'Child of',1,NULL,NULL,NULL), + (307,154,1,'a_b',110,'Child of',72,'Parent of',1,NULL,NULL,NULL), + (308,154,1,'b_a',72,'Parent of',110,'Child of',1,NULL,NULL,NULL), + (309,155,4,'a_b',110,'Sibling of',36,'Sibling of',1,NULL,NULL,NULL), + (310,155,4,'b_a',36,'Sibling of',110,'Sibling of',1,NULL,NULL,NULL), + (311,156,8,'a_b',72,'Household Member of',190,'Household Member is',1,NULL,NULL,NULL), + (312,156,8,'b_a',190,'Household Member is',72,'Household Member of',1,NULL,NULL,NULL), + (313,157,8,'a_b',36,'Household Member of',190,'Household Member is',1,NULL,NULL,NULL), + (314,157,8,'b_a',190,'Household Member is',36,'Household Member of',1,NULL,NULL,NULL), + (315,158,8,'a_b',110,'Household Member of',190,'Household Member is',1,NULL,NULL,NULL), + (316,158,8,'b_a',190,'Household Member is',110,'Household Member of',1,NULL,NULL,NULL), + (317,159,7,'a_b',177,'Head of Household for',190,'Head of Household is',0,NULL,NULL,NULL), + (318,159,7,'b_a',190,'Head of Household is',177,'Head of Household for',0,NULL,NULL,NULL), + (319,160,2,'a_b',72,'Spouse of',177,'Spouse of',0,NULL,NULL,NULL), + (320,160,2,'b_a',177,'Spouse of',72,'Spouse of',0,NULL,NULL,NULL), + (321,161,1,'a_b',111,'Child of',167,'Parent of',1,NULL,NULL,NULL), + (322,161,1,'b_a',167,'Parent of',111,'Child of',1,NULL,NULL,NULL), + (323,162,1,'a_b',3,'Child of',167,'Parent of',1,NULL,NULL,NULL), + (324,162,1,'b_a',167,'Parent of',3,'Child of',1,NULL,NULL,NULL), + (325,163,1,'a_b',111,'Child of',18,'Parent of',1,NULL,NULL,NULL), + (326,163,1,'b_a',18,'Parent of',111,'Child of',1,NULL,NULL,NULL), + (327,164,1,'a_b',3,'Child of',18,'Parent of',1,NULL,NULL,NULL), + (328,164,1,'b_a',18,'Parent of',3,'Child of',1,NULL,NULL,NULL), + (329,165,4,'a_b',3,'Sibling of',111,'Sibling of',1,NULL,NULL,NULL), + (330,165,4,'b_a',111,'Sibling of',3,'Sibling of',1,NULL,NULL,NULL), + (331,166,8,'a_b',18,'Household Member of',19,'Household Member is',1,NULL,NULL,NULL), + (332,166,8,'b_a',19,'Household Member is',18,'Household Member of',1,NULL,NULL,NULL), + (333,167,8,'a_b',111,'Household Member of',19,'Household Member is',1,NULL,NULL,NULL), + (334,167,8,'b_a',19,'Household Member is',111,'Household Member of',1,NULL,NULL,NULL), + (335,168,8,'a_b',3,'Household Member of',19,'Household Member is',1,NULL,NULL,NULL), + (336,168,8,'b_a',19,'Household Member is',3,'Household Member of',1,NULL,NULL,NULL), + (337,169,7,'a_b',167,'Head of Household for',19,'Head of Household is',1,NULL,NULL,NULL), + (338,169,7,'b_a',19,'Head of Household is',167,'Head of Household for',1,NULL,NULL,NULL), + (339,170,2,'a_b',18,'Spouse of',167,'Spouse of',1,NULL,NULL,NULL), + (340,170,2,'b_a',167,'Spouse of',18,'Spouse of',1,NULL,NULL,NULL), + (341,171,1,'a_b',201,'Child of',159,'Parent of',1,NULL,NULL,NULL), + (342,171,1,'b_a',159,'Parent of',201,'Child of',1,NULL,NULL,NULL), + (343,172,1,'a_b',143,'Child of',159,'Parent of',1,NULL,NULL,NULL), + (344,172,1,'b_a',159,'Parent of',143,'Child of',1,NULL,NULL,NULL), + (345,173,1,'a_b',201,'Child of',128,'Parent of',1,NULL,NULL,NULL), + (346,173,1,'b_a',128,'Parent of',201,'Child of',1,NULL,NULL,NULL), + (347,174,1,'a_b',143,'Child of',128,'Parent of',1,NULL,NULL,NULL), + (348,174,1,'b_a',128,'Parent of',143,'Child of',1,NULL,NULL,NULL), + (349,175,4,'a_b',143,'Sibling of',201,'Sibling of',1,NULL,NULL,NULL), + (350,175,4,'b_a',201,'Sibling of',143,'Sibling of',1,NULL,NULL,NULL), + (351,176,8,'a_b',128,'Household Member of',165,'Household Member is',1,NULL,NULL,NULL), + (352,176,8,'b_a',165,'Household Member is',128,'Household Member of',1,NULL,NULL,NULL), + (353,177,8,'a_b',201,'Household Member of',165,'Household Member is',1,NULL,NULL,NULL), + (354,177,8,'b_a',165,'Household Member is',201,'Household Member of',1,NULL,NULL,NULL), + (355,178,8,'a_b',143,'Household Member of',165,'Household Member is',1,NULL,NULL,NULL), + (356,178,8,'b_a',165,'Household Member is',143,'Household Member of',1,NULL,NULL,NULL), + (357,179,7,'a_b',159,'Head of Household for',165,'Head of Household is',1,NULL,NULL,NULL), + (358,179,7,'b_a',165,'Head of Household is',159,'Head of Household for',1,NULL,NULL,NULL), + (359,180,2,'a_b',128,'Spouse of',159,'Spouse of',1,NULL,NULL,NULL), + (360,180,2,'b_a',159,'Spouse of',128,'Spouse of',1,NULL,NULL,NULL), + (361,181,1,'a_b',192,'Child of',185,'Parent of',1,NULL,NULL,NULL), + (362,181,1,'b_a',185,'Parent of',192,'Child of',1,NULL,NULL,NULL), + (363,182,1,'a_b',191,'Child of',185,'Parent of',1,NULL,NULL,NULL), + (364,182,1,'b_a',185,'Parent of',191,'Child of',1,NULL,NULL,NULL), + (365,183,1,'a_b',192,'Child of',158,'Parent of',1,NULL,NULL,NULL), + (366,183,1,'b_a',158,'Parent of',192,'Child of',1,NULL,NULL,NULL), + (367,184,1,'a_b',191,'Child of',158,'Parent of',1,NULL,NULL,NULL), + (368,184,1,'b_a',158,'Parent of',191,'Child of',1,NULL,NULL,NULL), + (369,185,4,'a_b',191,'Sibling of',192,'Sibling of',1,NULL,NULL,NULL), + (370,185,4,'b_a',192,'Sibling of',191,'Sibling of',1,NULL,NULL,NULL), + (371,186,8,'a_b',158,'Household Member of',112,'Household Member is',1,NULL,NULL,NULL), + (372,186,8,'b_a',112,'Household Member is',158,'Household Member of',1,NULL,NULL,NULL), + (373,187,8,'a_b',192,'Household Member of',112,'Household Member is',1,NULL,NULL,NULL), + (374,187,8,'b_a',112,'Household Member is',192,'Household Member of',1,NULL,NULL,NULL), + (375,188,8,'a_b',191,'Household Member of',112,'Household Member is',1,NULL,NULL,NULL), + (376,188,8,'b_a',112,'Household Member is',191,'Household Member of',1,NULL,NULL,NULL), + (377,189,7,'a_b',185,'Head of Household for',112,'Head of Household is',1,NULL,NULL,NULL), + (378,189,7,'b_a',112,'Head of Household is',185,'Head of Household for',1,NULL,NULL,NULL), + (379,190,2,'a_b',158,'Spouse of',185,'Spouse of',1,NULL,NULL,NULL), + (380,190,2,'b_a',185,'Spouse of',158,'Spouse of',1,NULL,NULL,NULL), + (381,191,1,'a_b',26,'Child of',146,'Parent of',1,NULL,NULL,NULL), + (382,191,1,'b_a',146,'Parent of',26,'Child of',1,NULL,NULL,NULL), + (383,192,1,'a_b',43,'Child of',146,'Parent of',1,NULL,NULL,NULL), + (384,192,1,'b_a',146,'Parent of',43,'Child of',1,NULL,NULL,NULL), + (385,193,1,'a_b',26,'Child of',127,'Parent of',1,NULL,NULL,NULL), + (386,193,1,'b_a',127,'Parent of',26,'Child of',1,NULL,NULL,NULL), + (387,194,1,'a_b',43,'Child of',127,'Parent of',1,NULL,NULL,NULL), + (388,194,1,'b_a',127,'Parent of',43,'Child of',1,NULL,NULL,NULL), + (389,195,4,'a_b',43,'Sibling of',26,'Sibling of',1,NULL,NULL,NULL), + (390,195,4,'b_a',26,'Sibling of',43,'Sibling of',1,NULL,NULL,NULL), + (391,196,8,'a_b',127,'Household Member of',152,'Household Member is',1,NULL,NULL,NULL), + (392,196,8,'b_a',152,'Household Member is',127,'Household Member of',1,NULL,NULL,NULL), + (393,197,8,'a_b',26,'Household Member of',152,'Household Member is',1,NULL,NULL,NULL), + (394,197,8,'b_a',152,'Household Member is',26,'Household Member of',1,NULL,NULL,NULL), + (395,198,8,'a_b',43,'Household Member of',152,'Household Member is',1,NULL,NULL,NULL), + (396,198,8,'b_a',152,'Household Member is',43,'Household Member of',1,NULL,NULL,NULL), + (397,199,7,'a_b',146,'Head of Household for',152,'Head of Household is',0,NULL,NULL,NULL), + (398,199,7,'b_a',152,'Head of Household is',146,'Head of Household for',0,NULL,NULL,NULL), + (399,200,2,'a_b',127,'Spouse of',146,'Spouse of',0,NULL,NULL,NULL), + (400,200,2,'b_a',146,'Spouse of',127,'Spouse of',0,NULL,NULL,NULL), + (401,201,5,'a_b',143,'Employee of',41,'Employer of',1,NULL,NULL,NULL), + (402,201,5,'b_a',41,'Employer of',143,'Employee of',1,NULL,NULL,NULL), + (403,202,5,'a_b',148,'Employee of',70,'Employer of',1,NULL,NULL,NULL), + (404,202,5,'b_a',70,'Employer of',148,'Employee of',1,NULL,NULL,NULL), + (405,203,5,'a_b',14,'Employee of',71,'Employer of',1,NULL,NULL,NULL), + (406,203,5,'b_a',71,'Employer of',14,'Employee of',1,NULL,NULL,NULL), + (407,204,5,'a_b',184,'Employee of',93,'Employer of',1,NULL,NULL,NULL), + (408,204,5,'b_a',93,'Employer of',184,'Employee of',1,NULL,NULL,NULL), + (409,205,5,'a_b',181,'Employee of',95,'Employer of',1,NULL,NULL,NULL), + (410,205,5,'b_a',95,'Employer of',181,'Employee of',1,NULL,NULL,NULL), + (411,206,5,'a_b',36,'Employee of',98,'Employer of',1,NULL,NULL,NULL), + (412,206,5,'b_a',98,'Employer of',36,'Employee of',1,NULL,NULL,NULL), + (413,207,5,'a_b',69,'Employee of',114,'Employer of',1,NULL,NULL,NULL), + (414,207,5,'b_a',114,'Employer of',69,'Employee of',1,NULL,NULL,NULL), + (415,208,5,'a_b',191,'Employee of',120,'Employer of',1,NULL,NULL,NULL), + (416,208,5,'b_a',120,'Employer of',191,'Employee of',1,NULL,NULL,NULL), + (417,209,5,'a_b',29,'Employee of',121,'Employer of',1,NULL,NULL,NULL), + (418,209,5,'b_a',121,'Employer of',29,'Employee of',1,NULL,NULL,NULL), + (419,210,5,'a_b',62,'Employee of',139,'Employer of',1,NULL,NULL,NULL), + (420,210,5,'b_a',139,'Employer of',62,'Employee of',1,NULL,NULL,NULL), + (421,211,5,'a_b',37,'Employee of',157,'Employer of',1,NULL,NULL,NULL), + (422,211,5,'b_a',157,'Employer of',37,'Employee of',1,NULL,NULL,NULL), + (423,212,5,'a_b',103,'Employee of',163,'Employer of',1,NULL,NULL,NULL), + (424,212,5,'b_a',163,'Employer of',103,'Employee of',1,NULL,NULL,NULL), + (425,213,5,'a_b',33,'Employee of',169,'Employer of',1,NULL,NULL,NULL), + (426,213,5,'b_a',169,'Employer of',33,'Employee of',1,NULL,NULL,NULL), + (427,214,5,'a_b',182,'Employee of',173,'Employer of',1,NULL,NULL,NULL), + (428,214,5,'b_a',173,'Employer of',182,'Employee of',1,NULL,NULL,NULL); /*!40000 ALTER TABLE `civicrm_relationship_cache` ENABLE KEYS */; UNLOCK TABLES; @@ -12009,7 +11994,18 @@ INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id` (10392,'Wrexham','WRX',1226,1), (10393,'Sejong','50',1115,1), (10394,'Dinagat Islands','DIN',1170,1), - (10395,'Huila','HUI',1048,1); + (10395,'Huila','HUI',1048,1), + (10396,'Devonshire','DEV',1023,1), + (10397,'Hamilton Parish','HAM',1023,1), + (10398,'City of Hamilton','HA',1023,1), + (10399,'Paget','PAG',1023,1), + (10400,'Pembroke','PEM',1023,1), + (10401,'Town of St. George','SG',1023,1), + (10402,'Saint George\'s','SGE',1023,1), + (10403,'Sandys','SAN',1023,1), + (10404,'Smiths','SMI',1023,1), + (10405,'Southampton','SOU',1023,1), + (10406,'Warwick','WAR',1023,1); /*!40000 ALTER TABLE `civicrm_state_province` ENABLE KEYS */; UNLOCK TABLES; @@ -12029,90 +12025,90 @@ UNLOCK TABLES; LOCK TABLES `civicrm_subscription_history` WRITE; /*!40000 ALTER TABLE `civicrm_subscription_history` DISABLE KEYS */; INSERT INTO `civicrm_subscription_history` (`id`, `contact_id`, `group_id`, `date`, `method`, `status`, `tracking`) VALUES - (1,151,2,'2021-04-23 15:53:00','Email','Added',NULL), - (2,181,2,'2022-02-04 23:44:43','Email','Added',NULL), - (3,69,2,'2021-06-02 02:28:39','Admin','Added',NULL), - (4,23,2,'2021-04-21 18:03:50','Admin','Added',NULL), - (5,163,2,'2021-07-23 22:08:16','Email','Added',NULL), - (6,197,2,'2022-03-15 16:25:49','Admin','Added',NULL), - (7,94,2,'2021-11-18 00:46:16','Admin','Added',NULL), - (8,68,2,'2022-03-08 20:40:01','Email','Added',NULL), - (9,32,2,'2021-04-22 23:35:18','Admin','Added',NULL), - (10,100,2,'2022-01-15 23:08:48','Email','Added',NULL), - (11,22,2,'2021-04-19 21:22:18','Admin','Added',NULL), - (12,67,2,'2021-06-23 19:08:57','Admin','Added',NULL), - (13,85,2,'2021-10-11 07:32:16','Admin','Added',NULL), - (14,40,2,'2021-10-29 04:46:59','Admin','Added',NULL), - (15,59,2,'2022-03-09 03:56:00','Email','Added',NULL), - (16,10,2,'2021-11-13 05:49:13','Admin','Added',NULL), - (17,8,2,'2021-05-21 18:05:36','Admin','Added',NULL), - (18,11,2,'2021-07-08 15:44:08','Email','Added',NULL), - (19,149,2,'2022-02-12 09:54:13','Email','Added',NULL), - (20,126,2,'2022-01-10 11:33:39','Email','Added',NULL), - (21,7,2,'2021-05-07 02:59:58','Admin','Added',NULL), - (22,120,2,'2021-12-29 22:26:09','Admin','Added',NULL), - (23,25,2,'2021-09-10 08:38:24','Email','Added',NULL), - (24,143,2,'2021-09-12 21:17:19','Email','Added',NULL), - (25,91,2,'2021-07-23 02:20:19','Email','Added',NULL), - (26,82,2,'2021-04-22 19:45:47','Email','Added',NULL), - (27,185,2,'2021-11-27 22:17:29','Admin','Added',NULL), - (28,71,2,'2021-04-17 13:58:24','Admin','Added',NULL), - (29,183,2,'2022-01-28 18:10:55','Email','Added',NULL), - (30,166,2,'2022-03-09 03:24:54','Email','Added',NULL), - (31,89,2,'2021-12-08 21:48:45','Admin','Added',NULL), - (32,36,2,'2022-02-28 19:52:21','Email','Added',NULL), - (33,176,2,'2022-01-06 21:34:31','Email','Added',NULL), - (34,15,2,'2021-09-15 17:55:23','Email','Added',NULL), - (35,27,2,'2021-07-07 04:10:26','Email','Added',NULL), - (36,170,2,'2021-07-28 20:35:16','Email','Added',NULL), - (37,196,2,'2021-08-31 02:47:02','Email','Added',NULL), - (38,31,2,'2021-12-12 12:52:12','Email','Added',NULL), - (39,56,2,'2021-06-13 07:47:48','Email','Added',NULL), - (40,160,2,'2021-11-15 16:24:30','Email','Added',NULL), - (41,104,2,'2021-05-01 14:10:06','Email','Added',NULL), - (42,6,2,'2021-07-20 18:34:03','Email','Added',NULL), - (43,51,2,'2021-08-23 20:26:17','Admin','Added',NULL), - (44,115,2,'2021-12-11 08:56:53','Admin','Added',NULL), - (45,186,2,'2021-10-08 23:15:53','Email','Added',NULL), - (46,3,2,'2021-08-23 02:07:01','Email','Added',NULL), - (47,2,2,'2021-06-24 12:05:21','Admin','Added',NULL), - (48,97,2,'2021-11-10 09:00:34','Admin','Added',NULL), - (49,189,2,'2021-05-18 22:40:01','Email','Added',NULL), - (50,192,2,'2022-02-21 03:16:31','Email','Added',NULL), - (51,9,2,'2021-08-22 17:00:53','Admin','Added',NULL), - (52,173,2,'2021-05-03 11:28:16','Admin','Added',NULL), - (53,199,2,'2022-03-10 18:41:57','Email','Added',NULL), - (54,131,2,'2021-04-25 23:14:58','Email','Added',NULL), - (55,63,2,'2021-06-29 16:07:57','Email','Added',NULL), - (56,29,2,'2021-10-04 17:13:33','Email','Added',NULL), - (57,182,2,'2021-04-30 08:59:31','Email','Added',NULL), - (58,118,2,'2022-02-01 06:03:07','Admin','Added',NULL), - (59,57,2,'2021-09-14 11:08:39','Email','Added',NULL), - (60,62,2,'2022-03-29 14:00:01','Email','Added',NULL), - (61,50,3,'2022-02-02 20:26:23','Admin','Added',NULL), - (62,162,3,'2021-09-08 19:16:01','Admin','Added',NULL), - (63,16,3,'2021-05-26 13:06:15','Admin','Added',NULL), - (64,60,3,'2021-07-15 16:52:25','Admin','Added',NULL), - (65,64,3,'2021-09-22 00:45:41','Email','Added',NULL), - (66,112,3,'2022-01-26 17:39:40','Admin','Added',NULL), - (67,38,3,'2021-12-18 22:13:08','Email','Added',NULL), - (68,200,3,'2021-06-22 19:16:58','Email','Added',NULL), - (69,4,3,'2021-07-03 18:16:37','Admin','Added',NULL), - (70,153,3,'2021-11-22 12:51:34','Email','Added',NULL), - (71,19,3,'2022-01-08 05:15:20','Admin','Added',NULL), - (72,88,3,'2022-02-19 00:21:41','Admin','Added',NULL), - (73,103,3,'2021-12-06 08:35:51','Admin','Added',NULL), - (74,134,3,'2021-12-18 21:33:19','Email','Added',NULL), - (75,117,3,'2021-07-18 16:40:08','Email','Added',NULL), - (76,151,4,'2021-08-14 23:28:59','Admin','Added',NULL), - (77,68,4,'2022-02-14 10:02:10','Email','Added',NULL), - (78,59,4,'2021-06-01 04:41:18','Email','Added',NULL), - (79,120,4,'2022-03-09 08:19:20','Email','Added',NULL), - (80,183,4,'2021-09-28 08:59:00','Email','Added',NULL), - (81,170,4,'2021-04-20 22:43:08','Email','Added',NULL), - (82,51,4,'2022-01-30 06:45:56','Admin','Added',NULL), - (83,192,4,'2021-09-18 12:07:57','Admin','Added',NULL), - (84,202,4,'2022-02-12 16:09:18','Email','Added',NULL); + (1,23,2,'2022-03-14 14:54:56','Email','Added',NULL), + (2,65,2,'2021-06-14 23:43:43','Admin','Added',NULL), + (3,15,2,'2021-12-25 02:21:28','Admin','Added',NULL), + (4,22,2,'2021-12-22 09:10:56','Admin','Added',NULL), + (5,170,2,'2021-10-05 09:26:53','Admin','Added',NULL), + (6,83,2,'2021-11-09 05:13:35','Admin','Added',NULL), + (7,197,2,'2021-06-30 08:36:14','Admin','Added',NULL), + (8,161,2,'2021-09-29 05:15:01','Admin','Added',NULL), + (9,199,2,'2022-02-03 14:23:01','Admin','Added',NULL), + (10,116,2,'2022-03-28 23:42:00','Admin','Added',NULL), + (11,147,2,'2022-04-21 12:52:18','Email','Added',NULL), + (12,149,2,'2021-08-06 09:34:53','Admin','Added',NULL), + (13,136,2,'2021-10-30 11:41:28','Admin','Added',NULL), + (14,100,2,'2021-08-29 14:27:04','Admin','Added',NULL), + (15,115,2,'2022-04-04 12:26:22','Admin','Added',NULL), + (16,76,2,'2021-11-24 19:48:48','Admin','Added',NULL), + (17,107,2,'2021-06-26 10:34:12','Email','Added',NULL), + (18,28,2,'2022-05-03 06:36:05','Admin','Added',NULL), + (19,54,2,'2021-05-20 03:23:14','Admin','Added',NULL), + (20,9,2,'2022-04-06 17:43:16','Email','Added',NULL), + (21,10,2,'2021-09-15 04:56:07','Email','Added',NULL), + (22,160,2,'2021-06-28 09:57:08','Email','Added',NULL), + (23,130,2,'2021-05-30 14:20:13','Admin','Added',NULL), + (24,193,2,'2021-10-21 18:51:44','Email','Added',NULL), + (25,66,2,'2021-11-08 15:48:08','Admin','Added',NULL), + (26,77,2,'2021-12-23 07:10:17','Admin','Added',NULL), + (27,179,2,'2022-02-23 04:29:55','Email','Added',NULL), + (28,45,2,'2021-08-16 16:26:45','Email','Added',NULL), + (29,132,2,'2022-01-31 15:19:49','Admin','Added',NULL), + (30,68,2,'2022-01-27 18:20:13','Email','Added',NULL), + (31,142,2,'2022-03-14 09:20:16','Admin','Added',NULL), + (32,151,2,'2022-01-08 05:14:08','Admin','Added',NULL), + (33,101,2,'2021-05-14 01:13:22','Admin','Added',NULL), + (34,138,2,'2021-07-24 16:22:35','Email','Added',NULL), + (35,38,2,'2021-08-11 05:03:30','Email','Added',NULL), + (36,144,2,'2021-09-17 14:08:21','Email','Added',NULL), + (37,172,2,'2022-04-26 00:25:29','Admin','Added',NULL), + (38,123,2,'2021-05-19 18:19:34','Email','Added',NULL), + (39,196,2,'2021-12-17 02:40:35','Admin','Added',NULL), + (40,194,2,'2022-01-24 20:44:20','Email','Added',NULL), + (41,181,2,'2021-10-19 12:23:38','Admin','Added',NULL), + (42,126,2,'2022-02-17 08:06:39','Admin','Added',NULL), + (43,27,2,'2021-06-16 14:21:58','Admin','Added',NULL), + (44,84,2,'2021-10-29 18:55:10','Email','Added',NULL), + (45,87,2,'2022-04-26 02:08:01','Email','Added',NULL), + (46,44,2,'2021-09-30 23:08:44','Email','Added',NULL), + (47,67,2,'2021-11-28 12:41:32','Email','Added',NULL), + (48,88,2,'2021-12-15 16:48:51','Email','Added',NULL), + (49,42,2,'2021-12-31 08:27:41','Email','Added',NULL), + (50,91,2,'2022-01-24 21:43:03','Email','Added',NULL), + (51,17,2,'2021-06-20 14:45:50','Email','Added',NULL), + (52,29,2,'2022-02-11 15:01:37','Email','Added',NULL), + (53,32,2,'2021-05-30 23:24:59','Email','Added',NULL), + (54,75,2,'2021-11-18 10:32:23','Email','Added',NULL), + (55,178,2,'2021-11-26 22:07:01','Admin','Added',NULL), + (56,80,2,'2022-01-21 19:18:05','Admin','Added',NULL), + (57,164,2,'2021-11-29 17:42:45','Email','Added',NULL), + (58,92,2,'2022-02-16 05:44:32','Email','Added',NULL), + (59,13,2,'2021-11-19 21:28:23','Email','Added',NULL), + (60,103,2,'2021-12-24 04:15:12','Email','Added',NULL), + (61,21,3,'2021-12-02 21:57:05','Email','Added',NULL), + (62,61,3,'2022-04-09 12:12:23','Email','Added',NULL), + (63,174,3,'2021-10-05 15:04:34','Email','Added',NULL), + (64,50,3,'2021-05-20 00:20:43','Email','Added',NULL), + (65,175,3,'2021-09-24 02:50:49','Email','Added',NULL), + (66,62,3,'2022-04-11 11:02:13','Email','Added',NULL), + (67,188,3,'2021-07-30 19:33:05','Admin','Added',NULL), + (68,106,3,'2021-06-20 08:24:33','Email','Added',NULL), + (69,79,3,'2022-04-02 09:15:20','Admin','Added',NULL), + (70,25,3,'2022-03-20 05:18:27','Admin','Added',NULL), + (71,184,3,'2022-03-03 05:41:37','Email','Added',NULL), + (72,39,3,'2021-10-11 02:45:59','Admin','Added',NULL), + (73,198,3,'2021-12-12 08:08:42','Admin','Added',NULL), + (74,5,3,'2021-08-15 00:39:25','Email','Added',NULL), + (75,73,3,'2022-01-20 10:33:13','Email','Added',NULL), + (76,23,4,'2022-01-06 23:15:24','Admin','Added',NULL), + (77,161,4,'2021-08-22 06:17:59','Email','Added',NULL), + (78,115,4,'2022-04-18 22:25:12','Email','Added',NULL), + (79,160,4,'2022-01-18 01:13:43','Email','Added',NULL), + (80,132,4,'2022-04-27 08:59:06','Email','Added',NULL), + (81,144,4,'2021-09-28 02:51:41','Email','Added',NULL), + (82,27,4,'2022-02-15 22:35:14','Email','Added',NULL), + (83,91,4,'2021-09-29 14:05:58','Admin','Added',NULL), + (84,202,4,'2022-03-03 16:41:08','Email','Added',NULL); /*!40000 ALTER TABLE `civicrm_subscription_history` ENABLE KEYS */; UNLOCK TABLES; @@ -12322,6 +12318,15 @@ LOCK TABLES `civicrm_uf_match` WRITE; /*!40000 ALTER TABLE `civicrm_uf_match` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Dumping data for table `civicrm_user_job` +-- + +LOCK TABLES `civicrm_user_job` WRITE; +/*!40000 ALTER TABLE `civicrm_user_job` DISABLE KEYS */; +/*!40000 ALTER TABLE `civicrm_user_job` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Dumping data for table `civicrm_website` -- @@ -12329,22 +12334,24 @@ 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,198,'http://jacksonlegalfund.org',1), - (2,114,'http://laplaceeducation.org',1), - (3,128,'http://californiasoftwareassociation.org',1), - (4,159,'http://mlkinglegal.org',1), - (5,155,'http://vnlegalservices.org',1), - (6,77,'http://warsawempowermentalliance.org',1), - (7,108,'http://waunakeesystems.org',1), - (8,66,'http://arizonaliteracyalliance.org',1), - (9,84,'http://illinoisaction.org',1), - (10,35,'http://greenevillenetwork.org',1), - (11,17,'http://globalsolutions.org',1), - (12,119,'http://ohioinitiative.org',1), - (13,92,'http://friendspartners.org',1), - (14,168,'http://unitedmusicsystems.org',1), - (15,79,'http://idahotechnology.org',1), - (16,145,'http://urbanadvocacycenter.org',1); + (1,121,'http://arizonaservices.org',1), + (2,139,'http://ngmusictrust.org',1), + (3,93,'http://floridadevelopmentalliance.org',1), + (4,71,'http://mlkingmusic.org',1), + (5,169,'http://wisconsinsoftwarepartners.org',1), + (6,95,'http://tennesseeaction.org',1), + (7,120,'http://vnhealthservices.org',1), + (8,137,'http://floridatechnologysolutions.org',1), + (9,173,'http://globalassociation.org',1), + (10,141,'http://ncartsalliance.org',1), + (11,70,'http://tennesseepoetry.org',1), + (12,114,'http://wvliteracyservices.org',1), + (13,157,'http://nebraskaalliance.org',1), + (14,41,'http://ohioeducationfund.org',1), + (15,8,'http://npempowermentpartners.org',1), + (16,105,'http://urbanassociation.org',1), + (17,94,'http://bakersfieldsoftware.org',1), + (18,163,'http://evansvillepeace.org',1); /*!40000 ALTER TABLE `civicrm_website` ENABLE KEYS */; UNLOCK TABLES; @@ -12382,7 +12389,7 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2022-04-14 13:30:20 +-- Dump completed on 2022-05-04 18:47:27 -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | diff --git a/civicrm/templates/CRM/ACL/Page/EntityRole.tpl b/civicrm/templates/CRM/ACL/Page/EntityRole.tpl index d76a8fc56f..9b82cb4793 100644 --- a/civicrm/templates/CRM/ACL/Page/EntityRole.tpl +++ b/civicrm/templates/CRM/ACL/Page/EntityRole.tpl @@ -35,7 +35,7 @@ <td class="crm-acl_entity_role-acl_role">{$row.acl_role}</td> <td class="crm-acl_entity_role-entity">{$row.entity}</td> <td class="crm-acl_entity_role-is_active" id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </tbody> diff --git a/civicrm/templates/CRM/Activity/Form/Selector.tpl b/civicrm/templates/CRM/Activity/Form/Selector.tpl index 2398956831..a6ad72efe5 100644 --- a/civicrm/templates/CRM/Activity/Form/Selector.tpl +++ b/civicrm/templates/CRM/Activity/Form/Selector.tpl @@ -104,7 +104,7 @@ <td> {if (!empty($row.id))} - {$row.action|replace:'xx':$row.id} + {$row.action|smarty:nodefaults|replace:'xx':$row.id} {else} {$row.action} {/if} diff --git a/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl index d51557e786..1287c6d6a5 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl @@ -7,30 +7,27 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{* Activity Import Wizard - Step 1 (upload data file) *} -{* @var $form Contains the array for the form elements and other form associated information assigned to the template by the controller *} -<div class="crm-block crm-form-block crm-activity-import-uploadfile-form-block"> +{* Import Wizard - Step 1 (choose data source) *} +<div class="crm-block crm-form-block crm-import-datasource-form-block"> - {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} - {include file="CRM/common/WizardHeader.tpl"} + {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} + {include file="CRM/common/WizardHeader.tpl"} + <div class="help"> + {ts 1=$importEntity 2= $importEntities}The %1 Import Wizard allows you to easily upload %2 from other applications into CiviCRM.{/ts} + {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match an existing contact in your CiviCRM database.{/ts} {help id='upload'} + </div> - <div class="help"> - <p> - {ts}The Activity Import Wizard allows you to easily upload activity from other applications into CiviCRM. Contacts must already exist in your CiviCRM database prior to importing activity.{/ts} - {help id="id-upload"} - </p> - </div> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <div id="upload-file"> <h3>{ts}Upload Data File{/ts}</h3> <table class="form-layout-compressed"> - <tr class="crm-activity-import-uploadfile-form-block-uploadFile"> + <tr class="crm-import-uploadfile-from-block-uploadFile"> <td class="label">{$form.uploadFile.label}</td> <td>{$form.uploadFile.html}<br /> <span class="description">{ts}File format must be comma-separated-values (CSV).{/ts}</span><br /><span>{ts 1=$uploadSize}Maximum Upload File Size: %1 MB{/ts}</span> </td> </tr> - <tr class="crm-activity-import-uploadfile-form-block-skipColumnHeader"> + <tr class="crm-import-uploadfile-form-block-skipColumnHeader"> <td class="label"></td> <td>{$form.skipColumnHeader.html}{$form.skipColumnHeader.label}<br /> <span class="description">{ts}Check this box if the first row of your file consists of field names (Example: 'Contact ID', 'Activity Type', 'Activity Date').{/ts}</span> @@ -42,7 +39,7 @@ </tr> <tr>{include file="CRM/Core/Date.tpl"}</tr> {if $savedMapping} - <tr class="crm-activity-import-uploadfile-form-block-savedMapping"> + <tr class="crm-import-uploadfile-form-block-savedMapping"> <td>{$form.savedMapping.label}</td> <td>{$form.savedMapping.html}<br /> <span class="description">{ts}Select Saved Mapping or Leave blank to create a new One.{/ts}</span> diff --git a/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl b/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl index 111dddc644..33b4be0009 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl @@ -25,13 +25,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts 1=$conflictRowCount 2=$downloadConflictRecordsUrl}CiviCRM has detected %1 records with conflicting transaction ids within this data file. If you continue, these records will be skipped. OR, you can download a file with just these problem records - <a href='%2'>Download Conflicts</a>. Then correct them in the original import file, cancel this import and begin again at step 1.{/ts} - </p> - {/if} - - <p>{ts}Click 'Import Now' if you are ready to proceed.{/ts}</p> </div> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> @@ -54,17 +47,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows{/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting transaction ids within this file. These rows will be skipped (not imported).{/ts} - {if $conflictRowCount} - <p><a href="{$downloadConflictRecordsUrl}">{ts}Download Conflicts{/ts}</a></p> - {/if} - </td> - </tr> - {/if} - <tr><td class="label crm-grid-cell">{ts}Valid Rows{/ts}</td> <td class="data">{$validRowCount}</td> <td class="explanation">{ts}Total rows to be imported.{/ts}</td> diff --git a/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl b/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl index 6f054ee726..09388501e8 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl @@ -37,15 +37,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts count=$conflictRowCount plural='CiviCRM has detected %count records with conflicting transaction IDs within this data file or relative to existing activity records. These records have not been imported.'}CiviCRM has detected one record with conflicting transaction ID within this data file or relative to existing activity records. This record have not been imported.{/ts} - </p> - <p class="error"> - {ts 1=$downloadConflictRecordsUrl}You can <a href='%1'>Download Conflicts</a>. You may then review these records to determine if they are actually conflicts, and correct the transaction IDs for those that are not.{/ts} - </p> - {/if} - {if $duplicateRowCount} <p {if $dupeError}class="error"{/if}> {ts count=$duplicateRowCount plural='CiviCRM has detected %count records which are duplicates of existing CiviCRM activity records.'}CiviCRM has detected one record which is a duplicate of existing CiviCRM activity record.{/ts} {$dupeActionString} @@ -85,17 +76,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows (skipped){/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting transaction IDs (NOT imported).{/ts} - {if $conflictRowCount} - <p><a href="{$downloadConflictRecordsUrl}">{ts}Download Conflicts{/ts}</a></p> - {/if} - </td> - </tr> - {/if} - {if $duplicateRowCount} <tr class="error"><td class="label crm-grid-cell">{ts}Duplicate Rows{/ts}</td> <td class="data">{$duplicateRowCount}</td> diff --git a/civicrm/templates/CRM/Activity/Selector/Activity.tpl b/civicrm/templates/CRM/Activity/Selector/Activity.tpl index 6366cd59c9..8b18015daf 100644 --- a/civicrm/templates/CRM/Activity/Selector/Activity.tpl +++ b/civicrm/templates/CRM/Activity/Selector/Activity.tpl @@ -83,7 +83,7 @@ <td class="crm-activity-date_time">{$row.activity_date_time|crmDate}</td> <td class="crm-activity-status crm-activity-status_{$row.status_id}">{$row.status}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} diff --git a/civicrm/templates/CRM/Admin/Form/Extensions.tpl b/civicrm/templates/CRM/Admin/Form/Extensions.tpl index 6b9345faa6..edbee349c0 100644 --- a/civicrm/templates/CRM/Admin/Form/Extensions.tpl +++ b/civicrm/templates/CRM/Admin/Form/Extensions.tpl @@ -8,7 +8,7 @@ +--------------------------------------------------------------------+ *} {* this template is used for install /uninstall extensions *} -<h3>{$title}</h3> +<h3>{$title|smarty:nodefaults}</h3> <div class="crm-block crm-form-block crm-admin-optionvalue-form-block"> {if $action eq 8} <div class="messages status no-popup"> @@ -19,7 +19,7 @@ {if $action eq 1} <div class="messages status no-popup"> {icon icon="fa-info-circle"}{/icon} - {ts}Installing this extension will provide you with new functionality. Please make sure that the extension you're installing comes from a trusted source.{/ts} {ts}Do you want to continue?{/ts} + {ts}Installing this extension will provide you with new functionality.{/ts} {ts}Do you want to continue?{/ts} </div> {/if} {if $action eq 2} diff --git a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl index 95d5cefe17..25fb8e16fd 100644 --- a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl +++ b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl @@ -228,8 +228,17 @@ // CRM-14070 Hide limit-to when entity is activity function showHideLimitTo() { + // '1' is the value of "Activity" in the entity select box. $('#limit_to', $form).toggle(!($('#entity_0', $form).val() == '1')); if ($('#entity_0', $form).val() != '1' || !($('#entity_0').length)) { + // Some Event entity is selected. + if (['2', '3', '5'].includes($('#entity_0', $form).val())) { + $('#limit_to option[value="0"]', $form).attr('disabled','disabled').removeAttr('selected'); + } + else { + $('#limit_to option[value="0"]', $form).removeAttr('disabled'); + } + // Anything but Activity is selected. if ($('#limit_to', $form).val() == '') { $('tr.recipient:visible, #recipientList, #recipient, a.recipient').hide(); $('a.limit_to').show(); @@ -241,6 +250,7 @@ $("label[for='recipient']").text('{/literal}{$recipientLabels.other}{literal}'); } else { + // Activity is selected. $('#recipient, a.recipient').show() $('#recipient').css("margin-left", "-2px"); $('a.limit_to').hide(); diff --git a/civicrm/templates/CRM/Admin/Page/Access.tpl b/civicrm/templates/CRM/Admin/Page/Access.tpl index 54685bdf67..db04f7f1c3 100644 --- a/civicrm/templates/CRM/Admin/Page/Access.tpl +++ b/civicrm/templates/CRM/Admin/Page/Access.tpl @@ -13,13 +13,13 @@ <p>{ts 1=$docLink}ACLs (Access Control Lists) allow you control access to CiviCRM data. An ACL consists of an <strong>Operation</strong> (e.g. 'View' or 'Edit'), a <strong>set of Data</strong> that the operation can be performed on (e.g. a group of contacts), and a <strong>Role</strong> that has permission to do this operation. Refer to the %1 for more info.{/ts} {if $config->userSystem->is_drupal EQ '1'}{ts}Note that a CiviCRM ACL Role is not related to the Drupal Role.{/ts}{/if}</p> <p>{ts}<strong>EXAMPLE:</strong> 'Team Leaders' (<em>ACL Role</em>) can 'Edit' (<em>Operation</em>) all contacts in the 'Active Volunteers Group' (<em>Data</em>).{/ts}</p> - <p>{ts 1=$ufAccessURL 2=$jAccessParams 3=$config->userFramework}Use <a href='%1' %2>%3 Access Control</a> to manage basic access to CiviCRM components and menu items. Use CiviCRM ACLs to control access to specific CiviCRM contact groups. You can also configure ACLs to grant or deny access to specific Events, Profiles, and/or Custom Data Fields.{/ts}</p> + <p>{ts 1=$ufAccessURL|smarty:nodefaults 2=$jAccessParams 3=$config->userFramework}Use <a href='%1' %2>%3 Access Control</a> to manage basic access to CiviCRM components and menu items. Use CiviCRM ACLs to control access to specific CiviCRM contact groups. You can also configure ACLs to grant or deny access to specific Events, Profiles, and/or Custom Data Fields.{/ts}</p> <p>{ts 1=$config->userFramework}Note that %1 Access Control permissions take precedence over CiviCRM ACLs. If you wish to use CiviCRM ACLs, first disable the related permission in %1 Access control for a user role, and then gradually add ACLs to replace that permission for certain groups of contacts.{/ts} </div> <table class="report"> <tr> - <td class="nowrap"><a href="{$ufAccessURL}" {$jAccessParams} id="adminAccess"><i class="crm-i fa-chevron-right fa-fw" aria-hidden="true"></i> {ts 1=$config->userFramework}%1 Access Control{/ts}</a></td> + <td class="nowrap"><a href="{$ufAccessURL|smarty:nodefaults}" {$jAccessParams} id="adminAccess"><i class="crm-i fa-chevron-right fa-fw" aria-hidden="true"></i> {ts 1=$config->userFramework}%1 Access Control{/ts}</a></td> <td>{ts}Grant access to CiviCRM components and other CiviCRM permissions.{/ts}</td> </tr> <tr><td colspan="2" class="separator"><strong>{ts}Use following steps if you need to control View and/or Edit permissions for specific contact groups, specific profiles or specific custom data fields.{/ts}</strong></td></tr> diff --git a/civicrm/templates/CRM/Admin/Page/ContactType.tpl b/civicrm/templates/CRM/Admin/Page/ContactType.tpl index ce86bc09ea..8428faa6f5 100644 --- a/civicrm/templates/CRM/Admin/Page/ContactType.tpl +++ b/civicrm/templates/CRM/Admin/Page/ContactType.tpl @@ -36,7 +36,7 @@ <td class="crm-contactType-label crm-editable" data-field="label">{ts}{$row.label}{/ts}</td> <td class="crm-contactType-parent">{if $row.parent}{ts}{$row.parent_label}{/ts}{else}{ts}(built-in){/ts}{/if}</td> <td class="crm-contactType-description crm-editable" data-field="description" data-type="textarea">{$row.description}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl b/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl index b7a091b847..7b19f4c72a 100644 --- a/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl +++ b/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl @@ -46,7 +46,7 @@ <td class="crm-event-is_monetary">{if $row.is_monetary eq 1}{ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-event-is_online_registration">{if $row.is_online_registration eq 1}{ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-event-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td class="crm-event-action">{$row.action|replace:'xx':$row.id}</td> + <td class="crm-event-action">{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl b/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl index e70a8a7e01..396b72226d 100644 --- a/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl +++ b/civicrm/templates/CRM/Admin/Page/Extensions/AddNew.tpl @@ -26,7 +26,7 @@ Depends: CRM/common/enableDisableApi.tpl and CRM/common/jsortable.tpl </td> <td class="crm-extensions-version">{$row.version|escape}</td> <td class="crm-extensions-description">{$row.type|capitalize}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> <tr class="hiddenElement" id="crm-extensions-details-addnew-{$row.file}"> <td> diff --git a/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl b/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl index 0d98485964..60d9f72609 100644 --- a/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl +++ b/civicrm/templates/CRM/Admin/Page/Extensions/Main.tpl @@ -35,7 +35,7 @@ Depends: CRM/common/enableDisableApi.tpl and CRM/common/jsortable.tpl {/if} </td> <td class="crm-extensions-description">{$row.type|escape|capitalize}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> <tr class="hiddenElement" id="crm-extensions-details-{$row.file|escape}"> <td> diff --git a/civicrm/templates/CRM/Admin/Page/Job.tpl b/civicrm/templates/CRM/Admin/Page/Job.tpl index c4ca2ad77e..2ba136f5d7 100644 --- a/civicrm/templates/CRM/Admin/Page/Job.tpl +++ b/civicrm/templates/CRM/Admin/Page/Job.tpl @@ -49,7 +49,7 @@ <td class="crm-job-name">{if $row.parameters eq null}<em>{ts}no parameters{/ts}</em>{else}<pre>{$row.parameters}</pre>{/if}</td> <td class="crm-job-name">{if $row.last_run eq null}never{else}{$row.last_run|crmDate:$config->dateformatDatetime}{/if}</td> <td id="row_{$row.id}_status" class="crm-job-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/LabelFormats.tpl b/civicrm/templates/CRM/Admin/Page/LabelFormats.tpl index 4a4142f5f8..4fceb44fa8 100644 --- a/civicrm/templates/CRM/Admin/Page/LabelFormats.tpl +++ b/civicrm/templates/CRM/Admin/Page/LabelFormats.tpl @@ -51,12 +51,12 @@ <tr id="row_{$row.id}" class="crm-labelFormat {cycle values="odd-row,even-row"}{if !empty($row.class)} {$row.class}{/if}"> <td class="crm-labelFormat-name">{$row.label}</td> <td class="crm-labelFormat-name">{$row.groupName}</td> - <td class="crm-labelFormat-order nowrap">{$row.weight}</td> + <td class="crm-labelFormat-order nowrap">{$row.weight|smarty:nodefaults}</td> <td class="crm-labelFormat-description">{$row.grouping}</td> <td class="crm-labelFormat-is_default">{icon condition=$row.is_default}{ts}Default{/ts}{/icon} </td> <td class="crm-labelFormat-is_reserved">{if $row.is_reserved eq 1}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} </td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/LocationType.tpl b/civicrm/templates/CRM/Admin/Page/LocationType.tpl index 3ce80083fb..15fdd2fd5c 100644 --- a/civicrm/templates/CRM/Admin/Page/LocationType.tpl +++ b/civicrm/templates/CRM/Admin/Page/LocationType.tpl @@ -41,7 +41,7 @@ <td class="crmf-description crm-editable">{$row.description}</td> <td id="row_{$row.id}_status" class="crmf-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crmf-is_default">{if $row.is_default}{icon condition=$row.is_default}{ts}Default{/ts}{/icon} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl index fa655f7636..8982d3d41d 100644 --- a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl +++ b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl @@ -44,7 +44,7 @@ <!--<td>{$row.port}</td>--> <td class="crm-mailSettings-is_ssl">{if $row.is_ssl eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-mailSettings-is_default">{if $row.is_default eq 1}{ts}Bounce Processing <strong>(Default)</strong>{/ts}{else}{ts}Email-to-Activity{/ts}{/if} </td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/Mapping.tpl b/civicrm/templates/CRM/Admin/Page/Mapping.tpl index d7b3ba0538..bec5a96360 100644 --- a/civicrm/templates/CRM/Admin/Page/Mapping.tpl +++ b/civicrm/templates/CRM/Admin/Page/Mapping.tpl @@ -31,7 +31,7 @@ <td class="crm-mapping-name">{$row.name}</td> <td class="crm-mapping-description">{$row.description}</td> <td class="crm-mapping-mapping_type">{$row.mapping_type}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl b/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl index 96d38de5b1..aabb8a72c2 100644 --- a/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl +++ b/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl @@ -131,7 +131,7 @@ <td>{$row.msg_subject}</td> <td id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> {/if} - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </tbody> diff --git a/civicrm/templates/CRM/Admin/Page/Options.tpl b/civicrm/templates/CRM/Admin/Page/Options.tpl index ab1ee9f23d..dc3c371f91 100644 --- a/civicrm/templates/CRM/Admin/Page/Options.tpl +++ b/civicrm/templates/CRM/Admin/Page/Options.tpl @@ -139,7 +139,7 @@ {/if} <td class="crm-admin-options-is_reserved">{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-admin-options-is_active" id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </tbody> diff --git a/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl b/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl index a32d84cd41..8018311c4a 100644 --- a/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl +++ b/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl @@ -36,9 +36,9 @@ <td class="center crmf-is_reserved">{icon condition=$row.is_reserved}{ts}Reserved{/ts}{/icon}</td> <td id="row_{$row.id}_status" class="crmf-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="center crmf-is_counted">{icon condition=$row.is_counted}{ts}Counted{/ts}{/icon}</td> - <td class="crmf-weight">{$row.weight}</td> + <td class="crmf-weight">{$row.weight|smarty:nodefaults}</td> <td class="crmf-visibility">{$row.visibility}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl index 4e12846cfd..92dffc63a2 100644 --- a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl +++ b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl @@ -44,7 +44,7 @@ <td class="crmf-is_active center">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crmf-is_default center">{icon condition=$row.is_default}{ts}Default{/ts}{/icon} </td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/PdfFormats.tpl b/civicrm/templates/CRM/Admin/Page/PdfFormats.tpl index b715a07bca..2cb18a1fa7 100644 --- a/civicrm/templates/CRM/Admin/Page/PdfFormats.tpl +++ b/civicrm/templates/CRM/Admin/Page/PdfFormats.tpl @@ -51,8 +51,8 @@ <td class="crm-pdfFormat-name">{$row.name}</td> <td class="crm-pdfFormat-description">{$row.description}</td> <td class="crm-pdfFormat-is_default">{icon condition=$row.is_default}{ts}Default{/ts}{/icon} </td> - <td class="crm-pdfFormat-order nowrap">{$row.weight}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td class="crm-pdfFormat-order nowrap">{$row.weight|smarty:nodefaults}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl b/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl index aa39aefd0a..81a2423bde 100644 --- a/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl +++ b/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl @@ -31,7 +31,7 @@ <td class="nowrap">{if !$row.date_format}{ts}Default{/ts}{else}{$row.date_format}{/if}</td> <td align="right">{$row.start}</td> <td align="right">{$row.end}</td> - <td><span>{$row.action|replace:'xx':$row.id}</span></td> + <td><span>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</span></td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl b/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl index f1f5c79bd5..0729752e9d 100644 --- a/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl +++ b/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl @@ -54,7 +54,7 @@ {if $row.contact_type_b_display} {$row.contact_type_b_display} {if !empty($row.contact_sub_type_b)} - {$row.contact_sub_type_b}{/if} {else} {ts}All Contacts{/ts} {/if} </td> <td class="crm-relationship-is_active" id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Admin/Page/Reminders.tpl b/civicrm/templates/CRM/Admin/Page/Reminders.tpl index 3a08352e62..f4e225f4ef 100644 --- a/civicrm/templates/CRM/Admin/Page/Reminders.tpl +++ b/civicrm/templates/CRM/Admin/Page/Reminders.tpl @@ -35,7 +35,7 @@ <td class="crm-scheduleReminders-title">{$row.status}</td> <td class="crm-scheduleReminders-is_repeat">{if $row.is_repeat eq 1}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} </td> <td id="row_{$row.id}_status" class="crm-scheduleReminders-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> <td class="hiddenElement"></td> </tr> {/foreach} diff --git a/civicrm/templates/CRM/Badge/Page/Layout.tpl b/civicrm/templates/CRM/Badge/Page/Layout.tpl index c444e5cac7..8a5f4c902d 100644 --- a/civicrm/templates/CRM/Badge/Page/Layout.tpl +++ b/civicrm/templates/CRM/Badge/Page/Layout.tpl @@ -40,7 +40,7 @@ </td> <td class="crm-badge-layout-is_default">{icon condition=$row.is_default}{ts}Default{/ts}{/icon} </td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Campaign/Form/Petition.tpl b/civicrm/templates/CRM/Campaign/Form/Petition.tpl index 8b60e03238..431e4cbe05 100644 --- a/civicrm/templates/CRM/Campaign/Form/Petition.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Petition.tpl @@ -100,6 +100,18 @@ <div class="description">{ts}Is this the default petition?{/ts}</div> </td> </tr> + <tr class="crm-campaign-survey-form-block-links"> + <td class="label"><label>{ts}Links to sign this petition{/ts}</label></td> + <td> + {if $surveyId} + {ts}Public{/ts}: <pre>{$config->userFrameworkBaseURL}civicrm/petition/sign?sid={$surveyId}&reset=1</pre><br/> + {ts}CiviMail{/ts}: <pre>{$config->userFrameworkBaseURL}civicrm/petition/sign?sid={$surveyId}&reset=1&{contact.checksum}&cid={contact.contact_id}</pre></br/> + <div class="description">{ts}Copy and paste the public link anywhere on the Internet, including social media. The CiviMail link should only be copied into a CiviMail message. It will pre-populate the profile with existing information for the person who receives the email.{/ts}</div> + {else} + <div class="description">{ts}The links will be visible after you save the petition.{/ts}</div> + {/if} + </td> + </tr> </table> {include file="CRM/common/customDataBlock.tpl"} {/if} diff --git a/civicrm/templates/CRM/Campaign/Page/SurveyType.tpl b/civicrm/templates/CRM/Campaign/Page/SurveyType.tpl index 1a1f1616ed..9fed46dd17 100644 --- a/civicrm/templates/CRM/Campaign/Page/SurveyType.tpl +++ b/civicrm/templates/CRM/Campaign/Page/SurveyType.tpl @@ -32,10 +32,10 @@ <td class="crm-admin-options-label crm-editable" data-field="label">{$row.label}</td> <td class="crm-admin-options-value">{$row.value}</td> <td class="crm-admin-options-description">{if !empty($row.description)}{$row.description}{/if}</td> - <td class="nowrap crm-admin-options-order">{$row.weight}</td> + <td class="nowrap crm-admin-options-order">{$row.weight|smarty:nodefaults}</td> <td class="crm-admin-options-is_reserved">{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-admin-options-is_active" id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Case/Page/Tab.tpl b/civicrm/templates/CRM/Case/Page/Tab.tpl index ac1a4e2b44..9d54b54171 100644 --- a/civicrm/templates/CRM/Case/Page/Tab.tpl +++ b/civicrm/templates/CRM/Case/Page/Tab.tpl @@ -44,7 +44,7 @@ call_user_func(array('CRM_Core_Permission','check'), 'add cases') ) AND $allowToAddNewCase} <div class="action-link"> - <a accesskey="N" href="{$newCaseURL}" class="button no-popup"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Case{/ts}</span></a> + <a accesskey="N" href="{$newCaseURL|smarty:nodefaults}" class="button no-popup"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Case{/ts}</span></a> </div> {/if} diff --git a/civicrm/templates/CRM/Contact/Form/Contact.hlp b/civicrm/templates/CRM/Contact/Form/Contact.hlp index db78ae09bc..27ad165292 100644 --- a/civicrm/templates/CRM/Contact/Form/Contact.hlp +++ b/civicrm/templates/CRM/Contact/Form/Contact.hlp @@ -7,19 +7,13 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{htxt id="id-emailFormat-title"} - {ts}Email Format{/ts} -{/htxt} -{htxt id="id-emailFormat"} -{ts}Select the email format preferred by this contact. Select 'Both' to send HTML and Text formats.{/ts} -{/htxt} {htxt id="id-bulkmail-title"} {ts}Bulk Mailings{/ts} {/htxt} {htxt id="id-bulkmail"} {ts}If you are using the CiviMail component to send mailings to contacts, this field provides additional control over which email address is used. By default, CiviMail sends mail to each contact's preferred email address. If the contact has multiple locations, then the preferred email of the primary location is used. However, if the contact prefers to have CiviMail ('bulk') mailings set to an alternate email address - check the 'Use for Bulk Mailings' box next to that email address.{/ts} -{/htxt} +{/htxt} {htxt id="id-optOut-title"} {ts}Opt Out{/ts} diff --git a/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl index 72fb1dec11..f69e2a764c 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl @@ -9,12 +9,7 @@ *} <div class="crm-block crm-form-block crm-import-datasource-form-block"> -{if $showOnlyDataSourceFormPane} - {include file=$dataSourceFormTemplateFile} -{else} {* Import Wizard - Step 1 (choose data source) *} - {* @var $form Contains the array for the form elements and other form associated information assigned to the template by the controller *} - {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} {include file="CRM/common/WizardHeader.tpl"} <div class="help"> @@ -33,9 +28,6 @@ {* Data source form pane is injected here when the data source is selected. *} <div id="data-source-form-block"> - {if $dataSourceFormTemplateFile} - {include file=$dataSourceFormTemplateFile} - {/if} </div> <div id="common-form-controls" class="form-item"> @@ -44,15 +36,15 @@ <tr class="crm-import-datasource-form-block-contactType"> <td class="label">{$form.contactType.label}</td> <td>{$form.contactType.html} {help id='contact-type'} - <span id="contact-subtype">{$form.subType.label} {$form.subType.html} {help id='contact-sub-type'}</span></td> + <span id="contact-subtype">{$form.contactSubType.label} {$form.contactSubType.html} {help id='contact-sub-type'}</span></td> </tr> <tr class="crm-import-datasource-form-block-onDuplicate"> <td class="label">{$form.onDuplicate.label}</td> <td>{$form.onDuplicate.html} {help id='dupes'}</td> </tr> <tr class="crm-import-datasource-form-block-dedupe"> - <td class="label">{$form.dedupe.label}</td> - <td><span id="contact-dedupe">{$form.dedupe.html}</span> {help id='id-dedupe_rule'}</td> + <td class="label">{$form.dedupe_rule_id.label}</td> + <td><span id="contact-dedupe_rule_id">{$form.dedupe_rule_id.html}</span> {help id='id-dedupe_rule'}</td> </tr> <tr class="crm-import-datasource-form-block-fieldSeparator"> <td class="label">{$form.fieldSeparator.label}</td> @@ -106,7 +98,7 @@ function buildDataSourceFormBlock(dataSource) { - var dataUrl = {/literal}"{crmURL p=$urlPath h=0 q=$urlPathVar}"{literal}; + var dataUrl = {/literal}"{crmURL p=$urlPath h=0 q=$urlPathVar|smarty:nodefaults}"{literal}; if (!dataSource ) { var dataSource = cj("#dataSource").val(); @@ -131,16 +123,16 @@ success: function(subtype){ if ( subtype.length == 0 ) { - cj("#subType").empty(); + cj("#contactSubType").empty(); cj("#contact-subtype").hide(); } else { cj("#contact-subtype").show(); - cj("#subType").empty(); + cj("#contactSubType").empty(); - cj("#subType").append("<option value=''>- {/literal}{ts escape='js'}select{/ts}{literal} -</option>"); + cj("#contactSubType").append("<option value=''>- {/literal}{ts escape='js'}select{/ts}{literal} -</option>"); for ( var key in subtype ) { // stick these new options in the subtype select - cj("#subType").append("<option value="+key+">"+subtype[key]+" </option>"); + cj("#contactSubType").append("<option value="+key+">"+subtype[key]+" </option>"); } } @@ -159,16 +151,16 @@ success: function(dedupe){ if ( dedupe.length == 0 ) { - cj("#dedupe").empty(); + cj("#dedupe_rule_id").empty(); cj("#contact-dedupe").hide(); } else { cj("#contact-dedupe").show(); - cj("#dedupe").empty(); + cj("#dedupe_rule_id").empty(); - cj("#dedupe").append("<option value=''>- {/literal}{ts escape='js'}select{/ts}{literal} -</option>"); + cj("#dedupe_rule_id").append("<option value=''>- {/literal}{ts escape='js'}select{/ts}{literal} -</option>"); for ( var key in dedupe ) { // stick these new options in the dedupe select - cj("#dedupe").append("<option value="+key+">"+dedupe[key]+" </option>"); + cj("#dedupe_rule_id").append("<option value="+key+">"+dedupe[key]+" </option>"); } } @@ -180,5 +172,5 @@ </script> {/literal} -{/if} + </div> diff --git a/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl b/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl index 388b2f77e2..a5f888946d 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl @@ -19,7 +19,7 @@ </div> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> {* Table for mapping data to CRM fields *} - {include file="CRM/Contact/Import/Form/MapTable.tpl} + {include file="CRM/Contact/Import/Form/MapTable.tpl" mapper=$form.mapper} <script type="text/javascript" > {literal} diff --git a/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl b/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl index 5d6f22a44b..e0fbce6125 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl @@ -10,154 +10,97 @@ <div class="crm-block crm-form-block crm-import-maptable-form-block"> {* Import Wizard - Data Mapping table used by MapFields.tpl and Preview.tpl *} - <div id="map-field"> + <div id="map-field"> {strip} <table class="selector"> {if $savedMappingName} - <tr class="columnheader-dark"><th colspan="4">{ts 1=$savedMappingName}Saved Field Mapping: %1{/ts}</td></tr> + <tr class="columnheader-dark"><th colspan="4">{ts 1=$savedMappingName}Saved Field Mapping: %1{/ts}</td></tr> {/if} - <tr class="columnheader"> - {if $showColNames} - {assign var="totalRowsDisplay" value=$rowDisplayCount+1} - {else} - {assign var="totalRowsDisplay" value=$rowDisplayCount} - {/if} - {section name=rows loop=$totalRowsDisplay} - {if $smarty.section.rows.iteration == 1 and $showColNames} - <td>{ts}Column Names{/ts}</td> - {elseif $showColNames} - <td>{ts 1=$smarty.section.rows.iteration-1}Import Data (row %1){/ts}</td> - {else} - <td>{ts 1=$smarty.section.rows.iteration}Import Data (row %1){/ts}</td> - {/if} - {/section} - - <td>{ts}Matching CiviCRM Field{/ts}</td> - </tr> - - {*Loop on columns parsed from the import data rows*} - {section name=cols loop=$columnCount} - {assign var="i" value=$smarty.section.cols.index} - <tr style="border: 1px solid #DDDDDD;"> - - {if $showColNames} - <td class="even-row labels">{$columnNames[$i]}</td> - {/if} - - {section name=rows loop=$rowDisplayCount} - {assign var="j" value=$smarty.section.rows.index} - <td class="odd-row">{$dataValues[$j][$i]|escape}</td> - {/section} - - {* Display mapper <select> field for 'Map Fields', and mapper value for 'Preview' *} - <td class="form-item even-row{if $wizard.currentStepName == 'Preview'} labels{/if}"> - {if $wizard.currentStepName == 'Preview'} - {if $relatedContactDetails && $relatedContactDetails[$i] != ''} - {$mapper[$i]} - {$relatedContactDetails[$i]} - - {if $relatedContactLocType && $relatedContactLocType[$i] != ''} - - {$relatedContactLocType[$i]} - {/if} - - {if $relatedContactPhoneType && $relatedContactPhoneType[$i] != ''} - - {$relatedContactPhoneType[$i]} - {/if} - - {* append IM Service Provider type for related contact *} - {if $relatedContactImProvider && $relatedContactImProvider[$i] != ''} - - {$relatedContactImProvider[$i]} - {/if} - - {* append website type *} - {if $relatedContactWebsiteType && $relatedContactWebsiteType[$i] != ''} - - {$relatedContactWebsiteType[$i]} - {/if} + {* Header row - has column for column names if they have been supplied *} + <tr class="columnheader"> + {if $columnNames} + <td>{ts}Column Names{/ts}</td> + {/if} + {foreach from=$dataValues item=row key=index} + {math equation="x + y" x=$index y=1 assign="rowNumber"} + <td>{ts 1=$rowNumber}Import Data (row %1){/ts}</td> + {/foreach} + <td>{ts}Matching CiviCRM Field{/ts}</td> + </tr> + + {*Loop on columns parsed from the import data rows*} + {foreach from=$mapper key=i item=mapperField} + <tr style="border: 1px solid #DDDDDD;"> + {if array_key_exists($i, $columnNames)} + <td class="even-row labels">{$columnNames[$i]}</td> + {/if} + {foreach from=$dataValues item=row key=index} + <td class="odd-row">{$row[$i]|escape}</td> + {/foreach} + + {* Display mapper <select> field for 'Map Fields', and mapper value for 'Preview' *} + <td class="form-item even-row{if $wizard.currentStepName == 'Preview'} labels{/if}"> + {if $wizard.currentStepName == 'Preview'} + {$mapperField} {else} - - {if $locations[$i]} - {$locations[$i]} - - {/if} - - {if $phones[$i]} - {$phones[$i]} - - {/if} - - {* append IM Service provider type for contact *} - {if $ims[$i]} - {$ims[$i]} - - {/if} - - {* append website type *} - {if $websites[$i]} - {$websites[$i]} - - {/if} - - {*else*} - {$mapper[$i]} - {*/if*} - {/if} - {else} - {$form.mapper[$i].html|smarty:nodefaults} - {/if} - </td> - - </tr> - {/section} - - </table> + {$mapperField.html|smarty:nodefaults} + {/if} + </td> + </tr> + {/foreach} + </table> {/strip} - {if $wizard.currentStepName != 'Preview'} + {if $wizard.currentStepName != 'Preview'} <div> - {if $savedMappingName} - <span>{$form.updateMapping.html} {$form.updateMapping.label}</span> + <span>{$form.updateMapping.html} {$form.updateMapping.label}</span> {/if} <span>{$form.saveMapping.html} {$form.saveMapping.label}</span> <div id="saveDetails" class="form-item"> - <table class="form-layout-compressed"> - <tr class="crm-import-maptable-form-block-saveMappingName"> - <td class="label">{$form.saveMappingName.label}</td> - <td>{$form.saveMappingName.html}</td> - </tr> - <tr class="crm-import-maptable-form-block-saveMappingName"> - <td class="label">{$form.saveMappingDesc.label}</td> - <td>{$form.saveMappingDesc.html}</td> - </tr> - </table> + <table class="form-layout-compressed"> + <tr class="crm-import-maptable-form-block-saveMappingName"> + <td class="label">{$form.saveMappingName.label}</td> + <td>{$form.saveMappingName.html}</td> + </tr> + <tr class="crm-import-maptable-form-block-saveMappingName"> + <td class="label">{$form.saveMappingDesc.label}</td> + <td>{$form.saveMappingDesc.html}</td> + </tr> + </table> </div> - <script type="text/javascript"> - {if $mappingDetailsError } - cj('#saveDetails').show(); - {else} - cj('#saveDetails').hide(); - {/if} - - {literal} - function showSaveDetails(chkbox) { - if (chkbox.checked) { + {literal} + <script type="text/javascript"> + if (cj('#saveMapping').prop('checked')) { + cj('#saveDetails').show(); + } else { + cj('#saveDetails').hide(); + } + + function showSaveDetails(chkbox) { + if (chkbox.checked) { document.getElementById("saveDetails").style.display = "block"; document.getElementById("saveMappingName").disabled = false; document.getElementById("saveMappingDesc").disabled = false; - } else { + } else { document.getElementById("saveDetails").style.display = "none"; document.getElementById("saveMappingName").disabled = true; document.getElementById("saveMappingDesc").disabled = true; } - } - cj('select[id^="mapper"][id$="[0]"]').addClass('huge'); - {/literal} - {include file="CRM/common/highLightImport.tpl" relationship=true} - - {* // Set default location type *} - {literal} - CRM.$(function($) { - var defaultLocationType = "{/literal}{$defaultLocationType}{literal}"; - if (defaultLocationType.length) { - $('#map-field').on('change', 'select[id^="mapper"][id$="_0"]', function() { - var select = $(this).next(); - $('option', select).each(function() { + } + cj('select[id^="mapper"][id$="[0]"]').addClass('huge'); + {/literal} + {include file="CRM/common/highLightImport.tpl" relationship=true} + + {* // Set default location type *} + {literal} + CRM.$(function($) { + var defaultLocationType = "{/literal}{$defaultLocationType}{literal}"; + if (defaultLocationType.length) { + $('#map-field').on('change', 'select[id^="mapper"][id$="_0"]', function() { + var select = $(this).next(); + $('option', select).each(function() { if ($(this).attr('value') == defaultLocationType && $(this).text() == {/literal}{$defaultLocationTypeLabel|@json_encode}{literal}) { select.val(defaultLocationType); @@ -167,8 +110,8 @@ } }); {/literal} - </script> + </script> </div> {/if} - </div> + </div> </div> diff --git a/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl b/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl index e899d3daf4..1dbbbb9830 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl @@ -20,13 +20,7 @@ {if $invalidRowCount} <p class="error"> - {ts 1=$invalidRowCount 2=$downloadErrorRecordsUrl}CiviCRM has detected invalid data or formatting errors in %1 records. If you continue, these records will be skipped. OR, you can download a file with just these problem records - <a href='%2'>Download Errors</a>. Then correct them in the original import file, cancel this import and begin again at step 1.{/ts} - </p> - {/if} - - {if $conflictRowCount} - <p class="error"> - {ts 1=$conflictRowCount 2=$downloadConflictRecordsUrl}CiviCRM has detected %1 records with conflicting email addresses within this data file. If you continue, these records will be skipped. OR, you can download a file with just these problem records - <a href='%2'>Download Conflicts</a>. Then correct them in the original import file, cancel this import and begin again at step 1.{/ts} + {ts 1=$invalidRowCount 2=$downloadErrorRecordsUrl|smarty:nodefaults}CiviCRM has detected invalid data or formatting errors in %1 records. If you continue, these records will be skipped. OR, you can download a file with just these problem records - <a href='%2'>Download Errors</a>. Then correct them in the original import file, cancel this import and begin again at step 1.{/ts} </p> {/if} @@ -48,18 +42,7 @@ <td class="data">{$invalidRowCount}</td> <td class="explanation">{ts}Rows with invalid data in one or more fields (for example, invalid email address formatting). These rows will be skipped (not imported).{/ts} {if $invalidRowCount} - <div class="action-link"><a href="{$downloadErrorRecordsUrl}"><i class="crm-i fa-download" aria-hidden="true"></i> {ts}Download Errors{/ts}</a></div> - {/if} - </td> - </tr> - {/if} - - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows{/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting email addresses within this file. These rows will be skipped (not imported).{/ts} - {if $conflictRowCount} - <div class="action-link"><a href="{$downloadConflictRecordsUrl}"><i class="crm-i fa-download" aria-hidden="true"></i> {ts}Download Conflicts{/ts}</a></div> + <div class="action-link"><a href="{$downloadErrorRecordsUrl|smarty:nodefaults}"><i class="crm-i fa-download" aria-hidden="true"></i> {ts}Download Errors{/ts}</a></div> {/if} </td> </tr> diff --git a/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl b/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl index 0b3577e65c..39c022d0a0 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl @@ -33,16 +33,7 @@ {ts count=$invalidRowCount plural='CiviCRM has detected invalid data and/or formatting errors in %count records. These records have not been imported.'}CiviCRM has detected invalid data and/or formatting errors in one record. This record has not been imported.{/ts} </p> <p class="error"> - {ts 1=$downloadErrorRecordsUrl}You can <a href='%1'>Download Errors</a>. You may then correct them, and import the new file with the corrected data.{/ts} - </p> - {/if} - - {if $conflictRowCount} - <p class="error"> - {ts count=$conflictRowCount plural='CiviCRM has detected %count records with conflicting email addresses within this data file or relative to existing contact records. These records have not been imported.'}CiviCRM has detected one record with conflicting email addresses within this data file or relative to existing contact records. This record has not been imported.{/ts} {ts}CiviCRM does not allow multiple contact records to have the same primary email address.{/ts} - </p> - <p class="error"> - {ts 1=$downloadConflictRecordsUrl}You can <a href='%1'>Download Conflicts</a>. You may then review these records to determine if they are actually conflicts, and correct the email addresses for those that are not.{/ts} + {ts 1=$downloadErrorRecordsUrl|smarty:nodefaults}You can <a href='%1'>Download Errors</a>. You may then correct them, and import the new file with the corrected data.{/ts} </p> {/if} @@ -75,7 +66,7 @@ <td class="data">{$invalidRowCount}</td> <td class="explanation">{ts}Rows with invalid data in one or more fields (for example, invalid email address formatting). These rows will be skipped (not imported).{/ts} {if $invalidRowCount} - <div class="action-link"><a href="{$downloadErrorRecordsUrl}"><i class="crm-i fa-download" aria-hidden="true"></i> {ts}Download Errors{/ts}</a></div> + <div class="action-link"><a href="{$downloadErrorRecordsUrl|smarty:nodefaults}"><i class="crm-i fa-download" aria-hidden="true"></i> {ts}Download Errors{/ts}</a></div> {/if} </td> </tr> @@ -92,17 +83,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows (skipped){/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting email addresses (NOT imported).{/ts} - {if $conflictRowCount} - <div class="action-link"><a href="{$downloadConflictRecordsUrl}"><i class="crm-i fa-download" aria-hidden="true"></i> {ts}Download Conflicts{/ts}</a></div> - {/if} - </td> - </tr> - {/if} - {if $duplicateRowCount && $dupeError} <tr class="error"><td class="label crm-grid-cell">{ts}Duplicate Rows{/ts}</td> <td class="data">{$duplicateRowCount}</td> diff --git a/civicrm/templates/CRM/Contact/Page/ContactImage.tpl b/civicrm/templates/CRM/Contact/Page/ContactImage.tpl index a990d7dc89..2a86535258 100644 --- a/civicrm/templates/CRM/Contact/Page/ContactImage.tpl +++ b/civicrm/templates/CRM/Contact/Page/ContactImage.tpl @@ -11,7 +11,7 @@ <div class="crm-contact_image crm-contact_image-block"> {$imageURL} </div> - {if $action eq 0 or $action neq 1} + {if $action eq 0 or $action neq 1 and $deleteURL} <div class='crm-contact_image-block crm-contact_image crm-contact_image-delete'>{$deleteURL}</div> {/if} {/crmRegion} diff --git a/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl b/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl index 60c8cc87a4..eaef744173 100644 --- a/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl +++ b/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl @@ -38,7 +38,7 @@ <tr class="{cycle values="odd-row,even-row"}"> <td>{$row.title}</td> <td>{$row.used_display}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl index f6eb81a871..e785c9af6e 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl @@ -111,7 +111,7 @@ <ul class="crm-contact-tabs-list"> {foreach from=$allTabs item=tabValue} <li id="tab_{$tabValue.id}" class="crm-tab-button ui-corner-all{if is_numeric($tabValue.count)} crm-count-{$tabValue.count}{/if}{if $tabValue.class} {$tabValue.class}{/if}"> - <a href="{if $tabValue.template}#contact-{$tabValue.id}{else}{$tabValue.url}{/if}" title="{$tabValue.title|escape}"> + <a href="{if $tabValue.template}#contact-{$tabValue.id}{else}{$tabValue.url|smarty:nodefaults}{/if}" title="{$tabValue.title|escape}"> <i class="{if !empty($tabValue.icon)}{$tabValue.icon}{else}crm-i fa-puzzle-piece{/if}" aria-hidden="true"></i> <span>{$tabValue.title}</span> {if empty($tabValue.hideCount)}<em>{if is_numeric($tabValue.count)}{$tabValue.count}{/if}</em>{/if} diff --git a/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl index 9616358585..5395b37fcf 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl @@ -7,36 +7,4 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{* Contribution Import Wizard - Step 1 (upload data file) *} -{* @var $form Contains the array for the form elements and other form associated information assigned to the template by the controller *} - <div class="crm-block crm-form-block crm-contribution-import-uploadfile-form-block" id="upload-file"> - {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} -{include file="CRM/common/WizardHeader.tpl"} -<div class="help"> - {ts}The Contribution Import Wizard allows you to easily upload contributions from other applications into CiviCRM.{/ts} - {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match the contribution to an existing contact in your CiviCRM database.{/ts} {help id='upload'} - </div> -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> - <table class="form-layout-compressed"> - <tr><td class="label">{$form.uploadFile.label}</td><td class="html-adjust"> {$form.uploadFile.html}<br /> - <span class="description">{ts}File format must be comma-separated-values (CSV).{/ts}</span></td></tr> - <tr><td class="label"></td><td>{ts 1=$uploadSize}Maximum Upload File Size: %1 MB{/ts}</td></tr> - <tr><td class="label"></td><td>{$form.skipColumnHeader.html}{$form.skipColumnHeader.label}<br /> - <span class="description"> - {ts}Check this box if the first row of your file consists of field names (Example: 'Contact ID', 'Amount').{/ts} </span></td></tr> - <tr><td class="{$form.contactType.name} label">{$form.contactType.label}</td><td class="{$form.contactType.name}">{$form.contactType.html}<br /> - <span class="description"> - {ts}Select 'Individual' if you are importing contributions made by individual persons.{/ts} - {ts}Select 'Organization' or 'Household' if you are importing contributions made by contacts of that type. (NOTE: Some built-in contact types may not be enabled for your site.){/ts}</span></td></tr> - <tr><td class="label">{$form.onDuplicate.label}</td><td>{$form.onDuplicate.html} {help id="id-onDuplicate"}</td></tr> - <tr class="crm-import-datasource-form-block-fieldSeparator"> - <td class="label">{$form.fieldSeparator.label} {help id='id-fieldSeparator' file='CRM/Contact/Import/Form/DataSource'}</td> - <td>{$form.fieldSeparator.html}</td> - </tr> - <tr>{include file="CRM/Core/Date.tpl"}</tr> - {if $savedMapping} - <tr> <td class="label">{$form.savedMapping.label}</td><td>{$form.savedMapping.html}<br /> <span class="description">{ts}Select a saved field mapping if this file format matches a previous import.{/ts}</span></tr> - {/if} - </table> -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> - </div> +{include file="CRM/Import/Form/DataSource.tpl"} diff --git a/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl b/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl index 2f1a625acd..bf4557bcf0 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl @@ -24,13 +24,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts 1=$conflictRowCount 2=$downloadConflictRecordsUrl}CiviCRM has detected %1 records with conflicting transaction ids within this data file. If you continue, these records will be skipped. You can download a file with just these problem records: <a href='%2'>Download Conflicts</a>. If you wish, you can then correct them in the original import file, cancel this import and begin again at step 1.{/ts} - </p> - {/if} - - <p>{ts}Click 'Import Now' if you are ready to proceed.{/ts}</p> </div> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> @@ -53,17 +46,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows{/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting transaction ids within this file. These rows will be skipped (not imported).{/ts} - {if $conflictRowCount} - <p><a href="{$downloadConflictRecordsUrl}">{ts}Download Conflicts{/ts}</a></p> - {/if} - </td> - </tr> - {/if} - <tr><td class="label crm-grid-cell">{ts}Valid Rows{/ts}</td> <td class="data">{$validRowCount}</td> <td class="explanation">{ts}Total rows to be imported.{/ts}</td> diff --git a/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl b/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl index ae7bc83cb7..7d0c860060 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl @@ -36,15 +36,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts count=$conflictRowCount plural='CiviCRM has detected %count records with conflicting transaction IDs within this data file or relative to existing contribution records. These records have not been imported.'}CiviCRM has detected one record with conflicting transaction ID within this data file or relative to existing contribution records. This record has not been imported.{/ts} - </p> - <p class="error"> - {ts 1=$downloadConflictRecordsUrl}You can <a href="%1">Download Conflicts</a>. You may then review these records to determine if they are actually conflicts, and correct the transaction IDs for those that are not.{/ts} - </p> - {/if} - {if $duplicateRowCount} <p {if $dupeError}class="error"{/if}> {ts count=$duplicateRowCount plural='CiviCRM has detected %count records which are duplicates of existing CiviCRM contribution records.'}CiviCRM has detected one record which is a duplicate of existing CiviCRM contribution record.{/ts} {$dupeActionString} @@ -119,17 +110,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows (skipped){/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting transaction IDs (NOT imported).{/ts} - {if $conflictRowCount} - <p><a href="{$downloadConflictRecordsUrl}">{ts}Download Conflicts{/ts}</a></p> - {/if} - </td> - </tr> - {/if} - {if $duplicateRowCount} <tr class="error"><td class="label crm-grid-cell">{ts}Duplicate Rows{/ts}</td> <td class="data">{$duplicateRowCount}</td> diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl index 8a82454224..a73e848dda 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl @@ -39,7 +39,7 @@ <td>{if $row.is_deductible eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td>{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl b/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl index b89564b9b2..86ea41e613 100644 --- a/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl @@ -52,10 +52,10 @@ <table class="form-layout-compressed"> <tr> <td> - <a href="{$configPagesURL}" class="button no-popup"><span>{ts}Manage Contribution Pages{/ts}</span></a> + <a href="{$configPagesURL|smarty:nodefaults}" class="button no-popup"><span>{ts}Manage Contribution Pages{/ts}</span></a> </td> <td> - <a href="{$newPageURL}" class="button no-popup"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Contribution Page{/ts}</span></a> + <a href="{$newPageURL|smarty:nodefaults}" class="button no-popup"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Contribution Page{/ts}</span></a> </td> </tr> </table> diff --git a/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl b/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl index f80c43e5dc..9760a62a99 100644 --- a/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl @@ -51,7 +51,7 @@ <td class="crm-contribution-form-block-cost">{$row.cost|crmMoney}</td> <td class="crm-contribution-form-block-financial_type">{$row.financial_type}</td> <td id="row_{$row.id}_status" >{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td id={$row.id}>{$row.action|replace:'xx':$row.id}</td> + <td id={$row.id}>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Contribute/Page/Premium.tpl b/civicrm/templates/CRM/Contribute/Page/Premium.tpl index 18a30af042..d223c9df94 100644 --- a/civicrm/templates/CRM/Contribute/Page/Premium.tpl +++ b/civicrm/templates/CRM/Contribute/Page/Premium.tpl @@ -34,7 +34,7 @@ <td class="crm-contribution-form-block-min_contribution">{$row.min_contribution|crmMoney}</td> <td class="crm-contribution-form-block-cost">{$row.cost|crmMoney}</td> <td class="crm-contribution-form-block-financial_type">{$row.financial_type}</td> - <td class="nowrap crm-contribution-form-block-weight">{$row.weight}</td> + <td class="nowrap crm-contribution-form-block-weight">{$row.weight|smarty:nodefaults}</td> <td class="crm-contribution-form-block-action">{$row.action}</td> </tr> {/foreach} diff --git a/civicrm/templates/CRM/Contribute/Page/Tab.tpl b/civicrm/templates/CRM/Contribute/Page/Tab.tpl index e6b2ce8d71..b02d5d4958 100644 --- a/civicrm/templates/CRM/Contribute/Page/Tab.tpl +++ b/civicrm/templates/CRM/Contribute/Page/Tab.tpl @@ -34,12 +34,12 @@ <div class="help"> {if $permission EQ 'edit'} {capture assign=newContribURL}{crmURL p="civicrm/contact/view/contribution" q="reset=1&action=add&cid=`$contactId`&context=contribution"}{/capture} - {capture assign=link}class="action-item" href="{$newContribURL}"{/capture} - {ts 1=$link}Click <a %1>Record Contribution</a> to record a new contribution received from this contact.{/ts} + {capture assign=link}class="action-item" href="{$newContribURL|smarty:nodefaults}"{/capture} + {ts 1=$link|smarty:nodefaults}Click <a %1>Record Contribution</a> to record a new contribution received from this contact.{/ts} {if $newCredit} {capture assign=newCreditURL}{crmURL p="civicrm/contact/view/contribution" q="reset=1&action=add&cid=`$contactId`&context=contribution&mode=live"}{/capture} - {capture assign=link}class="action-item" href="{$newCreditURL}"{/capture} - {ts 1=$link}Click <a %1>Submit Credit Card Contribution</a> to process a new contribution on behalf of the contributor using their credit card.{/ts} + {capture assign=link}class="action-item" href="{$newCreditURL|smarty:nodefaults}"{/capture} + {ts 1=$link|smarty:nodefaults}Click <a %1>Submit Credit Card Contribution</a> to process a new contribution on behalf of the contributor using their credit card.{/ts} {/if} {else} {ts 1=$displayName}Contributions received from %1 since inception.{/ts} @@ -48,9 +48,9 @@ {if $action eq 16 and $permission EQ 'edit'} <div class="action-link"> - <a accesskey="N" href="{$newContribURL}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Record Contribution (Check, Cash, EFT ...){/ts}</span></a> + <a accesskey="N" href="{$newContribURL|smarty:nodefaults}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Record Contribution (Check, Cash, EFT ...){/ts}</span></a> {if $newCredit} - <a accesskey="N" href="{$newCreditURL}" class="button"><span><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}Submit Credit Card Contribution{/ts}</span></a> + <a accesskey="N" href="{$newCreditURL|smarty:nodefaults}" class="button"><span><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}Submit Credit Card Contribution{/ts}</span></a> {/if} <br /><br /> </div> diff --git a/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl index 38b479dc33..a5fde9dd84 100644 --- a/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl @@ -8,25 +8,24 @@ +--------------------------------------------------------------------+ *} -{* Multi-value Custom Data Import Wizard - Step 1 (upload data file) *} -{* @var $form Contains the array for the form elements and other form associated information assigned to the template by the controller *} +{* Import Wizard - Step 1 (choose data source) *} +<div class="crm-block crm-form-block crm-import-datasource-form-block"> -<div class="crm-block crm-form-block crm-custom-import-uploadfile-form-block"> - {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} - {include file="CRM/common/WizardHeader.tpl"} + {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} + {include file="CRM/common/WizardHeader.tpl"} {if !$fieldGroups} <div class="messages warning no-popup"> {ts}This import screen cannot be used because there are no Multi-value custom data groups.{/ts} </div> {/if} - <div class="help"> - {ts}The Multi-value Custom Data Import Wizard allows you to easily upload data to populate multi-value custom data records (such as employment or education history) for existing contacts.{/ts} - {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match the incoming data to an existing contact record in your CiviCRM database.{/ts} {help id='upload'} - </div> + <div class="help"> + {ts 1=$importEntity 2= $importEntities}The %1 Import Wizard allows you to easily upload %2 from other applications into CiviCRM.{/ts} + {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match an existing contact in your CiviCRM database.{/ts} {help id='upload'} + </div> <div id="upload-file" class="form-item"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout"> - <tr class="crm-custom-import-uploadfile-form-block-uploadFile"> + <tr class="crm-import-uploadfile-form-block-uploadFile"> <td class="label">{$form.uploadFile.label}</td> <td>{$form.uploadFile.html}<br /> <span class="description"> @@ -46,11 +45,11 @@ </span> </td> </tr> - <tr class="crm-custom-import-uploadfile-form-block-multipleCustomData"> + <tr class="crm-import-uploadfile-form-block-multipleCustomData"> <td class="label">{$form.multipleCustomData.label}</td> <td><span>{$form.multipleCustomData.html}</span> </td> </tr> - <tr class="crm-custom-import-uploadfile-from-block-contactType"> + <tr class="crm-import-uploadfile-from-block-contactType"> <td class="label">{$form.contactType.label}</td> <td>{$form.contactType.html}</td> </tr> @@ -59,11 +58,11 @@ <td class="label">{$form.fieldSeparator.label} {help id='id-fieldSeparator' file='CRM/Contact/Import/Form/DataSource'}</td> <td>{$form.fieldSeparator.html}</td> </tr> - <tr class="crm-custom-import-uploadfile-form-block-date_format"> + <tr class="crm-import-uploadfile-form-block-date_format"> {include file="CRM/Core/Date.tpl"} </tr> {if $savedMapping} - <tr class="crm-custom-import-uploadfile-form-block-savedMapping"> + <tr class="crm-import-uploadfile-form-block-savedMapping"> <td class="label">{$form.savedMapping.label}</td> <td><span>{$form.savedMapping.html}</span> </td> </tr> diff --git a/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl index 626b1d8cec..d8c4d5e2d5 100644 --- a/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl @@ -7,21 +7,19 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -{* Event Import Wizard - Step 1 (upload data file) *} -{* @var $form Contains the array for the form elements and other form associated information assigned to the template by the controller *} - -<div class="crm-block crm-form-block crm-event-import-uploadfile-form-block"> - {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} - {include file="CRM/common/WizardHeader.tpl"} +{* Import Wizard - Step 1 (choose data source) *} +<div class="crm-block crm-form-block crm-import-datasource-form-block"> + {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} + {include file="CRM/common/WizardHeader.tpl"} + <div class="help"> + {ts 1=$importEntity 2= $importEntities}The %1 Import Wizard allows you to easily upload %2 from other applications into CiviCRM.{/ts} + {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match an existing contact in your CiviCRM database.{/ts} {help id='upload'} + </div> - <div class="help"> - {ts}The Event Import Wizard allows you to easily upload event participation data such as event registrations from other applications into CiviCRM.{/ts} - {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match the participant data to an existing contact in your CiviCRM database.{/ts} {help id='upload'} - </div> <div id="upload-file" class="form-item"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout"> - <tr class="crm-event-import-uploadfile-form-block-uploadFile"> + <tr class="crm-import-uploadfile-form-block-uploadFile"> <td class="label">{$form.uploadFile.label}</td> <td>{$form.uploadFile.html}<br /> <span class="description"> @@ -33,7 +31,7 @@ <td> </td> <td>{ts 1=$uploadSize}Maximum Upload File Size: %1 MB{/ts}</td> </tr> - <tr class="crm-participants-form-block-skipColumnHeader"> + <tr class="crm-import-uploadfile-from-block-skipColumnHeader"> <td> </td> <td>{$form.skipColumnHeader.html} {$form.skipColumnHeader.label}<br /> <span class="description"> @@ -41,7 +39,7 @@ </span> </td> </tr> - <tr class="crm-event-import-uploadfile-form-block-contactType"> + <tr class="crm-import-uploadfile-form-block-contactType"> <td class="label">{$form.contactType.label}</td> <td>{$form.contactType.html}<br /> <span class="description"> @@ -50,7 +48,7 @@ </span> </td> </tr> - <tr class="crm-event-import-uploadfile-form-block-onDuplicate"> + <tr class="crm-import-uploadfile-form-block-onDuplicate"> <td class="label">{$form.onDuplicate.label}</td> <td>{$form.onDuplicate.html} {help id="id-onDuplicate"}</td> </tr> @@ -59,11 +57,11 @@ <td class="label">{$form.fieldSeparator.label} {help id='id-fieldSeparator' file='CRM/Contact/Import/Form/DataSource'}</td> <td>{$form.fieldSeparator.html}</td> </tr> - <tr class="crm-event-import-uploadfile-form-block-date_format"> + <tr class="crm-import-uploadfile-form-block-date_format"> {include file="CRM/Core/Date.tpl"} </tr> {if $savedMapping} - <tr class="crm-event-import-uploadfile-form-block-savedMapping"> + <tr class="crm-import-uploadfile-form-block-savedMapping"> <td class="label">{$form.savedMapping.label}</td> <td><span>{$form.savedMapping.html}</span> </td> </tr> diff --git a/civicrm/templates/CRM/Event/Import/Form/Preview.tpl b/civicrm/templates/CRM/Event/Import/Form/Preview.tpl index 62220cc985..e7266aac90 100644 --- a/civicrm/templates/CRM/Event/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/Preview.tpl @@ -25,13 +25,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts 1=$conflictRowCount 2=$downloadConflictRecordsUrl}CiviCRM has detected %1 records with conflicting participant IDs within this data file. If you continue, these records will be skipped. OR, you can download a file with just these problem records - <a href='%2'>Download Conflicts</a>. Then correct them in the original import file, cancel this import and begin again at step 1.{/ts} - </p> - {/if} - - <p>{ts}Click 'Import Now' if you are ready to proceed.{/ts}</p> </div> @@ -56,17 +49,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows{/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting participant IDs within this file. These rows will be skipped (not imported).{/ts} - {if $conflictRowCount} - <p><a href="{$downloadConflictRecordsUrl}">{ts}Download Conflicts{/ts}</a></p> - {/if} - </td> - </tr> - {/if} - <tr><td class="label crm-grid-cell">{ts}Valid Rows{/ts}</td> <td class="data">{$validRowCount}</td> <td class="explanation">{ts}Total rows to be imported.{/ts}</td> diff --git a/civicrm/templates/CRM/Event/Import/Form/Summary.tpl b/civicrm/templates/CRM/Event/Import/Form/Summary.tpl index 5d600cdf40..b27daf6ad0 100644 --- a/civicrm/templates/CRM/Event/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/Summary.tpl @@ -38,15 +38,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts count=$conflictRowCount plural='CiviCRM has detected %count records with conflicting participant IDs within this data file or relative to existing participant records. These records have not been imported.'}CiviCRM has detected one record with conflicting participant ID within this data file or relative to existing participant records. This record has not been imported.{/ts} - </p> - <p class="error"> - {ts 1=$downloadConflictRecordsUrl}You can <a href="%1">Download Conflicts</a>. You may then review these records to determine if they are actually conflicts, and correct the participant IDs for those that are not.{/ts} - </p> - {/if} - {if $duplicateRowCount} <p {if $dupeError}class="error"{/if}> {ts count=$duplicateRowCount plural='CiviCRM has detected %count records which are duplicates of existing CiviCRM participant records.'}CiviCRM has detected one record which is a duplicate of existing CiviCRM participant record.{/ts} {$dupeActionString} @@ -89,17 +80,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows (skipped){/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting participant IDs (NOT imported).{/ts} - {if $conflictRowCount} - <p><a href="{$downloadConflictRecordsUrl}">{ts}Download Conflicts{/ts}</a></p> - {/if} - </td> - </tr> - {/if} - {if $duplicateRowCount} <tr class="error"><td class="label crm-grid-cell">{ts}Duplicate Rows{/ts}</td> <td class="data">{$duplicateRowCount}</td> diff --git a/civicrm/templates/CRM/Event/Page/ManageEvent.tpl b/civicrm/templates/CRM/Event/Page/ManageEvent.tpl index f0dbdea85c..0adfb8893e 100644 --- a/civicrm/templates/CRM/Event/Page/ManageEvent.tpl +++ b/civicrm/templates/CRM/Event/Page/ManageEvent.tpl @@ -119,10 +119,10 @@ </span> </div> <div class="crm-event-links"> - {$row.eventlinks|replace:'xx':$row.id} + {$row.eventlinks|smarty:nodefaults|replace:'xx':$row.id} </div> <div class="crm-event-more"> - {$row.action|replace:'xx':$row.id} + {$row.action|smarty:nodefaults|replace:'xx':$row.id} </div> </td> <td class="crm-event-start_date hiddenElement">{$row.start_date|crmDate}</td> diff --git a/civicrm/templates/CRM/Event/Page/Tab.tpl b/civicrm/templates/CRM/Event/Page/Tab.tpl index 56f95044a6..2f059efdaa 100644 --- a/civicrm/templates/CRM/Event/Page/Tab.tpl +++ b/civicrm/templates/CRM/Event/Page/Tab.tpl @@ -17,22 +17,22 @@ <div class="help"> <p>{ts 1=$displayName}This page lists all event registrations for %1 since inception.{/ts} - {capture assign="link"}class="action-item" href="{$newEventURL}"{/capture} - {if $permission EQ 'edit'}{ts 1=$link}Click <a %1>Add Event Registration</a> to register this contact for an event.{/ts}{/if} + {capture assign="link"}class="action-item" href="{$newEventURL|smarty:nodefaults}"{/capture} + {if $permission EQ 'edit'}{ts 1=$link|smarty:nodefaults}Click <a %1>Add Event Registration</a> to register this contact for an event.{/ts}{/if} {if $accessContribution and $newCredit} {capture assign=newCreditURL}{crmURL p="civicrm/contact/view/participant" q="reset=1&action=add&cid=`$contactId`&context=participant&mode=live"}{/capture} - {capture assign="link"}class="action-item" href="{$newCreditURL}"{/capture} - {ts 1=$link}Click <a %1>Submit Credit Card Event Registration</a> to process a new New Registration on behalf of the participant using their credit card.{/ts} + {capture assign="link"}class="action-item" href="{$newCreditURL|smarty:nodefaults}"{/capture} + {ts 1=$link|smarty:nodefaults}Click <a %1>Submit Credit Card Event Registration</a> to process a new New Registration on behalf of the participant using their credit card.{/ts} {/if} </p> </div> {if $action eq 16 and $permission EQ 'edit'} <div class="action-link"> - <a accesskey="N" href="{$newEventURL}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Event Registration{/ts}</span></a> + <a accesskey="N" href="{$newEventURL|smarty:nodefaults}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Event Registration{/ts}</span></a> {if $accessContribution and $newCredit} - <a accesskey="N" href="{$newCreditURL}" class="button"><span><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}Submit Credit Card Event Registration{/ts}</a></span> + <a accesskey="N" href="{$newCreditURL|smarty:nodefaults}" class="button"><span><i class="crm-i fa-credit-card" aria-hidden="true"></i> {ts}Submit Credit Card Event Registration{/ts}</a></span> {/if} - <br/ ><br/ > + <br/><br/> </div> {/if} diff --git a/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl b/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl index 65ebc0dc7f..43252aa208 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl +++ b/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl @@ -54,7 +54,7 @@ <td>{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td>{icon condition=$row.is_default}{ts}Default{/ts}{/icon}</td> <td id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Financial/Page/FinancialType.tpl b/civicrm/templates/CRM/Financial/Page/FinancialType.tpl index c4f55f03ea..6ee791b70b 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialType.tpl +++ b/civicrm/templates/CRM/Financial/Page/FinancialType.tpl @@ -44,7 +44,7 @@ <td class="crm-editable" data-field="is_deductible" data-type="boolean">{if $row.is_deductible eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td>{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl b/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl index c3af8775a1..7700c2d237 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl +++ b/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl @@ -40,7 +40,7 @@ <td>{$row.financial_account_type}{if $row.account_type_code} ({$row.account_type_code}){/if}</td> <td>{$row.owned_by}</td> <td id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Form/attachment.tpl b/civicrm/templates/CRM/Form/attachment.tpl index 234880aa81..152ea3fcfb 100644 --- a/civicrm/templates/CRM/Form/attachment.tpl +++ b/civicrm/templates/CRM/Form/attachment.tpl @@ -17,7 +17,7 @@ <div id="attachFileRecord_{$attVal.fileID}"> <strong><a href="{$attVal.url}"><i class="crm-i {$attVal.icon}" aria-hidden="true"></i> {$attVal.cleanName}</a></strong> {if $attVal.description} - {$attVal.description}{/if} - {if !empty($attVal.tag)} + {if $attVal.tag} <br /> {ts}Tags{/ts}: {$attVal.tag} <br /> @@ -27,20 +27,20 @@ </td> </tr> {elseif $action NEQ 4} - {if !empty($context) && $context EQ 'pcpCampaign'} + {if $context EQ 'pcpCampaign'} {capture assign=attachTitle}{ts}Include a Picture or an Image{/ts}{/capture} {else} {capture assign=attachTitle}{ts}Attachment(s){/ts}{/capture} {/if} - <div class="crm-accordion-wrapper {if (empty($context) || $context NEQ 'pcpCampaign') AND empty($currentAttachmentInfo)}collapsed{/if}"> + <div class="crm-accordion-wrapper {if (!$context || $context NEQ 'pcpCampaign') AND !$currentAttachmentInfo}collapsed{/if}"> <div class="crm-accordion-header"> {$attachTitle} </div><!-- /.crm-accordion-header --> <div class="crm-accordion-body"> <div id="attachments"> <table class="form-layout-compressed"> - {if !empty($form.attachFile_1)} - {if !empty($context) && $context EQ 'pcpCampaign'} + {if $form.attachFile_1} + {if $context EQ 'pcpCampaign'} <div class="description">{ts}You can upload a picture or image to include on your page. Your file should be in .jpg, .gif, or .png format. Recommended image size is 250 x 250 pixels. Images over 360 pixels wide will be automatically resized to fit.{/ts}</div> {/if} <tr> @@ -49,13 +49,13 @@ <div class="description">{ts}Browse to the <strong>file</strong> you want to upload.{/ts}{if $maxAttachments GT 1} {ts 1=$maxAttachments}You can have a maximum of %1 attachment(s).{/ts}{/if} {ts 1=$config->maxFileSize}Each file must be less than %1M in size. You can also add a short description.{/ts}</div> </td> </tr> - {if !empty($form.tag_1.html)} + {if $form.tag_1} <tr> <td class="label">{$form.tag_1.label}</td> <td><div class="crm-select-container crm-attachment-tags">{$form.tag_1.html}</div></td> </tr> {/if} - {if !empty($tagsetInfo.file)} + {if $tagsetInfo && $tagsetInfo.file} <tr>{include file="CRM/common/Tagset.tpl" tagsetType='file' tableLayout=true tagsetElementName="file_taglist_1"}</tr> {/if} {section name=attachLoop start=2 loop=$numAttachments+1} @@ -68,13 +68,13 @@ <td class="label">{$form.attachFile_1.label}</td> <td>{$form.$attachName.html} {$form.$attachDesc.html}<a href="#" class="crm-hover-button crm-clear-attachment" style="visibility: hidden;" title="{ts}Clear{/ts}"><i class="crm-i fa-times" aria-hidden="true"></i></a></td> </tr> - {if !empty($form.$tagElement.html)} + {if $form.$tagElement} <tr> <td class="label">{$form.$tagElement.label}</td> <td><div class="crm-select-container crm-attachment-tags">{$form.$tagElement.html}</div></td> </tr> {/if} - {if !empty($tagsetInfo.file)} + {if $tagsetInfo && $tagsetInfo.file} <tr>{include file="CRM/common/Tagset.tpl" tagsetType='file' tableLayout=true tagsetElementName="file_taglist_$index"}</tr> {/if} {/section} @@ -92,7 +92,7 @@ {if $attVal.deleteURLArgs} <a href="#" class="crm-hover-button delete-attachment" data-filename="{$attVal.cleanName}" data-args="{$attVal.deleteURLArgs}" title="{ts}Delete File{/ts}"><span class="icon delete-icon"></span></a> {/if} - {if !empty($attVal.tag)} + {if $attVal.tag} <br/> {ts}Tags{/ts}: {$attVal.tag} <br/> diff --git a/civicrm/templates/CRM/Form/default.tpl b/civicrm/templates/CRM/Form/default.tpl index ee947e9a35..32a55b0f74 100644 --- a/civicrm/templates/CRM/Form/default.tpl +++ b/civicrm/templates/CRM/Form/default.tpl @@ -8,7 +8,7 @@ +--------------------------------------------------------------------+ *} {if !$suppressForm} -<form {$form.attributes} > +<form {$form.attributes|smarty:nodefaults}> {crmRegion name='form-top'}{/crmRegion} {/if} diff --git a/civicrm/templates/CRM/Group/Form/Edit.tpl b/civicrm/templates/CRM/Group/Form/Edit.tpl index 52ca891e9d..912a9f88f4 100644 --- a/civicrm/templates/CRM/Group/Form/Edit.tpl +++ b/civicrm/templates/CRM/Group/Form/Edit.tpl @@ -12,7 +12,7 @@ <div class="help"> {if $action eq 2} {capture assign=crmURL}class="no-popup" href="{crmURL p="civicrm/group/search" q="reset=1&force=1&context=smog&gid=`$group.id`"}"{/capture} - {ts 1=$crmURL}You can edit the Name and Description for this group here. Click <a %1>Contacts in this Group</a> to view, add or remove contacts in this group.{/ts} + {ts 1=$crmURL|smarty:nodefaults}You can edit the Name and Description for this group here. Click <a %1>Contacts in this Group</a> to view, add or remove contacts in this group.{/ts} {else} {ts}Enter a unique name and a description for your new group here. Then click 'Continue' to find contacts to add to your new group.{/ts} {/if} @@ -95,10 +95,10 @@ <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> {if $action neq 1} <div class="action-link"> - <a {$crmURL}><i class="crm-i fa-users" aria-hidden="true"></i> {ts}Contacts in this Group{/ts}</a> + <a {$crmURL|smarty:nodefaults}><i class="crm-i fa-users" aria-hidden="true"></i> {ts}Contacts in this Group{/ts}</a> {if $editSmartGroupURL} <br /> - <a class="no-popup" href="{$editSmartGroupURL}"><i class="crm-i fa-pencil" aria-hidden="true"></i> {ts}Edit Smart Group Criteria{/ts}</a> + <a class="no-popup" href="{$editSmartGroupURL|smarty:nodefaults}"><i class="crm-i fa-pencil" aria-hidden="true"></i> {ts}Edit Smart Group Criteria{/ts}</a> {/if} </div> {/if} diff --git a/civicrm/templates/CRM/Group/Page/GroupRows.tpl b/civicrm/templates/CRM/Group/Page/GroupRows.tpl index bf5323c9df..050fbf3377 100644 --- a/civicrm/templates/CRM/Group/Page/GroupRows.tpl +++ b/civicrm/templates/CRM/Group/Page/GroupRows.tpl @@ -16,6 +16,6 @@ {$row.description|mb_truncate:80:"...":true} </td> <td>{$row.visibility}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} diff --git a/civicrm/templates/CRM/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Import/Form/DataSource.tpl new file mode 100644 index 0000000000..19f582d30b --- /dev/null +++ b/civicrm/templates/CRM/Import/Form/DataSource.tpl @@ -0,0 +1,68 @@ +{* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*} + +{* Import Wizard - Step 1 (choose data source) *} +<div class="crm-block crm-form-block crm-import-datasource-form-block"> + + {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} + {include file="CRM/common/WizardHeader.tpl"} + <div class="help"> + {ts 1=$importEntity 2= $importEntities}The %1 Import Wizard allows you to easily upload %2 from other applications into CiviCRM.{/ts} + {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match an existing contact in your CiviCRM database.{/ts} {help id='upload'} + </div> + + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> + <table class="form-layout-compressed"> + <tr class="crm-import-uploadfile-from-block-uploadFile"> + <td class="label">{$form.uploadFile.label}</td> + <td class="html-adjust"> {$form.uploadFile.html}<br /> + <span class="description">{ts}File format must be comma-separated-values (CSV).{/ts}</span> + <br /><span>{ts 1=$uploadSize}Maximum Upload File Size: %1 MB{/ts}</span> + </td> + </tr> + <tr class="crm-import-uploadfile-from-block-skipColumnHeader"> + <td class="label"></td><td>{$form.skipColumnHeader.html}{$form.skipColumnHeader.label}<br /> + <span class="description"> + {ts}Check this box if the first row of your file consists of field names (Example: 'Contact ID', 'Amount').{/ts} + </span> + </td> + </tr> + <tr class="crm-import-uploadfile-from-block-contactType"> + <td class="label">{$form.contactType.label}</td> + <td>{$form.contactType.html}<br /> + <span class="description"> + {ts 1=$importEntities}Select 'Individual' if you are importing %1 made by individual persons.{/ts} + {ts 1=$importEntities}Select 'Organization' or 'Household' if you are importing %1 made by contacts of that type. (NOTE: Some built-in contact types may not be enabled for your site.){/ts} + </span> + </td> + </tr> + <tr class="crm-import-uploadfile-from-block-onDuplicate"> + <td class="label">{$form.onDuplicate.label}</td> + <td>{$form.onDuplicate.html} {help id="id-onDuplicate"}</td> + </tr> + <tr class="crm-import-datasource-form-block-fieldSeparator"> + <td class="label">{$form.fieldSeparator.label} {help id='id-fieldSeparator' file='CRM/Contact/Import/Form/DataSource'}</td> + <td>{$form.fieldSeparator.html}</td> + </tr> + <tr class="crm-import-uploadfile-from-block-date">{include file="CRM/Core/Date.tpl"}</tr> + {if $savedMapping} + <tr class="crm-import-uploadfile-from-block-savedMapping"> + <td>{$form.savedMapping.label}</td> + <td>{$form.savedMapping.html}<br /> + <span class="description">{ts}If you want to use a previously saved import field mapping - select it here.{/ts}</span> + </td> + </tr> + {/if} + </table> + <div class="spacer"></div> + + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> +</div> + diff --git a/civicrm/CRM/Utils/Hook/Drupal6.php b/civicrm/templates/CRM/Import/Form/DataSourceConfig.tpl similarity index 74% rename from civicrm/CRM/Utils/Hook/Drupal6.php rename to civicrm/templates/CRM/Import/Form/DataSourceConfig.tpl index 18f83c1127..0bf8fa2c8d 100644 --- a/civicrm/CRM/Utils/Hook/Drupal6.php +++ b/civicrm/templates/CRM/Import/Form/DataSourceConfig.tpl @@ -1,5 +1,4 @@ -<?php -/* +{* +--------------------------------------------------------------------+ | Copyright CiviCRM LLC. All rights reserved. | | | @@ -7,12 +6,5 @@ | permitted exceptions and without any warranty. For full license | | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ - */ - -/** - * - * @package CiviCRM_Hook - * @copyright CiviCRM LLC https://civicrm.org/licensing - */ -class CRM_Utils_Hook_Drupal6 extends CRM_Utils_Hook_DrupalBase { -} +*} +{include file=$dataSourceFormTemplateFile} diff --git a/civicrm/templates/CRM/Mailing/Page/Browse.tpl b/civicrm/templates/CRM/Mailing/Page/Browse.tpl index ad5a0b8d41..c0fdd64d5a 100644 --- a/civicrm/templates/CRM/Mailing/Page/Browse.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Browse.tpl @@ -70,7 +70,7 @@ {if call_user_func(array('CRM_Campaign_BAO_Campaign','isCampaignEnable'))} <td class="crm-mailing-campaign">{$row.campaign}</td> {/if} - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Mailing/Page/Component.tpl b/civicrm/templates/CRM/Mailing/Page/Component.tpl index ccc1db657f..0cae9fb864 100644 --- a/civicrm/templates/CRM/Mailing/Page/Component.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Component.tpl @@ -37,7 +37,7 @@ <td>{$row.body_text|escape}</td> <td>{icon condition=$row.is_default}{ts}Default{/ts}{/icon} </td> <td id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Mailing/Page/Report.tpl b/civicrm/templates/CRM/Mailing/Page/Report.tpl index 2687722196..c264a2b2db 100644 --- a/civicrm/templates/CRM/Mailing/Page/Report.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Report.tpl @@ -199,11 +199,11 @@ <tr><td class="label">{ts}From{/ts}</td><td>{$report.mailing.from_name} <{$report.mailing.from_email}></td></tr> <tr><td class="label">{ts}Reply-to email{/ts}</td><td>{$report.mailing.replyto_email|htmlentities}</td></tr> -<tr><td class="label">{ts}Forward replies{/ts}</td><td>{if $report.mailing.forward_replies}{ts}On{/ts}{else}{ts}Off{/ts}{/if}</td></tr> -<tr><td class="label">{ts}Auto-respond to replies{/ts}</td><td>{if $report.mailing.auto_responder}{ts}On{/ts}{else}{ts}Off{/ts}{/if}</td></tr> +<tr><td class="label">{ts}Forward replies{/ts}</td><td>{if $report.mailing.forward_replies}{ts}Enabled{/ts}{else}{ts}Disabled{/ts}{/if}</td></tr> +<tr><td class="label">{ts}Auto-respond to replies{/ts}</td><td>{if $report.mailing.auto_responder}{ts}Enabled{/ts}{else}{ts}Disabled{/ts}{/if}</td></tr> -<tr><td class="label">{ts}Open tracking{/ts}</td><td>{if $report.mailing.open_tracking}{ts}On{/ts}{else}{ts}Off{/ts}{/if}</td></tr> -<tr><td class="label">{ts}URL Click-through tracking{/ts}</td><td>{if $report.mailing.url_tracking}{ts}On{/ts}{else}{ts}Off{/ts}{/if}</td></tr> +<tr><td class="label">{ts}Open tracking{/ts}</td><td>{if $report.mailing.open_tracking}{ts}Enabled{/ts}{else}{ts}Disabled{/ts}{/if}</td></tr> +<tr><td class="label">{ts}URL Click-through tracking{/ts}</td><td>{if $report.mailing.url_tracking}{ts}Enabled{/ts}{else}{ts}Disabled{/ts}{/if}</td></tr> {if $public_url}<td class="label">{ts}Public url{/ts}</td><td><a href="{$public_url}"> {$public_url}</a></td></tr>{/if} {if $report.mailing.campaign} <tr><td class="label">{ts}Campaign{/ts}</td><td>{$report.mailing.campaign}</td></tr> diff --git a/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl index fb4cfaf060..5395b37fcf 100644 --- a/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl @@ -7,61 +7,4 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ *} - <div class="crm-block crm-form-block crm-member-import-uploadfile-form-block"> -{* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} - {include file="CRM/common/WizardHeader.tpl"} -<div class="help"> - {ts}The Membership Import Wizard allows you to easily upload memberships from other applications into CiviCRM.{/ts} - {ts}Files to be imported must be in the 'comma-separated-values' format (CSV) and must contain data needed to match the membership data to an existing contact in your CiviCRM database.{/ts} {help id='upload'} - </div> -{* Membership Import Wizard - Step 1 (upload data file) *} -{* @var $form Contains the array for the form elements and other form associated information assigned to the template by the controller *} - -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> - <table class="form-layout"> - <div id="upload-file" class="form-item"> - <tr class="crm-member-import-uploadfile-from-block-uploadFile"> - <td class="label">{$form.uploadFile.label}</td> - <td>{$form.uploadFile.html}<br /> - <span class="description">{ts}File format must be comma-separated-values (CSV).{/ts}</span> - <br /><span>{ts 1=$uploadSize}Maximum Upload File Size: %1 MB{/ts}</span> - </td> - </tr> - <tr class="crm-member-import-uploadfile-from-block-skipColumnHeader"> - <td class="label"> {$form.skipColumnHeader.html} </td> - <td>{$form.skipColumnHeader.label}<br /> - <span class="description"> - {ts}Check this box if the first row of your file consists of field names (Example: 'Contact ID', 'Amount').{/ts}</span> - </td> - <tr class="crm-member-import-uploadfile-from-block-contactType"> - <td class="label">{$form.contactType.label}</tdt> - <td>{$form.contactType.html}<br /> - <span class="description"> - {ts}Select 'Individual' if you are importing memberships for individual persons.{/ts} - {ts}Select 'Organization' or 'Household' if you are importing memberships made by contacts of that type. (NOTE: Some built-in contact types may not be enabled for your site.){/ts} - </span> - </td> - </tr> - <tr class="crm-member-import-uploadfile-from-block-onDuplicate"> - <td class="label" >{$form.onDuplicate.label}</td> - <td>{$form.onDuplicate.html} {help id="id-onDuplicate"}</td> - </tr> - <tr class="crm-import-datasource-form-block-fieldSeparator"> - <td class="label">{$form.fieldSeparator.label} {help id='id-fieldSeparator' file='CRM/Contact/Import/Form/DataSource'}</td> - <td>{$form.fieldSeparator.html}</td> - </tr> - <tr class="crm-member-import-uploadfile-from-block-date">{include file="CRM/Core/Date.tpl"}</tr> -{if $savedMapping} - <tr class="crm-member-import-uploadfile-from-block-savedMapping"> - <td>{$form.savedMapping.label}</td> - <td>{$form.savedMapping.html}<br /> - <span class="description">{ts}If you want to use a previously saved import field mapping - select it here.{/ts}</span> - </td> - </tr> -{/if} -</div> -</table> -<div class="spacer"></div> - -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> -</div> +{include file="CRM/Import/Form/DataSource.tpl"} diff --git a/civicrm/templates/CRM/Member/Import/Form/Preview.tpl b/civicrm/templates/CRM/Member/Import/Form/Preview.tpl index 390b7e2250..809193341a 100644 --- a/civicrm/templates/CRM/Member/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/Preview.tpl @@ -25,13 +25,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts 1=$conflictRowCount 2=$downloadConflictRecordsUrl}CiviCRM has detected %1 records with conflicting transaction ids within this data file. If you continue, these records will be skipped. OR, you can download a file with just these problem records - <a href='%2'>Download Conflicts</a>. Then correct them in the original import file, cancel this import and begin again at step 1.{/ts} - </p> - {/if} - - <p>{ts}Click 'Import Now' if you are ready to proceed.{/ts}</p> </div> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> @@ -54,17 +47,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows{/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting transaction ids within this file. These rows will be skipped (not imported).{/ts} - {if $conflictRowCount} - <div class="action-link"><a href="{$downloadConflictRecordsUrl}"><i class="crm-i fa-download" aria-hidden="true"></i> {ts}Download Conflicts{/ts}</a></div> - {/if} - </td> - </tr> - {/if} - <tr><td class="label crm-grid-cell">{ts}Valid Rows{/ts}</td> <td class="data">{$validRowCount}</td> <td class="explanation">{ts}Total rows to be imported.{/ts}</td> diff --git a/civicrm/templates/CRM/Member/Import/Form/Summary.tpl b/civicrm/templates/CRM/Member/Import/Form/Summary.tpl index 70fd4ccdc1..f2ea3263f1 100644 --- a/civicrm/templates/CRM/Member/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/Summary.tpl @@ -37,15 +37,6 @@ </p> {/if} - {if $conflictRowCount} - <p class="error"> - {ts count=$conflictRowCount plural='CiviCRM has detected %count records with conflicting transaction IDs within this data file or relative to existing membership records. These records have not been imported.'}CiviCRM has detected one record with conflicting transaction ID within this data file or relative to existing membership records. This record has not been imported.{/ts} - </p> - <p class="error"> - {ts 1=$downloadConflictRecordsUrl}You can <a href="%1">Download Conflicts</a>. You may then review these records to determine if they are actually conflicts, and correct the transaction IDs for those that are not.{/ts} - </p> - {/if} - {if $duplicateRowCount} <p {if $dupeError}class="error"{/if}> {ts count=$duplicateRowCount plural='CiviCRM has detected %count records which are duplicates of existing CiviCRM membership records.'}CiviCRM has detected one record which is a duplicate of existing CiviCRM membership record.{/ts} {$dupeActionString} @@ -85,17 +76,6 @@ </tr> {/if} - {if $conflictRowCount} - <tr class="error"><td class="label crm-grid-cell">{ts}Conflicting Rows (skipped){/ts}</td> - <td class="data">{$conflictRowCount}</td> - <td class="explanation">{ts}Rows with conflicting transaction IDs (NOT imported).{/ts} - {if $conflictRowCount} - <p><a href="{$downloadConflictRecordsUrl}">{ts}Download Conflicts{/ts}</a></p> - {/if} - </td> - </tr> - {/if} - {if $duplicateRowCount} <tr class="error"><td class="label crm-grid-cell">{ts}Duplicate Rows{/ts}</td> <td class="data">{$duplicateRowCount}</td> diff --git a/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl b/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl index be341b04bd..fbfe13c56f 100644 --- a/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl +++ b/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl @@ -46,9 +46,9 @@ <td class="nowrap crmf-end_event_adjust_interval">{if !empty($row.end_event_adjust_interval)}{$row.end_event_adjust_interval}{/if}</td> <td class="crmf-is_current_member crm-editable" data-type="boolean">{if $row.is_current_member eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crmf-is_admin crm-editable" data-type="boolean">{if $row.is_admin eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td class="nowrap crmf-weight">{$row.weight}</td> + <td class="nowrap crmf-weight">{$row.weight|smarty:nodefaults}</td> <td class="crmf-is_reserved">{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{if !empty($row.action)}{$row.action|replace:'xx':$row.id}{/if}</td> + <td>{if !empty($row.action)}{$row.action|smarty:nodefaults|replace:'xx':$row.id}{/if}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Member/Page/MembershipType.tpl b/civicrm/templates/CRM/Member/Page/MembershipType.tpl index 9955059941..d9f0a0914a 100644 --- a/civicrm/templates/CRM/Member/Page/MembershipType.tpl +++ b/civicrm/templates/CRM/Member/Page/MembershipType.tpl @@ -47,9 +47,9 @@ <td class="crmf-relationship_type">{$row.relationshipTypeName}</td> <td class="crmf-max_related" align="right">{$row.max_related}</td> <td class="crmf-visibility crm-editable" data-type="select">{$row.visibility}</td> - <td class="nowrap crmf-weight">{$row.weight}</td> + <td class="nowrap crmf-weight">{$row.weight|smarty:nodefaults}</td> <td class="crmf-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/PCP/Page/PCP.tpl b/civicrm/templates/CRM/PCP/Page/PCP.tpl index 9aca301ba3..343d6adef5 100644 --- a/civicrm/templates/CRM/PCP/Page/PCP.tpl +++ b/civicrm/templates/CRM/PCP/Page/PCP.tpl @@ -44,7 +44,7 @@ <td>{$row.start_date|crmDate}</td> <td>{if $row.end_date}{$row.end_date|crmDate}{else}({ts}ongoing{/ts}){/if}</td> <td>{$row.status_id}</td> - <td id={$row.id}>{$row.action|replace:'xx':$row.id}</td> + <td id={$row.id}>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </tbody> diff --git a/civicrm/templates/CRM/Pledge/Page/Tab.tpl b/civicrm/templates/CRM/Pledge/Page/Tab.tpl index 98e5a5c622..4b1124c943 100644 --- a/civicrm/templates/CRM/Pledge/Page/Tab.tpl +++ b/civicrm/templates/CRM/Pledge/Page/Tab.tpl @@ -17,14 +17,13 @@ {ts 1=$displayName}Pledges received from %1 since inception.{/ts} {if $permission EQ 'edit'} {capture assign=newContribURL}{crmURL p="civicrm/contact/view/pledge" q="reset=1&action=add&cid=`$contactId`&context=pledge"}{/capture} - {capture assign=link}class="action-item" href="{$newContribURL}"{/capture} - {ts 1=$link}Click <a %1>Add Pledge</a> to record a new pledge received from this contact.{/ts} + {ts 1=$link}Click <a class="action-item" href="{$newContribURL|smarty:nodefaults}">Add Pledge</a> to record a new pledge received from this contact.{/ts} {/if} </div> {if $action eq 16 and $permission EQ 'edit'} <div class="action-link"> - <a accesskey="N" href="{$newContribURL}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Pledge{/ts}</a></span> + <a accesskey="N" href="{$newContribURL|smarty:nodefaults}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> {ts}Add Pledge{/ts}</a></span> <br/><br/> </div> {/if} diff --git a/civicrm/templates/CRM/Price/Form/LineItem.tpl b/civicrm/templates/CRM/Price/Form/LineItem.tpl index 7502e850ad..e94853330f 100644 --- a/civicrm/templates/CRM/Price/Form/LineItem.tpl +++ b/civicrm/templates/CRM/Price/Form/LineItem.tpl @@ -124,7 +124,8 @@ {assign var="lineItemCount" value=0} {foreach from=$pcount item=p_count} - {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} + {assign var="intPCount" value=$p_count.participant_count|intval} + {assign var="lineItemCount" value=$lineItemCount+$intPCount} {/foreach} {if $lineItemCount < 1 } {assign var="lineItemCount" value=1} diff --git a/civicrm/templates/CRM/Price/Page/Field.tpl b/civicrm/templates/CRM/Price/Page/Field.tpl index 9b6153ec04..ff98309a5c 100644 --- a/civicrm/templates/CRM/Price/Page/Field.tpl +++ b/civicrm/templates/CRM/Price/Page/Field.tpl @@ -61,7 +61,7 @@ <tr id="price_field-{$row.id}" class="crm-entity {cycle values="odd-row,even-row"}{if !empty($row.class)} {$row.class}{/if}{if NOT $row.is_active} disabled{/if}"> <td class="crm-editable" data-field="label">{$row.label}</td> <td>{$row.html_type_display}</td> - <td class="nowrap">{$row.weight}</td> + <td class="nowrap">{$row.weight|smarty:nodefaults}</td> <td class="crm-editable" data-field="is_required" data-type="boolean">{if $row.is_required eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td id="row_{$row.id}_status">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td>{if $row.active_on}{$row.active_on|crmDate}{/if}</td> @@ -74,7 +74,7 @@ </td> <td>{if $row.html_type eq "Text / Numeric Quantity" }{$row.tax_amount|crmMoney}{/if}</td> {/if} - <td class="field-action">{$row.action|replace:'xx':$row.id}</td> + <td class="field-action">{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Price/Page/LineItem.tpl b/civicrm/templates/CRM/Price/Page/LineItem.tpl index 7bac227eb9..d2c55bebcb 100644 --- a/civicrm/templates/CRM/Price/Page/LineItem.tpl +++ b/civicrm/templates/CRM/Price/Page/LineItem.tpl @@ -111,7 +111,8 @@ {assign var="lineItemCount" value=0} {foreach from=$pcount item=p_count} - {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} + {assign var="intPCount" value=$p_count.participant_count|intval} + {assign var="lineItemCount" value=$lineItemCount+$intPCount} {/foreach} {if $lineItemCount < 1 } {assign var="lineItemCount" value=1} diff --git a/civicrm/templates/CRM/Price/Page/Option.tpl b/civicrm/templates/CRM/Price/Page/Option.tpl index 7889a67cd2..dd04c1dda3 100644 --- a/civicrm/templates/CRM/Price/Page/Option.tpl +++ b/civicrm/templates/CRM/Price/Page/Option.tpl @@ -70,7 +70,7 @@ {/if} <td class="crm-price-option-is_default">{icon condition=$row.is_default}{ts}Default{/ts}{/icon}</td> <td class="nowrap crm-price-option-financial-type-id">{$row.financial_type_id}</td> - <td class="nowrap crm-price-option-order">{$row.weight}</td> + <td class="nowrap crm-price-option-order">{$row.weight|smarty:nodefaults}</td> {if $getTaxDetails} <td>{if $row.tax_rate != '' } {$taxTerm} ({$row.tax_rate}%) @@ -79,7 +79,7 @@ <td>{$row.tax_amount|crmMoney}</td> {/if} <td id="row_{$row.id}_status" class="crm-price-option-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </tbody> diff --git a/civicrm/templates/CRM/Price/Page/Set.tpl b/civicrm/templates/CRM/Price/Page/Set.tpl index 4b90dce429..bdd496f32b 100644 --- a/civicrm/templates/CRM/Price/Page/Set.tpl +++ b/civicrm/templates/CRM/Price/Page/Set.tpl @@ -52,7 +52,7 @@ <td class="crmf-title crm-editable">{$row.title}</td> <td class="crmf-extends">{$row.extends}</td> <td class="crmf-is_active">{if $row.is_active eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/Report/Page/Options.tpl b/civicrm/templates/CRM/Report/Page/Options.tpl index 33d2680040..0c2501cf6b 100644 --- a/civicrm/templates/CRM/Report/Page/Options.tpl +++ b/civicrm/templates/CRM/Report/Page/Options.tpl @@ -43,7 +43,7 @@ <td class="crm-report-optionList-label crm-editable" data-field="label">{$row.label}</td> <td class="crm-report-optionList-value">{$row.value}</td> <td class="crm-report-optionList-description">{$row.description}</td> - <td class="nowrap crm-report-optionList-order">{$row.weight}</td> + <td class="nowrap crm-report-optionList-order">{$row.weight|smarty:nodefaults}</td> {if !empty($showIsDefault)} <td class="crm-report-optionList-default_value">{$row.default_value}</td> {/if} diff --git a/civicrm/templates/CRM/SMS/Page/Provider.tpl b/civicrm/templates/CRM/SMS/Page/Provider.tpl index 3ebf7393f7..ccbf33995b 100644 --- a/civicrm/templates/CRM/SMS/Page/Provider.tpl +++ b/civicrm/templates/CRM/SMS/Page/Provider.tpl @@ -38,7 +38,7 @@ </td> <td class="crm-api-params">{if $row.api_params eq null}<em>{ts}no parameters{/ts}</em>{else}<pre>{$row.api_params}</pre>{/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/UF/Page/Field.tpl b/civicrm/templates/CRM/UF/Page/Field.tpl index 64f0b23ab2..f266f1fab1 100644 --- a/civicrm/templates/CRM/UF/Page/Field.tpl +++ b/civicrm/templates/CRM/UF/Page/Field.tpl @@ -49,11 +49,11 @@ <td class="crm-editable crmf-is_searchable" data-type="boolean">{if $row.is_searchable eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-editable crmf-in_selector" data-type="boolean">{if $row.in_selector eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> {/if} - <td class="nowrap">{$row.weight}</td> + <td class="nowrap">{$row.weight|smarty:nodefaults}</td> <td class="crm-editable crmf-is_required" data-type="boolean">{if $row.is_required eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td class="crm-editable crmf-is_view" data-type="boolean">{if $row.is_view eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> <td>{if $row.is_reserved eq 1} {ts}Yes{/ts} {else} {ts}No{/ts} {/if}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/foreach} </table> diff --git a/civicrm/templates/CRM/UF/Page/Group.tpl b/civicrm/templates/CRM/UF/Page/Group.tpl index 45e3c893ee..4bcd418556 100644 --- a/civicrm/templates/CRM/UF/Page/Group.tpl +++ b/civicrm/templates/CRM/UF/Page/Group.tpl @@ -81,7 +81,7 @@ <td>{$row.group_type}</td> <td>{$row.id}</td> <td>{$row.module}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/if} {/foreach} @@ -126,7 +126,7 @@ <td>{$row.group_type}</td> <td>{$row.id}</td> <td>{$row.module}</td> - <td>{$row.action|replace:'xx':$row.id}</td> + <td>{$row.action|smarty:nodefaults|replace:'xx':$row.id}</td> </tr> {/if} {/foreach} diff --git a/civicrm/templates/CRM/common/CMSPrint.tpl b/civicrm/templates/CRM/common/CMSPrint.tpl index c0579b38aa..0c20dfef54 100644 --- a/civicrm/templates/CRM/common/CMSPrint.tpl +++ b/civicrm/templates/CRM/common/CMSPrint.tpl @@ -24,10 +24,19 @@ </div> {/if} -{if $pageTitle} - <div class="crm-title"> - <h1 class="title">{if $isDeleted}<del>{/if}{$pageTitle}{if $isDeleted}</del>{/if}</h1> - </div> +{if $urlIsPublic} + {if $pageTitle} + <div class="crm-title"> + <h2 class="title">{$pageTitle}</h2> + </div> + {/if} +{else} + {if $pageTitle} + <div class="crm-title"> + <h1 class="title">{if $isDeleted} + <del>{/if}{$pageTitle}{if $isDeleted}</del>{/if}</h1> + </div> + {/if} {/if} {crmRegion name='page-header'} diff --git a/civicrm/templates/CRM/common/TabHeader.tpl b/civicrm/templates/CRM/common/TabHeader.tpl index 7d8ae7ad0d..83fdd28214 100644 --- a/civicrm/templates/CRM/common/TabHeader.tpl +++ b/civicrm/templates/CRM/common/TabHeader.tpl @@ -15,7 +15,7 @@ {foreach from=$tabHeader key=tabName item=tabValue} <li id="tab_{$tabName}" class="crm-tab-button ui-corner-all{if !$tabValue.valid} disabled{/if} {$tabValue.class}" {$tabValue.extra}> {if $tabValue.active} - <a href="{if $tabValue.template}#panel_{$tabName}{else}{$tabValue.link}{/if}" title="{$tabValue.title|escape}{if !$tabValue.valid} ({ts}disabled{/ts}){/if}"> + <a href="{if $tabValue.template}#panel_{$tabName}{else}{$tabValue.link|smarty:nodefaults}{/if}" title="{$tabValue.title|escape}{if !$tabValue.valid} ({ts}disabled{/ts}){/if}"> {if $tabValue.icon}<i class="{$tabValue.icon}"></i>{/if} <span>{$tabValue.title}</span> {if is_numeric($tabValue.count)}<em>{$tabValue.count}</em>{/if} diff --git a/civicrm/templates/CRM/common/WizardHeader.tpl b/civicrm/templates/CRM/common/WizardHeader.tpl index 3834cea294..3ca60b9cb9 100644 --- a/civicrm/templates/CRM/common/WizardHeader.tpl +++ b/civicrm/templates/CRM/common/WizardHeader.tpl @@ -34,20 +34,20 @@ {else} {assign var="stepClass" value="current-sub-step"} {/if} - {assign var="stepPrefix" value=$wizard.style.stepPrefixCurrent|cat:$wizard.steps[step].stepNumber|cat:". "} + {assign var="stepPrefix" value=$wizard.style.stepPrefixCurrent|smarty:nodefaults|cat:$wizard.steps[step].stepNumber|cat:". "} {else} {if $wizard.steps[step].step} {assign var="stepClass" value="future-step"} {else} {assign var="stepClass" value="future-sub-step"} {/if} - {assign var="stepPrefix" value=$wizard.style.stepPrefixFuture|cat:$wizard.steps[step].stepNumber|cat:". "} + {assign var="stepPrefix" value=$wizard.style.stepPrefixFuture|smarty:nodefaults|cat:$wizard.steps[step].stepNumber|cat:". "} {/if} {if !$wizard.steps[step].valid} {assign var="stepClass" value="$stepClass not-valid"} {/if} {* wizard.steps[step].link value is passed for wizards/steps which allow clickable navigation *} - <li class="{$stepClass}">{$stepPrefix}{if $wizard.steps[step].link}<a href="{$wizard.steps[step].link}">{/if}{$title}{if $wizard.steps[step].link}</a>{/if}</li> + <li class="{$stepClass}">{$stepPrefix|smarty:nodefaults}{if $wizard.steps[step].link}<a href="{$wizard.steps[step].link}">{/if}{$title}{if $wizard.steps[step].link}</a>{/if}</li> {/if} {/section} </ul> diff --git a/civicrm/templates/CRM/common/civicrm.settings.php.template b/civicrm/templates/CRM/common/civicrm.settings.php.template index 2ee27829d9..d7019b1e93 100644 --- a/civicrm/templates/CRM/common/civicrm.settings.php.template +++ b/civicrm/templates/CRM/common/civicrm.settings.php.template @@ -41,9 +41,6 @@ global $civicrm_root, $civicrm_setting, $civicrm_paths; * Settings for Drupal 7.x: * define( 'CIVICRM_UF' , 'Drupal'); * - * Settings for Drupal 6.x: - * define( 'CIVICRM_UF' , 'Drupal6'); - * * Settings for Joomla 1.7.x - 2.5.x: * define( 'CIVICRM_UF' , 'Joomla'); * diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index 79c89b4539..6f41428f37 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit0b7d21bead845f78d61233f501552e74::getLoader(); +return ComposerAutoloaderInit6953fe867fd629eb94318a06cc30d8c1::getLoader(); diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index 1a2086a7d6..03fdaa28fb 100644 --- a/civicrm/vendor/composer/autoload_real.php +++ b/civicrm/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit0b7d21bead845f78d61233f501552e74 +class ComposerAutoloaderInit6953fe867fd629eb94318a06cc30d8c1 { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit0b7d21bead845f78d61233f501552e74 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit0b7d21bead845f78d61233f501552e74', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit6953fe867fd629eb94318a06cc30d8c1', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit0b7d21bead845f78d61233f501552e74', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit6953fe867fd629eb94318a06cc30d8c1', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInit0b7d21bead845f78d61233f501552e74 if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit0b7d21bead845f78d61233f501552e74::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInit0b7d21bead845f78d61233f501552e74 $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit0b7d21bead845f78d61233f501552e74::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire0b7d21bead845f78d61233f501552e74($fileIdentifier, $file); + composerRequire6953fe867fd629eb94318a06cc30d8c1($fileIdentifier, $file); } return $loader; } } -function composerRequire0b7d21bead845f78d61233f501552e74($fileIdentifier, $file) +function composerRequire6953fe867fd629eb94318a06cc30d8c1($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php index 5d07a6384e..ecb7c8e529 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit0b7d21bead845f78d61233f501552e74 +class ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1 { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', @@ -684,11 +684,11 @@ class ComposerStaticInit0b7d21bead845f78d61233f501552e74 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit0b7d21bead845f78d61233f501552e74::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit0b7d21bead845f78d61233f501552e74::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit0b7d21bead845f78d61233f501552e74::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit0b7d21bead845f78d61233f501552e74::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit0b7d21bead845f78d61233f501552e74::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInit6953fe867fd629eb94318a06cc30d8c1::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index 93a79c81d4..5c8bff4677 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -1231,35 +1231,38 @@ }, { "name": "league/csv", - "version": "9.2.1", - "version_normalized": "9.2.1.0", + "version": "9.6.2", + "version_normalized": "9.6.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "b574a7d8b28f1528e011d8652fb7d2e83410d4c9" + "reference": "f28da6e483bf979bac10e2add384c90ae9983e4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/b574a7d8b28f1528e011d8652fb7d2e83410d4c9", - "reference": "b574a7d8b28f1528e011d8652fb7d2e83410d4c9", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/f28da6e483bf979bac10e2add384c90ae9983e4e", + "reference": "f28da6e483bf979bac10e2add384c90ae9983e4e", "shasum": "" }, "require": { + "ext-json": "*", "ext-mbstring": "*", - "php": ">=7.0.10" + "php": ">=7.2.5" }, "require-dev": { "ext-curl": "*", - "friendsofphp/php-cs-fixer": "^2.12", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-phpunit": "^0.9.4", - "phpstan/phpstan-strict-rules": "^0.9.0", - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12.0", + "phpstan/phpstan-phpunit": "^0.12.0", + "phpstan/phpstan-strict-rules": "^0.12.0", + "phpunit/phpunit": "^8.5" }, "suggest": { + "ext-dom": "Required to use the XMLConverter and or the HTMLConverter classes", "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters" }, - "time": "2019-06-07T06:24:33+00:00", + "time": "2020-12-10T19:40:30+00:00", "type": "library", "extra": { "branch-alias": { @@ -1287,19 +1290,20 @@ "role": "Developer" } ], - "description": "Csv data manipulation made easy in PHP", + "description": "CSV data manipulation made easy in PHP", "homepage": "http://csv.thephpleague.com", "keywords": [ + "convert", "csv", "export", "filter", "import", "read", + "transform", "write" ], "support": { "docs": "https://csv.thephpleague.com", - "forum": "https://groups.google.com/forum/#!forum/thephpleague", "issues": "https://github.com/thephpleague/csv/issues", "rss": "https://github.com/thephpleague/csv/releases.atom", "source": "https://github.com/thephpleague/csv" diff --git a/civicrm/vendor/league/csv/CHANGELOG.md b/civicrm/vendor/league/csv/CHANGELOG.md index e78a4b2fe2..2431dbc3f3 100644 --- a/civicrm/vendor/league/csv/CHANGELOG.md +++ b/civicrm/vendor/league/csv/CHANGELOG.md @@ -2,7 +2,158 @@ All Notable changes to `Csv` will be documented in this file -## Next - TBD +## 9.6.2 - 2020-12-10 + +### Added + +- Using Github actions as development tools. + +### Deprecated + +- None + +### Fixed + +- Adding official support for PHP8 [#405](https://github.com/thephpleague/csv/pull/405) and [#406](https://github.com/thephpleague/csv/pull/406) by [Ion Bazan](https://github.com/IonBazan) + +### Removed + +- Removing Travis and Scrutinizr as development tools + +## 9.6.1 - 2020-09-05 + +### Added + +- None + +### Deprecated + +- None + +### Fixed + +- BOM sequence processing fix [#394](https://github.com/thephpleague/csv/issues/394) + +### Removed + +- None + +## 9.6.0 - 2020-03-17 + +### Added + +- More return types and type parameters as supported in PHP7.2+ +- `League\Csv\Statement::create` named constructor to ease constraint builder instantiation +- `League\Csv\Statement` can now also process `League\Csv\ResultSet` instances. +- `League\Csv\TabularDataReader` interface to represent how to read tabular data +- `League\Csv\ResultSet::getRecords` has an optional `$header` second argument to make the method works like `League\Csv\Reader::getRecords` +- `League\Csv\ResultSet::createFromTabularDataReader` create a new instance from `League\Csv\TabularDataReader` implementing class. + +### Deprecated + +- Nothing + +### Fixed + +- `League\Csv\Reader` no longer uses `__call` to implement `fetchOne`, `fetchPairs` and `fetchColumn` methods. + +### Removed + +- Internal polyfill for `is_iterable` +- Internal polyfill for `is_nullable_int` +- Support for PHP7.0 and PHP7.1 + +## 9.5.0 - 2019-12-15 + +### Added + +- Improve package exception throwing by adding new exceptions classes that extends +the `League\Csv\Exception` exception marker class [#360](https://github.com/thephpleague/csv/issues/360), [#361](https://github.com/thephpleague/csv/issues/360) +feature proposed and developed by [Darren Miller](https://github.com/dmlogic) + - `League\Csv\UnavailableFeature` + - `League\Csv\InvalidArgument` + - `League\Csv\SyntaxError` + +### Deprecated + +- Nothing + +### Fixed + +- bug fix `bom_match` function see issue [#363](https://github.com/thephpleague/csv/issues/363) resolved based on PR from [Jerry Martinez](https://github.com/jmwebservices) +- bug fix `delemiter_detect` function see issue [#366](https://github.com/thephpleague/csv/issues/366) + +### Removed + +- Nothing + +## 9.4.1 - 2019-10-17 + +### Added + +- Nothing + +### Deprecated + +- Nothing + +### Fixed + +- bug fix the escape mechanism polyfill [#358](https://github.com/thephpleague/csv/pull/358) fix provided by [on2](https://github.com/on2) + +### Removed + +- Nothing + +## 9.4.0 - 2019-10-02 + +### Added + +- Adding support for controlling empty record presence in `Reader::getRecords` return value. + - `Reader::includeEmptyRecords` + - `Reader::skipEmptyRecords` + - `Reader::isEmptyRecordsIncluded` + +- Adding support for controlling Input BOM usage in the library: + - `AbstractCsv::skipInputBOM` + - `AbstractCsv::includeInputBOM` + - `AbstractCsv::isInputBOMIncluded` + +### Deprecated + +- Nothing + +### Fixed + +- `EmptyEscapeParser::parse` no longer auto skip empty records + +### Removed + +- Nothing + +## 9.3.0 - 2019-07-30 + +### Added + +- `XMLConverter::import` see [#348](https://github.com/thephpleague/csv/pull/348) thanks [@kusabi](https://github.com/kusabi) +- Support for `thead`, `tfoot` and `tbody` in `HTMLConverter::convert` via the addition of +protected methods `HTMLConverter::addHTMLAttributes` and `HTMLConverter::appendHeaderSection` [#348](https://github.com/thephpleague/csv/pull/348) thanks [@kusabi](https://github.com/kusabi) + +### Deprecated + +- Nothing + +### Fixed + +- Internal improvement in `Reader` dockblock thanks [@ghobaty](https://github.com/ghobaty). +- Improve strict comparison when using `preg_match`. +- Improve CSV control in `Stream`. + +### Removed + +- Nothing + +## 9.2.1 - 2019-06-08 ### Added diff --git a/civicrm/vendor/league/csv/composer.json b/civicrm/vendor/league/csv/composer.json index ab75fd2b2d..2c3700a3e4 100644 --- a/civicrm/vendor/league/csv/composer.json +++ b/civicrm/vendor/league/csv/composer.json @@ -1,8 +1,8 @@ { "name": "league/csv", "type": "library", - "description" : "Csv data manipulation made easy in PHP", - "keywords": ["csv", "import", "export", "read", "write", "filter"], + "description" : "CSV data manipulation made easy in PHP", + "keywords": ["csv", "import", "export", "read", "write", "filter", "convert", "transform"], "license": "MIT", "homepage" : "http://csv.thephpleague.com", "authors": [ @@ -15,22 +15,29 @@ ], "support": { "docs": "https://csv.thephpleague.com", - "forum": "https://groups.google.com/forum/#!forum/thephpleague", "issues": "https://github.com/thephpleague/csv/issues", "rss": "https://github.com/thephpleague/csv/releases.atom", "source": "https://github.com/thephpleague/csv" }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nyamsprod" + } + ], "require": { - "php" : ">=7.0.10", + "php" : ">=7.2.5", + "ext-json" : "*", "ext-mbstring" : "*" }, "require-dev": { "ext-curl" : "*", - "friendsofphp/php-cs-fixer": "^2.12", - "phpunit/phpunit" : "^6.0", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-strict-rules": "^0.9.0", - "phpstan/phpstan-phpunit": "^0.9.4" + "ext-dom": "*", + "friendsofphp/php-cs-fixer": "^2.16", + "phpunit/phpunit" : "^8.5", + "phpstan/phpstan": "^0.12.0", + "phpstan/phpstan-strict-rules": "^0.12.0", + "phpstan/phpstan-phpunit": "^0.12.0" }, "autoload": { "psr-4": { @@ -44,9 +51,9 @@ } }, "scripts": { - "phpcs": "php-cs-fixer fix -v --diff --dry-run --allow-risky=yes;", - "phpstan-src": "phpstan analyse -l max -c phpstan.src.neon src", - "phpstan-tests": "phpstan analyse -l max -c phpstan.tests.neon tests", + "phpcs": "php-cs-fixer fix -v --diff --dry-run --allow-risky=yes --ansi", + "phpstan-src": "phpstan analyse -l max -c phpstan.src.neon src --ansi", + "phpstan-tests": "phpstan analyse -l max -c phpstan.tests.neon tests --ansi", "phpstan": [ "@phpstan-src", "@phpstan-tests" @@ -58,8 +65,17 @@ "@phpunit" ] }, + "scripts-descriptions": { + "phpcs": "Runs coding style test suite", + "phpstan": "Runs complete codebase static analysis", + "phpstan-src": "Runs source code static analysis", + "phpstan-test": "Runs test suite static analysis", + "phpunit": "Runs unit and functional testing", + "test": "Runs full test suite" + }, "suggest": { - "ext-iconv" : "Needed to ease transcoding CSV using iconv stream filters" + "ext-iconv" : "Needed to ease transcoding CSV using iconv stream filters", + "ext-dom" : "Required to use the XMLConverter and or the HTMLConverter classes" }, "extra": { "branch-alias": { diff --git a/civicrm/vendor/league/csv/src/AbstractCsv.php b/civicrm/vendor/league/csv/src/AbstractCsv.php index e7e335205c..c2ed61b4ea 100644 --- a/civicrm/vendor/league/csv/src/AbstractCsv.php +++ b/civicrm/vendor/league/csv/src/AbstractCsv.php @@ -16,6 +16,7 @@ namespace League\Csv; use Generator; use SplFileObject; use function filter_var; +use function get_class; use function mb_strlen; use function rawurlencode; use function sprintf; @@ -88,6 +89,13 @@ abstract class AbstractCsv implements ByteSequence */ protected $document; + /** + * Tells whether the Input BOM must be included or skipped. + * + * @var bool + */ + protected $is_input_bom_included = false; + /** * New instance. * @@ -96,14 +104,14 @@ abstract class AbstractCsv implements ByteSequence protected function __construct($document) { $this->document = $document; - list($this->delimiter, $this->enclosure, $this->escape) = $this->document->getCsvControl(); + [$this->delimiter, $this->enclosure, $this->escape] = $this->document->getCsvControl(); $this->resetProperties(); } /** * Reset dynamic object properties to improve performance. */ - protected function resetProperties() + protected function resetProperties(): void { } @@ -247,6 +255,14 @@ abstract class AbstractCsv implements ByteSequence return $this->stream_filters[$filtername] ?? false; } + /** + * Tells whether the BOM can be stripped if presents. + */ + public function isInputBOMIncluded(): bool + { + return $this->is_input_bom_included; + } + /** * Retuns the CSV document as a Generator of string chunk. * @@ -257,14 +273,16 @@ abstract class AbstractCsv implements ByteSequence public function chunk(int $length): Generator { if ($length < 1) { - throw new Exception(sprintf('%s() expects the length to be a positive integer %d given', __METHOD__, $length)); + throw new InvalidArgument(sprintf('%s() expects the length to be a positive integer %d given', __METHOD__, $length)); } $input_bom = $this->getInputBOM(); $this->document->rewind(); $this->document->setFlags(0); $this->document->fseek(strlen($input_bom)); - foreach (str_split($this->output_bom.$this->document->fread($length), $length) as $chunk) { + /** @var array<int, string> $chunks */ + $chunks = str_split($this->output_bom.$this->document->fread($length), $length); + foreach ($chunks as $chunk) { yield $chunk; } @@ -310,12 +328,15 @@ abstract class AbstractCsv implements ByteSequence if (null !== $filename) { $this->sendHeaders($filename); } - $input_bom = $this->getInputBOM(); + $this->document->rewind(); - $this->document->fseek(strlen($input_bom)); + if (!$this->is_input_bom_included) { + $this->document->fseek(strlen($this->getInputBOM())); + } + echo $this->output_bom; - return strlen($this->output_bom) + $this->document->fpassthru(); + return strlen($this->output_bom) + (int) $this->document->fpassthru(); } /** @@ -327,10 +348,10 @@ abstract class AbstractCsv implements ByteSequence * * @see https://tools.ietf.org/html/rfc6266#section-4.3 */ - protected function sendHeaders(string $filename) + protected function sendHeaders(string $filename): void { if (strlen($filename) != strcspn($filename, '\\/')) { - throw new Exception('The filename cannot contain the "/" and "\\" characters.'); + throw new InvalidArgument('The filename cannot contain the "/" and "\\" characters.'); } $flag = FILTER_FLAG_STRIP_LOW; @@ -338,10 +359,12 @@ abstract class AbstractCsv implements ByteSequence $flag |= FILTER_FLAG_STRIP_HIGH; } - $filenameFallback = str_replace('%', '', filter_var($filename, FILTER_SANITIZE_STRING, $flag)); + /** @var string $filtered_name */ + $filtered_name = filter_var($filename, FILTER_SANITIZE_STRING, $flag); + $filename_fallback = str_replace('%', '', $filtered_name); - $disposition = sprintf('attachment; filename="%s"', str_replace('"', '\\"', $filenameFallback)); - if ($filename !== $filenameFallback) { + $disposition = sprintf('attachment; filename="%s"', str_replace('"', '\\"', $filename_fallback)); + if ($filename !== $filename_fallback) { $disposition .= sprintf("; filename*=utf-8''%s", rawurlencode($filename)); } @@ -371,7 +394,7 @@ abstract class AbstractCsv implements ByteSequence return $this; } - throw new Exception(sprintf('%s() expects delimiter to be a single character %s given', __METHOD__, $delimiter)); + throw new InvalidArgument(sprintf('%s() expects delimiter to be a single character %s given', __METHOD__, $delimiter)); } /** @@ -394,7 +417,7 @@ abstract class AbstractCsv implements ByteSequence return $this; } - throw new Exception(sprintf('%s() expects enclosure to be a single character %s given', __METHOD__, $enclosure)); + throw new InvalidArgument(sprintf('%s() expects enclosure to be a single character %s given', __METHOD__, $enclosure)); } /** @@ -417,7 +440,31 @@ abstract class AbstractCsv implements ByteSequence return $this; } - throw new Exception(sprintf('%s() expects escape to be a single character or the empty string %s given', __METHOD__, $escape)); + throw new InvalidArgument(sprintf('%s() expects escape to be a single character or the empty string %s given', __METHOD__, $escape)); + } + + /** + * Enables BOM Stripping. + * + * @return static + */ + public function skipInputBOM(): self + { + $this->is_input_bom_included = false; + + return $this; + } + + /** + * Disables skipping Input BOM. + * + * @return static + */ + public function includeInputBOM(): self + { + $this->is_input_bom_included = true; + + return $this; } /** @@ -444,7 +491,7 @@ abstract class AbstractCsv implements ByteSequence public function addStreamFilter(string $filtername, $params = null): self { if (!$this->document instanceof Stream) { - throw new Exception('The stream filter API can not be used'); + throw new UnavailableFeature('The stream filter API can not be used with a '.get_class($this->document).' instance.'); } $this->document->appendFilter($filtername, $this->stream_filter_mode, $params); diff --git a/civicrm/vendor/league/csv/src/CannotInsertRecord.php b/civicrm/vendor/league/csv/src/CannotInsertRecord.php index da26e5fd29..a99dbaaceb 100644 --- a/civicrm/vendor/league/csv/src/CannotInsertRecord.php +++ b/civicrm/vendor/league/csv/src/CannotInsertRecord.php @@ -37,7 +37,7 @@ class CannotInsertRecord extends Exception */ public static function triggerOnInsertion(array $record): self { - $exception = new static('Unable to write record to the CSV document'); + $exception = new self('Unable to write record to the CSV document'); $exception->record = $record; return $exception; @@ -48,7 +48,7 @@ class CannotInsertRecord extends Exception */ public static function triggerOnValidation(string $name, array $record): self { - $exception = new static('Record validation failed'); + $exception = new self('Record validation failed'); $exception->name = $name; $exception->record = $record; diff --git a/civicrm/vendor/league/csv/src/CharsetConverter.php b/civicrm/vendor/league/csv/src/CharsetConverter.php index a3a72b97a7..fc9f0d127b 100644 --- a/civicrm/vendor/league/csv/src/CharsetConverter.php +++ b/civicrm/vendor/league/csv/src/CharsetConverter.php @@ -15,14 +15,9 @@ namespace League\Csv; use OutOfRangeException; use php_user_filter; -use Traversable; -use TypeError; use function array_combine; use function array_map; -use function array_walk; -use function gettype; use function in_array; -use function is_iterable; use function is_numeric; use function mb_convert_encoding; use function mb_list_encodings; @@ -51,10 +46,7 @@ class CharsetConverter extends php_user_filter public $filtername; /** - * Contents of the params parameter passed to stream_filter_append - * or stream_filter_prepend functions. - * - * @var mixed + * @var mixed value passed to passed to stream_filter_append or stream_filter_prepend functions. */ public $params; @@ -85,7 +77,7 @@ class CharsetConverter extends php_user_filter /** * Static method to register the class as a stream filter. */ - public static function register() + public static function register(): void { $filtername = self::FILTERNAME.'.*'; if (!in_array($filtername, stream_get_filters(), true)) { @@ -130,7 +122,7 @@ class CharsetConverter extends php_user_filter /** * {@inheritdoc} */ - public function onCreate() + public function onCreate(): bool { $prefix = self::FILTERNAME.'.'; if (0 !== strpos($this->filtername, $prefix)) { @@ -138,23 +130,27 @@ class CharsetConverter extends php_user_filter } $encodings = substr($this->filtername, strlen($prefix)); - if (!preg_match(',^(?<input>[-\w]+)\/(?<output>[-\w]+)$,', $encodings, $matches)) { + if (1 !== preg_match(',^(?<input>[-\w]+)\/(?<output>[-\w]+)$,', $encodings, $matches)) { return false; } try { - $this->input_encoding = $this->filterEncoding($matches['input']); - $this->output_encoding = $this->filterEncoding($matches['output']); - return true; + $this->input_encoding = self::filterEncoding($matches['input']); + $this->output_encoding = self::filterEncoding($matches['output']); } catch (OutOfRangeException $e) { return false; } + + return true; } /** - * {@inheritdoc} + * @param resource $in + * @param resource $out + * @param int $consumed + * @param bool $closing */ - public function filter($in, $out, &$consumed, $closing) + public function filter($in, $out, &$consumed, $closing): int { while ($res = stream_bucket_make_writeable($in)) { $res->data = @mb_convert_encoding($res->data, $this->output_encoding, $this->input_encoding); @@ -167,17 +163,9 @@ class CharsetConverter extends php_user_filter /** * Convert Csv records collection into UTF-8. - * - * @param array|Traversable $records - * - * @return array|Traversable */ - public function convert($records) + public function convert(iterable $records): iterable { - if (!is_iterable($records)) { - throw new TypeError(sprintf('%s() expects argument passed to be iterable, %s given', __METHOD__, gettype($records))); - } - if ($this->output_encoding === $this->input_encoding) { return $records; } @@ -194,18 +182,22 @@ class CharsetConverter extends php_user_filter */ public function __invoke(array $record): array { - array_walk($record, [$this, 'encodeField']); + $outputRecord = []; + foreach ($record as $offset => $value) { + [$newOffset, $newValue] = $this->encodeField($value, $offset); + $outputRecord[$newOffset] = $newValue; + } - return $record; + return $outputRecord; } /** * Walker method to convert the offset and the value of a CSV record field. * - * @param mixed $value - * @param mixed $offset + * @param mixed $value can be a scalar type or null + * @param mixed $offset can be a string or an int */ - protected function encodeField(&$value, &$offset) + protected function encodeField($value, $offset): array { if (null !== $value && !is_numeric($value)) { $value = mb_convert_encoding((string) $value, $this->output_encoding, $this->input_encoding); @@ -214,6 +206,8 @@ class CharsetConverter extends php_user_filter if (!is_numeric($offset)) { $offset = mb_convert_encoding((string) $offset, $this->output_encoding, $this->input_encoding); } + + return [$offset, $value]; } /** @@ -221,7 +215,7 @@ class CharsetConverter extends php_user_filter */ public function inputEncoding(string $encoding): self { - $encoding = $this->filterEncoding($encoding); + $encoding = self::filterEncoding($encoding); if ($encoding === $this->input_encoding) { return $this; } @@ -237,7 +231,7 @@ class CharsetConverter extends php_user_filter */ public function outputEncoding(string $encoding): self { - $encoding = $this->filterEncoding($encoding); + $encoding = self::filterEncoding($encoding); if ($encoding === $this->output_encoding) { return $this; } diff --git a/civicrm/vendor/league/csv/src/ColumnConsistency.php b/civicrm/vendor/league/csv/src/ColumnConsistency.php index 7b2cd689ce..a1274ea21a 100644 --- a/civicrm/vendor/league/csv/src/ColumnConsistency.php +++ b/civicrm/vendor/league/csv/src/ColumnConsistency.php @@ -31,7 +31,7 @@ class ColumnConsistency /** * New Instance. * - * @throws OutOfRangeException if the column count is lesser than -1 + * @throws Exception if the column count is lesser than -1 */ public function __construct(int $columns_count = -1) { diff --git a/civicrm/vendor/league/csv/src/EncloseField.php b/civicrm/vendor/league/csv/src/EncloseField.php index e0cb65bd53..520f5c52b4 100644 --- a/civicrm/vendor/league/csv/src/EncloseField.php +++ b/civicrm/vendor/league/csv/src/EncloseField.php @@ -42,10 +42,7 @@ class EncloseField extends php_user_filter public $filtername; /** - * Contents of the params parameter passed to stream_filter_append - * or stream_filter_prepend functions. - * - * @var mixed + * @var mixed value passed to passed to stream_filter_append or stream_filter_prepend functions. */ public $params; @@ -74,7 +71,7 @@ class EncloseField extends php_user_filter /** * Static method to register the class as a stream filter. */ - public static function register() + public static function register(): void { if (!in_array(self::FILTERNAME, stream_get_filters(), true)) { stream_filter_register(self::FILTERNAME, self::class); @@ -94,7 +91,7 @@ class EncloseField extends php_user_filter throw new InvalidArgumentException('The sequence must contain at least one character to force enclosure'); } - $formatter = static function (array $record) use ($sequence) { + $formatter = static function (array $record) use ($sequence): array { foreach ($record as &$value) { $value = $sequence.$value; } @@ -121,16 +118,19 @@ class EncloseField extends php_user_filter /** * {@inheritdoc} */ - public function onCreate() + public function onCreate(): bool { return isset($this->params['sequence']) - && $this->isValidSequence($this->params['sequence']); + && self::isValidSequence($this->params['sequence']); } /** - * {@inheritdoc} + * @param resource $in + * @param resource $out + * @param int $consumed + * @param bool $closing */ - public function filter($in, $out, &$consumed, $closing) + public function filter($in, $out, &$consumed, $closing): int { while ($res = stream_bucket_make_writeable($in)) { $res->data = str_replace($this->params['sequence'], '', $res->data); diff --git a/civicrm/vendor/league/csv/src/EscapeFormula.php b/civicrm/vendor/league/csv/src/EscapeFormula.php index 5b8065113a..b1d426e42f 100644 --- a/civicrm/vendor/league/csv/src/EscapeFormula.php +++ b/civicrm/vendor/league/csv/src/EscapeFormula.php @@ -126,7 +126,11 @@ class EscapeFormula } /** - * Escape a CSV cell. + * Escape a CSV cell if its content is stringable. + * + * @param mixed $cell the content of the cell + * + * @return mixed|string the escaped content */ protected function escapeField($cell) { @@ -143,10 +147,17 @@ class EscapeFormula } /** - * Tell whether the submitted value is stringable. + * Tells whether the submitted value is stringable. + * + * @param mixed $value value to check if it is stringable */ protected function isStringable($value): bool { - return is_string($value) || (is_object($value) && method_exists($value, '__toString')); + if (is_string($value)) { + return true; + } + + return is_object($value) + && method_exists($value, '__toString'); } } diff --git a/civicrm/vendor/league/csv/src/HTMLConverter.php b/civicrm/vendor/league/csv/src/HTMLConverter.php index 27b7c644b1..8a7c6bddbd 100644 --- a/civicrm/vendor/league/csv/src/HTMLConverter.php +++ b/civicrm/vendor/league/csv/src/HTMLConverter.php @@ -16,7 +16,6 @@ namespace League\Csv; use DOMDocument; use DOMElement; use DOMException; -use Traversable; use function preg_match; /** @@ -56,21 +55,71 @@ class HTMLConverter } /** - * Convert an Record collection into a DOMDocument. + * Converts a tabular data collection into a HTML table string. * - * @param array|Traversable $records the tabular data collection + * @param string[] $header_record An optional array of headers outputted using the`<thead>` section + * @param string[] $footer_record An optional array of footers to output to the table using `<tfoot>` and `<th>` elements */ - public function convert($records): string + public function convert(iterable $records, array $header_record = [], array $footer_record = []): string { - /** @var DOMDocument $doc */ - $doc = $this->xml_converter->convert($records); + $doc = new DOMDocument('1.0'); + if ([] === $header_record && [] === $footer_record) { + $table = $this->xml_converter->import($records, $doc); + $this->addHTMLAttributes($table); + $doc->appendChild($table); - /** @var DOMElement $table */ - $table = $doc->getElementsByTagName('table')->item(0); - $table->setAttribute('class', $this->class_name); - $table->setAttribute('id', $this->id_value); + /** @var string $content */ + $content = $doc->saveHTML(); - return $doc->saveHTML($table); + return $content; + } + + $table = $doc->createElement('table'); + $this->addHTMLAttributes($table); + $this->appendHeaderSection('thead', $header_record, $table); + $this->appendHeaderSection('tfoot', $footer_record, $table); + $table->appendChild($this->xml_converter->rootElement('tbody')->import($records, $doc)); + $doc->appendChild($table); + + /** @var string $content */ + $content = $doc->saveHTML(); + + return $content; + } + + /** + * Creates a DOMElement representing a HTML table heading section. + */ + protected function appendHeaderSection(string $node_name, array $record, DOMElement $table): void + { + if ([] === $record) { + return; + } + + /** @var DOMDocument $ownerDocument */ + $ownerDocument = $table->ownerDocument; + $node = $this->xml_converter + ->rootElement($node_name) + ->recordElement('tr') + ->fieldElement('th') + ->import([$record], $ownerDocument) + ; + + /** @var DOMElement $element */ + foreach ($node->getElementsByTagName('th') as $element) { + $element->setAttribute('scope', 'col'); + } + + $table->appendChild($node); + } + + /** + * Adds class and id attributes to an HTML tag. + */ + protected function addHTMLAttributes(DOMElement $node): void + { + $node->setAttribute('class', $this->class_name); + $node->setAttribute('id', $this->id_value); } /** @@ -80,7 +129,7 @@ class HTMLConverter */ public function table(string $class_name, string $id_value = ''): self { - if (preg_match(",\s,", $id_value)) { + if (1 === preg_match(",\s,", $id_value)) { throw new DOMException("the id attribute's value must not contain whitespace (spaces, tabs etc.)"); } $clone = clone $this; diff --git a/civicrm/vendor/league/csv/src/InvalidArgument.php b/civicrm/vendor/league/csv/src/InvalidArgument.php new file mode 100644 index 0000000000..7cc94932dd --- /dev/null +++ b/civicrm/vendor/league/csv/src/InvalidArgument.php @@ -0,0 +1,21 @@ +<?php + +/** + * League.Csv (https://csv.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * InvalidArgument Exception. + */ +class InvalidArgument extends Exception +{ +} diff --git a/civicrm/vendor/league/csv/src/MapIterator.php b/civicrm/vendor/league/csv/src/MapIterator.php index 3c96733af0..b3678e0da3 100644 --- a/civicrm/vendor/league/csv/src/MapIterator.php +++ b/civicrm/vendor/league/csv/src/MapIterator.php @@ -40,7 +40,7 @@ class MapIterator extends IteratorIterator } /** - * {@inheritdoc} + * @return mixed The value of the current element. */ public function current() { diff --git a/civicrm/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php b/civicrm/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php index 6d445aa8d9..776a938185 100644 --- a/civicrm/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php +++ b/civicrm/vendor/league/csv/src/Polyfill/EmptyEscapeParser.php @@ -19,9 +19,7 @@ use SplFileObject; use TypeError; use function explode; use function get_class; -use function gettype; use function in_array; -use function is_object; use function ltrim; use function rtrim; use function sprintf; @@ -67,7 +65,7 @@ final class EmptyEscapeParser private static $trim_mask; /** - * @var string|bool + * @var string|false */ private static $line; @@ -117,7 +115,7 @@ final class EmptyEscapeParser self::$document->rewind(); while (self::$document->valid()) { $record = self::extractRecord(); - if (!in_array(null, $record, true)) { + if ([null] === $record || !in_array(null, $record, true)) { yield $record; } } @@ -126,11 +124,9 @@ final class EmptyEscapeParser /** * Filters the submitted document. * - * @param SplFileObject|Stream $document - * * @return SplFileObject|Stream */ - private static function filterDocument($document) + private static function filterDocument(object $document) { if ($document instanceof Stream || $document instanceof SplFileObject) { return $document; @@ -140,7 +136,7 @@ final class EmptyEscapeParser '%s::parse expects parameter 1 to be a %s or a SplFileObject object, %s given', self::class, Stream::class, - is_object($document) ? get_class($document) : gettype($document) + get_class($document) )); } @@ -152,14 +148,18 @@ final class EmptyEscapeParser $record = []; self::$line = self::$document->fgets(); do { - $method = 'extractFieldContent'; - $buffer = ltrim(self::$line, self::$trim_mask); + $is_field_enclosed = false; + $buffer = ''; + if (false !== self::$line) { + $buffer = ltrim(self::$line, self::$trim_mask); + } + if (($buffer[0] ?? '') === self::$enclosure) { - $method = 'extractEnclosedFieldContent'; + $is_field_enclosed = true; self::$line = $buffer; } - $record[] = self::$method(); + $record[] = $is_field_enclosed ? self::extractEnclosedFieldContent() : self::extractFieldContent(); } while (false !== self::$line); return $record; @@ -182,7 +182,13 @@ final class EmptyEscapeParser return null; } - list($content, self::$line) = explode(self::$delimiter, self::$line, 2) + [1 => false]; + /** @var array<string> $result */ + $result = explode(self::$delimiter, self::$line, 2); + /** @var string $content */ + [$content, $remainder] = $result + [1 => false]; + + /* @var string|false line */ + self::$line = $remainder; if (false === self::$line) { return rtrim($content, "\r\n"); } @@ -203,13 +209,15 @@ final class EmptyEscapeParser */ private static function extractEnclosedFieldContent() { - if ((self::$line[0] ?? '') === self::$enclosure) { + if (false !== self::$line && self::$line[0] === self::$enclosure) { self::$line = substr(self::$line, 1); } $content = ''; while (false !== self::$line) { - list($buffer, $remainder) = explode(self::$enclosure, self::$line, 2) + [1 => false]; + /** @var array $result */ + $result = explode(self::$enclosure, self::$line, 2); + [$buffer, $remainder] = $result + [1 => false]; $content .= $buffer; self::$line = $remainder; if (false !== self::$line) { diff --git a/civicrm/vendor/league/csv/src/RFC4180Field.php b/civicrm/vendor/league/csv/src/RFC4180Field.php index e054868e89..7fafeedafd 100644 --- a/civicrm/vendor/league/csv/src/RFC4180Field.php +++ b/civicrm/vendor/league/csv/src/RFC4180Field.php @@ -50,10 +50,7 @@ class RFC4180Field extends php_user_filter public $filtername; /** - * Contents of the params parameter passed to stream_filter_append - * or stream_filter_prepend functions. - * - * @var mixed + * @var mixed value passed to passed to stream_filter_append or stream_filter_prepend functions. */ public $params; @@ -127,7 +124,7 @@ class RFC4180Field extends php_user_filter /** * Static method to register the class as a stream filter. */ - public static function register() + public static function register(): void { if (!in_array(self::FILTERNAME, stream_get_filters(), true)) { stream_filter_register(self::FILTERNAME, self::class); @@ -143,9 +140,12 @@ class RFC4180Field extends php_user_filter } /** - * {@inheritdoc} + * @param resource $in + * @param resource $out + * @param int $consumed + * @param bool $closing */ - public function filter($in, $out, &$consumed, $closing) + public function filter($in, $out, &$consumed, $closing): int { while ($bucket = stream_bucket_make_writeable($in)) { $bucket->data = str_replace($this->search, $this->replace, $bucket->data); @@ -159,7 +159,7 @@ class RFC4180Field extends php_user_filter /** * {@inheritdoc} */ - public function onCreate() + public function onCreate(): bool { if (!$this->isValidParams($this->params)) { return false; diff --git a/civicrm/vendor/league/csv/src/Reader.php b/civicrm/vendor/league/csv/src/Reader.php index 3256cd4467..e29351dbb0 100644 --- a/civicrm/vendor/league/csv/src/Reader.php +++ b/civicrm/vendor/league/csv/src/Reader.php @@ -13,21 +13,17 @@ declare(strict_types=1); namespace League\Csv; -use BadMethodCallException; use CallbackFilterIterator; -use Countable; use Iterator; -use IteratorAggregate; use JsonSerializable; use League\Csv\Polyfill\EmptyEscapeParser; use SplFileObject; -use TypeError; use function array_combine; use function array_filter; use function array_pad; use function array_slice; use function array_unique; -use function gettype; +use function count; use function is_array; use function iterator_count; use function iterator_to_array; @@ -41,12 +37,8 @@ use const STREAM_FILTER_READ; /** * A class to parse and read records from a CSV document. - * - * @method array fetchOne(int $nth_record = 0) Returns a single record from the CSV - * @method Generator fetchColumn(string|int $column_index) Returns the next value from a single CSV record field - * @method Generator fetchPairs(string|int $offset_index = 0, string|int $value_index = 1) Fetches the next key-value pairs from the CSV document */ -class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSerializable +class Reader extends AbstractCsv implements TabularDataReader, JsonSerializable { /** * header offset. @@ -74,6 +66,11 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe */ protected $stream_filter_mode = STREAM_FILTER_READ; + /** + * @var bool + */ + protected $is_empty_records_included = false; + /** * {@inheritdoc} */ @@ -85,7 +82,7 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe /** * {@inheritdoc} */ - protected function resetProperties() + protected function resetProperties(): void { parent::resetProperties(); $this->nb_records = -1; @@ -97,19 +94,14 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe * * If no CSV header offset is set this method MUST return null * - * @return int|null */ - public function getHeaderOffset() + public function getHeaderOffset(): ?int { return $this->header_offset; } /** - * Returns the CSV record used as header. - * - * The returned header is represented as an array of string values - * - * @return string[] + * {@inheritDoc} */ public function getHeader(): array { @@ -136,12 +128,17 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe protected function setHeader(int $offset): array { $header = $this->seekRow($offset); - if (false === $header || [] === $header) { - throw new Exception(sprintf('The header record does not exist or is empty at offset: `%s`', $offset)); + if (in_array($header, [[], [null]], true)) { + throw new SyntaxError(sprintf('The header record does not exist or is empty at offset: `%s`', $offset)); } - if (0 === $offset) { - return $this->removeBOM($header, mb_strlen($this->getInputBOM()), $this->enclosure); + if (0 !== $offset) { + return $header; + } + + $header = $this->removeBOM($header, mb_strlen($this->getInputBOM()), $this->enclosure); + if ([''] === $header) { + throw new SyntaxError(sprintf('The header record does not exist or is empty at offset: `%s`', $offset)); } return $header; @@ -149,10 +146,8 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe /** * Returns the row at a given offset. - * - * @return array|false */ - protected function seekRow(int $offset) + protected function seekRow(int $offset): array { foreach ($this->getDocument() as $index => $record) { if ($offset === $index) { @@ -160,7 +155,7 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe } } - return false; + return []; } /** @@ -174,7 +169,7 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe return EmptyEscapeParser::parse($this->document); } - $this->document->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY); + $this->document->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD); $this->document->setCsvControl($this->delimiter, $this->enclosure, $this->escape); $this->document->rewind(); @@ -207,14 +202,25 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe /** * {@inheritdoc} */ - public function __call($method, array $arguments) + public function fetchColumn($index = 0): Iterator { - static $whitelisted = ['fetchColumn' => 1, 'fetchOne' => 1, 'fetchPairs' => 1]; - if (isset($whitelisted[$method])) { - return (new ResultSet($this->getRecords(), $this->getHeader()))->$method(...$arguments); - } + return ResultSet::createFromTabularDataReader($this)->fetchColumn($index); + } - throw new BadMethodCallException(sprintf('%s::%s() method does not exist', static::class, $method)); + /** + * {@inheritdoc} + */ + public function fetchOne(int $nth_record = 0): array + { + return ResultSet::createFromTabularDataReader($this)->fetchOne($nth_record); + } + + /** + * {@inheritdoc} + */ + public function fetchPairs($offset_index = 0, $value_index = 1): Iterator + { + return ResultSet::createFromTabularDataReader($this)->fetchPairs($offset_index, $value_index); } /** @@ -246,28 +252,21 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe } /** - * Returns the CSV records as an iterator object. - * - * Each CSV record is represented as a simple array containing strings or null values. - * - * If the CSV document has a header record then each record is combined - * to the header record and the header record is removed from the iterator. - * - * If the CSV document is inconsistent. Missing record fields are - * filled with null values while extra record fields are strip from - * the returned object. - * - * @param string[] $header an optional header to use instead of the CSV document header + * {@inheritDoc} */ public function getRecords(array $header = []): Iterator { $header = $this->computeHeader($header); - $normalized = static function ($record): bool { - return is_array($record) && $record != [null]; + $normalized = function ($record): bool { + return is_array($record) && ($this->is_empty_records_included || $record != [null]); }; - $bom = $this->getInputBOM(); - $document = $this->getDocument(); + $bom = ''; + if (!$this->is_input_bom_included) { + $bom = $this->getInputBOM(); + } + + $document = $this->getDocument(); $records = $this->stripBOM(new CallbackFilterIterator($document, $normalized), $bom); if (null !== $this->header_offset) { $records = new CallbackFilterIterator($records, function (array $record, int $offset): bool { @@ -275,6 +274,18 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe }); } + if ($this->is_empty_records_included) { + $normalized_empty_records = static function (array $record): array { + if ([null] === $record) { + return []; + } + + return $record; + }; + + return $this->combineHeader(new MapIterator($records, $normalized_empty_records), $header); + } + return $this->combineHeader($records, $header); } @@ -297,7 +308,7 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe return $header; } - throw new Exception('The header record must be empty or a flat array with unique string values'); + throw new SyntaxError('The header record must be an empty or a flat array with unique string values.'); } /** @@ -317,7 +328,10 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe $record = array_slice(array_pad($record, $field_count, null), 0, $field_count); } - return array_combine($header, $record); + /** @var array<string|null> $assocRecord */ + $assocRecord = array_combine($header, $record); + + return $assocRecord; }; return new MapIterator($iterator, $mapper); @@ -338,10 +352,19 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe return $record; } - return $this->removeBOM($record, $bom_length, $this->enclosure); + $record = $this->removeBOM($record, $bom_length, $this->enclosure); + if ([''] === $record) { + return [null]; + } + + return $record; }; - return new MapIterator($iterator, $mapper); + $filter = function (array $record): bool { + return $this->is_empty_records_included || $record != [null]; + }; + + return new CallbackFilterIterator(new MapIterator($iterator, $mapper), $filter); } /** @@ -356,18 +379,14 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe * * @return static */ - public function setHeaderOffset($offset): self + public function setHeaderOffset(?int $offset): self { if ($offset === $this->header_offset) { return $this; } - if (!is_nullable_int($offset)) { - throw new TypeError(sprintf(__METHOD__.'() expects 1 Argument to be null or an integer %s given', gettype($offset))); - } - if (null !== $offset && 0 > $offset) { - throw new Exception(__METHOD__.'() expects 1 Argument to be greater or equal to 0'); + throw new InvalidArgument(__METHOD__.'() expects 1 Argument to be greater or equal to 0'); } $this->header_offset = $offset; @@ -375,4 +394,38 @@ class Reader extends AbstractCsv implements Countable, IteratorAggregate, JsonSe return $this; } + + /** + * Enable skipping empty records. + */ + public function skipEmptyRecords(): self + { + if ($this->is_empty_records_included) { + $this->is_empty_records_included = false; + $this->nb_records = -1; + } + + return $this; + } + + /** + * Disable skipping empty records. + */ + public function includeEmptyRecords(): self + { + if (!$this->is_empty_records_included) { + $this->is_empty_records_included = true; + $this->nb_records = -1; + } + + return $this; + } + + /** + * Tells whether empty records are skipped by the instance. + */ + public function isEmptyRecordsIncluded(): bool + { + return $this->is_empty_records_included; + } } diff --git a/civicrm/vendor/league/csv/src/ResultSet.php b/civicrm/vendor/league/csv/src/ResultSet.php index 20130249a4..7642a15765 100644 --- a/civicrm/vendor/league/csv/src/ResultSet.php +++ b/civicrm/vendor/league/csv/src/ResultSet.php @@ -14,10 +14,7 @@ declare(strict_types=1); namespace League\Csv; use CallbackFilterIterator; -use Countable; -use Generator; use Iterator; -use IteratorAggregate; use JsonSerializable; use LimitIterator; use function array_flip; @@ -30,7 +27,7 @@ use function sprintf; /** * Represents the result set of a {@link Reader} processed by a {@link Statement}. */ -class ResultSet implements Countable, IteratorAggregate, JsonSerializable +class ResultSet implements TabularDataReader, JsonSerializable { /** * The CSV records collection. @@ -48,16 +45,25 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable /** * New instance. - * - * @param Iterator $records a CSV records collection iterator - * @param array $header the associated collection column names */ public function __construct(Iterator $records, array $header) { + $this->validateHeader($header); + $this->records = $records; $this->header = $header; } + /** + * @throws SyntaxError if the header syntax is invalid + */ + protected function validateHeader(array $header): void + { + if ($header !== array_unique(array_filter($header, 'is_string'))) { + throw new SyntaxError('The header record must be an empty or a flat array with unique string values.'); + } + } + /** * {@inheritdoc} */ @@ -66,6 +72,14 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable unset($this->records); } + /** + * Returns a new instance from a League\Csv\Reader object. + */ + public static function createFromTabularDataReader(TabularDataReader $reader): self + { + return new self($reader->getRecords(), $reader->getHeader()); + } + /** * Returns the header associated with the result set. * @@ -79,19 +93,45 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable /** * {@inheritdoc} */ - public function getRecords(): Generator + public function getIterator(): Iterator + { + return $this->getRecords(); + } + + /** + * {@inheritdoc} + */ + public function getRecords(array $header = []): Iterator { - foreach ($this->records as $offset => $value) { + $this->validateHeader($header); + $records = $this->combineHeader($header); + foreach ($records as $offset => $value) { yield $offset => $value; } } /** - * {@inheritdoc} + * Combine the header to each record if present. */ - public function getIterator(): Generator + protected function combineHeader(array $header): Iterator { - return $this->getRecords(); + if ($header === $this->header || [] === $header) { + return $this->records; + } + + $field_count = count($header); + $mapper = static function (array $record) use ($header, $field_count): array { + if (count($record) != $field_count) { + $record = array_slice(array_pad($record, $field_count, null), 0, $field_count); + } + + /** @var array<string|null> $assocRecord */ + $assocRecord = array_combine($header, $record); + + return $assocRecord; + }; + + return new MapIterator($this->records, $mapper); } /** @@ -111,18 +151,12 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable } /** - * Returns the nth record from the result set. - * - * By default if no index is provided the first record of the resultet is returned - * - * @param int $nth_record the CSV record offset - * - * @throws Exception if argument is lesser than 0 + * {@inheritdoc} */ public function fetchOne(int $nth_record = 0): array { if ($nth_record < 0) { - throw new Exception(sprintf('%s() expects the submitted offset to be a positive integer or 0, %s given', __METHOD__, $nth_record)); + throw new InvalidArgument(sprintf('%s() expects the submitted offset to be a positive integer or 0, %s given', __METHOD__, $nth_record)); } $iterator = new LimitIterator($this->records, $nth_record, 1); @@ -132,13 +166,9 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable } /** - * Returns a single column from the next record of the result set. - * - * By default if no value is supplied the first column is fetch - * - * @param string|int $index CSV column index + * {@inheritdoc} */ - public function fetchColumn($index = 0): Generator + public function fetchColumn($index = 0): Iterator { $offset = $this->getColumnIndex($index, __METHOD__.'() expects the column index to be a valid string or integer, `%s` given'); $filter = static function (array $record) use ($offset): bool { @@ -150,8 +180,8 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable }; $iterator = new MapIterator(new CallbackFilterIterator($this->records, $filter), $select); - foreach ($iterator as $offset => $value) { - yield $offset => $value; + foreach ($iterator as $tKey => $tValue) { + yield $tKey => $tValue; } } @@ -165,9 +195,11 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable */ protected function getColumnIndex($field, string $error_message) { - $method = is_string($field) ? 'getColumnIndexByValue' : 'getColumnIndexByKey'; + if (is_string($field)) { + return $this->getColumnIndexByValue($field, $error_message); + } - return $this->$method($field, $error_message); + return $this->getColumnIndexByKey($field, $error_message); } /** @@ -181,7 +213,7 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable return $value; } - throw new Exception(sprintf($error_message, $value)); + throw new InvalidArgument(sprintf($error_message, $value)); } /** @@ -194,7 +226,7 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable protected function getColumnIndexByKey(int $index, string $error_message) { if ($index < 0) { - throw new Exception($error_message); + throw new InvalidArgument($error_message); } if ([] === $this->header) { @@ -206,21 +238,13 @@ class ResultSet implements Countable, IteratorAggregate, JsonSerializable return $value; } - throw new Exception(sprintf($error_message, $index)); + throw new InvalidArgument(sprintf($error_message, $index)); } /** - * Returns the next key-value pairs from a result set (first - * column is the key, second column is the value). - * - * By default if no column index is provided: - * - the first column is used to provide the keys - * - the second column is used to provide the value - * - * @param string|int $offset_index The column index to serve as offset - * @param string|int $value_index The column index to serve as value + * {@inheritdoc} */ - public function fetchPairs($offset_index = 0, $value_index = 1): Generator + public function fetchPairs($offset_index = 0, $value_index = 1): Iterator { $offset = $this->getColumnIndex($offset_index, __METHOD__.'() expects the offset index value to be a valid string or integer, `%s` given'); $value = $this->getColumnIndex($value_index, __METHOD__.'() expects the value index value to be a valid string or integer, `%s` given'); diff --git a/civicrm/vendor/league/csv/src/Statement.php b/civicrm/vendor/league/csv/src/Statement.php index 31015adeab..9594de1956 100644 --- a/civicrm/vendor/league/csv/src/Statement.php +++ b/civicrm/vendor/league/csv/src/Statement.php @@ -18,7 +18,6 @@ use CallbackFilterIterator; use Iterator; use LimitIterator; use function array_reduce; -use function iterator_to_array; /** * Criteria to filter a {@link Reader} object. @@ -53,13 +52,28 @@ class Statement */ protected $limit = -1; + /** + * Named Constructor to ease Statement instantiation. + * + * @throws Exception + */ + public static function create(callable $where = null, int $offset = 0, int $limit = -1): self + { + $stmt = new self(); + if (null !== $where) { + $stmt = $stmt->where($where); + } + + return $stmt->offset($offset)->limit($limit); + } + /** * Set the Iterator filter method. */ - public function where(callable $callable): self + public function where(callable $where): self { $clone = clone $this; - $clone->where[] = $callable; + $clone->where[] = $where; return $clone; } @@ -67,10 +81,10 @@ class Statement /** * Set an Iterator sorting callable function. */ - public function orderBy(callable $callable): self + public function orderBy(callable $order_by): self { $clone = clone $this; - $clone->order_by[] = $callable; + $clone->order_by[] = $order_by; return $clone; } @@ -83,7 +97,7 @@ class Statement public function offset(int $offset): self { if (0 > $offset) { - throw new Exception(sprintf('%s() expects the offset to be a positive integer or 0, %s given', __METHOD__, $offset)); + throw new InvalidArgument(sprintf('%s() expects the offset to be a positive integer or 0, %s given', __METHOD__, $offset)); } if ($offset === $this->offset) { @@ -104,7 +118,7 @@ class Statement public function limit(int $limit): self { if (-1 > $limit) { - throw new Exception(sprintf('%s() expects the limit to be greater or equal to -1, %s given', __METHOD__, $limit)); + throw new InvalidArgument(sprintf('%s() expects the limit to be greater or equal to -1, %s given', __METHOD__, $limit)); } if ($limit === $this->limit) { @@ -122,13 +136,14 @@ class Statement * * @param string[] $header an optional header to use instead of the CSV document header */ - public function process(Reader $csv, array $header = []): ResultSet + public function process(TabularDataReader $tabular_data, array $header = []): TabularDataReader { if ([] === $header) { - $header = $csv->getHeader(); + $header = $tabular_data->getHeader(); } - $iterator = array_reduce($this->where, [$this, 'filter'], $csv->getRecords($header)); + $iterator = $tabular_data->getRecords($header); + $iterator = array_reduce($this->where, [$this, 'filter'], $iterator); $iterator = $this->buildOrderBy($iterator); return new ResultSet(new LimitIterator($iterator, $this->offset, $this->limit), $header); @@ -161,9 +176,12 @@ class Statement return $cmp ?? 0; }; - $iterator = new ArrayIterator(iterator_to_array($iterator)); - $iterator->uasort($compare); + $it = new ArrayIterator(); + foreach ($iterator as $offset => $value) { + $it[$offset] = $value; + } + $it->uasort($compare); - return $iterator; + return $it; } } diff --git a/civicrm/vendor/league/csv/src/Stream.php b/civicrm/vendor/league/csv/src/Stream.php index cc5d296288..12d11d312e 100644 --- a/civicrm/vendor/league/csv/src/Stream.php +++ b/civicrm/vendor/league/csv/src/Stream.php @@ -17,7 +17,6 @@ use SeekableIterator; use SplFileObject; use TypeError; use function array_keys; -use function array_values; use function array_walk_recursive; use function fclose; use function feof; @@ -52,7 +51,7 @@ class Stream implements SeekableIterator /** * Attached filters. * - * @var resource[] + * @var array<string, array<resource>> */ protected $filters = []; @@ -73,7 +72,7 @@ class Stream implements SeekableIterator /** * Current iterator value. * - * @var mixed + * @var mixed can be a null false or a scalar type value */ protected $value; @@ -122,20 +121,20 @@ class Stream implements SeekableIterator /** * New instance. * - * @param resource $resource stream type resource + * @param mixed $stream stream type resource */ - public function __construct($resource) + public function __construct($stream) { - if (!is_resource($resource)) { - throw new TypeError(sprintf('Argument passed must be a stream resource, %s given', gettype($resource))); + if (!is_resource($stream)) { + throw new TypeError(sprintf('Argument passed must be a stream resource, %s given', gettype($stream))); } - if ('stream' !== ($type = get_resource_type($resource))) { + if ('stream' !== ($type = get_resource_type($stream))) { throw new TypeError(sprintf('Argument passed must be a stream resource, %s resource given', $type)); } - $this->is_seekable = stream_get_meta_data($resource)['seekable']; - $this->stream = $resource; + $this->is_seekable = stream_get_meta_data($stream)['seekable']; + $this->stream = $stream; } /** @@ -167,7 +166,7 @@ class Stream implements SeekableIterator /** * {@inheritdoc} */ - public function __debugInfo() + public function __debugInfo(): array { return stream_get_meta_data($this->stream) + [ 'delimiter' => $this->delimiter, @@ -183,10 +182,8 @@ class Stream implements SeekableIterator * @param resource|null $context * * @throws Exception if the stream resource can not be created - * - * @return static */ - public static function createFromPath(string $path, string $open_mode = 'r', $context = null) + public static function createFromPath(string $path, string $open_mode = 'r', $context = null): self { $args = [$path, $open_mode]; if (null !== $context) { @@ -194,11 +191,12 @@ class Stream implements SeekableIterator $args[] = $context; } - if (!$resource = @fopen(...$args)) { + $resource = @fopen(...$args); + if (!is_resource($resource)) { throw new Exception(sprintf('`%s`: failed to open stream: No such file or directory', $path)); } - $instance = new static($resource); + $instance = new self($resource); $instance->should_close_stream = true; return $instance; @@ -206,15 +204,14 @@ class Stream implements SeekableIterator /** * Return a new instance from a string. - * - * @return static */ - public static function createFromString(string $content = '') + public static function createFromString(string $content = ''): self { + /** @var resource $resource */ $resource = fopen('php://temp', 'r+'); fwrite($resource, $content); - $instance = new static($resource); + $instance = new self($resource); $instance->should_close_stream = true; return $instance; @@ -236,23 +233,22 @@ class Stream implements SeekableIterator * @param null|mixed $params * @throws Exception if the filter can not be appended */ - public function appendFilter(string $filtername, int $read_write, $params = null) + public function appendFilter(string $filtername, int $read_write, $params = null): void { $res = @stream_filter_append($this->stream, $filtername, $read_write, $params); - if (is_resource($res)) { - $this->filters[$filtername][] = $res; - return; + if (!is_resource($res)) { + throw new InvalidArgument(sprintf('unable to locate filter `%s`', $filtername)); } - throw new Exception(sprintf('unable to locate filter `%s`', $filtername)); + $this->filters[$filtername][] = $res; } /** * Set CSV control. * - * @see http://php.net/manual/en/splfileobject.setcsvcontrol.php + * @see http://php.net/manual/en/SplFileObject.setcsvcontrol.php */ - public function setCsvControl(string $delimiter = ',', string $enclosure = '"', string $escape = '\\') + public function setCsvControl(string $delimiter = ',', string $enclosure = '"', string $escape = '\\'): void { list($this->delimiter, $this->enclosure, $this->escape) = $this->filterControl($delimiter, $enclosure, $escape, __METHOD__); } @@ -264,28 +260,29 @@ class Stream implements SeekableIterator */ protected function filterControl(string $delimiter, string $enclosure, string $escape, string $caller): array { - $controls = ['delimiter' => $delimiter, 'enclosure' => $enclosure, 'escape' => $escape]; - foreach ($controls as $type => $control) { - if ('escape' === $type && '' === $control && 70400 <= PHP_VERSION_ID) { - continue; - } - - if (1 !== strlen($control)) { - throw new Exception(sprintf('%s() expects %s to be a single character', $caller, $type)); - } + if (1 !== strlen($delimiter)) { + throw new InvalidArgument(sprintf('%s() expects delimiter to be a single character', $caller)); + } + + if (1 !== strlen($enclosure)) { + throw new InvalidArgument(sprintf('%s() expects enclosure to be a single character', $caller)); + } + + if (1 === strlen($escape) || ('' === $escape && 70400 <= PHP_VERSION_ID)) { + return [$delimiter, $enclosure, $escape]; } - return array_values($controls); + throw new InvalidArgument(sprintf('%s() expects escape to be a single character', $caller)); } /** * Set CSV control. * - * @see http://php.net/manual/en/splfileobject.getcsvcontrol.php + * @see http://php.net/manual/en/SplFileObject.getcsvcontrol.php * * @return string[] */ - public function getCsvControl() + public function getCsvControl(): array { return [$this->delimiter, $this->enclosure, $this->escape]; } @@ -293,9 +290,9 @@ class Stream implements SeekableIterator /** * Set CSV stream flags. * - * @see http://php.net/manual/en/splfileobject.setflags.php + * @see http://php.net/manual/en/SplFileObject.setflags.php */ - public function setFlags(int $flags) + public function setFlags(int $flags): void { $this->flags = $flags; } @@ -303,9 +300,9 @@ class Stream implements SeekableIterator /** * Write a field array as a CSV line. * - * @see http://php.net/manual/en/splfileobject.fputcsv.php + * @see http://php.net/manual/en/SplFileObject.fputcsv.php * - * @return int|bool + * @return int|false */ public function fputcsv(array $fields, string $delimiter = ',', string $enclosure = '"', string $escape = '\\') { @@ -317,7 +314,7 @@ class Stream implements SeekableIterator /** * Get line number. * - * @see http://php.net/manual/en/splfileobject.key.php + * @see http://php.net/manual/en/SplFileObject.key.php * * @return int */ @@ -329,9 +326,9 @@ class Stream implements SeekableIterator /** * Read next line. * - * @see http://php.net/manual/en/splfileobject.next.php + * @see http://php.net/manual/en/SplFileObject.next.php */ - public function next() + public function next(): void { $this->value = false; $this->offset++; @@ -340,11 +337,11 @@ class Stream implements SeekableIterator /** * Rewind the file to the first line. * - * @see http://php.net/manual/en/splfileobject.rewind.php + * @see http://php.net/manual/en/SplFileObject.rewind.php * * @throws Exception if the stream resource is not seekable */ - public function rewind() + public function rewind(): void { if (!$this->is_seekable) { throw new Exception('stream does not support seeking'); @@ -353,7 +350,7 @@ class Stream implements SeekableIterator rewind($this->stream); $this->offset = 0; $this->value = false; - if ($this->flags & SplFileObject::READ_AHEAD) { + if (0 !== ($this->flags & SplFileObject::READ_AHEAD)) { $this->current(); } } @@ -361,13 +358,13 @@ class Stream implements SeekableIterator /** * Not at EOF. * - * @see http://php.net/manual/en/splfileobject.valid.php + * @see http://php.net/manual/en/SplFileObject.valid.php * * @return bool */ public function valid() { - if ($this->flags & SplFileObject::READ_AHEAD) { + if (0 !== ($this->flags & SplFileObject::READ_AHEAD)) { return $this->current() !== false; } @@ -377,7 +374,9 @@ class Stream implements SeekableIterator /** * Retrieves the current line of the file. * - * @see http://php.net/manual/en/splfileobject.current.php + * @see http://php.net/manual/en/SplFileObject.current.php + * + * @return mixed The value of the current element. */ public function current() { @@ -393,13 +392,13 @@ class Stream implements SeekableIterator /** * Retrieves the current line as a CSV Record. * - * @return array|bool + * @return array|false|null */ protected function getCurrentRecord() { do { $ret = fgetcsv($this->stream, 0, $this->delimiter, $this->enclosure, $this->escape); - } while ($this->flags & SplFileObject::SKIP_EMPTY && $ret !== false && $ret[0] === null); + } while ((0 !== ($this->flags & SplFileObject::SKIP_EMPTY)) && $ret !== null && $ret !== false && $ret[0] === null); return $ret; } @@ -407,12 +406,12 @@ class Stream implements SeekableIterator /** * Seek to specified line. * - * @see http://php.net/manual/en/splfileobject.seek.php + * @see http://php.net/manual/en/SplFileObject.seek.php * * @param int $position * @throws Exception if the position is negative */ - public function seek($position) + public function seek($position): void { if ($position < 0) { throw new Exception(sprintf('%s() can\'t seek stream to negative line %d', __METHOD__, $position)); @@ -423,20 +422,20 @@ class Stream implements SeekableIterator $this->current(); $this->next(); } - + if (0 !== $position) { $this->offset--; } - + $this->current(); } /** * Output all remaining data on a file pointer. * - * @see http://php.net/manual/en/splfileobject.fpatssthru.php + * @see http://php.net/manual/en/SplFileObject.fpatssthru.php * - * @return int + * @return int|false */ public function fpassthru() { @@ -446,13 +445,13 @@ class Stream implements SeekableIterator /** * Read from file. * - * @see http://php.net/manual/en/splfileobject.fread.php + * @see http://php.net/manual/en/SplFileObject.fread.php * * @param int $length The number of bytes to read * * @return string|false */ - public function fread($length) + public function fread(int $length) { return fread($this->stream, $length); } @@ -460,7 +459,7 @@ class Stream implements SeekableIterator /** * Gets a line from file. * - * @see http://php.net/manual/en/splfileobject.fgets.php + * @see http://php.net/manual/en/SplFileObject.fgets.php * * @return string|false */ @@ -472,13 +471,11 @@ class Stream implements SeekableIterator /** * Seek to a position. * - * @see http://php.net/manual/en/splfileobject.fseek.php + * @see http://php.net/manual/en/SplFileObject.fseek.php * * @throws Exception if the stream resource is not seekable - * - * @return int */ - public function fseek(int $offset, int $whence = SEEK_SET) + public function fseek(int $offset, int $whence = SEEK_SET): int { if (!$this->is_seekable) { throw new Exception('stream does not support seeking'); @@ -490,9 +487,9 @@ class Stream implements SeekableIterator /** * Write to stream. * - * @see http://php.net/manual/en/splfileobject.fwrite.php + * @see http://php.net/manual/en/SplFileObject.fwrite.php * - * @return int|bool + * @return int|false */ public function fwrite(string $str, int $length = null) { @@ -507,11 +504,9 @@ class Stream implements SeekableIterator /** * Flushes the output to a file. * - * @see http://php.net/manual/en/splfileobject.fwrite.php - * - * @return bool + * @see http://php.net/manual/en/SplFileObject.fwrite.php */ - public function fflush() + public function fflush(): bool { return fflush($this->stream); } diff --git a/civicrm/vendor/league/csv/src/SyntaxError.php b/civicrm/vendor/league/csv/src/SyntaxError.php new file mode 100644 index 0000000000..4794d9a747 --- /dev/null +++ b/civicrm/vendor/league/csv/src/SyntaxError.php @@ -0,0 +1,21 @@ +<?php + +/** + * League.Csv (https://csv.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * SyntaxError Exception. + */ +class SyntaxError extends Exception +{ +} diff --git a/civicrm/vendor/league/csv/src/TabularDataReader.php b/civicrm/vendor/league/csv/src/TabularDataReader.php new file mode 100644 index 0000000000..e1dc0e112d --- /dev/null +++ b/civicrm/vendor/league/csv/src/TabularDataReader.php @@ -0,0 +1,103 @@ +<?php + +/** + * League.Csv (https://csv.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +use Countable; +use Iterator; +use IteratorAggregate; + +/** + * Represents a Tabular data. + */ +interface TabularDataReader extends Countable, IteratorAggregate +{ + /** + * Returns the number of records contained in the tabular data structure + * excluding the header record. + */ + public function count(): int; + + /** + * Returns the tabular data records as an iterator object. + * + * Each record is represented as a simple array containing strings or null values. + * + * If the CSV document has a header record then each record is combined + * to the header record and the header record is removed from the iterator. + * + * If the CSV document is inconsistent. Missing record fields are + * filled with null values while extra record fields are strip from + * the returned object. + */ + public function getIterator(): Iterator; + + /** + * Returns the header associated with the tabular data. + * + * The header must contains unique string or is an empty array + * if no header was specified. + * + * @return string[] + */ + public function getHeader(): array; + + /** + * Returns the tabular data records as an iterator object. + * + * Each record is represented as a simple array containing strings or null values. + * + * If the tabular data has a header record then each record is combined + * to the header record and the header record is removed from the iterator. + * + * If the tabular data is inconsistent. Missing record fields are + * filled with null values while extra record fields are strip from + * the returned object. + * + * @param string[] $header an optional header to use instead of the CSV document header + */ + public function getRecords(array $header = []): Iterator; + + /** + * Returns the nth record from the tabular data. + * + * By default if no index is provided the first record of the tabular data is returned + * + * @param int $nth_record the tabular data record offset + * + * @throws Exception if argument is lesser than 0 + */ + public function fetchOne(int $nth_record = 0): array; + + /** + * Returns a single column from the next record of the tabular data. + * + * By default if no value is supplied the first column is fetch + * + * @param string|int $index CSV column index + */ + public function fetchColumn($index = 0): Iterator; + + /** + * Returns the next key-value pairs from the tabular data (first + * column is the key, second column is the value). + * + * By default if no column index is provided: + * - the first column is used to provide the keys + * - the second column is used to provide the value + * + * @param string|int $offset_index The column index to serve as offset + * @param string|int $value_index The column index to serve as value + */ + public function fetchPairs($offset_index = 0, $value_index = 1): Iterator; +} diff --git a/civicrm/vendor/league/csv/src/UnavailableFeature.php b/civicrm/vendor/league/csv/src/UnavailableFeature.php new file mode 100644 index 0000000000..67edd7ffd6 --- /dev/null +++ b/civicrm/vendor/league/csv/src/UnavailableFeature.php @@ -0,0 +1,21 @@ +<?php + +/** + * League.Csv (https://csv.thephpleague.com) + * + * (c) Ignace Nyamagana Butera <nyamsprod@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace League\Csv; + +/** + * StreamFilterSupportMissing Exception. + */ +class UnavailableFeature extends Exception +{ +} diff --git a/civicrm/vendor/league/csv/src/Writer.php b/civicrm/vendor/league/csv/src/Writer.php index 0a23c7c410..31c842211b 100644 --- a/civicrm/vendor/league/csv/src/Writer.php +++ b/civicrm/vendor/league/csv/src/Writer.php @@ -13,15 +13,10 @@ declare(strict_types=1); namespace League\Csv; -use Traversable; -use TypeError; use function array_reduce; -use function gettype; use function implode; -use function is_iterable; use function preg_match; use function preg_quote; -use function sprintf; use function str_replace; use function strlen; use const PHP_VERSION_ID; @@ -90,7 +85,7 @@ class Writer extends AbstractCsv /** * {@inheritdoc} */ - protected function resetProperties() + protected function resetProperties(): void { parent::resetProperties(); $characters = preg_quote($this->delimiter, '/').'|'.preg_quote($this->enclosure, '/'); @@ -120,15 +115,9 @@ class Writer extends AbstractCsv * Adds multiple records to the CSV document. * * @see Writer::insertOne - * - * @param Traversable|array $records */ - public function insertAll($records): int + public function insertAll(iterable $records): int { - if (!is_iterable($records)) { - throw new TypeError(sprintf('%s() expects argument passed to be iterable, %s given', __METHOD__, gettype($records))); - } - $bytes = 0; foreach ($records as $record) { $bytes += $this->insertOne($record); @@ -158,11 +147,11 @@ class Writer extends AbstractCsv $record = array_reduce($this->formatters, [$this, 'formatRecord'], $record); $this->validateRecord($record); $bytes = $this->$method($record); - if (false !== $bytes && 0 !== $bytes) { - return $bytes + $this->consolidate(); + if (false === $bytes || 0 >= $bytes) { + throw CannotInsertRecord::triggerOnInsertion($record); } - throw CannotInsertRecord::triggerOnInsertion($record); + return $bytes + $this->consolidate(); } /** @@ -170,7 +159,7 @@ class Writer extends AbstractCsv * * @see https://php.net/manual/en/function.fputcsv.php * - * @return int|bool + * @return int|false */ protected function addRecord(array $record) { @@ -204,13 +193,13 @@ class Writer extends AbstractCsv * * The LF character is added at the end of each record to mimic fputcsv behavior * - * @return int|bool + * @return int|false */ protected function addRFC4180CompliantRecord(array $record) { foreach ($record as &$field) { $field = (string) $field; - if (preg_match($this->rfc4180_regexp, $field)) { + if (1 === preg_match($this->rfc4180_regexp, $field)) { $field = $this->enclosure.str_replace($this->enclosure, $this->rfc4180_enclosure, $field).$this->enclosure; } } @@ -237,7 +226,7 @@ class Writer extends AbstractCsv * * @throws CannotInsertRecord If the validation failed */ - protected function validateRecord(array $record) + protected function validateRecord(array $record): void { foreach ($this->validators as $name => $validator) { if (true !== $validator($record)) { @@ -254,7 +243,9 @@ class Writer extends AbstractCsv $bytes = 0; if ("\n" !== $this->newline) { $this->document->fseek(-1, SEEK_CUR); - $bytes = $this->document->fwrite($this->newline, strlen($this->newline)) - 1; + /** @var int $newlineBytes */ + $newlineBytes = $this->document->fwrite($this->newline, strlen($this->newline)); + $bytes = $newlineBytes - 1; } if (null === $this->flush_threshold) { @@ -303,22 +294,18 @@ class Writer extends AbstractCsv /** * Set the flush threshold. * - * @param int|null $threshold * + * @param ?int $threshold * @throws Exception if the threshold is a integer lesser than 1 */ - public function setFlushThreshold($threshold): self + public function setFlushThreshold(?int $threshold): self { if ($threshold === $this->flush_threshold) { return $this; } - if (!is_nullable_int($threshold)) { - throw new TypeError(sprintf(__METHOD__.'() expects 1 Argument to be null or an integer %s given', gettype($threshold))); - } - if (null !== $threshold && 1 > $threshold) { - throw new Exception(__METHOD__.'() expects 1 Argument to be null or a valid integer greater or equal to 1'); + throw new InvalidArgument(__METHOD__.'() expects 1 Argument to be null or a valid integer greater or equal to 1'); } $this->flush_threshold = $threshold; diff --git a/civicrm/vendor/league/csv/src/XMLConverter.php b/civicrm/vendor/league/csv/src/XMLConverter.php index c7b2fdecc8..610248a7f9 100644 --- a/civicrm/vendor/league/csv/src/XMLConverter.php +++ b/civicrm/vendor/league/csv/src/XMLConverter.php @@ -17,14 +17,9 @@ use DOMAttr; use DOMDocument; use DOMElement; use DOMException; -use Traversable; -use TypeError; -use function gettype; -use function is_iterable; -use function sprintf; /** - * Converts tabular data into a DOMDOcument object. + * Converts tabular data into a DOMDocument object. */ class XMLConverter { @@ -80,27 +75,33 @@ class XMLConverter ]; /** - * Convert an Record collection into a DOMDocument. - * - * @param array|Traversable $records the CSV records collection + * Convert a Record collection into a DOMDocument. */ - public function convert($records): DOMDocument + public function convert(iterable $records): DOMDocument { - if (!is_iterable($records)) { - throw new TypeError(sprintf('%s() expects argument passed to be iterable, %s given', __METHOD__, gettype($records))); - } + $doc = new DOMDocument('1.0'); + $node = $this->import($records, $doc); + $doc->appendChild($node); + + return $doc; + } + /** + * Create a new DOMElement related to the given DOMDocument. + * + * **DOES NOT** attach to the DOMDocument + */ + public function import(iterable $records, DOMDocument $doc): DOMElement + { $field_encoder = $this->encoder['field']['' !== $this->column_attr]; $record_encoder = $this->encoder['record']['' !== $this->offset_attr]; - $doc = new DOMDocument('1.0'); $root = $doc->createElement($this->root_name); foreach ($records as $offset => $record) { $node = $this->$record_encoder($doc, $record, $field_encoder, $offset); $root->appendChild($node); } - $doc->appendChild($root); - return $doc; + return $root; } /** diff --git a/civicrm/vendor/league/csv/src/functions.php b/civicrm/vendor/league/csv/src/functions.php index bf7537a84e..f54f70efc3 100644 --- a/civicrm/vendor/league/csv/src/functions.php +++ b/civicrm/vendor/league/csv/src/functions.php @@ -11,105 +11,90 @@ declare(strict_types=1); -namespace League\Csv { - - use ReflectionClass; - use Traversable; - use function array_fill_keys; - use function array_filter; - use function array_reduce; - use function array_unique; - use function count; - use function is_array; - use function iterator_to_array; - use function strpos; - use const COUNT_RECURSIVE; - - /** - * Returns the BOM sequence found at the start of the string. - * - * If no valid BOM sequence is found an empty string is returned - */ - function bom_match(string $str): string - { - static $list; - - $list = $list ?? (new ReflectionClass(ByteSequence::class))->getConstants(); - - foreach ($list as $sequence) { - if (0 === strpos($str, $sequence)) { - return $sequence; - } - } - - return ''; - } +namespace League\Csv; + +use ReflectionClass; +use function array_fill_keys; +use function array_filter; +use function array_reduce; +use function array_unique; +use function count; +use function iterator_to_array; +use function rsort; +use function strlen; +use function strpos; +use const COUNT_RECURSIVE; - /** - * Detect Delimiters usage in a {@link Reader} object. - * - * Returns a associative array where each key represents - * a submitted delimiter and each value the number CSV fields found - * when processing at most $limit CSV records with the given delimiter - * - * @param string[] $delimiters - * - * @return int[] - */ - function delimiter_detect(Reader $csv, array $delimiters, int $limit = 1): array - { - $found = array_unique(array_filter($delimiters, static function (string $value): bool { - return 1 == strlen($value); - })); - $stmt = (new Statement())->limit($limit)->where(static function (array $record): bool { - return count($record) > 1; - }); - $reducer = static function (array $result, string $delimiter) use ($csv, $stmt): array { - $result[$delimiter] = count(iterator_to_array($stmt->process($csv->setDelimiter($delimiter)), false), COUNT_RECURSIVE); - - return $result; - }; - $delimiter = $csv->getDelimiter(); - $header_offset = $csv->getHeaderOffset(); - $csv->setHeaderOffset(null); - $stats = array_reduce($found, $reducer, array_fill_keys($delimiters, 0)); - $csv->setHeaderOffset($header_offset)->setDelimiter($delimiter); +/** + * Returns the BOM sequence found at the start of the string. + * + * If no valid BOM sequence is found an empty string is returned + */ +function bom_match(string $str): string +{ + static $list; + if (null === $list) { + $list = (new ReflectionClass(ByteSequence::class))->getConstants(); - return $stats; + rsort($list); } - /** - * Tell whether the content of the variable is iterable. - * - * @see http://php.net/manual/en/function.is-iterable.php - */ - function is_iterable($iterable): bool - { - return is_array($iterable) || $iterable instanceof Traversable; + foreach ($list as $sequence) { + if (0 === strpos($str, $sequence)) { + return $sequence; + } } - /** - * Tell whether the content of the variable is an int or null. - * - * @see https://wiki.php.net/rfc/nullable_types - */ - function is_nullable_int($value): bool - { - return null === $value || is_int($value); - } + return ''; } -namespace { +/** + * Detect Delimiters usage in a {@link Reader} object. + * + * Returns a associative array where each key represents + * a submitted delimiter and each value the number CSV fields found + * when processing at most $limit CSV records with the given delimiter + * + * @param string[] $delimiters + * + * @return int[] + */ +function delimiter_detect(Reader $csv, array $delimiters, int $limit = 1): array +{ + $delimiter_filter = static function (string $value): bool { + return 1 === strlen($value); + }; + + $record_filter = static function (array $record): bool { + return 1 < count($record); + }; - use League\Csv; + $stmt = Statement::create(null, 0, $limit); - if (PHP_VERSION_ID < 70100 && !function_exists('\is_iterable')) { - /** - * @codeCoverageIgnore - */ - function is_iterable($iterable) - { - return Csv\is_iterable($iterable); - } - } + $delimiter_stats = static function (array $stats, string $delimiter) use ($csv, $stmt, $record_filter): array { + $csv->setDelimiter($delimiter); + $found_records = array_filter( + iterator_to_array($stmt->process($csv)->getRecords(), false), + $record_filter + ); + + $stats[$delimiter] = count($found_records, COUNT_RECURSIVE); + + return $stats; + }; + + $current_delimiter = $csv->getDelimiter(); + $current_header_offset = $csv->getHeaderOffset(); + $csv->setHeaderOffset(null); + + $stats = array_reduce( + array_unique(array_filter($delimiters, $delimiter_filter)), + $delimiter_stats, + array_fill_keys($delimiters, 0) + ); + + $csv->setHeaderOffset($current_header_offset); + $csv->setDelimiter($current_delimiter); + + return $stats; } diff --git a/civicrm/xml/schema/Campaign/Survey.xml b/civicrm/xml/schema/Campaign/Survey.xml index 612af59932..95c7007723 100644 --- a/civicrm/xml/schema/Campaign/Survey.xml +++ b/civicrm/xml/schema/Campaign/Survey.xml @@ -32,6 +32,9 @@ <required>true</required> <localizable>true</localizable> <comment>Title of the Survey.</comment> + <html> + <type>Text</type> + </html> <import>true</import> <add>3.3</add> </field> diff --git a/civicrm/xml/schema/Contact/SavedSearch.xml b/civicrm/xml/schema/Contact/SavedSearch.xml index 77f5b37229..b3a7ee515f 100644 --- a/civicrm/xml/schema/Contact/SavedSearch.xml +++ b/civicrm/xml/schema/Contact/SavedSearch.xml @@ -5,6 +5,7 @@ <class>SavedSearch</class> <name>civicrm_saved_search</name> <comment>Users can save their complex SQL queries and use them later.</comment> + <icon>fa-search-plus</icon> <add>1.1</add> <field> <name>id</name> diff --git a/civicrm/xml/schema/Core/CustomGroup.xml b/civicrm/xml/schema/Core/CustomGroup.xml index 7f644b54ab..ca3d0cc5e7 100644 --- a/civicrm/xml/schema/Core/CustomGroup.xml +++ b/civicrm/xml/schema/Core/CustomGroup.xml @@ -58,7 +58,7 @@ <comment>Type of object this group extends (can add other options later e.g. contact_address, etc.).</comment> <add>1.1</add> <pseudoconstant> - <callback>CRM_Core_SelectValues::customGroupExtends</callback> + <callback>CRM_Core_BAO_CustomGroup::getCustomGroupExtendsOptions</callback> </pseudoconstant> </field> <field> @@ -82,6 +82,9 @@ <length>255</length> <comment>linking custom group for dynamic object</comment> <serialize>SEPARATOR_BOOKEND</serialize> + <pseudoconstant> + <callback>CRM_Core_BAO_CustomGroup::getExtendsEntityColumnValueOptions</callback> + </pseudoconstant> <add>1.6</add> </field> <field> diff --git a/civicrm/xml/schema/Core/UserJob.xml b/civicrm/xml/schema/Core/UserJob.xml new file mode 100644 index 0000000000..0c8113e0c9 --- /dev/null +++ b/civicrm/xml/schema/Core/UserJob.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>UserJob</class> + <name>civicrm_user_job</name> + <comment>Tracking for user jobs (eg. imports).</comment> + <add>5.50</add> + <log>false</log> + <field> + <name>id</name> + <title>User Job ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Job ID</comment> + <html> + <type>Number</type> + </html> + <add>5.50</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>User job name</title> + <type>varchar</type> + <length>64</length> + <comment>Unique name for job.</comment> + <add>5.50</add> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>5.50</add> + </index> + <field> + <name>created_id</name> + <type>int unsigned</type> + <title>Created By Contact ID</title> + <comment>FK to contact table.</comment> + <html> + <label>Created By</label> + </html> + <add>5.50</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>5.50</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <title>Import Job Created Date</title> + <readonly>true</readonly> + <comment>Date and time this job was created.</comment> + <add>5.50</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>start_date</name> + <type>timestamp</type> + <required>false</required> + <title>Import Job Started Date</title> + <comment>Date and time this import job started.</comment> + <add>5.50</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + <readonly>true</readonly> + </field> + <field> + <name>end_date</name> + <type>timestamp</type> + <required>false</required> + <title>Job Ended Date</title> + <comment>Date and time this import job ended.</comment> + <add>5.50</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>expires_date</name> + <type>timestamp</type> + <required>false</required> + <title>Import Job Expires Date</title> + <comment>Date and time to clean up after this import job (temp table deletion date).</comment> + <add>5.50</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>status_id</name> + <title>User Job Status ID</title> + <type>int unsigned</type> + <required>true</required> + <html> + <label>Job Status</label> + </html> + <pseudoconstant> + <callback>CRM_Core_BAO_UserJob::getStatuses</callback> + </pseudoconstant> + <add>5.50</add> + </field> + <field> + <name>type_id</name> + <title>User Job Type ID</title> + <type>int unsigned</type> + <required>true</required> + <html> + <label>Job Type</label> + </html> + <pseudoconstant> + <callback>CRM_Core_BAO_UserJob::getTypes</callback> + </pseudoconstant> + <add>5.50</add> + </field> + <field> + <name>queue_id</name> + <title>Queue ID</title> + <type>int unsigned</type> + <comment>FK to Queue</comment> + <html> + <label>Queue</label> + </html> + </field> + <foreignKey> + <name>queue_id</name> + <table>civicrm_queue</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>metadata</name> + <type>text</type> + <title>Job metadata</title> + <comment>Data pertaining to job configuration</comment> + <serialize>JSON</serialize> + <add>5.50</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/files.xml b/civicrm/xml/schema/Core/files.xml index 05ae0fac88..8c45d2cdb8 100644 --- a/civicrm/xml/schema/Core/files.xml +++ b/civicrm/xml/schema/Core/files.xml @@ -42,6 +42,7 @@ <xi:include href="UFField.xml" parse="xml" /> <xi:include href="UFMatch.xml" parse="xml" /> <xi:include href="UFJoin.xml" parse="xml" /> + <xi:include href="UserJob.xml" parse="xml" /> <xi:include href="Timezone.xml" parse="xml" /> <xi:include href="Worldregion.xml" parse="xml" /> <xi:include href="OpenID.xml" parse="xml" /> diff --git a/civicrm/xml/templates/civicrm_currency.tpl b/civicrm/xml/templates/civicrm_currency.tpl index f2244ddbfa..4ace4d8517 100644 --- a/civicrm/xml/templates/civicrm_currency.tpl +++ b/civicrm/xml/templates/civicrm_currency.tpl @@ -65,7 +65,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 52, "RSD", "Дин.","941", "Serbian Dinar"), ( 53, "CUP", "₱", "192", "Cuban Peso"), ( 54, "CVE", NULL, "132", "Cape Verde Escudo"), -( 55, "CYP", "£", "196", "Cyprus Pound"), ( 56, "CZK", "KÄ", "203", "Czech Koruna"), ( 57, "DJF", NULL, "262", "Djibouti Franc"), ( 58, "DKK", "kr", "208", "Danish Krone"), @@ -82,7 +81,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 70, "GMD", NULL, "270", "Gambian Dalasi"), ( 71, "GNF", NULL, "324", "Guinea Franc"), ( 72, "GTQ", "Q", "320", "Guatemalan Quetzal"), -( 73, "GWP", NULL, "624", "Guinea-Bissau Peso"), ( 74, "GYD", "$", "328", "Guyana Dollar"), ( 75, "HKD","HK$", "344", "Hong Kong Dollar"), ( 76, "HNL", "L", "340", "Honduran Lempira"), @@ -107,8 +105,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES ( 95, "LKR", "₨", "144", "Sri Lanka Rupee"), ( 96, "LRD", "$", "430", "Liberian Dollar"), ( 97, "LSL", NULL, "426", "Lesotho Loti"), -( 98, "LTL", "Lt", "440", "Lithuanian Litas"), -( 99, "LVL", "Ls", "428", "Latvian Lats"), (100, "LYD", NULL, "434", "Libyan Dinar"), (101, "MAD", NULL, "504", "Moroccan Dirham"), (102, "MDL", NULL, "498", "Moldovan Leu"), @@ -117,7 +113,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES (105, "MMK", NULL, "104", "Myanmar Kyat"), (106, "MOP", NULL, "446", "Macao Pataca"), (107, "MRO", NULL, "478", "Mauritanian Ouguiya"), -(108, "MTL", "Lm", "470", "Maltese Lira"), (109, "MUR", "₨", "480", "Mauritius Rupee"), (110, "MVR", NULL, "462", "Maldive Rufiyaa"), (111, "MWK", NULL, "454", "Malawi Kwacha"), @@ -138,19 +133,15 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES (126, "PKR", "₨", "586", "Pakistan Rupee"), (127, "PYG", "Gs", "600", "Paraguay Guarani"), (128, "QAR", "ï·¼", "634", "Qatari Rial"), -(129, "ROL", NULL, "642", "Romanian Old Leu"), (130, "RON","lei", "946", "Romanian New Leu"), (131, "RUB","руб", "643", "Russian Rouble"), (132, "RWF", NULL, "646", "Rwanda Franc"), (133, "SAR", "ï·¼", "682", "Saudi Riyal"), (134, "SBD", "$", "090", "Solomon Islands Dollar"), (135, "SCR", "₨", "690", "Seychelles Rupee"), -(136, "SDD", NULL, "736", "Sudanese Dinar"), (137, "SEK", "kr", "752", "Swedish Krona"), (138, "SGD", "$", "702", "Singapore Dollar"), (139, "SHP", "£", "654", "Saint Helena Pound"), -(140, "SIT", NULL, "705", "Slovenian Tolar"), -(141, "SKK","SIT", "703", "Slovak Koruna"), (142, "SLL", NULL, "694", "Leone"), (143, "SOS", "S", "706", "Somali Shilling"), (144, "SRD", "$", "968", "Surinam Dollar"), @@ -159,7 +150,6 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES (147, "SYP", "£", "760", "Syrian Pound"), (148, "SZL", NULL, "748", "Eswatini Lilangeni"), (149, "TJS", NULL, "972", "Tajik Somoni"), -(150, "TMM", NULL, "795", "Turkmenistan Manat"), (151, "TND", NULL, "788", "Tunisian Dinar"), (152, "TOP", NULL, "776", "Tongan Pa'anga"), (153, "TRY","YTL", "949", "New Turkish Lira"), diff --git a/civicrm/xml/templates/civicrm_data.tpl b/civicrm/xml/templates/civicrm_data.tpl index 462a10d5c1..88954b1727 100644 --- a/civicrm/xml/templates/civicrm_data.tpl +++ b/civicrm/xml/templates/civicrm_data.tpl @@ -685,9 +685,9 @@ VALUES (@option_group_id_pht, '{ts escape="sql"}Voicemail{/ts}' , 5, 'Voicemail' , NULL, 0, 0, 5, NULL, 0, 0, 1, NULL, NULL, NULL), -- custom data types. - (@option_group_id_cdt, 'Participant Role', '1', 'ParticipantRole', NULL, 0, 0, 1, NULL, 0, 0, 1, NULL, NULL , NULL), - (@option_group_id_cdt, 'Participant Event Name', '2', 'ParticipantEventName', NULL, 0, 0, 2, NULL, 0, 0, 1, NULL, NULL , NULL), - (@option_group_id_cdt, 'Participant Event Type', '3', 'ParticipantEventType', NULL, 0, 0, 3, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, '{ts escape="sql"}Participants (Role){/ts}', '1', 'ParticipantRole', 'role_id', 0, 0, 1, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, '{ts escape="sql"}Participants (Event Name){/ts}', '2', 'ParticipantEventName', 'event_id', 0, 0, 2, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, '{ts escape="sql"}Participants (Event Type){/ts}', '3', 'ParticipantEventType', 'event_id.event_type_id', 0, 0, 3, NULL, 0, 0, 1, NULL, NULL , NULL), -- visibility. (@option_group_id_vis, 'Public', 1, 'public', NULL, 0, 0, 1, NULL, 0, 0, 1, NULL, NULL , NULL), @@ -1097,7 +1097,7 @@ VALUES -- custom group objects (@option_group_id_cgeo, '{ts escape="sql"}Survey{/ts}', 'Survey', 'civicrm_survey', NULL, 0, 0, 1, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_cgeo, '{ts escape="sql"}Cases{/ts}', 'Case', 'civicrm_case', NULL, 0, 0, 2, 'CRM_Case_PseudoConstant::caseType;', 0, 0, 1, NULL, NULL, NULL); + (@option_group_id_cgeo, '{ts escape="sql"}Cases{/ts}', 'Case', 'civicrm_case', 'case_type_id', 0, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL); -- CRM-6138 {include file='languages.tpl'} diff --git a/civicrm/xml/templates/civicrm_state_province.tpl b/civicrm/xml/templates/civicrm_state_province.tpl index b4329945d6..2f344c32cf 100644 --- a/civicrm/xml/templates/civicrm_state_province.tpl +++ b/civicrm/xml/templates/civicrm_state_province.tpl @@ -4147,4 +4147,20 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1170, "DIN", "Dinagat Islands"), -- Add missing state for Colombia -(NULL, 1048, "HUI", "Huila"); +(NULL, 1048, "HUI", "Huila"), + +-- Add missing parishes for Bermuda + (NULL, 1023, 'DEV', 'Devonshire'), + (NULL, 1023, 'HAM', 'Hamilton Parish'), + (NULL, 1023, 'HA', 'City of Hamilton'), + (NULL, 1023, 'PAG', 'Paget'), + (NULL, 1023, 'PEM', 'Pembroke'), + (NULL, 1023, 'SG', 'Town of St. George'), + (NULL, 1023, 'SGE', 'Saint George\'s'), + (NULL, 1023, 'SAN', 'Sandys'), + (NULL, 1023, 'SMI', 'Smiths'), + (NULL, 1023, 'SOU', 'Southampton'), + (NULL, 1023, 'WAR', 'Warwick') + + -- end of statement: + ; diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index 71a6a2c50f..022420a70e 100644 --- a/civicrm/xml/version.xml +++ b/civicrm/xml/version.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="iso-8859-1" ?> <version> - <version_no>5.49.4</version_no> + <version_no>5.50.0</version_no> </version> -- GitLab