From ed4ac186ce9f8ebc9dd476379a5bc1d085c7f8f3 Mon Sep 17 00:00:00 2001 From: Kevin Cristiano <kcristiano@kcristiano.com> Date: Thu, 6 May 2021 09:02:32 -0400 Subject: [PATCH] civicrm release --- civicrm.php | 4 +- civicrm/CRM/ACL/BAO/ACL.php | 244 +--- civicrm/CRM/ACL/BAO/Cache.php | 15 +- civicrm/CRM/Activity/BAO/Activity.php | 10 +- civicrm/CRM/Activity/BAO/ActivityContact.php | 20 +- civicrm/CRM/Activity/DAO/Activity.php | 6 +- civicrm/CRM/Activity/Form/Search.php | 22 +- civicrm/CRM/Admin/Form/Setting.php | 1 + civicrm/CRM/Admin/Form/Setting/Component.php | 5 - .../CRM/Admin/Form/Setting/Miscellaneous.php | 6 +- civicrm/CRM/Admin/Form/Setting/Path.php | 8 +- civicrm/CRM/Admin/Form/Setting/Url.php | 2 - civicrm/CRM/Admin/Form/SettingTrait.php | 4 +- civicrm/CRM/Api4/Page/Api4Explorer.php | 11 +- civicrm/CRM/Batch/BAO/Batch.php | 7 +- civicrm/CRM/Batch/DAO/Batch.php | 7 +- civicrm/CRM/Batch/Form/Entry.php | 87 +- civicrm/CRM/Campaign/Form/Campaign.php | 4 +- civicrm/CRM/Case/BAO/Case.php | 102 +- civicrm/CRM/Case/BAO/CaseType.php | 42 +- civicrm/CRM/Case/DAO/Case.php | 3 +- civicrm/CRM/Case/DAO/CaseType.php | 7 +- civicrm/CRM/Case/Form/CustomData.php | 41 +- civicrm/CRM/Case/Info.php | 3 - civicrm/CRM/Contact/BAO/Contact/Utils.php | 6 +- civicrm/CRM/Contact/BAO/DashboardContact.php | 5 +- civicrm/CRM/Contact/BAO/Group.php | 14 + civicrm/CRM/Contact/BAO/GroupContactCache.php | 195 ++-- civicrm/CRM/Contact/BAO/Query.php | 12 +- civicrm/CRM/Contact/BAO/SavedSearch.php | 5 + civicrm/CRM/Contact/BAO/SearchCustom.php | 2 +- civicrm/CRM/Contact/DAO/Contact.php | 7 +- civicrm/CRM/Contact/DAO/Group.php | 8 +- civicrm/CRM/Contact/DAO/RelationshipCache.php | 12 +- civicrm/CRM/Contact/DAO/SavedSearch.php | 4 +- .../Search/Custom/ContributionAggregate.php | 2 + civicrm/CRM/Contact/Form/Task.php | 2 +- civicrm/CRM/Contact/Form/Task/EmailTrait.php | 23 +- civicrm/CRM/Contact/Form/Task/Useradd.php | 14 +- civicrm/CRM/Contact/Import/Form/Preview.php | 2 +- civicrm/CRM/Contact/Import/Parser/Contact.php | 2 +- civicrm/CRM/Contact/Page/DashBoard.php | 9 +- civicrm/CRM/Contact/Page/View/Summary.php | 2 +- civicrm/CRM/Contact/Task.php | 2 + civicrm/CRM/Contribute/BAO/Contribution.php | 56 +- .../CRM/Contribute/BAO/ContributionPage.php | 83 +- .../CRM/Contribute/BAO/ContributionRecur.php | 6 +- civicrm/CRM/Contribute/DAO/Contribution.php | 6 +- .../CRM/Contribute/DAO/ContributionRecur.php | 9 +- civicrm/CRM/Contribute/Export/Form/Select.php | 4 + .../CRM/Contribute/Form/AdditionalInfo.php | 16 +- civicrm/CRM/Contribute/Form/Contribution.php | 13 +- .../Contribute/Form/Contribution/Confirm.php | 6 - .../CRM/Contribute/Form/Contribution/Main.php | 2 +- .../Contribute/Form/Contribution/ThankYou.php | 2 - civicrm/CRM/Contribute/Form/Task.php | 93 +- civicrm/CRM/Contribute/Form/Task/PDF.php | 20 +- .../Contribute/Form/Task/PDFLetterCommon.php | 16 +- .../CRM/Contribute/Form/Task/TaskTrait.php | 141 +++ civicrm/CRM/Core/BAO/ActionSchedule.php | 4 +- civicrm/CRM/Core/BAO/CustomField.php | 5 + civicrm/CRM/Core/BAO/MessageTemplate.php | 9 +- civicrm/CRM/Core/BAO/Note.php | 1 + civicrm/CRM/Core/BAO/OptionValue.php | 21 +- civicrm/CRM/Core/DAO.php | 7 +- civicrm/CRM/Core/DAO/ActionSchedule.php | 3 +- civicrm/CRM/Core/DAO/Note.php | 48 +- civicrm/CRM/Core/Error.php | 2 +- civicrm/CRM/Core/Form.php | 4 +- civicrm/CRM/Core/Invoke.php | 1 + civicrm/CRM/Core/JobManager.php | 12 - civicrm/CRM/Core/Payment.php | 16 +- civicrm/CRM/Core/Payment/AuthorizeNetIPN.php | 4 +- civicrm/CRM/Core/Payment/PayPalIPN.php | 6 +- civicrm/CRM/Core/Payment/PayPalProIPN.php | 6 +- civicrm/CRM/Core/Permission.php | 143 ++- civicrm/CRM/Core/Permission/Base.php | 16 +- civicrm/CRM/Core/Permission/Drupal6.php | 2 +- civicrm/CRM/Core/Permission/Drupal8.php | 1 + civicrm/CRM/Core/Permission/WordPress.php | 6 +- civicrm/CRM/Core/Region.php | 2 + civicrm/CRM/Core/SelectValues.php | 3 + civicrm/CRM/Core/xml/Menu/Admin.xml | 4 +- civicrm/CRM/Cxn/DAO/Cxn.php | 3 +- civicrm/CRM/Dedupe/BAO/Rule.php | 7 +- civicrm/CRM/Dedupe/MergeHandler.php | 106 ++ civicrm/CRM/Dedupe/Merger.php | 184 +-- civicrm/CRM/Event/BAO/Event.php | 8 +- civicrm/CRM/Event/BAO/Participant.php | 6 +- civicrm/CRM/Export/BAO/ExportProcessor.php | 9 +- civicrm/CRM/Export/Form/Map.php | 7 +- civicrm/CRM/Extension/ClassLoader.php | 11 + civicrm/CRM/Extension/Info.php | 7 + .../Financial/BAO/EntityFinancialAccount.php | 32 + .../CRM/Financial/BAO/EntityFinancialTrxn.php | 31 + .../CRM/Financial/BAO/FinancialAccount.php | 17 +- civicrm/CRM/Financial/BAO/FinancialType.php | 1 + civicrm/CRM/Financial/BAO/Order.php | 88 +- .../Financial/DAO/EntityFinancialAccount.php | 15 +- .../CRM/Financial/DAO/EntityFinancialTrxn.php | 15 +- civicrm/CRM/Financial/Form/PaymentEdit.php | 26 +- civicrm/CRM/Financial/Form/Search.php | 2 - civicrm/CRM/Financial/Page/AJAX.php | 4 - civicrm/CRM/Grant/Form/Grant.php | 4 +- civicrm/CRM/Mailing/DAO/Mailing.php | 4 +- civicrm/CRM/Member/BAO/Membership.php | 7 +- civicrm/CRM/Member/DAO/MembershipLog.php | 3 +- civicrm/CRM/Member/Form.php | 11 +- civicrm/CRM/Member/Form/Membership.php | 486 ++++---- civicrm/CRM/Member/Form/MembershipBlock.php | 2 +- civicrm/CRM/Member/Form/MembershipRenewal.php | 4 +- civicrm/CRM/Member/Page/AJAX.php | 4 +- civicrm/CRM/Note/Form/Note.php | 1 + civicrm/CRM/PCP/Form/PCPAccount.php | 4 +- civicrm/CRM/Pledge/DAO/Pledge.php | 3 +- civicrm/CRM/Price/BAO/LineItem.php | 2 +- civicrm/CRM/Price/BAO/PriceField.php | 5 +- civicrm/CRM/Report/Form.php | 4 +- .../Form/Contribute/DeferredRevenue.php | 12 +- civicrm/CRM/Report/Form/Contribute/Detail.php | 5 +- .../Report/Form/Member/ContributionDetail.php | 4 +- civicrm/CRM/Upgrade/Form.php | 82 +- civicrm/CRM/Upgrade/Incremental/Base.php | 51 + .../Upgrade/Incremental/php/FiveFourteen.php | 24 - .../Incremental/php/FiveThirtySeven.php | 185 +++ .../Upgrade/Incremental/php/FiveThirtySix.php | 1 - .../CRM/Upgrade/Incremental/php/FiveZero.php | 9 - .../CRM/Upgrade/Incremental/php/Template.php | 7 +- .../Upgrade/Incremental/sql/5.36.0.mysql.tpl | 1 - .../Upgrade/Incremental/sql/5.36.1.mysql.tpl | 1 - .../Incremental/sql/5.37.alpha1.mysql.tpl | 19 + civicrm/CRM/Utils/Cache/Redis.php | 2 +- civicrm/CRM/Utils/EnglishNumber.php | 56 + civicrm/CRM/Utils/Hook.php | 13 +- civicrm/CRM/Utils/Money.php | 38 +- civicrm/CRM/Utils/Rule.php | 4 + civicrm/CRM/Utils/System/Base.php | 6 + civicrm/CRM/Utils/System/Drupal8.php | 10 + civicrm/CRM/Utils/System/WordPress.php | 104 +- civicrm/CRM/Utils/Token.php | 73 +- civicrm/CRM/Utils/Type.php | 26 + civicrm/Civi/API/Request.php | 4 +- civicrm/Civi/Angular/AngularLoader.php | 33 +- civicrm/Civi/Angular/Manager.php | 2 + .../Action/CiviCase/CiviCaseSaveTrait.php | 80 ++ civicrm/Civi/Api4/Action/CiviCase/Create.php | 28 + civicrm/Civi/Api4/Action/CiviCase/Save.php | 21 + civicrm/Civi/Api4/Action/CiviCase/Update.php | 28 + civicrm/Civi/Api4/Action/Entity/Get.php | 30 +- civicrm/Civi/Api4/Action/Entity/GetLinks.php | 2 +- civicrm/Civi/Api4/Action/GetActions.php | 24 +- civicrm/Civi/Api4/Action/Permission/Get.php | 12 +- .../Civi/Api4/Action/System/ResetPaths.php | 24 + civicrm/Civi/Api4/Batch.php | 30 + civicrm/Civi/Api4/CaseActivity.php | 33 + civicrm/Civi/Api4/CaseContact.php | 37 + civicrm/Civi/Api4/CaseType.php | 33 + civicrm/Civi/Api4/CiviCase.php | 69 ++ civicrm/Civi/Api4/CustomValue.php | 20 +- civicrm/Civi/Api4/EntityFinancialAccount.php | 34 + civicrm/Civi/Api4/EntityFinancialTrxn.php | 34 + civicrm/Civi/Api4/FinancialTrxn.php | 35 + civicrm/Civi/Api4/Generic/AbstractAction.php | 3 +- civicrm/Civi/Api4/Generic/AbstractEntity.php | 8 +- civicrm/Civi/Api4/Generic/BasicEntity.php | 12 +- .../Api4/Generic/BasicGetFieldsAction.php | 4 + civicrm/Civi/Api4/Generic/DAOEntity.php | 14 +- civicrm/Civi/Api4/Generic/DAOGetAction.php | 6 +- .../Api4/Generic/Traits/DAOActionTrait.php | 6 +- civicrm/Civi/Api4/MailSettings.php | 2 +- civicrm/Civi/Api4/PaymentToken.php | 30 + civicrm/Civi/Api4/Permission.php | 11 +- civicrm/Civi/Api4/Query/Api4SelectQuery.php | 193 ++- civicrm/Civi/Api4/RelationshipCache.php | 4 +- civicrm/Civi/Api4/Route.php | 15 +- .../Schema/Joinable/CustomGroupJoinable.php | 2 +- civicrm/Civi/Api4/Service/Spec/FieldSpec.php | 32 + .../Provider/CaseCreationSpecProvider.php | 71 ++ .../Spec/Provider/CaseTypeGetSpecProvider.php | 43 + .../Civi/Api4/Service/Spec/SpecFormatter.php | 3 +- .../Civi/Api4/Service/Spec/SpecGatherer.php | 4 +- civicrm/Civi/Api4/System.php | 9 + civicrm/Civi/Api4/Utils/CoreUtil.php | 31 +- civicrm/Civi/Api4/Utils/FormattingUtil.php | 17 + civicrm/Civi/Core/Container.php | 5 + civicrm/Civi/Crypto/PhpseclibCipherSuite.php | 4 +- civicrm/Civi/Token/TokenCompatSubscriber.php | 15 +- civicrm/ang/api4Explorer/Explorer.html | 16 +- civicrm/ang/api4Explorer/Explorer.js | 25 +- civicrm/ang/crmDashboard.ang.php | 2 +- .../ang/crmDashboard/FullscreenDialog.html | 4 +- civicrm/ang/exportui.ang.php | 1 + civicrm/ang/exportui/export.html | 2 +- civicrm/ang/exportui/exportui.js | 3 + civicrm/api/v3/CaseType.php | 28 +- civicrm/api/v3/Contact.php | 2 +- civicrm/api/v3/CustomValue.php | 7 +- civicrm/api/v3/Generic/Getlist.php | 4 +- civicrm/api/v3/Job.php | 32 +- civicrm/api/v3/Membership.php | 10 +- civicrm/api/v3/Payment.php | 6 - civicrm/bin/regen.sh | 2 +- ...ular-d18b8624a0f5f721da7b82365fc562dd.json | 4 +- civicrm/bower_components/angular/angular.js | 364 +++--- .../bower_components/angular/angular.min.js | 158 +-- .../angular/angular.min.js.map | 6 +- civicrm/bower_components/angular/bower.json | 2 +- civicrm/bower_components/angular/package.json | 2 +- civicrm/civicrm-version.php | 2 +- civicrm/composer.json | 5 +- civicrm/composer.lock | 38 +- civicrm/css/api4-explorer.css | 17 +- civicrm/css/civicrm.css | 33 +- .../admin/CRM/AfformAdmin/Page/Base.php | 8 +- .../Civi/AfformAdmin/AfformAdminMeta.php | 14 +- .../ang/afAdmin/afAdminList.controller.js | 7 +- .../afform/admin/ang/afAdmin/afAdminList.html | 9 +- civicrm/ext/afform/admin/ang/afGuiEditor.css | 20 +- civicrm/ext/afform/admin/ang/afGuiEditor.js | 28 +- .../afGuiEditor/afGuiEditOptions.component.js | 2 +- .../ang/afGuiEditor/afGuiEditor.component.js | 66 +- .../ang/afGuiEditor/afGuiEntity.component.js | 17 +- .../afGuiEditor/afGuiFieldValue.directive.js | 2 +- .../afGuiMenuItemBackground.component.js | 2 +- .../afGuiMenuItemBorder.component.js | 2 +- .../afGuiEditor/afGuiSaveBlock.controller.js | 2 +- .../ang/afGuiEditor/afGuiSearch.component.js | 22 +- .../admin/ang/afGuiEditor/config-form.html | 142 ++- .../elements/afGuiButton-menu.html | 2 +- .../elements/afGuiButton.component.js | 2 +- .../elements/afGuiContainer-menu.html | 2 +- .../elements/afGuiContainer.component.js | 10 +- .../afGuiEditor/elements/afGuiContainer.html | 2 +- .../afGuiEditor/elements/afGuiField-menu.html | 23 +- .../elements/afGuiField.component.js | 74 +- .../elements/afGuiMarkup-menu.html | 2 +- .../elements/afGuiMarkup.component.js | 2 +- .../elements/afGuiSearchDisplay.component.js | 3 +- .../elements/afGuiSearchDisplay.html | 12 + .../afGuiEditor/elements/afGuiText-menu.html | 2 +- .../elements/afGuiText.component.js | 2 +- .../ang/afGuiEditor/inputType/CheckBox.html | 8 +- .../admin/ang/afGuiEditor/inputType/Date.html | 9 +- .../ang/afGuiEditor/inputType/Number.html | 7 +- .../ang/afGuiEditor/inputType/Radio.html | 2 +- .../ang/afGuiEditor/inputType/Select.html | 22 +- .../admin/ang/afGuiEditor/inputType/Text.html | 7 +- .../afform/core/CRM/Afform/AfformScanner.php | 1 + .../core/CRM/Afform/Page/AfformBase.php | 2 +- .../Civi/Afform/AfformMetadataInjector.php | 35 +- .../afform/core/Civi/Afform/StatusChecks.php | 67 ++ .../ext/afform/core/Civi/Afform/Tokens.php | 204 ++++ .../core/Civi/Api4/Action/Afform/Get.php | 4 +- civicrm/ext/afform/core/Civi/Api4/Afform.php | 17 +- .../core/Civi/Api4/Utils/AfformSaveTrait.php | 1 - civicrm/ext/afform/core/afform.php | 179 ++- .../afform/core/ang/af/afField.component.js | 61 +- civicrm/ext/afform/core/ang/af/afField.html | 6 +- .../afform/core/ang/af/afForm.component.js | 14 +- .../core/ang/af/fields/ChainSelect.html | 2 +- .../afform/core/ang/af/fields/CheckBox.html | 4 +- .../ext/afform/core/ang/af/fields/Date.html | 7 +- .../ext/afform/core/ang/af/fields/Number.html | 7 +- .../ext/afform/core/ang/af/fields/Radio.html | 2 +- .../core/ang/af/fields/RichTextEditor.html | 2 +- .../ext/afform/core/ang/af/fields/Select.html | 6 +- .../ext/afform/core/ang/af/fields/Text.html | 7 +- civicrm/ext/afform/core/ang/afCore.css | 2 +- civicrm/ext/afform/core/api/v3/Afform.php | 123 ++ civicrm/ext/afform/core/phpunit.xml.dist | 2 +- .../afform/contactSummary/AfformBlock.tpl | 5 + .../afform/contactSummary/AfformTab.tpl | 5 + .../tests/phpunit/CRM/Afform/UtilTest.php | 2 +- .../tests/phpunit/Civi/Afform/FilterTest.php | 6 +- .../phpunit/Civi/Afform/FormDataModelTest.php | 2 +- .../tests/phpunit/Civi/Afform/SymbolsTest.php | 2 +- .../afform/core/tests/phpunit/bootstrap.php | 1 - civicrm/ext/afform/docs/crud.md | 1 + .../ext/afform/html/ang/afHtmlEditor.aff.html | 23 + .../afform/mock/ang/mockPublicForm.aff.json | 3 +- .../afform/mock/ang/mockPublicForm.test.php | 113 ++ .../phpunit/api/v4/AfformRoutingTest.php | 8 +- .../mock/tests/phpunit/api/v4/AfformTest.php | 10 +- .../tests/phpunit/api/v4/AfformTestCase.php | 10 +- .../tests/phpunit/api/v4/AfformUsageTest.php | 10 +- .../afform/mock/tests/phpunit/bootstrap.php | 1 - .../tests/phpunit/Civi/Authx/AllFlowsTest.php | 34 +- civicrm/ext/authx/tests/phpunit/bootstrap.php | 1 - .../tests/phpunit/bootstrap.php | 1 - .../phpunit/CRM/Core/Payment/EwayTest.php | 18 +- .../ewaysingle/tests/phpunit/bootstrap.php | 1 - civicrm/ext/financialacls/financialacls.php | 35 +- .../Financialacls/BuildAmountHookTest.php | 2 +- .../Civi/Financialacls/FinancialTypeTest.php | 30 + .../Civi/Financialacls/LineItemTest.php | 2 +- .../Financialacls/MembershipTypesTest.php | 2 +- .../Civi/Financialacls/OptionsTest.php | 2 +- .../financialacls/tests/phpunit/bootstrap.php | 1 - .../ext/flexmailer/src/Listener/Abdicator.php | 7 +- .../ClickTracker/HtmlClickTrackerTest.php | 4 +- .../ClickTracker/TextClickTrackerTest.php | 4 +- .../Civi/FlexMailer/ClickTrackerTest.php | 22 +- .../FlexMailer/ConcurrentDeliveryTest.php | 8 +- .../Civi/FlexMailer/FlexMailerSystemTest.php | 14 +- .../FlexMailer/Listener/SimpleFilterTest.php | 6 +- .../Civi/FlexMailer/MailingPreviewTest.php | 10 +- .../phpunit/Civi/FlexMailer/ValidatorTest.php | 4 +- .../flexmailer/tests/phpunit/bootstrap.php | 1 - .../tests/phpunit/CRM/OAuth/MailSetupTest.php | 6 +- .../phpunit/api/v4/OAuthClientGrantTest.php | 6 +- .../tests/phpunit/api/v4/OAuthClientTest.php | 8 +- .../phpunit/api/v4/OAuthProviderTest.php | 6 +- .../phpunit/api/v4/OAuthSysTokenTest.php | 10 +- .../oauth-client/tests/phpunit/bootstrap.php | 1 - .../recaptcha}/CRM/Utils/ReCAPTCHA.php | 7 +- civicrm/ext/recaptcha/LICENSE.txt | 667 +++++++++++ civicrm/ext/recaptcha/README.md | 5 + civicrm/ext/recaptcha/info.xml | 30 + .../recaptcha/lib}/recaptcha/LICENSE | 0 .../recaptcha/lib/recaptcha/recaptchalib.php | 246 ++++ civicrm/ext/recaptcha/recaptcha.civix.php | 477 ++++++++ civicrm/ext/recaptcha/recaptcha.php | 164 +++ .../recaptcha/settings/recaptcha.setting.php | 110 ++ .../templates/CRM/common/ReCAPTCHA.tpl | 0 civicrm/ext/recaptcha/xml/Menu/recaptcha.xml | 9 + civicrm/ext/search/CRM/Search/Page/Admin.php | 13 +- civicrm/ext/search/CRM/Search/Page/Search.php | 8 +- civicrm/ext/search/CRM/Search/Upgrader.php | 49 + .../Action/SearchDisplay/GetSearchTasks.php | 95 ++ .../Civi/Api4/Action/SearchDisplay/Run.php | 103 +- .../ext/search/Civi/Api4/SearchDisplay.php | 15 + civicrm/ext/search/Civi/Search/Actions.php | 64 +- civicrm/ext/search/Civi/Search/Admin.php | 22 +- .../crmSearchActions/SaveSmartGroup.ctrl.js | 74 -- .../crmSearchActionDelete.ctrl.js | 2 +- .../crmSearchActionUpdate.ctrl.js | 3 +- .../crmSearchActions.component.js | 15 +- .../crmSearchActions/crmSearchActions.html | 9 +- .../crmSearchBatchRunner.component.js | 2 +- .../crmSearchInput.component.js | 2 +- .../crmSearchInputVal.component.js | 2 +- .../crmSearchInput/entityRef.html | 2 +- .../saveSmartGroup.directive.js | 40 - .../ang/crmSearchActions/saveSmartGroup.html | 33 - .../ext/search/ang/crmSearchAdmin.module.js | 6 +- .../ang/crmSearchAdmin/compose/criteria.html | 12 +- .../crmSearchAdmin.component.js | 42 +- .../crmSearchAdminDisplay.component.js | 68 +- .../crmSearchAdminLinkGroup.component.js | 27 +- .../crmSearchAdminLinkGroup.html | 42 +- .../crmSearchAdminLinkSelect.component.js | 44 +- .../crmSearchAdminLinkSelect.html | 34 +- .../crmSearchAdminTokenSelect.component.js | 2 +- .../crmSearchClause.component.js | 2 +- .../crmSearchFunction.component.js | 2 +- .../displays/colType/field.html | 30 +- .../searchAdminDisplayList.component.js | 2 +- .../displays/searchAdminDisplayList.html | 4 +- .../searchAdminDisplayTable.component.js | 2 +- .../displays/searchAdminDisplayTable.html | 4 +- .../ext/search/ang/crmSearchAdmin/group.html | 32 +- .../crmSearchAdmin/searchList.controller.js | 3 +- .../search/ang/crmSearchAdmin/searchList.html | 12 +- .../ext/search/ang/crmSearchDisplay.module.js | 16 +- .../ang/crmSearchDisplay/colType/buttons.html | 2 +- .../ang/crmSearchDisplay/colType/field.html | 3 +- .../ang/crmSearchDisplay/colType/links.html | 2 +- .../ang/crmSearchDisplay/colType/menu.html | 2 +- .../crmSearchDisplayEditable.component.js | 83 ++ .../crmSearchDisplayEditable.html | 9 + .../crmSearchDisplayList.component.js | 26 +- .../crmSearchDisplayList.html | 8 +- .../crmSearchDisplayListItems.html | 2 +- .../crmSearchDisplayTable.component.js | 36 +- .../crmSearchDisplayTable.html | 54 +- civicrm/ext/search/css/crmSearchActions.css | 19 + civicrm/ext/search/css/crmSearchAdmin.css | 12 +- civicrm/ext/search/phpunit.xml.dist | 18 + civicrm/ext/search/sql/auto_install.sql | 4 +- .../api/v4/SearchDisplay/SearchRunTest.php | 217 ++++ .../ext/search/tests/phpunit/bootstrap.php | 63 + .../sequentialcreditnotes/phpunit.xml.dist | 2 +- .../phpunit/SequentialcreditnotesTest.php | 2 +- .../tests/phpunit/bootstrap.php | 13 +- civicrm/js/Common.js | 18 +- civicrm/js/crm-angularjs-loader.js | 11 + civicrm/js/crm.menubar.js | 28 +- civicrm/packages/DB/DataObject.php | 6 +- civicrm/packages/IDS/Monitor.php | 12 +- civicrm/packages/recaptcha/recaptchalib.php | 255 ---- civicrm/release-notes.md | 11 + civicrm/release-notes/5.36.0.md | 2 - civicrm/release-notes/5.37.0.md | 1037 +++++++++++++++++ civicrm/settings/Core.setting.php | 91 +- civicrm/sql/civicrm.mysql | 18 +- civicrm/sql/civicrm_data.mysql | 12 +- civicrm/sql/civicrm_generated.mysql | 10 +- civicrm/sql/civicrm_navigation.mysql | 2 +- .../templates/CRM/Activity/Calendar/ICal.tpl | 4 +- .../CRM/Admin/Form/Setting/Localization.tpl | 7 +- .../CRM/Admin/Form/Setting/Miscellaneous.tpl | 33 - .../CRM/Admin/Form/Setting/SettingField.tpl | 18 + .../CRM/Admin/Form/Setting/SettingForm.tpl | 19 +- .../CRM/Admin/Page/ConfigTaskList.tpl | 4 +- civicrm/templates/CRM/Admin/Page/Setting.tpl | 2 +- .../Contact/Form/Task/Map/OpenStreetMaps.tpl | 11 +- .../Contact/Page/View/CustomDataFieldView.tpl | 2 - .../templates/CRM/Contact/Page/View/Note.tpl | 13 +- .../CRM/Contact/Page/View/Summary-tab.tpl | 156 +++ .../CRM/Contact/Page/View/Summary.tpl | 162 +-- .../CRM/Contribute/Form/Contribution.tpl | 2 +- .../CRM/Contribute/Form/Contribution/Main.tpl | 2 +- .../CRM/Contribute/Form/ManagePremiums.tpl | 6 +- civicrm/templates/CRM/Core/Calendar/ICal.tpl | 10 +- civicrm/templates/CRM/Core/Form/Field.tpl | 2 +- .../templates/CRM/Event/Form/EventFees.tpl | 2 +- .../CRM/Event/Form/ManageEvent/Fee.tpl | 4 +- civicrm/templates/CRM/Export/Form/Map.tpl | 4 +- .../templates/CRM/Financial/Form/Export.tpl | 3 +- .../templates/CRM/Financial/Form/Search.tpl | 21 +- .../templates/CRM/Member/Form/Membership.tpl | 3 +- civicrm/templates/CRM/Pledge/Form/Pledge.tpl | 2 +- civicrm/templates/CRM/UF/Form/Group.hlp | 4 +- .../templates/CRM/common/SocialNetwork.tpl | 12 +- civicrm/templates/CRM/common/TabHeader.tpl | 2 +- civicrm/vendor/autoload.php | 2 +- civicrm/vendor/brick/math/.github/FUNDING.yml | 1 - civicrm/vendor/brick/math/CHANGELOG.md | 403 +++++++ civicrm/vendor/brick/math/SECURITY.md | 3 +- civicrm/vendor/brick/math/composer.json | 6 +- civicrm/vendor/brick/math/psalm-baseline.xml | 40 - civicrm/vendor/brick/math/psalm.xml | 56 - civicrm/vendor/brick/math/random-tests.php | 194 +++ civicrm/vendor/brick/math/src/BigDecimal.php | 24 +- civicrm/vendor/brick/math/src/BigInteger.php | 275 ++++- civicrm/vendor/brick/math/src/BigNumber.php | 108 +- civicrm/vendor/brick/math/src/BigRational.php | 16 +- .../src/Exception/DivisionByZeroException.php | 10 + .../math/src/Exception/MathException.php | 2 +- .../brick/math/src/Internal/Calculator.php | 83 +- .../Internal/Calculator/BcMathCalculator.php | 28 +- .../src/Internal/Calculator/GmpCalculator.php | 16 +- .../Internal/Calculator/NativeCalculator.php | 30 +- .../brick/money/.github/workflows/ci.yml | 76 ++ civicrm/vendor/brick/money/CHANGELOG.md | 142 +++ civicrm/vendor/brick/money/composer.json | 14 +- civicrm/vendor/brick/money/psalm.xml | 15 + .../vendor/brick/money/src/AbstractMoney.php | 2 + civicrm/vendor/brick/money/src/Currency.php | 2 +- .../BaseCurrencyProvider.php | 5 +- .../ExchangeRateProvider/CachedProvider.php | 3 + .../ConfigurableProvider.php | 2 + .../src/ExchangeRateProvider/PDOProvider.php | 4 + .../PDOProviderConfiguration.php | 2 + .../brick/money/src/ISOCurrencyProvider.php | 22 +- civicrm/vendor/brick/money/src/Money.php | 11 +- civicrm/vendor/brick/money/src/MoneyBag.php | 9 +- .../vendor/brick/money/src/MoneyContainer.php | 2 + civicrm/vendor/composer/autoload_real.php | 14 +- civicrm/vendor/composer/autoload_static.php | 12 +- civicrm/vendor/composer/installed.json | 57 +- civicrm/vendor/phpseclib/phpseclib/README.md | 20 +- .../vendor/phpseclib/phpseclib/composer.json | 2 +- .../phpseclib/phpseclib/Crypt/Base.php | 69 +- .../phpseclib/phpseclib/Crypt/Hash.php | 1 - .../phpseclib/phpseclib/Crypt/RSA.php | 90 +- .../phpseclib/phpseclib/File/ANSI.php | 48 +- .../phpseclib/phpseclib/File/ASN1.php | 73 +- .../phpseclib/phpseclib/File/X509.php | 39 +- .../phpseclib/phpseclib/Math/BigInteger.php | 28 +- .../phpseclib/phpseclib/Net/SFTP.php | 50 +- .../phpseclib/phpseclib/Net/SFTP/Stream.php | 11 +- .../phpseclib/phpseclib/Net/SSH1.php | 5 +- .../phpseclib/phpseclib/Net/SSH2.php | 249 ++-- civicrm/xml/schema/Activity/Activity.xml | 4 + civicrm/xml/schema/Batch/Batch.xml | 3 +- civicrm/xml/schema/Case/Case.xml | 1 + civicrm/xml/schema/Case/CaseType.xml | 3 +- civicrm/xml/schema/Contact/Contact.xml | 5 + civicrm/xml/schema/Contact/Group.xml | 8 +- .../xml/schema/Contact/RelationshipCache.xml | 10 + civicrm/xml/schema/Contact/SavedSearch.xml | 2 + .../xml/schema/Contribute/Contribution.xml | 6 +- .../schema/Contribute/ContributionRecur.xml | 7 +- civicrm/xml/schema/Core/ActionSchedule.xml | 1 + civicrm/xml/schema/Core/Note.xml | 21 + civicrm/xml/schema/Cxn/Cxn.xml | 3 +- .../Financial/EntityFinancialAccount.xml | 3 + .../schema/Financial/EntityFinancialTrxn.xml | 3 + civicrm/xml/schema/Mailing/Mailing.xml | 2 + civicrm/xml/schema/Member/MembershipLog.xml | 1 + civicrm/xml/schema/Pledge/Pledge.xml | 1 + civicrm/xml/templates/civicrm_data.tpl | 6 +- civicrm/xml/templates/civicrm_navigation.tpl | 2 +- .../xml/templates/civicrm_state_province.tpl | 2 +- civicrm/xml/version.xml | 2 +- .../civicrm.metabox.contact.add.php | 10 + .../admin-pages/civicrm.page.integration.php | 34 +- includes/admin-pages/civicrm.page.options.php | 34 +- includes/civicrm.shortcodes.php | 83 +- includes/civicrm.users.php | 27 + tests/phpunit/CiviWP/HookTest.php | 2 +- tests/phpunit/CiviWP/PhpVersionTest.php | 2 +- tests/phpunit/bootstrap.php | 9 +- 504 files changed, 11397 insertions(+), 3845 deletions(-) create mode 100644 civicrm/CRM/Contribute/Form/Task/TaskTrait.php create mode 100644 civicrm/CRM/Financial/BAO/EntityFinancialAccount.php create mode 100644 civicrm/CRM/Financial/BAO/EntityFinancialTrxn.php create mode 100644 civicrm/CRM/Upgrade/Incremental/php/FiveThirtySeven.php delete mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.36.0.mysql.tpl delete mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.36.1.mysql.tpl create mode 100644 civicrm/CRM/Upgrade/Incremental/sql/5.37.alpha1.mysql.tpl create mode 100644 civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php create mode 100644 civicrm/Civi/Api4/Action/CiviCase/Create.php create mode 100644 civicrm/Civi/Api4/Action/CiviCase/Save.php create mode 100644 civicrm/Civi/Api4/Action/CiviCase/Update.php create mode 100644 civicrm/Civi/Api4/Action/System/ResetPaths.php create mode 100644 civicrm/Civi/Api4/Batch.php create mode 100644 civicrm/Civi/Api4/CaseActivity.php create mode 100644 civicrm/Civi/Api4/CaseContact.php create mode 100644 civicrm/Civi/Api4/CaseType.php create mode 100644 civicrm/Civi/Api4/CiviCase.php create mode 100644 civicrm/Civi/Api4/EntityFinancialAccount.php create mode 100644 civicrm/Civi/Api4/EntityFinancialTrxn.php create mode 100644 civicrm/Civi/Api4/FinancialTrxn.php create mode 100644 civicrm/Civi/Api4/PaymentToken.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.php create mode 100644 civicrm/Civi/Api4/Service/Spec/Provider/CaseTypeGetSpecProvider.php create mode 100644 civicrm/ext/afform/core/Civi/Afform/StatusChecks.php create mode 100644 civicrm/ext/afform/core/Civi/Afform/Tokens.php create mode 100644 civicrm/ext/afform/core/api/v3/Afform.php create mode 100644 civicrm/ext/afform/core/templates/afform/contactSummary/AfformBlock.tpl create mode 100644 civicrm/ext/afform/core/templates/afform/contactSummary/AfformTab.tpl rename civicrm/{ => ext/recaptcha}/CRM/Utils/ReCAPTCHA.php (91%) create mode 100644 civicrm/ext/recaptcha/LICENSE.txt create mode 100644 civicrm/ext/recaptcha/README.md create mode 100644 civicrm/ext/recaptcha/info.xml rename civicrm/{packages => ext/recaptcha/lib}/recaptcha/LICENSE (100%) create mode 100644 civicrm/ext/recaptcha/lib/recaptcha/recaptchalib.php create mode 100644 civicrm/ext/recaptcha/recaptcha.civix.php create mode 100644 civicrm/ext/recaptcha/recaptcha.php create mode 100644 civicrm/ext/recaptcha/settings/recaptcha.setting.php rename civicrm/{ => ext/recaptcha}/templates/CRM/common/ReCAPTCHA.tpl (100%) create mode 100644 civicrm/ext/recaptcha/xml/Menu/recaptcha.xml create mode 100644 civicrm/ext/search/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php delete mode 100644 civicrm/ext/search/ang/crmSearchActions/SaveSmartGroup.ctrl.js delete mode 100644 civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.directive.js delete mode 100644 civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.html create mode 100644 civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js create mode 100644 civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.html create mode 100644 civicrm/ext/search/phpunit.xml.dist create mode 100644 civicrm/ext/search/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php create mode 100644 civicrm/ext/search/tests/phpunit/bootstrap.php create mode 100644 civicrm/js/crm-angularjs-loader.js delete mode 100644 civicrm/packages/recaptcha/recaptchalib.php create mode 100644 civicrm/release-notes/5.37.0.md create mode 100644 civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl create mode 100644 civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl delete mode 100644 civicrm/vendor/brick/math/.github/FUNDING.yml create mode 100644 civicrm/vendor/brick/math/CHANGELOG.md delete mode 100644 civicrm/vendor/brick/math/psalm-baseline.xml delete mode 100644 civicrm/vendor/brick/math/psalm.xml create mode 100644 civicrm/vendor/brick/math/random-tests.php create mode 100644 civicrm/vendor/brick/money/.github/workflows/ci.yml create mode 100644 civicrm/vendor/brick/money/CHANGELOG.md create mode 100644 civicrm/vendor/brick/money/psalm.xml diff --git a/civicrm.php b/civicrm.php index 7c9a2a8fc7..bbf025d512 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,7 +2,7 @@ /** * Plugin Name: CiviCRM * Description: CiviCRM - Growing and Sustaining Relationships - * Version: 5.36.1 + * Version: 5.37.0 * Requires at least: 4.9 * Requires PHP: 7.2 * Author: CiviCRM LLC @@ -54,7 +54,7 @@ if (!defined('ABSPATH')) { } // Set version here: when it changes, will force Javascript & CSS to reload. -define('CIVICRM_PLUGIN_VERSION', '5.36.1'); +define('CIVICRM_PLUGIN_VERSION', '5.37.0'); // Store reference to this file. if (!defined('CIVICRM_PLUGIN_FILE')) { diff --git a/civicrm/CRM/ACL/BAO/ACL.php b/civicrm/CRM/ACL/BAO/ACL.php index f1f8cb0df8..aecd6a40cf 100644 --- a/civicrm/CRM/ACL/BAO/ACL.php +++ b/civicrm/CRM/ACL/BAO/ACL.php @@ -19,175 +19,21 @@ * Access Control List */ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL { - /** - * @var string - */ - public static $_entityTable = NULL; - public static $_objectTable = NULL; - public static $_operation = NULL; - - public static $_fieldKeys = NULL; /** * Available operations for pseudoconstant. * * @return array */ - public static function operation() { - if (!self::$_operation) { - self::$_operation = [ - 'View' => ts('View'), - 'Edit' => ts('Edit'), - 'Create' => ts('Create'), - 'Delete' => ts('Delete'), - 'Search' => ts('Search'), - 'All' => ts('All'), - ]; - } - return self::$_operation; - } - - /** - * Construct an associative array of an ACL rule's properties - * - * @param string $format - * Sprintf format for array. - * @param bool $hideEmpty - * Only return elements that have a value set. - * - * @return array - * Assoc. array of the ACL rule's properties - */ - public function toArray($format = '%s', $hideEmpty = FALSE) { - $result = []; - - if (!self::$_fieldKeys) { - $fields = CRM_ACL_DAO_ACL::fields(); - self::$_fieldKeys = array_keys($fields); - } - - foreach (self::$_fieldKeys as $field) { - $result[$field] = $this->$field; - } - return $result; - } - - /** - * Retrieve ACLs for a contact or group. Note that including a contact id - * without a group id will return those ACL rules which are granted - * directly to the contact, but not those granted to the contact through - * any/all of his group memberships. - * - * @param int $contact_id - * ID of a contact to search for. - * - * @return array - * Array of assoc. arrays of ACL rules - * - * @throws \CRM_Core_Exception - */ - protected static function getACLs(int $contact_id) { - $results = []; - - $rule = new CRM_ACL_BAO_ACL(); - - $contact = CRM_Contact_BAO_Contact::getTableName(); - - $query = " SELECT acl.* - FROM civicrm_acl acl - WHERE acl.entity_table = '$contact' - AND acl.entity_id = $contact_id"; - - $rule->query($query); - - while ($rule->fetch()) { - $results[$rule->id] = $rule->toArray(); - } - - $results += self::getACLRoles($contact_id); - - return $results; - } - - /** - * Get all of the ACLs through ACL groups. - * - * @param int $contact_id - * ID of a contact to search for. - * - * @return array - * Array of assoc. arrays of ACL rules - * - * @throws \CRM_Core_Exception - */ - protected static function getACLRoles($contact_id = NULL) { - $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); - - $rule = new CRM_ACL_BAO_ACL(); - - $contact = CRM_Contact_BAO_Contact::getTableName(); - - $query = 'SELECT acl.* FROM civicrm_acl acl'; - $where = ['acl.entity_table = "civicrm_acl_role" AND acl.entity_id IN (' . implode(',', array_keys(CRM_Core_OptionGroup::values('acl_role'))) . ')']; - - if (!empty($contact_id)) { - $where[] = " acl.entity_table = '$contact' AND acl.is_active = 1 AND acl.entity_id = $contact_id"; - } - - $results = []; - - $rule->query($query . ' WHERE ' . implode(' AND ', $where)); - - while ($rule->fetch()) { - $results[$rule->id] = $rule->toArray(); - } - - return $results; - } - - /** - * Get all ACLs granted to a contact through all group memberships. - * - * @param int $contact_id - * The contact's ID. - * @param bool $aclRoles - * Include ACL Roles?. - * - * @return array - * Assoc array of ACL rules - * @throws \CRM_Core_Exception - */ - protected static function getGroupACLs($contact_id, $aclRoles = FALSE) { - $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); - - $rule = new CRM_ACL_BAO_ACL(); - - $c2g = CRM_Contact_BAO_GroupContact::getTableName(); - $group = CRM_Contact_BAO_Group::getTableName(); - $results = []; - - if ($contact_id) { - $query = " -SELECT acl.* - FROM civicrm_acl acl - INNER JOIN $c2g group_contact - ON acl.entity_id = group_contact.group_id - WHERE acl.entity_table = '$group' - AND group_contact.contact_id = $contact_id - AND group_contact.status = 'Added'"; - - $rule->query($query); - - while ($rule->fetch()) { - $results[$rule->id] = $rule->toArray(); - } - } - - if ($aclRoles) { - $results += self::getGroupACLRoles($contact_id); - } - - return $results; + public static function operation(): array { + return [ + 'View' => ts('View'), + 'Edit' => ts('Edit'), + 'Create' => ts('Create'), + 'Delete' => ts('Delete'), + 'Search' => ts('Search'), + 'All' => ts('All'), + ]; } /** @@ -201,8 +47,7 @@ SELECT acl.* * Array of assoc. arrays of ACL rules * @throws \CRM_Core_Exception */ - protected static function getGroupACLRoles($contact_id) { - $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); + protected static function getGroupACLRoles(int $contact_id) { $query = " SELECT acl.* FROM civicrm_acl acl @@ -232,33 +77,13 @@ SELECT acl.* $results[$rule->id] = $rule->toArray(); } - // also get all acls for "Any Role" case - // and authenticated User Role if present - $roles = "0"; - $session = CRM_Core_Session::singleton(); - if ($session->get('ufID') > 0) { - $roles .= ",2"; - } - - $query = " -SELECT acl.* - FROM civicrm_acl acl - WHERE acl.entity_id IN ( $roles ) - AND acl.entity_table = 'civicrm_acl_role' -"; - - $rule = CRM_Core_DAO::executeQuery($query); - while ($rule->fetch()) { - $results[$rule->id] = $rule->toArray(); - } - return $results; } /** * Get all ACLs owned by a given contact, including domain and group-level. * - * @param int $contact_id + * @param int|null $contact_id * The contact ID. * * @return array @@ -266,17 +91,56 @@ SELECT acl.* * * @throws \CRM_Core_Exception */ - public static function getAllByContact($contact_id) { + public static function getAllByContact(?int $contact_id): array { $result = []; /* First, the contact-specific ACLs, including ACL Roles */ if ($contact_id) { - $result += self::getACLs((int) $contact_id); + $query = " SELECT acl.* + FROM civicrm_acl acl + WHERE acl.entity_table = 'civicrm_contact' + AND acl.entity_id = $contact_id"; + + $rule = CRM_Core_DAO::executeQuery($query); + + while ($rule->fetch()) { + $result[$rule->id] = $rule->toArray(); + } + $query = " +SELECT acl.* + FROM civicrm_acl acl + INNER JOIN civicrm_group_contact group_contact + ON acl.entity_id = group_contact.group_id + WHERE acl.entity_table = 'civicrm_group' + AND group_contact.contact_id = $contact_id + AND group_contact.status = 'Added'"; + + $rule = CRM_Core_DAO::executeQuery($query); + + while ($rule->fetch()) { + $result[$rule->id] = $rule->toArray(); + } + $result += self::getGroupACLRoles($contact_id); + } + // also get all acls for "Any Role" case + // and authenticated User Role if present + $roles = '0'; + $session = CRM_Core_Session::singleton(); + if ($session->get('ufID') > 0) { + $roles .= ',2'; } - /* Then, all ACLs granted through group membership */ - $result += self::getGroupACLs($contact_id, TRUE); + $query = " +SELECT acl.* + FROM civicrm_acl acl + WHERE acl.entity_id IN ( $roles ) + AND acl.entity_table = 'civicrm_acl_role' +"; + $rule = CRM_Core_DAO::executeQuery($query); + while ($rule->fetch()) { + $result[$rule->id] = $rule->toArray(); + } return $result; } diff --git a/civicrm/CRM/ACL/BAO/Cache.php b/civicrm/CRM/ACL/BAO/Cache.php index 0daeedffd9..af12925101 100644 --- a/civicrm/CRM/ACL/BAO/Cache.php +++ b/civicrm/CRM/ACL/BAO/Cache.php @@ -115,10 +115,23 @@ WHERE contact_id = %1 CRM_Core_DAO::executeQuery($query, $params); } + /** + * Do an opportunistic cache refresh if the site is configured for these. + * + * Sites that use acls and do not run the acl cache clearing cron job should + * refresh the caches on demand. The user session will be forced to wait + * and this is a common source of deadlocks, so it is less ideal. + */ + public static function opportunisticCacheFlush(): void { + if (Civi::settings()->get('acl_cache_refresh_mode') === 'opportunistic') { + self::resetCache(); + } + } + /** * Deletes all the cache entries. */ - public static function resetCache() { + public static function resetCache(): void { if (!CRM_Core_Config::isPermitCacheFlushMode()) { return; } diff --git a/civicrm/CRM/Activity/BAO/Activity.php b/civicrm/CRM/Activity/BAO/Activity.php index 7cdca184da..829c2e870a 100644 --- a/civicrm/CRM/Activity/BAO/Activity.php +++ b/civicrm/CRM/Activity/BAO/Activity.php @@ -1017,7 +1017,9 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { * @param int $caseId * * @return array - * ( sent, activityId) if any email is sent and activityId + * bool $sent FIXME: this only indicates the status of the last email sent. + * array $activityIds The activity ids created, one per "To" recipient. + * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ @@ -1116,6 +1118,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { $sent = $notSent = []; $attachmentFileIds = []; + $activityIds = []; $firstActivityCreated = FALSE; foreach ($contactDetails as $values) { $contactId = $values['contact_id']; @@ -1173,11 +1176,12 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { // To minimize storage requirements, only one copy of any file attachments uploaded to CiviCRM is kept, // even when multiple contacts will receive separate emails from CiviCRM. if (!empty($attachmentFileIds)) { - $attachments = array_merge_recursive($attachments, $attachmentFileIds); + $attachments = array_replace_recursive($attachments, $attachmentFileIds); } // Create email activity. $activityID = self::createEmailActivity($userID, $tokenSubject, $tokenHtml, $tokenText, $additionalDetails, $campaignId, $attachments, $caseId); + $activityIds[] = $activityID; if ($firstActivityCreated == FALSE && !empty($attachments)) { $attachmentFileIds = self::getAttachmentFileIds($activityID, $attachments); @@ -1203,7 +1207,7 @@ class CRM_Activity_BAO_Activity extends CRM_Activity_DAO_Activity { } } - return [$sent, $activityID]; + return [$sent, $activityIds]; } /** diff --git a/civicrm/CRM/Activity/BAO/ActivityContact.php b/civicrm/CRM/Activity/BAO/ActivityContact.php index 4ac6652f7c..b68260e1be 100644 --- a/civicrm/CRM/Activity/BAO/ActivityContact.php +++ b/civicrm/CRM/Activity/BAO/ActivityContact.php @@ -20,33 +20,29 @@ */ class CRM_Activity_BAO_ActivityContact extends CRM_Activity_DAO_ActivityContact { - /** - * Class constructor. - */ - public function __construct() { - parent::__construct(); - } - /** * Function to add activity contact. * * @param array $params * The values for this table: activity id, contact id, record type. * - * @return object + * @return CRM_Activity_DAO_ActivityContact * activity_contact object + * + * @throws \CRM_Core_Exception + * @throws \PEAR_Exception */ - public static function create($params) { - $activityContact = new CRM_Activity_DAO_ActivityContact(); - $activityContact->copyValues($params); + public static function create(array $params): CRM_Activity_DAO_ActivityContact { try { - return $activityContact->save(); + return self::writeRecord($params); } catch (PEAR_Exception $e) { // This check used to be done first, creating an extra query before each insert. // However, in none of the core tests was this ever called with values that already // existed, meaning that this line would never or almost never be hit. // hence it's better to save the select query here. + $activityContact = new CRM_Activity_DAO_ActivityContact(); + $activityContact->copyValues($params); if ($activityContact->find(TRUE)) { return $activityContact; } diff --git a/civicrm/CRM/Activity/DAO/Activity.php b/civicrm/CRM/Activity/DAO/Activity.php index b2ba8e150f..0383dd657d 100644 --- a/civicrm/CRM/Activity/DAO/Activity.php +++ b/civicrm/CRM/Activity/DAO/Activity.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Activity/Activity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:c03cd9a4a9a2e78a7179c6979a9e21ef) + * (GenCodeChecksum:97cc493950f4cc2a6d8858e77f144d8f) */ /** @@ -309,6 +309,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'entity' => 'Activity', 'bao' => 'CRM_Activity_BAO_Activity', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '2.0', ], 'activity_type_id' => [ @@ -524,6 +525,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'html' => [ 'label' => ts("Parent Activity"), ], + 'readonly' => TRUE, 'add' => '1.1', ], 'activity_is_test' => [ @@ -622,6 +624,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'html' => [ 'label' => ts("Original Activity"), ], + 'readonly' => TRUE, 'add' => '2.2', ], 'activity_result' => [ @@ -760,6 +763,7 @@ class CRM_Activity_DAO_Activity extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified Date"), ], + 'readonly' => TRUE, 'add' => '4.7', ], ]; diff --git a/civicrm/CRM/Activity/Form/Search.php b/civicrm/CRM/Activity/Form/Search.php index 3c2b792f42..6b3e467266 100644 --- a/civicrm/CRM/Activity/Form/Search.php +++ b/civicrm/CRM/Activity/Form/Search.php @@ -62,7 +62,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { /** * @return string */ - public function getDefaultEntity() { + public function getDefaultEntity(): string { return 'Activity'; } @@ -72,7 +72,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public function preProcess() { + public function preProcess(): void { $this->set('searchFormName', 'Search'); // set the button names @@ -83,10 +83,8 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { parent::preProcess(); - if (empty($this->_formValues)) { - if (isset($this->_ssID)) { - $this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID); - } + if (empty($this->_formValues) && isset($this->_ssID)) { + $this->_formValues = CRM_Contact_BAO_SavedSearch::getFormValues($this->_ssID); } $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues); @@ -98,7 +96,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { $this->_context ); $prefix = NULL; - if ($this->_context == 'user') { + if ($this->_context === 'user') { $prefix = $this->_prefix; } @@ -125,7 +123,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public function buildQuickForm() { + public function buildQuickForm(): void { parent::buildQuickForm(); $this->addSortNameField(); @@ -155,9 +153,9 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { * The processing consists of using a Selector / Controller framework for getting the * search results. * - * @throws \CRM_Core_Exception + * @throws \CRM_Core_Exception|\CiviCRM_API3_Exception */ - public function postProcess() { + public function postProcess(): void { if ($this->_done) { return; } @@ -184,7 +182,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { // We don't show test records in summaries or dashboards if (empty($this->_formValues['activity_test']) && $this->_force) { - $this->_formValues["activity_test"] = 0; + $this->_formValues['activity_test'] = 0; } $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues); @@ -286,7 +284,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { // use getEntity Defaults $requestParams = CRM_Utils_Request::exportValues(); foreach (array_keys($requestParams) as $key) { - if (substr($key, 0, 7) != 'custom_') { + if (substr($key, 0, 7) !== 'custom_') { continue; } elseif (empty($requestParams[$key])) { diff --git a/civicrm/CRM/Admin/Form/Setting.php b/civicrm/CRM/Admin/Form/Setting.php index 41585c8213..57e2c9fff5 100644 --- a/civicrm/CRM/Admin/Form/Setting.php +++ b/civicrm/CRM/Admin/Form/Setting.php @@ -117,6 +117,7 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form { Civi::cache('session')->clear(); CRM_Utils_System::flushCache(); CRM_Core_Resources::singleton()->resetCacheCode(); + $this->rebuildMenu(); CRM_Core_Session::setStatus(" ", ts('Changes Saved'), "success"); } diff --git a/civicrm/CRM/Admin/Form/Setting/Component.php b/civicrm/CRM/Admin/Form/Setting/Component.php index cccd8e4534..070e9b3930 100644 --- a/civicrm/CRM/Admin/Form/Setting/Component.php +++ b/civicrm/CRM/Admin/Form/Setting/Component.php @@ -55,11 +55,6 @@ class CRM_Admin_Form_Setting_Component extends CRM_Admin_Form_Setting { ) { $errors['enable_components'] = ts('You need to enable CiviContribute before enabling CiviPledge.'); } - if (!empty($fields['enable_components']['CiviCase']) && - !CRM_Core_DAO::checkTriggerViewPermission(TRUE, FALSE) - ) { - $errors['enable_components'] = ts('CiviCase requires CREATE VIEW and DROP VIEW permissions for the database.'); - } } return $errors; diff --git a/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php b/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php index 6841eb6935..c1e2498251 100644 --- a/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php +++ b/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php @@ -31,10 +31,6 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting { 'recordGeneratedLetters' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'secondDegRelPermissions' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'checksum_timeout' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, - 'recaptchaOptions' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, - 'recaptchaPublicKey' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, - 'recaptchaPrivateKey' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, - 'forceRecaptcha' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'wkhtmltopdfPath' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'recentItemsMaxCount' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'recentItemsProviders' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, @@ -69,7 +65,7 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting { * Build the form object. */ public function buildQuickForm() { - CRM_Utils_System::setTitle(ts('Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)')); + CRM_Utils_System::setTitle(ts('Misc (Undelete, PDFs, Limits, Logging, etc.)')); $this->assign('validTriggerPermission', CRM_Core_DAO::checkTriggerViewPermission(FALSE)); // dev/core#1812 Assign multilingual status. diff --git a/civicrm/CRM/Admin/Form/Setting/Path.php b/civicrm/CRM/Admin/Form/Setting/Path.php index d882f37fd9..aa17363a29 100644 --- a/civicrm/CRM/Admin/Form/Setting/Path.php +++ b/civicrm/CRM/Admin/Form/Setting/Path.php @@ -31,6 +31,8 @@ class CRM_Admin_Form_Setting_Path extends CRM_Admin_Form_Setting { /** * Build the form object. + * + * @throws \CRM_Core_Exception */ public function buildQuickForm() { CRM_Utils_System::setTitle(ts('Settings - Upload Directories')); @@ -56,10 +58,4 @@ class CRM_Admin_Form_Setting_Path extends CRM_Admin_Form_Setting { } - public function postProcess() { - parent::postProcess(); - - parent::rebuildMenu(); - } - } diff --git a/civicrm/CRM/Admin/Form/Setting/Url.php b/civicrm/CRM/Admin/Form/Setting/Url.php index fa854247ea..a81c1e5313 100644 --- a/civicrm/CRM/Admin/Form/Setting/Url.php +++ b/civicrm/CRM/Admin/Form/Setting/Url.php @@ -81,8 +81,6 @@ class CRM_Admin_Form_Setting_Url extends CRM_Admin_Form_Setting { $session->getStatus(TRUE); parent::postProcess(); - - parent::rebuildMenu(); } } diff --git a/civicrm/CRM/Admin/Form/SettingTrait.php b/civicrm/CRM/Admin/Form/SettingTrait.php index 61b45298b3..1dac8aadac 100644 --- a/civicrm/CRM/Admin/Form/SettingTrait.php +++ b/civicrm/CRM/Admin/Form/SettingTrait.php @@ -305,8 +305,8 @@ trait CRM_Admin_Form_SettingTrait { foreach (array_keys($this->_settings) as $setting) { $this->_defaults[$setting] = civicrm_api3('setting', 'getvalue', ['name' => $setting]); $spec = $this->getSettingsMetaData()[$setting]; - if (!empty($spec['serialize'])) { - $this->_defaults[$setting] = CRM_Core_DAO::unSerializeField($this->_defaults[$setting], $spec['serialize']); + if (!empty($spec['serialize']) && !is_array($this->_defaults[$setting])) { + $this->_defaults[$setting] = CRM_Core_DAO::unSerializeField((string) $this->_defaults[$setting], $spec['serialize']); } if ($this->getQuickFormType($spec) === 'CheckBoxes') { $this->_defaults[$setting] = array_fill_keys($this->_defaults[$setting], 1); diff --git a/civicrm/CRM/Api4/Page/Api4Explorer.php b/civicrm/CRM/Api4/Page/Api4Explorer.php index d78ef91ddc..655800bfe5 100644 --- a/civicrm/CRM/Api4/Page/Api4Explorer.php +++ b/civicrm/CRM/Api4/Page/Api4Explorer.php @@ -48,13 +48,10 @@ class CRM_Api4_Page_Api4Explorer extends CRM_Core_Page { ->addScriptFile('civicrm', 'bower_components/google-code-prettify/bin/prettify.min.js') ->addStyleFile('civicrm', 'bower_components/google-code-prettify/bin/prettify.min.css'); - $loader = new Civi\Angular\AngularLoader(); - $loader->setModules(['api4Explorer']); - $loader->setPageName('civicrm/api4'); - $loader->useApp([ - 'defaultRoute' => '/explorer', - ]); - $loader->load(); + Civi::service('angularjs.loader') + ->addModules('api4Explorer') + ->useApp(['defaultRoute' => '/explorer']); + parent::run(); } diff --git a/civicrm/CRM/Batch/BAO/Batch.php b/civicrm/CRM/Batch/BAO/Batch.php index e9fea4c3fb..c2cba49cda 100644 --- a/civicrm/CRM/Batch/BAO/Batch.php +++ b/civicrm/CRM/Batch/BAO/Batch.php @@ -40,10 +40,11 @@ class CRM_Batch_BAO_Batch extends CRM_Batch_DAO_Batch { * * @return object * $batch batch object + * @throws \Exception */ public static function create(&$params) { if (empty($params['id']) && empty($params['name'])) { - $params['name'] = CRM_Utils_String::titleToVar($params['title']); + $params['name'] = CRM_Utils_String::titleToVar($params['title'] ?? 'batch_ref_' . random_int(0, 100000)); } return self::writeRecord($params); } @@ -450,8 +451,8 @@ class CRM_Batch_BAO_Batch extends CRM_Batch_DAO_Batch { 'export' => [ 'name' => ts('Export'), 'title' => ts('Export Batch'), - 'url' => '#', - 'extra' => 'rel="export"', + 'url' => 'civicrm/financial/batch/export', + 'qs' => 'reset=1&id=%%id%%&status=1', ], 'reopen' => [ 'name' => ts('Re-open'), diff --git a/civicrm/CRM/Batch/DAO/Batch.php b/civicrm/CRM/Batch/DAO/Batch.php index 190f3d25d6..8b85c8ce3d 100644 --- a/civicrm/CRM/Batch/DAO/Batch.php +++ b/civicrm/CRM/Batch/DAO/Batch.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Batch/Batch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:21bc670b9083e60a58ccd4713958c192) + * (GenCodeChecksum:5da4d1a83e75b4ab957e1dfb8974d923) */ /** @@ -80,7 +80,7 @@ class CRM_Batch_DAO_Batch extends CRM_Core_DAO { public $modified_id; /** - * When was this item created + * When was this item modified * * @var datetime */ @@ -310,12 +310,13 @@ class CRM_Batch_DAO_Batch extends CRM_Core_DAO { 'name' => 'modified_date', 'type' => CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME, 'title' => ts('Batch Modified Date'), - 'description' => ts('When was this item created'), + 'description' => ts('When was this item modified'), 'where' => 'civicrm_batch.modified_date', 'table_name' => 'civicrm_batch', 'entity' => 'Batch', 'bao' => 'CRM_Batch_BAO_Batch', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '3.3', ], 'saved_search_id' => [ diff --git a/civicrm/CRM/Batch/Form/Entry.php b/civicrm/CRM/Batch/Form/Entry.php index fe34964442..5435ea65bd 100644 --- a/civicrm/CRM/Batch/Form/Entry.php +++ b/civicrm/CRM/Batch/Form/Entry.php @@ -830,7 +830,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { 'start_date' => $value['membership_start_date'] ?? NULL, ]; $membershipSource = $value['source'] ?? NULL; - list($membership) = CRM_Member_BAO_Membership::processMembership( + [$membership] = CRM_Member_BAO_Membership::processMembership( $value['contact_id'], $value['membership_type_id'], FALSE, //$numTerms should be default to 1. NULL, NULL, $value['custom'], 1, NULL, FALSE, @@ -860,7 +860,7 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { //process premiums if (!empty($value['product_name'])) { if ($value['product_name'][0] > 0) { - list($products, $options) = CRM_Contribute_BAO_Premium::getPremiumProductInfo(); + [$products, $options] = CRM_Contribute_BAO_Premium::getPremiumProductInfo(); $value['hidden_Premium'] = 1; $value['product_option'] = CRM_Utils_Array::value( @@ -889,20 +889,99 @@ class CRM_Batch_Form_Entry extends CRM_Core_Form { $value['from_email_address'] = $domainEmail; $value['membership_id'] = $membership->id; $value['contribution_id'] = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipPayment', $membership->id, 'contribution_id', 'membership_id'); - CRM_Member_Form_Membership::emailReceipt($this, $value, $membership); + $this->emailReceipt($this, $value, $membership); } } } return $batchTotal; } + /** + * Send email receipt. + * + * @param CRM_Core_Form $form + * Form object. + * @param array $formValues + * @param object $membership + * Object. + * + * @return bool + * true if mail was sent successfully + * @throws \CRM_Core_Exception + * + * @deprecated + * This function is shared with Batch_Entry which has limited overlap + * & needs rationalising. + * + */ + public function emailReceipt($form, &$formValues, $membership) { + // retrieve 'from email id' for acknowledgement + $receiptFrom = $formValues['from_email_address'] ?? NULL; + + // @todo figure out how much of the stuff below is genuinely shared with the batch form & a logical shared place. + if (!empty($formValues['payment_instrument_id'])) { + $paymentInstrument = CRM_Contribute_PseudoConstant::paymentInstrument(); + $formValues['paidBy'] = $paymentInstrument[$formValues['payment_instrument_id']]; + } + + $form->assign('module', 'Membership'); + $form->assign('contactID', $formValues['contact_id']); + + $form->assign('membershipID', CRM_Utils_Array::value('membership_id', $form->_params, CRM_Utils_Array::value('membership_id', $form->_defaultValues))); + + if (!empty($formValues['contribution_id'])) { + $form->assign('contributionID', $formValues['contribution_id']); + } + + if (!empty($formValues['contribution_status_id'])) { + $form->assign('contributionStatusID', $formValues['contribution_status_id']); + $form->assign('contributionStatus', CRM_Contribute_PseudoConstant::contributionStatus($formValues['contribution_status_id'], 'name')); + } + + if (!empty($formValues['is_renew'])) { + $form->assign('receiptType', 'membership renewal'); + } + else { + $form->assign('receiptType', 'membership signup'); + } + $form->assign('receive_date', CRM_Utils_Array::value('receive_date', $formValues)); + $form->assign('formValues', $formValues); + + $form->assign('mem_start_date', CRM_Utils_Date::formatDateOnlyLong($membership->start_date)); + if (!CRM_Utils_System::isNull($membership->end_date)) { + $form->assign('mem_end_date', CRM_Utils_Date::formatDateOnlyLong($membership->end_date)); + } + $form->assign('membership_name', CRM_Member_PseudoConstant::membershipType($membership->membership_type_id)); + + [$form->_contributorDisplayName, $form->_contributorEmail] + = CRM_Contact_BAO_Contact_Location::getEmailDetails($formValues['contact_id']); + $form->_receiptContactId = $formValues['contact_id']; + + CRM_Core_BAO_MessageTemplate::sendTemplate( + [ + 'groupName' => 'msg_tpl_workflow_membership', + 'valueName' => 'membership_offline_receipt', + 'contactId' => $form->_receiptContactId, + 'from' => $receiptFrom, + 'toName' => $form->_contributorDisplayName, + 'toEmail' => $form->_contributorEmail, + 'PDFFilename' => ts('receipt') . '.pdf', + 'isEmailPdf' => Civi::settings()->get('invoicing') && Civi::settings()->get('invoice_is_email_pdf'), + 'contributionId' => $formValues['contribution_id'], + 'isTest' => (bool) ($form->_action & CRM_Core_Action::PREVIEW), + ] + ); + + return TRUE; + } + /** * Update contact information. * * @param array $value * Associated array of submitted values. */ - private function updateContactInfo(&$value) { + private function updateContactInfo(array &$value) { $value['preserveDBName'] = $this->_preserveDefault; //parse street address, CRM-7768 diff --git a/civicrm/CRM/Campaign/Form/Campaign.php b/civicrm/CRM/Campaign/Form/Campaign.php index b47cee77e7..e112636b43 100644 --- a/civicrm/CRM/Campaign/Form/Campaign.php +++ b/civicrm/CRM/Campaign/Form/Campaign.php @@ -188,10 +188,10 @@ class CRM_Campaign_Form_Campaign extends CRM_Core_Form { $this->add('datepicker', 'end_date', ts('End Date')); // add campaign type - $this->addSelect('campaign_type_id', ['onChange' => "CRM.buildCustomData( 'Campaign', this.value );"], TRUE); + $this->addSelect('campaign_type_id', ['placeholder' => ts('- select type -'), 'onChange' => "CRM.buildCustomData( 'Campaign', this.value );"], TRUE); // add campaign status - $this->addSelect('status_id'); + $this->addSelect('status_id', ['placeholder' => ts('- select status -')]); // add External Identifier Element $this->add('text', 'external_identifier', ts('External ID'), diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php index f4671b98b9..a7d10036a9 100644 --- a/civicrm/CRM/Case/BAO/Case.php +++ b/civicrm/CRM/Case/BAO/Case.php @@ -229,6 +229,14 @@ WHERE civicrm_case.id = %1"; return FALSE; } + /** + * @param $id + * @return bool + */ + public static function del($id) { + return self::deleteCase($id); + } + /** * Enable disable case related relationships. * @@ -432,16 +440,37 @@ WHERE cc.contact_id = %1 AND civicrm_case_type.name = '{$caseType}'"; INNER JOIN civicrm_contact ON civicrm_case_contact.contact_id = civicrm_contact.id HERESQL; + // 'upcoming' and 'recent' show the next scheduled and most recent + // not-scheduled activity on each case, respectively. + $scheduled_id = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Scheduled'); switch ($type) { case 'upcoming': + $query .= <<<HERESQL + INNER JOIN (SELECT ca.case_id, a.id, a.activity_date_time, a.status_id, a.activity_type_id + FROM civicrm_case_activity ca + INNER JOIN civicrm_activity a ON ca.activity_id=a.id + WHERE a.id = + (SELECT b.id FROM civicrm_case_activity bca + INNER JOIN civicrm_activity b ON bca.activity_id=b.id + WHERE b.activity_date_time <= DATE_ADD( NOW(), INTERVAL 14 DAY ) + AND b.is_current_revision = 1 AND b.is_deleted=0 AND b.status_id = $scheduled_id + AND bca.case_id = ca.case_id ORDER BY b.activity_date_time ASC LIMIT 1)) t_act + ON t_act.case_id = civicrm_case.id +HERESQL; + break; + case 'recent': - // civicrm_view_case_activity_upcoming and - // civicrm_view_case_activity_recent are views that show the next - // scheduled and most recent not-scheduled activity on each case, - // respectively. $query .= <<<HERESQL - INNER JOIN civicrm_view_case_activity_$type t_act - ON t_act.case_id = civicrm_case.id + INNER JOIN (SELECT ca.case_id, a.id, a.activity_date_time, a.status_id, a.activity_type_id + FROM civicrm_case_activity ca + INNER JOIN civicrm_activity a ON ca.activity_id=a.id + WHERE a.id = + (SELECT b.id FROM civicrm_case_activity bca + INNER JOIN civicrm_activity b ON bca.activity_id=b.id + WHERE b.activity_date_time >= DATE_SUB( NOW(), INTERVAL 14 DAY ) + AND b.is_current_revision = 1 AND b.is_deleted=0 AND b.status_id <> $scheduled_id + AND bca.case_id = ca.case_id ORDER BY b.activity_date_time DESC LIMIT 1)) t_act + ON t_act.case_id = civicrm_case.id HERESQL; break; @@ -2783,67 +2812,6 @@ WHERE id IN (' . implode(',', $copiedActivityIds) . ')'; return $configured; } - /** - * Used during case component enablement and during upgrade. - * - * @return bool - */ - public static function createCaseViews() { - $dao = new CRM_Core_DAO(); - try { - $sql = self::createCaseViewsQuery('upcoming'); - $dao->query($sql); - - $sql = self::createCaseViewsQuery('recent'); - $dao->query($sql); - } - catch (Exception $e) { - return FALSE; - } - - return TRUE; - } - - /** - * Helper function, also used by the upgrade in case of error - * - * @param string $section - * - * @return string - */ - public static function createCaseViewsQuery($section = 'upcoming') { - $sql = ""; - $scheduled_id = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Scheduled'); - switch ($section) { - case 'upcoming': - $sql = "CREATE OR REPLACE VIEW `civicrm_view_case_activity_upcoming` - AS SELECT ca.case_id, a.id, a.activity_date_time, a.status_id, a.activity_type_id - FROM civicrm_case_activity ca - INNER JOIN civicrm_activity a ON ca.activity_id=a.id - WHERE a.id = -(SELECT b.id FROM civicrm_case_activity bca - INNER JOIN civicrm_activity b ON bca.activity_id=b.id - WHERE b.activity_date_time <= DATE_ADD( NOW(), INTERVAL 14 DAY ) - AND b.is_current_revision = 1 AND b.is_deleted=0 AND b.status_id = $scheduled_id - AND bca.case_id = ca.case_id ORDER BY b.activity_date_time ASC LIMIT 1)"; - break; - - case 'recent': - $sql = "CREATE OR REPLACE VIEW `civicrm_view_case_activity_recent` - AS SELECT ca.case_id, a.id, a.activity_date_time, a.status_id, a.activity_type_id - FROM civicrm_case_activity ca - INNER JOIN civicrm_activity a ON ca.activity_id=a.id - WHERE a.id = -(SELECT b.id FROM civicrm_case_activity bca - INNER JOIN civicrm_activity b ON bca.activity_id=b.id - WHERE b.activity_date_time >= DATE_SUB( NOW(), INTERVAL 14 DAY ) - AND b.is_current_revision = 1 AND b.is_deleted=0 AND b.status_id <> $scheduled_id - AND bca.case_id = ca.case_id ORDER BY b.activity_date_time DESC LIMIT 1)"; - break; - } - return $sql; - } - /** * Add/copy relationships, when new client is added for a case * diff --git a/civicrm/CRM/Case/BAO/CaseType.php b/civicrm/CRM/Case/BAO/CaseType.php index e10c70da07..e6a2510c32 100644 --- a/civicrm/CRM/Case/BAO/CaseType.php +++ b/civicrm/CRM/Case/BAO/CaseType.php @@ -86,6 +86,18 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { } } + public static function formatOutputDefinition(&$value, $row) { + if ($value) { + [$xml] = CRM_Utils_XML::parseString($value); + $value = $xml ? self::convertXmlToDefinition($xml) : []; + } + elseif (!empty($row['id']) || !empty($row['name'])) { + $caseTypeName = $row['name'] ?? CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $row['id']); + $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseTypeName); + $value = $xml ? self::convertXmlToDefinition($xml) : []; + } + } + /** * Format / convert submitted array to xml for case type definition * @@ -371,12 +383,22 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { */ public static function &create(&$params) { $transaction = new CRM_Core_Transaction(); - - if (!empty($params['id'])) { - CRM_Utils_Hook::pre('edit', 'CaseType', $params['id'], $params); - } - else { - CRM_Utils_Hook::pre('create', 'CaseType', NULL, $params); + // Computed properties. + unset($params['is_forkable']); + unset($params['is_forked']); + + $action = empty($params['id']) ? 'create' : 'edit'; + + CRM_Utils_Hook::pre($action, 'CaseType', $params['id'] ?? NULL, $params); + + // This is an existing case-type. + if ($action === 'edit' && isset($params['definition']) + // which is not yet forked + && !self::isForked($params['id']) + // for which new forks are prohibited + && !self::isForkable($params['id']) + ) { + unset($params['definition']); } $caseType = self::add($params); @@ -386,12 +408,8 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType { return $caseType; } - if (!empty($params['id'])) { - CRM_Utils_Hook::post('edit', 'CaseType', $caseType->id, $case); - } - else { - CRM_Utils_Hook::post('create', 'CaseType', $caseType->id, $case); - } + CRM_Utils_Hook::post($action, 'CaseType', $caseType->id, $case); + $transaction->commit(); CRM_Case_XMLRepository::singleton(TRUE); CRM_Core_OptionGroup::flushAll(); diff --git a/civicrm/CRM/Case/DAO/Case.php b/civicrm/CRM/Case/DAO/Case.php index 815423a014..7f03f5ef49 100644 --- a/civicrm/CRM/Case/DAO/Case.php +++ b/civicrm/CRM/Case/DAO/Case.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/Case.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:0ce5a08de908f8eb8d65337dcc9cf5c5) + * (GenCodeChecksum:a306dc83df6e2e019a35a560841a702e) */ /** @@ -344,6 +344,7 @@ class CRM_Case_DAO_Case extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified Date"), ], + 'readonly' => TRUE, 'add' => '4.7', ], ]; diff --git a/civicrm/CRM/Case/DAO/CaseType.php b/civicrm/CRM/Case/DAO/CaseType.php index e5ff269f08..239bf3dc82 100644 --- a/civicrm/CRM/Case/DAO/CaseType.php +++ b/civicrm/CRM/Case/DAO/CaseType.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Case/CaseType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:2d6717d85561fa14908152df42d9f6ce) + * (GenCodeChecksum:e97808735d244f6b2c7e84c9dd375fe7) */ /** @@ -60,7 +60,7 @@ class CRM_Case_DAO_CaseType extends CRM_Core_DAO { public $description; /** - * Is this entry active? + * Is this case type enabled? * * @var bool */ @@ -178,8 +178,9 @@ class CRM_Case_DAO_CaseType extends CRM_Core_DAO { 'name' => 'is_active', 'type' => CRM_Utils_Type::T_BOOLEAN, 'title' => ts('Case Type Is Active'), - 'description' => ts('Is this entry active?'), + 'description' => ts('Is this case type enabled?'), 'where' => 'civicrm_case_type.is_active', + 'default' => '1', 'table_name' => 'civicrm_case_type', 'entity' => 'CaseType', 'bao' => 'CRM_Case_BAO_CaseType', diff --git a/civicrm/CRM/Case/Form/CustomData.php b/civicrm/CRM/Case/Form/CustomData.php index ec2f6ddb04..76194afb05 100644 --- a/civicrm/CRM/Case/Form/CustomData.php +++ b/civicrm/CRM/Case/Form/CustomData.php @@ -112,24 +112,27 @@ class CRM_Case_Form_CustomData extends CRM_Core_Form { $session = CRM_Core_Session::singleton(); $session->pushUserContext(CRM_Utils_System::url('civicrm/contact/view/case', "reset=1&id={$this->_entityID}&cid={$this->_contactID}&action=view")); - $activityTypeID = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Custom Data'); - $activityParams = [ - 'activity_type_id' => $activityTypeID, - 'source_contact_id' => $session->get('userID'), - 'is_auto' => TRUE, - 'subject' => $this->_customTitle . " : change data", - 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Completed'), - 'target_contact_id' => $this->_contactID, - 'details' => $this->formatCustomDataChangesForDetail($params), - 'activity_date_time' => date('YmdHis'), - ]; - $activity = CRM_Activity_BAO_Activity::create($activityParams); - - $caseParams = [ - 'activity_id' => $activity->id, - 'case_id' => $this->_entityID, - ]; - CRM_Case_BAO_Case::processCaseActivity($caseParams); + $formattedDetails = $this->formatCustomDataChangesForDetail($params); + if (!empty($formattedDetails)) { + $activityTypeID = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Custom Data'); + $activityParams = [ + 'activity_type_id' => $activityTypeID, + 'source_contact_id' => $session->get('userID'), + 'is_auto' => TRUE, + 'subject' => $this->_customTitle . " : change data", + 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Completed'), + 'target_contact_id' => $this->_contactID, + 'details' => $formattedDetails, + 'activity_date_time' => date('YmdHis'), + ]; + $activity = CRM_Activity_BAO_Activity::create($activityParams); + + $caseParams = [ + 'activity_id' => $activity->id, + 'case_id' => $this->_entityID, + ]; + CRM_Case_BAO_Case::processCaseActivity($caseParams); + } $transaction->commit(); } @@ -146,7 +149,7 @@ class CRM_Case_Form_CustomData extends CRM_Core_Form { $formattedDetails = []; foreach ($params as $customField => $newCustomValue) { if (substr($customField, 0, 7) == 'custom_') { - if ($this->_defaults[$customField] == $newCustomValue) { + if (($this->_defaults[$customField] ?? '') === $newCustomValue) { // Don't show values that did not change continue; } diff --git a/civicrm/CRM/Case/Info.php b/civicrm/CRM/Case/Info.php index d3f6061028..582fdd07e5 100644 --- a/civicrm/CRM/Case/Info.php +++ b/civicrm/CRM/Case/Info.php @@ -239,9 +239,6 @@ class CRM_Case_Info extends CRM_Core_Component_Info { ) { $pathToCaseSampleTpl = __DIR__ . '/xml/configuration.sample/'; self::loadCaseSampleData($pathToCaseSampleTpl . 'case_sample.mysql.tpl'); - if (!CRM_Case_BAO_Case::createCaseViews()) { - throw new CRM_Core_Exception(ts("Could not create the MySQL views for CiviCase. Your mysql user needs to have the 'CREATE VIEW' permission")); - } } } diff --git a/civicrm/CRM/Contact/BAO/Contact/Utils.php b/civicrm/CRM/Contact/BAO/Contact/Utils.php index 5ffd18002c..704b688f99 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Utils.php +++ b/civicrm/CRM/Contact/BAO/Contact/Utils.php @@ -866,7 +866,7 @@ INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_i * likely affect user experience in unexpected ways. Existing behaviour retained * ... reluctantly. */ - public static function clearContactCaches($isEmptyPrevNextTable = FALSE) { + public static function clearContactCaches($isEmptyPrevNextTable = FALSE): void { if (!CRM_Core_Config::isPermitCacheFlushMode()) { return; } @@ -876,8 +876,8 @@ INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_i Civi::service('prevnext')->deleteItem(); CRM_Core_BAO_PrevNextCache::deleteItem(); } - // clear acl cache if any. - CRM_ACL_BAO_Cache::resetCache(); + + CRM_ACL_BAO_Cache::opportunisticCacheFlush(); CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush(); } diff --git a/civicrm/CRM/Contact/BAO/DashboardContact.php b/civicrm/CRM/Contact/BAO/DashboardContact.php index c6ff99f689..145494860b 100644 --- a/civicrm/CRM/Contact/BAO/DashboardContact.php +++ b/civicrm/CRM/Contact/BAO/DashboardContact.php @@ -17,10 +17,11 @@ class CRM_Contact_BAO_DashboardContact extends CRM_Contact_DAO_DashboardContact /** * @param array $record + * * @return CRM_Contact_DAO_DashboardContact - * @throws CRM_Core_Exception + * @throws \CRM_Core_Exception */ - public static function writeRecord(array $record) { + public static function writeRecord(array $record): CRM_Core_DAO { self::checkEditPermission($record); return parent::writeRecord($record); } diff --git a/civicrm/CRM/Contact/BAO/Group.php b/civicrm/CRM/Contact/BAO/Group.php index 138fd9e2d3..81feb0f2e3 100644 --- a/civicrm/CRM/Contact/BAO/Group.php +++ b/civicrm/CRM/Contact/BAO/Group.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\Group; + /** * * @package CRM @@ -94,6 +96,18 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { $query = "DELETE FROM civicrm_acl_entity_role where entity_table = 'civicrm_group' AND entity_id = %1"; CRM_Core_DAO::executeQuery($query, $params); + //check whether this group contains any saved searches and check if that saved search is appropriate to delete. + $groupDetails = Group::get(FALSE)->addWhere('id', '=', $id)->execute(); + if (!empty($groupDetails[0]['saved_search_id'])) { + $savedSearch = new CRM_Contact_DAO_SavedSearch(); + $savedSearch->id = $groupDetails[0]['saved_search_id']; + $savedSearch->find(TRUE); + // If it is a traditional saved search i.e has form values and there is no linked api_entity then delete the saved search as well. + if (!empty($savedSearch->form_values) && empty($savedSearch->api_entity) && empty($savedSearch->api_params)) { + $savedSearch->delete(); + } + } + // delete from group table $group = new CRM_Contact_DAO_Group(); $group->id = $id; diff --git a/civicrm/CRM/Contact/BAO/GroupContactCache.php b/civicrm/CRM/Contact/BAO/GroupContactCache.php index b63e2c49d0..3e75e85133 100644 --- a/civicrm/CRM/Contact/BAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/BAO/GroupContactCache.php @@ -9,6 +9,7 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\Group; use Civi\Api4\Query\SqlExpression; /** @@ -418,11 +419,12 @@ WHERE id IN ( $groupIDs ) * @param bool $force * Should we force a search through. * + * @throws \API_Exception * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ - public static function load(&$group, $force = FALSE) { - $groupID = $group->id; - $savedSearchID = $group->saved_search_id; + public static function load($group, $force = FALSE) { + $groupID = (int) $group->id; if (array_key_exists($groupID, self::$_alreadyLoaded) && !$force) { return; } @@ -435,90 +437,15 @@ WHERE id IN ( $groupIDs ) return; } - $customClass = NULL; - if ($savedSearchID) { - $ssParams = CRM_Contact_BAO_SavedSearch::getSearchParams($savedSearchID); - $groupID = CRM_Utils_Type::escape($groupID, 'Integer'); - - $excludeClause = "NOT IN ( - SELECT contact_id FROM civicrm_group_contact - WHERE civicrm_group_contact.status = 'Removed' - AND civicrm_group_contact.group_id = $groupID )"; - $addSelect = "$groupID AS group_id"; - - if (!empty($ssParams['api_entity'])) { - $sql = self::getApiSQL($ssParams, $addSelect, $excludeClause); - } - else { - // CRM-7021 rectify params to what proximity search expects if there is a value for prox_distance - if (!empty($ssParams)) { - CRM_Contact_BAO_ProximityQuery::fixInputParams($ssParams); - } - if (isset($ssParams['customSearchID'])) { - $sql = self::getCustomSearchSQL($savedSearchID, $ssParams, $addSelect, $excludeClause); - } - else { - $sql = self::getQueryObjectSQL($savedSearchID, $ssParams, $addSelect, $excludeClause); - } - } - } - - $groupContactsTempTable = CRM_Utils_SQL_TempTable::build()->setCategory('gccache')->setMemory(); + $groupContactsTempTable = CRM_Utils_SQL_TempTable::build() + ->setCategory('gccache') + ->setMemory(); + self::buildGroupContactTempTable([$groupID], $groupContactsTempTable); $tempTable = $groupContactsTempTable->getName(); - $groupContactsTempTable->createWithColumns('contact_id int, group_id int, UNIQUE UI_contact_group (contact_id,group_id)'); - - if (!empty($sql)) { - $contactQueries[] = $sql; - } - // lets also store the records that are explicitly added to the group - // this allows us to skip the group contact LEFT JOIN - $contactQueries[] = - "SELECT $groupID as group_id, contact_id as contact_id - FROM civicrm_group_contact - WHERE civicrm_group_contact.status = 'Added' AND civicrm_group_contact.group_id = $groupID "; - - self::clearGroupContactCache($groupID); - - foreach ($contactQueries as $contactQuery) { - CRM_Core_DAO::executeQuery("INSERT IGNORE INTO $tempTable (group_id, contact_id) {$contactQuery}"); - } - - if ($group->children) { - - // Store a list of contacts who are removed from the parent group - $sqlContactsRemovedFromGroup = " -SELECT contact_id -FROM civicrm_group_contact -WHERE civicrm_group_contact.status = 'Removed' -AND civicrm_group_contact.group_id = $groupID "; - $dao = CRM_Core_DAO::executeQuery($sqlContactsRemovedFromGroup); - $removed_contacts = []; - while ($dao->fetch()) { - $removed_contacts[] = $dao->contact_id; - } - - $childrenIDs = explode(',', $group->children); - foreach ($childrenIDs as $childID) { - $contactIDs = CRM_Contact_BAO_Group::getMember($childID, FALSE); - // Unset each contact that is removed from the parent group - foreach ($removed_contacts as $removed_contact) { - unset($contactIDs[$removed_contact]); - } - if (empty($contactIDs)) { - // This child group has no contact IDs so we don't need to add them to - continue; - } - $values = []; - foreach ($contactIDs as $contactID => $dontCare) { - $values[] = "({$groupID},{$contactID})"; - } - $str = implode(',', $values); - CRM_Core_DAO::executeQuery("INSERT IGNORE INTO $tempTable (group_id, contact_id) VALUES $str"); - } - } // grab a lock so other processes don't compete and do the same query $lock = Civi::lockManager()->acquire("data.core.group.{$groupID}"); + if (!$lock->isAcquired()) { // this can cause inconsistent results since we don't know if the other process // will fill up the cache before our calling routine needs it. @@ -693,7 +620,7 @@ ORDER BY gc.contact_id, g.children * @param string $excludeClause * * @return string - * @throws \Exception + * @throws CRM_Core_Exception */ protected static function getCustomSearchSQL($savedSearchID, array $ssParams, string $addSelect, string $excludeClause) { $searchSQL = CRM_Contact_BAO_SearchCustom::customClass($ssParams['customSearchID'], $savedSearchID)->contactIDs(); @@ -756,4 +683,104 @@ ORDER BY gc.contact_id, g.children return "$select {$sqlParts['from']} {$sqlParts['where']} {$sqlParts['group_by']} {$sqlParts['having']}"; } + /** + * Build a temporary table for the contacts in the specified group. + * + * @param array $groupIDs + * Currently only one id is build but this has been written + * to make it easy to switch to multiple. + * @param CRM_Utils_SQL_TempTable $tempTableObject + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + */ + protected static function buildGroupContactTempTable(array $groupIDs, $tempTableObject): void { + $group = Group::get(FALSE)->addWhere('id', 'IN', $groupIDs) + ->setSelect(['saved_search_id', 'children'])->execute()->first(); + $groupID = (int) $group['id']; + + $customClass = NULL; + if ($group['saved_search_id']) { + $ssParams = CRM_Contact_BAO_SavedSearch::getSearchParams($group['saved_search_id']); + + $excludeClause = "NOT IN ( + SELECT contact_id FROM civicrm_group_contact + WHERE civicrm_group_contact.status = 'Removed' + AND civicrm_group_contact.group_id = $groupID )"; + $addSelect = "$groupID AS group_id"; + + if (!empty($ssParams['api_entity'])) { + $sql = self::getApiSQL($ssParams, $addSelect, $excludeClause); + } + else { + // CRM-7021 rectify params to what proximity search expects if there is a value for prox_distance + if (!empty($ssParams)) { + CRM_Contact_BAO_ProximityQuery::fixInputParams($ssParams); + } + if (isset($ssParams['customSearchID'])) { + $sql = self::getCustomSearchSQL($group['saved_search_id'], $ssParams, $addSelect, $excludeClause); + } + else { + $sql = self::getQueryObjectSQL($group['saved_search_id'], $ssParams, $addSelect, $excludeClause); + } + } + } + + $tempTableName = $tempTableObject->getName(); + $tempTableObject->createWithColumns('contact_id int, group_id int, UNIQUE UI_contact_group (contact_id,group_id)'); + + if (!empty($sql)) { + $contactQueries[] = $sql; + } + // lets also store the records that are explicitly added to the group + // this allows us to skip the group contact LEFT JOIN + $contactQueries[] = + "SELECT $groupID as group_id, contact_id as contact_id + FROM civicrm_group_contact + WHERE civicrm_group_contact.status = 'Added' AND civicrm_group_contact.group_id = $groupID "; + + self::clearGroupContactCache($groupID); + + foreach ($contactQueries as $contactQuery) { + CRM_Core_DAO::executeQuery("INSERT IGNORE INTO $tempTableName (group_id, contact_id) {$contactQuery}"); + } + + CRM_Core_DAO::reenableFullGroupByMode(); + + if ($group['children']) { + + // Store a list of contacts who are removed from the parent group + $sqlContactsRemovedFromGroup = " +SELECT contact_id +FROM civicrm_group_contact +WHERE civicrm_group_contact.status = 'Removed' +AND civicrm_group_contact.group_id = $groupID "; + $dao = CRM_Core_DAO::executeQuery($sqlContactsRemovedFromGroup); + $removed_contacts = []; + while ($dao->fetch()) { + $removed_contacts[] = $dao->contact_id; + } + + $childrenIDs = explode(',', $group['children']); + foreach ($childrenIDs as $childID) { + $contactIDs = CRM_Contact_BAO_Group::getMember($childID, FALSE); + // Unset each contact that is removed from the parent group + foreach ($removed_contacts as $removed_contact) { + unset($contactIDs[$removed_contact]); + } + if (empty($contactIDs)) { + // This child group has no contact IDs so we don't need to add them to + continue; + } + $values = []; + foreach ($contactIDs as $contactID => $dontCare) { + $values[] = "({$groupID},{$contactID})"; + } + $str = implode(',', $values); + CRM_Core_DAO::executeQuery("INSERT IGNORE INTO $tempTableName (group_id, contact_id) VALUES $str"); + } + } + } + } diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php index baa41722cd..f581fe2558 100644 --- a/civicrm/CRM/Contact/BAO/Query.php +++ b/civicrm/CRM/Contact/BAO/Query.php @@ -396,6 +396,7 @@ class CRM_Contact_BAO_Query { 'im', 'address_name', 'master_id', + 'location_type', ]; /** @@ -1281,6 +1282,14 @@ class CRM_Contact_BAO_Query { } break; + case 'civicrm_location_type': + $this->_tables[$tName] = "\nLEFT JOIN $tableName `$tName` ON `$tName`.id = $aName.location_type_id"; + + if ($addWhere) { + $this->_whereTables["{$name}-address"] = $addressJoin; + } + break; + case 'civicrm_country': $this->_pseudoConstantsSelect["{$name}-{$elementFullName}"]['table'] = $newName; $this->_pseudoConstantsSelect["{$name}-{$elementFullName}"]['join'] @@ -3284,7 +3293,8 @@ WHERE $smartGroupClause $tagTree = CRM_Core_BAO_Tag::getChildTags(); foreach ((array) $value as $tagID) { if (!empty($tagTree[$tagID])) { - $value = array_unique(array_merge($value, $tagTree[$tagID])); + // make sure value is an array here (see CORE-2502) + $value = array_unique(array_merge((array) $value, $tagTree[$tagID])); } } diff --git a/civicrm/CRM/Contact/BAO/SavedSearch.php b/civicrm/CRM/Contact/BAO/SavedSearch.php index 6c4b976749..23135f1ad1 100644 --- a/civicrm/CRM/Contact/BAO/SavedSearch.php +++ b/civicrm/CRM/Contact/BAO/SavedSearch.php @@ -362,6 +362,11 @@ LEFT JOIN civicrm_email ON (contact_a.id = civicrm_email.contact_id AND civicrm_ } $params['modified_id'] = $loggedInContactID; } + + // Flush angular caches to refresh search displays + if (isset($params['api_params'])) { + Civi::container()->get('angular')->clear(); + } return self::writeRecord($params); } diff --git a/civicrm/CRM/Contact/BAO/SearchCustom.php b/civicrm/CRM/Contact/BAO/SearchCustom.php index fd18da4430..5e4ea3174b 100644 --- a/civicrm/CRM/Contact/BAO/SearchCustom.php +++ b/civicrm/CRM/Contact/BAO/SearchCustom.php @@ -87,7 +87,7 @@ class CRM_Contact_BAO_SearchCustom { * @param int $ssID * * @return CRM_Contact_Form_Search_Custom_Base - * @throws Exception + * @throws CRM_Core_Exception */ public static function customClass($csID, $ssID) { list($customSearchID, $customSearchClass, $formValues) = self::details($csID, $ssID); diff --git a/civicrm/CRM/Contact/DAO/Contact.php b/civicrm/CRM/Contact/DAO/Contact.php index 1ffa441fb1..74e5ab2462 100644 --- a/civicrm/CRM/Contact/DAO/Contact.php +++ b/civicrm/CRM/Contact/DAO/Contact.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Contact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:cfed69c9e09acada46340971415ec767) + * (GenCodeChecksum:64872d3a302d2f8cce4695709bb1f902) */ /** @@ -897,6 +897,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'html' => [ 'label' => ts("API KEY"), ], + 'readonly' => TRUE, 'add' => '2.2', ], 'contact_source' => [ @@ -1132,6 +1133,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '3.0', ], 'postal_greeting_id' => [ @@ -1186,6 +1188,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '3.0', ], 'addressee_id' => [ @@ -1240,6 +1243,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'entity' => 'Contact', 'bao' => 'CRM_Contact_BAO_Contact', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '3.0', ], 'job_title' => [ @@ -1391,6 +1395,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO { 'html' => [ 'label' => ts("Household Primary Contact"), ], + 'readonly' => TRUE, 'add' => '1.1', ], 'organization_name' => [ diff --git a/civicrm/CRM/Contact/DAO/Group.php b/civicrm/CRM/Contact/DAO/Group.php index 7a0919b4be..b06e64a168 100644 --- a/civicrm/CRM/Contact/DAO/Group.php +++ b/civicrm/CRM/Contact/DAO/Group.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/Group.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:70cda1352ed41a06561ffa99b92e459c) + * (GenCodeChecksum:8f7306d4427fc261d17944ad601bb422) */ /** @@ -386,6 +386,7 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { 'entity' => 'Group', 'bao' => 'CRM_Contact_BAO_Group', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '1.6', ], 'select_tables' => [ @@ -399,6 +400,7 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { 'bao' => 'CRM_Contact_BAO_Group', 'localizable' => 0, 'serialize' => self::SERIALIZE_PHP, + 'readonly' => TRUE, 'add' => '1.6', ], 'where_tables' => [ @@ -412,6 +414,7 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { 'bao' => 'CRM_Contact_BAO_Group', 'localizable' => 0, 'serialize' => self::SERIALIZE_PHP, + 'readonly' => TRUE, 'add' => '1.6', ], 'group_type' => [ @@ -444,6 +447,7 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { 'entity' => 'Group', 'bao' => 'CRM_Contact_BAO_Group', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '2.1', ], 'refresh_date' => [ @@ -457,6 +461,7 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { 'entity' => 'Group', 'bao' => 'CRM_Contact_BAO_Group', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '4.3', ], 'parents' => [ @@ -542,6 +547,7 @@ class CRM_Contact_DAO_Group extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified By"), ], + 'readonly' => TRUE, 'add' => '4.5', ], 'frontend_title' => [ diff --git a/civicrm/CRM/Contact/DAO/RelationshipCache.php b/civicrm/CRM/Contact/DAO/RelationshipCache.php index cec6456292..230049e5e7 100644 --- a/civicrm/CRM/Contact/DAO/RelationshipCache.php +++ b/civicrm/CRM/Contact/DAO/RelationshipCache.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contact/RelationshipCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:11ec799a538838c310dc75be4427c9f0) + * (GenCodeChecksum:6092bd6a166a4209f57a62d71076b0dc) */ /** @@ -190,6 +190,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'html' => [ 'label' => ts("Relationship"), ], + 'readonly' => TRUE, 'add' => '5.29', ], 'relationship_type_id' => [ @@ -207,6 +208,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'html' => [ 'label' => ts("Relationship Type"), ], + 'readonly' => TRUE, 'add' => '5.29', ], 'orientation' => [ @@ -225,6 +227,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'pseudoconstant' => [ 'callback' => 'CRM_Core_SelectValues::relationshipOrientation', ], + 'readonly' => TRUE, 'add' => '5.29', ], 'near_contact_id' => [ @@ -243,6 +246,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'type' => 'EntityRef', 'label' => ts("Contact (Near side)"), ], + 'readonly' => TRUE, 'add' => '5.29', ], 'near_relation' => [ @@ -263,6 +267,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'pseudoconstant' => [ 'callback' => 'CRM_Core_PseudoConstant::relationshipTypeOptions', ], + 'readonly' => TRUE, 'add' => '5.29', ], 'far_contact_id' => [ @@ -281,6 +286,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'type' => 'EntityRef', 'label' => ts("Contact (Far side)"), ], + 'readonly' => TRUE, 'add' => '5.29', ], 'far_relation' => [ @@ -301,6 +307,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'pseudoconstant' => [ 'callback' => 'CRM_Core_PseudoConstant::relationshipTypeOptions', ], + 'readonly' => TRUE, 'add' => '5.29', ], 'is_active' => [ @@ -317,6 +324,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'html' => [ 'type' => 'CheckBox', ], + 'readonly' => TRUE, 'add' => '5.29', ], 'relationship_start_date' => [ @@ -333,6 +341,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'type' => 'Select Date', 'formatType' => 'activityDate', ], + 'readonly' => TRUE, 'add' => '5.29', ], 'relationship_end_date' => [ @@ -349,6 +358,7 @@ class CRM_Contact_DAO_RelationshipCache extends CRM_Core_DAO { 'type' => 'Select Date', 'formatType' => 'activityDate', ], + 'readonly' => TRUE, 'add' => '5.29', ], ]; diff --git a/civicrm/CRM/Contact/DAO/SavedSearch.php b/civicrm/CRM/Contact/DAO/SavedSearch.php index 349075a5d9..a7a29f700c 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:1ca4440b5a09843b5d87d595a6d826ef) + * (GenCodeChecksum:86f450b7cee8be51a270e60cadd83f22) */ /** @@ -322,6 +322,7 @@ class CRM_Contact_DAO_SavedSearch extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified By"), ], + 'readonly' => TRUE, 'add' => '5.36', ], 'expires_date' => [ @@ -363,6 +364,7 @@ class CRM_Contact_DAO_SavedSearch extends CRM_Core_DAO { 'entity' => 'SavedSearch', 'bao' => 'CRM_Contact_BAO_SavedSearch', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '5.36', ], 'description' => [ diff --git a/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php b/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php index 89f0be3feb..2d95568eeb 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php @@ -194,9 +194,11 @@ civicrm_contact AS contact_a {$this->_aclFrom} * @return string */ public function where($includeContactIDs = FALSE) { + $contributionCompletedStatusId = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'); $clauses = [ "contrib.contact_id = contact_a.id", "contrib.is_test = 0", + "contrib.contribution_status_id = " . intval($contributionCompletedStatusId), ]; foreach ([ diff --git a/civicrm/CRM/Contact/Form/Task.php b/civicrm/CRM/Contact/Form/Task.php index 6dd27e0247..67b7f2be12 100644 --- a/civicrm/CRM/Contact/Form/Task.php +++ b/civicrm/CRM/Contact/Form/Task.php @@ -86,7 +86,7 @@ class CRM_Contact_Form_Task extends CRM_Core_Form_Task { $form->_contactIds = []; $form->_contactTypes = []; - $isStandAlone = in_array('task', $form->urlPath) || in_array('standalone', $form->urlPath); + $isStandAlone = in_array('task', $form->urlPath) || in_array('standalone', $form->urlPath) || in_array('map', $form->urlPath); if ($isStandAlone) { [$form->_task, $title] = CRM_Contact_Task::getTaskAndTitleByClass(get_class($form)); if (!array_key_exists($form->_task, CRM_Contact_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission()))) { diff --git a/civicrm/CRM/Contact/Form/Task/EmailTrait.php b/civicrm/CRM/Contact/Form/Task/EmailTrait.php index 8ab410c151..dc7771acfb 100644 --- a/civicrm/CRM/Contact/Form/Task/EmailTrait.php +++ b/civicrm/CRM/Contact/Form/Task/EmailTrait.php @@ -413,7 +413,7 @@ trait CRM_Contact_Form_Task_EmailTrait { } // send the mail - list($sent, $activityId) = CRM_Activity_BAO_Activity::sendEmail( + list($sent, $activityIds) = CRM_Activity_BAO_Activity::sendEmail( $formattedContactDetails, $this->getSubject($formValues['subject']), $formValues['text_message'], @@ -432,7 +432,12 @@ trait CRM_Contact_Form_Task_EmailTrait { ); if ($sent) { - $followupStatus = $this->createFollowUpActivities($formValues, $activityId); + // Only use the first activity id if there's multiple. + // If there's multiple recipients the idea behind multiple activities + // is to record the token value replacements separately, but that + // has no meaning for followup activities, and this doesn't prevent + // creating more manually if desired. + $followupStatus = $this->createFollowUpActivities($formValues, $activityIds[0]); $count_success = count($this->_toContactDetails); CRM_Core_Session::setStatus(ts('One message was sent successfully. ', [ 'plural' => '%count messages were sent successfully. ', @@ -447,20 +452,6 @@ trait CRM_Contact_Form_Task_EmailTrait { 'plural' => '%count Messages Not Sent', ]), 'info'); } - - if (isset($this->_caseId)) { - // if case-id is found in the url, create case activity record - $cases = explode(',', $this->_caseId); - foreach ($cases as $key => $val) { - if (is_numeric($val)) { - $caseParams = [ - 'activity_id' => $activityId, - 'case_id' => $val, - ]; - CRM_Case_BAO_Case::processCaseActivity($caseParams); - } - } - } } /** diff --git a/civicrm/CRM/Contact/Form/Task/Useradd.php b/civicrm/CRM/Contact/Form/Task/Useradd.php index 385405c6a2..d75239adac 100644 --- a/civicrm/CRM/Contact/Form/Task/Useradd.php +++ b/civicrm/CRM/Contact/Form/Task/Useradd.php @@ -64,14 +64,20 @@ class CRM_Contact_Form_Task_Useradd extends CRM_Core_Form { * Build the form object. */ public function buildQuickForm() { + $config = CRM_Core_Config::singleton(); + $element = $this->add('text', 'name', ts('Full Name'), ['class' => 'huge']); $element->freeze(); $this->add('text', 'cms_name', ts('Username'), ['class' => 'huge']); $this->addRule('cms_name', 'Username is required', 'required'); - $this->add('password', 'cms_pass', ts('Password'), ['class' => 'huge']); - $this->add('password', 'cms_confirm_pass', ts('Confirm Password'), ['class' => 'huge']); - $this->addRule('cms_pass', 'Password is required', 'required'); - $this->addRule(['cms_pass', 'cms_confirm_pass'], 'ERROR: Password mismatch', 'compare'); + + if (!$config->userSystem->isUserRegistrationPermitted()) { + $this->add('password', 'cms_pass', ts('Password'), ['class' => 'huge']); + $this->add('password', 'cms_confirm_pass', ts('Confirm Password'), ['class' => 'huge']); + $this->addRule('cms_pass', 'Password is required', 'required'); + $this->addRule(['cms_pass', 'cms_confirm_pass'], 'ERROR: Password mismatch', 'compare'); + } + $this->add('text', 'email', ts('Email:'), ['class' => 'huge'])->freeze(); $this->addRule('email', 'Email is required', 'required'); $this->add('hidden', 'contactID'); diff --git a/civicrm/CRM/Contact/Import/Form/Preview.php b/civicrm/CRM/Contact/Import/Form/Preview.php index 77ddd7afa2..d25cd4f58e 100644 --- a/civicrm/CRM/Contact/Import/Form/Preview.php +++ b/civicrm/CRM/Contact/Import/Form/Preview.php @@ -423,7 +423,7 @@ class CRM_Contact_Import_Form_Preview extends CRM_Import_Form_Preview { ); // add the new contacts to selected groups - $contactIds = &$parser->getImportedContacts(); + $contactIds = $parser->getImportedContacts(); // add the new related contacts to selected groups $relatedContactIds = &$parser->getRelatedImportedContacts(); diff --git a/civicrm/CRM/Contact/Import/Parser/Contact.php b/civicrm/CRM/Contact/Import/Parser/Contact.php index b35004675b..75bbb421d3 100644 --- a/civicrm/CRM/Contact/Import/Parser/Contact.php +++ b/civicrm/CRM/Contact/Import/Parser/Contact.php @@ -979,7 +979,7 @@ class CRM_Contact_Import_Parser_Contact extends CRM_Contact_Import_Parser { * * @return array */ - public function &getImportedContacts() { + public function getImportedContacts() { return $this->_newContacts; } diff --git a/civicrm/CRM/Contact/Page/DashBoard.php b/civicrm/CRM/Contact/Page/DashBoard.php index 55d48127df..48ea3ac19c 100644 --- a/civicrm/CRM/Contact/Page/DashBoard.php +++ b/civicrm/CRM/Contact/Page/DashBoard.php @@ -44,24 +44,21 @@ class CRM_Contact_Page_DashBoard extends CRM_Core_Page { } } - $loader = new Civi\Angular\AngularLoader(); + $loader = Civi::service('angularjs.loader'); + $loader->addModules('crmDashboard'); $loader->setPageName('civicrm/dashboard'); // For each dashlet that requires an angular directive, load the angular module which provides that directive - $modules = []; foreach (CRM_Core_BAO_Dashboard::getContactDashlets() as $dashlet) { if (!empty($dashlet['directive'])) { foreach ($loader->getAngular()->getModules() as $name => $module) { if (!empty($module['exports'][$dashlet['directive']])) { - $modules[] = $name; + $loader->addModules($name); continue; } } } } - $loader->setModules($modules); - - $loader->load(); return parent::run(); } diff --git a/civicrm/CRM/Contact/Page/View/Summary.php b/civicrm/CRM/Contact/Page/View/Summary.php index e173a8df54..dc4ddf1e41 100644 --- a/civicrm/CRM/Contact/Page/View/Summary.php +++ b/civicrm/CRM/Contact/Page/View/Summary.php @@ -297,7 +297,7 @@ class CRM_Contact_Page_View_Summary extends CRM_Contact_Page_View { return [ [ 'id' => 'summary', - 'url' => '#contact-summary', + 'template' => 'CRM/Contact/Page/View/Summary-tab.tpl', 'title' => ts('Summary'), 'weight' => 0, 'icon' => 'crm-i fa-address-card-o', diff --git a/civicrm/CRM/Contact/Task.php b/civicrm/CRM/Contact/Task.php index 4c3ac29c81..3597e319c9 100644 --- a/civicrm/CRM/Contact/Task.php +++ b/civicrm/CRM/Contact/Task.php @@ -228,6 +228,8 @@ class CRM_Contact_Task extends CRM_Core_Task { 'title' => ts('Map contacts'), 'class' => 'CRM_Contact_Form_Task_Map', 'result' => FALSE, + 'url' => 'civicrm/contact/map', + 'icon' => 'fa-map', ); } diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 9902b0c165..7e030b8f38 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -10,6 +10,7 @@ */ use Civi\Api4\Activity; +use Civi\Api4\ActivityContact; use Civi\Api4\Contribution; use Civi\Api4\ContributionRecur; use Civi\Api4\PaymentProcessor; @@ -533,12 +534,23 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { 'id' => $existingActivity['id'] ?? NULL, ], $campaignParams); if (!$activityParams['id']) { - // Don't set target contacts on update as these will have been - // correctly created and we risk overwriting them with - // 'best guess' params. $activityParams['source_contact_id'] = (int) ($params['source_contact_id'] ?? (CRM_Core_Session::getLoggedInContactID() ?: $contribution->contact_id)); $activityParams['target_contact_id'] = ($activityParams['source_contact_id'] === (int) $contribution->contact_id) ? [] : [$contribution->contact_id]; } + else { + list($sourceContactId, $targetContactId) = self::getActivitySourceAndTarget($activityParams['id']); + + if (empty($targetContactId) && $sourceContactId != $contribution->contact_id) { + // If no target contact exists and the source contact is not equal to + // the contribution contact, update the source contact + $activityParams['source_contact_id'] = $contribution->contact_id; + } + elseif (isset($targetContactId) && $targetContactId != $contribution->contact_id) { + // If a target contact exists and it is not equal to the contribution + // contact, update the target contact + $activityParams['target_contact_id'] = [$contribution->contact_id]; + } + } Activity::save(FALSE)->addRecord($activityParams)->execute(); } @@ -3458,10 +3470,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $trxnParams['payment_processor_id'] = $params['payment_processor']; } - if (isset($fromFinancialAccountId)) { - $trxnParams['from_financial_account_id'] = $fromFinancialAccountId; - } - // consider external values passed for recording transaction entry if (!empty($financialTrxnValues)) { $trxnParams = array_merge($trxnParams, $financialTrxnValues); @@ -5413,4 +5421,38 @@ LIMIT 1;"; return $values; } + /** + * Get the activity source and target contacts linked to a contribution + * + * @param $activityId + * + * @return array + */ + private static function getActivitySourceAndTarget($activityId): array { + $activityContactQuery = ActivityContact::get(FALSE)->setWhere([ + ['activity_id', '=', $activityId], + ['record_type_id:name', 'IN', ['Activity Source', 'Activity Targets']], + ])->execute(); + + $sourceContactKey = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_ActivityContact', 'record_type_id', 'Activity Source'); + $targetContactKey = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_ActivityContact', 'record_type_id', 'Activity Targets'); + + $sourceContactId = NULL; + $targetContactId = NULL; + + for ($i = 0; $i < $activityContactQuery->count(); $i++) { + $record = $activityContactQuery->itemAt($i); + + if ($record['record_type_id'] === $sourceContactKey) { + $sourceContactId = $record['contact_id']; + } + + if ($record['record_type_id'] === $targetContactKey) { + $targetContactId = $record['contact_id']; + } + } + + return [$sourceContactId, $targetContactId]; + } + } diff --git a/civicrm/CRM/Contribute/BAO/ContributionPage.php b/civicrm/CRM/Contribute/BAO/ContributionPage.php index 6b1854f0f3..c15e5c3d10 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionPage.php +++ b/civicrm/CRM/Contribute/BAO/ContributionPage.php @@ -15,6 +15,8 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ +use Civi\Api4\Contribution; + /** * This class contains Contribution Page related functions. */ @@ -309,7 +311,7 @@ class CRM_Contribute_BAO_ContributionPage extends CRM_Contribute_DAO_Contributio $userID = $values['related_contact'] ?? NULL; } } - list($values['customPre_grouptitle'], $values['customPre']) = self::getProfileNameAndFields($preID, $userID, $params['custom_pre_id']); + [$values['customPre_grouptitle'], $values['customPre']] = self::getProfileNameAndFields($preID, $userID, $params['custom_pre_id']); } $userID = $contactID; if ($postID = CRM_Utils_Array::value('custom_post_id', $values)) { @@ -436,15 +438,11 @@ class CRM_Contribute_BAO_ContributionPage extends CRM_Contribute_DAO_Contributio $sendTemplateParams['cc'] = $values['cc_receipt'] ?? NULL; $sendTemplateParams['bcc'] = $values['bcc_receipt'] ?? NULL; //send email with pdf invoice - $template = CRM_Core_Smarty::singleton(); - $taxAmt = $template->get_template_vars('dataArray'); - $isEmailPDF = Civi::settings()->get('invoice_is_email_pdf'); - $invoicing = Civi::settings()->get('invoicing'); - if ($invoicing && !empty($isEmailPDF)) { + if (Civi::settings()->get('invoicing') && Civi::settings()->get('invoice_is_email_pdf')) { $sendTemplateParams['isEmailPdf'] = TRUE; $sendTemplateParams['contributionId'] = $values['contribution_id']; } - list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); + list($sent, $subject, $message) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); } // send duplicate alert, if dupe match found during on-behalf-of processing. @@ -485,7 +483,7 @@ class CRM_Contribute_BAO_ContributionPage extends CRM_Contribute_DAO_Contributio $fields = CRM_Core_BAO_UFGroup::getFields($gid, FALSE, CRM_Core_Action::VIEW, NULL, NULL, FALSE, NULL, FALSE, NULL, CRM_Core_Permission::CREATE, NULL); foreach ($fields as $k => $v) { if (!$groupTitle) { - $groupTitle = $v['groupTitle']; + $groupTitle = $v['groupDisplayTitle']; } // suppress all file fields from display and formatting fields if ( @@ -507,55 +505,48 @@ class CRM_Contribute_BAO_ContributionPage extends CRM_Contribute_DAO_Contributio /** * Send the emails for Recurring Contribution Notification. * + * @param int $contributionID * @param string $type * TxnType. - * @param int $contactID - * Contact id for contributor. - * @param int $pageID * Contribution page id. * @param object $recur * Object of recurring contribution table. * @param bool|object $autoRenewMembership is it a auto renew membership. + * + * @throws \API_Exception */ - public static function recurringNotify($type, $contactID, $pageID, $recur, $autoRenewMembership = FALSE) { - $value = []; - $isEmailReceipt = FALSE; - if ($pageID) { - CRM_Core_DAO::commonRetrieveAll('CRM_Contribute_DAO_ContributionPage', 'id', $pageID, $value, [ - 'title', - 'is_email_receipt', - 'receipt_from_name', - 'receipt_from_email', - 'cc_receipt', - 'bcc_receipt', - ]); - $isEmailReceipt = $value[$pageID]['is_email_receipt'] ?? NULL; - } - elseif ($recur->id) { - // This means we are coming from back-office - ie. no page ID, but recurring. - // Ideally this information would be passed into the function clearly rather than guessing by convention. - $isEmailReceipt = TRUE; - } - - if ($isEmailReceipt) { - if ($pageID) { - $receiptFrom = '"' . CRM_Utils_Array::value('receipt_from_name', $value[$pageID]) . '" <' . $value[$pageID]['receipt_from_email'] . '>'; - - $receiptFromName = $value[$pageID]['receipt_from_name']; - $receiptFromEmail = $value[$pageID]['receipt_from_email']; + public static function recurringNotify($contributionID, $type, $recur, $autoRenewMembership = FALSE): void { + $contribution = Contribution::get(FALSE) + ->addWhere('id', '=', $contributionID) + ->setSelect([ + 'contribution_page_id', + 'contact_id', + 'contribution_recur_id', + 'contribution_recur.is_email_receipt', + 'contribution_page.title', + 'contribution_page.is_email_receipt', + 'contribution_page.receipt_from_name', + 'contribution_page.receipt_from_email', + 'contribution_page.cc_receipt', + 'contribution_page.bcc_receipt', + ]) + ->execute()->first(); + + if ($contribution['contribution_recur.is_email_receipt'] || $contribution['contribution_page.is_email_receipt']) { + if ($contribution['contribution_page.receipt_from_email']) { + $receiptFromName = $contribution['contribution_page.receipt_from_name']; + $receiptFromEmail = $contribution['contribution_page.receipt_from_email']; } else { - $domainValues = CRM_Core_BAO_Domain::getNameAndEmail(); - $receiptFrom = "$domainValues[0] <$domainValues[1]>"; - $receiptFromName = $domainValues[0]; - $receiptFromEmail = $domainValues[1]; + [$receiptFromName, $receiptFromEmail] = CRM_Core_BAO_Domain::getNameAndEmail(); } - list($displayName, $email) = CRM_Contact_BAO_Contact_Location::getEmailDetails($contactID, FALSE); + $receiptFrom = "$receiptFromName <$receiptFromEmail>"; + [$displayName, $email] = CRM_Contact_BAO_Contact_Location::getEmailDetails($contribution['contact_id'], FALSE); $templatesParams = [ 'groupName' => 'msg_tpl_workflow_contribution', 'valueName' => 'contribution_recurring_notify', - 'contactId' => $contactID, + 'contactId' => $contribution['contact_id'], 'tplParams' => [ 'recur_frequency_interval' => $recur->frequency_interval, 'recur_frequency_unit' => $recur->frequency_unit, @@ -574,10 +565,8 @@ class CRM_Contribute_BAO_ContributionPage extends CRM_Contribute_DAO_Contributio 'toEmail' => $email, ]; //CRM-13811 - if ($pageID) { - $templatesParams['cc'] = $value[$pageID]['cc_receipt'] ?? NULL; - $templatesParams['bcc'] = $value[$pageID]['bcc_receipt'] ?? NULL; - } + $templatesParams['cc'] = $contribution['contribution_page.cc_receipt']; + $templatesParams['bcc'] = $contribution['contribution_page.cc_receipt']; if ($recur->id) { // in some cases its just recurringNotify() thats called for the first time and these urls don't get set. // like in PaypalPro, & therefore we set it here additionally. diff --git a/civicrm/CRM/Contribute/BAO/ContributionRecur.php b/civicrm/CRM/Contribute/BAO/ContributionRecur.php index 161cac49bb..5762a2a049 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/BAO/ContributionRecur.php @@ -559,9 +559,9 @@ INNER JOIN civicrm_contribution con ON ( con.id = mp.contribution_id ) } //send recurring Notification email for user - CRM_Contribute_BAO_ContributionPage::recurringNotify($isFirstOrLastRecurringPayment, - $ids['contact'], - $ids['contributionPage'], + CRM_Contribute_BAO_ContributionPage::recurringNotify( + $ids['contribution'], + $isFirstOrLastRecurringPayment, $recur, $autoRenewMembership ); diff --git a/civicrm/CRM/Contribute/DAO/Contribution.php b/civicrm/CRM/Contribute/DAO/Contribution.php index f086585274..d0a1b66688 100644 --- a/civicrm/CRM/Contribute/DAO/Contribution.php +++ b/civicrm/CRM/Contribute/DAO/Contribution.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/Contribution.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:f60d10a793d3904420087e577ec8a408) + * (GenCodeChecksum:6eb465457269fac04fdc1fb6e35f2161) */ /** @@ -545,6 +545,7 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO { 'html' => [ 'type' => 'Text', ], + 'readonly' => TRUE, 'add' => '1.3', ], 'invoice_id' => [ @@ -565,6 +566,7 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO { 'html' => [ 'type' => 'Text', ], + 'readonly' => TRUE, 'add' => '1.3', ], 'invoice_number' => [ @@ -746,6 +748,7 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO { 'html' => [ 'label' => ts("Recurring Contribution"), ], + 'readonly' => TRUE, 'add' => '1.4', ], 'is_test' => [ @@ -940,6 +943,7 @@ class CRM_Contribute_DAO_Contribution extends CRM_Core_DAO { 'html' => [ 'type' => 'CheckBox', ], + 'readonly' => TRUE, 'add' => '5.20', ], ]; diff --git a/civicrm/CRM/Contribute/DAO/ContributionRecur.php b/civicrm/CRM/Contribute/DAO/ContributionRecur.php index 9c60146c77..707afaa176 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/DAO/ContributionRecur.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Contribute/ContributionRecur.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:de42c68c1da057066076b28ebe4f5460) + * (GenCodeChecksum:47f389ccf532868b1a41d77c7691912a) */ /** @@ -385,6 +385,7 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { 'description' => ts('Number of time units for recurrence of payment.'), 'required' => TRUE, 'where' => 'civicrm_contribution_recur.frequency_interval', + 'default' => '1', 'table_name' => 'civicrm_contribution_recur', 'entity' => 'ContributionRecur', 'bao' => 'CRM_Contribute_BAO_ContributionRecur', @@ -416,6 +417,7 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { 'description' => ts('The date the first scheduled recurring contribution occurs.'), 'required' => TRUE, 'where' => 'civicrm_contribution_recur.start_date', + 'default' => 'CURRENT_TIMESTAMP', 'table_name' => 'civicrm_contribution_recur', 'entity' => 'ContributionRecur', 'bao' => 'CRM_Contribute_BAO_ContributionRecur', @@ -434,6 +436,7 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { 'description' => ts('When this recurring contribution record was created.'), 'required' => TRUE, 'where' => 'civicrm_contribution_recur.create_date', + 'default' => 'CURRENT_TIMESTAMP', 'table_name' => 'civicrm_contribution_recur', 'entity' => 'ContributionRecur', 'bao' => 'CRM_Contribute_BAO_ContributionRecur', @@ -451,6 +454,7 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { 'title' => ts('Modified Date'), 'description' => ts('Last updated date for this record. mostly the last time a payment was received'), 'where' => 'civicrm_contribution_recur.modified_date', + 'default' => 'CURRENT_TIMESTAMP', 'table_name' => 'civicrm_contribution_recur', 'entity' => 'ContributionRecur', 'bao' => 'CRM_Contribute_BAO_ContributionRecur', @@ -460,6 +464,7 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { 'type' => 'Select Date', 'formatType' => 'activityDateTime', ], + 'readonly' => TRUE, 'add' => '1.6', ], 'contribution_recur_cancel_date' => [ @@ -586,7 +591,7 @@ class CRM_Contribute_DAO_ContributionRecur extends CRM_Core_DAO { 'import' => TRUE, 'where' => 'civicrm_contribution_recur.contribution_status_id', 'export' => TRUE, - 'default' => '1', + 'default' => '2', 'table_name' => 'civicrm_contribution_recur', 'entity' => 'ContributionRecur', 'bao' => 'CRM_Contribute_BAO_ContributionRecur', diff --git a/civicrm/CRM/Contribute/Export/Form/Select.php b/civicrm/CRM/Contribute/Export/Form/Select.php index 9ad30badd6..4e57be122f 100644 --- a/civicrm/CRM/Contribute/Export/Form/Select.php +++ b/civicrm/CRM/Contribute/Export/Form/Select.php @@ -20,8 +20,12 @@ */ class CRM_Contribute_Export_Form_Select extends CRM_Export_Form_Select { + use CRM_Contribute_Form_Task_TaskTrait; + /** * Call the pre-processing function. + * + * @throws \CRM_Core_Exception */ protected function callPreProcessing(): void { CRM_Contribute_Form_Task::preProcessCommon($this); diff --git a/civicrm/CRM/Contribute/Form/AdditionalInfo.php b/civicrm/CRM/Contribute/Form/AdditionalInfo.php index f66501a2d3..117764dc3a 100644 --- a/civicrm/CRM/Contribute/Form/AdditionalInfo.php +++ b/civicrm/CRM/Contribute/Form/AdditionalInfo.php @@ -421,19 +421,7 @@ class CRM_Contribute_Form_AdditionalInfo { $form->assign('receive_date', CRM_Utils_Date::processDate($params['receive_date'])); } - $template = CRM_Core_Smarty::singleton(); - $taxAmt = $template->get_template_vars('dataArray'); - $eventTaxAmt = $template->get_template_vars('totalTaxAmount'); - $prefixValue = Civi::settings()->get('contribution_invoice_settings'); - $invoicing = $prefixValue['invoicing'] ?? NULL; - if ((!empty($taxAmt) || isset($eventTaxAmt)) && (isset($invoicing) && isset($prefixValue['is_email_pdf']))) { - $isEmailPdf = TRUE; - } - else { - $isEmailPdf = FALSE; - } - - list($sendReceipt, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate( + [$sendReceipt] = CRM_Core_BAO_MessageTemplate::sendTemplate( [ 'groupName' => 'msg_tpl_workflow_contribution', 'valueName' => 'contribution_offline_receipt', @@ -444,7 +432,7 @@ class CRM_Contribute_Form_AdditionalInfo { 'toEmail' => $contributorEmail, 'isTest' => $form->_mode == 'test', 'PDFFilename' => ts('receipt') . '.pdf', - 'isEmailPdf' => $isEmailPdf, + 'isEmailPdf' => Civi::settings()->get('invoicing') && Civi::settings()->get('invoice_is_email_pdf'), ] ); diff --git a/civicrm/CRM/Contribute/Form/Contribution.php b/civicrm/CRM/Contribute/Form/Contribution.php index d1f8804a4e..5796571d34 100644 --- a/civicrm/CRM/Contribute/Form/Contribution.php +++ b/civicrm/CRM/Contribute/Form/Contribution.php @@ -910,14 +910,15 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $errors['trxn_id'] = ts('Transaction ID\'s must be unique. Transaction \'%1\' already exists in your database.', [1 => $fields['trxn_id']]); } } - if (!empty($fields['revenue_recognition_date']) - && count(array_filter($fields['revenue_recognition_date'])) == 1 - ) { - $errors['revenue_recognition_date'] = ts('Month and Year are required field for Revenue Recognition.'); - } // CRM-16189 + $order = new CRM_Financial_BAO_Order(); + $order->setPriceSelectionFromUnfilteredInput($fields); + if (isset($fields['total_amount'])) { + $order->setOverrideTotalAmount($fields['total_amount']); + } + $lineItems = $order->getLineItems(); try { - CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($fields, $self->_id, $self->_priceSet['fields']); + CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($fields, $self->_id, $lineItems); } catch (CRM_Core_Exception $e) { $errors['financial_type_id'] = ' '; diff --git a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php index c28899bd4a..9e20a3015b 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php @@ -675,7 +675,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $membershipTypeIds = $membershipTypes = $radio = $radioOptAttrs = []; $membershipPriceset = (!empty($this->_priceSetId) && $this->_useForMember); - $allowAutoRenewMembership = $autoRenewOption = FALSE; $autoRenewMembershipTypeOptions = []; $separateMembershipPayment = $this->_membershipBlock['is_separate_payment'] ?? NULL; @@ -803,7 +802,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->assign('membershipBlock', $this->_membershipBlock); $this->assign('showRadio', FALSE); $this->assign('membershipTypes', $membershipTypes); - $this->assign('allowAutoRenewMembership', $allowAutoRenewMembership); $this->assign('autoRenewMembershipTypeOptions', json_encode($autoRenewMembershipTypeOptions)); //give preference to user submitted auto_renew value. $takeUserSubmittedAutoRenew = (!empty($_POST) || $this->isSubmitted()); @@ -2772,10 +2770,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr if (!empty($form->_paymentProcessor)) { $contributionParams['payment_instrument_id'] = $paymentParams['payment_instrument_id'] = $form->_paymentProcessor['payment_instrument_id']; } - - // @todo this is the wrong place for this - it should be done as close to form submission - // as possible - $paymentParams['amount'] = CRM_Utils_Rule::cleanMoney($paymentParams['amount']); $contribution = CRM_Contribute_Form_Contribution_Confirm::processFormContribution( $form, $paymentParams, diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php index d6df12bd1f..b6c29b41fc 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Main.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php @@ -1472,7 +1472,7 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu $paymentBalance = CRM_Contribute_BAO_Contribution::getContributionBalance($this->_ccid); //bounce if the contribution is not pending. - if ((int) $paymentBalance <= 0) { + if ((float) $paymentBalance <= 0) { CRM_Core_Error::statusBounce(ts("Returning since contribution has already been handled.")); } if (!empty($paymentBalance)) { diff --git a/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php b/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php index 172cb1fb53..46e4ff43d8 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php +++ b/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php @@ -310,7 +310,6 @@ class CRM_Contribute_Form_Contribution_ThankYou extends CRM_Contribute_Form_Cont $membershipTypeIds = $membershipTypes = $radio = $radioOptAttrs = []; $membershipPriceset = (!empty($this->_priceSetId) && $this->_useForMember); - $allowAutoRenewMembership = $autoRenewOption = FALSE; $autoRenewMembershipTypeOptions = []; $separateMembershipPayment = $this->_membershipBlock['is_separate_payment'] ?? NULL; @@ -428,7 +427,6 @@ class CRM_Contribute_Form_Contribution_ThankYou extends CRM_Contribute_Form_Cont $this->assign('membershipBlock', $this->_membershipBlock); $this->assign('showRadio', FALSE); $this->assign('membershipTypes', $membershipTypes); - $this->assign('allowAutoRenewMembership', $allowAutoRenewMembership); $this->assign('autoRenewMembershipTypeOptions', json_encode($autoRenewMembershipTypeOptions)); //give preference to user submitted auto_renew value. $takeUserSubmittedAutoRenew = (!empty($_POST) || $this->isSubmitted()); diff --git a/civicrm/CRM/Contribute/Form/Task.php b/civicrm/CRM/Contribute/Form/Task.php index 60cc441184..e9b72c8c92 100644 --- a/civicrm/CRM/Contribute/Form/Task.php +++ b/civicrm/CRM/Contribute/Form/Task.php @@ -21,6 +21,8 @@ */ class CRM_Contribute_Form_Task extends CRM_Core_Form_Task { + use CRM_Contribute_Form_Task_TaskTrait; + /** * The array that holds all the contribution ids. * @@ -28,20 +30,6 @@ class CRM_Contribute_Form_Task extends CRM_Core_Form_Task { */ protected $_contributionIds; - /** - * The array that holds all the mapping contribution and contact ids. - * - * @var array - */ - protected $_contributionContactIds = []; - - /** - * The flag to tell if there are soft credits included. - * - * @var bool - */ - public $_includesSoftCredits = FALSE; - /** * Build all the data structures needed to build the form. */ @@ -50,83 +38,20 @@ class CRM_Contribute_Form_Task extends CRM_Core_Form_Task { } /** - * @param \CRM_Core_Form_Task $form + * @param \CRM_Contribute_Form_Task $form * * @throws \CRM_Core_Exception */ - public static function preProcessCommon(&$form) { + public static function preProcessCommon(&$form): void { $form->_contributionIds = []; $values = $form->getSearchFormValues(); $form->_task = $values['task'] ?? NULL; - $ids = $form->getSelectedIDs($values); - if (!$ids) { - $queryParams = $form->get('queryParams'); - $isTest = FALSE; - if (is_array($queryParams)) { - foreach ($queryParams as $fields) { - if ($fields[0] === 'contribution_test') { - $isTest = TRUE; - break; - } - } - } - if (!$isTest) { - $queryParams[] = [ - 'contribution_test', - '=', - 0, - 0, - 0, - ]; - } - $returnProperties = ['contribution_id' => 1]; - $sortOrder = $sortCol = NULL; - if ($form->get(CRM_Utils_Sort::SORT_ORDER)) { - $sortOrder = $form->get(CRM_Utils_Sort::SORT_ORDER); - //Include sort column in select clause. - $sortCol = trim(str_replace(['`', 'asc', 'desc'], '', $sortOrder)); - $returnProperties[$sortCol] = 1; - } - - $form->_includesSoftCredits = CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled($queryParams); - $query = new CRM_Contact_BAO_Query($queryParams, $returnProperties, NULL, FALSE, FALSE, - CRM_Contact_BAO_Query::MODE_CONTRIBUTE - ); - // @todo the function CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled should handle this - // can we remove? if not why not? - if ($form->_includesSoftCredits) { - $contactIds = $contributionContactIds = []; - $query->_rowCountClause = " count(civicrm_contribution.id)"; - $query->_groupByComponentClause = " GROUP BY contribution_search_scredit_combined.id, contribution_search_scredit_combined.contact_id, contribution_search_scredit_combined.scredit_id "; - } - else { - $query->_distinctComponentClause = ' civicrm_contribution.id'; - $query->_groupByComponentClause = ' GROUP BY civicrm_contribution.id '; - } - $result = $query->searchQuery(0, 0, $sortOrder); - while ($result->fetch()) { - $ids[] = $result->contribution_id; - if ($form->_includesSoftCredits) { - $contactIds[$result->contact_id] = $result->contact_id; - $contributionContactIds["{$result->contact_id}-{$result->contribution_id}"] = $result->contribution_id; - } - } - $form->assign('totalSelectedContributions', $form->get('rowCount')); - } - - if (!empty($ids)) { - $form->_componentClause = ' civicrm_contribution.id IN ( ' . implode(',', $ids) . ' ) '; - - $form->assign('totalSelectedContributions', count($ids)); - } - if (!empty($form->_includesSoftCredits) && !empty($contactIds)) { - $form->_contactIds = $contactIds; - $form->_contributionContactIds = $contributionContactIds; - } - + $ids = $form->getIDs(); + $form->_componentClause = $form->getComponentClause(); + $form->assign('totalSelectedContributions', count($ids)); $form->_contributionIds = $form->_componentIds = $ids; $form->set('contributionIds', $form->_contributionIds); $form->setNextUrl('contribute'); @@ -145,8 +70,8 @@ class CRM_Contribute_Form_Task extends CRM_Core_Form_Task { * Given the contribution id, compute the contact id * since its used for things like send email */ - public function setContactIDs() { - if (!$this->_includesSoftCredits) { + public function setContactIDs(): void { + if (!$this->isQueryIncludesSoftCredits()) { $this->_contactIds = CRM_Core_DAO::getContactIDsFromComponent( $this->_contributionIds, 'civicrm_contribution' diff --git a/civicrm/CRM/Contribute/Form/Task/PDF.php b/civicrm/CRM/Contribute/Form/Task/PDF.php index 7b99516a88..8a7ce4c5cd 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDF.php +++ b/civicrm/CRM/Contribute/Form/Task/PDF.php @@ -35,29 +35,15 @@ class CRM_Contribute_Form_Task_PDF extends CRM_Contribute_Form_Task { * Build all the data structures needed to build the form. */ public function preProcess() { - $id = CRM_Utils_Request::retrieve('id', 'Positive', - $this, FALSE - ); - - if ($id) { - $this->_contributionIds = [$id]; - $this->_componentClause = " civicrm_contribution.id IN ( $id ) "; - $this->_single = TRUE; - $this->assign('totalSelectedContributions', 1); - } - else { - parent::preProcess(); - } - + parent::preProcess(); // check that all the contribution ids have pending status $query = " SELECT count(*) FROM civicrm_contribution WHERE contribution_status_id != 1 AND {$this->_componentClause}"; - $count = CRM_Core_DAO::singleValueQuery($query); - if ($count != 0) { - CRM_Core_Error::statusBounce("Please select only online contributions with Completed status."); + if (CRM_Core_DAO::singleValueQuery($query)) { + CRM_Core_Error::statusBounce("Please select only contributions with Completed status."); } $this->assign('single', $this->_single); diff --git a/civicrm/CRM/Contribute/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Contribute/Form/Task/PDFLetterCommon.php index eefb0cb733..e776799ada 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDFLetterCommon.php +++ b/civicrm/CRM/Contribute/Form/Task/PDFLetterCommon.php @@ -23,8 +23,10 @@ class CRM_Contribute_Form_Task_PDFLetterCommon extends CRM_Contact_Form_Task_PDF /** * Process the form after the input has been submitted and validated. * - * @param CRM_Contribute_Form_Task $form + * @param \CRM_Contribute_Form_Task_PDFLetter $form * @param array $formValues + * + * @throws \CRM_Core_Exception */ public static function postProcess(&$form, $formValues = NULL) { if (empty($formValues)) { @@ -78,11 +80,15 @@ class CRM_Contribute_Form_Task_PDFLetterCommon extends CRM_Contact_Form_Task_PDF $skipOnHold = $form->skipOnHold ?? FALSE; $skipDeceased = $form->skipDeceased ?? TRUE; $contributionIDs = $form->getVar('_contributionIds'); - if ($form->_includesSoftCredits) { - //@todo - comment on what is stored there - $contributionIDs = $form->getVar('_contributionContactIds'); + if ($form->isQueryIncludesSoftCredits()) { + $contributionIDs = []; + $result = $form->getSearchQueryResults(); + while ($result->fetch()) { + $form->_contactIds[$result->contact_id] = $result->contact_id; + $contributionIDs["{$result->contact_id}-{$result->contribution_id}"] = $result->contribution_id; + } } - [$contributions, $contacts] = self::buildContributionArray($groupBy, $contributionIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $task, $separator, $form->_includesSoftCredits); + [$contributions, $contacts] = self::buildContributionArray($groupBy, $contributionIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $task, $separator, $form->isQueryIncludesSoftCredits()); $html = []; $contactHtml = $emailedHtml = []; foreach ($contributions as $contributionId => $contribution) { diff --git a/civicrm/CRM/Contribute/Form/Task/TaskTrait.php b/civicrm/CRM/Contribute/Form/Task/TaskTrait.php new file mode 100644 index 0000000000..6dedf99ec3 --- /dev/null +++ b/civicrm/CRM/Contribute/Form/Task/TaskTrait.php @@ -0,0 +1,141 @@ +<?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 provides shared contribution task functionality. + */ +trait CRM_Contribute_Form_Task_TaskTrait { + + /** + * Selected IDs for the action. + * + * @var array + */ + protected $ids; + + /** + * Get the results from the BAO_Query object based search. + * + * @return CRM_Core_DAO + * + * @throws \CRM_Core_Exception + */ + public function getSearchQueryResults(): CRM_Core_DAO { + $form = $this; + $queryParams = $this->getQueryParams(); + $returnProperties = ['contribution_id' => 1]; + $sortOrder = $sortCol = NULL; + if ($form->get(CRM_Utils_Sort::SORT_ORDER)) { + $sortOrder = $form->get(CRM_Utils_Sort::SORT_ORDER); + //Include sort column in select clause. + $sortCol = trim(str_replace(['`', 'asc', 'desc'], '', $sortOrder)); + $returnProperties[$sortCol] = 1; + } + + $query = new CRM_Contact_BAO_Query($queryParams, $returnProperties, NULL, FALSE, FALSE, + CRM_Contact_BAO_Query::MODE_CONTRIBUTE + ); + // @todo the function CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled should handle this + // can we remove? if not why not? + if ($this->isQueryIncludesSoftCredits()) { + $query->_rowCountClause = ' count(civicrm_contribution.id)'; + $query->_groupByComponentClause = ' GROUP BY contribution_search_scredit_combined.id, contribution_search_scredit_combined.contact_id, contribution_search_scredit_combined.scredit_id '; + } + else { + $query->_distinctComponentClause = ' civicrm_contribution.id'; + $query->_groupByComponentClause = ' GROUP BY civicrm_contribution.id '; + } + return $query->searchQuery(0, 0, $sortOrder); + } + + /** + * Get the query parameters, adding test = FALSE if needed. + * + * @return array|null + */ + protected function getQueryParams(): ?array { + $queryParams = $this->get('queryParams'); + if (!is_array($queryParams)) { + return NULL; + } + foreach ($queryParams as $fields) { + if ($fields[0] === 'contribution_test') { + return $queryParams; + } + } + $queryParams[] = [ + 'contribution_test', + '=', + 0, + 0, + 0, + ]; + return $queryParams; + } + + /** + * Has soft credit information been requested in the query filters. + * + * @return bool + */ + public function isQueryIncludesSoftCredits(): bool { + return (bool) CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled($this->getQueryParams()); + } + + /** + * Get ids selected for the task. + * + * @return array|bool + * @throws \CRM_Core_Exception + */ + public function getIDs() { + if (!$this->ids) { + $this->ids = $this->calculateIDS(); + } + return $this->ids; + } + + /** + * @return array|bool|string[] + * @throws \CRM_Core_Exception + */ + protected function calculateIDS() { + if ($this->controller->get('id')) { + return explode(',', $this->controller->get('id')); + } + $ids = $this->getSelectedIDs($this->getSearchFormValues()); + if (!$ids) { + $result = $this->getSearchQueryResults(); + while ($result->fetch()) { + $ids[] = $result->contribution_id; + } + } + return $ids; + } + + /** + * Get the clause to add to queries to hone the results. + * + * In practice this generally means the query to limit by selected ids. + * + * @throws \CRM_Core_Exception + */ + public function getComponentClause(): string { + return ' civicrm_contribution.id IN ( ' . implode(',', $this->getIDs()) . ' ) '; + } + +} diff --git a/civicrm/CRM/Core/BAO/ActionSchedule.php b/civicrm/CRM/Core/BAO/ActionSchedule.php index 47fdd617ca..59081a8fa2 100644 --- a/civicrm/CRM/Core/BAO/ActionSchedule.php +++ b/civicrm/CRM/Core/BAO/ActionSchedule.php @@ -506,7 +506,7 @@ FROM civicrm_action_schedule cas 'casMailingJoinType' => ($actionSchedule->limit_to == 0) ? 'LEFT JOIN' : 'INNER JOIN', 'casMappingId' => $mapping->getId(), 'casMappingEntity' => $mapping->getEntity(), - 'casEntityJoinExpr' => 'e.id = reminder.entity_id', + 'casEntityJoinExpr' => 'e.id = IF(reminder.entity_table = "civicrm_contact", reminder.contact_id, reminder.entity_id)', ]); if ($actionSchedule->limit_to == 0) { @@ -588,7 +588,7 @@ FROM civicrm_action_schedule cas $domainValues = CRM_Core_BAO_Domain::getNameAndEmail(); $fromEmailAddress = "$domainValues[0] <$domainValues[1]>"; if ($actionSchedule->from_email) { - $fromEmailAddress = "$actionSchedule->from_name <$actionSchedule->from_email>"; + $fromEmailAddress = "\"$actionSchedule->from_name\" <$actionSchedule->from_email>"; return $fromEmailAddress; } return $fromEmailAddress; diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index b27bad0c39..f45707ca96 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -1994,6 +1994,11 @@ WHERE id IN ( %1, %2 ) } } + // Remove option group IDs from fields changed to Text html_type. + if ($htmlType == 'Text') { + $params['option_group_id'] = ''; + } + // check for orphan option groups if (!empty($params['option_group_id'])) { if (!empty($params['id'])) { diff --git a/civicrm/CRM/Core/BAO/MessageTemplate.php b/civicrm/CRM/Core/BAO/MessageTemplate.php index e64e2639a9..44267824cc 100644 --- a/civicrm/CRM/Core/BAO/MessageTemplate.php +++ b/civicrm/CRM/Core/BAO/MessageTemplate.php @@ -700,18 +700,12 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { * @return array */ public static function renderMessageTemplate(array $mailContent, bool $disableSmarty, $contactID, array $smartyAssigns): array { - if ($contactID) { - // @todo resolve contact ID below - see https://github.com/civicrm/civicrm-core/pull/19550 - // for things to resolve first. - $tokens = self::getTokensToResolve($mailContent); - $mailContent = self::resolveContactTokens($contactID, $tokens, $mailContent, !$disableSmarty); - } CRM_Core_Smarty::singleton()->pushScope($smartyAssigns); $tokenProcessor = new TokenProcessor(\Civi::dispatcher(), ['smarty' => !$disableSmarty]); $tokenProcessor->addMessage('html', $mailContent['html'], 'text/html'); $tokenProcessor->addMessage('text', $mailContent['text'], 'text/plain'); $tokenProcessor->addMessage('subject', $mailContent['subject'], 'text/plain'); - $tokenProcessor->addRow([]); + $tokenProcessor->addRow($contactID ? ['contactId' => $contactID] : []); $tokenProcessor->evaluate(); foreach ($tokenProcessor->getRows() as $row) { $mailContent['html'] = $row->render('html'); @@ -719,7 +713,6 @@ class CRM_Core_BAO_MessageTemplate extends CRM_Core_DAO_MessageTemplate { $mailContent['subject'] = $row->render('subject'); } CRM_Core_Smarty::singleton()->popScope(); - $mailContent['subject'] = trim(preg_replace('/[\r\n]+/', ' ', $mailContent['subject'])); return $mailContent; } diff --git a/civicrm/CRM/Core/BAO/Note.php b/civicrm/CRM/Core/BAO/Note.php index c93215d235..d63d8dea27 100644 --- a/civicrm/CRM/Core/BAO/Note.php +++ b/civicrm/CRM/Core/BAO/Note.php @@ -477,6 +477,7 @@ ORDER BY modified_date desc"; $contact->fetch(); $tree[$note->id]['createdBy'] = $contact->display_name; $tree[$note->id]['createdById'] = $createdById; + $tree[$note->id]['note_date'] = CRM_Utils_Date::customFormat($tree[$note->id]['note_date']); $tree[$note->id]['modified_date'] = CRM_Utils_Date::customFormat($tree[$note->id]['modified_date']); // paper icon view for attachments part diff --git a/civicrm/CRM/Core/BAO/OptionValue.php b/civicrm/CRM/Core/BAO/OptionValue.php index 8b8f669389..4e3a22533d 100644 --- a/civicrm/CRM/Core/BAO/OptionValue.php +++ b/civicrm/CRM/Core/BAO/OptionValue.php @@ -169,6 +169,12 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { $optionValue = new CRM_Core_DAO_OptionValue(); $optionValue->copyValues($params); + $isDomainOptionGroup = in_array($groupName, CRM_Core_OptionGroup::$_domainIDGroups); + if (empty($params['domain_id']) && $isDomainOptionGroup) { + $optionValue->domain_id = CRM_Core_Config::domainID(); + } + + // When setting a default option, unset other options in this group as default if (!empty($params['is_default'])) { $query = 'UPDATE civicrm_option_value SET is_default = 0 WHERE option_group_id = %1'; @@ -182,11 +188,18 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { } $p = [1 => [$params['option_group_id'], 'Integer']]; - CRM_Core_DAO::executeQuery($query, $p); - } - if (empty($params['domain_id']) && in_array($groupName, CRM_Core_OptionGroup::$_domainIDGroups)) { - $optionValue->domain_id = CRM_Core_Config::domainID(); + // Limit update by domain of option + $domain = $optionValue->domain_id ?? NULL; + if (!$domain && $id && $isDomainOptionGroup) { + $domain = CRM_Core_DAO::getFieldValue(__CLASS__, $id, 'domain_id'); + } + if ($domain) { + $query .= ' AND domain_id = %2'; + $p[2] = [$domain, 'Integer']; + } + + CRM_Core_DAO::executeQuery($query, $p); } $groupsSupportingDuplicateValues = ['languages']; diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index b80bc54575..506a971ba7 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -887,10 +887,11 @@ class CRM_Core_DAO extends DB_DataObject { * Otherwise a new record will be created. * * @param array $record - * @return CRM_Core_DAO - * @throws CRM_Core_Exception + * + * @return $this + * @throws \CRM_Core_Exception */ - public static function writeRecord(array $record) { + public static function writeRecord(array $record): CRM_Core_DAO { $hook = empty($record['id']) ? 'create' : 'edit'; $className = CRM_Core_DAO_AllCoreTables::getCanonicalClassName(static::class); if ($className === 'CRM_Core_DAO') { diff --git a/civicrm/CRM/Core/DAO/ActionSchedule.php b/civicrm/CRM/Core/DAO/ActionSchedule.php index e009708710..0838c890f2 100644 --- a/civicrm/CRM/Core/DAO/ActionSchedule.php +++ b/civicrm/CRM/Core/DAO/ActionSchedule.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/ActionSchedule.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:7952a55bbf18fc91af640a130cb79137) + * (GenCodeChecksum:c7e9b07157ed16c2f0cec07607b2c50f) */ /** @@ -997,6 +997,7 @@ class CRM_Core_DAO_ActionSchedule extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified Date"), ], + 'readonly' => TRUE, 'add' => '5.34', ], 'action_schedule_effective_start_date' => [ diff --git a/civicrm/CRM/Core/DAO/Note.php b/civicrm/CRM/Core/DAO/Note.php index 4ce0f51f21..98b294443a 100644 --- a/civicrm/CRM/Core/DAO/Note.php +++ b/civicrm/CRM/Core/DAO/Note.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Core/Note.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:444f6d1cb984753995b61839733abfc8) + * (GenCodeChecksum:ebf209f440bf055a37dae4063938b098) */ /** @@ -72,6 +72,20 @@ class CRM_Core_DAO_Note extends CRM_Core_DAO { */ public $contact_id; + /** + * Date attached to the note + * + * @var timestamp + */ + public $note_date; + + /** + * When the note was created. + * + * @var timestamp + */ + public $created_date; + /** * When was this note last modified/edited * @@ -220,6 +234,37 @@ class CRM_Core_DAO_Note extends CRM_Core_DAO { ], 'add' => '1.1', ], + 'note_date' => [ + 'name' => 'note_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Note Date'), + 'description' => ts('Date attached to the note'), + 'where' => 'civicrm_note.note_date', + 'default' => 'CURRENT_TIMESTAMP', + 'table_name' => 'civicrm_note', + 'entity' => 'Note', + 'bao' => 'CRM_Core_BAO_Note', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select Date', + 'formatType' => 'activityDateTime', + ], + 'add' => '5.36', + ], + 'created_date' => [ + 'name' => 'created_date', + 'type' => CRM_Utils_Type::T_TIMESTAMP, + 'title' => ts('Created Date'), + 'description' => ts('When the note was created.'), + 'required' => TRUE, + 'where' => 'civicrm_note.created_date', + 'default' => 'CURRENT_TIMESTAMP', + 'table_name' => 'civicrm_note', + 'entity' => 'Note', + 'bao' => 'CRM_Core_BAO_Note', + 'localizable' => 0, + 'add' => '5.36', + ], 'modified_date' => [ 'name' => 'modified_date', 'type' => CRM_Utils_Type::T_TIMESTAMP, @@ -231,6 +276,7 @@ class CRM_Core_DAO_Note extends CRM_Core_DAO { 'entity' => 'Note', 'bao' => 'CRM_Core_BAO_Note', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '1.1', ], 'subject' => [ diff --git a/civicrm/CRM/Core/Error.php b/civicrm/CRM/Core/Error.php index 0d15f3006e..6c44df6261 100644 --- a/civicrm/CRM/Core/Error.php +++ b/civicrm/CRM/Core/Error.php @@ -829,7 +829,7 @@ class CRM_Core_Error extends PEAR_ErrorStack { // Exception backtrace if ($e instanceof PEAR_Exception) { $ei = $e; - while (is_callable([$ei, 'getCause'])) { + if (is_callable([$ei, 'getCause'])) { // DB_ERROR doesn't have a getCause but does have a __call function which tricks is_callable. if (!$ei instanceof DB_Error) { if ($ei->getCause() instanceof PEAR_Error) { diff --git a/civicrm/CRM/Core/Form.php b/civicrm/CRM/Core/Form.php index c25e991bdc..84dce6fa35 100644 --- a/civicrm/CRM/Core/Form.php +++ b/civicrm/CRM/Core/Form.php @@ -816,8 +816,8 @@ class CRM_Core_Form extends HTML_QuickForm_Page { /** * @return int */ - public function getPaymentProcessorID() { - return $this->_paymentProcessorID; + public function getPaymentProcessorID(): int { + return (int) $this->_paymentProcessorID; } /** diff --git a/civicrm/CRM/Core/Invoke.php b/civicrm/CRM/Core/Invoke.php index bc537d6b26..6611dc00d5 100644 --- a/civicrm/CRM/Core/Invoke.php +++ b/civicrm/CRM/Core/Invoke.php @@ -394,6 +394,7 @@ class CRM_Core_Invoke { CRM_Utils_Request::retrieve('triggerRebuild', 'Boolean', CRM_Core_DAO::$_nullObject, FALSE, 0, 'GET') ) { CRM_Core_DAO::triggerRebuild(); + $config->userSystem->invalidateRouteCache(); } CRM_Core_DAO_AllCoreTables::reinitializeCache(TRUE); CRM_Core_ManagedEntities::singleton(TRUE)->reconcile(); diff --git a/civicrm/CRM/Core/JobManager.php b/civicrm/CRM/Core/JobManager.php index 604d3ee150..d30646262e 100644 --- a/civicrm/CRM/Core/JobManager.php +++ b/civicrm/CRM/Core/JobManager.php @@ -40,9 +40,6 @@ class CRM_Core_JobManager { * Class constructor. */ public function __construct() { - $config = CRM_Core_Config::singleton(); - $config->fatalErrorHandler = 'CRM_Core_JobManager_scheduledJobFatalErrorHandler'; - $this->jobs = $this->_getJobs(); } @@ -276,12 +273,3 @@ class CRM_Core_JobManager { } } - -/** - * @param $message - * - * @throws Exception - */ -function CRM_Core_JobManager_scheduledJobFatalErrorHandler($message) { - throw new Exception("{$message['message']}: {$message['code']}"); -} diff --git a/civicrm/CRM/Core/Payment.php b/civicrm/CRM/Core/Payment.php index 3d694b7d54..72b407bf2f 100644 --- a/civicrm/CRM/Core/Payment.php +++ b/civicrm/CRM/Core/Payment.php @@ -584,20 +584,10 @@ abstract class CRM_Core_Payment { // not documented clearly above. switch ($context) { case 'contributionPageRecurringHelp': - // require exactly two parameters - if (array_keys($params) == [ - 'is_recur_installments', - 'is_email_receipt', - ]) { - $gotText = ts('Your recurring contribution will be processed automatically.'); - if ($params['is_recur_installments']) { - $gotText .= ' ' . ts('You can specify the number of installments, or you can leave the number of installments blank if you want to make an open-ended commitment. In either case, you can choose to cancel at any time.'); - } - if ($params['is_email_receipt']) { - $gotText .= ' ' . ts('You will receive an email receipt for each recurring contribution.'); - } + if ($params['is_recur_installments']) { + return ts('You can specify the number of installments, or you can leave the number of installments blank if you want to make an open-ended commitment. In either case, you can choose to cancel at any time.'); } - return $gotText; + return ''; case 'contributionPageContinueText': return ts('Click the <strong>Continue</strong> button to proceed with the payment.'); diff --git a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php index 42a744a9b4..70140f6c48 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php @@ -88,9 +88,7 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { if ($isFirstOrLastRecurringPayment) { //send recurring Notification email for user - CRM_Contribute_BAO_ContributionPage::recurringNotify(TRUE, - $contributionRecur->contact_id, - $ids['contributionPage'], + CRM_Contribute_BAO_ContributionPage::recurringNotify($contributionID, TRUE, $contributionRecur, (bool) $this->getMembershipID($contributionID, $contributionRecur->id) ); diff --git a/civicrm/CRM/Core/Payment/PayPalIPN.php b/civicrm/CRM/Core/Payment/PayPalIPN.php index 06888f4fce..6c1d56db99 100644 --- a/civicrm/CRM/Core/Payment/PayPalIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalIPN.php @@ -348,9 +348,9 @@ class CRM_Core_Payment_PayPalIPN extends CRM_Core_Payment_BaseIPN { $this->recur($input, $ids, $contributionRecur, $contribution, $first); if ($this->getFirstOrLastInSeriesStatus()) { //send recurring Notification email for user - CRM_Contribute_BAO_ContributionPage::recurringNotify($this->getFirstOrLastInSeriesStatus(), - $ids['contact'], - $ids['contributionPage'], + CRM_Contribute_BAO_ContributionPage::recurringNotify( + $ids['contribution'], + $this->getFirstOrLastInSeriesStatus(), $contributionRecur, !empty($ids['membership']) ); diff --git a/civicrm/CRM/Core/Payment/PayPalProIPN.php b/civicrm/CRM/Core/Payment/PayPalProIPN.php index 4789c67d35..0ce996e222 100644 --- a/civicrm/CRM/Core/Payment/PayPalProIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalProIPN.php @@ -258,9 +258,9 @@ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { if ($sendNotification) { //send recurring Notification email for user - CRM_Contribute_BAO_ContributionPage::recurringNotify($subscriptionPaymentStatus, - $ids['contact'], - $ids['contributionPage'], + CRM_Contribute_BAO_ContributionPage::recurringNotify( + $ids['contribution'], + $subscriptionPaymentStatus, $recur, !empty($ids['membership']) ); diff --git a/civicrm/CRM/Core/Permission.php b/civicrm/CRM/Core/Permission.php index 1de3147c8a..6966296205 100644 --- a/civicrm/CRM/Core/Permission.php +++ b/civicrm/CRM/Core/Permission.php @@ -585,54 +585,19 @@ class CRM_Core_Permission { * whether to return descriptions * * @return array + * @throws \CRM_Core_Exception */ - public static function assembleBasicPermissions($all = FALSE, $descriptions = FALSE) { - $config = CRM_Core_Config::singleton(); - $prefix = ts('CiviCRM') . ': '; - $permissions = self::getCorePermissions($descriptions); - - if (self::isMultisiteEnabled()) { - $permissions['administer Multiple Organizations'] = [$prefix . ts('administer Multiple Organizations')]; - } + public static function assembleBasicPermissions($all = FALSE, $descriptions = FALSE): array { + $permissions = self::getCoreAndComponentPermissions($all); + // Add any permissions defined in hook_civicrm_permission implementations. + $module_permissions = CRM_Core_Config::singleton()->userPermissionClass->getAllModulePermissions(TRUE, $permissions); + $permissions = array_merge($permissions, $module_permissions); if (!$descriptions) { foreach ($permissions as $name => $attr) { $permissions[$name] = array_shift($attr); } } - if (!$all) { - $components = CRM_Core_Component::getEnabledComponents(); - } - else { - $components = CRM_Core_Component::getComponents(); - } - - foreach ($components as $comp) { - $perm = $comp->getPermissions($all, $descriptions); - if ($perm) { - $info = $comp->getInfo(); - foreach ($perm as $p => $attr) { - - if (!is_array($attr)) { - $attr = [$attr]; - } - - $attr[0] = $info['translatedName'] . ': ' . $attr[0]; - - if ($descriptions) { - $permissions[$p] = $attr; - } - else { - $permissions[$p] = $attr[0]; - } - } - } - } - - // Add any permissions defined in hook_civicrm_permission implementations. - $module_permissions = $config->userPermissionClass->getAllModulePermissions($descriptions); - $permissions = array_merge($permissions, $module_permissions); - CRM_Financial_BAO_FinancialType::permissionedFinancialTypes($permissions, $descriptions); return $permissions; } @@ -909,11 +874,18 @@ class CRM_Core_Permission { 'label' => $prefix . ts('administer CiviCRM Data'), 'description' => ts('Permit altering all restricted data options'), ], + 'all CiviCRM permissions and ACLs' => [ + 'label' => $prefix . ts('all CiviCRM permissions and ACLs'), + 'description' => ts('Administer and use CiviCRM bypassing any other permission or ACL checks and enabling the creation of displays and forms that allow others to bypass checks. This permission should be given out with care'), + ], ]; - foreach (self::getImpliedPermissions() as $name => $includes) { - foreach ($includes as $permission) { - $permissions[$name][] = $permissions[$permission]; - } + if (self::isMultisiteEnabled()) { + // This could arguably be moved to the multisite extension but + // within core it does permit editing group-organization records. + $permissions['administer Multiple Organizations'] = [ + 'label' => $prefix . ts('administer Multiple Organizations'), + 'description' => ts('Administer multiple organizations. In practice this allows editing the group organization link'), + ]; } return $permissions; } @@ -923,11 +895,11 @@ class CRM_Core_Permission { * * @return array */ - public static function getImpliedPermissions() { + public static function getImpliedAdminPermissions(): array { return [ - 'administer CiviCRM' => ['administer CiviCRM system', 'administer CiviCRM data'], - 'administer CiviCRM data' => ['edit message templates', 'administer dedupe rules'], - 'administer CiviCRM system' => ['edit system workflow message templates'], + 'administer CiviCRM' => ['implied_permissions' => ['administer CiviCRM system', 'administer CiviCRM data']], + 'administer CiviCRM data' => ['implied_permissions' => ['edit message templates', 'administer dedupe rules']], + 'administer CiviCRM system' => ['implied_permissions' => ['edit system workflow message templates']], ]; } @@ -938,14 +910,24 @@ class CRM_Core_Permission { * * @return array */ - public static function getImpliedPermissionsFor(string $permission) { - $return = []; - foreach (self::getImpliedPermissions() as $superPermission => $components) { - if (in_array($permission, $components, TRUE)) { - $return[$superPermission] = $superPermission; + public static function getImpliedPermissionsFor(string $permission): array { + if (in_array($permission[0], ['@', '*'], TRUE)) { + // Special permissions like '*always deny*' - see DynamicFKAuthorizationTest. + // Also '@afform - see AfformUsageTest. + return []; + } + $implied = Civi::cache('metadata')->get('implied_permissions', []); + if (isset($implied[$permission])) { + return $implied[$permission]; + } + $implied[$permission] = ['all CiviCRM permissions and ACLs']; + foreach (self::getImpliedAdminPermissions() as $key => $details) { + if (in_array($permission, $details['implied_permissions'] ?? [], TRUE)) { + $implied[$permission][] = $key; } } - return $return; + Civi::cache('metadata')->set('implied_permissions', $implied); + return $implied[$permission]; } /** @@ -1112,6 +1094,7 @@ class CRM_Core_Permission { ], ]; $permissions['case_contact'] = $permissions['case']; + $permissions['case_activity'] = $permissions['case']; $permissions['case_type'] = [ 'default' => ['administer CiviCase'], @@ -1709,4 +1692,54 @@ class CRM_Core_Permission { return FALSE; } + /** + * Get permissions for components. + * + * @param bool $includeDisabled + * + * @return array + * @throws \CRM_Core_Exception + */ + protected static function getComponentPermissions(bool $includeDisabled): array { + if (!$includeDisabled) { + $components = CRM_Core_Component::getEnabledComponents(); + } + else { + $components = CRM_Core_Component::getComponents(); + } + + $permissions = []; + foreach ($components as $comp) { + $perm = $comp->getPermissions($includeDisabled, TRUE); + if ($perm) { + $info = $comp->getInfo(); + foreach ($perm as $p => $attr) { + + if (!is_array($attr)) { + $attr = [$attr]; + } + + $attr[0] = $info['translatedName'] . ': ' . $attr[0]; + $permissions[$p] = $attr; + } + } + } + return $permissions; + } + + /** + * Get permissions for core functionality and for that of core components. + * + * @param bool $all + * + * @return array + * @throws \CRM_Core_Exception + */ + protected static function getCoreAndComponentPermissions(bool $all): array { + $permissions = self::getCorePermissions(); + $permissions = array_merge($permissions, self::getComponentPermissions($all)); + $permissions['all CiviCRM permissions and ACLs']['implied_permissions'] = array_keys($permissions); + return $permissions; + } + } diff --git a/civicrm/CRM/Core/Permission/Base.php b/civicrm/CRM/Core/Permission/Base.php index 1ceae88d7e..60ffbe3c9e 100644 --- a/civicrm/CRM/Core/Permission/Base.php +++ b/civicrm/CRM/Core/Permission/Base.php @@ -57,7 +57,7 @@ class CRM_Core_Permission_Base { * a permission name */ public function translatePermission($perm, $nativePrefix, $map) { - list ($civiPrefix, $name) = CRM_Utils_String::parsePrefix(':', $perm, NULL); + [$civiPrefix, $name] = CRM_Utils_String::parsePrefix(':', $perm, NULL); switch ($civiPrefix) { case $nativePrefix: return $name; @@ -272,9 +272,12 @@ class CRM_Core_Permission_Base { * The permission to check. * @param int $userId * + * @return bool; + * */ public function check($str, $userId = NULL) { //no default behaviour + return FALSE; } /** @@ -374,7 +377,7 @@ class CRM_Core_Permission_Base { * Array of permissions, in the same format as CRM_Core_Permission::getCorePermissions(). * @see CRM_Core_Permission::getCorePermissions */ - public static function getModulePermissions($module) { + public function getModulePermissions($module): array { $return_permissions = []; $fn_name = "{$module}_civicrm_permission"; if (function_exists($fn_name)) { @@ -390,13 +393,15 @@ class CRM_Core_Permission_Base { * in all enabled CiviCRM module extensions. * * @param bool $descriptions + * @param array $permissions * * @return array * Array of permissions, in the same format as CRM_Core_Permission::getCorePermissions(). */ - public function getAllModulePermissions($descriptions = FALSE) { - $permissions = []; - CRM_Utils_Hook::permission($permissions); + public function getAllModulePermissions($descriptions = FALSE, &$permissions): array { + $newPermissions = []; + CRM_Utils_Hook::permission($newPermissions, $permissions); + $permissions = array_merge($permissions, $newPermissions); if ($descriptions) { foreach ($permissions as $permission => $label) { @@ -404,6 +409,7 @@ class CRM_Core_Permission_Base { } } else { + // Passing in false here is to be deprecated. foreach ($permissions as $permission => $label) { $permissions[$permission] = (is_array($label)) ? array_shift($label) : $label; } diff --git a/civicrm/CRM/Core/Permission/Drupal6.php b/civicrm/CRM/Core/Permission/Drupal6.php index 2ff671fb09..d478f09b5d 100644 --- a/civicrm/CRM/Core/Permission/Drupal6.php +++ b/civicrm/CRM/Core/Permission/Drupal6.php @@ -192,7 +192,7 @@ class CRM_Core_Permission_Drupal6 extends CRM_Core_Permission_DrupalBase { * @return array * Array of permissions, in the same format as CRM_Core_Permission::getCorePermissions(). */ - public static function getModulePermissions($module) { + public function getModulePermissions($module):array { $return_permissions = []; $fn_name = "{$module}_civicrm_permission"; if (function_exists($fn_name)) { diff --git a/civicrm/CRM/Core/Permission/Drupal8.php b/civicrm/CRM/Core/Permission/Drupal8.php index 65112da464..add83a00f3 100644 --- a/civicrm/CRM/Core/Permission/Drupal8.php +++ b/civicrm/CRM/Core/Permission/Drupal8.php @@ -109,6 +109,7 @@ class CRM_Core_Permission_Drupal8 extends CRM_Core_Permission_DrupalBase { * @inheritDoc */ public function upgradePermissions($permissions) { + // @todo - this should probably call getCoreAndComponentPermissions. $civicrm_perms = array_keys(CRM_Core_Permission::getCorePermissions()); if (empty($civicrm_perms)) { throw new CRM_Core_Exception("Cannot upgrade permissions: permission list missing"); diff --git a/civicrm/CRM/Core/Permission/WordPress.php b/civicrm/CRM/Core/Permission/WordPress.php index 3325d0fc11..03eeb9be3b 100644 --- a/civicrm/CRM/Core/Permission/WordPress.php +++ b/civicrm/CRM/Core/Permission/WordPress.php @@ -76,10 +76,8 @@ class CRM_Core_Permission_WordPress extends CRM_Core_Permission_Base { else { //check the capabilities of Anonymous user) $roleObj = new WP_Roles(); - if ( - $roleObj->get_role('anonymous_user') != NULL && - array_key_exists($str, $roleObj->get_role('anonymous_user')->capabilities) - ) { + $anonObj = $roleObj->get_role('anonymous_user'); + if (!empty($anonObj->capabilities) && array_key_exists($str, $anonObj->capabilities)) { return TRUE; } } diff --git a/civicrm/CRM/Core/Region.php b/civicrm/CRM/Core/Region.php index c7eab5c584..4d9f733068 100644 --- a/civicrm/CRM/Core/Region.php +++ b/civicrm/CRM/Core/Region.php @@ -61,6 +61,8 @@ class CRM_Core_Region implements CRM_Core_Resources_CollectionInterface, CRM_Cor $this->snippets['default']['markup'] = $default; } + Civi::dispatcher()->dispatch('civi.region.render', \Civi\Core\Event\GenericHookEvent::create(['region' => $this])); + $this->sort(); $cms = CRM_Core_Config::singleton()->userSystem; diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index 46c06ea3ec..4ebec39596 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -619,6 +619,9 @@ class CRM_Core_SelectValues { 'legal_identifier', 'contact_sub_type', 'user_unique_id', + 'addressee_id', + 'email_greeting_id', + 'postal_greeting_id', ]; $customFields = CRM_Core_BAO_CustomField::getFields(['Individual', 'Address']); diff --git a/civicrm/CRM/Core/xml/Menu/Admin.xml b/civicrm/CRM/Core/xml/Menu/Admin.xml index 245b7ae549..9f8a9e0820 100644 --- a/civicrm/CRM/Core/xml/Menu/Admin.xml +++ b/civicrm/CRM/Core/xml/Menu/Admin.xml @@ -428,8 +428,8 @@ </item> <item> <path>civicrm/admin/setting/misc</path> - <title>Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)</title> - <desc>Enable undelete/move to trash feature, detailed change logging, ReCAPTCHA to protect forms.</desc> + <title>Misc (Undelete, PDFs, Limits, Logging, etc.)</title> + <desc>Enable undelete/move to trash feature, detailed change logging.</desc> <page_callback>CRM_Admin_Form_Setting_Miscellaneous</page_callback> <adminGroup>System Settings</adminGroup> <weight>50</weight> diff --git a/civicrm/CRM/Cxn/DAO/Cxn.php b/civicrm/CRM/Cxn/DAO/Cxn.php index 1faef0c488..ff419f5a4c 100644 --- a/civicrm/CRM/Cxn/DAO/Cxn.php +++ b/civicrm/CRM/Cxn/DAO/Cxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Cxn/Cxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:157ccfb9fab7c31b02b22cf6d79fe686) + * (GenCodeChecksum:f0b3443764bfbda8d074ee79657d33b7) */ /** @@ -281,6 +281,7 @@ class CRM_Cxn_DAO_Cxn extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified Date"), ], + 'readonly' => TRUE, 'add' => '4.6', ], 'fetched_date' => [ diff --git a/civicrm/CRM/Dedupe/BAO/Rule.php b/civicrm/CRM/Dedupe/BAO/Rule.php index b695d18b6e..6b7f63be7b 100644 --- a/civicrm/CRM/Dedupe/BAO/Rule.php +++ b/civicrm/CRM/Dedupe/BAO/Rule.php @@ -65,11 +65,8 @@ class CRM_Dedupe_BAO_Rule extends CRM_Dedupe_DAO_Rule { "t2.{$this->rule_field} IS NOT NULL", "t1.{$this->rule_field} = t2.{$this->rule_field}", ]; - if ($this->getFieldType($this->rule_field) === CRM_Utils_Type::T_DATE) { - $innerJoinClauses[] = "t1.{$this->rule_field} > '1000-01-01'"; - $innerJoinClauses[] = "t2.{$this->rule_field} > '1000-01-01'"; - } - else { + + if (in_array($this->getFieldType($this->rule_field), CRM_Utils_Type::getTextTypes(), TRUE)) { $innerJoinClauses[] = "t1.{$this->rule_field} <> ''"; $innerJoinClauses[] = "t2.{$this->rule_field} <> ''"; } diff --git a/civicrm/CRM/Dedupe/MergeHandler.php b/civicrm/CRM/Dedupe/MergeHandler.php index cb0d64ebac..5c40923ed9 100644 --- a/civicrm/CRM/Dedupe/MergeHandler.php +++ b/civicrm/CRM/Dedupe/MergeHandler.php @@ -359,4 +359,110 @@ class CRM_Dedupe_MergeHandler { return $this->getMigrationInfo()['location_blocks'][$entity][$blockIndex]['typeTypeId'] ?? NULL; } + /** + * Merge location. + * + * Based on the data in the $locationMigrationInfo merge the locations for 2 contacts. + * + * The data is in the format received from the merge form (which is a fairly confusing format). + * + * It is converted into an array of DAOs which is passed to the alterLocationMergeData hook + * before saving or deleting the DAOs. A new hook is added to allow these to be altered after they have + * been calculated and before saving because + * - the existing format & hook combo is so confusing it is hard for developers to change & inherently fragile + * - passing to a hook right before save means calculations only have to be done once + * - the existing pattern of passing dissimilar data to the same (merge) hook with a different 'type' is just + * ugly. + * + * The use of the new hook is tested, including the fact it is called before contributions are merged, as this + * is likely to be significant data in merge hooks. + * + * @throws \CRM_Core_Exception + */ + public function mergeLocations(): void { + $locBlocks = $this->getLocationBlocksToMerge(); + $blocksDAO = []; + $migrationInfo = $this->getMigrationInfo(); + + // @todo Handle OpenID (not currently in API). + if (!empty($locBlocks)) { + + $primaryBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($this->getToKeepID(), ['is_primary' => 1]); + $billingBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($this->getToKeepID(), ['is_billing' => 1]); + + foreach ($locBlocks as $name => $block) { + $blocksDAO[$name] = ['delete' => [], 'update' => []]; + $changePrimary = FALSE; + $primaryDAOId = (array_key_exists($name, $primaryBlockIds)) ? array_pop($primaryBlockIds[$name]) : NULL; + $billingDAOId = (array_key_exists($name, $billingBlockIds)) ? array_pop($billingBlockIds[$name]) : NULL; + + foreach ($block as $blkCount => $values) { + $otherBlockId = $migrationInfo['other_details']['location_blocks'][$name][$blkCount]['id'] ?? NULL; + $mainBlockId = CRM_Utils_Array::value('mainContactBlockId', $migrationInfo['location_blocks'][$name][$blkCount], 0); + if (!$otherBlockId) { + continue; + } + $otherBlockDAO = $this->copyDataToNewBlockDAO($otherBlockId, $name, $blkCount); + + // If we're deliberately setting this as primary then add the flag + // and remove it from the current primary location (if there is one). + // But only once for each entity. + $set_primary = $migrationInfo['location_blocks'][$name][$blkCount]['set_other_primary'] ?? NULL; + if (!$changePrimary && $set_primary == "1") { + $otherBlockDAO->is_primary = 1; + if ($primaryDAOId) { + $removePrimaryDAO = $this->getDAOForLocationEntity($name); + $removePrimaryDAO->id = $primaryDAOId; + $removePrimaryDAO->is_primary = 0; + $blocksDAO[$name]['update'][$primaryDAOId] = $removePrimaryDAO; + } + $changePrimary = TRUE; + } + // Otherwise, if main contact already has primary, set it to 0. + elseif ($primaryDAOId) { + $otherBlockDAO->is_primary = 0; + } + + // If the main contact already has a billing location, set this to 0. + if ($billingDAOId) { + $otherBlockDAO->is_billing = 0; + } + + // overwrite - need to delete block which belongs to main-contact. + if (!empty($mainBlockId) && $values['is_replace']) { + $deleteDAO = $this->getDAOForLocationEntity($name); + $deleteDAO->id = $mainBlockId; + $deleteDAO->find(TRUE); + + // if we about to delete a primary / billing block, set the flags for new block + // that we going to assign to main-contact + if ($primaryDAOId && ($primaryDAOId == $deleteDAO->id)) { + $otherBlockDAO->is_primary = 1; + } + if ($billingDAOId && ($billingDAOId == $deleteDAO->id)) { + $otherBlockDAO->is_billing = 1; + } + $blocksDAO[$name]['delete'][$deleteDAO->id] = $deleteDAO; + } + $blocksDAO[$name]['update'][$otherBlockDAO->id] = $otherBlockDAO; + } + $blocksDAO[$name]['update'] += $this->getBlocksToUpdateForDeletedContact($name); + } + } + + CRM_Utils_Hook::alterLocationMergeData($blocksDAO, $this->getToKeepID(), $this->getToRemoveID(), $migrationInfo); + foreach ($blocksDAO as $blockDAOs) { + if (!empty($blockDAOs['update'])) { + foreach ($blockDAOs['update'] as $blockDAO) { + $blockDAO->save(); + } + } + if (!empty($blockDAOs['delete'])) { + foreach ($blockDAOs['delete'] as $blockDAO) { + $blockDAO->delete(); + } + } + } + } + } diff --git a/civicrm/CRM/Dedupe/Merger.php b/civicrm/CRM/Dedupe/Merger.php index 90c6a67588..2205d938e7 100644 --- a/civicrm/CRM/Dedupe/Merger.php +++ b/civicrm/CRM/Dedupe/Merger.php @@ -503,6 +503,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $cpTables = self::cpTables(); $paymentTables = self::paymentTables(); self::filterRowBasedCustomDataFromCustomTables($cidRefs); + $multiValueCidRefs = self::getMultiValueCidRefs(); $affected = array_merge(array_keys($cidRefs), array_keys($eidRefs)); @@ -581,7 +582,14 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $preOperationSqls = self::operationSql($mainId, $otherId, $table, $tableOperations); $sqls = array_merge($sqls, $preOperationSqls); - $sqls[] = "UPDATE $table SET $field = $mainId WHERE $field = $otherId"; + + if (!empty($multiValueCidRefs[$table][$field])) { + $sep = CRM_Core_DAO::VALUE_SEPARATOR; + $sqls[] = "UPDATE $table SET $field = REPLACE($field, '$sep$otherId$sep', '$sep$mainId$sep') WHERE $field LIKE '%$sep$otherId$sep%'"; + } + else { + $sqls[] = "UPDATE $table SET $field = $mainId WHERE $field = $otherId"; + } } } @@ -637,6 +645,28 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } } + /** + * Return an array of tables & fields which hold serialized arrays of contact ids + * + * Return format is ['table_name' => ['field_name' => SERIALIZE_METHOD]] + * + * For now, only custom fields can be serialized and the only + * method used is CRM_Core_DAO::SERIALIZE_SEPARATOR_BOOKEND. + */ + protected static function getMultiValueCidRefs() { + $fields = \Civi\Api4\CustomField::get(FALSE) + ->addSelect('custom_group.table_name', 'column_name', 'serialize') + ->addWhere('data_type', '=', 'ContactReference') + ->addWhere('serialize', 'IS NOT EMPTY') + ->execute(); + + $map = []; + foreach ($fields as $field) { + $map[$field['custom_group.table_name']][$field['column_name']] = $field['serialize']; + } + return $map; + } + /** * Update the contact with the new parameters. * @@ -657,37 +687,10 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m // This parameter causes blank fields to be be emptied out. // We can probably remove. $params['updateBlankLocInfo'] = TRUE; - list($data) = CRM_Contact_BAO_Contact::formatProfileContactParams($params, [], $contactID); + [$data] = CRM_Contact_BAO_Contact::formatProfileContactParams($params, [], $contactID); CRM_Contact_BAO_Contact::create($data); } - /** - * Given a contact ID, will check if a record exists in given table. - * - * @param int $contactID - * @param string $table - * @param string $idField - * Field where the contact's ID is stored in the table - * - * @return bool - * True if a record is found for the given contact ID, false otherwise - */ - private static function customRecordExists($contactID, $table, $idField) { - $sql = " - SELECT COUNT(*) AS count - FROM $table - WHERE $idField = $contactID - "; - $dbResult = CRM_Core_DAO::executeQuery($sql); - $dbResult->fetch(); - - if ($dbResult->count > 0) { - return TRUE; - } - - return FALSE; - } - /** * Load all non-empty fields for the contacts * @@ -1021,7 +1024,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m */ public static function skipMerge($mainId, $otherId, &$migrationInfo, $mode = 'safe', &$conflicts = []) { - $conflicts = self::getConflicts($migrationInfo, $mainId, $otherId, $mode)['conflicts']; + $conflicts = self::getConflicts($migrationInfo, (int) $mainId, (int) $otherId, $mode)['conflicts']; // A hook could have set skip_merge in order to alter merge behaviour. // This is a something we might ideally deprecate since they really 'should' // mess with the conflicts array instead. @@ -1176,7 +1179,6 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception - * @throws \Exception */ public static function getRowsElementsAndInfo($mainId, $otherId, $checkPermissions = TRUE) { $qfZeroBug = 'e8cddb72-a257-11dc-b9cc-0016d3330ee9'; @@ -1237,7 +1239,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $locations = ['main' => [], 'other' => []]; foreach ($locationBlocks as $blockName => $blockInfo) { - list($locations, $rows, $elements, $migrationInfo) = self::addLocationFieldInfo($mainId, $otherId, $blockInfo, $blockName, $locations, $rows, $elements, $migrationInfo); + [$locations, $rows, $elements, $migrationInfo] = self::addLocationFieldInfo($mainId, $otherId, $blockInfo, $blockName, $locations, $rows, $elements, $migrationInfo); } // End loop through each location block entity // add the related tables and unset the ones that don't sport any of the duplicate contact's info @@ -1402,7 +1404,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } $mergeHandler = new CRM_Dedupe_MergeHandler((int) $mainId, (int) $otherId); $mergeHandler->setMigrationInfo($migrationInfo); - self::mergeLocations($mergeHandler); + $mergeHandler->mergeLocations(); // **** Do contact related migrations // @todo - move all custom field processing to the move class & eventually have an @@ -1455,7 +1457,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $submitted = []; } foreach ($submitted as $key => $value) { - list($cFields, $submitted) = self::processCustomFields($mainId, $key, $cFields, $submitted, $value); + [$cFields, $submitted] = self::processCustomFields($mainId, $key, $cFields, $submitted, $value); } // move view only custom fields CRM-5362 @@ -1771,114 +1773,6 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m return $result['values'][$contact_id]; } - /** - * Merge location. - * - * Based on the data in the $locationMigrationInfo merge the locations for 2 contacts. - * - * The data is in the format received from the merge form (which is a fairly confusing format). - * - * It is converted into an array of DAOs which is passed to the alterLocationMergeData hook - * before saving or deleting the DAOs. A new hook is added to allow these to be altered after they have - * been calculated and before saving because - * - the existing format & hook combo is so confusing it is hard for developers to change & inherently fragile - * - passing to a hook right before save means calculations only have to be done once - * - the existing pattern of passing dissimilar data to the same (merge) hook with a different 'type' is just - * ugly. - * - * The use of the new hook is tested, including the fact it is called before contributions are merged, as this - * is likely to be significant data in merge hooks. - * - * @param \CRM_Dedupe_MergeHandler $mergeHandler - */ - public static function mergeLocations($mergeHandler) { - $locBlocks = $mergeHandler->getLocationBlocksToMerge(); - $blocksDAO = []; - $migrationInfo = $mergeHandler->getMigrationInfo(); - - // @todo Handle OpenID (not currently in API). - if (!empty($locBlocks)) { - $locationBlocks = self::getLocationBlockInfo(); - - $primaryBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($mergeHandler->getToKeepID(), ['is_primary' => 1]); - $billingBlockIds = CRM_Contact_BAO_Contact::getLocBlockIds($mergeHandler->getToKeepID(), ['is_billing' => 1]); - - foreach ($locBlocks as $name => $block) { - $blocksDAO[$name] = ['delete' => [], 'update' => []]; - $daoName = 'CRM_Core_DAO_' . $locationBlocks[$name]['label']; - $changePrimary = FALSE; - $primaryDAOId = (array_key_exists($name, $primaryBlockIds)) ? array_pop($primaryBlockIds[$name]) : NULL; - $billingDAOId = (array_key_exists($name, $billingBlockIds)) ? array_pop($billingBlockIds[$name]) : NULL; - - foreach ($block as $blkCount => $values) { - $otherBlockId = $migrationInfo['other_details']['location_blocks'][$name][$blkCount]['id'] ?? NULL; - $mainBlockId = CRM_Utils_Array::value('mainContactBlockId', $migrationInfo['location_blocks'][$name][$blkCount], 0); - if (!$otherBlockId) { - continue; - } - $otherBlockDAO = $mergeHandler->copyDataToNewBlockDAO($otherBlockId, $name, $blkCount); - - // If we're deliberately setting this as primary then add the flag - // and remove it from the current primary location (if there is one). - // But only once for each entity. - $set_primary = $migrationInfo['location_blocks'][$name][$blkCount]['set_other_primary'] ?? NULL; - if (!$changePrimary && $set_primary == "1") { - $otherBlockDAO->is_primary = 1; - if ($primaryDAOId) { - $removePrimaryDAO = $mergeHandler->getDAOForLocationEntity($name); - $removePrimaryDAO->id = $primaryDAOId; - $removePrimaryDAO->is_primary = 0; - $blocksDAO[$name]['update'][$primaryDAOId] = $removePrimaryDAO; - } - $changePrimary = TRUE; - } - // Otherwise, if main contact already has primary, set it to 0. - elseif ($primaryDAOId) { - $otherBlockDAO->is_primary = 0; - } - - // If the main contact already has a billing location, set this to 0. - if ($billingDAOId) { - $otherBlockDAO->is_billing = 0; - } - - // overwrite - need to delete block which belongs to main-contact. - if (!empty($mainBlockId) && $values['is_replace']) { - $deleteDAO = $mergeHandler->getDAOForLocationEntity($name); - $deleteDAO->id = $mainBlockId; - $deleteDAO->find(TRUE); - - // if we about to delete a primary / billing block, set the flags for new block - // that we going to assign to main-contact - if ($primaryDAOId && ($primaryDAOId == $deleteDAO->id)) { - $otherBlockDAO->is_primary = 1; - } - if ($billingDAOId && ($billingDAOId == $deleteDAO->id)) { - $otherBlockDAO->is_billing = 1; - } - $blocksDAO[$name]['delete'][$deleteDAO->id] = $deleteDAO; - } - $blocksDAO[$name]['update'][$otherBlockDAO->id] = $otherBlockDAO; - } - $blocksDAO[$name]['update'] += $mergeHandler->getBlocksToUpdateForDeletedContact($name); - } - } - - CRM_Utils_Hook::alterLocationMergeData($blocksDAO, $mergeHandler->getToKeepID(), $mergeHandler->getToRemoveID(), $migrationInfo); - foreach ($blocksDAO as $blockDAOs) { - if (!empty($blockDAOs['update'])) { - foreach ($blockDAOs['update'] as $blockDAO) { - $blockDAO->save(); - } - } - if (!empty($blockDAOs['delete'])) { - foreach ($blockDAOs['delete'] as $blockDAO) { - $blockDAO->delete(); - } - } - } - } - /** * Dedupe a pair of contacts. * @@ -2120,7 +2014,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public static function getConflicts(&$migrationInfo, $mainId, $otherId, $mode) { + public static function getConflicts(array &$migrationInfo, int $mainId, int $otherId, string $mode): array { $conflicts = []; // Generate var $migrationInfo. The variable structure is exactly same as // $formValues submitted during a UI merge for a pair of contacts. @@ -2139,8 +2033,8 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m continue; } elseif ((in_array(substr($key, 5), CRM_Dedupe_Merger::getContactFields()) or - substr($key, 0, 12) === 'move_custom_' - ) and $val != NULL + strpos($key, 'move_custom_') === 0 + ) and $val !== NULL ) { // Rule: If both main-contact, and other-contact have a field with a // different value, then let $mode decide if to merge it or not diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index 750d2d372b..267a00644f 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -1231,10 +1231,8 @@ WHERE civicrm_event.is_active = 1 $sendTemplateParams['bcc'] = CRM_Utils_Array::value('bcc_confirm', $values['event'] ); - // append invoice pdf to email - $prefixValue = Civi::settings()->get('contribution_invoice_settings'); - $invoicing = $prefixValue['invoicing'] ?? NULL; - if (isset($invoicing) && isset($prefixValue['is_email_pdf']) && !empty($values['contributionId'])) { + + if (Civi::settings()->get('invoicing') && Civi::settings()->get('invoice_is_email_pdf') && !empty($values['contributionId'])) { $sendTemplateParams['isEmailPdf'] = TRUE; $sendTemplateParams['contributionId'] = $values['contributionId']; } @@ -1322,7 +1320,7 @@ WHERE civicrm_event.is_active = 1 $groupTitle = NULL; foreach ($fields as $k => $v) { if (!$groupTitle) { - $groupTitle = $v['groupTitle']; + $groupTitle = $v['groupDisplayTitle']; } // suppress all file fields from display if ( diff --git a/civicrm/CRM/Event/BAO/Participant.php b/civicrm/CRM/Event/BAO/Participant.php index d287f8fb9d..d4a44a57a2 100644 --- a/civicrm/CRM/Event/BAO/Participant.php +++ b/civicrm/CRM/Event/BAO/Participant.php @@ -80,10 +80,6 @@ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { $params['participant_fee_amount'] = CRM_Utils_Rule::cleanMoney($params['participant_fee_amount']); } - if (!empty($params['fee_amount'])) { - $params['fee_amount'] = CRM_Utils_Rule::cleanMoney($params['fee_amount']); - } - // ensure that role ids are encoded as a string if (isset($params['role_id']) && is_array($params['role_id'])) { if (in_array(key($params['role_id']), CRM_Core_DAO::acceptedSQLOperators(), TRUE)) { @@ -1902,7 +1898,7 @@ WHERE civicrm_participant.contact_id = {$contactID} AND $eventTitle = $dao->title; $eventId = $dao->event_id; } - if (!$details['allow_selfcancelxfer']) { + if (!$details['allow_selfcancelxfer'] && !$isBackOffice) { $details['eligible'] = FALSE; $details['ineligible_message'] = ts('This event registration can not be transferred or cancelled. Contact the event organizer if you have questions.'); return $details; diff --git a/civicrm/CRM/Export/BAO/ExportProcessor.php b/civicrm/CRM/Export/BAO/ExportProcessor.php index 3ba681e456..fff50a8dad 100644 --- a/civicrm/CRM/Export/BAO/ExportProcessor.php +++ b/civicrm/CRM/Export/BAO/ExportProcessor.php @@ -1120,6 +1120,11 @@ class CRM_Export_BAO_ExportProcessor { return $result['values'][$result['id']]['url']; } + // Do not export HTML markup for links + if ($html_type === 'Link' && $fieldValue) { + return $fieldValue; + } + return CRM_Core_BAO_CustomField::displayValue($fieldValue, $cfID); } elseif (in_array($field, [ @@ -1453,7 +1458,9 @@ class CRM_Export_BAO_ExportProcessor { if (in_array(CRM_Utils_Array::value('data_type', $fieldSpec), ['Country', 'StateProvince', 'ContactReference'])) { return "`$fieldName` varchar(255)"; } - return "`$fieldName` varchar(16)"; + // some of those will be exported as a (localisable) string + // @see https://lab.civicrm.org/dev/core/-/issues/2164 + return "`$fieldName` varchar(64)"; case CRM_Utils_Type::T_STRING: if (isset($fieldSpec['maxlength'])) { diff --git a/civicrm/CRM/Export/Form/Map.php b/civicrm/CRM/Export/Form/Map.php index 9e4e5fbaf1..4bbc28bbc5 100644 --- a/civicrm/CRM/Export/Form/Map.php +++ b/civicrm/CRM/Export/Form/Map.php @@ -69,10 +69,9 @@ class CRM_Export_Form_Map extends CRM_Core_Form { ], ]); - // Bootstrap angular and load exportui app - $loader = new Civi\Angular\AngularLoader(); - $loader->setModules(['exportui']); - $loader->load(); + // Add exportui app + Civi::service('angularjs.loader') + ->addModules('exportui'); } public function buildQuickForm() { diff --git a/civicrm/CRM/Extension/ClassLoader.php b/civicrm/CRM/Extension/ClassLoader.php index 2e181a8877..5b0f30725e 100644 --- a/civicrm/CRM/Extension/ClassLoader.php +++ b/civicrm/CRM/Extension/ClassLoader.php @@ -14,6 +14,13 @@ */ class CRM_Extension_ClassLoader { + /** + * List of class-loader features that are valid in this version of Civi. + * + * This may be useful for some extensions which enable/disable polyfills based on environment. + */ + const FEATURES = ',psr0,psr4,'; + /** * @var CRM_Extension_Mapper */ @@ -92,6 +99,10 @@ class CRM_Extension_ClassLoader { if (!empty($info->classloader)) { foreach ($info->classloader as $mapping) { switch ($mapping['type']) { + case 'psr0': + $loader->add($mapping['prefix'], CRM_Utils_File::addTrailingSlash($path . '/' . $mapping['path'])); + break; + case 'psr4': $loader->addPsr4($mapping['prefix'], $path . '/' . $mapping['path']); break; diff --git a/civicrm/CRM/Extension/Info.php b/civicrm/CRM/Extension/Info.php index 7a0683be43..67a58af265 100644 --- a/civicrm/CRM/Extension/Info.php +++ b/civicrm/CRM/Extension/Info.php @@ -175,6 +175,13 @@ class CRM_Extension_Info { 'path' => (string) $psr4->attributes()->path, ]; } + foreach ($val->psr0 as $psr0) { + $this->classloader[] = [ + 'type' => 'psr0', + 'prefix' => (string) $psr0->attributes()->prefix, + 'path' => (string) $psr0->attributes()->path, + ]; + } } elseif ($attr === 'tags') { $this->tags = []; diff --git a/civicrm/CRM/Financial/BAO/EntityFinancialAccount.php b/civicrm/CRM/Financial/BAO/EntityFinancialAccount.php new file mode 100644 index 0000000000..1449091204 --- /dev/null +++ b/civicrm/CRM/Financial/BAO/EntityFinancialAccount.php @@ -0,0 +1,32 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ +class CRM_Financial_BAO_EntityFinancialAccount extends CRM_Financial_DAO_EntityFinancialAccount { + + /** + * Whitelist of possible values for the entity_table field + * + * @return array + */ + public static function entityTables(): array { + return [ + 'civicrm_financial_type' => ts('Financial Type'), + 'civicrm_option_value' => ts('Payment Instrument'), + 'civicrm_payment_processor' => ts('Payment Processor'), + ]; + } + +} diff --git a/civicrm/CRM/Financial/BAO/EntityFinancialTrxn.php b/civicrm/CRM/Financial/BAO/EntityFinancialTrxn.php new file mode 100644 index 0000000000..3058b97549 --- /dev/null +++ b/civicrm/CRM/Financial/BAO/EntityFinancialTrxn.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 | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ +class CRM_Financial_BAO_EntityFinancialTrxn extends CRM_Financial_DAO_EntityFinancialTrxn { + + /** + * Whitelist of possible values for the entity_table field + * + * @return array + */ + public static function entityTables(): array { + return [ + 'civicrm_contribution' => ts('Contribution'), + 'civicrm_financial_item' => ts('Financial Item'), + ]; + } + +} diff --git a/civicrm/CRM/Financial/BAO/FinancialAccount.php b/civicrm/CRM/Financial/BAO/FinancialAccount.php index 32fe022f82..0fc9b58d9b 100644 --- a/civicrm/CRM/Financial/BAO/FinancialAccount.php +++ b/civicrm/CRM/Financial/BAO/FinancialAccount.php @@ -375,13 +375,13 @@ LIMIT 1"; * @param int $contributionID * Contribution ID * - * @param array $priceSetFields - * Array of price fields of a price set. + * @param array $orderLineItems + * The line items from the Order. * * @return bool * */ - public static function checkFinancialTypeHasDeferred($params, $contributionID = NULL, $priceSetFields = NULL) { + public static function checkFinancialTypeHasDeferred($params, $contributionID = NULL, $orderLineItems = []) { if (!Civi::settings()->get('deferred_revenue_enabled')) { return FALSE; } @@ -399,16 +399,7 @@ LIMIT 1"; $financialTypeID = $params['prevContribution']->financial_type_id; } if (($contributionID || !empty($params['price_set_id'])) && empty($lineItems)) { - if (!$contributionID) { - CRM_Price_BAO_PriceSet::processAmount($priceSetFields, - $params, $items); - } - else { - $items = CRM_Price_BAO_LineItem::getLineItems($contributionID, 'contribution', TRUE, TRUE, TRUE); - } - if (!empty($items)) { - $lineItems[] = $items; - } + $lineItems[] = $orderLineItems; } $deferredFinancialType = self::getDeferredFinancialType(); $isError = FALSE; diff --git a/civicrm/CRM/Financial/BAO/FinancialType.php b/civicrm/CRM/Financial/BAO/FinancialType.php index 7a31cc66c6..9003eb8d16 100644 --- a/civicrm/CRM/Financial/BAO/FinancialType.php +++ b/civicrm/CRM/Financial/BAO/FinancialType.php @@ -200,6 +200,7 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { * @return bool */ public static function permissionedFinancialTypes(&$permissions, $descriptions) { + CRM_Core_Error::deprecatedFunctionWarning('not done via hook.'); if (!self::isACLFinancialTypeStatus()) { return FALSE; } diff --git a/civicrm/CRM/Financial/BAO/Order.php b/civicrm/CRM/Financial/BAO/Order.php index 66cfdc2104..d4916e7e4e 100644 --- a/civicrm/CRM/Financial/BAO/Order.php +++ b/civicrm/CRM/Financial/BAO/Order.php @@ -78,6 +78,13 @@ class CRM_Financial_BAO_Order { */ protected $priceFieldMetadata = []; + /** + * Metadata for price sets. + * + * @var array + */ + protected $priceSetMetadata = []; + /** * Get form object. * @@ -245,7 +252,7 @@ class CRM_Financial_BAO_Order { */ public function getPriceFieldsMetadata(): array { if (empty($this->priceFieldMetadata)) { - $this->priceFieldMetadata = CRM_Price_BAO_PriceSet::getCachedPriceSetDetail($this->getPriceSetID())['fields']; + $this->getPriceSetMetadata(); if ($this->getForm()) { CRM_Utils_Hook::buildAmount($this->form->getFormContext(), $this->form, $this->priceFieldMetadata); } @@ -253,6 +260,32 @@ class CRM_Financial_BAO_Order { return $this->priceFieldMetadata; } + /** + * Get the metadata for the fields in the price set. + * + * @return array + */ + public function getPriceSetMetadata(): array { + if (empty($this->priceSetMetadata)) { + $priceSetMetadata = CRM_Price_BAO_PriceSet::getCachedPriceSetDetail($this->getPriceSetID()); + $this->priceFieldMetadata = $priceSetMetadata['fields']; + unset($priceSetMetadata['fields']); + $this->priceSetMetadata = $priceSetMetadata; + } + return $this->priceSetMetadata; + } + + /** + * Get the financial type id for the order. + * + * This may differ to the line items.... + * + * @return int + */ + public function getFinancialTypeID(): int { + return (int) $this->getOverrideFinancialTypeID() ?: $this->getPriceSetMetadata()['financial_type_id']; + } + /** * Set the price field selection from an array of params containing price fields. * @@ -286,6 +319,59 @@ class CRM_Financial_BAO_Order { return $this->lineItems; } + /** + * Get line items that specifically relate to memberships. + * + * return array + * + * @throws \CiviCRM_API3_Exception + */ + public function getMembershipLineItems():array { + $lines = $this->getLineItems(); + foreach ($lines as $index => $line) { + if (empty($line['membership_type_id'])) { + unset($lines[$index]); + continue; + } + if (empty($line['membership_num_terms'])) { + $lines[$index]['membership_num_terms'] = 1; + } + } + return $lines; + } + + /** + * Get an array of all membership types included in the order. + * + * @return array + * + * @throws \CiviCRM_API3_Exception + */ + public function getMembershipTypes(): array { + $types = []; + foreach ($this->getMembershipLineItems() as $line) { + $types[$line['membership_type_id']] = CRM_Member_BAO_MembershipType::getMembershipType((int) $line['membership_type_id']); + } + return $types; + } + + /** + * Get an array of all membership types included in the order. + * + * @return array + * + * @throws \CiviCRM_API3_Exception + */ + public function getRenewableMembershipTypes(): array { + $types = []; + foreach ($this->getMembershipTypes() as $id => $type) { + if (!empty($type['auto_renew'])) { + $types[$id] = $type; + } + } + return $types; + } + /** * @return array * @throws \CiviCRM_API3_Exception diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php index 03e3669020..90320f8ab9 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/EntityFinancialAccount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:caf02136c148fe50dbc39d8d29605f72) + * (GenCodeChecksum:ac2a0a2e8eae1471b71da25e95b52d55) */ /** @@ -117,7 +117,7 @@ class CRM_Financial_DAO_EntityFinancialAccount extends CRM_Core_DAO { 'where' => 'civicrm_entity_financial_account.id', 'table_name' => 'civicrm_entity_financial_account', 'entity' => 'EntityFinancialAccount', - 'bao' => 'CRM_Financial_DAO_EntityFinancialAccount', + 'bao' => 'CRM_Financial_BAO_EntityFinancialAccount', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -138,8 +138,11 @@ class CRM_Financial_DAO_EntityFinancialAccount extends CRM_Core_DAO { 'export' => TRUE, 'table_name' => 'civicrm_entity_financial_account', 'entity' => 'EntityFinancialAccount', - 'bao' => 'CRM_Financial_DAO_EntityFinancialAccount', + 'bao' => 'CRM_Financial_BAO_EntityFinancialAccount', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Financial_BAO_EntityFinancialAccount::entityTables', + ], 'add' => '4.3', ], 'entity_id' => [ @@ -151,7 +154,7 @@ class CRM_Financial_DAO_EntityFinancialAccount extends CRM_Core_DAO { 'where' => 'civicrm_entity_financial_account.entity_id', 'table_name' => 'civicrm_entity_financial_account', 'entity' => 'EntityFinancialAccount', - 'bao' => 'CRM_Financial_DAO_EntityFinancialAccount', + 'bao' => 'CRM_Financial_BAO_EntityFinancialAccount', 'localizable' => 0, 'add' => '4.3', ], @@ -164,7 +167,7 @@ class CRM_Financial_DAO_EntityFinancialAccount extends CRM_Core_DAO { 'where' => 'civicrm_entity_financial_account.account_relationship', 'table_name' => 'civicrm_entity_financial_account', 'entity' => 'EntityFinancialAccount', - 'bao' => 'CRM_Financial_DAO_EntityFinancialAccount', + 'bao' => 'CRM_Financial_BAO_EntityFinancialAccount', 'localizable' => 0, 'html' => [ 'type' => 'Select', @@ -184,7 +187,7 @@ class CRM_Financial_DAO_EntityFinancialAccount extends CRM_Core_DAO { 'where' => 'civicrm_entity_financial_account.financial_account_id', 'table_name' => 'civicrm_entity_financial_account', 'entity' => 'EntityFinancialAccount', - 'bao' => 'CRM_Financial_DAO_EntityFinancialAccount', + 'bao' => 'CRM_Financial_BAO_EntityFinancialAccount', 'localizable' => 0, 'FKClassName' => 'CRM_Financial_DAO_FinancialAccount', 'html' => [ diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php index 2e8cbc7184..fe3d2e0987 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Financial/EntityFinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b5fb467815fb6b501dbd2f2cd789b1b9) + * (GenCodeChecksum:c45a5259ff34bda9b9bad9ced505ff16) */ /** @@ -113,7 +113,7 @@ class CRM_Financial_DAO_EntityFinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_entity_financial_trxn.id', 'table_name' => 'civicrm_entity_financial_trxn', 'entity' => 'EntityFinancialTrxn', - 'bao' => 'CRM_Financial_DAO_EntityFinancialTrxn', + 'bao' => 'CRM_Financial_BAO_EntityFinancialTrxn', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -134,8 +134,11 @@ class CRM_Financial_DAO_EntityFinancialTrxn extends CRM_Core_DAO { 'export' => TRUE, 'table_name' => 'civicrm_entity_financial_trxn', 'entity' => 'EntityFinancialTrxn', - 'bao' => 'CRM_Financial_DAO_EntityFinancialTrxn', + 'bao' => 'CRM_Financial_BAO_EntityFinancialTrxn', 'localizable' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Financial_BAO_EntityFinancialTrxn::entityTables', + ], 'add' => '3.2', ], 'entity_id' => [ @@ -146,7 +149,7 @@ class CRM_Financial_DAO_EntityFinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_entity_financial_trxn.entity_id', 'table_name' => 'civicrm_entity_financial_trxn', 'entity' => 'EntityFinancialTrxn', - 'bao' => 'CRM_Financial_DAO_EntityFinancialTrxn', + 'bao' => 'CRM_Financial_BAO_EntityFinancialTrxn', 'localizable' => 0, 'add' => '3.2', ], @@ -157,7 +160,7 @@ class CRM_Financial_DAO_EntityFinancialTrxn extends CRM_Core_DAO { 'where' => 'civicrm_entity_financial_trxn.financial_trxn_id', 'table_name' => 'civicrm_entity_financial_trxn', 'entity' => 'EntityFinancialTrxn', - 'bao' => 'CRM_Financial_DAO_EntityFinancialTrxn', + 'bao' => 'CRM_Financial_BAO_EntityFinancialTrxn', 'localizable' => 0, 'FKClassName' => 'CRM_Financial_DAO_FinancialTrxn', 'html' => [ @@ -182,7 +185,7 @@ class CRM_Financial_DAO_EntityFinancialTrxn extends CRM_Core_DAO { 'export' => TRUE, 'table_name' => 'civicrm_entity_financial_trxn', 'entity' => 'EntityFinancialTrxn', - 'bao' => 'CRM_Financial_DAO_EntityFinancialTrxn', + 'bao' => 'CRM_Financial_BAO_EntityFinancialTrxn', 'localizable' => 0, 'add' => '3.2', ], diff --git a/civicrm/CRM/Financial/Form/PaymentEdit.php b/civicrm/CRM/Financial/Form/PaymentEdit.php index 0e5b126108..be09c71c26 100644 --- a/civicrm/CRM/Financial/Form/PaymentEdit.php +++ b/civicrm/CRM/Financial/Form/PaymentEdit.php @@ -30,6 +30,15 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { */ protected $_contributionID; + /** + * Get the related contribution id. + * + * @return int + */ + public function getContributionID(): int { + return $this->_contributionID; + } + /** * The variable which holds the information of a financial transaction * @@ -129,7 +138,7 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { $errors = []; // if Credit Card is chosen and pan_truncation is not NULL ensure that it's value is numeric else throw validation error - if (CRM_Core_PseudoConstant::getName('CRM_Financial_DAO_FinancialTrxn', 'payment_instrument_id', $fields['payment_instrument_id']) == 'Credit Card' && + if (CRM_Core_PseudoConstant::getName('CRM_Financial_DAO_FinancialTrxn', 'payment_instrument_id', $fields['payment_instrument_id']) === 'Credit Card' && !empty($fields['pan_truncation']) && !CRM_Utils_Rule::numeric($fields['pan_truncation']) ) { @@ -141,8 +150,10 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { /** * Process the form submission. + * + * @throws \CiviCRM_API3_Exception */ - public function postProcess() { + public function postProcess(): void { $params = [ 'id' => $this->_id, 'payment_instrument_id' => $this->_submitValues['payment_instrument_id'], @@ -151,20 +162,20 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { ]; $paymentInstrumentName = CRM_Core_PseudoConstant::getName('CRM_Financial_DAO_FinancialTrxn', 'payment_instrument_id', $params['payment_instrument_id']); - if ($paymentInstrumentName == 'Credit Card') { + if ($paymentInstrumentName === 'Credit Card') { $params['card_type_id'] = $this->_submitValues['card_type_id'] ?? NULL; $params['pan_truncation'] = $this->_submitValues['pan_truncation'] ?? NULL; } - elseif ($paymentInstrumentName == 'Check') { + elseif ($paymentInstrumentName === 'Check') { $params['check_number'] = $this->_submitValues['check_number'] ?? NULL; } $this->submit($params); - $contactId = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $this->_contributionID, 'contact_id'); + $contactId = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $this->getContributionID(), 'contact_id'); $url = CRM_Utils_System::url( "civicrm/contact/view/contribution", - "reset=1&action=update&id={$this->_contributionID}&cid={$contactId}&context=contribution" + "reset=1&action=update&id={" . $this->getContributionID() . "}&cid={$contactId}&context=contribution" ); CRM_Core_Session::singleton()->pushUserContext($url); } @@ -192,6 +203,7 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { $newFinancialTrxn['to_financial_account_id'] = CRM_Financial_BAO_FinancialTypeAccount::getInstrumentFinancialAccount($submittedValues['payment_instrument_id']); $newFinancialTrxn['total_amount'] = $this->_values['total_amount']; $newFinancialTrxn['currency'] = $this->_values['currency']; + $newFinancialTrxn['contribution_id'] = $this->getContributionID(); civicrm_api3('Payment', 'create', $newFinancialTrxn); } else { @@ -199,7 +211,7 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { civicrm_api3('FinancialTrxn', 'create', $submittedValues); } - CRM_Financial_BAO_Payment::updateRelatedContribution($submittedValues, $this->_contributionID); + CRM_Financial_BAO_Payment::updateRelatedContribution($submittedValues, $this->getContributionID()); } /** diff --git a/civicrm/CRM/Financial/Form/Search.php b/civicrm/CRM/Financial/Form/Search.php index 069c6e0a9a..db9af59260 100644 --- a/civicrm/CRM/Financial/Form/Search.php +++ b/civicrm/CRM/Financial/Form/Search.php @@ -41,8 +41,6 @@ class CRM_Financial_Form_Search extends CRM_Core_Form { } public function buildQuickForm() { - CRM_Core_Resources::singleton() - ->addScriptFile('civicrm', 'packages/jquery/plugins/jquery.redirect.min.js', 0, 'html-header'); $attributes = CRM_Core_DAO::getAttribute('CRM_Batch_DAO_Batch'); $attributes['total']['class'] = $attributes['item_count']['class'] = 'number'; $this->add('text', 'title', ts('Batch Name'), $attributes['title']); diff --git a/civicrm/CRM/Financial/Page/AJAX.php b/civicrm/CRM/Financial/Page/AJAX.php index bc2e2f7b53..484d7a41d1 100644 --- a/civicrm/CRM/Financial/Page/AJAX.php +++ b/civicrm/CRM/Financial/Page/AJAX.php @@ -198,10 +198,6 @@ class CRM_Financial_Page_AJAX { $params['id'] = $recordID; break; - case 'export': - CRM_Utils_System::redirect("civicrm/financial/batch/export?reset=1&id=$recordID"); - break; - case 'delete': $params = $recordID; break; diff --git a/civicrm/CRM/Grant/Form/Grant.php b/civicrm/CRM/Grant/Form/Grant.php index d63b9e565b..04714b1b6a 100644 --- a/civicrm/CRM/Grant/Form/Grant.php +++ b/civicrm/CRM/Grant/Form/Grant.php @@ -149,14 +149,14 @@ class CRM_Grant_Form_Grant extends CRM_Core_Form { } $attributes = CRM_Core_DAO::getAttribute('CRM_Grant_DAO_Grant'); - $this->addSelect('grant_type_id', ['onChange' => "CRM.buildCustomData( 'Grant', this.value );"], TRUE); + $this->addSelect('grant_type_id', ['placeholder' => ts('- select type -'), 'onChange' => "CRM.buildCustomData( 'Grant', this.value );"], TRUE); //need to assign custom data type and subtype to the template $this->assign('customDataType', 'Grant'); $this->assign('customDataSubType', $this->_grantType); $this->assign('entityID', $this->_id); - $this->addSelect('status_id', [], TRUE); + $this->addSelect('status_id', ['placeholder' => ts('- select status -')], TRUE); $this->add('datepicker', 'application_received_date', ts('Application Received'), [], FALSE, ['time' => FALSE]); $this->add('datepicker', 'decision_date', ts('Grant Decision'), [], FALSE, ['time' => FALSE]); diff --git a/civicrm/CRM/Mailing/DAO/Mailing.php b/civicrm/CRM/Mailing/DAO/Mailing.php index 7da10873dd..2e5cea00b6 100644 --- a/civicrm/CRM/Mailing/DAO/Mailing.php +++ b/civicrm/CRM/Mailing/DAO/Mailing.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Mailing/Mailing.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:b5a7699458ba089e3b1ee104a71e92bc) + * (GenCodeChecksum:7ed223a1ad1e201eeaec36b65e4313e4) */ /** @@ -862,6 +862,7 @@ class CRM_Mailing_DAO_Mailing extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified Date"), ], + 'readonly' => TRUE, 'add' => '4.7', ], 'scheduled_id' => [ @@ -1064,6 +1065,7 @@ class CRM_Mailing_DAO_Mailing extends CRM_Core_DAO { 'entity' => 'Mailing', 'bao' => 'CRM_Mailing_BAO_Mailing', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '4.5', ], 'location_type_id' => [ diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php index 471a15e394..a3f77a558e 100644 --- a/civicrm/CRM/Member/BAO/Membership.php +++ b/civicrm/CRM/Member/BAO/Membership.php @@ -246,6 +246,11 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { * @throws CRM_Core_Exception */ public static function create(&$params, $ids = []) { + $isLifeTime = FALSE; + if (!empty($params['membership_type_id'])) { + $memTypeDetails = CRM_Member_BAO_MembershipType::getMembershipType($params['membership_type_id']); + $isLifeTime = $memTypeDetails['duration_unit'] === 'lifetime' ? TRUE : FALSE; + } // always calculate status if is_override/skipStatusCal is not true. // giving respect to is_override during import. CRM-4012 @@ -260,7 +265,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { // @todo enable this once core is using the api. // CRM_Core_Error::deprecatedWarning('Relying on the BAO to clean up dates is deprecated. Call membership create via the api'); } - if (!empty($params['id']) && empty($params[$dateField])) { + if (!empty($params['id']) && empty($params[$dateField]) && !($isLifeTime && $dateField == 'end_date')) { $fieldsToLoad[] = $dateField; } } diff --git a/civicrm/CRM/Member/DAO/MembershipLog.php b/civicrm/CRM/Member/DAO/MembershipLog.php index c783216565..b0ac1881a8 100644 --- a/civicrm/CRM/Member/DAO/MembershipLog.php +++ b/civicrm/CRM/Member/DAO/MembershipLog.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Member/MembershipLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:8f73099e9a9ed869fed01be412586118) + * (GenCodeChecksum:fc7552b2d017b9feb21acbef94f70342) */ /** @@ -226,6 +226,7 @@ class CRM_Member_DAO_MembershipLog extends CRM_Core_DAO { 'html' => [ 'label' => ts("Modified By"), ], + 'readonly' => TRUE, 'add' => '1.5', ], 'modified_date' => [ diff --git a/civicrm/CRM/Member/Form.php b/civicrm/CRM/Member/Form.php index 741b5ad188..1ea223b7e8 100644 --- a/civicrm/CRM/Member/Form.php +++ b/civicrm/CRM/Member/Form.php @@ -497,7 +497,7 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment { public function testSubmit(array $formValues): void { $this->exportedValues = $formValues; $this->setContextVariables($formValues); - $this->_memType = $formValues['membership_type_id'][1]; + $this->_memType = !empty($formValues['membership_type_id']) ? $formValues['membership_type_id'][1] : NULL; $this->_params = $formValues; $this->submit(); } @@ -535,4 +535,13 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment { return CRM_Core_Config::singleton()->defaultCurrency; } + /** + * Get the relevant payment instrument id. + * + * @return int + */ + protected function getPaymentInstrumentID(): int { + return (int) $this->getSubmittedValue('payment_instrument_id') ?: $this->_paymentProcessor['object']->getPaymentInstrumentID(); + } + } diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php index 7e0bd64505..18ec26e81e 100644 --- a/civicrm/CRM/Member/Form/Membership.php +++ b/civicrm/CRM/Member/Form/Membership.php @@ -907,7 +907,7 @@ DESC limit 1"); * & needs rationalising. * */ - public static function emailReceipt($form, &$formValues, $membership) { + protected function emailReceipt($form, &$formValues, $membership) { // retrieve 'from email id' for acknowledgement $receiptFrom = $formValues['from_email_address'] ?? NULL; @@ -970,7 +970,7 @@ DESC limit 1"); 'toName' => $form->_contributorDisplayName, 'toEmail' => $form->_contributorEmail, 'PDFFilename' => ts('receipt') . '.pdf', - 'isEmailPdf' => Civi::settings()->get('invoicing') && Civi::settings()->get('is_email_pdf'), + 'isEmailPdf' => Civi::settings()->get('invoicing') && Civi::settings()->get('invoice_is_email_pdf'), 'contributionId' => $formValues['contribution_id'], 'isTest' => (bool) ($form->_action & CRM_Core_Action::PREVIEW), ] @@ -991,9 +991,8 @@ DESC limit 1"); $this->storeContactFields($this->_params); $this->beginPostProcess(); $endDate = NULL; - $membership = $calcDate = []; + $membership = []; - $paymentInstrumentID = $this->_paymentProcessor['object']->getPaymentInstrumentID(); $params = $softParams = $ids = []; $mailSend = FALSE; @@ -1014,128 +1013,19 @@ DESC limit 1"); $this->_priceSet, $formValues ); - if (empty($formValues['financial_type_id'])) { - $formValues['financial_type_id'] = $this->_priceSet['financial_type_id']; - } - - $membershipTypeValues = []; - foreach ($this->_memTypeSelected as $memType) { - $membershipTypeValues[$memType]['membership_type_id'] = $memType; - } - - //take the required membership recur values. - if ($this->_mode && !empty($formValues['auto_renew'])) { - $params['is_recur'] = $formValues['is_recur'] = TRUE; - - $count = 0; - foreach ($this->_memTypeSelected as $memType) { - $recurMembershipTypeValues = CRM_Utils_Array::value($memType, - $this->allMembershipTypeDetails, [] - ); - if (!$recurMembershipTypeValues['auto_renew']) { - continue; - } - foreach ([ - 'frequency_interval' => 'duration_interval', - 'frequency_unit' => 'duration_unit', - ] as $mapVal => $mapParam) { - $membershipTypeValues[$memType][$mapVal] = $recurMembershipTypeValues[$mapParam]; - - if (!$count) { - $formValues[$mapVal] = CRM_Utils_Array::value($mapParam, - $recurMembershipTypeValues - ); - } - } - $count++; - } - } + $formValues['financial_type_id'] = $this->getFinancialTypeID(); $isQuickConfig = $this->_priceSet['is_quick_config']; - $termsByType = []; - $lineItem = [$this->order->getPriceSetID() => $this->order->getLineItems()]; $params['tax_amount'] = $this->order->getTotalTaxAmount(); $params['total_amount'] = $this->order->getTotalAmount(); - if (!empty($lineItem[$this->_priceSetId])) { - foreach ($lineItem[$this->_priceSetId] as &$li) { - if (!empty($li['membership_type_id'])) { - if (!empty($li['membership_num_terms'])) { - $termsByType[$li['membership_type_id']] = $li['membership_num_terms']; - } - } - - ///CRM-11529 for quick config backoffice transactions - //when financial_type_id is passed in form, update the - //lineitems with the financial type selected in form - $submittedFinancialType = $formValues['financial_type_id'] ?? NULL; - if ($isQuickConfig && $submittedFinancialType) { - $li['financial_type_id'] = $submittedFinancialType; - } - } - } - $params['contact_id'] = $this->_contactID; - $fields = [ - 'status_id', - 'source', - 'is_override', - 'status_override_end_date', - 'campaign_id', - ]; - - foreach ($fields as $f) { - $params[$f] = $formValues[$f] ?? NULL; - } - - // fix for CRM-3724 - // when is_override false ignore is_admin statuses during membership - // status calculation. similarly we did fix for import in CRM-3570. - if (empty($params['is_override'])) { - $params['exclude_is_admin'] = TRUE; - } - - $joinDate = $formValues['join_date']; - $startDate = $formValues['start_date']; - $endDate = $formValues['end_date']; - - $memTypeNumTerms = empty($termsByType) ? CRM_Utils_Array::value('num_terms', $formValues) : NULL; - - $calcDates = []; - foreach ($this->_memTypeSelected as $memType) { - if (empty($memTypeNumTerms)) { - $memTypeNumTerms = CRM_Utils_Array::value($memType, $termsByType, 1); - } - $calcDates[$memType] = CRM_Member_BAO_MembershipType::getDatesForMembershipType($memType, - $joinDate, $startDate, $endDate, $memTypeNumTerms - ); - } + $params = array_merge($params, $this->getFormMembershipParams()); - foreach ($calcDates as $memType => $calcDate) { - foreach (['join_date', 'start_date', 'end_date'] as $d) { - //first give priority to form values then calDates. - $date = $formValues[$d] ?? NULL; - if (!$date) { - $date = $calcDate[$d] ?? NULL; - } - - $membershipTypeValues[$memType][$d] = CRM_Utils_Date::processDate($date); - } - } - - foreach ($this->_memTypeSelected as $memType) { - if (array_key_exists('max_related', $formValues)) { - // max related memberships - take from form or inherit from membership type - $membershipTypeValues[$memType]['max_related'] = $formValues['max_related'] ?? NULL; - } - $membershipTypeValues[$memType]['custom'] = CRM_Core_BAO_CustomField::postProcess($formValues, - $this->_id, - 'Membership' - ); - } + $membershipTypeValues = $this->getMembershipParameters($formValues); // Retrieve the name and email of the current user - this will be the FROM for the receipt email [$userName] = CRM_Contact_BAO_Contact_Location::getEmailDetails(CRM_Core_Session::getLoggedInContactID()); @@ -1154,12 +1044,10 @@ DESC limit 1"); if (!empty($formValues['record_contribution'])) { $recordContribution = [ 'total_amount', - 'financial_type_id', 'payment_instrument_id', 'trxn_id', 'contribution_status_id', 'check_number', - 'campaign_id', 'receive_date', 'card_type_id', 'pan_truncation', @@ -1168,6 +1056,8 @@ DESC limit 1"); foreach ($recordContribution as $f) { $params[$f] = $formValues[$f] ?? NULL; } + $params['financial_type_id'] = $this->getFinancialTypeID(); + $params['campaign_id'] = $this->getSubmittedValue('campaign_id'); if (empty($formValues['source'])) { $params['contribution_source'] = ts('%1 Membership: Offline signup (by %2)', [ @@ -1195,7 +1085,7 @@ DESC limit 1"); //insert financial type name in receipt. $formValues['contributionType_name'] = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', - $formValues['financial_type_id'] + $this->getFinancialTypeID() ); } @@ -1204,26 +1094,17 @@ DESC limit 1"); $params['lineItems'] = $lineItem; $params['processPriceSet'] = TRUE; } - $createdMemberships = []; + if ($this->_mode) { - $params['total_amount'] = CRM_Utils_Array::value('total_amount', $formValues, 0); + $params['total_amount'] = $this->order->getTotalAmount(); //CRM-20264 : Store CC type and number (last 4 digit) during backoffice or online payment $params['card_type_id'] = $this->_params['card_type_id'] ?? NULL; $params['pan_truncation'] = $this->_params['pan_truncation'] ?? NULL; - - if (!$isQuickConfig) { - $params['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', - $this->_priceSetId, - 'financial_type_id' - ); - } - else { - $params['financial_type_id'] = $formValues['financial_type_id'] ?? NULL; - } + $params['financial_type_id'] = $this->getFinancialTypeID(); //get the payment processor id as per mode. Try removing in favour of beginPostProcess. - $params['payment_processor_id'] = $formValues['payment_processor_id'] = $this->_paymentProcessor['id']; + $params['payment_processor_id'] = $formValues['payment_processor_id'] = $this->getPaymentProcessorID(); $params['register_date'] = CRM_Utils_Time::date('YmdHis'); // add all the additional payment params we need @@ -1231,12 +1112,15 @@ DESC limit 1"); $formValues['currencyID'] = $this->getCurrency(); $formValues['description'] = ts("Contribution submitted by a staff person using member's credit card for signup"); $formValues['invoiceID'] = $this->getInvoiceID(); - $formValues['financial_type_id'] = $params['financial_type_id']; + $formValues['financial_type_id'] = $this->getFinancialTypeID(); // at this point we've created a contact and stored its address etc // all the payment processors expect the name and address to be in the // so we copy stuff over to first_name etc. $paymentParams = $formValues; + $paymentParams['frequency_unit'] = $this->getFrequencyUnit(); + $paymentParams['frequency_interval'] = $this->getFrequencyInterval(); + $paymentParams['contactID'] = $this->_contributorContactID; //CRM-10377 if payment is by an alternate contact then we need to set that person // as the contact in the payment params @@ -1256,52 +1140,54 @@ DESC limit 1"); // CRM-7137 -for recurring membership, // we do need contribution and recurring records. $result = NULL; - if (!empty($paymentParams['is_recur'])) { + if ($this->isCreateRecurringContribution()) { $this->_params = $formValues; $contribution = $this->processContribution( $paymentParams, [ 'contact_id' => $this->_contributorContactID, - 'line_item' => $lineItem, + 'line_item' => [$this->order->getPriceSetID() => $this->order->getLineItems()], 'is_test' => $this->isTest(), - 'campaign_id' => $paymentParams['campaign_id'] ?? NULL, + 'campaign_id' => $this->getSubmittedValue('campaign_id'), 'source' => CRM_Utils_Array::value('source', $paymentParams, CRM_Utils_Array::value('description', $paymentParams)), - 'payment_instrument_id' => $paymentInstrumentID, - 'financial_type_id' => $params['financial_type_id'], + 'payment_instrument_id' => $this->getPaymentInstrumentID(), + 'financial_type_id' => $this->getFinancialTypeID(), 'receive_date' => CRM_Utils_Time::date('YmdHis'), - 'tax_amount' => $params['tax_amount'] ?? NULL, + 'tax_amount' => $this->order->getTotalTaxAmount(), + 'total_amount' => $this->order->getTotalAmount(), 'invoice_id' => $this->getInvoiceID(), 'currency' => $this->getCurrency(), 'is_pay_later' => $params['is_pay_later'] ?? 0, 'skipLineItem' => $params['skipLineItem'] ?? 0, + 'contribution_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'), + 'receipt_date' => $this->getSubmittedValue('send_receipt') ? date('YmdHis') : NULL, ] ); //create new soft-credit record, CRM-13981 if ($softParams) { $softParams['contribution_id'] = $contribution->id; - $softParams['currency'] = $contribution->currency; - $softParams['amount'] = $contribution->total_amount; + $softParams['currency'] = $this->getCurrency(); + $softParams['amount'] = $this->order->getTotalAmount(); CRM_Contribute_BAO_ContributionSoft::add($softParams); } $paymentParams['contactID'] = $this->_contactID; $paymentParams['contributionID'] = $contribution->id; $paymentParams['contributionRecurID'] = $contribution->contribution_recur_id; + $paymentParams['is_recur'] = $this->isCreateRecurringContribution(); $params['contribution_id'] = $paymentParams['contributionID']; $params['contribution_recur_id'] = $paymentParams['contributionRecurID']; } $paymentStatus = NULL; - if ($params['total_amount'] > 0.0) { + if ($this->order->getTotalAmount() > 0.0) { $payment = $this->_paymentProcessor['object']; try { $result = $payment->doPayment($paymentParams); $formValues = array_merge($formValues, $result); $paymentStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $formValues['payment_status_id']); - // Assign amount to template if payment was successful. - $this->assign('amount', $params['total_amount']); } catch (\Civi\Payment\Exception\PaymentProcessorException $e) { if (!empty($paymentParams['contributionID'])) { @@ -1329,7 +1215,7 @@ DESC limit 1"); $membershipTypeValues[$memType]['startDate'] = NULL; $membershipTypeValues[$memType]['endDate'] = NULL; } - $endDate = $startDate = NULL; + $startDate = NULL; } $now = CRM_Utils_Time::date('YmdHis'); $params['receive_date'] = CRM_Utils_Time::date('Y-m-d H:i:s'); @@ -1367,7 +1253,7 @@ DESC limit 1"); $membershipParams = array_merge($membershipTypeValues[$memType], $params); //CRM-15366 - if (!empty($softParams) && empty($paymentParams['is_recur'])) { + if (!empty($softParams) && !$this->isCreateRecurringContribution()) { $membershipParams['soft_credit'] = $softParams; } if (isset($result['fee_amount'])) { @@ -1380,18 +1266,17 @@ DESC limit 1"); // process - // @see http://wiki.civicrm.org/confluence/pages/viewpage.action?pageId=261062657#Payments&AccountsRoadmap-Movetowardsalwaysusinga2-steppaymentprocess $membershipParams['contribution_status_id'] = $result['payment_status_id'] ?? NULL; - if (!empty($paymentParams['is_recur'])) { + if ($this->isCreateRecurringContribution()) { // The earlier process created the line items (although we want to get rid of the earlier one in favour // of a single path! unset($membershipParams['lineItems']); } - $membershipParams['payment_instrument_id'] = $paymentInstrumentID; + $membershipParams['payment_instrument_id'] = $this->getPaymentInstrumentID(); // @todo stop passing $ids (membership and userId only are set above) $membership = CRM_Member_BAO_Membership::create($membershipParams, $ids); $params['contribution'] = $membershipParams['contribution'] ?? NULL; unset($params['lineItems']); $this->_membershipIDs[] = $membership->id; - $createdMemberships[$memType] = $membership; $count++; } @@ -1421,28 +1306,22 @@ DESC limit 1"); $lineItem[$this->_priceSetId][$id]['entity_table'] = 'civicrm_membership'; $this->_membershipIDs[] = $membership->id; - $createdMemberships[$membership->membership_type_id] = $membership; } $params['lineItems'] = $lineItem; if (!empty($formValues['record_contribution'])) { CRM_Member_BAO_Membership::recordMembershipContribution($params); } } - $isRecur = $params['is_recur'] ?? NULL; if (($this->_action & CRM_Core_Action::UPDATE)) { - $this->addStatusMessage($this->getStatusMessageForUpdate($membership, $endDate)); + $this->addStatusMessage($this->getStatusMessageForUpdate()); } elseif (($this->_action & CRM_Core_Action::ADD)) { - $this->addStatusMessage($this->getStatusMessageForCreate($endDate, $createdMemberships, - $isRecur, $calcDates)); + $this->addStatusMessage($this->getStatusMessageForCreate()); } // This would always be true as we always add price set id into both // quick config & non quick config price sets. if (!empty($lineItem[$this->_priceSetId])) { - $invoicing = Civi::settings()->get('invoicing'); - $taxAmount = FALSE; - $totalTaxAmount = 0; foreach ($lineItem[$this->_priceSetId] as & $priceFieldOp) { if (!empty($priceFieldOp['membership_type_id'])) { $priceFieldOp['start_date'] = $membershipTypeValues[$priceFieldOp['membership_type_id']]['start_date'] ? CRM_Utils_Date::formatDateOnlyLong($membershipTypeValues[$priceFieldOp['membership_type_id']]['start_date']) : '-'; @@ -1451,12 +1330,8 @@ DESC limit 1"); else { $priceFieldOp['start_date'] = $priceFieldOp['end_date'] = 'N/A'; } - if ($invoicing && isset($priceFieldOp['tax_amount'])) { - $taxAmount = TRUE; - $totalTaxAmount += $priceFieldOp['tax_amount']; - } } - if ($invoicing) { + if (Civi::settings()->get('invoicing')) { $dataArray = []; foreach ($lineItem[$this->_priceSetId] as $key => $value) { if (isset($value['tax_amount']) && isset($value['tax_rate'])) { @@ -1468,11 +1343,7 @@ DESC limit 1"); } } } - if ($taxAmount) { - $this->assign('totalTaxAmount', $totalTaxAmount); - // Not sure why would need this on Submit.... unless it's being used when sending mails in which case this is the wrong place - $this->assign('taxTerm', $this->getSalesTaxTerm()); - } + $this->assign('dataArray', $dataArray); } } @@ -1538,7 +1409,7 @@ DESC limit 1"); // if selected membership doesn't match with earlier membership !in_array($this->_memType, $this->_memTypeSelected) ) { - if (!empty($inputParams['is_recur'])) { + if ($this->isCreateRecurringContribution()) { CRM_Core_Session::setStatus(ts('Associated recurring contribution cannot be updated on membership type change.', ts('Error'), 'error')); return; } @@ -1632,17 +1503,15 @@ DESC limit 1"); /** * Get status message for updating membership. * - * @param CRM_Member_BAO_Membership $membership - * @param string $endDate - * * @return string + * @throws \CiviCRM_API3_Exception */ - protected function getStatusMessageForUpdate($membership, $endDate) { - // End date can be modified by hooks, so if end date is set then use it. - $endDate = ($membership->end_date) ? $membership->end_date : $endDate; - + protected function getStatusMessageForUpdate(): string { + foreach ($this->getCreatedMemberships() as $membership) { + $endDate = $membership['end_date'] ?? NULL; + } $statusMsg = ts('Membership for %1 has been updated.', [1 => $this->_memberDisplayName]); - if ($endDate && $endDate !== 'null') { + if ($endDate) { $endDate = CRM_Utils_Date::customFormat($endDate); $statusMsg .= ' ' . ts('The membership End Date is %1.', [1 => $endDate]); } @@ -1652,39 +1521,25 @@ DESC limit 1"); /** * Get status message for create action. * - * @param string $endDate - * @param array $createdMemberships - * @param bool $isRecur - * @param array $calcDates - * * @return array|string + * @throws \CiviCRM_API3_Exception */ - protected function getStatusMessageForCreate($endDate, $createdMemberships, - $isRecur, $calcDates) { - // FIX ME: fix status messages - - $statusMsg = []; - foreach ($this->_memTypeSelected as $membershipTypeID) { - $statusMsg[$membershipTypeID] = ts('%1 membership for %2 has been added.', [ - 1 => $this->allMembershipTypeDetails[$membershipTypeID]['name'], + protected function getStatusMessageForCreate(): string { + foreach ($this->getCreatedMemberships() as $membership) { + $statusMsg[$membership['membership_type_id']] = ts('%1 membership for %2 has been added.', [ + 1 => $this->allMembershipTypeDetails[$membership['membership_type_id']]['name'], 2 => $this->_memberDisplayName, ]); - $membership = $createdMemberships[$membershipTypeID]; - $memEndDate = $membership->end_date ?: $endDate; - - //get the end date from calculated dates. - if (!$memEndDate && !$isRecur) { - $memEndDate = $calcDates[$membershipTypeID]['end_date'] ?? NULL; - } + $memEndDate = $membership['end_date'] ?? NULL; - if ($memEndDate && $memEndDate !== 'null') { + if ($memEndDate) { $memEndDate = CRM_Utils_Date::formatDateOnlyLong($memEndDate); - $statusMsg[$membershipTypeID] .= ' ' . ts('The new membership End Date is %1.', [1 => $memEndDate]); + $statusMsg[$membership['membership_type_id']] .= ' ' . ts('The new membership End Date is %1.', [1 => $memEndDate]); } } $statusMsg = implode('<br/>', $statusMsg); - return $statusMsg; + return $statusMsg ?? ''; } /** @@ -1737,10 +1592,14 @@ DESC limit 1"); * * @return bool * @throws \CRM_Core_Exception + * @throws \CiviCRM_API3_Exception */ protected function emailMembershipReceipt($formValues, $membership) { $customValues = $this->getCustomValuesForReceipt($formValues, $membership); $this->assign('customValues', $customValues); + $this->assign('total_amount', $this->order->getTotalAmount()); + $this->assign('totalTaxAmount', $this->order->getTotalTaxAmount()); + $this->assign('taxTerm', $this->getSalesTaxTerm()); if ($this->_mode) { // @todo move this outside shared code as Batch entry just doesn't @@ -1754,7 +1613,7 @@ DESC limit 1"); $this->assign('is_pay_later', 0); $this->assign('isPrimary', 1); } - return self::emailReceipt($this, $formValues, $membership); + return $this->emailReceipt($this, $formValues, $membership); } /** @@ -1836,70 +1695,36 @@ DESC limit 1"); $params, $contributionParams ) { - $form = $this; - $transaction = new CRM_Core_Transaction(); $contactID = $contributionParams['contact_id']; - - // add these values for the recurringContrib function ,CRM-10188 - $params['financial_type_id'] = $contributionParams['financial_type_id']; - - $params['is_email_receipt'] = (bool) $this->getSubmittedValue('send_receipt'); - $params['is_recur'] = TRUE; - $params['payment_instrument_id'] = $contributionParams['payment_instrument_id'] ?? NULL; - $recurringContributionID = $this->legacyProcessRecurringContribution($params, $contactID); - - $now = CRM_Utils_Time::date('YmdHis'); - $receiptDate = $params['receipt_date'] ?? NULL; - if ($params['is_email_receipt']) { - $receiptDate = $now; - } - - if ($this->getSubmittedValue('send_receipt')) { - $contributionParams += [ - 'receipt_date' => $receiptDate, - ]; - } - - if ($recurringContributionID) { - $contributionParams['contribution_recur_id'] = $recurringContributionID; - } - - $contributionParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'); - - // @todo this is the wrong place for this - it should be done as close to form submission - // as possible - $contributionParams['total_amount'] = $params['amount']; - $contribution = CRM_Contribute_BAO_Contribution::add($contributionParams); - - // lets store it in the form variable so postProcess hook can get to this and use it - $form->_contributionID = $contribution->id; - - $transaction->commit(); - return $contribution; + $contributionParams['contribution_recur_id'] = $this->legacyProcessRecurringContribution($params, $contactID); + return CRM_Contribute_BAO_Contribution::add($contributionParams); } /** - * Create the recurring contribution record. + * Create the recurring contribution record if the form submission requires it. * * This function was copied from another form & needs cleanup. * * @param array $params * @param int $contactID * - * @return int + * @return int|null + * @throws \CiviCRM_API3_Exception */ - protected function legacyProcessRecurringContribution(array $params, $contactID): int { - + protected function legacyProcessRecurringContribution(array $params, $contactID): ?int { + if (!$this->isCreateRecurringContribution()) { + return NULL; + } $recurParams = ['contact_id' => $contactID]; - $recurParams['amount'] = $params['amount'] ?? NULL; - $recurParams['auto_renew'] = $params['auto_renew'] ?? NULL; - $recurParams['frequency_unit'] = $params['frequency_unit'] ?? NULL; - $recurParams['frequency_interval'] = $params['frequency_interval'] ?? NULL; + $recurParams['amount'] = $this->order->getTotalAmount(); + // for the legacyProcessRecurringContribution function to be reached auto_renew must be true + $recurParams['auto_renew'] = TRUE; + $recurParams['frequency_unit'] = $this->getFrequencyUnit(); + $recurParams['frequency_interval'] = $this->getFrequencyInterval(); $recurParams['installments'] = $params['installments'] ?? NULL; - $recurParams['financial_type_id'] = $params['financial_type_id']; - $recurParams['currency'] = $params['currency'] ?? NULL; - $recurParams['payment_instrument_id'] = $params['payment_instrument_id']; - + $recurParams['financial_type_id'] = $this->getFinancialTypeID(); + $recurParams['currency'] = $this->getCurrency(); + $recurParams['payment_instrument_id'] = $this->getPaymentInstrumentID(); $recurParams['is_test'] = $this->isTest(); $recurParams['start_date'] = $recurParams['create_date'] = $recurParams['modified_date'] = CRM_Utils_Time::date('YmdHis'); @@ -1908,14 +1733,12 @@ DESC limit 1"); } $recurParams['invoice_id'] = $this->getInvoiceID(); $recurParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'); - $recurParams['payment_processor_id'] = $params['payment_processor_id'] ?? NULL; + $recurParams['payment_processor_id'] = $this->getPaymentProcessorID(); $recurParams['is_email_receipt'] = (bool) $this->getSubmittedValue('send_receipt'); // we need to add a unique trxn_id to avoid a unique key error // in paypal IPN we reset this when paypal sends us the real trxn id, CRM-2991 $recurParams['trxn_id'] = $params['trxn_id'] ?? $this->getInvoiceID(); - - $campaignId = $params['campaign_id'] ?? $this->_values['campaign_id'] ?? NULL; - $recurParams['campaign_id'] = $campaignId; + $recurParams['campaign_id'] = $this->getSubmittedValue('campaign_id'); return CRM_Contribute_BAO_ContributionRecur::add($recurParams)->id; } @@ -1924,8 +1747,159 @@ DESC limit 1"); * * @return bool */ - protected function isTest(): int { + protected function isTest(): bool { return ($this->_mode === 'test') ? TRUE : FALSE; } + /** + * Get the financial type id relevant to the contribution. + * + * Financial type id is optional when price sets are in use. + * Otherwise they are required for the form to submit. + * + * @return int + */ + protected function getFinancialTypeID(): int { + return (int) $this->getSubmittedValue('financial_type_id') ?: $this->order->getFinancialTypeID(); + } + + /** + * Get the membership type, if any, to be recurred. + * + * @return array + * @throws \CiviCRM_API3_Exception + */ + protected function getRecurMembershipType(): array { + foreach ($this->order->getRenewableMembershipTypes() as $type) { + return $type; + } + return []; + } + + /** + * Get the frequency interval. + * + * @return int|null + * @throws \CiviCRM_API3_Exception + */ + protected function getFrequencyInterval(): ?int { + $membershipType = $this->getRecurMembershipType(); + return empty($membershipType) ? NULL : (int) $membershipType['duration_interval']; + } + + /** + * Get the frequency interval. + * + * @return string|null + * @throws \CiviCRM_API3_Exception + */ + protected function getFrequencyUnit(): ?string { + $membershipType = $this->getRecurMembershipType(); + return empty($membershipType) ? NULL : (string) $membershipType['duration_unit']; + } + + /** + * Get values that should be passed to all membership create actions. + * + * These parameters are generic to all memberships created from the form, + * whether a single membership or multiple by price set (although + * the form will not expose all in the latter case. + * + * By referencing the submitted values directly we can call this + * from anywhere in postProcess and get the same result (protects + * against breakage if code is moved around). + * + * @return array + */ + protected function getFormMembershipParams(): array { + $submittedValues = $this->controller->exportValues($this->_name); + return [ + 'status_id' => $this->getSubmittedValue('status_id'), + 'source' => $this->getSubmittedValue('source'), + 'is_override' => $this->getSubmittedValue('is_override'), + 'status_override_end_date' => $this->getSubmittedValue('status_override_end_date'), + 'campaign_id' => $this->getSubmittedValue('campaign_id'), + 'custom' => CRM_Core_BAO_CustomField::postProcess($submittedValues, + $this->_id, + 'Membership' + ), + // fix for CRM-3724 + // when is_override false ignore is_admin statuses during membership + // status calculation. similarly we did fix for import in CRM-3570. + 'exclude_is_admin' => !$this->getSubmittedValue('is_override'), + ]; + } + + /** + * Is it necessary to create a recurring contribution. + * + * @return bool + */ + protected function isCreateRecurringContribution(): bool { + return $this->_mode && $this->getSubmittedValue('auto_renew'); + } + + /** + * Get the payment processor ID. + * + * @return int + */ + public function getPaymentProcessorID(): int { + return (int) ($this->getSubmittedValue('payment_processor_id') ?: $this->_paymentProcessor['id']); + } + + /** + * Get memberships submitted through the form submission. + * @return array + * + * @throws \CiviCRM_API3_Exception + */ + protected function getCreatedMemberships(): array { + return civicrm_api3('Membership', 'get', ['id' => ['IN' => $this->_membershipIDs]])['values']; + } + + /** + * @param array $formValues + * + * @return array + * @throws \CiviCRM_API3_Exception + */ + protected function getMembershipParameters(array $formValues): array { + $membershipTypeValues = []; + foreach ($this->_memTypeSelected as $memType) { + $membershipTypeValues[$memType]['membership_type_id'] = $memType; + } + $joinDate = $formValues['join_date']; + $startDate = $formValues['start_date']; + $endDate = $formValues['end_date']; + + $calcDates = []; + foreach ($this->order->getMembershipLineItems() as $membershipLineItem) { + $memTypeNumTerms = $this->getSubmittedValue('num_terms') ?: $membershipLineItem['membership_num_terms']; + $calcDates[$membershipLineItem['membership_type_id']] = CRM_Member_BAO_MembershipType::getDatesForMembershipType($membershipLineItem['membership_type_id'], + $joinDate, $startDate, $endDate, $memTypeNumTerms + ); + } + + foreach ($calcDates as $memType => $calcDate) { + foreach (['join_date', 'start_date', 'end_date'] as $d) { + //first give priority to form values then calDates. + $date = $formValues[$d] ?? NULL; + if (!$date) { + $date = $calcDate[$d] ?? NULL; + } + + $membershipTypeValues[$memType][$d] = CRM_Utils_Date::processDate($date); + } + } + + foreach ($this->_memTypeSelected as $memType) { + if (array_key_exists('max_related', $formValues)) { + // max related memberships - take from form or inherit from membership type + $membershipTypeValues[$memType]['max_related'] = $formValues['max_related'] ?? NULL; + } + } + return $membershipTypeValues; + } + } diff --git a/civicrm/CRM/Member/Form/MembershipBlock.php b/civicrm/CRM/Member/Form/MembershipBlock.php index 49433bd838..99ef355617 100644 --- a/civicrm/CRM/Member/Form/MembershipBlock.php +++ b/civicrm/CRM/Member/Form/MembershipBlock.php @@ -174,7 +174,7 @@ class CRM_Member_Form_MembershipBlock extends CRM_Contribute_Form_ContributionPa //$this->add('select', 'member_price_set_id', ts('Membership Price Set'), (['' => ts('- none -')] + $price)); $this->addField('member_price_set_id', [ - 'entity' => 'PriceSet', + 'entity' => 'PriceField', 'name' => 'price_set_id', 'options' => $price, ]); diff --git a/civicrm/CRM/Member/Form/MembershipRenewal.php b/civicrm/CRM/Member/Form/MembershipRenewal.php index ed017fdb28..067de80d8d 100644 --- a/civicrm/CRM/Member/Form/MembershipRenewal.php +++ b/civicrm/CRM/Member/Form/MembershipRenewal.php @@ -202,7 +202,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { $defaults['total_amount'] = CRM_Utils_Money::formatLocaleNumericRoundedForDefaultCurrency(CRM_Core_DAO::getFieldValue('CRM_Member_DAO_MembershipType', $this->_memType, 'minimum_fee' - )); + ) ?? 0); $defaults['record_contribution'] = 0; $defaults['num_terms'] = 1; @@ -276,7 +276,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { //CRM-16950 $taxAmount = NULL; - $totalAmount = $values['minimum_fee'] ?? NULL; + $totalAmount = $values['minimum_fee'] ?? 0; // @todo - feels a bug - we use taxRate from the form default rather than from the specified type?!? if ($this->getTaxRateForFinancialType($values['financial_type_id'])) { $taxAmount = ($taxRate / 100) * CRM_Utils_Array::value('minimum_fee', $values); diff --git a/civicrm/CRM/Member/Page/AJAX.php b/civicrm/CRM/Member/Page/AJAX.php index ce7ecd79ba..f76f9dddbc 100644 --- a/civicrm/CRM/Member/Page/AJAX.php +++ b/civicrm/CRM/Member/Page/AJAX.php @@ -46,9 +46,9 @@ WHERE id = %1"; } $details['total_amount_numeric'] = $details['total_amount']; // fix the display of the monetary value, CRM-4038 - $details['total_amount'] = CRM_Utils_Money::formatLocaleNumericRoundedForDefaultCurrency($details['total_amount']); + $details['total_amount'] = CRM_Utils_Money::formatLocaleNumericRoundedForDefaultCurrency($details['total_amount'] ?? 0); $options = CRM_Core_SelectValues::memberAutoRenew(); - $details['auto_renew'] = $options[$details]['auto_renew'] ?? NULL; + $details['auto_renew'] = $options[$details['auto_renew']] ?? NULL; CRM_Utils_JSON::output($details); } diff --git a/civicrm/CRM/Note/Form/Note.php b/civicrm/CRM/Note/Form/Note.php index 574bb9eceb..2104fd3245 100644 --- a/civicrm/CRM/Note/Form/Note.php +++ b/civicrm/CRM/Note/Form/Note.php @@ -130,6 +130,7 @@ class CRM_Note_Form_Note extends CRM_Core_Form { } $this->addField('subject'); + $this->addField('note_date', [], FALSE, FALSE); $this->addField('note', [], TRUE); $this->addField('privacy'); $this->add('hidden', 'parent_id'); diff --git a/civicrm/CRM/PCP/Form/PCPAccount.php b/civicrm/CRM/PCP/Form/PCPAccount.php index 70d82bb2c3..5be2e61e82 100644 --- a/civicrm/CRM/PCP/Form/PCPAccount.php +++ b/civicrm/CRM/PCP/Form/PCPAccount.php @@ -152,9 +152,7 @@ class CRM_PCP_Form_PCPAccount extends CRM_Core_Form { } if ($addCaptcha) { - $captcha = &CRM_Utils_ReCAPTCHA::singleton(); - $captcha->add($this); - $this->assign('isCaptcha', TRUE); + CRM_Utils_ReCAPTCHA::enableCaptchaOnForm($this); } } diff --git a/civicrm/CRM/Pledge/DAO/Pledge.php b/civicrm/CRM/Pledge/DAO/Pledge.php index f01b98ccee..9c86b0d1c9 100644 --- a/civicrm/CRM/Pledge/DAO/Pledge.php +++ b/civicrm/CRM/Pledge/DAO/Pledge.php @@ -6,7 +6,7 @@ * * Generated from xml/schema/CRM/Pledge/Pledge.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:3663f8bd4b5105b49277f60671375774) + * (GenCodeChecksum:dbae8b55f038778bd6862b001237a828) */ /** @@ -526,6 +526,7 @@ class CRM_Pledge_DAO_Pledge extends CRM_Core_DAO { 'entity' => 'Pledge', 'bao' => 'CRM_Pledge_BAO_Pledge', 'localizable' => 0, + 'readonly' => TRUE, 'add' => '2.1', ], 'cancel_date' => [ diff --git a/civicrm/CRM/Price/BAO/LineItem.php b/civicrm/CRM/Price/BAO/LineItem.php index dfaf89f063..0f0b3815ca 100644 --- a/civicrm/CRM/Price/BAO/LineItem.php +++ b/civicrm/CRM/Price/BAO/LineItem.php @@ -529,7 +529,7 @@ WHERE li.contribution_id = %1"; $params['is_quick_config'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $setID, 'is_quick_config'); } if (!empty($params['is_quick_config']) && array_key_exists('total_amount', $params) - && $totalEntityId == 1 + && $totalEntityId == 1 && count($lineItems) == 1 ) { $values['line_total'] = $values['unit_price'] = $params['total_amount']; } diff --git a/civicrm/CRM/Price/BAO/PriceField.php b/civicrm/CRM/Price/BAO/PriceField.php index bb5dd9c1b0..8d1113244b 100644 --- a/civicrm/CRM/Price/BAO/PriceField.php +++ b/civicrm/CRM/Price/BAO/PriceField.php @@ -328,7 +328,10 @@ class CRM_Price_BAO_PriceField extends CRM_Price_DAO_PriceField { if (!empty($qf->_quickConfig) && !empty($qf->_contributionAmount) && strtolower($fieldOptions[$optionKey]['name']) == 'other_amount') { $label .= ' ' . $currencySymbol; $qf->assign('priceset', $elementName); - $extra = ['onclick' => 'useAmountOther();']; + $extra = [ + 'onclick' => 'useAmountOther();', + 'autocomplete' => 'off', + ]; } } diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index f9b776a336..a20ca0d8de 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -4004,7 +4004,9 @@ ORDER BY cg.weight, cf.weight"; case 'Money': $curFilters[$fieldName]['operatorType'] = CRM_Report_Form::OP_FLOAT; $curFilters[$fieldName]['type'] = CRM_Utils_Type::T_MONEY; - $curFields[$fieldName]['type'] = CRM_Utils_Type::T_MONEY; + // Use T_FLOAT instead of T_MONEY as the money number format happens + // by calling CRM_Core_BAO_CustomField::displayValue in alterCustomDataDisplay + $curFields[$fieldName]['type'] = CRM_Utils_Type::T_FLOAT; break; case 'Float': diff --git a/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php b/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php index 1ecd40caca..d4cbdb557b 100644 --- a/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php +++ b/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php @@ -425,6 +425,8 @@ class CRM_Report_Form_Contribute_DeferredRevenue extends CRM_Report_Form { * * @param string $sql * @param array $rows + * + * @throws \CRM_Core_Exception */ public function buildRows($sql, &$rows) { $dao = CRM_Core_DAO::executeQuery($sql); @@ -449,7 +451,11 @@ class CRM_Report_Form_Contribute_DeferredRevenue extends CRM_Report_Form { $row[$key] = CRM_Utils_Date::customFormat($dao->$key, $dateFormat); } elseif (CRM_Utils_Array::value('type', $value) & CRM_Utils_Type::T_MONEY) { - $row[$key] = CRM_Utils_Money::format($dao->$key); + $values = []; + foreach (explode(',', $dao->$key) as $moneyValue) { + $values[] = CRM_Utils_Money::format($moneyValue); + } + $row[$key] = implode(',', $values); } else { $row[$key] = $dao->$key; @@ -460,9 +466,9 @@ class CRM_Report_Form_Contribute_DeferredRevenue extends CRM_Report_Form { $rows[$arraykey]['label'] = "Deferred Revenue Account: {$dao->civicrm_financial_account_name} ({$dao->civicrm_financial_account_accounting_code}), Revenue Account: {$dao->civicrm_financial_account_1_name} {$dao->civicrm_financial_account_1_accounting_code}"; $trxnDate = explode(',', $dao->civicrm_financial_trxn_1_trxn_date); $trxnAmount = explode(',', $dao->civicrm_financial_trxn_1_total_amount); - foreach ($trxnDate as $key => $date) { + foreach ($trxnDate as $trxnKey => $date) { $keyDate = date('M, Y', strtotime($date)); - $rows[$arraykey]['rows'][$dao->civicrm_financial_item_id][$keyDate] = CRM_Utils_Money::format($trxnAmount[$key]); + $rows[$arraykey]['rows'][$dao->civicrm_financial_item_id][$keyDate] = CRM_Utils_Money::format($trxnAmount[$trxnKey]); } } } diff --git a/civicrm/CRM/Report/Form/Contribute/Detail.php b/civicrm/CRM/Report/Form/Contribute/Detail.php index 4576423e11..ab5ac670e5 100644 --- a/civicrm/CRM/Report/Form/Contribute/Detail.php +++ b/civicrm/CRM/Report/Form/Contribute/Detail.php @@ -321,8 +321,8 @@ class CRM_Report_Form_Contribute_Detail extends CRM_Report_Form { 'title' => ts('Contribution Ordinality'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => [ - 0 => 'First by Contributor', - 1 => 'Second or Later by Contributor', + 0 => ts('First by Contributor'), + 1 => ts('Second or Later by Contributor'), ], 'type' => CRM_Utils_Type::T_INT, ], @@ -572,6 +572,7 @@ GROUP BY {$this->_aliases['civicrm_contribution']}.currency"; // we inner join with temp1 to restrict soft contributions to those in temp1 table. // no group by here as we want to display as many soft credit rows as actually exist. + CRM_Utils_Hook::alterReportVar('sql', $this, $this); $sql = "{$select} {$this->_from} {$this->_where} $this->_groupBy"; $this->createTemporaryTable('civireport_contribution_detail_temp2', $sql); diff --git a/civicrm/CRM/Report/Form/Member/ContributionDetail.php b/civicrm/CRM/Report/Form/Member/ContributionDetail.php index 882e80d903..2282549158 100644 --- a/civicrm/CRM/Report/Form/Member/ContributionDetail.php +++ b/civicrm/CRM/Report/Form/Member/ContributionDetail.php @@ -284,8 +284,8 @@ class CRM_Report_Form_Member_ContributionDetail extends CRM_Report_Form { 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, 'options' => [ - 0 => 'First by Contributor', - 1 => 'Second or Later by Contributor', + 0 => ts('First by Contributor'), + 1 => ts('Second or Later by Contributor'), ], ], ], diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index 9da28740a5..b8da51a09c 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -88,9 +88,11 @@ class CRM_Upgrade_Form extends CRM_Core_Form { } /** - * @param $version + * @param string $version + * Ex: '5.22' or '5.22.3' * - * @return mixed + * @return CRM_Upgrade_Incremental_Base + * Ex: CRM_Upgrade_Incremental_php_FiveTwentyTwo */ public static function &incrementalPhpObject($version) { static $incrementalPhpObject = []; @@ -105,6 +107,29 @@ class CRM_Upgrade_Form extends CRM_Core_Form { return $incrementalPhpObject[$versionName]; } + /** + * @return array + * ex: ['5.13', '5.14', '5.15'] + */ + public static function incrementalPhpObjectVersions() { + $versions = []; + + $phpDir = implode(DIRECTORY_SEPARATOR, [dirname(__FILE__), 'Incremental', 'php']); + $phpFiles = glob("$phpDir/*.php"); + foreach ($phpFiles as $phpFile) { + $phpWord = substr(basename($phpFile), 0, -4); + if (CRM_Utils_EnglishNumber::isNumeric($phpWord)) { + /** @var \CRM_Upgrade_Incremental_Base $instance */ + $className = 'CRM_Upgrade_Incremental_php_' . $phpWord; + $instance = new $className(); + $versions[] = $instance->getMajorMinor(); + } + } + + usort($versions, 'version_compare'); + return $versions; + } + /** * @param $version * @param $release @@ -287,42 +312,24 @@ SET version = '$version' } /** + * Get a list of all patch-versions that appear in upgrade steps, whether + * as *.mysql.tpl or as *.php. + * * @return array * @throws Exception */ public function getRevisionSequence() { $revList = []; - $sqlDir = implode(DIRECTORY_SEPARATOR, - [dirname(__FILE__), 'Incremental', 'sql'] - ); - $sqlFiles = scandir($sqlDir); - $sqlFilePattern = '/^((\d{1,2}\.\d{1,2})\.(\d{1,2}\.)?(\d{1,2}|\w{4,7}))\.(my)?sql(\.tpl)?$/i'; - foreach ($sqlFiles as $file) { - if (preg_match($sqlFilePattern, $file, $matches)) { - if (!in_array($matches[1], $revList)) { - $revList[] = $matches[1]; - } - } + foreach (self::incrementalPhpObjectVersions() as $majorMinor) { + $phpUpgrader = self::incrementalPhpObject($majorMinor); + $revList = array_merge($revList, array_values($phpUpgrader->getRevisionSequence())); } usort($revList, 'version_compare'); return $revList; } - /** - * @param $rev - * @param int $index - * - * @return null - */ - public static function getRevisionPart($rev, $index = 1) { - $revPattern = '/^((\d{1,2})\.\d{1,2})\.(\d{1,2}|\w{4,7})?$/i'; - preg_match($revPattern, $rev, $matches); - - return array_key_exists($index, $matches) ? $matches[$index] : NULL; - } - /** * @param $tplFile * @param $rev @@ -529,6 +536,12 @@ SET version = '$version' $queue->createItem($task); $revisions = $upgrade->getRevisionSequence(); + $maxRevision = empty($revisions) ? NULL : end($revisions); + reset($revisions); + if (version_compare($latestVer, $maxRevision, '<')) { + throw new CRM_Core_Exception("Malformed upgrade sequence. The incremental update $maxRevision exceeds target version $latestVer"); + } + foreach ($revisions as $rev) { // proceed only if $currentVer < $rev if (version_compare($currentVer, $rev) < 0) { @@ -561,6 +574,16 @@ SET version = '$version' } } + // It's possible that xml/version.xml points to a version that doesn't have any concrete revision steps. + if (!in_array($latestVer, $revisions)) { + $task = new CRM_Queue_Task( + ['CRM_Upgrade_Form', 'doIncrementalUpgradeFinish'], + [$rev, $latestVer, $latestVer, $postUpgradeMessageFile], + "Finish Upgrade DB to $latestVer" + ); + $queue->createItem($task); + } + return $queue; } @@ -746,7 +769,12 @@ SET version = '$version' } /** - * Perform an incremental version update. + * Mark an incremental update as finished. + * + * This method may be called in two cases: + * + * - After performing each incremental update (`X.X.X.mysql.tpl` or `upgrade_X_X_X()`) + * - If needed, one more time at the end of the upgrade for the final version-number. * * @param CRM_Queue_TaskContext $ctx * @param string $rev diff --git a/civicrm/CRM/Upgrade/Incremental/Base.php b/civicrm/CRM/Upgrade/Incremental/Base.php index 1a2e3b008c..60d4ca3a67 100644 --- a/civicrm/CRM/Upgrade/Incremental/Base.php +++ b/civicrm/CRM/Upgrade/Incremental/Base.php @@ -17,6 +17,57 @@ use Civi\Core\SettingsBag; class CRM_Upgrade_Incremental_Base { const BATCH_SIZE = 5000; + /** + * @var string|null + */ + protected $majorMinor; + + /** + * Get the major and minor version for this class (based on English-style class name). + * + * @return string + * Ex: '5.34' or '4.7' + */ + public function getMajorMinor() { + if (!$this->majorMinor) { + $className = explode('_', static::CLASS); + $numbers = preg_split("/([[:upper:]][[:lower:]]+)/", array_pop($className), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); + $major = CRM_Utils_EnglishNumber::toInt(array_shift($numbers)); + $minor = CRM_Utils_EnglishNumber::toInt(implode('', $numbers)); + $this->majorMinor = $major . '.' . $minor; + } + return $this->majorMinor; + } + + /** + * Get a list of revisions (PATCH releases) related to this class. + * + * @return array + * Ex: ['4.5.6', '4.5.7'] + * @throws \ReflectionException + */ + public function getRevisionSequence() { + $revList = []; + + $sqlGlob = implode(DIRECTORY_SEPARATOR, [dirname(__FILE__), 'sql', $this->getMajorMinor() . '.*.mysql.tpl']); + $sqlFiles = glob($sqlGlob);; + foreach ($sqlFiles as $file) { + $revList[] = str_replace('.mysql.tpl', '', basename($file)); + } + + $c = new ReflectionClass(static::class); + foreach ($c->getMethods() as $method) { + /** @var \ReflectionMethod $method */ + if (preg_match(';^upgrade_([0-9_alphabeta]+)$;', $method->getName(), $m)) { + $revList[] = str_replace('_', '.', $m[1]); + } + } + + $revList = array_unique($revList); + usort($revList, 'version_compare'); + return $revList; + } + /** * Verify DB state. * diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveFourteen.php b/civicrm/CRM/Upgrade/Incremental/php/FiveFourteen.php index 329d0e04fe..66468d761a 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveFourteen.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveFourteen.php @@ -59,33 +59,9 @@ class CRM_Upgrade_Incremental_php_FiveFourteen extends CRM_Upgrade_Incremental_B */ public function upgrade_5_14_alpha1($rev) { $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev); - - // Only need to rebuild view if CiviCase is enabled: otherwise will be - // rebuilt when component is enabled - $config = CRM_Core_Config::singleton(); - if (in_array('CiviCase', $config->enableComponents)) { - $this->addTask('Rebuild case activity views', 'rebuildCaseActivityView', $rev); - } // Additional tasks here... // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex. // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable. } - /** - * Rebuild the view of recent and upcoming case activities - * - * See https://github.com/civicrm/civicrm-core/pull/14086 and - * https://lab.civicrm.org/dev/core/issues/832 - * - * @param CRM_Queue_TaskContext $ctx - * @return bool - */ - public static function rebuildCaseActivityView($ctx) { - if (!CRM_Case_BAO_Case::createCaseViews()) { - CRM_Core_Error::debug_log_message(ts("Could not create the MySQL views for CiviCase. Your mysql user needs to have the 'CREATE VIEW' permission")); - return FALSE; - } - return TRUE; - } - } diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveThirtySeven.php b/civicrm/CRM/Upgrade/Incremental/php/FiveThirtySeven.php new file mode 100644 index 0000000000..f87d2effe6 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveThirtySeven.php @@ -0,0 +1,185 @@ +<?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 FiveThirtySeven */ +class CRM_Upgrade_Incremental_php_FiveThirtySeven extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @param string $preUpgradeMessage + * @param string $rev + * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. + * @param null $currentVer + */ + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { + // Example: Generate a pre-upgrade message. + // if ($rev == '5.12.34') { + // $preUpgradeMessage .= '<p>' . ts('A new permission, "%1", has been added. This permission is now used to control access to the Manage Tags screen.', array(1 => ts('manage tags'))) . '</p>'; + // } + if ($rev === '5.37.alpha1') { + $preUpgradeMessage .= '<p>' . ts('Some mail-merge tokens may display differently when used with Scheduled Reminders, Mosaico templates, or PDF letters. For details, see <a href="%1" target="_blank">upgrade notes</a>.', + [1 => 'https://docs.civicrm.org/sysadmin/en/latest/upgrade/version-specific/#token-format']) . '</p>'; + } + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * + * @param string $postUpgradeMessage + * alterable. + * @param string $rev + * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. + */ + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { + // Example: Generate a post-upgrade message. + // if ($rev == '5.12.34') { + // $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'."); + // } + } + + /* + * Important! All upgrade functions MUST add a 'runSql' task. + * Uncomment and use the following template for a new upgrade version + * (change the x in the function name): + */ + + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_5_37_alpha1($rev) { + $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + $this->addTask('core-issue#1845 - Alter Foreign key on civicrm_group to delete when the associated group when the saved search is deleted', 'alterSavedSearchFK'); + $this->addTask('core-issue#2243 - Add note_date to civicrm_note', 'addColumn', + 'civicrm_note', 'note_date', "timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Date attached to the note'"); + $this->addTask('core-issue#2243 - Add created_date to civicrm_note', 'addColumn', + 'civicrm_note', 'created_date', "timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the note was created'"); + $this->addTask('core-issue#2243 - Update existing note_date and created_date', 'updateNoteDates'); + $this->addTask('core-issue#2487 Add / alter defaults for civicrm_contribution_recur', 'updateDBDefaultsForContributionRecur'); + $this->addTask('Install reCAPTCHA extension', 'installReCaptchaExtension'); + } + + // /** + // * Upgrade function. + // * + // * @param string $rev + // */ + // public function upgrade_5_0_x($rev) { + // $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); + // $this->addTask('Do the foo change', 'taskFoo', ...); + // // Additional tasks here... + // // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex. + // // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable. + // } + + /** + * @param \CRM_Queue_TaskContext $ctx + * + * @return bool + */ + public static function updateNoteDates(CRM_Queue_TaskContext $ctx): bool { + CRM_Core_DAO::executeQuery("UPDATE civicrm_note SET note_date = modified_date, created_date = modified_date, modified_date = modified_date"); + return TRUE; + } + + /** + * @param \CRM_Queue_TaskContext $ctx + * + * @return bool + */ + public static function alterSavedSearchFK(CRM_Queue_TaskContext $ctx) { + CRM_Core_BAO_SchemaHandler::safeRemoveFK('civicrm_group', 'FK_civicrm_group_saved_search_id'); + CRM_Core_DAO::executeQuery('DELETE civicrm_saved_search FROM civicrm_saved_search LEFT JOIN civicrm_group ON civicrm_saved_search.id = civicrm_group.saved_search_id WHERE civicrm_group.id IS NULL AND form_values IS NOT NULL and api_params IS NULL'); + CRM_Core_DAO::executeQuery('ALTER TABLE civicrm_group ADD CONSTRAINT `FK_civicrm_group_saved_search_id` FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE CASCADE', [], TRUE, NULL, FALSE, FALSE); + return TRUE; + } + + /** + * Update DB defaults for contribution recur. + * + * This adds default values for start_date, create_date, modified_date + * and frequency_interval in line with what is in the UI (frequency_unit + * already has 'month' as the default. + * + * The default of 'Pending' for contribution_recur_id will be updated as + * appropriate as soon as a contribution is attached to it by BAO code. + * + * The core code does not rely on the defaults for any of these fields. + * + * @param \CRM_Queue_TaskContext $ctx + * + * @return bool + */ + public static function updateDBDefaultsForContributionRecur(CRM_Queue_TaskContext $ctx): bool { + $pendingID = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_ContributionRecur', 'contribution_status_id', 'Pending'); + CRM_Core_DAO::executeQuery("UPDATE `civicrm_contribution_recur` SET `modified_date` = CURRENT_TIMESTAMP() WHERE `modified_date` IS NULL"); + CRM_Core_DAO::executeQuery(" + ALTER TABLE `civicrm_contribution_recur` + MODIFY COLUMN `start_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The date the first scheduled recurring contribution occurs.', + MODIFY COLUMN `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this recurring contribution record was created.', + MODIFY COLUMN `modified_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Last updated date for this record. mostly the last time a payment was received', + MODIFY COLUMN `contribution_status_id` int(10) unsigned DEFAULT {$pendingID}, + MODIFY COLUMN `frequency_interval` int(10) unsigned NOT NULL DEFAULT 1 COMMENT 'Number of time units for recurrence of payment.'; + "); + return TRUE; + } + + /** + * Install recaptcha extension. + * + * This feature is restructured as a core extension - which will eventually allow us to replace/remove the + * reCAPTCHA implementation + * @param \CRM_Queue_TaskContext $ctx + * + * @return bool + * @throws \CRM_Core_Exception + */ + public static function installReCaptchaExtension(CRM_Queue_TaskContext $ctx) { + // Install via direct SQL manipulation. Note that: + // (1) This extension has no activation logic. + // (2) On new installs, the extension is activated purely via default SQL INSERT. + // (3) Caches are flushed at the end of the upgrade. + // ($) Over long term, upgrade steps are more reliable in SQL. API/BAO sometimes don't work mid-upgrade. + $insert = CRM_Utils_SQL_Insert::into('civicrm_extension')->row([ + 'type' => 'module', + 'full_name' => 'recaptcha', + 'name' => 'reCAPTCHA', + 'label' => 'reCAPTCHA', + 'file' => 'recaptcha', + 'schema_version' => NULL, + 'is_active' => 1, + ]); + CRM_Core_DAO::executeQuery($insert->usingReplace()->toSQL()); + + CRM_Core_DAO::executeQuery(' +UPDATE civicrm_navigation +SET name="misc_admin_settings" +WHERE name="Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)" +'); + CRM_Core_DAO::executeQuery(' +UPDATE civicrm_navigation +SET label="Misc (Undelete, PDFs, Limits, Logging, etc.)" +WHERE label="Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)" +'); + + return TRUE; + } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveThirtySix.php b/civicrm/CRM/Upgrade/Incremental/php/FiveThirtySix.php index d1dfe3112a..89a65a6c77 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveThirtySix.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveThirtySix.php @@ -83,7 +83,6 @@ class CRM_Upgrade_Incremental_php_FiveThirtySix extends CRM_Upgrade_Incremental_ 'civicrm_saved_search', 'description', "text DEFAULT NULL"); $this->addTask('core-issue#2422 - Add constraints to civicrm_saved_search', 'taskAddConstraints'); - } /** diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveZero.php b/civicrm/CRM/Upgrade/Incremental/php/FiveZero.php index 92b2034ee0..6fdae40a39 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FiveZero.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveZero.php @@ -47,15 +47,6 @@ class CRM_Upgrade_Incremental_php_FiveZero extends CRM_Upgrade_Incremental_Base //} } - /** - * Upgrade function. - * - * @param string $rev - */ - public function upgrade_5_0_0($rev) { - $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev); - } - /* * Important! All upgrade functions MUST add a 'runSql' task. * Uncomment and use the following template for a new upgrade version diff --git a/civicrm/CRM/Upgrade/Incremental/php/Template.php b/civicrm/CRM/Upgrade/Incremental/php/Template.php index 3f9d3971dc..debafbfa8a 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/Template.php +++ b/civicrm/CRM/Upgrade/Incremental/php/Template.php @@ -22,8 +22,8 @@ class CRM_Upgrade_Incremental_php_<?php echo $camelNumber; ?> extends CRM_Upgrad /** * Compute any messages which should be displayed beforeupgrade. * - * Note: This function is called iteratively for each upcoming - * revision to the database. + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). * * @param string $preUpgradeMessage * @param string $rev @@ -40,6 +40,9 @@ class CRM_Upgrade_Incremental_php_<?php echo $camelNumber; ?> extends CRM_Upgrad /** * Compute any messages which should be displayed after upgrade. * + * Note: This function is called iteratively for each incremental upgrade step. + * There must be a concrete step (eg 'X.Y.Z.mysql.tpl' or 'upgrade_X_Y_Z()'). + * * @param string $postUpgradeMessage * alterable. * @param string $rev diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.36.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.36.0.mysql.tpl deleted file mode 100644 index 6260b20273..0000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.36.0.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.36.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.36.1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.36.1.mysql.tpl deleted file mode 100644 index be3c0315cc..0000000000 --- a/civicrm/CRM/Upgrade/Incremental/sql/5.36.1.mysql.tpl +++ /dev/null @@ -1 +0,0 @@ -{* file to handle db changes in 5.36.1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.37.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.37.alpha1.mysql.tpl new file mode 100644 index 0000000000..6b904c195d --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.37.alpha1.mysql.tpl @@ -0,0 +1,19 @@ +{* file to handle db changes in 5.37.alpha1 during upgrade *} + +DROP VIEW IF EXISTS civicrm_view_case_activity_upcoming; +DROP VIEW IF EXISTS civicrm_view_case_activity_recent; + +UPDATE civicrm_state_province s + INNER JOIN civicrm_country c + on c.id = s.country_id AND c.name = 'United Kingdom' AND s.name = 'Carmarthenshire' AND s.abbreviation = 'CRF' + SET s.abbreviation = 'CMN'; + +ALTER TABLE `civicrm_case_type` CHANGE `is_active` `is_active` tinyint DEFAULT 1 COMMENT 'Is this case type enabled?'; + +-- https://lab.civicrm.org/dev/core/-/issues/2442 + +SELECT @option_group_id_activity_contacts := id FROM civicrm_option_group WHERE name = 'activity_contacts'; + +UPDATE civicrm_option_value SET weight = 1 WHERE name = 'Activity Targets' AND option_group_id = @option_group_id_activity_contacts; +UPDATE civicrm_option_value SET weight = 2 WHERE name = 'Activity Source' AND option_group_id = @option_group_id_activity_contacts; +UPDATE civicrm_option_value SET weight = 3 WHERE name = 'Activity Assignees' AND option_group_id = @option_group_id_activity_contacts; diff --git a/civicrm/CRM/Utils/Cache/Redis.php b/civicrm/CRM/Utils/Cache/Redis.php index d56427d867..87c7361139 100644 --- a/civicrm/CRM/Utils/Cache/Redis.php +++ b/civicrm/CRM/Utils/Cache/Redis.php @@ -145,7 +145,7 @@ class CRM_Utils_Cache_Redis implements CRM_Utils_Cache_Interface { */ public function delete($key) { CRM_Utils_Cache::assertValidKey($key); - $this->_cache->delete($this->_prefix . $key); + $this->_cache->del($this->_prefix . $key); return TRUE; } diff --git a/civicrm/CRM/Utils/EnglishNumber.php b/civicrm/CRM/Utils/EnglishNumber.php index 08a7a2a1f1..c95bb6af21 100644 --- a/civicrm/CRM/Utils/EnglishNumber.php +++ b/civicrm/CRM/Utils/EnglishNumber.php @@ -122,4 +122,60 @@ class CRM_Utils_EnglishNumber { } } + /** + * Convert an English-style number to an int. + * + * @param string $english + * Ex: 'TwentyTwo' or 'forty-four' + * + * @return int + * 22 or 44 + */ + public static function toInt(string $english) { + $intBuf = 0; + $strBuf = strtolower(str_replace('-', '', $english)); + + foreach (self::$intervalsOfTen as $num => $name) { + if (CRM_Utils_String::startsWith($strBuf, strtolower($name))) { + $intBuf += 10 * $num; + $strBuf = substr($strBuf, strlen($name)); + break; + } + } + foreach (array_reverse(self::$lowNumbers, TRUE) as $num => $name) { + if (CRM_Utils_String::startsWith($strBuf, strtolower($name))) { + $intBuf += $num; + $strBuf = substr($strBuf, strlen($name)); + break; + } + } + + if (!empty($strBuf)) { + throw new InvalidArgumentException("Failed to parse english number: $strBuf"); + } + + return $intBuf; + } + + /** + * Determine if a string looks like + * + * @param string $english + * + * @return bool + */ + public static function isNumeric(string $english): bool { + static $pat; + if (empty($pat)) { + $words = array_map( + function($w) { + return preg_quote(strtolower($w)); + }, + array_merge(array_values(self::$lowNumbers), array_values(self::$intervalsOfTen)) + ); + $pat = '/^(\-|' . implode('|', $words) . ')+$/'; + } + return (bool) preg_match($pat, strtolower($english)); + } + } diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php index 2c0d195862..dc54996f14 100644 --- a/civicrm/CRM/Utils/Hook.php +++ b/civicrm/CRM/Utils/Hook.php @@ -2023,16 +2023,19 @@ abstract class CRM_Utils_Hook { * This hook is called when exporting Civi's permission to the CMS. Use this hook to modify * the array of system permissions for CiviCRM. * + * @param array $newPermissions + * Array to be filled with permissions. * @param array $permissions - * Array of permissions. See CRM_Core_Permission::getCorePermissions() for - * the format of this array. + * Already calculated permissions. These can be altered. Notably an + * extension might want to add it's permissions to 'implied' or to + * remove some permissions. * * @return null * The return value is ignored */ - public static function permission(&$permissions) { - return self::singleton()->invoke(['permissions'], $permissions, - self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, + public static function permission(&$newPermissions, &$permissions) { + return self::singleton()->invoke(['permissions', 'all_permissions'], $newPermissions, $permissions, + self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, 'civicrm_permission' ); } diff --git a/civicrm/CRM/Utils/Money.php b/civicrm/CRM/Utils/Money.php index c6a39f03cc..e81330950b 100644 --- a/civicrm/CRM/Utils/Money.php +++ b/civicrm/CRM/Utils/Money.php @@ -85,8 +85,7 @@ class CRM_Utils_Money { if ($currency === ' ') { CRM_Core_Error::deprecatedWarning('Passing empty currency to CRM_Utils_Money::format is deprecated if you need it for display without currency call CRM_Utils_Money::formatLocaleNumericRounded'); } - - $amount = self::formatNumericByFormat($amount); + $amount = self::formatUSLocaleNumericRounded($amount, 2); // If it contains tags, means that HTML was passed and the // amount is already converted properly, // so don't mess with it again. @@ -184,17 +183,24 @@ class CRM_Utils_Money { * * It's not totally clear when it changes the $amount value but has historical usage. * - * @param string $amount + * @param string|float $amount * @param int $numberOfPlaces * * @return string */ - protected static function formatLocaleNumericRounded($amount, $numberOfPlaces) { - if (!extension_loaded('intl')) { - self::missingIntlNotice(); + protected static function formatUSLocaleNumericRounded($amount, int $numberOfPlaces): string { + if (!extension_loaded('intl') || !is_numeric($amount)) { + // @todo - we should not attempt to format non-numeric strings. For now + // these will not fail but will give notices on php 7.4 + if (!is_numeric($amount)) { + CRM_Core_Error::deprecatedWarning('Formatting non-numeric values is no longer supported: ' . htmlspecialchars($amount)); + } + else { + self::missingIntlNotice(); + } return self::formatNumericByFormat($amount, '%!.' . $numberOfPlaces . 'i'); } - $money = Money::of($amount, CRM_Core_Config::singleton()->defaultCurrency, new CustomContext($numberOfPlaces), RoundingMode::CEILING); + $money = Money::of($amount, CRM_Core_Config::singleton()->defaultCurrency, new CustomContext($numberOfPlaces), RoundingMode::HALF_UP); // @todo - we specify en_US here because we don't want this function to do // currency replacement at the moment because // formatLocaleNumericRoundedByPrecision is doing it and if it @@ -234,7 +240,7 @@ class CRM_Utils_Money { * Formatted amount. */ public static function formatLocaleNumericRoundedByPrecision($amount, $precision) { - $amount = self::formatLocaleNumericRounded($amount, $precision); + $amount = self::formatUSLocaleNumericRounded($amount, $precision); return self::replaceCurrencySeparators($amount); } @@ -253,8 +259,8 @@ class CRM_Utils_Money { * Formatted amount. */ public static function formatLocaleNumericRoundedByOptionalPrecision($amount, $precision) { - $decimalPlaces = strlen(substr($amount, strpos($amount, '.') + 1)); - $amount = self::formatLocaleNumericRounded($amount, $precision > $decimalPlaces ? $decimalPlaces : $precision); + $decimalPlaces = self::getDecimalPlacesForAmount((string) $amount); + $amount = self::formatUSLocaleNumericRounded($amount, $precision > $decimalPlaces ? $decimalPlaces : $precision); return self::replaceCurrencySeparators($amount); } @@ -316,4 +322,16 @@ class CRM_Utils_Money { CRM_Core_Session::singleton()->setStatus(ts('As this system does not include the PHP intl extension, CiviCRM has fallen back onto a slightly less accurate and deprecated method to format money'), ts('Missing PHP INTL extension')); } + /** + * Get the number of characters after the decimal point. + * + * @param string $amount + * + * @return int + */ + protected static function getDecimalPlacesForAmount(string $amount): int { + $decimalPlaces = strlen(substr($amount, strpos($amount, '.') + 1)); + return $decimalPlaces; + } + } diff --git a/civicrm/CRM/Utils/Rule.php b/civicrm/CRM/Utils/Rule.php index 9341e173f9..9c5707925c 100644 --- a/civicrm/CRM/Utils/Rule.php +++ b/civicrm/CRM/Utils/Rule.php @@ -625,6 +625,10 @@ class CRM_Utils_Rule { * @return bool */ public static function boolean($value) { + if ($value === TRUE || $value === FALSE) { + return TRUE; + } + // This is intentionally not using === comparison - but will fail on FALSE. return preg_match( '/(^(1|0)$)|(^(Y(es)?|N(o)?)$)|(^(T(rue)?|F(alse)?)$)/i', $value ) ? TRUE : FALSE; diff --git a/civicrm/CRM/Utils/System/Base.php b/civicrm/CRM/Utils/System/Base.php index e126a6d5f3..6a1ce83351 100644 --- a/civicrm/CRM/Utils/System/Base.php +++ b/civicrm/CRM/Utils/System/Base.php @@ -1012,4 +1012,10 @@ abstract class CRM_Utils_System_Base { return []; } + /** + * Invalidates the cache of dynamic routes and forces a rebuild. + */ + public function invalidateRouteCache() { + } + } diff --git a/civicrm/CRM/Utils/System/Drupal8.php b/civicrm/CRM/Utils/System/Drupal8.php index a7bb1aaede..a506c36b93 100644 --- a/civicrm/CRM/Utils/System/Drupal8.php +++ b/civicrm/CRM/Utils/System/Drupal8.php @@ -858,4 +858,14 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase { return \Drupal::entityTypeManager()->getStorage('user')->load($userID); } + /** + * Helper function to rebuild the Drupal 8 or 9 dynamic routing cache. + * We need to do this after enabling extensions that add routes and it's worth doing when we reset Civi paths. + */ + public function invalidateRouteCache() { + if (class_exists('\Drupal') && \Drupal::hasContainer()) { + \Drupal::service('router.builder')->rebuild(); + } + } + } diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index fa8518bc21..b2af0a91ed 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -767,12 +767,21 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { public function createUser(&$params, $mail) { $user_data = [ 'ID' => '', - 'user_pass' => $params['cms_pass'], 'user_login' => $params['cms_name'], 'user_email' => $params[$mail], 'nickname' => $params['cms_name'], 'role' => get_option('default_role'), ]; + + // If there's a password add it, otherwise generate one. + if (!empty($params['cms_pass'])) { + $user_data['user_pass'] = $params['cms_pass']; + } + else { + $user_data['user_pass'] = wp_generate_password(12, FALSE);; + } + + // Assign WordPress User "name" field(s). if (isset($params['contactID'])) { $contactType = CRM_Contact_BAO_Contact::getContactType($params['contactID']); if ($contactType == 'Individual') { @@ -783,17 +792,55 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { $params['contactID'], 'last_name' ); } + if ($contactType == 'Organization') { + $user_data['first_name'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', + $params['contactID'], 'organization_name' + ); + } + if ($contactType == 'Household') { + $user_data['first_name'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', + $params['contactID'], 'household_name' + ); + } } + /** + * Broadcast that CiviCRM is about to create a WordPress User. + * + * @since 5.37 + */ + do_action('civicrm_pre_create_user'); + + // Remove the CiviCRM-WordPress listeners. + $this->hooks_core_remove(); + + // Now go ahead and create a WordPress User. $uid = wp_insert_user($user_data); - $creds = []; - $creds['user_login'] = $params['cms_name']; - $creds['user_password'] = $params['cms_pass']; - $creds['remember'] = TRUE; - $user = wp_signon($creds, FALSE); + /* + * Call wp_signon if we aren't already logged in. + * For example, we might be creating a new user from the Contact record. + */ + if (!current_user_can('create_users')) { + $creds = []; + $creds['user_login'] = $params['cms_name']; + $creds['remember'] = TRUE; + wp_signon($creds, FALSE); + } + + // Fire the new user action. Sends notification email by default. + do_action('register_new_user', $uid); + + // Restore the CiviCRM-WordPress listeners. + $this->hooks_core_add(); + + /** + * Broadcast that CiviCRM has creates a WordPress User. + * + * @since 5.37 + */ + do_action('civicrm_post_create_user'); - wp_new_user_notification($uid, $user_data['user_pass']); return $uid; } @@ -872,7 +919,7 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { * @inheritDoc */ public function isPasswordUserGenerated() { - return TRUE; + return FALSE; } /** @@ -992,6 +1039,13 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { } } + /** + * @inheritDoc + */ + public function checkPermissionAddUser() { + return current_user_can('create_users'); + } + /** * @inheritDoc */ @@ -1254,4 +1308,38 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base { return ['ufAccessURL' => CRM_Utils_System::url('civicrm/admin/access/wp-permissions', 'reset=1')]; } + /** + * Remove CiviCRM's callbacks. + * + * These may cause recursive updates when creating or editing a WordPress + * user. This doesn't seem to have been necessary in the past, but seems + * to be causing trouble when newer versions of BuddyPress and CiviCRM are + * active. + * + * Based on the civicrm-wp-profile-sync plugin by Christian Wach. + * + * @see self::hooks_core_add() + */ + public function hooks_core_remove() { + $civicrm = civi_wp(); + + // Remove current CiviCRM plugin filters. + remove_action('user_register', [$civicrm->users, 'update_user']); + remove_action('profile_update', [$civicrm->users, 'update_user']); + } + + /** + * Add back CiviCRM's callbacks. + * This method undoes the removal of the callbacks above. + * + * @see self::hooks_core_remove() + */ + public function hooks_core_add() { + $civicrm = civi_wp(); + + // Re-add current CiviCRM plugin filters. + add_action('user_register', [$civicrm->users, 'update_user']); + add_action('profile_update', [$civicrm->users, 'update_user']); + } + } diff --git a/civicrm/CRM/Utils/Token.php b/civicrm/CRM/Utils/Token.php index e41a872038..6d17edcfc3 100644 --- a/civicrm/CRM/Utils/Token.php +++ b/civicrm/CRM/Utils/Token.php @@ -313,10 +313,20 @@ class CRM_Utils_Token { /** * Replace all the org-level tokens in $str * - * @fixme: This function appears to be broken, as it depends on + * @fixme: This function appears to be broken, as it depended on * nonexistant method: CRM_Core_BAO_CustomValue::getContactValues() - * Marking as deprecated until this is fixed + * Marking as deprecated until this is clarified. + * * @deprecated + * - the above hard-breakage was there from 2015 to 2021 and + * no error was ever reported on it -does that mean + * 1) the code is never hit because the only function that + * calls this function is never called or + * 2) it was called but never required to resolve any tokens + * or more specifically custom field tokens + * + * The handling for custom fields with the removed token has + * now been removed. * * @param string $str * The string with tokens to be replaced. @@ -330,17 +340,16 @@ class CRM_Utils_Token { * @return string * The processed string */ - public static function &replaceOrgTokens($str, &$org, $html = FALSE, $escapeSmarty = FALSE) { + public static function replaceOrgTokens($str, &$org, $html = FALSE, $escapeSmarty = FALSE) { self::$_tokens['org'] = array_merge( array_keys(CRM_Contact_BAO_Contact::importableFields('Organization')), ['address', 'display_name', 'checksum', 'contact_id'] ); - $cv = NULL; foreach (self::$_tokens['org'] as $token) { // print "Getting token value for $token<br/><br/>"; - if ($token == '') { + if ($token === '') { continue; } @@ -354,23 +363,11 @@ class CRM_Utils_Token { $value = NULL; - if ($cfID = CRM_Core_BAO_CustomField::getKeyID($token)) { - // only generate cv if we need it - if ($cv === NULL) { - $cv = CRM_Core_BAO_CustomValue::getContactValues($org['contact_id']); - } - foreach ($cv as $cvFieldID => $value) { - if ($cvFieldID == $cfID) { - $value = CRM_Core_BAO_CustomField::displayValue($value, $cfID); - break; - } - } - } - elseif ($token == 'checksum') { + if ($token === 'checksum') { $cs = CRM_Contact_BAO_Contact_Utils::generateChecksum($org['contact_id']); $value = "cs={$cs}"; } - elseif ($token == 'address') { + elseif ($token === 'address') { // Build the location values array $loc = []; @@ -732,22 +729,12 @@ class CRM_Utils_Token { $value = "cs={$cs}"; } else { - $value = CRM_Utils_Array::retrieveValueRecursive($contact, $token); + $value = (array) CRM_Utils_Array::retrieveValueRecursive($contact, $token); - // FIXME: for some pseudoconstants we get array ( 0 => id, 1 => label ) - if (is_array($value)) { - $value = $value[1]; - } - // Convert pseudoconstants using metadata - elseif ($value && is_numeric($value)) { - $allFields = CRM_Contact_BAO_Contact::exportableFields('All'); - if (!empty($allFields[$token]['pseudoconstant'])) { - $value = CRM_Core_PseudoConstant::getLabel('CRM_Contact_BAO_Contact', $token, $value); - } - } - elseif ($value && CRM_Utils_String::endsWith($token, '_date')) { - $value = CRM_Utils_Date::customFormat($value); + foreach ($value as $index => $item) { + $value[$index] = self::convertPseudoConstantsUsingMetadata($value[$index], $token); } + $value = implode(', ', $value); } if (!$html) { @@ -1897,4 +1884,24 @@ class CRM_Utils_Token { return $output; } + /** + * @param $value + * @param $token + * + * @return bool|int|mixed|string|null + */ + protected static function convertPseudoConstantsUsingMetadata($value, $token) { + // Convert pseudoconstants using metadata + if ($value && is_numeric($value)) { + $allFields = CRM_Contact_BAO_Contact::exportableFields('All'); + if (!empty($allFields[$token]['pseudoconstant'])) { + $value = CRM_Core_PseudoConstant::getLabel('CRM_Contact_BAO_Contact', $token, $value); + } + } + elseif ($value && CRM_Utils_String::endsWith($token, '_date')) { + $value = CRM_Utils_Date::customFormat($value); + } + return $value; + } + } diff --git a/civicrm/CRM/Utils/Type.php b/civicrm/CRM/Utils/Type.php index 8dfc7d6295..01d833e72b 100644 --- a/civicrm/CRM/Utils/Type.php +++ b/civicrm/CRM/Utils/Type.php @@ -529,4 +529,30 @@ class CRM_Utils_Type { return array_combine($types, $types); } + /** + * Get all the types that are text-like. + * + * The returned types would all legitimately be compared to '' by mysql + * in a query. + * + * e.g + * WHERE display_name = '' is valid + * WHERE id = '' is not and in some mysql configurations and queries + * could cause an error. + * + * @return array + */ + public static function getTextTypes(): array { + return [ + self::T_STRING, + self::T_ENUM, + self::T_TEXT, + self::T_LONGTEXT, + self::T_BLOB, + self::T_EMAIL, + self::T_URL, + self::T_MEDIUMBLOB, + ]; + } + } diff --git a/civicrm/Civi/API/Request.php b/civicrm/Civi/API/Request.php index 5d0457ef7d..5ad9b9d219 100644 --- a/civicrm/Civi/API/Request.php +++ b/civicrm/Civi/API/Request.php @@ -10,6 +10,8 @@ */ namespace Civi\API; +use Civi\Api4\Utils\CoreUtil; + /** * Class Request * @package Civi\API @@ -48,7 +50,7 @@ class Request { $apiRequest = \Civi\Api4\CustomValue::$action(substr($entity, 7)); } else { - $callable = ["\\Civi\\Api4\\$entity", $action]; + $callable = [CoreUtil::getApiClass($entity), $action]; if (!is_callable($callable)) { throw new \Civi\API\Exception\NotImplementedException("API ($entity, $action) does not exist (join the API team and implement it!)"); } diff --git a/civicrm/Civi/Angular/AngularLoader.php b/civicrm/Civi/Angular/AngularLoader.php index 60252c83b3..6ddd90ed09 100644 --- a/civicrm/Civi/Angular/AngularLoader.php +++ b/civicrm/Civi/Angular/AngularLoader.php @@ -78,8 +78,18 @@ class AngularLoader { } /** - * Register resources required by Angular. + * Calling this method from outside this class is deprecated. * + * The correct way to use this class is as a service, which will load automatically. E.g.: + * + * ``` + * Civi::service('angularjs.loader') + * ->addModules('moduleFoo') + * ->useApp(); // Optional, if Civi's routing is desired (full-page apps only) + * ``` + * + * @internal + * @deprecated * @return AngularLoader */ public function load() { @@ -88,9 +98,7 @@ class AngularLoader { if ($this->crmApp !== NULL) { $this->addModules($this->crmApp['modules']); - $region = \CRM_Core_Region::instance($this->crmApp['region']); - $region->update('default', ['disabled' => TRUE]); - $region->add(['template' => $this->crmApp['file'], 'weight' => 0]); + $this->res->addSetting([ 'crmApp' => [ 'defaultRoute' => $this->crmApp['defaultRoute'], @@ -216,6 +224,9 @@ class AngularLoader { 'file' => 'Civi/Angular/Page/Main.tpl', ]; $this->crmApp = array_merge($defaults, $settings); + $region = \CRM_Core_Region::instance($this->crmApp['region']); + $region->update('default', ['disabled' => TRUE]); + $region->add(['template' => $this->crmApp['file'], 'weight' => 0]); return $this; } @@ -327,6 +338,10 @@ class AngularLoader { } /** + * Replace all previously set modules. + * + * Use with caution, as it can cause conflicts with other extensions who have added modules. + * * @param array $modules * @return AngularLoader */ @@ -335,4 +350,14 @@ class AngularLoader { return $this; } + /** + * @param \Civi\Core\Event\GenericHookEvent $e + */ + public function onRegionRender($e) { + if ($e->region->_name === $this->region && ($this->modules || $this->crmApp)) { + $this->load(); + $this->res->addScriptFile('civicrm', 'js/crm-angularjs-loader.js', 200, $this->getRegion(), FALSE); + } + } + } diff --git a/civicrm/Civi/Angular/Manager.php b/civicrm/Civi/Angular/Manager.php index 7a075d585b..dacd8f3062 100644 --- a/civicrm/Civi/Angular/Manager.php +++ b/civicrm/Civi/Angular/Manager.php @@ -70,6 +70,8 @@ class Manager { $this->cache->clear(); $this->modules = NULL; $this->changeSets = NULL; + // Force-refresh assetBuilder files + \Civi::container()->get('asset_builder')->clear(FALSE); return $this; } diff --git a/civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php b/civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php new file mode 100644 index 0000000000..8f83c11206 --- /dev/null +++ b/civicrm/Civi/Api4/Action/CiviCase/CiviCaseSaveTrait.php @@ -0,0 +1,80 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Action\CiviCase; + +/** + * @inheritDoc + */ +trait CiviCaseSaveTrait { + + /** + * @param array $cases + * @return array + */ + protected function writeObjects($cases) { + $cases = array_values($cases); + $result = parent::writeObjects($cases); + + // If the case doesn't have an id, it's new & needs to be opened. + foreach ($cases as $idx => $case) { + if (empty($case['id'])) { + $this->openCase($case, $result[$idx]['id']); + } + } + return $result; + } + + /** + * @param $case + * @param $id + * @throws \CRM_Core_Exception + */ + private function openCase($case, $id) { + // Add case contacts (clients) + foreach ((array) $case['contact_id'] as $cid) { + $contactParams = ['case_id' => $id, 'contact_id' => $cid]; + \CRM_Case_BAO_CaseContact::create($contactParams); + } + + $caseType = \CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $case['case_type_id'], 'name'); + + // Pass "Open Case" params to XML processor + $xmlProcessor = new \CRM_Case_XMLProcessor_Process(); + $params = [ + 'clientID' => $case['contact_id'] ?? NULL, + 'creatorID' => $case['creator_id'] ?? NULL, + 'standardTimeline' => 1, + 'activityTypeName' => 'Open Case', + 'caseID' => $id, + 'subject' => $case['subject'] ?? NULL, + 'location' => $case['location'] ?? NULL, + 'activity_date_time' => $case['start_date'] ?? NULL, + 'duration' => $case['duration'] ?? NULL, + 'medium_id' => $case['medium_id'] ?? NULL, + 'details' => $case['details'] ?? NULL, + 'custom' => [], + 'relationship_end_date' => $case['end_date'] ?? NULL, + ]; + + // Do it! :-D + $xmlProcessor->run($caseType, $params); + } + +} diff --git a/civicrm/Civi/Api4/Action/CiviCase/Create.php b/civicrm/Civi/Api4/Action/CiviCase/Create.php new file mode 100644 index 0000000000..9ebd5de832 --- /dev/null +++ b/civicrm/Civi/Api4/Action/CiviCase/Create.php @@ -0,0 +1,28 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Action\CiviCase; + +/** + * @inheritDoc + */ +class Create extends \Civi\Api4\Generic\DAOCreateAction { + use CiviCaseSaveTrait; + +} diff --git a/civicrm/Civi/Api4/Action/CiviCase/Save.php b/civicrm/Civi/Api4/Action/CiviCase/Save.php new file mode 100644 index 0000000000..2b01873dc8 --- /dev/null +++ b/civicrm/Civi/Api4/Action/CiviCase/Save.php @@ -0,0 +1,21 @@ +<?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\CiviCase; + +/** + * @inheritDoc + */ +class Save extends \Civi\Api4\Generic\DAOSaveAction { + use CiviCaseSaveTrait; + +} diff --git a/civicrm/Civi/Api4/Action/CiviCase/Update.php b/civicrm/Civi/Api4/Action/CiviCase/Update.php new file mode 100644 index 0000000000..67bd771479 --- /dev/null +++ b/civicrm/Civi/Api4/Action/CiviCase/Update.php @@ -0,0 +1,28 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Action\CiviCase; + +/** + * @inheritDoc + */ +class Update extends \Civi\Api4\Generic\DAOUpdateAction { + use CiviCaseSaveTrait; + +} diff --git a/civicrm/Civi/Api4/Action/Entity/Get.php b/civicrm/Civi/Api4/Action/Entity/Get.php index 0deee772fe..765a3703a9 100644 --- a/civicrm/Civi/Api4/Action/Entity/Get.php +++ b/civicrm/Civi/Api4/Action/Entity/Get.php @@ -20,7 +20,9 @@ namespace Civi\Api4\Action\Entity; use Civi\Api4\CustomGroup; +use Civi\Api4\CustomValue; use Civi\Api4\Service\Schema\Joinable\CustomGroupJoinable; +use Civi\Api4\Utils\CoreUtil; /** * Get the names & docblocks of all APIv4 entities. @@ -57,14 +59,15 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { foreach (glob("$dir/*.php") as $file) { $matches = []; preg_match('/(\w*)\.php$/', $file, $matches); - $entity = '\Civi\Api4\\' . $matches[1]; - if ( - (!$toGet || in_array($matches[1], $toGet)) - && is_a($entity, '\Civi\Api4\Generic\AbstractEntity', TRUE) - ) { - $info = $entity::getInfo(); + $className = '\Civi\Api4\\' . $matches[1]; + if (is_a($className, '\Civi\Api4\Generic\AbstractEntity', TRUE)) { + $info = $className::getInfo(); + $entityName = $info['name']; + $daoName = $info['dao'] ?? NULL; // Only include DAO entities from enabled components - if (empty($info['dao']) || !defined($info['dao'] . '::COMPONENT') || in_array(constant($info['dao'] . '::COMPONENT'), $enabledComponents)) { + if ((!$toGet || in_array($entityName, $toGet)) && + (!$daoName || !defined("{$daoName}::COMPONENT") || in_array($daoName::COMPONENT, $enabledComponents)) + ) { $entities[$info['name']] = $info; } } @@ -94,25 +97,20 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { ->setSelect(['name', 'title', 'help_pre', 'help_post', 'extends', 'icon']) ->setCheckPermissions(FALSE) ->execute(); + $baseInfo = CustomValue::getInfo(); foreach ($customEntities as $customEntity) { $fieldName = 'Custom_' . $customEntity['name']; - $baseEntity = '\Civi\Api4\\' . CustomGroupJoinable::getEntityFromExtends($customEntity['extends']); + $baseEntity = CoreUtil::getApiClass(CustomGroupJoinable::getEntityFromExtends($customEntity['extends'])); $entities[$fieldName] = [ 'name' => $fieldName, 'title' => $customEntity['title'], 'title_plural' => $customEntity['title'], 'description' => ts('Custom group for %1', [1 => $baseEntity::getInfo()['title_plural']]), - 'searchable' => TRUE, - 'type' => ['CustomValue'], 'paths' => [ 'view' => "civicrm/contact/view/cd?reset=1&gid={$customEntity['id']}&recId=[id]&multiRecordDisplay=single", ], - 'see' => [ - 'https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/#multiple-record-fieldsets', - '\\Civi\\Api4\\CustomGroup', - ], - 'icon' => $customEntity['icon'], - ]; + 'icon' => $customEntity['icon'] ?: NULL, + ] + $baseInfo; if (!empty($customEntity['help_pre'])) { $entities[$fieldName]['comment'] = $this->plainTextify($customEntity['help_pre']); } diff --git a/civicrm/Civi/Api4/Action/Entity/GetLinks.php b/civicrm/Civi/Api4/Action/Entity/GetLinks.php index 5a4bc69785..2d224da335 100644 --- a/civicrm/Civi/Api4/Action/Entity/GetLinks.php +++ b/civicrm/Civi/Api4/Action/Entity/GetLinks.php @@ -33,7 +33,7 @@ class GetLinks extends \Civi\Api4\Generic\BasicGetAction { foreach ($schema->getTables() as $table) { $entity = CoreUtil::getApiNameFromTableName($table->getName()); // Since this is an api function, exclude tables that don't have an api - if (strpos($entity, 'Custom_') === 0 || class_exists('\Civi\Api4\\' . $entity)) { + if ($entity) { $item = [ 'entity' => $entity, 'table' => $table->getName(), diff --git a/civicrm/Civi/Api4/Action/GetActions.php b/civicrm/Civi/Api4/Action/GetActions.php index 66b8966ade..e0dfbb597b 100644 --- a/civicrm/Civi/Api4/Action/GetActions.php +++ b/civicrm/Civi/Api4/Action/GetActions.php @@ -14,6 +14,7 @@ namespace Civi\Api4\Action; use Civi\API\Exception\NotImplementedException; use Civi\Api4\Generic\BasicGetAction; +use Civi\Api4\Utils\CoreUtil; use Civi\Api4\Utils\ReflectionUtils; /** @@ -30,7 +31,8 @@ class GetActions extends BasicGetAction { protected function getRecords() { $this->_actionsToGet = $this->_itemsToGet('name'); - $entityReflection = new \ReflectionClass('\Civi\Api4\\' . $this->_entityName); + $className = CoreUtil::getApiClass($this->_entityName); + $entityReflection = new \ReflectionClass($className); foreach ($entityReflection->getMethods(\ReflectionMethod::IS_STATIC | \ReflectionMethod::IS_PUBLIC) as $method) { $actionName = $method->getName(); if ($actionName != 'permissions' && $actionName != 'getInfo' && $actionName[0] != '_') { @@ -39,28 +41,30 @@ class GetActions extends BasicGetAction { } if (!$this->_actionsToGet || count($this->_actionsToGet) > count($this->_actions)) { // Search for entity-specific actions in extensions + $nameSpace = str_replace('Civi\Api4\\', 'Civi\Api4\Action\\', $className); foreach (\CRM_Extension_System::singleton()->getMapper()->getActiveModuleFiles() as $ext) { $dir = \CRM_Utils_File::addTrailingSlash(dirname($ext['filePath'])); - $this->scanDir($dir . 'Civi/Api4/Action/' . $this->_entityName); + $this->scanDir($dir, $nameSpace); } // Search for entity-specific actions in core - $this->scanDir(\CRM_Utils_File::addTrailingSlash(__DIR__) . $this->_entityName); + global $civicrm_root; + $this->scanDir(\CRM_Utils_File::addTrailingSlash($civicrm_root), $nameSpace); } ksort($this->_actions); return $this->_actions; } /** - * @param $dir + * @param string $dir + * @param string $nameSpace */ - private function scanDir($dir) { + private function scanDir($dir, $nameSpace) { + $dir .= str_replace('\\', '/', $nameSpace); if (is_dir($dir)) { foreach (glob("$dir/*.php") as $file) { - $matches = []; - preg_match('/(\w*)\.php$/', $file, $matches); - $actionName = array_pop($matches); - $actionClass = new \ReflectionClass('\\Civi\\Api4\\Action\\' . $this->_entityName . '\\' . $actionName); - if ($actionClass->isInstantiable() && $actionClass->isSubclassOf('\\Civi\\Api4\\Generic\\AbstractAction')) { + $actionName = basename($file, '.php'); + $actionClass = new \ReflectionClass($nameSpace . '\\' . $actionName); + if ($actionClass->isInstantiable() && $actionClass->isSubclassOf('\Civi\Api4\Generic\AbstractAction')) { $this->loadAction(lcfirst($actionName)); } } diff --git a/civicrm/Civi/Api4/Action/Permission/Get.php b/civicrm/Civi/Api4/Action/Permission/Get.php index 7bb0afbe72..8dd4e4bb32 100644 --- a/civicrm/Civi/Api4/Action/Permission/Get.php +++ b/civicrm/Civi/Api4/Action/Permission/Get.php @@ -21,27 +21,29 @@ use Civi\Api4\Generic\BasicGetAction; * It may be poorly suited to recursive usage (e.g. permissions defined dynamically * on top of permissions!) or during install/uninstall processes. * - * The list of permissions is generated via hook, and there is a standard/default - * listener. + * The list of permissions is generated via hook, and there is a standard/default listener. * * @see CRM_Core_Permission_List * @see \CRM_Utils_Hook::permissionList */ class Get extends BasicGetAction { - public function getRecords() { + /** + * @return array[] + */ + protected function getRecords() { $cacheKey = 'list_' . $GLOBALS['tsLocale']; if (!isset(\Civi::$statics[__CLASS__][$cacheKey])) { $perms = []; \CRM_Utils_Hook::permissionList($perms); - foreach (array_keys($perms) as $permName) { + foreach ($perms as $permName => $permission) { $defaults = [ 'name' => $permName, 'group' => 'unknown', 'is_synthetic' => ($permName[0] === '@'), 'is_active' => TRUE, ]; - $perms[$permName] = array_merge($defaults, $perms[$permName]); + $perms[$permName] = array_merge($defaults, $permission); } \Civi::$statics[__CLASS__][$cacheKey] = $perms; } diff --git a/civicrm/Civi/Api4/Action/System/ResetPaths.php b/civicrm/Civi/Api4/Action/System/ResetPaths.php new file mode 100644 index 0000000000..87b3365610 --- /dev/null +++ b/civicrm/Civi/Api4/Action/System/ResetPaths.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\Action\System; + +/** + * Reset paths using doSiteMove(). + */ +class ResetPaths extends \Civi\Api4\Generic\AbstractAction { + + public function _run(\Civi\Api4\Generic\Result $result) { + \CRM_Core_BAO_ConfigSetting::doSiteMove(); + } + +} diff --git a/civicrm/Civi/Api4/Batch.php b/civicrm/Civi/Api4/Batch.php new file mode 100644 index 0000000000..8a75875070 --- /dev/null +++ b/civicrm/Civi/Api4/Batch.php @@ -0,0 +1,30 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * Batch entity. + * + * @see https://docs.civicrm.org/user/en/latest/pledges/everyday-tasks/#batch-entry-of-pledges + * @package Civi\Api4 + */ +class Batch extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/CaseActivity.php b/civicrm/Civi/Api4/CaseActivity.php new file mode 100644 index 0000000000..95be921960 --- /dev/null +++ b/civicrm/Civi/Api4/CaseActivity.php @@ -0,0 +1,33 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * CaseActivity BridgeEntity. + * + * This connects an activity to one or more cases. + * + * @see \Civi\Api4\Case + * @package Civi\Api4 + */ +class CaseActivity extends Generic\DAOEntity { + use Generic\Traits\EntityBridge; + +} diff --git a/civicrm/Civi/Api4/CaseContact.php b/civicrm/Civi/Api4/CaseContact.php new file mode 100644 index 0000000000..4d8ae66130 --- /dev/null +++ b/civicrm/Civi/Api4/CaseContact.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 | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * CaseContact BridgeEntity. + * + * This connects a client to a case. + * + * @see \Civi\Api4\Case + * @package Civi\Api4 + */ +class CaseContact extends Generic\DAOEntity { + use Generic\Traits\EntityBridge; + + protected static function getEntityTitle($plural = FALSE) { + return $plural ? ts('Case Clients') : ts('Case Client'); + } + +} diff --git a/civicrm/Civi/Api4/CaseType.php b/civicrm/Civi/Api4/CaseType.php new file mode 100644 index 0000000000..ada029a598 --- /dev/null +++ b/civicrm/Civi/Api4/CaseType.php @@ -0,0 +1,33 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * CaseType Entity. + * + * This contains configuration settings for each type of CiviCase. + * + * @see \Civi\Api4\Case + * @package Civi\Api4 + */ +class CaseType extends Generic\DAOEntity { + use Generic\Traits\OptionList; + +} diff --git a/civicrm/Civi/Api4/CiviCase.php b/civicrm/Civi/Api4/CiviCase.php new file mode 100644 index 0000000000..e1fb635c19 --- /dev/null +++ b/civicrm/Civi/Api4/CiviCase.php @@ -0,0 +1,69 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4; + +/** + * Case entity. + * + * Note that the class for this entity is named "CiviCase" because "Case" is a keyword reserved by php. + * + * @see https://docs.civicrm.org/user/en/latest/case-management/what-is-civicase/ + * @package Civi\Api4 + */ +class CiviCase extends Generic\DAOEntity { + + /** + * Explicitly declare entity name because it doesn't match the name of this class + * (due to the php reserved keyword issue) + * + * @return string + */ + protected static function getEntityName() { + return 'Case'; + } + + /** + * @param bool $checkPermissions + * @return Action\CiviCase\Create + */ + public static function create($checkPermissions = TRUE) { + return (new Action\CiviCase\Create('Case', __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + + /** + * @param bool $checkPermissions + * @return Action\CiviCase\Save + */ + public static function save($checkPermissions = TRUE) { + return (new Action\CiviCase\Save('Case', __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + + /** + * @param bool $checkPermissions + * @return Action\CiviCase\Update + */ + public static function update($checkPermissions = TRUE) { + return (new Action\CiviCase\Update('Case', __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + +} diff --git a/civicrm/Civi/Api4/CustomValue.php b/civicrm/Civi/Api4/CustomValue.php index 9cc2e5f753..ef7fdc1687 100644 --- a/civicrm/Civi/Api4/CustomValue.php +++ b/civicrm/Civi/Api4/CustomValue.php @@ -16,7 +16,6 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ - namespace Civi\Api4; /** @@ -124,7 +123,8 @@ class CustomValue { } /** - * @inheritDoc + * @see \Civi\Api4\Generic\AbstractEntity::permissions() + * @return array */ public static function permissions() { $entity = 'contact'; @@ -134,4 +134,20 @@ class CustomValue { return \CRM_Utils_Array::value($entity, $permissions, []) + $permissions['default']; } + /** + * @see \Civi\Api4\Generic\AbstractEntity::getInfo() + * @return array + */ + public static function getInfo() { + return [ + 'class' => __CLASS__, + 'type' => ['CustomValue'], + 'searchable' => TRUE, + 'see' => [ + 'https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/#multiple-record-fieldsets', + '\Civi\Api4\CustomGroup', + ], + ]; + } + } diff --git a/civicrm/Civi/Api4/EntityFinancialAccount.php b/civicrm/Civi/Api4/EntityFinancialAccount.php new file mode 100644 index 0000000000..0963f73a93 --- /dev/null +++ b/civicrm/Civi/Api4/EntityFinancialAccount.php @@ -0,0 +1,34 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * EntityFinancialAccount. Joins financial accounts to financial types. + * + * @see https://docs.civicrm.org/dev/en/latest/financial/financialentities/#financial-accounts + * + * @bridge entity_id financial_account_id + * @ui_join_filters account_relationship + * + * @package Civi\Api4 + */ +class EntityFinancialAccount extends Generic\DAOEntity { + use Generic\Traits\EntityBridge; + +} diff --git a/civicrm/Civi/Api4/EntityFinancialTrxn.php b/civicrm/Civi/Api4/EntityFinancialTrxn.php new file mode 100644 index 0000000000..3ad135bfdc --- /dev/null +++ b/civicrm/Civi/Api4/EntityFinancialTrxn.php @@ -0,0 +1,34 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * EntityFinancialTrxns. Joins financial transactions to contributions + * and financial items. + * + * @see https://docs.civicrm.org/dev/en/latest/financial/financialentities/ + * + * @bridge entity_id financial_trxn_id + * + * @package Civi\Api4 + */ +class EntityFinancialTrxn extends Generic\DAOEntity { + use Generic\Traits\EntityBridge; + +} diff --git a/civicrm/Civi/Api4/FinancialTrxn.php b/civicrm/Civi/Api4/FinancialTrxn.php new file mode 100644 index 0000000000..eafd153047 --- /dev/null +++ b/civicrm/Civi/Api4/FinancialTrxn.php @@ -0,0 +1,35 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * Financial Trxn entity. + * + * Financial transactions are low level accounting entries. + * They include, but are not limited to, payments. + * + * If your interest is really in payments you should use that api. + * + * @see https://docs.civicrm.org/dev/en/latest/financial/financialentities/#financial-transactions + * + * @package Civi\Api4 + */ +class FinancialTrxn extends Generic\DAOEntity { + +} diff --git a/civicrm/Civi/Api4/Generic/AbstractAction.php b/civicrm/Civi/Api4/Generic/AbstractAction.php index 2103f319c2..050fd5a6ca 100644 --- a/civicrm/Civi/Api4/Generic/AbstractAction.php +++ b/civicrm/Civi/Api4/Generic/AbstractAction.php @@ -18,6 +18,7 @@ namespace Civi\Api4\Generic; +use Civi\Api4\Utils\CoreUtil; use Civi\Api4\Utils\FormattingUtil; use Civi\Api4\Utils\ReflectionUtils; @@ -399,7 +400,7 @@ abstract class AbstractAction implements \ArrayAccess { * @return array */ public function getPermissions() { - $permissions = call_user_func(["\\Civi\\Api4\\" . $this->_entityName, 'permissions']); + $permissions = call_user_func([CoreUtil::getApiClass($this->_entityName), 'permissions']); $permissions += [ // applies to getFields, getActions, etc. 'meta' => ['access CiviCRM'], diff --git a/civicrm/Civi/Api4/Generic/AbstractEntity.php b/civicrm/Civi/Api4/Generic/AbstractEntity.php index a2d5e117cd..754d33f387 100644 --- a/civicrm/Civi/Api4/Generic/AbstractEntity.php +++ b/civicrm/Civi/Api4/Generic/AbstractEntity.php @@ -46,7 +46,7 @@ abstract class AbstractEntity { * @return \Civi\Api4\Action\GetActions */ public static function getActions($checkPermissions = TRUE) { - return (new \Civi\Api4\Action\GetActions(self::getEntityName(), __FUNCTION__)) + return (new \Civi\Api4\Action\GetActions(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -109,9 +109,10 @@ abstract class AbstractEntity { * @throws NotImplementedException */ public static function __callStatic($action, $args) { - $entity = self::getEntityName(); + $entity = static::getEntityName(); + $nameSpace = str_replace('Civi\Api4\\', 'Civi\Api4\Action\\', static::class); // Find class for this action - $entityAction = "\\Civi\\Api4\\Action\\$entity\\" . ucfirst($action); + $entityAction = "$nameSpace\\" . ucfirst($action); if (class_exists($entityAction)) { $actionObject = new $entityAction($entity, $action); if (isset($args[0]) && $args[0] === FALSE) { @@ -137,6 +138,7 @@ abstract class AbstractEntity { 'title_plural' => static::getEntityTitle(TRUE), 'type' => [self::stripNamespace(get_parent_class(static::class))], 'paths' => static::getEntityPaths(), + 'class' => static::class, ]; // Add info for entities with a corresponding DAO $dao = \CRM_Core_DAO_AllCoreTables::getFullName($info['name']); diff --git a/civicrm/Civi/Api4/Generic/BasicEntity.php b/civicrm/Civi/Api4/Generic/BasicEntity.php index b582d29491..96122f909a 100644 --- a/civicrm/Civi/Api4/Generic/BasicEntity.php +++ b/civicrm/Civi/Api4/Generic/BasicEntity.php @@ -87,7 +87,7 @@ abstract class BasicEntity extends AbstractEntity { * @return BasicGetAction */ public static function get($checkPermissions = TRUE) { - return (new BasicGetAction(static::class, __FUNCTION__, static::$getter)) + return (new BasicGetAction(static::getEntityName(), __FUNCTION__, static::$getter)) ->setCheckPermissions($checkPermissions); } @@ -96,7 +96,7 @@ abstract class BasicEntity extends AbstractEntity { * @return BasicCreateAction */ public static function create($checkPermissions = TRUE) { - return (new BasicCreateAction(static::class, __FUNCTION__, static::$setter)) + return (new BasicCreateAction(static::getEntityName(), __FUNCTION__, static::$setter)) ->setCheckPermissions($checkPermissions); } @@ -105,7 +105,7 @@ abstract class BasicEntity extends AbstractEntity { * @return BasicSaveAction */ public static function save($checkPermissions = TRUE) { - return (new BasicSaveAction(static::class, __FUNCTION__, static::$idField, static::$setter)) + return (new BasicSaveAction(static::getEntityName(), __FUNCTION__, static::$idField, static::$setter)) ->setCheckPermissions($checkPermissions); } @@ -114,7 +114,7 @@ abstract class BasicEntity extends AbstractEntity { * @return BasicUpdateAction */ public static function update($checkPermissions = TRUE) { - return (new BasicUpdateAction(static::class, __FUNCTION__, static::$idField, static::$setter)) + return (new BasicUpdateAction(static::getEntityName(), __FUNCTION__, static::$idField, static::$setter)) ->setCheckPermissions($checkPermissions); } @@ -123,7 +123,7 @@ abstract class BasicEntity extends AbstractEntity { * @return BasicBatchAction */ public static function delete($checkPermissions = TRUE) { - return (new BasicBatchAction(static::class, __FUNCTION__, static::$idField, static::$deleter)) + return (new BasicBatchAction(static::getEntityName(), __FUNCTION__, static::$idField, static::$deleter)) ->setCheckPermissions($checkPermissions); } @@ -132,7 +132,7 @@ abstract class BasicEntity extends AbstractEntity { * @return BasicReplaceAction */ public static function replace($checkPermissions = TRUE) { - return (new BasicReplaceAction(static::class, __FUNCTION__)) + return (new BasicReplaceAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } diff --git a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php index 6999cdc20d..0c0d9eae66 100644 --- a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php +++ b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php @@ -301,6 +301,10 @@ class BasicGetFieldsAction extends BasicGetAction { 'name' => 'readonly', 'data_type' => 'Boolean', ], + [ + 'name' => 'output_formatters', + 'data_type' => 'Array', + ], ]; } diff --git a/civicrm/Civi/Api4/Generic/DAOEntity.php b/civicrm/Civi/Api4/Generic/DAOEntity.php index ad34c1a753..3bec3919bb 100644 --- a/civicrm/Civi/Api4/Generic/DAOEntity.php +++ b/civicrm/Civi/Api4/Generic/DAOEntity.php @@ -32,7 +32,7 @@ abstract class DAOEntity extends AbstractEntity { * @return DAOGetAction */ public static function get($checkPermissions = TRUE) { - return (new DAOGetAction(static::class, __FUNCTION__)) + return (new DAOGetAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -41,7 +41,7 @@ abstract class DAOEntity extends AbstractEntity { * @return DAOSaveAction */ public static function save($checkPermissions = TRUE) { - return (new DAOSaveAction(static::class, __FUNCTION__)) + return (new DAOSaveAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -50,7 +50,7 @@ abstract class DAOEntity extends AbstractEntity { * @return DAOGetFieldsAction */ public static function getFields($checkPermissions = TRUE) { - return (new DAOGetFieldsAction(static::class, __FUNCTION__)) + return (new DAOGetFieldsAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -59,7 +59,7 @@ abstract class DAOEntity extends AbstractEntity { * @return DAOCreateAction */ public static function create($checkPermissions = TRUE) { - return (new DAOCreateAction(static::class, __FUNCTION__)) + return (new DAOCreateAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -68,7 +68,7 @@ abstract class DAOEntity extends AbstractEntity { * @return DAOUpdateAction */ public static function update($checkPermissions = TRUE) { - return (new DAOUpdateAction(static::class, __FUNCTION__)) + return (new DAOUpdateAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -77,7 +77,7 @@ abstract class DAOEntity extends AbstractEntity { * @return DAODeleteAction */ public static function delete($checkPermissions = TRUE) { - return (new DAODeleteAction(static::class, __FUNCTION__)) + return (new DAODeleteAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -86,7 +86,7 @@ abstract class DAOEntity extends AbstractEntity { * @return BasicReplaceAction */ public static function replace($checkPermissions = TRUE) { - return (new BasicReplaceAction(static::class, __FUNCTION__)) + return (new BasicReplaceAction(static::getEntityName(), __FUNCTION__)) ->setCheckPermissions($checkPermissions); } diff --git a/civicrm/Civi/Api4/Generic/DAOGetAction.php b/civicrm/Civi/Api4/Generic/DAOGetAction.php index 055eb72370..778cc3de40 100644 --- a/civicrm/Civi/Api4/Generic/DAOGetAction.php +++ b/civicrm/Civi/Api4/Generic/DAOGetAction.php @@ -164,16 +164,16 @@ class DAOGetAction extends AbstractGetAction { /** * @param string $entity - * @param bool $required + * @param string|bool $type * @param string $bridge * @param array ...$conditions * @return DAOGetAction */ - public function addJoin(string $entity, bool $required = FALSE, $bridge = NULL, ...$conditions): DAOGetAction { + public function addJoin(string $entity, $type = 'LEFT', $bridge = NULL, ...$conditions): DAOGetAction { if ($bridge) { array_unshift($conditions, $bridge); } - array_unshift($conditions, $entity, $required); + array_unshift($conditions, $entity, $type); $this->join[] = $conditions; return $this; } diff --git a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php index b7b4c2d3ac..dea475d2fb 100644 --- a/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php +++ b/civicrm/Civi/Api4/Generic/Traits/DAOActionTrait.php @@ -15,6 +15,7 @@ namespace Civi\Api4\Generic\Traits; use Civi\Api4\CustomField; use Civi\Api4\Service\Schema\Joinable\CustomGroupJoinable; use Civi\Api4\Utils\FormattingUtil; +use Civi\Api4\Utils\CoreUtil; /** * @method string getLanguage() @@ -35,8 +36,7 @@ trait DAOActionTrait { * @return \CRM_Core_DAO|string */ protected function getBaoName() { - require_once 'api/v3/utils.php'; - return \_civicrm_api3_get_BAO($this->getEntityName()); + return CoreUtil::getBAOFromApiName($this->getEntityName()); } /** @@ -158,8 +158,6 @@ trait DAOActionTrait { * @param array $params * @param int $entityId * - * @return mixed - * * @throws \API_Exception * @throws \CRM_Core_Exception */ diff --git a/civicrm/Civi/Api4/MailSettings.php b/civicrm/Civi/Api4/MailSettings.php index d5c70622c6..d2f6e5e0de 100644 --- a/civicrm/Civi/Api4/MailSettings.php +++ b/civicrm/Civi/Api4/MailSettings.php @@ -34,7 +34,7 @@ class MailSettings extends Generic\DAOEntity { * @return \Civi\Api4\Action\MailSettings\TestConnection */ public static function testConnection($checkPermissions = TRUE) { - $action = new \Civi\Api4\Action\MailSettings\TestConnection(static::class, __FUNCTION__); + $action = new \Civi\Api4\Action\MailSettings\TestConnection(__CLASS__, __FUNCTION__); return $action->setCheckPermissions($checkPermissions); } diff --git a/civicrm/Civi/Api4/PaymentToken.php b/civicrm/Civi/Api4/PaymentToken.php new file mode 100644 index 0000000000..e7ba25bcd2 --- /dev/null +++ b/civicrm/Civi/Api4/PaymentToken.php @@ -0,0 +1,30 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + +namespace Civi\Api4; + +/** + * Payment Token entity. + * + * @see https://docs.civicrm.org/user/en/latest/contributions/payment-processors/#managing-recurring-contributions + * + * @package Civi\Api4 + */ +class PaymentToken extends Generic\DAOEntity { + use Generic\Traits\OptionList; + +} diff --git a/civicrm/Civi/Api4/Permission.php b/civicrm/Civi/Api4/Permission.php index 8f5f3e5fdd..95a63bc9ea 100644 --- a/civicrm/Civi/Api4/Permission.php +++ b/civicrm/Civi/Api4/Permission.php @@ -32,10 +32,11 @@ class Permission extends Generic\AbstractEntity { /** * @param bool $checkPermissions - * @return \Civi\Api4\Generic\BasicGetAction + * @return Action\Permission\Get */ public static function get($checkPermissions = TRUE) { - return (new \Civi\Api4\Action\Permission\Get(__CLASS__, __FUNCTION__))->setCheckPermissions($checkPermissions); + return (new Action\Permission\Get(__CLASS__, __FUNCTION__)) + ->setCheckPermissions($checkPermissions); } /** @@ -48,31 +49,26 @@ class Permission extends Generic\AbstractEntity { [ 'name' => 'group', 'title' => 'Group', - 'required' => TRUE, 'data_type' => 'String', ], [ 'name' => 'name', 'title' => 'Name', - 'required' => TRUE, 'data_type' => 'String', ], [ 'name' => 'title', 'title' => 'Title', - 'required' => TRUE, 'data_type' => 'String', ], [ 'name' => 'description', 'title' => 'Description', - 'required' => FALSE, 'data_type' => 'String', ], [ 'name' => 'is_synthetic', 'title' => 'Is Synthetic', - 'required' => FALSE, 'data_type' => 'Boolean', ], [ @@ -80,7 +76,6 @@ class Permission extends Generic\AbstractEntity { 'title' => 'Is Active', 'description' => '', 'default' => TRUE, - 'required' => FALSE, 'data_type' => 'Boolean', ], ]; diff --git a/civicrm/Civi/Api4/Query/Api4SelectQuery.php b/civicrm/Civi/Api4/Query/Api4SelectQuery.php index 894d14e07b..83033154f8 100644 --- a/civicrm/Civi/Api4/Query/Api4SelectQuery.php +++ b/civicrm/Civi/Api4/Query/Api4SelectQuery.php @@ -93,7 +93,7 @@ class Api4SelectQuery { $this->api = $apiGet; // Always select ID of main table unless grouping by something else - $this->forceSelectId = !$this->getGroupBy() || $this->getGroupBy() === ['id']; + $this->forceSelectId = !$this->isAggregateQuery() || $this->getGroupBy() === ['id']; // Build field lists foreach ($this->api->entityFields() as $field) { @@ -115,6 +115,19 @@ class Api4SelectQuery { $this->addExplicitJoins(); } + protected function isAggregateQuery() { + if ($this->getGroupBy()) { + return TRUE; + } + foreach ($this->getSelect() as $sql) { + $classname = get_class(SqlExpression::convert($sql, TRUE)); + if (method_exists($classname, 'getCategory') && $classname::getCategory() === SqlFunction::CATEGORY_AGGREGATE) { + return TRUE; + } + } + return FALSE; + } + /** * Builds main final sql statement after initialization. * @@ -388,7 +401,7 @@ class Api4SelectQuery { */ protected function composeClause(array $clause, string $type) { // Pad array for unary operators - list($expr, $operator, $value) = array_pad($clause, 3, NULL); + [$expr, $operator, $value] = array_pad($clause, 3, NULL); if (!in_array($operator, CoreUtil::getOperators(), TRUE)) { throw new \API_Exception('Illegal operator'); } @@ -612,7 +625,18 @@ class Api4SelectQuery { $alias = $alias ? \CRM_Utils_String::munge($alias, '_', 256) : strtolower($entity); // First item in the array is a boolean indicating if the join is required (aka INNER or LEFT). // The rest are join conditions. - $side = array_shift($join) ? 'INNER' : 'LEFT'; + $side = array_shift($join); + // If omitted, supply default (LEFT); and legacy support for boolean values + if (!is_string($side)) { + $side = $side ? 'INNER' : 'LEFT'; + } + if (!in_array($side, ['INNER', 'LEFT', 'EXCLUDE'])) { + throw new \API_Exception("Illegal value for join side: '$side'."); + } + if ($side === 'EXCLUDE') { + $side = 'LEFT'; + $this->api->addWhere("$alias.id", 'IS NULL'); + } // Add all fields from joined entity to spec $joinEntityGet = \Civi\API\Request::create($entity, 'get', ['version' => 4, 'checkPermissions' => $this->getCheckPermissions()]); $joinEntityFields = $joinEntityGet->entityFields(); @@ -630,15 +654,15 @@ class Api4SelectQuery { // If the first condition is a string, it's the name of a bridge entity if (!empty($join[0]) && is_string($join[0]) && \CRM_Utils_Rule::alphanumeric($join[0])) { $this->explicitJoins[$alias]['bridge'] = $join[0]; - $conditions = $this->getBridgeJoin($join, $entity, $alias); + $this->addBridgeJoin($join, $entity, $alias, $side); } else { $conditions = $this->getJoinConditions($join, $entity, $alias, $joinEntityFields); + foreach (array_filter($join) as $clause) { + $conditions[] = $this->treeWalkClauses($clause, 'ON'); + } + $this->join($side, $tableName, $alias, $conditions); } - foreach (array_filter($join) as $clause) { - $conditions[] = $this->treeWalkClauses($clause, 'ON'); - } - $this->join($side, $tableName, $alias, $conditions); } } @@ -664,7 +688,7 @@ class Api4SelectQuery { return FALSE; } foreach ([$sideA, $sideB] as $expr) { - if ($expr === "$alias.id" || !empty($joinEntityFields["$alias.$expr"]['fk_entity'])) { + if ($expr === "$alias.id" || !empty($joinEntityFields[str_replace("$alias.", '', $expr)]['fk_entity'])) { return TRUE; } } @@ -697,17 +721,67 @@ class Api4SelectQuery { * * This creates a double-join in sql that appears to the API user like a single join. * + * LEFT joins use a subquery so that the bridge + joined-entity can be treated like a single table. + * * @param array $joinTree * @param string $joinEntity * @param string $alias - * @return array + * @param string $side * @throws \API_Exception */ - protected function getBridgeJoin(&$joinTree, $joinEntity, $alias) { + protected function addBridgeJoin($joinTree, $joinEntity, $alias, $side) { $bridgeEntity = array_shift($joinTree); + + // INNER joins require unique aliases, whereas left joins will be inside a subquery and short aliases are more readable + $bridgeAlias = $side === 'INNER' ? $alias . '_via_' . strtolower($bridgeEntity) : 'b'; + $joinAlias = $side === 'INNER' ? $alias : 'c'; + + $joinTable = CoreUtil::getTableName($joinEntity); + [$bridgeTable, $baseRef, $joinRef] = $this->getBridgeRefs($bridgeEntity, $joinEntity); + + $bridgeFields = $this->registerBridgeJoinFields($bridgeEntity, $joinRef, $baseRef, $alias, $bridgeAlias, $side); + + $linkConditions = $this->getBridgeLinkConditions($bridgeAlias, $joinAlias, $joinTable, $joinRef); + + $bridgeConditions = $this->getBridgeJoinConditions($joinTree, $baseRef, $alias, $bridgeAlias, $bridgeEntity, $side); + + $acls = array_values($this->getAclClause($joinAlias, CoreUtil::getBAOFromApiName($joinEntity), [NULL, NULL])); + + $joinConditions = []; + foreach (array_filter($joinTree) as $clause) { + $joinConditions[] = $this->treeWalkClauses($clause, 'ON'); + } + + // INNER joins are done with 2 joins + if ($side === 'INNER') { + $this->join('INNER', $bridgeTable, $bridgeAlias, $bridgeConditions); + $this->join('INNER', $joinTable, $alias, array_merge($linkConditions, $acls, $joinConditions)); + } + // For LEFT joins, construct a subquery to link the bridge & join tables as one + else { + $joinEntityClass = CoreUtil::getApiClass($joinEntity); + foreach ($joinEntityClass::get($this->getCheckPermissions())->entityFields() as $name => $field) { + $bridgeFields[$field['column_name']] = '`' . $joinAlias . '`.`' . $field['column_name'] . '`'; + } + $select = implode(',', $bridgeFields); + $joinConditions = array_merge($joinConditions, $bridgeConditions); + $innerConditions = array_merge($linkConditions, $acls); + $subquery = "SELECT $select FROM `$bridgeTable` `$bridgeAlias`, `$joinTable` `$joinAlias` WHERE " . implode(' AND ', $innerConditions); + $this->query->join($alias, "$side JOIN ($subquery) `$alias` ON " . implode(' AND ', $joinConditions)); + } + } + + /** + * Get the table name and 2 reference columns from a bridge entity + * + * @param string $bridgeEntity + * @param string $joinEntity + * @return array + * @throws \API_Exception + */ + private function getBridgeRefs(string $bridgeEntity, string $joinEntity): array { /* @var \Civi\Api4\Generic\DAOEntity $bridgeEntityClass */ - $bridgeEntityClass = '\Civi\Api4\\' . $bridgeEntity; - $bridgeAlias = $alias . '_via_' . strtolower($bridgeEntity); + $bridgeEntityClass = CoreUtil::getApiClass($bridgeEntity); $bridgeInfo = $bridgeEntityClass::getInfo(); $bridgeFields = $bridgeInfo['bridge'] ?? []; // Sanity check - bridge entity should declare exactly 2 FK fields @@ -718,8 +792,6 @@ class Api4SelectQuery { $bridgeDAO = $bridgeInfo['dao']; $bridgeTable = $bridgeDAO::getTableName(); - $joinTable = CoreUtil::getTableName($joinEntity); - $bridgeEntityGet = $bridgeEntityClass::get($this->getCheckPermissions()); // Get the 2 bridge reference columns as CRM_Core_Reference_* objects $joinRef = $baseRef = NULL; foreach ($bridgeDAO::getReferenceColumns() as $ref) { @@ -735,29 +807,74 @@ class Api4SelectQuery { if (!$joinRef || !$baseRef) { throw new \API_Exception("Unable to join $bridgeEntity to $joinEntity"); } - // Create link between bridge entity and join entity - $joinConditions = [ - "`$bridgeAlias`.`{$joinRef->getReferenceKey()}` = `$alias`.`{$joinRef->getTargetKey()}`", + return [$bridgeTable, $baseRef, $joinRef]; + } + + /** + * Get the clause to link bridge entity with join entity + * + * @param string $bridgeAlias + * @param string $joinAlias + * @param string $joinTable + * @param $joinRef + * @return array + */ + private function getBridgeLinkConditions(string $bridgeAlias, string $joinAlias, string $joinTable, $joinRef): array { + $linkConditions = [ + "`$bridgeAlias`.`{$joinRef->getReferenceKey()}` = `$joinAlias`.`{$joinRef->getTargetKey()}`", ]; // For dynamic references, also add the type column (e.g. `entity_table`) if ($joinRef->getTypeColumn()) { - $joinConditions[] = "`$bridgeAlias`.`{$joinRef->getTypeColumn()}` = '$joinTable'"; + $linkConditions[] = "`$bridgeAlias`.`{$joinRef->getTypeColumn()}` = '$joinTable'"; } - // Register fields (other than bridge FK fields) from the bridge entity as if they belong to the join entity + return $linkConditions; + } + + /** + * Register fields (other than bridge FK fields) from the bridge entity as if they belong to the join entity + * + * @param $bridgeEntity + * @param $joinRef + * @param $baseRef + * @param string $alias + * @param string $bridgeAlias + * @param string $side + * @return array + */ + private function registerBridgeJoinFields($bridgeEntity, $joinRef, $baseRef, string $alias, string $bridgeAlias, string $side): array { $fakeFields = []; - foreach ($bridgeEntityGet->entityFields() as $name => $field) { - if ($name === 'id' || $name === $joinRef->getReferenceKey() || $name === $joinRef->getTypeColumn() || $name === $baseRef->getReferenceKey() || $name === $baseRef->getTypeColumn()) { + $bridgeFkFields = [$joinRef->getReferenceKey(), $joinRef->getTypeColumn(), $baseRef->getReferenceKey(), $baseRef->getTypeColumn()]; + $bridgeEntityClass = CoreUtil::getApiClass($bridgeEntity); + foreach ($bridgeEntityClass::get($this->getCheckPermissions())->entityFields() as $name => $field) { + if ($name === 'id' || ($side === 'INNER' && in_array($name, $bridgeFkFields, TRUE))) { continue; } - // Note these fields get a sql alias pointing to the bridge entity, but an api alias pretending they belong to the join entity - $field['sql_name'] = '`' . $bridgeAlias . '`.`' . $field['column_name'] . '`'; - $this->addSpecField($alias . '.' . $field['name'], $field); - $fakeFields[] = $alias . '.' . $field['name']; + // For INNER joins, these fields get a sql alias pointing to the bridge entity, + // but an api alias pretending they belong to the join entity. + $field['sql_name'] = '`' . ($side === 'LEFT' ? $alias : $bridgeAlias) . '`.`' . $field['column_name'] . '`'; + $this->addSpecField($alias . '.' . $name, $field); + $fakeFields[$field['column_name']] = '`' . $bridgeAlias . '`.`' . $field['column_name'] . '`'; } - // Move conditions for the bridge join out of the joinTree + return $fakeFields; + } + + /** + * Extract bridge join conditions from the joinTree if any, else supply default conditions for join to base entity + * + * @param array $joinTree + * @param $baseRef + * @param string $alias + * @param string $bridgeAlias + * @param string $bridgeEntity + * @param string $side + * @return string[] + * @throws \API_Exception + */ + private function getBridgeJoinConditions(array &$joinTree, $baseRef, string $alias, string $bridgeAlias, string $bridgeEntity, string $side): array { $bridgeConditions = []; - $isExplicit = FALSE; - $joinTree = array_filter($joinTree, function($clause) use ($baseRef, $alias, $bridgeAlias, $fakeFields, &$bridgeConditions, &$isExplicit) { + $bridgeAlias = $side === 'INNER' ? $bridgeAlias : $alias; + // Find explicit bridge join conditions and move them out of the joinTree + $joinTree = array_filter($joinTree, function ($clause) use ($baseRef, $alias, $bridgeAlias, &$bridgeConditions) { list($sideA, $op, $sideB) = array_pad((array) $clause, 3, NULL); // Skip AND/OR/NOT branches if (!$sideB) { @@ -767,27 +884,18 @@ class Api4SelectQuery { 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); - $isExplicit = TRUE; 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); - $isExplicit = TRUE; return FALSE; } - // Other conditions that apply only to the bridge table should be - foreach ([$sideA, $sideB] as $expr) { - if (is_string($expr) && in_array(explode(':', $expr)[0], $fakeFields)) { - $bridgeConditions[] = $this->composeClause($clause, 'ON'); - return FALSE; - } - } return TRUE; }); // If no bridge conditions were specified, link it to the base entity - if (!$isExplicit) { + if (!$bridgeConditions) { if (!in_array($this->getEntity(), $baseRef->getTargetEntities())) { throw new \API_Exception("Unable to join $bridgeEntity to " . $this->getEntity()); } @@ -796,12 +904,7 @@ class Api4SelectQuery { $bridgeConditions[] = "`$bridgeAlias`.`{$baseRef->getTypeColumn()}` = '" . $this->getFrom() . "'"; } } - - $this->join('LEFT', $bridgeTable, $bridgeAlias, $bridgeConditions); - - $baoName = CoreUtil::getBAOFromApiName($joinEntity); - $acls = array_values($this->getAclClause($alias, $baoName, [NULL, NULL])); - return array_merge($acls, $joinConditions); + return $bridgeConditions; } /** diff --git a/civicrm/Civi/Api4/RelationshipCache.php b/civicrm/Civi/Api4/RelationshipCache.php index 8009477cc9..2f5ad02cc3 100644 --- a/civicrm/Civi/Api4/RelationshipCache.php +++ b/civicrm/Civi/Api4/RelationshipCache.php @@ -35,7 +35,7 @@ class RelationshipCache extends Generic\AbstractEntity { * @return Generic\DAOGetAction */ public static function get($checkPermissions = TRUE) { - return (new Generic\DAOGetAction(static::class, __FUNCTION__)) + return (new Generic\DAOGetAction(__CLASS__, __FUNCTION__)) ->setCheckPermissions($checkPermissions); } @@ -44,7 +44,7 @@ class RelationshipCache extends Generic\AbstractEntity { * @return Generic\DAOGetFieldsAction */ public static function getFields($checkPermissions = TRUE) { - return (new Generic\DAOGetFieldsAction(static::class, __FUNCTION__)) + return (new Generic\DAOGetFieldsAction(__CLASS__, __FUNCTION__)) ->setCheckPermissions($checkPermissions); } diff --git a/civicrm/Civi/Api4/Route.php b/civicrm/Civi/Api4/Route.php index 6681b645ec..b6b095bf10 100644 --- a/civicrm/Civi/Api4/Route.php +++ b/civicrm/Civi/Api4/Route.php @@ -33,14 +33,13 @@ class Route extends \Civi\Api4\Generic\AbstractEntity { /** * @param bool $checkPermissions - * @return \Civi\Api4\Generic\BasicGetAction + * @return Generic\BasicGetAction */ public static function get($checkPermissions = TRUE) { - return (new \Civi\Api4\Generic\BasicGetAction(__CLASS__, __FUNCTION__, function ($get) { - // Pulling from ::items() rather than DB -- because it provides the final/live/altered data. - $items = \CRM_Core_Menu::items(); + return (new Generic\BasicGetAction(__CLASS__, __FUNCTION__, function ($get) { $result = []; - foreach ($items as $path => $item) { + // Pulling from ::items() rather than DB -- because it provides the final/live/altered data. + foreach (\CRM_Core_Menu::items() as $path => $item) { $result[] = ['path' => $path] + $item; } return $result; @@ -57,37 +56,31 @@ class Route extends \Civi\Api4\Generic\AbstractEntity { [ 'name' => 'path', 'title' => 'Relative Path', - 'required' => TRUE, 'data_type' => 'String', ], [ 'name' => 'title', 'title' => 'Page Title', - 'required' => TRUE, 'data_type' => 'String', ], [ 'name' => 'page_callback', 'title' => 'Page Callback', - 'required' => TRUE, 'data_type' => 'String', ], [ 'name' => 'page_arguments', 'title' => 'Page Arguments', - 'required' => FALSE, 'data_type' => 'String', ], [ 'name' => 'path_arguments', 'title' => 'Path Arguments', - 'required' => FALSE, 'data_type' => 'String', ], [ 'name' => 'access_arguments', 'title' => 'Access Arguments', - 'required' => FALSE, 'data_type' => 'Array', ], ]; diff --git a/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php b/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php index 510ff78826..d77de0ed1d 100644 --- a/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php +++ b/civicrm/Civi/Api4/Service/Schema/Joinable/CustomGroupJoinable.php @@ -60,7 +60,7 @@ class CustomGroupJoinable extends Joinable { $entityFields = (array) \Civi::cache('metadata')->get($cacheKey); if (!$entityFields) { $fields = CustomField::get(FALSE) - ->setSelect(['custom_group.name', 'custom_group.extends', 'custom_group.table_name', '*']) + ->setSelect(['custom_group.name', 'custom_group.extends', 'custom_group.table_name', 'custom_group.title', '*']) ->addWhere('custom_group.table_name', '=', $this->getTargetTable()) ->execute(); foreach ($fields as $field) { diff --git a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php index 3aa807a572..2b24df11af 100644 --- a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php +++ b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php @@ -117,6 +117,11 @@ class FieldSpec { */ protected $readonly = FALSE; + /** + * @var callable[] + */ + protected $outputFormatters = []; + /** * Aliases for the valid data types * @@ -366,6 +371,33 @@ class FieldSpec { return $this; } + /** + * @return callable[] + */ + public function getOutputFormatters() { + return $this->outputFormatters; + } + + /** + * @param callable[] $outputFormatters + * @return $this + */ + public function setOutputFormatters($outputFormatters) { + $this->outputFormatters = $outputFormatters; + + return $this; + } + + /** + * @param callable $outputFormatter + * @return $this + */ + public function addOutputFormatter($outputFormatter) { + $this->outputFormatters[] = $outputFormatter; + + return $this; + } + /** * @return bool */ diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.php new file mode 100644 index 0000000000..ce0dcf726f --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/CaseCreationSpecProvider.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 | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\FieldSpec; +use Civi\Api4\Service\Spec\RequestSpec; + +class CaseCreationSpecProvider implements Generic\SpecProviderInterface { + + /** + * @inheritDoc + */ + public function modifySpec(RequestSpec $spec) { + $creator = new FieldSpec('creator_id', $spec->getEntity(), 'Integer'); + $creator->setTitle(ts('Case Creator')); + $creator->setDescription('Contact who created the case.'); + $creator->setFkEntity('Contact'); + $creator->setInputType('EntityRef'); + $spec->addFieldSpec($creator); + + $contact = new FieldSpec('contact_id', $spec->getEntity(), 'Array'); + $contact->setTitle(ts('Case Contact(s)')); + $contact->setLabel(ts('Case Client(s)')); + $contact->setDescription('Contact(s) who are case clients.'); + $contact->setFkEntity('Contact'); + $contact->setInputType('EntityRef'); + $contact->setRequired(TRUE); + $spec->addFieldSpec($contact); + + $location = new FieldSpec('location', $spec->getEntity(), 'String'); + $location->setTitle(ts('Activity Location')); + $location->setDescription('Open Case activity location.'); + $spec->addFieldSpec($location); + + $medium_id = new FieldSpec('medium_id', $spec->getEntity(), 'Integer'); + $medium_id->setTitle(ts('Activity Medium')); + $medium_id->setDescription('Open Case activity medium.'); + $spec->addFieldSpec($medium_id); + + $duration = new FieldSpec('duration', $spec->getEntity(), 'Integer'); + $duration->setTitle(ts('Activity Duration')); + $duration->setInputType('Number'); + $duration->setDescription('Open Case activity duration (minutes).'); + $spec->addFieldSpec($duration); + } + + /** + * @inheritDoc + */ + public function applies($entity, $action) { + return $entity === 'Case' && $action === 'create'; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/CaseTypeGetSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/CaseTypeGetSpecProvider.php new file mode 100644 index 0000000000..cd746a5585 --- /dev/null +++ b/civicrm/Civi/Api4/Service/Spec/Provider/CaseTypeGetSpecProvider.php @@ -0,0 +1,43 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC https://civicrm.org/licensing + */ + + +namespace Civi\Api4\Service\Spec\Provider; + +use Civi\Api4\Service\Spec\RequestSpec; + +class CaseTypeGetSpecProvider implements Generic\SpecProviderInterface { + + /** + * @param \Civi\Api4\Service\Spec\RequestSpec $spec + */ + public function modifySpec(RequestSpec $spec) { + $spec->getFieldByName('definition')->addOutputFormatter('CRM_Case_BAO_CaseType::formatOutputDefinition'); + } + + /** + * @param string $entity + * @param string $action + * + * @return bool + */ + public function applies($entity, $action) { + return $entity === 'CaseType' && $action === 'get'; + } + +} diff --git a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php index dad0c20caa..341ab2bbd1 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php @@ -63,7 +63,8 @@ class SpecFormatter { $field->setColumnName($data['column_name']); $field->setCustomFieldId($data['id'] ?? NULL); $field->setCustomGroupName($data['custom_group.name']); - $field->setTitle($data['label'] ?? NULL); + $field->setTitle($data['label']); + $field->setLabel($data['custom_group.title'] . ': ' . $data['label']); $field->setHelpPre($data['help_pre'] ?? NULL); $field->setHelpPost($data['help_post'] ?? NULL); $field->setOptions(self::customFieldHasOptions($data)); diff --git a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php index 5eda054230..ef9954f20c 100644 --- a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php +++ b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php @@ -132,7 +132,7 @@ class SpecGatherer { $customFields = CustomField::get(FALSE) ->addWhere('custom_group.extends', 'IN', $extends) ->addWhere('custom_group.is_multiple', '=', '0') - ->setSelect(['custom_group.name', '*']) + ->setSelect(['custom_group.name', 'custom_group.title', '*']) ->execute(); foreach ($customFields as $fieldArray) { @@ -148,7 +148,7 @@ class SpecGatherer { private function getCustomGroupFields($customGroup, RequestSpec $specification) { $customFields = CustomField::get(FALSE) ->addWhere('custom_group.name', '=', $customGroup) - ->setSelect(['custom_group.name', 'custom_group.table_name', '*']) + ->setSelect(['custom_group.name', 'custom_group.table_name', 'custom_group.title', '*']) ->execute(); foreach ($customFields as $fieldArray) { diff --git a/civicrm/Civi/Api4/System.php b/civicrm/Civi/Api4/System.php index 0afefe11a1..9ba22ab58f 100644 --- a/civicrm/Civi/Api4/System.php +++ b/civicrm/Civi/Api4/System.php @@ -63,4 +63,13 @@ class System extends Generic\AbstractEntity { }))->setCheckPermissions($checkPermissions); } + /** + * @param bool $checkPermissions + * @return Action\System\ResetPaths + */ + public static function resetPaths($checkPermissions = TRUE) { + return (new Action\System\ResetPaths(__CLASS__, __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + } diff --git a/civicrm/Civi/Api4/Utils/CoreUtil.php b/civicrm/Civi/Api4/Utils/CoreUtil.php index ebe7913797..f7195d0d17 100644 --- a/civicrm/Civi/Api4/Utils/CoreUtil.php +++ b/civicrm/Civi/Api4/Utils/CoreUtil.php @@ -21,13 +21,9 @@ namespace Civi\Api4\Utils; use CRM_Core_DAO_AllCoreTables as AllCoreTables; -require_once 'api/v3/utils.php'; - class CoreUtil { /** - * todo this class should not rely on api3 code - * * @param $entityName * * @return \CRM_Core_DAO|string @@ -38,7 +34,27 @@ class CoreUtil { if ($entityName === 'CustomValue' || strpos($entityName, 'Custom_') === 0) { return 'CRM_Core_BAO_CustomValue'; } - return \_civicrm_api3_get_BAO($entityName); + $dao = self::getApiClass($entityName)::getInfo()['dao'] ?? NULL; + if (!$dao) { + return NULL; + } + $bao = str_replace("DAO", "BAO", $dao); + // Check if this entity actually has a BAO. Fall back on the DAO if not. + $file = strtr($bao, '_', '/') . '.php'; + return stream_resolve_include_path($file) ? $bao : $dao; + } + + /** + * @param $entityName + * @return string|\Civi\Api4\Generic\AbstractEntity + */ + public static function getApiClass($entityName) { + if (strpos($entityName, 'Custom_') === 0) { + return 'Civi\Api4\CustomValue'; + } + // Because "Case" is a reserved php keyword + $className = 'Civi\Api4\\' . ($entityName === 'Case' ? 'CiviCase' : $entityName); + return class_exists($className) ? $className : NULL; } /** @@ -66,9 +82,10 @@ class CoreUtil { $entityName = AllCoreTables::getBriefName(AllCoreTables::getClassForTable($tableName)); if (!$entityName) { $customGroup = \CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $tableName, 'name', 'table_name'); - $entityName = $customGroup ? "Custom_$customGroup" : NULL; + return $customGroup ? "Custom_$customGroup" : NULL; } - return $entityName; + // Verify class exists + return self::getApiClass($entityName) ? $entityName : NULL; } /** diff --git a/civicrm/Civi/Api4/Utils/FormattingUtil.php b/civicrm/Civi/Api4/Utils/FormattingUtil.php index f6a7e49c4d..888aafb4b7 100644 --- a/civicrm/Civi/Api4/Utils/FormattingUtil.php +++ b/civicrm/Civi/Api4/Utils/FormattingUtil.php @@ -209,6 +209,10 @@ class FormattingUtil { if (!$field) { continue; } + if (!empty($field['output_formatters'])) { + self::applyFormatters($result, $fieldName, $field, $value); + $dataType = NULL; + } // Evaluate pseudoconstant suffixes $suffix = strrpos($fieldName, ':'); if ($suffix) { @@ -298,6 +302,19 @@ class FormattingUtil { return is_array($value) ? $matches : $matches[0] ?? NULL; } + private static function applyFormatters($result, $fieldName, $field, &$value) { + $row = []; + $prefix = substr($fieldName, 0, strpos($fieldName, $field['name'])); + foreach ($result as $key => $val) { + if (!$prefix || strpos($key, $prefix) === 0) { + $row[substr($key, strlen($prefix))] = $val; + } + } + foreach ($field['output_formatters'] as $formatter) { + $formatter($value, $row, $field); + } + } + /** * @param mixed $value * @param string $dataType diff --git a/civicrm/Civi/Core/Container.php b/civicrm/Civi/Core/Container.php index 7a02a56b45..39749a81bb 100644 --- a/civicrm/Civi/Core/Container.php +++ b/civicrm/Civi/Core/Container.php @@ -123,6 +123,9 @@ class Container { )) ->setFactory([new Reference(self::SELF), 'createAngularManager'])->setPublic(TRUE); + $container->setDefinition('angularjs.loader', new Definition('Civi\Angular\AngularLoader', [])) + ->setPublic(TRUE); + $container->setDefinition('dispatcher', new Definition( 'Civi\Core\CiviEventDispatcher', [] @@ -351,6 +354,7 @@ class Container { */ public function createEventDispatcher() { // Continue building on the original dispatcher created during bootstrap. + /** @var CiviEventDispatcher $dispatcher */ $dispatcher = static::getBootService('dispatcher.boot'); $dispatcher->addListener('civi.core.install', ['\Civi\Core\InstallationCanary', 'check']); @@ -370,6 +374,7 @@ class Container { $dispatcher->addListener('hook_civicrm_eventDefs', ['\Civi\API\Events', 'hookEventDefs']); $dispatcher->addListener('hook_civicrm_eventDefs', ['\Civi\Core\Event\SystemInstallEvent', 'hookEventDefs']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\Civi\Angular\Page\Modules', 'buildAngularModules']); + $dispatcher->addListenerService('civi.region.render', ['angularjs.loader', 'onRegionRender']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Utils_VisualBundle', 'buildAssetJs']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Utils_VisualBundle', 'buildAssetCss']); $dispatcher->addListener('hook_civicrm_buildAsset', ['\CRM_Core_Resources', 'renderMenubarStylesheet']); diff --git a/civicrm/Civi/Crypto/PhpseclibCipherSuite.php b/civicrm/Civi/Crypto/PhpseclibCipherSuite.php index 6168330754..d7fdf09494 100644 --- a/civicrm/Civi/Crypto/PhpseclibCipherSuite.php +++ b/civicrm/Civi/Crypto/PhpseclibCipherSuite.php @@ -48,9 +48,9 @@ class PhpseclibCipherSuite implements CipherSuiteInterface { } elseif (class_exists('Crypt_AES')) { // phpseclib v1 - $this->ciphers['aes-cbc'] = new \Crypt_AES(\Crypt_AES::MODE_CBC); + $this->ciphers['aes-cbc'] = new \Crypt_AES(CRYPT_MODE_CBC); $this->ciphers['aes-cbc']->setKeyLength(256); - $this->ciphers['aes-ctr'] = new \Crypt_AES(\Crypt_AES::MODE_CTR); + $this->ciphers['aes-ctr'] = new \Crypt_AES(CRYPT_MODE_CBC); $this->ciphers['aes-ctr']->setKeyLength(256); } else { diff --git a/civicrm/Civi/Token/TokenCompatSubscriber.php b/civicrm/Civi/Token/TokenCompatSubscriber.php index bdfaa5994e..bf291635c6 100644 --- a/civicrm/Civi/Token/TokenCompatSubscriber.php +++ b/civicrm/Civi/Token/TokenCompatSubscriber.php @@ -47,6 +47,8 @@ class TokenCompatSubscriber implements EventSubscriberInterface { $e->getTokenProcessor()->context['hookTokenCategories'] = $categories; $messageTokens = $e->getTokenProcessor()->getMessageTokens(); + $returnProperties = array_fill_keys($messageTokens['contact'] ?? [], 1); + $returnProperties = array_merge(\CRM_Contact_BAO_Query::defaultReturnProperties(), $returnProperties); foreach ($e->getRows() as $row) { if (empty($row->context['contactId'])) { @@ -58,12 +60,16 @@ class TokenCompatSubscriber implements EventSubscriberInterface { $params = [ ['contact_id', '=', $contactId, 0, 0], ]; - [$contact] = \CRM_Contact_BAO_Query::apiQuery($params); + [$contact] = \CRM_Contact_BAO_Query::apiQuery($params, $returnProperties ?? NULL); //CRM-4524 $contact = reset($contact); + // Test cover for greeting in CRM_Core_BAO_ActionScheduleTest::testMailer + $contact['email_greeting'] = $contact['email_greeting_display'] ?? ''; + $contact['postal_greeting'] = $contact['postal_greeting_display'] ?? ''; + $contact['addressee'] = $contact['address_display'] ?? ''; if (!$contact || is_a($contact, 'CRM_Core_Error')) { // FIXME: Need to differentiate errors which kill the batch vs the individual row. - \Civi::log()->debug("Failed to generate token data. Invalid contact ID: " . $row->context['contactId']); + \Civi::log()->debug('Failed to generate token data. Invalid contact ID: ' . $row->context['contactId']); continue; } @@ -71,10 +77,7 @@ class TokenCompatSubscriber implements EventSubscriberInterface { if (!empty($messageTokens['contact'])) { foreach ($messageTokens['contact'] as $token) { if (\CRM_Core_BAO_CustomField::getKeyID($token)) { - $contact[$token] = civicrm_api3('Contact', 'getvalue', [ - 'return' => $token, - 'id' => $contactId, - ]); + $contact[$token] = \CRM_Core_BAO_CustomField::displayValue($contact[$token], \CRM_Core_BAO_CustomField::getKeyID($token)); } } } diff --git a/civicrm/ang/api4Explorer/Explorer.html b/civicrm/ang/api4Explorer/Explorer.html index fc2cafc78d..f28cec6dbe 100644 --- a/civicrm/ang/api4Explorer/Explorer.html +++ b/civicrm/ang/api4Explorer/Explorer.html @@ -5,8 +5,8 @@ {{:: ts('CiviCRM APIv4') }}{{ entity ? (' (' + entity + '::' + action + ')') : '' }} </h1> - <div class="api4-explorer-row"> - <form name="api4-explorer" class="panel panel-default explorer-params-panel"> + <div class="api4-explorer-row crm-flex-box"> + <form name="api4-explorer" class="panel panel-default explorer-params-panel crm-flex-2"> <div class="panel-heading"> <div class="form-inline"> <span ng-mouseenter="help('entity', paramDoc('$entity'))" ng-mouseleave="help()"> @@ -189,7 +189,7 @@ </div> </div> </div> - <div class="api4-explorer-row"> + <div class="api4-explorer-row crm-flex-box"> <div class="panel panel-info explorer-code-panel"> <ul class="panel-heading nav nav-tabs"> <li role="presentation" ng-repeat="lang in ::langs" ng-class="{active: selectedTab.code === lang}"> @@ -199,12 +199,10 @@ </li> </ul> <div class="panel-body"> - <table> - <tr ng-repeat="style in code[selectedTab.code]"> - <td>{{:: style.label }}</td> - <td><pre class="prettyprint" ng-bind-html="style.code"></pre></td> - </tr> - </table> + <div ng-repeat="style in code[selectedTab.code]"> + <label>{{:: style.label }}</label> + <div><pre class="prettyprint" ng-bind-html="style.code"></pre></div> + </div> </div> </div> <div class="panel explorer-result-panel panel-{{ status }}" > diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js index a0d03dd2f1..72cc5c6fa5 100644 --- a/civicrm/ang/api4Explorer/Explorer.js +++ b/civicrm/ang/api4Explorer/Explorer.js @@ -56,7 +56,7 @@ $scope.loading = false; $scope.controls = {}; $scope.langs = ['php', 'js', 'ang', 'cli']; - $scope.joinTypes = [{k: false, v: 'FALSE (LEFT JOIN)'}, {k: true, v: 'TRUE (INNER JOIN)'}]; + $scope.joinTypes = [{k: 'LEFT', v: 'LEFT JOIN'}, {k: 'INNER', v: 'INNER JOIN'}, {k: 'EXCLUDE', v: 'EXCLUDE'}]; $scope.bridgeEntities = _.filter(schema, function(entity) {return _.includes(entity.type, 'EntityBridge');}); $scope.code = { php: [ @@ -194,16 +194,20 @@ $scope.helpContent = helpContent = formatHelp(content); } - // Convert plain-text help to markdown; replace variables and format links + // Format help text with markdown; replace variables and format links function formatHelp(rawContent) { function formatRefs(see) { _.each(see, function(ref, idx) { - var match = ref.match(/^\\Civi\\Api4\\([a-zA-Z]+)$/); + var match = ref.match(/^(\\Civi\\Api4\\)?([a-zA-Z]+)$/); if (match) { - ref = '#/explorer/' + match[1]; + ref = '#/explorer/' + match[2]; } - if (ref[0] === '\\') { - ref = 'https://github.com/civicrm/civicrm-core/blob/master' + ref.replace(/\\/i, '/') + '.php'; + // Link to php classes on GitHub. + // Fixme: Only works for files in the core repo + if (ref[0] === '\\' || ref.indexOf('Civi\\') === 0 || ref.indexOf('CRM_') === 0) { + var classFunction = _.trim(ref, '\\').split('::'), + replacement = new RegExp(classFunction[0].indexOf('CRM_') === 0 ? '_' : '\\\\', 'g'); + ref = 'https://github.com/civicrm/civicrm-core/blob/master/' + classFunction[0].replace(replacement, '/') + '.php'; } see[idx] = '<a target="' + (ref[0] === '#' ? '_self' : '_blank') + '" href="' + ref + '">' + see[idx] + '</a>'; }); @@ -525,7 +529,7 @@ $timeout(function() { if (field) { if (name === 'join') { - $scope.params[name].push([field + ' AS ' + _.snakeCase(field), false]); + $scope.params[name].push([field + ' AS ' + _.snakeCase(field), 'LEFT']); ctrl.buildFieldList(); } else if (typeof objectParams[name] === 'undefined') { @@ -709,13 +713,14 @@ // Format oop params function formatOOP(entity, action, params, indent) { - var code = '', + var info = getEntity(entity), newLine = "\n" + _.repeat(' ', indent), + code = '\\' + info.class + '::' + action + '(', perm = params.checkPermissions === false ? 'FALSE' : ''; if (entity.substr(0, 7) !== 'Custom_') { - code = "\\Civi\\Api4\\" + entity + '::' + action + '(' + perm + ')'; + code += perm + ')'; } else { - code = "\\Civi\\Api4\\CustomValue::" + action + "('" + entity.substr(7) + "'" + (perm ? ', ' : '') + perm + ")"; + code += "'" + entity.substr(7) + "'" + (perm ? ', ' : '') + perm + ")"; } _.each(params, function(param, key) { var val = ''; diff --git a/civicrm/ang/crmDashboard.ang.php b/civicrm/ang/crmDashboard.ang.php index 65f312a7e2..ea27d015c4 100644 --- a/civicrm/ang/crmDashboard.ang.php +++ b/civicrm/ang/crmDashboard.ang.php @@ -10,7 +10,7 @@ return [ 'css' => ['css/dashboard.css'], 'partials' => ['ang/crmDashboard'], 'partialsCallback' => ['CRM_Contact_Page_DashBoard', 'angularPartials'], - 'basePages' => ['civicrm/dashboard'], + 'basePages' => [], 'requires' => ['crmUi', 'crmUtil', 'ui.sortable', 'dialogService', 'api4'], 'settingsFactory' => ['CRM_Contact_Page_DashBoard', 'angularSettings'], 'permissions' => ['administer CiviCRM'], diff --git a/civicrm/ang/crmDashboard/FullscreenDialog.html b/civicrm/ang/crmDashboard/FullscreenDialog.html index f96fd82e59..396d9f8509 100644 --- a/civicrm/ang/crmDashboard/FullscreenDialog.html +++ b/civicrm/ang/crmDashboard/FullscreenDialog.html @@ -1 +1,3 @@ -<crm-dashlet dashlet="model" is-fullscreen="true"></crm-dashlet> +<div> + <crm-dashlet dashlet="model" is-fullscreen="true"></crm-dashlet> +</div> diff --git a/civicrm/ang/exportui.ang.php b/civicrm/ang/exportui.ang.php index cb0871ed30..f340a018f6 100644 --- a/civicrm/ang/exportui.ang.php +++ b/civicrm/ang/exportui.ang.php @@ -13,6 +13,7 @@ return [ 'ang/exportui', ], 'basePages' => [], + 'permissions' => ['administer CiviCRM'], 'requires' => [ 'crmUi', 'crmUtil', diff --git a/civicrm/ang/exportui/export.html b/civicrm/ang/exportui/export.html index 8a3e093619..2cca22fc9e 100644 --- a/civicrm/ang/exportui/export.html +++ b/civicrm/ang/exportui/export.html @@ -19,7 +19,7 @@ <tr> <td colspan="6"> <input class="crm-action-menu fa-plus crm-export-add-field" crm-ui-select="{data: getFields, placeholder: ts('Add field')}" ng-model="new.col" /> - <span ng-if="data.columns.length"> + <span ng-if="data.columns.length && perms.admin"> <button type="button" ng-click="saveMappingDialog()" crm-icon="fa-save"> {{:: ts('Save Fields') }} </button> diff --git a/civicrm/ang/exportui/exportui.js b/civicrm/ang/exportui/exportui.js index 88bb01a268..91a8ee5e73 100644 --- a/civicrm/ang/exportui/exportui.js +++ b/civicrm/ang/exportui/exportui.js @@ -22,6 +22,9 @@ contact_type: '', columns: [] }; + $scope.perms = { + admin: CRM.checkPerm('administer CiviCRM') + }; // For the "add new field" dropdown $scope.new = {col: ''}; var contactTypes = _.transform($scope.contact_types, function(result, type) { diff --git a/civicrm/api/v3/CaseType.php b/civicrm/api/v3/CaseType.php index 9cdcbc8a00..3caa7fba6d 100644 --- a/civicrm/api/v3/CaseType.php +++ b/civicrm/api/v3/CaseType.php @@ -27,22 +27,7 @@ */ function civicrm_api3_case_type_create($params) { civicrm_api3_verify_mandatory($params, _civicrm_api3_get_DAO(__FUNCTION__)); - // Computed properties. - unset($params['is_forkable']); - unset($params['is_forked']); - if (!array_key_exists('is_active', $params) && empty($params['id'])) { - $params['is_active'] = TRUE; - } - // This is an existing case-type. - if (!empty($params['id']) && isset($params['definition']) - // which is not yet forked - && !CRM_Case_BAO_CaseType::isForked($params['id']) - // for which new forks are prohibited - && !CRM_Case_BAO_CaseType::isForkable($params['id']) - ) { - unset($params['definition']); - } $result = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'CaseType'); return _civicrm_api3_case_type_get_formatResult($result); } @@ -76,16 +61,9 @@ function civicrm_api3_case_type_get($params) { */ function _civicrm_api3_case_type_get_formatResult(&$result, $options = []) { foreach ($result['values'] as $key => &$caseType) { - if (!empty($caseType['definition'])) { - list($xml) = CRM_Utils_XML::parseString($caseType['definition']); - $caseType['definition'] = $xml ? CRM_Case_BAO_CaseType::convertXmlToDefinition($xml) : []; - } - else { - if (empty($options['return']) || !empty($options['return']['definition'])) { - $caseTypeName = (isset($caseType['name'])) ? $caseType['name'] : CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $caseType['id'], 'name', 'id', TRUE); - $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseTypeName); - $caseType['definition'] = $xml ? CRM_Case_BAO_CaseType::convertXmlToDefinition($xml) : []; - } + if (!empty($caseType['definition']) || empty($options['return']) || !empty($options['return']['definition'])) { + $caseType += ['definition' => NULL]; + CRM_Case_BAO_CaseType::formatOutputDefinition($caseType['definition'], $caseType); } $caseType['is_forkable'] = CRM_Case_BAO_CaseType::isForkable($caseType['id']); $caseType['is_forked'] = CRM_Case_BAO_CaseType::isForked($caseType['id']); diff --git a/civicrm/api/v3/Contact.php b/civicrm/api/v3/Contact.php index 8217b646d1..2b82060958 100644 --- a/civicrm/api/v3/Contact.php +++ b/civicrm/api/v3/Contact.php @@ -1228,7 +1228,7 @@ function civicrm_api3_contact_get_merge_conflicts($params) { foreach ((array) $params['mode'] as $mode) { $result[$mode] = CRM_Dedupe_Merger::getConflicts( $migrationInfo, - $params['to_remove_id'], $params['to_keep_id'], + (int) $params['to_remove_id'], (int) $params['to_keep_id'], $mode ); } diff --git a/civicrm/api/v3/CustomValue.php b/civicrm/api/v3/CustomValue.php index 34f96a9f2d..7c2a5a790b 100644 --- a/civicrm/api/v3/CustomValue.php +++ b/civicrm/api/v3/CustomValue.php @@ -399,7 +399,7 @@ function _civicrm_api3_custom_value_getdisplayvalue_spec(&$spec) { ]; $spec['custom_field_value'] = [ 'title' => 'Custom Field value', - 'description' => 'Specify the value of the custom field to return as displayed value', + 'description' => 'Specify the value of the custom field to return as displayed value, or omit to use the current value.', 'type' => CRM_Utils_Type::T_STRING, 'api.required' => 0, ]; @@ -414,14 +414,15 @@ function _civicrm_api3_custom_value_getdisplayvalue_spec(&$spec) { * @throws \CiviCRM_API3_Exception */ function civicrm_api3_custom_value_getdisplayvalue($params) { - if (empty($params['custom_field_value'])) { + // Null or missing means use the current db value, but treat '0', 0, and '' as legitimate values to look up. + if (($params['custom_field_value'] ?? NULL) === NULL) { $params['custom_field_value'] = civicrm_api3('CustomValue', 'getsingle', [ 'return' => ["custom_{$params['custom_field_id']}"], 'entity_id' => $params['entity_id'], ]); $params['custom_field_value'] = $params['custom_field_value']['latest']; } - $values[$params['custom_field_id']]['display'] = CRM_Core_BAO_CustomField::displayValue($params['custom_field_value'], $params['custom_field_id'], CRM_Utils_Array::value('entity_id', $params)); + $values[$params['custom_field_id']]['display'] = CRM_Core_BAO_CustomField::displayValue($params['custom_field_value'], $params['custom_field_id'], $params['entity_id'] ?? NULL); $values[$params['custom_field_id']]['raw'] = $params['custom_field_value']; return civicrm_api3_create_success($values, $params, 'CustomValue', 'getdisplayvalue'); } diff --git a/civicrm/api/v3/Generic/Getlist.php b/civicrm/api/v3/Generic/Getlist.php index 91a55b0aa3..3d993c70b5 100644 --- a/civicrm/api/v3/Generic/Getlist.php +++ b/civicrm/api/v3/Generic/Getlist.php @@ -27,7 +27,7 @@ function civicrm_api3_generic_getList($apiRequest) { $meta = civicrm_api3_generic_getfields(['action' => 'get'] + $apiRequest, FALSE)['values']; // If the user types an integer into the search - $forceIdSearch = empty($request['id']) && !empty($request['input']) && CRM_Utils_Rule::positiveInteger($request['input']); + $forceIdSearch = empty($request['id']) && !empty($request['input']) && !empty($meta['id']) && CRM_Utils_Rule::positiveInteger($request['input']); // Add an extra page of results for the record with an exact id match if ($forceIdSearch) { $request['page_num'] = ($request['page_num'] ?? 1) - 1; @@ -230,7 +230,7 @@ function _civicrm_api3_generic_getlist_output($result, $request, $entity, $field } } } - }; + } if (!empty($request['image_field'])) { $data['image'] = $row[$request['image_field']] ?? ''; } diff --git a/civicrm/api/v3/Job.php b/civicrm/api/v3/Job.php index e791235232..05d350c0d1 100644 --- a/civicrm/api/v3/Job.php +++ b/civicrm/api/v3/Job.php @@ -711,21 +711,41 @@ function civicrm_api3_job_group_rebuild($params) { /** * Flush smart groups caches. * - * This job purges aged smart group cache data (based on the timeout value). Sites can decide whether they want this - * job and / or the group cache rebuild job to run. In some cases performance is better when old caches are cleared out - * prior to any attempt to rebuild them. Also, many sites are very happy to have caches built on demand, provided the - * user is not having to wait for deadlocks to clear when invalidating them. + * This job purges aged smart group cache data (based on the timeout value). + * Sites can decide whether they want this job and / or the group cache rebuild + * job to run. In some cases performance is better when old caches are cleared + * out prior to any attempt to rebuild them. Also, many sites are very happy to + * have caches built on demand, provided the user is not having to wait for + * deadlocks to clear when invalidating them. * * @param array $params * * @return array - * @throws \API_Exception + * @throws \CiviCRM_API3_Exception */ -function civicrm_api3_job_group_cache_flush($params) { +function civicrm_api3_job_group_cache_flush(array $params): array { CRM_Contact_BAO_GroupContactCache::deterministicCacheFlush(); return civicrm_api3_create_success(); } +/** + * Flush acl caches. + * + * This job flushes the acl cache. For many sites it is better to do + * this by cron (or not at all if acls are not used) than whenever + * a contact is edited. + * + * @param array $params + * + * @return array + * + * @throws \CiviCRM_API3_Exception + */ +function civicrm_api3_job_acl_cache_flush(array $params): array { + CRM_ACL_BAO_Cache::resetCache(); + return civicrm_api3_create_success(); +} + /** * Check for CiviCRM software updates. * diff --git a/civicrm/api/v3/Membership.php b/civicrm/api/v3/Membership.php index 6232fd2028..c7a3b1d5e4 100644 --- a/civicrm/api/v3/Membership.php +++ b/civicrm/api/v3/Membership.php @@ -281,12 +281,14 @@ function _civicrm_api3_membership_relationsship_get_customv2behaviour(&$params, $relationships = []; foreach ($membershipValues as $membershipId => $values) { // populate the membership type name for the membership type id - $membershipType = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($values['membership_type_id']); + $membershipType = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($values['membership_type_id']) ?? []; - $membershipValues[$membershipId]['membership_name'] = $membershipType['name']; + if (!empty($membershipType)) { + $membershipValues[$membershipId]['membership_name'] = $membershipType['name']; - if (!empty($membershipType['relationship_type_id'])) { - $relationships[$membershipType['relationship_type_id']] = $membershipId; + if (!empty($membershipType['relationship_type_id'])) { + $relationships[$membershipType['relationship_type_id']] = $membershipId; + } } // populating relationship type name. diff --git a/civicrm/api/v3/Payment.php b/civicrm/api/v3/Payment.php index 2e9649aba7..437d0e5a4e 100644 --- a/civicrm/api/v3/Payment.php +++ b/civicrm/api/v3/Payment.php @@ -135,12 +135,6 @@ function civicrm_api3_payment_create($params) { } } } - if (!empty($params['payment_processor'])) { - // I can't find evidence this is passed in - I was gonna just remove it but decided to deprecate as I see getToFinancialAccount - // also anticipates it. - CRM_Core_Error::deprecatedFunctionWarning('passing payment_processor is deprecated - use payment_processor_id'); - $params['payment_processor_id'] = $params['payment_processor']; - } // Check if it is an update if (!empty($params['id'])) { $amount = $params['total_amount']; diff --git a/civicrm/bin/regen.sh b/civicrm/bin/regen.sh index 84f49fd034..4b27d9c070 100755 --- a/civicrm/bin/regen.sh +++ b/civicrm/bin/regen.sh @@ -47,7 +47,7 @@ php GenerateData.php ## Prune local data $MYSQLCMD -e "DROP TABLE IF EXISTS civicrm_install_canary; DELETE FROM civicrm_cache; DELETE FROM civicrm_setting;" -$MYSQLCMD -e "DELETE FROM civicrm_extension WHERE full_name NOT IN ('sequentialcreditnotes', 'eventcart', 'greenwich', 'search', 'flexmailer', 'financialacls', 'contributioncancelactions');" +$MYSQLCMD -e "DELETE FROM civicrm_extension WHERE full_name NOT IN ('sequentialcreditnotes', 'eventcart', 'greenwich', 'search', 'flexmailer', 'financialacls', 'contributioncancelactions', 'recaptcha');" TABLENAMES=$( echo "show tables like 'civicrm_%'" | $MYSQLCMD | grep ^civicrm_ | xargs ) cd $CIVISOURCEDIR/sql diff --git a/civicrm/bower_components/angular/.composer-downloads/angular-d18b8624a0f5f721da7b82365fc562dd.json b/civicrm/bower_components/angular/.composer-downloads/angular-d18b8624a0f5f721da7b82365fc562dd.json index 6ed88e281a..ccc5cba958 100644 --- a/civicrm/bower_components/angular/.composer-downloads/angular-d18b8624a0f5f721da7b82365fc562dd.json +++ b/civicrm/bower_components/angular/.composer-downloads/angular-d18b8624a0f5f721da7b82365fc562dd.json @@ -1,6 +1,6 @@ { "name": "civicrm/civicrm-core:angular", - "url": "https://github.com/angular/bower-angular/archive/v1.8.0.zip", - "checksum": "617fdfafe25c88dd133e18deab2307c219505923cc80cda6c6e604c25aa89090", + "url": "https://github.com/angular/bower-angular/archive/v1.8.2.zip", + "checksum": "21cfbca328b49392c15b9723930f01ac681f8efbb6a3cabebdbc9155353fdf67", "ignore": null } \ No newline at end of file diff --git a/civicrm/bower_components/angular/angular.js b/civicrm/bower_components/angular/angular.js index 5de5618431..e67a6906e8 100644 --- a/civicrm/bower_components/angular/angular.js +++ b/civicrm/bower_components/angular/angular.js @@ -1,6 +1,6 @@ /** - * @license AngularJS v1.8.0 - * (c) 2010-2020 Google, Inc. http://angularjs.org + * @license AngularJS v1.8.2 + * (c) 2010-2020 Google LLC. http://angularjs.org * License: MIT */ (function(window) {'use strict'; @@ -99,7 +99,7 @@ function isValidObjectMaxDepth(maxDepth) { function minErr(module, ErrorConstructor) { ErrorConstructor = ErrorConstructor || Error; - var url = 'https://errors.angularjs.org/1.8.0/'; + var url = 'https://errors.angularjs.org/1.8.2/'; var regex = url.replace('.', '\\.') + '[\\s\\S]*'; var errRegExp = new RegExp(regex, 'g'); @@ -1671,7 +1671,7 @@ function allowAutoBootstrap(document) { link.href = src.value; if (document.location.origin === link.origin) { - // Same-origin resources are always allowed, even for non-whitelisted schemes. + // Same-origin resources are always allowed, even for banned URL schemes. return true; } // Disabled bootstrapping unless angular.js was loaded from a known scheme used on the web. @@ -2828,11 +2828,11 @@ function toDebugString(obj, maxDepth) { var version = { // These placeholder strings will be replaced by grunt's `build` task. // They need to be double- or single-quoted. - full: '1.8.0', + full: '1.8.2', major: 1, minor: 8, - dot: 0, - codeName: 'nested-vaccination' + dot: 2, + codeName: 'meteoric-mining' }; @@ -2983,7 +2983,7 @@ function publishExternalAPI(angular) { }); } ]) - .info({ angularVersion: '1.8.0' }); + .info({ angularVersion: '1.8.2' }); } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -8428,8 +8428,8 @@ function $TemplateCacheProvider() { * * Based on the context, other options may exist to mark a value as trusted / configure the behavior * of {@link ng.$sce}. For example, to restrict the `RESOURCE_URL` context to specific origins, use - * the {@link $sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist()} - * and {@link $sceDelegateProvider#resourceUrlBlacklist resourceUrlBlacklist()}. + * the {@link $sceDelegateProvider#trustedResourceUrlList trustedResourceUrlList()} + * and {@link $sceDelegateProvider#bannedResourceUrlList bannedResourceUrlList()}. * * {@link ng.$sce#what-trusted-context-types-are-supported- Find out more about the different context types}. * @@ -8438,7 +8438,7 @@ function $TemplateCacheProvider() { * By default, `$sce` will throw an error if it detects untrusted HTML content, and will not bind the * content. * However, if you include the {@link ngSanitize ngSanitize module}, it will try to sanitize the - * potentially dangerous HTML, e.g. strip non-whitelisted tags and attributes when binding to + * potentially dangerous HTML, e.g. strip non-trusted tags and attributes when binding to * `innerHTML`. * * @example @@ -9020,63 +9020,105 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist + * @name $compileProvider#aHrefSanitizationTrustedUrlList * @kind function * * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * Retrieves or overrides the default regular expression that is used for determining trusted safe * urls during a[href] sanitization. * * The sanitization is a security measure aimed at preventing XSS attacks via html links. * * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` + * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationTrustedUrlList` * regular expression. If a match is found, the original url is written into the dom. Otherwise, * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. * - * @param {RegExp=} regexp New regexp to whitelist urls with. + * @param {RegExp=} regexp New regexp to trust urls with. * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for * chaining otherwise. */ - this.aHrefSanitizationWhitelist = function(regexp) { + this.aHrefSanitizationTrustedUrlList = function(regexp) { if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); + $$sanitizeUriProvider.aHrefSanitizationTrustedUrlList(regexp); return this; } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); + return $$sanitizeUriProvider.aHrefSanitizationTrustedUrlList(); } }; /** * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist + * @name $compileProvider#aHrefSanitizationWhitelist + * @kind function + * + * @deprecated + * sinceVersion="1.8.1" + * + * This method is deprecated. Use {@link $compileProvider#aHrefSanitizationTrustedUrlList + * aHrefSanitizationTrustedUrlList} instead. + */ + Object.defineProperty(this, 'aHrefSanitizationWhitelist', { + get: function() { + return this.aHrefSanitizationTrustedUrlList; + }, + set: function(value) { + this.aHrefSanitizationTrustedUrlList = value; + } + }); + + + /** + * @ngdoc method + * @name $compileProvider#imgSrcSanitizationTrustedUrlList * @kind function * * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * Retrieves or overrides the default regular expression that is used for determining trusted safe * urls during img[src] sanitization. * * The sanitization is a security measure aimed at prevent XSS attacks via html links. * * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` + * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationTrustedUrlList` * regular expression. If a match is found, the original url is written into the dom. Otherwise, * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. * - * @param {RegExp=} regexp New regexp to whitelist urls with. + * @param {RegExp=} regexp New regexp to trust urls with. * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for * chaining otherwise. */ - this.imgSrcSanitizationWhitelist = function(regexp) { + this.imgSrcSanitizationTrustedUrlList = function(regexp) { if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); + $$sanitizeUriProvider.imgSrcSanitizationTrustedUrlList(regexp); return this; } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); + return $$sanitizeUriProvider.imgSrcSanitizationTrustedUrlList(); } }; + + /** + * @ngdoc method + * @name $compileProvider#imgSrcSanitizationWhitelist + * @kind function + * + * @deprecated + * sinceVersion="1.8.1" + * + * This method is deprecated. Use {@link $compileProvider#imgSrcSanitizationTrustedUrlList + * imgSrcSanitizationTrustedUrlList} instead. + */ + Object.defineProperty(this, 'imgSrcSanitizationWhitelist', { + get: function() { + return this.imgSrcSanitizationTrustedUrlList; + }, + set: function(value) { + this.imgSrcSanitizationTrustedUrlList = value; + } + }); + /** * @ngdoc method * @name $compileProvider#debugInfoEnabled @@ -12327,7 +12369,7 @@ function $HttpProvider() { /** * @ngdoc property - * @name $httpProvider#xsrfWhitelistedOrigins + * @name $httpProvider#xsrfTrustedOrigins * @description * * Array containing URLs whose origins are trusted to receive the XSRF token. See the @@ -12341,7 +12383,7 @@ function $HttpProvider() { * Examples: `http://example.com`, `https://api.example.com:9876` * * <div class="alert alert-warning"> - * It is not possible to whitelist specific URLs/paths. The `path`, `query` and `fragment` parts + * It is not possible to trust specific URLs/paths. The `path`, `query` and `fragment` parts * of a URL will be ignored. For example, `https://foo.com/path/bar?query=baz#fragment` will be * treated as `https://foo.com`, meaning that **all** requests to URLs starting with * `https://foo.com/` will include the XSRF token. @@ -12352,9 +12394,9 @@ function $HttpProvider() { * ```js * // App served from `https://example.com/`. * angular. - * module('xsrfWhitelistedOriginsExample', []). + * module('xsrfTrustedOriginsExample', []). * config(['$httpProvider', function($httpProvider) { - * $httpProvider.xsrfWhitelistedOrigins.push('https://api.example.com'); + * $httpProvider.xsrfTrustedOrigins.push('https://api.example.com'); * }]). * run(['$http', function($http) { * // The XSRF token will be sent. @@ -12365,7 +12407,27 @@ function $HttpProvider() { * }]); * ``` */ - var xsrfWhitelistedOrigins = this.xsrfWhitelistedOrigins = []; + var xsrfTrustedOrigins = this.xsrfTrustedOrigins = []; + + /** + * @ngdoc property + * @name $httpProvider#xsrfWhitelistedOrigins + * @description + * + * @deprecated + * sinceVersion="1.8.1" + * + * This property is deprecated. Use {@link $httpProvider#xsrfTrustedOrigins xsrfTrustedOrigins} + * instead. + */ + Object.defineProperty(this, 'xsrfWhitelistedOrigins', { + get: function() { + return this.xsrfTrustedOrigins; + }, + set: function(origins) { + this.xsrfTrustedOrigins = origins; + } + }); this.$get = ['$browser', '$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector', '$sce', function($browser, $httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector, $sce) { @@ -12393,7 +12455,7 @@ function $HttpProvider() { /** * A function to check request URLs against a list of allowed origins. */ - var urlIsAllowedOrigin = urlIsAllowedOriginFactory(xsrfWhitelistedOrigins); + var urlIsAllowedOrigin = urlIsAllowedOriginFactory(xsrfTrustedOrigins); /** * @ngdoc service @@ -12767,16 +12829,16 @@ function $HttpProvider() { * The header will — by default — **not** be set for cross-domain requests. This * prevents unauthorized servers (e.g. malicious or compromised 3rd-party APIs) from gaining * access to your users' XSRF tokens and exposing them to Cross Site Request Forgery. If you - * want to, you can whitelist additional origins to also receive the XSRF token, by adding them - * to {@link ng.$httpProvider#xsrfWhitelistedOrigins xsrfWhitelistedOrigins}. This might be + * want to, you can trust additional origins to also receive the XSRF token, by adding them + * to {@link ng.$httpProvider#xsrfTrustedOrigins xsrfTrustedOrigins}. This might be * useful, for example, if your application, served from `example.com`, needs to access your API * at `api.example.com`. - * See {@link ng.$httpProvider#xsrfWhitelistedOrigins $httpProvider.xsrfWhitelistedOrigins} for + * See {@link ng.$httpProvider#xsrfTrustedOrigins $httpProvider.xsrfTrustedOrigins} for * more details. * * <div class="alert alert-danger"> * **Warning**<br /> - * Only whitelist origins that you have control over and make sure you understand the + * Only trusted origins that you have control over and make sure you understand the * implications of doing so. * </div> * @@ -12903,8 +12965,8 @@ function $HttpProvider() { <file name="script.js"> angular.module('httpExample', []) .config(['$sceDelegateProvider', function($sceDelegateProvider) { - // We must whitelist the JSONP endpoint that we are using to show that we trust it - $sceDelegateProvider.resourceUrlWhitelist([ + // We must add the JSONP endpoint that we are using to the trusted list to show that we trust it + $sceDelegateProvider.trustedResourceUrlList([ 'self', 'https://angularjs.org/**' ]); @@ -13161,8 +13223,8 @@ function $HttpProvider() { * * Note that, since JSONP requests are sensitive because the response is given full access to the browser, * the url must be declared, via {@link $sce} as a trusted resource URL. - * You can trust a URL by adding it to the whitelist via - * {@link $sceDelegateProvider#resourceUrlWhitelist `$sceDelegateProvider.resourceUrlWhitelist`} or + * You can trust a URL by adding it to the trusted resource URL list via + * {@link $sceDelegateProvider#trustedResourceUrlList `$sceDelegateProvider.trustedResourceUrlList`} or * by explicitly trusting the URL via {@link $sce#trustAsResourceUrl `$sce.trustAsResourceUrl(url)`}. * * You should avoid generating the URL for the JSONP request from user provided data. @@ -19898,12 +19960,12 @@ function $RootScopeProvider() { */ function $$SanitizeUriProvider() { - var aHrefSanitizationWhitelist = /^\s*(https?|s?ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/; + var aHrefSanitizationTrustedUrlList = /^\s*(https?|s?ftp|mailto|tel|file):/, + imgSrcSanitizationTrustedUrlList = /^\s*((https?|ftp|file|blob):|data:image\/)/; /** * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * Retrieves or overrides the default regular expression that is used for determining trusted safe * urls during a[href] sanitization. * * The sanitization is a security measure aimed at prevent XSS attacks via HTML anchor links. @@ -19912,27 +19974,27 @@ function $$SanitizeUriProvider() { * the $sce.URL security context. When interpolation occurs a call is made to `$sce.trustAsUrl(url)` * which in turn may call `$$sanitizeUri(url, isMedia)` to sanitize the potentially malicious URL. * - * If the URL matches the `aHrefSanitizationWhitelist` regular expression, it is returned unchanged. + * If the URL matches the `aHrefSanitizationTrustedUrlList` regular expression, it is returned unchanged. * * If there is no match the URL is returned prefixed with `'unsafe:'` to ensure that when it is written * to the DOM it is inactive and potentially malicious code will not be executed. * - * @param {RegExp=} regexp New regexp to whitelist urls with. + * @param {RegExp=} regexp New regexp to trust urls with. * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for * chaining otherwise. */ - this.aHrefSanitizationWhitelist = function(regexp) { + this.aHrefSanitizationTrustedUrlList = function(regexp) { if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; + aHrefSanitizationTrustedUrlList = regexp; return this; } - return aHrefSanitizationWhitelist; + return aHrefSanitizationTrustedUrlList; }; /** * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe + * Retrieves or overrides the default regular expression that is used for determining trusted safe * urls during img[src] sanitization. * * The sanitization is a security measure aimed at prevent XSS attacks via HTML image src links. @@ -19942,27 +20004,28 @@ function $$SanitizeUriProvider() { * `$sce.trustAsMediaUrl(url)` which in turn may call `$$sanitizeUri(url, isMedia)` to sanitize * the potentially malicious URL. * - * If the URL matches the `aImgSanitizationWhitelist` regular expression, it is returned unchanged. + * If the URL matches the `imgSrcSanitizationTrustedUrlList` regular expression, it is returned + * unchanged. * * If there is no match the URL is returned prefixed with `'unsafe:'` to ensure that when it is written * to the DOM it is inactive and potentially malicious code will not be executed. * - * @param {RegExp=} regexp New regexp to whitelist urls with. + * @param {RegExp=} regexp New regexp to trust urls with. * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for * chaining otherwise. */ - this.imgSrcSanitizationWhitelist = function(regexp) { + this.imgSrcSanitizationTrustedUrlList = function(regexp) { if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; + imgSrcSanitizationTrustedUrlList = regexp; return this; } - return imgSrcSanitizationWhitelist; + return imgSrcSanitizationTrustedUrlList; }; this.$get = function() { return function sanitizeUri(uri, isMediaUrl) { // if (!uri) return uri; - var regex = isMediaUrl ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; + var regex = isMediaUrl ? imgSrcSanitizationTrustedUrlList : aHrefSanitizationTrustedUrlList; var normalizedVal = urlResolve(uri && uri.trim()).href; if (normalizedVal !== '' && !normalizedVal.match(regex)) { return 'unsafe:' + normalizedVal; @@ -20090,10 +20153,10 @@ function adjustMatchers(matchers) { * The default instance of `$sceDelegate` should work out of the box with little pain. While you * can override it completely to change the behavior of `$sce`, the common case would * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} + * your own trusted and banned resource lists for trusting URLs used for loading AngularJS resources + * such as templates. Refer {@link ng.$sceDelegateProvider#trustedResourceUrlList + * $sceDelegateProvider.trustedResourceUrlList} and {@link + * ng.$sceDelegateProvider#bannedResourceUrlList $sceDelegateProvider.bannedResourceUrlList} */ /** @@ -20106,12 +20169,12 @@ function adjustMatchers(matchers) { * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate * $sceDelegate service}, used as a delegate for {@link ng.$sce Strict Contextual Escaping (SCE)}. * - * The `$sceDelegateProvider` allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing AngularJS templates and other script-running URLs are safe (all - * places that use the `$sce.RESOURCE_URL` context). See - * {@link ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} - * and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}, + * The `$sceDelegateProvider` allows one to get/set the `trustedResourceUrlList` and + * `bannedResourceUrlList` used to ensure that the URLs used for sourcing AngularJS templates and + * other script-running URLs are safe (all places that use the `$sce.RESOURCE_URL` context). See + * {@link ng.$sceDelegateProvider#trustedResourceUrlList + * $sceDelegateProvider.trustedResourceUrlList} and + * {@link ng.$sceDelegateProvider#bannedResourceUrlList $sceDelegateProvider.bannedResourceUrlList}, * * For the general details about this service in AngularJS, read the main page for {@link ng.$sce * Strict Contextual Escaping (SCE)}. @@ -20127,98 +20190,139 @@ function adjustMatchers(matchers) { * * ``` * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ + * $sceDelegateProvider.trustedResourceUrlList([ * // Allow same origin resource loads. * 'self', * // Allow loading from our assets domain. Notice the difference between * and **. * 'http://srv*.assets.example.com/**' * ]); * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ + * // The banned resource URL list overrides the trusted resource URL list so the open redirect + * // here is blocked. + * $sceDelegateProvider.bannedResourceUrlList([ * 'http://myapp.example.com/clickThru**' * ]); * }); * ``` - * Note that an empty whitelist will block every resource URL from being loaded, and will require + * Note that an empty trusted resource URL list will block every resource URL from being loaded, and will require * you to manually mark each one as trusted with `$sce.trustAsResourceUrl`. However, templates * requested by {@link ng.$templateRequest $templateRequest} that are present in * {@link ng.$templateCache $templateCache} will not go through this check. If you have a mechanism * to populate your templates in that cache at config time, then it is a good idea to remove 'self' - * from that whitelist. This helps to mitigate the security impact of certain types of issues, like - * for instance attacker-controlled `ng-includes`. + * from the trusted resource URL lsit. This helps to mitigate the security impact of certain types + * of issues, like for instance attacker-controlled `ng-includes`. */ function $SceDelegateProvider() { this.SCE_CONTEXTS = SCE_CONTEXTS; // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; + var trustedResourceUrlList = ['self'], + bannedResourceUrlList = []; /** * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist + * @name $sceDelegateProvider#trustedResourceUrlList * @kind function * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. + * @param {Array=} trustedResourceUrlList When provided, replaces the trustedResourceUrlList with + * the value provided. This must be an array or null. A snapshot of this array is used so + * further changes to the array are ignored. * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items * allowed in this array. * - * @return {Array} The currently set whitelist array. + * @return {Array} The currently set trusted resource URL array. * * @description - * Sets/Gets the whitelist of trusted resource URLs. + * Sets/Gets the list trusted of resource URLs. * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. + * The **default value** when no `trustedResourceUrlList` has been explicitly set is `['self']` + * allowing only same origin resource requests. * * <div class="alert alert-warning"> - * **Note:** the default whitelist of 'self' is not recommended if your app shares its origin - * with other apps! It is a good idea to limit it to only your application's directory. + * **Note:** the default `trustedResourceUrlList` of 'self' is not recommended if your app shares + * its origin with other apps! It is a good idea to limit it to only your application's directory. * </div> */ - this.resourceUrlWhitelist = function(value) { + this.trustedResourceUrlList = function(value) { if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); + trustedResourceUrlList = adjustMatchers(value); } - return resourceUrlWhitelist; + return trustedResourceUrlList; }; /** * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist + * @name $sceDelegateProvider#resourceUrlWhitelist + * @kind function + * + * @deprecated + * sinceVersion="1.8.1" + * + * This method is deprecated. Use {@link $sceDelegateProvider#trustedResourceUrlList + * trustedResourceUrlList} instead. + */ + Object.defineProperty(this, 'resourceUrlWhitelist', { + get: function() { + return this.trustedResourceUrlList; + }, + set: function(value) { + this.trustedResourceUrlList = value; + } + }); + + /** + * @ngdoc method + * @name $sceDelegateProvider#bannedResourceUrlList * @kind function * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored.</p><p> + * @param {Array=} bannedResourceUrlList When provided, replaces the `bannedResourceUrlList` with + * the value provided. This must be an array or null. A snapshot of this array is used so + * further changes to the array are ignored.</p><p> * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items * allowed in this array.</p><p> - * The typical usage for the blacklist is to **block + * The typical usage for the `bannedResourceUrlList` is to **block * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as * these would otherwise be trusted but actually return content from the redirected domain. * </p><p> - * Finally, **the blacklist overrides the whitelist** and has the final say. + * Finally, **the banned resource URL list overrides the trusted resource URL list** and has + * the final say. * - * @return {Array} The currently set blacklist array. + * @return {Array} The currently set `bannedResourceUrlList` array. * * @description - * Sets/Gets the blacklist of trusted resource URLs. + * Sets/Gets the `bannedResourceUrlList` of trusted resource URLs. * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) + * The **default value** when no trusted resource URL list has been explicitly set is the empty + * array (i.e. there is no `bannedResourceUrlList`.) */ - - this.resourceUrlBlacklist = function(value) { + this.bannedResourceUrlList = function(value) { if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); + bannedResourceUrlList = adjustMatchers(value); } - return resourceUrlBlacklist; + return bannedResourceUrlList; }; + /** + * @ngdoc method + * @name $sceDelegateProvider#resourceUrlBlacklist + * @kind function + * + * @deprecated + * sinceVersion="1.8.1" + * + * This method is deprecated. Use {@link $sceDelegateProvider#bannedResourceUrlList + * bannedResourceUrlList} instead. + */ + Object.defineProperty(this, 'resourceUrlBlacklist', { + get: function() { + return this.bannedResourceUrlList; + }, + set: function(value) { + this.bannedResourceUrlList = value; + } + }); + this.$get = ['$injector', '$$sanitizeUri', function($injector, $$sanitizeUri) { var htmlSanitizer = function htmlSanitizer(html) { @@ -20242,17 +20346,17 @@ function $SceDelegateProvider() { function isResourceUrlAllowedByPolicy(url) { var parsedUrl = urlResolve(url.toString()); var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { + // Ensure that at least one item from the trusted resource URL list allows this url. + for (i = 0, n = trustedResourceUrlList.length; i < n; i++) { + if (matchUrl(trustedResourceUrlList[i], parsedUrl)) { allowed = true; break; } } if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { + // Ensure that no item from the banned resource URL list has blocked this url. + for (i = 0, n = bannedResourceUrlList.length; i < n; i++) { + if (matchUrl(bannedResourceUrlList[i], parsedUrl)) { allowed = false; break; } @@ -20373,9 +20477,9 @@ function $SceDelegateProvider() { * The contexts that can be sanitized are $sce.MEDIA_URL, $sce.URL and $sce.HTML. The first two are available * by default, and the third one relies on the `$sanitize` service (which may be loaded through * the `ngSanitize` module). Furthermore, for $sce.RESOURCE_URL context, a plain string may be - * accepted if the resource url policy defined by {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * `$sceDelegateProvider.resourceUrlWhitelist`} and {@link ng.$sceDelegateProvider#resourceUrlBlacklist - * `$sceDelegateProvider.resourceUrlBlacklist`} accepts that resource. + * accepted if the resource url policy defined by {@link ng.$sceDelegateProvider#trustedResourceUrlList + * `$sceDelegateProvider.trustedResourceUrlList`} and {@link ng.$sceDelegateProvider#bannedResourceUrlList + * `$sceDelegateProvider.bannedResourceUrlList`} accepts that resource. * * This function will throw if the safe type isn't appropriate for this context, or if the * value given cannot be accepted in the context (which might be caused by sanitization not @@ -20469,9 +20573,9 @@ function $SceDelegateProvider() { * * To systematically block XSS security bugs, AngularJS treats all values as untrusted by default in * HTML or sensitive URL bindings. When binding untrusted values, AngularJS will automatically - * run security checks on them (sanitizations, whitelists, depending on context), or throw when it - * cannot guarantee the security of the result. That behavior depends strongly on contexts: HTML - * can be sanitized, but template URLs cannot, for instance. + * run security checks on them (sanitizations, trusted URL resource, depending on context), or throw + * when it cannot guarantee the security of the result. That behavior depends strongly on contexts: + * HTML can be sanitized, but template URLs cannot, for instance. * * To illustrate this, consider the `ng-bind-html` directive. It renders its value directly as HTML: * we call that the *context*. When given an untrusted input, AngularJS will attempt to sanitize it @@ -20550,8 +20654,8 @@ function $SceDelegateProvider() { * By default, AngularJS only loads templates from the same domain and protocol as the application * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. + * protocols, you may either add them to the {@link ng.$sceDelegateProvider#trustedResourceUrlList + * trustedResourceUrlList} or {@link ng.$sce#trustAsResourceUrl wrap them} into trusted values. * * *Please note*: * The browser's @@ -20579,8 +20683,8 @@ function $SceDelegateProvider() { * templates in `ng-include` from your application's domain without having to even know about SCE. * It blocks loading templates from other domains or loading templates over http from an https * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. + * ng.$sceDelegateProvider#trustedResourceUrlList trusted resource URL list} and {@link + * ng.$sceDelegateProvider#bannedResourceUrlList banned resource URL list} for matching such URLs. * * This significantly reduces the overhead. It is far easier to pay the small overhead and have an * application that's secure and can be audited to verify that with much more ease than bolting @@ -20595,7 +20699,7 @@ function $SceDelegateProvider() { * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | * | `$sce.MEDIA_URL` | For URLs that are safe to render as media. Is automatically converted from string by sanitizing when needed. | * | `$sce.URL` | For URLs that are safe to follow as links. Is automatically converted from string by sanitizing when needed. Note that `$sce.URL` makes a stronger statement about the URL than `$sce.MEDIA_URL` does and therefore contexts requiring values trusted for `$sce.URL` can be used anywhere that values trusted for `$sce.MEDIA_URL` are required.| - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` or `$sce.MEDIA_URL` do and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` or `$sce.MEDIA_URL` are required. <br><br> The {@link $sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider#resourceUrlWhitelist()} and {@link $sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider#resourceUrlBlacklist()} can be used to restrict trusted origins for `RESOURCE_URL` | + * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` or `$sce.MEDIA_URL` do and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` or `$sce.MEDIA_URL` are required. <br><br> The {@link $sceDelegateProvider#trustedResourceUrlList $sceDelegateProvider#trustedResourceUrlList()} and {@link $sceDelegateProvider#bannedResourceUrlList $sceDelegateProvider#bannedResourceUrlList()} can be used to restrict trusted origins for `RESOURCE_URL` | * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | * * @@ -20613,7 +20717,7 @@ function $SceDelegateProvider() { * There are no CSS or JS context bindings in AngularJS currently, so their corresponding `$sce.trustAs` * functions aren't useful yet. This might evolve. * - * ### Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a> + * ### Format of items in {@link ng.$sceDelegateProvider#trustedResourceUrlList trustedResourceUrlList}/{@link ng.$sceDelegateProvider#bannedResourceUrlList bannedResourceUrlList} <a name="resourceUrlPatternItem"></a> * * Each element in these arrays must be one of the following: * @@ -20627,7 +20731,7 @@ function $SceDelegateProvider() { * match themselves. * - `*`: matches zero or more occurrences of any character other than one of the following 6 * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'. It's a useful wildcard for use - * in a whitelist. + * for matching resource URL lists. * - `**`: matches zero or more occurrences of *any* character. As such, it's not * appropriate for use in a scheme, domain, etc. as it would match too much. (e.g. * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might @@ -21431,10 +21535,10 @@ function $TemplateRequestProvider() { handleRequestFn.totalPendingRequests++; // We consider the template cache holds only trusted templates, so - // there's no need to go through whitelisting again for keys that already - // are included in there. This also makes AngularJS accept any script - // directive, no matter its name. However, we still need to unwrap trusted - // types. + // there's no need to go through adding the template again to the trusted + // resources for keys that already are included in there. This also makes + // AngularJS accept any script directive, no matter its name. However, we + // still need to unwrap trusted types. if (!isString(tpl) || isUndefined($templateCache.get(tpl))) { tpl = $sce.getTrustedResourceUrl(tpl); } @@ -21839,20 +21943,20 @@ function urlIsSameOriginAsBaseUrl(requestUrl) { } /** - * Create a function that can check a URL's origin against a list of allowed/whitelisted origins. + * Create a function that can check a URL's origin against a list of allowed/trusted origins. * The current location's origin is implicitly trusted. * - * @param {string[]} whitelistedOriginUrls - A list of URLs (strings), whose origins are trusted. + * @param {string[]} trustedOriginUrls - A list of URLs (strings), whose origins are trusted. * * @returns {Function} - A function that receives a URL (string or parsed URL object) and returns * whether it is of an allowed origin. */ -function urlIsAllowedOriginFactory(whitelistedOriginUrls) { - var parsedAllowedOriginUrls = [originUrl].concat(whitelistedOriginUrls.map(urlResolve)); +function urlIsAllowedOriginFactory(trustedOriginUrls) { + var parsedAllowedOriginUrls = [originUrl].concat(trustedOriginUrls.map(urlResolve)); /** * Check whether the specified URL (string or parsed URL object) has an origin that is allowed - * based on a list of whitelisted-origin URLs. The current location's origin is implicitly + * based on a list of trusted-origin URLs. The current location's origin is implicitly * trusted. * * @param {string|Object} requestUrl - The URL to be checked (provided as a string that will be @@ -29599,9 +29703,9 @@ var ngIfDirective = ['$animate', '$compile', function($animate, $compile) { * By default, the template URL is restricted to the same domain and protocol as the * application document. This is done by calling {@link $sce#getTrustedResourceUrl * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols - * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or - * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to AngularJS's {@link - * ng.$sce Strict Contextual Escaping}. + * you may either add them to your {@link ng.$sceDelegateProvider#trustedResourceUrlList trusted + * resource URL list} or {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to + * AngularJS's {@link ng.$sce Strict Contextual Escaping}. * * In addition, the browser's * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) diff --git a/civicrm/bower_components/angular/angular.min.js b/civicrm/bower_components/angular/angular.min.js index c0e894dff1..87108f9aed 100644 --- a/civicrm/bower_components/angular/angular.min.js +++ b/civicrm/bower_components/angular/angular.min.js @@ -1,9 +1,9 @@ /* - AngularJS v1.8.0 - (c) 2010-2020 Google, Inc. http://angularjs.org + AngularJS v1.8.2 + (c) 2010-2020 Google LLC. http://angularjs.org License: MIT */ -(function(z){'use strict';function ve(a){if(D(a))w(a.objectMaxDepth)&&(Xb.objectMaxDepth=Yb(a.objectMaxDepth)?a.objectMaxDepth:NaN),w(a.urlErrorParamsEnabled)&&Ga(a.urlErrorParamsEnabled)&&(Xb.urlErrorParamsEnabled=a.urlErrorParamsEnabled);else return Xb}function Yb(a){return X(a)&&0<a}function F(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.8.0/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var e=encodeURIComponent, +(function(z){'use strict';function ve(a){if(D(a))w(a.objectMaxDepth)&&(Xb.objectMaxDepth=Yb(a.objectMaxDepth)?a.objectMaxDepth:NaN),w(a.urlErrorParamsEnabled)&&Ga(a.urlErrorParamsEnabled)&&(Xb.urlErrorParamsEnabled=a.urlErrorParamsEnabled);else return Xb}function Yb(a){return X(a)&&0<a}function F(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.8.2/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var e=encodeURIComponent, f;f=arguments[d];f="function"==typeof f?f.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof f?"undefined":"string"!=typeof f?JSON.stringify(f):f;c+=e(f)}return new b(c)}}function za(a){if(null==a||$a(a))return!1;if(H(a)||C(a)||x&&a instanceof x)return!0;var b="length"in Object(a)&&a.length;return X(b)&&(0<=b&&b-1 in a||"function"===typeof a.item)}function r(a,b,d){var c,e;if(a)if(B(a))for(c in a)"prototype"!==c&&"length"!==c&&"name"!==c&&a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else if(H(a)|| za(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==r)a.forEach(b,d,a);else if(Pc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)ta.call(a,c)&&b.call(d,a[c],c,a);return a}function Qc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function Zb(a){return function(b,d){a(d,b)}}function we(){return++qb} function $b(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(D(g)||B(g))for(var k=Object.keys(g),h=0,l=k.length;h<l;h++){var m=k[h],p=g[m];d&&D(p)?ha(p)?a[m]=new Date(p.valueOf()):ab(p)?a[m]=new RegExp(p):p.nodeName?a[m]=p.cloneNode(!0):ac(p)?a[m]=p.clone():"__proto__"!==m&&(D(a[m])||(a[m]=H(p)?[]:{}),$b(a[m],[p],!0)):a[m]=p}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function S(a){return $b(a,Ha.call(arguments,1),!1)}function xe(a){return $b(a,Ha.call(arguments,1),!0)}function fa(a){return parseInt(a, @@ -29,7 +29,7 @@ f);var e=[],n=[],s=[],G=a("$injector","invoke","push",n),t={_invokeQueue:e,_conf function Oe(a){S(a,{errorHandlingConfig:ve,bootstrap:Wc,copy:Ia,extend:S,merge:xe,equals:va,element:x,forEach:r,injector:fb,noop:E,bind:Va,toJson:eb,fromJson:Tc,identity:Ta,isUndefined:A,isDefined:w,isString:C,isFunction:B,isObject:D,isNumber:X,isElement:ac,isArray:H,version:Pe,isDate:ha,callbacks:{$$counter:0},getTestability:He,reloadWithDebugInfo:Ge,UNSAFE_restoreLegacyJqLiteXHTMLReplacement:Ke,$$minErr:F,$$csp:Ba,$$encodeUriSegment:ic,$$encodeUriQuery:ba,$$lowercase:K,$$stringify:jc,$$uppercase:vb}); lc=Me(z);lc("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Qe});a.provider("$compile",Zc).directive({a:Re,input:$c,textarea:$c,form:Se,script:Te,select:Ue,option:Ve,ngBind:We,ngBindHtml:Xe,ngBindTemplate:Ye,ngClass:Ze,ngClassEven:$e,ngClassOdd:af,ngCloak:bf,ngController:cf,ngForm:df,ngHide:ef,ngIf:ff,ngInclude:gf,ngInit:hf,ngNonBindable:jf,ngPluralize:kf,ngRef:lf,ngRepeat:mf,ngShow:nf,ngStyle:of,ngSwitch:pf,ngSwitchWhen:qf,ngSwitchDefault:rf,ngOptions:sf,ngTransclude:tf,ngModel:uf, ngList:vf,ngChange:wf,pattern:ad,ngPattern:ad,required:bd,ngRequired:bd,minlength:cd,ngMinlength:cd,maxlength:dd,ngMaxlength:dd,ngValue:xf,ngModelOptions:yf}).directive({ngInclude:zf,input:Af}).directive(wb).directive(ed);a.provider({$anchorScroll:Bf,$animate:Cf,$animateCss:Df,$$animateJs:Ef,$$animateQueue:Ff,$$AnimateRunner:Gf,$$animateAsyncRun:Hf,$browser:If,$cacheFactory:Jf,$controller:Kf,$document:Lf,$$isDocumentHidden:Mf,$exceptionHandler:Nf,$filter:fd,$$forceReflow:Of,$interpolate:Pf,$interval:Qf, -$$intervalFactory:Rf,$http:Sf,$httpParamSerializer:Tf,$httpParamSerializerJQLike:Uf,$httpBackend:Vf,$xhrFactory:Wf,$jsonpCallbacks:Xf,$location:Yf,$log:Zf,$parse:$f,$rootScope:ag,$q:bg,$$q:cg,$sce:dg,$sceDelegate:eg,$sniffer:fg,$$taskTrackerFactory:gg,$templateCache:hg,$templateRequest:ig,$$testability:jg,$timeout:kg,$window:lg,$$rAF:mg,$$jqLite:ng,$$Map:og,$$cookieReader:pg})}]).info({angularVersion:"1.8.0"})}function xb(a,b){return b.toUpperCase()}function yb(a){return a.replace(qg,xb)}function mc(a){a= +$$intervalFactory:Rf,$http:Sf,$httpParamSerializer:Tf,$httpParamSerializerJQLike:Uf,$httpBackend:Vf,$xhrFactory:Wf,$jsonpCallbacks:Xf,$location:Yf,$log:Zf,$parse:$f,$rootScope:ag,$q:bg,$$q:cg,$sce:dg,$sceDelegate:eg,$sniffer:fg,$$taskTrackerFactory:gg,$templateCache:hg,$templateRequest:ig,$$testability:jg,$timeout:kg,$window:lg,$$rAF:mg,$$jqLite:ng,$$Map:og,$$cookieReader:pg})}]).info({angularVersion:"1.8.2"})}function xb(a,b){return b.toUpperCase()}function yb(a){return a.replace(qg,xb)}function mc(a){a= a.nodeType;return 1===a||!a||9===a}function gd(a,b){var d,c,e,f=b.createDocumentFragment(),g=[],k;if(nc.test(a)){d=f.appendChild(b.createElement("div"));c=(rg.exec(a)||["",""])[1].toLowerCase();e=U.legacyXHTMLReplacement?a.replace(sg,"<$1></$2>"):a;if(10>wa)for(c=hb[c]||hb._default,d.innerHTML=c[1]+e+c[2],k=c[0];k--;)d=d.firstChild;else{c=qa[c]||[];for(k=c.length;-1<--k;)d.appendChild(z.document.createElement(c[k])),d=d.firstChild;d.innerHTML=e}g=db(g,d.childNodes);d=f.firstChild;d.textContent=""}else g.push(b.createTextNode(a)); f.textContent="";f.innerHTML="";r(g,function(a){f.appendChild(a)});return f}function U(a){if(a instanceof U)return a;var b;C(a)&&(a=V(a),b=!0);if(!(this instanceof U)){if(b&&"<"!==a.charAt(0))throw oc("nosel");return new U(a)}if(b){b=z.document;var d;a=(d=tg.exec(a))?[b.createElement(d[1])]:(d=gd(a,b))?d.childNodes:[];pc(this,a)}else B(a)?hd(a):pc(this,a)}function qc(a){return a.cloneNode(!0)}function zb(a,b){!b&&mc(a)&&x.cleanData([a]);a.querySelectorAll&&x.cleanData(a.querySelectorAll("*"))}function id(a){for(var b in a)return!1; return!0}function jd(a){var b=a.ng339,d=b&&Ka[b],c=d&&d.events,d=d&&d.data;d&&!id(d)||c&&!id(c)||(delete Ka[b],a.ng339=void 0)}function kd(a,b,d,c){if(w(c))throw oc("offargs");var e=(c=Ab(a))&&c.events,f=c&&c.handle;if(f){if(b){var g=function(b){var c=e[b];w(d)&&cb(c||[],d);w(d)&&c&&0<c.length||(a.removeEventListener(b,f),delete e[b])};r(b.split(" "),function(a){g(a);Bb[a]&&g(Bb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f),delete e[b];jd(a)}}function rc(a,b){var d=a.ng339;if(d= @@ -56,20 +56,21 @@ function Zc(a,b){function d(a,b,c){var d=/^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/,e= a.name;!H(b)&&D(b)&&r(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var f={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,k=/(([\w-]+)(?::([^;]+))?;?)/,h=Ae("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,p=T();this.directive=function pa(b,d){gb(b,"name");Ja(b,"directive");C(b)?(c(b),gb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];r(f[b],function(f, g){try{var h=a.invoke(f);B(h)?h={compile:ia(h)}:!h.compile&&h.link&&(h.compile=ia(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=e(h);var k=h,l=h.restrict;if(l&&(!C(l)||!/[EACM]/.test(l)))throw $("badrestrict",l,b);k.restrict=l||"EA";h.$$moduleName=f.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),f[b].push(d)):r(b,Zb(pa));return this};this.component=function y(a,b){function c(a){function e(b){return B(b)||H(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}: b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:Gg(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};r(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}if(!C(a))return r(a,Zb(Va(this,y))),this;var d=b.controller||function(){};r(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,B(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a, -c)};this.aHrefSanitizationWhitelist=function(a){return w(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var n=!0;this.debugInfoEnabled=function(a){return w(a)?(n=a,this):n};var s=!1;this.strictComponentBindingsEnabled=function(a){return w(a)?(s=a,this):s};var G=10;this.onChangesTtl=function(a){return arguments.length?(G=a,this):G};var t=!0;this.commentDirectivesEnabled= -function(a){return arguments.length?(t=a,this):t};var N=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(N=a,this):N};var v=T();this.addPropertySecurityContext=function(a,b,c){var d=a.toLowerCase()+"|"+b.toLowerCase();if(d in v&&v[d]!==c)throw $("ctxoverride",a,b,v[d],c);v[d]=c;return this};(function(){function a(b,c){r(c,function(a){v[a.toLowerCase()]=b})}a(W.HTML,["iframe|srcdoc","*|innerHTML","*|outerHTML"]);a(W.CSS,["*|style"]);a(W.URL,"area|href area|ping a|href a|ping blockquote|cite body|background del|cite input|src ins|cite q|cite".split(" ")); -a(W.MEDIA_URL,"audio|src img|src img|srcset source|src source|srcset track|src video|src video|poster".split(" "));a(W.RESOURCE_URL,"*|formAction applet|code applet|codebase base|href embed|src frame|src form|action head|profile html|manifest iframe|src link|href media|src object|codebase object|data script|src".split(" "))})();this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate",function(a,b,c,e,p,M,L,u,R){function q(){try{if(!--Ja)throw Ua= -void 0,$("infchng",G);L.$apply(function(){for(var a=0,b=Ua.length;a<b;++a)try{Ua[a]()}catch(d){c(d)}Ua=void 0})}finally{Ja++}}function ma(a,b){if(!a)return a;if(!C(a))throw $("srcset",b,a.toString());for(var c="",d=V(a),e=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,e=/\s/.test(d)?e:/(,)/,d=d.split(e),e=Math.floor(d.length/2),f=0;f<e;f++)var g=2*f,c=c+u.getTrustedMediaUrl(V(d[g])),c=c+(" "+V(d[g+1]));d=V(d[2*f]).split(/\s/);c+=u.getTrustedMediaUrl(V(d[0]));2===d.length&&(c+=" "+V(d[1]));return c}function w(a, -b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function O(a,b,c){Fa.innerHTML="<span "+b+">";b=Fa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function sa(a,b){try{a.addClass(b)}catch(c){}}function da(a,b,c,d,e){a instanceof x||(a=x(a));var f=Xa(a,b,a,c,d,e);da.$$addScopeClass(a);var g=null;return function(b,c,d){if(!a)throw $("multilink");gb(b,"scope");e&&e.needsNewScope&& -(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&la.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==g?x(ja(g,x("<div></div>").append(a).html())):c?Wa.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);da.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);c||(a=f=null);return d}}function Xa(a,b,c,d,e,f){function g(a,c,d,e){var f, -k,l,m,p,I,t;if(n)for(t=Array(c.length),m=0;m<h.length;m+=3)f=h[m],t[f]=c[f];else t=c;m=0;for(p=h.length;m<p;)k=t[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),da.$$addScopeInfo(x(k),l)):l=a,I=c.transcludeOnThisElement?ka(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ka(a,b):null,c(f,l,k,d,I)):f&&f(a,k.childNodes,void 0,e)}for(var h=[],k=H(a)||a instanceof x,l,m,p,I,n,t=0;t<a.length;t++){l=new w;11===wa&&jb(a,t,k);m=tc(a[t],[],l,0===t?d:void 0,e);(f=m.length?aa(m,a[t],l,b,c,null,[],[],f): -null)&&f.scope&&da.$$addScopeClass(l.$$element);l=f&&f.terminal||!(p=a[t].childNodes)||!p.length?null:Xa(p,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(t,f,l),I=!0,n=n||f;f=null}return I?g:null}function jb(a,b,c){var d=a[b],e=d.parentNode,f;if(d.nodeType===Pa)for(;;){f=e?d.nextSibling:a[b+1];if(!f||f.nodeType!==Pa)break;d.nodeValue+=f.nodeValue;f.parentNode&&f.parentNode.removeChild(f);c&&f===a[b+1]&&a.splice(b+1,1)}}function ka(a,b,c){function d(e,f,g,h, -k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var e=d.$$slots=T(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?ka(a,b.$$slots[f],c):null;return d}function tc(a,b,d,e,f){var g=d.$attr,h;switch(a.nodeType){case 1:h=ua(a);Y(b,xa(h),"E",e,f);for(var l,m,n,t,J,s=a.attributes,v=0,G=s&&s.length;v<G;v++){var P=!1,N=!1,r=!1,y=!1,u=!1,M;l=s[v];m=l.name;t=l.value;n=xa(m.toLowerCase());(J=n.match(Ra))?(r="Attr"===J[1],y="Prop"===J[1], -u="On"===J[1],m=m.replace(rd,"").toLowerCase().substr(4+J[1].length).replace(/_(.)/g,function(a,b){return b.toUpperCase()})):(M=n.match(Sa))&&ca(M[1])&&(P=m,N=m.substr(0,m.length-5)+"end",m=m.substr(0,m.length-6));if(y||u)d[n]=t,g[n]=l.name,y?Ea(a,b,n,m):b.push(sd(p,L,c,n,m,!1));else{n=xa(m.toLowerCase());g[n]=m;if(r||!d.hasOwnProperty(n))d[n]=t,nd(a,n)&&(d[n]=!0);Ia(a,b,t,n,r);Y(b,n,"A",e,f,P,N)}}"input"===h&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!Qa)break;g= -a.className;D(g)&&(g=g.animVal);if(C(g)&&""!==g)for(;a=k.exec(g);)n=xa(a[2]),Y(b,n,"C",e,f)&&(d[n]=V(a[3])),g=g.substr(a.index+a[0].length);break;case Pa:na(b,a.nodeValue);break;case 8:if(!Oa)break;F(a,b,d,e,f)}b.sort(ia);return b}function F(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=xa(f[1]);Y(b,h,"M",d,e)&&(c[h]=V(f[2]))}}catch(k){}}function U(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw $("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&& -e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return x(d)}function W(a,b,c){return function(d,e,f,g,h){e=U(e[0],b,c);return a(d,e,f,g,h)}}function Z(a,b,c,d,e,f){var g;return a?da(b,c,d,e,f):function(){g||(g=da(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function aa(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=W(a,c,d));a.require=u.require;a.directiveName=Q;if(s===u||u.$$isolateScope)a=Ba(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=W(b,c,d));b.require=u.require;b.directiveName= -Q;if(s===u||u.$$isolateScope)b=Ba(b,{isolateScope:!0});k.push(b)}}function p(a,e,f,g,l){function m(a,b,c,d){var e;bb(a)||(d=c,c=b,b=a,a=void 0);N&&(e=P);c||(c=N?Q.parent():Q);if(d){var f=l.$$slots[d];if(f)return f(a,b,e,c,R);if(A(f))throw $("noslot",d,Aa(Q));}else return l(a,b,e,c,R)}var n,u,L,y,G,P,M,Q;b===f?(g=d,Q=d.$$element):(Q=x(f),g=new w(Q,d));G=e;s?y=e.$new(!0):t&&(G=e.$parent);l&&(M=m,M.$$boundTransclude=l,M.isSlotFilled=function(a){return!!l.$$slots[a]});J&&(P=ea(Q,g,M,J,y,e,s));s&&(da.$$addScopeInfo(Q, -y,!0,!(v&&(v===s||v===s.$$originalDirective))),da.$$addScopeClass(Q,!0),y.$$isolateBindings=s.$$isolateBindings,u=Da(e,g,y,y.$$isolateBindings,s),u.removeWatches&&y.$on("$destroy",u.removeWatches));for(n in P){u=J[n];L=P[n];var Hg=u.$$bindings.bindToController;L.instance=L();Q.data("$"+u.name+"Controller",L.instance);L.bindingInfo=Da(G,g,L.instance,Hg,u)}r(J,function(a,b){var c=a.require;a.bindToController&&!H(c)&&D(c)&&S(P[b].instance,X(b,c,Q,P))});r(P,function(a){var b=a.instance;if(B(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(B(b.$onInit))try{b.$onInit()}catch(e){c(e)}B(b.$doCheck)&& +c)};this.aHrefSanitizationTrustedUrlList=function(a){return w(a)?(b.aHrefSanitizationTrustedUrlList(a),this):b.aHrefSanitizationTrustedUrlList()};Object.defineProperty(this,"aHrefSanitizationWhitelist",{get:function(){return this.aHrefSanitizationTrustedUrlList},set:function(a){this.aHrefSanitizationTrustedUrlList=a}});this.imgSrcSanitizationTrustedUrlList=function(a){return w(a)?(b.imgSrcSanitizationTrustedUrlList(a),this):b.imgSrcSanitizationTrustedUrlList()};Object.defineProperty(this,"imgSrcSanitizationWhitelist", +{get:function(){return this.imgSrcSanitizationTrustedUrlList},set:function(a){this.imgSrcSanitizationTrustedUrlList=a}});var n=!0;this.debugInfoEnabled=function(a){return w(a)?(n=a,this):n};var s=!1;this.strictComponentBindingsEnabled=function(a){return w(a)?(s=a,this):s};var G=10;this.onChangesTtl=function(a){return arguments.length?(G=a,this):G};var t=!0;this.commentDirectivesEnabled=function(a){return arguments.length?(t=a,this):t};var N=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length? +(N=a,this):N};var v=T();this.addPropertySecurityContext=function(a,b,c){var d=a.toLowerCase()+"|"+b.toLowerCase();if(d in v&&v[d]!==c)throw $("ctxoverride",a,b,v[d],c);v[d]=c;return this};(function(){function a(b,c){r(c,function(a){v[a.toLowerCase()]=b})}a(W.HTML,["iframe|srcdoc","*|innerHTML","*|outerHTML"]);a(W.CSS,["*|style"]);a(W.URL,"area|href area|ping a|href a|ping blockquote|cite body|background del|cite input|src ins|cite q|cite".split(" "));a(W.MEDIA_URL,"audio|src img|src img|srcset source|src source|srcset track|src video|src video|poster".split(" ")); +a(W.RESOURCE_URL,"*|formAction applet|code applet|codebase base|href embed|src frame|src form|action head|profile html|manifest iframe|src link|href media|src object|codebase object|data script|src".split(" "))})();this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate",function(a,b,c,e,p,M,L,u,R){function q(){try{if(!--Ja)throw Ua=void 0,$("infchng",G);L.$apply(function(){for(var a=0,b=Ua.length;a<b;++a)try{Ua[a]()}catch(d){c(d)}Ua= +void 0})}finally{Ja++}}function ma(a,b){if(!a)return a;if(!C(a))throw $("srcset",b,a.toString());for(var c="",d=V(a),e=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,e=/\s/.test(d)?e:/(,)/,d=d.split(e),e=Math.floor(d.length/2),f=0;f<e;f++)var g=2*f,c=c+u.getTrustedMediaUrl(V(d[g])),c=c+(" "+V(d[g+1]));d=V(d[2*f]).split(/\s/);c+=u.getTrustedMediaUrl(V(d[0]));2===d.length&&(c+=" "+V(d[1]));return c}function w(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr= +{};this.$$element=a}function O(a,b,c){Fa.innerHTML="<span "+b+">";b=Fa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function sa(a,b){try{a.addClass(b)}catch(c){}}function da(a,b,c,d,e){a instanceof x||(a=x(a));var f=Xa(a,b,a,c,d,e);da.$$addScopeClass(a);var g=null;return function(b,c,d){if(!a)throw $("multilink");gb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement; +h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&la.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==g?x(ja(g,x("<div></div>").append(a).html())):c?Wa.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);da.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);c||(a=f=null);return d}}function Xa(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,p,I,t;if(n)for(t=Array(c.length),m=0;m<h.length;m+=3)f=h[m],t[f]=c[f];else t=c;m=0;for(p=h.length;m< +p;)k=t[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),da.$$addScopeInfo(x(k),l)):l=a,I=c.transcludeOnThisElement?ka(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ka(a,b):null,c(f,l,k,d,I)):f&&f(a,k.childNodes,void 0,e)}for(var h=[],k=H(a)||a instanceof x,l,m,p,I,n,t=0;t<a.length;t++){l=new w;11===wa&&jb(a,t,k);m=tc(a[t],[],l,0===t?d:void 0,e);(f=m.length?aa(m,a[t],l,b,c,null,[],[],f):null)&&f.scope&&da.$$addScopeClass(l.$$element);l=f&&f.terminal||!(p=a[t].childNodes)||!p.length?null:Xa(p, +f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(t,f,l),I=!0,n=n||f;f=null}return I?g:null}function jb(a,b,c){var d=a[b],e=d.parentNode,f;if(d.nodeType===Pa)for(;;){f=e?d.nextSibling:a[b+1];if(!f||f.nodeType!==Pa)break;d.nodeValue+=f.nodeValue;f.parentNode&&f.parentNode.removeChild(f);c&&f===a[b+1]&&a.splice(b+1,1)}}function ka(a,b,c){function d(e,f,g,h,k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g, +futureParentElement:h})}var e=d.$$slots=T(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?ka(a,b.$$slots[f],c):null;return d}function tc(a,b,d,e,f){var g=d.$attr,h;switch(a.nodeType){case 1:h=ua(a);Y(b,xa(h),"E",e,f);for(var l,m,n,t,J,s=a.attributes,v=0,G=s&&s.length;v<G;v++){var P=!1,N=!1,r=!1,y=!1,u=!1,M;l=s[v];m=l.name;t=l.value;n=xa(m.toLowerCase());(J=n.match(Ra))?(r="Attr"===J[1],y="Prop"===J[1],u="On"===J[1],m=m.replace(rd,"").toLowerCase().substr(4+J[1].length).replace(/_(.)/g,function(a,b){return b.toUpperCase()})): +(M=n.match(Sa))&&ca(M[1])&&(P=m,N=m.substr(0,m.length-5)+"end",m=m.substr(0,m.length-6));if(y||u)d[n]=t,g[n]=l.name,y?Ea(a,b,n,m):b.push(sd(p,L,c,n,m,!1));else{n=xa(m.toLowerCase());g[n]=m;if(r||!d.hasOwnProperty(n))d[n]=t,nd(a,n)&&(d[n]=!0);Ia(a,b,t,n,r);Y(b,n,"A",e,f,P,N)}}"input"===h&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!Qa)break;g=a.className;D(g)&&(g=g.animVal);if(C(g)&&""!==g)for(;a=k.exec(g);)n=xa(a[2]),Y(b,n,"C",e,f)&&(d[n]=V(a[3])),g=g.substr(a.index+ +a[0].length);break;case Pa:na(b,a.nodeValue);break;case 8:if(!Oa)break;F(a,b,d,e,f)}b.sort(ia);return b}function F(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=xa(f[1]);Y(b,h,"M",d,e)&&(c[h]=V(f[2]))}}catch(k){}}function U(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw $("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return x(d)}function W(a,b,c){return function(d,e,f,g,h){e=U(e[0], +b,c);return a(d,e,f,g,h)}}function Z(a,b,c,d,e,f){var g;return a?da(b,c,d,e,f):function(){g||(g=da(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function aa(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=W(a,c,d));a.require=u.require;a.directiveName=Q;if(s===u||u.$$isolateScope)a=Ba(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=W(b,c,d));b.require=u.require;b.directiveName=Q;if(s===u||u.$$isolateScope)b=Ba(b,{isolateScope:!0});k.push(b)}}function p(a,e,f,g,l){function m(a,b,c,d){var e;bb(a)|| +(d=c,c=b,b=a,a=void 0);N&&(e=P);c||(c=N?Q.parent():Q);if(d){var f=l.$$slots[d];if(f)return f(a,b,e,c,R);if(A(f))throw $("noslot",d,Aa(Q));}else return l(a,b,e,c,R)}var n,u,L,y,G,P,M,Q;b===f?(g=d,Q=d.$$element):(Q=x(f),g=new w(Q,d));G=e;s?y=e.$new(!0):t&&(G=e.$parent);l&&(M=m,M.$$boundTransclude=l,M.isSlotFilled=function(a){return!!l.$$slots[a]});J&&(P=ea(Q,g,M,J,y,e,s));s&&(da.$$addScopeInfo(Q,y,!0,!(v&&(v===s||v===s.$$originalDirective))),da.$$addScopeClass(Q,!0),y.$$isolateBindings=s.$$isolateBindings, +u=Da(e,g,y,y.$$isolateBindings,s),u.removeWatches&&y.$on("$destroy",u.removeWatches));for(n in P){u=J[n];L=P[n];var Hg=u.$$bindings.bindToController;L.instance=L();Q.data("$"+u.name+"Controller",L.instance);L.bindingInfo=Da(G,g,L.instance,Hg,u)}r(J,function(a,b){var c=a.require;a.bindToController&&!H(c)&&D(c)&&S(P[b].instance,X(b,c,Q,P))});r(P,function(a){var b=a.instance;if(B(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(B(b.$onInit))try{b.$onInit()}catch(e){c(e)}B(b.$doCheck)&& (G.$watch(function(){b.$doCheck()}),b.$doCheck());B(b.$onDestroy)&&G.$on("$destroy",function(){b.$onDestroy()})});n=0;for(u=h.length;n<u;n++)L=h[n],Ca(L,L.isolateScope?y:e,Q,g,L.require&&X(L.directiveName,L.require,Q,P),M);var R=e;s&&(s.template||null===s.templateUrl)&&(R=y);a&&a(R,f.childNodes,void 0,l);for(n=k.length-1;0<=n;n--)L=k[n],Ca(L,L.isolateScope?y:e,Q,g,L.require&&X(L.directiveName,L.require,Q,P),M);r(P,function(a){a=a.instance;B(a.$postLink)&&a.$postLink()})}l=l||{};for(var n=-Number.MAX_VALUE, t=l.newScopeDirective,J=l.controllerDirectives,s=l.newIsolateScopeDirective,v=l.templateDirective,L=l.nonTlbTranscludeDirective,G=!1,P=!1,N=l.hasElementTranscludeDirective,y=d.$$element=x(b),u,Q,M,R=e,q,ma=!1,Jb=!1,O,sa=0,C=a.length;sa<C;sa++){u=a[sa];var E=u.$$start,jb=u.$$end;E&&(y=U(b,E,jb));M=void 0;if(n>u.priority)break;if(O=u.scope)u.templateUrl||(D(O)?(ba("new/isolated scope",s||t,u,y),s=u):ba("new/isolated scope",s,u,y)),t=t||u;Q=u.name;if(!ma&&(u.replace&&(u.templateUrl||u.template)||u.transclude&& !u.$$tlb)){for(O=sa+1;ma=a[O++];)if(ma.transclude&&!ma.$$tlb||ma.replace&&(ma.templateUrl||ma.template)){Jb=!0;break}ma=!0}!u.templateUrl&&u.controller&&(J=J||T(),ba("'"+Q+"' controller",J[Q],u,y),J[Q]=u);if(O=u.transclude)if(G=!0,u.$$tlb||(ba("transclusion",L,u,y),L=u),"element"===O)N=!0,n=u.priority,M=y,y=d.$$element=x(da.$$createComment(Q,d[Q])),b=y[0],oa(f,Ha.call(M,0),b),R=Z(Jb,M,e,n,g&&g.name,{nonTlbTranscludeDirective:L});else{var ka=T();if(D(O)){M=z.document.createDocumentFragment();var Xa= @@ -99,65 +100,66 @@ h,!0);if(!c)throw xd("ctrlreg",h);tb(c,h,!0)}if(f)return f=(H(c)?c[c.length-1]:c a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return e}}]}function Nf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function vc(a){return D(a)?ha(a)?a.toISOString():eb(a):a}function Tf(){this.$get=function(){return function(a){if(!a)return"";var b=[];Qc(a,function(a,c){null===a||A(a)||B(a)||(H(a)?r(a,function(a){b.push(ba(c)+"="+ba(vc(a)))}):b.push(ba(c)+"="+ba(vc(a))))});return b.join("&")}}}function Uf(){this.$get= function(){return function(a){function b(a,e,f){H(a)?r(a,function(a,c){b(a,e+"["+(D(a)?c:"")+"]")}):D(a)&&!ha(a)?Qc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):(B(a)&&(a=a()),d.push(ba(e)+"="+(null==a?"":ba(vc(a)))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function wc(a,b){if(C(a)){var d=a.replace(Lg,"").trim();if(d){var c=b("Content-Type"),c=c&&0===c.indexOf(yd),e;(e=c)||(e=(e=d.match(Mg))&&Ng[e[0]].test(d));if(e)try{a=Tc(d)}catch(f){if(!c)return a;throw Lb("baddata",a,f);}}}return a} function zd(a){var b=T(),d;C(a)?r(a.split("\n"),function(a){d=a.indexOf(":");var e=K(V(a.substr(0,d)));a=V(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):D(a)&&r(a,function(a,d){var f=K(d),g=V(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function Ad(a){var b;return function(d){b||(b=zd(a));return d?(d=b[K(d)],void 0===d&&(d=null),d):b}}function Bd(a,b,d,c){if(B(c))return c(a,b,d);r(c,function(c){a=c(a,b,d)});return a}function Sf(){var a=this.defaults={transformResponse:[wc],transformRequest:[function(a){return D(a)&& -"[object File]"!==la.call(a)&&"[object Blob]"!==la.call(a)&&"[object FormData]"!==la.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ja(xc),put:ja(xc),patch:ja(xc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=this.interceptors=[],c=this.xsrfWhitelistedOrigins=[];this.$get=["$browser","$httpBackend","$$cookieReader", -"$cacheFactory","$rootScope","$q","$injector","$sce",function(e,f,g,k,h,l,m,p){function n(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f,g)}b.length=0;return a}function d(a,b){var c,e={};r(a,function(a,d){B(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}function f(a){var b=S({},a);b.data=Bd(a.data,a.headers,a.status,g.transformResponse);a=a.status;return 200<=a&&300>a?b:l.reject(b)}if(!D(b))throw F("$http")("badreq",b);if(!C(p.valueOf(b.url)))throw F("$http")("badreq", -b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam},b);g.headers=function(b){var c=a.headers,e=S({},b.headers),f,g,h,c=S({},c.common,c[K(b.method)]);a:for(f in c){g=K(f);for(h in e)if(K(h)===g)continue a;e[f]=c[f]}return d(e,ja(b))}(b);g.method=vb(g.method);g.paramSerializer=C(g.paramSerializer)?m.get(g.paramSerializer):g.paramSerializer;e.$$incOutstandingRequestCount("$http"); -var h=[],k=[];b=l.resolve(g);r(v,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&k.push(a.response,a.responseError)});b=c(b,h);b=b.then(function(b){var c=b.headers,d=Bd(b.data,Ad(c),void 0,b.transformRequest);A(d)&&r(c,function(a,b){"content-type"===K(b)&&delete c[b]});A(b.withCredentials)&&!A(a.withCredentials)&&(b.withCredentials=a.withCredentials);return s(b,d).then(f,f)});b=c(b,k);return b=b.finally(function(){e.$$completeOutstandingRequest(E, -"$http")})}function s(c,d){function e(a){if(a){var c={};r(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function k(a,c,d,e,f){function g(){m(c,a,d,e,f)}R&&(200<=a&&300>a?R.put(O,[a,c,zd(d),e,f]):R.remove(O));b?h.$applyAsync(g):(g(),h.$$phase||h.$apply())}function m(a,b,d,e,f){b=-1<=b?b:0;(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:Ad(d),config:c,statusText:e,xhrStatus:f})}function s(a){m(a.data,a.status,ja(a.headers()), -a.statusText,a.xhrStatus)}function v(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var L=l.defer(),u=L.promise,R,q,ma=c.headers,x="jsonp"===K(c.method),O=c.url;x?O=p.getTrustedResourceUrl(O):C(O)||(O=p.valueOf(O));O=G(O,c.paramSerializer(c.params));x&&(O=t(O,c.jsonpCallbackParam));n.pendingRequests.push(c);u.then(v,v);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(R=D(c.cache)?c.cache:D(a.cache)?a.cache:N);R&&(q=R.get(O),w(q)?q&&B(q.then)?q.then(s, -s):H(q)?m(q[1],q[0],ja(q[2]),q[3],q[4]):m(q,200,{},"OK","complete"):R.put(O,u));A(q)&&((q=kc(c.url)?g()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(ma[c.xsrfHeaderName||a.xsrfHeaderName]=q),f(c.method,O,d,k,ma,c.timeout,c.withCredentials,c.responseType,e(c.eventHandlers),e(c.uploadEventHandlers)));return u}function G(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}function t(a,b){var c=a.split("?");if(2<c.length)throw Lb("badjsonp",a);c=hc(c[1]);r(c,function(c,d){if("JSON_CALLBACK"=== -c)throw Lb("badjsonp",a);if(d===b)throw Lb("badjsonp",b,a);});return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var N=k("$http");a.paramSerializer=C(a.paramSerializer)?m.get(a.paramSerializer):a.paramSerializer;var v=[];r(d,function(a){v.unshift(C(a)?m.get(a):m.invoke(a))});var kc=Og(c);n.pendingRequests=[];(function(a){r(arguments,function(a){n[a]=function(b,c){return n(S({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){n[a]=function(b, -c,d){return n(S({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function Wf(){this.$get=function(){return function(){return new z.XMLHttpRequest}}}function Vf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return Pg(a,c,a.defer,b,d[0])}]}function Pg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load", -m);f.removeEventListener("error",m);e.body.removeChild(f);f=null;var g=-1,s="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),s=a.type,g="error"===a.type?404:200);d&&d(g,s)};f.addEventListener("load",m);f.addEventListener("error",m);e.body.appendChild(f);return m}return function(e,k,h,l,m,p,n,s,G,t){function N(a){J="timeout"===a;pa&&pa();y&&y.abort()}function v(a,b,c,e,f,g){w(P)&&d.cancel(P);pa=y=null;a(b,c,e,f,g)}k=k||a.url();if("jsonp"===K(e))var q=c.createCallback(k),pa=f(k,q,function(a, -b){var d=200===a&&c.getResponse(q);v(l,a,d,"",b,"complete");c.removeCallback(q)});else{var y=b(e,k),J=!1;y.open(e,k,!0);r(m,function(a,b){w(a)&&y.setRequestHeader(b,a)});y.onload=function(){var a=y.statusText||"",b="response"in y?y.response:y.responseText,c=1223===y.status?204:y.status;0===c&&(c=b?200:"file"===ga(k).protocol?404:0);v(l,c,b,y.getAllResponseHeaders(),a,"complete")};y.onerror=function(){v(l,-1,null,null,"","error")};y.ontimeout=function(){v(l,-1,null,null,"","timeout")};y.onabort=function(){v(l, --1,null,null,"",J?"timeout":"abort")};r(G,function(a,b){y.addEventListener(b,a)});r(t,function(a,b){y.upload.addEventListener(b,a)});n&&(y.withCredentials=!0);if(s)try{y.responseType=s}catch(I){if("json"!==s)throw I;}y.send(A(h)?null:h)}if(0<p)var P=d(function(){N("timeout")},p);else p&&B(p.then)&&p.then(function(){N(w(p.$$timeoutId)?"timeout":"abort")})}}function Pf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get= -["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(p,a).replace(n,b)}function k(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function h(f,h,n,p){function v(a){try{return a=n&&!r?e.getTrusted(n,a):e.valueOf(a),p&&!w(a)?a:jc(a)}catch(b){c(Ma.interr(f,b))}}var r=n===e.URL||n===e.MEDIA_URL;if(!f.length||-1===f.indexOf(a)){if(h)return;h=g(f);r&&(h=e.getTrusted(n,h));h=ia(h);h.exp=f;h.expressions=[];h.$$watchDelegate= -k;return h}p=!!p;for(var q,y,J=0,I=[],P,Q=f.length,M=[],L=[],u;J<Q;)if(-1!==(q=f.indexOf(a,J))&&-1!==(y=f.indexOf(b,q+l)))J!==q&&M.push(g(f.substring(J,q))),J=f.substring(q+l,y),I.push(J),J=y+m,L.push(M.length),M.push("");else{J!==Q&&M.push(g(f.substring(J)));break}u=1===M.length&&1===L.length;var R=r&&u?void 0:v;P=I.map(function(a){return d(a,R)});if(!h||I.length){var x=function(a){for(var b=0,c=I.length;b<c;b++){if(p&&A(a[b]))return;M[L[b]]=a[b]}if(r)return e.getTrusted(n,u?M[0]:M.join(""));n&& -1<M.length&&Ma.throwNoconcat(f);return M.join("")};return S(function(a){var b=0,d=I.length,e=Array(d);try{for(;b<d;b++)e[b]=P[b](a);return x(e)}catch(g){c(Ma.interr(f,g))}},{exp:f,expressions:I,$$watchDelegate:function(a,b){var c;return a.$watchGroup(P,function(d,e){var f=x(d);b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,p=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g,f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function Qf(){this.$get= -["$$intervalFactory","$window",function(a,b){var d={},c=function(a){b.clearInterval(a);delete d[a]},e=a(function(a,c,e){a=b.setInterval(a,c);d[a]=e;return a},c);e.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$intervalId"))throw Qg("badprom");if(!d.hasOwnProperty(a.$$intervalId))return!1;a=a.$$intervalId;var b=d[a],e=b.promise;e.$$state&&(e.$$state.pur=!0);b.reject("canceled");c(a);return!0};return e}]}function Rf(){this.$get=["$browser","$q","$$q","$rootScope",function(a,b,d,c){return function(e, -f){return function(g,k,h,l){function m(){p?g.apply(null,n):g(s)}var p=4<arguments.length,n=p?Ha.call(arguments,4):[],s=0,G=w(l)&&!l,t=(G?d:b).defer(),r=t.promise;h=w(h)?h:0;r.$$intervalId=e(function(){G?a.defer(m):c.$evalAsync(m);t.notify(s++);0<h&&s>=h&&(t.resolve(s),f(r.$$intervalId));G||c.$apply()},k,t,G);return r}}}]}function Cd(a,b){var d=ga(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=fa(d.port)||Rg[d.protocol]||null}function Dd(a,b,d){if(Sg.test(a))throw kb("badpath",a);var c="/"!== -a.charAt(0);c&&(a="/"+a);a=ga(a);for(var c=(c&&"/"===a.pathname.charAt(0)?a.pathname.substring(1):a.pathname).split("/"),e=c.length;e--;)c[e]=decodeURIComponent(c[e]),d&&(c[e]=c[e].replace(/\//g,"%2F"));d=c.join("/");b.$$path=d;b.$$search=hc(a.search);b.$$hash=decodeURIComponent(a.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function yc(a,b){return a.slice(0,b.length)===b}function ya(a,b){if(yc(b,a))return b.substr(a.length)}function Da(a){var b=a.indexOf("#");return-1===b?a: -a.substr(0,b)}function zc(a,b,d){this.$$html5=!0;d=d||"";Cd(a,this);this.$$parse=function(a){var d=ya(b,a);if(!C(d))throw kb("ipthprfx",a,b);Dd(d,this,!0);this.$$path||(this.$$path="/");this.$$compose()};this.$$normalizeUrl=function(a){return b+a.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;w(f=ya(a,c))?(g=f,g=d&&w(f=ya(d,f))?b+(ya("/",f)||f):a+g):w(f=ya(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function Ac(a,b,d){Cd(a,this); -this.$$parse=function(c){var e=ya(a,c)||ya(b,c),f;A(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",A(e)&&(a=c,this.replace())):(f=ya(d,e),A(f)&&(f=e));Dd(f,this,!1);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;yc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$normalizeUrl=function(b){return a+(b?d+b:"")};this.$$parseLinkUrl=function(b,d){return Da(a)===Da(b)?(this.$$parse(b),!0):!1}}function Ed(a,b,d){this.$$html5=!0;Ac.apply(this,arguments);this.$$parseLinkUrl= -function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===Da(c)?f=c:(g=ya(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$normalizeUrl=function(b){return a+d+b}}function Mb(a){return function(){return this[a]}}function Fd(a,b){return function(d){if(A(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Yf(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a};this.html5Mode=function(a){if(Ga(a))return b.enabled= -a,this;if(D(a)){Ga(a.enabled)&&(b.enabled=a.enabled);Ga(a.requireBase)&&(b.requireBase=a.requireBase);if(Ga(a.rewriteLinks)||C(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function k(a,b){return a===b||ga(a).href===ga(b).href}function h(a,b,d){var e=m.url(),f=m.$$state;try{c.url(a,b,d),m.$$state=c.state()}catch(g){throw m.url(e),m.$$state=f,g;}}function l(a,b){d.$broadcast("$locationChangeSuccess", -m.absUrl(),a,m.$$state,b)}var m,p;p=c.baseHref();var n=c.url(),s;if(b.enabled){if(!p&&b.requireBase)throw kb("nobase");s=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(p||"/");p=e.history?zc:Ed}else s=Da(n),p=Ac;var r=s.substr(0,Da(s).lastIndexOf("/")+1);m=new p(s,r,"#"+a);m.$$parseLinkUrl(n,n);m.$$state=c.state();var t=/^\s*(javascript|mailto):/i;f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var g=x(a.target);"a"!==ua(g[0]);)if(g[0]=== -f[0]||!(g=g.parent())[0])return;if(!C(e)||!A(g.attr(e))){var e=g.prop("href"),h=g.attr("href")||g.attr("xlink:href");D(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ga(e.animVal).href);t.test(e)||!e||g.attr("target")||a.isDefaultPrevented()||!m.$$parseLinkUrl(e,h)||(a.preventDefault(),m.absUrl()!==c.url()&&d.$apply())}}});m.absUrl()!==n&&c.url(m.absUrl(),!0);var N=!0;c.onUrlChange(function(a,b){yc(a,r)?(d.$evalAsync(function(){var c=m.absUrl(),e=m.$$state,f;m.$$parse(a);m.$$state=b;f=d.$broadcast("$locationChangeStart", -a,c,b,e).defaultPrevented;m.absUrl()===a&&(f?(m.$$parse(c),m.$$state=e,h(c,!1,e)):(N=!1,l(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(N||m.$$urlUpdatedByLocation){m.$$urlUpdatedByLocation=!1;var a=c.url(),b=m.absUrl(),f=c.state(),g=m.$$replace,n=!k(a,b)||m.$$html5&&e.history&&f!==m.$$state;if(N||n)N=!1,d.$evalAsync(function(){var b=m.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,m.$$state,f).defaultPrevented;m.absUrl()===b&&(c?(m.$$parse(a),m.$$state=f):(n&&h(b, -g,f===m.$$state?null:m.$$state),l(a,f)))})}m.$$replace=!1});return m}]}function Zf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){dc(a)&&(a.stack&&f?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||E;return function(){var a=[];r(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e, -b,a)}}var f=wa||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Tg(a){return a+""}function Ug(a,b){return"undefined"!==typeof a?a:b}function Gd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Vg(a,b){switch(a.type){case q.MemberExpression:if(a.computed)return!1;break;case q.UnaryExpression:return 1;case q.BinaryExpression:return"+"!== -a.operator?1:!1;case q.CallExpression:return!1}return void 0===b?Hd:b}function Z(a,b,d){var c,e,f=a.isPure=Vg(a,d);switch(a.type){case q.Program:c=!0;r(a.body,function(a){Z(a.expression,b,f);c=c&&a.expression.constant});a.constant=c;break;case q.Literal:a.constant=!0;a.toWatch=[];break;case q.UnaryExpression:Z(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case q.BinaryExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch= -a.left.toWatch.concat(a.right.toWatch);break;case q.LogicalExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case q.ConditionalExpression:Z(a.test,b,f);Z(a.alternate,b,f);Z(a.consequent,b,f);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case q.Identifier:a.constant=!1;a.toWatch=[a];break;case q.MemberExpression:Z(a.object,b,f);a.computed&&Z(a.property,b,f);a.constant=a.object.constant&& -(!a.computed||a.property.constant);a.toWatch=a.constant?[]:[a];break;case q.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];r(a.arguments,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case q.AssignmentExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case q.ArrayExpression:c=!0;e=[];r(a.elements,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c; -a.toWatch=e;break;case q.ObjectExpression:c=!0;e=[];r(a.properties,function(a){Z(a.value,b,f);c=c&&a.value.constant;e.push.apply(e,a.value.toWatch);a.computed&&(Z(a.key,b,!1),c=c&&a.key.constant,e.push.apply(e,a.key.toWatch))});a.constant=c;a.toWatch=e;break;case q.ThisExpression:a.constant=!1;a.toWatch=[];break;case q.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Id(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Jd(a){return a.type=== -q.Identifier||a.type===q.MemberExpression}function Kd(a){if(1===a.body.length&&Jd(a.body[0].expression))return{type:q.AssignmentExpression,left:a.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function Ld(a){this.$filter=a}function Md(a){this.$filter=a}function Nb(a,b,d){this.ast=new q(a,d);this.astCompiler=d.csp?new Md(b):new Ld(b)}function Bc(a){return B(a.valueOf)?a.valueOf():Wg.call(a)}function $f(){var a=T(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral= -function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(b,c){var d,f;switch(typeof b){case "string":return f=b=b.trim(),d=a[f],d||(d=new Ob(G),d=(new Nb(d,e,G)).parse(b),a[f]=p(d)),s(d,c);case "function":return s(b,c);default:return s(E,c)}}function g(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=Bc(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function k(a,b,c,d,e){var f=d.inputs,h;if(1===f.length){var k=g,f=f[0]; -return a.$watch(function(a){var b=f(a);g(b,k,f.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&Bc(b));return h},b,c,e)}for(var l=[],m=[],n=0,p=f.length;n<p;n++)l[n]=g,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var k=f[c](a);if(b||(b=!g(k,l[c],f[c].isPure)))m[c]=k,l[c]=k&&Bc(k)}b&&(h=d(a,void 0,void 0,m));return h},b,c,e)}function h(a,b,c,d,e){function f(){h(m)&&k()}function g(a,b,c,d){m=u&&d?d[0]:n(a,b,c,d);h(m)&&a.$$postDigest(f);return s(m)}var h=d.literal?l:w,k,m,n=d.$$intercepted|| -d,s=d.$$interceptor||Ta,u=d.inputs&&!n.inputs;g.literal=d.literal;g.constant=d.constant;g.inputs=d.inputs;p(g);return k=a.$watch(g,b,c,e)}function l(a){var b=!0;r(a,function(a){w(a)||(b=!1)});return b}function m(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function p(a){a.constant?a.$$watchDelegate=m:a.oneTime?a.$$watchDelegate=h:a.inputs&&(a.$$watchDelegate=k);return a}function n(a,b){function c(d){return b(a(d))}c.$stateful=a.$stateful||b.$stateful;c.$$pure=a.$$pure&&b.$$pure; -return c}function s(a,b){if(!b)return a;a.$$interceptor&&(b=n(a.$$interceptor,b),a=a.$$intercepted);var c=!1,d=function(d,e,f,g){d=c&&g?g[0]:a(d,e,f,g);return b(d)};d.$$intercepted=a;d.$$interceptor=b;d.literal=a.literal;d.oneTime=a.oneTime;d.constant=a.constant;b.$stateful||(c=!a.inputs,d.inputs=a.inputs?a.inputs:[a],b.$$pure||(d.inputs=d.inputs.map(function(a){return a.isPure===Hd?function(b){return a(b)}:a})));return p(d)}var G={csp:Ba().noUnsafeEval,literals:Ia(b),isIdentifierStart:B(d)&&d,isIdentifierContinue:B(c)&& -c};f.$$getAst=function(a){var b=new Ob(G);return(new Nb(b,e,G)).getAst(a).ast};return f}]}function bg(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Nd(function(a){b.$evalAsync(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this):a}}function cg(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Nd(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this):a}}function Nd(a,b,d){function c(){return new e} -function e(){var a=this.promise=new f;this.resolve=function(b){h(a,b)};this.reject=function(b){m(a,b)};this.notify=function(b){n(a,b)}}function f(){this.$$state={status:0}}function g(){for(;!w&&x.length;){var a=x.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):A(c)?"undefined":"string"!==typeof c?Ne(c,void 0):c);dc(a.value)?b(a.value,c):b(c)}}}function k(c){!d||c.pending||2!==c.status||c.pur||(0===w&&0===x.length&& -a(g),x.push(c));!c.processScheduled&&c.pending&&(c.processScheduled=!0,++w,a(function(){var e,f,k;k=c.pending;c.processScheduled=!1;c.pending=void 0;try{for(var l=0,n=k.length;l<n;++l){c.pur=!0;f=k[l][0];e=k[l][c.status];try{B(e)?h(f,e(c.value)):1===c.status?h(f,c.value):m(f,c.value)}catch(p){m(f,p),p&&!0===p.$$passToExceptionHandler&&b(p)}}}finally{--w,d&&0===w&&a(g)}}))}function h(a,b){a.$$state.status||(b===a?p(a,v("qcycle",b)):l(a,b))}function l(a,b){function c(b){g||(g=!0,l(a,b))}function d(b){g|| -(g=!0,p(a,b))}function e(b){n(a,b)}var f,g=!1;try{if(D(b)||B(b))f=b.then;B(f)?(a.$$state.status=-1,f.call(b,c,d,e)):(a.$$state.value=b,a.$$state.status=1,k(a.$$state))}catch(h){d(h)}}function m(a,b){a.$$state.status||p(a,b)}function p(a,b){a.$$state.value=b;a.$$state.status=2;k(a.$$state)}function n(c,d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,f=0,g=e.length;f<g;f++){c=e[f][0];a=e[f][3];try{n(c,B(a)?a(d):d)}catch(h){b(h)}}})}function s(a){var b=new f;m(b, -a);return b}function G(a,b,c){var d=null;try{B(c)&&(d=c())}catch(e){return s(e)}return d&&B(d.then)?d.then(function(){return b(a)},s):b(a)}function t(a,b,c,d){var e=new f;h(e,a);return e.then(b,c,d)}function q(a){if(!B(a))throw v("norslvr",a);var b=new f;a(function(a){h(b,a)},function(a){m(b,a)});return b}var v=F("$q",TypeError),w=0,x=[];S(f.prototype,{then:function(a,b,c){if(A(a)&&A(b)&&A(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]); -0<this.$$state.status&&k(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return G(b,y,a)},function(b){return G(b,s,a)},b)}});var y=t;q.prototype=f.prototype;q.defer=c;q.reject=s;q.when=t;q.resolve=y;q.all=function(a){var b=new f,c=0,d=H(a)?[]:{};r(a,function(a,e){c++;t(a).then(function(a){d[e]=a;--c||h(b,d)},function(a){m(b,a)})});0===c&&h(b,d);return b};q.race=function(a){var b=c();r(a,function(a){t(a).then(b.resolve,b.reject)}); -return b.promise};return q}function mg(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function ag(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null; -this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++qb;this.$$ChildScope=null;this.$$suspended=!1}b.prototype=a;return b}var b=10,d=F("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,k){function h(a){a.currentScope.$$destroyed=!0}function l(a){9===wa&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead= -a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++qb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$suspended=this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function p(a){if(v.$$phase)throw d("inprog",v.$$phase);v.$$phase=a}function n(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function s(a,b,c){do a.$$listenerCount[c]-= -b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function G(){}function t(){for(;y.length;)try{y.shift()()}catch(a){f(a)}e=null}function q(){null===e&&(e=k.defer(function(){v.$apply(t)},null,"$applyAsync"))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d): -c.$$childHead=c.$$childTail=d;(b||c!==this)&&d.$on("$destroy",h);return d},$watch:function(a,b,d,e){var f=g(a);b=B(b)?b:E;if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l={fn:b,last:G,get:f,exp:e||a,eq:!!d};c=null;k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;n(this,1);return function(){var a=cb(k,l);0<=a&&(n(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;try{k?(k= -!1,b(e,e,g)):b(e,d,g)}finally{for(var f=0;f<a.length;f++)d[f]=e[f]}}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var d=g.$watch(a,function(a){e[b]=a;h||(h=!0,g.$evalAsync(c))});f.push(d)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d, -g,h;if(!A(e)){if(D(e))if(za(e))for(f!==n&&(f=n,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==p&&(f=p={},t=0,l++);a=0;for(b in e)ta.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++,f)ta.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$$pure=g(a).literal;c.$stateful=!c.$$pure;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],p={},s=!0,t=0;return this.$watch(m, -function(){s?(s=!1,b(e,e,d)):b(e,h,d);if(k)if(D(e))if(za(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ta.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,h,l,m,n,s,r=b,q,y=w.length?v:this,N=[],A,z;p("$digest");k.$$checkUrlChange();this===v&&null!==e&&(k.defer.cancel(e),t());c=null;do{s=!1;q=y;for(n=0;n<w.length;n++){try{z=w[n],l=z.fn,l(z.scope,z.locals)}catch(C){f(C)}c=null}w.length=0;a:do{if(n=!q.$$suspended&&q.$$watchers)for(n.$$digestWatchIndex=n.length;n.$$digestWatchIndex--;)try{if(a= -n[n.$$digestWatchIndex])if(m=a.get,(g=m(q))!==(h=a.last)&&!(a.eq?va(g,h):Y(g)&&Y(h)))s=!0,c=a,a.last=a.eq?Ia(g,null):g,l=a.fn,l(g,h===G?g:h,q),5>r&&(A=4-r,N[A]||(N[A]=[]),N[A].push({msg:B(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:h}));else if(a===c){s=!1;break a}}catch(E){f(E)}if(!(n=!q.$$suspended&&q.$$watchersCount&&q.$$childHead||q!==y&&q.$$nextSibling))for(;q!==y&&!(n=q.$$nextSibling);)q=q.$parent}while(q=n);if((s||w.length)&&!r--)throw v.$$phase=null,d("infdig",b,N); -}while(s||w.length);for(v.$$phase=null;J<x.length;)try{x[J++]()}catch(D){f(D)}x.length=J=0;k.$$checkUrlChange()},$suspend:function(){this.$$suspended=!0},$isSuspended:function(){return this.$$suspended},$resume:function(){this.$$suspended=!1},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===v&&k.$$applicationDestroyed();n(this,-this.$$watchersCount);for(var b in this.$$listenerCount)s(this,this.$$listenerCount[b],b);a&&a.$$childHead=== -this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail===this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=E;this.$on=this.$watch=this.$watchGroup=function(){return E};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){v.$$phase|| -w.length||k.defer(function(){w.length&&v.$digest()},null,"$evalAsync");w.push({scope:this,fn:g(a),locals:b})},$$postDigest:function(a){x.push(a)},$apply:function(a){try{p("$apply");try{return this.$eval(a)}finally{v.$$phase=null}}catch(b){f(b)}finally{try{v.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&y.push(b);a=g(a);q()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]= -0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(delete c[d],s(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,m--;if(g)break;e=e.$parent}while(e);h.currentScope= -null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=db([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope= -null;return e}};var v=new m,w=v.$$asyncQueue=[],x=v.$$postDigestQueue=[],y=v.$$applyAsyncQueue=[],J=0;return v}]}function Qe(){var a=/^\s*(https?|s?ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return w(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f=ga(d&&d.trim()).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function Xg(a){if("self"=== -a)return a;if(C(a)){if(-1<a.indexOf("***"))throw Ea("iwcard",a);a=Od(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if(ab(a))return new RegExp("^"+a.source+"$");throw Ea("imatcher");}function Pd(a){var b=[];w(a)&&r(a,function(a){b.push(Xg(a))});return b}function eg(){this.SCE_CONTEXTS=W;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=Pd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=Pd(a));return b}; -this.$get=["$injector","$$sanitizeUri",function(d,c){function e(a,b){var c;"self"===a?(c=Cc(b,Qd))||(z.document.baseURI?c=z.document.baseURI:(Na||(Na=z.document.createElement("a"),Na.href=".",Na=Na.cloneNode(!1)),c=Na.href),c=Cc(b,c)):c=!!a.exec(b.href);return c}function f(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()}; +"[object File]"!==la.call(a)&&"[object Blob]"!==la.call(a)&&"[object FormData]"!==la.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ja(xc),put:ja(xc),patch:ja(xc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=this.interceptors=[],c=this.xsrfTrustedOrigins=[];Object.defineProperty(this,"xsrfWhitelistedOrigins", +{get:function(){return this.xsrfTrustedOrigins},set:function(a){this.xsrfTrustedOrigins=a}});this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(e,f,g,k,h,l,m,p){function n(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f,g)}b.length=0;return a}function d(a,b){var c,e={};r(a,function(a,d){B(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}function f(a){var b=S({},a);b.data=Bd(a.data,a.headers,a.status,g.transformResponse); +a=a.status;return 200<=a&&300>a?b:l.reject(b)}if(!D(b))throw F("$http")("badreq",b);if(!C(p.valueOf(b.url)))throw F("$http")("badreq",b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam},b);g.headers=function(b){var c=a.headers,e=S({},b.headers),f,g,h,c=S({},c.common,c[K(b.method)]);a:for(f in c){g=K(f);for(h in e)if(K(h)===g)continue a;e[f]=c[f]}return d(e,ja(b))}(b);g.method= +vb(g.method);g.paramSerializer=C(g.paramSerializer)?m.get(g.paramSerializer):g.paramSerializer;e.$$incOutstandingRequestCount("$http");var h=[],k=[];b=l.resolve(g);r(v,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&k.push(a.response,a.responseError)});b=c(b,h);b=b.then(function(b){var c=b.headers,d=Bd(b.data,Ad(c),void 0,b.transformRequest);A(d)&&r(c,function(a,b){"content-type"===K(b)&&delete c[b]});A(b.withCredentials)&&!A(a.withCredentials)&& +(b.withCredentials=a.withCredentials);return s(b,d).then(f,f)});b=c(b,k);return b=b.finally(function(){e.$$completeOutstandingRequest(E,"$http")})}function s(c,d){function e(a){if(a){var c={};r(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function k(a,c,d,e,f){function g(){m(c,a,d,e,f)}R&&(200<=a&&300>a?R.put(O,[a,c,zd(d),e,f]):R.remove(O));b?h.$applyAsync(g):(g(),h.$$phase||h.$apply())}function m(a,b,d,e,f){b=-1<=b?b:0;(200<=b&&300> +b?L.resolve:L.reject)({data:a,status:b,headers:Ad(d),config:c,statusText:e,xhrStatus:f})}function s(a){m(a.data,a.status,ja(a.headers()),a.statusText,a.xhrStatus)}function v(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var L=l.defer(),u=L.promise,R,q,ma=c.headers,x="jsonp"===K(c.method),O=c.url;x?O=p.getTrustedResourceUrl(O):C(O)||(O=p.valueOf(O));O=G(O,c.paramSerializer(c.params));x&&(O=t(O,c.jsonpCallbackParam));n.pendingRequests.push(c);u.then(v,v);!c.cache&&!a.cache|| +!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(R=D(c.cache)?c.cache:D(a.cache)?a.cache:N);R&&(q=R.get(O),w(q)?q&&B(q.then)?q.then(s,s):H(q)?m(q[1],q[0],ja(q[2]),q[3],q[4]):m(q,200,{},"OK","complete"):R.put(O,u));A(q)&&((q=kc(c.url)?g()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(ma[c.xsrfHeaderName||a.xsrfHeaderName]=q),f(c.method,O,d,k,ma,c.timeout,c.withCredentials,c.responseType,e(c.eventHandlers),e(c.uploadEventHandlers)));return u}function G(a,b){0<b.length&&(a+=(-1===a.indexOf("?")? +"?":"&")+b);return a}function t(a,b){var c=a.split("?");if(2<c.length)throw Lb("badjsonp",a);c=hc(c[1]);r(c,function(c,d){if("JSON_CALLBACK"===c)throw Lb("badjsonp",a);if(d===b)throw Lb("badjsonp",b,a);});return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var N=k("$http");a.paramSerializer=C(a.paramSerializer)?m.get(a.paramSerializer):a.paramSerializer;var v=[];r(d,function(a){v.unshift(C(a)?m.get(a):m.invoke(a))});var kc=Og(c);n.pendingRequests=[];(function(a){r(arguments,function(a){n[a]= +function(b,c){return n(S({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){n[a]=function(b,c,d){return n(S({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function Wf(){this.$get=function(){return function(){return new z.XMLHttpRequest}}}function Vf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return Pg(a,c,a.defer,b,d[0])}]}function Pg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK", +b);var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m);f.removeEventListener("error",m);e.body.removeChild(f);f=null;var g=-1,s="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),s=a.type,g="error"===a.type?404:200);d&&d(g,s)};f.addEventListener("load",m);f.addEventListener("error",m);e.body.appendChild(f);return m}return function(e,k,h,l,m,p,n,s,G,t){function N(a){J="timeout"===a;pa&&pa();y&&y.abort()}function v(a, +b,c,e,f,g){w(P)&&d.cancel(P);pa=y=null;a(b,c,e,f,g)}k=k||a.url();if("jsonp"===K(e))var q=c.createCallback(k),pa=f(k,q,function(a,b){var d=200===a&&c.getResponse(q);v(l,a,d,"",b,"complete");c.removeCallback(q)});else{var y=b(e,k),J=!1;y.open(e,k,!0);r(m,function(a,b){w(a)&&y.setRequestHeader(b,a)});y.onload=function(){var a=y.statusText||"",b="response"in y?y.response:y.responseText,c=1223===y.status?204:y.status;0===c&&(c=b?200:"file"===ga(k).protocol?404:0);v(l,c,b,y.getAllResponseHeaders(),a,"complete")}; +y.onerror=function(){v(l,-1,null,null,"","error")};y.ontimeout=function(){v(l,-1,null,null,"","timeout")};y.onabort=function(){v(l,-1,null,null,"",J?"timeout":"abort")};r(G,function(a,b){y.addEventListener(b,a)});r(t,function(a,b){y.upload.addEventListener(b,a)});n&&(y.withCredentials=!0);if(s)try{y.responseType=s}catch(I){if("json"!==s)throw I;}y.send(A(h)?null:h)}if(0<p)var P=d(function(){N("timeout")},p);else p&&B(p.then)&&p.then(function(){N(w(p.$$timeoutId)?"timeout":"abort")})}}function Pf(){var a= +"{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(p,a).replace(n,b)}function k(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function h(f,h,n,p){function v(a){try{return a=n&&!r?e.getTrusted(n,a):e.valueOf(a),p&&!w(a)?a:jc(a)}catch(b){c(Ma.interr(f,b))}}var r=n===e.URL||n===e.MEDIA_URL;if(!f.length|| +-1===f.indexOf(a)){if(h)return;h=g(f);r&&(h=e.getTrusted(n,h));h=ia(h);h.exp=f;h.expressions=[];h.$$watchDelegate=k;return h}p=!!p;for(var q,y,J=0,I=[],P,Q=f.length,M=[],L=[],u;J<Q;)if(-1!==(q=f.indexOf(a,J))&&-1!==(y=f.indexOf(b,q+l)))J!==q&&M.push(g(f.substring(J,q))),J=f.substring(q+l,y),I.push(J),J=y+m,L.push(M.length),M.push("");else{J!==Q&&M.push(g(f.substring(J)));break}u=1===M.length&&1===L.length;var R=r&&u?void 0:v;P=I.map(function(a){return d(a,R)});if(!h||I.length){var x=function(a){for(var b= +0,c=I.length;b<c;b++){if(p&&A(a[b]))return;M[L[b]]=a[b]}if(r)return e.getTrusted(n,u?M[0]:M.join(""));n&&1<M.length&&Ma.throwNoconcat(f);return M.join("")};return S(function(a){var b=0,d=I.length,e=Array(d);try{for(;b<d;b++)e[b]=P[b](a);return x(e)}catch(g){c(Ma.interr(f,g))}},{exp:f,expressions:I,$$watchDelegate:function(a,b){var c;return a.$watchGroup(P,function(d,e){var f=x(d);b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,p=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g, +f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function Qf(){this.$get=["$$intervalFactory","$window",function(a,b){var d={},c=function(a){b.clearInterval(a);delete d[a]},e=a(function(a,c,e){a=b.setInterval(a,c);d[a]=e;return a},c);e.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$intervalId"))throw Qg("badprom");if(!d.hasOwnProperty(a.$$intervalId))return!1;a=a.$$intervalId;var b=d[a],e=b.promise;e.$$state&&(e.$$state.pur=!0);b.reject("canceled"); +c(a);return!0};return e}]}function Rf(){this.$get=["$browser","$q","$$q","$rootScope",function(a,b,d,c){return function(e,f){return function(g,k,h,l){function m(){p?g.apply(null,n):g(s)}var p=4<arguments.length,n=p?Ha.call(arguments,4):[],s=0,G=w(l)&&!l,t=(G?d:b).defer(),r=t.promise;h=w(h)?h:0;r.$$intervalId=e(function(){G?a.defer(m):c.$evalAsync(m);t.notify(s++);0<h&&s>=h&&(t.resolve(s),f(r.$$intervalId));G||c.$apply()},k,t,G);return r}}}]}function Cd(a,b){var d=ga(a);b.$$protocol=d.protocol;b.$$host= +d.hostname;b.$$port=fa(d.port)||Rg[d.protocol]||null}function Dd(a,b,d){if(Sg.test(a))throw kb("badpath",a);var c="/"!==a.charAt(0);c&&(a="/"+a);a=ga(a);for(var c=(c&&"/"===a.pathname.charAt(0)?a.pathname.substring(1):a.pathname).split("/"),e=c.length;e--;)c[e]=decodeURIComponent(c[e]),d&&(c[e]=c[e].replace(/\//g,"%2F"));d=c.join("/");b.$$path=d;b.$$search=hc(a.search);b.$$hash=decodeURIComponent(a.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function yc(a,b){return a.slice(0, +b.length)===b}function ya(a,b){if(yc(b,a))return b.substr(a.length)}function Da(a){var b=a.indexOf("#");return-1===b?a:a.substr(0,b)}function zc(a,b,d){this.$$html5=!0;d=d||"";Cd(a,this);this.$$parse=function(a){var d=ya(b,a);if(!C(d))throw kb("ipthprfx",a,b);Dd(d,this,!0);this.$$path||(this.$$path="/");this.$$compose()};this.$$normalizeUrl=function(a){return b+a.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;w(f=ya(a,c))?(g=f,g=d&&w(f=ya(d,f))? +b+(ya("/",f)||f):a+g):w(f=ya(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function Ac(a,b,d){Cd(a,this);this.$$parse=function(c){var e=ya(a,c)||ya(b,c),f;A(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",A(e)&&(a=c,this.replace())):(f=ya(d,e),A(f)&&(f=e));Dd(f,this,!1);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;yc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$normalizeUrl=function(b){return a+(b?d+b:"")};this.$$parseLinkUrl=function(b, +d){return Da(a)===Da(b)?(this.$$parse(b),!0):!1}}function Ed(a,b,d){this.$$html5=!0;Ac.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===Da(c)?f=c:(g=ya(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$normalizeUrl=function(b){return a+d+b}}function Mb(a){return function(){return this[a]}}function Fd(a,b){return function(d){if(A(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Yf(){var a="!", +b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a};this.html5Mode=function(a){if(Ga(a))return b.enabled=a,this;if(D(a)){Ga(a.enabled)&&(b.enabled=a.enabled);Ga(a.requireBase)&&(b.requireBase=a.requireBase);if(Ga(a.rewriteLinks)||C(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function k(a,b){return a===b||ga(a).href===ga(b).href}function h(a, +b,d){var e=m.url(),f=m.$$state;try{c.url(a,b,d),m.$$state=c.state()}catch(g){throw m.url(e),m.$$state=f,g;}}function l(a,b){d.$broadcast("$locationChangeSuccess",m.absUrl(),a,m.$$state,b)}var m,p;p=c.baseHref();var n=c.url(),s;if(b.enabled){if(!p&&b.requireBase)throw kb("nobase");s=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(p||"/");p=e.history?zc:Ed}else s=Da(n),p=Ac;var r=s.substr(0,Da(s).lastIndexOf("/")+1);m=new p(s,r,"#"+a);m.$$parseLinkUrl(n,n);m.$$state=c.state();var t=/^\s*(javascript|mailto):/i; +f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var g=x(a.target);"a"!==ua(g[0]);)if(g[0]===f[0]||!(g=g.parent())[0])return;if(!C(e)||!A(g.attr(e))){var e=g.prop("href"),h=g.attr("href")||g.attr("xlink:href");D(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ga(e.animVal).href);t.test(e)||!e||g.attr("target")||a.isDefaultPrevented()||!m.$$parseLinkUrl(e,h)||(a.preventDefault(),m.absUrl()!==c.url()&&d.$apply())}}});m.absUrl()!== +n&&c.url(m.absUrl(),!0);var N=!0;c.onUrlChange(function(a,b){yc(a,r)?(d.$evalAsync(function(){var c=m.absUrl(),e=m.$$state,f;m.$$parse(a);m.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;m.absUrl()===a&&(f?(m.$$parse(c),m.$$state=e,h(c,!1,e)):(N=!1,l(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(N||m.$$urlUpdatedByLocation){m.$$urlUpdatedByLocation=!1;var a=c.url(),b=m.absUrl(),f=c.state(),g=m.$$replace,n=!k(a,b)||m.$$html5&&e.history&&f!== +m.$$state;if(N||n)N=!1,d.$evalAsync(function(){var b=m.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,m.$$state,f).defaultPrevented;m.absUrl()===b&&(c?(m.$$parse(a),m.$$state=f):(n&&h(b,g,f===m.$$state?null:m.$$state),l(a,f)))})}m.$$replace=!1});return m}]}function Zf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){dc(a)&&(a.stack&&f?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&& +(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||E;return function(){var a=[];r(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e,b,a)}}var f=wa||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Tg(a){return a+""}function Ug(a,b){return"undefined"!==typeof a?a: +b}function Gd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Vg(a,b){switch(a.type){case q.MemberExpression:if(a.computed)return!1;break;case q.UnaryExpression:return 1;case q.BinaryExpression:return"+"!==a.operator?1:!1;case q.CallExpression:return!1}return void 0===b?Hd:b}function Z(a,b,d){var c,e,f=a.isPure=Vg(a,d);switch(a.type){case q.Program:c=!0;r(a.body,function(a){Z(a.expression,b,f);c=c&&a.expression.constant});a.constant=c;break;case q.Literal:a.constant=!0;a.toWatch= +[];break;case q.UnaryExpression:Z(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case q.BinaryExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case q.LogicalExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case q.ConditionalExpression:Z(a.test,b,f);Z(a.alternate,b,f);Z(a.consequent,b,f);a.constant=a.test.constant&& +a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case q.Identifier:a.constant=!1;a.toWatch=[a];break;case q.MemberExpression:Z(a.object,b,f);a.computed&&Z(a.property,b,f);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=a.constant?[]:[a];break;case q.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];r(a.arguments,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case q.AssignmentExpression:Z(a.left, +b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case q.ArrayExpression:c=!0;e=[];r(a.elements,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=e;break;case q.ObjectExpression:c=!0;e=[];r(a.properties,function(a){Z(a.value,b,f);c=c&&a.value.constant;e.push.apply(e,a.value.toWatch);a.computed&&(Z(a.key,b,!1),c=c&&a.key.constant,e.push.apply(e,a.key.toWatch))});a.constant=c;a.toWatch=e;break;case q.ThisExpression:a.constant= +!1;a.toWatch=[];break;case q.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Id(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Jd(a){return a.type===q.Identifier||a.type===q.MemberExpression}function Kd(a){if(1===a.body.length&&Jd(a.body[0].expression))return{type:q.AssignmentExpression,left:a.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function Ld(a){this.$filter=a}function Md(a){this.$filter=a}function Nb(a,b,d){this.ast= +new q(a,d);this.astCompiler=d.csp?new Md(b):new Ld(b)}function Bc(a){return B(a.valueOf)?a.valueOf():Wg.call(a)}function $f(){var a=T(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral=function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(b,c){var d,f;switch(typeof b){case "string":return f=b=b.trim(),d=a[f],d||(d=new Ob(G),d=(new Nb(d,e,G)).parse(b),a[f]=p(d)),s(d,c);case "function":return s(b,c);default:return s(E, +c)}}function g(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=Bc(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function k(a,b,c,d,e){var f=d.inputs,h;if(1===f.length){var k=g,f=f[0];return a.$watch(function(a){var b=f(a);g(b,k,f.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&Bc(b));return h},b,c,e)}for(var l=[],m=[],n=0,p=f.length;n<p;n++)l[n]=g,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var k=f[c](a);if(b||(b=!g(k,l[c],f[c].isPure)))m[c]=k,l[c]=k&&Bc(k)}b&& +(h=d(a,void 0,void 0,m));return h},b,c,e)}function h(a,b,c,d,e){function f(){h(m)&&k()}function g(a,b,c,d){m=u&&d?d[0]:n(a,b,c,d);h(m)&&a.$$postDigest(f);return s(m)}var h=d.literal?l:w,k,m,n=d.$$intercepted||d,s=d.$$interceptor||Ta,u=d.inputs&&!n.inputs;g.literal=d.literal;g.constant=d.constant;g.inputs=d.inputs;p(g);return k=a.$watch(g,b,c,e)}function l(a){var b=!0;r(a,function(a){w(a)||(b=!1)});return b}function m(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function p(a){a.constant? +a.$$watchDelegate=m:a.oneTime?a.$$watchDelegate=h:a.inputs&&(a.$$watchDelegate=k);return a}function n(a,b){function c(d){return b(a(d))}c.$stateful=a.$stateful||b.$stateful;c.$$pure=a.$$pure&&b.$$pure;return c}function s(a,b){if(!b)return a;a.$$interceptor&&(b=n(a.$$interceptor,b),a=a.$$intercepted);var c=!1,d=function(d,e,f,g){d=c&&g?g[0]:a(d,e,f,g);return b(d)};d.$$intercepted=a;d.$$interceptor=b;d.literal=a.literal;d.oneTime=a.oneTime;d.constant=a.constant;b.$stateful||(c=!a.inputs,d.inputs=a.inputs? +a.inputs:[a],b.$$pure||(d.inputs=d.inputs.map(function(a){return a.isPure===Hd?function(b){return a(b)}:a})));return p(d)}var G={csp:Ba().noUnsafeEval,literals:Ia(b),isIdentifierStart:B(d)&&d,isIdentifierContinue:B(c)&&c};f.$$getAst=function(a){var b=new Ob(G);return(new Nb(b,e,G)).getAst(a).ast};return f}]}function bg(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Nd(function(a){b.$evalAsync(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this): +a}}function cg(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Nd(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return w(b)?(a=b,this):a}}function Nd(a,b,d){function c(){return new e}function e(){var a=this.promise=new f;this.resolve=function(b){h(a,b)};this.reject=function(b){m(a,b)};this.notify=function(b){n(a,b)}}function f(){this.$$state={status:0}}function g(){for(;!w&&x.length;){var a=x.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+ +("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):A(c)?"undefined":"string"!==typeof c?Ne(c,void 0):c);dc(a.value)?b(a.value,c):b(c)}}}function k(c){!d||c.pending||2!==c.status||c.pur||(0===w&&0===x.length&&a(g),x.push(c));!c.processScheduled&&c.pending&&(c.processScheduled=!0,++w,a(function(){var e,f,k;k=c.pending;c.processScheduled=!1;c.pending=void 0;try{for(var l=0,n=k.length;l<n;++l){c.pur=!0;f=k[l][0];e=k[l][c.status];try{B(e)?h(f,e(c.value)):1===c.status?h(f,c.value):m(f,c.value)}catch(p){m(f, +p),p&&!0===p.$$passToExceptionHandler&&b(p)}}}finally{--w,d&&0===w&&a(g)}}))}function h(a,b){a.$$state.status||(b===a?p(a,v("qcycle",b)):l(a,b))}function l(a,b){function c(b){g||(g=!0,l(a,b))}function d(b){g||(g=!0,p(a,b))}function e(b){n(a,b)}var f,g=!1;try{if(D(b)||B(b))f=b.then;B(f)?(a.$$state.status=-1,f.call(b,c,d,e)):(a.$$state.value=b,a.$$state.status=1,k(a.$$state))}catch(h){d(h)}}function m(a,b){a.$$state.status||p(a,b)}function p(a,b){a.$$state.value=b;a.$$state.status=2;k(a.$$state)}function n(c, +d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,f=0,g=e.length;f<g;f++){c=e[f][0];a=e[f][3];try{n(c,B(a)?a(d):d)}catch(h){b(h)}}})}function s(a){var b=new f;m(b,a);return b}function G(a,b,c){var d=null;try{B(c)&&(d=c())}catch(e){return s(e)}return d&&B(d.then)?d.then(function(){return b(a)},s):b(a)}function t(a,b,c,d){var e=new f;h(e,a);return e.then(b,c,d)}function q(a){if(!B(a))throw v("norslvr",a);var b=new f;a(function(a){h(b,a)},function(a){m(b,a)});return b} +var v=F("$q",TypeError),w=0,x=[];S(f.prototype,{then:function(a,b,c){if(A(a)&&A(b)&&A(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&k(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return G(b,y,a)},function(b){return G(b,s,a)},b)}});var y=t;q.prototype=f.prototype;q.defer=c;q.reject=s;q.when=t;q.resolve=y;q.all=function(a){var b=new f,c= +0,d=H(a)?[]:{};r(a,function(a,e){c++;t(a).then(function(a){d[e]=a;--c||h(b,d)},function(a){m(b,a)})});0===c&&h(b,d);return b};q.race=function(a){var b=c();r(a,function(a){t(a).then(b.resolve,b.reject)});return b.promise};return q}function mg(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}: +function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function ag(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++qb;this.$$ChildScope=null;this.$$suspended=!1}b.prototype=a;return b}var b=10,d=F("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser", +function(f,g,k){function h(a){a.currentScope.$$destroyed=!0}function l(a){9===wa&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++qb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$suspended=this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount= +0;this.$$isolateBindings=null}function p(a){if(v.$$phase)throw d("inprog",v.$$phase);v.$$phase=a}function n(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function s(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function G(){}function t(){for(;y.length;)try{y.shift()()}catch(a){f(a)}e=null}function q(){null===e&&(e=k.defer(function(){v.$apply(t)},null,"$applyAsync"))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m, +d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!==this)&&d.$on("$destroy",h);return d},$watch:function(a,b,d,e){var f=g(a);b=B(b)?b:E;if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l={fn:b,last:G,get:f,exp:e||a,eq:!!d};c=null;k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l); +k.$$digestWatchIndex++;n(this,1);return function(){var a=cb(k,l);0<=a&&(n(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;try{k?(k=!1,b(e,e,g)):b(e,d,g)}finally{for(var f=0;f<a.length;f++)d[f]=e[f]}}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a, +b){var d=g.$watch(a,function(a){e[b]=a;h||(h=!0,g.$evalAsync(c))});f.push(d)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!A(e)){if(D(e))if(za(e))for(f!==n&&(f=n,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==p&&(f=p={},t=0,l++);a=0;for(b in e)ta.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++, +f)ta.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$$pure=g(a).literal;c.$stateful=!c.$$pure;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],p={},s=!0,t=0;return this.$watch(m,function(){s?(s=!1,b(e,e,d)):b(e,h,d);if(k)if(D(e))if(za(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ta.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,h,l,m,n,s,r=b,q,y=w.length?v:this,N=[],A,z;p("$digest");k.$$checkUrlChange();this===v&&null!==e&&(k.defer.cancel(e), +t());c=null;do{s=!1;q=y;for(n=0;n<w.length;n++){try{z=w[n],l=z.fn,l(z.scope,z.locals)}catch(C){f(C)}c=null}w.length=0;a:do{if(n=!q.$$suspended&&q.$$watchers)for(n.$$digestWatchIndex=n.length;n.$$digestWatchIndex--;)try{if(a=n[n.$$digestWatchIndex])if(m=a.get,(g=m(q))!==(h=a.last)&&!(a.eq?va(g,h):Y(g)&&Y(h)))s=!0,c=a,a.last=a.eq?Ia(g,null):g,l=a.fn,l(g,h===G?g:h,q),5>r&&(A=4-r,N[A]||(N[A]=[]),N[A].push({msg:B(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:h}));else if(a===c){s= +!1;break a}}catch(E){f(E)}if(!(n=!q.$$suspended&&q.$$watchersCount&&q.$$childHead||q!==y&&q.$$nextSibling))for(;q!==y&&!(n=q.$$nextSibling);)q=q.$parent}while(q=n);if((s||w.length)&&!r--)throw v.$$phase=null,d("infdig",b,N);}while(s||w.length);for(v.$$phase=null;J<x.length;)try{x[J++]()}catch(D){f(D)}x.length=J=0;k.$$checkUrlChange()},$suspend:function(){this.$$suspended=!0},$isSuspended:function(){return this.$$suspended},$resume:function(){this.$$suspended=!1},$destroy:function(){if(!this.$$destroyed){var a= +this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===v&&k.$$applicationDestroyed();n(this,-this.$$watchersCount);for(var b in this.$$listenerCount)s(this,this.$$listenerCount[b],b);a&&a.$$childHead===this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail===this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply= +this.$evalAsync=this.$applyAsync=E;this.$on=this.$watch=this.$watchGroup=function(){return E};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){v.$$phase||w.length||k.defer(function(){w.length&&v.$digest()},null,"$evalAsync");w.push({scope:this,fn:g(a),locals:b})},$$postDigest:function(a){x.push(a)},$apply:function(a){try{p("$apply");try{return this.$eval(a)}finally{v.$$phase=null}}catch(b){f(b)}finally{try{v.$digest()}catch(c){throw f(c), +c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&y.push(b);a=g(a);q()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(delete c[d],s(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented= +!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,m--;if(g)break;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=db([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]|| +[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var v=new m,w=v.$$asyncQueue=[],x=v.$$postDigestQueue=[],y=v.$$applyAsyncQueue=[],J=0;return v}]}function Qe(){var a=/^\s*(https?|s?ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationTrustedUrlList=function(b){return w(b)? +(a=b,this):a};this.imgSrcSanitizationTrustedUrlList=function(a){return w(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f=ga(d&&d.trim()).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function Xg(a){if("self"===a)return a;if(C(a)){if(-1<a.indexOf("***"))throw Ea("iwcard",a);a=Od(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if(ab(a))return new RegExp("^"+a.source+"$");throw Ea("imatcher");}function Pd(a){var b=[];w(a)&&r(a,function(a){b.push(Xg(a))}); +return b}function eg(){this.SCE_CONTEXTS=W;var a=["self"],b=[];this.trustedResourceUrlList=function(b){arguments.length&&(a=Pd(b));return a};Object.defineProperty(this,"resourceUrlWhitelist",{get:function(){return this.trustedResourceUrlList},set:function(a){this.trustedResourceUrlList=a}});this.bannedResourceUrlList=function(a){arguments.length&&(b=Pd(a));return b};Object.defineProperty(this,"resourceUrlBlacklist",{get:function(){return this.bannedResourceUrlList},set:function(a){this.bannedResourceUrlList= +a}});this.$get=["$injector","$$sanitizeUri",function(d,c){function e(a,b){var c;"self"===a?(c=Cc(b,Qd))||(z.document.baseURI?c=z.document.baseURI:(Na||(Na=z.document.createElement("a"),Na.href=".",Na=Na.cloneNode(!1)),c=Na.href),c=Cc(b,c)):c=!!a.exec(b.href);return c}function f(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()}; return b}var g=function(a){throw Ea("unsafe");};d.has("$sanitize")&&(g=d.get("$sanitize"));var k=f(),h={};h[W.HTML]=f(k);h[W.CSS]=f(k);h[W.MEDIA_URL]=f(k);h[W.URL]=f(h[W.MEDIA_URL]);h[W.JS]=f(k);h[W.RESOURCE_URL]=f(h[W.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ea("icontext",a,b);if(null===b||A(b)||""===b)return b;if("string"!==typeof b)throw Ea("itype",a);return new c(b)},getTrusted:function(d,f){if(null===f||A(f)||""===f)return f;var k=h.hasOwnProperty(d)? h[d]:null;if(k&&f instanceof k)return f.$$unwrapTrustedValue();B(f.$$unwrapTrustedValue)&&(f=f.$$unwrapTrustedValue());if(d===W.MEDIA_URL||d===W.URL)return c(f.toString(),d===W.MEDIA_URL);if(d===W.RESOURCE_URL){var k=ga(f.toString()),n,s,r=!1;n=0;for(s=a.length;n<s;n++)if(e(a[n],k)){r=!0;break}if(r)for(n=0,s=b.length;n<s;n++)if(e(b[n],k)){r=!1;break}if(r)return f;throw Ea("insecurl",f.toString());}if(d===W.HTML)return g(f);throw Ea("unsafe");},valueOf:function(a){return a instanceof k?a.$$unwrapTrustedValue(): a}}}]}function dg(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>wa)throw Ea("iequirks");var c=ja(W);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ta);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;r(W, @@ -202,7 +204,7 @@ function Oa(a,b){a.prop("selected",b);a.attr("selected",b)}function je(a,b,d){if oa=F("ng"),ca=z.angular||(z.angular={}),lc,qb=0;wa=z.document.documentMode;var Y=Number.isNaN||function(a){return a!==a};E.$inject=[];Ta.$inject=[];var ze=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,V=function(a){return C(a)?a.trim():a},Od=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Ba=function(){if(!w(Ba.rules)){var a=z.document.querySelector("[ng-csp]")||z.document.querySelector("[data-ng-csp]");if(a){var b= a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ba.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ba;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ba.rules},rb=function(){if(w(rb.name_))return rb.name_;var a,b,d=Qa.length,c,e;for(b=0;b<d;++b)if(c=Qa[b],a=z.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return rb.name_=e},Be=/:/g,Qa=["ng-", "data-ng-","ng:","x-ng-"],Fe=function(a){var b=a.currentScript;if(!b)return!0;if(!(b instanceof z.HTMLScriptElement||b instanceof z.SVGScriptElement))return!1;b=b.attributes;return[b.getNamedItem("src"),b.getNamedItem("href"),b.getNamedItem("xlink:href")].every(function(b){if(!b)return!0;if(!b.value)return!1;var c=a.createElement("a");c.href=b.value;if(a.location.origin===c.origin)return!0;switch(c.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;default:return!1}})}(z.document), -Ie=/[A-Z]/g,Yc=!1,Pa=3,Pe={full:"1.8.0",major:1,minor:8,dot:0,codeName:"nested-vaccination"};U.expando="ng339";var Ka=U.cache={},ug=1;U._data=function(a){return this.cache[a[this.expando]]||{}};var qg=/-([a-z])/g,qh=/^-ms-/,Bb={mouseleave:"mouseout",mouseenter:"mouseover"},oc=F("jqLite"),tg=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,nc=/<|&#?\w+;/,rg=/<([\w:-]+)/,sg=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,qa={thead:["table"],col:["colgroup","table"],tr:["tbody","table"],td:["tr", +Ie=/[A-Z]/g,Yc=!1,Pa=3,Pe={full:"1.8.2",major:1,minor:8,dot:2,codeName:"meteoric-mining"};U.expando="ng339";var Ka=U.cache={},ug=1;U._data=function(a){return this.cache[a[this.expando]]||{}};var qg=/-([a-z])/g,qh=/^-ms-/,Bb={mouseleave:"mouseout",mouseenter:"mouseover"},oc=F("jqLite"),tg=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,nc=/<|&#?\w+;/,rg=/<([\w:-]+)/,sg=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,qa={thead:["table"],col:["colgroup","table"],tr:["tbody","table"],td:["tr", "tbody","table"]};qa.tbody=qa.tfoot=qa.colgroup=qa.caption=qa.thead;qa.th=qa.td;var hb={option:[1,'<select multiple="multiple">',"</select>"],_default:[0,"",""]},Nc;for(Nc in qa){var le=qa[Nc],me=le.slice().reverse();hb[Nc]=[me.length,"<"+me.join("><")+">","</"+le.join("></")+">"]}hb.optgroup=hb.option;var zg=z.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Wa=U.prototype={ready:hd,toString:function(){var a=[];r(this,function(b){a.push(""+b)});return"["+a.join(", ")+ "]"},eq:function(a){return 0<=a?x(this[a]):x(this[this.length+a])},length:0,push:ph,sort:[].sort,splice:[].splice},Hb={};r("multiple selected checked disabled readOnly required open".split(" "),function(a){Hb[K(a)]=a});var od={};r("input select option textarea button form details".split(" "),function(a){od[a]=!0});var vd={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};r({data:sc,removeData:rc,hasData:function(a){for(var b in Ka[a.ng339])return!0; return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)rc(a[b]),kd(a[b])}},function(a,b){U[b]=a});r({data:sc,inheritedData:Fb,scope:function(a){return x.data(a,"$scope")||Fb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return x.data(a,"$isolateScope")||x.data(a,"$isolateScopeNoTemplate")},controller:ld,injector:function(a){return Fb(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Cb,css:function(a,b,d){b=yb(b.replace(qh,"ms-"));if(w(d))a.style[b]= diff --git a/civicrm/bower_components/angular/angular.min.js.map b/civicrm/bower_components/angular/angular.min.js.map index 8ca7b87423..85822a0708 100644 --- a/civicrm/bower_components/angular/angular.min.js.map +++ b/civicrm/bower_components/angular/angular.min.js.map @@ -1,8 +1,8 @@ { "version":3, "file":"angular.min.js", -"lineCount":349, -"mappings":"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", +"lineCount":351, +"mappings":"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", "sources":["angular.js"], -"names":["window","errorHandlingConfig","config","isObject","isDefined","objectMaxDepth","minErrConfig","isValidObjectMaxDepth","NaN","urlErrorParamsEnabled","isBoolean","maxDepth","isNumber","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","valueRef","hasCustomToString","toString","isUndefined","getPrototypeOf","arr","Array","isError","tag","Error","isScope","$evalAsync","$watch","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","undefined","constructor","buffer","byteOffset","copied","ArrayBuffer","byteLength","set","Uint8Array","re","match","lastIndex","type","simpleCompare","a","b","equals","o1","o2","t1","t2","getTime","keySet","createMap","charAt","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","document","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNumberNaN","addDateMinutes","date","minutes","setMinutes","getMinutes","convertTimezoneToLocal","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","startingTag","empty","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","e","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","prefix","name","hasAttribute","candidate","querySelector","isAutoBootstrapAllowed","strictDi","console","error","modules","defaultConfig","doBootstrap","injector","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","JQLite","cleanData","jqLite.cleanData","elems","events","elem","_data","$destroy","triggerHandler","UNSAFE_restoreLegacyJqLiteXHTMLReplacement","legacyXHTMLReplacement","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","info","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","component","run","block","shallowCopy","serializeObject","seen","publishExternalAPI","version","$$counter","csp","uppercase","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRef","ngRefDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","hiddenInputBrowserCacheDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$$isDocumentHidden","$$IsDocumentHiddenProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$$intervalFactory","$$IntervalFactoryProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$$taskTrackerFactory","$$TaskTrackerFactoryProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$Map","$$MapProvider","$$cookieReader","$$CookieReaderProvider","angularVersion","fnCamelCaseReplace","all","toUpperCase","kebabToCamel","DASH_LOWERCASE_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","finalHtml","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","XHTML_TAG_REGEXP","msie","wrap","wrapMapIE9","_default","innerHTML","firstChild","wrapMap","childNodes","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteReady","jqLiteClone","jqLiteDealoc","onlyDescendants","querySelectorAll","isEmptyObject","removeIfEmptyData","expandoId","ng339","expandoStore","jqCache","jqLiteOff","unsupported","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","jqLiteRemoveData","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","existingClasses","newClasses","cssClass","jqLiteAddClass","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","trigger","addEventListener","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","NgMapShim","_keys","_values","_lastKey","_lastIndex","extractArgs","fnText","Function","prototype","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","args","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","injectionArgs","locals","$inject","$$annotate","func","$$ngIsClass","Type","ctor","annotate","has","NgMap","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","protoInstanceInjector","loadNewModules","instanceInjector.loadNewModules","mods","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","offset","scroll","yOffset","getComputedStyle","style","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","splitClasses","klass","prepareAnimateOptions","options","Browser","cacheStateAndFireUrlChange","pendingLocation","fireStateOrUrlChange","cacheState","cachedState","getCurrentState","lastCachedState","lastHistoryState","prevLastHistoryState","lastBrowserUrl","url","urlChangeListeners","listener","history","clearTimeout","pendingDeferIds","taskTracker","isMock","$$completeOutstandingRequest","completeTask","$$incOutstandingRequestCount","incTaskCount","notifyWhenNoOutstandingRequests","notifyWhenNoPendingTasks","href","baseElement","state","self.url","sameState","urlResolve","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","callback","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","taskType","timeoutId","DEFAULT_TASK_TYPE","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","put","lruEntry","remove","removeAll","destroy","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","restrict","this.component","registerComponent","makeInjectable","tElement","tAttrs","$element","$attrs","template","templateUrl","ddo","controllerAs","identifierForController","transclude","bindToController","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","strictComponentBindingsEnabled","this.strictComponentBindingsEnabled","TTL","onChangesTtl","this.onChangesTtl","commentDirectivesEnabledConfig","commentDirectivesEnabled","this.commentDirectivesEnabled","cssClassDirectivesEnabledConfig","cssClassDirectivesEnabled","this.cssClassDirectivesEnabled","PROP_CONTEXTS","addPropertySecurityContext","this.addPropertySecurityContext","elementName","propertyName","ctx","registerNativePropertyContexts","registerContext","values","v","SCE_CONTEXTS","HTML","CSS","URL","MEDIA_URL","RESOURCE_URL","flushOnChangesQueue","onChangesQueue","sanitizeSrcset","invokeType","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","Math","floor","innerIdx","getTrustedMediaUrl","lastTuple","Attributes","attributesToCopy","l","$attr","$$element","setSpecialAttr","specialAttrHolder","attributes","attribute","removeNamedItem","setNamedItem","safeAddClass","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","notLiveList","attrs","linkFnFound","mergeConsecutiveTextNodes","collectDirectives","applyDirectivesToNode","terminal","sibling","nodeValue","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","nName","ngPrefixMatch","nAttrs","attrStartName","attrEndName","isNgAttr","isNgProp","isNgEvent","multiElementMatch","NG_PREFIX_BINDING","PREFIX_REGEXP","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","addPropertyDirective","createEventDirective","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","groupedElementsLink","compilationGenerator","eager","compiled","lazyCompilation","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","slotTranscludeFn","scopeToChild","controllerScope","newScopeDirective","isSlotFilled","transcludeFn.isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","scopeBindingInfo","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$doCheck","$onDestroy","callOnDestroyHook","invokeLinkFn","$postLink","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","directiveValue","$$start","$$end","assertNoDuplicate","$$tlb","scanningIndex","candidateDirective","$$createComment","replaceWith","replaceDirective","slots","slotMap","filledSlots","elementSelector","contents","filled","slotCompileNodes","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","max","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","catch","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedAttrContext","attrNormalizedName","getTrustedPropContext","propNormalizedName","sanitizeSrcsetPropertyValue","propName","trustedContext","sanitizer","getTrusted","ngPropCompileFn","_","ngPropGetter","ngPropWatch","sceValueOf","ngPropPreLinkFn","applyPropValue","propValue","allOrNothing","mustHaveExpression","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","hasData","annotation","strictBindingsCheck","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","initializeBinding","lastValue","parentGet","parentSet","compare","removeWatch","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","$watchCollection","isLiteral","initialValue","parentValueWatchAction","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","compile.$$createComment","comment","createComment","previous","current","SPECIAL_CHARS_REGEXP","str1","str2","tokens1","tokens2","token","jqNodes","ident","CNTRL_REG","this.has","register","this.register","addIdentifier","identifier","expression","later","$controllerMinErr","controllerPrototype","$controllerInit","changeListener","hidden","doc","exception","cause","serializeValue","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","hasJsonContentType","APPLICATION_JSON","jsonStart","JSON_START","JSON_ENDS","$httpMinErr","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","jsonpCallbackParam","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","xsrfWhitelistedOrigins","requestConfig","chainInterceptors","promise","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","header","response","resp","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","requestInterceptors","responseInterceptors","resolve","reversedInterceptors","interceptor","request","requestError","responseError","serverRequest","reqData","withCredentials","sendReq","finally","completeOutstandingRequest","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","done","headersString","statusText","xhrStatus","resolveHttpPromise","resolvePromise","deferred","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","isJsonp","getTrustedResourceUrl","buildUrl","sanitizeJsonpCallbackParam","defaultCache","xsrfValue","urlIsAllowedOrigin","timeout","responseType","uploadEventHandlers","serializedParams","cbKey","interceptorFactory","urlIsAllowedOriginFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","$browserDefer","callbacks","rawDocument","jsonpReq","callbackPath","async","body","wasCalled","timeoutRequest","abortedByTimeout","jsonpDone","xhr","abort","completeRequest","createCallback","getResponse","removeCallback","open","setRequestHeader","onload","xhr.onload","responseText","protocol","getAllResponseHeaders","onerror","ontimeout","requestTimeout","onabort","requestAborted","upload","send","$$timeoutId","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","constantInterpolateWatch","parseStringifyInterceptor","contextAllowsConcatenation","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","singleExpression","startSymbolLength","endSymbolLength","map","compute","throwNoconcat","interpolationFn","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","intervals","clearIntervalFn","clearInterval","interval","setIntervalFn","tick","setInterval","interval.cancel","$intervalMinErr","$$intervalId","q","$$state","pur","intervalFactory","intervalFn","count","invokeApply","hasParams","iteration","skipApply","notify","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","html5Mode","DOUBLE_SLASH_REGEX","$locationMinErr","prefixed","segments","pathname","$$path","$$search","search","$$hash","startsWith","stripBaseUrl","base","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$$compose","$$normalizeUrl","this.$$normalizeUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","urlsEqual","setBrowserUrlWithFallback","oldUrl","oldState","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","$$urlUpdatedByLocation","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","formatStackTrace","sourceURL","consoleLog","logFn","log","navigator","userAgent","warn","getStringValue","ifDefined","plusFn","r","isPure","parentIsPure","AST","MemberExpression","computed","UnaryExpression","PURITY_ABSOLUTE","BinaryExpression","operator","CallExpression","PURITY_RELATIVE","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","astIsPure","Program","expr","Literal","toWatch","argument","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","object","isStatelessFilter","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","ASTCompiler","ASTInterpreter","Parser","lexer","astCompiler","getValueOf","objectValueOf","literals","identStart","identContinue","addLiteral","this.addLiteral","literalName","literalValue","setIdentifierFns","this.setIdentifierFns","identifierStart","identifierContinue","interceptorFn","parsedExpression","cacheKey","Lexer","$parseOptions","parser","addWatchDelegate","addInterceptor","expressionInputDirtyCheck","oldValueOfValue","compareObjectIdentity","inputsWatchDelegate","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","unwatchIfDone","isDone","oneTimeWatch","useInputs","isAllDefined","$$intercepted","$$interceptor","allDefined","constantWatch","oneTime","first","second","chainedInterceptor","$$pure","depurifier","s","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$getAst","getAst","errorOnUnhandledRejections","qFactory","this.errorOnUnhandledRejections","nextTick","exceptionHandler","Deferred","Promise","this.resolve","this.reject","rejectPromise","this.notify","progress","notifyPromise","processChecks","queueSize","checkQueue","toCheck","errorMessage","scheduleProcessQueue","pending","processScheduled","$$passToExceptionHandler","$$reject","$qMinErr","$$resolve","doResolve","doReject","doNotify","handleCallback","resolver","callbackOutput","when","errback","progressBack","$Q","resolveFn","TypeError","onFulfilled","onRejected","promises","counter","results","race","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$$suspended","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","$$digestWatchIndex","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","asyncQueue","watchLog","logIdx","asyncTask","asyncQueuePosition","msg","next","postDigestQueuePosition","postDigestQueue","$suspend","$isSuspended","$resume","eventName","this.$watchGroup","$eval","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isMediaUrl","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","baseURI","baseUrlParsingNode","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","UNDERSCORE_LOWERCASE_REGEXP","eventSupport","hasHistoryPushState","nw","process","chrome","app","runtime","pushState","android","boxee","bodyStyle","transitions","animations","hasEvent","divElm","TaskTracker","getLastCallback","cbInfo","taskCallbacks","pop","cb","getLastCallbackForType","taskCounts","ALL_TASKS_TYPE","countForType","countForAll","getNextCallback","nextCb","httpOptions","this.httpOptions","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","handleError","$templateRequestMinErr","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","timeout.cancel","$timeoutMinErr","urlParsingNode","ipv6InBrackets","whitelistedOriginUrls","parsedAllowedOriginUrls","originUrl","requestUrl","urlsAreSameOrigin","url1","url2","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","anyPropertyKey","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","currencySymbolRe","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isNaN","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","end","processPredicates","sortPredicates","predicate","descending","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","predicates","compareValues","getComparisonObject","tieBreaker","predicateValues","doComparison","ngDirective","FormController","$$controls","$error","$$success","$pending","$name","$dirty","$valid","$pristine","$submitted","$invalid","$$parentForm","nullFormCtrl","$$animate","setupValidity","$$classCache","INVALID_CLASS","VALID_CLASS","addSetValidityMethod","cachedToggleClass","ctrl","switchValue","toggleValidationCss","validationErrorKey","isValid","unset","clazz","$setValidity","clazz.prototype.$setValidity","isObjectEmpty","PENDING_CLASS","combinedState","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","previousDate","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","parseDateAndConvertTimeZoneToLocal","$options","getOption","previousTimezone","parsedDate","badInputChecker","isTimeType","$parsers","$$parserName","ngModelMinErr","targetFormat","formatted","ngMin","minVal","parsedMinVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","parsedMaxVal","ctrl.$validators.max","parserName","VALIDITY_STATE_PROPERTY","numberFormatterParser","NUMBER_REGEXP","parseNumberAttrVal","countDecimals","numString","decimalSymbolIndex","isValidForStep","viewValue","stepBase","step","isNonIntegerValue","isNonIntegerStepBase","isNonIntegerStep","valueDecimals","stepBaseDecimals","stepDecimals","decimalCount","multiplier","pow","parseConstantExpr","parseFn","classDirective","arrayDifference","toClassString","classValue","classString","indexWatchExpression","digestClassCounts","classArray","classesToUpdate","classCounts","ngClassIndexWatchAction","newModulo","oldClassString","oldModulo","moduloTwo","$index","ngClassWatchAction","newClassString","oldClassArray","newClassArray","toRemoveArray","toAddArray","toRemoveString","toAddString","forceAsync","ngEventHandler","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$viewChangeListeners","$untouched","$touched","defaultModelOptions","$$updateEvents","$$updateEventHandler","$$parsedNgModel","$$parsedNgModelAssign","$$ngModelGet","$$ngModelSet","$$pendingDebounce","$$parserValid","$$currentValidationRunId","$$rootScope","$$attr","$$timeout","$$exceptionHandler","setupModelWatcher","ngModelWatch","modelValue","$$setModelValue","ModelOptions","$$options","setOptionSelectedStatus","optionEl","parsePatternAttr","patternExp","parseLength","intVal","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","allowAutoBootstrap","currentScript","HTMLScriptElement","SVGScriptElement","srcs","getNamedItem","every","origin","full","major","minor","dot","codeName","expando","JQLite._data","MS_HACK_REGEXP","mouseleave","mouseenter","thead","col","tr","td","tbody","tfoot","colgroup","caption","th","wrapMapValueClosing","wrapMapValue","optgroup","Node","contains","compareDocumentPosition","ready","removeData","jqLiteHasData","jqLiteCleanData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","isBooleanAttr","ret","getText","$dv","multiple","selected","arg1","arg2","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","children","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","nanKey","_idx","_transformKey","delete","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","classNameFilter","customFilter","$$registeredAnimations","this.customFilter","filterFn","this.classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","enter","move","leave","addclass","setClass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","_state","chain","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","UNINITIALIZED_VALUE","isFirstChange","SimpleChange.prototype.isFirstChange","domNode","offsetWidth","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","callbackId","called","callbackMap","PATH_MATCH","locationPrototype","$$absUrl","hashValue","pathValue","$$url","paramValue","Location","Location.prototype.state","$parseMinErr","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","peekMultichar","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","charCodeAt","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","isNull","nonComputedMember","notNull","member","filterName","defaultValue","UNSAFE_CHARACTERS","SAFE_IDENTIFIER","stringEscapeFn","stringEscapeRegex","c","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","$addControl","$getControls","$$renameControl","nullFormRenameControl","control","$removeControl","$setDirty","$setPristine","$setSubmitted","$$setSubmitted","$rollbackViewValue","$commitViewValue","newName","oldName","PRISTINE_CLASS","DIRTY_CLASS","SUBMITTED_CLASS","$setUntouched","rootForm","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","ngStep","stepVal","parsedStepVal","ctrl.$validators.step","urlInputType","ctrl.$validators.url","emailInputType","email","ctrl.$validators.email","radioInputType","doTrim","checked","rangeInputType","setInitialValueAndObserver","htmlAttrName","changeFn","wrappedObserver","minChange","supportsRange","elVal","maxChange","stepChange","hasMinAttr","hasMaxAttr","hasStepAttr","originalRender","rangeUnderflow","rangeOverflow","rangeRender","noopMinValidator","minValidator","noopMaxValidator","maxValidator","nativeStepValidator","stepMismatch","stepValidator","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","valueProperty","configurable","enumerable","defineProperty","CONSTANT_VALUE_REGEXP","updateElementValue","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","ngBindHtmlGetter","ngBindHtmlWatch","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","$$initGetterSetters","invokeModelGetter","invokeModelSetter","this.$$ngModelGet","this.$$ngModelSet","$$$p","$$updateEmptyClasses","NOT_EMPTY_CLASS","EMPTY_CLASS","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","$$lastCommittedViewValue","prevValid","prevModelValue","allowInvalid","that","$$runValidators","allValid","$$writeModelToScope","doneCallback","processSyncValidators","syncValidatorsValid","validator","Boolean","setValidity","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","$$parseAndValidate","$$debounceViewValueCommit","debounceDelay","$overrideModelOptions","createChild","$$setUpdateOnEvents","$processModelValue","$$format","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","optionsCtrl","ngModelPostLink","setTouched","DEFAULT_REGEXP","inheritAll","updateOnDefault","updateOn","debounce","getterSetter","NgModelOptionsController","$$attrs","parentOptions","parentCtrl","modelOptionsDefinition","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","getAndUpdateSelectedOption","updateOptionElement","selectCtrl","ngModelCtrl","hasEmptyOption","emptyOption","providedEmptyOption","unknownOption","listFragment","generateUnknownOptionValue","selectCtrl.generateUnknownOptionValue","writeValue","selectCtrl.writeValue","selectedOptions","readValue","selectCtrl.readValue","selectedValues","selections","selectedOption","selectedIndex","removeUnknownOption","selectUnknownOrEmptyOption","unselectEmptyOption","selectCtrl.registerOption","optionScope","needsRerender","$isEmptyOptionSelected","updateOptions","groupElementMap","addOption","groupElement","optionElement","nextValue","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRefMinErr","refValue","ngRefRead","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","trackByIdArrayFn","trackByIdObjFn","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByIdExpFn","hashFnLocals","trackByExpGetter","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","NgSwitchController","cases","ngSwitchController","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngSwitchWhenSeparator","whenCase","ngTranscludeMinErr","ngTranscludeCompile","fallbackLinkFn","ngTranscludePostLink","useFallbackContent","ngTranscludeSlot","ngTranscludeCloneAttachFn","noopNgModelController","SelectController","scheduleRender","renderScheduled","scheduleViewValueUpdate","renderAfter","updateScheduled","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","updateUnknownOption","self.updateUnknownOption","self.generateUnknownOptionValue","self.removeUnknownOption","selectEmptyOption","self.selectEmptyOption","self.unselectEmptyOption","self.readValue","realVal","hasOption","self.writeValue","currentlySelectedOption","hashedVal","self.addOption","removeOption","self.removeOption","self.hasOption","$hasEmptyOption","self.$hasEmptyOption","$isUnknownOptionSelected","self.$isUnknownOptionSelected","self.$isEmptyOptionSelected","self.selectUnknownOrEmptyOption","self.registerOption","optionAttrs","interpolateValueFn","interpolateTextFn","valueAttributeObserveAction","removal","previouslySelected","interpolateWatchAction","removeValue","selectPreLink","shouldBeSelected","lastView","lastViewRef","selectMultipleWatch","ngModelCtrl.$isEmpty","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","tElm","tAttr","attrVal","oldRegexp","ctrl.$validators.pattern","maxlengthParsed","ctrl.$validators.maxlength","minlengthParsed","ctrl.$validators.minlength","getDecimals","opt_precision","ONE","OTHER","$$csp","head"] +"names":["window","errorHandlingConfig","config","isObject","isDefined","objectMaxDepth","minErrConfig","isValidObjectMaxDepth","NaN","urlErrorParamsEnabled","isBoolean","maxDepth","isNumber","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","valueRef","hasCustomToString","toString","isUndefined","getPrototypeOf","arr","Array","isError","tag","Error","isScope","$evalAsync","$watch","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","undefined","constructor","buffer","byteOffset","copied","ArrayBuffer","byteLength","set","Uint8Array","re","match","lastIndex","type","simpleCompare","a","b","equals","o1","o2","t1","t2","getTime","keySet","createMap","charAt","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","document","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNumberNaN","addDateMinutes","date","minutes","setMinutes","getMinutes","convertTimezoneToLocal","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","startingTag","empty","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","e","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","prefix","name","hasAttribute","candidate","querySelector","isAutoBootstrapAllowed","strictDi","console","error","modules","defaultConfig","doBootstrap","injector","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","JQLite","cleanData","jqLite.cleanData","elems","events","elem","_data","$destroy","triggerHandler","UNSAFE_restoreLegacyJqLiteXHTMLReplacement","legacyXHTMLReplacement","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","info","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","component","run","block","shallowCopy","serializeObject","seen","publishExternalAPI","version","$$counter","csp","uppercase","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRef","ngRefDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","hiddenInputBrowserCacheDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$$isDocumentHidden","$$IsDocumentHiddenProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$$intervalFactory","$$IntervalFactoryProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$$taskTrackerFactory","$$TaskTrackerFactoryProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$Map","$$MapProvider","$$cookieReader","$$CookieReaderProvider","angularVersion","fnCamelCaseReplace","all","toUpperCase","kebabToCamel","DASH_LOWERCASE_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","finalHtml","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","XHTML_TAG_REGEXP","msie","wrap","wrapMapIE9","_default","innerHTML","firstChild","wrapMap","childNodes","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteReady","jqLiteClone","jqLiteDealoc","onlyDescendants","querySelectorAll","isEmptyObject","removeIfEmptyData","expandoId","ng339","expandoStore","jqCache","jqLiteOff","unsupported","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","jqLiteRemoveData","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","existingClasses","newClasses","cssClass","jqLiteAddClass","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","trigger","addEventListener","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","NgMapShim","_keys","_values","_lastKey","_lastIndex","extractArgs","fnText","Function","prototype","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","args","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","injectionArgs","locals","$inject","$$annotate","func","$$ngIsClass","Type","ctor","annotate","has","NgMap","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","protoInstanceInjector","loadNewModules","instanceInjector.loadNewModules","mods","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","offset","scroll","yOffset","getComputedStyle","style","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","splitClasses","klass","prepareAnimateOptions","options","Browser","cacheStateAndFireUrlChange","pendingLocation","fireStateOrUrlChange","cacheState","cachedState","getCurrentState","lastCachedState","lastHistoryState","prevLastHistoryState","lastBrowserUrl","url","urlChangeListeners","listener","history","clearTimeout","pendingDeferIds","taskTracker","isMock","$$completeOutstandingRequest","completeTask","$$incOutstandingRequestCount","incTaskCount","notifyWhenNoOutstandingRequests","notifyWhenNoPendingTasks","href","baseElement","state","self.url","sameState","urlResolve","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","callback","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","taskType","timeoutId","DEFAULT_TASK_TYPE","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","put","lruEntry","remove","removeAll","destroy","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","restrict","this.component","registerComponent","makeInjectable","tElement","tAttrs","$element","$attrs","template","templateUrl","ddo","controllerAs","identifierForController","transclude","bindToController","aHrefSanitizationTrustedUrlList","this.aHrefSanitizationTrustedUrlList","regexp","defineProperty","imgSrcSanitizationTrustedUrlList","this.imgSrcSanitizationTrustedUrlList","this.debugInfoEnabled","enabled","strictComponentBindingsEnabled","this.strictComponentBindingsEnabled","TTL","onChangesTtl","this.onChangesTtl","commentDirectivesEnabledConfig","commentDirectivesEnabled","this.commentDirectivesEnabled","cssClassDirectivesEnabledConfig","cssClassDirectivesEnabled","this.cssClassDirectivesEnabled","PROP_CONTEXTS","addPropertySecurityContext","this.addPropertySecurityContext","elementName","propertyName","ctx","registerNativePropertyContexts","registerContext","values","v","SCE_CONTEXTS","HTML","CSS","URL","MEDIA_URL","RESOURCE_URL","flushOnChangesQueue","onChangesQueue","sanitizeSrcset","invokeType","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","Math","floor","innerIdx","getTrustedMediaUrl","lastTuple","Attributes","attributesToCopy","l","$attr","$$element","setSpecialAttr","specialAttrHolder","attributes","attribute","removeNamedItem","setNamedItem","safeAddClass","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","notLiveList","attrs","linkFnFound","mergeConsecutiveTextNodes","collectDirectives","applyDirectivesToNode","terminal","sibling","nodeValue","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","nName","ngPrefixMatch","nAttrs","attrStartName","attrEndName","isNgAttr","isNgProp","isNgEvent","multiElementMatch","NG_PREFIX_BINDING","PREFIX_REGEXP","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","addPropertyDirective","createEventDirective","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","groupedElementsLink","compilationGenerator","eager","compiled","lazyCompilation","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","slotTranscludeFn","scopeToChild","controllerScope","newScopeDirective","isSlotFilled","transcludeFn.isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","scopeBindingInfo","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$doCheck","$onDestroy","callOnDestroyHook","invokeLinkFn","$postLink","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","directiveValue","$$start","$$end","assertNoDuplicate","$$tlb","scanningIndex","candidateDirective","$$createComment","replaceWith","replaceDirective","slots","slotMap","filledSlots","elementSelector","contents","filled","slotCompileNodes","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","max","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","catch","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedAttrContext","attrNormalizedName","getTrustedPropContext","propNormalizedName","sanitizeSrcsetPropertyValue","propName","trustedContext","sanitizer","getTrusted","ngPropCompileFn","_","ngPropGetter","ngPropWatch","sceValueOf","ngPropPreLinkFn","applyPropValue","propValue","allOrNothing","mustHaveExpression","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","hasData","annotation","strictBindingsCheck","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","initializeBinding","lastValue","parentGet","parentSet","compare","removeWatch","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","$watchCollection","isLiteral","initialValue","parentValueWatchAction","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","compile.$$createComment","comment","createComment","previous","current","SPECIAL_CHARS_REGEXP","str1","str2","tokens1","tokens2","token","jqNodes","ident","CNTRL_REG","this.has","register","this.register","addIdentifier","identifier","expression","later","$controllerMinErr","controllerPrototype","$controllerInit","changeListener","hidden","doc","exception","cause","serializeValue","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","hasJsonContentType","APPLICATION_JSON","jsonStart","JSON_START","JSON_ENDS","$httpMinErr","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","jsonpCallbackParam","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","xsrfTrustedOrigins","origins","requestConfig","chainInterceptors","promise","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","header","response","resp","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","requestInterceptors","responseInterceptors","resolve","reversedInterceptors","interceptor","request","requestError","responseError","serverRequest","reqData","withCredentials","sendReq","finally","completeOutstandingRequest","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","done","headersString","statusText","xhrStatus","resolveHttpPromise","resolvePromise","deferred","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","isJsonp","getTrustedResourceUrl","buildUrl","sanitizeJsonpCallbackParam","defaultCache","xsrfValue","urlIsAllowedOrigin","timeout","responseType","uploadEventHandlers","serializedParams","cbKey","interceptorFactory","urlIsAllowedOriginFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","$browserDefer","callbacks","rawDocument","jsonpReq","callbackPath","async","body","wasCalled","timeoutRequest","abortedByTimeout","jsonpDone","xhr","abort","completeRequest","createCallback","getResponse","removeCallback","open","setRequestHeader","onload","xhr.onload","responseText","protocol","getAllResponseHeaders","onerror","ontimeout","requestTimeout","onabort","requestAborted","upload","send","$$timeoutId","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","constantInterpolateWatch","parseStringifyInterceptor","contextAllowsConcatenation","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","singleExpression","startSymbolLength","endSymbolLength","map","compute","throwNoconcat","interpolationFn","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","intervals","clearIntervalFn","clearInterval","interval","setIntervalFn","tick","setInterval","interval.cancel","$intervalMinErr","$$intervalId","q","$$state","pur","intervalFactory","intervalFn","count","invokeApply","hasParams","iteration","skipApply","notify","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","html5Mode","DOUBLE_SLASH_REGEX","$locationMinErr","prefixed","segments","pathname","$$path","$$search","search","$$hash","startsWith","stripBaseUrl","base","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$$compose","$$normalizeUrl","this.$$normalizeUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","urlsEqual","setBrowserUrlWithFallback","oldUrl","oldState","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","$$urlUpdatedByLocation","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","formatStackTrace","sourceURL","consoleLog","logFn","log","navigator","userAgent","warn","getStringValue","ifDefined","plusFn","r","isPure","parentIsPure","AST","MemberExpression","computed","UnaryExpression","PURITY_ABSOLUTE","BinaryExpression","operator","CallExpression","PURITY_RELATIVE","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","astIsPure","Program","expr","Literal","toWatch","argument","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","object","isStatelessFilter","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","ASTCompiler","ASTInterpreter","Parser","lexer","astCompiler","getValueOf","objectValueOf","literals","identStart","identContinue","addLiteral","this.addLiteral","literalName","literalValue","setIdentifierFns","this.setIdentifierFns","identifierStart","identifierContinue","interceptorFn","parsedExpression","cacheKey","Lexer","$parseOptions","parser","addWatchDelegate","addInterceptor","expressionInputDirtyCheck","oldValueOfValue","compareObjectIdentity","inputsWatchDelegate","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","unwatchIfDone","isDone","oneTimeWatch","useInputs","isAllDefined","$$intercepted","$$interceptor","allDefined","constantWatch","oneTime","first","second","chainedInterceptor","$$pure","depurifier","s","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$getAst","getAst","errorOnUnhandledRejections","qFactory","this.errorOnUnhandledRejections","nextTick","exceptionHandler","Deferred","Promise","this.resolve","this.reject","rejectPromise","this.notify","progress","notifyPromise","processChecks","queueSize","checkQueue","toCheck","errorMessage","scheduleProcessQueue","pending","processScheduled","$$passToExceptionHandler","$$reject","$qMinErr","$$resolve","doResolve","doReject","doNotify","handleCallback","resolver","callbackOutput","when","errback","progressBack","$Q","resolveFn","TypeError","onFulfilled","onRejected","promises","counter","results","race","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$$suspended","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","$$digestWatchIndex","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","asyncQueue","watchLog","logIdx","asyncTask","asyncQueuePosition","msg","next","postDigestQueuePosition","postDigestQueue","$suspend","$isSuspended","$resume","eventName","this.$watchGroup","$eval","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isMediaUrl","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","trustedResourceUrlList","bannedResourceUrlList","this.trustedResourceUrlList","this.bannedResourceUrlList","matchUrl","baseURI","baseUrlParsingNode","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","UNDERSCORE_LOWERCASE_REGEXP","eventSupport","hasHistoryPushState","nw","process","chrome","app","runtime","pushState","android","boxee","bodyStyle","transitions","animations","hasEvent","divElm","TaskTracker","getLastCallback","cbInfo","taskCallbacks","pop","cb","getLastCallbackForType","taskCounts","ALL_TASKS_TYPE","countForType","countForAll","getNextCallback","nextCb","httpOptions","this.httpOptions","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","handleError","$templateRequestMinErr","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","timeout.cancel","$timeoutMinErr","urlParsingNode","ipv6InBrackets","trustedOriginUrls","parsedAllowedOriginUrls","originUrl","requestUrl","urlsAreSameOrigin","url1","url2","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","anyPropertyKey","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","currencySymbolRe","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isNaN","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","end","processPredicates","sortPredicates","predicate","descending","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","predicates","compareValues","getComparisonObject","tieBreaker","predicateValues","doComparison","ngDirective","FormController","$$controls","$error","$$success","$pending","$name","$dirty","$valid","$pristine","$submitted","$invalid","$$parentForm","nullFormCtrl","$$animate","setupValidity","$$classCache","INVALID_CLASS","VALID_CLASS","addSetValidityMethod","cachedToggleClass","ctrl","switchValue","toggleValidationCss","validationErrorKey","isValid","unset","clazz","$setValidity","clazz.prototype.$setValidity","isObjectEmpty","PENDING_CLASS","combinedState","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","previousDate","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","parseDateAndConvertTimeZoneToLocal","$options","getOption","previousTimezone","parsedDate","badInputChecker","isTimeType","$parsers","$$parserName","ngModelMinErr","targetFormat","formatted","ngMin","minVal","parsedMinVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","parsedMaxVal","ctrl.$validators.max","parserName","VALIDITY_STATE_PROPERTY","numberFormatterParser","NUMBER_REGEXP","parseNumberAttrVal","countDecimals","numString","decimalSymbolIndex","isValidForStep","viewValue","stepBase","step","isNonIntegerValue","isNonIntegerStepBase","isNonIntegerStep","valueDecimals","stepBaseDecimals","stepDecimals","decimalCount","multiplier","pow","parseConstantExpr","parseFn","classDirective","arrayDifference","toClassString","classValue","classString","indexWatchExpression","digestClassCounts","classArray","classesToUpdate","classCounts","ngClassIndexWatchAction","newModulo","oldClassString","oldModulo","moduloTwo","$index","ngClassWatchAction","newClassString","oldClassArray","newClassArray","toRemoveArray","toAddArray","toRemoveString","toAddString","forceAsync","ngEventHandler","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$viewChangeListeners","$untouched","$touched","defaultModelOptions","$$updateEvents","$$updateEventHandler","$$parsedNgModel","$$parsedNgModelAssign","$$ngModelGet","$$ngModelSet","$$pendingDebounce","$$parserValid","$$currentValidationRunId","$$rootScope","$$attr","$$timeout","$$exceptionHandler","setupModelWatcher","ngModelWatch","modelValue","$$setModelValue","ModelOptions","$$options","setOptionSelectedStatus","optionEl","parsePatternAttr","patternExp","parseLength","intVal","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","allowAutoBootstrap","currentScript","HTMLScriptElement","SVGScriptElement","srcs","getNamedItem","every","origin","full","major","minor","dot","codeName","expando","JQLite._data","MS_HACK_REGEXP","mouseleave","mouseenter","thead","col","tr","td","tbody","tfoot","colgroup","caption","th","wrapMapValueClosing","wrapMapValue","optgroup","Node","contains","compareDocumentPosition","ready","removeData","jqLiteHasData","jqLiteCleanData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","isBooleanAttr","ret","getText","$dv","multiple","selected","arg1","arg2","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","children","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","nanKey","_idx","_transformKey","delete","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","classNameFilter","customFilter","$$registeredAnimations","this.customFilter","filterFn","this.classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","enter","move","leave","addclass","setClass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","_state","chain","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","UNINITIALIZED_VALUE","isFirstChange","SimpleChange.prototype.isFirstChange","domNode","offsetWidth","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","callbackId","called","callbackMap","PATH_MATCH","locationPrototype","$$absUrl","hashValue","pathValue","$$url","paramValue","Location","Location.prototype.state","$parseMinErr","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","peekMultichar","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","charCodeAt","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","isNull","nonComputedMember","notNull","member","filterName","defaultValue","UNSAFE_CHARACTERS","SAFE_IDENTIFIER","stringEscapeFn","stringEscapeRegex","c","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","$addControl","$getControls","$$renameControl","nullFormRenameControl","control","$removeControl","$setDirty","$setPristine","$setSubmitted","$$setSubmitted","$rollbackViewValue","$commitViewValue","newName","oldName","PRISTINE_CLASS","DIRTY_CLASS","SUBMITTED_CLASS","$setUntouched","rootForm","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","ngStep","stepVal","parsedStepVal","ctrl.$validators.step","urlInputType","ctrl.$validators.url","emailInputType","email","ctrl.$validators.email","radioInputType","doTrim","checked","rangeInputType","setInitialValueAndObserver","htmlAttrName","changeFn","wrappedObserver","minChange","supportsRange","elVal","maxChange","stepChange","hasMinAttr","hasMaxAttr","hasStepAttr","originalRender","rangeUnderflow","rangeOverflow","rangeRender","noopMinValidator","minValidator","noopMaxValidator","maxValidator","nativeStepValidator","stepMismatch","stepValidator","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","valueProperty","configurable","enumerable","CONSTANT_VALUE_REGEXP","updateElementValue","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","ngBindHtmlGetter","ngBindHtmlWatch","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","$$initGetterSetters","invokeModelGetter","invokeModelSetter","this.$$ngModelGet","this.$$ngModelSet","$$$p","$$updateEmptyClasses","NOT_EMPTY_CLASS","EMPTY_CLASS","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","$$lastCommittedViewValue","prevValid","prevModelValue","allowInvalid","that","$$runValidators","allValid","$$writeModelToScope","doneCallback","processSyncValidators","syncValidatorsValid","validator","Boolean","setValidity","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","$$parseAndValidate","$$debounceViewValueCommit","debounceDelay","$overrideModelOptions","createChild","$$setUpdateOnEvents","$processModelValue","$$format","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","optionsCtrl","ngModelPostLink","setTouched","DEFAULT_REGEXP","inheritAll","updateOnDefault","updateOn","debounce","getterSetter","NgModelOptionsController","$$attrs","parentOptions","parentCtrl","modelOptionsDefinition","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","getAndUpdateSelectedOption","updateOptionElement","selectCtrl","ngModelCtrl","hasEmptyOption","emptyOption","providedEmptyOption","unknownOption","listFragment","generateUnknownOptionValue","selectCtrl.generateUnknownOptionValue","writeValue","selectCtrl.writeValue","selectedOptions","readValue","selectCtrl.readValue","selectedValues","selections","selectedOption","selectedIndex","removeUnknownOption","selectUnknownOrEmptyOption","unselectEmptyOption","selectCtrl.registerOption","optionScope","needsRerender","$isEmptyOptionSelected","updateOptions","groupElementMap","addOption","groupElement","optionElement","nextValue","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRefMinErr","refValue","ngRefRead","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","trackByIdArrayFn","trackByIdObjFn","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByIdExpFn","hashFnLocals","trackByExpGetter","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","NgSwitchController","cases","ngSwitchController","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngSwitchWhenSeparator","whenCase","ngTranscludeMinErr","ngTranscludeCompile","fallbackLinkFn","ngTranscludePostLink","useFallbackContent","ngTranscludeSlot","ngTranscludeCloneAttachFn","noopNgModelController","SelectController","scheduleRender","renderScheduled","scheduleViewValueUpdate","renderAfter","updateScheduled","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","updateUnknownOption","self.updateUnknownOption","self.generateUnknownOptionValue","self.removeUnknownOption","selectEmptyOption","self.selectEmptyOption","self.unselectEmptyOption","self.readValue","realVal","hasOption","self.writeValue","currentlySelectedOption","hashedVal","self.addOption","removeOption","self.removeOption","self.hasOption","$hasEmptyOption","self.$hasEmptyOption","$isUnknownOptionSelected","self.$isUnknownOptionSelected","self.$isEmptyOptionSelected","self.selectUnknownOrEmptyOption","self.registerOption","optionAttrs","interpolateValueFn","interpolateTextFn","valueAttributeObserveAction","removal","previouslySelected","interpolateWatchAction","removeValue","selectPreLink","shouldBeSelected","lastView","lastViewRef","selectMultipleWatch","ngModelCtrl.$isEmpty","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","tElm","tAttr","attrVal","oldRegexp","ctrl.$validators.pattern","maxlengthParsed","ctrl.$validators.maxlength","minlengthParsed","ctrl.$validators.minlength","getDecimals","opt_precision","ONE","OTHER","$$csp","head"] } diff --git a/civicrm/bower_components/angular/bower.json b/civicrm/bower_components/angular/bower.json index 052eca1192..3a00441b4d 100644 --- a/civicrm/bower_components/angular/bower.json +++ b/civicrm/bower_components/angular/bower.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.8.0", + "version": "1.8.2", "license": "MIT", "main": "./angular.js", "ignore": [], diff --git a/civicrm/bower_components/angular/package.json b/civicrm/bower_components/angular/package.json index 9e7cb7818d..c48a250c07 100644 --- a/civicrm/bower_components/angular/package.json +++ b/civicrm/bower_components/angular/package.json @@ -1,6 +1,6 @@ { "name": "angular", - "version": "1.8.0", + "version": "1.8.2", "description": "HTML enhanced for web apps", "main": "index.js", "scripts": { diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index b9fdd61e0e..dd7308f38c 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,7 +1,7 @@ <?php /** @deprecated */ function civicrmVersion( ) { - return array( 'version' => '5.36.1', + return array( 'version' => '5.37.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.json b/civicrm/composer.json index cd21534faa..604bf273ce 100644 --- a/civicrm/composer.json +++ b/civicrm/composer.json @@ -84,7 +84,8 @@ "ext-intl": "*", "pear/mail_mime": "~1.10", "pear/db": "1.10", - "civicrm/composer-compile-lib": "~0.3 || ~1.0" + "civicrm/composer-compile-lib": "~0.3 || ~1.0", + "ext-json": "*" }, "scripts": { "post-install-cmd": [ @@ -129,7 +130,7 @@ "path": "bower_components/{$id}" }, "angular": { - "url": "https://github.com/angular/bower-angular/archive/v1.8.0.zip" + "url": "https://github.com/angular/bower-angular/archive/v1.8.2.zip" }, "angular-bootstrap": { "url": "https://github.com/angular-ui/bootstrap-bower/archive/2.5.0.zip" diff --git a/civicrm/composer.lock b/civicrm/composer.lock index 156effe255..76156d9d81 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": "2d1dfc8bddd169a9064a89c693bb5218", + "content-hash": "ceca2b33b97c4834e26b202ade5a9290", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -49,26 +49,26 @@ }, { "name": "brick/math", - "version": "0.8.15", + "version": "0.9.2", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "9b08d412b9da9455b210459ff71414de7e6241cd" + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/9b08d412b9da9455b210459ff71414de7e6241cd", - "reference": "9b08d412b9da9455b210459ff71414de7e6241cd", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15|^8.5", - "vimeo/psalm": "^3.5" + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.3.2" }, "type": "library", "autoload": { @@ -97,32 +97,33 @@ "type": "tidelift" } ], - "time": "2020-04-15T15:59:35+00:00" + "time": "2021-01-20T22:51:39+00:00" }, { "name": "brick/money", - "version": "0.4.5", + "version": "0.5.1", "source": { "type": "git", "url": "https://github.com/brick/money.git", - "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c" + "reference": "c6f2883c8a759bf7f77c79aaa6004af6d6c0afaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/money/zipball/91f2b5bc35646f172b038e46bb496ad18db59c3c", - "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c", + "url": "https://api.github.com/repos/brick/money/zipball/c6f2883c8a759bf7f77c79aaa6004af6d6c0afaf", + "reference": "c6f2883c8a759bf7f77c79aaa6004af6d6c0afaf", "shasum": "" }, "require": { - "brick/math": "~0.7.3 || ~0.8.0", - "php": "^7.1|^8.0" + "brick/math": "~0.7.3 || ~0.8.0 || ~0.9.0", + "php": "^7.1 || ^8.0" }, "require-dev": { "brick/varexporter": "~0.2.1", "ext-dom": "*", "ext-pdo": "*", "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15" + "phpunit/phpunit": "^7.5.15 || ^8.0 || ^9.0", + "vimeo/psalm": "4.3.2" }, "suggest": { "ext-intl": "Required to format Money objects" @@ -149,7 +150,7 @@ "type": "tidelift" } ], - "time": "2020-05-31T14:17:02+00:00" + "time": "2021-02-10T14:14:29+00:00" }, { "name": "cache/integration-tests", @@ -4039,7 +4040,8 @@ "prefer-lowest": false, "platform": { "php": "~7.2", - "ext-intl": "*" + "ext-intl": "*", + "ext-json": "*" }, "platform-dev": [], "platform-overrides": { diff --git a/civicrm/css/api4-explorer.css b/civicrm/css/api4-explorer.css index af5cec80a7..d2bd350647 100644 --- a/civicrm/css/api4-explorer.css +++ b/civicrm/css/api4-explorer.css @@ -16,17 +16,10 @@ #bootstrap-theme .explorer-params-panel .panel-heading .form-inline > .select2-container { max-width: 25% !important; } -#bootstrap-theme.api4-explorer-page .api4-explorer-row { - display: flex; -} -#bootstrap-theme.api4-explorer-page > div > .panel { - flex: 1; +#bootstrap-theme .api4-explorer-row > .panel { margin: 10px; min-height: 500px; } -#bootstrap-theme.api4-explorer-page > div > form.panel { - flex: 2; -} /* Fix weird shorditch style */ #bootstrap-theme.api4-explorer-page .api4-explorer-row .panel .panel-heading { border-bottom-right-radius: 0; @@ -39,12 +32,10 @@ #bootstrap-theme .panel-heading>li>a { background-color: #f1f1f18c } -#bootstrap-theme.api4-explorer-page .explorer-code-panel table td:first-child { - width: 6em; - word-break: break-word; -} -#bootstrap-theme.api4-explorer-page .explorer-code-panel table td pre { +#bootstrap-theme.api4-explorer-page .explorer-code-panel pre { min-height: 3.3em; + word-break: break-all; + white-space: pre-wrap; } #bootstrap-theme.api4-explorer-page .explorer-code-panel .panel-heading.nav li a { text-transform: uppercase; diff --git a/civicrm/css/civicrm.css b/civicrm/css/civicrm.css index 9a4ae97a4e..775346a855 100644 --- a/civicrm/css/civicrm.css +++ b/civicrm/css/civicrm.css @@ -24,21 +24,24 @@ flex-wrap: wrap; box-sizing: border-box; } -.crm-container .crm-flex-box > * { +.crm-flex-box > * { flex: 1; box-sizing: border-box; min-width: 0; /* prevents getting squashed by whitespace:nowrap content */ } -.crm-container .crm-flex-box > .crm-flex-2 { +.crm-container .crm-flex-1 { + flex: 1; +} +.crm-container .crm-flex-2 { flex: 2; } -.crm-container .crm-flex-box > .crm-flex-3 { +.crm-container .crm-flex-3 { flex: 3; } -.crm-container .crm-flex-box > .crm-flex-4 { +.crm-container .crm-flex-4 { flex: 4; } -.crm-container .crm-flex-box > .crm-flex-5 { +.crm-container .crm-flex-5 { flex: 5; } @@ -410,10 +413,13 @@ input.crm-form-entityref { margin-bottom: 1em; } -.crm-container .crm-section .label { - float: left; - width: 17%; - text-align: right; +/* todo: See PR#19968 to move towards configurable breakpoints */ +@media (min-width: 480px) { + .crm-container .crm-section .label { + float: left; + width: 17%; + text-align: right; + } } .crm-container .crm-section .label label{ @@ -424,8 +430,10 @@ input.crm-form-entityref { text-align: left; } -.crm-container .crm-section .content { - margin-left: 19%; +@media (min-width: 480px) { + .crm-container .crm-section .content { + margin-left: 19%; + } } .crm-container .no-label .content { @@ -3358,6 +3366,9 @@ span.crm-select-item-color { } .crm-container span.crm-editable-enabled { display: inline-block !important; + padding-right: 2px; + min-height: 1em; + min-width: 3em; } .crm-container .crm-editable-enabled .crm-i { diff --git a/civicrm/ext/afform/admin/CRM/AfformAdmin/Page/Base.php b/civicrm/ext/afform/admin/CRM/AfformAdmin/Page/Base.php index fc22b35b94..d9395e9a97 100644 --- a/civicrm/ext/afform/admin/CRM/AfformAdmin/Page/Base.php +++ b/civicrm/ext/afform/admin/CRM/AfformAdmin/Page/Base.php @@ -8,6 +8,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ */ +use CRM_AfformAdmin_ExtensionUtil as E; /** * Base page for Afform admin @@ -16,16 +17,15 @@ class CRM_AfformAdmin_Page_Base extends CRM_Core_Page { public function run() { $breadCrumb = [ - 'title' => ts('Form Builder'), + 'title' => E::ts('Form Builder'), 'url' => CRM_Utils_System::url('civicrm/admin/afform', NULL, FALSE, '/'), ]; CRM_Utils_System::appendBreadCrumb([$breadCrumb]); // Load angular module - $loader = new Civi\Angular\AngularLoader(); - $loader->setPageName('civicrm/admin/afform'); + $loader = Civi::service('angularjs.loader'); $loader->useApp(); - $loader->load(); + parent::run(); } diff --git a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php index 3b8a0614e8..07812515a7 100644 --- a/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php +++ b/civicrm/ext/afform/admin/Civi/AfformAdmin/AfformAdminMeta.php @@ -18,10 +18,10 @@ class AfformAdminMeta { ->execute(); // Pluralize tabs (too bad option groups only store a single label) $plurals = [ - 'form' => ts('Custom Forms'), - 'search' => ts('Search Displays'), - 'block' => ts('Field Blocks'), - 'system' => ts('System Forms'), + 'form' => E::ts('Custom Forms'), + 'search' => E::ts('Search Displays'), + 'block' => E::ts('Field Blocks'), + 'system' => E::ts('System Forms'), ]; foreach ($afformTypes as $index => $type) { $afformTypes[$index]['plural'] = $plurals[$type['name']] ?? \CRM_Utils_String::pluralize($type['label']); @@ -84,7 +84,7 @@ class AfformAdminMeta { 'includeCustom' => TRUE, 'loadOptions' => ['id', 'label'], 'action' => 'create', - 'select' => ['name', 'label', 'input_type', 'input_attrs', 'required', 'options', 'help_pre', 'help_post', 'serialize', 'data_type'], + 'select' => ['name', 'label', 'input_type', 'input_attrs', 'required', 'options', 'help_pre', 'help_post', 'serialize', 'data_type', 'fk_entity'], 'where' => [['input_type', 'IS NOT NULL']], ]; if (in_array($entityName, ['Individual', 'Household', 'Organization'])) { @@ -233,8 +233,8 @@ class AfformAdminMeta { 'description' => $perm['description'] ?? NULL, ]; } - - $data['dateRanges'] = \CRM_Utils_Array::makeNonAssociative(\CRM_Core_OptionGroup::values('relative_date_filters'), 'id', 'label'); + $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/ang/afAdmin/afAdminList.controller.js b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js index 9c912bf6ca..f966af1746 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js +++ b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.controller.js @@ -2,7 +2,7 @@ "use strict"; angular.module('afAdmin').controller('afAdminList', function($scope, afforms, crmApi4, crmStatus) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = $scope.$ctrl = this; $scope.crmUrl = CRM.url; @@ -13,12 +13,12 @@ $scope.types = _.indexBy(ctrl.tabs, 'name'); _.each(['form', 'block', 'search'], function(type) { if ($scope.types[type]) { - $scope.types[type].options = []; if (type === 'form') { $scope.types.form.default = '#create/form/Individual'; } } }); + $scope.types.system.options = false; this.afforms = _.transform(afforms, function(afforms, afform) { afform.type = afform.type || 'system'; @@ -35,7 +35,7 @@ this.createLinks = function() { ctrl.searchCreateLinks = ''; - if ($scope.types[ctrl.tab].options.length) { + if ($scope.types[ctrl.tab].options) { return; } var links = []; @@ -66,6 +66,7 @@ $scope.types.block.options = _.sortBy(links, function(item) { return item.url === '#create/block/*' ? '0' : item.label; }); + // Add divider after the * entity (content block) $scope.types.block.options.splice(1, 0, {'class': 'divider', label: ''}); } diff --git a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html index c6ff0b7f86..276e4d0538 100644 --- a/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html +++ b/civicrm/ext/afform/admin/ang/afAdmin/afAdminList.html @@ -10,7 +10,7 @@ <div class="form-inline"> <label for="afform-list-filter">{{:: ts('Filter:') }}</label> <input class="form-control" type="search" id="afform-list-filter" ng-model="$ctrl.searchAfformList" placeholder=""> - <div class="btn-group pull-right" ng-if="types[$ctrl.tab].options"> + <div class="btn-group pull-right" ng-if="types[$ctrl.tab].options !== false"> <a ng-if="types[$ctrl.tab].default" href="{{ types[$ctrl.tab].default }}" class="btn btn-primary"> {{ ts('New %1', {1: types[$ctrl.tab].label }) }} </a> @@ -19,9 +19,10 @@ <span class="caret"></span> </button> <ul class="dropdown-menu"> - <li> - <input ng-if="types[$ctrl.tab].options.length" type="search" class="form-control" placeholder="" ng-model="searchCreateLinks.label"> - <a href ng-if="!types[$ctrl.tab].options.length"><i class="crm-i fa-spinner fa-spin"></i></a> + <li ng-class="{disabled: !types[$ctrl.tab].options || !types[$ctrl.tab].options.length}"> + <input ng-if="types[$ctrl.tab].options && types[$ctrl.tab].options.length" type="search" class="form-control" placeholder="" ng-model="searchCreateLinks.label"> + <a href ng-if="!types[$ctrl.tab].options"><i class="crm-i fa-spinner fa-spin"></i></a> + <a href ng-if="types[$ctrl.tab].options && !types[$ctrl.tab].options.length">{{:: ts('None Found') }}</a> </li> <li ng-repeat="link in types[$ctrl.tab].options | filter:searchCreateLinks" class="{{:: link.class }}"> <a ng-if=":: link.url" href="{{:: link.url }}"> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor.css b/civicrm/ext/afform/admin/ang/afGuiEditor.css index 330b3b4e46..3667005a12 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor.css +++ b/civicrm/ext/afform/admin/ang/afGuiEditor.css @@ -99,7 +99,7 @@ height: 22px; width: 100%; opacity: 0; - transition: opacity 1s 2s; + transition: opacity .2s; position:relative; font-family: "Courier New", Courier, monospace; font-size: 12px; @@ -112,10 +112,15 @@ left: 0; padding-left: 15px; } -#afGuiEditor-canvas:hover .af-gui-bar { +#afGuiEditor:not(.af-gui-dragging) #afGuiEditor-canvas:hover .af-gui-bar { opacity: 1; transition: opacity .2s; } +#afGuiEditor-canvas .af-gui-dragtarget > .af-gui-bar { + background-color: #d7e6ff; + opacity: 1; + transition: opacity .1s; +} #afGuiEditor .af-gui-bar .btn.active { background-color: #b3b3b3; @@ -157,9 +162,14 @@ box-shadow: 0 0 5px #bbbbbb; } -#afGuiEditor .af-gui-container:hover { +#afGuiEditor .af-gui-container:hover, +#afGuiEditor.af-gui-dragging .af-gui-container { border: 2px dashed #757575; } +#afGuiEditor .af-gui-container.af-gui-dragtarget { + border: 2px solid #0071bd; + box-shadow: 0 0 5px #0071bd; +} #afGuiEditor .af-gui-markup { padding: 22px 3px 3px; @@ -203,7 +213,8 @@ } #afGuiEditor [ui-sortable] { - min-height: 25px; + min-height: 60px; + margin-top: 10px; } #afGuiEditor .af-gui-entity-palette-select-list { @@ -270,6 +281,7 @@ #afGuiEditor .af-gui-layout.af-layout-inline > div { display: inline-block; width: 300px; + vertical-align: top; } #afGuiEditor .af-gui-button { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor.js b/civicrm/ext/afform/admin/ang/afGuiEditor.js index dc2fe02a93..a545b6ba29 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor.js @@ -6,15 +6,17 @@ .service('afGui', function(crmApi4, $parse, $q) { // Parse strings of javascript that php couldn't interpret + // TODO: Figure out which attributes actually need to be evaluated, as a whitelist would be less error-prone than a blacklist + var doNotEval = ['filters']; function evaluate(collection) { _.each(collection, function(item) { if (_.isPlainObject(item)) { evaluate(item['#children']); - _.each(item, function(node, idx) { - if (_.isString(node)) { - var str = _.trim(node); + _.each(item, function(prop, key) { + if (_.isString(prop) && !_.includes(doNotEval, key)) { + var str = _.trim(prop); if (str[0] === '{' || str[0] === '[' || str.slice(0, 3) === 'ts(') { - item[idx] = $parse(str)({ts: CRM.ts('afform')}); + item[key] = $parse(str)({ts: CRM.ts('afform')}); } } }); @@ -172,12 +174,28 @@ }; }); - // Shoehorn in a non-angular widget for picking icons $(function() { + // Shoehorn in a non-angular widget for picking icons $('#crm-container').append('<div style="display:none"><input id="af-gui-icon-picker"></div>'); CRM.loadScript(CRM.config.resourceBase + 'js/jquery/jquery.crmIconPicker.js').done(function() { $('#af-gui-icon-picker').crmIconPicker(); }); + // Add css class while dragging + $('#crm-container') + .on('sortover', function(e) { + $('.af-gui-container').removeClass('af-gui-dragtarget'); + $(e.target).closest('.af-gui-container').addClass('af-gui-dragtarget'); + }) + .on('sortout', '.af-gui-container', function() { + $(this).removeClass('af-gui-dragtarget'); + }) + .on('sortstart', '#afGuiEditor', function() { + $('#afGuiEditor').addClass('af-gui-dragging'); + }) + .on('sortstop', '#afGuiEditor', function() { + $('.af-gui-dragging').removeClass('af-gui-dragging'); + $('.af-gui-dragtarget').removeClass('af-gui-dragtarget'); + }); }); // Connect bootstrap dropdown.js with angular diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditOptions.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditOptions.component.js index ac1886ec36..58759986a1 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditOptions.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditOptions.component.js @@ -6,7 +6,7 @@ templateUrl: '~/afGuiEditor/afGuiEditOptions.html', require: {field: '^^afGuiField'}, controller: function($scope) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; this.$onInit = function() { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js index 587d74cdd2..112ef9bf01 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js @@ -19,7 +19,7 @@ }, controllerAs: 'editor', controller: function($scope, crmApi4, afGui, $parse, $timeout, $location) { - var ts = $scope.ts = CRM.ts('afform'); + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'); $scope.crmUrl = CRM.url; $scope.afform = null; @@ -52,7 +52,7 @@ editor.layout = {'#children': []}; $scope.entities = {}; - if ($scope.afform.type === 'form') { + if (editor.getFormType() === 'form') { editor.allowEntityConfig = true; editor.layout['#children'] = afGui.findRecursive($scope.afform.layout, {'#tag': 'af-form'})[0]['#children']; $scope.entities = _.mapValues(afGui.findRecursive(editor.layout['#children'], {'#tag': 'af-entity'}, 'name'), backfillEntityDefaults); @@ -63,7 +63,7 @@ } } - if ($scope.afform.type === 'block') { + else if (editor.getFormType() === 'block') { editor.layout['#children'] = $scope.afform.layout; editor.blockEntity = $scope.afform.join || $scope.afform.block; $scope.entities[editor.blockEntity] = backfillEntityDefaults({ @@ -73,9 +73,12 @@ }); } - if ($scope.afform.type === 'search') { + else if (editor.getFormType() === 'search') { editor.layout['#children'] = afGui.findRecursive($scope.afform.layout, {'af-fieldset': ''})[0]['#children']; - + editor.searchDisplay = afGui.findRecursive(editor.layout['#children'], function(item) { + return item['#tag'] && item['#tag'].indexOf('crm-search-display-') === 0; + })[0]; + editor.searchFilters = getSearchFilterOptions(); } // Set changesSaved to true on initial load, false thereafter whenever changes are made to the model @@ -85,6 +88,10 @@ }, true); } + this.getFormType = function() { + return $scope.afform.type; + }; + $scope.updateLayoutHtml = function() { $scope.layoutHtml = '...Loading...'; crmApi4('Afform', 'convert', {layout: $scope.afform.layout, from: 'deep', to: 'html', formatWhitespace: true}) @@ -172,6 +179,55 @@ return $scope.afform; }; + this.toggleContactSummary = function() { + if ($scope.afform.contact_summary) { + $scope.afform.contact_summary = false; + if ($scope.afform.type === 'search') { + delete editor.searchDisplay.filters; + } + } else { + $scope.afform.contact_summary = 'block'; + if ($scope.afform.type === 'search') { + editor.searchDisplay.filters = editor.searchFilters[0].key; + } + } + }; + + function getSearchFilterOptions() { + var searchDisplay = editor.meta.searchDisplays[editor.searchDisplay['search-name'] + '.' + editor.searchDisplay['display-name']], + entityCount = {}, + options = []; + + addFields(searchDisplay['saved_search.api_entity'], ''); + + _.each(searchDisplay['saved_search.api_params'].join, function(join) { + var joinInfo = join[0].split(' AS '); + addFields(joinInfo[0], joinInfo[1] + '.'); + }); + + function addFields(entityName, prefix) { + var entity = afGui.getEntity(entityName); + entityCount[entity.entity] = (entityCount[entity.entity] || 0) + 1; + var count = (entityCount[entity.entity] > 1 ? ' ' + entityCount[entity.entity] : ''); + if (entityName === 'Contact') { + options.push({ + key: "{'" + prefix + "id': options.contact_id}", + label: entity.label + count + }); + } else { + _.each(entity.fields, function(field) { + if (field.fk_entity === 'Contact') { + options.push({ + key: "{'" + prefix + field.name + "': options.contact_id}", + label: entity.label + count + ' ' + field.label + }); + } + }); + } + } + return options; + } + // Validates that a drag-n-drop action is allowed this.onDrop = function(event, ui) { var sort = ui.item.sortable; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js index b4f67341bb..721c41ec6e 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiEntity.component.js @@ -9,7 +9,7 @@ }, require: {editor: '^^afGuiEditor'}, controller: function ($scope, $timeout, afGui) { - var ts = $scope.ts = CRM.ts(); + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'); var ctrl = this; $scope.controls = {}; $scope.fieldList = []; @@ -54,7 +54,7 @@ label: ts('%1 Fields', {1: $scope.getMeta().label}), fields: filterFields($scope.getMeta().fields) }); - + // Add fields for af-join blocks _.each(afGui.meta.entities, function(entity, entityName) { if (check(ctrl.editor.layout['#children'], {'af-join': entityName})) { $scope.fieldList.push({ @@ -69,13 +69,18 @@ function filterFields(fields) { return _.transform(fields, function(fieldList, field) { if (!search || _.contains(field.name, search) || _.contains(field.label.toLowerCase(), search)) { - fieldList.push({ - "#tag": "af-field", - name: field.name - }); + fieldList.push(fieldDefaults(field)); } }, []); } + + function fieldDefaults(field) { + var tag = { + "#tag": "af-field", + name: field.name + }; + return tag; + } } function buildBlockList(search) { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js index 4fa0dd36df..57dab3b119 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiFieldValue.directive.js @@ -10,7 +10,7 @@ }, require: 'ngModel', link: function (scope, element, attrs, ctrl) { - var ts = scope.ts = CRM.ts(), + var ts = scope.ts = CRM.ts('org.civicrm.afform_admin'), multi; function destroyWidget() { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBackground.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBackground.component.js index bc2014588b..e7580230ed 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBackground.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBackground.component.js @@ -9,7 +9,7 @@ node: '=' }, controller: function($scope, afGui) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; $scope.getSetBackgroundColor = function(color) { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBorder.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBorder.component.js index e22ec9c847..c17cea2011 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBorder.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemBorder.component.js @@ -9,7 +9,7 @@ node: '=' }, controller: function($scope, afGui) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; $scope.getSetBorderWidth = function(width) { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSaveBlock.controller.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSaveBlock.controller.js index e1546eff40..bded48582a 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSaveBlock.controller.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSaveBlock.controller.js @@ -3,7 +3,7 @@ "use strict"; angular.module('afGuiEditor').controller('afGuiSaveBlock', function($scope, crmApi4, dialogService) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), model = $scope.model, original = $scope.original = { title: model.title, diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js index cf251992b8..ed1a98f73a 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/afGuiSearch.component.js @@ -9,7 +9,7 @@ }, require: {editor: '^^afGuiEditor'}, controller: function ($scope, $timeout, afGui) { - var ts = $scope.ts = CRM.ts(); + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'); var ctrl = this; $scope.controls = {}; $scope.fieldList = []; @@ -76,13 +76,25 @@ function filterFields(fields, prefix) { return _.transform(fields, function(fieldList, field) { if (!search || _.contains(field.name, search) || _.contains(field.label.toLowerCase(), search)) { - fieldList.push({ - "#tag": "af-field", - name: (prefix ? prefix + '.' : '') + field.name - }); + fieldList.push(fieldDefaults(field, prefix)); } }, []); } + + function fieldDefaults(field, prefix) { + var tag = { + "#tag": "af-field", + name: (prefix ? prefix + '.' : '') + field.name + }; + if (field.input_type === 'Select') { + tag.defn = {input_attrs: {multiple: true}}; + } else if (field.input_type === 'Date') { + tag.defn = {input_type: 'Select', search_range: true}; + } else if (field.options) { + tag.defn = {input_type: 'Select', input_attrs: {multiple: true}}; + } + return tag; + } } function buildElementList(search) { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html index 46acccdc8f..0bce83afd6 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/config-form.html @@ -1,51 +1,99 @@ <ng-form name="config_form"> -<div class="form-group"> - <label for="af_config_form_title"> - {{:: ts('Title:') }} <span class="crm-marker">*</span> - </label> - <input ng-model="afform.title" class="form-control" id="af_config_form_title" required title="{{:: ts('Required') }}" /> -</div> - -<div class="form-group"> - <label for="af_config_form_description"> - {{:: ts('Description:') }} - </label> - <textarea ng-model="afform.description" class="form-control" id="af_config_form_description"></textarea> - <p class="help-block">{{:: ts('Semi-private description about the form\'s purpose.') }}</p> - <!-- "Semi-private": not generally public, but not audited for secrecy --> -</div> - -<div class="form-group" ng-class="{'has-error': !!config_form.server_route.$error.pattern}"> - <label for="af_config_form_server_route"> - {{:: ts('Page:') }} - </label> - <input ng-model="afform.server_route" name="server_route" class="form-control" id="af_config_form_server_route" pattern="^civicrm\/[-0-9a-zA-z\/_]+$" onfocus="this.value = this.value || 'civicrm/'" onblur="if (this.value === 'civicrm/') this.value = ''" title="{{:: ts('Path must begin with "civicrm/"') }}"> - <p class="help-block">{{:: ts('Expose the form as a standalone webpage. (Example: "civicrm/my-form")') }}</p> -</div> - -<div class="form-group" ng-if="!!afform.server_route"> - <label for="af_config_form_is_public"> - <input type="checkbox" id="af_config_form_is_public" ng-model="afform.is_public"> - {{:: ts('Enable frontend styling') }} - </label> - <p class="help-block">{{ts('The general look/feel should match the frontend')}}</p> -</div> - -<div class="form-group"> - <label for="af_config_form_is_dashlet"> - <input type="checkbox" id="af_config_form_is_dashlet" ng-model="afform.is_dashlet"> - {{:: ts('Enable dashlet') }} - </label> - <p class="help-block">{{:: ts('Allow backend users to embed the form on the dashboard.') }}</p> -</div> - -<div class="form-group"> - <label for="af_config_form_permission"> - {{:: ts('Permission:') }} - </label> - <input ng-model="afform.permission" class="form-control" id="af_config_form_permission" crm-ui-select="{data: editor.meta.permissions}" /> - <p class="help-block">{{:: ts('What permission is required to use this form?') }}</p> -</div> + <div class="form-group"> + <label for="af_config_form_title"> + {{:: ts('Title:') }} <span class="crm-marker">*</span> + </label> + <p class="help-block">{{:: ts('Public title (usually displayed at the top of the form).') }}</p> + <input ng-model="afform.title" class="form-control" id="af_config_form_title" required title="{{:: ts('Required') }}" /> + </div> + <div class="form-group"> + <label for="af_config_form_description"> + {{:: ts('Description:') }} + </label> + <textarea ng-model="afform.description" class="form-control" id="af_config_form_description"></textarea> + <p class="help-block">{{:: ts("Internal note about the form's purpose (not displayed on form).") }}</p> + <!-- Description is "semi-private": not generally public, but not audited for secrecy --> + </div> + + <div class="form-group"> + <label for="af_config_form_permission"> + {{:: ts('Permission:') }} + </label> + <input ng-model="afform.permission" class="form-control" id="af_config_form_permission" crm-ui-select="{data: editor.meta.permissions}" /> + <p class="help-block">{{:: ts('What permission is required to use this form?') }}</p> + </div> + + <fieldset> + <legend>{{:: ts('Placement') }}</legend> + + <div class="form-group" ng-class="{'has-error': !!config_form.server_route.$error.pattern}"> + <label for="af_config_form_server_route"> + {{:: ts('Page:') }} + </label> + <input ng-model="afform.server_route" name="server_route" class="form-control" id="af_config_form_server_route" pattern="^civicrm\/[-0-9a-zA-Z\/_]+$" onfocus="this.value = this.value || 'civicrm/'" onblur="if (this.value === 'civicrm/') this.value = ''" title="{{:: ts('Path must begin with "civicrm/"') }}"> + <p class="help-block">{{:: ts('Expose the form as a standalone webpage. (Example: "civicrm/my-form")') }}</p> + </div> + + <div class="form-group" ng-if="!!afform.server_route"> + <label> + <input type="checkbox" ng-model="afform.is_public"> + {{:: ts('Style page to match front-end website') }} + </label> + </div> + + <div class="form-group" ng-if="!!afform.server_route"> + <label> + <input type="checkbox" ng-model="afform.is_token"> + {{:: ts('Provide email token') }} + </label> + <p class="help-block">{{:: ts('Allows CiviMail authors to easily link to this page') }}</p> + </div> + + <div class="form-group"> + <label> + <input type="checkbox" ng-model="afform.is_dashlet"> + {{:: ts('Add to dashboard') }} + </label> + <p class="help-block">{{:: ts('Allow CiviCRM users to add the form to their home dashboard.') }}</p> + </div> + + <div class="form-group"> + <div class="form-inline"> + <label> + <input type="checkbox" ng-checked="afform.contact_summary" ng-click="editor.toggleContactSummary()"> + {{:: ts('Add to contact summary page') }} + </label> + <select class="form-control" ng-model="afform.contact_summary" ng-if="afform.contact_summary"> + <option value="block">{{:: ts('As Block') }}</option> + <option value="tab">{{:: ts('As Tab') }}</option> + </select> + </div> + <p class="help-block">{{:: ts('Placement can be configured using the Contact Layout Editor.') }}</p> + </div> + <div class="form-group" ng-if="afform.contact_summary && editor.searchDisplay && editor.searchFilters.length > 1"> + <div class="form-inline"> + <label for="af_config_form_search_filters"> + {{:: ts('Filter on:') }} + </label> + <select class="form-control" id="af_config_form_search_filters" ng-model="editor.searchDisplay.filters"> + <option ng-repeat="option in editor.searchFilters" value="{{ option.key }}">{{ option.label }}</option> + </select> + </div> + <p class="help-block">{{:: ts('Choose which contact from the search should match the contact being viewed.') }}</p> + </div> + </fieldset> + <fieldset> + + <legend>{{:: ts('Submit Actions') }}</legend> + + <div class="form-group" ng-class="{'has-error': !!config_form.redirect.$error.pattern}"> + <label for="af_config_redirect"> + {{:: ts('Post-Submit Page') }} + </label> + <input ng-model="afform.redirect" name="redirect" class="form-control" id="af_config_redirect" title="{{:: ts('Post-Submit Page') }}" pattern="^((http|https):\/\/|\/|civicrm\/)[-0-9a-zA-Z\/_.]\S+$" title="{{:: ts('Post-Submit Page must be either an absolute url, a relative url or a path starting with CiviCRM') }}"/> + <p class="help-block">{{:: ts('Enter a URL or path that the form should redirect to following a successful submission.') }}</p> + </div> + </fieldset> </ng-form> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton-menu.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton-menu.html index d1069acf94..d121b827d6 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton-menu.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton-menu.html @@ -7,4 +7,4 @@ </div> </li> <li role="separator" class="divider"></li> -<li><a href ng-click="$ctrl.deleteThis()"><span class="text-danger">{{:: ts('Delete this button') }}</span></a></li> +<li><a href ng-click="$ctrl.deleteThis()"><span class="text-danger"><i class="crm-i fa-trash"></i> {{:: ts('Delete this button') }}</span></a></li> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.component.js index 47773ef522..a6bca1b567 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiButton.component.js @@ -9,7 +9,7 @@ deleteThis: '&' }, controller: function($scope, afGui) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; // TODO: Add action selector to UI diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer-menu.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer-menu.html index 63d2ff6d94..9121bfeb7d 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer-menu.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer-menu.html @@ -33,4 +33,4 @@ <li><af-gui-menu-item-border node="$ctrl.node"></af-gui-menu-item-border></li> <li><af-gui-menu-item-background node="$ctrl.node"></af-gui-menu-item-background></li> <li role="separator" class="divider"></li> -<li><a href ng-click="$ctrl.deleteThis()"><span class="text-danger">{{ !block ? ts('Delete this container') : ts('Delete this block') }}</span></a></li> +<li><a href ng-click="$ctrl.deleteThis()"><span class="text-danger"><i class="crm-i fa-trash"></i> {{ !block ? ts('Delete this container') : ts('Delete this block') }}</span></a></li> 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 963a68eab2..0b4d6a4d01 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.component.js @@ -12,7 +12,7 @@ }, require: {editor: '^^afGuiEditor'}, controller: function($scope, crmApi4, dialogService, afGui) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; this.$onInit = function() { @@ -38,6 +38,14 @@ } }; + this.sortableOptions = { + handle: '.af-gui-bar', + connectWith: '[ui-sortable]', + cancel: 'input,textarea,button,select,option,a,.dropdown-menu', + placeholder: 'af-gui-dropzone', + containment: '#afGuiEditor-canvas-body' + }; + $scope.isSelectedFieldset = function(entityName) { return entityName === ctrl.editor.getSelectedEntityName(); }; diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.html index d205755ee5..4082c03292 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiContainer.html @@ -15,7 +15,7 @@ </div> <div ng-if="$ctrl.loading"><i class="crm-i fa-spin fa-spinner"></i></div> </div> -<div ng-if="!$ctrl.loading" ui-sortable="{handle: '.af-gui-bar', connectWith: '[ui-sortable]', cancel: 'input,textarea,button,select,option,a,.dropdown-menu', placeholder: 'af-gui-dropzone', containment: '#afGuiEditor-canvas-body'}" ui-sortable-update="$ctrl.editor.onDrop" ng-model="getSetChildren" ng-model-options="{getterSetter: true}" class="af-gui-layout {{ getLayout() }}"> +<div ng-if="!$ctrl.loading" ui-sortable="$ctrl.sortableOptions" ui-sortable-update="$ctrl.editor.onDrop" ng-model="getSetChildren" ng-model-options="{getterSetter: true}" class="af-gui-layout {{ getLayout() }}"> <div ng-repeat="item in getSetChildren()" > <div ng-switch="$ctrl.getNodeType(item)"> <af-gui-container ng-switch-when="fieldset" node="item" delete-this="$ctrl.removeElement(item)" style="{{ item.style }}" class="af-gui-container af-gui-fieldset af-gui-container-type-{{ item['#tag'] }}" ng-class="{'af-entity-selected': isSelectedFieldset(item['af-fieldset'])}" entity-name="item['af-fieldset']" data-entity="{{ item['af-fieldset'] }}" ></af-gui-container> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html index 853be65e92..75652a8bc6 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField-menu.html @@ -8,28 +8,41 @@ </li> <li> <a href ng-click="toggleRequired(); $event.stopPropagation();" title="{{:: ts('Require this field') }}"> - <i class="crm-i" ng-class="{'fa-square-o': !getProp('required'), 'fa-check-square-o': getProp('required')}"></i> + <i class="crm-i fa-{{ getProp('required') ? 'check-' : '' }}square-o"></i> {{:: ts('Required') }} </a> </li> <li> <a href ng-click="toggleLabel(); $event.stopPropagation();" title="{{:: ts('Show field label') }}"> - <i class="crm-i" ng-class="{'fa-square-o': $ctrl.node.defn.title === false, 'fa-check-square-o': $ctrl.node.defn.title !== false}"></i> + <i class="crm-i fa-{{ $ctrl.node.defn.label === false ? '' : 'check-' }}square-o"></i> {{:: ts('Label') }} </a> </li> <li> <a href ng-click="toggleHelp('pre'); $event.stopPropagation();" title="{{:: ts('Show help text above this field') }}"> - <i class="crm-i" ng-class="{'fa-square-o': !propIsset('help_pre'), 'fa-check-square-o': propIsset('help_pre')}"></i> + <i class="crm-i fa-{{ propIsset('help_pre') ? 'check-' : '' }}square-o"></i> {{:: ts('Pre help text') }} </a> </li> <li> <a href ng-click="toggleHelp('post'); $event.stopPropagation();" title="{{:: ts('Show help text below this field') }}"> - <i class="crm-i" ng-class="{'fa-square-o': !propIsset('help_post'), 'fa-check-square-o': propIsset('help_post')}"></i> + <i class="crm-i fa-{{ propIsset('help_post') ? 'check-' : '' }}square-o" ></i> {{:: ts('Post help text') }} </a> </li> +<li role="separator" class="divider" ng-if="$ctrl.canBeRange() || $ctrl.canBeMultiple()"></li> +<li ng-if="$ctrl.canBeMultiple()" ng-click="$event.stopPropagation()"> + <a href ng-click="toggleMultiple()" title="{{:: ts('Search multiple values') }}"> + <i class="crm-i fa-{{ !$ctrl.node.defn.input_attrs.multiple ? '' : 'check-' }}square-o"></i> + {{:: ts('Multi-Select') }} + </a> +</li> +<li ng-if="$ctrl.canBeRange()" ng-click="$event.stopPropagation()"> + <a href ng-click="toggleSearchRange()" title="{{:: ts('Search between low & high values') }}"> + <i class="crm-i fa-{{ !$ctrl.node.defn.search_range ? '' : 'check-' }}square-o"></i> + {{:: ts('Search by range') }} + </a> +</li> <li role="separator" class="divider" ng-if="hasOptions()"></li> <li ng-if="hasOptions()" ng-click="$event.stopPropagation()"> <a href ng-click="resetOptions()" title="{{:: ts('Reset the option list for this field') }}"> @@ -46,6 +59,6 @@ <li role="separator" class="divider"></li> <li> <a href ng-click="$ctrl.deleteThis()" title="{{:: ts('Remove field from form') }}"> - <span class="text-danger">{{:: ts('Delete this field') }}</span> + <span class="text-danger"><i class="crm-i fa-trash"></i> {{:: ts('Delete this field') }}</span> </a> </li> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js index c2215bee5e..325f3bb3da 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiField.component.js @@ -13,31 +13,64 @@ container: '^^afGuiContainer' }, controller: function($scope, afGui) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; $scope.editingOptions = false; var yesNo = [ {id: '1', label: ts('Yes')}, {id: '0', label: ts('No')} - ]; + ], + singleElement = [''], + // When search-by-range is enabled the second element gets a suffix for some properties like "placeholder2" + rangeElements = ['', '2'], + dateRangeElements = ['1', '2'], + relativeDatesWithPickRange = CRM.afGuiEditor.dateRanges, + relativeDatesWithoutPickRange = relativeDatesWithPickRange.slice(1); this.$onInit = function() { $scope.meta = afGui.meta; }; this.isSearch = function() { - return !_.isEmpty($scope.meta.searchDisplays); + return ctrl.editor.getFormType() === 'search'; + }; + + this.canBeRange = function() { + // Range search only makes sense for search display forms + return this.isSearch() && + // Hack for postal code which is not stored as a number but can act like one + (ctrl.node.name.substr(-11) === 'postal_code' || ( + // Multiselects cannot use range search + !ctrl.getDefn().input_attrs.multiple && + // DataType & inputType must make sense for a range + _.includes(['Date', 'Timestamp', 'Integer', 'Float'], ctrl.getDefn().data_type) && + _.includes(['Date', 'Number', 'Select'], $scope.getProp('input_type')) + )); + }; + + this.canBeMultiple = function() { + return this.isSearch() && + !_.includes(['Date', 'Timestamp'], ctrl.getDefn().data_type) && + $scope.getProp('input_type') === 'Select'; + }; + + this.getRangeElements = function(type) { + if (!$scope.getProp('search_range') || (type === 'Select' && ctrl.getDefn().input_type === 'Date')) { + return singleElement; + } + return type === 'Date' ? dateRangeElements : rangeElements; }; // Returns the original field definition from metadata this.getDefn = function() { var defn = afGui.getField(ctrl.container.getFieldEntityType(ctrl.node.name), ctrl.node.name); - return defn || { + defn = defn || { label: ts('Untitled'), - requred: false, - input_attrs: [] + required: false }; + defn.input_attrs = _.isEmpty(defn.input_attrs) ? {} : defn.input_attrs; + return defn; }; $scope.getOriginalLabel = function() { @@ -52,12 +85,12 @@ return _.contains(['CheckBox', 'Radio', 'Select'], inputType) && !(inputType === 'CheckBox' && !ctrl.getDefn().options); }; - $scope.getOptions = this.getOptions = function() { + this.getOptions = function() { if (ctrl.node.defn && ctrl.node.defn.options) { return ctrl.node.defn.options; } if (_.includes(['Date', 'Timestamp'], $scope.getProp('data_type'))) { - return CRM.afGuiEditor.dateRanges; + return $scope.getProp('search_range') ? relativeDatesWithPickRange : relativeDatesWithoutPickRange; } return ctrl.getDefn().options || ($scope.getProp('input_type') === 'CheckBox' ? null : yesNo); }; @@ -122,6 +155,20 @@ } }; + $scope.toggleMultiple = function() { + var newVal = getSet('input_attrs.multiple', !getSet('input_attrs.multiple')); + if (newVal && getSet('search_range')) { + getSet('search_range', false); + } + }; + + $scope.toggleSearchRange = function() { + var newVal = getSet('search_range', !getSet('search_range')); + if (newVal && getSet('input_attrs.multiple')) { + getSet('input_attrs.multiple', false); + } + }; + $scope.toggleRequired = function() { getSet('required', !getSet('required')); return false; @@ -151,6 +198,10 @@ delete localDefn[item]; clearOut(ctrl.node, ['defn'].concat(path)); } + // When changing input_type + if (propName === 'input_type' && ctrl.node.defn && ctrl.node.defn.search_range && !ctrl.canBeRange()) { + delete ctrl.node.defn.search_range; + } return val; } return $scope.getProp(propName); @@ -171,10 +222,15 @@ return container; } + // Returns true only if value is [], {}, '', null, or undefined. + function isEmpty(val) { + return typeof val !== 'boolean' && typeof val !== 'number' && _.isEmpty(val); + } + // Recursively clears out empty arrays and objects function clearOut(parent, path) { var item; - while (path.length && _.every(drillDown(parent, path), _.isEmpty)) { + while (path.length && _.every(drillDown(parent, path), isEmpty)) { item = path.pop(); delete drillDown(parent, path)[item]; } diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup-menu.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup-menu.html index e4e5c71f06..6537d36de8 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup-menu.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup-menu.html @@ -6,5 +6,5 @@ <li><af-gui-menu-item-background node="$ctrl.node"></af-gui-menu-item-background></li> <li role="separator" class="divider"></li> <li> - <a href ng-click="$ctrl.deleteThis()"><span class="text-danger">{{:: ts('Delete this content') }}</span></a> + <a href ng-click="$ctrl.deleteThis()"><span class="text-danger"><i class="crm-i fa-trash"></i> {{:: ts('Delete this content') }}</span></a> </li> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup.component.js index 24482e4d35..8a7ace51f6 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiMarkup.component.js @@ -11,7 +11,7 @@ deleteThis: '&' }, controller: function($scope, $sce, $timeout) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; this.$onInit = function() { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.component.js index f8426a8adf..c85212f81f 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.component.js @@ -8,11 +8,12 @@ node: '=' }, controller: function($scope, afGui) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; this.$onInit = function() { ctrl.display = afGui.meta.searchDisplays[ctrl.node['search-name'] + '.' + ctrl.node['display-name']]; + ctrl.editUrl = CRM.url('civicrm/admin/search#/edit/' + ctrl.display.saved_search_id); }; } diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.html index e49a310cb9..7666a197af 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiSearchDisplay.html @@ -1,6 +1,18 @@ <div class="af-gui-bar"> <div class="form-inline"> <span>{{ $ctrl.display.label }}</span> + <div class="btn-group pull-right" af-gui-menu> + <button type="button" class="btn btn-default btn-xs dropdown-toggle af-gui-add-element-button" data-toggle="dropdown" title="{{:: ts('Configure') }}"> + <span><i class="crm-i fa-gear"></i></span> + </button> + <ul class="dropdown-menu" ng-if="menu.open"> + <li> + <a target="_blank" href="{{:: $ctrl.editUrl }}"> + <i class="crm-i fa-external-link"></i> {{:: ts('Edit Saved Search') }} + </a> + </li> + </ul> + </div> </div> </div> <p class="text-center af-gui-search-display"> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText-menu.html b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText-menu.html index eaef3b9781..2678f5abee 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText-menu.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText-menu.html @@ -25,5 +25,5 @@ </li> <li role="separator" class="divider"></li> <li> - <a href ng-click="$ctrl.deleteThis()"><span class="text-danger">{{:: ts('Delete this text') }}</span></a> + <a href ng-click="$ctrl.deleteThis()"><span class="text-danger"><i class="crm-i fa-trash"></i> {{:: ts('Delete this text') }}</span></a> </li> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText.component.js b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText.component.js index 6c045edd2f..f632c45976 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText.component.js +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/elements/afGuiText.component.js @@ -9,7 +9,7 @@ deleteThis: '&' }, controller: function($scope, afGui) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.afform_admin'), ctrl = this; $scope.tags = { diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/CheckBox.html b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/CheckBox.html index 08baba1ade..5bc73d186c 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/CheckBox.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/CheckBox.html @@ -1,7 +1,7 @@ -<ul class="crm-checkbox-list" id="{{ fieldId }}" ng-if="getOptions()"> - <li ng-repeat="opt in getOptions()" > - <input type="checkbox" disabled /> +<ul class="crm-checkbox-list" ng-if="$ctrl.getOptions()"> + <li ng-repeat="opt in $ctrl.getOptions()" > + <input type="checkbox" disabled > <label>{{ opt.label }}</label> </li> </ul> -<input type="checkbox" disabled ng-if="!getOptions()" /> +<input type="checkbox" disabled ng-if="!$ctrl.getOptions()" > diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Date.html b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Date.html index 43d00a6f0d..0772a24ed1 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Date.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Date.html @@ -1,5 +1,8 @@ <div class="form-inline"> - <input autocomplete="off" class="form-control crm-form-date crm-placeholder-icon" placeholder="" ng-model="getSet('input_attrs.placeholder')" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}" /> - <span class="addon fa fa-calendar"></span> - <input autocomplete="off" ng-if="getProp('input_attrs.time')" placeholder="" class="form-control crm-form-time crm-placeholder-icon" ng-model="getSet('input_attrs.timePlaceholder')" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}" /> + <div class="form-group" ng-repeat="i in $ctrl.getRangeElements('Date')"> + <span class="af-field-range-sep" ng-if="i">-</span> + <input autocomplete="off" class="form-control crm-form-date crm-placeholder-icon" placeholder="" ng-model="getSet('input_attrs.placeholder' + i)" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}" /> + <span class="addon fa fa-calendar"></span> + <input autocomplete="off" ng-if="getProp('input_attrs.time')" placeholder="" class="form-control crm-form-time crm-placeholder-icon" ng-model="getSet('input_attrs.timePlaceholder' + i)" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}" /> + </div> </div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Number.html b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Number.html index f65172c3d0..cf7ce8b934 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Number.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Number.html @@ -1 +1,6 @@ -<input autocomplete="off" class="form-control" ng-model="getSet('input_attrs.placeholder')" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}" /> +<div class="form-inline"> + <div class="form-group" ng-repeat="i in $ctrl.getRangeElements('Number')"> + <span class="af-field-range-sep" ng-if="i">-</span> + <input autocomplete="off" class="form-control" ng-model="getSet('input_attrs.placeholder' + i)" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}"/> + </div> +</div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Radio.html b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Radio.html index d1c47b073e..729d0ea225 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Radio.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Radio.html @@ -1,5 +1,5 @@ <div class="form-inline"> - <label ng-repeat="opt in getOptions()" class="radio" > + <label ng-repeat="opt in $ctrl.getOptions()" class="radio" > <input class="crm-form-radio" type="radio" disabled /> {{ opt.label }} </label> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Select.html b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Select.html index 127bbb03c7..542a304c48 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Select.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Select.html @@ -1,13 +1,17 @@ <div class="form-inline"> - <div class="input-group"> - <input autocomplete="off" class="form-control" placeholder="{{:: ts('Select') }}" title="{{:: ts('Click to add placeholder text') }}" ng-model="getSet('input_attrs.placeholder')" ng-model-options="{getterSetter: true}" type="text" /> - <div class="input-group-btn" af-gui-menu> - <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="crm-i fa-caret-down"></i></button> - <ul class="dropdown-menu" ng-if="menu.open"> - <li ng-repeat="opt in getOptions()" > - <a href>{{ opt.label }}</a> - </li> - </ul> + <div class="form-group" ng-repeat="i in $ctrl.getRangeElements('Select')"> + <span class="af-field-range-sep" ng-if="i">-</span> + <div class="input-group"> + <input autocomplete="off" class="form-control" placeholder="{{:: ts('Select') }}" title="{{:: ts('Click to add placeholder text') }}" ng-model="getSet('input_attrs.placeholder' + i)" ng-model-options="{getterSetter: true}" type="text" /> + <div class="input-group-btn" af-gui-menu> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="crm-i fa-caret-down"></i></button> + <ul class="dropdown-menu" ng-if="menu.open"> + <li ng-repeat="opt in $ctrl.getOptions()" > + <a href>{{ opt.label }}</a> + </li> + </ul> + </div> </div> </div> + <div ng-if="getProp('search_range') && $ctrl.getDefn().input_type === 'Date'" class="form-group" ng-include="'~/afGuiEditor/inputType/Date.html'"></div> </div> diff --git a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Text.html b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Text.html index f65172c3d0..5a3192f35a 100644 --- a/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Text.html +++ b/civicrm/ext/afform/admin/ang/afGuiEditor/inputType/Text.html @@ -1 +1,6 @@ -<input autocomplete="off" class="form-control" ng-model="getSet('input_attrs.placeholder')" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}" /> +<div class="form-inline"> + <div class="form-group" ng-repeat="i in $ctrl.getRangeElements('Text')"> + <span class="af-field-range-sep" ng-if="i">-</span> + <input autocomplete="off" class="form-control" ng-model="getSet('input_attrs.placeholder' + i)" ng-model-options="{getterSetter: true}" type="text" title="{{:: ts('Click to add placeholder text') }}"/> + </div> +</div> diff --git a/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php b/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php index e524a3f1f9..f4e4bd8634 100644 --- a/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php +++ b/civicrm/ext/afform/core/CRM/Afform/AfformScanner.php @@ -134,6 +134,7 @@ class CRM_Afform_AfformScanner { 'description' => '', 'is_dashlet' => FALSE, 'is_public' => FALSE, + 'is_token' => FALSE, 'permission' => 'access CiviCRM', 'type' => 'system', ]; diff --git a/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php b/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php index ef78fec0b4..3530e555db 100644 --- a/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php +++ b/civicrm/ext/afform/core/CRM/Afform/Page/AfformBase.php @@ -21,7 +21,7 @@ class CRM_Afform_Page_AfformBase extends CRM_Core_Page { // If the user has "access civicrm" append home breadcrumb if (CRM_Core_Permission::check('access CiviCRM')) { - CRM_Utils_System::appendBreadCrumb([['title' => ts('CiviCRM'), 'url' => CRM_Utils_System::url('civicrm')]]); + CRM_Utils_System::appendBreadCrumb([['title' => E::ts('CiviCRM'), 'url' => CRM_Utils_System::url('civicrm')]]); // If the user has "admin civicrm" & the admin extension is enabled if (CRM_Core_Permission::check('administer CiviCRM')) { if (($pagePath[1] ?? NULL) === 'admin') { diff --git a/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php b/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php index 7ac941fedf..10b965484d 100644 --- a/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php +++ b/civicrm/ext/afform/core/Civi/Afform/AfformMetadataInjector.php @@ -11,6 +11,8 @@ namespace Civi\Afform; +use CRM_Afform_ExtensionUtil as E; + /** * Class AfformMetadataInjector * @package Civi\Afform @@ -89,7 +91,7 @@ class AfformMetadataInjector { $params = [ 'action' => $action, 'where' => [['name', '=', $fieldName]], - 'select' => ['label', 'input_type', 'input_attrs', 'options'], + 'select' => ['label', 'input_type', 'input_attrs', 'help_pre', 'help_post', 'options'], 'loadOptions' => ['id', 'label'], // If the admin included this field on the form, then it's OK to get metadata about the field regardless of user permissions. 'checkPermissions' => FALSE, @@ -102,21 +104,38 @@ class AfformMetadataInjector { // Merge field definition data with whatever's already in the markup. $deep = ['input_attrs']; if ($fieldInfo) { + // Defaults for attributes not in spec + $fieldInfo['search_range'] = FALSE; + $existingFieldDefn = trim(pq($afField)->attr('defn') ?: ''); if ($existingFieldDefn && $existingFieldDefn[0] != '{') { // If it's not an object, don't mess with it. return; } - // Default placeholder for select inputs - if ($fieldInfo['input_type'] === 'Select') { - $fieldInfo['input_attrs'] = ($fieldInfo['input_attrs'] ?? []) + ['placeholder' => ts('Select')]; - } + // Get field defn from afform markup $fieldDefn = $existingFieldDefn ? \CRM_Utils_JS::getRawProps($existingFieldDefn) : []; + // This is the input type set on the form (may be different from the default input type in the field spec) + $inputType = !empty($fieldDefn['input_type']) ? \CRM_Utils_JS::decode($fieldDefn['input_type']) : $fieldInfo['input_type']; + // On a search form, search_range will present a pair of fields (or possibly 3 fields for date select + range) + $isSearchRange = !empty($fieldDefn['search_range']) && \CRM_Utils_JS::decode($fieldDefn['search_range']); - if ('Date' === $fieldInfo['input_type'] && !empty($fieldDefn['input_type']) && \CRM_Utils_JS::decode($fieldDefn['input_type']) === 'Select') { - $fieldInfo['input_attrs']['placeholder'] = ts('Select'); - $fieldInfo['options'] = \CRM_Utils_Array::makeNonAssociative(\CRM_Core_OptionGroup::values('relative_date_filters'), 'id', 'label'); + // Default placeholder for select inputs + if ($inputType === 'Select') { + $fieldInfo['input_attrs']['placeholder'] = E::ts('Select'); + } + + if ($fieldInfo['input_type'] === 'Date') { + // This flag gets used by the afField controller + $fieldDefn['is_date'] = TRUE; + // For date fields that have been converted to Select + if ($inputType === 'Select') { + $dateOptions = \CRM_Utils_Array::makeNonAssociative(\CRM_Core_OptionGroup::values('relative_date_filters'), 'id', 'label'); + if ($isSearchRange) { + $dateOptions = array_merge([['id' => '{}', 'label' => E::ts('Choose Date Range')]], $dateOptions); + } + $fieldInfo['options'] = $dateOptions; + } } foreach ($fieldInfo as $name => $prop) { diff --git a/civicrm/ext/afform/core/Civi/Afform/StatusChecks.php b/civicrm/ext/afform/core/Civi/Afform/StatusChecks.php new file mode 100644 index 0000000000..c1a7d7c2ae --- /dev/null +++ b/civicrm/ext/afform/core/Civi/Afform/StatusChecks.php @@ -0,0 +1,67 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Afform; + +use CRM_Afform_ExtensionUtil as E; + +class StatusChecks { + + /** + * Afform has a soft dependency on Authx, which is used to generate authenticated email links. + * + * @param \Civi\Core\Event\GenericHookEvent $e + * @see CRM_Utils_Hook::check() + */ + public static function hook_civicrm_check($e) { + $hasAuthx = \CRM_Extension_System::singleton()->getMapper()->isActiveModule('authx'); + $tokenFormCount = count(Tokens::getTokenForms()); + if (!$hasAuthx) { + if ($tokenFormCount) { + $e->messages[] = new \CRM_Utils_Check_Message( + 'afform_token_authx', + E::ts('Email token support has been configured for %2 form(s), which requires extended authentication services. Please enable "AuthX" in <a href="%1">Manage Extensions</a>.', [ + 1 => \CRM_Utils_System::url('civicrm/admin/extensions', 'reset=1'), + 2 => $tokenFormCount, + ]), + E::ts('AuthX Required'), + \Psr\Log\LogLevel::ERROR, + 'fa-chain-broken' + ); + } + else { + $e->messages[] = new \CRM_Utils_Check_Message( + 'afform_token_authx', + E::ts('To generate authenticated email links for custom forms, enable extended authentication services (AuthX) in <a href="%1">Manage Extensions</a>.', [ + 1 => \CRM_Utils_System::url('civicrm/admin/extensions', 'reset=1'), + ]), + E::ts('AuthX Suggested'), + \Psr\Log\LogLevel::INFO, + 'fa-lightbulb-o' + ); + } + } + + if ($hasAuthx && $tokenFormCount > 0 && !in_array('jwt', \Civi::settings()->get('authx_auto_cred'))) { + $e->messages[] = new \CRM_Utils_Check_Message( + 'afform_token_authx', + E::ts('Email token support has been configured for %1 form(s). This requires JWT authentication, <code>authx_auto_cred</code> does not include JWT. ', [ + 1 => $tokenFormCount, + ]), + E::ts('AuthX Configuration'), + \Psr\Log\LogLevel::ERROR, + 'fa-chain-broken' + ); + + } + } + +} diff --git a/civicrm/ext/afform/core/Civi/Afform/Tokens.php b/civicrm/ext/afform/core/Civi/Afform/Tokens.php new file mode 100644 index 0000000000..bc12d8477a --- /dev/null +++ b/civicrm/ext/afform/core/Civi/Afform/Tokens.php @@ -0,0 +1,204 @@ +<?php +/* + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC. All rights reserved. | + | | + | This work is published under the GNU AGPLv3 license with some | + | permitted exceptions and without any warranty. For full license | + | and copyright information, see https://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +namespace Civi\Afform; + +use Civi\Core\Event\GenericHookEvent; +use Civi\Crypto\Exception\CryptoException; +use CRM_Afform_ExtensionUtil as E; + +/** + * Every afform with the property `is_token=true` should have a corresponding + * set of tokens, `{afform.myFormUrl}` and `{afform.myFormLink}`. + * + * @see MockPublicFormTest + * @package Civi\Afform + */ +class Tokens { + + /** + * CKEditor makes it hard to set an `href` to a token, so we often get + * this munged `'http://{token}` data. + * + * @see CRM_Utils_Hook::alterMailContent + */ + public static function applyCkeditorWorkaround(GenericHookEvent $e) { + foreach (array_keys($e->content) as $field) { + $e->content[$field] = preg_replace(';https?://(\{afform.*Url\});', '$1', $e->content[$field]); + } + } + + /** + * Expose tokens for use in UI. + * + * @param \Civi\Core\Event\GenericHookEvent $e + * @see \CRM_Utils_Hook::tokens() + */ + public static function hook_civicrm_tokens(GenericHookEvent $e) { + $tokenForms = static::getTokenForms(); + foreach ($tokenForms as $tokenName => $afform) { + $e->tokens['afform']["afform.{$tokenName}Url"] = E::ts('%1 (URL)', [1 => $afform['title'] ?? $afform['name']]); + $e->tokens['afform']["afform.{$tokenName}Link"] = E::ts('%1 (Full Hyperlink)', [1 => $afform['title'] ?? $afform['name']]); + } + } + + /** + * Substitute any tokens of the form `{afform.myFormUrl}` or `{afform.myFormLink}` with actual values. + * + * @param \Civi\Core\Event\GenericHookEvent $e + * @see \CRM_Utils_Hook::tokenValues() + */ + public static function hook_civicrm_tokenValues(GenericHookEvent $e) { + try { + // Depending on the caller, $tokens['afform'] might be ['fooUrl'] or ['fooUrl'=>1]. Because... why not! + $activeAfformTokens = array_merge(array_keys($e->tokens['afform'] ?? []), array_values($e->tokens['afform'] ?? [])); + + $tokenForms = static::getTokenForms(); + foreach ($tokenForms as $formName => $afform) { + if (!array_intersect($activeAfformTokens, ["{$formName}Url", "{$formName}Link"])) { + continue; + } + + if (empty($afform['server_route'])) { + continue; + } + + if (!is_array($e->contactIDs)) { + $url = self::createUrl($afform, $e->contactIDs); + $e->details["afform.{$formName}Url"] = $url; + $e->details["afform.{$formName}Link"] = sprintf('<a href="%s">%s</a>', htmlentities($url), htmlentities($afform['title'] ?? $afform['name'])); + } + else { + foreach ($e->contactIDs as $cid) { + $url = self::createUrl($afform, $cid); + $e->details[$cid]["afform.{$formName}Url"] = $url; + $e->details[$cid]["afform.{$formName}Link"] = sprintf('<a href="%s">%s</a>', htmlentities($url), htmlentities($afform['title'] ?? $afform['name'])); + } + } + } + } + catch (CryptoException $ex) { + \Civi::log()->warning('Civi\Afform\LegacyTokens cannot generate tokens due to crypto exception.', ['exception' => $ex]); + } + } + + ///** + // * Expose tokens for use in UI. + // * + // * @param \Civi\Token\Event\TokenRegisterEvent $e + // */ + //public static function onRegister(\Civi\Token\Event\TokenRegisterEvent $e) { + // $tokenForms = static::getTokenForms(); + // foreach ($tokenForms as $tokenName => $afform) { + // $e->register([ + // 'entity' => 'afform', + // 'field' => $tokenName . 'Url', + // 'label' => E::ts('View Form: %1 (URL)', [1 => $afform['title'] ?? $afform['name']]), + // ]); + // $e->register([ + // 'entity' => 'afform', + // 'field' => $tokenName . 'Link', + // 'label' => E::ts('View Form: %1 (Full Hyperlink)', [1 => $afform['title'] ?? $afform['name']]), + // ]); + // } + //} + + ///** + // * Substitute any tokens of the form `{afform.myFormUrl}` or `{afform.myFormLink}` with actual values. + // * + // * @param \Civi\Token\Event\TokenValueEvent $e + // */ + //public static function onEvaluate(\Civi\Token\Event\TokenValueEvent $e) { + // $activeTokens = $e->getTokenProcessor()->getMessageTokens(); + // if (empty($activeTokens['afform'])) { + // return; + // } + // + // $tokenForms = static::getTokenForms(); + // foreach ($tokenForms as $formName => $afform) { + // if (!array_intersect($activeTokens['afform'], ["{$formName}Url", "{$formName}Link"])) { + // continue; + // } + // + // if (empty($afform['server_route'])) { + // \Civi::log() + // ->warning('Civi\Afform\Tokens: Cannot generate link for {formName} -- missing server_route', [ + // 'formName' => $formName, + // ]); + // continue; + // } + // + // foreach ($e->getRows() as $row) { + // /** @var \Civi\Token\TokenRow $row */ + // try { + // $url = self::createUrl($afform, $row->context['contactId']); + // $row->format('text/plain')->tokens('afform', "{$formName}Url", $url); + // $row->format('text/html')->tokens('afform', "{$formName}Link", + // sprintf('<a href="%s">%s</a>', htmlentities($url), htmlentities($afform['title'] ?? $afform['name']))); + // } + // catch (CryptoException $e) { + // \Civi::log()->warning('Civi\Afform\Tokens cannot generate tokens due to crypto exception.', ['exception' => $e]); + // } + // } + // } + //} + + /** + * Get a list of forms that have token support enabled. + * + * @return array + * $result[$formName] = ['name' => $formName, 'title' => $formTitle, 'server_route' => $route]; + */ + public static function getTokenForms() { + if (!isset(\Civi::$statics[__CLASS__]['tokenForms'])) { + $tokenForms = (array) \Civi\Api4\Afform::get(0) + ->addWhere('is_token', '=', TRUE) + ->addSelect('name', 'title', 'server_route', 'is_public') + ->execute() + ->indexBy('name'); + \Civi::$statics[__CLASS__]['tokenForms'] = $tokenForms; + } + return \Civi::$statics[__CLASS__]['tokenForms']; + } + + /** + * Generate an authenticated URL for viewing this form. + * + * @param array $afform + * @param int $contactId + * + * @return string + * @throws \Civi\Crypto\Exception\CryptoException + */ + public static function createUrl($afform, $contactId): string { + $expires = \CRM_Utils_Time::time() + + (\Civi::settings()->get('checksum_timeout') * 24 * 60 * 60); + + /** @var \Civi\Crypto\CryptoJwt $jwt */ + $jwt = \Civi::service('crypto.jwt'); + + $bearerToken = "Bearer " . $jwt->encode([ + 'exp' => $expires, + 'sub' => "cid:" . $contactId, + 'scope' => 'authx', + ]); + + $url = \CRM_Utils_System::url($afform['server_route'], + ['_authx' => $bearerToken, '_authxSes' => 1], + TRUE, + NULL, + FALSE, + $afform['is_public'] ?? TRUE + ); + return $url; + } + +} diff --git a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php index 58afed97dd..8e32e56fe0 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php +++ b/civicrm/ext/afform/core/Civi/Api4/Action/Afform/Get.php @@ -4,6 +4,7 @@ namespace Civi\Api4\Action\Afform; use Civi\Api4\CustomField; use Civi\Api4\CustomGroup; +use CRM_Afform_ExtensionUtil as E; /** * @inheritDoc @@ -127,10 +128,11 @@ class Get extends \Civi\Api4\Generic\BasicGetAction { 'name' => $name, 'type' => 'block', 'requires' => [], - 'title' => ts('%1 block (default)', [1 => $custom['title']]), + 'title' => E::ts('%1 block (default)', [1 => $custom['title']]), 'description' => '', 'is_dashlet' => FALSE, 'is_public' => FALSE, + 'is_token' => FALSE, 'permission' => 'access CiviCRM', 'join' => 'Custom_' . $custom['name'], 'block' => $custom['extends'], diff --git a/civicrm/ext/afform/core/Civi/Api4/Afform.php b/civicrm/ext/afform/core/Civi/Api4/Afform.php index 0106f09b7f..f6212da302 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Afform.php +++ b/civicrm/ext/afform/core/Civi/Api4/Afform.php @@ -153,6 +153,14 @@ class Afform extends Generic\AbstractEntity { 'name' => 'is_public', 'data_type' => 'Boolean', ], + [ + 'name' => 'is_token', + 'data_type' => 'Boolean', + ], + [ + 'name' => 'contact_summary', + 'data_type' => 'String', + ], [ 'name' => 'repeat', 'data_type' => 'Mixed', @@ -163,26 +171,33 @@ class Afform extends Generic\AbstractEntity { [ 'name' => 'permission', ], + [ + 'name' => 'redirect', + ], [ 'name' => 'layout', 'data_type' => 'Array', ], ]; - + // Calculated fields returned by get action if ($self->getAction() === 'get') { $fields[] = [ 'name' => 'module_name', + 'readonly' => TRUE, ]; $fields[] = [ 'name' => 'directive_name', + 'readonly' => TRUE, ]; $fields[] = [ 'name' => 'has_local', 'data_type' => 'Boolean', + 'readonly' => TRUE, ]; $fields[] = [ 'name' => 'has_base', 'data_type' => 'Boolean', + 'readonly' => TRUE, ]; } diff --git a/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php b/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php index 18f9ced57f..bee09ea626 100644 --- a/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php +++ b/civicrm/ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php @@ -79,7 +79,6 @@ trait AfformSaveTrait { \CRM_Core_Menu::store(); \CRM_Core_BAO_Navigation::resetNavigation(); } - // FIXME if asset-caching is enabled, then flush the asset cache. $item['module_name'] = _afform_angular_module_name($item['name'], 'camel'); $item['directive_name'] = _afform_angular_module_name($item['name'], 'dash'); diff --git a/civicrm/ext/afform/core/afform.php b/civicrm/ext/afform/core/afform.php index e34c558922..bebc5a7349 100644 --- a/civicrm/ext/afform/core/afform.php +++ b/civicrm/ext/afform/core/afform.php @@ -12,7 +12,7 @@ use Civi\Api4\Action\Afform\Submit; */ function _afform_fields_filter($params) { $result = []; - $fields = \Civi\Api4\Afform::getfields()->setCheckPermissions(FALSE)->setAction('create')->execute()->indexBy('name'); + $fields = \Civi\Api4\Afform::getfields(FALSE)->setAction('create')->execute()->indexBy('name'); foreach ($fields as $fieldName => $field) { if (isset($params[$fieldName])) { $result[$fieldName] = $params[$fieldName]; @@ -49,10 +49,19 @@ function afform_civicrm_config(&$config) { } Civi::$statics[__FUNCTION__] = 1; - Civi::dispatcher()->addListener(Submit::EVENT_NAME, [Submit::class, 'processContacts'], 500); - Civi::dispatcher()->addListener(Submit::EVENT_NAME, [Submit::class, 'processGenericEntity'], -1000); - Civi::dispatcher()->addListener('hook_civicrm_angularModules', ['\Civi\Afform\AngularDependencyMapper', 'autoReq'], -1000); - Civi::dispatcher()->addListener('hook_civicrm_alterAngular', ['\Civi\Afform\AfformMetadataInjector', 'preprocess']); + $dispatcher = Civi::dispatcher(); + $dispatcher->addListener(Submit::EVENT_NAME, [Submit::class, 'processContacts'], 500); + $dispatcher->addListener(Submit::EVENT_NAME, [Submit::class, 'processGenericEntity'], -1000); + $dispatcher->addListener('hook_civicrm_angularModules', ['\Civi\Afform\AngularDependencyMapper', 'autoReq'], -1000); + $dispatcher->addListener('hook_civicrm_alterAngular', ['\Civi\Afform\AfformMetadataInjector', 'preprocess']); + $dispatcher->addListener('hook_civicrm_check', ['\Civi\Afform\StatusChecks', 'hook_civicrm_check']); + + // Register support for email tokens + if (CRM_Extension_System::singleton()->getMapper()->isActiveModule('authx')) { + $dispatcher->addListener('hook_civicrm_alterMailContent', ['\Civi\Afform\Tokens', 'applyCkeditorWorkaround']); + $dispatcher->addListener('hook_civicrm_tokens', ['\Civi\Afform\Tokens', 'hook_civicrm_tokens']); + $dispatcher->addListener('hook_civicrm_tokenValues', ['\Civi\Afform\Tokens', 'hook_civicrm_tokenValues']); + } } /** @@ -156,7 +165,7 @@ function afform_civicrm_managed(&$entities) { 'domain_id' => CRM_Core_BAO_Domain::getDomain()->id, 'is_active' => TRUE, 'name' => $afform['name'], - 'label' => $afform['title'] ?? ts('(Untitled)'), + 'label' => $afform['title'] ?? E::ts('(Untitled)'), 'directive' => _afform_angular_module_name($afform['name'], 'dash'), 'permission' => "@afform:" . $afform['name'], ], @@ -165,16 +174,94 @@ function afform_civicrm_managed(&$entities) { } /** - * Implements hook_civicrm_caseTypes(). + * Implements hook_civicrm_tabset(). * - * Generate a list of case-types. + * Adds afforms as contact summary tabs. + */ +function afform_civicrm_tabset($tabsetName, &$tabs, $context) { + if ($tabsetName !== 'civicrm/contact/view') { + return; + } + $scanner = \Civi::service('afform_scanner'); + $weight = 111; + foreach ($scanner->getMetas() as $afform) { + if (!empty($afform['contact_summary']) && $afform['contact_summary'] === 'tab') { + $module = _afform_angular_module_name($afform['name']); + $tabs[] = [ + 'id' => $afform['name'], + 'title' => $afform['title'], + 'weight' => $weight++, + 'icon' => 'crm-i fa-list-alt', + 'is_active' => TRUE, + 'template' => 'afform/contactSummary/AfformTab.tpl', + 'module' => $module, + 'directive' => _afform_angular_module_name($afform['name'], 'dash'), + ]; + // If this is the real contact summary page (and not a callback from ContactLayoutEditor), load module. + if (empty($context['caller'])) { + Civi::service('angularjs.loader')->addModules($module); + } + } + } +} + +/** + * Implements hook_civicrm_pageRun(). * - * Note: This hook only runs in CiviCRM 4.4+. + * Adds afforms as contact summary blocks. + */ +function afform_civicrm_pageRun(&$page) { + if (get_class($page) !== 'CRM_Contact_Page_View_Summary') { + return; + } + $scanner = \Civi::service('afform_scanner'); + $cid = $page->get('cid'); + $side = 'left'; + foreach ($scanner->getMetas() as $afform) { + if (!empty($afform['contact_summary']) && $afform['contact_summary'] === 'block') { + $module = _afform_angular_module_name($afform['name']); + $block = [ + 'module' => $module, + 'directive' => _afform_angular_module_name($afform['name'], 'dash'), + ]; + $content = CRM_Core_Smarty::singleton()->fetchWith('afform/contactSummary/AfformBlock.tpl', ['contactId' => $cid, 'block' => $block]); + CRM_Core_Region::instance("contact-basic-info-$side")->add([ + 'markup' => '<div class="crm-summary-block">' . $content . '</div>', + 'weight' => 1, + ]); + Civi::service('angularjs.loader')->addModules($module); + $side = $side === 'left' ? 'right' : 'left'; + } + } +} + +/** + * Implements hook_civicrm_contactSummaryBlocks(). * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes + * @link https://github.com/civicrm/org.civicrm.contactlayout */ -function afform_civicrm_caseTypes(&$caseTypes) { - _afform_civix_civicrm_caseTypes($caseTypes); +function afform_civicrm_contactSummaryBlocks(&$blocks) { + $scanner = \Civi::service('afform_scanner'); + foreach ($scanner->getMetas() as $afform) { + if (!empty($afform['contact_summary']) && $afform['contact_summary'] === 'block') { + // Provide our own group for this block to visually distinguish it on the contact summary editor palette. + $blocks += [ + 'afform' => [ + 'title' => ts('Form Builder'), + 'icon' => 'fa-list-alt', + 'blocks' => [], + ], + ]; + $blocks['afform']['blocks'][$afform['name']] = [ + 'title' => $afform['title'], + 'tpl_file' => 'afform/contactSummary/AfformBlock.tpl', + 'module' => _afform_angular_module_name($afform['name']), + 'directive' => _afform_angular_module_name($afform['name'], 'dash'), + 'sample' => [], + 'edit' => 'civicrm/admin/afform#/edit/' . $afform['name'], + ]; + } + } } /** @@ -271,10 +358,15 @@ function afform_civicrm_buildAsset($asset, $params, &$mimeType, &$content) { } $moduleName = _afform_angular_module_name($params['name'], 'camel'); + $formMetaData = (array) civicrm_api4('Afform', 'get', [ + 'checkPermissions' => FALSE, + 'select' => ['redirect', 'name'], + 'where' => [['name', '=', $params['name']]], + ], 0); $smarty = CRM_Core_Smarty::singleton(); $smarty->assign('afform', [ 'camel' => $moduleName, - 'meta' => ['name' => $params['name']], + 'meta' => $formMetaData, 'templateUrl' => "~/$moduleName/$moduleName.aff.html", ]); $mimeType = 'text/javascript'; @@ -348,7 +440,7 @@ function afform_civicrm_permissionList(&$permissions) { foreach ($scanner->getMetas() as $name => $meta) { $permissions['@afform:' . $name] = [ 'group' => 'afform', - 'title' => ts('Afform: Inherit permission of %1', [ + 'title' => E::ts('Afform: Inherit permission of %1', [ 1 => $name, ]), ]; @@ -402,3 +494,62 @@ function afform_civicrm_alterApiRoutePermissions(&$permissions, $entity, $action } } } + +/** + * Implements hook_civicrm_preProcess(). + * + * Wordpress only: Adds Afforms to the shortcode dialog (when editing pages/posts). + */ +function afform_civicrm_preProcess($formName, &$form) { + if ($formName === 'CRM_Core_Form_ShortCode') { + $form->components['afform'] = [ + 'label' => E::ts('Form Builder'), + 'select' => [ + 'key' => 'name', + 'entity' => 'Afform', + 'select' => ['minimumInputLength' => 0], + 'api' => [ + 'params' => ['type' => ['IN' => ['form', 'search']]], + ], + ], + ]; + } +} + +// Wordpress only: Register callback for rendering shortcodes +if (function_exists('add_filter')) { + add_filter('civicrm_shortcode_get_markup', 'afform_shortcode_content', 10, 4); +} + +/** + * Wordpress only: Render Afform content for shortcodes. + * + * @param string $content + * HTML Markup + * @param array $atts + * Shortcode attributes. + * @param array $args + * Existing shortcode arguments. + * @param string $context + * How many shortcodes are present on the page: 'single' or 'multiple'. + * @return string + * Modified markup. + */ +function afform_shortcode_content($content, $atts, $args, $context) { + if ($atts['component'] === 'afform') { + $afform = civicrm_api4('Afform', 'get', [ + 'select' => ['directive_name', 'module_name'], + 'where' => [['name', '=', $atts['name']]], + ])->first(); + if ($afform) { + Civi::service('angularjs.loader')->addModules($afform['module_name']); + $content = " + <div class='crm-container' id='bootstrap-theme'> + <crm-angular-js modules='{$afform['module_name']}'> + <{$afform['directive_name']}></{$afform['directive_name']}> + </crm-angular-js> + </div>"; + } + } + return $content; +} diff --git a/civicrm/ext/afform/core/ang/af/afField.component.js b/civicrm/ext/afform/core/ang/af/afField.component.js index 439f3ddcfe..8a18811f21 100644 --- a/civicrm/ext/afform/core/ang/af/afField.component.js +++ b/civicrm/ext/afform/core/ang/af/afField.component.js @@ -13,12 +13,15 @@ defn: '=' }, controller: function($scope, $element, crmApi4) { - var ts = $scope.ts = CRM.ts('afform'), + var ts = $scope.ts = CRM.ts('org.civicrm.afform'), ctrl = this, boolOptions = [{id: true, label: ts('Yes')}, {id: false, label: ts('No')}], // Only used for is_primary radio button noOptions = [{id: true, label: ''}]; + // Attributes for each of the low & high date fields when using search_range + this.inputAttrs = []; + this.$onInit = function() { var closestController = $($element).closest('[af-fieldset],[af-join],[af-repeat-item]'); $scope.dataProvider = closestController.is('[af-repeat-item]') ? ctrl.afRepeatItem : ctrl.afJoin || ctrl.afFieldset; @@ -26,6 +29,27 @@ $element.addClass('af-field-type-' + _.kebabCase(ctrl.defn.input_type)); + + if (ctrl.defn.search_range) { + // Initialize value as object unless using relative date select + var initialVal = $scope.dataProvider.getFieldData()[ctrl.fieldName]; + if (!_.isArray($scope.dataProvider.getFieldData()[ctrl.fieldName]) && + (ctrl.defn.input_type !== 'Select' || !ctrl.defn.is_date || initialVal !== '{}') + ) { + $scope.dataProvider.getFieldData()[ctrl.fieldName] = {}; + } + // Initialize inputAttrs (only used for datePickers at the moment) + if (ctrl.defn.is_date) { + this.inputAttrs.push(ctrl.defn.input_attrs || {}); + for (var i = 1; i <= 2; ++i) { + var attrs = _.cloneDeep(ctrl.defn.input_attrs || {}); + attrs.placeholder = attrs['placeholder' + i]; + attrs.timePlaceholder = attrs['timePlaceholder' + i]; + ctrl.inputAttrs.push(attrs); + } + } + } + // is_primary field - watch others in this afRepeat block to ensure only one is selected if (ctrl.fieldName === 'is_primary' && 'repeatIndex' in $scope.dataProvider) { $scope.$watch('dataProvider.afRepeat.getEntityController().getData()', function (items, prev) { @@ -76,6 +100,41 @@ }; }; + // Getter/Setter function for fields of type select. + $scope.getSetSelect = function(val) { + var currentVal = $scope.dataProvider.getFieldData()[ctrl.fieldName]; + // Setter + if (arguments.length) { + if (ctrl.defn.is_date) { + // The '{}' string is a placeholder for "choose date range" + if (val === '{}') { + val = !_.isPlainObject(currentVal) ? {} : currentVal; + } + } + // If search_range, this select is the "low" value (the high value uses ng-model without a getterSetter fn) + else if (ctrl.defn.search_range) { + return ($scope.dataProvider.getFieldData()[ctrl.fieldName]['>='] = val); + } + // A multi-select needs to split string value into an array + if (ctrl.defn.input_attrs && ctrl.defn.input_attrs.multiple) { + val = val ? val.split(',') : []; + } + return ($scope.dataProvider.getFieldData()[ctrl.fieldName] = val); + } + // Getter + if (_.isArray(currentVal)) { + return currentVal.join(','); + } + if (ctrl.defn.is_date) { + return _.isPlainObject(currentVal) ? '{}' : currentVal; + } + // If search_range, this select is the "low" value (the high value uses ng-model without a getterSetter fn) + else if (ctrl.defn.search_range) { + return currentVal['>=']; + } + return currentVal; + }; + } }); })(angular, CRM.$, CRM._); diff --git a/civicrm/ext/afform/core/ang/af/afField.html b/civicrm/ext/afform/core/ang/af/afField.html index 1d41d2cc13..88e226c43b 100644 --- a/civicrm/ext/afform/core/ang/af/afField.html +++ b/civicrm/ext/afform/core/ang/af/afField.html @@ -1,6 +1,6 @@ -<label class="crm-af-field-label" ng-if="$ctrl.defn.label" for="{{:: fieldId }}"> +<label class="crm-af-field-label" ng-if=":: $ctrl.defn.label" for="{{:: fieldId }}"> {{:: $ctrl.defn.label }} </label> -<p class="crm-af-field-help-pre" ng-if="$ctrl.defn.help_pre">{{:: $ctrl.defn.help_pre }}</p> +<p class="crm-af-field-help-pre" ng-if=":: $ctrl.defn.help_pre">{{:: $ctrl.defn.help_pre }}</p> <div class="crm-af-field" ng-include="'~/af/fields/' + $ctrl.defn.input_type + '.html'"></div> -<p class="crm-af-field-help-post" ng-if="$ctrl.defn.help_post">{{:: $ctrl.defn.help_post }}</p> +<p class="crm-af-field-help-post" ng-if=":: $ctrl.defn.help_post">{{:: $ctrl.defn.help_post }}</p> diff --git a/civicrm/ext/afform/core/ang/af/afForm.component.js b/civicrm/ext/afform/core/ang/af/afForm.component.js index d7b0d8fc4e..2c36a9ec07 100644 --- a/civicrm/ext/afform/core/ang/af/afForm.component.js +++ b/civicrm/ext/afform/core/ang/af/afForm.component.js @@ -4,7 +4,7 @@ bindings: { ctrl: '@' }, - controller: function($scope, $routeParams, $timeout, crmApi4, crmStatus) { + controller: function($scope, $routeParams, $timeout, crmApi4, crmStatus, $window, $location) { var schema = {}, data = {}, ctrl = this; @@ -54,6 +54,18 @@ this.submit = function submit() { var submission = crmApi4('Afform', 'submit', {name: ctrl.getFormMeta().name, args: $routeParams, values: data}); + var metaData = ctrl.getFormMeta(); + if (metaData.redirect) { + submission.then(function() { + var url = metaData.redirect; + if (url.indexOf('civicrm/') === 0) { + url = CRM.url(url); + } else if (url.indexOf('/') === 0) { + url = $location.protocol() + '://' + $location.host() + url; + } + $window.location.href = url; + }); + } return crmStatus({start: ts('Saving'), success: ts('Saved')}, submission); }; } diff --git a/civicrm/ext/afform/core/ang/af/fields/ChainSelect.html b/civicrm/ext/afform/core/ang/af/fields/ChainSelect.html index d34450e650..d1763602ff 100644 --- a/civicrm/ext/afform/core/ang/af/fields/ChainSelect.html +++ b/civicrm/ext/afform/core/ang/af/fields/ChainSelect.html @@ -1 +1 @@ -<input crm-ui-select="{data: select2Options, multiple: $ctrl.defn.input_attrs.multiple, placeholder: $ctrl.defn.input_attrs.placeholder}" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" /> +<input class="form-control" crm-ui-select="{data: select2Options, multiple: $ctrl.defn.input_attrs.multiple, placeholder: $ctrl.defn.input_attrs.placeholder}" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" /> diff --git a/civicrm/ext/afform/core/ang/af/fields/CheckBox.html b/civicrm/ext/afform/core/ang/af/fields/CheckBox.html index 8b1f8b2157..f2edac2a4e 100644 --- a/civicrm/ext/afform/core/ang/af/fields/CheckBox.html +++ b/civicrm/ext/afform/core/ang/af/fields/CheckBox.html @@ -1,7 +1,7 @@ <ul class="crm-checkbox-list" id="{{ fieldId }}" ng-if="$ctrl.defn.options"> <li ng-repeat="opt in $ctrl.defn.options track by opt.id" > <input type="checkbox" checklist-model="dataProvider.getFieldData()[$ctrl.fieldName]" id="{{ fieldId + opt.id }}" checklist-value="opt.id" /> - <label for="{{ fieldId + opt.id }}">{{ opt.label }}</label> + <label for="{{ fieldId + opt.id }}">{{:: opt.label }}</label> </li> </ul> -<input type="checkbox" ng-if="!$ctrl.defn.options" id="{{ fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" /> +<input type="checkbox" ng-if="!$ctrl.defn.options" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" /> diff --git a/civicrm/ext/afform/core/ang/af/fields/Date.html b/civicrm/ext/afform/core/ang/af/fields/Date.html index 7e8a34f0fa..2707b64a4a 100644 --- a/civicrm/ext/afform/core/ang/af/fields/Date.html +++ b/civicrm/ext/afform/core/ang/af/fields/Date.html @@ -1 +1,6 @@ -<input crm-ui-datepicker="$ctrl.defn.input_attrs" id="{{ fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" /> +<input ng-if=":: !$ctrl.defn.search_range" class="form-control" crm-ui-datepicker=":: $ctrl.defn.input_attrs" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" /> +<div ng-if=":: $ctrl.defn.search_range" class="form-inline"> + <input class="form-control" crm-ui-datepicker=":: $ctrl.inputAttrs[1]" id="{{:: fieldId }}1" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]['>=']" /> + <span class="af-field-range-sep">-</span> + <input class="form-control" crm-ui-datepicker=":: $ctrl.inputAttrs[2]" id="{{:: fieldId }}2" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]['<=']" /> +</div> diff --git a/civicrm/ext/afform/core/ang/af/fields/Number.html b/civicrm/ext/afform/core/ang/af/fields/Number.html index 3b2b7bbc23..2675bcc865 100644 --- a/civicrm/ext/afform/core/ang/af/fields/Number.html +++ b/civicrm/ext/afform/core/ang/af/fields/Number.html @@ -1 +1,6 @@ -<input class="crm-form-text" type="number" id="{{ fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" placeholder="{{ $ctrl.defn.input_attrs.placeholder }}" /> +<input ng-if=":: !$ctrl.defn.search_range" class="form-control" type="number" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" placeholder="{{:: $ctrl.defn.input_attrs.placeholder }}" > +<div ng-if=":: $ctrl.defn.search_range" class="form-inline"> + <input class="form-control" type="number" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]['>=']" placeholder="{{:: $ctrl.defn.input_attrs.placeholder }}" > + <span class="af-field-range-sep">-</span> + <input class="form-control" type="number" id="{{:: fieldId }}2" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]['<=']" placeholder="{{:: $ctrl.defn.input_attrs.placeholder2 }}" > +</div> diff --git a/civicrm/ext/afform/core/ang/af/fields/Radio.html b/civicrm/ext/afform/core/ang/af/fields/Radio.html index ea17957eb2..225250918a 100644 --- a/civicrm/ext/afform/core/ang/af/fields/Radio.html +++ b/civicrm/ext/afform/core/ang/af/fields/Radio.html @@ -1,4 +1,4 @@ <label ng-repeat="opt in getOptions() track by opt.id" > <input class="crm-form-radio" type="radio" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" ng-value="opt.id" /> - {{ opt.label }} + {{:: opt.label }} </label> diff --git a/civicrm/ext/afform/core/ang/af/fields/RichTextEditor.html b/civicrm/ext/afform/core/ang/af/fields/RichTextEditor.html index 4b5e52952a..af4d4aabaa 100644 --- a/civicrm/ext/afform/core/ang/af/fields/RichTextEditor.html +++ b/civicrm/ext/afform/core/ang/af/fields/RichTextEditor.html @@ -1 +1 @@ -<textarea crm-ui-richtext id="{{ fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" ></textarea> +<textarea crm-ui-richtext id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" ></textarea> diff --git a/civicrm/ext/afform/core/ang/af/fields/Select.html b/civicrm/ext/afform/core/ang/af/fields/Select.html index d34450e650..c7edf4850a 100644 --- a/civicrm/ext/afform/core/ang/af/fields/Select.html +++ b/civicrm/ext/afform/core/ang/af/fields/Select.html @@ -1 +1,5 @@ -<input crm-ui-select="{data: select2Options, multiple: $ctrl.defn.input_attrs.multiple, placeholder: $ctrl.defn.input_attrs.placeholder}" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" /> +<div class="{{:: $ctrl.defn.search_range ? 'form-inline' : 'form-group' }}"> + <input class="form-control" id="{{:: fieldId }}" crm-ui-select="{data: select2Options, multiple: $ctrl.defn.input_attrs.multiple, placeholder: $ctrl.defn.input_attrs.placeholder}" ng-model="getSetSelect" ng-model-options="{getterSetter: true}" > + <input class="form-control" ng-if=":: $ctrl.defn.search_range && !$ctrl.defn.is_date" id="{{:: fieldId }}2" crm-ui-select="{data: select2Options, placeholder: $ctrl.defn.input_attrs.placeholder2 || $ctrl.defn.input_attrs.placeholder}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]['<=']" > + <div ng-if="$ctrl.defn.search_range && $ctrl.defn.is_date && getSetSelect() === '{}'" class="form-group" ng-include="'~/af/fields/Date.html'"></div> +</div> diff --git a/civicrm/ext/afform/core/ang/af/fields/Text.html b/civicrm/ext/afform/core/ang/af/fields/Text.html index 89cc8cefb2..862fa07322 100644 --- a/civicrm/ext/afform/core/ang/af/fields/Text.html +++ b/civicrm/ext/afform/core/ang/af/fields/Text.html @@ -1 +1,6 @@ -<input class="crm-form-text" type="text" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" placeholder="{{ $ctrl.defn.input_attrs.placeholder }}" /> +<input ng-if=":: !$ctrl.defn.search_range" class="form-control" type="text" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]" placeholder="{{:: $ctrl.defn.input_attrs.placeholder }}" > +<div ng-if=":: $ctrl.defn.search_range" class="form-inline"> + <input class="form-control" type="text" id="{{:: fieldId }}" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]['>=']" placeholder="{{:: $ctrl.defn.input_attrs.placeholder }}" > + <span class="af-field-range-sep">-</span> + <input class="form-control" type="text" id="{{:: fieldId }}2" ng-model="dataProvider.getFieldData()[$ctrl.fieldName]['<=']" placeholder="{{:: $ctrl.defn.input_attrs.placeholder2 }}" > +</div> diff --git a/civicrm/ext/afform/core/ang/afCore.css b/civicrm/ext/afform/core/ang/afCore.css index 59070b0df5..124ead36ff 100644 --- a/civicrm/ext/afform/core/ang/afCore.css +++ b/civicrm/ext/afform/core/ang/afCore.css @@ -15,7 +15,7 @@ a.af-api4-action-idle { .af-container.af-layout-inline > * { display: inline-block; margin-right: .5em; - vertical-align: bottom; + vertical-align: top; } [af-repeat-item] { diff --git a/civicrm/ext/afform/core/api/v3/Afform.php b/civicrm/ext/afform/core/api/v3/Afform.php new file mode 100644 index 0000000000..41c20c63a4 --- /dev/null +++ b/civicrm/ext/afform/core/api/v3/Afform.php @@ -0,0 +1,123 @@ +<?php + +/** + * Get a list of afforms. + * + * This API exists solely for the purpose of entityRef widgets. + * All other Afform api functionality is v4. + * + * @param array $params + * + * @return array + * API result + */ +function civicrm_api3_afform_get($params) { + /** @var \CRM_Afform_AfformScanner $scanner */ + $scanner = \Civi::service('afform_scanner'); + + $names = array_keys($scanner->findFilePaths()); + $result = []; + + foreach ($names as $name) { + $info = [ + 'name' => $name, + 'module_name' => _afform_angular_module_name($name, 'camel'), + 'directive_name' => _afform_angular_module_name($name, 'dash'), + ]; + $record = $scanner->getMeta($name); + $result[$name] = array_merge($record, $info); + } + + $allFields = []; + _civicrm_api3_afform_get_spec($allFields); + return _civicrm_api3_basic_array_get('Afform', $params, $result, 'name', array_keys($allFields)); +} + +/** + * @param array $fields + */ +function _civicrm_api3_afform_get_spec(&$fields) { + $fields['name'] = [ + 'title' => 'Name', + 'type' => CRM_Utils_Type::T_STRING, + ]; + $fields['title'] = [ + 'title' => 'Title', + 'type' => CRM_Utils_Type::T_STRING, + ]; + $fields['module_name'] = [ + 'title' => 'Module Name', + 'type' => CRM_Utils_Type::T_STRING, + ]; + $fields['directive_name'] = [ + 'title' => 'Directive Name', + 'type' => CRM_Utils_Type::T_STRING, + ]; + $fields['description'] = [ + 'title' => 'Description', + 'type' => CRM_Utils_Type::T_STRING, + ]; + $fields['server_route'] = [ + 'title' => 'Server Route', + 'type' => CRM_Utils_Type::T_STRING, + ]; + $fields['type'] = [ + 'title' => 'Type', + 'type' => CRM_Utils_Type::T_STRING, + ]; + $fields['is_dashlet'] = [ + 'title' => 'Dashlet', + 'type' => CRM_Utils_Type::T_BOOLEAN, + ]; + $fields['is_public'] = [ + 'title' => 'Public', + 'type' => CRM_Utils_Type::T_BOOLEAN, + ]; + $fields['redirect'] = [ + 'title' => 'Redirect URL', + 'type' => CRM_Utils_Type::T_STRING, + ]; +} + +/** + * Augment parameters for Afform entityRef list. + * + * @see _civicrm_api3_generic_getlist_params + * + * @param array $request + * API request. + */ +function _civicrm_api3_afform_getlist_params(&$request) { + $fieldsToReturn = ['name', 'title', 'type', 'description']; + $request['params']['return'] = array_unique(array_merge($fieldsToReturn, $request['extra'])); +} + +/** + * Format output for Afform entityRef list. + * + * @see _civicrm_api3_generic_getlist_output + * + * @param array $result + * @param array $request + * + * @return array + */ +function _civicrm_api3_afform_getlist_output($result, $request) { + $output = []; + if (!empty($result['values'])) { + $icons = CRM_Core_OptionGroup::values('afform_type', FALSE, FALSE, FALSE, NULL, 'icon', FALSE); + foreach ($result['values'] as $row) { + $data = [ + 'id' => $row[$request['id_field']], + 'label' => $row[$request['label_field']], + 'description' => [], + 'icon' => $icons[$row['type']], + ]; + if (!empty($row['description'])) { + $data['description'][] = $row['description']; + } + $output[] = $data; + } + } + return $output; +} diff --git a/civicrm/ext/afform/core/phpunit.xml.dist b/civicrm/ext/afform/core/phpunit.xml.dist index 0f9f25d307..fc8f870b72 100644 --- a/civicrm/ext/afform/core/phpunit.xml.dist +++ b/civicrm/ext/afform/core/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" syntaxCheck="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/afform/core/templates/afform/contactSummary/AfformBlock.tpl b/civicrm/ext/afform/core/templates/afform/contactSummary/AfformBlock.tpl new file mode 100644 index 0000000000..7940af4612 --- /dev/null +++ b/civicrm/ext/afform/core/templates/afform/contactSummary/AfformBlock.tpl @@ -0,0 +1,5 @@ +<crm-angular-js modules="{$block.module}"> + <div id="bootstrap-theme"> + <{$block.directive} options="{ldelim}contact_id: {$contactId}{rdelim}"></{$block.directive}> + </div> +</crm-angular-js> diff --git a/civicrm/ext/afform/core/templates/afform/contactSummary/AfformTab.tpl b/civicrm/ext/afform/core/templates/afform/contactSummary/AfformTab.tpl new file mode 100644 index 0000000000..1cf843254d --- /dev/null +++ b/civicrm/ext/afform/core/templates/afform/contactSummary/AfformTab.tpl @@ -0,0 +1,5 @@ +<crm-angular-js modules="{$tabValue.module}"> + <div id="bootstrap-theme"> + <{$tabValue.directive} options="{ldelim}contact_id: {$contactId}{rdelim}"></{$tabValue.directive}> + </div> +</crm-angular-js> diff --git a/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php b/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php index e3884febf7..c759c16ee6 100644 --- a/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php +++ b/civicrm/ext/afform/core/tests/phpunit/CRM/Afform/UtilTest.php @@ -56,7 +56,7 @@ class CRM_Afform_UtilTest extends \PHPUnit\Framework\TestCase implements Headles * @dataProvider getNameExamples * @throws \Exception */ - public function testNameConversion($inputFileName, $toFormat, $expected) { + public function testNameConversion($inputFileName, $toFormat, $expected): void { $actual = _afform_angular_module_name($inputFileName, $toFormat); $this->assertEquals($expected, $actual); } diff --git a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FilterTest.php b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FilterTest.php index 4e84b5592d..012c4c2727 100644 --- a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FilterTest.php +++ b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FilterTest.php @@ -34,7 +34,7 @@ class FilterTest extends \PHPUnit\Framework\TestCase implements HeadlessInterfac return $htmls[$fileName]; } - public function testDefnInjection() { + public function testDefnInjection(): void { $inputHtml = sprintf(self::PERSON_TPL, '<div af-fieldset="person"><af-field name="first_name" /></div>'); $filteredHtml = $this->htmlFilter('~/afform/MyForm.aff.html', $inputHtml); @@ -46,7 +46,7 @@ class FilterTest extends \PHPUnit\Framework\TestCase implements HeadlessInterfac $this->assertEquals('First Name', $myField['defn']['label']); } - public function testDefnInjectionNested() { + public function testDefnInjectionNested(): void { $inputHtml = sprintf(self::PERSON_TPL, '<span><div af-fieldset="person"><foo><af-field name="first_name" /></foo></div></span>'); $filteredHtml = $this->htmlFilter('~/afform/MyForm.aff.html', $inputHtml); @@ -58,7 +58,7 @@ class FilterTest extends \PHPUnit\Framework\TestCase implements HeadlessInterfac $this->assertEquals('First Name', $myField['defn']['label']); } - public function testDefnOverrideTitle() { + public function testDefnOverrideTitle(): void { $inputHtml = sprintf(self::PERSON_TPL, '<div af-fieldset="person"><af-field name="first_name" defn="{label: \'Given name\'}" /></div>'); $filteredHtml = $this->htmlFilter('~/afform/MyForm.aff.html', $inputHtml); diff --git a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FormDataModelTest.php b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FormDataModelTest.php index 00513dd3ee..0e6d7812ee 100644 --- a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FormDataModelTest.php +++ b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/FormDataModelTest.php @@ -99,7 +99,7 @@ class FormDataModelTest extends \PHPUnit\Framework\TestCase implements HeadlessI * @param $expectEntities * @dataProvider getEntityExamples */ - public function testGetEntities($html, $expectEntities) { + public function testGetEntities($html, $expectEntities): void { $parser = new \CRM_Afform_ArrayHtml(); $fdm = new FormDataModel($parser->convertHtmlToArray($html)); $this->assertEquals($expectEntities, $fdm->getEntities()); diff --git a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/SymbolsTest.php b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/SymbolsTest.php index 8074fc41f9..e2560aa6d7 100644 --- a/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/SymbolsTest.php +++ b/civicrm/ext/afform/core/tests/phpunit/Civi/Afform/SymbolsTest.php @@ -90,7 +90,7 @@ class SymbolsTest extends \PHPUnit\Framework\TestCase implements HeadlessInterfa * Types are (e)lement, (a)ttribute, (c)lass * @dataProvider getExamples */ - public function testSymbols($html, $expect) { + public function testSymbols($html, $expect): void { $expectDefaults = ['e' => [], 'a' => [], 'c' => []]; $expect = array_merge($expectDefaults, $expect); $actual = Symbols::scan($html); diff --git a/civicrm/ext/afform/core/tests/phpunit/bootstrap.php b/civicrm/ext/afform/core/tests/phpunit/bootstrap.php index a5b49253c8..5133778c81 100644 --- a/civicrm/ext/afform/core/tests/phpunit/bootstrap.php +++ b/civicrm/ext/afform/core/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/afform/docs/crud.md b/civicrm/ext/afform/docs/crud.md index c51e70f09a..83a87e05f3 100644 --- a/civicrm/ext/afform/docs/crud.md +++ b/civicrm/ext/afform/docs/crud.md @@ -15,6 +15,7 @@ $ cv api4 afform.get +w name=helloWorld "description": "", "is_dashlet": false, "is_public": false, + "is_token": false, "server_route": "civicrm/hello-world", "layout": { "#tag": "div", diff --git a/civicrm/ext/afform/html/ang/afHtmlEditor.aff.html b/civicrm/ext/afform/html/ang/afHtmlEditor.aff.html index 782ea3a256..ede9f51227 100644 --- a/civicrm/ext/afform/html/ang/afHtmlEditor.aff.html +++ b/civicrm/ext/afform/html/ang/afHtmlEditor.aff.html @@ -41,6 +41,13 @@ </label> <p class="help-block">{{ts('The general look/feel should match the frontend')}}</p> </div> + <div class="form-group" ng-if="!!resultForm.server_route"> + <label for="af_config_form_is_token"> + <input type="checkbox" id="af_config_form_is_token" ng-model="resultForm.is_token"> + {{ ts('Enable email token') }} + </label> + <p class="help-block">{{ts('Allow email authors to easily link to this form')}}</p> + </div> <div class="form-group"> <label for="af_config_form_is_dashlet"> <input type="checkbox" id="af_config_form_is_dashlet" ng-model="resultForm.is_dashlet"> @@ -57,6 +64,22 @@ </div> <div class="clearfix"></div> + + <div class="panel panel-default"> + <div class="panel-heading">{{ts('Submit Actions')}}</div> + <div class="panel-body"> + <ng-form name="submitActions"> + <div class="form-group" ng-class="{'has-error': !!submitActions.redirect.$error.pattern}"> + <label class="control-label" for="af_config_redirect">{{ ts('Post-Submit Page') }}</label> + <input ng-model="resultForm.redirect" name="redirect" class="form-control" id="af_result_from_redirect" title="{{ ts('Post-Submit Page') }}" pattern="^((http|https):\/\/|\/|civicrm\/)[-0-9a-zA-Z\/_.]\S+$" title="{{ ts('Post-Submit Page must be either an absolute url, a relative url or a path starting with CiviCRM') }}"/> + <p class="help-block">{{ts('Enter a URL or path that the form should redirect to following a successful submission.') }}</p> + </div> + </ng-form> + </div> + </div> + + <div class="clearfix"></div> + </div> <div class="col-sm-12 col-md-8"> diff --git a/civicrm/ext/afform/mock/ang/mockPublicForm.aff.json b/civicrm/ext/afform/mock/ang/mockPublicForm.aff.json index e97ef09b11..eb221305ee 100644 --- a/civicrm/ext/afform/mock/ang/mockPublicForm.aff.json +++ b/civicrm/ext/afform/mock/ang/mockPublicForm.aff.json @@ -2,5 +2,6 @@ "type": "form", "title": "My public form", "server_route": "civicrm/mock-public-form", - "permission": "*always allow*" + "permission": "*always allow*", + "is_token": true } diff --git a/civicrm/ext/afform/mock/ang/mockPublicForm.test.php b/civicrm/ext/afform/mock/ang/mockPublicForm.test.php index d4f7bf4f0c..70feb1f6a2 100644 --- a/civicrm/ext/afform/mock/ang/mockPublicForm.test.php +++ b/civicrm/ext/afform/mock/ang/mockPublicForm.test.php @@ -63,4 +63,117 @@ class MockPublicFormTest extends \Civi\AfformMock\FormTestCase { $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_contact WHERE first_name=%1', [1 => ["Firsty{$r}", 'String']])); } + /** + * The email token `{afform.mockPublicFormUrl}` should evaluate to an authenticated URL. + */ + public function testAuthenticatedUrlToken_Plain() { + if (!function_exists('authx_civicrm_config')) { + $this->fail('Cannot test without authx'); + } + + $lebowski = $this->getLebowskiCID(); + $text = $this->renderTokens($lebowski, 'Please go to {afform.mockPublicFormUrl}', 'text/plain'); + if (!preg_match(';Please go to ([^\s]+);', $text, $m)) { + $this->fail('Plain text message did not have URL in expected place: ' . $text); + } + $url = $m[1]; + $this->assertRegExp(';^https?:.*civicrm/mock-public-form.*;', $url, "URL should look plausible"); + + // Going to this page will cause us to authenticate as the target contact + $http = $this->createGuzzle(['http_errors' => FALSE, 'cookies' => new \GuzzleHttp\Cookie\CookieJar()]); + $response = $http->get($url); + $r = (string) $response->getBody(); + $this->assertStatusCode(200, $response); + $response = $http->get('civicrm/authx/id'); + $this->assertContactJson($lebowski, $response); + } + + /** + * The email token `{afform.mockPublicFormUrl}` should evaluate to an authenticated URL. + */ + public function testAuthenticatedUrlToken_Html() { + if (!function_exists('authx_civicrm_config')) { + $this->fail('Cannot test without authx'); + } + + $lebowski = $this->getLebowskiCID(); + $html = $this->renderTokens($lebowski, 'Please go to <a href="{afform.mockPublicFormUrl}">my form</a>', 'text/html'); + + if (!preg_match(';a href="([^"]+)";', $html, $m)) { + $this->fail('HTML message did not have URL in expected place: ' . $html); + } + $url = html_entity_decode($m[1]); + $this->assertRegExp(';^https?:.*civicrm/mock-public-form.*;', $url, "URL should look plausible"); + + // Going to this page will cause us to authenticate as the target contact + $http = $this->createGuzzle(['cookies' => new \GuzzleHttp\Cookie\CookieJar()]); + $response = $http->get($url); + $this->assertStatusCode(200, $response); + $response = $http->get('civicrm/authx/id'); + $this->assertContactJson($lebowski, $response); + } + + /** + * The email token `{afform.mockPublicFormLink}` should evaluate to an authenticated URL. + */ + public function testAuthenticatedLinkToken_Html() { + if (!function_exists('authx_civicrm_config')) { + $this->fail('Cannot test without authx'); + } + + $lebowski = $this->getLebowskiCID(); + $html = $this->renderTokens($lebowski, 'Please go to {afform.mockPublicFormLink}', 'text/html'); + $doc = \phpQuery::newDocument($html, 'text/html'); + $this->assertEquals(1, $doc->find('a')->count(), 'Document should have hyperlink'); + foreach ($doc->find('a') as $item) { + /** @var \DOMElement $item */ + $this->assertRegExp(';^https?:.*civicrm/mock-public-form.*;', $item->getAttribute('href')); + $this->assertEquals('My public form', $item->firstChild->data); + $url = $item->getAttribute('href'); + } + + // Going to this page will cause us to authenticate as the target contact + $http = $this->createGuzzle(['cookies' => new \GuzzleHttp\Cookie\CookieJar()]); + $response = $http->get($url); + $this->assertStatusCode(200, $response); + $response = $http->get('civicrm/authx/id'); + $this->assertContactJson($lebowski, $response); + } + + protected function renderTokens($cid, $body, $format) { + $tp = new \Civi\Token\TokenProcessor(\Civi::dispatcher(), []); + $tp->addRow()->context('contactId', $cid); + $tp->addMessage('example', $body, $format); + $tp->evaluate(); + return $tp->getRow(0)->render('example'); + } + + protected function getLebowskiCID() { + $contact = \civicrm_api3('Contact', 'create', [ + 'contact_type' => 'Individual', + 'first_name' => 'Jeffrey', + 'last_name' => 'Lebowski', + 'external_identifier' => __CLASS__, + 'options' => [ + 'match' => 'external_identifier', + ], + ]); + return $contact['id']; + } + + /** + * Assert the AJAX request provided the expected contact. + * + * @param int $cid + * The expected contact ID + * @param \Psr\Http\Message\ResponseInterface $response + */ + public function assertContactJson($cid, $response) { + $this->assertContentType('application/json', $response); + $this->assertStatusCode(200, $response); + $j = json_decode((string) $response->getBody(), 1); + $formattedFailure = $this->formatFailure($response); + $this->assertEquals($cid, $j['contact_id'], "Response did not give expected contact ID\n" . $formattedFailure); + } + } diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php index d7406c754d..5d310b7c2f 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformRoutingTest.php @@ -14,7 +14,7 @@ class api_v4_AfformRoutingTest extends \PHPUnit\Framework\TestCase implements \C ->apply(); } - public function setUp() { + public function setUp(): void { parent::setUp(); Civi\Api4\Afform::revert() ->setCheckPermissions(FALSE) @@ -22,7 +22,7 @@ class api_v4_AfformRoutingTest extends \PHPUnit\Framework\TestCase implements \C ->execute(); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); Civi\Api4\Afform::revert() ->setCheckPermissions(FALSE) @@ -30,7 +30,7 @@ class api_v4_AfformRoutingTest extends \PHPUnit\Framework\TestCase implements \C ->execute(); } - public function testChangingPermissions() { + public function testChangingPermissions(): void { $http = new \GuzzleHttp\Client(['http_errors' => FALSE]); $url = function ($path, $query = NULL) { return CRM_Utils_System::url($path, $query, TRUE, NULL, FALSE); @@ -49,7 +49,7 @@ class api_v4_AfformRoutingTest extends \PHPUnit\Framework\TestCase implements \C $this->assertOpensPage($result, 'mock-page'); } - public function testChangingPath() { + public function testChangingPath(): void { $http = new \GuzzleHttp\Client(['http_errors' => FALSE]); $url = function ($path, $query = NULL) { return CRM_Utils_System::url($path, $query, TRUE, NULL, FALSE); diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php index 9f5132a31a..3d57c90bb0 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTest.php @@ -45,7 +45,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { * @param array $originalMetadata * @dataProvider getBasicDirectives */ - public function testGetUpdateRevert($formName, $originalMetadata) { + public function testGetUpdateRevert($formName, $originalMetadata): void { $get = function($arr, $key) { return isset($arr[$key]) ? $arr[$key] : NULL; }; @@ -134,7 +134,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { * (For debug messages) A symbolic name of the example data-set being tested. * @dataProvider getFormatExamples */ - public function testBasicConvert($formName, $updateFormat, $updateLayout, $readFormat, $readLayout, $exampleName) { + public function testBasicConvert($formName, $updateFormat, $updateLayout, $readFormat, $readLayout, $exampleName): void { $actual = Civi\Api4\Afform::convert()->setLayout($updateLayout) ->setFrom($updateFormat) ->setTo($readFormat) @@ -177,7 +177,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { * (For debug messages) A symbolic name of the example data-set being tested. * @dataProvider getFormatExamples */ - public function testUpdateAndGetFormat($formName, $updateFormat, $updateLayout, $readFormat, $readLayout, $exampleName) { + public function testUpdateAndGetFormat($formName, $updateFormat, $updateLayout, $readFormat, $readLayout, $exampleName): void { Civi\Api4\Afform::revert()->addWhere('name', '=', $formName)->execute(); Civi\Api4\Afform::update() @@ -213,7 +213,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { * * @dataProvider getWhitespaceExamples */ - public function testWhitespaceFormat($directiveName, $example, $exampleName) { + public function testWhitespaceFormat($directiveName, $example, $exampleName): void { Civi\Api4\Afform::save() ->addRecord(['name' => $directiveName, 'layout' => $example['html']]) ->setLayoutFormat('html') @@ -243,7 +243,7 @@ class api_v4_AfformTest extends api_v4_AfformTestCase { $this->assertEquals($example['pretty'], $this->fudgeMarkup($result['layout'])); } - public function testAutoRequires() { + public function testAutoRequires(): void { $formName = 'mockPage'; $this->createLoggedInUser(); diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTestCase.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTestCase.php index 4847abf604..a2dcb6af55 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTestCase.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformTestCase.php @@ -22,18 +22,10 @@ abstract class api_v4_AfformTestCase extends \PHPUnit\Framework\TestCase impleme /** * The setup() method is executed before the test is executed (optional). */ - public function setUp() { + public function setUp(): void { parent::setUp(); CRM_Core_Config::singleton()->userPermissionTemp = new CRM_Core_Permission_Temp(); CRM_Core_Config::singleton()->userPermissionTemp->grant('administer CiviCRM'); } - /** - * The tearDown() method is executed after the test was executed (optional) - * This can be used for cleanup. - */ - public function tearDown() { - parent::tearDown(); - } - } diff --git a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php index 152e55c96b..f13d6fa55d 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php +++ b/civicrm/ext/afform/mock/tests/phpunit/api/v4/AfformUsageTest.php @@ -13,7 +13,7 @@ class api_v4_AfformUsageTest extends api_v4_AfformTestCase { protected $formName; - public static function setUpBeforeClass() { + public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); self::$layouts['aboutMe'] = <<<EOHTML <af-form ctrl="modelListCtrl"> @@ -26,12 +26,12 @@ class api_v4_AfformUsageTest extends api_v4_AfformTestCase { EOHTML; } - public function setUp() { + public function setUp(): void { parent::setUp(); $this->formName = 'mock' . rand(0, 100000); } - public function tearDown() { + public function tearDown(): void { Civi\Api4\Afform::revert() ->setCheckPermissions(FALSE) ->addWhere('name', '=', $this->formName) @@ -39,7 +39,7 @@ EOHTML; parent::tearDown(); } - public function testAboutMeAllowed() { + public function testAboutMeAllowed(): void { $this->useValues([ 'layout' => self::$layouts['aboutMe'], 'permission' => CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION, @@ -71,7 +71,7 @@ EOHTML; $this->assertEquals('Lasty', $contact['last_name']); } - public function testAboutMeForbidden() { + public function testAboutMeForbidden(): void { $this->useValues([ 'layout' => self::$layouts['aboutMe'], 'permission' => CRM_Core_Permission::ALWAYS_DENY_PERMISSION, diff --git a/civicrm/ext/afform/mock/tests/phpunit/bootstrap.php b/civicrm/ext/afform/mock/tests/phpunit/bootstrap.php index bc7558e582..bac7c1f297 100644 --- a/civicrm/ext/afform/mock/tests/phpunit/bootstrap.php +++ b/civicrm/ext/afform/mock/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php b/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php index 20055f6d36..0db6f7d44b 100644 --- a/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php +++ b/civicrm/ext/authx/tests/phpunit/Civi/Authx/AllFlowsTest.php @@ -34,7 +34,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf */ protected $quirks = []; - public static function setUpBeforeClass() { + public static function setUpBeforeClass(): void { \Civi\Test::e2e() ->installMe(__DIR__) ->callback( @@ -46,7 +46,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf ->apply(); } - public function setUp() { + public function setUp(): void { $quirks = [ 'Joomla' => ['sendsExcessCookies', 'authErrorShowsForm'], 'WordPress' => ['sendsExcessCookies'], @@ -64,7 +64,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf \Civi::settings()->set('authx_guards', []); } - public function tearDown() { + public function tearDown(): void { foreach ($this->settingsBackup as $setting => $value) { \Civi::settings()->set($setting, $value); } @@ -93,7 +93,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf return $exs; } - public function testAnonymous() { + public function testAnonymous(): void { $http = $this->createGuzzle(['http_errors' => FALSE]); /** @var \Psr\Http\Message\RequestInterface $request */ @@ -113,7 +113,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \GuzzleHttp\Exception\GuzzleException * @dataProvider getStatelessExamples */ - public function testStatelessContactOnly($credType, $flowType) { + public function testStatelessContactOnly($credType, $flowType): void { if ($credType === 'pass') { $this->assertTrue(TRUE, 'No need to test password credentials with non-user contacts'); return; @@ -148,7 +148,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \GuzzleHttp\Exception\GuzzleException * @dataProvider getStatelessExamples */ - public function testStatelessUserContact($credType, $flowType) { + public function testStatelessUserContact($credType, $flowType): void { $http = $this->createGuzzle(['http_errors' => FALSE]); /** @var \Psr\Http\Message\RequestInterface $request */ @@ -224,7 +224,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \GuzzleHttp\Exception\GuzzleException * @dataProvider getCredTypes */ - public function testStatefulLoginAllowed($credType) { + public function testStatefulLoginAllowed($credType): void { $flowType = 'login'; $credFunc = 'cred' . ucfirst(preg_replace(';[^a-zA-Z0-9];', '', $credType)); @@ -270,7 +270,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \GuzzleHttp\Exception\GuzzleException * @dataProvider getCredTypes */ - public function testStatefulLoginProhibited($credType) { + public function testStatefulLoginProhibited($credType): void { $flowType = 'login'; $http = $this->createGuzzle(['http_errors' => FALSE]); $credFunc = 'cred' . ucfirst(preg_replace(';[^a-zA-Z0-9];', '', $credType)); @@ -292,7 +292,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \GuzzleHttp\Exception\GuzzleException * @dataProvider getCredTypes */ - public function testStatefulAutoAllowed($credType) { + public function testStatefulAutoAllowed($credType): void { $flowType = 'auto'; $cookieJar = new CookieJar(); $http = $this->createGuzzle(['http_errors' => FALSE, 'cookies' => $cookieJar]); @@ -319,7 +319,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \GuzzleHttp\Exception\GuzzleException * @dataProvider getCredTypes */ - public function testStatefulAutoProhibited($credType) { + public function testStatefulAutoProhibited($credType): void { $flowType = 'auto'; $cookieJar = new CookieJar(); $http = $this->createGuzzle(['http_errors' => FALSE, 'cookies' => $cookieJar]); @@ -339,7 +339,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \CiviCRM_API3_Exception * @throws \GuzzleHttp\Exception\GuzzleException */ - public function testStatefulStatelessOverlap() { + public function testStatefulStatelessOverlap(): void { \Civi::settings()->set("authx_login_cred", ['api_key']); \Civi::settings()->set("authx_header_cred", ['api_key']); @@ -377,7 +377,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * @throws \CiviCRM_API3_Exception * @throws \GuzzleHttp\Exception\GuzzleException */ - public function testMultipleStateless() { + public function testMultipleStateless(): void { \Civi::settings()->set("authx_header_cred", ['api_key']); $cookieJar = new CookieJar(); $http = $this->createGuzzle(['http_errors' => FALSE, 'cookies' => $cookieJar]); @@ -465,7 +465,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * The expected user ID * @param \Psr\Http\Message\ResponseInterface $response */ - public function assertMyContact($cid, $uid, ResponseInterface $response) { + public function assertMyContact($cid, $uid, ResponseInterface $response): void { $this->assertContentType('application/json', $response); $this->assertStatusCode(200, $response); $j = json_decode((string) $response->getBody(), 1); @@ -479,7 +479,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * * @param \Psr\Http\Message\ResponseInterface $response */ - public function assertAnonymousContact(ResponseInterface $response) { + public function assertAnonymousContact(ResponseInterface $response): void { $formattedFailure = $this->formatFailure($response); $this->assertContentType('application/json', $response); $this->assertStatusCode(200, $response); @@ -496,7 +496,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf * * @param \Psr\Http\Message\ResponseInterface $response */ - public function assertDashboardUnauthorized($response = NULL) { + public function assertDashboardUnauthorized($response = NULL): void { $response = $this->resolveResponse($response); if (!in_array('authErrorShowsForm', $this->quirks)) { $this->assertStatusCode(403, $response); @@ -507,7 +507,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf ); } - public function assertDashboardOk($response = NULL) { + public function assertDashboardOk($response = NULL): void { $response = $this->resolveResponse($response); $this->assertStatusCode(200, $response); $this->assertContentType('text/html', $response); @@ -617,7 +617,7 @@ class AllFlowsTest extends \PHPUnit\Framework\TestCase implements EndToEndInterf /** * @param \Psr\Http\Message\ResponseInterface $response */ - private function assertFailedDueToProhibition($response) { + private function assertFailedDueToProhibition($response): void { $this->assertBodyRegexp(';HTTP 401;', $response); $this->assertContentType('text/plain', $response); if (!in_array('sendsExcessCookies', $this->quirks)) { diff --git a/civicrm/ext/authx/tests/phpunit/bootstrap.php b/civicrm/ext/authx/tests/phpunit/bootstrap.php index a5b49253c8..5133778c81 100644 --- a/civicrm/ext/authx/tests/phpunit/bootstrap.php +++ b/civicrm/ext/authx/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/contributioncancelactions/tests/phpunit/bootstrap.php b/civicrm/ext/contributioncancelactions/tests/phpunit/bootstrap.php index a5b49253c8..5133778c81 100644 --- a/civicrm/ext/contributioncancelactions/tests/phpunit/bootstrap.php +++ b/civicrm/ext/contributioncancelactions/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/ewaysingle/tests/phpunit/CRM/Core/Payment/EwayTest.php b/civicrm/ext/ewaysingle/tests/phpunit/CRM/Core/Payment/EwayTest.php index 6591c5bb16..de4ef3511c 100644 --- a/civicrm/ext/ewaysingle/tests/phpunit/CRM/Core/Payment/EwayTest.php +++ b/civicrm/ext/ewaysingle/tests/phpunit/CRM/Core/Payment/EwayTest.php @@ -31,13 +31,13 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H ->apply(); } - public function setUp() { + public function setUp(): void { $this->setUpEwayProcessor(); $this->processor = \Civi\Payment\System::singleton()->getById($this->ids['PaymentProcessor']['eWAY']); parent::setUp(); } - public function tearDown() { + public function tearDown(): void { $this->callAPISuccess('PaymentProcessor', 'delete', ['id' => $this->ids['PaymentProcessor']['eWAY']]); parent::tearDown(); } @@ -45,7 +45,7 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H /** * Test making a once off payment */ - public function testSinglePayment() { + public function testSinglePayment(): void { $this->setupMockHandler(); $params = $this->getBillingParams(); $params['amount'] = 10.00; @@ -69,7 +69,7 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H /** * Test making a failed once off payment */ - public function testErrorSinglePayment() { + public function testErrorSinglePayment(): void { $this->setupMockHandler(NULL, TRUE); $params = $this->getBillingParams(); $params['amount'] = 5.24; @@ -125,7 +125,7 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H ]; } - public function setUpEwayProcessor() { + public function setUpEwayProcessor(): void { $params = [ 'name' => 'demo', 'domain_id' => CRM_Core_Config::domainID(), @@ -164,7 +164,7 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H * * @throws \CiviCRM_API3_Exception */ - protected function setupMockHandler($id = NULL, $error = FALSE) { + protected function setupMockHandler($id = NULL, $error = FALSE): void { if ($id) { $this->processor = Civi\Payment\System::singleton()->getById($id); } @@ -181,7 +181,7 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H * * @return array */ - public function getExpectedSinglePaymentResponses() { + public function getExpectedSinglePaymentResponses(): array { return [ '<ewayResponse><ewayTrxnStatus>True</ewayTrxnStatus><ewayTrxnNumber>10002</ewayTrxnNumber><ewayTrxnReference>xyz</ewayTrxnReference><ewayTrxnOption1/><ewayTrxnOption2/><ewayTrxnOption3/><ewayAuthCode>123456</ewayAuthCode><ewayReturnAmount>1000</ewayReturnAmount><ewayTrxnError>00,Transaction Approved(Test Gateway)</ewayTrxnError></ewayResponse>', ]; @@ -192,7 +192,7 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H * * @return array */ - public function getExpectedSinglePaymentRequests() { + public function getExpectedSinglePaymentRequests(): array { return [ '<ewaygateway><ewayCustomerID>87654321</ewayCustomerID><ewayTotalAmount>1000</ewayTotalAmount><ewayCardHoldersName>John O'Connor</ewayCardHoldersName><ewayCardNumber>4444333322221111</ewayCardNumber><ewayCardExpiryMonth>10</ewayCardExpiryMonth><ewayCardExpiryYear>22</ewayCardExpiryYear><ewayTrxnNumber>xyz</ewayTrxnNumber><ewayCustomerInvoiceDescription>Test Contribution</ewayCustomerInvoiceDescription><ewayCustomerFirstName>John</ewayCustomerFirstName><ewayCustomerLastName>O'Connor</ewayCustomerLastName><ewayCustomerEmail>unittesteway@civicrm.org</ewayCustomerEmail><ewayCustomerAddress>8 Hobbitton Road, The Shire, NSW.</ewayCustomerAddress><ewayCustomerPostcode>5010</ewayCustomerPostcode><ewayCustomerInvoiceRef>xyz</ewayCustomerInvoiceRef><ewayCVN>123</ewayCVN><ewayOption1></ewayOption1><ewayOption2></ewayOption2><ewayOption3></ewayOption3><ewayCustomerIPAddress>127.0.0.1</ewayCustomerIPAddress><ewayCustomerBillingCountry>AUS</ewayCustomerBillingCountry></ewaygateway>', ]; @@ -203,7 +203,7 @@ class CRM_Core_Payment_EwayTest extends \PHPUnit\Framework\TestCase implements H * * @return array */ - public function getExpectedSinglePaymentErrorResponses() { + public function getExpectedSinglePaymentErrorResponses(): array { return [ '<ewayResponse><ewayTrxnStatus>False</ewayTrxnStatus><ewayTrxnNumber>10003</ewayTrxnNumber><ewayTrxnReference>xyz</ewayTrxnReference><ewayTrxnOption1/><ewayTrxnOption2/><ewayTrxnOption3/><ewayAuthCode>123456</ewayAuthCode><ewayReturnAmount>524</ewayReturnAmount><ewayTrxnError>24,Do Not Honour(Test Gateway)</ewayTrxnError></ewayResponse>', ]; diff --git a/civicrm/ext/ewaysingle/tests/phpunit/bootstrap.php b/civicrm/ext/ewaysingle/tests/phpunit/bootstrap.php index a5b49253c8..5133778c81 100644 --- a/civicrm/ext/ewaysingle/tests/phpunit/bootstrap.php +++ b/civicrm/ext/ewaysingle/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/financialacls/financialacls.php b/civicrm/ext/financialacls/financialacls.php index 8fd88f4ba8..ddd51b22a2 100644 --- a/civicrm/ext/financialacls/financialacls.php +++ b/civicrm/ext/financialacls/financialacls.php @@ -192,6 +192,7 @@ function financialacls_civicrm_selectWhereClause($entity, &$clauses) { switch ($entity) { case 'LineItem': case 'MembershipType': + case 'ContributionRecur': $types = []; CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types); if ($types) { @@ -253,6 +254,38 @@ function financialacls_civicrm_membershipTypeValues($form, &$membershipTypeValue } } +/** + * Add permissions. + * + * @see https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_permission/ + * + * @param array $permissions + */ +function financialacls_civicrm_permission(&$permissions) { + if (!financialacls_is_acl_limiting_enabled()) { + return; + } + $actions = [ + 'add' => ts('add'), + 'view' => ts('view'), + 'edit' => ts('edit'), + 'delete' => ts('delete'), + ]; + $financialTypes = \CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'validate'); + foreach ($financialTypes as $id => $type) { + foreach ($actions as $action => $action_ts) { + $permissions[$action . ' contributions of type ' . $type] = [ + ts("CiviCRM: %1 contributions of type %2", [1 => $action_ts, 2 => $type]), + ts('%1 contributions of type %2', [1 => $action_ts, 2 => $type]), + ]; + } + } + $permissions['administer CiviCRM Financial Types'] = [ + ts('CiviCRM: administer CiviCRM Financial Types'), + ts('Administer access to Financial Types'), + ]; +} + /** * Remove unpermitted financial types from field Options in search context. * @@ -271,7 +304,7 @@ function financialacls_civicrm_fieldOptions($entity, $field, &$options, $params) if (!financialacls_is_acl_limiting_enabled()) { return; } - if ($entity === 'Contribution' && $field === 'financial_type_id' && $params['context'] === 'search') { + if (in_array($entity, ['Contribution', 'ContributionRecur'], TRUE) && $field === 'financial_type_id' && $params['context'] === 'search') { $action = CRM_Core_Action::VIEW; // At this stage we are only considering the view action. Code from // CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(). diff --git a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/BuildAmountHookTest.php b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/BuildAmountHookTest.php index 1ef9435ff1..0c24979bc2 100644 --- a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/BuildAmountHookTest.php +++ b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/BuildAmountHookTest.php @@ -19,7 +19,7 @@ class BuildAmountHookTest extends BaseTestClass { /** * Test api applies permissions on line item actions (delete & get). */ - public function testBuildAmount() { + public function testBuildAmount(): void { $priceSet = PriceSet::create()->setValues(['name' => 'test', 'title' => 'test', 'extends' => 'CiviMember'])->execute()->first(); PriceField::create()->setValues([ 'financial_type_id:name' => 'Donation', diff --git a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/FinancialTypeTest.php b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/FinancialTypeTest.php index 08fabb1408..c43511981f 100644 --- a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/FinancialTypeTest.php +++ b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/FinancialTypeTest.php @@ -32,4 +32,34 @@ class FinancialTypeTest extends BaseTestClass { $this->assertEquals('Changing the name', substr($status[0]['text'], 0, 17)); } + /** + * Check method testPermissionedFinancialTypes() + */ + public function testPermissionedFinancialTypes(): void { + Civi::settings()->set('acl_financial_type', TRUE); + $permissions = \CRM_Core_Permission::basicPermissions(FALSE, TRUE); + $actions = [ + 'add' => ts('add'), + 'view' => ts('view'), + 'edit' => ts('edit'), + 'delete' => ts('delete'), + ]; + $financialTypes = \CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'validate'); + foreach ($financialTypes as $id => $type) { + foreach ($actions as $action => $action_ts) { + $this->assertEquals( + [ + ts("CiviCRM: %1 contributions of type %2", [1 => $action_ts, 2 => $type]), + ts('%1 contributions of type %2', [1 => $action_ts, 2 => $type]), + ], + $permissions[$action . ' contributions of type ' . $type] + ); + } + } + $this->assertEquals([ + ts('CiviCRM: administer CiviCRM Financial Types'), + ts('Administer access to Financial Types'), + ], $permissions['administer CiviCRM Financial Types']); + } + } diff --git a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php index 33db7de342..3f15b7ec0d 100644 --- a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php +++ b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/LineItemTest.php @@ -28,7 +28,7 @@ class LineItemTest extends BaseTestClass { * * @dataProvider versionThreeAndFour */ - public function testLineItemApiPermissions($version) { + public function testLineItemApiPermissions($version): void { $contact1 = $this->individualCreate(); $defaultPriceFieldID = $this->getDefaultPriceFieldID(); $order = $this->callAPISuccess('Order', 'create', [ diff --git a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/MembershipTypesTest.php b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/MembershipTypesTest.php index 8e63eeeaa2..df71a02e35 100644 --- a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/MembershipTypesTest.php +++ b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/MembershipTypesTest.php @@ -15,7 +15,7 @@ class MembershipTypesTest extends BaseTestClass { /** * Test buildMembershipTypes. */ - public function testMembershipTypesHook() { + public function testMembershipTypesHook(): void { $types = MembershipType::save(FALSE)->setRecords([ ['name' => 'Forbidden', 'financial_type_id:name' => 'Member Dues'], ['name' => 'Go for it', 'financial_type_id:name' => 'Donation'], diff --git a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/OptionsTest.php b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/OptionsTest.php index 1f9ab60309..2141178bc8 100644 --- a/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/OptionsTest.php +++ b/civicrm/ext/financialacls/tests/phpunit/Civi/Financialacls/OptionsTest.php @@ -13,7 +13,7 @@ class OptionsTest extends BaseTestClass { /** * Test buildMembershipTypes. */ - public function testBuildOptions() { + public function testBuildOptions(): void { $this->setupLoggedInUserWithLimitedFinancialTypeAccess(); $options = \CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(); $this->assertEquals(['Donation'], array_merge($options)); diff --git a/civicrm/ext/financialacls/tests/phpunit/bootstrap.php b/civicrm/ext/financialacls/tests/phpunit/bootstrap.php index a5b49253c8..5133778c81 100644 --- a/civicrm/ext/financialacls/tests/phpunit/bootstrap.php +++ b/civicrm/ext/financialacls/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); // phpcs:enable diff --git a/civicrm/ext/flexmailer/src/Listener/Abdicator.php b/civicrm/ext/flexmailer/src/Listener/Abdicator.php index 5ec0077209..b237d5899e 100644 --- a/civicrm/ext/flexmailer/src/Listener/Abdicator.php +++ b/civicrm/ext/flexmailer/src/Listener/Abdicator.php @@ -40,15 +40,10 @@ class Abdicator { } switch (\Civi::settings()->get('flexmailer_traditional')) { - case 'auto': - // Transitional support for old hidden setting "experimentalFlexMailerEngine" (bool) - // TODO: Remove this. Maybe after Q4 2019. - // TODO: Change this to default to flexmailer - return (bool) \Civi::settings()->get('experimentalFlexMailerEngine'); - case 'bao': return FALSE; + case 'auto': case 'flexmailer': return TRUE; diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/HtmlClickTrackerTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/HtmlClickTrackerTest.php index a486daed2e..082e2c0f76 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/HtmlClickTrackerTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/HtmlClickTrackerTest.php @@ -19,7 +19,7 @@ use Civi\FlexMailer\ClickTracker\HtmlClickTracker; */ class HtmlClickTrackerTest extends \CiviUnitTestCase { - public function setUp() { + public function setUp(): void { // Activate before transactions are setup. $manager = \CRM_Extension_System::singleton()->getManager(); if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { @@ -79,7 +79,7 @@ class HtmlClickTrackerTest extends \CiviUnitTestCase { * @param $expectHtml * @dataProvider getHrefExamples */ - public function testReplaceHref($inputHtml, $expectHtml) { + public function testReplaceHref($inputHtml, $expectHtml): void { $actual = HtmlClickTracker::replaceHrefUrls($inputHtml, function($url) { return "tracking($url)"; }); diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/TextClickTrackerTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/TextClickTrackerTest.php index a99ac5473e..64f8b7f8c0 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/TextClickTrackerTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTracker/TextClickTrackerTest.php @@ -19,7 +19,7 @@ use Civi\FlexMailer\ClickTracker\TextClickTracker; */ class TextClickTrackerTest extends \CiviUnitTestCase { - public function setUp() { + public function setUp(): void { // Activate before transactions are setup. $manager = \CRM_Extension_System::singleton()->getManager(); if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { @@ -79,7 +79,7 @@ class TextClickTrackerTest extends \CiviUnitTestCase { * @param $expectHtml * @dataProvider getHrefExamples */ - public function testReplaceTextUrls($inputHtml, $expectHtml) { + public function testReplaceTextUrls($inputHtml, $expectHtml): void { $inputText = \CRM_Utils_String::htmlToText($inputHtml); $expectText = \CRM_Utils_String::htmlToText($expectHtml); $expectText = str_replace('/tracking', 'tracking', $expectText); diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php index 1f723c5557..91a7af91e2 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ClickTrackerTest.php @@ -25,7 +25,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn ->apply(); } - public function setUp() { + public function setUp(): void { // Mock the getTrackerURL call; we don't need to test creating a row in a table. // If you want this to work without runkit, then either (a) make the dummy rows or (b) switch this to a hook/event that is runtime-configurable. require_once 'CRM/Mailing/BAO/TrackableURL.php'; @@ -34,7 +34,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn parent::setUp(); } - public function tearDown() { + public function tearDown(): void { // Reset the class. runkit7_method_remove('\CRM_Mailing_BAO_TrackableURL', 'getBasicTrackerURL'); runkit7_method_rename('\CRM_Mailing_BAO_TrackableURL', 'orig_getBasicTrackerURL', 'getBasicTrackerURL'); @@ -44,7 +44,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn /** * Example: Test that a link without any tokens works. */ - public function testLinkWithoutTokens() { + public function testLinkWithoutTokens(): void { $filter = new TextClickTracker(); $msg = 'See this: https://example.com/foo/bar?a=b&c=d#frag'; $result = $filter->filterContent($msg, 1, 1); @@ -54,7 +54,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn /** * Example: Test that a link with tokens in the query works. */ - public function testLinkWithTokensInQueryWithStaticParams() { + public function testLinkWithTokensInQueryWithStaticParams(): void { $filter = new TextClickTracker(); $msg = 'See this: https://example.com/foo/bar?a=b&cid={contact.id}'; $result = $filter->filterContent($msg, 1, 1); @@ -64,7 +64,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn /** * Example: Test that a link with tokens in the query works. */ - public function testLinkWithTokensInQueryWithMultipleStaticParams() { + public function testLinkWithTokensInQueryWithMultipleStaticParams(): void { $filter = new TextClickTracker(); $msg = 'See this: https://example.com/foo/bar?cs={contact.checksum}&a=b&cid={contact.id}'; $result = $filter->filterContent($msg, 1, 1); @@ -74,7 +74,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn /** * Example: Test that a link with tokens in the query works. */ - public function testLinkWithTokensInQueryWithMultipleStaticParamsHtml() { + public function testLinkWithTokensInQueryWithMultipleStaticParamsHtml(): void { $filter = new HtmlClickTracker(); $msg = '<a href="https://example.com/foo/bar?cs={contact.checksum}&a=b&cid={contact.id}">See this</a>'; $result = $filter->filterContent($msg, 1, 1); @@ -84,7 +84,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn /** * Example: Test that a link with tokens in the query works. */ - public function testLinkWithTokensInQueryWithoutStaticParams() { + public function testLinkWithTokensInQueryWithoutStaticParams(): void { $filter = new TextClickTracker(); $msg = 'See this: https://example.com/foo/bar?cid={contact.id}'; $result = $filter->filterContent($msg, 1, 1); @@ -97,7 +97,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn * Seems browsers maintain the fragment when they receive a redirect, so a * token here might still work. */ - public function testLinkWithTokensInFragment() { + public function testLinkWithTokensInFragment(): void { $filter = new TextClickTracker(); $msg = 'See this: https://example.com/foo/bar?a=b#cid={contact.id}'; $result = $filter->filterContent($msg, 1, 1); @@ -110,7 +110,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn * Seems browsers maintain the fragment when they receive a redirect, so a * token here might still work. */ - public function testLinkWithTokensInQueryAndFragment() { + public function testLinkWithTokensInQueryAndFragment(): void { $filter = new TextClickTracker(); $msg = 'See this: https://example.com/foo/bar?a=b&cid={contact.id}#cid={contact.id}'; $result = $filter->filterContent($msg, 1, 1); @@ -120,7 +120,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn /** * We can't handle tokens in the domain so it should not be tracked. */ - public function testLinkWithTokensInDomainFails() { + public function testLinkWithTokensInDomainFails(): void { $filter = new TextClickTracker(); $msg = 'See this: https://{some.domain}.com/foo/bar'; $result = $filter->filterContent($msg, 1, 1); @@ -130,7 +130,7 @@ class ClickTrackerTest extends \PHPUnit\Framework\TestCase implements HeadlessIn /** * We can't handle tokens in the path so it should not be tracked. */ - public function testLinkWithTokensInPathFails() { + public function testLinkWithTokensInPathFails(): void { $filter = new TextClickTracker(); $msg = 'See this: https://example.com/{some.path}'; $result = $filter->filterContent($msg, 1, 1); diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ConcurrentDeliveryTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ConcurrentDeliveryTest.php index b680471225..69a496fa6a 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ConcurrentDeliveryTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ConcurrentDeliveryTest.php @@ -33,7 +33,7 @@ require_once 'tests/phpunit/api/v3/JobProcessMailingTest.php'; */ class ConcurrentDeliveryTest extends \api_v3_JobProcessMailingTest { - public function setUp() { + public function setUp(): void { // Activate before transactions are setup. $manager = \CRM_Extension_System::singleton()->getManager(); if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { @@ -45,7 +45,7 @@ class ConcurrentDeliveryTest extends \api_v3_JobProcessMailingTest { \Civi::settings()->set('flexmailer_traditional', 'flexmailer'); } - public function tearDown() { + public function tearDown(): void { // We're building on someone else's test and don't fully trust them to // protect our settings. Make sure they did. $ok = ('flexmailer' == \Civi::settings()->get('flexmailer_traditional')) @@ -65,11 +65,11 @@ class ConcurrentDeliveryTest extends \api_v3_JobProcessMailingTest { * @dataProvider concurrencyExamples * @see _testConcurrencyCommon */ - public function testConcurrency($settings, $expectedTallies, $expectedTotal) { + public function testConcurrency($settings, $expectedTallies, $expectedTotal): void { parent::testConcurrency($settings, $expectedTallies, $expectedTotal); } - public function testBasic() { + public function testBasic(): void { parent::testBasic(); } diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/FlexMailerSystemTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/FlexMailerSystemTest.php index a5b7d5c2b2..12e8d5e69a 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/FlexMailerSystemTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/FlexMailerSystemTest.php @@ -39,7 +39,7 @@ class FlexMailerSystemTest extends \CRM_Mailing_BaseMailingSystemTest { private $counts; - public function setUp() { + public function setUp(): void { // Activate before transactions are setup. $manager = \CRM_Extension_System::singleton()->getManager(); if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { @@ -80,7 +80,7 @@ class FlexMailerSystemTest extends \CRM_Mailing_BaseMailingSystemTest { $this->assertEquals('flexmailer', $context); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); $this->assertNotEmpty($this->counts['hook_alterMailParams']); foreach (FlexMailer::getEventTypes() as $event => $class) { @@ -106,7 +106,7 @@ class FlexMailerSystemTest extends \CRM_Mailing_BaseMailingSystemTest { $htmlUrlRegex, $textUrlRegex, $params - ) { + ): void { parent::testUrlTracking($inputHtml, $htmlUrlRegex, $textUrlRegex, $params); } @@ -132,19 +132,19 @@ class FlexMailerSystemTest extends \CRM_Mailing_BaseMailingSystemTest { return $cases; } - public function testBasicHeaders() { + public function testBasicHeaders(): void { parent::testBasicHeaders(); } - public function testText() { + public function testText(): void { parent::testText(); } - public function testHtmlWithOpenTracking() { + public function testHtmlWithOpenTracking(): void { parent::testHtmlWithOpenTracking(); } - public function testHtmlWithOpenAndUrlTracking() { + public function testHtmlWithOpenAndUrlTracking(): void { parent::testHtmlWithOpenAndUrlTracking(); } diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/Listener/SimpleFilterTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/Listener/SimpleFilterTest.php index 8a0eba8635..b7d4d7904f 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/Listener/SimpleFilterTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/Listener/SimpleFilterTest.php @@ -29,7 +29,7 @@ use Civi\FlexMailer\FlexMailerTask; */ class SimpleFilterTest extends \CiviUnitTestCase { - public function setUp() { + public function setUp(): void { // Activate before transactions are setup. $manager = \CRM_Extension_System::singleton()->getManager(); if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { @@ -42,7 +42,7 @@ class SimpleFilterTest extends \CiviUnitTestCase { /** * Ensure that the utility `SimpleFilter::byValue()` correctly filters. */ - public function testByValue() { + public function testByValue(): void { $test = $this; list($tasks, $e) = $this->createExampleBatch(); @@ -63,7 +63,7 @@ class SimpleFilterTest extends \CiviUnitTestCase { /** * Ensure that the utility `SimpleFilter::byColumn()` correctly filters. */ - public function testByColumn() { + public function testByColumn(): void { $test = $this; list($tasks, $e) = $this->createExampleBatch(); diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php index 32cdd17597..a6fadbdc8c 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/MailingPreviewTest.php @@ -21,7 +21,7 @@ class MailingPreviewTest extends \CiviUnitTestCase { */ protected $footer; - public function setUp() { + public function setUp(): void { // Activate before transactions are setup. $manager = \CRM_Extension_System::singleton()->getManager(); if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { @@ -56,13 +56,13 @@ class MailingPreviewTest extends \CiviUnitTestCase { )); } - public function tearDown() { + public function tearDown(): void { // DGW \CRM_Mailing_BAO_MailingJob::$mailsProcessed = 0; parent::tearDown(); } - public function testMailerPreview() { + public function testMailerPreview(): void { // BEGIN SAMPLE DATA $contactID = $this->individualCreate(); $displayName = $this->callAPISuccess('contact', 'get', @@ -99,7 +99,7 @@ class MailingPreviewTest extends \CiviUnitTestCase { $this->assertEquals('flexmailer', $previewResult['values']['_rendered_by_']); } - public function testMailerPreviewWithoutId() { + public function testMailerPreviewWithoutId(): void { // BEGIN SAMPLE DATA $contactID = $this->createLoggedInUser(); $displayName = $this->callAPISuccess('contact', 'get', ['id' => $contactID]); @@ -147,7 +147,7 @@ class MailingPreviewTest extends \CiviUnitTestCase { * @param array $expectMaxIds * Array(string $table => int $maxId). */ - protected function assertMaxIds($expectMaxIds) { + protected function assertMaxIds($expectMaxIds): void { foreach ($expectMaxIds as $table => $maxId) { $this->assertDBQuery($expectMaxIds[$table], 'SELECT MAX(id) FROM ' . $table, [], "Table $table should have a maximum ID of $maxId"); } diff --git a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ValidatorTest.php b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ValidatorTest.php index 3b5d999348..35541e5e67 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ValidatorTest.php +++ b/civicrm/ext/flexmailer/tests/phpunit/Civi/FlexMailer/ValidatorTest.php @@ -17,7 +17,7 @@ namespace Civi\FlexMailer; */ class ValidatorTest extends \CiviUnitTestCase { - public function setUp() { + public function setUp(): void { // Activate before transactions are setup. $manager = \CRM_Extension_System::singleton()->getManager(); if ($manager->getStatus('org.civicrm.flexmailer') !== \CRM_Extension_Manager::STATUS_INSTALLED) { @@ -85,7 +85,7 @@ class ValidatorTest extends \CiviUnitTestCase { * @param array $expectedErrors * @dataProvider getExamples */ - public function testExamples($mailingData, $expectedErrors) { + public function testExamples($mailingData, $expectedErrors): void { $mailing = new \CRM_Mailing_DAO_Mailing(); $mailing->copyValues($mailingData); $actualErrors = Validator::createAndRun($mailing); diff --git a/civicrm/ext/flexmailer/tests/phpunit/bootstrap.php b/civicrm/ext/flexmailer/tests/phpunit/bootstrap.php index 048cc4b260..ed4f208fec 100644 --- a/civicrm/ext/flexmailer/tests/phpunit/bootstrap.php +++ b/civicrm/ext/flexmailer/tests/phpunit/bootstrap.php @@ -3,7 +3,6 @@ require_once dirname(dirname(__DIR__)) . '/flexmailer.php'; ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // We need to allow CiviUnitTestCase... but may break E2E support.... diff --git a/civicrm/ext/oauth-client/tests/phpunit/CRM/OAuth/MailSetupTest.php b/civicrm/ext/oauth-client/tests/phpunit/CRM/OAuth/MailSetupTest.php index 06ee4b8c20..d5f8e9a858 100644 --- a/civicrm/ext/oauth-client/tests/phpunit/CRM/OAuth/MailSetupTest.php +++ b/civicrm/ext/oauth-client/tests/phpunit/CRM/OAuth/MailSetupTest.php @@ -18,15 +18,15 @@ class CRM_OAuth_MailSetupTest extends \PHPUnit\Framework\TestCase implements Hea return \Civi\Test::headless()->install('oauth-client')->apply(); } - public function setUp() { + public function setUp(): void { parent::setUp(); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); } - public function testEvalArrayTemplate() { + public function testEvalArrayTemplate(): void { $vars = array( 'token' => [ 'client_id' => 10, diff --git a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientGrantTest.php b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientGrantTest.php index 9cc4a1fe82..a678726d49 100644 --- a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientGrantTest.php +++ b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientGrantTest.php @@ -18,19 +18,19 @@ class api_v4_OAuthClientGrantTest extends \PHPUnit\Framework\TestCase implements return \Civi\Test::headless()->install('oauth-client')->apply(); } - public function setUp() { + public function setUp(): void { parent::setUp(); $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_oauth_client')); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); } /** * Basic sanity check - create, read, and delete a client. */ - public function testAuthorizationCode() { + public function testAuthorizationCode(): void { $usePerms = function($ps) { $base = ['access CiviCRM']; \CRM_Core_Config::singleton()->userPermissionClass->permissions = array_merge($base, $ps); diff --git a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientTest.php b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientTest.php index d4107ea386..34ec0a0973 100644 --- a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientTest.php +++ b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthClientTest.php @@ -18,19 +18,19 @@ class api_v4_OAuthClientTest extends \PHPUnit\Framework\TestCase implements Head return \Civi\Test::headless()->install('oauth-client')->apply(); } - public function setUp() { + public function setUp(): void { parent::setUp(); $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_oauth_client')); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); } /** * Basic sanity check - create, read, and delete a client. */ - public function testBasic() { + public function testBasic(): void { $random = CRM_Utils_String::createRandom(16, CRM_Utils_String::ALPHANUMERIC); $usePerms = function($ps) { $base = ['access CiviCRM']; @@ -83,7 +83,7 @@ class api_v4_OAuthClientTest extends \PHPUnit\Framework\TestCase implements Head } } - public function testUpdateBadProvider() { + public function testUpdateBadProvider(): void { $random = CRM_Utils_String::createRandom(16, CRM_Utils_String::ALPHANUMERIC); $usePerms = function($ps) { $base = ['access CiviCRM']; diff --git a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthProviderTest.php b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthProviderTest.php index a7f54e880e..2643fc9284 100644 --- a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthProviderTest.php +++ b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthProviderTest.php @@ -17,18 +17,18 @@ class api_v4_OAuthProviderTest extends \PHPUnit\Framework\TestCase implements He return \Civi\Test::headless()->install('oauth-client')->apply(); } - public function setUp() { + public function setUp(): void { parent::setUp(); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); } /** * Create, read, and destroy token - with full access to secrets. */ - public function testGet() { + public function testGet(): void { \CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM']; $examples = Civi\Api4\OAuthProvider::get() diff --git a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthSysTokenTest.php b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthSysTokenTest.php index 43b20790bb..bcd0614138 100644 --- a/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthSysTokenTest.php +++ b/civicrm/ext/oauth-client/tests/phpunit/api/v4/OAuthSysTokenTest.php @@ -18,20 +18,20 @@ class api_v4_OAuthSysTokenTest extends \PHPUnit\Framework\TestCase implements He return \Civi\Test::headless()->install('oauth-client')->apply(); } - public function setUp() { + public function setUp(): void { parent::setUp(); $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_oauth_client')); $this->assertEquals(0, CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_oauth_systoken')); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); } /** * Create, read, and destroy token - with full access to secrets. */ - public function testFullApiAccess() { + public function testFullApiAccess(): void { $random = CRM_Utils_String::createRandom(16, CRM_Utils_String::ALPHANUMERIC); $usePerms = function($ps) { $base = ['access CiviCRM']; @@ -86,7 +86,7 @@ class api_v4_OAuthSysTokenTest extends \PHPUnit\Framework\TestCase implements He /** * Create, read, and destroy a token - with limited API access (cannot access token secrets). */ - public function testLimitedApiAccess() { + public function testLimitedApiAccess(): void { $random = CRM_Utils_String::createRandom(16, CRM_Utils_String::ALPHANUMERIC); $usePerms = function($ps) { $base = ['access CiviCRM']; @@ -159,7 +159,7 @@ class api_v4_OAuthSysTokenTest extends \PHPUnit\Framework\TestCase implements He $this->assertEquals("example-refresh-token-$random", $token['refresh_token']); } - public function testGetByScope() { + public function testGetByScope(): void { $random = CRM_Utils_String::createRandom(16, CRM_Utils_String::ALPHANUMERIC); $usePerms = function($ps) { $base = ['access CiviCRM']; diff --git a/civicrm/ext/oauth-client/tests/phpunit/bootstrap.php b/civicrm/ext/oauth-client/tests/phpunit/bootstrap.php index 41c0800198..4d64ac46f2 100644 --- a/civicrm/ext/oauth-client/tests/phpunit/bootstrap.php +++ b/civicrm/ext/oauth-client/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); define('CIVICRM_TEST', 1); // phpcs:disable eval(cv('php:boot --level=classloader', 'phpcode')); diff --git a/civicrm/CRM/Utils/ReCAPTCHA.php b/civicrm/ext/recaptcha/CRM/Utils/ReCAPTCHA.php similarity index 91% rename from civicrm/CRM/Utils/ReCAPTCHA.php rename to civicrm/ext/recaptcha/CRM/Utils/ReCAPTCHA.php index 2764e24264..6faea9d2d3 100644 --- a/civicrm/CRM/Utils/ReCAPTCHA.php +++ b/civicrm/ext/recaptcha/CRM/Utils/ReCAPTCHA.php @@ -8,6 +8,7 @@ | and copyright information, see https://civicrm.org/licensing | +--------------------------------------------------------------------+ */ +use CRM_Recaptcha_ExtensionUtil as E; /** * @@ -78,7 +79,7 @@ class CRM_Utils_ReCAPTCHA { $config = CRM_Core_Config::singleton(); $useSSL = FALSE; if (!function_exists('recaptcha_get_html')) { - require_once 'recaptcha/recaptchalib.php'; + require_once E::path('lib/recaptcha/recaptchalib.php'); } // Load the Recaptcha api.js over HTTPS @@ -96,11 +97,11 @@ class CRM_Utils_ReCAPTCHA { TRUE ); $form->registerRule('recaptcha', 'callback', 'validate', 'CRM_Utils_ReCAPTCHA'); - $form->addRule('g-recaptcha-response', ts('Please go back and complete the CAPTCHA at the bottom of this form.'), 'recaptcha'); + $form->addRule('g-recaptcha-response', E::ts('Please go back and complete the CAPTCHA at the bottom of this form.'), 'recaptcha'); if ($form->isSubmitted() && empty($form->_submitValues['g-recaptcha-response'])) { $form->setElementError( 'g-recaptcha-response', - ts('Please go back and complete the CAPTCHA at the bottom of this form.') + E::ts('Please go back and complete the CAPTCHA at the bottom of this form.') ); } } diff --git a/civicrm/ext/recaptcha/LICENSE.txt b/civicrm/ext/recaptcha/LICENSE.txt new file mode 100644 index 0000000000..b2263d4f70 --- /dev/null +++ b/civicrm/ext/recaptcha/LICENSE.txt @@ -0,0 +1,667 @@ +Package: recaptcha +Copyright (C) 2021, CiviCRM <info@civicrm.org> +Licensed under the GNU Affero Public License 3.0 (below). + +------------------------------------------------------------------------------- + + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +<http://www.gnu.org/licenses/>. diff --git a/civicrm/ext/recaptcha/README.md b/civicrm/ext/recaptcha/README.md new file mode 100644 index 0000000000..bb06bc77e2 --- /dev/null +++ b/civicrm/ext/recaptcha/README.md @@ -0,0 +1,5 @@ +# recaptcha + +Core extension to extract the reCAPTCHA functionality from CiviCRM core so it can be disabled/replaced. + +The extension is licensed under [AGPL-3.0](LICENSE.txt). diff --git a/civicrm/ext/recaptcha/info.xml b/civicrm/ext/recaptcha/info.xml new file mode 100644 index 0000000000..3c2abbcecc --- /dev/null +++ b/civicrm/ext/recaptcha/info.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<extension key="recaptcha" type="module"> + <file>recaptcha</file> + <name>reCAPTCHA</name> + <description>Uses the Google reCAPTCHA web service to improve the CAPTCHA system. It is tough on bots and easy on humans.</description> + <license>AGPL-3.0</license> + <maintainer> + <author>CiviCRM</author> + <email>info@civicrm.org</email> + </maintainer> + <urls> + <url desc="Main Extension Page">https://github.com/civicrm/civicrm-core/tree/master/ext/recaptcha</url> + <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> + </urls> + <releaseDate>2021-04-03</releaseDate> + <version>1.0</version> + <tags> + <tag>mgmt:hidden</tag> + </tags> + <develStage>stable</develStage> + <compatibility> + <ver>5.37</ver> + </compatibility> + <classloader> + <psr4 prefix="Civi\" path="Civi"/> + </classloader> + <civix> + <namespace>CRM/Recaptcha</namespace> + </civix> +</extension> diff --git a/civicrm/packages/recaptcha/LICENSE b/civicrm/ext/recaptcha/lib/recaptcha/LICENSE similarity index 100% rename from civicrm/packages/recaptcha/LICENSE rename to civicrm/ext/recaptcha/lib/recaptcha/LICENSE diff --git a/civicrm/ext/recaptcha/lib/recaptcha/recaptchalib.php b/civicrm/ext/recaptcha/lib/recaptcha/recaptchalib.php new file mode 100644 index 0000000000..6eab91ebac --- /dev/null +++ b/civicrm/ext/recaptcha/lib/recaptcha/recaptchalib.php @@ -0,0 +1,246 @@ +<?php +/* + * This is a PHP library that handles calling reCAPTCHA. + * - Documentation and latest version + * http://recaptcha.net/plugins/php/ + * - Get a reCAPTCHA API Key + * https://www.google.com/recaptcha/admin/create + * - Discussion group + * http://groups.google.com/group/recaptcha + * + * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net + * AUTHORS: + * Mike Crawford + * Ben Maurer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/** + * The reCAPTCHA server URL's + */ +define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api.js"); +define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api.js"); +define("RECAPTCHA_VERIFY_SERVER", "https://www.google.com"); + +use GuzzleHttp\Client; + +/** + * Encodes the given data into a query string format + * @param $data - array of string elements to be encoded + * @return string - encoded request + */ +function _recaptcha_qsencode ($data) { + $req = ""; + foreach ($data as $key => $value) { + $req .= $key . '=' . urlencode(stripslashes($value)) . '&'; + } + + // Cut the last '&' + $req = substr($req, 0, strlen($req) - 1); + return $req; +} + +/** + * Submits an HTTP POST to a reCAPTCHA server + * @param string $host + * @param string $path + * @param array $data + * @return string response + */ +function _recaptcha_http_post($host, $path, $data) { + $client = new Client(); + try { + $response = $client->request('POST', $host . '/' . $path, ['query' => $data]); + } + catch (Exception $e) { + return ''; + } + return (string) $response->getBody(); +} + +/** + * Gets the challenge HTML (javascript and non-javascript version). + * This is called from the browser, and the resulting reCAPTCHA HTML widget + * is embedded within the HTML form it was called from. + * @param string $pubkey A public key for reCAPTCHA + * @param string $error The error given by reCAPTCHA (optional, default is null) + * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) + * + * @return string - The HTML to be embedded in the user's form. + */ +function recaptcha_get_html ($pubkey, $error = NULL, $use_ssl = FALSE) { + if ($pubkey == NULL || $pubkey == '') { + die("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); + } + + if ($use_ssl) { + $server = RECAPTCHA_API_SECURE_SERVER; + } + else { + $server = RECAPTCHA_API_SERVER; + } + + $errorpart = ""; + if ($error) { + $errorpart = "&error=" . $error; + } + return '<div class="g-recaptcha" data-sitekey="' . $pubkey . '"></div> + <script type="text/javascript" src="' . $server . '"></script> + + <noscript> + <iframe src="' . $server . '" height="300" width="500" frameborder="0"></iframe><br/> + <div class="g-recaptcha" data-sitekey="' . $pubkey . '"></div> + </noscript>'; +} + +/** + * A ReCaptchaResponse is returned from recaptcha_check_answer() + */ +class ReCaptchaResponse { + public $is_valid; + public $error; + +} + +/** + * Calls an HTTP POST function to verify if the user's guess was correct + * @param string $privkey + * @param string $remoteip + * @param string $response + * @param array $extra_params an array of extra variables to post to the server + * @return ReCaptchaResponse + */ +function recaptcha_check_answer ($privkey, $remoteip, $response, $extra_params = array()) { + if ($privkey == NULL || $privkey == '') { + die("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); + } + + if ($remoteip == NULL || $remoteip == '') { + die("For security reasons, you must pass the remote ip to reCAPTCHA"); + } + + //discard spam submissions + if ($response == NULL || strlen($response) == 0) { + $recaptcha_response = new ReCaptchaResponse(); + $recaptcha_response->is_valid = FALSE; + $recaptcha_response->error = 'incorrect-captcha-sol'; + return $recaptcha_response; + } + + $validationResponse = _recaptcha_http_post(RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/siteverify", + [ + 'secret' => $privkey, + 'remoteip' => $remoteip, + 'response' => $response, + ] + $extra_params + ); + + $answers = json_decode($validationResponse, TRUE); + $recaptcha_response = new ReCaptchaResponse(); + + $recaptcha_response->is_valid = $answers['success']; + $recaptcha_response->error = $answers['error-codes']; + return $recaptcha_response; + +} + +/** + * gets a URL where the user can sign up for reCAPTCHA. If your application + * has a configuration page where you enter a key, you should provide a link + * using this function. + * @param string $domain The domain where the page is hosted + * @param string $appname The name of your application + */ +function recaptcha_get_signup_url ($domain = NULL, $appname = NULL) { + return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode(array('domains' => $domain, 'app' => $appname)); +} + +function _recaptcha_aes_pad($val) { + $block_size = 16; + $numpad = $block_size - (strlen($val) % $block_size); + return str_pad($val, strlen($val) + $numpad, chr($numpad)); +} + +/** + * Mailhide related code + */ +function _recaptcha_aes_encrypt($val, $ky) { + if (!function_exists("mcrypt_encrypt")) { + die("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); + } + $mode = MCRYPT_MODE_CBC; + $enc = MCRYPT_RIJNDAEL_128; + $val = _recaptcha_aes_pad($val); + return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); +} + +function _recaptcha_mailhide_urlbase64 ($x) { + return strtr(base64_encode($x), '+/', '-_'); +} + +/** + * gets the reCAPTCHA Mailhide url for a given email, public key and private key + */ +function recaptcha_mailhide_url($pubkey, $privkey, $email) { + if ($pubkey == '' || $pubkey == NULL || $privkey == "" || $privkey == NULL) { + die("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . + "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>"); + } + + $ky = pack('H*', $privkey); + $cryptmail = _recaptcha_aes_encrypt($email, $ky); + + return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64($cryptmail); +} + +/** + * gets the parts of the email to expose to the user. + * eg, given johndoe@example,com return ["john", "example.com"]. + * the email is then displayed as john...@example.com + */ +function _recaptcha_mailhide_email_parts ($email) { + $arr = preg_split("/@/", $email); + + if (strlen($arr[0]) <= 4) { + $arr[0] = substr($arr[0], 0, 1); + } + elseif (strlen($arr[0]) <= 6) { + $arr[0] = substr($arr[0], 0, 3); + } + else { + $arr[0] = substr($arr[0], 0, 4); + } + return $arr; +} + +/** + * Gets html to display an email address given a public an private key. + * to get a key, go to: + * + * http://www.google.com/recaptcha/mailhide/apikey + */ +function recaptcha_mailhide_html($pubkey, $privkey, $email) { + $emailparts = _recaptcha_mailhide_email_parts($email); + $url = recaptcha_mailhide_url($pubkey, $privkey, $email); + + return htmlentities($emailparts[0]) . "<a href='" . htmlentities($url) . + "' onclick=\"window.open('" . htmlentities($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities($emailparts[1]); + +} diff --git a/civicrm/ext/recaptcha/recaptcha.civix.php b/civicrm/ext/recaptcha/recaptcha.civix.php new file mode 100644 index 0000000000..53696864e2 --- /dev/null +++ b/civicrm/ext/recaptcha/recaptcha.civix.php @@ -0,0 +1,477 @@ +<?php + +// AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file + +/** + * The ExtensionUtil class provides small stubs for accessing resources of this + * extension. + */ +class CRM_Recaptcha_ExtensionUtil { + const SHORT_NAME = 'recaptcha'; + const LONG_NAME = 'recaptcha'; + const CLASS_PREFIX = 'CRM_Recaptcha'; + + /** + * Translate a string using the extension's domain. + * + * If the extension doesn't have a specific translation + * for the string, fallback to the default translations. + * + * @param string $text + * Canonical message text (generally en_US). + * @param array $params + * @return string + * Translated text. + * @see ts + */ + public static function ts($text, $params = []) { + if (!array_key_exists('domain', $params)) { + $params['domain'] = [self::LONG_NAME, NULL]; + } + return ts($text, $params); + } + + /** + * Get the URL of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: 'http://example.org/sites/default/ext/org.example.foo'. + * Ex: 'http://example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function url($file = NULL) { + if ($file === NULL) { + return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/'); + } + return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file); + } + + /** + * Get the path of a resource file (in this extension). + * + * @param string|NULL $file + * Ex: NULL. + * Ex: 'css/foo.css'. + * @return string + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo'. + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo/css/foo.css'. + */ + public static function path($file = NULL) { + // return CRM_Core_Resources::singleton()->getPath(self::LONG_NAME, $file); + return __DIR__ . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); + } + + /** + * Get the name of a class within this extension. + * + * @param string $suffix + * Ex: 'Page_HelloWorld' or 'Page\\HelloWorld'. + * @return string + * Ex: 'CRM_Foo_Page_HelloWorld'. + */ + public static function findClass($suffix) { + return self::CLASS_PREFIX . '_' . str_replace('\\', '_', $suffix); + } + +} + +use CRM_Recaptcha_ExtensionUtil as E; + +/** + * (Delegated) Implements hook_civicrm_config(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config + */ +function _recaptcha_civix_civicrm_config(&$config = NULL) { + static $configured = FALSE; + if ($configured) { + return; + } + $configured = TRUE; + + $template =& CRM_Core_Smarty::singleton(); + + $extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR; + $extDir = $extRoot . 'templates'; + + if (is_array($template->template_dir)) { + array_unshift($template->template_dir, $extDir); + } + else { + $template->template_dir = [$extDir, $template->template_dir]; + } + + $include_path = $extRoot . PATH_SEPARATOR . get_include_path(); + set_include_path($include_path); +} + +/** + * (Delegated) Implements hook_civicrm_xmlMenu(). + * + * @param $files array(string) + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu + */ +function _recaptcha_civix_civicrm_xmlMenu(&$files) { + foreach (_recaptcha_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { + $files[] = $file; + } +} + +/** + * Implements hook_civicrm_install(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install + */ +function _recaptcha_civix_civicrm_install() { + _recaptcha_civix_civicrm_config(); + if ($upgrader = _recaptcha_civix_upgrader()) { + $upgrader->onInstall(); + } +} + +/** + * Implements hook_civicrm_postInstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall + */ +function _recaptcha_civix_civicrm_postInstall() { + _recaptcha_civix_civicrm_config(); + if ($upgrader = _recaptcha_civix_upgrader()) { + if (is_callable([$upgrader, 'onPostInstall'])) { + $upgrader->onPostInstall(); + } + } +} + +/** + * Implements hook_civicrm_uninstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall + */ +function _recaptcha_civix_civicrm_uninstall() { + _recaptcha_civix_civicrm_config(); + if ($upgrader = _recaptcha_civix_upgrader()) { + $upgrader->onUninstall(); + } +} + +/** + * (Delegated) Implements hook_civicrm_enable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable + */ +function _recaptcha_civix_civicrm_enable() { + _recaptcha_civix_civicrm_config(); + if ($upgrader = _recaptcha_civix_upgrader()) { + if (is_callable([$upgrader, 'onEnable'])) { + $upgrader->onEnable(); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_disable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable + * @return mixed + */ +function _recaptcha_civix_civicrm_disable() { + _recaptcha_civix_civicrm_config(); + if ($upgrader = _recaptcha_civix_upgrader()) { + if (is_callable([$upgrader, 'onDisable'])) { + $upgrader->onDisable(); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_upgrade(). + * + * @param $op string, the type of operation being performed; 'check' or 'enqueue' + * @param $queue CRM_Queue_Queue, (for 'enqueue') the modifiable list of pending up upgrade tasks + * + * @return mixed + * based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending) + * for 'enqueue', returns void + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade + */ +function _recaptcha_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { + if ($upgrader = _recaptcha_civix_upgrader()) { + return $upgrader->onUpgrade($op, $queue); + } +} + +/** + * @return CRM_Recaptcha_Upgrader + */ +function _recaptcha_civix_upgrader() { + if (!file_exists(__DIR__ . '/CRM/Recaptcha/Upgrader.php')) { + return NULL; + } + else { + return CRM_Recaptcha_Upgrader_Base::instance(); + } +} + +/** + * Search directory tree for files which match a glob pattern. + * + * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. + * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() + * + * @param string $dir base dir + * @param string $pattern , glob pattern, eg "*.txt" + * + * @return array + */ +function _recaptcha_civix_find_files($dir, $pattern) { + if (is_callable(['CRM_Utils_File', 'findFiles'])) { + return CRM_Utils_File::findFiles($dir, $pattern); + } + + $todos = [$dir]; + $result = []; + while (!empty($todos)) { + $subdir = array_shift($todos); + foreach (_recaptcha_civix_glob("$subdir/$pattern") as $match) { + if (!is_dir($match)) { + $result[] = $match; + } + } + if ($dh = opendir($subdir)) { + while (FALSE !== ($entry = readdir($dh))) { + $path = $subdir . DIRECTORY_SEPARATOR . $entry; + if ($entry[0] == '.') { + } + elseif (is_dir($path)) { + $todos[] = $path; + } + } + closedir($dh); + } + } + return $result; +} + +/** + * (Delegated) Implements hook_civicrm_managed(). + * + * Find any *.mgd.php files, merge their content, and return. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed + */ +function _recaptcha_civix_civicrm_managed(&$entities) { + $mgdFiles = _recaptcha_civix_find_files(__DIR__, '*.mgd.php'); + sort($mgdFiles); + foreach ($mgdFiles as $file) { + $es = include $file; + foreach ($es as $e) { + if (empty($e['module'])) { + $e['module'] = E::LONG_NAME; + } + if (empty($e['params']['version'])) { + $e['params']['version'] = '3'; + } + $entities[] = $e; + } + } +} + +/** + * (Delegated) Implements hook_civicrm_caseTypes(). + * + * Find any and return any files matching "xml/case/*.xml" + * + * Note: This hook only runs in CiviCRM 4.4+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes + */ +function _recaptcha_civix_civicrm_caseTypes(&$caseTypes) { + if (!is_dir(__DIR__ . '/xml/case')) { + return; + } + + foreach (_recaptcha_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { + $name = preg_replace('/\.xml$/', '', basename($file)); + if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { + $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); + throw new CRM_Core_Exception($errorMessage); + } + $caseTypes[$name] = [ + 'module' => E::LONG_NAME, + 'name' => $name, + 'file' => $file, + ]; + } +} + +/** + * (Delegated) Implements hook_civicrm_angularModules(). + * + * Find any and return any files matching "ang/*.ang.php" + * + * Note: This hook only runs in CiviCRM 4.5+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules + */ +function _recaptcha_civix_civicrm_angularModules(&$angularModules) { + if (!is_dir(__DIR__ . '/ang')) { + return; + } + + $files = _recaptcha_civix_glob(__DIR__ . '/ang/*.ang.php'); + foreach ($files as $file) { + $name = preg_replace(':\.ang\.php$:', '', basename($file)); + $module = include $file; + if (empty($module['ext'])) { + $module['ext'] = E::LONG_NAME; + } + $angularModules[$name] = $module; + } +} + +/** + * (Delegated) Implements hook_civicrm_themes(). + * + * Find any and return any files matching "*.theme.php" + */ +function _recaptcha_civix_civicrm_themes(&$themes) { + $files = _recaptcha_civix_glob(__DIR__ . '/*.theme.php'); + foreach ($files as $file) { + $themeMeta = include $file; + if (empty($themeMeta['name'])) { + $themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file)); + } + if (empty($themeMeta['ext'])) { + $themeMeta['ext'] = E::LONG_NAME; + } + $themes[$themeMeta['name']] = $themeMeta; + } +} + +/** + * Glob wrapper which is guaranteed to return an array. + * + * The documentation for glob() says, "On some systems it is impossible to + * distinguish between empty match and an error." Anecdotally, the return + * result for an empty match is sometimes array() and sometimes FALSE. + * This wrapper provides consistency. + * + * @link http://php.net/glob + * @param string $pattern + * + * @return array + */ +function _recaptcha_civix_glob($pattern) { + $result = glob($pattern); + return is_array($result) ? $result : []; +} + +/** + * Inserts a navigation menu item at a given place in the hierarchy. + * + * @param array $menu - menu hierarchy + * @param string $path - path to parent of this item, e.g. 'my_extension/submenu' + * 'Mailing', or 'Administer/System Settings' + * @param array $item - the item to insert (parent/child attributes will be + * filled for you) + * + * @return bool + */ +function _recaptcha_civix_insert_navigation_menu(&$menu, $path, $item) { + // If we are done going down the path, insert menu + if (empty($path)) { + $menu[] = [ + 'attributes' => array_merge([ + 'label' => CRM_Utils_Array::value('name', $item), + 'active' => 1, + ], $item), + ]; + return TRUE; + } + else { + // Find an recurse into the next level down + $found = FALSE; + $path = explode('/', $path); + $first = array_shift($path); + foreach ($menu as $key => &$entry) { + if ($entry['attributes']['name'] == $first) { + if (!isset($entry['child'])) { + $entry['child'] = []; + } + $found = _recaptcha_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item); + } + } + return $found; + } +} + +/** + * (Delegated) Implements hook_civicrm_navigationMenu(). + */ +function _recaptcha_civix_navigationMenu(&$nodes) { + if (!is_callable(['CRM_Core_BAO_Navigation', 'fixNavigationMenu'])) { + _recaptcha_civix_fixNavigationMenu($nodes); + } +} + +/** + * Given a navigation menu, generate navIDs for any items which are + * missing them. + */ +function _recaptcha_civix_fixNavigationMenu(&$nodes) { + $maxNavID = 1; + array_walk_recursive($nodes, function($item, $key) use (&$maxNavID) { + if ($key === 'navID') { + $maxNavID = max($maxNavID, $item); + } + }); + _recaptcha_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL); +} + +function _recaptcha_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) { + $origKeys = array_keys($nodes); + foreach ($origKeys as $origKey) { + if (!isset($nodes[$origKey]['attributes']['parentID']) && $parentID !== NULL) { + $nodes[$origKey]['attributes']['parentID'] = $parentID; + } + // If no navID, then assign navID and fix key. + if (!isset($nodes[$origKey]['attributes']['navID'])) { + $newKey = ++$maxNavID; + $nodes[$origKey]['attributes']['navID'] = $newKey; + $nodes[$newKey] = $nodes[$origKey]; + unset($nodes[$origKey]); + $origKey = $newKey; + } + if (isset($nodes[$origKey]['child']) && is_array($nodes[$origKey]['child'])) { + _recaptcha_civix_fixNavigationMenuItems($nodes[$origKey]['child'], $maxNavID, $nodes[$origKey]['attributes']['navID']); + } + } +} + +/** + * (Delegated) Implements hook_civicrm_alterSettingsFolders(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders + */ +function _recaptcha_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { + $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; + if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) { + $metaDataFolders[] = $settingsDir; + } +} + +/** + * (Delegated) Implements hook_civicrm_entityTypes(). + * + * Find any *.entityType.php files, merge their content, and return. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes + */ +function _recaptcha_civix_civicrm_entityTypes(&$entityTypes) { + $entityTypes = array_merge($entityTypes, []); +} diff --git a/civicrm/ext/recaptcha/recaptcha.php b/civicrm/ext/recaptcha/recaptcha.php new file mode 100644 index 0000000000..4cf2ea5523 --- /dev/null +++ b/civicrm/ext/recaptcha/recaptcha.php @@ -0,0 +1,164 @@ +<?php + +require_once 'recaptcha.civix.php'; +// phpcs:disable +use CRM_Recaptcha_ExtensionUtil as E; +// phpcs:enable + +/** + * Implements hook_civicrm_config(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config/ + */ +function recaptcha_civicrm_config(&$config) { + _recaptcha_civix_civicrm_config($config); +} + +/** + * Implements hook_civicrm_xmlMenu(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu + */ +function recaptcha_civicrm_xmlMenu(&$files) { + _recaptcha_civix_civicrm_xmlMenu($files); +} + +/** + * Implements hook_civicrm_install(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install + */ +function recaptcha_civicrm_install() { + _recaptcha_civix_civicrm_install(); +} + +/** + * Implements hook_civicrm_postInstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall + */ +function recaptcha_civicrm_postInstall() { + _recaptcha_civix_civicrm_postInstall(); +} + +/** + * Implements hook_civicrm_uninstall(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall + */ +function recaptcha_civicrm_uninstall() { + _recaptcha_civix_civicrm_uninstall(); +} + +/** + * Implements hook_civicrm_enable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable + */ +function recaptcha_civicrm_enable() { + _recaptcha_civix_civicrm_enable(); +} + +/** + * Implements hook_civicrm_disable(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable + */ +function recaptcha_civicrm_disable() { + _recaptcha_civix_civicrm_disable(); +} + +/** + * Implements hook_civicrm_upgrade(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade + */ +function recaptcha_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { + return _recaptcha_civix_civicrm_upgrade($op, $queue); +} + +/** + * Implements hook_civicrm_managed(). + * + * Generate a list of entities to create/deactivate/delete when this module + * is installed, disabled, uninstalled. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed + */ +function recaptcha_civicrm_managed(&$entities) { + _recaptcha_civix_civicrm_managed($entities); +} + +/** + * Implements hook_civicrm_angularModules(). + * + * Generate a list of Angular modules. + * + * Note: This hook only runs in CiviCRM 4.5+. It may + * use features only available in v4.6+. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules + */ +function recaptcha_civicrm_angularModules(&$angularModules) { + _recaptcha_civix_civicrm_angularModules($angularModules); +} + +/** + * Implements hook_civicrm_alterSettingsFolders(). + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders + */ +function recaptcha_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { + _recaptcha_civix_civicrm_alterSettingsFolders($metaDataFolders); +} + +/** + * Implements hook_civicrm_entityTypes(). + * + * Declare entity types provided by this module. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes + */ +function recaptcha_civicrm_entityTypes(&$entityTypes) { + _recaptcha_civix_civicrm_entityTypes($entityTypes); +} + +/** + * Implements hook_civicrm_navigationMenu(). + */ +function recaptcha_civicrm_navigationMenu(&$menu) { + _recaptcha_civix_insert_navigation_menu($menu, 'Administer/Customize Data and Screens', [ + 'label' => E::ts('reCAPTCHA Settings'), + 'name' => 'recaptcha_settings', + 'url' => 'civicrm/admin/setting/recaptcha', + 'permission' => 'administer CiviCRM', + 'operator' => 'OR', + 'separator' => 0, + ]); + _recaptcha_civix_navigationMenu($menu); +} + +/** + * Intercept form functions + */ +function recaptcha_civicrm_buildForm($formName, &$form) { + switch ($formName) { + case 'CRM_Admin_Form_Generic': + if ($form->getSettingPageFilter() !== 'recaptcha') { + return; + } + + $helpText = E::ts( + 'reCAPTCHA is a free service that helps prevent automated abuse of your site. To use it on public-facing CiviCRM forms: sign up at <a href="%1" target="_blank">Google\'s reCaptcha site</a>; enter the provided public and private keys here; then enable reCAPTCHA under Advanced Settings in any Profile.', + [ + 1 => 'https://www.google.com/recaptcha', + ] + ) + . '<br/><strong>' . E::ts('Only the reCAPTCHA v2 checkbox type is supported.') . '</strong>'; + \Civi::resources() + ->addMarkup('<div class="help">' . $helpText . '</div>', [ + 'weight' => -1, + 'region' => 'page-body', + ]); + } +} diff --git a/civicrm/ext/recaptcha/settings/recaptcha.setting.php b/civicrm/ext/recaptcha/settings/recaptcha.setting.php new file mode 100644 index 0000000000..32768e35d3 --- /dev/null +++ b/civicrm/ext/recaptcha/settings/recaptcha.setting.php @@ -0,0 +1,110 @@ +<?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 | + +--------------------------------------------------------------------+ + */ + +use CRM_Recaptcha_ExtensionUtil as E; + +/** + * Settings metadata file + */ +return [ + 'recaptchaPublicKey' => [ + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'recaptchaPublicKey', + 'type' => 'String', + 'quick_form_type' => 'Element', + 'html_attributes' => [ + 'size' => 64, + 'maxlength' => 64, + ], + 'html_type' => 'text', + 'default' => NULL, + 'add' => '4.3', + 'title' => E::ts('reCAPTCHA Site Key'), + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => NULL, + 'help_text' => NULL, + 'settings_pages' => [ + 'recaptcha' => [ + 'weight' => 10, + ], + ], + ], + 'recaptchaPrivateKey' => [ + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'recaptchaPrivateKey', + 'type' => 'String', + 'quick_form_type' => 'Element', + 'html_attributes' => [ + 'size' => 64, + 'maxlength' => 64, + ], + 'html_type' => 'text', + 'default' => NULL, + 'add' => '4.3', + 'title' => E::ts('reCAPTCHA Secret Key'), + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => NULL, + 'help_text' => NULL, + 'settings_pages' => [ + 'recaptcha' => [ + 'weight' => 10, + ], + ], + ], + 'forceRecaptcha' => [ + 'add' => '4.7', + 'help_text' => NULL, + 'is_domain' => 1, + 'is_contact' => 0, + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'forceRecaptcha', + 'type' => 'Boolean', + 'quick_form_type' => 'YesNo', + 'html_type' => '', + 'default' => '0', + 'title' => E::ts('Force reCAPTCHA on Contribution pages'), + 'description' => E::ts('If enabled, reCAPTCHA will show on all contribution pages.'), + 'settings_pages' => [ + 'recaptcha' => [ + 'weight' => 10, + ], + ], + ], + 'recaptchaOptions' => [ + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'recaptchaOptions', + 'type' => 'String', + 'quick_form_type' => 'Element', + 'html_attributes' => [ + 'size' => 64, + 'maxlength' => 64, + ], + 'html_type' => 'text', + 'default' => NULL, + 'add' => '4.3', + 'title' => E::ts('reCAPTCHA Options'), + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => E::ts('You can specify the reCAPTCHA theme options as comma separated data.(eg: theme:\'blackglass\', lang : \'fr\' ). Check the available options at <a href="https://developers.google.com/recaptcha/docs/display#config">Customizing the Look and Feel of reCAPTCHA</a>.'), + 'help_text' => NULL, + 'settings_pages' => [ + 'recaptcha' => [ + 'weight' => 10, + ], + ], + ], +]; diff --git a/civicrm/templates/CRM/common/ReCAPTCHA.tpl b/civicrm/ext/recaptcha/templates/CRM/common/ReCAPTCHA.tpl similarity index 100% rename from civicrm/templates/CRM/common/ReCAPTCHA.tpl rename to civicrm/ext/recaptcha/templates/CRM/common/ReCAPTCHA.tpl diff --git a/civicrm/ext/recaptcha/xml/Menu/recaptcha.xml b/civicrm/ext/recaptcha/xml/Menu/recaptcha.xml new file mode 100644 index 0000000000..46472f77a8 --- /dev/null +++ b/civicrm/ext/recaptcha/xml/Menu/recaptcha.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<menu> + <item> + <path>civicrm/admin/setting/recaptcha</path> + <title>reCAPTCHA Settings</title> + <page_callback>CRM_Admin_Form_Generic</page_callback> + <access_arguments>administer CiviCRM</access_arguments> + </item> +</menu> diff --git a/civicrm/ext/search/CRM/Search/Page/Admin.php b/civicrm/ext/search/CRM/Search/Page/Admin.php index 5ab061f1dc..315a0efc96 100644 --- a/civicrm/ext/search/CRM/Search/Page/Admin.php +++ b/civicrm/ext/search/CRM/Search/Page/Admin.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use CRM_Search_ExtensionUtil as E; + /** * Angular base page for search admin */ @@ -16,18 +18,15 @@ class CRM_Search_Page_Admin extends CRM_Core_Page { public function run() { $breadCrumb = [ - 'title' => ts('Search Kit'), + 'title' => E::ts('Search Kit'), 'url' => CRM_Utils_System::url('civicrm/admin/search', NULL, FALSE, '/list'), ]; CRM_Utils_System::appendBreadCrumb([$breadCrumb]); // Load angular module - $loader = new Civi\Angular\AngularLoader(); - $loader->setPageName('civicrm/admin/search'); - $loader->useApp([ - 'defaultRoute' => '/list', - ]); - $loader->load(); + Civi::service('angularjs.loader') + ->useApp(['defaultRoute' => '/list']); + parent::run(); } diff --git a/civicrm/ext/search/CRM/Search/Page/Search.php b/civicrm/ext/search/CRM/Search/Page/Search.php index ffd4ce40cd..d73e1b274f 100644 --- a/civicrm/ext/search/CRM/Search/Page/Search.php +++ b/civicrm/ext/search/CRM/Search/Page/Search.php @@ -18,13 +18,7 @@ class CRM_Search_Page_Search extends CRM_Core_Page { public function run() { - Civi::resources()->addBundle('bootstrap3'); - - // Load angular module - $loader = new Civi\Angular\AngularLoader(); - $loader->setPageName('civicrm/search'); - $loader->useApp(); - $loader->load(); + Civi::service('angularjs.loader')->useApp(); if (CRM_Core_Permission::check('administer CiviCRM')) { CRM_Utils_System::appendBreadCrumb([['title' => E::ts('Search Kit'), 'url' => CRM_Utils_System::url('civicrm/admin/search')]]); diff --git a/civicrm/ext/search/CRM/Search/Upgrader.php b/civicrm/ext/search/CRM/Search/Upgrader.php index 670d3ca545..3f6de4d5ee 100644 --- a/civicrm/ext/search/CRM/Search/Upgrader.php +++ b/civicrm/ext/search/CRM/Search/Upgrader.php @@ -84,4 +84,53 @@ class CRM_Search_Upgrader extends CRM_Search_Upgrader_Base { return TRUE; } + /** + * Upgrade 1002 - embellish search display link data + * @return bool + */ + public function upgrade_1002() { + $this->ctx->log->info('Applying update 1002 - embellish search display link data.'); + $displays = \Civi\Api4\SearchDisplay::get(FALSE) + ->setSelect(['id', 'settings']) + ->execute(); + foreach ($displays as $display) { + $update = FALSE; + foreach ($display['settings']['columns'] ?? [] as $c => $column) { + if (!empty($column['link'])) { + $display['settings']['columns'][$c]['link'] = ['path' => $column['link']]; + $update = TRUE; + } + } + if ($update) { + \Civi\Api4\SearchDisplay::update(FALSE) + ->setValues($display) + ->execute(); + } + } + return TRUE; + } + + /** + * Upgrade 1003 - update APIv4 join syntax in saved searches + * @return bool + */ + public function upgrade_1003() { + $this->ctx->log->info('Applying 1003 - update APIv4 join syntax in saved searches.'); + $savedSearches = \Civi\Api4\SavedSearch::get(FALSE) + ->addSelect('id', 'api_params') + ->addWhere('api_params', 'IS NOT NULL') + ->execute(); + foreach ($savedSearches as $savedSearch) { + foreach ($savedSearch['api_params']['join'] ?? [] as $i => $join) { + $savedSearch['api_params']['join'][$i][1] = empty($join[1]) ? 'LEFT' : 'INNER'; + } + if (!empty($savedSearch['api_params']['join'])) { + \Civi\Api4\SavedSearch::update(FALSE) + ->setValues($savedSearch) + ->execute(); + } + } + return TRUE; + } + } diff --git a/civicrm/ext/search/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php b/civicrm/ext/search/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php new file mode 100644 index 0000000000..4cd63717de --- /dev/null +++ b/civicrm/ext/search/Civi/Api4/Action/SearchDisplay/GetSearchTasks.php @@ -0,0 +1,95 @@ +<?php + +namespace Civi\Api4\Action\SearchDisplay; + +use CRM_Search_ExtensionUtil as E; +use Civi\Api4\Entity; + +/** + * Load the available tasks for a given entity. + * + * @package Civi\Api4\Action\SearchDisplay + */ +class GetSearchTasks extends \Civi\Api4\Generic\AbstractAction { + + /** + * Name of entity + * @var string + * @required + */ + protected $entity; + + /** + * @param \Civi\Api4\Generic\Result $result + * @throws \API_Exception + */ + public function _run(\Civi\Api4\Generic\Result $result) { + $entity = Entity::get($this->checkPermissions)->addWhere('name', '=', $this->entity) + ->addSelect('name', 'title_plural') + ->setChain(['actions' => [$this->entity, 'getActions', ['where' => [['name', 'IN', ['update', 'delete']]]], 'name']]) + ->execute()->first(); + + if (!$entity) { + return; + } + $tasks = []; + + if (array_key_exists($entity['name'], \CRM_Export_BAO_Export::getComponents())) { + $tasks[] = [ + 'name' => 'export', + 'title' => E::ts('Export %1', [1 => $entity['title_plural']]), + 'icon' => 'fa-file-excel-o', + 'crmPopup' => [ + 'path' => "'civicrm/export/standalone'", + 'query' => "{entity: '{$entity['name']}', id: ids.join(',')}", + ], + ]; + } + + if (array_key_exists('update', $entity['actions'])) { + $tasks[] = [ + 'name' => 'update', + 'title' => E::ts('Update %1', [1 => $entity['title_plural']]), + 'icon' => 'fa-save', + 'uiDialog' => ['templateUrl' => '~/crmSearchActions/crmSearchActionUpdate.html'], + ]; + } + + if (array_key_exists('delete', $entity['actions'])) { + $tasks[] = [ + 'name' => 'delete', + 'title' => E::ts('Delete %1', [1 => $entity['title_plural']]), + 'icon' => 'fa-trash', + 'uiDialog' => ['templateUrl' => '~/crmSearchActions/crmSearchActionDelete.html'], + ]; + } + + if ($entity['name'] === 'Contact') { + // Add contact tasks which support standalone mode (with a 'url' property) + $contactTasks = \CRM_Contact_Task::permissionedTaskTitles(\CRM_Core_Permission::getPermission()); + foreach (\CRM_Contact_Task::tasks() as $id => $task) { + if (isset($contactTasks[$id]) && !empty($task['url']) && $task['url'] !== 'civicrm/task/delete-contact') { + if ($task['url'] === 'civicrm/task/pick-profile') { + $task['title'] = E::ts('Profile Update'); + } + $tasks[] = [ + 'name' => 'contact.' . $id, + 'title' => $task['title'], + 'icon' => $task['icon'] ?? 'fa-gear', + 'crmPopup' => [ + 'path' => "'{$task['url']}'", + 'query' => "{cids: ids.join(',')}", + ], + ]; + } + } + } + + usort($tasks, function($a, $b) { + return strnatcasecmp($a['title'], $b['title']); + }); + + $result->exchangeArray($tasks); + } + +} diff --git a/civicrm/ext/search/Civi/Api4/Action/SearchDisplay/Run.php b/civicrm/ext/search/Civi/Api4/Action/SearchDisplay/Run.php index 9a890b6aa8..57567b34e6 100644 --- a/civicrm/ext/search/Civi/Api4/Action/SearchDisplay/Run.php +++ b/civicrm/ext/search/Civi/Api4/Action/SearchDisplay/Run.php @@ -5,6 +5,7 @@ namespace Civi\Api4\Action\SearchDisplay; use Civi\API\Exception\UnauthorizedException; use Civi\Api4\SavedSearch; use Civi\Api4\SearchDisplay; +use Civi\Api4\Utils\CoreUtil; /** * Load the results for rendering a SearchDisplay. @@ -31,7 +32,7 @@ class Run extends \Civi\Api4\Generic\AbstractAction { * Array of fields to use for ordering the results * @var array */ - protected $sort; + protected $sort = []; /** * Should this api call return a page of results or the row_count or the ids @@ -79,6 +80,7 @@ class Run extends \Civi\Api4\Generic\AbstractAction { } if (is_string($this->display) && !empty($this->savedSearch['id'])) { $this->display = SearchDisplay::get(FALSE) + ->setSelect(['*', 'type:name']) ->addWhere('name', '=', $this->display) ->addWhere('saved_search_id', '=', $this->savedSearch['id']) ->execute()->first(); @@ -88,6 +90,8 @@ class Run extends \Civi\Api4\Generic\AbstractAction { } $entityName = $this->savedSearch['api_entity']; $apiParams =& $this->savedSearch['api_params']; + $apiParams['checkPermissions'] = $this->checkPermissions; + $apiParams += ['where' => []]; $settings = $this->display['settings']; $page = NULL; @@ -134,6 +138,12 @@ class Run extends \Civi\Api4\Generic\AbstractAction { $apiParams['select'][] = $idField; } } + // Select value fields for in-place editing + foreach ($settings['columns'] ?? [] as $column) { + if (isset($column['editable']['value']) && !in_array($column['editable']['value'], $apiParams['select'])) { + $apiParams['select'][] = $column['editable']['value']; + } + } } $this->applyFilters(); @@ -144,14 +154,25 @@ class Run extends \Civi\Api4\Generic\AbstractAction { $result->exchangeArray($apiResult->getArrayCopy()); } + /** + * Checks if a filter contains a non-empty value + * + * "Empty" search values are [], '', and NULL. + * Also recursively checks arrays to ensure they contain at least one non-empty value. + * + * @param $value + * @return bool + */ + private function hasValue($value) { + return $value !== '' && $value !== NULL && (!is_array($value) || array_filter($value, [$this, 'hasValue'])); + } + /** * Applies supplied filters to the where clause */ private function applyFilters() { // Ignore empty strings - $filters = array_filter($this->filters, function($value) { - return isset($value) && (strlen($value) || !is_string($value)); - }); + $filters = array_filter($this->filters, [$this, 'hasValue']); if (!$filters) { return; } @@ -178,37 +199,58 @@ class Run extends \Civi\Api4\Generic\AbstractAction { /** * @param string $fieldName - * @param string $value + * @param mixed $value */ - private function applyFilter(string $fieldName, string $value) { - $field = $this->getField($fieldName); - - // Global setting determines if % wildcard should be added to both sides (default) or only the end of the search term + private function applyFilter(string $fieldName, $value) { + // Global setting determines if % wildcard should be added to both sides (default) or only the end of a search string $prefixWithWildcard = \Civi::settings()->get('includeWildCardInName'); - // Not a real field. It must be an aggregated column. Add to HAVING clause. + $field = $this->getField($fieldName); + // If field is not found it must be an aggregated column & belongs in the HAVING clause. if (!$field) { - if ($prefixWithWildcard) { - $this->savedSearch['api_params']['having'][] = [$fieldName, 'CONTAINS', $value]; + $this->savedSearch['api_params']['having'] = $this->savedSearch['api_params']['having'] ?? []; + $clause =& $this->savedSearch['api_params']['having']; + } + // If field belongs to an EXCLUDE join, it should be added as a join condition + else { + $prefix = strpos($fieldName, '.') ? explode('.', $fieldName)[0] : NULL; + foreach ($this->savedSearch['api_params']['join'] ?? [] as $idx => $join) { + if (($join[1] ?? 'LEFT') === 'EXCLUDE' && (explode(' AS ', $join[0])[1] ?? '') === $prefix) { + $clause =& $this->savedSearch['api_params']['join'][$idx]; + } + } + } + // Default: add filter to WHERE clause + if (!isset($clause)) { + $clause =& $this->savedSearch['api_params']['where']; + } + + $dataType = $field['data_type'] ?? NULL; + + // Array is either associative `OP => VAL` or sequential `IN (...)` + if (is_array($value)) { + $value = array_filter($value, [$this, 'hasValue']); + // Use IN if array does not contain operators as keys + if (array_diff_key($value, array_flip(CoreUtil::getOperators()))) { + $clause[] = [$fieldName, 'IN', $value]; } else { - $this->savedSearch['api_params']['having'][] = [$fieldName, 'LIKE', $value . '%']; + foreach ($value as $operator => $val) { + $clause[] = [$fieldName, $operator, $val]; + } } - return; } - - $dataType = $field['data_type']; - if (!empty($field['serialize'])) { - $this->savedSearch['api_params']['where'][] = [$fieldName, 'CONTAINS', $value]; + elseif (!empty($field['serialize'])) { + $clause[] = [$fieldName, 'CONTAINS', $value]; } elseif (!empty($field['options']) || in_array($dataType, ['Integer', 'Boolean', 'Date', 'Timestamp'])) { - $this->savedSearch['api_params']['where'][] = [$fieldName, '=', $value]; + $clause[] = [$fieldName, '=', $value]; } elseif ($prefixWithWildcard) { - $this->savedSearch['api_params']['where'][] = [$fieldName, 'CONTAINS', $value]; + $clause[] = [$fieldName, 'CONTAINS', $value]; } else { - $this->savedSearch['api_params']['where'][] = [$fieldName, 'LIKE', $value . '%']; + $clause[] = [$fieldName, 'LIKE', $value . '%']; } } @@ -294,10 +336,20 @@ class Run extends \Civi\Api4\Generic\AbstractAction { */ private function getAfformFilters() { $afform = $this->loadAfform(); - return array_column(\CRM_Utils_Array::findAll( + if (!$afform) { + return []; + } + // Get afform field filters + $filters = array_column(\CRM_Utils_Array::findAll( $afform['layout'] ?? [], ['#tag' => 'af-field'] ), 'name'); + // Get filters passed into search display directive + $filterAttr = $afform['searchDisplay']['filters'] ?? NULL; + if ($filterAttr && is_string($filterAttr) && $filterAttr[0] === '{') { + $filters = array_unique(array_merge($filters, array_keys(\CRM_Utils_JS::getRawProps($filterAttr)))); + } + return $filters; } /** @@ -317,10 +369,11 @@ class Run extends \Civi\Api4\Generic\AbstractAction { ->setLayoutFormat('shallow') ->execute()->first(); // Validate that the afform contains this search display - if (\CRM_Utils_Array::findAll( + $afform['searchDisplay'] = \CRM_Utils_Array::findAll( $afform['layout'] ?? [], - ['#tag' => "crm-search-display-{$this->display['type']}", 'display-name' => $this->display['name']]) - ) { + ['#tag' => "{$this->display['type:name']}", 'display-name' => $this->display['name']] + )[0] ?? NULL; + if ($afform['searchDisplay']) { $this->_afform = $afform; } } diff --git a/civicrm/ext/search/Civi/Api4/SearchDisplay.php b/civicrm/ext/search/Civi/Api4/SearchDisplay.php index 2ea595cbf1..939e74664e 100644 --- a/civicrm/ext/search/Civi/Api4/SearchDisplay.php +++ b/civicrm/ext/search/Civi/Api4/SearchDisplay.php @@ -20,4 +20,19 @@ class SearchDisplay extends Generic\DAOEntity { ->setCheckPermissions($checkPermissions); } + /** + * @param bool $checkPermissions + * @return Action\SearchDisplay\GetSearchTasks + */ + public static function getSearchTasks($checkPermissions = TRUE) { + return (new Action\SearchDisplay\GetSearchTasks(__CLASS__, __FUNCTION__)) + ->setCheckPermissions($checkPermissions); + } + + public static function permissions() { + $permissions = parent::permissions(); + $permissions['run'] = []; + return $permissions; + } + } diff --git a/civicrm/ext/search/Civi/Search/Actions.php b/civicrm/ext/search/Civi/Search/Actions.php index c72a597069..3593141df3 100644 --- a/civicrm/ext/search/Civi/Search/Actions.php +++ b/civicrm/ext/search/Civi/Search/Actions.php @@ -11,6 +11,8 @@ namespace Civi\Search; +use CRM_Search_ExtensionUtil as E; + /** * Class Tasks * @package Civi\Search @@ -22,70 +24,8 @@ class Actions { */ public static function getActionSettings():array { return [ - 'tasks' => self::getTasks(), - 'groupOptions' => self::getGroupOptions(), 'dateRanges' => \CRM_Utils_Array::makeNonAssociative(\CRM_Core_OptionGroup::values('relative_date_filters'), 'id', 'text'), ]; } - /** - * @return array - */ - public static function getGroupOptions():array { - return \Civi\Api4\Group::getFields(FALSE) - ->setLoadOptions(['id', 'label']) - ->addWhere('name', 'IN', ['group_type', 'visibility']) - ->execute() - ->indexBy('name') - ->column('options'); - } - - /** - * @return array - */ - public static function getTasks():array { - // Note: the placeholder %1 will be replaced with entity name on the clientside - $tasks = [ - 'export' => [ - 'title' => ts('Export %1'), - 'icon' => 'fa-file-excel-o', - 'entities' => array_keys(\CRM_Export_BAO_Export::getComponents()), - 'crmPopup' => [ - 'path' => "'civicrm/export/standalone'", - 'query' => "{entity: entity, id: ids.join(',')}", - ], - ], - 'update' => [ - 'title' => ts('Update %1'), - 'icon' => 'fa-save', - 'entities' => [], - 'uiDialog' => ['templateUrl' => '~/crmSearchActions/crmSearchActionUpdate.html'], - ], - 'delete' => [ - 'title' => ts('Delete %1'), - 'icon' => 'fa-trash', - 'entities' => [], - 'uiDialog' => ['templateUrl' => '~/crmSearchActions/crmSearchActionDelete.html'], - ], - ]; - - // Add contact tasks which support standalone mode (with a 'url' property) - $contactTasks = \CRM_Contact_Task::permissionedTaskTitles(\CRM_Core_Permission::getPermission()); - foreach (\CRM_Contact_Task::tasks() as $id => $task) { - if (isset($contactTasks[$id]) && !empty($task['url']) && $task['url'] !== 'civicrm/task/delete-contact') { - $tasks['contact.' . $id] = [ - 'title' => $task['title'], - 'entities' => ['Contact'], - 'icon' => $task['icon'] ?? 'fa-gear', - 'crmPopup' => [ - 'path' => "'{$task['url']}'", - 'query' => "{cids: ids.join(',')}", - ], - ]; - } - } - - return $tasks; - } - } diff --git a/civicrm/ext/search/Civi/Search/Admin.php b/civicrm/ext/search/Civi/Search/Admin.php index bcb73ca433..92b2f60565 100644 --- a/civicrm/ext/search/Civi/Search/Admin.php +++ b/civicrm/ext/search/Civi/Search/Admin.php @@ -87,7 +87,7 @@ class Admin { ->setChain([ 'get' => ['$name', 'getActions', ['where' => [['name', '=', 'get']]], ['params']], ])->execute(); - $getFields = ['name', 'title', 'label', 'description', 'options', 'input_type', 'input_attrs', 'data_type', 'serialize', 'entity', 'fk_entity']; + $getFields = ['name', 'title', 'label', 'description', 'options', 'input_type', 'input_attrs', 'data_type', 'serialize', 'entity', 'fk_entity', 'readonly']; foreach ($entities as $entity) { // Skip if entity doesn't have a 'get' action or the user doesn't have permission to use get if ($entity['get']) { @@ -133,15 +133,17 @@ class Admin { // Add in FK fields for implicit joins // For example, add a `campaign.title` field to the Contribution entity foreach ($schema as &$entity) { - foreach (array_reverse($entity['fields'], TRUE) as $index => $field) { - if (!empty($field['fk_entity']) && !$field['options'] && !empty($schema[$field['fk_entity']]['label_field'])) { - // The original field will get title instead of label since it represents the id (title usually ends in ID but label does not) - $entity['fields'][$index]['label'] = $field['title']; - // Add the label field from the other entity to this entity's list of fields - $newField = \CRM_Utils_Array::findAll($schema[$field['fk_entity']]['fields'], ['name' => $schema[$field['fk_entity']]['label_field']])[0]; - $newField['name'] = str_replace('_id', '', $field['name']) . '.' . $schema[$field['fk_entity']]['label_field']; - $newField['label'] = $field['label'] . ' ' . $newField['label']; - array_splice($entity['fields'], $index, 0, [$newField]); + if (in_array('DAOEntity', $entity['type'], TRUE) && !in_array('EntityBridge', $entity['type'], TRUE)) { + foreach (array_reverse($entity['fields'], TRUE) as $index => $field) { + if (!empty($field['fk_entity']) && !$field['options'] && !empty($schema[$field['fk_entity']]['label_field'])) { + // The original field will get title instead of label since it represents the id (title usually ends in ID but label does not) + $entity['fields'][$index]['label'] = $field['title']; + // Add the label field from the other entity to this entity's list of fields + $newField = \CRM_Utils_Array::findAll($schema[$field['fk_entity']]['fields'], ['name' => $schema[$field['fk_entity']]['label_field']])[0]; + $newField['name'] = str_replace('_id', '', $field['name']) . '.' . $schema[$field['fk_entity']]['label_field']; + $newField['label'] = $field['label'] . ' ' . $newField['label']; + array_splice($entity['fields'], $index, 0, [$newField]); + } } } } diff --git a/civicrm/ext/search/ang/crmSearchActions/SaveSmartGroup.ctrl.js b/civicrm/ext/search/ang/crmSearchActions/SaveSmartGroup.ctrl.js deleted file mode 100644 index 7b89a9dc28..0000000000 --- a/civicrm/ext/search/ang/crmSearchActions/SaveSmartGroup.ctrl.js +++ /dev/null @@ -1,74 +0,0 @@ -(function(angular, $, _) { - "use strict"; - - angular.module('crmSearchActions').controller('SaveSmartGroup', function ($scope, $element, $timeout, crmApi4, dialogService, searchMeta) { - 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.api_entity}, - extra: ['saved_search_id', 'description', 'visibility', 'group_type'] - }, - select: { - allowClear: true, - minimumInputLength: 0, - placeholder: ts('Select existing group') - } - }; - $scope.columns = searchMeta.getSmartGroupColumns(model.api_entity, model.api_params); - - if (!$scope.columns.length) { - CRM.alert(ts('Cannot create smart group; search does not include any contacts.'), ts('Error')); - $timeout(function() { - dialogService.cancel('saveSearchDialog'); - }); - return; - } - - // Pick the first applicable column for contact id - model.api_params.select.unshift(_.intersection(model.api_params.select, _.pluck($scope.columns, 'id'))[0] || $scope.columns[0].id); - - if (!CRM.checkPerm('administer reserved groups')) { - $scope.groupEntityRefParams.api.params.is_reserved = 0; - } - $scope.perm = { - administerReservedGroups: CRM.checkPerm('administer reserved groups') - }; - $scope.groupOptions = CRM.crmSearchActions.groupOptions; - $element.on('change', '#api-save-search-select-group', function() { - if ($(this).val()) { - $scope.$apply(function() { - var group = $('#api-save-search-select-group').select2('data').extra; - model.saved_search_id = group.saved_search_id; - model.description = group.description || ''; - model.group_type = group.group_type || []; - model.visibility = group.visibility; - }); - } - }); - $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'; - model.api_params.select = _.unique(model.api_params.select); - var savedSearch = { - api_entity: model.api_entity, - api_params: model.api_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, CRM.$, CRM._); diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchActionDelete.ctrl.js b/civicrm/ext/search/ang/crmSearchActions/crmSearchActionDelete.ctrl.js index 148fe63343..911e832eea 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchActionDelete.ctrl.js +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchActionDelete.ctrl.js @@ -2,7 +2,7 @@ "use strict"; angular.module('crmSearchActions').controller('crmSearchActionDelete', function($scope, dialogService) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), model = $scope.model, ctrl = this; diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchActionUpdate.ctrl.js b/civicrm/ext/search/ang/crmSearchActions/crmSearchActionUpdate.ctrl.js index 14c5a359c6..55f704e0b3 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchActionUpdate.ctrl.js +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchActionUpdate.ctrl.js @@ -2,7 +2,7 @@ "use strict"; angular.module('crmSearchActions').controller('crmSearchActionUpdate', function ($scope, $timeout, crmApi4, dialogService) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), model = $scope.model, ctrl = this; @@ -13,6 +13,7 @@ crmApi4(model.entity, 'getFields', { action: 'update', + select: ['name', 'label', 'description', 'data_type', 'serialize', 'options'], loadOptions: ['id', 'name', 'label', 'description', 'color', 'icon'], where: [["readonly", "=", false]], }).then(function(fields) { diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.component.js b/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.component.js index 1c300db7b5..2f3570eeaa 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.component.js +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.component.js @@ -9,7 +9,7 @@ }, templateUrl: '~/crmSearchActions/crmSearchActions.html', controller: function($scope, crmApi4, dialogService) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this, initialized = false, unwatchIDs = $scope.$watch('$ctrl.ids.length', watchIDs); @@ -25,19 +25,10 @@ function initialize() { crmApi4({ entityInfo: ['Entity', 'get', {select: ['name', 'title', 'title_plural'], where: [['name', '=', ctrl.entity]]}, 0], - allowed: [ctrl.entity, 'getActions', {where: [['name', 'IN', ['update', 'delete']]]}, ['name']] + tasks: ['SearchDisplay', 'getSearchTasks', {entity: ctrl.entity}] }).then(function(result) { ctrl.entityInfo = result.entityInfo; - _.each(result.allowed, function(action) { - CRM.crmSearchActions.tasks[action].entities.push(ctrl.entity); - }); - var actions = _.transform(_.cloneDeep(CRM.crmSearchActions.tasks), function(actions, action) { - if (_.includes(action.entities, ctrl.entity)) { - action.title = action.title.replace('%1', ctrl.entityInfo.title_plural); - actions.push(action); - } - }, []); - ctrl.actions = _.sortBy(actions, 'title'); + ctrl.tasks = result.tasks; }); } diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.html b/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.html index 8dff53e4f7..54fbdb2034 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.html +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchActions.html @@ -3,9 +3,12 @@ <i class="crm-i fa-pencil"></i> {{:: ts('Action') }} <span class="caret"></span> </button> - <ul class="dropdown-menu" ng-if=":: $ctrl.actions"> - <li ng-disabled="!$ctrl.isActionAllowed(action)" ng-repeat="action in $ctrl.actions"> - <a href ng-click="$ctrl.doAction(action)"><i class="fa {{action.icon}}"></i> {{ action.title }}</a> + <ul class="dropdown-menu"> + <li ng-disabled="!$ctrl.isActionAllowed(action)" ng-repeat="action in $ctrl.tasks"> + <a href ng-click="$ctrl.doAction(action)"><i class="fa {{:: action.icon }}"></i> {{:: action.title }}</a> + </li> + <li class="disabled" ng-if="!$ctrl.tasks"> + <a href><i class="fa fa-spinner fa-spin"></i></a> </li> </ul> </div> diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchBatchRunner.component.js b/civicrm/ext/search/ang/crmSearchActions/crmSearchBatchRunner.component.js index 0eaca53384..7be101beea 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchBatchRunner.component.js +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchBatchRunner.component.js @@ -12,7 +12,7 @@ }, templateUrl: '~/crmSearchActions/crmSearchBatchRunner.html', controller: function($scope, $timeout, $interval, crmApi4) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this, currentBatch = 0, totalBatches, diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInput.component.js b/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInput.component.js index c37d99948a..c52c0e7092 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInput.component.js +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInput.component.js @@ -11,7 +11,7 @@ require: {ngModel: 'ngModel'}, templateUrl: '~/crmSearchActions/crmSearchInput/crmSearchInput.html', controller: function($scope) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.isMulti = function() { diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInputVal.component.js b/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInputVal.component.js index 3fd663c022..20b5152760 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInputVal.component.js +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/crmSearchInputVal.component.js @@ -10,7 +10,7 @@ require: {ngModel: 'ngModel'}, template: '<div class="form-group" ng-include="$ctrl.getTemplate()"></div>', controller: function($scope, formatForSelect2) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.$onInit = function() { diff --git a/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/entityRef.html b/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/entityRef.html index 7d9704e99b..731e8df9ad 100644 --- a/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/entityRef.html +++ b/civicrm/ext/search/ang/crmSearchActions/crmSearchInput/entityRef.html @@ -1,5 +1,5 @@ <div class="form-group" ng-if="!$ctrl.multi"> - <input class="form-control" ng-model="$ctrl.value" crm-entityref="{entity: $ctrl.entity, static: $ctrl.entity === 'Contact' ? ['user_contact_id'] : []}"> + <input class="form-control" ng-model="$ctrl.value" crm-entityref="{entity: $ctrl.entity, select:{allowClear: true, placeholder: ts('Select')}, static: $ctrl.entity === 'Contact' ? ['user_contact_id'] : []}"> </div> <div class="form-group" ng-if="$ctrl.multi"> <input class="form-control" ng-model="$ctrl.value" crm-entityref="{entity: $ctrl.entity, select: {multiple: true}, static: $ctrl.entity === 'Contact' ? ['user_contact_id'] : []}" ng-list > diff --git a/civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.directive.js b/civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.directive.js deleted file mode 100644 index bd68699d85..0000000000 --- a/civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.directive.js +++ /dev/null @@ -1,40 +0,0 @@ -(function(angular, $, _) { - "use strict"; - - angular.module('crmSearchActions').directive('saveSmartGroup', function() { - return { - bindToController: { - load: '<', - entity: '<', - params: '<' - }, - restrict: 'A', - controller: function ($scope, $element, dialogService) { - var ts = $scope.ts = CRM.ts(), - ctrl = this; - - $scope.saveGroup = function () { - var model = { - title: '', - description: '', - visibility: 'User and User Admin Only', - group_type: [], - id: ctrl.load ? ctrl.load.id : null, - api_entity: ctrl.entity, - api_params: _.cloneDeep(angular.extend({}, ctrl.params, {version: 4})) - }; - delete model.api_params.orderBy; - if (ctrl.load && ctrl.load.api_params && ctrl.load.api_params.select && ctrl.load.api_params.select[0]) { - model.api_params.select.unshift(ctrl.load.api_params.select[0]); - } - var options = CRM.utils.adjustDialogDefaults({ - autoOpen: false, - title: ts('Save smart group') - }); - dialogService.open('saveSearchDialog', '~/crmSearchActions/saveSmartGroup.html', model, options); - }; - } - }; - }); - -})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.html b/civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.html deleted file mode 100644 index 43686da338..0000000000 --- a/civicrm/ext/search/ang/crmSearchActions/saveSmartGroup.html +++ /dev/null @@ -1,33 +0,0 @@ -<form id="bootstrap-theme"> - <div ng-controller="SaveSmartGroup"> - <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="{{:: ts('Create new group') }}" ng-model="model.title" ng-show="!model.id"> - <hr /> - <div class="form-inline"> - <label for="api-save-search-select-column">{{:: ts('Contact Column:') }}</label> - <input id="api-save-search-select-column" ng-model="model.api_params.select[0]" class="form-control" crm-ui-select="{data: columns}"/> - </div> - <hr /> - <label>{{:: ts('Description:') }}</label> - <textarea class="form-control" ng-model="model.description"></textarea> - <div class="form-inline"> - <label>{{:: ts('Group Type:') }} </label> - <div class="checkbox" ng-repeat="option in groupOptions.group_type track by option.id"> - <label> - <input type="checkbox" checklist-model="model.group_type" checklist-value="option.id"> - {{ option.label }} - </label> - </div> - </div> - <div class="form-inline"> - <label>{{:: ts('Visibility:') }}</label> - <select class="form-control" ng-model="model.visibility" ng-options="item.id as item.label for item in groupOptions.visibility track by item.id" crm-ui-select></select> - </div> - <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/ext/search/ang/crmSearchAdmin.module.js b/civicrm/ext/search/ang/crmSearchAdmin.module.js index 6ade8b2cd0..88cdddbe69 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin.module.js +++ b/civicrm/ext/search/ang/crmSearchAdmin.module.js @@ -23,6 +23,10 @@ 'label', 'api_entity', 'api_params', + 'created.display_name', + 'modified.display_name', + 'created_date', + 'modified_date', 'GROUP_CONCAT(display.name ORDER BY display.id) AS display_name', 'GROUP_CONCAT(display.label ORDER BY display.id) AS display_label', 'GROUP_CONCAT(display.type:icon ORDER BY display.id) AS display_icon', @@ -50,7 +54,7 @@ return crmApi4('SavedSearch', 'get', { where: [['id', '=', params.id]], chain: { - groups: ['Group', 'get', {select: ['id', 'title', 'description', 'visibility', 'group_type'], where: [['saved_search_id', '=', '$id']]}], + groups: ['Group', 'get', {select: ['id', 'title', 'description', 'visibility', 'group_type', 'custom.*'], where: [['saved_search_id', '=', '$id']]}], displays: ['SearchDisplay', 'get', {where: [['saved_search_id', '=', '$id']]}] } }, 0); diff --git a/civicrm/ext/search/ang/crmSearchAdmin/compose/criteria.html b/civicrm/ext/search/ang/crmSearchAdmin/compose/criteria.html index 3185d4cb86..732b1f4aeb 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/compose/criteria.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/compose/criteria.html @@ -3,20 +3,20 @@ <div ng-if=":: $ctrl.paramExists('join')"> <fieldset ng-repeat="join in $ctrl.savedSearch.api_params.join"> <div class="form-inline"> - <label for="crm-search-join-{{ $index }}">{{:: ts('With') }}</label> + <select class="form-control" ng-model="join[1]" ng-change="$ctrl.changeJoinType(join)" ng-options="o.k as o.v for o in ::joinTypes" ></select> <input id="crm-search-join-{{ $index }}" class="form-control huge" ng-model="join[0]" crm-ui-select="{placeholder: ' ', data: getJoinEntities}" disabled > - <select class="form-control" ng-model="join[1]" ng-options="o.k as o.v for o in ::joinTypes" ></select> <button type="button" class="btn btn-xs btn-danger-outline" ng-click="$ctrl.removeJoin($index)" title="{{:: ts('Remove join') }}"> <i class="crm-i fa-trash" aria-hidden="true"></i> </button> </div> <fieldset class="api4-clause-fieldset"> - <crm-search-clause clauses="join" format="json" skip="2 + getJoin(join[0]).conditions.length" op="AND" label="{{ ts('If') }}" fields="fieldsForWhere" ></crm-search-clause> + <crm-search-clause clauses="join" format="json" skip="2 + getJoin(join[0]).conditions.length" op="AND" label="{{:: ts('If') }}" fields="fieldsForWhere" ></crm-search-clause> </fieldset> </fieldset> <fieldset> <div class="form-inline"> - <input id="crm-search-add-join" class="form-control crm-action-menu fa-plus huge" ng-model="controls.join" crm-ui-select="{placeholder: ts('With'), data: getJoinEntities}" ng-change="addJoin()"/> + <select class="form-control" ng-model="controls.joinType" ng-options="o.k as o.v for o in ::joinTypes" ></select> + <input id="crm-search-add-join" class="form-control crm-action-menu fa-plus huge" ng-model="controls.join" crm-ui-select="{placeholder: ts('Entity'), data: getJoinEntities}" ng-change="addJoin()"/> </div> </fieldset> </div> @@ -41,10 +41,10 @@ </div> <div class="crm-search-criteria-column"> <fieldset class="api4-clause-fieldset"> - <crm-search-clause clauses="$ctrl.savedSearch.api_params.where" format="string" op="AND" label="{{ ts('Where') }}" fields="fieldsForWhere" ></crm-search-clause> + <crm-search-clause clauses="$ctrl.savedSearch.api_params.where" format="string" op="AND" label="{{:: ts('Where') }}" fields="fieldsForWhere" ></crm-search-clause> </fieldset> <fieldset ng-if="$ctrl.paramExists('having') && $ctrl.savedSearch.api_params.groupBy.length" class="api4-clause-fieldset"> - <crm-search-clause clauses="$ctrl.savedSearch.api_params.having" format="string" op="AND" label="{{ ts('Filter') }}" fields="fieldsForHaving" ></crm-search-clause> + <crm-search-clause clauses="$ctrl.savedSearch.api_params.having" format="string" op="AND" label="{{:: ts('Having') }}" fields="fieldsForHaving" ></crm-search-clause> </fieldset> </div> </div> diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js index 6a48f8167c..feac4a41e1 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js @@ -7,7 +7,7 @@ }, templateUrl: '~/crmSearchAdmin/crmSearchAdmin.html', controller: function($scope, $element, $location, $timeout, crmApi4, dialogService, searchMeta, formatForSelect2) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.DEFAULT_AGGREGATE_FN = 'GROUP_CONCAT'; @@ -24,15 +24,20 @@ // Have the filters (WHERE, HAVING, GROUP BY, JOIN) changed? this.stale = true; - $scope.controls = {tab: 'compose'}; - $scope.joinTypes = [{k: false, v: ts('Optional')}, {k: true, v: ts('Required')}]; - $scope.groupOptions = CRM.crmSearchActions.groupOptions; + $scope.controls = {tab: 'compose', joinType: 'LEFT'}; + $scope.joinTypes = [ + {k: 'LEFT', v: ts('With (optional)')}, + {k: 'INNER', v: ts('With (required)')}, + {k: 'EXCLUDE', v: ts('Without')}, + ]; // Try to create a sensible list of entities one might want to search for, // excluding those whos primary purpose is to provide joins or option lists to other entities var primaryEntities = _.filter(CRM.crmSearchAdmin.schema, function(entity) { return !_.includes(entity.type, 'EntityBridge') && !_.includes(entity.type, 'OptionList'); }); $scope.entities = formatForSelect2(primaryEntities, 'name', 'title_plural', ['description', 'icon']); + $scope.getEntity = searchMeta.getEntity; + $scope.getField = searchMeta.getField; this.perm = { editGroups: CRM.checkPerm('edit groups') }; @@ -170,6 +175,7 @@ $scope.selectTab = function(tab) { if (tab === 'group') { + loadFieldOptions('Group'); $scope.smartGroupColumns = searchMeta.getSmartGroupColumns(ctrl.savedSearch.api_entity, ctrl.savedSearch.api_params); var smartGroupColumns = _.map($scope.smartGroupColumns, 'id'); if (smartGroupColumns.length && !_.includes(smartGroupColumns, ctrl.savedSearch.api_params.select[0])) { @@ -182,6 +188,7 @@ this.removeGroup = function() { ctrl.groupExists = !ctrl.groupExists; + $scope.status = 'unsaved'; if (!ctrl.groupExists && (!ctrl.savedSearch.groups.length || !ctrl.savedSearch.groups[0].id)) { ctrl.savedSearch.groups.length = 0; } @@ -242,7 +249,7 @@ ctrl.savedSearch.api_params.join = ctrl.savedSearch.api_params.join || []; var join = searchMeta.getJoin($scope.controls.join), entity = searchMeta.getEntity(join.entity), - params = [$scope.controls.join, false]; + params = [$scope.controls.join, $scope.controls.joinType || 'LEFT']; _.each(_.cloneDeep(join.conditions), function(condition) { params.push(condition); }); @@ -250,7 +257,7 @@ params.push(condition); }); ctrl.savedSearch.api_params.join.push(params); - if (entity.label_field) { + if (entity.label_field && $scope.controls.joinType !== 'EXCLUDE') { ctrl.savedSearch.api_params.select.push(join.alias + '.' + entity.label_field); } loadFieldOptions(); @@ -263,6 +270,10 @@ this.removeJoin = function(index) { var alias = searchMeta.getJoin(ctrl.savedSearch.api_params.join[index][0]).alias; ctrl.clearParam('join', index); + removeJoinStuff(alias); + }; + + function removeJoinStuff(alias) { _.remove(ctrl.savedSearch.api_params.select, function(item) { var pattern = new RegExp('\\b' + alias + '\\.'); return pattern.test(item.split(' AS ')[0]); @@ -271,10 +282,17 @@ return clauseUsesJoin(clause, alias); }); _.eachRight(ctrl.savedSearch.api_params.join, function(item, i) { - if (searchMeta.getJoin(item[0]).alias.indexOf(alias) === 0) { + var joinAlias = searchMeta.getJoin(item[0]).alias; + if (joinAlias !== alias && joinAlias.indexOf(alias) === 0) { ctrl.removeJoin(i); } }); + } + + this.changeJoinType = function(join) { + if (join[1] === 'EXCLUDE') { + removeJoinStuff(searchMeta.getJoin(join[0]).alias); + } }; $scope.changeGroupBy = function(idx) { @@ -823,8 +841,10 @@ * 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 */ - function loadFieldOptions() { + function loadFieldOptions(entity) { var mainEntity = searchMeta.getEntity(ctrl.savedSearch.api_entity), entities = {}; @@ -840,6 +860,12 @@ if (typeof mainEntity.optionsLoaded === 'undefined') { enqueue(mainEntity); } + + // Optional additional entity + if (entity && typeof searchMeta.getEntity(entity).optionsLoaded === 'undefined') { + enqueue(searchMeta.getEntity(entity)); + } + _.each(ctrl.savedSearch.api_params.join, function(join) { var joinInfo = searchMeta.getJoin(join[0]), joinEntity = searchMeta.getEntity(joinInfo.entity), diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js index 83323e732d..f5806fcf40 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminDisplay.component.js @@ -33,7 +33,7 @@ return html; }, controller: function($scope, $timeout, searchMeta) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.preview = this.stale = false; @@ -119,6 +119,45 @@ return ctrl.colTypes[col.type].label; }; + this.toggleRewrite = function(col) { + if (col.rewrite) { + col.rewrite = ''; + } else { + col.rewrite = '[' + col.key + ']'; + delete col.editable; + } + }; + + this.toggleEditable = function(col) { + if (col.editable) { + delete col.editable; + return; + } + + var info = searchMeta.parseExpr(col.key), + value = col.key.split(':')[0]; + // If field is an implicit join, use the original fk field + if (info.field.entity !== info.field.baseEntity) { + value = value.substr(0, value.indexOf('.')) + '_id'; + info = searchMeta.parseExpr(value); + } + col.editable = { + entity: info.field.baseEntity, + options: !!info.field.options, + serialize: !!info.field.serialize, + fk_entity: info.field.fk_entity, + id: info.prefix + 'id', + name: info.field.name, + value: value + }; + }; + + this.isEditable = function(col) { + var expr = ctrl.getExprFromSelect(col.key), + info = searchMeta.parseExpr(expr); + return !col.rewrite && !col.link && !info.fn && info.field && !info.field.readonly; + }; + function fieldToColumn(fieldExpr, defaults) { var info = searchMeta.parseExpr(fieldExpr), values = _.cloneDeep(defaults); @@ -134,6 +173,31 @@ return values; } + this.toggleLink = function(column) { + if (column.link) { + ctrl.onChangeLink(column, column.link.path, ''); + } else { + var defaultLink = ctrl.getLinks()[0]; + column.link = {path: defaultLink ? defaultLink.path : 'civicrm/'}; + ctrl.onChangeLink(column, null, column.link.path); + } + }; + + this.onChangeLink = function(column, before, after) { + var beforeLink = before && _.findWhere(ctrl.getLinks(), {path: before}), + afterLink = after && _.findWhere(ctrl.getLinks(), {path: after}); + if (!after) { + if (beforeLink && column.title === beforeLink.title) { + delete column.title; + } + delete column.link; + } else if (afterLink && ((!column.title && !before) || (beforeLink && beforeLink.title === column.title))) { + column.title = afterLink.title; + } else if (!afterLink && (beforeLink && beforeLink.title === column.title)) { + delete column.title; + } + }; + this.getLinks = function() { if (!ctrl.links) { ctrl.links = buildLinks(); @@ -169,7 +233,7 @@ var idField = info.field.fk_entity ? fieldName : fieldName.substr(0, fieldName.lastIndexOf('.')) + '_id'; if (!ctrl.crmSearchAdmin.canAggregate(idField)) { var joinEntity = searchMeta.getEntity(info.field.fk_entity || info.field.entity); - _.each(joinEntity.paths, function(path) { + _.each((joinEntity || {}).paths, function(path) { var link = _.cloneDeep(path); link.path = link.path.replace(/\[id/g, '[' + idField); links.push(link); diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js index 2708c98909..3ff0962ecb 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.component.js @@ -10,24 +10,13 @@ }, templateUrl: '~/crmSearchAdmin/crmSearchAdminLinkGroup.html', controller: function ($scope, $element, $timeout, searchMeta) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.styles = CRM.crmSearchAdmin.styles; - this.setValue = function(val, index) { - var link = ctrl.getLink(val), - item = ctrl.group[index]; - if (item.path === val) { - return; - } - item.path = val; - item.icon = link ? defaultIcons[link.action] : 'fa-external-link'; - if (val === 'civicrm/') { - $timeout(function () { - $('tr:eq(' + index + ') input[type=text]', $element).focus(); - }); - } + this.getStyle = function(item) { + return _.findWhere(this.styles, {key: item.style}); }; this.sortableOptions = { @@ -78,15 +67,11 @@ ctrl.addItem('civicrm/'); } } - $element.on('change', 'select.crm-search-admin-select-path', function() { + $element.on('change', 'select.crm-search-admin-add-link', function() { var $select = $(this); $scope.$apply(function() { - if ($select.closest('tfoot').length) { - ctrl.addItem($select.val()); - $select.val(''); - } else { - ctrl.setValue($select.val(), $select.closest('tr').index()); - } + ctrl.addItem($select.val()); + $select.val(''); }); }); }; diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.html b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.html index 2846b60073..87a236ce7f 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkGroup.html @@ -3,6 +3,7 @@ <tr> <th class="crm-search-admin-icon-col"></th> <th class="crm-search-admin-icon-col">{{:: ts('Icon') }}</th> + <th>{{:: ts('Open') }}</th> <th>{{:: ts('Text') }}</th> <th>{{:: ts('Link') }}</th> <th>{{:: ts('Style') }}</th> @@ -10,34 +11,39 @@ </tr> </thead> <tbody ui-sortable="$ctrl.sortableOptions" ng-model="$ctrl.group"> - <tr ng-repeat="item in $ctrl.group" class="bg-{{ item.style }}"> + <tr ng-repeat="item in $ctrl.group" class="crm-draggable"> <td class="crm-search-admin-icon-col"> - <i class="crm-i fa-arrows disabled"></i> + <i class="crm-i fa-arrows crm-search-move-icon"></i> </td> <td class="crm-search-admin-icon-col"> <span class="crm-editable-enabled" ng-click="pickIcon($index)"> - <i class="{{ item.icon ? 'crm-i ' + item.icon : '' }}"></i> + <i class="{{ item.icon ? 'crm-i ' + item.icon : '' }}" style="opacity: 1"></i> </span> </td> + <td> + <select class="form-control" ng-model="item.target"> + <option value>{{:: ts('Normal') }}</option> + <option value="_blank">{{:: ts('New tab') }}</option> + <option value="crm-popup">{{:: ts('Popup dialog') }}</option> + </select> + </td> <td> <input type="text" class="form-control" ng-model="item.text"> </td> <td class="form-inline"> - <select class="form-control crm-search-admin-select-path" ng-show="$ctrl.links.length"> - <option ng-repeat="link in $ctrl.links" value="{{ link.path }}" ng-selected="item.path === link.path"> - {{ link.title }} - </option> - <option value="civicrm/" ng-selected="item.path && !$ctrl.getLink(item.path)"> - {{ ts('Other...') }} - </option> - </select> - <input class="form-control" type="text" ng-if="item.path && !$ctrl.getLink(item.path)" ng-model="item.path" ng-model-options="{updateOn: 'blur'}" /> - <crm-search-admin-token-select ng-if="item.path && !$ctrl.getLink(item.path)" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="item" field="path"></crm-search-admin-token-select> + <crm-search-admin-link-select api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" link="item" links="$ctrl.links"></crm-search-admin-link-select> </td> - <td class="form-inline"> - <select class="form-control" ng-model="item.style"> - <option ng-repeat="opt in $ctrl.styles" value="{{ opt.key }}">{{ opt.value }}</option> - </select> + <td> + <div class="btn-group"> + <button type="button" style="min-width: 85px" class="btn btn-{{ item.style }} dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + {{ $ctrl.getStyle(item).value }} <span class="caret"></span> + </button> + <ul class="dropdown-menu dropdown-menu-right"> + <li ng-repeat="opt in $ctrl.styles"> + <a href class="bg-{{:: opt.key }}" ng-click="item.style = opt.key">{{:: opt.value }}</a> + </li> + </ul> + </div> </td> <td class="crm-search-admin-icon-col"> <button ng-if="$ctrl.group.length > 1" type="button" class="btn btn-xs btn-danger-outline" ng-click="$ctrl.group.splice($index, 1)"> @@ -49,7 +55,7 @@ <tfoot> <tr> <td colspan="6" class="form-inline"> - <select class="form-control crm-search-admin-select-path" ng-show="$ctrl.links.length"> + <select class="form-control crm-search-admin-add-link" ng-show="$ctrl.links.length"> <option value=""> + {{:: ts('Add...') }} </option> diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.component.js b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.component.js index 2bac3383c0..6d39b945c8 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.component.js @@ -3,48 +3,28 @@ angular.module('crmSearchAdmin').component('crmSearchAdminLinkSelect', { bindings: { - column: '<', + link: '<', apiEntity: '<', apiParams: '<', - links: '<' + links: '<', + onChange: '&' }, templateUrl: '~/crmSearchAdmin/crmSearchAdminLinkSelect.html', controller: function ($scope, $element, $timeout) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.setValue = function(val) { + ctrl.link = ctrl.link || {}; var link = ctrl.getLink(val), - oldLink = ctrl.getLink(ctrl.column.link); - if (link) { - ctrl.column.link = link.path; - ctrl.column.title = link.title; - } else { - if (val === 'civicrm/') { - ctrl.column.link = val; - $timeout(function () { - $('input[type=text]', $element).focus(); - }); - } else { - ctrl.column.link = ''; - } - if (oldLink && ctrl.column.title === oldLink.title) { - ctrl.column.title = ''; - } + oldVal = ctrl.link.path; + ctrl.link.path = val; + if (!link) { + $timeout(function () { + $('input[type=text]', $element).focus(); + }); } - }; - - function onChange() { - var val = $('select', $element).val(); - if (val !== ctrl.column.link) { - ctrl.setValue(val); - } - } - - this.$onInit = function() { - $('select', $element).on('change', function() { - $scope.$apply(onChange); - }); + ctrl.onChange({before: oldVal, after: val}); }; this.getLink = function(path) { diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html index 855f9fdb71..9cd67a5a6c 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html @@ -1,14 +1,20 @@ -<label title="{{ ts('Display as clickable link') }}" > - <input type="checkbox" ng-checked="$ctrl.column.link" ng-click="$ctrl.setValue($ctrl.column.link ? '' : ($ctrl.links[0] && $ctrl.links[0].path || 'civicrm/'))" > - {{ $ctrl.column.link ? ts('Link:') : ts('Link') }} -</label> -<select class="form-control" ng-show="$ctrl.links.length && $ctrl.column.link"> - <option ng-repeat="link in $ctrl.links" value="{{ link.path }}" ng-selected="$ctrl.column.link === link.path"> - {{ link.title }} - </option> - <option value="civicrm/" ng-selected="$ctrl.column.link && !$ctrl.getLink($ctrl.column.link)"> - {{ ts('Other...') }} - </option> -</select> -<input class="form-control" type="text" ng-if="$ctrl.column.link && !$ctrl.getLink($ctrl.column.link)" ng-model="$ctrl.column.link" ng-model-options="{updateOn: 'blur'}" /> -<crm-search-admin-token-select ng-if="$ctrl.column.link && !$ctrl.getLink($ctrl.column.link)" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="$ctrl.column" field="link"></crm-search-admin-token-select> +<div class="crm-flex-1 input-group" > + <input type="text" class="form-control" ng-if="!$ctrl.getLink($ctrl.link.path)" ng-model="$ctrl.link.path" ng-model-options="{updateOn: 'blur'}" ng-change="$ctrl.onChange({before: 'civicrm/', after: $ctrl.link.path})"> + <div class="input-group-btn" style="{{ $ctrl.getLink($ctrl.link.path) ? '' : 'width:27px' }}"> + <button type="button" class="btn btn-default-outline dropdown-toggle" style="min-width: 200px; text-align: left;" ng-if="$ctrl.getLink($ctrl.link.path)" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + {{ $ctrl.getLink($ctrl.link.path).title }} + </button> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu {{ $ctrl.getLink($ctrl.link.path) ? '' : 'dropdown-menu-right' }}" style="min-width: 223px;"> + <li ng-repeat="link in $ctrl.links" ng-class="{disabled: $ctrl.link.path === link.path}"> + <a href ng-click="$ctrl.setValue(link.path)">{{:: link.title }}</a> + </li> + <li ng-class="{disabled: !$ctrl.getLink($ctrl.link.path)}"> + <a href ng-click="$ctrl.setValue('civicrm/')">{{:: ts('Other...') }}</a> + </li> + </ul> + </div> +</div> +<crm-search-admin-token-select ng-if="!$ctrl.getLink($ctrl.link.path)" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="$ctrl.link" field="path"></crm-search-admin-token-select> diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js index c2c4b2ea12..f03318acbe 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchAdminTokenSelect.component.js @@ -10,7 +10,7 @@ }, templateUrl: '~/crmSearchAdmin/crmSearchAdminTokenSelect.html', controller: function ($scope, $element, searchMeta) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.initTokens = function() { diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchClause.component.js b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchClause.component.js index b91dea8128..e1ea2e0746 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchClause.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchClause.component.js @@ -13,7 +13,7 @@ }, templateUrl: '~/crmSearchAdmin/crmSearchClause.html', controller: function ($scope, $element, $timeout, searchMeta) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this, meta = {}; this.conjunctions = {AND: ts('And'), OR: ts('Or'), NOT: ts('Not')}; diff --git a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchFunction.component.js b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchFunction.component.js index 0f0e5d2b90..7a4af26ad3 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/crmSearchFunction.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/crmSearchFunction.component.js @@ -8,7 +8,7 @@ }, templateUrl: '~/crmSearchAdmin/crmSearchFunction.html', controller: function($scope, formatForSelect2, searchMeta) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.$onInit = function() { diff --git a/civicrm/ext/search/ang/crmSearchAdmin/displays/colType/field.html b/civicrm/ext/search/ang/crmSearchAdmin/displays/colType/field.html index 20e1976e79..7b0969cbd2 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/displays/colType/field.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/displays/colType/field.html @@ -1,17 +1,39 @@ -<crm-search-admin-link-select class="form-inline crm-search-admin-flex-row" column="col" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" links=":: $ctrl.parent.getLinks()"></crm-search-admin-link-select> +<div class="form-inline crm-search-admin-flex-row"> + <label title="{{ ts('Display as clickable link') }}" > + <input type="checkbox" ng-checked="col.link" ng-click="$ctrl.parent.toggleLink(col)" > + {{ col.link ? ts('Link:') : ts('Link') }} + </label> + <select class="form-control" ng-model="$ctrl.link.target" ng-if="col.link"> + <option value>{{:: ts('Open normally') }}</option> + <option value="_blank">{{:: ts('New tab') }}</option> + <option value="crm-popup">{{:: ts('Popup dialog') }}</option> + </select> + <crm-search-admin-link-select ng-if="col.link" link="col.link" on-change="$ctrl.parent.onChangeLink(col, before, after)" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" links=":: $ctrl.parent.getLinks()"> + </crm-search-admin-link-select> +</div> <div class="form-inline crm-search-admin-flex-row"> <label> <input type="checkbox" ng-checked="col.title" ng-click="col.title = col.title ? null : $ctrl.parent.getFieldLabel(col.key)" > {{ col.title ? ts('Tooltip:') : ts('Tooltip') }} </label> - <input class="form-control" type="text" ng-model="col.title" ng-if="col.title" ng-model-options="{updateOn: 'blur'}" /> + <input class="form-control crm-flex-1" type="text" ng-model="col.title" ng-if="col.title" ng-model-options="{updateOn: 'blur'}" /> <crm-search-admin-token-select ng-if="col.title" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="title"></crm-search-admin-token-select> </div> <div class="form-inline crm-search-admin-flex-row"> <label title="{{ ts('Change the contents of this field, or combine multiple field values.') }}"> - <input type="checkbox" ng-checked="col.rewrite" ng-click="col.rewrite = col.rewrite ? null : '['+col.key+']'" > + <input type="checkbox" ng-checked="col.rewrite" ng-click="$ctrl.parent.toggleRewrite(col)" > {{ col.rewrite ? ts('Rewrite:') : ts('Rewrite') }} </label> - <input type="text" class="form-control" ng-if="col.rewrite" ng-model="col.rewrite" ng-model-options="{updateOn: 'blur'}"> + <input type="text" class="form-control crm-flex-1" ng-if="col.rewrite" ng-model="col.rewrite" ng-model-options="{updateOn: 'blur'}"> <crm-search-admin-token-select ng-if="col.rewrite" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="rewrite"></crm-search-admin-token-select> </div> +<div class="form-inline"> + <label ng-if="$ctrl.parent.isEditable(col)" title="{{:: ts('Users will be able to click to edit this field.') }}"> + <input type="checkbox" ng-checked="col.editable" ng-click="$ctrl.parent.toggleEditable(col)"> + {{:: ts('In-place edit') }} + </label> + <label ng-if="!$ctrl.parent.isEditable(col)" class="disabled" title="{{:: ts('Read-only or rewritten fields cannot be editable.') }}"> + <input type="checkbox" disabled> + {{:: ts('In-place edit') }} + </label> +</div> diff --git a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js index 546fdb84d0..5780a67895 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.component.js @@ -12,7 +12,7 @@ }, templateUrl: '~/crmSearchAdmin/displays/searchAdminDisplayList.html', controller: function($scope) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.symbols = { diff --git a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.html b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.html index 382c808751..362cde215a 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayList.html @@ -28,7 +28,7 @@ </legend> <div class="crm-search-admin-edit-columns" ng-model="$ctrl.display.settings.columns" ui-sortable="$ctrl.parent.sortableOptions"> <fieldset ng-repeat="col in $ctrl.display.settings.columns" class="crm-draggable"> - <legend>{{ $ctrl.parent.getColLabel(col) }}</legend> + <legend><i class="crm-i fa-arrows crm-search-move-icon"></i> {{ $ctrl.parent.getColLabel(col) }}</legend> <div class="form-inline" title="{{ ts('Should this item display on its own line or inline with other items?') }}"> <label><input type="checkbox" ng-model="col.break"> {{:: ts('Display on new line') }}</label> <button type="button" class="btn-xs pull-right" ng-click="$ctrl.parent.removeCol($index)" title="{{:: ts('Remove') }}"> @@ -40,7 +40,7 @@ <input type="checkbox" ng-checked="col.label" ng-click="col.label = col.label ? null : $ctrl.parent.getColLabel(col)" > {{ col.label ? ts('Label:') : ts('Label') }} </label> - <input ng-if="col.label" class="form-control" type="text" ng-model="col.label" ng-model-options="{updateOn: 'blur'}"> + <input ng-if="col.label" class="form-control crm-flex-1" type="text" ng-model="col.label" ng-model-options="{updateOn: 'blur'}"> <crm-search-admin-token-select ng-if="col.label" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="label"></crm-search-admin-token-select> </div> <div class="form-inline" ng-if="col.label"> diff --git a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js index 72b48eaaea..ab839cbb18 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.component.js @@ -12,7 +12,7 @@ }, templateUrl: '~/crmSearchAdmin/displays/searchAdminDisplayTable.html', controller: function($scope) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.$onInit = function () { diff --git a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html index 7aa5d91f68..5264ceb1cb 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/displays/searchAdminDisplayTable.html @@ -18,10 +18,10 @@ </legend> <div class="crm-search-admin-edit-columns" ng-model="$ctrl.display.settings.columns" ui-sortable="$ctrl.parent.sortableOptions"> <fieldset ng-repeat="col in $ctrl.display.settings.columns" class="crm-draggable"> - <legend>{{ $ctrl.parent.getColLabel(col) }}</legend> + <legend><i class="crm-i fa-arrows crm-search-move-icon"></i> {{ $ctrl.parent.getColLabel(col) }}</legend> <div class="form-inline crm-search-admin-flex-row"> <label for="crm-search-admin-edit-col-{{ $index }}">{{:: ts('Header:') }}</label> - <input id="crm-search-admin-edit-col-{{ $index }}" class="form-control" type="text" ng-model="col.label" > + <input id="crm-search-admin-edit-col-{{ $index }}" class="form-control crm-flex-1" type="text" ng-model="col.label" > <button type="button" class="btn-xs" ng-click="$ctrl.parent.removeCol($index)" title="{{:: ts('Remove') }}"> <i class="crm-i fa-ban"></i> </button> diff --git a/civicrm/ext/search/ang/crmSearchAdmin/group.html b/civicrm/ext/search/ang/crmSearchAdmin/group.html index 64bf4a30c4..dabb22b1d4 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/group.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/group.html @@ -9,19 +9,29 @@ <input id="api-save-search-select-column" ng-model="$ctrl.savedSearch.api_params.select[0]" class="form-control huge" crm-ui-select="{data: smartGroupColumns}"/> </div> <fieldset ng-show="smartGroupColumns.length"> - <label>{{:: ts('Description:') }}</label> + <label>{{:: getField('description', 'Group').label }}</label> <textarea class="form-control" ng-model="$ctrl.savedSearch.groups[0].description"></textarea> - <div class="form-inline"> - <label>{{:: ts('Group Type:') }} </label> - <div class="checkbox" ng-repeat="option in groupOptions.group_type track by option.id"> - <label> - <input type="checkbox" checklist-model="$ctrl.savedSearch.groups[0].group_type" checklist-value="option.id"> - {{ option.label }} - </label> + <div ng-if="getEntity('Group').optionsLoaded"> + <div class="form-inline"> + <label>{{:: getField('group_type', 'Group').label }}</label> + <div class="checkbox" ng-repeat="option in getField('group_type', 'Group').options"> + <label> + <input type="checkbox" checklist-model="$ctrl.savedSearch.groups[0].group_type" checklist-value="option.id"> + {{:: option.label }} + </label> + </div> + </div> + <div class="form-inline"> + <label>{{:: getField('visibility', 'Group').label }}</label> + <crm-search-input-val field=":: getField('visibility', 'Group')" ng-model="$ctrl.savedSearch.groups[0].visibility"></crm-search-input-val> + </div> + <hr> + <div class="form-inline" ng-repeat="field in getEntity('Group').fields | filter:{name: '.', entity: 'Group'}"> + <label>{{:: field.label }}</label> + <crm-search-input-val field="field" ng-model="$ctrl.savedSearch.groups[0][field.name]"></crm-search-input-val> </div> </div> - <div class="form-inline"> - <label>{{:: ts('Visibility:') }}</label> - <select class="form-control" ng-model="$ctrl.savedSearch.groups[0].visibility" ng-options="item.id as item.label for item in groupOptions.visibility track by item.id" crm-ui-select></select> + <div ng-if="!getEntity('Group').optionsLoaded"> + <i class="crm-i fa-spinner fa-spin"></i> </div> </fieldset> diff --git a/civicrm/ext/search/ang/crmSearchAdmin/searchList.controller.js b/civicrm/ext/search/ang/crmSearchAdmin/searchList.controller.js index f6f1d66dab..42a36d904e 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/searchList.controller.js +++ b/civicrm/ext/search/ang/crmSearchAdmin/searchList.controller.js @@ -2,8 +2,9 @@ "use strict"; angular.module('crmSearchAdmin').controller('searchList', function($scope, savedSearches, crmApi4) { - var ts = $scope.ts = CRM.ts(), + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = $scope.$ctrl = this; + $scope.formatDate = CRM.utils.formatDate; this.savedSearches = savedSearches; this.afformEnabled = CRM.crmSearchAdmin.afformEnabled; this.afformAdminEnabled = CRM.crmSearchAdmin.afformAdminEnabled; diff --git a/civicrm/ext/search/ang/crmSearchAdmin/searchList.html b/civicrm/ext/search/ang/crmSearchAdmin/searchList.html index 427ae1718b..856f4e89a8 100644 --- a/civicrm/ext/search/ang/crmSearchAdmin/searchList.html +++ b/civicrm/ext/search/ang/crmSearchAdmin/searchList.html @@ -17,14 +17,16 @@ <th>{{:: ts('Displays') }}</th> <th>{{:: ts('Smart Group') }}</th> <th ng-if="$ctrl.afformEnabled">{{:: ts('Forms') }}</th> + <th>{{:: ts('Created') }}</th> + <th>{{:: ts('Last Modified') }}</th> <th></th> </tr> </thead> <tbody> <tr ng-repeat="search in $ctrl.savedSearches | filter:$ctrl.searchFilter"> - <td>{{ search.id }}</td> - <td>{{ search.label }}</td> - <td>{{ $ctrl.entityTitles[search.api_entity] }}</td> + <td>{{:: search.id }}</td> + <td>{{:: search.label }}</td> + <td>{{:: $ctrl.entityTitles[search.api_entity] }}</td> <td> <div class="btn-group"> <button type="button" disabled ng-if="!search.display_name" class="btn btn-xs dropdown-toggle btn-primary-outline"> @@ -43,7 +45,7 @@ </ul> </div> </td> - <td>{{ search.groups.join(', ') }}</td> + <td>{{:: search.groups.join(', ') }}</td> <td ng-if="::$ctrl.afformEnabled"> <div class="btn-group"> <button type="button" ng-click="$ctrl.loadAfforms()" ng-if="search.display_name" class="btn btn-xs dropdown-toggle btn-primary-outline" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> @@ -72,6 +74,8 @@ </ul> </div> </td> + <td>{{:: ts('%1 by %2', {1: formatDate(search.created_date), 2: search['created.display_name']}) }}</td> + <td>{{:: ts('%1 by %2', {1: formatDate(search.created_date), 2: search['modified.display_name']}) }}</td> <td class="text-right"> <a class="btn btn-xs btn-default" href="#/edit/{{:: search.id }}">{{:: ts('Edit') }}</a> <a class="btn btn-xs btn-default" href="#/create/{{:: search.api_entity + '?params=' + $ctrl.encode(search.api_params) }}">{{:: ts('Clone') }}</a> diff --git a/civicrm/ext/search/ang/crmSearchDisplay.module.js b/civicrm/ext/search/ang/crmSearchDisplay.module.js index 7c134b9f47..8c08cffa0e 100644 --- a/civicrm/ext/search/ang/crmSearchDisplay.module.js +++ b/civicrm/ext/search/ang/crmSearchDisplay.module.js @@ -36,7 +36,11 @@ displayValue = column.rewrite ? replaceTokens(column.rewrite, rowData, rowMeta) : formatRawValue(column, rowData[key]), result = _.escape(displayValue); if (column.link) { - result = '<a href="' + _.escape(getUrl(column.link, rowData)) + '">' + result + '</a>'; + var target = ''; + if (column.link.target) { + target = column.link.target === 'crm-popup' ? 'class="crm-popup" ' : 'target="' + column.link.target + '" '; + } + result = '<a ' + target + 'href="' + _.escape(getUrl(column.link.path, rowData)) + '">' + result + '</a>'; } return result; } @@ -74,13 +78,13 @@ } function getResults(ctrl) { - var params = getApiParams(ctrl); - crmApi4('SearchDisplay', 'run', params).then(function(results) { + return crmApi4('SearchDisplay', 'run', getApiParams(ctrl)).then(function(results) { ctrl.results = results; - if (ctrl.settings.pager && !ctrl.rowCount) { - if (results.length < ctrl.settings.limit) { + ctrl.editing = false; + if (!ctrl.rowCount) { + if (!ctrl.settings.limit || results.length < ctrl.settings.limit) { ctrl.rowCount = results.length; - } else { + } else if (ctrl.settings.pager) { var params = getApiParams(ctrl, 'row_count'); crmApi4('SearchDisplay', 'run', params).then(function(result) { ctrl.rowCount = result.count; diff --git a/civicrm/ext/search/ang/crmSearchDisplay/colType/buttons.html b/civicrm/ext/search/ang/crmSearchDisplay/colType/buttons.html index f18030cf3c..7630a9b863 100644 --- a/civicrm/ext/search/ang/crmSearchDisplay/colType/buttons.html +++ b/civicrm/ext/search/ang/crmSearchDisplay/colType/buttons.html @@ -1,5 +1,5 @@ <span ng-repeat="item in col.links"> - <a class="btn {{:: col.size }} btn-{{:: item.style }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> + <a class="btn {{:: col.size }} btn-{{:: item.style }} {{:: item.target }}" target="{{:: item.target }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> <i ng-if=":: item.icon" class="crm-i {{:: item.icon }}"></i> {{:: item.text }} </a> diff --git a/civicrm/ext/search/ang/crmSearchDisplay/colType/field.html b/civicrm/ext/search/ang/crmSearchDisplay/colType/field.html index 1c61060100..4f21543abf 100644 --- a/civicrm/ext/search/ang/crmSearchDisplay/colType/field.html +++ b/civicrm/ext/search/ang/crmSearchDisplay/colType/field.html @@ -1 +1,2 @@ -<span ng-bind-html="$ctrl.formatFieldValue(row, col)"></span> +<crm-search-display-editable row="row" col="col" on-success="$ctrl.refresh(row)" cancel="$ctrl.editing = null;" ng-if="col.editable && $ctrl.editing && $ctrl.editing[0] === rowIndex && $ctrl.editing[1] === col.key"></crm-search-display-editable> +<span ng-bind-html=":: $ctrl.formatFieldValue(row, col)" ng-class="{'crm-editable-enabled': col.editable && !$ctrl.editing && row[col.editable.id]}" ng-click="col.editable && !$ctrl.editing && ($ctrl.editing = [rowIndex, col.key])"></span> diff --git a/civicrm/ext/search/ang/crmSearchDisplay/colType/links.html b/civicrm/ext/search/ang/crmSearchDisplay/colType/links.html index d0a2480473..d84651693d 100644 --- a/civicrm/ext/search/ang/crmSearchDisplay/colType/links.html +++ b/civicrm/ext/search/ang/crmSearchDisplay/colType/links.html @@ -1,5 +1,5 @@ <span ng-repeat="item in col.links"> - <a class="text-{{:: item.style }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> + <a class="text-{{:: item.style }} {{:: item.target }}" target="{{:: item.target }}" href="{{:: displayUtils.getUrl(item.path, row) }}"> <i ng-if=":: item.icon" class="crm-i {{:: item.icon }}"></i> {{:: item.text }} </a> diff --git a/civicrm/ext/search/ang/crmSearchDisplay/colType/menu.html b/civicrm/ext/search/ang/crmSearchDisplay/colType/menu.html index a11b5319be..213f814424 100644 --- a/civicrm/ext/search/ang/crmSearchDisplay/colType/menu.html +++ b/civicrm/ext/search/ang/crmSearchDisplay/colType/menu.html @@ -5,7 +5,7 @@ </button> <ul class="dropdown-menu {{ col.alignment === 'text-right' ? 'dropdown-menu-right' : '' }}" ng-if=":: col.open"> <li ng-repeat="item in col.links" class="bg-{{:: item.style }}"> - <a href="{{:: displayUtils.getUrl(item.path, row) }}"> + <a href="{{:: displayUtils.getUrl(item.path, row) }}" class="{{:: item.target }}" target="{{:: item.target }}"> <i ng-if=":: item.icon" class="crm-i {{:: item.icon }}"></i> {{:: item.text }} </a> diff --git a/civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js b/civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js new file mode 100644 index 0000000000..181c0d26d2 --- /dev/null +++ b/civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.component.js @@ -0,0 +1,83 @@ +// https://civicrm.org/licensing +(function(angular, $, _) { + "use strict"; + + var optionsCache = {}; + + angular.module('crmSearchDisplay').component('crmSearchDisplayEditable', { + bindings: { + row: '<', + col: '<', + cancel: '&', + onSuccess: '&' + }, + templateUrl: '~/crmSearchDisplay/crmSearchDisplayEditable.html', + controller: function($scope, $element, crmApi4, crmStatus) { + var ctrl = this, + initialValue, + col; + + this.$onInit = function() { + col = this.col; + this.value = _.cloneDeep(this.row[col.editable.value]); + initialValue = _.cloneDeep(this.row[col.editable.value]); + + this.field = { + data_type: col.dataType, + name: col.editable.name, + options: col.editable.options, + fk_entity: col.editable.fk_entity, + serialize: col.editable.serialize, + }; + + $(document).on('keydown.crmSearchDisplayEditable', function(e) { + if (e.key === 'Escape') { + $scope.$apply(function() { + ctrl.cancel(); + }); + } else if (e.key === 'Enter') { + $scope.$apply(ctrl.save); + } + }); + + if (this.field.options === true) { + loadOptions(); + } + }; + + this.$onDestroy = function() { + $(document).off('.crmSearchDisplayEditable'); + }; + + this.save = function() { + if (ctrl.value === initialValue) { + ctrl.cancel(); + return; + } + var values = {id: ctrl.row[col.editable.id]}; + values[col.editable.name] = ctrl.value; + $('input', $element).attr('disabled', true); + crmStatus({}, crmApi4(col.editable.entity, 'update', { + values: values + })).then(ctrl.onSuccess); + }; + + function loadOptions() { + var cacheKey = col.editable.entity + ' ' + ctrl.field.name; + if (optionsCache[cacheKey]) { + ctrl.field.options = optionsCache[cacheKey]; + return; + } + crmApi4(col.editable.entity, 'getFields', { + action: 'update', + select: ['options'], + loadOptions: ['id', 'name', 'label', 'description', 'color', 'icon'], + where: [['name', '=', ctrl.field.name]], + }, 0).then(function(field) { + ctrl.field.options = optionsCache[cacheKey] = field.options; + }); + } + } + }); + +})(angular, CRM.$, CRM._); diff --git a/civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.html b/civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.html new file mode 100644 index 0000000000..d0d8eca08f --- /dev/null +++ b/civicrm/ext/search/ang/crmSearchDisplay/crmSearchDisplayEditable.html @@ -0,0 +1,9 @@ +<crm-search-input class="form-inline" field="$ctrl.field" ng-model="$ctrl.value"></crm-search-input> +<div class="form-inline crm-search-display-editable-buttons"> + <button type="button" ng-click="$ctrl.save()" class="btn btn-xs btn-success"> + <i class="crm-i fa-check"></i> + </button> + <button type="button" ng-click="$ctrl.cancel()" class="btn btn-xs btn-danger"> + <i class="crm-i fa-times"></i> + </button> +</div> diff --git a/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.component.js b/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.component.js index 255814f5e1..fa2d9ea6bb 100644 --- a/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.component.js +++ b/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.component.js @@ -14,8 +14,8 @@ afFieldset: '?^^afFieldset' }, templateUrl: '~/crmSearchDisplayList/crmSearchDisplayList.html', - controller: function($scope, crmApi4, searchDisplayUtils) { - var ts = $scope.ts = CRM.ts(), + controller: function($scope, $element, crmApi4, searchDisplayUtils) { + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.page = 1; @@ -25,17 +25,33 @@ this.sort = this.settings.sort ? _.cloneDeep(this.settings.sort) : []; $scope.displayUtils = searchDisplayUtils; + // If search is embedded in contact summary tab, display count in tab-header + 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 (this.afFieldset) { - $scope.$watch(this.afFieldset.getFieldData, refresh, true); + $scope.$watch(this.afFieldset.getFieldData, onChangeFilters, true); } - $scope.$watch('$ctrl.filters', refresh, true); + $scope.$watch('$ctrl.filters', onChangeFilters, true); }; this.getResults = _.debounce(function() { searchDisplayUtils.getResults(ctrl); }, 100); - function refresh() { + // Refresh current page + this.refresh = function(row) { + searchDisplayUtils.getResults(ctrl); + }; + + function onChangeFilters() { ctrl.page = 1; ctrl.rowCount = null; ctrl.getResults(); diff --git a/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.html b/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.html index 00c0f55e47..9d039ba19c 100644 --- a/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.html +++ b/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayList.html @@ -1,3 +1,5 @@ -<ol ng-if=":: $ctrl.settings.style === 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayListItems.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ol> -<ul ng-if=":: $ctrl.settings.style !== 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayListItems.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ul> -<div ng-include="'~/crmSearchDisplay/Pager.html'"></div> +<div class="crm-search-display crm-search-display-list"> + <ol ng-if=":: $ctrl.settings.style === 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayListItems.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ol> + <ul ng-if=":: $ctrl.settings.style !== 'ol'" ng-include="'~/crmSearchDisplayList/crmSearchDisplayListItems.html'" ng-style="{'list-style': $ctrl.settings.symbol}"></ul> + <div ng-include="'~/crmSearchDisplay/Pager.html'"></div> +</div> diff --git a/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayListItems.html b/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayListItems.html index e99f04b04f..59bae1aab8 100644 --- a/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayListItems.html +++ b/civicrm/ext/search/ang/crmSearchDisplayList/crmSearchDisplayListItems.html @@ -1,4 +1,4 @@ -<li ng-repeat="row in $ctrl.results"> +<li ng-repeat="(rowIndex, row) in $ctrl.results"> <div ng-repeat="col in $ctrl.settings.columns" title="{{:: displayUtils.replaceTokens(col.title, row, $ctrl.settings.columns) }}" class="{{:: col.break ? '' : 'crm-inline-block' }}"> <label ng-if=":: col.label && (col.type !== 'field' || col.forceLabel || row[col.key])"> {{:: displayUtils.replaceTokens(col.label, row, $ctrl.settings.columns) }} diff --git a/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js b/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js index 8ba836c4cb..9b4b9f18ee 100644 --- a/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js +++ b/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js @@ -13,8 +13,8 @@ afFieldset: '?^^afFieldset' }, templateUrl: '~/crmSearchDisplayTable/crmSearchDisplayTable.html', - controller: function($scope, crmApi4, searchDisplayUtils) { - var ts = $scope.ts = CRM.ts(), + controller: function($scope, $element, crmApi4, searchDisplayUtils) { + var ts = $scope.ts = CRM.ts('org.civicrm.search'), ctrl = this; this.page = 1; @@ -26,19 +26,45 @@ this.sort = this.settings.sort ? _.cloneDeep(this.settings.sort) : []; $scope.displayUtils = searchDisplayUtils; + // If search is embedded in contact summary tab, display count in tab-header + 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 (this.afFieldset) { - $scope.$watch(this.afFieldset.getFieldData, refresh, true); + $scope.$watch(this.afFieldset.getFieldData, onChangeFilters, true); } - $scope.$watch('$ctrl.filters', refresh, true); + $scope.$watch('$ctrl.filters', onChangeFilters, true); }; this.getResults = _.debounce(function() { searchDisplayUtils.getResults(ctrl); }, 100); - function refresh() { + // Refresh page after inline-editing a row + this.refresh = function(row) { + var rowId = row.id; + searchDisplayUtils.getResults(ctrl) + .then(function() { + // If edited row disappears (because edits cause it to not meet search criteria), deselect it + var index = ctrl.selectedRows.indexOf(rowId); + if (index > -1 && !_.findWhere(ctrl.results, {id: rowId})) { + ctrl.selectedRows.splice(index, 1); + } + }); + }; + + function onChangeFilters() { ctrl.page = 1; ctrl.rowCount = null; + ctrl.selectedRows.legth = 0; + ctrl.allRowsSelected = false; ctrl.getResults(); } diff --git a/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.html b/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.html index 3c408c3b88..e867270f72 100644 --- a/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.html +++ b/civicrm/ext/search/ang/crmSearchDisplayTable/crmSearchDisplayTable.html @@ -1,27 +1,29 @@ -<div class="form-inline" ng-if="$ctrl.settings.actions"> - <crm-search-actions entity="$ctrl.apiEntity" ids="$ctrl.selectedRows" refresh="$ctrl.getResults()"></crm-search-actions> +<div class="crm-search-display crm-search-display-table"> + <div class="form-inline" ng-if="$ctrl.settings.actions"> + <crm-search-actions entity="$ctrl.apiEntity" ids="$ctrl.selectedRows" refresh="$ctrl.getResults()"></crm-search-actions> + </div> + <table> + <thead> + <tr> + <th class="crm-search-result-select" ng-if=":: $ctrl.settings.actions"> + <input type="checkbox" ng-checked="$ctrl.allRowsSelected" ng-click="selectAllRows()" > + </th> + <th ng-repeat="col in $ctrl.settings.columns" ng-click="setSort(col, $event)" title="{{:: ts('Click to sort results (shift-click to sort by multiple).') }}"> + <i ng-if="col.type === 'field'" class="crm-i {{ getSort(col) }}"></i> + <span>{{ col.label }}</span> + </th> + </tr> + </thead> + <tbody> + <tr ng-repeat="(rowIndex, row) in $ctrl.results"> + <td ng-if=":: $ctrl.settings.actions"> + <input type="checkbox" ng-checked="isRowSelected(row)" ng-click="selectRow(row)" ng-disabled="!(!loadingAllRows && row.id)"> + </td> + <td ng-repeat="col in $ctrl.settings.columns" ng-include="'~/crmSearchDisplay/colType/' + col.type + '.html'" title="{{:: displayUtils.replaceTokens(col.title, row, $ctrl.settings.columns) }}" class="{{:: col.alignment }}"> + </td> + <td></td> + </tr> + </tbody> + </table> + <div ng-include="'~/crmSearchDisplay/Pager.html'"></div> </div> -<table> - <thead> - <tr> - <th class="crm-search-result-select" ng-if="$ctrl.settings.actions"> - <input type="checkbox" ng-checked="$ctrl.allRowsSelected" ng-click="selectAllRows()" > - </th> - <th ng-repeat="col in $ctrl.settings.columns" ng-click="setSort(col, $event)" title="{{:: ts('Click to sort results (shift-click to sort by multiple).') }}"> - <i ng-if="col.type === 'field'" class="crm-i {{ getSort(col) }}"></i> - <span>{{ col.label }}</span> - </th> - </tr> - </thead> - <tbody> - <tr ng-repeat="row in $ctrl.results"> - <td ng-if="$ctrl.settings.actions"> - <input type="checkbox" ng-checked="isRowSelected(row)" ng-click="selectRow(row)" ng-disabled="!(!loadingAllRows && row.id)"> - </td> - <td ng-repeat="col in $ctrl.settings.columns" ng-include="'~/crmSearchDisplay/colType/' + col.type + '.html'" title="{{:: displayUtils.replaceTokens(col.title, row, $ctrl.settings.columns) }}" class="{{:: col.alignment }}"> - </td> - <td></td> - </tr> - </tbody> -</table> -<div ng-include="'~/crmSearchDisplay/Pager.html'"></div> diff --git a/civicrm/ext/search/css/crmSearchActions.css b/civicrm/ext/search/css/crmSearchActions.css index 877e7ddaaa..aab0e8c9dc 100644 --- a/civicrm/ext/search/css/crmSearchActions.css +++ b/civicrm/ext/search/css/crmSearchActions.css @@ -3,3 +3,22 @@ margin-top: 10px; border: 1px solid lightgrey; } + +.crm-search-display.crm-search-display-table td > crm-search-display-editable, +.crm-search-display.crm-search-display-table td > .crm-editable-enabled { + display: block !important; +} + +.crm-search-display crm-search-display-editable { + position: relative; +} + +.crm-search-display crm-search-display-editable + span { + display: none !important; +} + +.crm-search-display .crm-search-display-editable-buttons { + position: absolute; + bottom: -22px; + left: 0; +} diff --git a/civicrm/ext/search/css/crmSearchAdmin.css b/civicrm/ext/search/css/crmSearchAdmin.css index aaf1c5bc26..0bad2c7879 100644 --- a/civicrm/ext/search/css/crmSearchAdmin.css +++ b/civicrm/ext/search/css/crmSearchAdmin.css @@ -96,8 +96,11 @@ display: inline-block; } -#bootstrap-theme.crm-search i.fa-arrows { - cursor: move; +#bootstrap-theme.crm-search i.crm-search-move-icon { + opacity: .5; +} +#bootstrap-theme.crm-search .crm-draggable:hover > * > i.crm-search-move-icon { + opacity: 1; } #bootstrap-theme.crm-search .api4-clause-badge { @@ -112,6 +115,7 @@ #bootstrap-theme.crm-search .api4-clause-badge .caret { margin: 0; } +/* Icon only shown while dragging */ #bootstrap-theme.crm-search .api4-clause-badge .crm-i { display: none; padding: 0 6px; @@ -160,6 +164,7 @@ background-color: rgba(255, 255, 255, .8); } +/* A flex-row arranges elements inline, with the 'crm-flex-*' item(s) taking up all remaining space */ #bootstrap-theme .crm-search-admin-flex-row { display: flex; align-items: center; @@ -167,9 +172,6 @@ #bootstrap-theme .crm-search-admin-flex-row > *:not(:first-child) { margin-left: 6px; } -#bootstrap-theme .crm-search-admin-flex-row > input[type=text] { - flex: 1; -} #bootstrap-theme .crm-search-admin-unused-columns fieldset { min-height: 60px; diff --git a/civicrm/ext/search/phpunit.xml.dist b/civicrm/ext/search/phpunit.xml.dist new file mode 100644 index 0000000000..1990cb6164 --- /dev/null +++ b/civicrm/ext/search/phpunit.xml.dist @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> + <testsuites> + <testsuite name="SearchKit Test Suite"> + <directory>./tests/phpunit</directory> + </testsuite> + </testsuites> + <filter> + <whitelist> + <directory suffix=".php">./</directory> + </whitelist> + </filter> + <listeners> + <listener class="Civi\Test\CiviTestListener"> + <arguments/> + </listener> + </listeners> +</phpunit> diff --git a/civicrm/ext/search/sql/auto_install.sql b/civicrm/ext/search/sql/auto_install.sql index 4bdafa82d5..03d97ca2e8 100644 --- a/civicrm/ext/search/sql/auto_install.sql +++ b/civicrm/ext/search/sql/auto_install.sql @@ -64,6 +64,6 @@ 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 -) ; +) ROW_FORMAT=DYNAMIC ; - \ No newline at end of file + diff --git a/civicrm/ext/search/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php b/civicrm/ext/search/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php new file mode 100644 index 0000000000..02506e6a8f --- /dev/null +++ b/civicrm/ext/search/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php @@ -0,0 +1,217 @@ +<?php +namespace api\v4\SearchDisplay; + +use Civi\Api4\Contact; +use Civi\Api4\SavedSearch; +use Civi\Api4\SearchDisplay; +use Civi\Api4\UFMatch; +use Civi\Test\HeadlessInterface; +use Civi\Test\TransactionalInterface; + +// FIXME: This shouldn't be needed but the core classLoader doesn't seem present when this file loads +require_once 'tests/phpunit/CRMTraits/ACL/PermissionTrait.php'; + +/** + * @group headless + */ +class SearchRunTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface, TransactionalInterface { + use \CRMTraits_ACL_PermissionTrait; + + 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 setUp() { + parent::setUp(); + } + + public function tearDown() { + parent::tearDown(); + } + + /** + * Test running a searchDisplay with various filters. + */ + public function testRunDisplay() { + $lastName = uniqid(__FUNCTION__); + $sampleData = [ + ['first_name' => 'One', 'last_name' => $lastName], + ['first_name' => 'Two', 'last_name' => $lastName], + ['first_name' => 'Three', 'last_name' => $lastName], + ['first_name' => 'Four', 'last_name' => $lastName], + ]; + Contact::save(FALSE)->setRecords($sampleData)->execute(); + + $params = [ + 'checkPermissions' => FALSE, + 'return' => 'page:1', + 'savedSearch' => [ + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id', 'first_name', 'last_name'], + 'where' => [], + ], + ], + 'display' => [ + 'type' => 'table', + 'label' => '', + 'settings' => [ + 'limit' => 20, + 'pager' => TRUE, + 'columns' => [ + [ + 'key' => 'id', + 'label' => 'Contact ID', + 'dataType' => 'Integer', + 'type' => 'field', + ], + [ + 'key' => 'first_name', + 'label' => 'First Name', + 'dataType' => 'String', + 'type' => 'field', + ], + [ + 'key' => 'last_name', + 'label' => 'Last Name', + 'dataType' => 'String', + 'type' => 'field', + ], + ], + 'sort' => [ + ['id', 'ASC'], + ], + ], + ], + 'filters' => ['last_name' => $lastName], + 'afform' => NULL, + ]; + + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(4, $result); + + $params['filters']['first_name'] = ['One', 'Two']; + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(2, $result); + $this->assertEquals('One', $result[0]['first_name']); + $this->assertEquals('Two', $result[1]['first_name']); + + $params['filters'] = ['id' => ['>' => $result[0]['id'], '<=' => $result[1]['id'] + 1]]; + $params['sort'] = [['first_name', 'ASC']]; + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(2, $result); + $this->assertEquals('Three', $result[0]['first_name']); + $this->assertEquals('Two', $result[1]['first_name']); + } + + /** + * Test running a searchDisplay as a restricted user. + */ + public function testDisplayACLCheck() { + $lastName = uniqid(__FUNCTION__); + $sampleData = [ + ['first_name' => 'User', 'last_name' => uniqid('user')], + ['first_name' => 'One', 'last_name' => $lastName], + ['first_name' => 'Two', 'last_name' => $lastName], + ['first_name' => 'Three', 'last_name' => $lastName], + ['first_name' => 'Four', 'last_name' => $lastName], + ]; + $sampleData = Contact::save(FALSE) + ->setRecords($sampleData)->execute() + ->indexBy('first_name')->column('id'); + + // Create logged-in user + UFMatch::delete(FALSE) + ->addWhere('uf_id', '=', 6) + ->execute(); + UFMatch::create(FALSE)->setValues([ + 'contact_id' => $sampleData['User'], + 'uf_name' => 'superman', + 'uf_id' => 6, + ])->execute(); + + $session = \CRM_Core_Session::singleton(); + $session->set('userID', $sampleData['User']); + $hooks = \CRM_Utils_Hook::singleton(); + \CRM_Core_Config::singleton()->userPermissionClass->permissions = [ + 'access CiviCRM', + ]; + + $search = SavedSearch::create(FALSE) + ->setValues([ + 'name' => uniqid(__FUNCTION__), + 'api_entity' => 'Contact', + 'api_params' => [ + 'version' => 4, + 'select' => ['id', 'first_name', 'last_name'], + 'where' => [['last_name', '=', $lastName]], + ], + ]) + ->addChain('display', SearchDisplay::create() + ->setValues([ + 'type' => 'table', + 'label' => uniqid(__FUNCTION__), + 'saved_search_id' => '$id', + 'settings' => [ + 'limit' => 20, + 'pager' => TRUE, + 'columns' => [ + [ + 'key' => 'id', + 'label' => 'Contact ID', + 'dataType' => 'Integer', + 'type' => 'field', + ], + [ + 'key' => 'first_name', + 'label' => 'First Name', + 'dataType' => 'String', + 'type' => 'field', + ], + [ + 'key' => 'last_name', + 'label' => 'Last Name', + 'dataType' => 'String', + 'type' => 'field', + ], + ], + 'sort' => [ + ['id', 'ASC'], + ], + ], + ]), 0) + ->execute()->first(); + + $params = [ + 'return' => 'page:1', + 'savedSearch' => $search['name'], + 'display' => $search['display']['name'], + 'afform' => NULL, + ]; + + $hooks->setHook('civicrm_aclWhereClause', [$this, 'aclWhereHookNoResults']); + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(0, $result); + + $this->allowedContactId = $sampleData['Two']; + $hooks->setHook('civicrm_aclWhereClause', [$this, 'aclWhereOnlyOne']); + $this->cleanupCachedPermissions(); + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(1, $result); + $this->assertEquals($sampleData['Two'], $result[0]['id']); + + $hooks->setHook('civicrm_aclWhereClause', [$this, 'aclWhereGreaterThan']); + $this->cleanupCachedPermissions(); + $result = civicrm_api4('SearchDisplay', 'run', $params); + $this->assertCount(2, $result); + $this->assertEquals($sampleData['Three'], $result[0]['id']); + $this->assertEquals($sampleData['Four'], $result[1]['id']); + + } + +} diff --git a/civicrm/ext/search/tests/phpunit/bootstrap.php b/civicrm/ext/search/tests/phpunit/bootstrap.php new file mode 100644 index 0000000000..a5b49253c8 --- /dev/null +++ b/civicrm/ext/search/tests/phpunit/bootstrap.php @@ -0,0 +1,63 @@ +<?php + +ini_set('memory_limit', '2G'); +ini_set('safe_mode', 0); +// phpcs:disable +eval(cv('php:boot --level=classloader', 'phpcode')); +// phpcs:enable +// Allow autoloading of PHPUnit helper classes in this extension. +$loader = new \Composer\Autoload\ClassLoader(); +$loader->add('CRM_', __DIR__); +$loader->add('Civi\\', __DIR__); +$loader->add('api_', __DIR__); +$loader->add('api\\', __DIR__); +$loader->register(); + +/** + * Call the "cv" command. + * + * @param string $cmd + * The rest of the command to send. + * @param string $decode + * Ex: 'json' or 'phpcode'. + * @return string + * Response output (if the command executed normally). + * @throws \RuntimeException + * If the command terminates abnormally. + */ +function cv($cmd, $decode = 'json') { + $cmd = 'cv ' . $cmd; + $descriptorSpec = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => STDERR); + $oldOutput = getenv('CV_OUTPUT'); + putenv("CV_OUTPUT=json"); + + // Execute `cv` in the original folder. This is a work-around for + // phpunit/codeception, which seem to manipulate PWD. + $cmd = sprintf('cd %s; %s', escapeshellarg(getenv('PWD')), $cmd); + + $process = proc_open($cmd, $descriptorSpec, $pipes, __DIR__); + putenv("CV_OUTPUT=$oldOutput"); + fclose($pipes[0]); + $result = stream_get_contents($pipes[1]); + fclose($pipes[1]); + if (proc_close($process) !== 0) { + throw new RuntimeException("Command failed ($cmd):\n$result"); + } + switch ($decode) { + case 'raw': + return $result; + + case 'phpcode': + // If the last output is /*PHPCODE*/, then we managed to complete execution. + if (substr(trim($result), 0, 12) !== "/*BEGINPHP*/" || substr(trim($result), -10) !== "/*ENDPHP*/") { + throw new \RuntimeException("Command failed ($cmd):\n$result"); + } + return $result; + + case 'json': + return json_decode($result, 1); + + default: + throw new RuntimeException("Bad decoder format ($decode)"); + } +} diff --git a/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist b/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist index 0f9f25d307..fc8f870b72 100644 --- a/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist +++ b/civicrm/ext/sequentialcreditnotes/phpunit.xml.dist @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" syntaxCheck="false" bootstrap="tests/phpunit/bootstrap.php"> +<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php"> <testsuites> <testsuite name="My Test Suite"> <directory>./tests/phpunit</directory> diff --git a/civicrm/ext/sequentialcreditnotes/tests/phpunit/SequentialcreditnotesTest.php b/civicrm/ext/sequentialcreditnotes/tests/phpunit/SequentialcreditnotesTest.php index 507b39a921..58bda954fd 100644 --- a/civicrm/ext/sequentialcreditnotes/tests/phpunit/SequentialcreditnotesTest.php +++ b/civicrm/ext/sequentialcreditnotes/tests/phpunit/SequentialcreditnotesTest.php @@ -45,7 +45,7 @@ class SequentialcreditnotesTest extends \PHPUnit\Framework\TestCase implements H * @throws \CRM_Core_Exception * @throws \CiviCRM_API3_Exception */ - public function testCreateCreditNoteId() { + public function testCreateCreditNoteId(): void { $this->_apiversion = 4; $contactId = $this->callAPISuccess('Contact', 'create', ['contact_type' => 'Individual', 'email' => 'b@example.com'])['id']; diff --git a/civicrm/ext/sequentialcreditnotes/tests/phpunit/bootstrap.php b/civicrm/ext/sequentialcreditnotes/tests/phpunit/bootstrap.php index 352e007050..f530038c3f 100644 --- a/civicrm/ext/sequentialcreditnotes/tests/phpunit/bootstrap.php +++ b/civicrm/ext/sequentialcreditnotes/tests/phpunit/bootstrap.php @@ -1,7 +1,6 @@ <?php ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:ignore eval(cv('php:boot --level=classloader', 'phpcode')); @@ -20,16 +19,16 @@ $loader->register(); * The rest of the command to send. * @param string $decode * Ex: 'json' or 'phpcode'. + * * @return string * Response output (if the command executed normally). - * @throws \RuntimeException - * If the command terminates abnormally. + * @throws \RuntimeException If the command terminates abnormally. */ -function cv($cmd, $decode = 'json') { +function cv(string $cmd, $decode = 'json'): string { $cmd = 'cv ' . $cmd; - $descriptorSpec = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => STDERR); + $descriptorSpec = [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => STDERR]; $oldOutput = getenv('CV_OUTPUT'); - putenv("CV_OUTPUT=json"); + putenv('CV_OUTPUT=json'); // Execute `cv` in the original folder. This is a work-around for // phpunit/codeception, which seem to manipulate PWD. @@ -49,7 +48,7 @@ function cv($cmd, $decode = 'json') { case 'phpcode': // If the last output is /*PHPCODE*/, then we managed to complete execution. - if (substr(trim($result), 0, 12) !== "/*BEGINPHP*/" || substr(trim($result), -10) !== "/*ENDPHP*/") { + if (strpos(trim($result), '/*BEGINPHP*/') !== 0 || substr(trim($result), -10) !== '/*ENDPHP*/') { throw new \RuntimeException("Command failed ($cmd):\n$result"); } return $result; diff --git a/civicrm/js/Common.js b/civicrm/js/Common.js index 63db354193..cb3c8d2370 100644 --- a/civicrm/js/Common.js +++ b/civicrm/js/Common.js @@ -436,11 +436,26 @@ if (!CRM.vars) CRM.vars = {}; formatResult: formatCrmSelect2, formatSelection: formatCrmSelect2 }; + // quickform doesn't support optgroups so here's a hack :( + // Instead of using wrapAll or similar that repeatedly appends options to the group and redraw the page (=> very slow on large lists), + // build bulk HTML and insert in single shot + var optGroups = {}; $('option[value^=crm_optgroup]', this).each(function () { - $(this).nextUntil('option[value^=crm_optgroup]').wrapAll('<optgroup label="' + $(this).text() + '" />'); + var groupHtml = ''; + $(this).nextUntil('option[value^=crm_optgroup]').each(function () { + groupHtml += this.outerHTML; + }); + optGroups[$(this).text()] = groupHtml; $(this).remove(); }); + var replacedHtml = ''; + for (var groupLabel in optGroups) { + replacedHtml += '<optgroup label="' + groupLabel + '">' + optGroups[groupLabel] + '</optgroup>'; + } + if (replacedHtml) { + $el.html(replacedHtml); + } // quickform does not support disabled option, so yet another hack to // add disabled property for option values @@ -741,6 +756,7 @@ if (!CRM.vars) CRM.vars = {}; } markup += '<div><div class="crm-select2-row-label '+(row.label_class || '')+'">' + (row.color ? '<span class="crm-select-item-color" style="background-color: ' + row.color + '"></span> ' : '') + + (row.icon ? '<i class="crm-i ' + row.icon + '" aria-hidden="true"></i> ' : '') + _.escape((row.prefix !== undefined ? row.prefix + ' ' : '') + row.label + (row.suffix !== undefined ? ' ' + row.suffix : '')) + '</div>' + '<div class="crm-select2-row-description">'; diff --git a/civicrm/js/crm-angularjs-loader.js b/civicrm/js/crm-angularjs-loader.js new file mode 100644 index 0000000000..5a2fe57f21 --- /dev/null +++ b/civicrm/js/crm-angularjs-loader.js @@ -0,0 +1,11 @@ +// http://civicrm.org/licensing +(function($, _) { + "use strict"; + + $(document).on('crmLoad', function(e) { + $('crm-angular-js', e.target).not('.ng-scope').each(function() { + angular.bootstrap(this, $(this).attr('modules').split()); + }); + }); + +})(CRM.$, CRM._); diff --git a/civicrm/js/crm.menubar.js b/civicrm/js/crm.menubar.js index d28f098349..a9177bb5b2 100644 --- a/civicrm/js/crm.menubar.js +++ b/civicrm/js/crm.menubar.js @@ -336,7 +336,33 @@ CRM.menubar.open('QuickSearch'); } } - }); + }) + .autocomplete( "instance" )._renderItem = function( ul, item ) { + var uiMenuItemWrapper = $("<div class='ui-menu-item-uiMenuItemWrapper'>"); + if (item.value == 0) { + uiMenuItemWrapper.text(item.label); + } + else { + uiMenuItemWrapper.append($('<a>') + .attr('href', CRM.url('civicrm/contact/view', {reset: 1, cid: item.value})) + .css({ display: 'block' }) + .text(item.label) + .click(function(e) { + if (e.ctrlKey || e.shiftKey || e.altKey) { + // Special-clicking lets you open several tabs. + e.stopPropagation(); + } + else { + // Fall back to original behaviour. + e.preventDefault(); + } + })); + } + + return $( "<li class='ui-menu-item'>" ) + .append(uiMenuItemWrapper) + .appendTo( ul ); + }; $('#crm-qsearch > a').keyup(function(e) { if ($(e.target).is(this)) { $('#crm-qsearch-input').focus(); diff --git a/civicrm/packages/DB/DataObject.php b/civicrm/packages/DB/DataObject.php index 31aa76822a..a2e9897114 100644 --- a/civicrm/packages/DB/DataObject.php +++ b/civicrm/packages/DB/DataObject.php @@ -1167,7 +1167,7 @@ class DB_DataObject extends DB_DataObject_Overload } // CRM-14986 starts - if (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME) || $v & DB_DATAOBJECT_MYSQLTIMESTAMP) { + if (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME) || ($v & DB_DATAOBJECT_MYSQLTIMESTAMP)) { if (strpos($this->$k, '-') !== FALSE) { /* * per CRM-14986 we have been having ongoing problems with the format returned from $dao->find(TRUE) NOT @@ -1183,9 +1183,9 @@ class DB_DataObject extends DB_DataObject_Overload // CRM-14986 ends // DATE is empty... on a col. that can be null.. - // note: this may be usefull for time as well.. + // Also useful for MYSQLTIMESTAMP to stop NO_ZERO_DATE errors if (!$this->$k && - (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME)) && + (($v & DB_DATAOBJECT_DATE) || ($v & DB_DATAOBJECT_TIME) || ($v & DB_DATAOBJECT_MYSQLTIMESTAMP)) && !($v & DB_DATAOBJECT_NOTNULL)) { $rightq .= " NULL "; diff --git a/civicrm/packages/IDS/Monitor.php b/civicrm/packages/IDS/Monitor.php index ae053f8b33..147ea64d45 100644 --- a/civicrm/packages/IDS/Monitor.php +++ b/civicrm/packages/IDS/Monitor.php @@ -333,16 +333,8 @@ class IDS_Monitor } } - // check for magic quotes and remove them if necessary - if (function_exists('get_magic_quotes_gpc') - && get_magic_quotes_gpc()) { - $value = stripslashes($value); - } - if(function_exists('get_magic_quotes_gpc') - && !get_magic_quotes_gpc() - && version_compare(PHP_VERSION, '5.3.0', '>=')) { - $value = preg_replace('/\\\(["\'\/])/im', '$1', $value); - } + // handle quotes + $value = preg_replace('/\\\(["\'\/])/im', '$1', $value); // if html monitoring is enabled for this field - then do it! if (is_array($this->html) && in_array($key, $this->html, true)) { diff --git a/civicrm/packages/recaptcha/recaptchalib.php b/civicrm/packages/recaptcha/recaptchalib.php deleted file mode 100644 index 3b0ad4e124..0000000000 --- a/civicrm/packages/recaptcha/recaptchalib.php +++ /dev/null @@ -1,255 +0,0 @@ -<?php -/* - * This is a PHP library that handles calling reCAPTCHA. - * - Documentation and latest version - * http://recaptcha.net/plugins/php/ - * - Get a reCAPTCHA API Key - * https://www.google.com/recaptcha/admin/create - * - Discussion group - * http://groups.google.com/group/recaptcha - * - * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net - * AUTHORS: - * Mike Crawford - * Ben Maurer - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/** - * The reCAPTCHA server URL's - */ -define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api.js"); -define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api.js"); -define("RECAPTCHA_VERIFY_SERVER", "https://www.google.com"); - -use GuzzleHttp\Client; - -/** - * Encodes the given data into a query string format - * @param $data - array of string elements to be encoded - * @return string - encoded request - */ -function _recaptcha_qsencode ($data) { - $req = ""; - foreach ( $data as $key => $value ) - $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; - - // Cut the last '&' - $req=substr($req,0,strlen($req)-1); - return $req; -} - - - -/** - * Submits an HTTP POST to a reCAPTCHA server - * @param string $host - * @param string $path - * @param array $data - * @return string response - */ -function _recaptcha_http_post($host, $path, $data) { - $client = new Client(); - try { - $response = $client->request('POST', $host . '/' . $path, ['query' => $data]); - } - catch (Exception $e) { - return ''; - } - return (string) $response->getBody(); -} - - - -/** - * Gets the challenge HTML (javascript and non-javascript version). - * This is called from the browser, and the resulting reCAPTCHA HTML widget - * is embedded within the HTML form it was called from. - * @param string $pubkey A public key for reCAPTCHA - * @param string $error The error given by reCAPTCHA (optional, default is null) - * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) - - * @return string - The HTML to be embedded in the user's form. - */ -function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false) -{ - if ($pubkey == null || $pubkey == '') { - die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); - } - - if ($use_ssl) { - $server = RECAPTCHA_API_SECURE_SERVER; - } else { - $server = RECAPTCHA_API_SERVER; - } - - $errorpart = ""; - if ($error) { - $errorpart = "&error=" . $error; - } - return '<div class="g-recaptcha" data-sitekey="'.$pubkey.'"></div> - <script type="text/javascript" src="'. $server.'"></script> - - <noscript> - <iframe src="'. $server.'" height="300" width="500" frameborder="0"></iframe><br/> - <div class="g-recaptcha" data-sitekey="'.$pubkey.'"></div> - </noscript>'; -} - - - - -/** - * A ReCaptchaResponse is returned from recaptcha_check_answer() - */ -class ReCaptchaResponse { - var $is_valid; - var $error; -} - - -/** - * Calls an HTTP POST function to verify if the user's guess was correct - * @param string $privkey - * @param string $remoteip - * @param string $response - * @param array $extra_params an array of extra variables to post to the server - * @return ReCaptchaResponse - */ -function recaptcha_check_answer ($privkey, $remoteip, $response, $extra_params = array()) -{ - if ($privkey == null || $privkey == '') { - die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>"); - } - - if ($remoteip == null || $remoteip == '') { - die ("For security reasons, you must pass the remote ip to reCAPTCHA"); - } - - - - //discard spam submissions - if ($response == null || strlen($response) == 0) { - $recaptcha_response = new ReCaptchaResponse(); - $recaptcha_response->is_valid = false; - $recaptcha_response->error = 'incorrect-captcha-sol'; - return $recaptcha_response; - } - - $validationResponse = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/siteverify", - [ - 'secret' => $privkey, - 'remoteip' => $remoteip, - 'response' => $response - ] + $extra_params - ); - - $answers = json_decode($validationResponse, TRUE); - $recaptcha_response = new ReCaptchaResponse(); - - $recaptcha_response->is_valid = $answers['success']; - $recaptcha_response->error = $answers['error-codes']; - return $recaptcha_response; - -} - -/** - * gets a URL where the user can sign up for reCAPTCHA. If your application - * has a configuration page where you enter a key, you should provide a link - * using this function. - * @param string $domain The domain where the page is hosted - * @param string $appname The name of your application - */ -function recaptcha_get_signup_url ($domain = null, $appname = null) { - return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname)); -} - -function _recaptcha_aes_pad($val) { - $block_size = 16; - $numpad = $block_size - (strlen ($val) % $block_size); - return str_pad($val, strlen ($val) + $numpad, chr($numpad)); -} - -/* Mailhide related code */ - -function _recaptcha_aes_encrypt($val,$ky) { - if (! function_exists ("mcrypt_encrypt")) { - die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); - } - $mode=MCRYPT_MODE_CBC; - $enc=MCRYPT_RIJNDAEL_128; - $val=_recaptcha_aes_pad($val); - return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); -} - - -function _recaptcha_mailhide_urlbase64 ($x) { - return strtr(base64_encode ($x), '+/', '-_'); -} - -/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ -function recaptcha_mailhide_url($pubkey, $privkey, $email) { - if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { - die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . - "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>"); - } - - - $ky = pack('H*', $privkey); - $cryptmail = _recaptcha_aes_encrypt ($email, $ky); - - return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail); -} - -/** - * gets the parts of the email to expose to the user. - * eg, given johndoe@example,com return ["john", "example.com"]. - * the email is then displayed as john...@example.com - */ -function _recaptcha_mailhide_email_parts ($email) { - $arr = preg_split("/@/", $email ); - - if (strlen ($arr[0]) <= 4) { - $arr[0] = substr ($arr[0], 0, 1); - } else if (strlen ($arr[0]) <= 6) { - $arr[0] = substr ($arr[0], 0, 3); - } else { - $arr[0] = substr ($arr[0], 0, 4); - } - return $arr; -} - -/** - * Gets html to display an email address given a public an private key. - * to get a key, go to: - * - * http://www.google.com/recaptcha/mailhide/apikey - */ -function recaptcha_mailhide_html($pubkey, $privkey, $email) { - $emailparts = _recaptcha_mailhide_email_parts ($email); - $url = recaptcha_mailhide_url ($pubkey, $privkey, $email); - - return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) . - "' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]); - -} - - -?> diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index ba3f5d08e8..8b420f6dec 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -15,6 +15,17 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress +## CiviCRM 5.37.0 + +Released May 5, 2021 + +- **[Synopsis](release-notes/5.37.0.md#synopsis)** +- **[Features](release-notes/5.37.0.md#features)** +- **[Bugs resolved](release-notes/5.37.0.md#bugs)** +- **[Miscellany](release-notes/5.37.0.md#misc)** +- **[Credits](release-notes/5.37.0.md#credits)** +- **[Feedback](release-notes/5.37.0.md#feedback)** + ## CiviCRM 5.36.1 Released April 21, 2021 diff --git a/civicrm/release-notes/5.36.0.md b/civicrm/release-notes/5.36.0.md index 938e116cd2..4d0423b56c 100644 --- a/civicrm/release-notes/5.36.0.md +++ b/civicrm/release-notes/5.36.0.md @@ -441,8 +441,6 @@ Released April 7, 2021 - **Angular - Remove deprecated js file ([19704](https://github.com/civicrm/civicrm-core/pull/19704))** -- **Dedupe - Fix regression on saving dedupe rules ([dev/core#2498](https://lab.civicrm.org/dev/core/-/issues/2498): [#19952](https://github.com/civicrm/civicrm-core/pull/19952))** - - **Fix for missing function CodeGen_Util::removeDir ([19688](https://github.com/civicrm/civicrm-core/pull/19688))** diff --git a/civicrm/release-notes/5.37.0.md b/civicrm/release-notes/5.37.0.md new file mode 100644 index 0000000000..acbfd5e528 --- /dev/null +++ b/civicrm/release-notes/5.37.0.md @@ -0,0 +1,1037 @@ +# CiviCRM 5.37.0 + +Released May 5, 2021 + +- **[Synopsis](#synopsis)** +- **[Features](#features)** +- **[Bugs resolved](#bugs)** +- **[Miscellany](#misc)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +|:--------------------------------------------------------------- |:-------:| +| Fix security vulnerabilities? | no | +| **Change the database schema?** | **yes** | +| **Alter the API?** | **yes** | +| **Require attention to configuration options?** | **yes** | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### Core CiviCRM + +- **Improve quicksearch result presentation to enable browser link functions + ([19779](https://github.com/civicrm/civicrm-core/pull/19779))** + + The results in the quick search in the menu bar now appear as actual links. + Clicking an item acts the same as before, but you can now ctrl-click or + right-click for advanced functions in your browser (such as to open the link + in a new tab or window). + +- **Add new super-duper-no-permissions-apply permission + ([19797](https://github.com/civicrm/civicrm-core/pull/19797))** + + A new permission, "Administer all of CiviCRM", is established as a super-duper + permission that implicitly has all other CiviCRM permissions. This is much + like how a Drupal user with the ID 1 has all permissions, even if they're not + individually granted. + +- **AngularJS - Allow loading multiple apps on a single page + ([19922](https://github.com/civicrm/civicrm-core/pull/19922))** + + Allows multiple Angular apps to run on a single page. For example, you + might display 2x Angular-based tabs, 3x Angular-based WP shortcodes, or 4x + Angular-based Drupal blocks. + +- **Support mobile devices on public forms + ([dev/user-interface#35](https://lab.civicrm.org/dev/user-interface/-/issues/35): + [19968](https://github.com/civicrm/civicrm-core/pull/19968))** + + Improves user experience for mobile users on public forms by making labels + appear above inputs on small screens. + +- **info.xml - Allow PSR-0 style class-loader declarations + ([19870](https://github.com/civicrm/civicrm-core/pull/19870))** + + Makes it so extensions may setup classloading in info.xml. + +- **We should not be auto-generating 5.xx.beta1.mysql.tpl files + ([dev/release#16](https://lab.civicrm.org/dev/release/-/issues/16): + [19743](https://github.com/civicrm/civicrm-core/pull/19743))** + + Makes it possible to skip upgrader increments which do not actually require DB + updates. + +- **Adjust weights on activity contact record types + ([dev/core#2442](https://lab.civicrm.org/dev/core/-/issues/2442): + [19992](https://github.com/civicrm/civicrm-core/pull/19992) and + [19987](https://github.com/civicrm/civicrm-core/pull/19987))** + + Improves user experience by making the default Activity Contact Record type + "Activity Target". + +- **The mailings screen is very slow to load when there are many campaigns in + the database ([dev/core#2451](https://lab.civicrm.org/dev/core/-/issues/2451): + [19766](https://github.com/civicrm/civicrm-core/pull/19766))** + + Improves processing of option groups in select2 elements. + +- **Reorganize contact summary template to support non-ajax tabs + ([19875](https://github.com/civicrm/civicrm-core/pull/19875))** + + Adds hook support for non-ajax contact summary tabs. + +- **Feature Request: API endpoint to trigger rebuild paths + ([dev/core#2458](https://lab.civicrm.org/dev/core/-/issues/2458): + [19795](https://github.com/civicrm/civicrm-core/pull/19795))** + + Adds an API to trigger rebuilding paths. + +- **Add job to cleanup acl_cache table, add setting to disable opportunistic + flushing ([dev/core#2477](https://lab.civicrm.org/dev/core/-/issues/2477): + [19930](https://github.com/civicrm/civicrm-core/pull/19930))** + + Adds a scheduled job to cleanup acl_cache table (like for smart groups). + +- **APIv4 entity parity + ([dev/core#2486](https://lab.civicrm.org/dev/core/-/issues/2486): + [19932](https://github.com/civicrm/civicrm-core/pull/19932), + [19933](https://github.com/civicrm/civicrm-core/pull/19933) and + [19931](https://github.com/civicrm/civicrm-core/pull/19931))** + + Moves towards APIv4 entity parity by adding the following entities: "Payment + Token", "Batch" and "Entity Financial trxn". + +- **APIv4 - Add CiviCase, CaseType, CaseContact entities + ([19907](https://github.com/civicrm/civicrm-core/pull/19907), followed up by + [dev/core#2573](https://lab.civicrm.org/dev/core/-/issues/2573): + [20174](https://github.com/civicrm/civicrm-core/pull/20174))** + + Adds support for CiviCase entities to APIv4. + +- **Add FinancialTrxn APIv4 + ([19918](https://github.com/civicrm/civicrm-core/pull/19918))** + + Adds support for FinancialTrxn to APIv4. + +- **Afform - Add submit actions (Work Towards + [dev/core#2522](https://lab.civicrm.org/dev/core/-/issues/2522): + [20018](https://github.com/civicrm/civicrm-core/pull/20018) and + [20147](https://github.com/civicrm/civicrm-core/pull/20147))** + + Adds in a submit handler and redirect after submit for afform. + +- **Add 'readonly' attribute to fields in schema + ([dev/core#2397](https://lab.civicrm.org/dev/core/-/issues/2397): + [19751](https://github.com/civicrm/civicrm-core/pull/19751) and + [19778](https://github.com/civicrm/civicrm-core/pull/19778))** + + Adds metadata to schema to tell SearchKit and Afform which fields are + appropriate to show to the user. + +- **SearchKit - Add "in-place edit" feature + ([19765](https://github.com/civicrm/civicrm-core/pull/19765))** + + Adds a new feature "in-place edit" to search displays. + +- **SearchKit - Exposed join filters + ([dev/core#2494](https://lab.civicrm.org/dev/core/-/issues/2494): + [19984](https://github.com/civicrm/civicrm-core/pull/19984))** + + Improves SearchKit generated SQL joins. + +- **SearchKit - Support implied operators in exposed search forms + ([19959](https://github.com/civicrm/civicrm-core/pull/19959))** + + Improves SearchKit by adding support for "Multi-Select" and "Search by range" + exposed filters. + +- **Expose mapping search task to Search Kit + ([19561](https://github.com/civicrm/civicrm-core/pull/19561))** + + Exposes Contact Mapping task to SearchKit. + +- **Add created_id & modified_id to civicrm_saved_search + ([dev/core#2422](https://lab.civicrm.org/dev/core/-/issues/2422): + [19892](https://github.com/civicrm/civicrm-core/pull/19892))** + + Adds created & modified info to SavedSearch listing in SearchKit. + +- **SearchKit - Include custom group title with custom field label + ([19856](https://github.com/civicrm/civicrm-core/pull/19856))** + + Adds Custom Group title when display custom fields. This makes it easier to + tell custom fields apart in SearchKit when they have similar names to core or + other custom fields. + +- **Afform GUI - Improve drag-n-drop and add link to edit search + ([19935](https://github.com/civicrm/civicrm-core/pull/19935))** + + This adds a few UI improvements to Afform, making drag-n-drop smoother and + adding a configuration option to edit saved searches. + +- **Afform - Add support for email tokens `{afform.myFormUrl}` + ([19660](https://github.com/civicrm/civicrm-core/pull/19660))** + + Adds support for Afform email tokens ex: "My public form (Full Hyperlink)" and + "My public form (URL)". + +- **Embed afforms & search displays on contact summary screen as blocks and tabs + ([19887](https://github.com/civicrm/civicrm-core/pull/19887))** + + Enables the creation of blocks and tabs on the contact summary screen, + using Afform & SearchKit. + +- **Phpunit 8 support - add void to setup + ([19974](https://github.com/civicrm/civicrm-core/pull/19974), + [19921](https://github.com/civicrm/civicrm-core/pull/19921), + [19898](https://github.com/civicrm/civicrm-core/pull/19898), + [19901](https://github.com/civicrm/civicrm-core/pull/19901), + [19905](https://github.com/civicrm/civicrm-core/pull/19905), + [19899](https://github.com/civicrm/civicrm-core/pull/19899), + [19925](https://github.com/civicrm/civicrm-core/pull/19925), + [19909](https://github.com/civicrm/civicrm-core/pull/19909) and + [19900](https://github.com/civicrm/civicrm-core/pull/19900))** + + Work towards supporting PHPunit8. + +- **Create reCAPTCHA core extension + ([19967](https://github.com/civicrm/civicrm-core/pull/19967))** + + Moves reCAPTCHA from core to a core extension. + +- **Include the timezone for date values in the Activity iCal + ([19770](https://github.com/civicrm/civicrm-core/pull/19770))** + + Ensures the timezone is specified for the start date value in the Activity + iCal. + +### CiviContribute + +- **Add entity financial account bridge entity + ([19927](https://github.com/civicrm/civicrm-core/pull/19927))** + + Adds a new entity 'EntityFinancialAccount'. + +- **Enable translation for Contribution Ordinality options on Contribution + Detail Report ([19771](https://github.com/civicrm/civicrm-core/pull/19771))** + + Improves translation on the Contribution Detail Report. + +- **Enable translation for Contribution Ordinality options on Member + Contribution Detail Report + ([19772](https://github.com/civicrm/civicrm-core/pull/19772))** + + Improves translation on the Member Contribution Detail Report. + +### CiviEvent + +- **Include the timezone for date values in the Event iCal + ([19762](https://github.com/civicrm/civicrm-core/pull/19762))** + + Ensures the timezone is specified for the start date value in the Event + iCal. + +### CiviMail + +- **MessageTemplates - Convert token processing to use `TokenProcessor` + ([19550](https://github.com/civicrm/civicrm-core/pull/19550))** + + Improves token processing (resulting in some different token processing). + +- **Align most of the tokens in the `TokenProcessor` handling with the legacy + handling ([19806](https://github.com/civicrm/civicrm-core/pull/19806) and + [19863](https://github.com/civicrm/civicrm-core/pull/19863))** + + Aligns new token processing with legacy token processing handling and moves + towards deprecating the Mailing_BAO classes in favor of flexmailer. + +- **Upgrader - Display note about token formatting + ([19920](https://github.com/civicrm/civicrm-core/pull/19920))** + + Improves communications about tokens that may generate different output after + token processing changes made in this release. + +### WordPress Integration + +- **Cannot create a WordPress account from the Contact record + ([dev/wordpress#82](https://lab.civicrm.org/dev/wordpress/-/issues/82): + [18982](https://github.com/civicrm/civicrm-core/pull/18982))** + + Adds support for creating WordPress accounts from the contact record. + +- **Afform - Support embedding forms via WP shortcodes. + ([19687](https://github.com/civicrm/civicrm-core/pull/19687))** + + Adds the ability to embed Afform forms using WordPress shortcodes. + +- **Allow shortcodes to be rendered without invoking Civi page + ([244](https://github.com/civicrm/civicrm-wordpress/pull/244))** + + Allows CiviCRM core and extensions to supply content for shortcodes without + rendering a page; they can simply implement civicrm_shortcode_get_markup and + return the content. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **Unable to send individual email with attachment and 3+ recipients + ([dev/core#2588](https://lab.civicrm.org/dev/core/-/issues/2588): [20222](https://github.com/civicrm/civicrm-core/pull/20222), [20227](https://github.com/civicrm/civicrm-core/pull/20227))** + +- **Search Kit terminology and help + ([dev/report#58](https://lab.civicrm.org/dev/report/-/issues/58): + [20033](https://github.com/civicrm/civicrm-core/pull/20033))** + + Renames 'Filters' to 'Having' in the SearchKit UI which is clearer for users + familiar with SQL terms. + +- **Address location type search errors when using a search profile + ([dev/report#59](https://lab.civicrm.org/dev/report/-/issues/59): + [19764](https://github.com/civicrm/civicrm-core/pull/19764))** + + Fixes a "DB Error: no such field" when using Advanced Search with a profile + used as a search view. + +- **civicrm_saved_search FK in civicrm_group should be ON DELETE CACSCADE + ([dev/core#1845](https://lab.civicrm.org/dev/core/-/issues/1845): + [19312](https://github.com/civicrm/civicrm-core/pull/19312))** + + Change FK on civicrm_group to delete the associated group if a saved search is + deleted. + +- **Schema - Add readonly to all fields in RelationshipCache entity + ([19908](https://github.com/civicrm/civicrm-core/pull/19908))** + + Ensures SearchKit understands that Relationship Cache fields are not editable. + +- **Skip UFField.field_name on singleValueAlter as flakey + ([19895](https://github.com/civicrm/civicrm-core/pull/19895))** + + Fixes a recurring test fail. + +- **Return from getACLRoles when contactID is not null + ([19871](https://github.com/civicrm/civicrm-core/pull/19871))** + + Code Cleanup. + +- **Add .clear class to break inline flow on social share footer + ([19829](https://github.com/civicrm/civicrm-core/pull/19829))** + + Fixes the display of the social share footer for some sites with front end + theme conflicts. + +- **Enable & do single field metadata conversion for defaultContactCountry + ([19697](https://github.com/civicrm/civicrm-core/pull/19697))** + + Ensures the template for defaultContactCountry uses metadata for the field. + +- **Activity contact is null challenge + ([dev/core#2438](https://lab.civicrm.org/dev/core/-/issues/2438): + [19825](https://github.com/civicrm/civicrm-core/pull/19825))** + + Fixes the ability to do "Without" conditions in SearchKit when a bridge table + is used (e.g. EntityTag or RelationshipCache). + +- **Northern Ireland / Wales counties are out of date + ([dev/core#2027](https://lab.civicrm.org/dev/core/-/issues/2027): + [19802](https://github.com/civicrm/civicrm-core/pull/19802))** + + Fix state/province abbreviation for Carmarthenshire. + +- **Add created_date column to the civicrm_note table + ([dev/core#2243](https://lab.civicrm.org/dev/core/-/issues/2243): + [19738](https://github.com/civicrm/civicrm-core/pull/19738))** + + Adds a created date to notes. + +- **SearchKit request - aggregate without group by + ([dev/core#2415](https://lab.civicrm.org/dev/core/-/issues/2415): + [19755](https://github.com/civicrm/civicrm-core/pull/19755))** + + Adds API support for aggregate without group by. + +- **Can't export link custom fields + ([dev/core#2466](https://lab.civicrm.org/dev/core/-/issues/2466): + [19839](https://github.com/civicrm/civicrm-core/pull/19839))** + + Ensures users can export custom fields of the type link with a length above + around 110 chars. + +- **Deprecated function Redis::delete() + ([dev/core#2468](https://lab.civicrm.org/dev/core/-/issues/2468): + [19830](https://github.com/civicrm/civicrm-core/pull/19830))** + + Removes deprecated function. + +- **(APIv3, APIv4) OptionValue.create and OptionValue.update: Setting the default + value (is_default=1) ignores domain ID + ([dev/core#2488](https://lab.civicrm.org/dev/core/-/issues/2488): + [19970](https://github.com/civicrm/civicrm-core/pull/19970))** + + Ensures when setting the default optionValue thru the API (versions 3 and 4) + the query is limited to the specified domain. + +- **Regression dedupe threshold + ([dev/core#2498](https://lab.civicrm.org/dev/core/-/issues/2498): + [20071](https://github.com/civicrm/civicrm-core/pull/20071))** + + Ensures dedupe rule threshold validation works correctly. + +- **SearchKit - Flush Angular cache when saving + ([20031](https://github.com/civicrm/civicrm-core/pull/20031))** + + Fixes caching issue for search displays embedded in Afforms (as pages, + dashlets, tabs, blocks, etc). + +- **APIv4 - Standardize generic entity name resolution + ([19889](https://github.com/civicrm/civicrm-core/pull/19889))** + + APIv4 code cleanup to enable the addition of a Case API. + +- **Upgrade error + ([dev/core#2528](https://lab.civicrm.org/dev/core/-/issues/2528): + [20066](https://github.com/civicrm/civicrm-core/pull/20066))** + + Fixes an `(errno: 121 "Duplicate key on write or update")` when upgrading from + 5.35 - 5.37. + +- **Exporting in localized civicrm crashes due to long translations in columns + T_Boolean ([dev/core#2164](https://lab.civicrm.org/dev/core/-/issues/2164): + [19963](https://github.com/civicrm/civicrm-core/pull/19963))** + +- **Scheduled Reminder fails to send if From Name includes comma + ([dev/core#2226](https://lab.civicrm.org/dev/core/-/issues/2226): + [19603](https://github.com/civicrm/civicrm-core/pull/19603))** + +- **The civicrm_alterReportVar hook is not working for contribute detail report + ([dev/core#2285](https://lab.civicrm.org/dev/core/-/issues/2285): + [19317](https://github.com/civicrm/civicrm-core/pull/19317))** + +- **Some API calls no longer give an error when e.g. a database error happens + ([dev/core#2364](https://lab.civicrm.org/dev/core/-/issues/2364): + [131](https://github.com/civicrm/civicrm-backdrop/pull/131))** + +- **PHP 7.4 - get_magic_quotes_gpc() deprecated in IDS_Monitor + ([dev/core#2366](https://lab.civicrm.org/dev/core/-/issues/2366): + [315](https://github.com/civicrm/civicrm-packages/pull/315) and + [19851](https://github.com/civicrm/civicrm-core/pull/19851))** + +- **Contact custom data date field not working in scheduled reminder + ([dev/core#2383](https://lab.civicrm.org/dev/core/-/issues/2383): + [19628](https://github.com/civicrm/civicrm-core/pull/19628))** + +- **Add hook support for Activity Contact ([dev/core#2390](dev/core#2390): + [19828](https://github.com/civicrm/civicrm-core/pull/19828))** + +- **Wrong event fee shown in CiviCRM + ([dev/core#2447](https://lab.civicrm.org/dev/core/-/issues/2447): + [19810](https://github.com/civicrm/civicrm-core/pull/19810))** + +- **Changing a custom field from multiple choice to Text breaks the API + ([dev/core#2459](https://lab.civicrm.org/dev/core/-/issues/2459): + [19794](https://github.com/civicrm/civicrm-core/pull/19794))** + +- **Boolean custom values can't be of type boolean + ([dev/core#2461](https://lab.civicrm.org/dev/core/-/issues/2461): + [19805](https://github.com/civicrm/civicrm-core/pull/19805))** + +- **Feature to file emails on multiple case ids provided in the url not working + ([dev/core#2463](https://lab.civicrm.org/dev/core/-/issues/2463): + [19873](https://github.com/civicrm/civicrm-core/pull/19873) and + [19826](https://github.com/civicrm/civicrm-core/pull/19826))** + +- **SearchBuilder: contact search for tags with child-tags broken when using '=' + operator ([dev/core#2502](https://lab.civicrm.org/dev/core/-/issues/2502): + [19961](https://github.com/civicrm/civicrm-core/pull/19961))** + +- **CiviReport does not localize custom fields of type Money + ([dev/core#2503](https://lab.civicrm.org/dev/core/-/issues/2503): + [19962](https://github.com/civicrm/civicrm-core/pull/19962))** + +- **SearchKit - remove extra irrelevant fields from bridge joins + ([19868](https://github.com/civicrm/civicrm-core/pull/19868))** + +- **SearchKit - Fix broken export action + ([20003](https://github.com/civicrm/civicrm-core/pull/20003))** + +- **SearchKit - remove unused smartGroup code + ([19752](https://github.com/civicrm/civicrm-core/pull/19752))** + +- **SearchKit - Refactor loading actions list & support custom fields for groups + ([19783](https://github.com/civicrm/civicrm-core/pull/19783))** + +- **APIv4 Explorer - Prevent long results from breaking layout + ([19853](https://github.com/civicrm/civicrm-core/pull/19853))** + +- **APIv4 - Code cleanup & improve links to @see annotations in Explorer + ([19798](https://github.com/civicrm/civicrm-core/pull/19798))** + +- **APIv4 Explorer - Fix layout in code tab + ([19734](https://github.com/civicrm/civicrm-core/pull/19734))** + +- **APIv4 - Prevent API adding default join conditions when it shouldn't + ([19993](https://github.com/civicrm/civicrm-core/pull/19993))** + +- **Fix APIv4 test sloppiness + ([19754](https://github.com/civicrm/civicrm-core/pull/19754))** + +- **APIv4 - Fix GetActions function to work with entityNames that don't match + className ([19896](https://github.com/civicrm/civicrm-core/pull/19896))** + +- **APIv4 - Add function to get API class name + ([19867](https://github.com/civicrm/civicrm-core/pull/19867))** + +- **Afform - Refresh assetBuilder when saving a form + ([19998](https://github.com/civicrm/civicrm-core/pull/19998))** + +- **Afform - Fix endless spinner on "New Search Display" dropdown + ([19997](https://github.com/civicrm/civicrm-core/pull/19997))** + +- **Fix issues with "Create User Record" process + ([20057](https://github.com/civicrm/civicrm-core/pull/20057))** + +- **Fix entity-ref search by id & update search prompt + ([20050](https://github.com/civicrm/civicrm-core/pull/20050))** + +- **Soft credit fails when membership is created using backend form + ([20025](https://github.com/civicrm/civicrm-core/pull/20025))** + +- **Rename 'Misc' menu item machine name to a safe string + ([19996](https://github.com/civicrm/civicrm-core/pull/19996))** + +- **replaceOrgTokens: Remove broken code + ([19543](https://github.com/civicrm/civicrm-core/pull/19543))** + +- **E-notice fix on serialized setting + ([19969](https://github.com/civicrm/civicrm-core/pull/19969))** + +- **Pledge - Fix re-calculation of payment dates + ([19990](https://github.com/civicrm/civicrm-core/pull/19990))** + +- **Fix scrollbars on fullscreen dashboard dashlet + ([19981](https://github.com/civicrm/civicrm-core/pull/19981))** + +- **Only call getGroupACLRoles if contactID is present + ([19894](https://github.com/civicrm/civicrm-core/pull/19894))** + +- **Stop passing html to crmMoney + ([19941](https://github.com/civicrm/civicrm-core/pull/19941))** + +- **Fix to avoid passing non-money to money::format + ([19940](https://github.com/civicrm/civicrm-core/pull/19940))** + +- **Fix ts() namespace in searchKit & afform extensions + ([19729](https://github.com/civicrm/civicrm-core/pull/19729))** + +- **Fix for dedupe error under some mysql configs + ([19818](https://github.com/civicrm/civicrm-core/pull/19818))** + +- **Fix loop ([19858](https://github.com/civicrm/civicrm-core/pull/19858))** + +- **Export UI - Only present "save mapping" button to permissioned users + ([19733](https://github.com/civicrm/civicrm-core/pull/19733))** + +- **Update SocialNetwork.tpl Twitter Intent URL + ([19724](https://github.com/civicrm/civicrm-core/pull/19724))** + +- **Prevent pages and metabox from loading until CiviCRM is installed + ([247](https://github.com/civicrm/civicrm-wordpress/pull/247))** + +- **Fix access permissions for sub-pages and "Quick Add" dashlet + ([245](https://github.com/civicrm/civicrm-wordpress/pull/245))** + +- **Non translatable fields in profile schema + ([dev/core#527](https://lab.civicrm.org/dev/core/-/issues/527): + [19937](https://github.com/civicrm/civicrm-core/pull/19937))** + +- **Merge Contacts fails when custom Contact Reference field allows Multi-Select + ([dev/core#2561](https://lab.civicrm.org/dev/core/-/issues/2561): + [20142](https://github.com/civicrm/civicrm-core/pull/20142))** + +- **Error: Undefined class constant 'MODE_CBC' in + `Civi\Crypto\PhpseclibCipherSuite->__construct()` + ([dev/core#2564](https://lab.civicrm.org/dev/core/-/issues/2564): + [20148](https://github.com/civicrm/civicrm-core/pull/20148))** + +- **SearchKit - Pass-thru permission checks from SearchDisplay::run to API.get + ([20186](https://github.com/civicrm/civicrm-core/pull/20186))** + +### CiviCampaign + +- **On New Campaign form, placeholder text for status is weird + ([dev/core#2411](https://lab.civicrm.org/dev/core/-/issues/2411): + [19768](https://github.com/civicrm/civicrm-core/pull/19768))** + +- **Fix incorrect placeholder text on 'Create Campaign' form + ([19767](https://github.com/civicrm/civicrm-core/pull/19767))** + +### CiviCase + +- **Civicase: Wrong Details in Change Custom Data Activity when filling an empty + field ([dev/core#2019](https://lab.civicrm.org/dev/core/-/issues/2019): + [19735](https://github.com/civicrm/civicrm-core/pull/19735) and + [19741](https://github.com/civicrm/civicrm-core/pull/19741))** + + Changing a case custom field from blank to something doesn't show properly + what changed. + +- **Activity Type and Case Type not being combined correctly in Advanced Search + ([dev/report#53](https://lab.civicrm.org/dev/report/-/issues/53): + [20009](https://github.com/civicrm/civicrm-core/pull/20009))** + + Allows SearchKit to search by and display cases with their activities. + +- **Investigate replacing civicase views with something that is not views + ([dev/core#2385](https://lab.civicrm.org/dev/core/-/issues/2385) and + [dev/core#2262](https://lab.civicrm.org/dev/core/-/issues/2262): + [19642](https://github.com/civicrm/civicrm-core/pull/19642))** + +### CiviContribute + +- **Changing Payment Method on a Transaction causes fatal error + ([dev/core#2577](https://lab.civicrm.org/dev/core/-/issues/2577): + [20195](https://github.com/civicrm/civicrm-core/pull/20195))** + +- **Access Control by Financial Type permissioning does not cover + contribution_recur (Work Towards + [dev/core#2454](https://lab.civicrm.org/dev/core/-/issues/2454): + [19788](https://github.com/civicrm/civicrm-core/pull/19788))** + + Ensures Contribution Recur is properly permissioned. + +- **Warnings when saving a contribution with recognition date filled in + ([dev/financial#172](https://lab.civicrm.org/dev/financial/-/issues/172): + [19948](https://github.com/civicrm/civicrm-core/pull/19948))** + + Fixes warnings when saving a contribution with a recognition date. + +- **Contribution page creates a wrong amount and probably payment processor use + this wrong amount + ([dev/core#2449](https://lab.civicrm.org/dev/core/-/issues/2449): + [19807](https://github.com/civicrm/civicrm-core/pull/19807))** + + Ensures amounts are saved correcly when localization settings are changed. + +- **Activity contact is not updated when contribution contact is changed + ([dev/core#2450](https://lab.civicrm.org/dev/core/-/issues/2450): + [19820](https://github.com/civicrm/civicrm-core/pull/19820))** + + Ensures source/target activity contacts are updated whenever a contribution is + updated. + +- **Fix recurring contribution defaults + ([dev/core#2487](https://lab.civicrm.org/dev/core/-/issues/2487): + [19934](https://github.com/civicrm/civicrm-core/pull/19934))** + + Updates defaults for the civicrm_contribution_recur table to bring the API + behaviour closer to the user interface behavior. + +- **Simplify decision as to whether to use a PDF on emails + ([dev/financial#162](https://lab.civicrm.org/dev/financial/-/issues/162): + [19486](https://github.com/civicrm/civicrm-core/pull/19486))** + +- **Minor buttonrama issue with Cancel button after exporting financial batch + ([dev/financial#170](https://lab.civicrm.org/dev/financial/-/issues/170): + [19787](https://github.com/civicrm/civicrm-core/pull/19787))** + +- **False positive message about missing INTL PHP extension on membership type + form ([dev/financial#171](https://lab.civicrm.org/dev/financial/-/issues/171): + [19929](https://github.com/civicrm/civicrm-core/pull/19929), + [19958](https://github.com/civicrm/civicrm-core/pull/19958), + [19880](https://github.com/civicrm/civicrm-core/pull/19880), + [19876](https://github.com/civicrm/civicrm-core/pull/19876) and + [19938](https://github.com/civicrm/civicrm-core/pull/19938))** + +- **PHP 7.4 - E_NOTICE every time you save a contribution + ([dev/core#2425](https://lab.civicrm.org/dev/core/-/issues/2425): + [19978](https://github.com/civicrm/civicrm-core/pull/19978))** + +- **Payment balance should be cast to float, not int, when checking if a + contribution form should load + ([dev/core#2453](https://lab.civicrm.org/dev/core/-/issues/2453): + [19777](https://github.com/civicrm/civicrm-core/pull/19777))** + +- **CiviCRM 5.35.1, truncation of money values where $1,000 donation is recorded + as $1 which appears to be truncating at the thousand separator when using the + Australian (AU) and US Locale + ([dev/core#2493](https://lab.civicrm.org/dev/core/-/issues/2493): + [20040](https://github.com/civicrm/civicrm-core/pull/20040))** + +- **Fix re-calculation of payment dates on pledge + ([19976](https://github.com/civicrm/civicrm-core/pull/19976))** + +- **Donot over-ride total amount incase contribution has more than one line item + ([19951](https://github.com/civicrm/civicrm-core/pull/19951))** + +- **Only include completed contributions in the aggregate custom search + ([19936](https://github.com/civicrm/civicrm-core/pull/19936))** + +- **Set the `Other Amount` input in a price set to not autocomplete + ([19923](https://github.com/civicrm/civicrm-core/pull/19923))** + +- **Replace deprecated money_format() fn to support PHP 7.4 + ([dev/translation#65](https://lab.civicrm.org/dev/translation/-/issues/65) and + [dev/core#1494](https://lab.civicrm.org/dev/core/-/issues/1494): + [19753](https://github.com/civicrm/civicrm-core/pull/19753))** + +- **Remove text about email receipts for each recurring contribution. + ([dev/core#2384](https://lab.civicrm.org/dev/core/-/issues/2384): + [19624](https://github.com/civicrm/civicrm-core/pull/19624))** + +### CiviEvent + +- **Price option reaches max amount causes critical error. + ([dev/event#53](https://lab.civicrm.org/dev/event/-/issues/53): + [20073](https://github.com/civicrm/civicrm-core/pull/20073))** + + Ensures that on registration forms sold out radio price options are frozen. + +- **Cannot "Transfer or Cancel" event participant as admin user + ([dev/event#54](https://lab.civicrm.org/dev/event/-/issues/54): + [20223](https://github.com/civicrm/civicrm-core/pull/20223))** + +### CiviMail + +- **Remove addressee, email_greeting_id, postal_greeting_id from exposed tokens + ([19782](https://github.com/civicrm/civicrm-core/pull/19782))** + + Removes support for tokens that are likely to break and are redundant. + +- **[regression] CiviMail crashing on send instead of throwing exception when + using Job.execute + ([dev/mail#72](https://lab.civicrm.org/dev/mail/-/issues/72): + [18466](https://github.com/civicrm/civicrm-core/pull/18466))** + +### CiviMember + +- **Backend Membership Renewal returns a fatal error when min fee is empty + ([dev/core#2583](https://lab.civicrm.org/dev/core/-/issues/2583): + [20212](https://github.com/civicrm/civicrm-core/pull/20212))** + +- **Selecting of price sets not working anymore + ([dev/core#2434](https://lab.civicrm.org/dev/core/-/issues/2434): + [20158](https://github.com/civicrm/civicrm-core/pull/20158))** + + The membership tab on the contribution page configuration form failed to + display the dropdown for choosing a price set. This problem was an unreleased + regression prior to 5.36.0 but this one form got missed when fixed. + +- **Update to lifetime membership does not clear the end date + ([19716](https://github.com/civicrm/civicrm-core/pull/19716))** + + Fix membership to clear end date if type is updated to lifetime. + +- **When editing a membership with no existing payments, checking the box to + record payments results in a total amount of NaN.N + ([dev/core#2560](https://lab.civicrm.org/dev/core/-/issues/2560): + [20127](https://github.com/civicrm/civicrm-core/pull/20127))** + +### Drupal Integration + +- **Rebuild the Drupal route cache. + ([19906](https://github.com/civicrm/civicrm-core/pull/19906))** + + Ensures enabling a CiviCRM extension that adds a route on Drupal 8 or 9 does + not result in a 404. + +- **Drupal 8 hook_uninstall not implemented + ([dev/drupal#141](https://lab.civicrm.org/dev/drupal/-/issues/141): + [61](https://github.com/civicrm/civicrm-drupal-8/pull/61))** + +- **Fix Drupal Base 'isFrontEndPage' Returns Wrong Value After Saving A Settings + Page ([dev/core#2464](https://lab.civicrm.org/dev/core/-/issues/2464): + [19823](https://github.com/civicrm/civicrm-core/pull/19823))** + +- **Fix batch transaction export on D8/9 + ([19761](https://github.com/civicrm/civicrm-core/pull/19761))** + +### WordPress Integration + +- **WordPress: avoid PHP notice if the anonymous user does not have any + capabilities ([19732](https://github.com/civicrm/civicrm-core/pull/19732))** + +## <a name="misc"></a>Miscellany + +- **Remove recaptcha library as now part of core extension + ([317](https://github.com/civicrm/civicrm-packages/pull/317))** + +- **Migrate current recaptcha library into extension and fix a couple of ts + calls ([20011](https://github.com/civicrm/civicrm-core/pull/20011))** + +- **Add recaptcha to distmaker + ([19999](https://github.com/civicrm/civicrm-core/pull/19999))** + +- **Use standard function to add reCAPTCHA to PCPAccount form + ([20019](https://github.com/civicrm/civicrm-core/pull/20019))** + +- **Make testExpiredPriceSet more realistic + ([19474](https://github.com/civicrm/civicrm-core/pull/19474))** + +- **Remove safe+mode setting + ([19833](https://github.com/civicrm/civicrm-core/pull/19833))** + +- **Fold back in getGroupACLs + ([19882](https://github.com/civicrm/civicrm-core/pull/19882))** + +- **Remove getACLRoles + ([19879](https://github.com/civicrm/civicrm-core/pull/19879))** + +- **Move setting of _includesSoftCredits out of getQuery + ([19860](https://github.com/civicrm/civicrm-core/pull/19860))** + +- **Upgrade angularJs from 1.8.0 to 1.8.2 + ([19831](https://github.com/civicrm/civicrm-core/pull/19831))** + +- **Bump phpseclib/phpseclib from 2.0.29 to 2.0.31 + ([19994](https://github.com/civicrm/civicrm-core/pull/19994))** + +- **Bump y18n from 4.0.0 to 4.0.1 + ([19944](https://github.com/civicrm/civicrm-core/pull/19944))** + +- **Code cleanup in bootstrap.php + ([19834](https://github.com/civicrm/civicrm-core/pull/19834))** + +- **Updates to ExportTest + ([19884](https://github.com/civicrm/civicrm-core/pull/19884))** + +- **Update Unit tests to work with phpunit8 + ([130](https://github.com/civicrm/civicrm-backdrop/pull/130))** + +- **Update Unit tests to work with PHPUnit8 + ([643](https://github.com/civicrm/civicrm-drupal/pull/643))** + +- **Add :void return type to tearDown on a bunch of unit tests + ([19897](https://github.com/civicrm/civicrm-core/pull/19897))** + +- **Tighten mysql mode in test environment + ([19817](https://github.com/civicrm/civicrm-core/pull/19817))** + +- **Add further test for token custom fields + ([19790](https://github.com/civicrm/civicrm-core/pull/19790))** + +- **Remove deprecated code + ([19919](https://github.com/civicrm/civicrm-core/pull/19919))** + +- **Remove unused private function + ([19950](https://github.com/civicrm/civicrm-core/pull/19950))** + +- **Remove empty setUp() functions + ([19971](https://github.com/civicrm/civicrm-core/pull/19971))** + +- **Remove unused variables/assigns from buildMembershipBlock function + ([19775](https://github.com/civicrm/civicrm-core/pull/19775))** + +- **Remove an unnecessary ampersand + ([19821](https://github.com/civicrm/civicrm-core/pull/19821))** + +- **Remove now-empty function + ([19824](https://github.com/civicrm/civicrm-core/pull/19824))** + +- **Remove legacy phpunit param + ([19836](https://github.com/civicrm/civicrm-core/pull/19836))** + +- **[REF] Fix APIv3 MembershipJob test failure on PHP 7.4 by only doing ch… + ([19844](https://github.com/civicrm/civicrm-core/pull/19844))** + +- **[REF] Extract getQueryParams + ([19857](https://github.com/civicrm/civicrm-core/pull/19857))** + +- **[REF] Clarify & simplify is_recur param + ([19812](https://github.com/civicrm/civicrm-core/pull/19812))** + +- **[REF] Minor function extraction + ([19835](https://github.com/civicrm/civicrm-core/pull/19835))** + +- **[REF] Simplify a couple of variables + ([19861](https://github.com/civicrm/civicrm-core/pull/19861))** + +- **[REF] Simplify BAO_ACL table references + ([19869](https://github.com/civicrm/civicrm-core/pull/19869))** + +- **[REF] Stdise campaign_id handling + ([19877](https://github.com/civicrm/civicrm-core/pull/19877))** + +- **[REF] Minor simplification around assigning taxAmount to the template + ([19757](https://github.com/civicrm/civicrm-core/pull/19757))** + +- **[REF] Remove setting of unused variables + ([19800](https://github.com/civicrm/civicrm-core/pull/19800))** + +- **[REF] Fold getACLs back into the calling function + ([19872](https://github.com/civicrm/civicrm-core/pull/19872))** + +- **[REF] Simplify code calculating the number of membership terms + ([19801](https://github.com/civicrm/civicrm-core/pull/19801))** + +- **[REF] Remove redundant toArray() function + ([19885](https://github.com/civicrm/civicrm-core/pull/19885))** + +- **[REF] Store the getSearchQueryResults so it can be re-accessed + ([19881](https://github.com/civicrm/civicrm-core/pull/19881))** + +- **[REF] Minor extraction to help cleanup permission code + ([19803](https://github.com/civicrm/civicrm-core/pull/19803))** + +- **[REF] Minor parameter cleanup + ([19799](https://github.com/civicrm/civicrm-core/pull/19799))** + +- **[REF] Extract code to get generic membership parameters + ([19784](https://github.com/civicrm/civicrm-core/pull/19784))** + +- **[REF] Cleanup on permission code + ([19796](https://github.com/civicrm/civicrm-core/pull/19796))** + +- **[REF] Extract getPaymentInstrumentID + ([19793](https://github.com/civicrm/civicrm-core/pull/19793))** + +- **[Ref] Remove copy and paste overkill + ([19786](https://github.com/civicrm/civicrm-core/pull/19786))** + +- **[REF] getCorePermissions cleanup + ([19789](https://github.com/civicrm/civicrm-core/pull/19789))** + +- **[REF] Very minor simplification + ([19785](https://github.com/civicrm/civicrm-core/pull/19785))** + +- **[REF] Fix ContributionPage::recurringNotify to use APIv4, simplify params + ([19639](https://github.com/civicrm/civicrm-core/pull/19639))** + +- **[REF] Cleanup code to determine financial_type_id + ([19756](https://github.com/civicrm/civicrm-core/pull/19756))** + +- **[REF] [Towards membership API] Cleanup access to payment_processor_id + ([19910](https://github.com/civicrm/civicrm-core/pull/19910))** + +- **[REF] Remove now redundant code to set line item financial type + ([19745](https://github.com/civicrm/civicrm-core/pull/19745))** + +- **[REF] [Towards membership API] Duplicate emailReceipt function rather than + silly sharing ([19912](https://github.com/civicrm/civicrm-core/pull/19912))** + +- **[REF] [Towards membership API] Simplify message functions + ([19915](https://github.com/civicrm/civicrm-core/pull/19915))** + +- **[REF] Extract portion of GroupContact load that builds the temporary table + ([19945](https://github.com/civicrm/civicrm-core/pull/19945))** + +- **[REF] remove unused code in recordFinancialAccounts + ([19769](https://github.com/civicrm/civicrm-core/pull/19769))** + +- **[REF] Clean up code around is_email_receipt + ([19746](https://github.com/civicrm/civicrm-core/pull/19746))** + +- **[REF] Move function from static class to OO class + ([19955](https://github.com/civicrm/civicrm-core/pull/19955))** + +- **[REF] Extract getMembershipTypeValues + ([19924](https://github.com/civicrm/civicrm-core/pull/19924))** + +- **(REF) CRM_Upgrade_Form - Remove unused method getRevisionPart() + ([19742](https://github.com/civicrm/civicrm-core/pull/19742))** + +- **[REF] [SearchKit Actions] Cleanup around contribution PDF common + ([19904](https://github.com/civicrm/civicrm-core/pull/19904))** + +- **[REF] Minor cleanup - remove unused variables + ([19980](https://github.com/civicrm/civicrm-core/pull/19980))** + +- **REF Ensure that getAmount includes 0s in decimal places up to 2 places + ([20074](https://github.com/civicrm/civicrm-core/pull/20074))** + +- **[REF] Minor cleanup - strictness & formatting + ([19949](https://github.com/civicrm/civicrm-core/pull/19949))** + +- **[REF] [Towards membership API] more consistent handling on amount + ([19911](https://github.com/civicrm/civicrm-core/pull/19911))** + +- **[REF] [Towards membership API] Simplify calculation of recurring membership + parameters ([19893](https://github.com/civicrm/civicrm-core/pull/19893))** + +- **[REF] Simplify setting of softcredit form options (minor) + ([19891](https://github.com/civicrm/civicrm-core/pull/19891))** + +- **[NFC] Minor coding standards cleanup + ([19838](https://github.com/civicrm/civicrm-core/pull/19838))** + +- **[NFC] Add in "void" statements on various Core Ext Tests to future support PHP… + ([19832](https://github.com/civicrm/civicrm-core/pull/19832))** + +- **[NFC] Minor test cleanup + ([19852](https://github.com/civicrm/civicrm-core/pull/19852))** + +- **[NFC] Cleanup in test class + ([19866](https://github.com/civicrm/civicrm-core/pull/19866))** + +- **[NFC] Fix logging schema test to work on MySQL8 as it no longer outpu… + ([19850](https://github.com/civicrm/civicrm-core/pull/19850))** + +- **[NFC] Fix test failures on PHP 7.4 caused by either NULL being set fo… + ([19849](https://github.com/civicrm/civicrm-core/pull/19849))** + +- **[NFC] Fix test failures on MySQL 8 caused by change in output of eith… + ([19847](https://github.com/civicrm/civicrm-core/pull/19847))** + +- **[NFC] Fix PHP 7.4 errors on ContributionPage tests + ([19846](https://github.com/civicrm/civicrm-core/pull/19846))** + +- **[NFC] Fix Membership Type Test error on PHP 7.4 + ([19845](https://github.com/civicrm/civicrm-core/pull/19845))** + +- **[NFC] Minor IDE cleanup in test class + ([19816](https://github.com/civicrm/civicrm-core/pull/19816))** + +- **[NFC] IDE cleanup on test class + ([19813](https://github.com/civicrm/civicrm-core/pull/19813))** + +- **NFC cleanup in test class + ([19953](https://github.com/civicrm/civicrm-core/pull/19953))** + +- **[NFC] Update unit tests to be compatible with PHPUnit8 + ([246](https://github.com/civicrm/civicrm-wordpress/pull/246))** + +- **(NFC) Add FUNDING.yml to display a SPONSOR link that directs to c.o + ([19946](https://github.com/civicrm/civicrm-core/pull/19946))** + +- **[NFC] Minor cleanup on test class + ([19864](https://github.com/civicrm/civicrm-core/pull/19864))** + +- **[REF] Fix installation of the search display table on MySQL 5.36 in tests + ([20094](https://github.com/civicrm/civicrm-core/pull/20094))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Alice Frumin, Andrew Hunt; Agileware - Justin Freeman; Alexy +Mikhailichenko; Calibrate - Wouter Hechtermans; Christian Wach; Circle +Interactive - Pradeep Nayak; CiviCoop - Jaap Jansma; CiviCRM - Coleman Watts, +Tim Otten; CompuCorp - Ahed Eid; Coop SymbioTIC - Mathieu Lutfy, Samuel Vanhove; +Dave D; Francesc Bassas i Bullich; Fuzion - Jitendra Purohit; Greenpeace CEE - +mflandorfer; JMA Consulting - Monish Deb, Seamus Lee; Lighthouse Consulting and +Design - Brian Shaughnessy; Megaphone Technology Consulting - Jon Goldberg; +MJCO - Mikey O'Toole; MJW Consulting - Matthew Wire; Nicol Wistreich; Oxfam +Germany - Thomas Schüttler; Progressive Technology Project - Jamie McClelland; +Romain Thouvenin; SYSTOPIA Organisationsberatung - Björn Endres; Third Sector +Design - Michael McAndrew; Timbsoft Technologies - Tunbola Ogunwande; Web +Access - Kurund Jalmi; Wikimedia Foundation - Eileen McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +Artful Robot - Rich Lott; BrightMinded Ltd - Bradley Taylor; CiviCoop - Erik +Hommel; CiviDesk - Nicolas Ganivet; Context Institute - Robert Gilman; Dave T; +Freeform Solutions - Herb van den Dool; Joinery - Allen Shaw; Megaphone +Technology Consulting - Dennis P. Osorio; Richard van Oosterhout; Semper IT - +Karin Gerritsen; Skvare - Sunil Pawar; Tadpole Collective - Kevin Cristiano + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like +to provide feedback on them, please log in to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/settings/Core.setting.php b/civicrm/settings/Core.setting.php index 20b7d50b24..64778e4d87 100644 --- a/civicrm/settings/Core.setting.php +++ b/civicrm/settings/Core.setting.php @@ -358,9 +358,26 @@ return [ 'pseudoconstant' => [ 'callback' => 'CRM_Contact_BAO_GroupContactCache::getModes', ], - 'description' => ts('Should the smart groups be by cron jobs or user actions'), + 'description' => ts('Should the smart groups be flushed by cron jobs or user actions'), 'help_text' => ts('In "Opportunistic Flush" mode, caches are flushed in response to user actions; this mode is broadly compatible but may add latency during form-submissions. In "Cron Flush" mode, you should schedule a cron job to flush caches; this can improve latency on form-submissions but requires more setup.'), ], + 'acl_cache_refresh_mode' => [ + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'acl_cache_refresh_mode', + 'type' => 'String', + 'html_type' => 'radio', + 'default' => 'opportunistic', + 'add' => '5.37.0', + 'title' => ts('ACL Group Refresh Mode'), + 'is_domain' => 1, + 'is_contact' => 0, + 'pseudoconstant' => [ + 'callback' => 'CRM_Contact_BAO_GroupContactCache::getModes', + ], + 'description' => ts('Should the acl cache be by cron jobs or user actions'), + 'help_text' => ts('In "Opportunistic Flush" mode, caches are flushed in response to user actions; this mode is broadly compatible but may add latency during form-submissions. In "Cron Flush" mode, you should schedule a cron job to flush caches if your site uses ACLs; this can improve latency on form-submissions but requires more setup.'), + ], 'installed' => [ 'bootstrap_comment' => 'This is a boot setting which may be loaded during bootstrap. Defaults are loaded via SettingsBag::getSystemDefaults().', 'group_name' => 'CiviCRM Preferences', @@ -531,78 +548,6 @@ return [ 'description' => NULL, 'help_text' => NULL, ], - 'recaptchaOptions' => [ - 'group_name' => 'CiviCRM Preferences', - 'group' => 'core', - 'name' => 'recaptchaOptions', - 'type' => 'String', - 'quick_form_type' => 'Element', - 'html_attributes' => [ - 'size' => 64, - 'maxlength' => 64, - ], - 'html_type' => 'text', - 'default' => NULL, - 'add' => '4.3', - 'title' => ts('reCAPTCHA Options'), - 'is_domain' => 1, - 'is_contact' => 0, - 'description' => ts('You can specify the reCAPTCHA theme options as comma separated data.(eg: theme:\'blackglass\', lang : \'fr\' ). Check the available options at <a href="https://developers.google.com/recaptcha/docs/display#config">Customizing the Look and Feel of reCAPTCHA</a>.'), - 'help_text' => NULL, - ], - 'recaptchaPublicKey' => [ - 'group_name' => 'CiviCRM Preferences', - 'group' => 'core', - 'name' => 'recaptchaPublicKey', - 'type' => 'String', - 'quick_form_type' => 'Element', - 'html_attributes' => [ - 'size' => 64, - 'maxlength' => 64, - ], - 'html_type' => 'text', - 'default' => NULL, - 'add' => '4.3', - 'title' => ts('reCAPTCHA Site Key'), - 'is_domain' => 1, - 'is_contact' => 0, - 'description' => NULL, - 'help_text' => NULL, - ], - 'forceRecaptcha' => [ - 'add' => '4.7', - 'help_text' => NULL, - 'is_domain' => 1, - 'is_contact' => 0, - 'group_name' => 'CiviCRM Preferences', - 'group' => 'core', - 'name' => 'forceRecaptcha', - 'type' => 'Boolean', - 'quick_form_type' => 'YesNo', - 'html_type' => '', - 'default' => '0', - 'title' => ts('Force reCAPTCHA on Contribution pages'), - 'description' => ts('If enabled, reCAPTCHA will show on all contribution pages.'), - ], - 'recaptchaPrivateKey' => [ - 'group_name' => 'CiviCRM Preferences', - 'group' => 'core', - 'name' => 'recaptchaPrivateKey', - 'type' => 'String', - 'quick_form_type' => 'Element', - 'html_attributes' => [ - 'size' => 64, - 'maxlength' => 64, - ], - 'html_type' => 'text', - 'default' => NULL, - 'add' => '4.3', - 'title' => ts('reCAPTCHA Secret Key'), - 'is_domain' => 1, - 'is_contact' => 0, - 'description' => NULL, - 'help_text' => NULL, - ], 'checksum_timeout' => [ 'group_name' => 'CiviCRM Preferences', 'group' => 'core', diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index bf85f3abe4..714c233e05 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -890,7 +890,7 @@ CREATE TABLE `civicrm_batch` ( `created_id` int unsigned COMMENT 'FK to Contact ID', `created_date` datetime COMMENT 'When was this item created', `modified_id` int unsigned COMMENT 'FK to Contact ID', - `modified_date` datetime COMMENT 'When was this item created', + `modified_date` datetime COMMENT 'When was this item modified', `saved_search_id` int unsigned COMMENT 'FK to Saved Search ID', `status_id` int unsigned NOT NULL COMMENT 'fk to Batch Status options in civicrm_option_values', `type_id` int unsigned COMMENT 'fk to Batch Type options in civicrm_option_values', @@ -1519,7 +1519,7 @@ CREATE TABLE `civicrm_case_type` ( `name` varchar(64) NOT NULL COMMENT 'Machine name for Case Type', `title` varchar(64) NOT NULL COMMENT 'Natural language name for Case Type', `description` varchar(255) COMMENT 'Description of the Case Type', - `is_active` tinyint COMMENT 'Is this entry active?', + `is_active` tinyint DEFAULT 1 COMMENT 'Is this case type enabled?', `is_reserved` tinyint COMMENT 'Is this case type a predefined system type?', `weight` int NOT NULL DEFAULT 1 COMMENT 'Ordering of the case types', `definition` blob COMMENT 'xml definition of case type' @@ -2240,6 +2240,8 @@ CREATE TABLE `civicrm_note` ( `entity_id` int unsigned NOT NULL COMMENT 'Foreign key to the referenced item.', `note` text COMMENT 'Note and/or Comment.', `contact_id` int unsigned COMMENT 'FK to Contact ID creator', + `note_date` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT 'Date attached to the note', + `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the note was created.', `modified_date` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When was this note last modified/edited', `subject` varchar(255) COMMENT 'subject of note description', `privacy` varchar(255) COMMENT 'Foreign Key to Note Privacy Level (which is an option value pair and hence an implicit FK)' @@ -2662,7 +2664,7 @@ CREATE TABLE `civicrm_group` ( name ) -, CONSTRAINT FK_civicrm_group_saved_search_id FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_group_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL +, CONSTRAINT FK_civicrm_group_saved_search_id FOREIGN KEY (`saved_search_id`) REFERENCES `civicrm_saved_search`(`id`) ON DELETE CASCADE, CONSTRAINT FK_civicrm_group_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL, CONSTRAINT FK_civicrm_group_modified_id FOREIGN KEY (`modified_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ; -- /******************************************************* @@ -4121,11 +4123,11 @@ CREATE TABLE `civicrm_contribution_recur` ( `amount` decimal(20,2) NOT NULL COMMENT 'Amount to be collected (including any sales tax) by payment processor each recurrence.', `currency` varchar(3) DEFAULT NULL COMMENT '3 character string, value from config setting or input via user.', `frequency_unit` varchar(8) DEFAULT 'month' COMMENT 'Time units for recurrence of payment.', - `frequency_interval` int unsigned NOT NULL COMMENT 'Number of time units for recurrence of payment.', + `frequency_interval` int unsigned NOT NULL DEFAULT 1 COMMENT 'Number of time units for recurrence of payment.', `installments` int unsigned COMMENT 'Total number of payments to be made. Set this to 0 if this is an open-ended commitment i.e. no set end date.', - `start_date` datetime NOT NULL COMMENT 'The date the first scheduled recurring contribution occurs.', - `create_date` datetime NOT NULL COMMENT 'When this recurring contribution record was created.', - `modified_date` datetime COMMENT 'Last updated date for this record. mostly the last time a payment was received', + `start_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The date the first scheduled recurring contribution occurs.', + `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When this recurring contribution record was created.', + `modified_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'Last updated date for this record. mostly the last time a payment was received', `cancel_date` datetime COMMENT 'Date this recurring contribution was cancelled by contributor- if we can get access to it', `cancel_reason` text COMMENT 'Free text field for a reason for cancelling', `end_date` datetime COMMENT 'Date this recurring contribution finished successfully', @@ -4133,7 +4135,7 @@ CREATE TABLE `civicrm_contribution_recur` ( `payment_token_id` int unsigned COMMENT 'Optionally used to store a link to a payment token used for this recurring contribution.', `trxn_id` varchar(255) COMMENT 'unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method', `invoice_id` varchar(255) COMMENT 'unique invoice id, system generated or passed in', - `contribution_status_id` int unsigned DEFAULT 1 , + `contribution_status_id` int unsigned DEFAULT 2 , `is_test` tinyint DEFAULT 0 , `cycle_day` int unsigned NOT NULL DEFAULT 1 COMMENT 'Day in the period when the payment should be charged e.g. 1st of month, 15th etc.', `next_sched_contribution_date` datetime COMMENT 'Next scheduled date', diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index 39dfb4422c..77b7c8cbed 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -4405,7 +4405,7 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1226, "BGE", "Bridgend"), (NULL, 1226, "CAY", "Caerphilly"), (NULL, 1226, "CRF", "Cardiff"), -(NULL, 1226, "CRF", "Carmarthenshire"), +(NULL, 1226, "CMN", "Carmarthenshire"), (NULL, 1226, "CGN", "Ceredigion"), (NULL, 1226, "CWY", "Conwy"), (NULL, 1226, "DEN", "Denbighshire"), @@ -5460,9 +5460,9 @@ VALUES (@option_group_id_paperSize, 'ISO SRA4', '{"metric":"pt","width":637.8,"height":907.09}', 'sra4', NULL, NULL, 0, 62, NULL, 0, 0, 1, NULL, NULL, NULL), -- activity_contacts - (@option_group_id_aco, 'Activity Assignees', 1, 'Activity Assignees', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aco, 'Activity Assignees', 1, 'Activity Assignees', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_aco, 'Activity Source', 2, 'Activity Source', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_aco, 'Activity Targets', 3, 'Activity Targets', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aco, 'Activity Targets', 3, 'Activity Targets', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), -- financial_account_type -- grouping field is specific to Quickbooks for mapping to .iif format @@ -23069,6 +23069,8 @@ INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_act INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'eventcart', 'Event cart', 'Event cart', 'eventcart', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'financialacls', 'Financial ACLs', 'Financial ACLs', 'financialacls', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'contributioncancelactions', 'Contribution cancel actions', 'Contribution cancel actions', 'contributioncancelactions', 1); +INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'recaptcha', 'reCAPTCHA', 'reCAPTCHA', 'recaptcha', 1); + -- +--------------------------------------------------------------------+ -- | Copyright CiviCRM LLC. All rights reserved. | -- | | @@ -23459,7 +23461,7 @@ VALUES ( @domainID, 'civicrm/admin/setting/path?reset=1', 'Directories', 'Directories', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/mapping?reset=1', 'Import/Export Mappings', 'Import/Export Mappings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 8 ), ( @domainID, 'civicrm/admin/setting/mapping?reset=1', 'Mapping and Geocoding', 'Mapping and Geocoding', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 9 ), - ( @domainID, 'civicrm/admin/setting/misc?reset=1', 'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)', 'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/setting/misc?reset=1', 'Misc (Undelete, PDFs, Limits, Logging, etc.)', 'misc_admin_settings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 10 ), ( @domainID, 'civicrm/admin/setting/preferences/multisite?reset=1', 'Multi Site Settings', 'Multi Site Settings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 11 ), ( @domainID, 'civicrm/admin/options?reset=1', 'Option Groups', 'Option Groups', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 12 ), ( @domainID, 'civicrm/admin/setting/smtp?reset=1', 'Outbound Email (SMTP/Sendmail)', 'Outbound Email', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 13 ), @@ -23873,4 +23875,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.36.1'; +UPDATE civicrm_domain SET version = '5.37.0'; diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index d31287bcc0..48074800bd 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -399,7 +399,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; -INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.36.1',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); +INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,'5.37.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -495,7 +495,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_extension` WRITE; /*!40000 ALTER TABLE `civicrm_extension` DISABLE KEYS */; -INSERT INTO `civicrm_extension` (`id`, `type`, `full_name`, `name`, `label`, `file`, `schema_version`, `is_active`) VALUES (1,'module','sequentialcreditnotes','Sequential credit notes','Sequential credit notes','sequentialcreditnotes',NULL,1),(2,'module','greenwich','Theme: Greenwich','Theme: Greenwich','greenwich',NULL,1),(3,'module','eventcart','Event cart','Event cart','eventcart',NULL,1),(4,'module','financialacls','Financial ACLs','Financial ACLs','financialacls',NULL,1),(5,'module','contributioncancelactions','Contribution cancel actions','Contribution cancel actions','contributioncancelactions',NULL,1); +INSERT INTO `civicrm_extension` (`id`, `type`, `full_name`, `name`, `label`, `file`, `schema_version`, `is_active`) VALUES (1,'module','sequentialcreditnotes','Sequential credit notes','Sequential credit notes','sequentialcreditnotes',NULL,1),(2,'module','greenwich','Theme: Greenwich','Theme: Greenwich','greenwich',NULL,1),(3,'module','eventcart','Event cart','Event cart','eventcart',NULL,1),(4,'module','financialacls','Financial ACLs','Financial ACLs','financialacls',NULL,1),(5,'module','contributioncancelactions','Contribution cancel actions','Contribution cancel actions','contributioncancelactions',NULL,1),(6,'module','recaptcha','reCAPTCHA','reCAPTCHA','recaptcha',NULL,1); /*!40000 ALTER TABLE `civicrm_extension` ENABLE KEYS */; UNLOCK TABLES; @@ -977,7 +977,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_navigation` WRITE; /*!40000 ALTER TABLE `civicrm_navigation` DISABLE KEYS */; -INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `icon`, `permission`, `permission_operator`, `parent_id`, `is_active`, `has_separator`, `weight`) VALUES (1,1,'Home','Home','civicrm/dashboard?reset=1',NULL,NULL,'',NULL,1,NULL,0),(2,1,'Search','Search',NULL,'crm-i fa-search',NULL,'',NULL,1,NULL,10),(3,1,'Find Contacts','Find Contacts','civicrm/contact/search?reset=1',NULL,NULL,'',2,1,NULL,1),(4,1,'Advanced Search','Advanced Search','civicrm/contact/search/advanced?reset=1',NULL,NULL,'',2,1,NULL,2),(5,1,'Full-text Search','Full-text Search','civicrm/contact/search/custom?csid=15&reset=1',NULL,NULL,'',2,1,NULL,3),(6,1,'Search Builder','Search Builder','civicrm/contact/search/builder?reset=1',NULL,NULL,'',2,1,1,4),(7,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',2,1,NULL,5),(8,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',2,1,NULL,6),(9,1,'Find Mailings','Find Mailings','civicrm/mailing?reset=1',NULL,'access CiviMail','',2,1,NULL,7),(10,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',2,1,NULL,8),(11,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',2,1,NULL,9),(12,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',2,1,NULL,10),(13,1,'Find Activities','Find Activities','civicrm/activity/search?reset=1',NULL,NULL,'',2,1,1,11),(14,1,'Custom Searches','Custom Searches','civicrm/contact/search/custom/list?reset=1',NULL,NULL,'',2,1,NULL,12),(15,1,'Contacts','Contacts',NULL,'crm-i fa-address-book-o',NULL,'',NULL,1,NULL,20),(16,1,'New Individual','New Individual','civicrm/contact/add?reset=1&ct=Individual',NULL,'add contacts','',15,1,NULL,1),(17,1,'New Household','New Household','civicrm/contact/add?reset=1&ct=Household',NULL,'add contacts','',15,1,NULL,2),(18,1,'New Organization','New Organization','civicrm/contact/add?reset=1&ct=Organization',NULL,'add contacts','',15,1,1,3),(19,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'access CiviReport','',15,1,1,4),(20,1,'New Activity','New Activity','civicrm/activity?reset=1&action=add&context=standalone',NULL,NULL,'',15,1,NULL,5),(21,1,'New Email','New Email','civicrm/activity/email/add?atype=3&action=add&reset=1&context=standalone',NULL,NULL,'',15,1,1,6),(22,1,'Import Contacts','Import Contacts','civicrm/import/contact?reset=1',NULL,'import contacts','',15,1,NULL,7),(23,1,'Import Activities','Import Activities','civicrm/import/activity?reset=1',NULL,'import contacts','',15,1,1,8),(24,1,'New Group','New Group','civicrm/group/add?reset=1',NULL,'edit groups','',15,1,NULL,9),(25,1,'Manage Groups','Manage Groups','civicrm/group?reset=1',NULL,'access CiviCRM','',15,1,1,10),(26,1,'New Tag','New Tag','civicrm/tag?reset=1&action=add',NULL,'manage tags','',15,1,NULL,11),(27,1,'Manage Tags (Categories)','Manage Tags (Categories)','civicrm/tag?reset=1',NULL,'manage tags','',15,1,1,12),(28,1,'Find and Merge Duplicate Contacts','Find and Merge Duplicate Contacts','civicrm/contact/deduperules?reset=1',NULL,'administer dedupe rules,merge duplicate contacts','OR',15,1,NULL,13),(29,1,'Contributions','Contributions',NULL,'crm-i fa-credit-card','access CiviContribute','',NULL,1,NULL,30),(30,1,'Dashboard','Dashboard','civicrm/contribute?reset=1',NULL,'access CiviContribute','',29,1,NULL,1),(31,1,'New Contribution','New Contribution','civicrm/contribute/add?reset=1&action=add&context=standalone',NULL,'access CiviContribute,edit contributions','AND',29,1,NULL,2),(32,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',29,1,NULL,3),(33,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',29,1,1,4),(34,1,'Import Contributions','Import Contributions','civicrm/contribute/import?reset=1',NULL,'access CiviContribute,edit contributions','AND',29,1,1,5),(35,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',29,1,NULL,7),(36,1,'Pledges','Pledges',NULL,NULL,'access CiviPledge','',29,1,1,6),(37,1,'Accounting Batches','Accounting Batches',NULL,NULL,'view own manual batches,view all manual batches','OR',29,1,1,8),(38,1,'Dashboard','Dashboard','civicrm/pledge?reset=1',NULL,'access CiviPledge','',36,1,NULL,1),(39,1,'New Pledge','New Pledge','civicrm/pledge/add?reset=1&action=add&context=standalone',NULL,'access CiviPledge,edit pledges','AND',36,1,NULL,2),(40,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',36,1,NULL,3),(41,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',36,1,0,4),(42,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute/add?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,9),(43,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,10),(44,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,11),(45,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,12),(46,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,13),(47,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,14),(48,1,'New Batch','New Batch','civicrm/financial/batch?reset=1&action=add',NULL,'create manual batch','AND',37,1,NULL,1),(49,1,'Open Batches','Open Batches','civicrm/financial/financialbatches?reset=1&batchStatus=1',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,2),(50,1,'Closed Batches','Closed Batches','civicrm/financial/financialbatches?reset=1&batchStatus=2',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,3),(51,1,'Exported Batches','Exported Batches','civicrm/financial/financialbatches?reset=1&batchStatus=5',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,4),(52,1,'Events','Events',NULL,'crm-i fa-calendar','access CiviEvent','',NULL,1,NULL,40),(53,1,'Dashboard','CiviEvent Dashboard','civicrm/event?reset=1',NULL,'access CiviEvent','',52,1,NULL,1),(54,1,'Register Event Participant','Register Event Participant','civicrm/participant/add?reset=1&action=add&context=standalone',NULL,'access CiviEvent,edit event participants','AND',52,1,NULL,2),(55,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',52,1,NULL,3),(56,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',52,1,1,4),(57,1,'Import Participants','Import Participants','civicrm/event/import?reset=1',NULL,'access CiviEvent,edit event participants','AND',52,1,1,5),(58,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,6),(59,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,7),(60,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',52,1,1,8),(61,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,9),(62,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,10),(63,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,11),(64,1,'Mailings','Mailings',NULL,'crm-i fa-envelope-o','access CiviMail,create mailings,approve mailings,schedule mailings,send SMS','OR',NULL,1,NULL,50),(65,1,'New Mailing','New Mailing','civicrm/mailing/send?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,1),(66,1,'Draft and Unscheduled Mailings','Draft and Unscheduled Mailings','civicrm/mailing/browse/unscheduled?reset=1&scheduled=false',NULL,'access CiviMail,create mailings,schedule mailings','OR',64,1,NULL,2),(67,1,'Scheduled and Sent Mailings','Scheduled and Sent Mailings','civicrm/mailing/browse/scheduled?reset=1&scheduled=true',NULL,'access CiviMail,approve mailings,create mailings,schedule mailings','OR',64,1,NULL,3),(68,1,'Archived Mailings','Archived Mailings','civicrm/mailing/browse/archived?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,4),(69,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',64,1,1,5),(70,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',64,1,NULL,6),(71,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'edit message templates,edit user-driven message templates,edit system workflow message templates','OR',64,1,NULL,7),(72,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',64,1,1,8),(73,1,'New SMS','New SMS','civicrm/sms/send?reset=1',NULL,'send SMS',NULL,64,1,NULL,9),(74,1,'Find Mass SMS','Find Mass SMS','civicrm/mailing/browse?reset=1&sms=1',NULL,'send SMS',NULL,64,1,1,10),(75,1,'New A/B Test','New A/B Test','civicrm/a/#/abtest/new',NULL,'access CiviMail','',64,1,NULL,15),(76,1,'Manage A/B Tests','Manage A/B Tests','civicrm/a/#/abtest',NULL,'access CiviMail','',64,1,1,16),(77,1,'Memberships','Memberships',NULL,'crm-i fa-id-badge','access CiviMember','',NULL,1,NULL,60),(78,1,'Dashboard','Dashboard','civicrm/member?reset=1',NULL,'access CiviMember','',77,1,NULL,1),(79,1,'New Membership','New Membership','civicrm/member/add?reset=1&action=add&context=standalone',NULL,'access CiviMember,edit memberships','AND',77,1,NULL,2),(80,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',77,1,NULL,3),(81,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',77,1,1,4),(82,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',77,1,NULL,5),(83,1,'Import Memberships','Import Members','civicrm/member/import?reset=1',NULL,'access CiviMember,edit memberships','AND',77,1,1,6),(84,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,7),(85,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,8),(86,1,'Campaigns','Campaigns',NULL,'crm-i fa-bullhorn','interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',NULL,1,NULL,70),(87,1,'Dashboard','Dashboard','civicrm/campaign?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,1),(88,1,'Surveys','Survey Dashboard','civicrm/campaign?reset=1&subPage=survey',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,1),(89,1,'Petitions','Petition Dashboard','civicrm/campaign?reset=1&subPage=petition',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,2),(90,1,'Campaigns','Campaign Dashboard','civicrm/campaign?reset=1&subPage=campaign',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,3),(91,1,'New Campaign','New Campaign','civicrm/campaign/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,2),(92,1,'New Survey','New Survey','civicrm/survey/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,3),(93,1,'New Petition','New Petition','civicrm/petition/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,4),(94,1,'Reserve Respondents','Reserve Respondents','civicrm/survey/search?reset=1&op=reserve',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts','OR',86,1,NULL,5),(95,1,'Interview Respondents','Interview Respondents','civicrm/survey/search?reset=1&op=interview',NULL,'administer CiviCampaign,manage campaign,interview campaign contacts','OR',86,1,NULL,6),(96,1,'Release Respondents','Release Respondents','civicrm/survey/search?reset=1&op=release',NULL,'administer CiviCampaign,manage campaign,release campaign contacts','OR',86,1,NULL,7),(97,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',86,1,1,8),(98,1,'Conduct Survey','Conduct Survey','civicrm/campaign/vote?reset=1',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts,interview campaign contacts','OR',86,1,NULL,9),(99,1,'GOTV (Voter Tracking)','Voter Listing','civicrm/campaign/gotv?reset=1',NULL,'administer CiviCampaign,manage campaign,release campaign contacts,gotv campaign contacts','OR',86,1,NULL,10),(100,1,'Cases','Cases',NULL,'crm-i fa-folder-open-o','access my cases and activities,access all cases and activities','OR',NULL,1,NULL,80),(101,1,'Dashboard','Dashboard','civicrm/case?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,NULL,1),(102,1,'New Case','New Case','civicrm/case/add?reset=1&action=add&atype=13&context=standalone',NULL,'add cases,access all cases and activities','OR',100,1,NULL,2),(103,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,1,3),(104,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',100,1,0,4),(105,1,'Grants','Grants',NULL,'crm-i fa-money','access CiviGrant','',NULL,1,NULL,90),(106,1,'Dashboard','Dashboard','civicrm/grant?reset=1',NULL,'access CiviGrant','',105,1,NULL,1),(107,1,'New Grant','New Grant','civicrm/grant/add?reset=1&action=add&context=standalone',NULL,'access CiviGrant,edit grants','AND',105,1,NULL,2),(108,1,'Find Grants','Find Grants','civicrm/grant/search?reset=1',NULL,'access CiviGrant','',105,1,1,3),(109,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',105,1,0,4),(110,1,'Administer','Administer',NULL,'crm-i fa-gears','administer CiviCRM','',NULL,1,NULL,100),(111,1,'Administration Console','Administration Console','civicrm/admin?reset=1',NULL,'administer CiviCRM','',110,1,NULL,1),(112,1,'System Status','System Status','civicrm/a/#/status',NULL,'administer CiviCRM','',111,1,NULL,0),(113,1,'Configuration Checklist','Configuration Checklist','civicrm/admin/configtask?reset=1',NULL,'administer CiviCRM','',111,1,NULL,1),(114,1,'Customize Data and Screens','Customize Data and Screens',NULL,NULL,'administer CiviCRM','',110,1,NULL,3),(115,1,'Custom Fields','Custom Fields','civicrm/admin/custom/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,1),(116,1,'Profiles','Profiles','civicrm/admin/uf/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,2),(117,1,'Tags (Categories)','Tags (Categories)','civicrm/tag?reset=1',NULL,'administer CiviCRM','',114,1,NULL,3),(118,1,'Activity Types','Activity Types','civicrm/admin/options/activity_type?reset=1',NULL,'administer CiviCRM','',114,1,NULL,4),(119,1,'Relationship Types','Relationship Types','civicrm/admin/reltype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,5),(120,1,'Contact Types','Contact Types','civicrm/admin/options/subtype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,6),(121,1,'Display Preferences','Display Preferences','civicrm/admin/setting/preferences/display?reset=1',NULL,'administer CiviCRM','',114,1,NULL,9),(122,1,'Search Preferences','Search Preferences','civicrm/admin/setting/search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,10),(123,1,'Date Preferences','Date Preferences','civicrm/admin/setting/preferences/date?reset=1',NULL,'administer CiviCRM','',114,1,NULL,11),(124,1,'Navigation Menu','Navigation Menu','civicrm/admin/menu?reset=1',NULL,'administer CiviCRM','',114,1,NULL,12),(125,1,'Word Replacements','Word Replacements','civicrm/admin/options/wordreplacements?reset=1',NULL,'administer CiviCRM','',114,1,NULL,13),(126,1,'Manage Custom Searches','Manage Custom Searches','civicrm/admin/options/custom_search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,14),(127,1,'Dropdown Options','Dropdown Options','civicrm/admin/options?action=browse&reset=1',NULL,'administer CiviCRM','',114,1,NULL,8),(128,1,'Gender Options','Gender Options','civicrm/admin/options/gender?reset=1',NULL,'administer CiviCRM','',127,1,NULL,1),(129,1,'Individual Prefixes (Ms, Mr...)','Individual Prefixes (Ms, Mr...)','civicrm/admin/options/individual_prefix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,2),(130,1,'Individual Suffixes (Jr, Sr...)','Individual Suffixes (Jr, Sr...)','civicrm/admin/options/individual_suffix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,3),(131,1,'Instant Messenger Services','Instant Messenger Services','civicrm/admin/options/instant_messenger_service?reset=1',NULL,'administer CiviCRM','',127,1,NULL,4),(132,1,'Location Types (Home, Work...)','Location Types (Home, Work...)','civicrm/admin/locationType?reset=1',NULL,'administer CiviCRM','',127,1,NULL,5),(133,1,'Mobile Phone Providers','Mobile Phone Providers','civicrm/admin/options/mobile_provider?reset=1',NULL,'administer CiviCRM','',127,1,NULL,6),(134,1,'Phone Types','Phone Types','civicrm/admin/options/phone_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,7),(135,1,'Website Types','Website Types','civicrm/admin/options/website_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,8),(136,1,'Communications','Communications',NULL,NULL,'administer CiviCRM','',110,1,NULL,4),(137,1,'Organization Address and Contact Info','Organization Address and Contact Info','civicrm/admin/domain?action=update&reset=1',NULL,'administer CiviCRM','',136,1,NULL,1),(138,1,'FROM Email Addresses','FROM Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',136,1,NULL,2),(139,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',136,1,NULL,3),(140,1,'Schedule Reminders','Schedule Reminders','civicrm/admin/scheduleReminders?reset=1',NULL,'administer CiviCRM','',136,1,NULL,4),(141,1,'Preferred Communication Methods','Preferred Communication Methods','civicrm/admin/options/preferred_communication_method?reset=1',NULL,'administer CiviCRM','',136,1,NULL,5),(142,1,'Label Formats','Label Formats','civicrm/admin/labelFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,6),(143,1,'Print Page (PDF) Formats','Print Page (PDF) Formats','civicrm/admin/pdfFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,7),(144,1,'Communication Style Options','Communication Style Options','civicrm/admin/options/communication_style?reset=1',NULL,'administer CiviCRM','',136,1,NULL,8),(145,1,'Email Greeting Formats','Email Greeting Formats','civicrm/admin/options/email_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,9),(146,1,'Postal Greeting Formats','Postal Greeting Formats','civicrm/admin/options/postal_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,10),(147,1,'Addressee Formats','Addressee Formats','civicrm/admin/options/addressee?reset=1',NULL,'administer CiviCRM','',136,1,NULL,11),(148,1,'Localization','Localization',NULL,NULL,'administer CiviCRM','',110,1,NULL,6),(149,1,'Languages, Currency, Locations','Languages, Currency, Locations','civicrm/admin/setting/localization?reset=1',NULL,'administer CiviCRM','',148,1,NULL,1),(150,1,'Address Settings','Address Settings','civicrm/admin/setting/preferences/address?reset=1',NULL,'administer CiviCRM','',148,1,NULL,2),(151,1,'Date Formats','Date Formats','civicrm/admin/setting/date?reset=1',NULL,'administer CiviCRM','',148,1,NULL,3),(152,1,'Preferred Language Options','Preferred Language Options','civicrm/admin/options/languages?reset=1',NULL,'administer CiviCRM','',148,1,NULL,4),(153,1,'Users and Permissions','Users and Permissions',NULL,NULL,'administer CiviCRM','',110,1,NULL,7),(154,1,'Permissions (Access Control)','Permissions (Access Control)','civicrm/admin/access?reset=1',NULL,'administer CiviCRM','',153,1,NULL,1),(155,1,'Synchronize Users to Contacts','Synchronize Users to Contacts','civicrm/admin/synchUser?reset=1',NULL,'administer CiviCRM','',153,1,NULL,2),(156,1,'System Settings','System Settings',NULL,NULL,'administer CiviCRM','',110,1,NULL,8),(157,1,'Components','Enable Components','civicrm/admin/setting/component?reset=1',NULL,'administer CiviCRM','',156,1,NULL,1),(158,1,'Connections','Connections','civicrm/a/#/cxn',NULL,'administer CiviCRM','',156,1,NULL,2),(159,1,'Extensions','Manage Extensions','civicrm/admin/extensions?reset=1',NULL,'administer CiviCRM','',156,1,1,3),(160,1,'Cleanup Caches and Update Paths','Cleanup Caches and Update Paths','civicrm/admin/setting/updateConfigBackend?reset=1',NULL,'administer CiviCRM','',156,1,NULL,4),(161,1,'CMS Database Integration','CMS Integration','civicrm/admin/setting/uf?reset=1',NULL,'administer CiviCRM','',156,1,NULL,5),(162,1,'Debugging and Error Handling','Debugging and Error Handling','civicrm/admin/setting/debug?reset=1',NULL,'administer CiviCRM','',156,1,NULL,6),(163,1,'Directories','Directories','civicrm/admin/setting/path?reset=1',NULL,'administer CiviCRM','',156,1,NULL,7),(164,1,'Import/Export Mappings','Import/Export Mappings','civicrm/admin/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,8),(165,1,'Mapping and Geocoding','Mapping and Geocoding','civicrm/admin/setting/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,9),(166,1,'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)','civicrm/admin/setting/misc?reset=1',NULL,'administer CiviCRM','',156,1,NULL,10),(167,1,'Multi Site Settings','Multi Site Settings','civicrm/admin/setting/preferences/multisite?reset=1',NULL,'administer CiviCRM','',156,1,NULL,11),(168,1,'Option Groups','Option Groups','civicrm/admin/options?reset=1',NULL,'administer CiviCRM','',156,1,NULL,12),(169,1,'Outbound Email (SMTP/Sendmail)','Outbound Email','civicrm/admin/setting/smtp?reset=1',NULL,'administer CiviCRM','',156,1,NULL,13),(170,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',156,1,NULL,14),(171,1,'Resource URLs','Resource URLs','civicrm/admin/setting/url?reset=1',NULL,'administer CiviCRM','',156,1,NULL,15),(172,1,'Safe File Extensions','Safe File Extensions','civicrm/admin/options/safe_file_extension?reset=1',NULL,'administer CiviCRM','',156,1,NULL,16),(173,1,'Scheduled Jobs','Scheduled Jobs','civicrm/admin/job?reset=1',NULL,'administer CiviCRM','',156,1,NULL,17),(174,1,'SMS Providers','SMS Providers','civicrm/admin/sms/provider?reset=1',NULL,'administer CiviCRM','',156,1,NULL,18),(175,1,'CiviCampaign','CiviCampaign',NULL,NULL,'administer CiviCampaign,administer CiviCRM','AND',110,1,NULL,9),(176,1,'Survey Types','Survey Types','civicrm/admin/campaign/surveyType?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,1),(177,1,'Campaign Types','Campaign Types','civicrm/admin/options/campaign_type?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,2),(178,1,'Campaign Status','Campaign Status','civicrm/admin/options/campaign_status?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,3),(179,1,'Engagement Index','Engagement Index','civicrm/admin/options/engagement_index?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,4),(180,1,'CiviCampaign Component Settings','CiviCampaign Component Settings','civicrm/admin/setting/preferences/campaign?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,5),(181,1,'CiviCase','CiviCase',NULL,NULL,'administer CiviCase',NULL,110,1,NULL,10),(182,1,'CiviCase Settings','CiviCase Settings','civicrm/admin/setting/case?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,1),(183,1,'Case Types','Case Types','civicrm/a/#/caseType',NULL,'administer CiviCase',NULL,181,1,NULL,2),(184,1,'Redaction Rules','Redaction Rules','civicrm/admin/options/redaction_rule?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,3),(185,1,'Case Statuses','Case Statuses','civicrm/admin/options/case_status?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,4),(186,1,'Encounter Medium','Encounter Medium','civicrm/admin/options/encounter_medium?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,5),(187,1,'CiviContribute','CiviContribute',NULL,NULL,'access CiviContribute,administer CiviCRM','AND',110,1,NULL,11),(188,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,6),(189,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,7),(190,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,8),(191,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,9),(192,1,'Financial Types','Financial Types','civicrm/admin/financial/financialType?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,10),(193,1,'Financial Accounts','Financial Accounts','civicrm/admin/financial/financialAccount?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,11),(194,1,'Payment Methods','Payment Instruments','civicrm/admin/options/payment_instrument?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,12),(195,1,'Accepted Credit Cards','Accepted Credit Cards','civicrm/admin/options/accept_creditcard?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,13),(196,1,'Soft Credit Types','Soft Credit Types','civicrm/admin/options/soft_credit_type?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,14),(197,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,15),(198,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,16),(199,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',187,1,NULL,17),(200,1,'CiviContribute Component Settings','CiviContribute Component Settings','civicrm/admin/setting/preferences/contribute?reset=1',NULL,'administer CiviCRM','',187,1,NULL,18),(201,1,'CiviEvent','CiviEvent',NULL,NULL,'access CiviEvent,administer CiviCRM','AND',110,1,NULL,12),(202,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,1),(203,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,2),(204,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,3),(205,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,4),(206,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,5),(207,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,6),(208,1,'Event Types','Event Types','civicrm/admin/options/event_type?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,7),(209,1,'Participant Statuses','Participant Statuses','civicrm/admin/participant_status?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,8),(210,1,'Participant Roles','Participant Roles','civicrm/admin/options/participant_role?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,9),(211,1,'Participant Listing Options','Participant Listing Options','civicrm/admin/options/participant_listing?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,10),(212,1,'Event Name Badge Layouts','Event Name Badge Layouts','civicrm/admin/badgelayout?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,11),(213,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',201,1,NULL,12),(214,1,'CiviEvent Component Settings','CiviEvent Component Settings','civicrm/admin/setting/preferences/event?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,13),(215,1,'CiviGrant','CiviGrant',NULL,NULL,'access CiviGrant,administer CiviCRM','AND',110,1,NULL,13),(216,1,'Grant Types','Grant Types','civicrm/admin/options/grant_type?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,1),(217,1,'Grant Status','Grant Status','civicrm/admin/options/grant_status?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,2),(218,1,'CiviMail','CiviMail',NULL,NULL,'access CiviMail,administer CiviCRM','AND',110,1,NULL,14),(219,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,1),(220,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',218,1,NULL,2),(221,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',218,1,NULL,3),(222,1,'Mail Accounts','Mail Accounts','civicrm/admin/mailSettings?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,4),(223,1,'Mailer Settings','Mailer Settings','civicrm/admin/mail?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,5),(224,1,'CiviMail Component Settings','CiviMail Component Settings','civicrm/admin/setting/preferences/mailing?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,6),(225,1,'CiviMember','CiviMember',NULL,NULL,'access CiviMember,administer CiviCRM','AND',110,1,NULL,15),(226,1,'Membership Types','Membership Types','civicrm/admin/member/membershipType?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,1),(227,1,'Membership Status Rules','Membership Status Rules','civicrm/admin/member/membershipStatus?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,1,2),(228,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,3),(229,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,4),(230,1,'CiviMember Component Settings','CiviMember Component Settings','civicrm/admin/setting/preferences/member?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,5),(231,1,'CiviReport','CiviReport',NULL,NULL,'access CiviReport,administer CiviCRM','AND',110,1,NULL,16),(232,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',231,1,NULL,1),(233,1,'Create New Report from Template','Create New Report from Template','civicrm/admin/report/template/list?reset=1',NULL,'administer Reports','',231,1,NULL,2),(234,1,'Manage Templates','Manage Templates','civicrm/admin/report/options/report_template?reset=1',NULL,'administer Reports','',231,1,NULL,3),(235,1,'Register Report','Register Report','civicrm/admin/report/register?reset=1',NULL,'administer Reports','',231,1,NULL,4),(236,1,'Support','Support',NULL,'crm-i fa-life-ring',NULL,'',NULL,1,NULL,110),(237,1,'Get started','Get started','https://civicrm.org/get-started?src=iam',NULL,NULL,'AND',236,1,NULL,1),(238,1,'Documentation','Documentation','https://civicrm.org/documentation?src=iam',NULL,NULL,'AND',236,1,NULL,2),(239,1,'Ask a question','Ask a question','https://civicrm.org/ask-a-question?src=iam',NULL,NULL,'AND',236,1,NULL,3),(240,1,'Get expert help','Get expert help','https://civicrm.org/experts?src=iam',NULL,NULL,'AND',236,1,NULL,4),(241,1,'About CiviCRM','About CiviCRM','https://civicrm.org/about?src=iam',NULL,NULL,'AND',236,1,1,5),(242,1,'Register your site','Register your site','https://civicrm.org/register-your-site?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,6),(243,1,'Join CiviCRM','Join CiviCRM','https://civicrm.org/become-a-member?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,7),(244,1,'Developer','Developer',NULL,NULL,'administer CiviCRM','',236,1,1,8),(245,1,'Api Explorer v3','API Explorer','civicrm/api3',NULL,'administer CiviCRM','',244,1,NULL,1),(246,1,'Api Explorer v4','Api Explorer v4','civicrm/api4#/explorer',NULL,'administer CiviCRM','',244,1,NULL,2),(247,1,'Developer Docs','Developer Docs','https://civicrm.org/developer-documentation?src=iam',NULL,'administer CiviCRM','',244,1,NULL,3),(248,1,'Reports','Reports',NULL,'crm-i fa-bar-chart','access CiviReport','',NULL,1,NULL,95),(249,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'administer CiviCRM','',248,1,0,1),(250,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',248,1,0,2),(251,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',248,1,0,3),(252,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',248,1,0,4),(253,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',248,1,0,5),(254,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',248,1,0,6),(255,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',248,1,0,7),(256,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',248,1,0,8),(257,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',248,1,0,9),(258,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',248,1,1,10),(259,1,'My Reports','My Reports','civicrm/report/list?myreports=1&reset=1',NULL,'access CiviReport','',248,1,1,11),(260,1,'New Student','New Student','civicrm/contact/add?ct=Individual&cst=Student&reset=1',NULL,'add contacts','',16,1,NULL,1),(261,1,'New Parent','New Parent','civicrm/contact/add?ct=Individual&cst=Parent&reset=1',NULL,'add contacts','',16,1,NULL,2),(262,1,'New Staff','New Staff','civicrm/contact/add?ct=Individual&cst=Staff&reset=1',NULL,'add contacts','',16,1,NULL,3),(263,1,'New Team','New Team','civicrm/contact/add?ct=Organization&cst=Team&reset=1',NULL,'add contacts','',18,1,NULL,1),(264,1,'New Sponsor','New Sponsor','civicrm/contact/add?ct=Organization&cst=Sponsor&reset=1',NULL,'add contacts','',18,1,NULL,2); +INSERT INTO `civicrm_navigation` (`id`, `domain_id`, `label`, `name`, `url`, `icon`, `permission`, `permission_operator`, `parent_id`, `is_active`, `has_separator`, `weight`) VALUES (1,1,'Home','Home','civicrm/dashboard?reset=1',NULL,NULL,'',NULL,1,NULL,0),(2,1,'Search','Search',NULL,'crm-i fa-search',NULL,'',NULL,1,NULL,10),(3,1,'Find Contacts','Find Contacts','civicrm/contact/search?reset=1',NULL,NULL,'',2,1,NULL,1),(4,1,'Advanced Search','Advanced Search','civicrm/contact/search/advanced?reset=1',NULL,NULL,'',2,1,NULL,2),(5,1,'Full-text Search','Full-text Search','civicrm/contact/search/custom?csid=15&reset=1',NULL,NULL,'',2,1,NULL,3),(6,1,'Search Builder','Search Builder','civicrm/contact/search/builder?reset=1',NULL,NULL,'',2,1,1,4),(7,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',2,1,NULL,5),(8,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',2,1,NULL,6),(9,1,'Find Mailings','Find Mailings','civicrm/mailing?reset=1',NULL,'access CiviMail','',2,1,NULL,7),(10,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',2,1,NULL,8),(11,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',2,1,NULL,9),(12,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',2,1,NULL,10),(13,1,'Find Activities','Find Activities','civicrm/activity/search?reset=1',NULL,NULL,'',2,1,1,11),(14,1,'Custom Searches','Custom Searches','civicrm/contact/search/custom/list?reset=1',NULL,NULL,'',2,1,NULL,12),(15,1,'Contacts','Contacts',NULL,'crm-i fa-address-book-o',NULL,'',NULL,1,NULL,20),(16,1,'New Individual','New Individual','civicrm/contact/add?reset=1&ct=Individual',NULL,'add contacts','',15,1,NULL,1),(17,1,'New Household','New Household','civicrm/contact/add?reset=1&ct=Household',NULL,'add contacts','',15,1,NULL,2),(18,1,'New Organization','New Organization','civicrm/contact/add?reset=1&ct=Organization',NULL,'add contacts','',15,1,1,3),(19,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'access CiviReport','',15,1,1,4),(20,1,'New Activity','New Activity','civicrm/activity?reset=1&action=add&context=standalone',NULL,NULL,'',15,1,NULL,5),(21,1,'New Email','New Email','civicrm/activity/email/add?atype=3&action=add&reset=1&context=standalone',NULL,NULL,'',15,1,1,6),(22,1,'Import Contacts','Import Contacts','civicrm/import/contact?reset=1',NULL,'import contacts','',15,1,NULL,7),(23,1,'Import Activities','Import Activities','civicrm/import/activity?reset=1',NULL,'import contacts','',15,1,1,8),(24,1,'New Group','New Group','civicrm/group/add?reset=1',NULL,'edit groups','',15,1,NULL,9),(25,1,'Manage Groups','Manage Groups','civicrm/group?reset=1',NULL,'access CiviCRM','',15,1,1,10),(26,1,'New Tag','New Tag','civicrm/tag?reset=1&action=add',NULL,'manage tags','',15,1,NULL,11),(27,1,'Manage Tags (Categories)','Manage Tags (Categories)','civicrm/tag?reset=1',NULL,'manage tags','',15,1,1,12),(28,1,'Find and Merge Duplicate Contacts','Find and Merge Duplicate Contacts','civicrm/contact/deduperules?reset=1',NULL,'administer dedupe rules,merge duplicate contacts','OR',15,1,NULL,13),(29,1,'Contributions','Contributions',NULL,'crm-i fa-credit-card','access CiviContribute','',NULL,1,NULL,30),(30,1,'Dashboard','Dashboard','civicrm/contribute?reset=1',NULL,'access CiviContribute','',29,1,NULL,1),(31,1,'New Contribution','New Contribution','civicrm/contribute/add?reset=1&action=add&context=standalone',NULL,'access CiviContribute,edit contributions','AND',29,1,NULL,2),(32,1,'Find Contributions','Find Contributions','civicrm/contribute/search?reset=1',NULL,'access CiviContribute','',29,1,NULL,3),(33,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',29,1,1,4),(34,1,'Import Contributions','Import Contributions','civicrm/contribute/import?reset=1',NULL,'access CiviContribute,edit contributions','AND',29,1,1,5),(35,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',29,1,NULL,7),(36,1,'Pledges','Pledges',NULL,NULL,'access CiviPledge','',29,1,1,6),(37,1,'Accounting Batches','Accounting Batches',NULL,NULL,'view own manual batches,view all manual batches','OR',29,1,1,8),(38,1,'Dashboard','Dashboard','civicrm/pledge?reset=1',NULL,'access CiviPledge','',36,1,NULL,1),(39,1,'New Pledge','New Pledge','civicrm/pledge/add?reset=1&action=add&context=standalone',NULL,'access CiviPledge,edit pledges','AND',36,1,NULL,2),(40,1,'Find Pledges','Find Pledges','civicrm/pledge/search?reset=1',NULL,'access CiviPledge','',36,1,NULL,3),(41,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',36,1,0,4),(42,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute/add?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,9),(43,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,10),(44,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,11),(45,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,12),(46,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,NULL,13),(47,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',29,1,1,14),(48,1,'New Batch','New Batch','civicrm/financial/batch?reset=1&action=add',NULL,'create manual batch','AND',37,1,NULL,1),(49,1,'Open Batches','Open Batches','civicrm/financial/financialbatches?reset=1&batchStatus=1',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,2),(50,1,'Closed Batches','Closed Batches','civicrm/financial/financialbatches?reset=1&batchStatus=2',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,3),(51,1,'Exported Batches','Exported Batches','civicrm/financial/financialbatches?reset=1&batchStatus=5',NULL,'view own manual batches,view all manual batches','OR',37,1,NULL,4),(52,1,'Events','Events',NULL,'crm-i fa-calendar','access CiviEvent','',NULL,1,NULL,40),(53,1,'Dashboard','CiviEvent Dashboard','civicrm/event?reset=1',NULL,'access CiviEvent','',52,1,NULL,1),(54,1,'Register Event Participant','Register Event Participant','civicrm/participant/add?reset=1&action=add&context=standalone',NULL,'access CiviEvent,edit event participants','AND',52,1,NULL,2),(55,1,'Find Participants','Find Participants','civicrm/event/search?reset=1',NULL,'access CiviEvent','',52,1,NULL,3),(56,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',52,1,1,4),(57,1,'Import Participants','Import Participants','civicrm/event/import?reset=1',NULL,'access CiviEvent,edit event participants','AND',52,1,1,5),(58,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,6),(59,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,7),(60,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',52,1,1,8),(61,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,1,9),(62,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,10),(63,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,edit all events','AND',52,1,NULL,11),(64,1,'Mailings','Mailings',NULL,'crm-i fa-envelope-o','access CiviMail,create mailings,approve mailings,schedule mailings,send SMS','OR',NULL,1,NULL,50),(65,1,'New Mailing','New Mailing','civicrm/mailing/send?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,1),(66,1,'Draft and Unscheduled Mailings','Draft and Unscheduled Mailings','civicrm/mailing/browse/unscheduled?reset=1&scheduled=false',NULL,'access CiviMail,create mailings,schedule mailings','OR',64,1,NULL,2),(67,1,'Scheduled and Sent Mailings','Scheduled and Sent Mailings','civicrm/mailing/browse/scheduled?reset=1&scheduled=true',NULL,'access CiviMail,approve mailings,create mailings,schedule mailings','OR',64,1,NULL,3),(68,1,'Archived Mailings','Archived Mailings','civicrm/mailing/browse/archived?reset=1',NULL,'access CiviMail,create mailings','OR',64,1,NULL,4),(69,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',64,1,1,5),(70,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',64,1,NULL,6),(71,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'edit message templates,edit user-driven message templates,edit system workflow message templates','OR',64,1,NULL,7),(72,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',64,1,1,8),(73,1,'New SMS','New SMS','civicrm/sms/send?reset=1',NULL,'send SMS',NULL,64,1,NULL,9),(74,1,'Find Mass SMS','Find Mass SMS','civicrm/mailing/browse?reset=1&sms=1',NULL,'send SMS',NULL,64,1,1,10),(75,1,'New A/B Test','New A/B Test','civicrm/a/#/abtest/new',NULL,'access CiviMail','',64,1,NULL,15),(76,1,'Manage A/B Tests','Manage A/B Tests','civicrm/a/#/abtest',NULL,'access CiviMail','',64,1,1,16),(77,1,'Memberships','Memberships',NULL,'crm-i fa-id-badge','access CiviMember','',NULL,1,NULL,60),(78,1,'Dashboard','Dashboard','civicrm/member?reset=1',NULL,'access CiviMember','',77,1,NULL,1),(79,1,'New Membership','New Membership','civicrm/member/add?reset=1&action=add&context=standalone',NULL,'access CiviMember,edit memberships','AND',77,1,NULL,2),(80,1,'Find Memberships','Find Memberships','civicrm/member/search?reset=1',NULL,'access CiviMember','',77,1,NULL,3),(81,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',77,1,1,4),(82,1,'Batch Data Entry','Batch Data Entry','civicrm/batch?reset=1',NULL,'access CiviContribute','',77,1,NULL,5),(83,1,'Import Memberships','Import Members','civicrm/member/import?reset=1',NULL,'access CiviMember,edit memberships','AND',77,1,1,6),(84,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,7),(85,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',77,1,NULL,8),(86,1,'Campaigns','Campaigns',NULL,'crm-i fa-bullhorn','interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',NULL,1,NULL,70),(87,1,'Dashboard','Dashboard','civicrm/campaign?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,1),(88,1,'Surveys','Survey Dashboard','civicrm/campaign?reset=1&subPage=survey',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,1),(89,1,'Petitions','Petition Dashboard','civicrm/campaign?reset=1&subPage=petition',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,2),(90,1,'Campaigns','Campaign Dashboard','civicrm/campaign?reset=1&subPage=campaign',NULL,'manage campaign,administer CiviCampaign','OR',87,1,NULL,3),(91,1,'New Campaign','New Campaign','civicrm/campaign/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,2),(92,1,'New Survey','New Survey','civicrm/survey/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,3),(93,1,'New Petition','New Petition','civicrm/petition/add?reset=1',NULL,'manage campaign,administer CiviCampaign','OR',86,1,NULL,4),(94,1,'Reserve Respondents','Reserve Respondents','civicrm/survey/search?reset=1&op=reserve',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts','OR',86,1,NULL,5),(95,1,'Interview Respondents','Interview Respondents','civicrm/survey/search?reset=1&op=interview',NULL,'administer CiviCampaign,manage campaign,interview campaign contacts','OR',86,1,NULL,6),(96,1,'Release Respondents','Release Respondents','civicrm/survey/search?reset=1&op=release',NULL,'administer CiviCampaign,manage campaign,release campaign contacts','OR',86,1,NULL,7),(97,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',86,1,1,8),(98,1,'Conduct Survey','Conduct Survey','civicrm/campaign/vote?reset=1',NULL,'administer CiviCampaign,manage campaign,reserve campaign contacts,interview campaign contacts','OR',86,1,NULL,9),(99,1,'GOTV (Voter Tracking)','Voter Listing','civicrm/campaign/gotv?reset=1',NULL,'administer CiviCampaign,manage campaign,release campaign contacts,gotv campaign contacts','OR',86,1,NULL,10),(100,1,'Cases','Cases',NULL,'crm-i fa-folder-open-o','access my cases and activities,access all cases and activities','OR',NULL,1,NULL,80),(101,1,'Dashboard','Dashboard','civicrm/case?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,NULL,1),(102,1,'New Case','New Case','civicrm/case/add?reset=1&action=add&atype=13&context=standalone',NULL,'add cases,access all cases and activities','OR',100,1,NULL,2),(103,1,'Find Cases','Find Cases','civicrm/case/search?reset=1',NULL,'access my cases and activities,access all cases and activities','OR',100,1,1,3),(104,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',100,1,0,4),(105,1,'Grants','Grants',NULL,'crm-i fa-money','access CiviGrant','',NULL,1,NULL,90),(106,1,'Dashboard','Dashboard','civicrm/grant?reset=1',NULL,'access CiviGrant','',105,1,NULL,1),(107,1,'New Grant','New Grant','civicrm/grant/add?reset=1&action=add&context=standalone',NULL,'access CiviGrant,edit grants','AND',105,1,NULL,2),(108,1,'Find Grants','Find Grants','civicrm/grant/search?reset=1',NULL,'access CiviGrant','',105,1,1,3),(109,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',105,1,0,4),(110,1,'Administer','Administer',NULL,'crm-i fa-gears','administer CiviCRM','',NULL,1,NULL,100),(111,1,'Administration Console','Administration Console','civicrm/admin?reset=1',NULL,'administer CiviCRM','',110,1,NULL,1),(112,1,'System Status','System Status','civicrm/a/#/status',NULL,'administer CiviCRM','',111,1,NULL,0),(113,1,'Configuration Checklist','Configuration Checklist','civicrm/admin/configtask?reset=1',NULL,'administer CiviCRM','',111,1,NULL,1),(114,1,'Customize Data and Screens','Customize Data and Screens',NULL,NULL,'administer CiviCRM','',110,1,NULL,3),(115,1,'Custom Fields','Custom Fields','civicrm/admin/custom/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,1),(116,1,'Profiles','Profiles','civicrm/admin/uf/group?reset=1',NULL,'administer CiviCRM','',114,1,NULL,2),(117,1,'Tags (Categories)','Tags (Categories)','civicrm/tag?reset=1',NULL,'administer CiviCRM','',114,1,NULL,3),(118,1,'Activity Types','Activity Types','civicrm/admin/options/activity_type?reset=1',NULL,'administer CiviCRM','',114,1,NULL,4),(119,1,'Relationship Types','Relationship Types','civicrm/admin/reltype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,5),(120,1,'Contact Types','Contact Types','civicrm/admin/options/subtype?reset=1',NULL,'administer CiviCRM','',114,1,NULL,6),(121,1,'Display Preferences','Display Preferences','civicrm/admin/setting/preferences/display?reset=1',NULL,'administer CiviCRM','',114,1,NULL,9),(122,1,'Search Preferences','Search Preferences','civicrm/admin/setting/search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,10),(123,1,'Date Preferences','Date Preferences','civicrm/admin/setting/preferences/date?reset=1',NULL,'administer CiviCRM','',114,1,NULL,11),(124,1,'Navigation Menu','Navigation Menu','civicrm/admin/menu?reset=1',NULL,'administer CiviCRM','',114,1,NULL,12),(125,1,'Word Replacements','Word Replacements','civicrm/admin/options/wordreplacements?reset=1',NULL,'administer CiviCRM','',114,1,NULL,13),(126,1,'Manage Custom Searches','Manage Custom Searches','civicrm/admin/options/custom_search?reset=1',NULL,'administer CiviCRM','',114,1,NULL,14),(127,1,'Dropdown Options','Dropdown Options','civicrm/admin/options?action=browse&reset=1',NULL,'administer CiviCRM','',114,1,NULL,8),(128,1,'Gender Options','Gender Options','civicrm/admin/options/gender?reset=1',NULL,'administer CiviCRM','',127,1,NULL,1),(129,1,'Individual Prefixes (Ms, Mr...)','Individual Prefixes (Ms, Mr...)','civicrm/admin/options/individual_prefix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,2),(130,1,'Individual Suffixes (Jr, Sr...)','Individual Suffixes (Jr, Sr...)','civicrm/admin/options/individual_suffix?reset=1',NULL,'administer CiviCRM','',127,1,NULL,3),(131,1,'Instant Messenger Services','Instant Messenger Services','civicrm/admin/options/instant_messenger_service?reset=1',NULL,'administer CiviCRM','',127,1,NULL,4),(132,1,'Location Types (Home, Work...)','Location Types (Home, Work...)','civicrm/admin/locationType?reset=1',NULL,'administer CiviCRM','',127,1,NULL,5),(133,1,'Mobile Phone Providers','Mobile Phone Providers','civicrm/admin/options/mobile_provider?reset=1',NULL,'administer CiviCRM','',127,1,NULL,6),(134,1,'Phone Types','Phone Types','civicrm/admin/options/phone_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,7),(135,1,'Website Types','Website Types','civicrm/admin/options/website_type?reset=1',NULL,'administer CiviCRM','',127,1,NULL,8),(136,1,'Communications','Communications',NULL,NULL,'administer CiviCRM','',110,1,NULL,4),(137,1,'Organization Address and Contact Info','Organization Address and Contact Info','civicrm/admin/domain?action=update&reset=1',NULL,'administer CiviCRM','',136,1,NULL,1),(138,1,'FROM Email Addresses','FROM Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',136,1,NULL,2),(139,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',136,1,NULL,3),(140,1,'Schedule Reminders','Schedule Reminders','civicrm/admin/scheduleReminders?reset=1',NULL,'administer CiviCRM','',136,1,NULL,4),(141,1,'Preferred Communication Methods','Preferred Communication Methods','civicrm/admin/options/preferred_communication_method?reset=1',NULL,'administer CiviCRM','',136,1,NULL,5),(142,1,'Label Formats','Label Formats','civicrm/admin/labelFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,6),(143,1,'Print Page (PDF) Formats','Print Page (PDF) Formats','civicrm/admin/pdfFormats?reset=1',NULL,'administer CiviCRM','',136,1,NULL,7),(144,1,'Communication Style Options','Communication Style Options','civicrm/admin/options/communication_style?reset=1',NULL,'administer CiviCRM','',136,1,NULL,8),(145,1,'Email Greeting Formats','Email Greeting Formats','civicrm/admin/options/email_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,9),(146,1,'Postal Greeting Formats','Postal Greeting Formats','civicrm/admin/options/postal_greeting?reset=1',NULL,'administer CiviCRM','',136,1,NULL,10),(147,1,'Addressee Formats','Addressee Formats','civicrm/admin/options/addressee?reset=1',NULL,'administer CiviCRM','',136,1,NULL,11),(148,1,'Localization','Localization',NULL,NULL,'administer CiviCRM','',110,1,NULL,6),(149,1,'Languages, Currency, Locations','Languages, Currency, Locations','civicrm/admin/setting/localization?reset=1',NULL,'administer CiviCRM','',148,1,NULL,1),(150,1,'Address Settings','Address Settings','civicrm/admin/setting/preferences/address?reset=1',NULL,'administer CiviCRM','',148,1,NULL,2),(151,1,'Date Formats','Date Formats','civicrm/admin/setting/date?reset=1',NULL,'administer CiviCRM','',148,1,NULL,3),(152,1,'Preferred Language Options','Preferred Language Options','civicrm/admin/options/languages?reset=1',NULL,'administer CiviCRM','',148,1,NULL,4),(153,1,'Users and Permissions','Users and Permissions',NULL,NULL,'administer CiviCRM','',110,1,NULL,7),(154,1,'Permissions (Access Control)','Permissions (Access Control)','civicrm/admin/access?reset=1',NULL,'administer CiviCRM','',153,1,NULL,1),(155,1,'Synchronize Users to Contacts','Synchronize Users to Contacts','civicrm/admin/synchUser?reset=1',NULL,'administer CiviCRM','',153,1,NULL,2),(156,1,'System Settings','System Settings',NULL,NULL,'administer CiviCRM','',110,1,NULL,8),(157,1,'Components','Enable Components','civicrm/admin/setting/component?reset=1',NULL,'administer CiviCRM','',156,1,NULL,1),(158,1,'Connections','Connections','civicrm/a/#/cxn',NULL,'administer CiviCRM','',156,1,NULL,2),(159,1,'Extensions','Manage Extensions','civicrm/admin/extensions?reset=1',NULL,'administer CiviCRM','',156,1,1,3),(160,1,'Cleanup Caches and Update Paths','Cleanup Caches and Update Paths','civicrm/admin/setting/updateConfigBackend?reset=1',NULL,'administer CiviCRM','',156,1,NULL,4),(161,1,'CMS Database Integration','CMS Integration','civicrm/admin/setting/uf?reset=1',NULL,'administer CiviCRM','',156,1,NULL,5),(162,1,'Debugging and Error Handling','Debugging and Error Handling','civicrm/admin/setting/debug?reset=1',NULL,'administer CiviCRM','',156,1,NULL,6),(163,1,'Directories','Directories','civicrm/admin/setting/path?reset=1',NULL,'administer CiviCRM','',156,1,NULL,7),(164,1,'Import/Export Mappings','Import/Export Mappings','civicrm/admin/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,8),(165,1,'Mapping and Geocoding','Mapping and Geocoding','civicrm/admin/setting/mapping?reset=1',NULL,'administer CiviCRM','',156,1,NULL,9),(166,1,'Misc (Undelete, PDFs, Limits, Logging, etc.)','misc_admin_settings','civicrm/admin/setting/misc?reset=1',NULL,'administer CiviCRM','',156,1,NULL,10),(167,1,'Multi Site Settings','Multi Site Settings','civicrm/admin/setting/preferences/multisite?reset=1',NULL,'administer CiviCRM','',156,1,NULL,11),(168,1,'Option Groups','Option Groups','civicrm/admin/options?reset=1',NULL,'administer CiviCRM','',156,1,NULL,12),(169,1,'Outbound Email (SMTP/Sendmail)','Outbound Email','civicrm/admin/setting/smtp?reset=1',NULL,'administer CiviCRM','',156,1,NULL,13),(170,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',156,1,NULL,14),(171,1,'Resource URLs','Resource URLs','civicrm/admin/setting/url?reset=1',NULL,'administer CiviCRM','',156,1,NULL,15),(172,1,'Safe File Extensions','Safe File Extensions','civicrm/admin/options/safe_file_extension?reset=1',NULL,'administer CiviCRM','',156,1,NULL,16),(173,1,'Scheduled Jobs','Scheduled Jobs','civicrm/admin/job?reset=1',NULL,'administer CiviCRM','',156,1,NULL,17),(174,1,'SMS Providers','SMS Providers','civicrm/admin/sms/provider?reset=1',NULL,'administer CiviCRM','',156,1,NULL,18),(175,1,'CiviCampaign','CiviCampaign',NULL,NULL,'administer CiviCampaign,administer CiviCRM','AND',110,1,NULL,9),(176,1,'Survey Types','Survey Types','civicrm/admin/campaign/surveyType?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,1),(177,1,'Campaign Types','Campaign Types','civicrm/admin/options/campaign_type?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,2),(178,1,'Campaign Status','Campaign Status','civicrm/admin/options/campaign_status?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,3),(179,1,'Engagement Index','Engagement Index','civicrm/admin/options/engagement_index?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,4),(180,1,'CiviCampaign Component Settings','CiviCampaign Component Settings','civicrm/admin/setting/preferences/campaign?reset=1',NULL,'administer CiviCampaign','',175,1,NULL,5),(181,1,'CiviCase','CiviCase',NULL,NULL,'administer CiviCase',NULL,110,1,NULL,10),(182,1,'CiviCase Settings','CiviCase Settings','civicrm/admin/setting/case?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,1),(183,1,'Case Types','Case Types','civicrm/a/#/caseType',NULL,'administer CiviCase',NULL,181,1,NULL,2),(184,1,'Redaction Rules','Redaction Rules','civicrm/admin/options/redaction_rule?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,3),(185,1,'Case Statuses','Case Statuses','civicrm/admin/options/case_status?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,4),(186,1,'Encounter Medium','Encounter Medium','civicrm/admin/options/encounter_medium?reset=1',NULL,'administer CiviCase',NULL,181,1,NULL,5),(187,1,'CiviContribute','CiviContribute',NULL,NULL,'access CiviContribute,administer CiviCRM','AND',110,1,NULL,11),(188,1,'New Contribution Page','New Contribution Page','civicrm/admin/contribute?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,6),(189,1,'Manage Contribution Pages','Manage Contribution Pages','civicrm/admin/contribute?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,7),(190,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=contribute',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,8),(191,1,'Premiums (Thank-you Gifts)','Premiums','civicrm/admin/contribute/managePremiums?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,9),(192,1,'Financial Types','Financial Types','civicrm/admin/financial/financialType?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,10),(193,1,'Financial Accounts','Financial Accounts','civicrm/admin/financial/financialAccount?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,11),(194,1,'Payment Methods','Payment Instruments','civicrm/admin/options/payment_instrument?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,12),(195,1,'Accepted Credit Cards','Accepted Credit Cards','civicrm/admin/options/accept_creditcard?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,13),(196,1,'Soft Credit Types','Soft Credit Types','civicrm/admin/options/soft_credit_type?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,1,14),(197,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,15),(198,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviContribute,administer CiviCRM','AND',187,1,NULL,16),(199,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',187,1,NULL,17),(200,1,'CiviContribute Component Settings','CiviContribute Component Settings','civicrm/admin/setting/preferences/contribute?reset=1',NULL,'administer CiviCRM','',187,1,NULL,18),(201,1,'CiviEvent','CiviEvent',NULL,NULL,'access CiviEvent,administer CiviCRM','AND',110,1,NULL,12),(202,1,'New Event','New Event','civicrm/event/add?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,1),(203,1,'Manage Events','Manage Events','civicrm/event/manage?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,2),(204,1,'Personal Campaign Pages','Personal Campaign Pages','civicrm/admin/pcp?reset=1&page_type=event',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,3),(205,1,'Event Templates','Event Templates','civicrm/admin/eventTemplate?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,4),(206,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,5),(207,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,1,6),(208,1,'Event Types','Event Types','civicrm/admin/options/event_type?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,7),(209,1,'Participant Statuses','Participant Statuses','civicrm/admin/participant_status?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,8),(210,1,'Participant Roles','Participant Roles','civicrm/admin/options/participant_role?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,9),(211,1,'Participant Listing Options','Participant Listing Options','civicrm/admin/options/participant_listing?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,10),(212,1,'Event Name Badge Layouts','Event Name Badge Layouts','civicrm/admin/badgelayout?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,11),(213,1,'Payment Processors','Payment Processors','civicrm/admin/paymentProcessor?reset=1',NULL,'administer CiviCRM','',201,1,NULL,12),(214,1,'CiviEvent Component Settings','CiviEvent Component Settings','civicrm/admin/setting/preferences/event?reset=1',NULL,'access CiviEvent,administer CiviCRM','AND',201,1,NULL,13),(215,1,'CiviGrant','CiviGrant',NULL,NULL,'access CiviGrant,administer CiviCRM','AND',110,1,NULL,13),(216,1,'Grant Types','Grant Types','civicrm/admin/options/grant_type?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,1),(217,1,'Grant Status','Grant Status','civicrm/admin/options/grant_status?reset=1',NULL,'access CiviGrant,administer CiviCRM','AND',215,1,NULL,2),(218,1,'CiviMail','CiviMail',NULL,NULL,'access CiviMail,administer CiviCRM','AND',110,1,NULL,14),(219,1,'Headers, Footers, and Automated Messages','Headers, Footers, and Automated Messages','civicrm/admin/component?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,1),(220,1,'Message Templates','Message Templates','civicrm/admin/messageTemplates?reset=1',NULL,'administer CiviCRM','',218,1,NULL,2),(221,1,'From Email Addresses','From Email Addresses','civicrm/admin/options/from_email_address?reset=1',NULL,'administer CiviCRM','',218,1,NULL,3),(222,1,'Mail Accounts','Mail Accounts','civicrm/admin/mailSettings?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,4),(223,1,'Mailer Settings','Mailer Settings','civicrm/admin/mail?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,5),(224,1,'CiviMail Component Settings','CiviMail Component Settings','civicrm/admin/setting/preferences/mailing?reset=1',NULL,'access CiviMail,administer CiviCRM','AND',218,1,NULL,6),(225,1,'CiviMember','CiviMember',NULL,NULL,'access CiviMember,administer CiviCRM','AND',110,1,NULL,15),(226,1,'Membership Types','Membership Types','civicrm/admin/member/membershipType?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,1),(227,1,'Membership Status Rules','Membership Status Rules','civicrm/admin/member/membershipStatus?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,1,2),(228,1,'New Price Set','New Price Set','civicrm/admin/price?reset=1&action=add',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,3),(229,1,'Manage Price Sets','Manage Price Sets','civicrm/admin/price?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,4),(230,1,'CiviMember Component Settings','CiviMember Component Settings','civicrm/admin/setting/preferences/member?reset=1',NULL,'access CiviMember,administer CiviCRM','AND',225,1,NULL,5),(231,1,'CiviReport','CiviReport',NULL,NULL,'access CiviReport,administer CiviCRM','AND',110,1,NULL,16),(232,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',231,1,NULL,1),(233,1,'Create New Report from Template','Create New Report from Template','civicrm/admin/report/template/list?reset=1',NULL,'administer Reports','',231,1,NULL,2),(234,1,'Manage Templates','Manage Templates','civicrm/admin/report/options/report_template?reset=1',NULL,'administer Reports','',231,1,NULL,3),(235,1,'Register Report','Register Report','civicrm/admin/report/register?reset=1',NULL,'administer Reports','',231,1,NULL,4),(236,1,'Support','Support',NULL,'crm-i fa-life-ring',NULL,'',NULL,1,NULL,110),(237,1,'Get started','Get started','https://civicrm.org/get-started?src=iam',NULL,NULL,'AND',236,1,NULL,1),(238,1,'Documentation','Documentation','https://civicrm.org/documentation?src=iam',NULL,NULL,'AND',236,1,NULL,2),(239,1,'Ask a question','Ask a question','https://civicrm.org/ask-a-question?src=iam',NULL,NULL,'AND',236,1,NULL,3),(240,1,'Get expert help','Get expert help','https://civicrm.org/experts?src=iam',NULL,NULL,'AND',236,1,NULL,4),(241,1,'About CiviCRM','About CiviCRM','https://civicrm.org/about?src=iam',NULL,NULL,'AND',236,1,1,5),(242,1,'Register your site','Register your site','https://civicrm.org/register-your-site?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,6),(243,1,'Join CiviCRM','Join CiviCRM','https://civicrm.org/become-a-member?src=iam&sid={sid}',NULL,NULL,'AND',236,1,NULL,7),(244,1,'Developer','Developer',NULL,NULL,'administer CiviCRM','',236,1,1,8),(245,1,'Api Explorer v3','API Explorer','civicrm/api3',NULL,'administer CiviCRM','',244,1,NULL,1),(246,1,'Api Explorer v4','Api Explorer v4','civicrm/api4#/explorer',NULL,'administer CiviCRM','',244,1,NULL,2),(247,1,'Developer Docs','Developer Docs','https://civicrm.org/developer-documentation?src=iam',NULL,'administer CiviCRM','',244,1,NULL,3),(248,1,'Reports','Reports',NULL,'crm-i fa-bar-chart','access CiviReport','',NULL,1,NULL,95),(249,1,'Contact Reports','Contact Reports','civicrm/report/list?compid=99&reset=1',NULL,'administer CiviCRM','',248,1,0,1),(250,1,'Contribution Reports','Contribution Reports','civicrm/report/list?compid=2&reset=1',NULL,'access CiviContribute','',248,1,0,2),(251,1,'Pledge Reports','Pledge Reports','civicrm/report/list?compid=6&reset=1',NULL,'access CiviPledge','',248,1,0,3),(252,1,'Event Reports','Event Reports','civicrm/report/list?compid=1&reset=1',NULL,'access CiviEvent','',248,1,0,4),(253,1,'Mailing Reports','Mailing Reports','civicrm/report/list?compid=4&reset=1',NULL,'access CiviMail','',248,1,0,5),(254,1,'Membership Reports','Membership Reports','civicrm/report/list?compid=3&reset=1',NULL,'access CiviMember','',248,1,0,6),(255,1,'Campaign Reports','Campaign Reports','civicrm/report/list?compid=9&reset=1',NULL,'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts','OR',248,1,0,7),(256,1,'Case Reports','Case Reports','civicrm/report/list?compid=7&reset=1',NULL,'access my cases and activities,access all cases and activities,administer CiviCase','OR',248,1,0,8),(257,1,'Grant Reports','Grant Reports','civicrm/report/list?compid=5&reset=1',NULL,'access CiviGrant','',248,1,0,9),(258,1,'All Reports','All Reports','civicrm/report/list?reset=1',NULL,'access CiviReport','',248,1,1,10),(259,1,'My Reports','My Reports','civicrm/report/list?myreports=1&reset=1',NULL,'access CiviReport','',248,1,1,11),(260,1,'New Student','New Student','civicrm/contact/add?ct=Individual&cst=Student&reset=1',NULL,'add contacts','',16,1,NULL,1),(261,1,'New Parent','New Parent','civicrm/contact/add?ct=Individual&cst=Parent&reset=1',NULL,'add contacts','',16,1,NULL,2),(262,1,'New Staff','New Staff','civicrm/contact/add?ct=Individual&cst=Staff&reset=1',NULL,'add contacts','',16,1,NULL,3),(263,1,'New Team','New Team','civicrm/contact/add?ct=Organization&cst=Team&reset=1',NULL,'add contacts','',18,1,NULL,1),(264,1,'New Sponsor','New Sponsor','civicrm/contact/add?ct=Organization&cst=Sponsor&reset=1',NULL,'add contacts','',18,1,NULL,2); /*!40000 ALTER TABLE `civicrm_navigation` ENABLE KEYS */; UNLOCK TABLES; @@ -1016,7 +1016,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_option_value` WRITE; /*!40000 ALTER TABLE `civicrm_option_value` DISABLE KEYS */; -INSERT INTO `civicrm_option_value` (`id`, `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `domain_id`, `visibility_id`, `icon`, `color`) VALUES (1,1,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(2,1,'Email','2','Email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(3,1,'Postal Mail','3','Postal Mail',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(4,1,'SMS','4','SMS',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(5,1,'Fax','5','Fax',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(6,2,'Meeting','1','Meeting',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,'fa-slideshare',NULL),(7,2,'Phone Call','2','Phone Call',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,'fa-phone',NULL),(8,2,'Email','3','Email',NULL,1,NULL,3,'Email sent.',0,1,1,NULL,NULL,NULL,'fa-envelope-o',NULL),(9,2,'Outbound SMS','4','SMS',NULL,1,NULL,4,'Text message (SMS) sent.',0,1,1,NULL,NULL,NULL,'fa-mobile',NULL),(10,2,'Event Registration','5','Event Registration',NULL,1,NULL,5,'Online or offline event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(11,2,'Contribution','6','Contribution',NULL,1,NULL,6,'Online or offline contribution.',0,1,1,2,NULL,NULL,NULL,NULL),(12,2,'Membership Signup','7','Membership Signup',NULL,1,NULL,7,'Online or offline membership signup.',0,1,1,3,NULL,NULL,NULL,NULL),(13,2,'Membership Renewal','8','Membership Renewal',NULL,1,NULL,8,'Online or offline membership renewal.',0,1,1,3,NULL,NULL,NULL,NULL),(14,2,'Tell a Friend','9','Tell a Friend',NULL,1,NULL,9,'Send information about a contribution campaign or event to a friend.',0,1,1,NULL,NULL,NULL,NULL,NULL),(15,2,'Pledge Acknowledgment','10','Pledge Acknowledgment',NULL,1,NULL,10,'Send Pledge Acknowledgment.',0,1,1,6,NULL,NULL,NULL,NULL),(16,2,'Pledge Reminder','11','Pledge Reminder',NULL,1,NULL,11,'Send Pledge Reminder.',0,1,1,6,NULL,NULL,NULL,NULL),(17,2,'Inbound Email','12','Inbound Email',NULL,1,NULL,12,'Inbound Email.',0,1,1,NULL,NULL,NULL,NULL,NULL),(18,2,'Open Case','13','Open Case',NULL,0,0,13,'',0,1,1,7,NULL,NULL,'fa-folder-open-o',NULL),(19,2,'Follow up','14','Follow up',NULL,0,0,14,'',0,1,1,7,NULL,NULL,'fa-share-square-o',NULL),(20,2,'Change Case Type','15','Change Case Type',NULL,0,0,15,'',0,1,1,7,NULL,NULL,'fa-random',NULL),(21,2,'Change Case Status','16','Change Case Status',NULL,0,0,16,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(22,2,'Change Case Subject','53','Change Case Subject',NULL,0,0,53,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(23,2,'Change Custom Data','33','Change Custom Data',NULL,0,0,33,'',0,1,1,7,NULL,NULL,'fa-table',NULL),(24,2,'Membership Renewal Reminder','17','Membership Renewal Reminder',NULL,1,NULL,17,'offline membership renewal reminder.',0,1,1,3,NULL,NULL,NULL,NULL),(25,2,'Change Case Start Date','18','Change Case Start Date',NULL,0,0,18,'',0,1,1,7,NULL,NULL,'fa-calendar',NULL),(26,2,'Bulk Email','19','Bulk Email',NULL,1,NULL,19,'Bulk Email Sent.',0,1,1,NULL,NULL,NULL,NULL,NULL),(27,2,'Assign Case Role','20','Assign Case Role',NULL,0,0,20,'',0,1,1,7,NULL,NULL,'fa-user-plus',NULL),(28,2,'Remove Case Role','21','Remove Case Role',NULL,0,0,21,'',0,1,1,7,NULL,NULL,'fa-user-times',NULL),(29,2,'Print/Merge Document','22','Print PDF Letter',NULL,0,NULL,22,'Export letters and other printable documents.',0,1,1,NULL,NULL,NULL,'fa-file-pdf-o',NULL),(30,2,'Merge Case','23','Merge Case',NULL,0,NULL,23,'',0,1,1,7,NULL,NULL,'fa-compress',NULL),(31,2,'Reassigned Case','24','Reassigned Case',NULL,0,NULL,24,'',0,1,1,7,NULL,NULL,'fa-user-circle-o',NULL),(32,2,'Link Cases','25','Link Cases',NULL,0,NULL,25,'',0,1,1,7,NULL,NULL,'fa-link',NULL),(33,2,'Change Case Tags','26','Change Case Tags',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-tags',NULL),(34,2,'Add Client To Case','27','Add Client To Case',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-users',NULL),(35,2,'Survey','28','Survey',NULL,0,0,27,'',0,1,1,9,NULL,NULL,NULL,NULL),(36,2,'Canvass','29','Canvass',NULL,0,0,28,'',0,1,1,9,NULL,NULL,NULL,NULL),(37,2,'PhoneBank','30','PhoneBank',NULL,0,0,29,'',0,1,1,9,NULL,NULL,NULL,NULL),(38,2,'WalkList','31','WalkList',NULL,0,0,30,'',0,1,1,9,NULL,NULL,NULL,NULL),(39,2,'Petition Signature','32','Petition',NULL,0,0,31,'',0,1,1,9,NULL,NULL,NULL,NULL),(40,2,'Mass SMS','34','Mass SMS',NULL,1,NULL,34,'Mass SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(41,2,'Change Membership Status','35','Change Membership Status',NULL,1,NULL,35,'Change Membership Status.',0,1,1,3,NULL,NULL,NULL,NULL),(42,2,'Change Membership Type','36','Change Membership Type',NULL,1,NULL,36,'Change Membership Type.',0,1,1,3,NULL,NULL,NULL,NULL),(43,2,'Cancel Recurring Contribution','37','Cancel Recurring Contribution',NULL,1,0,37,'',0,1,1,2,NULL,NULL,NULL,NULL),(44,2,'Update Recurring Contribution Billing Details','38','Update Recurring Contribution Billing Details',NULL,1,0,38,'',0,1,1,2,NULL,NULL,NULL,NULL),(45,2,'Update Recurring Contribution','39','Update Recurring Contribution',NULL,1,0,39,'',0,1,1,2,NULL,NULL,NULL,NULL),(46,2,'Reminder Sent','40','Reminder Sent',NULL,1,0,40,'',0,1,1,NULL,NULL,NULL,NULL,NULL),(47,2,'Export Accounting Batch','41','Export Accounting Batch',NULL,1,0,41,'Export Accounting Batch',0,1,1,2,NULL,NULL,NULL,NULL),(48,2,'Create Batch','42','Create Batch',NULL,1,0,42,'Create Batch',0,1,1,2,NULL,NULL,NULL,NULL),(49,2,'Edit Batch','43','Edit Batch',NULL,1,0,43,'Edit Batch',0,1,1,2,NULL,NULL,NULL,NULL),(50,2,'SMS delivery','44','SMS delivery',NULL,1,NULL,44,'SMS delivery',0,1,1,NULL,NULL,NULL,NULL,NULL),(51,2,'Inbound SMS','45','Inbound SMS',NULL,1,NULL,45,'Inbound SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(52,2,'Payment','46','Payment',NULL,1,NULL,46,'Additional payment recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(53,2,'Refund','47','Refund',NULL,1,NULL,47,'Refund recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(54,2,'Change Registration','48','Change Registration',NULL,1,NULL,48,'Changes to an existing event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(55,2,'Downloaded Invoice','49','Downloaded Invoice',NULL,1,NULL,49,'Downloaded Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(56,2,'Emailed Invoice','50','Emailed Invoice',NULL,1,NULL,50,'Emailed Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(57,2,'Contact Merged','51','Contact Merged',NULL,1,NULL,51,'Contact Merged',0,1,1,NULL,NULL,NULL,NULL,NULL),(58,2,'Contact Deleted by Merge','52','Contact Deleted by Merge',NULL,1,NULL,52,'Contact was merged into another contact',0,1,1,NULL,NULL,NULL,NULL,NULL),(59,2,'Failed Payment','54','Failed Payment',NULL,1,0,54,'Failed Payment',0,1,1,2,NULL,NULL,NULL,NULL),(60,3,'Female','1','Female',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(61,3,'Male','2','Male',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(62,3,'Other','3','Other',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(63,4,'Yahoo','1','Yahoo',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(64,4,'MSN','2','Msn',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(65,4,'AIM','3','Aim',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(66,4,'GTalk','4','Gtalk',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(67,4,'Jabber','5','Jabber',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(68,4,'Skype','6','Skype',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(69,5,'Sprint','1','Sprint',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(70,5,'Verizon','2','Verizon',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(71,5,'Cingular','3','Cingular',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(72,6,'Mrs.','1','Mrs.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(73,6,'Ms.','2','Ms.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(74,6,'Mr.','3','Mr.',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(75,6,'Dr.','4','Dr.',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(76,7,'Jr.','1','Jr.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(77,7,'Sr.','2','Sr.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(78,7,'II','3','II',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(79,7,'III','4','III',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(80,7,'IV','5','IV',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(81,7,'V','6','V',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(82,7,'VI','7','VI',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(83,7,'VII','8','VII',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(84,8,'Administrator','1','Admin',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(85,8,'Authenticated','2','Auth',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(86,9,'Visa','1','Visa',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(87,9,'MasterCard','2','MasterCard',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(88,9,'Amex','3','Amex',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(89,9,'Discover','4','Discover',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(90,10,'Credit Card','1','Credit Card',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(91,10,'Debit Card','2','Debit Card',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(92,10,'Cash','3','Cash',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(93,10,'Check','4','Check',NULL,0,1,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(94,10,'EFT','5','EFT',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(95,11,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(96,11,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(97,11,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(98,11,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(99,11,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(100,11,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(101,11,'Refunded','7','Refunded',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(102,11,'Partially paid','8','Partially paid',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(103,11,'Pending refund','9','Pending refund',NULL,0,NULL,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(104,11,'Chargeback','10','Chargeback',NULL,0,NULL,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(105,11,'Template','11','Template',NULL,0,NULL,11,'Status for contribution records which represent a template for a recurring contribution rather than an actual contribution. This status is transitional, to ensure that said contributions don\\\'t appear in reports. The is_template field is the preferred way to find and filter these contributions.',0,1,1,NULL,NULL,NULL,NULL,NULL),(106,12,'Waiting Review','1','Waiting Review',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(107,12,'Approved','2','Approved',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(108,12,'Not Approved','3','Not Approved',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(109,13,'Owner chooses whether to receive notifications','1','owner_chooses',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(110,13,'Notifications are sent to ALL owners','2','all_owners',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(111,13,'Notifications are NOT available','3','no_notifications',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(112,14,'Attendee','1','Attendee',NULL,1,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(113,14,'Volunteer','2','Volunteer',NULL,1,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(114,14,'Host','3','Host',NULL,1,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(115,14,'Speaker','4','Speaker',NULL,1,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(116,15,'Conference','1','Conference',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(117,15,'Exhibition','2','Exhibition',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(118,15,'Fundraiser','3','Fundraiser',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(119,15,'Meeting','4','Meeting',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(120,15,'Performance','5','Performance',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(121,15,'Workshop','6','Workshop',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(122,16,'Activities','1','activity',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(123,16,'Relationships','2','rel',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(124,16,'Groups','3','group',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(125,16,'Notes','4','note',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(126,16,'Tags','5','tag',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(127,16,'Change Log','6','log',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(128,16,'Contributions','7','CiviContribute',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(129,16,'Memberships','8','CiviMember',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(130,16,'Events','9','CiviEvent',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(131,16,'Cases','10','CiviCase',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(132,16,'Grants','11','CiviGrant',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(133,16,'Pledges','13','CiviPledge',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(134,16,'Mailings','14','CiviMail',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(135,17,'Show Smart Groups on Demand','1','showondemand',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(136,17,'Always Show Smart Groups','2','alwaysshow',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(137,17,'Hide Smart Groups','3','hide',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(138,18,'Custom Data','1','CustomData',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(139,18,'Address','2','Address',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(140,18,'Communication Preferences','3','CommunicationPreferences',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(141,18,'Notes','4','Notes',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(142,18,'Demographics','5','Demographics',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(143,18,'Tags and Groups','6','TagsAndGroups',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(144,18,'Email','7','Email',NULL,1,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(145,18,'Phone','8','Phone',NULL,1,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(146,18,'Instant Messenger','9','IM',NULL,1,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(147,18,'Open ID','10','OpenID',NULL,1,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(148,18,'Website','11','Website',NULL,1,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(149,18,'Prefix','12','Prefix',NULL,2,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(150,18,'Formal Title','13','Formal Title',NULL,2,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(151,18,'First Name','14','First Name',NULL,2,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(152,18,'Middle Name','15','Middle Name',NULL,2,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(153,18,'Last Name','16','Last Name',NULL,2,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(154,18,'Suffix','17','Suffix',NULL,2,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(155,19,'Address Fields','1','location',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(156,19,'Custom Fields','2','custom',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(157,19,'Activities','3','activity',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(158,19,'Relationships','4','relationship',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(159,19,'Notes','5','notes',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(160,19,'Change Log','6','changeLog',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(161,19,'Contributions','7','CiviContribute',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(162,19,'Memberships','8','CiviMember',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(163,19,'Events','9','CiviEvent',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(164,19,'Cases','10','CiviCase',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(165,19,'Grants','12','CiviGrant',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(166,19,'Demographics','13','demographics',NULL,0,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(167,19,'Pledges','15','CiviPledge',NULL,0,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(168,19,'Contact Type','16','contactType',NULL,0,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(169,19,'Groups','17','groups',NULL,0,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(170,19,'Tags','18','tags',NULL,0,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(171,19,'Mailing','19','CiviMail',NULL,0,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(172,20,'Groups','1','Groups',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(173,20,'Contributions','2','CiviContribute',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(174,20,'Memberships','3','CiviMember',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(175,20,'Events','4','CiviEvent',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(176,20,'My Contacts / Organizations','5','Permissioned Orgs',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(177,20,'Pledges','7','CiviPledge',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(178,20,'Personal Campaign Pages','8','PCP',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(179,20,'Assigned Activities','9','Assigned Activities',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(180,20,'Invoices / Credit Notes','10','Invoices / Credit Notes',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(181,45,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(182,45,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(183,45,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(184,45,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(185,45,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(186,45,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(187,45,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(188,46,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(189,46,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(190,46,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(191,46,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(192,46,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(193,46,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(194,46,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(195,21,'Street Address','1','street_address',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(196,21,'Supplemental Address 1','2','supplemental_address_1',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(197,21,'Supplemental Address 2','3','supplemental_address_2',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(198,21,'Supplemental Address 3','4','supplemental_address_3',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(199,21,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(200,21,'Postal Code','6','postal_code',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(201,21,'Postal Code Suffix','7','postal_code_suffix',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(202,21,'County','8','county',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(203,21,'State/Province','9','state_province',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(204,21,'Country','10','country',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(205,21,'Latitude','11','geo_code_1',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(206,21,'Longitude','12','geo_code_2',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(207,21,'Address Name','13','address_name',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(208,21,'Street Address Parsing','14','street_address_parsing',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(209,22,'Access Control','1','Access Control',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(210,22,'Mailing List','2','Mailing List',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(211,23,'Submitted','1','Submitted',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(212,23,'Eligible','2','Eligible',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(213,23,'Ineligible','3','Ineligible',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(214,23,'Paid','4','Paid',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(215,23,'Awaiting Information','5','Awaiting Information',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(216,23,'Withdrawn','6','Withdrawn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(217,23,'Approved for Payment','7','Approved for Payment',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(218,25,'CRM_Contact_Form_Search_Custom_Sample','1','CRM_Contact_Form_Search_Custom_Sample',NULL,0,NULL,1,'Household Name and State',0,0,1,NULL,NULL,NULL,NULL,NULL),(219,25,'CRM_Contact_Form_Search_Custom_ContributionAggregate','2','CRM_Contact_Form_Search_Custom_ContributionAggregate',NULL,0,NULL,2,'Contribution Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(220,25,'CRM_Contact_Form_Search_Custom_Group','4','CRM_Contact_Form_Search_Custom_Group',NULL,0,NULL,4,'Include / Exclude Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(221,25,'CRM_Contact_Form_Search_Custom_PostalMailing','5','CRM_Contact_Form_Search_Custom_PostalMailing',NULL,0,NULL,5,'Postal Mailing',0,0,1,NULL,NULL,NULL,NULL,NULL),(222,25,'CRM_Contact_Form_Search_Custom_Proximity','6','CRM_Contact_Form_Search_Custom_Proximity',NULL,0,NULL,6,'Proximity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(223,25,'CRM_Contact_Form_Search_Custom_EventAggregate','7','CRM_Contact_Form_Search_Custom_EventAggregate',NULL,0,NULL,7,'Event Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(224,25,'CRM_Contact_Form_Search_Custom_ActivitySearch','8','CRM_Contact_Form_Search_Custom_ActivitySearch',NULL,0,NULL,8,'Activity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(225,25,'CRM_Contact_Form_Search_Custom_PriceSet','9','CRM_Contact_Form_Search_Custom_PriceSet',NULL,0,NULL,9,'Price Set Details for Event Participants',0,0,1,NULL,NULL,NULL,NULL,NULL),(226,25,'CRM_Contact_Form_Search_Custom_ZipCodeRange','10','CRM_Contact_Form_Search_Custom_ZipCodeRange',NULL,0,NULL,10,'Zip Code Range',0,0,1,NULL,NULL,NULL,NULL,NULL),(227,25,'CRM_Contact_Form_Search_Custom_DateAdded','11','CRM_Contact_Form_Search_Custom_DateAdded',NULL,0,NULL,11,'Date Added to CiviCRM',0,0,1,NULL,NULL,NULL,NULL,NULL),(228,25,'CRM_Contact_Form_Search_Custom_MultipleValues','12','CRM_Contact_Form_Search_Custom_MultipleValues',NULL,0,NULL,12,'Custom Group Multiple Values Listing',0,0,1,NULL,NULL,NULL,NULL,NULL),(229,25,'CRM_Contact_Form_Search_Custom_ContribSYBNT','13','CRM_Contact_Form_Search_Custom_ContribSYBNT',NULL,0,NULL,13,'Contributions made in Year X and not Year Y',0,0,1,NULL,NULL,NULL,NULL,NULL),(230,25,'CRM_Contact_Form_Search_Custom_TagContributions','14','CRM_Contact_Form_Search_Custom_TagContributions',NULL,0,NULL,14,'Find Contribution Amounts by Tag',0,0,1,NULL,NULL,NULL,NULL,NULL),(231,25,'CRM_Contact_Form_Search_Custom_FullText','15','CRM_Contact_Form_Search_Custom_FullText',NULL,0,NULL,15,'Full-text Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(232,41,'Constituent Report (Summary)','contact/summary','CRM_Report_Form_Contact_Summary',NULL,0,NULL,1,'Provides a list of address and telephone information for constituent records in your system.',0,0,1,NULL,NULL,NULL,NULL,NULL),(233,41,'Constituent Report (Detail)','contact/detail','CRM_Report_Form_Contact_Detail',NULL,0,NULL,2,'Provides contact-related information on contributions, memberships, events and activities.',0,0,1,NULL,NULL,NULL,NULL,NULL),(234,41,'Activity Details Report','activity','CRM_Report_Form_Activity',NULL,0,NULL,3,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)',0,0,1,NULL,NULL,NULL,NULL,NULL),(235,41,'Walk / Phone List Report','walklist','CRM_Report_Form_Walklist_Walklist',NULL,0,NULL,4,'Provides a detailed report for your walk/phonelist for targeted contacts',0,0,0,NULL,NULL,NULL,NULL,NULL),(236,41,'Current Employer Report','contact/currentEmployer','CRM_Report_Form_Contact_CurrentEmployer',NULL,0,NULL,5,'Provides detail list of employer employee relationships along with employment details Ex Join Date',0,0,1,NULL,NULL,NULL,NULL,NULL),(237,41,'Contribution Summary Report','contribute/summary','CRM_Report_Form_Contribute_Summary',NULL,0,NULL,6,'Groups and totals contributions by criteria including contact, time period, financial type, contributor location, etc.',0,0,1,2,NULL,NULL,NULL,NULL),(238,41,'Contribution Detail Report','contribute/detail','CRM_Report_Form_Contribute_Detail',NULL,0,NULL,7,'Lists specific contributions by criteria including contact, time period, financial type, contributor location, etc. Contribution summary report points to this report for contribution details.',0,0,1,2,NULL,NULL,NULL,NULL),(239,41,'Repeat Contributions Report','contribute/repeat','CRM_Report_Form_Contribute_Repeat',NULL,0,NULL,8,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.',0,0,1,2,NULL,NULL,NULL,NULL),(240,41,'Contributions by Organization Report','contribute/organizationSummary','CRM_Report_Form_Contribute_OrganizationSummary',NULL,0,NULL,9,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.',0,0,1,2,NULL,NULL,NULL,NULL),(241,41,'Contributions by Household Report','contribute/householdSummary','CRM_Report_Form_Contribute_HouseholdSummary',NULL,0,NULL,10,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.',0,0,1,2,NULL,NULL,NULL,NULL),(242,41,'Top Donors Report','contribute/topDonor','CRM_Report_Form_Contribute_TopDonor',NULL,0,NULL,11,'Provides a list of the top donors during a time period you define. You can include as many donors as you want (for example, top 100 of your donors).',0,0,1,2,NULL,NULL,NULL,NULL),(243,41,'SYBUNT Report','contribute/sybunt','CRM_Report_Form_Contribute_Sybunt',NULL,0,NULL,12,'SYBUNT means some year(s) but not this year. Provides a list of constituents who donated at some time in the history of your organization but did not donate during the time period you specify.',0,0,1,2,NULL,NULL,NULL,NULL),(244,41,'LYBUNT Report','contribute/lybunt','CRM_Report_Form_Contribute_Lybunt',NULL,0,NULL,13,'LYBUNT means last year but not this year. Provides a list of constituents who donated last year but did not donate during the time period you specify as the current year.',0,0,1,2,NULL,NULL,NULL,NULL),(245,41,'Soft Credit Report','contribute/softcredit','CRM_Report_Form_Contribute_SoftCredit',NULL,0,NULL,14,'Shows contributions made by contacts that have been soft-credited to other contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(246,41,'Membership Report (Summary)','member/summary','CRM_Report_Form_Member_Summary',NULL,0,NULL,15,'Provides a summary of memberships by type and join date.',0,0,1,3,NULL,NULL,NULL,NULL),(247,41,'Membership Report (Detail)','member/detail','CRM_Report_Form_Member_Detail',NULL,0,NULL,16,'Provides a list of members along with their membership status and membership details (Join Date, Start Date, End Date). Can also display contributions (payments) associated with each membership.',0,0,1,3,NULL,NULL,NULL,NULL),(248,41,'Membership Report (Lapsed)','member/lapse','CRM_Report_Form_Member_Lapse',NULL,0,NULL,17,'Provides a list of memberships that lapsed or will lapse before the date you specify.',0,0,1,3,NULL,NULL,NULL,NULL),(249,41,'Event Participant Report (List)','event/participantListing','CRM_Report_Form_Event_ParticipantListing',NULL,0,NULL,18,'Provides lists of participants for an event.',0,0,1,1,NULL,NULL,NULL,NULL),(250,41,'Event Income Report (Summary)','event/summary','CRM_Report_Form_Event_Summary',NULL,0,NULL,19,'Provides an overview of event income. You can include key information such as event ID, registration, attendance, and income generated to help you determine the success of an event.',0,0,1,1,NULL,NULL,NULL,NULL),(251,41,'Event Income Report (Detail)','event/income','CRM_Report_Form_Event_Income',NULL,0,NULL,20,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.',0,0,1,1,NULL,NULL,NULL,NULL),(252,41,'Pledge Detail Report','pledge/detail','CRM_Report_Form_Pledge_Detail',NULL,0,NULL,21,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.',0,0,1,6,NULL,NULL,NULL,NULL),(253,41,'Pledged but not Paid Report','pledge/pbnp','CRM_Report_Form_Pledge_Pbnp',NULL,0,NULL,22,'Pledged but not Paid Report',0,0,1,6,NULL,NULL,NULL,NULL),(254,41,'Relationship Report','contact/relationship','CRM_Report_Form_Contact_Relationship',NULL,0,NULL,23,'Relationship Report',0,0,1,NULL,NULL,NULL,NULL,NULL),(255,41,'Case Summary Report','case/summary','CRM_Report_Form_Case_Summary',NULL,0,NULL,24,'Provides a summary of cases and their duration by date range, status, staff member and / or case role.',0,0,1,7,NULL,NULL,NULL,NULL),(256,41,'Case Time Spent Report','case/timespent','CRM_Report_Form_Case_TimeSpent',NULL,0,NULL,25,'Aggregates time spent on case and / or non-case activities by activity type and contact.',0,0,1,7,NULL,NULL,NULL,NULL),(257,41,'Contact Demographics Report','case/demographics','CRM_Report_Form_Case_Demographics',NULL,0,NULL,26,'Demographic breakdown for case clients (and or non-case contacts) in your database. Includes custom contact fields.',0,0,1,7,NULL,NULL,NULL,NULL),(258,41,'Database Log Report','contact/log','CRM_Report_Form_Contact_Log',NULL,0,NULL,27,'Log of contact and activity records created or updated in a given date range.',0,0,1,NULL,NULL,NULL,NULL,NULL),(259,41,'Activity Summary Report','activitySummary','CRM_Report_Form_ActivitySummary',NULL,0,NULL,28,'Shows activity statistics by type / date',0,0,1,NULL,NULL,NULL,NULL,NULL),(260,41,'Bookkeeping Transactions Report','contribute/bookkeeping','CRM_Report_Form_Contribute_Bookkeeping',NULL,0,0,29,'Shows Bookkeeping Transactions Report',0,0,1,2,NULL,NULL,NULL,NULL),(261,41,'Grant Report (Detail)','grant/detail','CRM_Report_Form_Grant_Detail',NULL,0,0,30,'Grant Report Detail',0,0,1,5,NULL,NULL,NULL,NULL),(262,41,'Participant list Count Report','event/participantlist','CRM_Report_Form_Event_ParticipantListCount',NULL,0,0,31,'Shows the Participant list with Participant Count.',0,0,1,1,NULL,NULL,NULL,NULL),(263,41,'Income Count Summary Report','event/incomesummary','CRM_Report_Form_Event_IncomeCountSummary',NULL,0,0,32,'Shows the Income Summary of events with Count.',0,0,1,1,NULL,NULL,NULL,NULL),(264,41,'Case Detail Report','case/detail','CRM_Report_Form_Case_Detail',NULL,0,0,33,'Case Details',0,0,1,7,NULL,NULL,NULL,NULL),(265,41,'Mail Bounce Report','Mailing/bounce','CRM_Report_Form_Mailing_Bounce',NULL,0,NULL,34,'Bounce Report for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(266,41,'Mail Summary Report','Mailing/summary','CRM_Report_Form_Mailing_Summary',NULL,0,NULL,35,'Summary statistics for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(267,41,'Mail Opened Report','Mailing/opened','CRM_Report_Form_Mailing_Opened',NULL,0,NULL,36,'Display contacts who opened emails from a mailing',0,0,1,4,NULL,NULL,NULL,NULL),(268,41,'Mail Click-Through Report','Mailing/clicks','CRM_Report_Form_Mailing_Clicks',NULL,0,NULL,37,'Display clicks from each mailing',0,0,1,4,NULL,NULL,NULL,NULL),(269,41,'Contact Logging Report (Summary)','logging/contact/summary','CRM_Report_Form_Contact_LoggingSummary',NULL,0,NULL,38,'Contact modification report for the logging infrastructure (summary).',0,0,0,NULL,NULL,NULL,NULL,NULL),(270,41,'Contact Logging Report (Detail)','logging/contact/detail','CRM_Report_Form_Contact_LoggingDetail',NULL,0,NULL,39,'Contact modification report for the logging infrastructure (detail).',0,0,0,NULL,NULL,NULL,NULL,NULL),(271,41,'Grant Report (Statistics)','grant/statistics','CRM_Report_Form_Grant_Statistics',NULL,0,NULL,42,'Shows statistics for Grants.',0,0,1,5,NULL,NULL,NULL,NULL),(272,41,'Survey Report (Detail)','survey/detail','CRM_Report_Form_Campaign_SurveyDetails',NULL,0,NULL,43,'Detailed report for canvassing, phone-banking, walk lists or other surveys.',0,0,1,9,NULL,NULL,NULL,NULL),(273,41,'Personal Campaign Page Report','contribute/pcp','CRM_Report_Form_Contribute_PCP',NULL,0,NULL,44,'Summarizes amount raised and number of contributors for each Personal Campaign Page.',0,0,1,2,NULL,NULL,NULL,NULL),(274,41,'Pledge Summary Report','pledge/summary','CRM_Report_Form_Pledge_Summary',NULL,0,NULL,45,'Groups and totals pledges by criteria including contact, time period, pledge status, location, etc.',0,0,1,6,NULL,NULL,NULL,NULL),(275,41,'Contribution Aggregate by Relationship','contribute/history','CRM_Report_Form_Contribute_History',NULL,0,NULL,46,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(276,41,'Mail Detail Report','mailing/detail','CRM_Report_Form_Mailing_Detail',NULL,0,NULL,47,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.',0,0,1,4,NULL,NULL,NULL,NULL),(277,41,'Contribution and Membership Details','member/contributionDetail','CRM_Report_Form_Member_ContributionDetail',NULL,0,NULL,48,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.',0,0,1,3,NULL,NULL,NULL,NULL),(278,41,'Recurring Contributions Report','contribute/recur','CRM_Report_Form_Contribute_Recur',NULL,0,NULL,49,'Provides information about the status of recurring contributions',0,0,1,2,NULL,NULL,NULL,NULL),(279,41,'Recurring Contributions Summary','contribute/recursummary','CRM_Report_Form_Contribute_RecurSummary',NULL,0,NULL,49,'Provides simple summary for each payment instrument for which there are recurring contributions (e.g. Credit Card, Standing Order, Direct Debit, etc., NULL), showing within a given date range.',0,0,1,2,NULL,NULL,NULL,NULL),(280,41,'Deferred Revenue Details','contribute/deferredrevenue','CRM_Report_Form_Contribute_DeferredRevenue',NULL,0,NULL,50,'Deferred Revenue Details Report',0,0,1,2,NULL,NULL,NULL,NULL),(281,26,'Scheduled','1','Scheduled',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(282,26,'Completed','2','Completed',NULL,1,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(283,26,'Cancelled','3','Cancelled',NULL,2,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(284,26,'Left Message','4','Left Message',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(285,26,'Unreachable','5','Unreachable',NULL,2,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(286,26,'Not Required','6','Not Required',NULL,2,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(287,26,'Available','7','Available',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(288,26,'No-show','8','No_show',NULL,2,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(289,28,'Ongoing','1','Open','Opened',0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(290,28,'Resolved','2','Closed','Closed',0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(291,28,'Urgent','3','Urgent','Opened',0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(292,29,'Name Only','1','Name Only',NULL,0,0,1,'CRM_Event_Page_ParticipantListing_Name',0,1,1,NULL,NULL,NULL,NULL,NULL),(293,29,'Name and Email','2','Name and Email',NULL,0,0,2,'CRM_Event_Page_ParticipantListing_NameAndEmail',0,1,1,NULL,NULL,NULL,NULL,NULL),(294,29,'Name, Status and Register Date','3','Name, Status and Register Date',NULL,0,0,3,'CRM_Event_Page_ParticipantListing_NameStatusAndDate',0,1,1,NULL,NULL,NULL,NULL,NULL),(295,30,'jpg','1','jpg',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(296,30,'jpeg','2','jpeg',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(297,30,'png','3','png',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(298,30,'gif','4','gif',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(299,30,'txt','5','txt',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(300,30,'pdf','6','pdf',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(301,30,'doc','7','doc',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(302,30,'xls','8','xls',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(303,30,'rtf','9','rtf',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(304,30,'csv','10','csv',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(305,30,'ppt','11','ppt',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(306,30,'docx','12','docx',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(307,30,'xlsx','13','xlsx',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(308,30,'odt','14','odt',NULL,0,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(309,30,'ics','15','ics',NULL,0,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(310,30,'pptx','16','pptx',NULL,0,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(311,33,'Textarea','1','Textarea',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(312,33,'CKEditor','2','CKEditor',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(313,32,'Search Builder','1','Search Builder',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(314,32,'Import Contact','2','Import Contact',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(315,32,'Import Activity','3','Import Activity',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(316,32,'Import Contribution','4','Import Contribution',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(317,32,'Import Membership','5','Import Membership',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(318,32,'Import Participant','6','Import Participant',NULL,0,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(319,32,'Export Contact','7','Export Contact',NULL,0,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(320,32,'Export Contribution','8','Export Contribution',NULL,0,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(321,32,'Export Membership','9','Export Membership',NULL,0,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(322,32,'Export Participant','10','Export Participant',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(323,32,'Export Pledge','11','Export Pledge',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(324,32,'Export Case','12','Export Case',NULL,0,0,12,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(325,32,'Export Grant','13','Export Grant',NULL,0,0,13,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(326,32,'Export Activity','14','Export Activity',NULL,0,0,14,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(327,34,'day','day','day',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(328,34,'week','week','week',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(329,34,'month','month','month',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(330,34,'year','year','year',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(331,35,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(332,35,'Mobile','2','Mobile',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(333,35,'Fax','3','Fax',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(334,35,'Pager','4','Pager',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(335,35,'Voicemail','5','Voicemail',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(336,36,'Participant Role','1','ParticipantRole',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(337,36,'Participant Event Name','2','ParticipantEventName',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(338,36,'Participant Event Type','3','ParticipantEventType',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(339,37,'Public','1','public',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(340,37,'Admin','2','admin',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(341,38,'IMAP','1','IMAP',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(342,38,'Maildir','2','Maildir',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(343,38,'POP3','3','POP3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(344,38,'Localdir','4','Localdir',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(345,39,'Urgent','1','Urgent',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(346,39,'Normal','2','Normal',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(347,39,'Low','3','Low',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(348,40,'Vancouver','city_','city_',NULL,0,NULL,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(349,40,'/(19|20)(\\d{2})-(\\d{1,2})-(\\d{1,2})/','date_','date_',NULL,1,NULL,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(350,42,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(351,42,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(352,42,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(353,42,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(354,42,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(355,43,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(356,43,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(357,43,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(358,43,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(359,43,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(360,44,'{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}','1','}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(361,44,'{contact.household_name}','2','{contact.household_name}',NULL,2,1,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(362,44,'{contact.organization_name}','3','{contact.organization_name}',NULL,3,1,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(363,44,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(364,47,'Work','1','Work',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(365,47,'Main','2','Main',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(366,47,'Facebook','3','Facebook',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(367,47,'Instagram','5','Instagram',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(368,47,'LinkedIn','6','LinkedIn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(369,47,'MySpace','7','MySpace',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(370,47,'Pinterest','8','Pinterest',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(371,47,'SnapChat','9','SnapChat',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(372,47,'Tumblr','10','Tumblr',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(373,47,'Twitter','11','Twitter',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(374,47,'Vine','12','Vine ',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(375,48,'Contacts','civicrm_contact','Contacts',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(376,48,'Activities','civicrm_activity','Activities',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(377,48,'Cases','civicrm_case','Cases',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(378,48,'Attachments','civicrm_file','Attachements',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(379,49,'USD ($)','USD','USD',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(380,50,'Name Only','1','CRM_Event_Badge_Simple',NULL,0,0,1,'Simple Event Name Badge',0,1,1,NULL,NULL,NULL,NULL,NULL),(381,50,'Name Tent','2','CRM_Event_Badge_NameTent',NULL,0,0,2,'Name Tent',0,1,1,NULL,NULL,NULL,NULL,NULL),(382,50,'With Logo','3','CRM_Event_Badge_Logo',NULL,0,0,3,'You can set your own background image',0,1,1,NULL,NULL,NULL,NULL,NULL),(383,50,'5395 with Logo','4','CRM_Event_Badge_Logo5395',NULL,0,0,4,'Avery 5395 compatible labels with logo (4 up by 2, 59.2mm x 85.7mm)',0,1,1,NULL,NULL,NULL,NULL,NULL),(384,51,'None','0','None',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(385,51,'Author Only','1','Author Only',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(386,52,'Direct Mail','1','Direct Mail',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(387,52,'Referral Program','2','Referral Program',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(388,52,'Constituent Engagement','3','Constituent Engagement',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(389,53,'Planned','1','Planned',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(390,53,'In Progress','2','In Progress',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(391,53,'Completed','3','Completed',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(392,53,'Cancelled','4','Cancelled',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(393,56,'1','1','1',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(394,56,'2','2','2',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(395,56,'3','3','3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(396,56,'4','4','4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(397,56,'5','5','5',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(398,58,'Letter','{\"metric\":\"in\",\"width\":8.5,\"height\":11}','letter',NULL,NULL,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(399,58,'Legal','{\"metric\":\"in\",\"width\":8.5,\"height\":14}','legal',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(400,58,'Ledger','{\"metric\":\"in\",\"width\":17,\"height\":11}','ledger',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(401,58,'Tabloid','{\"metric\":\"in\",\"width\":11,\"height\":17}','tabloid',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(402,58,'Executive','{\"metric\":\"in\",\"width\":7.25,\"height\":10.5}','executive',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(403,58,'Folio','{\"metric\":\"in\",\"width\":8.5,\"height\":13}','folio',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(404,58,'Envelope #9','{\"metric\":\"pt\",\"width\":638.93,\"height\":278.93}','envelope-9',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(405,58,'Envelope #10','{\"metric\":\"pt\",\"width\":684,\"height\":297}','envelope-10',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(406,58,'Envelope #11','{\"metric\":\"pt\",\"width\":747,\"height\":324}','envelope-11',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(407,58,'Envelope #12','{\"metric\":\"pt\",\"width\":792,\"height\":342}','envelope-12',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(408,58,'Envelope #14','{\"metric\":\"pt\",\"width\":828,\"height\":360}','envelope-14',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(409,58,'Envelope ISO B4','{\"metric\":\"pt\",\"width\":1000.63,\"height\":708.66}','envelope-b4',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(410,58,'Envelope ISO B5','{\"metric\":\"pt\",\"width\":708.66,\"height\":498.9}','envelope-b5',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(411,58,'Envelope ISO B6','{\"metric\":\"pt\",\"width\":498.9,\"height\":354.33}','envelope-b6',NULL,NULL,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(412,58,'Envelope ISO C3','{\"metric\":\"pt\",\"width\":1298.27,\"height\":918.42}','envelope-c3',NULL,NULL,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(413,58,'Envelope ISO C4','{\"metric\":\"pt\",\"width\":918.42,\"height\":649.13}','envelope-c4',NULL,NULL,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(414,58,'Envelope ISO C5','{\"metric\":\"pt\",\"width\":649.13,\"height\":459.21}','envelope-c5',NULL,NULL,0,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(415,58,'Envelope ISO C6','{\"metric\":\"pt\",\"width\":459.21,\"height\":323.15}','envelope-c6',NULL,NULL,0,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(416,58,'Envelope ISO DL','{\"metric\":\"pt\",\"width\":623.622,\"height\":311.811}','envelope-dl',NULL,NULL,0,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(417,58,'ISO A0','{\"metric\":\"pt\",\"width\":2383.94,\"height\":3370.39}','a0',NULL,NULL,0,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(418,58,'ISO A1','{\"metric\":\"pt\",\"width\":1683.78,\"height\":2383.94}','a1',NULL,NULL,0,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(419,58,'ISO A2','{\"metric\":\"pt\",\"width\":1190.55,\"height\":1683.78}','a2',NULL,NULL,0,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(420,58,'ISO A3','{\"metric\":\"pt\",\"width\":841.89,\"height\":1190.55}','a3',NULL,NULL,0,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(421,58,'ISO A4','{\"metric\":\"pt\",\"width\":595.28,\"height\":841.89}','a4',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(422,58,'ISO A5','{\"metric\":\"pt\",\"width\":419.53,\"height\":595.28}','a5',NULL,NULL,0,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(423,58,'ISO A6','{\"metric\":\"pt\",\"width\":297.64,\"height\":419.53}','a6',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(424,58,'ISO A7','{\"metric\":\"pt\",\"width\":209.76,\"height\":297.64}','a7',NULL,NULL,0,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(425,58,'ISO A8','{\"metric\":\"pt\",\"width\":147.4,\"height\":209.76}','a8',NULL,NULL,0,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(426,58,'ISO A9','{\"metric\":\"pt\",\"width\":104.88,\"height\":147.4}','a9',NULL,NULL,0,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(427,58,'ISO A10','{\"metric\":\"pt\",\"width\":73.7,\"height\":104.88}','a10',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(428,58,'ISO B0','{\"metric\":\"pt\",\"width\":2834.65,\"height\":4008.19}','b0',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(429,58,'ISO B1','{\"metric\":\"pt\",\"width\":2004.09,\"height\":2834.65}','b1',NULL,NULL,0,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(430,58,'ISO B2','{\"metric\":\"pt\",\"width\":1417.32,\"height\":2004.09}','b2',NULL,NULL,0,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(431,58,'ISO B3','{\"metric\":\"pt\",\"width\":1000.63,\"height\":1417.32}','b3',NULL,NULL,0,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(432,58,'ISO B4','{\"metric\":\"pt\",\"width\":708.66,\"height\":1000.63}','b4',NULL,NULL,0,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(433,58,'ISO B5','{\"metric\":\"pt\",\"width\":498.9,\"height\":708.66}','b5',NULL,NULL,0,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(434,58,'ISO B6','{\"metric\":\"pt\",\"width\":354.33,\"height\":498.9}','b6',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(435,58,'ISO B7','{\"metric\":\"pt\",\"width\":249.45,\"height\":354.33}','b7',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(436,58,'ISO B8','{\"metric\":\"pt\",\"width\":175.75,\"height\":249.45}','b8',NULL,NULL,0,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(437,58,'ISO B9','{\"metric\":\"pt\",\"width\":124.72,\"height\":175.75}','b9',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(438,58,'ISO B10','{\"metric\":\"pt\",\"width\":87.87,\"height\":124.72}','b10',NULL,NULL,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(439,58,'ISO C0','{\"metric\":\"pt\",\"width\":2599.37,\"height\":3676.54}','c0',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(440,58,'ISO C1','{\"metric\":\"pt\",\"width\":1836.85,\"height\":2599.37}','c1',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(441,58,'ISO C2','{\"metric\":\"pt\",\"width\":1298.27,\"height\":1836.85}','c2',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(442,58,'ISO C3','{\"metric\":\"pt\",\"width\":918.43,\"height\":1298.27}','c3',NULL,NULL,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(443,58,'ISO C4','{\"metric\":\"pt\",\"width\":649.13,\"height\":918.43}','c4',NULL,NULL,0,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(444,58,'ISO C5','{\"metric\":\"pt\",\"width\":459.21,\"height\":649.13}','c5',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(445,58,'ISO C6','{\"metric\":\"pt\",\"width\":323.15,\"height\":459.21}','c6',NULL,NULL,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(446,58,'ISO C7','{\"metric\":\"pt\",\"width\":229.61,\"height\":323.15}','c7',NULL,NULL,0,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(447,58,'ISO C8','{\"metric\":\"pt\",\"width\":161.57,\"height\":229.61}','c8',NULL,NULL,0,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(448,58,'ISO C9','{\"metric\":\"pt\",\"width\":113.39,\"height\":161.57}','c9',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(449,58,'ISO C10','{\"metric\":\"pt\",\"width\":79.37,\"height\":113.39}','c10',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(450,58,'ISO RA0','{\"metric\":\"pt\",\"width\":2437.8,\"height\":3458.27}','ra0',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(451,58,'ISO RA1','{\"metric\":\"pt\",\"width\":1729.13,\"height\":2437.8}','ra1',NULL,NULL,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(452,58,'ISO RA2','{\"metric\":\"pt\",\"width\":1218.9,\"height\":1729.13}','ra2',NULL,NULL,0,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(453,58,'ISO RA3','{\"metric\":\"pt\",\"width\":864.57,\"height\":1218.9}','ra3',NULL,NULL,0,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(454,58,'ISO RA4','{\"metric\":\"pt\",\"width\":609.45,\"height\":864.57}','ra4',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(455,58,'ISO SRA0','{\"metric\":\"pt\",\"width\":2551.18,\"height\":3628.35}','sra0',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(456,58,'ISO SRA1','{\"metric\":\"pt\",\"width\":1814.17,\"height\":2551.18}','sra1',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(457,58,'ISO SRA2','{\"metric\":\"pt\",\"width\":1275.59,\"height\":1814.17}','sra2',NULL,NULL,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(458,58,'ISO SRA3','{\"metric\":\"pt\",\"width\":907.09,\"height\":1275.59}','sra3',NULL,NULL,0,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(459,58,'ISO SRA4','{\"metric\":\"pt\",\"width\":637.8,\"height\":907.09}','sra4',NULL,NULL,0,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(460,61,'Activity Assignees','1','Activity Assignees',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(461,61,'Activity Source','2','Activity Source',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(462,61,'Activity Targets','3','Activity Targets',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(463,71,'Asset','1','Asset',NULL,0,0,1,'Things you own',0,1,1,2,NULL,NULL,NULL,NULL),(464,71,'Liability','2','Liability',NULL,0,0,2,'Things you owe, like a grant still to be disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(465,71,'Revenue','3','Revenue',NULL,0,1,3,'Income from contributions and sales of tickets and memberships',0,1,1,2,NULL,NULL,NULL,NULL),(466,71,'Cost of Sales','4','Cost of Sales',NULL,0,0,4,'Costs incurred to get revenue, e.g. premiums for donations, dinner for a fundraising dinner ticket',0,1,1,2,NULL,NULL,NULL,NULL),(467,71,'Expenses','5','Expenses',NULL,0,0,5,'Things that are paid for that are consumable, e.g. grants disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(468,62,'Income Account is','1','Income Account is',NULL,0,1,1,'Income Account is',0,1,1,2,NULL,NULL,NULL,NULL),(469,62,'Credit/Contra Revenue Account is','2','Credit/Contra Revenue Account is',NULL,0,0,2,'Credit/Contra Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(470,62,'Accounts Receivable Account is','3','Accounts Receivable Account is',NULL,0,0,3,'Accounts Receivable Account is',0,1,1,2,NULL,NULL,NULL,NULL),(471,62,'Credit Liability Account is','4','Credit Liability Account is',NULL,0,0,4,'Credit Liability Account is',0,1,0,2,NULL,NULL,NULL,NULL),(472,62,'Expense Account is','5','Expense Account is',NULL,0,0,5,'Expense Account is',0,1,1,2,NULL,NULL,NULL,NULL),(473,62,'Asset Account is','6','Asset Account is',NULL,0,0,6,'Asset Account is',0,1,1,2,NULL,NULL,NULL,NULL),(474,62,'Cost of Sales Account is','7','Cost of Sales Account is',NULL,0,0,7,'Cost of Sales Account is',0,1,1,2,NULL,NULL,NULL,NULL),(475,62,'Premiums Inventory Account is','8','Premiums Inventory Account is',NULL,0,0,8,'Premiums Inventory Account is',0,1,1,2,NULL,NULL,NULL,NULL),(476,62,'Discounts Account is','9','Discounts Account is',NULL,0,0,9,'Discounts Account is',0,1,1,2,NULL,NULL,NULL,NULL),(477,62,'Sales Tax Account is','10','Sales Tax Account is',NULL,0,0,10,'Sales Tax Account is',0,1,1,2,NULL,NULL,NULL,NULL),(478,62,'Chargeback Account is','11','Chargeback Account is',NULL,0,0,11,'Chargeback Account is',0,1,1,2,NULL,NULL,NULL,NULL),(479,62,'Deferred Revenue Account is','12','Deferred Revenue Account is',NULL,0,0,12,'Deferred Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(480,63,'Participant Role','1','participant_role',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(481,64,'Morning Sessions','1','Morning Sessions',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(482,64,'Evening Sessions','2','Evening Sessions',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(483,65,'Contribution','1','Contribution',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(484,65,'Membership','2','Membership',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(485,65,'Pledge Payment','3','Pledge Payment',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(486,67,'Open','1','Open',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(487,67,'Closed','2','Closed',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(488,67,'Data Entry','3','Data Entry',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(489,67,'Reopened','4','Reopened',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(490,67,'Exported','5','Exported',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(491,66,'Manual Batch','1','Manual Batch',NULL,0,0,1,'Manual Batch',0,1,1,2,NULL,NULL,NULL,NULL),(492,66,'Automatic Batch','2','Automatic Batch',NULL,0,0,2,'Automatic Batch',0,1,1,2,NULL,NULL,NULL,NULL),(493,72,'Paid','1','Paid',NULL,0,0,1,'Paid',0,1,1,2,NULL,NULL,NULL,NULL),(494,72,'Partially paid','2','Partially paid',NULL,0,0,2,'Partially paid',0,1,1,2,NULL,NULL,NULL,NULL),(495,72,'Unpaid','3','Unpaid',NULL,0,0,1,'Unpaid',0,1,1,2,NULL,NULL,NULL,NULL),(496,68,'http','1','http',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(497,68,'xml','2','xml',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(498,68,'smtp','3','smtp',NULL,NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(499,70,'Renewal Reminder (non-auto-renew memberships only)','1','Renewal Reminder (non-auto-renew memberships only)',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(500,70,'Auto-renew Memberships Only','2','Auto-renew Memberships Only',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(501,70,'Reminder for Both','3','Reminder for Both',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(502,73,'Event Badge','1','Event Badge',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(503,74,'Avery 5395','{\"name\":\"Avery 5395\",\"paper-size\":\"a4\",\"metric\":\"mm\",\"lMargin\":15,\"tMargin\":26,\"NX\":2,\"NY\":4,\"SpaceX\":10,\"SpaceY\":5,\"width\":83,\"height\":57,\"font-size\":12,\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-style\":\"\",\"lPadding\":3,\"tPadding\":3}','Avery 5395',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(504,74,'A6 Badge Portrait 150x106','{\"paper-size\":\"a4\",\"orientation\":\"landscape\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":1,\"metric\":\"mm\",\"lMargin\":25,\"tMargin\":27,\"SpaceX\":0,\"SpaceY\":35,\"width\":106,\"height\":150,\"lPadding\":5,\"tPadding\":5}','A6 Badge Portrait 150x106',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(505,74,'Fattorini Name Badge 100x65','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":4,\"metric\":\"mm\",\"lMargin\":6,\"tMargin\":19,\"SpaceX\":0,\"SpaceY\":0,\"width\":100,\"height\":65,\"lPadding\":0,\"tPadding\":0}','Fattorini Name Badge 100x65',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(506,74,'Hanging Badge 3-3/4\" x 4-3\"/4','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":2,\"metric\":\"mm\",\"lMargin\":10,\"tMargin\":28,\"SpaceX\":0,\"SpaceY\":0,\"width\":96,\"height\":121,\"lPadding\":5,\"tPadding\":5}','Hanging Badge 3-3/4\" x 4-3\"/4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(507,60,'Avery 3475','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":10,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":0,\"tMargin\":5,\"NX\":3,\"NY\":8,\"SpaceX\":0,\"SpaceY\":0,\"width\":70,\"height\":36,\"lPadding\":5.08,\"tPadding\":5.08}','3475','Avery',NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(508,60,'Avery 5160','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.21975,\"tMargin\":0.5,\"NX\":3,\"NY\":10,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":2.5935,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5160','Avery',NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(509,60,'Avery 5161','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.175,\"tMargin\":0.5,\"NX\":2,\"NY\":10,\"SpaceX\":0.15625,\"SpaceY\":0,\"width\":4,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5161','Avery',NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(510,60,'Avery 5162','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.1525,\"tMargin\":0.88,\"NX\":2,\"NY\":7,\"SpaceX\":0.195,\"SpaceY\":0,\"width\":4,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','5162','Avery',NULL,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(511,60,'Avery 5163','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.5,\"NX\":2,\"NY\":5,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":4,\"height\":2,\"lPadding\":0.20,\"tPadding\":0.20}','5163','Avery',NULL,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(512,60,'Avery 5164','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":12,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.156,\"tMargin\":0.5,\"NX\":2,\"NY\":3,\"SpaceX\":0.1875,\"SpaceY\":0,\"width\":4,\"height\":3.33,\"lPadding\":0.20,\"tPadding\":0.20}','5164','Avery',NULL,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(513,60,'Avery 8600','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":7.1,\"tMargin\":19,\"NX\":3,\"NY\":10,\"SpaceX\":9.5,\"SpaceY\":3.1,\"width\":66.6,\"height\":25.4,\"lPadding\":5.08,\"tPadding\":5.08}','8600','Avery',NULL,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(514,60,'Avery L7160','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.6,\"NX\":3,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7160','Avery',NULL,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(515,60,'Avery L7161','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.35,\"NX\":3,\"NY\":6,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.83,\"lPadding\":0.20,\"tPadding\":0.20}','L7161','Avery',NULL,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(516,60,'Avery L7162','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.51,\"NX\":2,\"NY\":8,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','L7162','Avery',NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(517,60,'Avery L7163','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.6,\"NX\":2,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7163','Avery',NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(518,75,'Formal','1','formal',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(519,75,'Familiar','2','familiar',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(520,76,'Email','Email','Email',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(521,76,'SMS','SMS','SMS',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(522,76,'User Preference','User_Preference','User Preference',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(523,77,'Actual date only','1','Actual date only',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(524,77,'Each anniversary','2','Each anniversary',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(525,78,'Default','1','default',NULL,NULL,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(526,78,'CiviMail','2','civimail',NULL,NULL,0,2,NULL,0,1,1,4,NULL,NULL,NULL,NULL),(527,78,'CiviEvent','3','civievent',NULL,NULL,0,3,NULL,0,1,1,1,NULL,NULL,NULL,NULL),(528,82,'Production','Production','Production',NULL,NULL,1,1,'Production Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(529,82,'Staging','Staging','Staging',NULL,NULL,0,2,'Staging Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(530,82,'Development','Development','Development',NULL,NULL,0,3,'Development Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(531,79,'Today','this.day','this.day',NULL,NULL,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(532,79,'This week','this.week','this.week',NULL,NULL,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(533,79,'This calendar month','this.month','this.month',NULL,NULL,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(534,79,'This quarter','this.quarter','this.quarter',NULL,NULL,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(535,79,'This fiscal year','this.fiscal_year','this.fiscal_year',NULL,NULL,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(536,79,'This calendar year','this.year','this.year',NULL,NULL,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(537,79,'Yesterday','previous.day','previous.day',NULL,NULL,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(538,79,'Previous week','previous.week','previous.week',NULL,NULL,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(539,79,'Previous calendar month','previous.month','previous.month',NULL,NULL,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(540,79,'Previous quarter','previous.quarter','previous.quarter',NULL,NULL,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(541,79,'Previous fiscal year','previous.fiscal_year','previous.fiscal_year',NULL,NULL,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(542,79,'Previous calendar year','previous.year','previous.year',NULL,NULL,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(543,79,'Last 7 days including today','ending.week','ending.week',NULL,NULL,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(544,79,'Last 30 days including today','ending_30.day','ending.month',NULL,NULL,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(545,79,'Last 60 days including today','ending_60.day','ending_2.month',NULL,NULL,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(546,79,'Last 90 days including today','ending_90.day','ending.quarter',NULL,NULL,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(547,79,'Last 12 months including today','ending.year','ending.year',NULL,NULL,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(548,79,'Last 2 years including today','ending_2.year','ending_2.year',NULL,NULL,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(549,79,'Last 3 years including today','ending_3.year','ending_3.year',NULL,NULL,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(550,79,'Tomorrow','starting.day','starting.day',NULL,NULL,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(551,79,'Next week','next.week','next.week',NULL,NULL,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(552,79,'Next calendar month','next.month','next.month',NULL,NULL,NULL,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(553,79,'Next quarter','next.quarter','next.quarter',NULL,NULL,NULL,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(554,79,'Next fiscal year','next.fiscal_year','next.fiscal_year',NULL,NULL,NULL,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(555,79,'Next calendar year','next.year','next.year',NULL,NULL,NULL,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(556,79,'Next 7 days including today','starting.week','starting.week',NULL,NULL,NULL,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(557,79,'Next 30 days including today','starting.month','starting.month',NULL,NULL,NULL,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(558,79,'Next 60 days including today','starting_2.month','starting_2.month',NULL,NULL,NULL,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(559,79,'Next 90 days including today','starting.quarter','starting.quarter',NULL,NULL,NULL,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(560,79,'Next 12 months including today','starting.year','starting.year',NULL,NULL,NULL,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(561,79,'Current week to-date','current.week','current.week',NULL,NULL,NULL,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(562,79,'Current calendar month to-date','current.month','current.month',NULL,NULL,NULL,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(563,79,'Current quarter to-date','current.quarter','current.quarter',NULL,NULL,NULL,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(564,79,'Current calendar year to-date','current.year','current.year',NULL,NULL,NULL,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(565,79,'To end of yesterday','earlier.day','earlier.day',NULL,NULL,NULL,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(566,79,'To end of previous week','earlier.week','earlier.week',NULL,NULL,NULL,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(567,79,'To end of previous calendar month','earlier.month','earlier.month',NULL,NULL,NULL,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(568,79,'To end of previous quarter','earlier.quarter','earlier.quarter',NULL,NULL,NULL,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(569,79,'To end of previous calendar year','earlier.year','earlier.year',NULL,NULL,NULL,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(570,79,'From start of current day','greater.day','greater.day',NULL,NULL,NULL,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(571,79,'From start of current week','greater.week','greater.week',NULL,NULL,NULL,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(572,79,'From start of current calendar month','greater.month','greater.month',NULL,NULL,NULL,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(573,79,'From start of current quarter','greater.quarter','greater.quarter',NULL,NULL,NULL,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(574,79,'From start of current calendar year','greater.year','greater.year',NULL,NULL,NULL,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(575,79,'To end of current week','less.week','less.week',NULL,NULL,NULL,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(576,79,'To end of current calendar month','less.month','less.month',NULL,NULL,NULL,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(577,79,'To end of current quarter','less.quarter','less.quarter',NULL,NULL,NULL,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(578,79,'To end of current calendar year','less.year','less.year',NULL,NULL,NULL,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(579,79,'Previous 2 days','previous_2.day','previous_2.day',NULL,NULL,NULL,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(580,79,'Previous 2 weeks','previous_2.week','previous_2.week',NULL,NULL,NULL,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(581,79,'Previous 2 calendar months','previous_2.month','previous_2.month',NULL,NULL,NULL,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(582,79,'Previous 2 quarters','previous_2.quarter','previous_2.quarter',NULL,NULL,NULL,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(583,79,'Previous 2 calendar years','previous_2.year','previous_2.year',NULL,NULL,NULL,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(584,79,'Day prior to yesterday','previous_before.day','previous_before.day',NULL,NULL,NULL,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(585,79,'Week prior to previous week','previous_before.week','previous_before.week',NULL,NULL,NULL,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(586,79,'Month prior to previous calendar month','previous_before.month','previous_before.month',NULL,NULL,NULL,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(587,79,'Quarter prior to previous quarter','previous_before.quarter','previous_before.quarter',NULL,NULL,NULL,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(588,79,'Year prior to previous calendar year','previous_before.year','previous_before.year',NULL,NULL,NULL,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(589,79,'From end of previous week','greater_previous.week','greater_previous.week',NULL,NULL,NULL,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(590,79,'From end of previous calendar month','greater_previous.month','greater_previous.month',NULL,NULL,NULL,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(591,79,'From end of previous quarter','greater_previous.quarter','greater_previous.quarter',NULL,NULL,NULL,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(592,79,'From end of previous calendar year','greater_previous.year','greater_previous.year',NULL,NULL,NULL,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(593,80,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(594,80,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(595,80,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(596,80,'In Progress','5','In Progress',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(597,80,'Overdue','6','Overdue',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(598,81,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(599,81,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(600,81,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(601,81,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(602,81,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(603,81,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(604,81,'Processing','7','Processing',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(605,81,'Failing','8','Failing',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(606,83,'None','1','NONE',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(607,83,'By relationship to case client','2','BY_RELATIONSHIP',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(608,83,'Specific contact','3','SPECIFIC_CONTACT',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(609,83,'User creating the case','4','USER_CREATING_THE_CASE',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(610,31,'\"FIXME\" <info@EXAMPLE.ORG>','1','\"FIXME\" <info@EXAMPLE.ORG>',NULL,0,1,1,'Default domain email address and from name.',0,0,1,NULL,1,NULL,NULL,NULL),(611,24,'Emergency','1','Emergency',NULL,0,1,1,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(612,24,'Family Support','2','Family Support',NULL,0,NULL,2,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(613,24,'General Protection','3','General Protection',NULL,0,NULL,3,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(614,24,'Impunity','4','Impunity',NULL,0,NULL,4,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(615,55,'Approved','1','Approved',NULL,0,1,1,NULL,0,1,1,4,1,NULL,NULL,NULL),(616,55,'Rejected','2','Rejected',NULL,0,0,2,NULL,0,1,1,4,1,NULL,NULL,NULL),(617,55,'None','3','None',NULL,0,0,3,NULL,0,1,1,4,1,NULL,NULL,NULL),(618,57,'Survey','Survey','civicrm_survey',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(619,57,'Cases','Case','civicrm_case',NULL,0,NULL,2,'CRM_Case_PseudoConstant::caseType;',0,0,1,NULL,NULL,NULL,NULL,NULL),(620,84,'Abkhaz','ab','ab_GE',NULL,0,0,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(621,84,'Afar','aa','aa_ET',NULL,0,0,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(622,84,'Afrikaans','af','af_ZA',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(623,84,'Akan','ak','ak_GH',NULL,0,0,4,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(624,84,'Albanian','sq','sq_AL',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(625,84,'Amharic','am','am_ET',NULL,0,0,6,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(626,84,'Arabic','ar','ar_EG',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(627,84,'Aragonese','an','an_ES',NULL,0,0,8,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(628,84,'Armenian','hy','hy_AM',NULL,0,0,9,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(629,84,'Assamese','as','as_IN',NULL,0,0,10,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(630,84,'Avaric','av','av_RU',NULL,0,0,11,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(631,84,'Avestan','ae','ae_XX',NULL,0,0,12,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(632,84,'Aymara','ay','ay_BO',NULL,0,0,13,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(633,84,'Azerbaijani','az','az_AZ',NULL,0,0,14,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(634,84,'Bambara','bm','bm_ML',NULL,0,0,15,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(635,84,'Bashkir','ba','ba_RU',NULL,0,0,16,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(636,84,'Basque','eu','eu_ES',NULL,0,0,17,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(637,84,'Belarusian','be','be_BY',NULL,0,0,18,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(638,84,'Bengali','bn','bn_BD',NULL,0,0,19,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(639,84,'Bihari','bh','bh_IN',NULL,0,0,20,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(640,84,'Bislama','bi','bi_VU',NULL,0,0,21,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(641,84,'Bosnian','bs','bs_BA',NULL,0,0,22,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(642,84,'Breton','br','br_FR',NULL,0,0,23,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(643,84,'Bulgarian','bg','bg_BG',NULL,0,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(644,84,'Burmese','my','my_MM',NULL,0,0,25,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(645,84,'Catalan; Valencian','ca','ca_ES',NULL,0,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(646,84,'Chamorro','ch','ch_GU',NULL,0,0,27,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(647,84,'Chechen','ce','ce_RU',NULL,0,0,28,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(648,84,'Chichewa; Chewa; Nyanja','ny','ny_MW',NULL,0,0,29,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(649,84,'Chinese (China)','zh','zh_CN',NULL,0,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(650,84,'Chinese (Taiwan)','zh','zh_TW',NULL,0,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(651,84,'Chuvash','cv','cv_RU',NULL,0,0,32,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(652,84,'Cornish','kw','kw_GB',NULL,0,0,33,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(653,84,'Corsican','co','co_FR',NULL,0,0,34,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(654,84,'Cree','cr','cr_CA',NULL,0,0,35,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(655,84,'Croatian','hr','hr_HR',NULL,0,0,36,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(656,84,'Czech','cs','cs_CZ',NULL,0,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(657,84,'Danish','da','da_DK',NULL,0,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(658,84,'Divehi; Dhivehi; Maldivian;','dv','dv_MV',NULL,0,0,39,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(659,84,'Dutch (Netherlands)','nl','nl_NL',NULL,0,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(660,84,'Dutch (Belgium)','nl','nl_BE',NULL,0,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(661,84,'Dzongkha','dz','dz_BT',NULL,0,0,42,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(662,84,'English (Australia)','en','en_AU',NULL,0,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(663,84,'English (Canada)','en','en_CA',NULL,0,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(664,84,'English (United Kingdom)','en','en_GB',NULL,0,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(665,84,'English (United States)','en','en_US',NULL,0,1,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(666,84,'Esperanto','eo','eo_XX',NULL,0,0,47,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(667,84,'Estonian','et','et_EE',NULL,0,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(668,84,'Ewe','ee','ee_GH',NULL,0,0,49,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(669,84,'Faroese','fo','fo_FO',NULL,0,0,50,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(670,84,'Fijian','fj','fj_FJ',NULL,0,0,51,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(671,84,'Finnish','fi','fi_FI',NULL,0,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(672,84,'French (Canada)','fr','fr_CA',NULL,0,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(673,84,'French (France)','fr','fr_FR',NULL,0,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(674,84,'Fula; Fulah; Pulaar; Pular','ff','ff_SN',NULL,0,0,55,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(675,84,'Galician','gl','gl_ES',NULL,0,0,56,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(676,84,'Georgian','ka','ka_GE',NULL,0,0,57,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(677,84,'German','de','de_DE',NULL,0,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(678,84,'German (Swiss)','de','de_CH',NULL,0,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(679,84,'Greek, Modern','el','el_GR',NULL,0,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(680,84,'GuaraniÂ','gn','gn_PY',NULL,0,0,61,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(681,84,'Gujarati','gu','gu_IN',NULL,0,0,62,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(682,84,'Haitian; Haitian Creole','ht','ht_HT',NULL,0,0,63,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(683,84,'Hausa','ha','ha_NG',NULL,0,0,64,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(684,84,'Hebrew (modern)','he','he_IL',NULL,0,0,65,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(685,84,'Herero','hz','hz_NA',NULL,0,0,66,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(686,84,'Hindi','hi','hi_IN',NULL,0,0,67,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(687,84,'Hiri Motu','ho','ho_PG',NULL,0,0,68,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(688,84,'Hungarian','hu','hu_HU',NULL,0,0,69,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(689,84,'Interlingua','ia','ia_XX',NULL,0,0,70,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(690,84,'Indonesian','id','id_ID',NULL,0,0,71,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(691,84,'Interlingue','ie','ie_XX',NULL,0,0,72,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(692,84,'Irish','ga','ga_IE',NULL,0,0,73,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(693,84,'Igbo','ig','ig_NG',NULL,0,0,74,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(694,84,'Inupiaq','ik','ik_US',NULL,0,0,75,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(695,84,'Ido','io','io_XX',NULL,0,0,76,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(696,84,'Icelandic','is','is_IS',NULL,0,0,77,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(697,84,'Italian','it','it_IT',NULL,0,0,78,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(698,84,'Inuktitut','iu','iu_CA',NULL,0,0,79,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(699,84,'Japanese','ja','ja_JP',NULL,0,0,80,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(700,84,'Javanese','jv','jv_ID',NULL,0,0,81,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(701,84,'Kalaallisut, Greenlandic','kl','kl_GL',NULL,0,0,82,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(702,84,'Kannada','kn','kn_IN',NULL,0,0,83,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(703,84,'Kanuri','kr','kr_NE',NULL,0,0,84,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(704,84,'Kashmiri','ks','ks_IN',NULL,0,0,85,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(705,84,'Kazakh','kk','kk_KZ',NULL,0,0,86,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(706,84,'Khmer','km','km_KH',NULL,0,0,87,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(707,84,'Kikuyu, Gikuyu','ki','ki_KE',NULL,0,0,88,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(708,84,'Kinyarwanda','rw','rw_RW',NULL,0,0,89,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(709,84,'Kirghiz, Kyrgyz','ky','ky_KG',NULL,0,0,90,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(710,84,'Komi','kv','kv_RU',NULL,0,0,91,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(711,84,'Kongo','kg','kg_CD',NULL,0,0,92,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(712,84,'Korean','ko','ko_KR',NULL,0,0,93,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(713,84,'Kurdish','ku','ku_IQ',NULL,0,0,94,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(714,84,'Kwanyama, Kuanyama','kj','kj_NA',NULL,0,0,95,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(715,84,'Latin','la','la_VA',NULL,0,0,96,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(716,84,'Luxembourgish, Letzeburgesch','lb','lb_LU',NULL,0,0,97,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(717,84,'Luganda','lg','lg_UG',NULL,0,0,98,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(718,84,'Limburgish, Limburgan, Limburger','li','li_NL',NULL,0,0,99,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(719,84,'Lingala','ln','ln_CD',NULL,0,0,100,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(720,84,'Lao','lo','lo_LA',NULL,0,0,101,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(721,84,'Lithuanian','lt','lt_LT',NULL,0,0,102,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(722,84,'Luba-Katanga','lu','lu_CD',NULL,0,0,103,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(723,84,'Latvian','lv','lv_LV',NULL,0,0,104,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(724,84,'Manx','gv','gv_IM',NULL,0,0,105,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(725,84,'Macedonian','mk','mk_MK',NULL,0,0,106,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(726,84,'Malagasy','mg','mg_MG',NULL,0,0,107,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(727,84,'Malay','ms','ms_MY',NULL,0,0,108,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(728,84,'Malayalam','ml','ml_IN',NULL,0,0,109,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(729,84,'Maltese','mt','mt_MT',NULL,0,0,110,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(730,84,'MÄori','mi','mi_NZ',NULL,0,0,111,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(731,84,'Marathi','mr','mr_IN',NULL,0,0,112,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(732,84,'Marshallese','mh','mh_MH',NULL,0,0,113,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(733,84,'Mongolian','mn','mn_MN',NULL,0,0,114,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(734,84,'Nauru','na','na_NR',NULL,0,0,115,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(735,84,'Navajo, Navaho','nv','nv_US',NULL,0,0,116,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(736,84,'Norwegian BokmÃ¥l','nb','nb_NO',NULL,0,0,117,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(737,84,'North Ndebele','nd','nd_ZW',NULL,0,0,118,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(738,84,'Nepali','ne','ne_NP',NULL,0,0,119,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(739,84,'Ndonga','ng','ng_NA',NULL,0,0,120,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(740,84,'Norwegian Nynorsk','nn','nn_NO',NULL,0,0,121,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(741,84,'Norwegian','no','no_NO',NULL,0,0,122,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(742,84,'Nuosu','ii','ii_CN',NULL,0,0,123,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(743,84,'South Ndebele','nr','nr_ZA',NULL,0,0,124,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(744,84,'Occitan (after 1500)','oc','oc_FR',NULL,0,0,125,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(745,84,'Ojibwa','oj','oj_CA',NULL,0,0,126,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(746,84,'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic','cu','cu_BG',NULL,0,0,127,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(747,84,'Oromo','om','om_ET',NULL,0,0,128,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(748,84,'Oriya','or','or_IN',NULL,0,0,129,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(749,84,'Ossetian, Ossetic','os','os_GE',NULL,0,0,130,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(750,84,'Panjabi, Punjabi','pa','pa_IN',NULL,0,0,131,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(751,84,'Pali','pi','pi_KH',NULL,0,0,132,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(752,84,'Persian (Iran)','fa','fa_IR',NULL,0,0,133,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(753,84,'Polish','pl','pl_PL',NULL,0,0,134,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(754,84,'Pashto, Pushto','ps','ps_AF',NULL,0,0,135,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(755,84,'Portuguese (Brazil)','pt','pt_BR',NULL,0,0,136,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(756,84,'Portuguese (Portugal)','pt','pt_PT',NULL,0,0,137,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(757,84,'Quechua','qu','qu_PE',NULL,0,0,138,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(758,84,'Romansh','rm','rm_CH',NULL,0,0,139,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(759,84,'Kirundi','rn','rn_BI',NULL,0,0,140,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(760,84,'Romanian, Moldavian, Moldovan','ro','ro_RO',NULL,0,0,141,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(761,84,'Russian','ru','ru_RU',NULL,0,0,142,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(762,84,'Sanskrit','sa','sa_IN',NULL,0,0,143,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(763,84,'Sardinian','sc','sc_IT',NULL,0,0,144,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(764,84,'Sindhi','sd','sd_IN',NULL,0,0,145,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(765,84,'Northern Sami','se','se_NO',NULL,0,0,146,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(766,84,'Samoan','sm','sm_WS',NULL,0,0,147,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(767,84,'Sango','sg','sg_CF',NULL,0,0,148,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(768,84,'Serbian','sr','sr_RS',NULL,0,0,149,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(769,84,'Scottish Gaelic; Gaelic','gd','gd_GB',NULL,0,0,150,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(770,84,'Shona','sn','sn_ZW',NULL,0,0,151,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(771,84,'Sinhala, Sinhalese','si','si_LK',NULL,0,0,152,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(772,84,'Slovak','sk','sk_SK',NULL,0,0,153,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(773,84,'Slovene','sl','sl_SI',NULL,0,0,154,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(774,84,'Somali','so','so_SO',NULL,0,0,155,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(775,84,'Southern Sotho','st','st_ZA',NULL,0,0,156,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(776,84,'Spanish; Castilian (Spain)','es','es_ES',NULL,0,0,157,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(777,84,'Spanish; Castilian (Mexico)','es','es_MX',NULL,0,0,158,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(778,84,'Spanish; Castilian (Puerto Rico)','es','es_PR',NULL,0,0,159,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(779,84,'Sundanese','su','su_ID',NULL,0,0,160,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(780,84,'Swahili','sw','sw_TZ',NULL,0,0,161,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(781,84,'Swati','ss','ss_ZA',NULL,0,0,162,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(782,84,'Swedish','sv','sv_SE',NULL,0,0,163,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(783,84,'Tamil','ta','ta_IN',NULL,0,0,164,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(784,84,'Telugu','te','te_IN',NULL,0,0,165,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(785,84,'Tajik','tg','tg_TJ',NULL,0,0,166,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(786,84,'Thai','th','th_TH',NULL,0,0,167,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(787,84,'Tigrinya','ti','ti_ET',NULL,0,0,168,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(788,84,'Tibetan Standard, Tibetan, Central','bo','bo_CN',NULL,0,0,169,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(789,84,'Turkmen','tk','tk_TM',NULL,0,0,170,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(790,84,'Tagalog','tl','tl_PH',NULL,0,0,171,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(791,84,'Tswana','tn','tn_ZA',NULL,0,0,172,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(792,84,'Tonga (Tonga Islands)','to','to_TO',NULL,0,0,173,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(793,84,'Turkish','tr','tr_TR',NULL,0,0,174,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(794,84,'Tsonga','ts','ts_ZA',NULL,0,0,175,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(795,84,'Tatar','tt','tt_RU',NULL,0,0,176,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(796,84,'Twi','tw','tw_GH',NULL,0,0,177,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(797,84,'Tahitian','ty','ty_PF',NULL,0,0,178,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(798,84,'Uighur, Uyghur','ug','ug_CN',NULL,0,0,179,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(799,84,'Ukrainian','uk','uk_UA',NULL,0,0,180,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(800,84,'Urdu','ur','ur_PK',NULL,0,0,181,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(801,84,'Uzbek','uz','uz_UZ',NULL,0,0,182,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(802,84,'Venda','ve','ve_ZA',NULL,0,0,183,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(803,84,'Vietnamese','vi','vi_VN',NULL,0,0,184,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(804,84,'Volapük','vo','vo_XX',NULL,0,0,185,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(805,84,'Walloon','wa','wa_BE',NULL,0,0,186,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(806,84,'Welsh','cy','cy_GB',NULL,0,0,187,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(807,84,'Wolof','wo','wo_SN',NULL,0,0,188,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(808,84,'Western Frisian','fy','fy_NL',NULL,0,0,189,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(809,84,'Xhosa','xh','xh_ZA',NULL,0,0,190,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(810,84,'Yiddish','yi','yi_US',NULL,0,0,191,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(811,84,'Yoruba','yo','yo_NG',NULL,0,0,192,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(812,84,'Zhuang, Chuang','za','za_CN',NULL,0,0,193,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(813,84,'Zulu','zu','zu_ZA',NULL,0,0,194,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(814,85,'In Person','1','in_person',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(815,85,'Phone','2','phone',NULL,0,1,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(816,85,'Email','3','email',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(817,85,'Fax','4','fax',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(818,85,'Letter Mail','5','letter_mail',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(819,86,'Cases - Send Copy of an Activity','1','case_activity',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(820,87,'Contributions - Duplicate Organization Alert','1','contribution_dupalert',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(821,87,'Contributions - Receipt (off-line)','2','contribution_offline_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(822,87,'Contributions - Receipt (on-line)','3','contribution_online_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(823,87,'Contributions - Invoice','4','contribution_invoice_receipt',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(824,87,'Contributions - Recurring Start and End Notification','5','contribution_recurring_notify',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(825,87,'Contributions - Recurring Cancellation Notification','6','contribution_recurring_cancelled',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(826,87,'Contributions - Recurring Billing Updates','7','contribution_recurring_billing',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(827,87,'Contributions - Recurring Updates','8','contribution_recurring_edit',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(828,87,'Personal Campaign Pages - Admin Notification','9','pcp_notify',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(829,87,'Personal Campaign Pages - Supporter Status Change Notification','10','pcp_status_change',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(830,87,'Personal Campaign Pages - Supporter Welcome','11','pcp_supporter_notify',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(831,87,'Personal Campaign Pages - Owner Notification','12','pcp_owner_notify',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(832,87,'Additional Payment Receipt or Refund Notification','13','payment_or_refund_notification',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(833,88,'Events - Registration Confirmation and Receipt (off-line)','1','event_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(834,88,'Events - Registration Confirmation and Receipt (on-line)','2','event_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(835,88,'Events - Receipt only','3','event_registration_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(836,88,'Events - Registration Cancellation Notice','4','participant_cancelled',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(837,88,'Events - Registration Confirmation Invite','5','participant_confirm',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(838,88,'Events - Pending Registration Expiration Notice','6','participant_expired',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(839,88,'Events - Registration Transferred Notice','7','participant_transferred',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(840,89,'Tell-a-Friend Email','1','friend',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(841,90,'Memberships - Signup and Renewal Receipts (off-line)','1','membership_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(842,90,'Memberships - Receipt (on-line)','2','membership_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(843,90,'Memberships - Auto-renew Cancellation Notification','3','membership_autorenew_cancelled',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(844,90,'Memberships - Auto-renew Billing Updates','4','membership_autorenew_billing',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(845,91,'Test-drive - Receipt Header','1','test_preview',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(846,92,'Pledges - Acknowledgement','1','pledge_acknowledge',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(847,92,'Pledges - Payment Reminder','2','pledge_reminder',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(848,93,'Profiles - Admin Notification','1','uf_notify',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(849,94,'Petition - signature added','1','petition_sign',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(850,94,'Petition - need verification','2','petition_confirmation_needed',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(851,95,'In Honor of','1','in_honor_of',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(852,95,'In Memory of','2','in_memory_of',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(853,95,'Solicited','3','solicited',NULL,0,1,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(854,95,'Household','4','household',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(855,95,'Workplace Giving','5','workplace',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(856,95,'Foundation Affiliate','6','foundation_affiliate',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(857,95,'3rd-party Service','7','3rd-party_service',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(858,95,'Donor-advised Fund','8','donor-advised_fund',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(859,95,'Matched Gift','9','matched_gift',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(860,95,'Personal Campaign Page','10','pcp',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(861,95,'Gift','11','gift',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(862,2,'Interview','55','Interview',NULL,0,NULL,55,'Conduct a phone or in person interview.',0,0,1,NULL,NULL,NULL,'fa-comment-o',NULL); +INSERT INTO `civicrm_option_value` (`id`, `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `domain_id`, `visibility_id`, `icon`, `color`) VALUES (1,1,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(2,1,'Email','2','Email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(3,1,'Postal Mail','3','Postal Mail',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(4,1,'SMS','4','SMS',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(5,1,'Fax','5','Fax',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(6,2,'Meeting','1','Meeting',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,'fa-slideshare',NULL),(7,2,'Phone Call','2','Phone Call',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,'fa-phone',NULL),(8,2,'Email','3','Email',NULL,1,NULL,3,'Email sent.',0,1,1,NULL,NULL,NULL,'fa-envelope-o',NULL),(9,2,'Outbound SMS','4','SMS',NULL,1,NULL,4,'Text message (SMS) sent.',0,1,1,NULL,NULL,NULL,'fa-mobile',NULL),(10,2,'Event Registration','5','Event Registration',NULL,1,NULL,5,'Online or offline event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(11,2,'Contribution','6','Contribution',NULL,1,NULL,6,'Online or offline contribution.',0,1,1,2,NULL,NULL,NULL,NULL),(12,2,'Membership Signup','7','Membership Signup',NULL,1,NULL,7,'Online or offline membership signup.',0,1,1,3,NULL,NULL,NULL,NULL),(13,2,'Membership Renewal','8','Membership Renewal',NULL,1,NULL,8,'Online or offline membership renewal.',0,1,1,3,NULL,NULL,NULL,NULL),(14,2,'Tell a Friend','9','Tell a Friend',NULL,1,NULL,9,'Send information about a contribution campaign or event to a friend.',0,1,1,NULL,NULL,NULL,NULL,NULL),(15,2,'Pledge Acknowledgment','10','Pledge Acknowledgment',NULL,1,NULL,10,'Send Pledge Acknowledgment.',0,1,1,6,NULL,NULL,NULL,NULL),(16,2,'Pledge Reminder','11','Pledge Reminder',NULL,1,NULL,11,'Send Pledge Reminder.',0,1,1,6,NULL,NULL,NULL,NULL),(17,2,'Inbound Email','12','Inbound Email',NULL,1,NULL,12,'Inbound Email.',0,1,1,NULL,NULL,NULL,NULL,NULL),(18,2,'Open Case','13','Open Case',NULL,0,0,13,'',0,1,1,7,NULL,NULL,'fa-folder-open-o',NULL),(19,2,'Follow up','14','Follow up',NULL,0,0,14,'',0,1,1,7,NULL,NULL,'fa-share-square-o',NULL),(20,2,'Change Case Type','15','Change Case Type',NULL,0,0,15,'',0,1,1,7,NULL,NULL,'fa-random',NULL),(21,2,'Change Case Status','16','Change Case Status',NULL,0,0,16,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(22,2,'Change Case Subject','53','Change Case Subject',NULL,0,0,53,'',0,1,1,7,NULL,NULL,'fa-pencil-square-o',NULL),(23,2,'Change Custom Data','33','Change Custom Data',NULL,0,0,33,'',0,1,1,7,NULL,NULL,'fa-table',NULL),(24,2,'Membership Renewal Reminder','17','Membership Renewal Reminder',NULL,1,NULL,17,'offline membership renewal reminder.',0,1,1,3,NULL,NULL,NULL,NULL),(25,2,'Change Case Start Date','18','Change Case Start Date',NULL,0,0,18,'',0,1,1,7,NULL,NULL,'fa-calendar',NULL),(26,2,'Bulk Email','19','Bulk Email',NULL,1,NULL,19,'Bulk Email Sent.',0,1,1,NULL,NULL,NULL,NULL,NULL),(27,2,'Assign Case Role','20','Assign Case Role',NULL,0,0,20,'',0,1,1,7,NULL,NULL,'fa-user-plus',NULL),(28,2,'Remove Case Role','21','Remove Case Role',NULL,0,0,21,'',0,1,1,7,NULL,NULL,'fa-user-times',NULL),(29,2,'Print/Merge Document','22','Print PDF Letter',NULL,0,NULL,22,'Export letters and other printable documents.',0,1,1,NULL,NULL,NULL,'fa-file-pdf-o',NULL),(30,2,'Merge Case','23','Merge Case',NULL,0,NULL,23,'',0,1,1,7,NULL,NULL,'fa-compress',NULL),(31,2,'Reassigned Case','24','Reassigned Case',NULL,0,NULL,24,'',0,1,1,7,NULL,NULL,'fa-user-circle-o',NULL),(32,2,'Link Cases','25','Link Cases',NULL,0,NULL,25,'',0,1,1,7,NULL,NULL,'fa-link',NULL),(33,2,'Change Case Tags','26','Change Case Tags',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-tags',NULL),(34,2,'Add Client To Case','27','Add Client To Case',NULL,0,0,26,'',0,1,1,7,NULL,NULL,'fa-users',NULL),(35,2,'Survey','28','Survey',NULL,0,0,27,'',0,1,1,9,NULL,NULL,NULL,NULL),(36,2,'Canvass','29','Canvass',NULL,0,0,28,'',0,1,1,9,NULL,NULL,NULL,NULL),(37,2,'PhoneBank','30','PhoneBank',NULL,0,0,29,'',0,1,1,9,NULL,NULL,NULL,NULL),(38,2,'WalkList','31','WalkList',NULL,0,0,30,'',0,1,1,9,NULL,NULL,NULL,NULL),(39,2,'Petition Signature','32','Petition',NULL,0,0,31,'',0,1,1,9,NULL,NULL,NULL,NULL),(40,2,'Mass SMS','34','Mass SMS',NULL,1,NULL,34,'Mass SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(41,2,'Change Membership Status','35','Change Membership Status',NULL,1,NULL,35,'Change Membership Status.',0,1,1,3,NULL,NULL,NULL,NULL),(42,2,'Change Membership Type','36','Change Membership Type',NULL,1,NULL,36,'Change Membership Type.',0,1,1,3,NULL,NULL,NULL,NULL),(43,2,'Cancel Recurring Contribution','37','Cancel Recurring Contribution',NULL,1,0,37,'',0,1,1,2,NULL,NULL,NULL,NULL),(44,2,'Update Recurring Contribution Billing Details','38','Update Recurring Contribution Billing Details',NULL,1,0,38,'',0,1,1,2,NULL,NULL,NULL,NULL),(45,2,'Update Recurring Contribution','39','Update Recurring Contribution',NULL,1,0,39,'',0,1,1,2,NULL,NULL,NULL,NULL),(46,2,'Reminder Sent','40','Reminder Sent',NULL,1,0,40,'',0,1,1,NULL,NULL,NULL,NULL,NULL),(47,2,'Export Accounting Batch','41','Export Accounting Batch',NULL,1,0,41,'Export Accounting Batch',0,1,1,2,NULL,NULL,NULL,NULL),(48,2,'Create Batch','42','Create Batch',NULL,1,0,42,'Create Batch',0,1,1,2,NULL,NULL,NULL,NULL),(49,2,'Edit Batch','43','Edit Batch',NULL,1,0,43,'Edit Batch',0,1,1,2,NULL,NULL,NULL,NULL),(50,2,'SMS delivery','44','SMS delivery',NULL,1,NULL,44,'SMS delivery',0,1,1,NULL,NULL,NULL,NULL,NULL),(51,2,'Inbound SMS','45','Inbound SMS',NULL,1,NULL,45,'Inbound SMS',0,1,1,NULL,NULL,NULL,NULL,NULL),(52,2,'Payment','46','Payment',NULL,1,NULL,46,'Additional payment recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(53,2,'Refund','47','Refund',NULL,1,NULL,47,'Refund recorded for event or membership fee.',0,1,1,2,NULL,NULL,NULL,NULL),(54,2,'Change Registration','48','Change Registration',NULL,1,NULL,48,'Changes to an existing event registration.',0,1,1,1,NULL,NULL,NULL,NULL),(55,2,'Downloaded Invoice','49','Downloaded Invoice',NULL,1,NULL,49,'Downloaded Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(56,2,'Emailed Invoice','50','Emailed Invoice',NULL,1,NULL,50,'Emailed Invoice.',0,1,1,NULL,NULL,NULL,NULL,NULL),(57,2,'Contact Merged','51','Contact Merged',NULL,1,NULL,51,'Contact Merged',0,1,1,NULL,NULL,NULL,NULL,NULL),(58,2,'Contact Deleted by Merge','52','Contact Deleted by Merge',NULL,1,NULL,52,'Contact was merged into another contact',0,1,1,NULL,NULL,NULL,NULL,NULL),(59,2,'Failed Payment','54','Failed Payment',NULL,1,0,54,'Failed Payment',0,1,1,2,NULL,NULL,NULL,NULL),(60,3,'Female','1','Female',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(61,3,'Male','2','Male',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(62,3,'Other','3','Other',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(63,4,'Yahoo','1','Yahoo',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(64,4,'MSN','2','Msn',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(65,4,'AIM','3','Aim',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(66,4,'GTalk','4','Gtalk',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(67,4,'Jabber','5','Jabber',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(68,4,'Skype','6','Skype',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(69,5,'Sprint','1','Sprint',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(70,5,'Verizon','2','Verizon',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(71,5,'Cingular','3','Cingular',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(72,6,'Mrs.','1','Mrs.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(73,6,'Ms.','2','Ms.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(74,6,'Mr.','3','Mr.',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(75,6,'Dr.','4','Dr.',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(76,7,'Jr.','1','Jr.',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(77,7,'Sr.','2','Sr.',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(78,7,'II','3','II',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(79,7,'III','4','III',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(80,7,'IV','5','IV',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(81,7,'V','6','V',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(82,7,'VI','7','VI',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(83,7,'VII','8','VII',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(84,8,'Administrator','1','Admin',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(85,8,'Authenticated','2','Auth',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(86,9,'Visa','1','Visa',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(87,9,'MasterCard','2','MasterCard',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(88,9,'Amex','3','Amex',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(89,9,'Discover','4','Discover',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(90,10,'Credit Card','1','Credit Card',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(91,10,'Debit Card','2','Debit Card',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(92,10,'Cash','3','Cash',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(93,10,'Check','4','Check',NULL,0,1,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(94,10,'EFT','5','EFT',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(95,11,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(96,11,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(97,11,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(98,11,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(99,11,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(100,11,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(101,11,'Refunded','7','Refunded',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(102,11,'Partially paid','8','Partially paid',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(103,11,'Pending refund','9','Pending refund',NULL,0,NULL,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(104,11,'Chargeback','10','Chargeback',NULL,0,NULL,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(105,11,'Template','11','Template',NULL,0,NULL,11,'Status for contribution records which represent a template for a recurring contribution rather than an actual contribution. This status is transitional, to ensure that said contributions don\\\'t appear in reports. The is_template field is the preferred way to find and filter these contributions.',0,1,1,NULL,NULL,NULL,NULL,NULL),(106,12,'Waiting Review','1','Waiting Review',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(107,12,'Approved','2','Approved',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(108,12,'Not Approved','3','Not Approved',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(109,13,'Owner chooses whether to receive notifications','1','owner_chooses',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(110,13,'Notifications are sent to ALL owners','2','all_owners',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(111,13,'Notifications are NOT available','3','no_notifications',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(112,14,'Attendee','1','Attendee',NULL,1,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(113,14,'Volunteer','2','Volunteer',NULL,1,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(114,14,'Host','3','Host',NULL,1,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(115,14,'Speaker','4','Speaker',NULL,1,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(116,15,'Conference','1','Conference',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(117,15,'Exhibition','2','Exhibition',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(118,15,'Fundraiser','3','Fundraiser',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(119,15,'Meeting','4','Meeting',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(120,15,'Performance','5','Performance',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(121,15,'Workshop','6','Workshop',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(122,16,'Activities','1','activity',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(123,16,'Relationships','2','rel',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(124,16,'Groups','3','group',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(125,16,'Notes','4','note',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(126,16,'Tags','5','tag',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(127,16,'Change Log','6','log',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(128,16,'Contributions','7','CiviContribute',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(129,16,'Memberships','8','CiviMember',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(130,16,'Events','9','CiviEvent',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(131,16,'Cases','10','CiviCase',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(132,16,'Grants','11','CiviGrant',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(133,16,'Pledges','13','CiviPledge',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(134,16,'Mailings','14','CiviMail',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(135,17,'Show Smart Groups on Demand','1','showondemand',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(136,17,'Always Show Smart Groups','2','alwaysshow',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(137,17,'Hide Smart Groups','3','hide',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(138,18,'Custom Data','1','CustomData',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(139,18,'Address','2','Address',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(140,18,'Communication Preferences','3','CommunicationPreferences',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(141,18,'Notes','4','Notes',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(142,18,'Demographics','5','Demographics',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(143,18,'Tags and Groups','6','TagsAndGroups',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(144,18,'Email','7','Email',NULL,1,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(145,18,'Phone','8','Phone',NULL,1,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(146,18,'Instant Messenger','9','IM',NULL,1,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(147,18,'Open ID','10','OpenID',NULL,1,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(148,18,'Website','11','Website',NULL,1,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(149,18,'Prefix','12','Prefix',NULL,2,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(150,18,'Formal Title','13','Formal Title',NULL,2,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(151,18,'First Name','14','First Name',NULL,2,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(152,18,'Middle Name','15','Middle Name',NULL,2,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(153,18,'Last Name','16','Last Name',NULL,2,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(154,18,'Suffix','17','Suffix',NULL,2,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(155,19,'Address Fields','1','location',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(156,19,'Custom Fields','2','custom',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(157,19,'Activities','3','activity',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(158,19,'Relationships','4','relationship',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(159,19,'Notes','5','notes',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(160,19,'Change Log','6','changeLog',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(161,19,'Contributions','7','CiviContribute',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(162,19,'Memberships','8','CiviMember',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(163,19,'Events','9','CiviEvent',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(164,19,'Cases','10','CiviCase',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(165,19,'Grants','12','CiviGrant',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(166,19,'Demographics','13','demographics',NULL,0,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(167,19,'Pledges','15','CiviPledge',NULL,0,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(168,19,'Contact Type','16','contactType',NULL,0,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(169,19,'Groups','17','groups',NULL,0,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(170,19,'Tags','18','tags',NULL,0,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(171,19,'Mailing','19','CiviMail',NULL,0,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(172,20,'Groups','1','Groups',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(173,20,'Contributions','2','CiviContribute',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(174,20,'Memberships','3','CiviMember',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(175,20,'Events','4','CiviEvent',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(176,20,'My Contacts / Organizations','5','Permissioned Orgs',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(177,20,'Pledges','7','CiviPledge',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(178,20,'Personal Campaign Pages','8','PCP',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(179,20,'Assigned Activities','9','Assigned Activities',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(180,20,'Invoices / Credit Notes','10','Invoices / Credit Notes',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(181,45,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(182,45,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(183,45,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(184,45,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(185,45,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(186,45,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(187,45,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(188,46,'Email Address','2','email',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(189,46,'Phone','3','phone',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(190,46,'Street Address','4','street_address',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(191,46,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(192,46,'State/Province','6','state_province',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(193,46,'Country','7','country',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(194,46,'Postal Code','8','postal_code',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(195,21,'Street Address','1','street_address',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(196,21,'Supplemental Address 1','2','supplemental_address_1',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(197,21,'Supplemental Address 2','3','supplemental_address_2',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(198,21,'Supplemental Address 3','4','supplemental_address_3',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(199,21,'City','5','city',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(200,21,'Postal Code','6','postal_code',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(201,21,'Postal Code Suffix','7','postal_code_suffix',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(202,21,'County','8','county',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(203,21,'State/Province','9','state_province',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(204,21,'Country','10','country',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(205,21,'Latitude','11','geo_code_1',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(206,21,'Longitude','12','geo_code_2',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(207,21,'Address Name','13','address_name',NULL,0,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(208,21,'Street Address Parsing','14','street_address_parsing',NULL,0,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(209,22,'Access Control','1','Access Control',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(210,22,'Mailing List','2','Mailing List',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(211,23,'Submitted','1','Submitted',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(212,23,'Eligible','2','Eligible',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(213,23,'Ineligible','3','Ineligible',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(214,23,'Paid','4','Paid',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(215,23,'Awaiting Information','5','Awaiting Information',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(216,23,'Withdrawn','6','Withdrawn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(217,23,'Approved for Payment','7','Approved for Payment',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(218,25,'CRM_Contact_Form_Search_Custom_Sample','1','CRM_Contact_Form_Search_Custom_Sample',NULL,0,NULL,1,'Household Name and State',0,0,1,NULL,NULL,NULL,NULL,NULL),(219,25,'CRM_Contact_Form_Search_Custom_ContributionAggregate','2','CRM_Contact_Form_Search_Custom_ContributionAggregate',NULL,0,NULL,2,'Contribution Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(220,25,'CRM_Contact_Form_Search_Custom_Group','4','CRM_Contact_Form_Search_Custom_Group',NULL,0,NULL,4,'Include / Exclude Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(221,25,'CRM_Contact_Form_Search_Custom_PostalMailing','5','CRM_Contact_Form_Search_Custom_PostalMailing',NULL,0,NULL,5,'Postal Mailing',0,0,1,NULL,NULL,NULL,NULL,NULL),(222,25,'CRM_Contact_Form_Search_Custom_Proximity','6','CRM_Contact_Form_Search_Custom_Proximity',NULL,0,NULL,6,'Proximity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(223,25,'CRM_Contact_Form_Search_Custom_EventAggregate','7','CRM_Contact_Form_Search_Custom_EventAggregate',NULL,0,NULL,7,'Event Aggregate',0,0,1,NULL,NULL,NULL,NULL,NULL),(224,25,'CRM_Contact_Form_Search_Custom_ActivitySearch','8','CRM_Contact_Form_Search_Custom_ActivitySearch',NULL,0,NULL,8,'Activity Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(225,25,'CRM_Contact_Form_Search_Custom_PriceSet','9','CRM_Contact_Form_Search_Custom_PriceSet',NULL,0,NULL,9,'Price Set Details for Event Participants',0,0,1,NULL,NULL,NULL,NULL,NULL),(226,25,'CRM_Contact_Form_Search_Custom_ZipCodeRange','10','CRM_Contact_Form_Search_Custom_ZipCodeRange',NULL,0,NULL,10,'Zip Code Range',0,0,1,NULL,NULL,NULL,NULL,NULL),(227,25,'CRM_Contact_Form_Search_Custom_DateAdded','11','CRM_Contact_Form_Search_Custom_DateAdded',NULL,0,NULL,11,'Date Added to CiviCRM',0,0,1,NULL,NULL,NULL,NULL,NULL),(228,25,'CRM_Contact_Form_Search_Custom_MultipleValues','12','CRM_Contact_Form_Search_Custom_MultipleValues',NULL,0,NULL,12,'Custom Group Multiple Values Listing',0,0,1,NULL,NULL,NULL,NULL,NULL),(229,25,'CRM_Contact_Form_Search_Custom_ContribSYBNT','13','CRM_Contact_Form_Search_Custom_ContribSYBNT',NULL,0,NULL,13,'Contributions made in Year X and not Year Y',0,0,1,NULL,NULL,NULL,NULL,NULL),(230,25,'CRM_Contact_Form_Search_Custom_TagContributions','14','CRM_Contact_Form_Search_Custom_TagContributions',NULL,0,NULL,14,'Find Contribution Amounts by Tag',0,0,1,NULL,NULL,NULL,NULL,NULL),(231,25,'CRM_Contact_Form_Search_Custom_FullText','15','CRM_Contact_Form_Search_Custom_FullText',NULL,0,NULL,15,'Full-text Search',0,0,1,NULL,NULL,NULL,NULL,NULL),(232,41,'Constituent Report (Summary)','contact/summary','CRM_Report_Form_Contact_Summary',NULL,0,NULL,1,'Provides a list of address and telephone information for constituent records in your system.',0,0,1,NULL,NULL,NULL,NULL,NULL),(233,41,'Constituent Report (Detail)','contact/detail','CRM_Report_Form_Contact_Detail',NULL,0,NULL,2,'Provides contact-related information on contributions, memberships, events and activities.',0,0,1,NULL,NULL,NULL,NULL,NULL),(234,41,'Activity Details Report','activity','CRM_Report_Form_Activity',NULL,0,NULL,3,'Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)',0,0,1,NULL,NULL,NULL,NULL,NULL),(235,41,'Walk / Phone List Report','walklist','CRM_Report_Form_Walklist_Walklist',NULL,0,NULL,4,'Provides a detailed report for your walk/phonelist for targeted contacts',0,0,0,NULL,NULL,NULL,NULL,NULL),(236,41,'Current Employer Report','contact/currentEmployer','CRM_Report_Form_Contact_CurrentEmployer',NULL,0,NULL,5,'Provides detail list of employer employee relationships along with employment details Ex Join Date',0,0,1,NULL,NULL,NULL,NULL,NULL),(237,41,'Contribution Summary Report','contribute/summary','CRM_Report_Form_Contribute_Summary',NULL,0,NULL,6,'Groups and totals contributions by criteria including contact, time period, financial type, contributor location, etc.',0,0,1,2,NULL,NULL,NULL,NULL),(238,41,'Contribution Detail Report','contribute/detail','CRM_Report_Form_Contribute_Detail',NULL,0,NULL,7,'Lists specific contributions by criteria including contact, time period, financial type, contributor location, etc. Contribution summary report points to this report for contribution details.',0,0,1,2,NULL,NULL,NULL,NULL),(239,41,'Repeat Contributions Report','contribute/repeat','CRM_Report_Form_Contribute_Repeat',NULL,0,NULL,8,'Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.',0,0,1,2,NULL,NULL,NULL,NULL),(240,41,'Contributions by Organization Report','contribute/organizationSummary','CRM_Report_Form_Contribute_OrganizationSummary',NULL,0,NULL,9,'Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.',0,0,1,2,NULL,NULL,NULL,NULL),(241,41,'Contributions by Household Report','contribute/householdSummary','CRM_Report_Form_Contribute_HouseholdSummary',NULL,0,NULL,10,'Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.',0,0,1,2,NULL,NULL,NULL,NULL),(242,41,'Top Donors Report','contribute/topDonor','CRM_Report_Form_Contribute_TopDonor',NULL,0,NULL,11,'Provides a list of the top donors during a time period you define. You can include as many donors as you want (for example, top 100 of your donors).',0,0,1,2,NULL,NULL,NULL,NULL),(243,41,'SYBUNT Report','contribute/sybunt','CRM_Report_Form_Contribute_Sybunt',NULL,0,NULL,12,'SYBUNT means some year(s) but not this year. Provides a list of constituents who donated at some time in the history of your organization but did not donate during the time period you specify.',0,0,1,2,NULL,NULL,NULL,NULL),(244,41,'LYBUNT Report','contribute/lybunt','CRM_Report_Form_Contribute_Lybunt',NULL,0,NULL,13,'LYBUNT means last year but not this year. Provides a list of constituents who donated last year but did not donate during the time period you specify as the current year.',0,0,1,2,NULL,NULL,NULL,NULL),(245,41,'Soft Credit Report','contribute/softcredit','CRM_Report_Form_Contribute_SoftCredit',NULL,0,NULL,14,'Shows contributions made by contacts that have been soft-credited to other contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(246,41,'Membership Report (Summary)','member/summary','CRM_Report_Form_Member_Summary',NULL,0,NULL,15,'Provides a summary of memberships by type and join date.',0,0,1,3,NULL,NULL,NULL,NULL),(247,41,'Membership Report (Detail)','member/detail','CRM_Report_Form_Member_Detail',NULL,0,NULL,16,'Provides a list of members along with their membership status and membership details (Join Date, Start Date, End Date). Can also display contributions (payments) associated with each membership.',0,0,1,3,NULL,NULL,NULL,NULL),(248,41,'Membership Report (Lapsed)','member/lapse','CRM_Report_Form_Member_Lapse',NULL,0,NULL,17,'Provides a list of memberships that lapsed or will lapse before the date you specify.',0,0,1,3,NULL,NULL,NULL,NULL),(249,41,'Event Participant Report (List)','event/participantListing','CRM_Report_Form_Event_ParticipantListing',NULL,0,NULL,18,'Provides lists of participants for an event.',0,0,1,1,NULL,NULL,NULL,NULL),(250,41,'Event Income Report (Summary)','event/summary','CRM_Report_Form_Event_Summary',NULL,0,NULL,19,'Provides an overview of event income. You can include key information such as event ID, registration, attendance, and income generated to help you determine the success of an event.',0,0,1,1,NULL,NULL,NULL,NULL),(251,41,'Event Income Report (Detail)','event/income','CRM_Report_Form_Event_Income',NULL,0,NULL,20,'Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.',0,0,1,1,NULL,NULL,NULL,NULL),(252,41,'Pledge Detail Report','pledge/detail','CRM_Report_Form_Pledge_Detail',NULL,0,NULL,21,'List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.',0,0,1,6,NULL,NULL,NULL,NULL),(253,41,'Pledged but not Paid Report','pledge/pbnp','CRM_Report_Form_Pledge_Pbnp',NULL,0,NULL,22,'Pledged but not Paid Report',0,0,1,6,NULL,NULL,NULL,NULL),(254,41,'Relationship Report','contact/relationship','CRM_Report_Form_Contact_Relationship',NULL,0,NULL,23,'Relationship Report',0,0,1,NULL,NULL,NULL,NULL,NULL),(255,41,'Case Summary Report','case/summary','CRM_Report_Form_Case_Summary',NULL,0,NULL,24,'Provides a summary of cases and their duration by date range, status, staff member and / or case role.',0,0,1,7,NULL,NULL,NULL,NULL),(256,41,'Case Time Spent Report','case/timespent','CRM_Report_Form_Case_TimeSpent',NULL,0,NULL,25,'Aggregates time spent on case and / or non-case activities by activity type and contact.',0,0,1,7,NULL,NULL,NULL,NULL),(257,41,'Contact Demographics Report','case/demographics','CRM_Report_Form_Case_Demographics',NULL,0,NULL,26,'Demographic breakdown for case clients (and or non-case contacts) in your database. Includes custom contact fields.',0,0,1,7,NULL,NULL,NULL,NULL),(258,41,'Database Log Report','contact/log','CRM_Report_Form_Contact_Log',NULL,0,NULL,27,'Log of contact and activity records created or updated in a given date range.',0,0,1,NULL,NULL,NULL,NULL,NULL),(259,41,'Activity Summary Report','activitySummary','CRM_Report_Form_ActivitySummary',NULL,0,NULL,28,'Shows activity statistics by type / date',0,0,1,NULL,NULL,NULL,NULL,NULL),(260,41,'Bookkeeping Transactions Report','contribute/bookkeeping','CRM_Report_Form_Contribute_Bookkeeping',NULL,0,0,29,'Shows Bookkeeping Transactions Report',0,0,1,2,NULL,NULL,NULL,NULL),(261,41,'Grant Report (Detail)','grant/detail','CRM_Report_Form_Grant_Detail',NULL,0,0,30,'Grant Report Detail',0,0,1,5,NULL,NULL,NULL,NULL),(262,41,'Participant list Count Report','event/participantlist','CRM_Report_Form_Event_ParticipantListCount',NULL,0,0,31,'Shows the Participant list with Participant Count.',0,0,1,1,NULL,NULL,NULL,NULL),(263,41,'Income Count Summary Report','event/incomesummary','CRM_Report_Form_Event_IncomeCountSummary',NULL,0,0,32,'Shows the Income Summary of events with Count.',0,0,1,1,NULL,NULL,NULL,NULL),(264,41,'Case Detail Report','case/detail','CRM_Report_Form_Case_Detail',NULL,0,0,33,'Case Details',0,0,1,7,NULL,NULL,NULL,NULL),(265,41,'Mail Bounce Report','Mailing/bounce','CRM_Report_Form_Mailing_Bounce',NULL,0,NULL,34,'Bounce Report for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(266,41,'Mail Summary Report','Mailing/summary','CRM_Report_Form_Mailing_Summary',NULL,0,NULL,35,'Summary statistics for mailings',0,0,1,4,NULL,NULL,NULL,NULL),(267,41,'Mail Opened Report','Mailing/opened','CRM_Report_Form_Mailing_Opened',NULL,0,NULL,36,'Display contacts who opened emails from a mailing',0,0,1,4,NULL,NULL,NULL,NULL),(268,41,'Mail Click-Through Report','Mailing/clicks','CRM_Report_Form_Mailing_Clicks',NULL,0,NULL,37,'Display clicks from each mailing',0,0,1,4,NULL,NULL,NULL,NULL),(269,41,'Contact Logging Report (Summary)','logging/contact/summary','CRM_Report_Form_Contact_LoggingSummary',NULL,0,NULL,38,'Contact modification report for the logging infrastructure (summary).',0,0,0,NULL,NULL,NULL,NULL,NULL),(270,41,'Contact Logging Report (Detail)','logging/contact/detail','CRM_Report_Form_Contact_LoggingDetail',NULL,0,NULL,39,'Contact modification report for the logging infrastructure (detail).',0,0,0,NULL,NULL,NULL,NULL,NULL),(271,41,'Grant Report (Statistics)','grant/statistics','CRM_Report_Form_Grant_Statistics',NULL,0,NULL,42,'Shows statistics for Grants.',0,0,1,5,NULL,NULL,NULL,NULL),(272,41,'Survey Report (Detail)','survey/detail','CRM_Report_Form_Campaign_SurveyDetails',NULL,0,NULL,43,'Detailed report for canvassing, phone-banking, walk lists or other surveys.',0,0,1,9,NULL,NULL,NULL,NULL),(273,41,'Personal Campaign Page Report','contribute/pcp','CRM_Report_Form_Contribute_PCP',NULL,0,NULL,44,'Summarizes amount raised and number of contributors for each Personal Campaign Page.',0,0,1,2,NULL,NULL,NULL,NULL),(274,41,'Pledge Summary Report','pledge/summary','CRM_Report_Form_Pledge_Summary',NULL,0,NULL,45,'Groups and totals pledges by criteria including contact, time period, pledge status, location, etc.',0,0,1,6,NULL,NULL,NULL,NULL),(275,41,'Contribution Aggregate by Relationship','contribute/history','CRM_Report_Form_Contribute_History',NULL,0,NULL,46,'List contact\'s donation history, grouped by year, along with contributions attributed to any of the contact\'s related contacts.',0,0,1,2,NULL,NULL,NULL,NULL),(276,41,'Mail Detail Report','mailing/detail','CRM_Report_Form_Mailing_Detail',NULL,0,NULL,47,'Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.',0,0,1,4,NULL,NULL,NULL,NULL),(277,41,'Contribution and Membership Details','member/contributionDetail','CRM_Report_Form_Member_ContributionDetail',NULL,0,NULL,48,'Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.',0,0,1,3,NULL,NULL,NULL,NULL),(278,41,'Recurring Contributions Report','contribute/recur','CRM_Report_Form_Contribute_Recur',NULL,0,NULL,49,'Provides information about the status of recurring contributions',0,0,1,2,NULL,NULL,NULL,NULL),(279,41,'Recurring Contributions Summary','contribute/recursummary','CRM_Report_Form_Contribute_RecurSummary',NULL,0,NULL,49,'Provides simple summary for each payment instrument for which there are recurring contributions (e.g. Credit Card, Standing Order, Direct Debit, etc., NULL), showing within a given date range.',0,0,1,2,NULL,NULL,NULL,NULL),(280,41,'Deferred Revenue Details','contribute/deferredrevenue','CRM_Report_Form_Contribute_DeferredRevenue',NULL,0,NULL,50,'Deferred Revenue Details Report',0,0,1,2,NULL,NULL,NULL,NULL),(281,26,'Scheduled','1','Scheduled',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(282,26,'Completed','2','Completed',NULL,1,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(283,26,'Cancelled','3','Cancelled',NULL,2,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(284,26,'Left Message','4','Left Message',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(285,26,'Unreachable','5','Unreachable',NULL,2,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(286,26,'Not Required','6','Not Required',NULL,2,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(287,26,'Available','7','Available',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(288,26,'No-show','8','No_show',NULL,2,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(289,28,'Ongoing','1','Open','Opened',0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(290,28,'Resolved','2','Closed','Closed',0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(291,28,'Urgent','3','Urgent','Opened',0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(292,29,'Name Only','1','Name Only',NULL,0,0,1,'CRM_Event_Page_ParticipantListing_Name',0,1,1,NULL,NULL,NULL,NULL,NULL),(293,29,'Name and Email','2','Name and Email',NULL,0,0,2,'CRM_Event_Page_ParticipantListing_NameAndEmail',0,1,1,NULL,NULL,NULL,NULL,NULL),(294,29,'Name, Status and Register Date','3','Name, Status and Register Date',NULL,0,0,3,'CRM_Event_Page_ParticipantListing_NameStatusAndDate',0,1,1,NULL,NULL,NULL,NULL,NULL),(295,30,'jpg','1','jpg',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(296,30,'jpeg','2','jpeg',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(297,30,'png','3','png',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(298,30,'gif','4','gif',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(299,30,'txt','5','txt',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(300,30,'pdf','6','pdf',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(301,30,'doc','7','doc',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(302,30,'xls','8','xls',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(303,30,'rtf','9','rtf',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(304,30,'csv','10','csv',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(305,30,'ppt','11','ppt',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(306,30,'docx','12','docx',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(307,30,'xlsx','13','xlsx',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(308,30,'odt','14','odt',NULL,0,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(309,30,'ics','15','ics',NULL,0,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(310,30,'pptx','16','pptx',NULL,0,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(311,33,'Textarea','1','Textarea',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(312,33,'CKEditor','2','CKEditor',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(313,32,'Search Builder','1','Search Builder',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(314,32,'Import Contact','2','Import Contact',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(315,32,'Import Activity','3','Import Activity',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(316,32,'Import Contribution','4','Import Contribution',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(317,32,'Import Membership','5','Import Membership',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(318,32,'Import Participant','6','Import Participant',NULL,0,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(319,32,'Export Contact','7','Export Contact',NULL,0,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(320,32,'Export Contribution','8','Export Contribution',NULL,0,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(321,32,'Export Membership','9','Export Membership',NULL,0,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(322,32,'Export Participant','10','Export Participant',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(323,32,'Export Pledge','11','Export Pledge',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(324,32,'Export Case','12','Export Case',NULL,0,0,12,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(325,32,'Export Grant','13','Export Grant',NULL,0,0,13,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(326,32,'Export Activity','14','Export Activity',NULL,0,0,14,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(327,34,'day','day','day',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(328,34,'week','week','week',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(329,34,'month','month','month',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(330,34,'year','year','year',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(331,35,'Phone','1','Phone',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(332,35,'Mobile','2','Mobile',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(333,35,'Fax','3','Fax',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(334,35,'Pager','4','Pager',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(335,35,'Voicemail','5','Voicemail',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(336,36,'Participant Role','1','ParticipantRole',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(337,36,'Participant Event Name','2','ParticipantEventName',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(338,36,'Participant Event Type','3','ParticipantEventType',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(339,37,'Public','1','public',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(340,37,'Admin','2','admin',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(341,38,'IMAP','1','IMAP',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(342,38,'Maildir','2','Maildir',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(343,38,'POP3','3','POP3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(344,38,'Localdir','4','Localdir',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(345,39,'Urgent','1','Urgent',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(346,39,'Normal','2','Normal',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(347,39,'Low','3','Low',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(348,40,'Vancouver','city_','city_',NULL,0,NULL,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(349,40,'/(19|20)(\\d{2})-(\\d{1,2})-(\\d{1,2})/','date_','date_',NULL,1,NULL,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(350,42,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(351,42,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(352,42,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(353,42,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(354,42,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(355,43,'Dear {contact.first_name}','1','Dear {contact.first_name}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(356,43,'Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}','2','Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}',NULL,1,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(357,43,'Dear {contact.individual_prefix} {contact.last_name}','3','Dear {contact.individual_prefix} {contact.last_name}',NULL,1,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(358,43,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(359,43,'Dear {contact.household_name}','5','Dear {contact.household_name}',NULL,2,1,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(360,44,'{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}','1','}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}',NULL,1,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(361,44,'{contact.household_name}','2','{contact.household_name}',NULL,2,1,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(362,44,'{contact.organization_name}','3','{contact.organization_name}',NULL,3,1,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(363,44,'Customized','4','Customized',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(364,47,'Work','1','Work',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(365,47,'Main','2','Main',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(366,47,'Facebook','3','Facebook',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(367,47,'Instagram','5','Instagram',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(368,47,'LinkedIn','6','LinkedIn',NULL,0,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(369,47,'MySpace','7','MySpace',NULL,0,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(370,47,'Pinterest','8','Pinterest',NULL,0,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(371,47,'SnapChat','9','SnapChat',NULL,0,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(372,47,'Tumblr','10','Tumblr',NULL,0,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(373,47,'Twitter','11','Twitter',NULL,0,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(374,47,'Vine','12','Vine ',NULL,0,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(375,48,'Contacts','civicrm_contact','Contacts',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(376,48,'Activities','civicrm_activity','Activities',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(377,48,'Cases','civicrm_case','Cases',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(378,48,'Attachments','civicrm_file','Attachements',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(379,49,'USD ($)','USD','USD',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(380,50,'Name Only','1','CRM_Event_Badge_Simple',NULL,0,0,1,'Simple Event Name Badge',0,1,1,NULL,NULL,NULL,NULL,NULL),(381,50,'Name Tent','2','CRM_Event_Badge_NameTent',NULL,0,0,2,'Name Tent',0,1,1,NULL,NULL,NULL,NULL,NULL),(382,50,'With Logo','3','CRM_Event_Badge_Logo',NULL,0,0,3,'You can set your own background image',0,1,1,NULL,NULL,NULL,NULL,NULL),(383,50,'5395 with Logo','4','CRM_Event_Badge_Logo5395',NULL,0,0,4,'Avery 5395 compatible labels with logo (4 up by 2, 59.2mm x 85.7mm)',0,1,1,NULL,NULL,NULL,NULL,NULL),(384,51,'None','0','None',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(385,51,'Author Only','1','Author Only',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(386,52,'Direct Mail','1','Direct Mail',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(387,52,'Referral Program','2','Referral Program',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(388,52,'Constituent Engagement','3','Constituent Engagement',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(389,53,'Planned','1','Planned',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(390,53,'In Progress','2','In Progress',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(391,53,'Completed','3','Completed',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(392,53,'Cancelled','4','Cancelled',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(393,56,'1','1','1',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(394,56,'2','2','2',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(395,56,'3','3','3',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(396,56,'4','4','4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(397,56,'5','5','5',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(398,58,'Letter','{\"metric\":\"in\",\"width\":8.5,\"height\":11}','letter',NULL,NULL,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(399,58,'Legal','{\"metric\":\"in\",\"width\":8.5,\"height\":14}','legal',NULL,NULL,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(400,58,'Ledger','{\"metric\":\"in\",\"width\":17,\"height\":11}','ledger',NULL,NULL,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(401,58,'Tabloid','{\"metric\":\"in\",\"width\":11,\"height\":17}','tabloid',NULL,NULL,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(402,58,'Executive','{\"metric\":\"in\",\"width\":7.25,\"height\":10.5}','executive',NULL,NULL,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(403,58,'Folio','{\"metric\":\"in\",\"width\":8.5,\"height\":13}','folio',NULL,NULL,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(404,58,'Envelope #9','{\"metric\":\"pt\",\"width\":638.93,\"height\":278.93}','envelope-9',NULL,NULL,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(405,58,'Envelope #10','{\"metric\":\"pt\",\"width\":684,\"height\":297}','envelope-10',NULL,NULL,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(406,58,'Envelope #11','{\"metric\":\"pt\",\"width\":747,\"height\":324}','envelope-11',NULL,NULL,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(407,58,'Envelope #12','{\"metric\":\"pt\",\"width\":792,\"height\":342}','envelope-12',NULL,NULL,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(408,58,'Envelope #14','{\"metric\":\"pt\",\"width\":828,\"height\":360}','envelope-14',NULL,NULL,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(409,58,'Envelope ISO B4','{\"metric\":\"pt\",\"width\":1000.63,\"height\":708.66}','envelope-b4',NULL,NULL,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(410,58,'Envelope ISO B5','{\"metric\":\"pt\",\"width\":708.66,\"height\":498.9}','envelope-b5',NULL,NULL,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(411,58,'Envelope ISO B6','{\"metric\":\"pt\",\"width\":498.9,\"height\":354.33}','envelope-b6',NULL,NULL,0,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(412,58,'Envelope ISO C3','{\"metric\":\"pt\",\"width\":1298.27,\"height\":918.42}','envelope-c3',NULL,NULL,0,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(413,58,'Envelope ISO C4','{\"metric\":\"pt\",\"width\":918.42,\"height\":649.13}','envelope-c4',NULL,NULL,0,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(414,58,'Envelope ISO C5','{\"metric\":\"pt\",\"width\":649.13,\"height\":459.21}','envelope-c5',NULL,NULL,0,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(415,58,'Envelope ISO C6','{\"metric\":\"pt\",\"width\":459.21,\"height\":323.15}','envelope-c6',NULL,NULL,0,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(416,58,'Envelope ISO DL','{\"metric\":\"pt\",\"width\":623.622,\"height\":311.811}','envelope-dl',NULL,NULL,0,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(417,58,'ISO A0','{\"metric\":\"pt\",\"width\":2383.94,\"height\":3370.39}','a0',NULL,NULL,0,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(418,58,'ISO A1','{\"metric\":\"pt\",\"width\":1683.78,\"height\":2383.94}','a1',NULL,NULL,0,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(419,58,'ISO A2','{\"metric\":\"pt\",\"width\":1190.55,\"height\":1683.78}','a2',NULL,NULL,0,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(420,58,'ISO A3','{\"metric\":\"pt\",\"width\":841.89,\"height\":1190.55}','a3',NULL,NULL,0,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(421,58,'ISO A4','{\"metric\":\"pt\",\"width\":595.28,\"height\":841.89}','a4',NULL,NULL,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(422,58,'ISO A5','{\"metric\":\"pt\",\"width\":419.53,\"height\":595.28}','a5',NULL,NULL,0,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(423,58,'ISO A6','{\"metric\":\"pt\",\"width\":297.64,\"height\":419.53}','a6',NULL,NULL,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(424,58,'ISO A7','{\"metric\":\"pt\",\"width\":209.76,\"height\":297.64}','a7',NULL,NULL,0,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(425,58,'ISO A8','{\"metric\":\"pt\",\"width\":147.4,\"height\":209.76}','a8',NULL,NULL,0,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(426,58,'ISO A9','{\"metric\":\"pt\",\"width\":104.88,\"height\":147.4}','a9',NULL,NULL,0,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(427,58,'ISO A10','{\"metric\":\"pt\",\"width\":73.7,\"height\":104.88}','a10',NULL,NULL,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(428,58,'ISO B0','{\"metric\":\"pt\",\"width\":2834.65,\"height\":4008.19}','b0',NULL,NULL,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(429,58,'ISO B1','{\"metric\":\"pt\",\"width\":2004.09,\"height\":2834.65}','b1',NULL,NULL,0,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(430,58,'ISO B2','{\"metric\":\"pt\",\"width\":1417.32,\"height\":2004.09}','b2',NULL,NULL,0,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(431,58,'ISO B3','{\"metric\":\"pt\",\"width\":1000.63,\"height\":1417.32}','b3',NULL,NULL,0,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(432,58,'ISO B4','{\"metric\":\"pt\",\"width\":708.66,\"height\":1000.63}','b4',NULL,NULL,0,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(433,58,'ISO B5','{\"metric\":\"pt\",\"width\":498.9,\"height\":708.66}','b5',NULL,NULL,0,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(434,58,'ISO B6','{\"metric\":\"pt\",\"width\":354.33,\"height\":498.9}','b6',NULL,NULL,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(435,58,'ISO B7','{\"metric\":\"pt\",\"width\":249.45,\"height\":354.33}','b7',NULL,NULL,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(436,58,'ISO B8','{\"metric\":\"pt\",\"width\":175.75,\"height\":249.45}','b8',NULL,NULL,0,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(437,58,'ISO B9','{\"metric\":\"pt\",\"width\":124.72,\"height\":175.75}','b9',NULL,NULL,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(438,58,'ISO B10','{\"metric\":\"pt\",\"width\":87.87,\"height\":124.72}','b10',NULL,NULL,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(439,58,'ISO C0','{\"metric\":\"pt\",\"width\":2599.37,\"height\":3676.54}','c0',NULL,NULL,0,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(440,58,'ISO C1','{\"metric\":\"pt\",\"width\":1836.85,\"height\":2599.37}','c1',NULL,NULL,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(441,58,'ISO C2','{\"metric\":\"pt\",\"width\":1298.27,\"height\":1836.85}','c2',NULL,NULL,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(442,58,'ISO C3','{\"metric\":\"pt\",\"width\":918.43,\"height\":1298.27}','c3',NULL,NULL,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(443,58,'ISO C4','{\"metric\":\"pt\",\"width\":649.13,\"height\":918.43}','c4',NULL,NULL,0,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(444,58,'ISO C5','{\"metric\":\"pt\",\"width\":459.21,\"height\":649.13}','c5',NULL,NULL,0,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(445,58,'ISO C6','{\"metric\":\"pt\",\"width\":323.15,\"height\":459.21}','c6',NULL,NULL,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(446,58,'ISO C7','{\"metric\":\"pt\",\"width\":229.61,\"height\":323.15}','c7',NULL,NULL,0,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(447,58,'ISO C8','{\"metric\":\"pt\",\"width\":161.57,\"height\":229.61}','c8',NULL,NULL,0,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(448,58,'ISO C9','{\"metric\":\"pt\",\"width\":113.39,\"height\":161.57}','c9',NULL,NULL,0,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(449,58,'ISO C10','{\"metric\":\"pt\",\"width\":79.37,\"height\":113.39}','c10',NULL,NULL,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(450,58,'ISO RA0','{\"metric\":\"pt\",\"width\":2437.8,\"height\":3458.27}','ra0',NULL,NULL,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(451,58,'ISO RA1','{\"metric\":\"pt\",\"width\":1729.13,\"height\":2437.8}','ra1',NULL,NULL,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(452,58,'ISO RA2','{\"metric\":\"pt\",\"width\":1218.9,\"height\":1729.13}','ra2',NULL,NULL,0,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(453,58,'ISO RA3','{\"metric\":\"pt\",\"width\":864.57,\"height\":1218.9}','ra3',NULL,NULL,0,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(454,58,'ISO RA4','{\"metric\":\"pt\",\"width\":609.45,\"height\":864.57}','ra4',NULL,NULL,0,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(455,58,'ISO SRA0','{\"metric\":\"pt\",\"width\":2551.18,\"height\":3628.35}','sra0',NULL,NULL,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(456,58,'ISO SRA1','{\"metric\":\"pt\",\"width\":1814.17,\"height\":2551.18}','sra1',NULL,NULL,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(457,58,'ISO SRA2','{\"metric\":\"pt\",\"width\":1275.59,\"height\":1814.17}','sra2',NULL,NULL,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(458,58,'ISO SRA3','{\"metric\":\"pt\",\"width\":907.09,\"height\":1275.59}','sra3',NULL,NULL,0,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(459,58,'ISO SRA4','{\"metric\":\"pt\",\"width\":637.8,\"height\":907.09}','sra4',NULL,NULL,0,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(460,61,'Activity Assignees','1','Activity Assignees',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(461,61,'Activity Source','2','Activity Source',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(462,61,'Activity Targets','3','Activity Targets',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(463,71,'Asset','1','Asset',NULL,0,0,1,'Things you own',0,1,1,2,NULL,NULL,NULL,NULL),(464,71,'Liability','2','Liability',NULL,0,0,2,'Things you owe, like a grant still to be disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(465,71,'Revenue','3','Revenue',NULL,0,1,3,'Income from contributions and sales of tickets and memberships',0,1,1,2,NULL,NULL,NULL,NULL),(466,71,'Cost of Sales','4','Cost of Sales',NULL,0,0,4,'Costs incurred to get revenue, e.g. premiums for donations, dinner for a fundraising dinner ticket',0,1,1,2,NULL,NULL,NULL,NULL),(467,71,'Expenses','5','Expenses',NULL,0,0,5,'Things that are paid for that are consumable, e.g. grants disbursed',0,1,1,2,NULL,NULL,NULL,NULL),(468,62,'Income Account is','1','Income Account is',NULL,0,1,1,'Income Account is',0,1,1,2,NULL,NULL,NULL,NULL),(469,62,'Credit/Contra Revenue Account is','2','Credit/Contra Revenue Account is',NULL,0,0,2,'Credit/Contra Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(470,62,'Accounts Receivable Account is','3','Accounts Receivable Account is',NULL,0,0,3,'Accounts Receivable Account is',0,1,1,2,NULL,NULL,NULL,NULL),(471,62,'Credit Liability Account is','4','Credit Liability Account is',NULL,0,0,4,'Credit Liability Account is',0,1,0,2,NULL,NULL,NULL,NULL),(472,62,'Expense Account is','5','Expense Account is',NULL,0,0,5,'Expense Account is',0,1,1,2,NULL,NULL,NULL,NULL),(473,62,'Asset Account is','6','Asset Account is',NULL,0,0,6,'Asset Account is',0,1,1,2,NULL,NULL,NULL,NULL),(474,62,'Cost of Sales Account is','7','Cost of Sales Account is',NULL,0,0,7,'Cost of Sales Account is',0,1,1,2,NULL,NULL,NULL,NULL),(475,62,'Premiums Inventory Account is','8','Premiums Inventory Account is',NULL,0,0,8,'Premiums Inventory Account is',0,1,1,2,NULL,NULL,NULL,NULL),(476,62,'Discounts Account is','9','Discounts Account is',NULL,0,0,9,'Discounts Account is',0,1,1,2,NULL,NULL,NULL,NULL),(477,62,'Sales Tax Account is','10','Sales Tax Account is',NULL,0,0,10,'Sales Tax Account is',0,1,1,2,NULL,NULL,NULL,NULL),(478,62,'Chargeback Account is','11','Chargeback Account is',NULL,0,0,11,'Chargeback Account is',0,1,1,2,NULL,NULL,NULL,NULL),(479,62,'Deferred Revenue Account is','12','Deferred Revenue Account is',NULL,0,0,12,'Deferred Revenue Account is',0,1,1,2,NULL,NULL,NULL,NULL),(480,63,'Participant Role','1','participant_role',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(481,64,'Morning Sessions','1','Morning Sessions',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(482,64,'Evening Sessions','2','Evening Sessions',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(483,65,'Contribution','1','Contribution',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(484,65,'Membership','2','Membership',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(485,65,'Pledge Payment','3','Pledge Payment',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(486,67,'Open','1','Open',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(487,67,'Closed','2','Closed',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(488,67,'Data Entry','3','Data Entry',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(489,67,'Reopened','4','Reopened',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(490,67,'Exported','5','Exported',NULL,0,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(491,66,'Manual Batch','1','Manual Batch',NULL,0,0,1,'Manual Batch',0,1,1,2,NULL,NULL,NULL,NULL),(492,66,'Automatic Batch','2','Automatic Batch',NULL,0,0,2,'Automatic Batch',0,1,1,2,NULL,NULL,NULL,NULL),(493,72,'Paid','1','Paid',NULL,0,0,1,'Paid',0,1,1,2,NULL,NULL,NULL,NULL),(494,72,'Partially paid','2','Partially paid',NULL,0,0,2,'Partially paid',0,1,1,2,NULL,NULL,NULL,NULL),(495,72,'Unpaid','3','Unpaid',NULL,0,0,1,'Unpaid',0,1,1,2,NULL,NULL,NULL,NULL),(496,68,'http','1','http',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(497,68,'xml','2','xml',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(498,68,'smtp','3','smtp',NULL,NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(499,70,'Renewal Reminder (non-auto-renew memberships only)','1','Renewal Reminder (non-auto-renew memberships only)',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(500,70,'Auto-renew Memberships Only','2','Auto-renew Memberships Only',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(501,70,'Reminder for Both','3','Reminder for Both',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(502,73,'Event Badge','1','Event Badge',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(503,74,'Avery 5395','{\"name\":\"Avery 5395\",\"paper-size\":\"a4\",\"metric\":\"mm\",\"lMargin\":15,\"tMargin\":26,\"NX\":2,\"NY\":4,\"SpaceX\":10,\"SpaceY\":5,\"width\":83,\"height\":57,\"font-size\":12,\"orientation\":\"portrait\",\"font-name\":\"helvetica\",\"font-style\":\"\",\"lPadding\":3,\"tPadding\":3}','Avery 5395',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(504,74,'A6 Badge Portrait 150x106','{\"paper-size\":\"a4\",\"orientation\":\"landscape\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":1,\"metric\":\"mm\",\"lMargin\":25,\"tMargin\":27,\"SpaceX\":0,\"SpaceY\":35,\"width\":106,\"height\":150,\"lPadding\":5,\"tPadding\":5}','A6 Badge Portrait 150x106',NULL,0,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(505,74,'Fattorini Name Badge 100x65','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":4,\"metric\":\"mm\",\"lMargin\":6,\"tMargin\":19,\"SpaceX\":0,\"SpaceY\":0,\"width\":100,\"height\":65,\"lPadding\":0,\"tPadding\":0}','Fattorini Name Badge 100x65',NULL,0,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(506,74,'Hanging Badge 3-3/4\" x 4-3\"/4','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"times\",\"font-size\":6,\"font-style\":\"\",\"NX\":2,\"NY\":2,\"metric\":\"mm\",\"lMargin\":10,\"tMargin\":28,\"SpaceX\":0,\"SpaceY\":0,\"width\":96,\"height\":121,\"lPadding\":5,\"tPadding\":5}','Hanging Badge 3-3/4\" x 4-3\"/4',NULL,0,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(507,60,'Avery 3475','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":10,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":0,\"tMargin\":5,\"NX\":3,\"NY\":8,\"SpaceX\":0,\"SpaceY\":0,\"width\":70,\"height\":36,\"lPadding\":5.08,\"tPadding\":5.08}','3475','Avery',NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(508,60,'Avery 5160','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.21975,\"tMargin\":0.5,\"NX\":3,\"NY\":10,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":2.5935,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5160','Avery',NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(509,60,'Avery 5161','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.175,\"tMargin\":0.5,\"NX\":2,\"NY\":10,\"SpaceX\":0.15625,\"SpaceY\":0,\"width\":4,\"height\":1,\"lPadding\":0.20,\"tPadding\":0.20}','5161','Avery',NULL,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(510,60,'Avery 5162','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.1525,\"tMargin\":0.88,\"NX\":2,\"NY\":7,\"SpaceX\":0.195,\"SpaceY\":0,\"width\":4,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','5162','Avery',NULL,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(511,60,'Avery 5163','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.5,\"NX\":2,\"NY\":5,\"SpaceX\":0.14,\"SpaceY\":0,\"width\":4,\"height\":2,\"lPadding\":0.20,\"tPadding\":0.20}','5163','Avery',NULL,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(512,60,'Avery 5164','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":12,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.156,\"tMargin\":0.5,\"NX\":2,\"NY\":3,\"SpaceX\":0.1875,\"SpaceY\":0,\"width\":4,\"height\":3.33,\"lPadding\":0.20,\"tPadding\":0.20}','5164','Avery',NULL,0,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(513,60,'Avery 8600','{\"paper-size\":\"letter\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":8,\"font-style\":\"\",\"metric\":\"mm\",\"lMargin\":7.1,\"tMargin\":19,\"NX\":3,\"NY\":10,\"SpaceX\":9.5,\"SpaceY\":3.1,\"width\":66.6,\"height\":25.4,\"lPadding\":5.08,\"tPadding\":5.08}','8600','Avery',NULL,0,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(514,60,'Avery L7160','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.6,\"NX\":3,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7160','Avery',NULL,0,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(515,60,'Avery L7161','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.28,\"tMargin\":0.35,\"NX\":3,\"NY\":6,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":2.5,\"height\":1.83,\"lPadding\":0.20,\"tPadding\":0.20}','L7161','Avery',NULL,0,9,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(516,60,'Avery L7162','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.51,\"NX\":2,\"NY\":8,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.33,\"lPadding\":0.20,\"tPadding\":0.20}','L7162','Avery',NULL,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(517,60,'Avery L7163','{\"paper-size\":\"a4\",\"orientation\":\"portrait\",\"font-name\":\"dejavusans\",\"font-size\":9,\"font-style\":\"\",\"metric\":\"in\",\"lMargin\":0.18,\"tMargin\":0.6,\"NX\":2,\"NY\":7,\"SpaceX\":0.1,\"SpaceY\":0,\"width\":3.9,\"height\":1.5,\"lPadding\":0.20,\"tPadding\":0.20}','L7163','Avery',NULL,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(518,75,'Formal','1','formal',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(519,75,'Familiar','2','familiar',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(520,76,'Email','Email','Email',NULL,0,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(521,76,'SMS','SMS','SMS',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(522,76,'User Preference','User_Preference','User Preference',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(523,77,'Actual date only','1','Actual date only',NULL,NULL,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(524,77,'Each anniversary','2','Each anniversary',NULL,NULL,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(525,78,'Default','1','default',NULL,NULL,1,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(526,78,'CiviMail','2','civimail',NULL,NULL,0,2,NULL,0,1,1,4,NULL,NULL,NULL,NULL),(527,78,'CiviEvent','3','civievent',NULL,NULL,0,3,NULL,0,1,1,1,NULL,NULL,NULL,NULL),(528,82,'Production','Production','Production',NULL,NULL,1,1,'Production Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(529,82,'Staging','Staging','Staging',NULL,NULL,0,2,'Staging Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(530,82,'Development','Development','Development',NULL,NULL,0,3,'Development Environment',0,1,1,NULL,NULL,NULL,NULL,NULL),(531,79,'Today','this.day','this.day',NULL,NULL,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(532,79,'This week','this.week','this.week',NULL,NULL,NULL,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(533,79,'This calendar month','this.month','this.month',NULL,NULL,NULL,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(534,79,'This quarter','this.quarter','this.quarter',NULL,NULL,NULL,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(535,79,'This fiscal year','this.fiscal_year','this.fiscal_year',NULL,NULL,NULL,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(536,79,'This calendar year','this.year','this.year',NULL,NULL,NULL,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(537,79,'Yesterday','previous.day','previous.day',NULL,NULL,NULL,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(538,79,'Previous week','previous.week','previous.week',NULL,NULL,NULL,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(539,79,'Previous calendar month','previous.month','previous.month',NULL,NULL,NULL,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(540,79,'Previous quarter','previous.quarter','previous.quarter',NULL,NULL,NULL,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(541,79,'Previous fiscal year','previous.fiscal_year','previous.fiscal_year',NULL,NULL,NULL,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(542,79,'Previous calendar year','previous.year','previous.year',NULL,NULL,NULL,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(543,79,'Last 7 days including today','ending.week','ending.week',NULL,NULL,NULL,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(544,79,'Last 30 days including today','ending_30.day','ending.month',NULL,NULL,NULL,14,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(545,79,'Last 60 days including today','ending_60.day','ending_2.month',NULL,NULL,NULL,15,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(546,79,'Last 90 days including today','ending_90.day','ending.quarter',NULL,NULL,NULL,16,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(547,79,'Last 12 months including today','ending.year','ending.year',NULL,NULL,NULL,17,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(548,79,'Last 2 years including today','ending_2.year','ending_2.year',NULL,NULL,NULL,18,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(549,79,'Last 3 years including today','ending_3.year','ending_3.year',NULL,NULL,NULL,19,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(550,79,'Tomorrow','starting.day','starting.day',NULL,NULL,NULL,20,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(551,79,'Next week','next.week','next.week',NULL,NULL,NULL,21,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(552,79,'Next calendar month','next.month','next.month',NULL,NULL,NULL,22,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(553,79,'Next quarter','next.quarter','next.quarter',NULL,NULL,NULL,23,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(554,79,'Next fiscal year','next.fiscal_year','next.fiscal_year',NULL,NULL,NULL,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(555,79,'Next calendar year','next.year','next.year',NULL,NULL,NULL,25,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(556,79,'Next 7 days including today','starting.week','starting.week',NULL,NULL,NULL,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(557,79,'Next 30 days including today','starting.month','starting.month',NULL,NULL,NULL,27,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(558,79,'Next 60 days including today','starting_2.month','starting_2.month',NULL,NULL,NULL,28,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(559,79,'Next 90 days including today','starting.quarter','starting.quarter',NULL,NULL,NULL,29,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(560,79,'Next 12 months including today','starting.year','starting.year',NULL,NULL,NULL,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(561,79,'Current week to-date','current.week','current.week',NULL,NULL,NULL,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(562,79,'Current calendar month to-date','current.month','current.month',NULL,NULL,NULL,32,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(563,79,'Current quarter to-date','current.quarter','current.quarter',NULL,NULL,NULL,33,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(564,79,'Current calendar year to-date','current.year','current.year',NULL,NULL,NULL,34,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(565,79,'To end of yesterday','earlier.day','earlier.day',NULL,NULL,NULL,35,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(566,79,'To end of previous week','earlier.week','earlier.week',NULL,NULL,NULL,36,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(567,79,'To end of previous calendar month','earlier.month','earlier.month',NULL,NULL,NULL,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(568,79,'To end of previous quarter','earlier.quarter','earlier.quarter',NULL,NULL,NULL,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(569,79,'To end of previous calendar year','earlier.year','earlier.year',NULL,NULL,NULL,39,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(570,79,'From start of current day','greater.day','greater.day',NULL,NULL,NULL,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(571,79,'From start of current week','greater.week','greater.week',NULL,NULL,NULL,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(572,79,'From start of current calendar month','greater.month','greater.month',NULL,NULL,NULL,42,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(573,79,'From start of current quarter','greater.quarter','greater.quarter',NULL,NULL,NULL,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(574,79,'From start of current calendar year','greater.year','greater.year',NULL,NULL,NULL,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(575,79,'To end of current week','less.week','less.week',NULL,NULL,NULL,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(576,79,'To end of current calendar month','less.month','less.month',NULL,NULL,NULL,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(577,79,'To end of current quarter','less.quarter','less.quarter',NULL,NULL,NULL,47,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(578,79,'To end of current calendar year','less.year','less.year',NULL,NULL,NULL,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(579,79,'Previous 2 days','previous_2.day','previous_2.day',NULL,NULL,NULL,49,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(580,79,'Previous 2 weeks','previous_2.week','previous_2.week',NULL,NULL,NULL,50,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(581,79,'Previous 2 calendar months','previous_2.month','previous_2.month',NULL,NULL,NULL,51,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(582,79,'Previous 2 quarters','previous_2.quarter','previous_2.quarter',NULL,NULL,NULL,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(583,79,'Previous 2 calendar years','previous_2.year','previous_2.year',NULL,NULL,NULL,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(584,79,'Day prior to yesterday','previous_before.day','previous_before.day',NULL,NULL,NULL,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(585,79,'Week prior to previous week','previous_before.week','previous_before.week',NULL,NULL,NULL,55,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(586,79,'Month prior to previous calendar month','previous_before.month','previous_before.month',NULL,NULL,NULL,56,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(587,79,'Quarter prior to previous quarter','previous_before.quarter','previous_before.quarter',NULL,NULL,NULL,57,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(588,79,'Year prior to previous calendar year','previous_before.year','previous_before.year',NULL,NULL,NULL,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(589,79,'From end of previous week','greater_previous.week','greater_previous.week',NULL,NULL,NULL,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(590,79,'From end of previous calendar month','greater_previous.month','greater_previous.month',NULL,NULL,NULL,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(591,79,'From end of previous quarter','greater_previous.quarter','greater_previous.quarter',NULL,NULL,NULL,61,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(592,79,'From end of previous calendar year','greater_previous.year','greater_previous.year',NULL,NULL,NULL,62,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(593,80,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(594,80,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(595,80,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(596,80,'In Progress','5','In Progress',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(597,80,'Overdue','6','Overdue',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(598,81,'Completed','1','Completed',NULL,0,NULL,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(599,81,'Pending','2','Pending',NULL,0,NULL,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(600,81,'Cancelled','3','Cancelled',NULL,0,NULL,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(601,81,'Failed','4','Failed',NULL,0,NULL,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(602,81,'In Progress','5','In Progress',NULL,0,NULL,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(603,81,'Overdue','6','Overdue',NULL,0,NULL,6,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(604,81,'Processing','7','Processing',NULL,0,NULL,7,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(605,81,'Failing','8','Failing',NULL,0,NULL,8,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(606,83,'None','1','NONE',NULL,0,1,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(607,83,'By relationship to case client','2','BY_RELATIONSHIP',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(608,83,'Specific contact','3','SPECIFIC_CONTACT',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(609,83,'User creating the case','4','USER_CREATING_THE_CASE',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(610,31,'\"FIXME\" <info@EXAMPLE.ORG>','1','\"FIXME\" <info@EXAMPLE.ORG>',NULL,0,1,1,'Default domain email address and from name.',0,0,1,NULL,1,NULL,NULL,NULL),(611,24,'Emergency','1','Emergency',NULL,0,1,1,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(612,24,'Family Support','2','Family Support',NULL,0,NULL,2,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(613,24,'General Protection','3','General Protection',NULL,0,NULL,3,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(614,24,'Impunity','4','Impunity',NULL,0,NULL,4,NULL,0,0,1,NULL,1,NULL,NULL,NULL),(615,55,'Approved','1','Approved',NULL,0,1,1,NULL,0,1,1,4,1,NULL,NULL,NULL),(616,55,'Rejected','2','Rejected',NULL,0,0,2,NULL,0,1,1,4,1,NULL,NULL,NULL),(617,55,'None','3','None',NULL,0,0,3,NULL,0,1,1,4,1,NULL,NULL,NULL),(618,57,'Survey','Survey','civicrm_survey',NULL,0,NULL,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(619,57,'Cases','Case','civicrm_case',NULL,0,NULL,2,'CRM_Case_PseudoConstant::caseType;',0,0,1,NULL,NULL,NULL,NULL,NULL),(620,84,'Abkhaz','ab','ab_GE',NULL,0,0,1,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(621,84,'Afar','aa','aa_ET',NULL,0,0,2,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(622,84,'Afrikaans','af','af_ZA',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(623,84,'Akan','ak','ak_GH',NULL,0,0,4,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(624,84,'Albanian','sq','sq_AL',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(625,84,'Amharic','am','am_ET',NULL,0,0,6,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(626,84,'Arabic','ar','ar_EG',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(627,84,'Aragonese','an','an_ES',NULL,0,0,8,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(628,84,'Armenian','hy','hy_AM',NULL,0,0,9,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(629,84,'Assamese','as','as_IN',NULL,0,0,10,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(630,84,'Avaric','av','av_RU',NULL,0,0,11,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(631,84,'Avestan','ae','ae_XX',NULL,0,0,12,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(632,84,'Aymara','ay','ay_BO',NULL,0,0,13,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(633,84,'Azerbaijani','az','az_AZ',NULL,0,0,14,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(634,84,'Bambara','bm','bm_ML',NULL,0,0,15,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(635,84,'Bashkir','ba','ba_RU',NULL,0,0,16,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(636,84,'Basque','eu','eu_ES',NULL,0,0,17,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(637,84,'Belarusian','be','be_BY',NULL,0,0,18,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(638,84,'Bengali','bn','bn_BD',NULL,0,0,19,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(639,84,'Bihari','bh','bh_IN',NULL,0,0,20,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(640,84,'Bislama','bi','bi_VU',NULL,0,0,21,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(641,84,'Bosnian','bs','bs_BA',NULL,0,0,22,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(642,84,'Breton','br','br_FR',NULL,0,0,23,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(643,84,'Bulgarian','bg','bg_BG',NULL,0,0,24,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(644,84,'Burmese','my','my_MM',NULL,0,0,25,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(645,84,'Catalan; Valencian','ca','ca_ES',NULL,0,0,26,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(646,84,'Chamorro','ch','ch_GU',NULL,0,0,27,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(647,84,'Chechen','ce','ce_RU',NULL,0,0,28,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(648,84,'Chichewa; Chewa; Nyanja','ny','ny_MW',NULL,0,0,29,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(649,84,'Chinese (China)','zh','zh_CN',NULL,0,0,30,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(650,84,'Chinese (Taiwan)','zh','zh_TW',NULL,0,0,31,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(651,84,'Chuvash','cv','cv_RU',NULL,0,0,32,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(652,84,'Cornish','kw','kw_GB',NULL,0,0,33,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(653,84,'Corsican','co','co_FR',NULL,0,0,34,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(654,84,'Cree','cr','cr_CA',NULL,0,0,35,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(655,84,'Croatian','hr','hr_HR',NULL,0,0,36,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(656,84,'Czech','cs','cs_CZ',NULL,0,0,37,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(657,84,'Danish','da','da_DK',NULL,0,0,38,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(658,84,'Divehi; Dhivehi; Maldivian;','dv','dv_MV',NULL,0,0,39,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(659,84,'Dutch (Netherlands)','nl','nl_NL',NULL,0,0,40,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(660,84,'Dutch (Belgium)','nl','nl_BE',NULL,0,0,41,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(661,84,'Dzongkha','dz','dz_BT',NULL,0,0,42,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(662,84,'English (Australia)','en','en_AU',NULL,0,0,43,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(663,84,'English (Canada)','en','en_CA',NULL,0,0,44,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(664,84,'English (United Kingdom)','en','en_GB',NULL,0,0,45,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(665,84,'English (United States)','en','en_US',NULL,0,1,46,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(666,84,'Esperanto','eo','eo_XX',NULL,0,0,47,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(667,84,'Estonian','et','et_EE',NULL,0,0,48,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(668,84,'Ewe','ee','ee_GH',NULL,0,0,49,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(669,84,'Faroese','fo','fo_FO',NULL,0,0,50,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(670,84,'Fijian','fj','fj_FJ',NULL,0,0,51,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(671,84,'Finnish','fi','fi_FI',NULL,0,0,52,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(672,84,'French (Canada)','fr','fr_CA',NULL,0,0,53,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(673,84,'French (France)','fr','fr_FR',NULL,0,0,54,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(674,84,'Fula; Fulah; Pulaar; Pular','ff','ff_SN',NULL,0,0,55,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(675,84,'Galician','gl','gl_ES',NULL,0,0,56,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(676,84,'Georgian','ka','ka_GE',NULL,0,0,57,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(677,84,'German','de','de_DE',NULL,0,0,58,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(678,84,'German (Swiss)','de','de_CH',NULL,0,0,59,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(679,84,'Greek, Modern','el','el_GR',NULL,0,0,60,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(680,84,'GuaraniÂ','gn','gn_PY',NULL,0,0,61,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(681,84,'Gujarati','gu','gu_IN',NULL,0,0,62,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(682,84,'Haitian; Haitian Creole','ht','ht_HT',NULL,0,0,63,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(683,84,'Hausa','ha','ha_NG',NULL,0,0,64,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(684,84,'Hebrew (modern)','he','he_IL',NULL,0,0,65,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(685,84,'Herero','hz','hz_NA',NULL,0,0,66,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(686,84,'Hindi','hi','hi_IN',NULL,0,0,67,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(687,84,'Hiri Motu','ho','ho_PG',NULL,0,0,68,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(688,84,'Hungarian','hu','hu_HU',NULL,0,0,69,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(689,84,'Interlingua','ia','ia_XX',NULL,0,0,70,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(690,84,'Indonesian','id','id_ID',NULL,0,0,71,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(691,84,'Interlingue','ie','ie_XX',NULL,0,0,72,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(692,84,'Irish','ga','ga_IE',NULL,0,0,73,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(693,84,'Igbo','ig','ig_NG',NULL,0,0,74,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(694,84,'Inupiaq','ik','ik_US',NULL,0,0,75,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(695,84,'Ido','io','io_XX',NULL,0,0,76,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(696,84,'Icelandic','is','is_IS',NULL,0,0,77,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(697,84,'Italian','it','it_IT',NULL,0,0,78,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(698,84,'Inuktitut','iu','iu_CA',NULL,0,0,79,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(699,84,'Japanese','ja','ja_JP',NULL,0,0,80,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(700,84,'Javanese','jv','jv_ID',NULL,0,0,81,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(701,84,'Kalaallisut, Greenlandic','kl','kl_GL',NULL,0,0,82,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(702,84,'Kannada','kn','kn_IN',NULL,0,0,83,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(703,84,'Kanuri','kr','kr_NE',NULL,0,0,84,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(704,84,'Kashmiri','ks','ks_IN',NULL,0,0,85,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(705,84,'Kazakh','kk','kk_KZ',NULL,0,0,86,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(706,84,'Khmer','km','km_KH',NULL,0,0,87,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(707,84,'Kikuyu, Gikuyu','ki','ki_KE',NULL,0,0,88,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(708,84,'Kinyarwanda','rw','rw_RW',NULL,0,0,89,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(709,84,'Kirghiz, Kyrgyz','ky','ky_KG',NULL,0,0,90,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(710,84,'Komi','kv','kv_RU',NULL,0,0,91,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(711,84,'Kongo','kg','kg_CD',NULL,0,0,92,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(712,84,'Korean','ko','ko_KR',NULL,0,0,93,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(713,84,'Kurdish','ku','ku_IQ',NULL,0,0,94,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(714,84,'Kwanyama, Kuanyama','kj','kj_NA',NULL,0,0,95,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(715,84,'Latin','la','la_VA',NULL,0,0,96,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(716,84,'Luxembourgish, Letzeburgesch','lb','lb_LU',NULL,0,0,97,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(717,84,'Luganda','lg','lg_UG',NULL,0,0,98,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(718,84,'Limburgish, Limburgan, Limburger','li','li_NL',NULL,0,0,99,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(719,84,'Lingala','ln','ln_CD',NULL,0,0,100,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(720,84,'Lao','lo','lo_LA',NULL,0,0,101,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(721,84,'Lithuanian','lt','lt_LT',NULL,0,0,102,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(722,84,'Luba-Katanga','lu','lu_CD',NULL,0,0,103,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(723,84,'Latvian','lv','lv_LV',NULL,0,0,104,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(724,84,'Manx','gv','gv_IM',NULL,0,0,105,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(725,84,'Macedonian','mk','mk_MK',NULL,0,0,106,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(726,84,'Malagasy','mg','mg_MG',NULL,0,0,107,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(727,84,'Malay','ms','ms_MY',NULL,0,0,108,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(728,84,'Malayalam','ml','ml_IN',NULL,0,0,109,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(729,84,'Maltese','mt','mt_MT',NULL,0,0,110,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(730,84,'MÄori','mi','mi_NZ',NULL,0,0,111,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(731,84,'Marathi','mr','mr_IN',NULL,0,0,112,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(732,84,'Marshallese','mh','mh_MH',NULL,0,0,113,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(733,84,'Mongolian','mn','mn_MN',NULL,0,0,114,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(734,84,'Nauru','na','na_NR',NULL,0,0,115,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(735,84,'Navajo, Navaho','nv','nv_US',NULL,0,0,116,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(736,84,'Norwegian BokmÃ¥l','nb','nb_NO',NULL,0,0,117,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(737,84,'North Ndebele','nd','nd_ZW',NULL,0,0,118,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(738,84,'Nepali','ne','ne_NP',NULL,0,0,119,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(739,84,'Ndonga','ng','ng_NA',NULL,0,0,120,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(740,84,'Norwegian Nynorsk','nn','nn_NO',NULL,0,0,121,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(741,84,'Norwegian','no','no_NO',NULL,0,0,122,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(742,84,'Nuosu','ii','ii_CN',NULL,0,0,123,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(743,84,'South Ndebele','nr','nr_ZA',NULL,0,0,124,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(744,84,'Occitan (after 1500)','oc','oc_FR',NULL,0,0,125,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(745,84,'Ojibwa','oj','oj_CA',NULL,0,0,126,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(746,84,'Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic','cu','cu_BG',NULL,0,0,127,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(747,84,'Oromo','om','om_ET',NULL,0,0,128,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(748,84,'Oriya','or','or_IN',NULL,0,0,129,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(749,84,'Ossetian, Ossetic','os','os_GE',NULL,0,0,130,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(750,84,'Panjabi, Punjabi','pa','pa_IN',NULL,0,0,131,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(751,84,'Pali','pi','pi_KH',NULL,0,0,132,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(752,84,'Persian (Iran)','fa','fa_IR',NULL,0,0,133,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(753,84,'Polish','pl','pl_PL',NULL,0,0,134,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(754,84,'Pashto, Pushto','ps','ps_AF',NULL,0,0,135,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(755,84,'Portuguese (Brazil)','pt','pt_BR',NULL,0,0,136,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(756,84,'Portuguese (Portugal)','pt','pt_PT',NULL,0,0,137,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(757,84,'Quechua','qu','qu_PE',NULL,0,0,138,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(758,84,'Romansh','rm','rm_CH',NULL,0,0,139,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(759,84,'Kirundi','rn','rn_BI',NULL,0,0,140,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(760,84,'Romanian, Moldavian, Moldovan','ro','ro_RO',NULL,0,0,141,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(761,84,'Russian','ru','ru_RU',NULL,0,0,142,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(762,84,'Sanskrit','sa','sa_IN',NULL,0,0,143,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(763,84,'Sardinian','sc','sc_IT',NULL,0,0,144,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(764,84,'Sindhi','sd','sd_IN',NULL,0,0,145,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(765,84,'Northern Sami','se','se_NO',NULL,0,0,146,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(766,84,'Samoan','sm','sm_WS',NULL,0,0,147,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(767,84,'Sango','sg','sg_CF',NULL,0,0,148,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(768,84,'Serbian','sr','sr_RS',NULL,0,0,149,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(769,84,'Scottish Gaelic; Gaelic','gd','gd_GB',NULL,0,0,150,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(770,84,'Shona','sn','sn_ZW',NULL,0,0,151,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(771,84,'Sinhala, Sinhalese','si','si_LK',NULL,0,0,152,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(772,84,'Slovak','sk','sk_SK',NULL,0,0,153,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(773,84,'Slovene','sl','sl_SI',NULL,0,0,154,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(774,84,'Somali','so','so_SO',NULL,0,0,155,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(775,84,'Southern Sotho','st','st_ZA',NULL,0,0,156,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(776,84,'Spanish; Castilian (Spain)','es','es_ES',NULL,0,0,157,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(777,84,'Spanish; Castilian (Mexico)','es','es_MX',NULL,0,0,158,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(778,84,'Spanish; Castilian (Puerto Rico)','es','es_PR',NULL,0,0,159,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(779,84,'Sundanese','su','su_ID',NULL,0,0,160,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(780,84,'Swahili','sw','sw_TZ',NULL,0,0,161,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(781,84,'Swati','ss','ss_ZA',NULL,0,0,162,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(782,84,'Swedish','sv','sv_SE',NULL,0,0,163,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(783,84,'Tamil','ta','ta_IN',NULL,0,0,164,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(784,84,'Telugu','te','te_IN',NULL,0,0,165,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(785,84,'Tajik','tg','tg_TJ',NULL,0,0,166,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(786,84,'Thai','th','th_TH',NULL,0,0,167,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(787,84,'Tigrinya','ti','ti_ET',NULL,0,0,168,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(788,84,'Tibetan Standard, Tibetan, Central','bo','bo_CN',NULL,0,0,169,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(789,84,'Turkmen','tk','tk_TM',NULL,0,0,170,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(790,84,'Tagalog','tl','tl_PH',NULL,0,0,171,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(791,84,'Tswana','tn','tn_ZA',NULL,0,0,172,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(792,84,'Tonga (Tonga Islands)','to','to_TO',NULL,0,0,173,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(793,84,'Turkish','tr','tr_TR',NULL,0,0,174,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(794,84,'Tsonga','ts','ts_ZA',NULL,0,0,175,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(795,84,'Tatar','tt','tt_RU',NULL,0,0,176,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(796,84,'Twi','tw','tw_GH',NULL,0,0,177,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(797,84,'Tahitian','ty','ty_PF',NULL,0,0,178,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(798,84,'Uighur, Uyghur','ug','ug_CN',NULL,0,0,179,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(799,84,'Ukrainian','uk','uk_UA',NULL,0,0,180,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(800,84,'Urdu','ur','ur_PK',NULL,0,0,181,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(801,84,'Uzbek','uz','uz_UZ',NULL,0,0,182,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(802,84,'Venda','ve','ve_ZA',NULL,0,0,183,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(803,84,'Vietnamese','vi','vi_VN',NULL,0,0,184,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(804,84,'Volapük','vo','vo_XX',NULL,0,0,185,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(805,84,'Walloon','wa','wa_BE',NULL,0,0,186,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(806,84,'Welsh','cy','cy_GB',NULL,0,0,187,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(807,84,'Wolof','wo','wo_SN',NULL,0,0,188,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(808,84,'Western Frisian','fy','fy_NL',NULL,0,0,189,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(809,84,'Xhosa','xh','xh_ZA',NULL,0,0,190,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(810,84,'Yiddish','yi','yi_US',NULL,0,0,191,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(811,84,'Yoruba','yo','yo_NG',NULL,0,0,192,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(812,84,'Zhuang, Chuang','za','za_CN',NULL,0,0,193,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(813,84,'Zulu','zu','zu_ZA',NULL,0,0,194,NULL,0,0,0,NULL,NULL,NULL,NULL,NULL),(814,85,'In Person','1','in_person',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(815,85,'Phone','2','phone',NULL,0,1,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(816,85,'Email','3','email',NULL,0,0,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(817,85,'Fax','4','fax',NULL,0,0,4,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(818,85,'Letter Mail','5','letter_mail',NULL,0,0,5,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(819,86,'Cases - Send Copy of an Activity','1','case_activity',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(820,87,'Contributions - Duplicate Organization Alert','1','contribution_dupalert',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(821,87,'Contributions - Receipt (off-line)','2','contribution_offline_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(822,87,'Contributions - Receipt (on-line)','3','contribution_online_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(823,87,'Contributions - Invoice','4','contribution_invoice_receipt',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(824,87,'Contributions - Recurring Start and End Notification','5','contribution_recurring_notify',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(825,87,'Contributions - Recurring Cancellation Notification','6','contribution_recurring_cancelled',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(826,87,'Contributions - Recurring Billing Updates','7','contribution_recurring_billing',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(827,87,'Contributions - Recurring Updates','8','contribution_recurring_edit',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(828,87,'Personal Campaign Pages - Admin Notification','9','pcp_notify',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(829,87,'Personal Campaign Pages - Supporter Status Change Notification','10','pcp_status_change',NULL,0,0,10,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(830,87,'Personal Campaign Pages - Supporter Welcome','11','pcp_supporter_notify',NULL,0,0,11,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(831,87,'Personal Campaign Pages - Owner Notification','12','pcp_owner_notify',NULL,0,0,12,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(832,87,'Additional Payment Receipt or Refund Notification','13','payment_or_refund_notification',NULL,0,0,13,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(833,88,'Events - Registration Confirmation and Receipt (off-line)','1','event_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(834,88,'Events - Registration Confirmation and Receipt (on-line)','2','event_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(835,88,'Events - Receipt only','3','event_registration_receipt',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(836,88,'Events - Registration Cancellation Notice','4','participant_cancelled',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(837,88,'Events - Registration Confirmation Invite','5','participant_confirm',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(838,88,'Events - Pending Registration Expiration Notice','6','participant_expired',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(839,88,'Events - Registration Transferred Notice','7','participant_transferred',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(840,89,'Tell-a-Friend Email','1','friend',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(841,90,'Memberships - Signup and Renewal Receipts (off-line)','1','membership_offline_receipt',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(842,90,'Memberships - Receipt (on-line)','2','membership_online_receipt',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(843,90,'Memberships - Auto-renew Cancellation Notification','3','membership_autorenew_cancelled',NULL,0,0,3,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(844,90,'Memberships - Auto-renew Billing Updates','4','membership_autorenew_billing',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(845,91,'Test-drive - Receipt Header','1','test_preview',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(846,92,'Pledges - Acknowledgement','1','pledge_acknowledge',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(847,92,'Pledges - Payment Reminder','2','pledge_reminder',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(848,93,'Profiles - Admin Notification','1','uf_notify',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(849,94,'Petition - signature added','1','petition_sign',NULL,0,0,1,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(850,94,'Petition - need verification','2','petition_confirmation_needed',NULL,0,0,2,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(851,95,'In Honor of','1','in_honor_of',NULL,0,0,1,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(852,95,'In Memory of','2','in_memory_of',NULL,0,0,2,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(853,95,'Solicited','3','solicited',NULL,0,1,3,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(854,95,'Household','4','household',NULL,0,0,4,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(855,95,'Workplace Giving','5','workplace',NULL,0,0,5,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(856,95,'Foundation Affiliate','6','foundation_affiliate',NULL,0,0,6,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(857,95,'3rd-party Service','7','3rd-party_service',NULL,0,0,7,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(858,95,'Donor-advised Fund','8','donor-advised_fund',NULL,0,0,8,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(859,95,'Matched Gift','9','matched_gift',NULL,0,0,9,NULL,0,0,1,NULL,NULL,NULL,NULL,NULL),(860,95,'Personal Campaign Page','10','pcp',NULL,0,0,10,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(861,95,'Gift','11','gift',NULL,0,0,11,NULL,0,1,1,NULL,NULL,NULL,NULL,NULL),(862,2,'Interview','55','Interview',NULL,0,NULL,55,'Conduct a phone or in person interview.',0,0,1,NULL,NULL,NULL,'fa-comment-o',NULL); /*!40000 ALTER TABLE `civicrm_option_value` ENABLE KEYS */; UNLOCK TABLES; @@ -1328,7 +1328,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_state_province` WRITE; /*!40000 ALTER TABLE `civicrm_state_province` DISABLE KEYS */; -INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id`) VALUES (1000,'Alabama','AL',1228),(1001,'Alaska','AK',1228),(1002,'Arizona','AZ',1228),(1003,'Arkansas','AR',1228),(1004,'California','CA',1228),(1005,'Colorado','CO',1228),(1006,'Connecticut','CT',1228),(1007,'Delaware','DE',1228),(1008,'Florida','FL',1228),(1009,'Georgia','GA',1228),(1010,'Hawaii','HI',1228),(1011,'Idaho','ID',1228),(1012,'Illinois','IL',1228),(1013,'Indiana','IN',1228),(1014,'Iowa','IA',1228),(1015,'Kansas','KS',1228),(1016,'Kentucky','KY',1228),(1017,'Louisiana','LA',1228),(1018,'Maine','ME',1228),(1019,'Maryland','MD',1228),(1020,'Massachusetts','MA',1228),(1021,'Michigan','MI',1228),(1022,'Minnesota','MN',1228),(1023,'Mississippi','MS',1228),(1024,'Missouri','MO',1228),(1025,'Montana','MT',1228),(1026,'Nebraska','NE',1228),(1027,'Nevada','NV',1228),(1028,'New Hampshire','NH',1228),(1029,'New Jersey','NJ',1228),(1030,'New Mexico','NM',1228),(1031,'New York','NY',1228),(1032,'North Carolina','NC',1228),(1033,'North Dakota','ND',1228),(1034,'Ohio','OH',1228),(1035,'Oklahoma','OK',1228),(1036,'Oregon','OR',1228),(1037,'Pennsylvania','PA',1228),(1038,'Rhode Island','RI',1228),(1039,'South Carolina','SC',1228),(1040,'South Dakota','SD',1228),(1041,'Tennessee','TN',1228),(1042,'Texas','TX',1228),(1043,'Utah','UT',1228),(1044,'Vermont','VT',1228),(1045,'Virginia','VA',1228),(1046,'Washington','WA',1228),(1047,'West Virginia','WV',1228),(1048,'Wisconsin','WI',1228),(1049,'Wyoming','WY',1228),(1050,'District of Columbia','DC',1228),(1052,'American Samoa','AS',1228),(1053,'Guam','GU',1228),(1055,'Northern Mariana Islands','MP',1228),(1056,'Puerto Rico','PR',1228),(1057,'Virgin Islands','VI',1228),(1058,'United States Minor Outlying Islands','UM',1228),(1059,'Armed Forces Europe','AE',1228),(1060,'Armed Forces Americas','AA',1228),(1061,'Armed Forces Pacific','AP',1228),(1100,'Alberta','AB',1039),(1101,'British Columbia','BC',1039),(1102,'Manitoba','MB',1039),(1103,'New Brunswick','NB',1039),(1104,'Newfoundland and Labrador','NL',1039),(1105,'Northwest Territories','NT',1039),(1106,'Nova Scotia','NS',1039),(1107,'Nunavut','NU',1039),(1108,'Ontario','ON',1039),(1109,'Prince Edward Island','PE',1039),(1110,'Quebec','QC',1039),(1111,'Saskatchewan','SK',1039),(1112,'Yukon Territory','YT',1039),(1200,'Maharashtra','MM',1101),(1201,'Karnataka','KA',1101),(1202,'Andhra Pradesh','AP',1101),(1203,'Arunachal Pradesh','AR',1101),(1204,'Assam','AS',1101),(1205,'Bihar','BR',1101),(1206,'Chhattisgarh','CH',1101),(1207,'Goa','GA',1101),(1208,'Gujarat','GJ',1101),(1209,'Haryana','HR',1101),(1210,'Himachal Pradesh','HP',1101),(1211,'Jammu and Kashmir','JK',1101),(1212,'Jharkhand','JH',1101),(1213,'Kerala','KL',1101),(1214,'Madhya Pradesh','MP',1101),(1215,'Manipur','MN',1101),(1216,'Meghalaya','ML',1101),(1217,'Mizoram','MZ',1101),(1218,'Nagaland','NL',1101),(1219,'Orissa','OR',1101),(1220,'Punjab','PB',1101),(1221,'Rajasthan','RJ',1101),(1222,'Sikkim','SK',1101),(1223,'Tamil Nadu','TN',1101),(1224,'Tripura','TR',1101),(1225,'Uttarakhand','UT',1101),(1226,'Uttar Pradesh','UP',1101),(1227,'West Bengal','WB',1101),(1228,'Andaman and Nicobar Islands','AN',1101),(1229,'Dadra and Nagar Haveli','DN',1101),(1230,'Daman and Diu','DD',1101),(1231,'Delhi','DL',1101),(1232,'Lakshadweep','LD',1101),(1233,'Pondicherry','PY',1101),(1300,'mazowieckie','MZ',1172),(1301,'pomorskie','PM',1172),(1302,'dolnoÅ›lÄ…skie','DS',1172),(1303,'kujawsko-pomorskie','KP',1172),(1304,'lubelskie','LU',1172),(1305,'lubuskie','LB',1172),(1306,'łódzkie','LD',1172),(1307,'maÅ‚opolskie','MA',1172),(1308,'opolskie','OP',1172),(1309,'podkarpackie','PK',1172),(1310,'podlaskie','PD',1172),(1311,'Å›lÄ…skie','SL',1172),(1312,'Å›wiÄ™tokrzyskie','SK',1172),(1313,'warmiÅ„sko-mazurskie','WN',1172),(1314,'wielkopolskie','WP',1172),(1315,'zachodniopomorskie','ZP',1172),(1500,'Abu Zaby','AZ',1225),(1501,'\'Ajman','AJ',1225),(1502,'Al Fujayrah','FU',1225),(1503,'Ash Shariqah','SH',1225),(1504,'Dubayy','DU',1225),(1505,'Ra\'s al Khaymah','RK',1225),(1506,'Dac Lac','33',1233),(1507,'Umm al Qaywayn','UQ',1225),(1508,'Badakhshan','BDS',1001),(1509,'Badghis','BDG',1001),(1510,'Baghlan','BGL',1001),(1511,'Balkh','BAL',1001),(1512,'Bamian','BAM',1001),(1513,'Farah','FRA',1001),(1514,'Faryab','FYB',1001),(1515,'Ghazni','GHA',1001),(1516,'Ghowr','GHO',1001),(1517,'Helmand','HEL',1001),(1518,'Herat','HER',1001),(1519,'Jowzjan','JOW',1001),(1520,'Kabul','KAB',1001),(1521,'Kandahar','KAN',1001),(1522,'Kapisa','KAP',1001),(1523,'Khowst','KHO',1001),(1524,'Konar','KNR',1001),(1525,'Kondoz','KDZ',1001),(1526,'Laghman','LAG',1001),(1527,'Lowgar','LOW',1001),(1528,'Nangrahar','NAN',1001),(1529,'Nimruz','NIM',1001),(1530,'Nurestan','NUR',1001),(1531,'Oruzgan','ORU',1001),(1532,'Paktia','PIA',1001),(1533,'Paktika','PKA',1001),(1534,'Parwan','PAR',1001),(1535,'Samangan','SAM',1001),(1536,'Sar-e Pol','SAR',1001),(1537,'Takhar','TAK',1001),(1538,'Wardak','WAR',1001),(1539,'Zabol','ZAB',1001),(1540,'Berat','BR',1002),(1541,'Bulqizë','BU',1002),(1542,'Delvinë','DL',1002),(1543,'Devoll','DV',1002),(1544,'Dibër','DI',1002),(1545,'Durrës','DR',1002),(1546,'Elbasan','EL',1002),(1547,'Fier','FR',1002),(1548,'Gramsh','GR',1002),(1549,'Gjirokastër','GJ',1002),(1550,'Has','HA',1002),(1551,'Kavajë','KA',1002),(1552,'Kolonjë','ER',1002),(1553,'Korçë','KO',1002),(1554,'Krujë','KR',1002),(1555,'Kuçovë','KC',1002),(1556,'Kukës','KU',1002),(1557,'Kurbin','KB',1002),(1558,'Lezhë','LE',1002),(1559,'Librazhd','LB',1002),(1560,'Lushnjë','LU',1002),(1561,'Malësi e Madhe','MM',1002),(1562,'Mallakastër','MK',1002),(1563,'Mat','MT',1002),(1564,'Mirditë','MR',1002),(1565,'Peqin','PQ',1002),(1566,'Përmet','PR',1002),(1567,'Pogradec','PG',1002),(1568,'Pukë','PU',1002),(1569,'Sarandë','SR',1002),(1570,'Skrapar','SK',1002),(1571,'Shkodër','SH',1002),(1572,'Tepelenë','TE',1002),(1573,'Tiranë','TR',1002),(1574,'Tropojë','TP',1002),(1575,'Vlorë','VL',1002),(1576,'Erevan','ER',1011),(1577,'Aragacotn','AG',1011),(1578,'Ararat','AR',1011),(1579,'Armavir','AV',1011),(1580,'Gegarkunik\'','GR',1011),(1581,'Kotayk\'','KT',1011),(1582,'Lory','LO',1011),(1583,'Sirak','SH',1011),(1584,'Syunik\'','SU',1011),(1585,'Tavus','TV',1011),(1586,'Vayoc Jor','VD',1011),(1587,'Bengo','BGO',1006),(1588,'Benguela','BGU',1006),(1589,'Bie','BIE',1006),(1590,'Cabinda','CAB',1006),(1591,'Cuando-Cubango','CCU',1006),(1592,'Cuanza Norte','CNO',1006),(1593,'Cuanza Sul','CUS',1006),(1594,'Cunene','CNN',1006),(1595,'Huambo','HUA',1006),(1596,'Huila','HUI',1006),(1597,'Luanda','LUA',1006),(1598,'Lunda Norte','LNO',1006),(1599,'Lunda Sul','LSU',1006),(1600,'Malange','MAL',1006),(1601,'Moxico','MOX',1006),(1602,'Namibe','NAM',1006),(1603,'Uige','UIG',1006),(1604,'Zaire','ZAI',1006),(1605,'Capital federal','C',1010),(1606,'Buenos Aires','B',1010),(1607,'Catamarca','K',1010),(1608,'Cordoba','X',1010),(1609,'Corrientes','W',1010),(1610,'Chaco','H',1010),(1611,'Chubut','U',1010),(1612,'Entre Rios','E',1010),(1613,'Formosa','P',1010),(1614,'Jujuy','Y',1010),(1615,'La Pampa','L',1010),(1616,'Mendoza','M',1010),(1617,'Misiones','N',1010),(1618,'Neuquen','Q',1010),(1619,'Rio Negro','R',1010),(1620,'Salta','A',1010),(1621,'San Juan','J',1010),(1622,'San Luis','D',1010),(1623,'Santa Cruz','Z',1010),(1624,'Santa Fe','S',1010),(1625,'Santiago del Estero','G',1010),(1626,'Tierra del Fuego','V',1010),(1627,'Tucuman','T',1010),(1628,'Burgenland','1',1014),(1629,'Kärnten','2',1014),(1630,'Niederösterreich','3',1014),(1631,'Oberösterreich','4',1014),(1632,'Salzburg','5',1014),(1633,'Steiermark','6',1014),(1634,'Tirol','7',1014),(1635,'Vorarlberg','8',1014),(1636,'Wien','9',1014),(1637,'Australian Antarctic Territory','AAT',1008),(1638,'Australian Capital Territory','ACT',1013),(1639,'Northern Territory','NT',1013),(1640,'New South Wales','NSW',1013),(1641,'Queensland','QLD',1013),(1642,'South Australia','SA',1013),(1643,'Tasmania','TAS',1013),(1644,'Victoria','VIC',1013),(1645,'Western Australia','WA',1013),(1646,'Naxcivan','NX',1015),(1647,'Ali Bayramli','AB',1015),(1648,'Baki','BA',1015),(1649,'Ganca','GA',1015),(1650,'Lankaran','LA',1015),(1651,'Mingacevir','MI',1015),(1652,'Naftalan','NA',1015),(1653,'Saki','SA',1015),(1654,'Sumqayit','SM',1015),(1655,'Susa','SS',1015),(1656,'Xankandi','XA',1015),(1657,'Yevlax','YE',1015),(1658,'Abseron','ABS',1015),(1659,'Agcabadi','AGC',1015),(1660,'Agdam','AGM',1015),(1661,'Agdas','AGS',1015),(1662,'Agstafa','AGA',1015),(1663,'Agsu','AGU',1015),(1664,'Astara','AST',1015),(1665,'Babak','BAB',1015),(1666,'Balakan','BAL',1015),(1667,'Barda','BAR',1015),(1668,'Beylagan','BEY',1015),(1669,'Bilasuvar','BIL',1015),(1670,'Cabrayll','CAB',1015),(1671,'Calilabad','CAL',1015),(1672,'Culfa','CUL',1015),(1673,'Daskasan','DAS',1015),(1674,'Davaci','DAV',1015),(1675,'Fuzuli','FUZ',1015),(1676,'Gadabay','GAD',1015),(1677,'Goranboy','GOR',1015),(1678,'Goycay','GOY',1015),(1679,'Haciqabul','HAC',1015),(1680,'Imisli','IMI',1015),(1681,'Ismayilli','ISM',1015),(1682,'Kalbacar','KAL',1015),(1683,'Kurdamir','KUR',1015),(1684,'Lacin','LAC',1015),(1685,'Lerik','LER',1015),(1686,'Masalli','MAS',1015),(1687,'Neftcala','NEF',1015),(1688,'Oguz','OGU',1015),(1689,'Ordubad','ORD',1015),(1690,'Qabala','QAB',1015),(1691,'Qax','QAX',1015),(1692,'Qazax','QAZ',1015),(1693,'Qobustan','QOB',1015),(1694,'Quba','QBA',1015),(1695,'Qubadli','QBI',1015),(1696,'Qusar','QUS',1015),(1697,'Saatli','SAT',1015),(1698,'Sabirabad','SAB',1015),(1699,'Sadarak','SAD',1015),(1700,'Sahbuz','SAH',1015),(1701,'Salyan','SAL',1015),(1702,'Samaxi','SMI',1015),(1703,'Samkir','SKR',1015),(1704,'Samux','SMX',1015),(1705,'Sarur','SAR',1015),(1706,'Siyazan','SIY',1015),(1707,'Tartar','TAR',1015),(1708,'Tovuz','TOV',1015),(1709,'Ucar','UCA',1015),(1710,'Xacmaz','XAC',1015),(1711,'Xanlar','XAN',1015),(1712,'Xizi','XIZ',1015),(1713,'Xocali','XCI',1015),(1714,'Xocavand','XVD',1015),(1715,'Yardimli','YAR',1015),(1716,'Zangilan','ZAN',1015),(1717,'Zaqatala','ZAQ',1015),(1718,'Zardab','ZAR',1015),(1719,'Federacija Bosna i Hercegovina','BIH',1026),(1720,'Republika Srpska','SRP',1026),(1721,'Bagerhat zila','05',1017),(1722,'Bandarban zila','01',1017),(1723,'Barguna zila','02',1017),(1724,'Barisal zila','06',1017),(1725,'Bhola zila','07',1017),(1726,'Bogra zila','03',1017),(1727,'Brahmanbaria zila','04',1017),(1728,'Chandpur zila','09',1017),(1729,'Chittagong zila','10',1017),(1730,'Chuadanga zila','12',1017),(1731,'Comilla zila','08',1017),(1732,'Cox\'s Bazar zila','11',1017),(1733,'Dhaka zila','13',1017),(1734,'Dinajpur zila','14',1017),(1735,'Faridpur zila','15',1017),(1736,'Feni zila','16',1017),(1737,'Gaibandha zila','19',1017),(1738,'Gazipur zila','18',1017),(1739,'Gopalganj zila','17',1017),(1740,'Habiganj zila','20',1017),(1741,'Jaipurhat zila','24',1017),(1742,'Jamalpur zila','21',1017),(1743,'Jessore zila','22',1017),(1744,'Jhalakati zila','25',1017),(1745,'Jhenaidah zila','23',1017),(1746,'Khagrachari zila','29',1017),(1747,'Khulna zila','27',1017),(1748,'Kishorganj zila','26',1017),(1749,'Kurigram zila','28',1017),(1750,'Kushtia zila','30',1017),(1751,'Lakshmipur zila','31',1017),(1752,'Lalmonirhat zila','32',1017),(1753,'Madaripur zila','36',1017),(1754,'Magura zila','37',1017),(1755,'Manikganj zila','33',1017),(1756,'Meherpur zila','39',1017),(1757,'Moulvibazar zila','38',1017),(1758,'Munshiganj zila','35',1017),(1759,'Mymensingh zila','34',1017),(1760,'Naogaon zila','48',1017),(1761,'Narail zila','43',1017),(1762,'Narayanganj zila','40',1017),(1763,'Narsingdi zila','42',1017),(1764,'Natore zila','44',1017),(1765,'Nawabganj zila','45',1017),(1766,'Netrakona zila','41',1017),(1767,'Nilphamari zila','46',1017),(1768,'Noakhali zila','47',1017),(1769,'Pabna zila','49',1017),(1770,'Panchagarh zila','52',1017),(1771,'Patuakhali zila','51',1017),(1772,'Pirojpur zila','50',1017),(1773,'Rajbari zila','53',1017),(1774,'Rajshahi zila','54',1017),(1775,'Rangamati zila','56',1017),(1776,'Rangpur zila','55',1017),(1777,'Satkhira zila','58',1017),(1778,'Shariatpur zila','62',1017),(1779,'Sherpur zila','57',1017),(1780,'Sirajganj zila','59',1017),(1781,'Sunamganj zila','61',1017),(1782,'Sylhet zila','60',1017),(1783,'Tangail zila','63',1017),(1784,'Thakurgaon zila','64',1017),(1785,'Antwerpen','VAN',1020),(1786,'Brabant Wallon','WBR',1020),(1787,'Hainaut','WHT',1020),(1788,'Liege','WLG',1020),(1789,'Limburg','VLI',1020),(1790,'Luxembourg','WLX',1020),(1791,'Namur','WNA',1020),(1792,'Oost-Vlaanderen','VOV',1020),(1793,'Vlaams-Brabant','VBR',1020),(1794,'West-Vlaanderen','VWV',1020),(1795,'Bale','BAL',1034),(1796,'Bam','BAM',1034),(1797,'Banwa','BAN',1034),(1798,'Bazega','BAZ',1034),(1799,'Bougouriba','BGR',1034),(1800,'Boulgou','BLG',1034),(1801,'Boulkiemde','BLK',1034),(1802,'Comoe','COM',1034),(1803,'Ganzourgou','GAN',1034),(1804,'Gnagna','GNA',1034),(1805,'Gourma','GOU',1034),(1806,'Houet','HOU',1034),(1807,'Ioba','IOB',1034),(1808,'Kadiogo','KAD',1034),(1809,'Kenedougou','KEN',1034),(1810,'Komondjari','KMD',1034),(1811,'Kompienga','KMP',1034),(1812,'Kossi','KOS',1034),(1813,'Koulpulogo','KOP',1034),(1814,'Kouritenga','KOT',1034),(1815,'Kourweogo','KOW',1034),(1816,'Leraba','LER',1034),(1817,'Loroum','LOR',1034),(1818,'Mouhoun','MOU',1034),(1819,'Nahouri','NAO',1034),(1820,'Namentenga','NAM',1034),(1821,'Nayala','NAY',1034),(1822,'Noumbiel','NOU',1034),(1823,'Oubritenga','OUB',1034),(1824,'Oudalan','OUD',1034),(1825,'Passore','PAS',1034),(1826,'Poni','PON',1034),(1827,'Sanguie','SNG',1034),(1828,'Sanmatenga','SMT',1034),(1829,'Seno','SEN',1034),(1830,'Siasili','SIS',1034),(1831,'Soum','SOM',1034),(1832,'Sourou','SOR',1034),(1833,'Tapoa','TAP',1034),(1834,'Tui','TUI',1034),(1835,'Yagha','YAG',1034),(1836,'Yatenga','YAT',1034),(1837,'Ziro','ZIR',1034),(1838,'Zondoma','ZON',1034),(1839,'Zoundweogo','ZOU',1034),(1840,'Blagoevgrad','01',1033),(1841,'Burgas','02',1033),(1842,'Dobrich','08',1033),(1843,'Gabrovo','07',1033),(1844,'Haskovo','26',1033),(1845,'Yambol','28',1033),(1846,'Kardzhali','09',1033),(1847,'Kyustendil','10',1033),(1848,'Lovech','11',1033),(1849,'Montana','12',1033),(1850,'Pazardzhik','13',1033),(1851,'Pernik','14',1033),(1852,'Pleven','15',1033),(1853,'Plovdiv','16',1033),(1854,'Razgrad','17',1033),(1855,'Ruse','18',1033),(1856,'Silistra','19',1033),(1857,'Sliven','20',1033),(1858,'Smolyan','21',1033),(1859,'Sofia','23',1033),(1860,'Stara Zagora','24',1033),(1861,'Shumen','27',1033),(1862,'Targovishte','25',1033),(1863,'Varna','03',1033),(1864,'Veliko Tarnovo','04',1033),(1865,'Vidin','05',1033),(1866,'Vratsa','06',1033),(1867,'Al Hadd','01',1016),(1868,'Al Manamah','03',1016),(1869,'Al Mintaqah al Gharbiyah','10',1016),(1870,'Al Mintagah al Wusta','07',1016),(1871,'Al Mintaqah ash Shamaliyah','05',1016),(1872,'Al Muharraq','02',1016),(1873,'Ar Rifa','09',1016),(1874,'Jidd Hafs','04',1016),(1875,'Madluat Jamad','12',1016),(1876,'Madluat Isa','08',1016),(1877,'Mintaqat Juzur tawar','11',1016),(1878,'Sitrah','06',1016),(1879,'Bubanza','BB',1036),(1880,'Bujumbura','BJ',1036),(1881,'Bururi','BR',1036),(1882,'Cankuzo','CA',1036),(1883,'Cibitoke','CI',1036),(1884,'Gitega','GI',1036),(1885,'Karuzi','KR',1036),(1886,'Kayanza','KY',1036),(1887,'Makamba','MA',1036),(1888,'Muramvya','MU',1036),(1889,'Mwaro','MW',1036),(1890,'Ngozi','NG',1036),(1891,'Rutana','RT',1036),(1892,'Ruyigi','RY',1036),(1893,'Alibori','AL',1022),(1894,'Atakora','AK',1022),(1895,'Atlantique','AQ',1022),(1896,'Borgou','BO',1022),(1897,'Collines','CO',1022),(1898,'Donga','DO',1022),(1899,'Kouffo','KO',1022),(1900,'Littoral','LI',1022),(1901,'Mono','MO',1022),(1902,'Oueme','OU',1022),(1903,'Plateau','PL',1022),(1904,'Zou','ZO',1022),(1905,'Belait','BE',1032),(1906,'Brunei-Muara','BM',1032),(1907,'Temburong','TE',1032),(1908,'Tutong','TU',1032),(1909,'Cochabamba','C',1025),(1910,'Chuquisaca','H',1025),(1911,'El Beni','B',1025),(1912,'La Paz','L',1025),(1913,'Oruro','O',1025),(1914,'Pando','N',1025),(1915,'Potosi','P',1025),(1916,'Tarija','T',1025),(1917,'Acre','AC',1029),(1918,'Alagoas','AL',1029),(1919,'Amazonas','AM',1029),(1920,'Amapa','AP',1029),(1921,'Bahia','BA',1029),(1922,'Ceara','CE',1029),(1923,'Distrito Federal','DF',1029),(1924,'Espirito Santo','ES',1029),(1926,'Goias','GO',1029),(1927,'Maranhao','MA',1029),(1928,'Minas Gerais','MG',1029),(1929,'Mato Grosso do Sul','MS',1029),(1930,'Mato Grosso','MT',1029),(1931,'Para','PA',1029),(1932,'Paraiba','PB',1029),(1933,'Pernambuco','PE',1029),(1934,'Piaui','PI',1029),(1935,'Parana','PR',1029),(1936,'Rio de Janeiro','RJ',1029),(1937,'Rio Grande do Norte','RN',1029),(1938,'Rondonia','RO',1029),(1939,'Roraima','RR',1029),(1940,'Rio Grande do Sul','RS',1029),(1941,'Santa Catarina','SC',1029),(1942,'Sergipe','SE',1029),(1943,'Sao Paulo','SP',1029),(1944,'Tocantins','TO',1029),(1945,'Acklins and Crooked Islands','AC',1212),(1946,'Bimini','BI',1212),(1947,'Cat Island','CI',1212),(1948,'Exuma','EX',1212),(1955,'Inagua','IN',1212),(1957,'Long Island','LI',1212),(1959,'Mayaguana','MG',1212),(1960,'New Providence','NP',1212),(1962,'Ragged Island','RI',1212),(1966,'Bumthang','33',1024),(1967,'Chhukha','12',1024),(1968,'Dagana','22',1024),(1969,'Gasa','GA',1024),(1970,'Ha','13',1024),(1971,'Lhuentse','44',1024),(1972,'Monggar','42',1024),(1973,'Paro','11',1024),(1974,'Pemagatshel','43',1024),(1975,'Punakha','23',1024),(1976,'Samdrup Jongkha','45',1024),(1977,'Samtee','14',1024),(1978,'Sarpang','31',1024),(1979,'Thimphu','15',1024),(1980,'Trashigang','41',1024),(1981,'Trashi Yangtse','TY',1024),(1982,'Trongsa','32',1024),(1983,'Tsirang','21',1024),(1984,'Wangdue Phodrang','24',1024),(1985,'Zhemgang','34',1024),(1986,'Central','CE',1027),(1987,'Ghanzi','GH',1027),(1988,'Kgalagadi','KG',1027),(1989,'Kgatleng','KL',1027),(1990,'Kweneng','KW',1027),(1991,'Ngamiland','NG',1027),(1992,'North-East','NE',1027),(1993,'North-West','NW',1027),(1994,'South-East','SE',1027),(1995,'Southern','SO',1027),(1996,'Brèsckaja voblasc\'','BR',1019),(1997,'Homel\'skaja voblasc\'','HO',1019),(1998,'Hrodzenskaja voblasc\'','HR',1019),(1999,'Mahilëuskaja voblasc\'','MA',1019),(2000,'Minskaja voblasc\'','MI',1019),(2001,'Vicebskaja voblasc\'','VI',1019),(2002,'Belize','BZ',1021),(2003,'Cayo','CY',1021),(2004,'Corozal','CZL',1021),(2005,'Orange Walk','OW',1021),(2006,'Stann Creek','SC',1021),(2007,'Toledo','TOL',1021),(2008,'Kinshasa','KN',1050),(2011,'Equateur','EQ',1050),(2014,'Kasai-Oriental','KE',1050),(2016,'Maniema','MA',1050),(2017,'Nord-Kivu','NK',1050),(2019,'Sud-Kivu','SK',1050),(2020,'Bangui','BGF',1042),(2021,'Bamingui-Bangoran','BB',1042),(2022,'Basse-Kotto','BK',1042),(2023,'Haute-Kotto','HK',1042),(2024,'Haut-Mbomou','HM',1042),(2025,'Kemo','KG',1042),(2026,'Lobaye','LB',1042),(2027,'Mambere-Kadei','HS',1042),(2028,'Mbomou','MB',1042),(2029,'Nana-Grebizi','KB',1042),(2030,'Nana-Mambere','NM',1042),(2031,'Ombella-Mpoko','MP',1042),(2032,'Ouaka','UK',1042),(2033,'Ouham','AC',1042),(2034,'Ouham-Pende','OP',1042),(2035,'Sangha-Mbaere','SE',1042),(2036,'Vakaga','VR',1042),(2037,'Brazzaville','BZV',1051),(2038,'Bouenza','11',1051),(2039,'Cuvette','8',1051),(2040,'Cuvette-Ouest','15',1051),(2041,'Kouilou','5',1051),(2042,'Lekoumou','2',1051),(2043,'Likouala','7',1051),(2044,'Niari','9',1051),(2045,'Plateaux','14',1051),(2046,'Pool','12',1051),(2047,'Sangha','13',1051),(2048,'Aargau','AG',1205),(2049,'Appenzell Innerrhoden','AI',1205),(2050,'Appenzell Ausserrhoden','AR',1205),(2051,'Bern','BE',1205),(2052,'Basel-Landschaft','BL',1205),(2053,'Basel-Stadt','BS',1205),(2054,'Fribourg','FR',1205),(2055,'Geneva','GE',1205),(2056,'Glarus','GL',1205),(2057,'Graubunden','GR',1205),(2058,'Jura','JU',1205),(2059,'Luzern','LU',1205),(2060,'Neuchatel','NE',1205),(2061,'Nidwalden','NW',1205),(2062,'Obwalden','OW',1205),(2063,'Sankt Gallen','SG',1205),(2064,'Schaffhausen','SH',1205),(2065,'Solothurn','SO',1205),(2066,'Schwyz','SZ',1205),(2067,'Thurgau','TG',1205),(2068,'Ticino','TI',1205),(2069,'Uri','UR',1205),(2070,'Vaud','VD',1205),(2071,'Valais','VS',1205),(2072,'Zug','ZG',1205),(2073,'Zurich','ZH',1205),(2074,'18 Montagnes','06',1054),(2075,'Agnebi','16',1054),(2076,'Bas-Sassandra','09',1054),(2077,'Denguele','10',1054),(2078,'Haut-Sassandra','02',1054),(2079,'Lacs','07',1054),(2080,'Lagunes','01',1054),(2081,'Marahoue','12',1054),(2082,'Moyen-Comoe','05',1054),(2083,'Nzi-Comoe','11',1054),(2084,'Savanes','03',1054),(2085,'Sud-Bandama','15',1054),(2086,'Sud-Comoe','13',1054),(2087,'Vallee du Bandama','04',1054),(2088,'Worodouqou','14',1054),(2089,'Zanzan','08',1054),(2090,'Aisen del General Carlos Ibanez del Campo','AI',1044),(2091,'Antofagasta','AN',1044),(2092,'Araucania','AR',1044),(2093,'Atacama','AT',1044),(2094,'Bio-Bio','BI',1044),(2095,'Coquimbo','CO',1044),(2096,'Libertador General Bernardo O\'Higgins','LI',1044),(2097,'Los Lagos','LL',1044),(2098,'Magallanes','MA',1044),(2099,'Maule','ML',1044),(2100,'Santiago Metropolitan','SM',1044),(2101,'Tarapaca','TA',1044),(2102,'Valparaiso','VS',1044),(2103,'Adamaoua','AD',1038),(2104,'Centre','CE',1038),(2105,'East','ES',1038),(2106,'Far North','EN',1038),(2107,'North','NO',1038),(2108,'South','SW',1038),(2109,'South-West','SW',1038),(2110,'West','OU',1038),(2111,'Beijing','11',1045),(2112,'Chongqing','50',1045),(2113,'Shanghai','31',1045),(2114,'Tianjin','12',1045),(2115,'Anhui','34',1045),(2116,'Fujian','35',1045),(2117,'Gansu','62',1045),(2118,'Guangdong','44',1045),(2119,'Guizhou','52',1045),(2120,'Hainan','46',1045),(2121,'Hebei','13',1045),(2122,'Heilongjiang','23',1045),(2123,'Henan','41',1045),(2124,'Hubei','42',1045),(2125,'Hunan','43',1045),(2126,'Jiangsu','32',1045),(2127,'Jiangxi','36',1045),(2128,'Jilin','22',1045),(2129,'Liaoning','21',1045),(2130,'Qinghai','63',1045),(2131,'Shaanxi','61',1045),(2132,'Shandong','37',1045),(2133,'Shanxi','14',1045),(2134,'Sichuan','51',1045),(2135,'Taiwan','71',1045),(2136,'Yunnan','53',1045),(2137,'Zhejiang','33',1045),(2138,'Guangxi','45',1045),(2139,'Neia Mongol (mn)','15',1045),(2140,'Xinjiang','65',1045),(2141,'Xizang','54',1045),(2142,'Hong Kong','91',1045),(2143,'Macau','92',1045),(2144,'Distrito Capital de Bogotá','DC',1048),(2145,'Amazonea','AMA',1048),(2146,'Antioquia','ANT',1048),(2147,'Arauca','ARA',1048),(2148,'Atlántico','ATL',1048),(2149,'BolÃvar','BOL',1048),(2150,'Boyacá','BOY',1048),(2151,'Caldea','CAL',1048),(2152,'Caquetá','CAQ',1048),(2153,'Casanare','CAS',1048),(2154,'Cauca','CAU',1048),(2155,'Cesar','CES',1048),(2156,'Córdoba','COR',1048),(2157,'Cundinamarca','CUN',1048),(2158,'Chocó','CHO',1048),(2159,'GuainÃa','GUA',1048),(2160,'Guaviare','GUV',1048),(2161,'La Guajira','LAG',1048),(2162,'Magdalena','MAG',1048),(2163,'Meta','MET',1048),(2164,'Nariño','NAR',1048),(2165,'Norte de Santander','NSA',1048),(2166,'Putumayo','PUT',1048),(2167,'Quindio','QUI',1048),(2168,'Risaralda','RIS',1048),(2169,'San Andrés, Providencia y Santa Catalina','SAP',1048),(2170,'Santander','SAN',1048),(2171,'Sucre','SUC',1048),(2172,'Tolima','TOL',1048),(2173,'Valle del Cauca','VAC',1048),(2174,'Vaupés','VAU',1048),(2175,'Vichada','VID',1048),(2176,'Alajuela','A',1053),(2177,'Cartago','C',1053),(2178,'Guanacaste','G',1053),(2179,'Heredia','H',1053),(2180,'Limon','L',1053),(2181,'Puntarenas','P',1053),(2182,'San Jose','SJ',1053),(2183,'Camagey','09',1056),(2184,'Ciego de `vila','08',1056),(2185,'Cienfuegos','06',1056),(2186,'Ciudad de La Habana','03',1056),(2187,'Granma','12',1056),(2188,'Guantanamo','14',1056),(2189,'Holquin','11',1056),(2190,'La Habana','02',1056),(2191,'Las Tunas','10',1056),(2192,'Matanzas','04',1056),(2193,'Pinar del Rio','01',1056),(2194,'Sancti Spiritus','07',1056),(2195,'Santiago de Cuba','13',1056),(2196,'Villa Clara','05',1056),(2197,'Isla de la Juventud','99',1056),(2198,'Pinar del Roo','PR',1056),(2199,'Ciego de Avila','CA',1056),(2200,'Camagoey','CG',1056),(2201,'Holgun','HO',1056),(2202,'Sancti Spritus','SS',1056),(2203,'Municipio Especial Isla de la Juventud','IJ',1056),(2204,'Boa Vista','BV',1040),(2205,'Brava','BR',1040),(2206,'Calheta de Sao Miguel','CS',1040),(2207,'Fogo','FO',1040),(2208,'Maio','MA',1040),(2209,'Mosteiros','MO',1040),(2210,'Paul','PA',1040),(2211,'Porto Novo','PN',1040),(2212,'Praia','PR',1040),(2213,'Ribeira Grande','RG',1040),(2214,'Sal','SL',1040),(2215,'Sao Domingos','SD',1040),(2216,'Sao Filipe','SF',1040),(2217,'Sao Nicolau','SN',1040),(2218,'Sao Vicente','SV',1040),(2219,'Tarrafal','TA',1040),(2220,'Ammochostos Magusa','04',1057),(2221,'Keryneia','06',1057),(2222,'Larnaka','03',1057),(2223,'Lefkosia','01',1057),(2224,'Lemesos','02',1057),(2225,'Pafos','05',1057),(2226,'JihoÄeský kraj','JC',1058),(2227,'Jihomoravský kraj','JM',1058),(2228,'Karlovarský kraj','KA',1058),(2229,'Královéhradecký kraj','KR',1058),(2230,'Liberecký kraj','LI',1058),(2231,'Moravskoslezský kraj','MO',1058),(2232,'Olomoucký kraj','OL',1058),(2233,'Pardubický kraj','PA',1058),(2234,'Plzeňský kraj','PL',1058),(2235,'Praha, hlavnà mÄ›sto','PR',1058),(2236,'StÅ™edoÄeský kraj','ST',1058),(2237,'Ústecký kraj','US',1058),(2238,'VysoÄina','VY',1058),(2239,'ZlÃnský kraj','ZL',1058),(2240,'Baden-Württemberg','BW',1082),(2241,'Bayern','BY',1082),(2242,'Bremen','HB',1082),(2243,'Hamburg','HH',1082),(2244,'Hessen','HE',1082),(2245,'Niedersachsen','NI',1082),(2246,'Nordrhein-Westfalen','NW',1082),(2247,'Rheinland-Pfalz','RP',1082),(2248,'Saarland','SL',1082),(2249,'Schleswig-Holstein','SH',1082),(2250,'Berlin','BE',1082),(2251,'Brandenburg','BB',1082),(2252,'Mecklenburg-Vorpommern','MV',1082),(2253,'Sachsen','SN',1082),(2254,'Sachsen-Anhalt','ST',1082),(2255,'Thüringen','TH',1082),(2256,'Ali Sabiah','AS',1060),(2257,'Dikhil','DI',1060),(2258,'Djibouti','DJ',1060),(2259,'Obock','OB',1060),(2260,'Tadjoura','TA',1060),(2261,'Frederiksberg','147',1059),(2262,'Copenhagen City','101',1059),(2263,'Copenhagen','015',1059),(2264,'Frederiksborg','020',1059),(2265,'Roskilde','025',1059),(2266,'Vestsjælland','030',1059),(2267,'Storstrøm','035',1059),(2268,'Bornholm','040',1059),(2269,'Fyn','042',1059),(2270,'South Jutland','050',1059),(2271,'Ribe','055',1059),(2272,'Vejle','060',1059),(2273,'Ringkjøbing','065',1059),(2274,'Ã…rhus','070',1059),(2275,'Viborg','076',1059),(2276,'North Jutland','080',1059),(2277,'Distrito Nacional (Santo Domingo)','01',1062),(2278,'Azua','02',1062),(2279,'Bahoruco','03',1062),(2280,'Barahona','04',1062),(2281,'Dajabón','05',1062),(2282,'Duarte','06',1062),(2283,'El Seybo [El Seibo]','08',1062),(2284,'Espaillat','09',1062),(2285,'Hato Mayor','30',1062),(2286,'Independencia','10',1062),(2287,'La Altagracia','11',1062),(2288,'La Estrelleta [Elias Pina]','07',1062),(2289,'La Romana','12',1062),(2290,'La Vega','13',1062),(2291,'Maroia Trinidad Sánchez','14',1062),(2292,'Monseñor Nouel','28',1062),(2293,'Monte Cristi','15',1062),(2294,'Monte Plata','29',1062),(2295,'Pedernales','16',1062),(2296,'Peravia','17',1062),(2297,'Puerto Plata','18',1062),(2298,'Salcedo','19',1062),(2299,'Samaná','20',1062),(2300,'San Cristóbal','21',1062),(2301,'San Pedro de MacorÃs','23',1062),(2302,'Sánchez RamÃrez','24',1062),(2303,'Santiago','25',1062),(2304,'Santiago RodrÃguez','26',1062),(2305,'Valverde','27',1062),(2306,'Adrar','01',1003),(2307,'Ain Defla','44',1003),(2308,'Ain Tmouchent','46',1003),(2309,'Alger','16',1003),(2310,'Annaba','23',1003),(2311,'Batna','05',1003),(2312,'Bechar','08',1003),(2313,'Bejaia','06',1003),(2314,'Biskra','07',1003),(2315,'Blida','09',1003),(2316,'Bordj Bou Arreridj','34',1003),(2317,'Bouira','10',1003),(2318,'Boumerdes','35',1003),(2319,'Chlef','02',1003),(2320,'Constantine','25',1003),(2321,'Djelfa','17',1003),(2322,'El Bayadh','32',1003),(2323,'El Oued','39',1003),(2324,'El Tarf','36',1003),(2325,'Ghardaia','47',1003),(2326,'Guelma','24',1003),(2327,'Illizi','33',1003),(2328,'Jijel','18',1003),(2329,'Khenchela','40',1003),(2330,'Laghouat','03',1003),(2331,'Mascara','29',1003),(2332,'Medea','26',1003),(2333,'Mila','43',1003),(2334,'Mostaganem','27',1003),(2335,'Msila','28',1003),(2336,'Naama','45',1003),(2337,'Oran','31',1003),(2338,'Ouargla','30',1003),(2339,'Oum el Bouaghi','04',1003),(2340,'Relizane','48',1003),(2341,'Saida','20',1003),(2342,'Setif','19',1003),(2343,'Sidi Bel Abbes','22',1003),(2344,'Skikda','21',1003),(2345,'Souk Ahras','41',1003),(2346,'Tamanghasset','11',1003),(2347,'Tebessa','12',1003),(2348,'Tiaret','14',1003),(2349,'Tindouf','37',1003),(2350,'Tipaza','42',1003),(2351,'Tissemsilt','38',1003),(2352,'Tizi Ouzou','15',1003),(2353,'Tlemcen','13',1003),(2354,'Azuay','A',1064),(2355,'Bolivar','B',1064),(2356,'Canar','F',1064),(2357,'Carchi','C',1064),(2358,'Cotopaxi','X',1064),(2359,'Chimborazo','H',1064),(2360,'El Oro','O',1064),(2361,'Esmeraldas','E',1064),(2362,'Galapagos','W',1064),(2363,'Guayas','G',1064),(2364,'Imbabura','I',1064),(2365,'Loja','L',1064),(2366,'Los Rios','R',1064),(2367,'Manabi','M',1064),(2368,'Morona-Santiago','S',1064),(2369,'Napo','N',1064),(2370,'Orellana','D',1064),(2371,'Pastaza','Y',1064),(2372,'Pichincha','P',1064),(2373,'Sucumbios','U',1064),(2374,'Tungurahua','T',1064),(2375,'Zamora-Chinchipe','Z',1064),(2376,'Harjumaa','37',1069),(2377,'Hiiumaa','39',1069),(2378,'Ida-Virumaa','44',1069),(2379,'Jõgevamaa','49',1069),(2380,'Järvamaa','51',1069),(2381,'Läänemaa','57',1069),(2382,'Lääne-Virumaa','59',1069),(2383,'Põlvamaa','65',1069),(2384,'Pärnumaa','67',1069),(2385,'Raplamaa','70',1069),(2386,'Saaremaa','74',1069),(2387,'Tartumaa','7B',1069),(2388,'Valgamaa','82',1069),(2389,'Viljandimaa','84',1069),(2390,'Võrumaa','86',1069),(2391,'Ad Daqahllyah','DK',1065),(2392,'Al Bahr al Ahmar','BA',1065),(2393,'Al Buhayrah','BH',1065),(2394,'Al Fayym','FYM',1065),(2395,'Al Gharbiyah','GH',1065),(2396,'Al Iskandarlyah','ALX',1065),(2397,'Al Isma illyah','IS',1065),(2398,'Al Jizah','GZ',1065),(2399,'Al Minuflyah','MNF',1065),(2400,'Al Minya','MN',1065),(2401,'Al Qahirah','C',1065),(2402,'Al Qalyublyah','KB',1065),(2403,'Al Wadi al Jadid','WAD',1065),(2404,'Ash Sharqiyah','SHR',1065),(2405,'As Suways','SUZ',1065),(2406,'Aswan','ASN',1065),(2407,'Asyut','AST',1065),(2408,'Bani Suwayf','BNS',1065),(2409,'Bur Sa\'id','PTS',1065),(2410,'Dumyat','DT',1065),(2411,'Janub Sina\'','JS',1065),(2412,'Kafr ash Shaykh','KFS',1065),(2413,'Matruh','MT',1065),(2414,'Qina','KN',1065),(2415,'Shamal Sina\'','SIN',1065),(2416,'Suhaj','SHG',1065),(2417,'Anseba','AN',1068),(2418,'Debub','DU',1068),(2419,'Debubawi Keyih Bahri [Debub-Keih-Bahri]','DK',1068),(2420,'Gash-Barka','GB',1068),(2421,'Maakel [Maekel]','MA',1068),(2422,'Semenawi Keyih Bahri [Semien-Keih-Bahri]','SK',1068),(2423,'Ãlava','VI',1198),(2424,'Albacete','AB',1198),(2425,'Alicante','A',1198),(2426,'AlmerÃa','AL',1198),(2427,'Asturias','O',1198),(2428,'Ãvila','AV',1198),(2429,'Badajoz','BA',1198),(2430,'Baleares','PM',1198),(2431,'Barcelona','B',1198),(2432,'Burgos','BU',1198),(2433,'Cáceres','CC',1198),(2434,'Cádiz','CA',1198),(2435,'Cantabria','S',1198),(2436,'Castellón','CS',1198),(2437,'Ciudad Real','CR',1198),(2438,'Cuenca','CU',1198),(2439,'Girona [Gerona]','GE',1198),(2440,'Granada','GR',1198),(2441,'Guadalajara','GU',1198),(2442,'Guipúzcoa','SS',1198),(2443,'Huelva','H',1198),(2444,'Huesca','HU',1198),(2445,'Jaén','J',1198),(2446,'La Coruña','C',1198),(2447,'La Rioja','LO',1198),(2448,'Las Palmas','GC',1198),(2449,'León','LE',1198),(2450,'Lleida [Lérida]','L',1198),(2451,'Lugo','LU',1198),(2452,'Madrid','M',1198),(2453,'Málaga','MA',1198),(2454,'Murcia','MU',1198),(2455,'Navarra','NA',1198),(2456,'Ourense','OR',1198),(2457,'Palencia','P',1198),(2458,'Pontevedra','PO',1198),(2459,'Salamanca','SA',1198),(2460,'Santa Cruz de Tenerife','TF',1198),(2461,'Segovia','SG',1198),(2462,'Sevilla','SE',1198),(2463,'Soria','SO',1198),(2464,'Tarragona','T',1198),(2465,'Teruel','TE',1198),(2466,'Valencia','V',1198),(2467,'Valladolid','VA',1198),(2468,'Vizcaya','BI',1198),(2469,'Zamora','ZA',1198),(2470,'Zaragoza','Z',1198),(2471,'Ceuta','CE',1198),(2472,'Melilla','ML',1198),(2473,'Addis Ababa','AA',1070),(2474,'Dire Dawa','DD',1070),(2475,'Afar','AF',1070),(2476,'Amara','AM',1070),(2477,'Benshangul-Gumaz','BE',1070),(2478,'Gambela Peoples','GA',1070),(2479,'Harari People','HA',1070),(2480,'Oromia','OR',1070),(2481,'Somali','SO',1070),(2482,'Southern Nations, Nationalities and Peoples','SN',1070),(2483,'Tigrai','TI',1070),(2490,'Eastern','E',1074),(2491,'Northern','N',1074),(2492,'Western','W',1074),(2493,'Rotuma','R',1074),(2494,'Chuuk','TRK',1141),(2495,'Kosrae','KSA',1141),(2496,'Pohnpei','PNI',1141),(2497,'Yap','YAP',1141),(2498,'Ain','01',1076),(2499,'Aisne','02',1076),(2500,'Allier','03',1076),(2501,'Alpes-de-Haute-Provence','04',1076),(2502,'Alpes-Maritimes','06',1076),(2503,'Ardèche','07',1076),(2504,'Ardennes','08',1076),(2505,'Ariège','09',1076),(2506,'Aube','10',1076),(2507,'Aude','11',1076),(2508,'Aveyron','12',1076),(2509,'Bas-Rhin','67',1076),(2510,'Bouches-du-Rhône','13',1076),(2511,'Calvados','14',1076),(2512,'Cantal','15',1076),(2513,'Charente','16',1076),(2514,'Charente-Maritime','17',1076),(2515,'Cher','18',1076),(2516,'Corrèze','19',1076),(2517,'Corse-du-Sud','20A',1076),(2518,'Côte-d\'Or','21',1076),(2519,'Côtes-d\'Armor','22',1076),(2520,'Creuse','23',1076),(2521,'Deux-Sèvres','79',1076),(2522,'Dordogne','24',1076),(2523,'Doubs','25',1076),(2524,'Drôme','26',1076),(2525,'Essonne','91',1076),(2526,'Eure','27',1076),(2527,'Eure-et-Loir','28',1076),(2528,'Finistère','29',1076),(2529,'Gard','30',1076),(2530,'Gers','32',1076),(2531,'Gironde','33',1076),(2532,'Haut-Rhin','68',1076),(2533,'Haute-Corse','20B',1076),(2534,'Haute-Garonne','31',1076),(2535,'Haute-Loire','43',1076),(2536,'Haute-Saône','70',1076),(2537,'Haute-Savoie','74',1076),(2538,'Haute-Vienne','87',1076),(2539,'Hautes-Alpes','05',1076),(2540,'Hautes-Pyrénées','65',1076),(2541,'Hauts-de-Seine','92',1076),(2542,'Hérault','34',1076),(2543,'Indre','36',1076),(2544,'Ille-et-Vilaine','35',1076),(2545,'Indre-et-Loire','37',1076),(2546,'Isère','38',1076),(2547,'Landes','40',1076),(2548,'Loir-et-Cher','41',1076),(2549,'Loire','42',1076),(2550,'Loire-Atlantique','44',1076),(2551,'Loiret','45',1076),(2552,'Lot','46',1076),(2553,'Lot-et-Garonne','47',1076),(2554,'Lozère','48',1076),(2555,'Maine-et-Loire','49',1076),(2556,'Manche','50',1076),(2557,'Marne','51',1076),(2558,'Mayenne','53',1076),(2559,'Meurthe-et-Moselle','54',1076),(2560,'Meuse','55',1076),(2561,'Morbihan','56',1076),(2562,'Moselle','57',1076),(2563,'Nièvre','58',1076),(2564,'Nord','59',1076),(2565,'Oise','60',1076),(2566,'Orne','61',1076),(2567,'Paris','75',1076),(2568,'Pas-de-Calais','62',1076),(2569,'Puy-de-Dôme','63',1076),(2570,'Pyrénées-Atlantiques','64',1076),(2571,'Pyrénées-Orientales','66',1076),(2572,'Rhône','69',1076),(2573,'Saône-et-Loire','71',1076),(2574,'Sarthe','72',1076),(2575,'Savoie','73',1076),(2576,'Seine-et-Marne','77',1076),(2577,'Seine-Maritime','76',1076),(2578,'Seine-Saint-Denis','93',1076),(2579,'Somme','80',1076),(2580,'Tarn','81',1076),(2581,'Tarn-et-Garonne','82',1076),(2582,'Val d\'Oise','95',1076),(2583,'Territoire de Belfort','90',1076),(2584,'Val-de-Marne','94',1076),(2585,'Var','83',1076),(2586,'Vaucluse','84',1076),(2587,'Vendée','85',1076),(2588,'Vienne','86',1076),(2589,'Vosges','88',1076),(2590,'Yonne','89',1076),(2591,'Yvelines','78',1076),(2592,'Aberdeen City','ABE',1226),(2593,'Aberdeenshire','ABD',1226),(2594,'Angus','ANS',1226),(2595,'Co Antrim','ANT',1226),(2597,'Argyll and Bute','AGB',1226),(2598,'Co Armagh','ARM',1226),(2606,'Bedfordshire','BDF',1226),(2612,'Blaenau Gwent','BGW',1226),(2620,'Bristol, City of','BST',1226),(2622,'Buckinghamshire','BKM',1226),(2626,'Cambridgeshire','CAM',1226),(2634,'Cheshire','CHS',1226),(2635,'Clackmannanshire','CLK',1226),(2639,'Cornwall','CON',1226),(2643,'Cumbria','CMA',1226),(2647,'Derbyshire','DBY',1226),(2648,'Co Londonderry','DRY',1226),(2649,'Devon','DEV',1226),(2651,'Dorset','DOR',1226),(2652,'Co Down','DOW',1226),(2654,'Dumfries and Galloway','DGY',1226),(2655,'Dundee City','DND',1226),(2657,'County Durham','DUR',1226),(2659,'East Ayrshire','EAY',1226),(2660,'East Dunbartonshire','EDU',1226),(2661,'East Lothian','ELN',1226),(2662,'East Renfrewshire','ERW',1226),(2663,'East Riding of Yorkshire','ERY',1226),(2664,'East Sussex','ESX',1226),(2665,'Edinburgh, City of','EDH',1226),(2666,'Na h-Eileanan Siar','ELS',1226),(2668,'Essex','ESS',1226),(2669,'Falkirk','FAL',1226),(2670,'Co Fermanagh','FER',1226),(2671,'Fife','FIF',1226),(2674,'Glasgow City','GLG',1226),(2675,'Gloucestershire','GLS',1226),(2678,'Gwynedd','GWN',1226),(2682,'Hampshire','HAM',1226),(2687,'Herefordshire','HEF',1226),(2688,'Hertfordshire','HRT',1226),(2689,'Highland','HED',1226),(2692,'Inverclyde','IVC',1226),(2694,'Isle of Wight','IOW',1226),(2699,'Kent','KEN',1226),(2705,'Lancashire','LAN',1226),(2709,'Leicestershire','LEC',1226),(2712,'Lincolnshire','LIN',1226),(2723,'Midlothian','MLN',1226),(2726,'Moray','MRY',1226),(2734,'Norfolk','NFK',1226),(2735,'North Ayrshire','NAY',1226),(2738,'North Lanarkshire','NLK',1226),(2742,'North Yorkshire','NYK',1226),(2743,'Northamptonshire','NTH',1226),(2744,'Northumberland','NBL',1226),(2746,'Nottinghamshire','NTT',1226),(2747,'Oldham','OLD',1226),(2748,'Omagh','OMH',1226),(2749,'Orkney Islands','ORR',1226),(2750,'Oxfordshire','OXF',1226),(2752,'Perth and Kinross','PKN',1226),(2757,'Powys','POW',1226),(2761,'Renfrewshire','RFW',1226),(2766,'Rutland','RUT',1226),(2770,'Scottish Borders','SCB',1226),(2773,'Shetland Islands','ZET',1226),(2774,'Shropshire','SHR',1226),(2777,'Somerset','SOM',1226),(2778,'South Ayrshire','SAY',1226),(2779,'South Gloucestershire','SGC',1226),(2780,'South Lanarkshire','SLK',1226),(2785,'Staffordshire','STS',1226),(2786,'Stirling','STG',1226),(2791,'Suffolk','SFK',1226),(2793,'Surrey','SRY',1226),(2804,'Vale of Glamorgan, The','VGL',1226),(2811,'Warwickshire','WAR',1226),(2813,'West Dunbartonshire','WDU',1226),(2814,'West Lothian','WLN',1226),(2815,'West Sussex','WSX',1226),(2818,'Wiltshire','WIL',1226),(2823,'Worcestershire','WOR',1226),(2826,'Ashanti','AH',1083),(2827,'Brong-Ahafo','BA',1083),(2828,'Greater Accra','AA',1083),(2829,'Upper East','UE',1083),(2830,'Upper West','UW',1083),(2831,'Volta','TV',1083),(2832,'Banjul','B',1213),(2833,'Lower River','L',1213),(2834,'MacCarthy Island','M',1213),(2835,'North Bank','N',1213),(2836,'Upper River','U',1213),(2837,'Beyla','BE',1091),(2838,'Boffa','BF',1091),(2839,'Boke','BK',1091),(2840,'Coyah','CO',1091),(2841,'Dabola','DB',1091),(2842,'Dalaba','DL',1091),(2843,'Dinguiraye','DI',1091),(2844,'Dubreka','DU',1091),(2845,'Faranah','FA',1091),(2846,'Forecariah','FO',1091),(2847,'Fria','FR',1091),(2848,'Gaoual','GA',1091),(2849,'Guekedou','GU',1091),(2850,'Kankan','KA',1091),(2851,'Kerouane','KE',1091),(2852,'Kindia','KD',1091),(2853,'Kissidougou','KS',1091),(2854,'Koubia','KB',1091),(2855,'Koundara','KN',1091),(2856,'Kouroussa','KO',1091),(2857,'Labe','LA',1091),(2858,'Lelouma','LE',1091),(2859,'Lola','LO',1091),(2860,'Macenta','MC',1091),(2861,'Mali','ML',1091),(2862,'Mamou','MM',1091),(2863,'Mandiana','MD',1091),(2864,'Nzerekore','NZ',1091),(2865,'Pita','PI',1091),(2866,'Siguiri','SI',1091),(2867,'Telimele','TE',1091),(2868,'Tougue','TO',1091),(2869,'Yomou','YO',1091),(2870,'Region Continental','C',1067),(2871,'Region Insular','I',1067),(2872,'Annobon','AN',1067),(2873,'Bioko Norte','BN',1067),(2874,'Bioko Sur','BS',1067),(2875,'Centro Sur','CS',1067),(2876,'Kie-Ntem','KN',1067),(2877,'Litoral','LI',1067),(2878,'Wele-Nzas','WN',1067),(2879,'Achaïa','13',1085),(2880,'Aitolia-Akarnania','01',1085),(2881,'Argolis','11',1085),(2882,'Arkadia','12',1085),(2883,'Arta','31',1085),(2884,'Attiki','A1',1085),(2885,'Chalkidiki','64',1085),(2886,'Chania','94',1085),(2887,'Chios','85',1085),(2888,'Dodekanisos','81',1085),(2889,'Drama','52',1085),(2890,'Evros','71',1085),(2891,'Evrytania','05',1085),(2892,'Evvoia','04',1085),(2893,'Florina','63',1085),(2894,'Fokis','07',1085),(2895,'Fthiotis','06',1085),(2896,'Grevena','51',1085),(2897,'Ileia','14',1085),(2898,'Imathia','53',1085),(2899,'Ioannina','33',1085),(2900,'Irakleion','91',1085),(2901,'Karditsa','41',1085),(2902,'Kastoria','56',1085),(2903,'Kavalla','55',1085),(2904,'Kefallinia','23',1085),(2905,'Kerkyra','22',1085),(2906,'Kilkis','57',1085),(2907,'Korinthia','15',1085),(2908,'Kozani','58',1085),(2909,'Kyklades','82',1085),(2910,'Lakonia','16',1085),(2911,'Larisa','42',1085),(2912,'Lasithion','92',1085),(2913,'Lefkas','24',1085),(2914,'Lesvos','83',1085),(2915,'Magnisia','43',1085),(2916,'Messinia','17',1085),(2917,'Pella','59',1085),(2918,'Preveza','34',1085),(2919,'Rethymnon','93',1085),(2920,'Rodopi','73',1085),(2921,'Samos','84',1085),(2922,'Serrai','62',1085),(2923,'Thesprotia','32',1085),(2924,'Thessaloniki','54',1085),(2925,'Trikala','44',1085),(2926,'Voiotia','03',1085),(2927,'Xanthi','72',1085),(2928,'Zakynthos','21',1085),(2929,'Agio Oros','69',1085),(2930,'Alta Verapaz','AV',1090),(2931,'Baja Verapaz','BV',1090),(2932,'Chimaltenango','CM',1090),(2933,'Chiquimula','CQ',1090),(2934,'El Progreso','PR',1090),(2935,'Escuintla','ES',1090),(2936,'Guatemala','GU',1090),(2937,'Huehuetenango','HU',1090),(2938,'Izabal','IZ',1090),(2939,'Jalapa','JA',1090),(2940,'Jutiapa','JU',1090),(2941,'Peten','PE',1090),(2942,'Quetzaltenango','QZ',1090),(2943,'Quiche','QC',1090),(2944,'Retalhuleu','RE',1090),(2945,'Sacatepequez','SA',1090),(2946,'San Marcos','SM',1090),(2947,'Santa Rosa','SR',1090),(2948,'Sololá','SO',1090),(2949,'Suchitepequez','SU',1090),(2950,'Totonicapan','TO',1090),(2951,'Zacapa','ZA',1090),(2952,'Bissau','BS',1092),(2953,'Bafata','BA',1092),(2954,'Biombo','BM',1092),(2955,'Bolama','BL',1092),(2956,'Cacheu','CA',1092),(2957,'Gabu','GA',1092),(2958,'Oio','OI',1092),(2959,'Quloara','QU',1092),(2960,'Tombali S','TO',1092),(2961,'Barima-Waini','BA',1093),(2962,'Cuyuni-Mazaruni','CU',1093),(2963,'Demerara-Mahaica','DE',1093),(2964,'East Berbice-Corentyne','EB',1093),(2965,'Essequibo Islands-West Demerara','ES',1093),(2966,'Mahaica-Berbice','MA',1093),(2967,'Pomeroon-Supenaam','PM',1093),(2968,'Potaro-Siparuni','PT',1093),(2969,'Upper Demerara-Berbice','UD',1093),(2970,'Upper Takutu-Upper Essequibo','UT',1093),(2971,'Atlantida','AT',1097),(2972,'Colon','CL',1097),(2973,'Comayagua','CM',1097),(2974,'Copan','CP',1097),(2975,'Cortes','CR',1097),(2976,'Choluteca','CH',1097),(2977,'El Paraiso','EP',1097),(2978,'Francisco Morazan','FM',1097),(2979,'Gracias a Dios','GD',1097),(2980,'Intibuca','IN',1097),(2981,'Islas de la Bahia','IB',1097),(2982,'Lempira','LE',1097),(2983,'Ocotepeque','OC',1097),(2984,'Olancho','OL',1097),(2985,'Santa Barbara','SB',1097),(2986,'Valle','VA',1097),(2987,'Yoro','YO',1097),(2988,'Bjelovarsko-bilogorska zupanija','07',1055),(2989,'Brodsko-posavska zupanija','12',1055),(2990,'Dubrovacko-neretvanska zupanija','19',1055),(2991,'Istarska zupanija','18',1055),(2992,'Karlovacka zupanija','04',1055),(2993,'Koprivnickco-krizevacka zupanija','06',1055),(2994,'Krapinako-zagorska zupanija','02',1055),(2995,'Licko-senjska zupanija','09',1055),(2996,'Medimurska zupanija','20',1055),(2997,'Osjecko-baranjska zupanija','14',1055),(2998,'Pozesko-slavonska zupanija','11',1055),(2999,'Primorsko-goranska zupanija','08',1055),(3000,'Sisacko-moelavacka Iupanija','03',1055),(3001,'Splitako-dalmatinska zupanija','17',1055),(3002,'Sibenako-kninska zupanija','15',1055),(3003,'Varaidinska zupanija','05',1055),(3004,'VirovitiEko-podravska zupanija','10',1055),(3005,'VuRovarako-srijemska zupanija','16',1055),(3006,'Zadaraka','13',1055),(3007,'Zagrebacka zupanija','01',1055),(3008,'Grande-Anse','GA',1094),(3009,'Nord-Est','NE',1094),(3010,'Nord-Ouest','NO',1094),(3011,'Ouest','OU',1094),(3012,'Sud','SD',1094),(3013,'Sud-Est','SE',1094),(3014,'Budapest','BU',1099),(3015,'Bács-Kiskun','BK',1099),(3016,'Baranya','BA',1099),(3017,'Békés','BE',1099),(3018,'Borsod-Abaúj-Zemplén','BZ',1099),(3019,'Csongrád','CS',1099),(3020,'Fejér','FE',1099),(3021,'GyÅ‘r-Moson-Sopron','GS',1099),(3022,'Hajdu-Bihar','HB',1099),(3023,'Heves','HE',1099),(3024,'Jász-Nagykun-Szolnok','JN',1099),(3025,'Komárom-Esztergom','KE',1099),(3026,'Nográd','NO',1099),(3027,'Pest','PE',1099),(3028,'Somogy','SO',1099),(3029,'Szabolcs-Szatmár-Bereg','SZ',1099),(3030,'Tolna','TO',1099),(3031,'Vas','VA',1099),(3032,'Veszprém','VE',1099),(3033,'Zala','ZA',1099),(3034,'Békéscsaba','BC',1099),(3035,'Debrecen','DE',1099),(3036,'Dunaújváros','DU',1099),(3037,'Eger','EG',1099),(3038,'GyÅ‘r','GY',1099),(3039,'HódmezÅ‘vásárhely','HV',1099),(3040,'Kaposvár','KV',1099),(3041,'Kecskemét','KM',1099),(3042,'Miskolc','MI',1099),(3043,'Nagykanizsa','NK',1099),(3044,'Nyiregyháza','NY',1099),(3045,'Pécs','PS',1099),(3046,'Salgótarján','ST',1099),(3047,'Sopron','SN',1099),(3048,'Szeged','SD',1099),(3049,'Székesfehérvár','SF',1099),(3050,'Szekszárd','SS',1099),(3051,'Szolnok','SK',1099),(3052,'Szombathely','SH',1099),(3053,'Tatabánya','TB',1099),(3054,'Zalaegerszeg','ZE',1099),(3055,'Bali','BA',1102),(3056,'Kepulauan Bangka Belitung','BB',1102),(3057,'Banten','BT',1102),(3058,'Bengkulu','BE',1102),(3059,'Gorontalo','GO',1102),(3060,'Papua Barat','PB',1102),(3061,'Jambi','JA',1102),(3062,'Jawa Barat','JB',1102),(3063,'Jawa Tengah','JT',1102),(3064,'Jawa Timur','JI',1102),(3065,'Kalimantan Barat','KB',1102),(3066,'Kalimantan Timur','KI',1102),(3067,'Kalimantan Selatan','KS',1102),(3068,'Kepulauan Riau','KR',1102),(3069,'Lampung','LA',1102),(3070,'Maluku','MA',1102),(3071,'Maluku Utara','MU',1102),(3072,'Nusa Tenggara Barat','NB',1102),(3073,'Nusa Tenggara Timur','NT',1102),(3074,'Papua','PA',1102),(3075,'Riau','RI',1102),(3076,'Sulawesi Selatan','SN',1102),(3077,'Sulawesi Tengah','ST',1102),(3078,'Sulawesi Tenggara','SG',1102),(3079,'Sulawesi Utara','SA',1102),(3080,'Sumatra Barat','SB',1102),(3081,'Sumatra Selatan','SS',1102),(3082,'Sumatera Utara','SU',1102),(3083,'DKI Jakarta','JK',1102),(3084,'Aceh','AC',1102),(3085,'DI Yogyakarta','YO',1102),(3086,'Cork','C',1105),(3087,'Clare','CE',1105),(3088,'Cavan','CN',1105),(3089,'Carlow','CW',1105),(3090,'Dublin','D',1105),(3091,'Donegal','DL',1105),(3092,'Galway','G',1105),(3093,'Kildare','KE',1105),(3094,'Kilkenny','KK',1105),(3095,'Kerry','KY',1105),(3096,'Longford','LD',1105),(3097,'Louth','LH',1105),(3098,'Limerick','LK',1105),(3099,'Leitrim','LM',1105),(3100,'Laois','LS',1105),(3101,'Meath','MH',1105),(3102,'Monaghan','MN',1105),(3103,'Mayo','MO',1105),(3104,'Offaly','OY',1105),(3105,'Roscommon','RN',1105),(3106,'Sligo','SO',1105),(3107,'Tipperary','TA',1105),(3108,'Waterford','WD',1105),(3109,'Westmeath','WH',1105),(3110,'Wicklow','WW',1105),(3111,'Wexford','WX',1105),(3112,'HaDarom','D',1106),(3113,'HaMerkaz','M',1106),(3114,'HaZafon','Z',1106),(3115,'Haifa','HA',1106),(3116,'Tel-Aviv','TA',1106),(3117,'Jerusalem','JM',1106),(3118,'Al Anbar','AN',1104),(3119,'Al Ba,rah','BA',1104),(3120,'Al Muthanna','MU',1104),(3121,'Al Qadisiyah','QA',1104),(3122,'An Najef','NA',1104),(3123,'Arbil','AR',1104),(3124,'As Sulaymaniyah','SW',1104),(3125,'At Ta\'mim','TS',1104),(3126,'Babil','BB',1104),(3127,'Baghdad','BG',1104),(3128,'Dahuk','DA',1104),(3129,'Dhi Qar','DQ',1104),(3130,'Diyala','DI',1104),(3131,'Karbala\'','KA',1104),(3132,'Maysan','MA',1104),(3133,'Ninawa','NI',1104),(3134,'Salah ad Din','SD',1104),(3135,'Wasit','WA',1104),(3136,'Ardabil','03',1103),(3137,'Azarbayjan-e Gharbi','02',1103),(3138,'Azarbayjan-e Sharqi','01',1103),(3139,'Bushehr','06',1103),(3140,'Chahar Mahall va Bakhtiari','08',1103),(3141,'Esfahan','04',1103),(3142,'Fars','14',1103),(3143,'Gilan','19',1103),(3144,'Golestan','27',1103),(3145,'Hamadan','24',1103),(3146,'Hormozgan','23',1103),(3147,'Iiam','05',1103),(3148,'Kerman','15',1103),(3149,'Kermanshah','17',1103),(3150,'Khorasan','09',1103),(3151,'Khuzestan','10',1103),(3152,'Kohjiluyeh va Buyer Ahmad','18',1103),(3153,'Kordestan','16',1103),(3154,'Lorestan','20',1103),(3155,'Markazi','22',1103),(3156,'Mazandaran','21',1103),(3157,'Qazvin','28',1103),(3158,'Qom','26',1103),(3159,'Semnan','12',1103),(3160,'Sistan va Baluchestan','13',1103),(3161,'Tehran','07',1103),(3162,'Yazd','25',1103),(3163,'Zanjan','11',1103),(3164,'Austurland','7',1100),(3165,'Hofuoborgarsvaeoi utan Reykjavikur','1',1100),(3166,'Norourland eystra','6',1100),(3167,'Norourland vestra','5',1100),(3168,'Reykjavik','0',1100),(3169,'Suourland','8',1100),(3170,'Suournes','2',1100),(3171,'Vestfirolr','4',1100),(3172,'Vesturland','3',1100),(3173,'Agrigento','AG',1107),(3174,'Alessandria','AL',1107),(3175,'Ancona','AN',1107),(3176,'Aosta','AO',1107),(3177,'Arezzo','AR',1107),(3178,'Ascoli Piceno','AP',1107),(3179,'Asti','AT',1107),(3180,'Avellino','AV',1107),(3181,'Bari','BA',1107),(3182,'Belluno','BL',1107),(3183,'Benevento','BN',1107),(3184,'Bergamo','BG',1107),(3185,'Biella','BI',1107),(3186,'Bologna','BO',1107),(3187,'Bolzano','BZ',1107),(3188,'Brescia','BS',1107),(3189,'Brindisi','BR',1107),(3190,'Cagliari','CA',1107),(3191,'Caltanissetta','CL',1107),(3192,'Campobasso','CB',1107),(3193,'Caserta','CE',1107),(3194,'Catania','CT',1107),(3195,'Catanzaro','CZ',1107),(3196,'Chieti','CH',1107),(3197,'Como','CO',1107),(3198,'Cosenza','CS',1107),(3199,'Cremona','CR',1107),(3200,'Crotone','KR',1107),(3201,'Cuneo','CN',1107),(3202,'Enna','EN',1107),(3203,'Ferrara','FE',1107),(3204,'Firenze','FI',1107),(3205,'Foggia','FG',1107),(3206,'Forlì-Cesena','FC',1107),(3207,'Frosinone','FR',1107),(3208,'Genova','GE',1107),(3209,'Gorizia','GO',1107),(3210,'Grosseto','GR',1107),(3211,'Imperia','IM',1107),(3212,'Isernia','IS',1107),(3213,'L\'Aquila','AQ',1107),(3214,'La Spezia','SP',1107),(3215,'Latina','LT',1107),(3216,'Lecce','LE',1107),(3217,'Lecco','LC',1107),(3218,'Livorno','LI',1107),(3219,'Lodi','LO',1107),(3220,'Lucca','LU',1107),(3221,'Macerata','MC',1107),(3222,'Mantova','MN',1107),(3223,'Massa-Carrara','MS',1107),(3224,'Matera','MT',1107),(3225,'Messina','ME',1107),(3226,'Milano','MI',1107),(3227,'Modena','MO',1107),(3228,'Napoli','NA',1107),(3229,'Novara','NO',1107),(3230,'Nuoro','NU',1107),(3231,'Oristano','OR',1107),(3232,'Padova','PD',1107),(3233,'Palermo','PA',1107),(3234,'Parma','PR',1107),(3235,'Pavia','PV',1107),(3236,'Perugia','PG',1107),(3237,'Pesaro e Urbino','PU',1107),(3238,'Pescara','PE',1107),(3239,'Piacenza','PC',1107),(3240,'Pisa','PI',1107),(3241,'Pistoia','PT',1107),(3242,'Pordenone','PN',1107),(3243,'Potenza','PZ',1107),(3244,'Prato','PO',1107),(3245,'Ragusa','RG',1107),(3246,'Ravenna','RA',1107),(3247,'Reggio Calabria','RC',1107),(3248,'Reggio Emilia','RE',1107),(3249,'Rieti','RI',1107),(3250,'Rimini','RN',1107),(3251,'Roma','RM',1107),(3252,'Rovigo','RO',1107),(3253,'Salerno','SA',1107),(3254,'Sassari','SS',1107),(3255,'Savona','SV',1107),(3256,'Siena','SI',1107),(3257,'Siracusa','SR',1107),(3258,'Sondrio','SO',1107),(3259,'Taranto','TA',1107),(3260,'Teramo','TE',1107),(3261,'Terni','TR',1107),(3262,'Torino','TO',1107),(3263,'Trapani','TP',1107),(3264,'Trento','TN',1107),(3265,'Treviso','TV',1107),(3266,'Trieste','TS',1107),(3267,'Udine','UD',1107),(3268,'Varese','VA',1107),(3269,'Venezia','VE',1107),(3270,'Verbano-Cusio-Ossola','VB',1107),(3271,'Vercelli','VC',1107),(3272,'Verona','VR',1107),(3273,'Vibo Valentia','VV',1107),(3274,'Vicenza','VI',1107),(3275,'Viterbo','VT',1107),(3276,'Aichi','23',1109),(3277,'Akita','05',1109),(3278,'Aomori','02',1109),(3279,'Chiba','12',1109),(3280,'Ehime','38',1109),(3281,'Fukui','18',1109),(3282,'Fukuoka','40',1109),(3283,'Fukusima','07',1109),(3284,'Gifu','21',1109),(3285,'Gunma','10',1109),(3286,'Hiroshima','34',1109),(3287,'Hokkaido','01',1109),(3288,'Hyogo','28',1109),(3289,'Ibaraki','08',1109),(3290,'Ishikawa','17',1109),(3291,'Iwate','03',1109),(3292,'Kagawa','37',1109),(3293,'Kagoshima','46',1109),(3294,'Kanagawa','14',1109),(3295,'Kochi','39',1109),(3296,'Kumamoto','43',1109),(3297,'Kyoto','26',1109),(3298,'Mie','24',1109),(3299,'Miyagi','04',1109),(3300,'Miyazaki','45',1109),(3301,'Nagano','20',1109),(3302,'Nagasaki','42',1109),(3303,'Nara','29',1109),(3304,'Niigata','15',1109),(3305,'Oita','44',1109),(3306,'Okayama','33',1109),(3307,'Okinawa','47',1109),(3308,'Osaka','27',1109),(3309,'Saga','41',1109),(3310,'Saitama','11',1109),(3311,'Shiga','25',1109),(3312,'Shimane','32',1109),(3313,'Shizuoka','22',1109),(3314,'Tochigi','09',1109),(3315,'Tokushima','36',1109),(3316,'Tokyo','13',1109),(3317,'Tottori','31',1109),(3318,'Toyama','16',1109),(3319,'Wakayama','30',1109),(3320,'Yamagata','06',1109),(3321,'Yamaguchi','35',1109),(3322,'Yamanashi','19',1109),(3323,'Clarendon','CN',1108),(3324,'Hanover','HR',1108),(3325,'Kingston','KN',1108),(3326,'Portland','PD',1108),(3327,'Saint Andrew','AW',1108),(3328,'Saint Ann','AN',1108),(3329,'Saint Catherine','CE',1108),(3330,'Saint Elizabeth','EH',1108),(3331,'Saint James','JS',1108),(3332,'Saint Mary','MY',1108),(3333,'Saint Thomas','TS',1108),(3334,'Trelawny','TY',1108),(3335,'Westmoreland','WD',1108),(3336,'Ajln','AJ',1110),(3337,'Al \'Aqaba','AQ',1110),(3338,'Al Balqa\'','BA',1110),(3339,'Al Karak','KA',1110),(3340,'Al Mafraq','MA',1110),(3341,'Amman','AM',1110),(3342,'At Tafilah','AT',1110),(3343,'Az Zarga','AZ',1110),(3344,'Irbid','JR',1110),(3345,'Jarash','JA',1110),(3346,'Ma\'an','MN',1110),(3347,'Madaba','MD',1110),(3353,'Bishkek','GB',1117),(3354,'Batken','B',1117),(3355,'Chu','C',1117),(3356,'Jalal-Abad','J',1117),(3357,'Naryn','N',1117),(3358,'Osh','O',1117),(3359,'Talas','T',1117),(3360,'Ysyk-Kol','Y',1117),(3361,'Krong Kaeb','23',1037),(3362,'Krong Pailin','24',1037),(3363,'Xrong Preah Sihanouk','18',1037),(3364,'Phnom Penh','12',1037),(3365,'Baat Dambang','2',1037),(3366,'Banteay Mean Chey','1',1037),(3367,'Rampong Chaam','3',1037),(3368,'Kampong Chhnang','4',1037),(3369,'Kampong Spueu','5',1037),(3370,'Kampong Thum','6',1037),(3371,'Kampot','7',1037),(3372,'Kandaal','8',1037),(3373,'Kach Kong','9',1037),(3374,'Krachoh','10',1037),(3375,'Mondol Kiri','11',1037),(3376,'Otdar Mean Chey','22',1037),(3377,'Pousaat','15',1037),(3378,'Preah Vihear','13',1037),(3379,'Prey Veaeng','14',1037),(3380,'Rotanak Kiri','16',1037),(3381,'Siem Reab','17',1037),(3382,'Stueng Traeng','19',1037),(3383,'Svaay Rieng','20',1037),(3384,'Taakaev','21',1037),(3385,'Gilbert Islands','G',1113),(3386,'Line Islands','L',1113),(3387,'Phoenix Islands','P',1113),(3388,'Anjouan Ndzouani','A',1049),(3389,'Grande Comore Ngazidja','G',1049),(3390,'Moheli Moili','M',1049),(3391,'Kaesong-si','KAE',1114),(3392,'Nampo-si','NAM',1114),(3393,'Pyongyang-ai','PYO',1114),(3394,'Chagang-do','CHA',1114),(3395,'Hamgyongbuk-do','HAB',1114),(3396,'Hamgyongnam-do','HAN',1114),(3397,'Hwanghaebuk-do','HWB',1114),(3398,'Hwanghaenam-do','HWN',1114),(3399,'Kangwon-do','KAN',1114),(3400,'Pyonganbuk-do','PYB',1114),(3401,'Pyongannam-do','PYN',1114),(3402,'Yanggang-do','YAN',1114),(3403,'Najin Sonbong-si','NAJ',1114),(3404,'Seoul Teugbyeolsi','11',1115),(3405,'Busan Gwang\'yeogsi','26',1115),(3406,'Daegu Gwang\'yeogsi','27',1115),(3407,'Daejeon Gwang\'yeogsi','30',1115),(3408,'Gwangju Gwang\'yeogsi','29',1115),(3409,'Incheon Gwang\'yeogsi','28',1115),(3410,'Ulsan Gwang\'yeogsi','31',1115),(3411,'Chungcheongbugdo','43',1115),(3412,'Chungcheongnamdo','44',1115),(3413,'Gang\'weondo','42',1115),(3414,'Gyeonggido','41',1115),(3415,'Gyeongsangbugdo','47',1115),(3416,'Gyeongsangnamdo','48',1115),(3417,'Jejudo','49',1115),(3418,'Jeonrabugdo','45',1115),(3419,'Jeonranamdo','46',1115),(3420,'Al Ahmadi','AH',1116),(3421,'Al Farwanlyah','FA',1116),(3422,'Al Jahrah','JA',1116),(3423,'Al Kuwayt','KU',1116),(3424,'Hawalli','HA',1116),(3425,'Almaty','ALA',1111),(3426,'Astana','AST',1111),(3427,'Almaty oblysy','ALM',1111),(3428,'Aqmola oblysy','AKM',1111),(3429,'Aqtobe oblysy','AKT',1111),(3430,'Atyrau oblyfiy','ATY',1111),(3431,'Batys Quzaqstan oblysy','ZAP',1111),(3432,'Mangghystau oblysy','MAN',1111),(3433,'Ongtustik Quzaqstan oblysy','YUZ',1111),(3434,'Pavlodar oblysy','PAV',1111),(3435,'Qaraghandy oblysy','KAR',1111),(3436,'Qostanay oblysy','KUS',1111),(3437,'Qyzylorda oblysy','KZY',1111),(3438,'Shyghys Quzaqstan oblysy','VOS',1111),(3439,'Soltustik Quzaqstan oblysy','SEV',1111),(3440,'Zhambyl oblysy Zhambylskaya oblast\'','ZHA',1111),(3441,'Vientiane','VT',1118),(3442,'Attapu','AT',1118),(3443,'Bokeo','BK',1118),(3444,'Bolikhamxai','BL',1118),(3445,'Champasak','CH',1118),(3446,'Houaphan','HO',1118),(3447,'Khammouan','KH',1118),(3448,'Louang Namtha','LM',1118),(3449,'Louangphabang','LP',1118),(3450,'Oudomxai','OU',1118),(3451,'Phongsali','PH',1118),(3452,'Salavan','SL',1118),(3453,'Savannakhet','SV',1118),(3454,'Xaignabouli','XA',1118),(3455,'Xiasomboun','XN',1118),(3456,'Xekong','XE',1118),(3457,'Xiangkhoang','XI',1118),(3458,'Beirut','BA',1120),(3459,'Beqaa','BI',1120),(3460,'Mount Lebanon','JL',1120),(3461,'North Lebanon','AS',1120),(3462,'South Lebanon','JA',1120),(3463,'Nabatieh','NA',1120),(3464,'Ampara','52',1199),(3465,'Anuradhapura','71',1199),(3466,'Badulla','81',1199),(3467,'Batticaloa','51',1199),(3468,'Colombo','11',1199),(3469,'Galle','31',1199),(3470,'Gampaha','12',1199),(3471,'Hambantota','33',1199),(3472,'Jaffna','41',1199),(3473,'Kalutara','13',1199),(3474,'Kandy','21',1199),(3475,'Kegalla','92',1199),(3476,'Kilinochchi','42',1199),(3477,'Kurunegala','61',1199),(3478,'Mannar','43',1199),(3479,'Matale','22',1199),(3480,'Matara','32',1199),(3481,'Monaragala','82',1199),(3482,'Mullaittivu','45',1199),(3483,'Nuwara Eliya','23',1199),(3484,'Polonnaruwa','72',1199),(3485,'Puttalum','62',1199),(3486,'Ratnapura','91',1199),(3487,'Trincomalee','53',1199),(3488,'VavunLya','44',1199),(3489,'Bomi','BM',1122),(3490,'Bong','BG',1122),(3491,'Grand Basaa','GB',1122),(3492,'Grand Cape Mount','CM',1122),(3493,'Grand Gedeh','GG',1122),(3494,'Grand Kru','GK',1122),(3495,'Lofa','LO',1122),(3496,'Margibi','MG',1122),(3497,'Maryland','MY',1122),(3498,'Montserrado','MO',1122),(3499,'Nimba','NI',1122),(3500,'Rivercess','RI',1122),(3501,'Sinoe','SI',1122),(3502,'Berea','D',1121),(3503,'Butha-Buthe','B',1121),(3504,'Leribe','C',1121),(3505,'Mafeteng','E',1121),(3506,'Maseru','A',1121),(3507,'Mohale\'s Hoek','F',1121),(3508,'Mokhotlong','J',1121),(3509,'Qacha\'s Nek','H',1121),(3510,'Quthing','G',1121),(3511,'Thaba-Tseka','K',1121),(3512,'Alytaus Apskritis','AL',1125),(3513,'Kauno Apskritis','KU',1125),(3514,'KlaipÄ—dos Apskritis','KL',1125),(3515,'MarijampolÄ—s Apskritis','MR',1125),(3516,'Panevėžio Apskritis','PN',1125),(3517,'Å iaulių Apskritis','SA',1125),(3518,'TauragÄ—s Apskritis','TA',1125),(3519,'TelÅ¡ių Apskritis','TE',1125),(3520,'Utenos Apskritis','UT',1125),(3521,'Vilniaus Apskritis','VL',1125),(3522,'Diekirch','D',1126),(3523,'GreveNmacher','G',1126),(3550,'Daugavpils','DGV',1119),(3551,'Jelgava','JEL',1119),(3552,'JÅ«rmala','JUR',1119),(3553,'LiepÄja','LPX',1119),(3554,'RÄ“zekne','REZ',1119),(3555,'RÄ«ga','RIX',1119),(3556,'Ventspils','VEN',1119),(3557,'AjdÄbiyÄ','AJ',1123),(3558,'Al BuÅ£nÄn','BU',1123),(3559,'Al HizÄm al Akhdar','HZ',1123),(3560,'Al Jabal al Akhdar','JA',1123),(3561,'Al JifÄrah','JI',1123),(3562,'Al Jufrah','JU',1123),(3563,'Al Kufrah','KF',1123),(3564,'Al Marj','MJ',1123),(3565,'Al Marqab','MB',1123),(3566,'Al QaÅ£rÅ«n','QT',1123),(3567,'Al Qubbah','QB',1123),(3568,'Al WÄhah','WA',1123),(3569,'An NuqaÅ£ al Khams','NQ',1123),(3570,'Ash ShÄÅ£i\'','SH',1123),(3571,'Az ZÄwiyah','ZA',1123),(3572,'BanghÄzÄ«','BA',1123),(3573,'BanÄ« WalÄ«d','BW',1123),(3574,'Darnah','DR',1123),(3575,'GhadÄmis','GD',1123),(3576,'GharyÄn','GR',1123),(3577,'GhÄt','GT',1123),(3578,'JaghbÅ«b','JB',1123),(3579,'MiÅŸrÄtah','MI',1123),(3580,'Mizdah','MZ',1123),(3581,'Murzuq','MQ',1123),(3582,'NÄlÅ«t','NL',1123),(3583,'SabhÄ','SB',1123),(3584,'ÅžabrÄtah ÅžurmÄn','SS',1123),(3585,'Surt','SR',1123),(3586,'TÄjÅ«rÄ\' wa an NawÄhÄ« al ArbÄh','TN',1123),(3587,'Å¢arÄbulus','TB',1123),(3588,'TarhÅ«nah-MasallÄtah','TM',1123),(3589,'WÄdÄ« al hayÄt','WD',1123),(3590,'Yafran-JÄdÅ«','YJ',1123),(3591,'Agadir','AGD',1146),(3592,'Aït Baha','BAH',1146),(3593,'Aït Melloul','MEL',1146),(3594,'Al Haouz','HAO',1146),(3595,'Al Hoceïma','HOC',1146),(3596,'Assa-Zag','ASZ',1146),(3597,'Azilal','AZI',1146),(3598,'Beni Mellal','BEM',1146),(3599,'Ben Sllmane','BES',1146),(3600,'Berkane','BER',1146),(3601,'Boujdour','BOD',1146),(3602,'Boulemane','BOM',1146),(3603,'Casablanca [Dar el Beïda]','CAS',1146),(3604,'Chefchaouene','CHE',1146),(3605,'Chichaoua','CHI',1146),(3606,'El Hajeb','HAJ',1146),(3607,'El Jadida','JDI',1146),(3608,'Errachidia','ERR',1146),(3609,'Essaouira','ESI',1146),(3610,'Es Smara','ESM',1146),(3611,'Fès','FES',1146),(3612,'Figuig','FIG',1146),(3613,'Guelmim','GUE',1146),(3614,'Ifrane','IFR',1146),(3615,'Jerada','JRA',1146),(3616,'Kelaat Sraghna','KES',1146),(3617,'Kénitra','KEN',1146),(3618,'Khemisaet','KHE',1146),(3619,'Khenifra','KHN',1146),(3620,'Khouribga','KHO',1146),(3621,'Laâyoune (EH)','LAA',1146),(3622,'Larache','LAP',1146),(3623,'Marrakech','MAR',1146),(3624,'Meknsès','MEK',1146),(3625,'Nador','NAD',1146),(3626,'Ouarzazate','OUA',1146),(3627,'Oued ed Dahab (EH)','OUD',1146),(3628,'Oujda','OUJ',1146),(3629,'Rabat-Salé','RBA',1146),(3630,'Safi','SAF',1146),(3631,'Sefrou','SEF',1146),(3632,'Settat','SET',1146),(3633,'Sidl Kacem','SIK',1146),(3634,'Tanger','TNG',1146),(3635,'Tan-Tan','TNT',1146),(3636,'Taounate','TAO',1146),(3637,'Taroudannt','TAR',1146),(3638,'Tata','TAT',1146),(3639,'Taza','TAZ',1146),(3640,'Tétouan','TET',1146),(3641,'Tiznit','TIZ',1146),(3642,'Gagauzia, Unitate Teritoriala Autonoma','GA',1142),(3643,'Chisinau','CU',1142),(3644,'Stinga Nistrului, unitatea teritoriala din','SN',1142),(3645,'Balti','BA',1142),(3646,'Cahul','CA',1142),(3647,'Edinet','ED',1142),(3648,'Lapusna','LA',1142),(3649,'Orhei','OR',1142),(3650,'Soroca','SO',1142),(3651,'Taraclia','TA',1142),(3652,'Tighina [Bender]','TI',1142),(3653,'Ungheni','UN',1142),(3654,'Antananarivo','T',1129),(3655,'Antsiranana','D',1129),(3656,'Fianarantsoa','F',1129),(3657,'Mahajanga','M',1129),(3658,'Toamasina','A',1129),(3659,'Toliara','U',1129),(3660,'Ailinglapalap','ALL',1135),(3661,'Ailuk','ALK',1135),(3662,'Arno','ARN',1135),(3663,'Aur','AUR',1135),(3664,'Ebon','EBO',1135),(3665,'Eniwetok','ENI',1135),(3666,'Jaluit','JAL',1135),(3667,'Kili','KIL',1135),(3668,'Kwajalein','KWA',1135),(3669,'Lae','LAE',1135),(3670,'Lib','LIB',1135),(3671,'Likiep','LIK',1135),(3672,'Majuro','MAJ',1135),(3673,'Maloelap','MAL',1135),(3674,'Mejit','MEJ',1135),(3675,'Mili','MIL',1135),(3676,'Namorik','NMK',1135),(3677,'Namu','NMU',1135),(3678,'Rongelap','RON',1135),(3679,'Ujae','UJA',1135),(3680,'Ujelang','UJL',1135),(3681,'Utirik','UTI',1135),(3682,'Wotho','WTN',1135),(3683,'Wotje','WTJ',1135),(3684,'Bamako','BK0',1133),(3685,'Gao','7',1133),(3686,'Kayes','1',1133),(3687,'Kidal','8',1133),(3688,'Xoulikoro','2',1133),(3689,'Mopti','5',1133),(3690,'S69ou','4',1133),(3691,'Sikasso','3',1133),(3692,'Tombouctou','6',1133),(3693,'Ayeyarwady','07',1035),(3694,'Bago','02',1035),(3695,'Magway','03',1035),(3696,'Mandalay','04',1035),(3697,'Sagaing','01',1035),(3698,'Tanintharyi','05',1035),(3699,'Yangon','06',1035),(3700,'Chin','14',1035),(3701,'Kachin','11',1035),(3702,'Kayah','12',1035),(3703,'Kayin','13',1035),(3704,'Mon','15',1035),(3705,'Rakhine','16',1035),(3706,'Shan','17',1035),(3707,'Ulaanbaatar','1',1144),(3708,'Arhangay','073',1144),(3709,'Bayanhongor','069',1144),(3710,'Bayan-Olgiy','071',1144),(3711,'Bulgan','067',1144),(3712,'Darhan uul','037',1144),(3713,'Dornod','061',1144),(3714,'Dornogov,','063',1144),(3715,'DundgovL','059',1144),(3716,'Dzavhan','057',1144),(3717,'Govi-Altay','065',1144),(3718,'Govi-Smber','064',1144),(3719,'Hentiy','039',1144),(3720,'Hovd','043',1144),(3721,'Hovsgol','041',1144),(3722,'Omnogovi','053',1144),(3723,'Orhon','035',1144),(3724,'Ovorhangay','055',1144),(3725,'Selenge','049',1144),(3726,'Shbaatar','051',1144),(3727,'Tov','047',1144),(3728,'Uvs','046',1144),(3729,'Nouakchott','NKC',1137),(3730,'Assaba','03',1137),(3731,'Brakna','05',1137),(3732,'Dakhlet Nouadhibou','08',1137),(3733,'Gorgol','04',1137),(3734,'Guidimaka','10',1137),(3735,'Hodh ech Chargui','01',1137),(3736,'Hodh el Charbi','02',1137),(3737,'Inchiri','12',1137),(3738,'Tagant','09',1137),(3739,'Tiris Zemmour','11',1137),(3740,'Trarza','06',1137),(3741,'Beau Bassin-Rose Hill','BR',1138),(3742,'Curepipe','CU',1138),(3743,'Port Louis','PU',1138),(3744,'Quatre Bornes','QB',1138),(3745,'Vacosa-Phoenix','VP',1138),(3746,'Black River','BL',1138),(3747,'Flacq','FL',1138),(3748,'Grand Port','GP',1138),(3749,'Moka','MO',1138),(3750,'Pamplemousses','PA',1138),(3751,'Plaines Wilhems','PW',1138),(3752,'Riviere du Rempart','RP',1138),(3753,'Savanne','SA',1138),(3754,'Agalega Islands','AG',1138),(3755,'Cargados Carajos Shoals','CC',1138),(3756,'Rodrigues Island','RO',1138),(3757,'Male','MLE',1132),(3758,'Alif','02',1132),(3759,'Baa','20',1132),(3760,'Dhaalu','17',1132),(3761,'Faafu','14',1132),(3762,'Gaaf Alif','27',1132),(3763,'Gaefu Dhaalu','28',1132),(3764,'Gnaviyani','29',1132),(3765,'Haa Alif','07',1132),(3766,'Haa Dhaalu','23',1132),(3767,'Kaafu','26',1132),(3768,'Laamu','05',1132),(3769,'Lhaviyani','03',1132),(3770,'Meemu','12',1132),(3771,'Noonu','25',1132),(3772,'Raa','13',1132),(3773,'Seenu','01',1132),(3774,'Shaviyani','24',1132),(3775,'Thaa','08',1132),(3776,'Vaavu','04',1132),(3777,'Balaka','BA',1130),(3778,'Blantyre','BL',1130),(3779,'Chikwawa','CK',1130),(3780,'Chiradzulu','CR',1130),(3781,'Chitipa','CT',1130),(3782,'Dedza','DE',1130),(3783,'Dowa','DO',1130),(3784,'Karonga','KR',1130),(3785,'Kasungu','KS',1130),(3786,'Likoma Island','LK',1130),(3787,'Lilongwe','LI',1130),(3788,'Machinga','MH',1130),(3789,'Mangochi','MG',1130),(3790,'Mchinji','MC',1130),(3791,'Mulanje','MU',1130),(3792,'Mwanza','MW',1130),(3793,'Mzimba','MZ',1130),(3794,'Nkhata Bay','NB',1130),(3795,'Nkhotakota','NK',1130),(3796,'Nsanje','NS',1130),(3797,'Ntcheu','NU',1130),(3798,'Ntchisi','NI',1130),(3799,'Phalomba','PH',1130),(3800,'Rumphi','RU',1130),(3801,'Salima','SA',1130),(3802,'Thyolo','TH',1130),(3803,'Zomba','ZO',1130),(3804,'Aguascalientes','AGU',1140),(3805,'Baja California','BCN',1140),(3806,'Baja California Sur','BCS',1140),(3807,'Campeche','CAM',1140),(3808,'Coahuila','COA',1140),(3809,'Colima','COL',1140),(3810,'Chiapas','CHP',1140),(3811,'Chihuahua','CHH',1140),(3812,'Durango','DUR',1140),(3813,'Guanajuato','GUA',1140),(3814,'Guerrero','GRO',1140),(3815,'Hidalgo','HID',1140),(3816,'Jalisco','JAL',1140),(3817,'Mexico','MEX',1140),(3818,'Michoacin','MIC',1140),(3819,'Morelos','MOR',1140),(3820,'Nayarit','NAY',1140),(3821,'Nuevo Leon','NLE',1140),(3822,'Oaxaca','OAX',1140),(3823,'Puebla','PUE',1140),(3824,'Queretaro','QUE',1140),(3825,'Quintana Roo','ROO',1140),(3826,'San Luis Potosi','SLP',1140),(3827,'Sinaloa','SIN',1140),(3828,'Sonora','SON',1140),(3829,'Tabasco','TAB',1140),(3830,'Tamaulipas','TAM',1140),(3831,'Tlaxcala','TLA',1140),(3832,'Veracruz','VER',1140),(3833,'Yucatan','YUC',1140),(3834,'Zacatecas','ZAC',1140),(3835,'Wilayah Persekutuan Kuala Lumpur','14',1131),(3836,'Wilayah Persekutuan Labuan','15',1131),(3837,'Wilayah Persekutuan Putrajaya','16',1131),(3838,'Johor','01',1131),(3839,'Kedah','02',1131),(3840,'Kelantan','03',1131),(3841,'Melaka','04',1131),(3842,'Negeri Sembilan','05',1131),(3843,'Pahang','06',1131),(3844,'Perak','08',1131),(3845,'Perlis','09',1131),(3846,'Pulau Pinang','07',1131),(3847,'Sabah','12',1131),(3848,'Sarawak','13',1131),(3849,'Selangor','10',1131),(3850,'Terengganu','11',1131),(3851,'Maputo','MPM',1147),(3852,'Cabo Delgado','P',1147),(3853,'Gaza','G',1147),(3854,'Inhambane','I',1147),(3855,'Manica','B',1147),(3856,'Numpula','N',1147),(3857,'Niaaea','A',1147),(3858,'Sofala','S',1147),(3859,'Tete','T',1147),(3860,'Zambezia','Q',1147),(3861,'Caprivi','CA',1148),(3862,'Erongo','ER',1148),(3863,'Hardap','HA',1148),(3864,'Karas','KA',1148),(3865,'Khomas','KH',1148),(3866,'Kunene','KU',1148),(3867,'Ohangwena','OW',1148),(3868,'Okavango','OK',1148),(3869,'Omaheke','OH',1148),(3870,'Omusati','OS',1148),(3871,'Oshana','ON',1148),(3872,'Oshikoto','OT',1148),(3873,'Otjozondjupa','OD',1148),(3874,'Niamey','8',1156),(3875,'Agadez','1',1156),(3876,'Diffa','2',1156),(3877,'Dosso','3',1156),(3878,'Maradi','4',1156),(3879,'Tahoua','S',1156),(3880,'Tillaberi','6',1156),(3881,'Zinder','7',1156),(3882,'Abuja Federal Capital Territory','FC',1157),(3883,'Abia','AB',1157),(3884,'Adamawa','AD',1157),(3885,'Akwa Ibom','AK',1157),(3886,'Anambra','AN',1157),(3887,'Bauchi','BA',1157),(3888,'Bayelsa','BY',1157),(3889,'Benue','BE',1157),(3890,'Borno','BO',1157),(3891,'Cross River','CR',1157),(3892,'Delta','DE',1157),(3893,'Ebonyi','EB',1157),(3894,'Edo','ED',1157),(3895,'Ekiti','EK',1157),(3896,'Enugu','EN',1157),(3897,'Gombe','GO',1157),(3898,'Imo','IM',1157),(3899,'Jigawa','JI',1157),(3900,'Kaduna','KD',1157),(3901,'Kano','KN',1157),(3902,'Katsina','KT',1157),(3903,'Kebbi','KE',1157),(3904,'Kogi','KO',1157),(3905,'Kwara','KW',1157),(3906,'Lagos','LA',1157),(3907,'Nassarawa','NA',1157),(3908,'Niger','NI',1157),(3909,'Ogun','OG',1157),(3910,'Ondo','ON',1157),(3911,'Osun','OS',1157),(3912,'Oyo','OY',1157),(3913,'Rivers','RI',1157),(3914,'Sokoto','SO',1157),(3915,'Taraba','TA',1157),(3916,'Yobe','YO',1157),(3917,'Zamfara','ZA',1157),(3918,'Boaco','BO',1155),(3919,'Carazo','CA',1155),(3920,'Chinandega','CI',1155),(3921,'Chontales','CO',1155),(3922,'Esteli','ES',1155),(3923,'Jinotega','JI',1155),(3924,'Leon','LE',1155),(3925,'Madriz','MD',1155),(3926,'Managua','MN',1155),(3927,'Masaya','MS',1155),(3928,'Matagalpa','MT',1155),(3929,'Nueva Segovia','NS',1155),(3930,'Rio San Juan','SJ',1155),(3931,'Rivas','RI',1155),(3932,'Atlantico Norte','AN',1155),(3933,'Atlantico Sur','AS',1155),(3934,'Drente','DR',1152),(3935,'Flevoland','FL',1152),(3936,'Friesland','FR',1152),(3937,'Gelderland','GL',1152),(3938,'Groningen','GR',1152),(3939,'Noord-Brabant','NB',1152),(3940,'Noord-Holland','NH',1152),(3941,'Overijssel','OV',1152),(3942,'Utrecht','UT',1152),(3943,'Zuid-Holland','ZH',1152),(3944,'Zeeland','ZL',1152),(3945,'Akershus','02',1161),(3946,'Aust-Agder','09',1161),(3947,'Buskerud','06',1161),(3948,'Finnmark','20',1161),(3949,'Hedmark','04',1161),(3950,'Hordaland','12',1161),(3951,'Møre og Romsdal','15',1161),(3952,'Nordland','18',1161),(3953,'Nord-Trøndelag','17',1161),(3954,'Oppland','05',1161),(3955,'Oslo','03',1161),(3956,'Rogaland','11',1161),(3957,'Sogn og Fjordane','14',1161),(3958,'Sør-Trøndelag','16',1161),(3959,'Telemark','06',1161),(3960,'Troms','19',1161),(3961,'Vest-Agder','10',1161),(3962,'Vestfold','07',1161),(3963,'Østfold','01',1161),(3964,'Jan Mayen','22',1161),(3965,'Svalbard','21',1161),(3966,'Auckland','AUK',1154),(3967,'Bay of Plenty','BOP',1154),(3968,'Canterbury','CAN',1154),(3969,'Gisborne','GIS',1154),(3970,'Hawkes Bay','HKB',1154),(3971,'Manawatu-Wanganui','MWT',1154),(3972,'Marlborough','MBH',1154),(3973,'Nelson','NSN',1154),(3974,'Northland','NTL',1154),(3975,'Otago','OTA',1154),(3976,'Southland','STL',1154),(3977,'Taranaki','TKI',1154),(3978,'Tasman','TAS',1154),(3979,'Waikato','WKO',1154),(3980,'Wellington','WGN',1154),(3981,'West Coast','WTC',1154),(3982,'Ad Dakhillyah','DA',1162),(3983,'Al Batinah','BA',1162),(3984,'Al Janblyah','JA',1162),(3985,'Al Wusta','WU',1162),(3986,'Ash Sharqlyah','SH',1162),(3987,'Az Zahirah','ZA',1162),(3988,'Masqat','MA',1162),(3989,'Musandam','MU',1162),(3990,'Bocas del Toro','1',1166),(3991,'Cocle','2',1166),(3992,'Chiriqui','4',1166),(3993,'Darien','5',1166),(3994,'Herrera','6',1166),(3995,'Loa Santoa','7',1166),(3996,'Panama','8',1166),(3997,'Veraguas','9',1166),(3998,'Comarca de San Blas','Q',1166),(3999,'El Callao','CAL',1169),(4000,'Ancash','ANC',1169),(4001,'Apurimac','APU',1169),(4002,'Arequipa','ARE',1169),(4003,'Ayacucho','AYA',1169),(4004,'Cajamarca','CAJ',1169),(4005,'Cuzco','CUS',1169),(4006,'Huancavelica','HUV',1169),(4007,'Huanuco','HUC',1169),(4008,'Ica','ICA',1169),(4009,'Junin','JUN',1169),(4010,'La Libertad','LAL',1169),(4011,'Lambayeque','LAM',1169),(4012,'Lima','LIM',1169),(4013,'Loreto','LOR',1169),(4014,'Madre de Dios','MDD',1169),(4015,'Moquegua','MOQ',1169),(4016,'Pasco','PAS',1169),(4017,'Piura','PIU',1169),(4018,'Puno','PUN',1169),(4019,'San Martin','SAM',1169),(4020,'Tacna','TAC',1169),(4021,'Tumbes','TUM',1169),(4022,'Ucayali','UCA',1169),(4023,'National Capital District (Port Moresby)','NCD',1167),(4024,'Chimbu','CPK',1167),(4025,'Eastern Highlands','EHG',1167),(4026,'East New Britain','EBR',1167),(4027,'East Sepik','ESW',1167),(4028,'Enga','EPW',1167),(4029,'Gulf','GPK',1167),(4030,'Madang','MPM',1167),(4031,'Manus','MRL',1167),(4032,'Milne Bay','MBA',1167),(4033,'Morobe','MPL',1167),(4034,'New Ireland','NIK',1167),(4035,'North Solomons','NSA',1167),(4036,'Santaun','SAN',1167),(4037,'Southern Highlands','SHM',1167),(4038,'Western Highlands','WHM',1167),(4039,'West New Britain','WBK',1167),(4040,'Abra','ABR',1170),(4041,'Agusan del Norte','AGN',1170),(4042,'Agusan del Sur','AGS',1170),(4043,'Aklan','AKL',1170),(4044,'Albay','ALB',1170),(4045,'Antique','ANT',1170),(4046,'Apayao','APA',1170),(4047,'Aurora','AUR',1170),(4048,'Basilan','BAS',1170),(4049,'Bataan','BAN',1170),(4050,'Batanes','BTN',1170),(4051,'Batangas','BTG',1170),(4052,'Benguet','BEN',1170),(4053,'Biliran','BIL',1170),(4054,'Bohol','BOH',1170),(4055,'Bukidnon','BUK',1170),(4056,'Bulacan','BUL',1170),(4057,'Cagayan','CAG',1170),(4058,'Camarines Norte','CAN',1170),(4059,'Camarines Sur','CAS',1170),(4060,'Camiguin','CAM',1170),(4061,'Capiz','CAP',1170),(4062,'Catanduanes','CAT',1170),(4063,'Cavite','CAV',1170),(4064,'Cebu','CEB',1170),(4065,'Compostela Valley','COM',1170),(4066,'Davao','DAV',1170),(4067,'Davao del Sur','DAS',1170),(4068,'Davao Oriental','DAO',1170),(4069,'Eastern Samar','EAS',1170),(4070,'Guimaras','GUI',1170),(4071,'Ifugao','IFU',1170),(4072,'Ilocos Norte','ILN',1170),(4073,'Ilocos Sur','ILS',1170),(4074,'Iloilo','ILI',1170),(4075,'Isabela','ISA',1170),(4076,'Kalinga-Apayso','KAL',1170),(4077,'Laguna','LAG',1170),(4078,'Lanao del Norte','LAN',1170),(4079,'Lanao del Sur','LAS',1170),(4080,'La Union','LUN',1170),(4081,'Leyte','LEY',1170),(4082,'Maguindanao','MAG',1170),(4083,'Marinduque','MAD',1170),(4084,'Masbate','MAS',1170),(4085,'Mindoro Occidental','MDC',1170),(4086,'Mindoro Oriental','MDR',1170),(4087,'Misamis Occidental','MSC',1170),(4088,'Misamis Oriental','MSR',1170),(4089,'Mountain Province','MOU',1170),(4090,'Negroe Occidental','NEC',1170),(4091,'Negros Oriental','NER',1170),(4092,'North Cotabato','NCO',1170),(4093,'Northern Samar','NSA',1170),(4094,'Nueva Ecija','NUE',1170),(4095,'Nueva Vizcaya','NUV',1170),(4096,'Palawan','PLW',1170),(4097,'Pampanga','PAM',1170),(4098,'Pangasinan','PAN',1170),(4099,'Quezon','QUE',1170),(4100,'Quirino','QUI',1170),(4101,'Rizal','RIZ',1170),(4102,'Romblon','ROM',1170),(4103,'Sarangani','SAR',1170),(4104,'Siquijor','SIG',1170),(4105,'Sorsogon','SOR',1170),(4106,'South Cotabato','SCO',1170),(4107,'Southern Leyte','SLE',1170),(4108,'Sultan Kudarat','SUK',1170),(4109,'Sulu','SLU',1170),(4110,'Surigao del Norte','SUN',1170),(4111,'Surigao del Sur','SUR',1170),(4112,'Tarlac','TAR',1170),(4113,'Tawi-Tawi','TAW',1170),(4114,'Western Samar','WSA',1170),(4115,'Zambales','ZMB',1170),(4116,'Zamboanga del Norte','ZAN',1170),(4117,'Zamboanga del Sur','ZAS',1170),(4118,'Zamboanga Sibiguey','ZSI',1170),(4119,'Islamabad Federal Capital Area','IS',1163),(4120,'Baluchistan','BA',1163),(4121,'Khyber Pakhtun Khawa','NW',1163),(4122,'Sindh','SD',1163),(4123,'Federally Administered Tribal Areas','TA',1163),(4124,'Azad Kashmir','JK',1163),(4125,'Gilgit-Baltistan','NA',1163),(4126,'Aveiro','01',1173),(4127,'Beja','02',1173),(4128,'Braga','03',1173),(4129,'Bragança','04',1173),(4130,'Castelo Branco','05',1173),(4131,'Coimbra','06',1173),(4132,'Évora','07',1173),(4133,'Faro','08',1173),(4134,'Guarda','09',1173),(4135,'Leiria','10',1173),(4136,'Lisboa','11',1173),(4137,'Portalegre','12',1173),(4138,'Porto','13',1173),(4139,'Santarém','14',1173),(4140,'Setúbal','15',1173),(4141,'Viana do Castelo','16',1173),(4142,'Vila Real','17',1173),(4143,'Viseu','18',1173),(4144,'Região Autónoma dos Açores','20',1173),(4145,'Região Autónoma da Madeira','30',1173),(4146,'Asuncion','ASU',1168),(4147,'Alto Paraguay','16',1168),(4148,'Alto Parana','10',1168),(4149,'Amambay','13',1168),(4150,'Boqueron','19',1168),(4151,'Caeguazu','5',1168),(4152,'Caazapl','6',1168),(4153,'Canindeyu','14',1168),(4154,'Concepcion','1',1168),(4155,'Cordillera','3',1168),(4156,'Guaira','4',1168),(4157,'Itapua','7',1168),(4158,'Miaiones','8',1168),(4159,'Neembucu','12',1168),(4160,'Paraguari','9',1168),(4161,'Presidente Hayes','15',1168),(4162,'San Pedro','2',1168),(4163,'Ad Dawhah','DA',1175),(4164,'Al Ghuwayriyah','GH',1175),(4165,'Al Jumayliyah','JU',1175),(4166,'Al Khawr','KH',1175),(4167,'Al Wakrah','WA',1175),(4168,'Ar Rayyan','RA',1175),(4169,'Jariyan al Batnah','JB',1175),(4170,'Madinat ash Shamal','MS',1175),(4171,'Umm Salal','US',1175),(4172,'Bucuresti','B',1176),(4173,'Alba','AB',1176),(4174,'Arad','AR',1176),(4175,'ArgeÈ™','AG',1176),(4176,'Bacău','BC',1176),(4177,'Bihor','BH',1176),(4178,'BistriÈ›a-Năsăud','BN',1176),(4179,'BotoÈ™ani','BT',1176),(4180,'BraÈ™ov','BV',1176),(4181,'Brăila','BR',1176),(4182,'Buzău','BZ',1176),(4183,'CaraÈ™-Severin','CS',1176),(4184,'CălăraÈ™i','CL',1176),(4185,'Cluj','CJ',1176),(4186,'ConstanÈ›a','CT',1176),(4187,'Covasna','CV',1176),(4188,'DâmboviÈ›a','DB',1176),(4189,'Dolj','DJ',1176),(4190,'GalaÈ›i','GL',1176),(4191,'Giurgiu','GR',1176),(4192,'Gorj','GJ',1176),(4193,'Harghita','HR',1176),(4194,'Hunedoara','HD',1176),(4195,'IalomiÈ›a','IL',1176),(4196,'IaÈ™i','IS',1176),(4197,'Ilfov','IF',1176),(4198,'MaramureÈ™','MM',1176),(4199,'MehedinÈ›i','MH',1176),(4200,'MureÈ™','MS',1176),(4201,'NeamÈ›','NT',1176),(4202,'Olt','OT',1176),(4203,'Prahova','PH',1176),(4204,'Satu Mare','SM',1176),(4205,'Sălaj','SJ',1176),(4206,'Sibiu','SB',1176),(4207,'Suceava','SV',1176),(4208,'Teleorman','TR',1176),(4209,'TimiÈ™','TM',1176),(4210,'Tulcea','TL',1176),(4211,'Vaslui','VS',1176),(4212,'Vâlcea','VL',1176),(4213,'Vrancea','VN',1176),(4214,'Adygeya, Respublika','AD',1177),(4215,'Altay, Respublika','AL',1177),(4216,'Bashkortostan, Respublika','BA',1177),(4217,'Buryatiya, Respublika','BU',1177),(4218,'Chechenskaya Respublika','CE',1177),(4219,'Chuvashskaya Respublika','CU',1177),(4220,'Dagestan, Respublika','DA',1177),(4221,'Ingushskaya Respublika','IN',1177),(4222,'Kabardino-Balkarskaya','KB',1177),(4223,'Kalmykiya, Respublika','KL',1177),(4224,'Karachayevo-Cherkesskaya Respublika','KC',1177),(4225,'Kareliya, Respublika','KR',1177),(4226,'Khakasiya, Respublika','KK',1177),(4227,'Komi, Respublika','KO',1177),(4228,'Mariy El, Respublika','ME',1177),(4229,'Mordoviya, Respublika','MO',1177),(4230,'Sakha, Respublika [Yakutiya]','SA',1177),(4231,'Severnaya Osetiya, Respublika','SE',1177),(4232,'Tatarstan, Respublika','TA',1177),(4233,'Tyva, Respublika [Tuva]','TY',1177),(4234,'Udmurtskaya Respublika','UD',1177),(4235,'Altayskiy kray','ALT',1177),(4236,'Khabarovskiy kray','KHA',1177),(4237,'Krasnodarskiy kray','KDA',1177),(4238,'Krasnoyarskiy kray','KYA',1177),(4239,'Primorskiy kray','PRI',1177),(4240,'Stavropol\'skiy kray','STA',1177),(4241,'Amurskaya oblast\'','AMU',1177),(4242,'Arkhangel\'skaya oblast\'','ARK',1177),(4243,'Astrakhanskaya oblast\'','AST',1177),(4244,'Belgorodskaya oblast\'','BEL',1177),(4245,'Bryanskaya oblast\'','BRY',1177),(4246,'Chelyabinskaya oblast\'','CHE',1177),(4247,'Zabaykalsky Krai\'','ZSK',1177),(4248,'Irkutskaya oblast\'','IRK',1177),(4249,'Ivanovskaya oblast\'','IVA',1177),(4250,'Kaliningradskaya oblast\'','KGD',1177),(4251,'Kaluzhskaya oblast\'','KLU',1177),(4252,'Kamchatka Krai\'','KAM',1177),(4253,'Kemerovskaya oblast\'','KEM',1177),(4254,'Kirovskaya oblast\'','KIR',1177),(4255,'Kostromskaya oblast\'','KOS',1177),(4256,'Kurganskaya oblast\'','KGN',1177),(4257,'Kurskaya oblast\'','KRS',1177),(4258,'Leningradskaya oblast\'','LEN',1177),(4259,'Lipetskaya oblast\'','LIP',1177),(4260,'Magadanskaya oblast\'','MAG',1177),(4261,'Moskovskaya oblast\'','MOS',1177),(4262,'Murmanskaya oblast\'','MUR',1177),(4263,'Nizhegorodskaya oblast\'','NIZ',1177),(4264,'Novgorodskaya oblast\'','NGR',1177),(4265,'Novosibirskaya oblast\'','NVS',1177),(4266,'Omskaya oblast\'','OMS',1177),(4267,'Orenburgskaya oblast\'','ORE',1177),(4268,'Orlovskaya oblast\'','ORL',1177),(4269,'Penzenskaya oblast\'','PNZ',1177),(4270,'Perm krai\'','PEK',1177),(4271,'Pskovskaya oblast\'','PSK',1177),(4272,'Rostovskaya oblast\'','ROS',1177),(4273,'Ryazanskaya oblast\'','RYA',1177),(4274,'Sakhalinskaya oblast\'','SAK',1177),(4275,'Samarskaya oblast\'','SAM',1177),(4276,'Saratovskaya oblast\'','SAR',1177),(4277,'Smolenskaya oblast\'','SMO',1177),(4278,'Sverdlovskaya oblast\'','SVE',1177),(4279,'Tambovskaya oblast\'','TAM',1177),(4280,'Tomskaya oblast\'','TOM',1177),(4281,'Tul\'skaya oblast\'','TUL',1177),(4282,'Tverskaya oblast\'','TVE',1177),(4283,'Tyumenskaya oblast\'','TYU',1177),(4284,'Ul\'yanovskaya oblast\'','ULY',1177),(4285,'Vladimirskaya oblast\'','VLA',1177),(4286,'Volgogradskaya oblast\'','VGG',1177),(4287,'Vologodskaya oblast\'','VLG',1177),(4288,'Voronezhskaya oblast\'','VOR',1177),(4289,'Yaroslavskaya oblast\'','YAR',1177),(4290,'Moskva','MOW',1177),(4291,'Sankt-Peterburg','SPE',1177),(4292,'Yevreyskaya avtonomnaya oblast\'','YEV',1177),(4294,'Chukotskiy avtonomnyy okrug','CHU',1177),(4296,'Khanty-Mansiyskiy avtonomnyy okrug','KHM',1177),(4299,'Nenetskiy avtonomnyy okrug','NEN',1177),(4302,'Yamalo-Nenetskiy avtonomnyy okrug','YAN',1177),(4303,'Butare','C',1178),(4304,'Byumba','I',1178),(4305,'Cyangugu','E',1178),(4306,'Gikongoro','D',1178),(4307,'Gisenyi','G',1178),(4308,'Gitarama','B',1178),(4309,'Kibungo','J',1178),(4310,'Kibuye','F',1178),(4311,'Kigali-Rural Kigali y\' Icyaro','K',1178),(4312,'Kigali-Ville Kigali Ngari','L',1178),(4313,'Mutara','M',1178),(4314,'Ruhengeri','H',1178),(4315,'Al Bahah','11',1187),(4316,'Al Hudud Ash Shamaliyah','08',1187),(4317,'Al Jawf','12',1187),(4318,'Al Madinah','03',1187),(4319,'Al Qasim','05',1187),(4320,'Ar Riyad','01',1187),(4321,'Asir','14',1187),(4322,'Ha\'il','06',1187),(4323,'Jlzan','09',1187),(4324,'Makkah','02',1187),(4325,'Najran','10',1187),(4326,'Tabuk','07',1187),(4327,'Capital Territory (Honiara)','CT',1194),(4328,'Guadalcanal','GU',1194),(4329,'Isabel','IS',1194),(4330,'Makira','MK',1194),(4331,'Malaita','ML',1194),(4332,'Temotu','TE',1194),(4333,'A\'ali an Nil','23',1200),(4334,'Al Bah al Ahmar','26',1200),(4335,'Al Buhayrat','18',1200),(4336,'Al Jazirah','07',1200),(4337,'Al Khartum','03',1200),(4338,'Al Qadarif','06',1200),(4339,'Al Wahdah','22',1200),(4340,'An Nil','04',1200),(4341,'An Nil al Abyaq','08',1200),(4342,'An Nil al Azraq','24',1200),(4343,'Ash Shamallyah','01',1200),(4344,'Bahr al Jabal','17',1200),(4345,'Gharb al Istiwa\'iyah','16',1200),(4346,'Gharb Ba~r al Ghazal','14',1200),(4347,'Gharb Darfur','12',1200),(4348,'Gharb Kurdufan','10',1200),(4349,'Janub Darfur','11',1200),(4350,'Janub Rurdufan','13',1200),(4351,'Jnqall','20',1200),(4352,'Kassala','05',1200),(4353,'Shamal Batr al Ghazal','15',1200),(4354,'Shamal Darfur','02',1200),(4355,'Shamal Kurdufan','09',1200),(4356,'Sharq al Istiwa\'iyah','19',1200),(4357,'Sinnar','25',1200),(4358,'Warab','21',1200),(4359,'Blekinge län','K',1204),(4360,'Dalarnas län','W',1204),(4361,'Gotlands län','I',1204),(4362,'Gävleborgs län','X',1204),(4363,'Hallands län','N',1204),(4364,'Jämtlands län','Z',1204),(4365,'Jönkopings län','F',1204),(4366,'Kalmar län','H',1204),(4367,'Kronobergs län','G',1204),(4368,'Norrbottens län','BD',1204),(4369,'SkÃ¥ne län','M',1204),(4370,'Stockholms län','AB',1204),(4371,'Södermanlands län','D',1204),(4372,'Uppsala län','C',1204),(4373,'Värmlands län','S',1204),(4374,'Västerbottens län','AC',1204),(4375,'Västernorrlands län','Y',1204),(4376,'Västmanlands län','U',1204),(4377,'Västra Götalands län','Q',1204),(4378,'Örebro län','T',1204),(4379,'Östergötlands län','E',1204),(4380,'Saint Helena','SH',1180),(4381,'Ascension','AC',1180),(4382,'Tristan da Cunha','TA',1180),(4383,'AjdovÅ¡Äina','001',1193),(4384,'Beltinci','002',1193),(4385,'Benedikt','148',1193),(4386,'Bistrica ob Sotli','149',1193),(4387,'Bled','003',1193),(4388,'Bloke','150',1193),(4389,'Bohinj','004',1193),(4390,'Borovnica','005',1193),(4391,'Bovec','006',1193),(4392,'BraslovÄe','151',1193),(4393,'Brda','007',1193),(4394,'Brezovica','008',1193),(4395,'Brežice','009',1193),(4396,'Cankova','152',1193),(4397,'Celje','011',1193),(4398,'Cerklje na Gorenjskem','012',1193),(4399,'Cerknica','013',1193),(4400,'Cerkno','014',1193),(4401,'Cerkvenjak','153',1193),(4402,'ÄŒrenÅ¡ovci','015',1193),(4403,'ÄŒrna na KoroÅ¡kem','016',1193),(4404,'ÄŒrnomelj','017',1193),(4405,'Destrnik','018',1193),(4406,'DivaÄa','019',1193),(4407,'Dobje','154',1193),(4408,'Dobrepolje','020',1193),(4409,'Dobrna','155',1193),(4410,'Dobrova-Polhov Gradec','021',1193),(4411,'Dobrovnik','156',1193),(4412,'Dol pri Ljubljani','022',1193),(4413,'Dolenjske Toplice','157',1193),(4414,'Domžale','023',1193),(4415,'Dornava','024',1193),(4416,'Dravograd','025',1193),(4417,'Duplek','026',1193),(4418,'Gorenja vas-Poljane','027',1193),(4419,'GoriÅ¡nica','028',1193),(4420,'Gornja Radgona','029',1193),(4421,'Gornji Grad','030',1193),(4422,'Gornji Petrovci','031',1193),(4423,'Grad','158',1193),(4424,'Grosuplje','032',1193),(4425,'Hajdina','159',1193),(4426,'HoÄe-Slivnica','160',1193),(4427,'HodoÅ¡','161',1193),(4428,'Horjul','162',1193),(4429,'Hrastnik','034',1193),(4430,'Hrpelje-Kozina','035',1193),(4431,'Idrija','036',1193),(4432,'Ig','037',1193),(4433,'Ilirska Bistrica','038',1193),(4434,'IvanÄna Gorica','039',1193),(4435,'Izola','040',1193),(4436,'Jesenice','041',1193),(4437,'Jezersko','163',1193),(4438,'JurÅ¡inci','042',1193),(4439,'Kamnik','043',1193),(4440,'Kanal','044',1193),(4441,'KidriÄevo','045',1193),(4442,'Kobarid','046',1193),(4443,'Kobilje','047',1193),(4444,'KoÄevje','048',1193),(4445,'Komen','049',1193),(4446,'Komenda','164',1193),(4447,'Koper','050',1193),(4448,'Kostel','165',1193),(4449,'Kozje','051',1193),(4450,'Kranj','052',1193),(4451,'Kranjska Gora','053',1193),(4452,'Križevci','166',1193),(4453,'KrÅ¡ko','054',1193),(4454,'Kungota','055',1193),(4455,'Kuzma','056',1193),(4456,'LaÅ¡ko','057',1193),(4457,'Lenart','058',1193),(4458,'Lendava','059',1193),(4459,'Litija','060',1193),(4460,'Ljubljana','061',1193),(4461,'Ljubno','062',1193),(4462,'Ljutomer','063',1193),(4463,'Logatec','064',1193),(4464,'LoÅ¡ka dolina','065',1193),(4465,'LoÅ¡ki Potok','066',1193),(4466,'Lovrenc na Pohorju','167',1193),(4467,'LuÄe','067',1193),(4468,'Lukovica','068',1193),(4469,'MajÅ¡perk','069',1193),(4470,'Maribor','070',1193),(4471,'Markovci','168',1193),(4472,'Medvode','071',1193),(4473,'MengeÅ¡','072',1193),(4474,'Metlika','073',1193),(4475,'Mežica','074',1193),(4476,'Miklavž na Dravskem polju','169',1193),(4477,'Miren-Kostanjevica','075',1193),(4478,'Mirna PeÄ','170',1193),(4479,'Mislinja','076',1193),(4480,'MoravÄe','077',1193),(4481,'Moravske Toplice','078',1193),(4482,'Mozirje','079',1193),(4483,'Murska Sobota','080',1193),(4484,'Muta','081',1193),(4485,'Naklo','082',1193),(4486,'Nazarje','083',1193),(4487,'Nova Gorica','084',1193),(4488,'Novo mesto','085',1193),(4489,'Sveta Ana','181',1193),(4490,'Sveti Andraž v Slovenskih goricah','182',1193),(4491,'Sveti Jurij','116',1193),(4492,'Å alovci','033',1193),(4493,'Å empeter-Vrtojba','183',1193),(4494,'Å enÄur','117',1193),(4495,'Å entilj','118',1193),(4496,'Å entjernej','119',1193),(4497,'Å entjur','120',1193),(4498,'Å kocjan','121',1193),(4499,'Å kofja Loka','122',1193),(4500,'Å kofljica','123',1193),(4501,'Å marje pri JelÅ¡ah','124',1193),(4502,'Å martno ob Paki','125',1193),(4503,'Å martno pri Litiji','194',1193),(4504,'Å oÅ¡tanj','126',1193),(4505,'Å tore','127',1193),(4506,'Tabor','184',1193),(4507,'TiÅ¡ina','010',1193),(4508,'Tolmin','128',1193),(4509,'Trbovlje','129',1193),(4510,'Trebnje','130',1193),(4511,'Trnovska vas','185',1193),(4512,'TržiÄ','131',1193),(4513,'Trzin','186',1193),(4514,'TurniÅ¡Äe','132',1193),(4515,'Velenje','133',1193),(4516,'Velika Polana','187',1193),(4517,'Velike LaÅ¡Äe','134',1193),(4518,'Veržej','188',1193),(4519,'Videm','135',1193),(4520,'Vipava','136',1193),(4521,'Vitanje','137',1193),(4522,'Vojnik','138',1193),(4523,'Vransko','189',1193),(4524,'Vrhnika','140',1193),(4525,'Vuzenica','141',1193),(4526,'Zagorje ob Savi','142',1193),(4527,'ZavrÄ','143',1193),(4528,'ZreÄe','144',1193),(4529,'Žalec','190',1193),(4530,'Železniki','146',1193),(4531,'Žetale','191',1193),(4532,'Žiri','147',1193),(4533,'Žirovnica','192',1193),(4534,'Žužemberk','193',1193),(4535,'Banskobystrický kraj','BC',1192),(4536,'Bratislavský kraj','BL',1192),(4537,'KoÅ¡ický kraj','KI',1192),(4538,'Nitriansky kraj','NJ',1192),(4539,'PreÅ¡ovský kraj','PV',1192),(4540,'TrenÄiansky kraj','TC',1192),(4541,'Trnavský kraj','TA',1192),(4542,'Žilinský kraj','ZI',1192),(4543,'Western Area (Freetown)','W',1190),(4544,'Dakar','DK',1188),(4545,'Diourbel','DB',1188),(4546,'Fatick','FK',1188),(4547,'Kaolack','KL',1188),(4548,'Kolda','KD',1188),(4549,'Louga','LG',1188),(4550,'Matam','MT',1188),(4551,'Saint-Louis','SL',1188),(4552,'Tambacounda','TC',1188),(4553,'Thies','TH',1188),(4554,'Ziguinchor','ZG',1188),(4555,'Awdal','AW',1195),(4556,'Bakool','BK',1195),(4557,'Banaadir','BN',1195),(4558,'Bay','BY',1195),(4559,'Galguduud','GA',1195),(4560,'Gedo','GE',1195),(4561,'Hiirsan','HI',1195),(4562,'Jubbada Dhexe','JD',1195),(4563,'Jubbada Hoose','JH',1195),(4564,'Mudug','MU',1195),(4565,'Nugaal','NU',1195),(4566,'Saneag','SA',1195),(4567,'Shabeellaha Dhexe','SD',1195),(4568,'Shabeellaha Hoose','SH',1195),(4569,'Sool','SO',1195),(4570,'Togdheer','TO',1195),(4571,'Woqooyi Galbeed','WO',1195),(4572,'Brokopondo','BR',1201),(4573,'Commewijne','CM',1201),(4574,'Coronie','CR',1201),(4575,'Marowijne','MA',1201),(4576,'Nickerie','NI',1201),(4577,'Paramaribo','PM',1201),(4578,'Saramacca','SA',1201),(4579,'Sipaliwini','SI',1201),(4580,'Wanica','WA',1201),(4581,'Principe','P',1207),(4582,'Sao Tome','S',1207),(4583,'Ahuachapan','AH',1066),(4584,'Cabanas','CA',1066),(4585,'Cuscatlan','CU',1066),(4586,'Chalatenango','CH',1066),(4587,'Morazan','MO',1066),(4588,'San Miguel','SM',1066),(4589,'San Salvador','SS',1066),(4590,'Santa Ana','SA',1066),(4591,'San Vicente','SV',1066),(4592,'Sonsonate','SO',1066),(4593,'Usulutan','US',1066),(4594,'Al Hasakah','HA',1206),(4595,'Al Ladhiqiyah','LA',1206),(4596,'Al Qunaytirah','QU',1206),(4597,'Ar Raqqah','RA',1206),(4598,'As Suwayda\'','SU',1206),(4599,'Dar\'a','DR',1206),(4600,'Dayr az Zawr','DY',1206),(4601,'Dimashq','DI',1206),(4602,'Halab','HL',1206),(4603,'Hamah','HM',1206),(4604,'Jim\'','HI',1206),(4605,'Idlib','ID',1206),(4606,'Rif Dimashq','RD',1206),(4607,'Tarts','TA',1206),(4608,'Hhohho','HH',1203),(4609,'Lubombo','LU',1203),(4610,'Manzini','MA',1203),(4611,'Shiselweni','SH',1203),(4612,'Batha','BA',1043),(4613,'Biltine','BI',1043),(4614,'Borkou-Ennedi-Tibesti','BET',1043),(4615,'Chari-Baguirmi','CB',1043),(4616,'Guera','GR',1043),(4617,'Kanem','KA',1043),(4618,'Lac','LC',1043),(4619,'Logone-Occidental','LO',1043),(4620,'Logone-Oriental','LR',1043),(4621,'Mayo-Kebbi','MK',1043),(4622,'Moyen-Chari','MC',1043),(4623,'Ouaddai','OD',1043),(4624,'Salamat','SA',1043),(4625,'Tandjile','TA',1043),(4626,'Kara','K',1214),(4627,'Maritime (Region)','M',1214),(4628,'Savannes','S',1214),(4629,'Krung Thep Maha Nakhon Bangkok','10',1211),(4630,'Phatthaya','S',1211),(4631,'Amnat Charoen','37',1211),(4632,'Ang Thong','15',1211),(4633,'Buri Ram','31',1211),(4634,'Chachoengsao','24',1211),(4635,'Chai Nat','18',1211),(4636,'Chaiyaphum','36',1211),(4637,'Chanthaburi','22',1211),(4638,'Chiang Mai','50',1211),(4639,'Chiang Rai','57',1211),(4640,'Chon Buri','20',1211),(4641,'Chumphon','86',1211),(4642,'Kalasin','46',1211),(4643,'Kamphasng Phet','62',1211),(4644,'Kanchanaburi','71',1211),(4645,'Khon Kaen','40',1211),(4646,'Krabi','81',1211),(4647,'Lampang','52',1211),(4648,'Lamphun','51',1211),(4649,'Loei','42',1211),(4650,'Lop Buri','16',1211),(4651,'Mae Hong Son','58',1211),(4652,'Maha Sarakham','44',1211),(4653,'Mukdahan','49',1211),(4654,'Nakhon Nayok','26',1211),(4655,'Nakhon Pathom','73',1211),(4656,'Nakhon Phanom','48',1211),(4657,'Nakhon Ratchasima','30',1211),(4658,'Nakhon Sawan','60',1211),(4659,'Nakhon Si Thammarat','80',1211),(4660,'Nan','55',1211),(4661,'Narathiwat','96',1211),(4662,'Nong Bua Lam Phu','39',1211),(4663,'Nong Khai','43',1211),(4664,'Nonthaburi','12',1211),(4665,'Pathum Thani','13',1211),(4666,'Pattani','94',1211),(4667,'Phangnga','82',1211),(4668,'Phatthalung','93',1211),(4669,'Phayao','56',1211),(4670,'Phetchabun','67',1211),(4671,'Phetchaburi','76',1211),(4672,'Phichit','66',1211),(4673,'Phitsanulok','65',1211),(4674,'Phrae','54',1211),(4675,'Phra Nakhon Si Ayutthaya','14',1211),(4676,'Phuket','83',1211),(4677,'Prachin Buri','25',1211),(4678,'Prachuap Khiri Khan','77',1211),(4679,'Ranong','85',1211),(4680,'Ratchaburi','70',1211),(4681,'Rayong','21',1211),(4682,'Roi Et','45',1211),(4683,'Sa Kaeo','27',1211),(4684,'Sakon Nakhon','47',1211),(4685,'Samut Prakan','11',1211),(4686,'Samut Sakhon','74',1211),(4687,'Samut Songkhram','75',1211),(4688,'Saraburi','19',1211),(4689,'Satun','91',1211),(4690,'Sing Buri','17',1211),(4691,'Si Sa Ket','33',1211),(4692,'Songkhla','90',1211),(4693,'Sukhothai','64',1211),(4694,'Suphan Buri','72',1211),(4695,'Surat Thani','84',1211),(4696,'Surin','32',1211),(4697,'Tak','63',1211),(4698,'Trang','92',1211),(4699,'Trat','23',1211),(4700,'Ubon Ratchathani','34',1211),(4701,'Udon Thani','41',1211),(4702,'Uthai Thani','61',1211),(4703,'Uttaradit','53',1211),(4704,'Yala','95',1211),(4705,'Yasothon','35',1211),(4706,'Sughd','SU',1209),(4707,'Khatlon','KT',1209),(4708,'Gorno-Badakhshan','GB',1209),(4709,'Ahal','A',1220),(4710,'Balkan','B',1220),(4711,'Dasoguz','D',1220),(4712,'Lebap','L',1220),(4713,'Mary','M',1220),(4714,'Béja','31',1218),(4715,'Ben Arous','13',1218),(4716,'Bizerte','23',1218),(4717,'Gabès','81',1218),(4718,'Gafsa','71',1218),(4719,'Jendouba','32',1218),(4720,'Kairouan','41',1218),(4721,'Rasserine','42',1218),(4722,'Kebili','73',1218),(4723,'L\'Ariana','12',1218),(4724,'Le Ref','33',1218),(4725,'Mahdia','53',1218),(4726,'La Manouba','14',1218),(4727,'Medenine','82',1218),(4728,'Moneatir','52',1218),(4729,'Naboul','21',1218),(4730,'Sfax','61',1218),(4731,'Sidi Bouxid','43',1218),(4732,'Siliana','34',1218),(4733,'Sousse','51',1218),(4734,'Tataouine','83',1218),(4735,'Tozeur','72',1218),(4736,'Tunis','11',1218),(4737,'Zaghouan','22',1218),(4738,'Adana','01',1219),(4739,'Ad yaman','02',1219),(4740,'Afyon','03',1219),(4741,'Ag r','04',1219),(4742,'Aksaray','68',1219),(4743,'Amasya','05',1219),(4744,'Ankara','06',1219),(4745,'Antalya','07',1219),(4746,'Ardahan','75',1219),(4747,'Artvin','08',1219),(4748,'Aydin','09',1219),(4749,'Bal kesir','10',1219),(4750,'Bartin','74',1219),(4751,'Batman','72',1219),(4752,'Bayburt','69',1219),(4753,'Bilecik','11',1219),(4754,'Bingol','12',1219),(4755,'Bitlis','13',1219),(4756,'Bolu','14',1219),(4757,'Burdur','15',1219),(4758,'Bursa','16',1219),(4759,'Canakkale','17',1219),(4760,'Cankir','18',1219),(4761,'Corum','19',1219),(4762,'Denizli','20',1219),(4763,'Diyarbakir','21',1219),(4764,'Duzce','81',1219),(4765,'Edirne','22',1219),(4766,'Elazig','23',1219),(4767,'Erzincan','24',1219),(4768,'Erzurum','25',1219),(4769,'Eskis\'ehir','26',1219),(4770,'Gaziantep','27',1219),(4771,'Giresun','28',1219),(4772,'Gms\'hane','29',1219),(4773,'Hakkari','30',1219),(4774,'Hatay','31',1219),(4775,'Igidir','76',1219),(4776,'Isparta','32',1219),(4777,'Icel','33',1219),(4778,'Istanbul','34',1219),(4779,'Izmir','35',1219),(4780,'Kahramanmaras','46',1219),(4781,'Karabk','78',1219),(4782,'Karaman','70',1219),(4783,'Kars','36',1219),(4784,'Kastamonu','37',1219),(4785,'Kayseri','38',1219),(4786,'Kirikkale','71',1219),(4787,'Kirklareli','39',1219),(4788,'Kirs\'ehir','40',1219),(4789,'Kilis','79',1219),(4790,'Kocaeli','41',1219),(4791,'Konya','42',1219),(4792,'Ktahya','43',1219),(4793,'Malatya','44',1219),(4794,'Manisa','45',1219),(4795,'Mardin','47',1219),(4796,'Mugila','48',1219),(4797,'Mus','49',1219),(4798,'Nevs\'ehir','50',1219),(4799,'Nigide','51',1219),(4800,'Ordu','52',1219),(4801,'Osmaniye','80',1219),(4802,'Rize','53',1219),(4803,'Sakarya','54',1219),(4804,'Samsun','55',1219),(4805,'Siirt','56',1219),(4806,'Sinop','57',1219),(4807,'Sivas','58',1219),(4808,'S\'anliurfa','63',1219),(4809,'S\'rnak','73',1219),(4810,'Tekirdag','59',1219),(4811,'Tokat','60',1219),(4812,'Trabzon','61',1219),(4813,'Tunceli','62',1219),(4814,'Us\'ak','64',1219),(4815,'Van','65',1219),(4816,'Yalova','77',1219),(4817,'Yozgat','66',1219),(4818,'Zonguldak','67',1219),(4819,'Couva-Tabaquite-Talparo','CTT',1217),(4820,'Diego Martin','DMN',1217),(4821,'Eastern Tobago','ETO',1217),(4822,'Penal-Debe','PED',1217),(4823,'Princes Town','PRT',1217),(4824,'Rio Claro-Mayaro','RCM',1217),(4825,'Sangre Grande','SGE',1217),(4826,'San Juan-Laventille','SJL',1217),(4827,'Siparia','SIP',1217),(4828,'Tunapuna-Piarco','TUP',1217),(4829,'Western Tobago','WTO',1217),(4830,'Arima','ARI',1217),(4831,'Chaguanas','CHA',1217),(4832,'Point Fortin','PTF',1217),(4833,'Port of Spain','POS',1217),(4834,'San Fernando','SFO',1217),(4835,'Aileu','AL',1063),(4836,'Ainaro','AN',1063),(4837,'Bacucau','BA',1063),(4838,'Bobonaro','BO',1063),(4839,'Cova Lima','CO',1063),(4840,'Dili','DI',1063),(4841,'Ermera','ER',1063),(4842,'Laulem','LA',1063),(4843,'Liquica','LI',1063),(4844,'Manatuto','MT',1063),(4845,'Manafahi','MF',1063),(4846,'Oecussi','OE',1063),(4847,'Viqueque','VI',1063),(4848,'Changhua County','CHA',1208),(4849,'Chiayi County','CYQ',1208),(4850,'Hsinchu County','HSQ',1208),(4851,'Hualien County','HUA',1208),(4852,'Ilan County','ILA',1208),(4853,'Kaohsiung County','KHQ',1208),(4854,'Miaoli County','MIA',1208),(4855,'Nantou County','NAN',1208),(4856,'Penghu County','PEN',1208),(4857,'Pingtung County','PIF',1208),(4858,'Taichung County','TXQ',1208),(4859,'Tainan County','TNQ',1208),(4860,'Taipei County','TPQ',1208),(4861,'Taitung County','TTT',1208),(4862,'Taoyuan County','TAO',1208),(4863,'Yunlin County','YUN',1208),(4864,'Keelung City','KEE',1208),(4865,'Arusha','01',1210),(4866,'Dar-es-Salaam','02',1210),(4867,'Dodoma','03',1210),(4868,'Iringa','04',1210),(4869,'Kagera','05',1210),(4870,'Kaskazini Pemba','06',1210),(4871,'Kaskazini Unguja','07',1210),(4872,'Xigoma','08',1210),(4873,'Kilimanjaro','09',1210),(4874,'Rusini Pemba','10',1210),(4875,'Kusini Unguja','11',1210),(4876,'Lindi','12',1210),(4877,'Manyara','26',1210),(4878,'Mara','13',1210),(4879,'Mbeya','14',1210),(4880,'Mjini Magharibi','15',1210),(4881,'Morogoro','16',1210),(4882,'Mtwara','17',1210),(4883,'Pwani','19',1210),(4884,'Rukwa','20',1210),(4885,'Ruvuma','21',1210),(4886,'Shinyanga','22',1210),(4887,'Singida','23',1210),(4888,'Tabora','24',1210),(4889,'Tanga','25',1210),(4890,'Cherkas\'ka Oblast\'','71',1224),(4891,'Chernihivs\'ka Oblast\'','74',1224),(4892,'Chernivets\'ka Oblast\'','77',1224),(4893,'Dnipropetrovs\'ka Oblast\'','12',1224),(4894,'Donets\'ka Oblast\'','14',1224),(4895,'Ivano-Frankivs\'ka Oblast\'','26',1224),(4896,'Kharkivs\'ka Oblast\'','63',1224),(4897,'Khersons\'ka Oblast\'','65',1224),(4898,'Khmel\'nyts\'ka Oblast\'','68',1224),(4899,'Kirovohrads\'ka Oblast\'','35',1224),(4900,'Kyivs\'ka Oblast\'','32',1224),(4901,'Luhans\'ka Oblast\'','09',1224),(4902,'L\'vivs\'ka Oblast\'','46',1224),(4903,'Mykolaivs\'ka Oblast\'','48',1224),(4904,'Odes \'ka Oblast\'','51',1224),(4905,'Poltavs\'ka Oblast\'','53',1224),(4906,'Rivnens\'ka Oblast\'','56',1224),(4907,'Sums \'ka Oblast\'','59',1224),(4908,'Ternopil\'s\'ka Oblast\'','61',1224),(4909,'Vinnyts\'ka Oblast\'','05',1224),(4910,'Volyos\'ka Oblast\'','07',1224),(4911,'Zakarpats\'ka Oblast\'','21',1224),(4912,'Zaporiz\'ka Oblast\'','23',1224),(4913,'Zhytomyrs\'ka Oblast\'','18',1224),(4914,'Respublika Krym','43',1224),(4915,'Kyiv','30',1224),(4916,'Sevastopol','40',1224),(4917,'Adjumani','301',1223),(4918,'Apac','302',1223),(4919,'Arua','303',1223),(4920,'Bugiri','201',1223),(4921,'Bundibugyo','401',1223),(4922,'Bushenyi','402',1223),(4923,'Busia','202',1223),(4924,'Gulu','304',1223),(4925,'Hoima','403',1223),(4926,'Iganga','203',1223),(4927,'Jinja','204',1223),(4928,'Kabale','404',1223),(4929,'Kabarole','405',1223),(4930,'Kaberamaido','213',1223),(4931,'Kalangala','101',1223),(4932,'Kampala','102',1223),(4933,'Kamuli','205',1223),(4934,'Kamwenge','413',1223),(4935,'Kanungu','414',1223),(4936,'Kapchorwa','206',1223),(4937,'Kasese','406',1223),(4938,'Katakwi','207',1223),(4939,'Kayunga','112',1223),(4940,'Kibaale','407',1223),(4941,'Kiboga','103',1223),(4942,'Kisoro','408',1223),(4943,'Kitgum','305',1223),(4944,'Kotido','306',1223),(4945,'Kumi','208',1223),(4946,'Kyenjojo','415',1223),(4947,'Lira','307',1223),(4948,'Luwero','104',1223),(4949,'Masaka','105',1223),(4950,'Masindi','409',1223),(4951,'Mayuge','214',1223),(4952,'Mbale','209',1223),(4953,'Mbarara','410',1223),(4954,'Moroto','308',1223),(4955,'Moyo','309',1223),(4956,'Mpigi','106',1223),(4957,'Mubende','107',1223),(4958,'Mukono','108',1223),(4959,'Nakapiripirit','311',1223),(4960,'Nakasongola','109',1223),(4961,'Nebbi','310',1223),(4962,'Ntungamo','411',1223),(4963,'Pader','312',1223),(4964,'Pallisa','210',1223),(4965,'Rakai','110',1223),(4966,'Rukungiri','412',1223),(4967,'Sembabule','111',1223),(4968,'Sironko','215',1223),(4969,'Soroti','211',1223),(4970,'Tororo','212',1223),(4971,'Wakiso','113',1223),(4972,'Yumbe','313',1223),(4973,'Baker Island','81',1227),(4974,'Howland Island','84',1227),(4975,'Jarvis Island','86',1227),(4976,'Johnston Atoll','67',1227),(4977,'Kingman Reef','89',1227),(4978,'Midway Islands','71',1227),(4979,'Navassa Island','76',1227),(4980,'Palmyra Atoll','95',1227),(4981,'Wake Island','79',1227),(4982,'Artigsa','AR',1229),(4983,'Canelones','CA',1229),(4984,'Cerro Largo','CL',1229),(4985,'Colonia','CO',1229),(4986,'Durazno','DU',1229),(4987,'Flores','FS',1229),(4988,'Lavalleja','LA',1229),(4989,'Maldonado','MA',1229),(4990,'Montevideo','MO',1229),(4991,'Paysandu','PA',1229),(4992,'Rivera','RV',1229),(4993,'Rocha','RO',1229),(4994,'Salto','SA',1229),(4995,'Soriano','SO',1229),(4996,'Tacuarembo','TA',1229),(4997,'Treinta y Tres','TT',1229),(4998,'Toshkent (city)','TK',1230),(4999,'Qoraqalpogiston Respublikasi','QR',1230),(5000,'Andijon','AN',1230),(5001,'Buxoro','BU',1230),(5002,'Farg\'ona','FA',1230),(5003,'Jizzax','JI',1230),(5004,'Khorazm','KH',1230),(5005,'Namangan','NG',1230),(5006,'Navoiy','NW',1230),(5007,'Qashqadaryo','QA',1230),(5008,'Samarqand','SA',1230),(5009,'Sirdaryo','SI',1230),(5010,'Surxondaryo','SU',1230),(5011,'Toshkent','TO',1230),(5012,'Xorazm','XO',1230),(5013,'Distrito Federal','A',1232),(5014,'Anzoategui','B',1232),(5015,'Apure','C',1232),(5016,'Aragua','D',1232),(5017,'Barinas','E',1232),(5018,'Carabobo','G',1232),(5019,'Cojedes','H',1232),(5020,'Falcon','I',1232),(5021,'Guarico','J',1232),(5022,'Lara','K',1232),(5023,'Merida','L',1232),(5024,'Miranda','M',1232),(5025,'Monagas','N',1232),(5026,'Nueva Esparta','O',1232),(5027,'Portuguesa','P',1232),(5028,'Tachira','S',1232),(5029,'Trujillo','T',1232),(5030,'Vargas','X',1232),(5031,'Yaracuy','U',1232),(5032,'Zulia','V',1232),(5033,'Delta Amacuro','Y',1232),(5034,'Dependencias Federales','W',1232),(5035,'An Giang','44',1233),(5036,'Ba Ria - Vung Tau','43',1233),(5037,'Bac Can','53',1233),(5038,'Bac Giang','54',1233),(5039,'Bac Lieu','55',1233),(5040,'Bac Ninh','56',1233),(5041,'Ben Tre','50',1233),(5042,'Binh Dinh','31',1233),(5043,'Binh Duong','57',1233),(5044,'Binh Phuoc','58',1233),(5045,'Binh Thuan','40',1233),(5046,'Ca Mau','59',1233),(5047,'Can Tho','48',1233),(5048,'Cao Bang','04',1233),(5049,'Da Nang, thanh pho','60',1233),(5050,'Dong Nai','39',1233),(5051,'Dong Thap','45',1233),(5052,'Gia Lai','30',1233),(5053,'Ha Giang','03',1233),(5054,'Ha Nam','63',1233),(5055,'Ha Noi, thu do','64',1233),(5056,'Ha Tay','15',1233),(5057,'Ha Tinh','23',1233),(5058,'Hai Duong','61',1233),(5059,'Hai Phong, thanh pho','62',1233),(5060,'Hoa Binh','14',1233),(5061,'Ho Chi Minh, thanh pho [Sai Gon]','65',1233),(5062,'Hung Yen','66',1233),(5063,'Khanh Hoa','34',1233),(5064,'Kien Giang','47',1233),(5065,'Kon Tum','28',1233),(5066,'Lai Chau','01',1233),(5067,'Lam Dong','35',1233),(5068,'Lang Son','09',1233),(5069,'Lao Cai','02',1233),(5070,'Long An','41',1233),(5071,'Nam Dinh','67',1233),(5072,'Nghe An','22',1233),(5073,'Ninh Binh','18',1233),(5074,'Ninh Thuan','36',1233),(5075,'Phu Tho','68',1233),(5076,'Phu Yen','32',1233),(5077,'Quang Binh','24',1233),(5078,'Quang Nam','27',1233),(5079,'Quang Ngai','29',1233),(5080,'Quang Ninh','13',1233),(5081,'Quang Tri','25',1233),(5082,'Soc Trang','52',1233),(5083,'Son La','05',1233),(5084,'Tay Ninh','37',1233),(5085,'Thai Binh','20',1233),(5086,'Thai Nguyen','69',1233),(5087,'Thanh Hoa','21',1233),(5088,'Thua Thien-Hue','26',1233),(5089,'Tien Giang','46',1233),(5090,'Tra Vinh','51',1233),(5091,'Tuyen Quang','07',1233),(5092,'Vinh Long','49',1233),(5093,'Vinh Phuc','70',1233),(5094,'Yen Bai','06',1233),(5095,'Malampa','MAP',1231),(5096,'Penama','PAM',1231),(5097,'Sanma','SAM',1231),(5098,'Shefa','SEE',1231),(5099,'Tafea','TAE',1231),(5100,'Torba','TOB',1231),(5101,'A\'ana','AA',1185),(5102,'Aiga-i-le-Tai','AL',1185),(5103,'Atua','AT',1185),(5104,'Fa\'aaaleleaga','FA',1185),(5105,'Gaga\'emauga','GE',1185),(5106,'Gagaifomauga','GI',1185),(5107,'Palauli','PA',1185),(5108,'Satupa\'itea','SA',1185),(5109,'Tuamasaga','TU',1185),(5110,'Va\'a-o-Fonoti','VF',1185),(5111,'Vaisigano','VS',1185),(5112,'Crna Gora','CG',1243),(5113,'Srbija','SR',1242),(5114,'Kosovo-Metohija','KM',1242),(5115,'Vojvodina','VO',1242),(5116,'Abyan','AB',1237),(5117,'Adan','AD',1237),(5118,'Ad Dali','DA',1237),(5119,'Al Bayda\'','BA',1237),(5120,'Al Hudaydah','MU',1237),(5121,'Al Mahrah','MR',1237),(5122,'Al Mahwit','MW',1237),(5123,'Amran','AM',1237),(5124,'Dhamar','DH',1237),(5125,'Hadramawt','HD',1237),(5126,'Hajjah','HJ',1237),(5127,'Ibb','IB',1237),(5128,'Lahij','LA',1237),(5129,'Ma\'rib','MA',1237),(5130,'Sa\'dah','SD',1237),(5131,'San\'a\'','SN',1237),(5132,'Shabwah','SH',1237),(5133,'Ta\'izz','TA',1237),(5134,'Eastern Cape','EC',1196),(5135,'Free State','FS',1196),(5136,'Gauteng','GT',1196),(5137,'Kwazulu-Natal','NL',1196),(5138,'Mpumalanga','MP',1196),(5139,'Northern Cape','NC',1196),(5140,'Limpopo','NP',1196),(5141,'Western Cape','WC',1196),(5142,'Copperbelt','08',1239),(5143,'Luapula','04',1239),(5144,'Lusaka','09',1239),(5145,'North-Western','06',1239),(5146,'Bulawayo','BU',1240),(5147,'Harare','HA',1240),(5148,'Manicaland','MA',1240),(5149,'Mashonaland Central','MC',1240),(5150,'Mashonaland East','ME',1240),(5151,'Mashonaland West','MW',1240),(5152,'Masvingo','MV',1240),(5153,'Matabeleland North','MN',1240),(5154,'Matabeleland South','MS',1240),(5155,'Midlands','MI',1240),(5156,'South Karelia','SK',1075),(5157,'South Ostrobothnia','SO',1075),(5158,'Etelä-Savo','ES',1075),(5159,'Häme','HH',1075),(5160,'Itä-Uusimaa','IU',1075),(5161,'Kainuu','KA',1075),(5162,'Central Ostrobothnia','CO',1075),(5163,'Central Finland','CF',1075),(5164,'Kymenlaakso','KY',1075),(5165,'Lapland','LA',1075),(5166,'Tampere Region','TR',1075),(5167,'Ostrobothnia','OB',1075),(5168,'North Karelia','NK',1075),(5169,'Northern Ostrobothnia','NO',1075),(5170,'Northern Savo','NS',1075),(5171,'Päijät-Häme','PH',1075),(5172,'Satakunta','SK',1075),(5173,'Uusimaa','UM',1075),(5174,'South-West Finland','SW',1075),(5175,'Ã…land','AL',1075),(5176,'Limburg','LI',1152),(5177,'Central and Western','CW',1098),(5178,'Eastern','EA',1098),(5179,'Southern','SO',1098),(5180,'Wan Chai','WC',1098),(5181,'Kowloon City','KC',1098),(5182,'Kwun Tong','KU',1098),(5183,'Sham Shui Po','SS',1098),(5184,'Wong Tai Sin','WT',1098),(5185,'Yau Tsim Mong','YT',1098),(5186,'Islands','IS',1098),(5187,'Kwai Tsing','KI',1098),(5188,'North','NO',1098),(5189,'Sai Kung','SK',1098),(5190,'Sha Tin','ST',1098),(5191,'Tai Po','TP',1098),(5192,'Tsuen Wan','TW',1098),(5193,'Tuen Mun','TM',1098),(5194,'Yuen Long','YL',1098),(5195,'Manchester','MR',1108),(5196,'Al ManÄmah (Al ‘Āşimah)','13',1016),(5197,'Al JanÅ«bÄ«yah','14',1016),(5199,'Al Wusţá','16',1016),(5200,'Ash ShamÄlÄ«yah','17',1016),(5201,'Jenin','_A',1165),(5202,'Tubas','_B',1165),(5203,'Tulkarm','_C',1165),(5204,'Nablus','_D',1165),(5205,'Qalqilya','_E',1165),(5206,'Salfit','_F',1165),(5207,'Ramallah and Al-Bireh','_G',1165),(5208,'Jericho','_H',1165),(5209,'Jerusalem','_I',1165),(5210,'Bethlehem','_J',1165),(5211,'Hebron','_K',1165),(5212,'North Gaza','_L',1165),(5213,'Gaza','_M',1165),(5214,'Deir el-Balah','_N',1165),(5215,'Khan Yunis','_O',1165),(5216,'Rafah','_P',1165),(5217,'Brussels','BRU',1020),(5218,'Distrito Federal','DIF',1140),(5219,'Taichung City','TXG',1208),(5220,'Kaohsiung City','KHH',1208),(5221,'Taipei City','TPE',1208),(5222,'Chiayi City','CYI',1208),(5223,'Hsinchu City','HSZ',1208),(5224,'Tainan City','TNN',1208),(9000,'North West','NW',1196),(9986,'Tyne and Wear','TWR',1226),(9988,'Greater Manchester','GTM',1226),(9989,'Co Tyrone','TYR',1226),(9990,'West Yorkshire','WYK',1226),(9991,'South Yorkshire','SYK',1226),(9992,'Merseyside','MSY',1226),(9993,'Berkshire','BRK',1226),(9994,'West Midlands','WMD',1226),(9998,'West Glamorgan','WGM',1226),(9999,'London','LON',1226),(10000,'Carbonia-Iglesias','CI',1107),(10001,'Olbia-Tempio','OT',1107),(10002,'Medio Campidano','VS',1107),(10003,'Ogliastra','OG',1107),(10009,'Jura','39',1076),(10010,'Barletta-Andria-Trani','BT',1107),(10011,'Fermo','FM',1107),(10012,'Monza e Brianza','MB',1107),(10013,'Clwyd','CWD',1226),(10015,'South Glamorgan','SGM',1226),(10016,'Artibonite','AR',1094),(10017,'Centre','CE',1094),(10018,'Nippes','NI',1094),(10019,'Nord','ND',1094),(10020,'La Rioja','F',1010),(10021,'Andorra la Vella','07',1005),(10022,'Canillo','02',1005),(10023,'Encamp','03',1005),(10024,'Escaldes-Engordany','08',1005),(10025,'La Massana','04',1005),(10026,'Ordino','05',1005),(10027,'Sant Julia de Loria','06',1005),(10028,'Abaco Islands','AB',1212),(10029,'Andros Island','AN',1212),(10030,'Berry Islands','BR',1212),(10031,'Eleuthera','EL',1212),(10032,'Grand Bahama','GB',1212),(10033,'Rum Cay','RC',1212),(10034,'San Salvador Island','SS',1212),(10035,'Kongo central','01',1050),(10036,'Kwango','02',1050),(10037,'Kwilu','03',1050),(10038,'Mai-Ndombe','04',1050),(10039,'Kasai','05',1050),(10040,'Lulua','06',1050),(10041,'Lomami','07',1050),(10042,'Sankuru','08',1050),(10043,'Ituri','09',1050),(10044,'Haut-Uele','10',1050),(10045,'Tshopo','11',1050),(10046,'Bas-Uele','12',1050),(10047,'Nord-Ubangi','13',1050),(10048,'Mongala','14',1050),(10049,'Sud-Ubangi','15',1050),(10050,'Tshuapa','16',1050),(10051,'Haut-Lomami','17',1050),(10052,'Lualaba','18',1050),(10053,'Haut-Katanga','19',1050),(10054,'Tanganyika','20',1050),(10055,'Toledo','TO',1198),(10056,'Córdoba','CO',1198),(10057,'Metropolitan Manila','MNL',1170),(10058,'La Paz','LP',1097),(10059,'Yinchuan','YN',1045),(10060,'Shizuishan','SZ',1045),(10061,'Wuzhong','WZ',1045),(10062,'Guyuan','GY',1045),(10063,'Zhongwei','ZW',1045),(10064,'Luxembourg','L',1126),(10065,'Aizkraukles novads','002',1119),(10066,'Jaunjelgavas novads','038',1119),(10067,'Pļaviņu novads','072',1119),(10068,'Kokneses novads','046',1119),(10069,'Neretas novads','065',1119),(10070,'SkrÄ«veru novads','092',1119),(10071,'AlÅ«ksnes novads','007',1119),(10072,'Apes novads','009',1119),(10073,'Balvu novads','015',1119),(10074,'Viļakas novads','108',1119),(10075,'Baltinavas novads','014',1119),(10076,'RugÄju novads','082',1119),(10077,'Bauskas novads','016',1119),(10078,'Iecavas novads','034',1119),(10079,'RundÄles novads','083',1119),(10080,'Vecumnieku novads','105',1119),(10081,'CÄ“su novads','022',1119),(10082,'LÄ«gatnes novads','055',1119),(10083,'Amatas novads','008',1119),(10084,'Jaunpiebalgas novads','039',1119),(10085,'Priekuļu novads','075',1119),(10086,'PÄrgaujas novads','070',1119),(10087,'Raunas novads','076',1119),(10088,'Vecpiebalgas novads','104',1119),(10089,'Daugavpils novads','025',1119),(10090,'IlÅ«kstes novads','036',1119),(10091,'Dobeles novads','026',1119),(10092,'Auces novads','010',1119),(10093,'TÄ“rvetes novads','098',1119),(10094,'Gulbenes novads','033',1119),(10095,'Jelgavas novads','041',1119),(10096,'Ozolnieku novads','069',1119),(10097,'JÄ“kabpils novads','042',1119),(10098,'AknÄ«stes novads','004',1119),(10099,'ViesÄ«tes novads','107',1119),(10100,'Krustpils novads','049',1119),(10101,'Salas novads','085',1119),(10102,'KrÄslavas novads','047',1119),(10103,'Dagdas novads','024',1119),(10104,'Aglonas novads','001',1119),(10105,'KuldÄ«gas novads','050',1119),(10106,'Skrundas novads','093',1119),(10107,'Alsungas novads','006',1119),(10108,'Aizputes novads','003',1119),(10109,'Durbes novads','028',1119),(10110,'Grobiņas novads','032',1119),(10111,'PÄvilostas novads','071',1119),(10112,'Priekules novads','074',1119),(10113,'NÄ«cas novads','066',1119),(10114,'Rucavas novads','081',1119),(10115,'Vaiņodes novads','100',1119),(10116,'Limbažu novads','054',1119),(10117,'Alojas novads','005',1119),(10118,'SalacgrÄ«vas novads','086',1119),(10119,'Ludzas novads','058',1119),(10120,'KÄrsavas novads','044',1119),(10121,'Zilupes novads','110',1119),(10122,'Ciblas novads','023',1119),(10123,'Madonas novads','059',1119),(10124,'Cesvaines novads','021',1119),(10125,'LubÄnas novads','057',1119),(10126,'VarakļÄnu novads','102',1119),(10127,'Ä’rgļu novads','030',1119),(10128,'Ogres novads','067',1119),(10129,'IkÅ¡Ä·iles novads','035',1119),(10130,'Ķeguma novads','051',1119),(10131,'LielvÄrdes novads','053',1119),(10132,'Preiļu novads','073',1119),(10133,'LÄ«vÄnu novads','056',1119),(10134,'Riebiņu novads','078',1119),(10135,'VÄrkavas novads','103',1119),(10136,'RÄ“zeknes novads','077',1119),(10137,'ViļÄnu novads','109',1119),(10138,'Baldones novads','013',1119),(10139,'Ķekavas novads','052',1119),(10140,'Olaines novads','068',1119),(10141,'Salaspils novads','087',1119),(10142,'Saulkrastu novads','089',1119),(10143,'Siguldas novads','091',1119),(10144,'InÄukalna novads','037',1119),(10145,'Ä€dažu novads','011',1119),(10146,'BabÄ«tes novads','012',1119),(10147,'Carnikavas novads','020',1119),(10148,'Garkalnes novads','031',1119),(10149,'Krimuldas novads','048',1119),(10150,'MÄlpils novads','061',1119),(10151,'MÄrupes novads','062',1119),(10152,'Ropažu novads','080',1119),(10153,'SÄ“jas novads','090',1119),(10154,'Stopiņu novads','095',1119),(10155,'Saldus novads','088',1119),(10156,'BrocÄ“nu novads','018',1119),(10157,'Talsu novads','097',1119),(10158,'Dundagas novads','027',1119),(10159,'MÄ“rsraga novads','063',1119),(10160,'Rojas novads','079',1119),(10161,'Tukuma novads','099',1119),(10162,'Kandavas novads','043',1119),(10163,'Engures novads','029',1119),(10164,'Jaunpils novads','040',1119),(10165,'Valkas novads','101',1119),(10166,'Smiltenes novads','094',1119),(10167,'StrenÄu novads','096',1119),(10168,'KocÄ“nu novads','045',1119),(10169,'Mazsalacas novads','060',1119),(10170,'RÅ«jienas novads','084',1119),(10171,'BeverÄ«nas novads','017',1119),(10172,'Burtnieku novads','019',1119),(10173,'NaukÅ¡Ä“nu novads','064',1119),(10174,'Ventspils novads','106',1119),(10175,'JÄ“kabpils','JKB',1119),(10176,'Valmiera','VMR',1119),(10177,'Florida','FL',1229),(10178,'Rio Negro','RN',1229),(10179,'San Jose','SJ',1229),(10180,'Plateau','PL',1157),(10181,'Pieria','61',1085),(10182,'Los Rios','LR',1044),(10183,'Arica y Parinacota','AP',1044),(10184,'Amazonas','AMA',1169),(10185,'Kalimantan Tengah','KT',1102),(10186,'Sulawesi Barat','SR',1102),(10187,'Kalimantan Utara','KU',1102),(10188,'Ankaran','86',1193),(10189,'ApaÄe','87',1193),(10190,'Cirkulane','88',1193),(10191,'Gorje','89',1193),(10192,'Kostanjevica na Krki','90',1193),(10193,'Log-Dragomer','91',1193),(10194,'Makole','92',1193),(10195,'Mirna','93',1193),(10196,'Mokronog-Trebelno','94',1193),(10197,'Odranci','95',1193),(10198,'Oplotnica','96',1193),(10199,'Ormož','97',1193),(10200,'Osilnica','98',1193),(10201,'Pesnica','99',1193),(10202,'Piran','100',1193),(10203,'Pivka','101',1193),(10204,'PodÄetrtek','102',1193),(10205,'Podlehnik','103',1193),(10206,'Podvelka','104',1193),(10207,'PoljÄane','105',1193),(10208,'Polzela','106',1193),(10209,'Postojna','107',1193),(10210,'Prebold','108',1193),(10211,'Preddvor','109',1193),(10212,'Prevalje','110',1193),(10213,'Ptuj','111',1193),(10214,'Puconci','112',1193),(10215,'RaÄe-Fram','113',1193),(10216,'RadeÄe','114',1193),(10217,'Radenci','115',1193),(10218,'Radlje ob Dravi','139',1193),(10219,'Radovljica','145',1193),(10220,'Ravne na KoroÅ¡kem','171',1193),(10221,'Razkrižje','172',1193),(10222,'ReÄica ob Savinji','173',1193),(10223,'RenÄe-Vogrsko','174',1193),(10224,'Ribnica','175',1193),(10225,'Ribnica na Pohorju','176',1193),(10226,'RogaÅ¡ka Slatina','177',1193),(10227,'RogaÅ¡ovci','178',1193),(10228,'Rogatec','179',1193),(10229,'RuÅ¡e','180',1193),(10230,'Selnica ob Dravi','195',1193),(10231,'SemiÄ','196',1193),(10232,'Å entrupert','197',1193),(10233,'Sevnica','198',1193),(10234,'Sežana','199',1193),(10235,'Slovenj Gradec','200',1193),(10236,'Slovenska Bistrica','201',1193),(10237,'Slovenske Konjice','202',1193),(10238,'Å marjeÅ¡ke Toplice','203',1193),(10239,'Sodražica','204',1193),(10240,'SolÄava','205',1193),(10241,'SrediÅ¡Äe ob Dravi','206',1193),(10242,'StarÅ¡e','207',1193),(10243,'Straža','208',1193),(10244,'Sveta Trojica v Slovenskih goricah','209',1193),(10245,'Sveti Jurij v Slovenskih goricah','210',1193),(10246,'Sveti Tomaž','211',1193),(10247,'Vodice','212',1193),(10248,'Abkhazia','AB',1081),(10249,'Adjara','AJ',1081),(10250,'Tbilisi','TB',1081),(10251,'Guria','GU',1081),(10252,'Imereti','IM',1081),(10253,'Kakheti','KA',1081),(10254,'Kvemo Kartli','KK',1081),(10255,'Mtskheta-Mtianeti','MM',1081),(10256,'Racha-Lechkhumi and Kvemo Svaneti','RL',1081),(10257,'Samegrelo-Zemo Svaneti','SZ',1081),(10258,'Samtskhe-Javakheti','SJ',1081),(10259,'Shida Kartli','SK',1081),(10260,'Central','C',1074),(10261,'Punjab','PB',1163),(10262,'La Libertad','LI',1066),(10263,'La Paz','PA',1066),(10264,'La Union','UN',1066),(10265,'Littoral','LT',1038),(10266,'Nord-Ouest','NW',1038),(10267,'Telangana','TG',1101),(10268,'Ash Sharqiyah','04',1187),(10269,'Guadeloupe','GP',1076),(10270,'Martinique','MQ',1076),(10271,'Guyane','GF',1076),(10272,'La Réunion','RE',1076),(10273,'Mayotte','YT',1076),(10274,'Baringo','01',1112),(10275,'Bomet','02',1112),(10276,'Bungoma','03',1112),(10277,'Busia','04',1112),(10278,'Elgeyo/Marakwet','05',1112),(10279,'Embu','06',1112),(10280,'Garissa','07',1112),(10281,'Homa Bay','08',1112),(10282,'Isiolo','09',1112),(10283,'Kajiado','10',1112),(10284,'Kakamega','11',1112),(10285,'Kericho','12',1112),(10286,'Kiambu','13',1112),(10287,'Kilifi','14',1112),(10288,'Kirinyaga','15',1112),(10289,'Kisii','16',1112),(10290,'Kisumu','17',1112),(10291,'Kitui','18',1112),(10292,'Kwale','19',1112),(10293,'Laikipia','20',1112),(10294,'Lamu','21',1112),(10295,'Machakos','22',1112),(10296,'Makueni','23',1112),(10297,'Mandera','24',1112),(10298,'Marsabit','25',1112),(10299,'Meru','26',1112),(10300,'Migori','27',1112),(10301,'Mombasa','28',1112),(10302,'Murang\'a','29',1112),(10303,'Nairobi City','30',1112),(10304,'Nakuru','31',1112),(10305,'Nandi','32',1112),(10306,'Narok','33',1112),(10307,'Nyamira','34',1112),(10308,'Nyandarua','35',1112),(10309,'Nyeri','36',1112),(10310,'Samburu','37',1112),(10311,'Siaya','38',1112),(10312,'Taita/Taveta','39',1112),(10313,'Tana River','40',1112),(10314,'Tharaka-Nithi','41',1112),(10315,'Trans Nzoia','42',1112),(10316,'Turkana','43',1112),(10317,'Uasin Gishu','44',1112),(10318,'Vihiga','45',1112),(10319,'Wajir','46',1112),(10320,'West Pokot','47',1112),(10321,'Chandigarh','CH',1101),(10322,'Central','CP',1083),(10323,'Eastern','EP',1083),(10324,'Northern','NP',1083),(10325,'Western','WP',1083),(10326,'Saint Kitts','K',1181),(10327,'Nevis','N',1181),(10328,'Eastern','E',1190),(10329,'Northern','N',1190),(10330,'Southern','S',1190),(10331,'Dushanbe','DU',1209),(10332,'Nohiyahoi Tobei JumhurÃ','RA',1209),(10333,'Wallis-et-Futuna','WF',1076),(10334,'Nouvelle-Calédonie','NC',1076),(10335,'Haute-Marne','52',1076),(10336,'Saint George','03',1009),(10337,'Saint John','04',1009),(10338,'Saint Mary','05',1009),(10339,'Saint Paul','06',1009),(10340,'Saint Peter','07',1009),(10341,'Saint Philip','08',1009),(10342,'Barbuda','10',1009),(10343,'Redonda','11',1009),(10344,'Christ Church','01',1018),(10345,'Saint Andrew','02',1018),(10346,'Saint George','03',1018),(10347,'Saint James','04',1018),(10348,'Saint John','05',1018),(10349,'Saint Joseph','06',1018),(10350,'Saint Lucy','07',1018),(10351,'Saint Michael','08',1018),(10352,'Saint Peter','09',1018),(10353,'Saint Philip','10',1018),(10354,'Saint Thomas','11',1018),(10355,'Estuaire','01',1080),(10356,'Haut-Ogooué','02',1080),(10357,'Moyen-Ogooué','03',1080),(10358,'Ngounié','04',1080),(10359,'Nyanga','05',1080),(10360,'Ogooué-Ivindo','06',1080),(10361,'Ogooué-Lolo','07',1080),(10362,'Ogooué-Maritime','08',1080),(10363,'Woleu-Ntem','09',1080),(10364,'Monmouthshire','MON',1226),(10365,'Antrim and Newtownabbey','ANN',1226),(10366,'Ards and North Down','AND',1226),(10367,'Armagh City, Banbridge and Craigavon','ABC',1226),(10368,'Belfast','BFS',1226),(10369,'Causeway Coast and Glens','CCG',1226),(10370,'Derry City and Strabane','DRS',1226),(10371,'Fermanagh and Omagh','FMO',1226),(10372,'Lisburn and Castlereagh','LBC',1226),(10373,'Mid and East Antrim','MEA',1226),(10374,'Mid Ulster','MUL',1226),(10375,'Newry, Mourne and Down','NMD',1226),(10376,'Bridgend','BGE',1226),(10377,'Caerphilly','CAY',1226),(10378,'Cardiff','CRF',1226),(10379,'Carmarthenshire','CRF',1226),(10380,'Ceredigion','CGN',1226),(10381,'Conwy','CWY',1226),(10382,'Denbighshire','DEN',1226),(10383,'Flintshire','FLN',1226),(10384,'Isle of Anglesey','AGY',1226),(10385,'Merthyr Tydfil','MTY',1226),(10386,'Neath Port Talbot','NTL',1226),(10387,'Newport','NWP',1226),(10388,'Pembrokeshire','PEM',1226),(10389,'Rhondda, Cynon, Taff','RCT',1226),(10390,'Swansea','SWA',1226),(10391,'Torfaen','TOF',1226),(10392,'Wrexham','WRX',1226),(10393,'Sejong','50',1115); +INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id`) VALUES (1000,'Alabama','AL',1228),(1001,'Alaska','AK',1228),(1002,'Arizona','AZ',1228),(1003,'Arkansas','AR',1228),(1004,'California','CA',1228),(1005,'Colorado','CO',1228),(1006,'Connecticut','CT',1228),(1007,'Delaware','DE',1228),(1008,'Florida','FL',1228),(1009,'Georgia','GA',1228),(1010,'Hawaii','HI',1228),(1011,'Idaho','ID',1228),(1012,'Illinois','IL',1228),(1013,'Indiana','IN',1228),(1014,'Iowa','IA',1228),(1015,'Kansas','KS',1228),(1016,'Kentucky','KY',1228),(1017,'Louisiana','LA',1228),(1018,'Maine','ME',1228),(1019,'Maryland','MD',1228),(1020,'Massachusetts','MA',1228),(1021,'Michigan','MI',1228),(1022,'Minnesota','MN',1228),(1023,'Mississippi','MS',1228),(1024,'Missouri','MO',1228),(1025,'Montana','MT',1228),(1026,'Nebraska','NE',1228),(1027,'Nevada','NV',1228),(1028,'New Hampshire','NH',1228),(1029,'New Jersey','NJ',1228),(1030,'New Mexico','NM',1228),(1031,'New York','NY',1228),(1032,'North Carolina','NC',1228),(1033,'North Dakota','ND',1228),(1034,'Ohio','OH',1228),(1035,'Oklahoma','OK',1228),(1036,'Oregon','OR',1228),(1037,'Pennsylvania','PA',1228),(1038,'Rhode Island','RI',1228),(1039,'South Carolina','SC',1228),(1040,'South Dakota','SD',1228),(1041,'Tennessee','TN',1228),(1042,'Texas','TX',1228),(1043,'Utah','UT',1228),(1044,'Vermont','VT',1228),(1045,'Virginia','VA',1228),(1046,'Washington','WA',1228),(1047,'West Virginia','WV',1228),(1048,'Wisconsin','WI',1228),(1049,'Wyoming','WY',1228),(1050,'District of Columbia','DC',1228),(1052,'American Samoa','AS',1228),(1053,'Guam','GU',1228),(1055,'Northern Mariana Islands','MP',1228),(1056,'Puerto Rico','PR',1228),(1057,'Virgin Islands','VI',1228),(1058,'United States Minor Outlying Islands','UM',1228),(1059,'Armed Forces Europe','AE',1228),(1060,'Armed Forces Americas','AA',1228),(1061,'Armed Forces Pacific','AP',1228),(1100,'Alberta','AB',1039),(1101,'British Columbia','BC',1039),(1102,'Manitoba','MB',1039),(1103,'New Brunswick','NB',1039),(1104,'Newfoundland and Labrador','NL',1039),(1105,'Northwest Territories','NT',1039),(1106,'Nova Scotia','NS',1039),(1107,'Nunavut','NU',1039),(1108,'Ontario','ON',1039),(1109,'Prince Edward Island','PE',1039),(1110,'Quebec','QC',1039),(1111,'Saskatchewan','SK',1039),(1112,'Yukon Territory','YT',1039),(1200,'Maharashtra','MM',1101),(1201,'Karnataka','KA',1101),(1202,'Andhra Pradesh','AP',1101),(1203,'Arunachal Pradesh','AR',1101),(1204,'Assam','AS',1101),(1205,'Bihar','BR',1101),(1206,'Chhattisgarh','CH',1101),(1207,'Goa','GA',1101),(1208,'Gujarat','GJ',1101),(1209,'Haryana','HR',1101),(1210,'Himachal Pradesh','HP',1101),(1211,'Jammu and Kashmir','JK',1101),(1212,'Jharkhand','JH',1101),(1213,'Kerala','KL',1101),(1214,'Madhya Pradesh','MP',1101),(1215,'Manipur','MN',1101),(1216,'Meghalaya','ML',1101),(1217,'Mizoram','MZ',1101),(1218,'Nagaland','NL',1101),(1219,'Orissa','OR',1101),(1220,'Punjab','PB',1101),(1221,'Rajasthan','RJ',1101),(1222,'Sikkim','SK',1101),(1223,'Tamil Nadu','TN',1101),(1224,'Tripura','TR',1101),(1225,'Uttarakhand','UT',1101),(1226,'Uttar Pradesh','UP',1101),(1227,'West Bengal','WB',1101),(1228,'Andaman and Nicobar Islands','AN',1101),(1229,'Dadra and Nagar Haveli','DN',1101),(1230,'Daman and Diu','DD',1101),(1231,'Delhi','DL',1101),(1232,'Lakshadweep','LD',1101),(1233,'Pondicherry','PY',1101),(1300,'mazowieckie','MZ',1172),(1301,'pomorskie','PM',1172),(1302,'dolnoÅ›lÄ…skie','DS',1172),(1303,'kujawsko-pomorskie','KP',1172),(1304,'lubelskie','LU',1172),(1305,'lubuskie','LB',1172),(1306,'łódzkie','LD',1172),(1307,'maÅ‚opolskie','MA',1172),(1308,'opolskie','OP',1172),(1309,'podkarpackie','PK',1172),(1310,'podlaskie','PD',1172),(1311,'Å›lÄ…skie','SL',1172),(1312,'Å›wiÄ™tokrzyskie','SK',1172),(1313,'warmiÅ„sko-mazurskie','WN',1172),(1314,'wielkopolskie','WP',1172),(1315,'zachodniopomorskie','ZP',1172),(1500,'Abu Zaby','AZ',1225),(1501,'\'Ajman','AJ',1225),(1502,'Al Fujayrah','FU',1225),(1503,'Ash Shariqah','SH',1225),(1504,'Dubayy','DU',1225),(1505,'Ra\'s al Khaymah','RK',1225),(1506,'Dac Lac','33',1233),(1507,'Umm al Qaywayn','UQ',1225),(1508,'Badakhshan','BDS',1001),(1509,'Badghis','BDG',1001),(1510,'Baghlan','BGL',1001),(1511,'Balkh','BAL',1001),(1512,'Bamian','BAM',1001),(1513,'Farah','FRA',1001),(1514,'Faryab','FYB',1001),(1515,'Ghazni','GHA',1001),(1516,'Ghowr','GHO',1001),(1517,'Helmand','HEL',1001),(1518,'Herat','HER',1001),(1519,'Jowzjan','JOW',1001),(1520,'Kabul','KAB',1001),(1521,'Kandahar','KAN',1001),(1522,'Kapisa','KAP',1001),(1523,'Khowst','KHO',1001),(1524,'Konar','KNR',1001),(1525,'Kondoz','KDZ',1001),(1526,'Laghman','LAG',1001),(1527,'Lowgar','LOW',1001),(1528,'Nangrahar','NAN',1001),(1529,'Nimruz','NIM',1001),(1530,'Nurestan','NUR',1001),(1531,'Oruzgan','ORU',1001),(1532,'Paktia','PIA',1001),(1533,'Paktika','PKA',1001),(1534,'Parwan','PAR',1001),(1535,'Samangan','SAM',1001),(1536,'Sar-e Pol','SAR',1001),(1537,'Takhar','TAK',1001),(1538,'Wardak','WAR',1001),(1539,'Zabol','ZAB',1001),(1540,'Berat','BR',1002),(1541,'Bulqizë','BU',1002),(1542,'Delvinë','DL',1002),(1543,'Devoll','DV',1002),(1544,'Dibër','DI',1002),(1545,'Durrës','DR',1002),(1546,'Elbasan','EL',1002),(1547,'Fier','FR',1002),(1548,'Gramsh','GR',1002),(1549,'Gjirokastër','GJ',1002),(1550,'Has','HA',1002),(1551,'Kavajë','KA',1002),(1552,'Kolonjë','ER',1002),(1553,'Korçë','KO',1002),(1554,'Krujë','KR',1002),(1555,'Kuçovë','KC',1002),(1556,'Kukës','KU',1002),(1557,'Kurbin','KB',1002),(1558,'Lezhë','LE',1002),(1559,'Librazhd','LB',1002),(1560,'Lushnjë','LU',1002),(1561,'Malësi e Madhe','MM',1002),(1562,'Mallakastër','MK',1002),(1563,'Mat','MT',1002),(1564,'Mirditë','MR',1002),(1565,'Peqin','PQ',1002),(1566,'Përmet','PR',1002),(1567,'Pogradec','PG',1002),(1568,'Pukë','PU',1002),(1569,'Sarandë','SR',1002),(1570,'Skrapar','SK',1002),(1571,'Shkodër','SH',1002),(1572,'Tepelenë','TE',1002),(1573,'Tiranë','TR',1002),(1574,'Tropojë','TP',1002),(1575,'Vlorë','VL',1002),(1576,'Erevan','ER',1011),(1577,'Aragacotn','AG',1011),(1578,'Ararat','AR',1011),(1579,'Armavir','AV',1011),(1580,'Gegarkunik\'','GR',1011),(1581,'Kotayk\'','KT',1011),(1582,'Lory','LO',1011),(1583,'Sirak','SH',1011),(1584,'Syunik\'','SU',1011),(1585,'Tavus','TV',1011),(1586,'Vayoc Jor','VD',1011),(1587,'Bengo','BGO',1006),(1588,'Benguela','BGU',1006),(1589,'Bie','BIE',1006),(1590,'Cabinda','CAB',1006),(1591,'Cuando-Cubango','CCU',1006),(1592,'Cuanza Norte','CNO',1006),(1593,'Cuanza Sul','CUS',1006),(1594,'Cunene','CNN',1006),(1595,'Huambo','HUA',1006),(1596,'Huila','HUI',1006),(1597,'Luanda','LUA',1006),(1598,'Lunda Norte','LNO',1006),(1599,'Lunda Sul','LSU',1006),(1600,'Malange','MAL',1006),(1601,'Moxico','MOX',1006),(1602,'Namibe','NAM',1006),(1603,'Uige','UIG',1006),(1604,'Zaire','ZAI',1006),(1605,'Capital federal','C',1010),(1606,'Buenos Aires','B',1010),(1607,'Catamarca','K',1010),(1608,'Cordoba','X',1010),(1609,'Corrientes','W',1010),(1610,'Chaco','H',1010),(1611,'Chubut','U',1010),(1612,'Entre Rios','E',1010),(1613,'Formosa','P',1010),(1614,'Jujuy','Y',1010),(1615,'La Pampa','L',1010),(1616,'Mendoza','M',1010),(1617,'Misiones','N',1010),(1618,'Neuquen','Q',1010),(1619,'Rio Negro','R',1010),(1620,'Salta','A',1010),(1621,'San Juan','J',1010),(1622,'San Luis','D',1010),(1623,'Santa Cruz','Z',1010),(1624,'Santa Fe','S',1010),(1625,'Santiago del Estero','G',1010),(1626,'Tierra del Fuego','V',1010),(1627,'Tucuman','T',1010),(1628,'Burgenland','1',1014),(1629,'Kärnten','2',1014),(1630,'Niederösterreich','3',1014),(1631,'Oberösterreich','4',1014),(1632,'Salzburg','5',1014),(1633,'Steiermark','6',1014),(1634,'Tirol','7',1014),(1635,'Vorarlberg','8',1014),(1636,'Wien','9',1014),(1637,'Australian Antarctic Territory','AAT',1008),(1638,'Australian Capital Territory','ACT',1013),(1639,'Northern Territory','NT',1013),(1640,'New South Wales','NSW',1013),(1641,'Queensland','QLD',1013),(1642,'South Australia','SA',1013),(1643,'Tasmania','TAS',1013),(1644,'Victoria','VIC',1013),(1645,'Western Australia','WA',1013),(1646,'Naxcivan','NX',1015),(1647,'Ali Bayramli','AB',1015),(1648,'Baki','BA',1015),(1649,'Ganca','GA',1015),(1650,'Lankaran','LA',1015),(1651,'Mingacevir','MI',1015),(1652,'Naftalan','NA',1015),(1653,'Saki','SA',1015),(1654,'Sumqayit','SM',1015),(1655,'Susa','SS',1015),(1656,'Xankandi','XA',1015),(1657,'Yevlax','YE',1015),(1658,'Abseron','ABS',1015),(1659,'Agcabadi','AGC',1015),(1660,'Agdam','AGM',1015),(1661,'Agdas','AGS',1015),(1662,'Agstafa','AGA',1015),(1663,'Agsu','AGU',1015),(1664,'Astara','AST',1015),(1665,'Babak','BAB',1015),(1666,'Balakan','BAL',1015),(1667,'Barda','BAR',1015),(1668,'Beylagan','BEY',1015),(1669,'Bilasuvar','BIL',1015),(1670,'Cabrayll','CAB',1015),(1671,'Calilabad','CAL',1015),(1672,'Culfa','CUL',1015),(1673,'Daskasan','DAS',1015),(1674,'Davaci','DAV',1015),(1675,'Fuzuli','FUZ',1015),(1676,'Gadabay','GAD',1015),(1677,'Goranboy','GOR',1015),(1678,'Goycay','GOY',1015),(1679,'Haciqabul','HAC',1015),(1680,'Imisli','IMI',1015),(1681,'Ismayilli','ISM',1015),(1682,'Kalbacar','KAL',1015),(1683,'Kurdamir','KUR',1015),(1684,'Lacin','LAC',1015),(1685,'Lerik','LER',1015),(1686,'Masalli','MAS',1015),(1687,'Neftcala','NEF',1015),(1688,'Oguz','OGU',1015),(1689,'Ordubad','ORD',1015),(1690,'Qabala','QAB',1015),(1691,'Qax','QAX',1015),(1692,'Qazax','QAZ',1015),(1693,'Qobustan','QOB',1015),(1694,'Quba','QBA',1015),(1695,'Qubadli','QBI',1015),(1696,'Qusar','QUS',1015),(1697,'Saatli','SAT',1015),(1698,'Sabirabad','SAB',1015),(1699,'Sadarak','SAD',1015),(1700,'Sahbuz','SAH',1015),(1701,'Salyan','SAL',1015),(1702,'Samaxi','SMI',1015),(1703,'Samkir','SKR',1015),(1704,'Samux','SMX',1015),(1705,'Sarur','SAR',1015),(1706,'Siyazan','SIY',1015),(1707,'Tartar','TAR',1015),(1708,'Tovuz','TOV',1015),(1709,'Ucar','UCA',1015),(1710,'Xacmaz','XAC',1015),(1711,'Xanlar','XAN',1015),(1712,'Xizi','XIZ',1015),(1713,'Xocali','XCI',1015),(1714,'Xocavand','XVD',1015),(1715,'Yardimli','YAR',1015),(1716,'Zangilan','ZAN',1015),(1717,'Zaqatala','ZAQ',1015),(1718,'Zardab','ZAR',1015),(1719,'Federacija Bosna i Hercegovina','BIH',1026),(1720,'Republika Srpska','SRP',1026),(1721,'Bagerhat zila','05',1017),(1722,'Bandarban zila','01',1017),(1723,'Barguna zila','02',1017),(1724,'Barisal zila','06',1017),(1725,'Bhola zila','07',1017),(1726,'Bogra zila','03',1017),(1727,'Brahmanbaria zila','04',1017),(1728,'Chandpur zila','09',1017),(1729,'Chittagong zila','10',1017),(1730,'Chuadanga zila','12',1017),(1731,'Comilla zila','08',1017),(1732,'Cox\'s Bazar zila','11',1017),(1733,'Dhaka zila','13',1017),(1734,'Dinajpur zila','14',1017),(1735,'Faridpur zila','15',1017),(1736,'Feni zila','16',1017),(1737,'Gaibandha zila','19',1017),(1738,'Gazipur zila','18',1017),(1739,'Gopalganj zila','17',1017),(1740,'Habiganj zila','20',1017),(1741,'Jaipurhat zila','24',1017),(1742,'Jamalpur zila','21',1017),(1743,'Jessore zila','22',1017),(1744,'Jhalakati zila','25',1017),(1745,'Jhenaidah zila','23',1017),(1746,'Khagrachari zila','29',1017),(1747,'Khulna zila','27',1017),(1748,'Kishorganj zila','26',1017),(1749,'Kurigram zila','28',1017),(1750,'Kushtia zila','30',1017),(1751,'Lakshmipur zila','31',1017),(1752,'Lalmonirhat zila','32',1017),(1753,'Madaripur zila','36',1017),(1754,'Magura zila','37',1017),(1755,'Manikganj zila','33',1017),(1756,'Meherpur zila','39',1017),(1757,'Moulvibazar zila','38',1017),(1758,'Munshiganj zila','35',1017),(1759,'Mymensingh zila','34',1017),(1760,'Naogaon zila','48',1017),(1761,'Narail zila','43',1017),(1762,'Narayanganj zila','40',1017),(1763,'Narsingdi zila','42',1017),(1764,'Natore zila','44',1017),(1765,'Nawabganj zila','45',1017),(1766,'Netrakona zila','41',1017),(1767,'Nilphamari zila','46',1017),(1768,'Noakhali zila','47',1017),(1769,'Pabna zila','49',1017),(1770,'Panchagarh zila','52',1017),(1771,'Patuakhali zila','51',1017),(1772,'Pirojpur zila','50',1017),(1773,'Rajbari zila','53',1017),(1774,'Rajshahi zila','54',1017),(1775,'Rangamati zila','56',1017),(1776,'Rangpur zila','55',1017),(1777,'Satkhira zila','58',1017),(1778,'Shariatpur zila','62',1017),(1779,'Sherpur zila','57',1017),(1780,'Sirajganj zila','59',1017),(1781,'Sunamganj zila','61',1017),(1782,'Sylhet zila','60',1017),(1783,'Tangail zila','63',1017),(1784,'Thakurgaon zila','64',1017),(1785,'Antwerpen','VAN',1020),(1786,'Brabant Wallon','WBR',1020),(1787,'Hainaut','WHT',1020),(1788,'Liege','WLG',1020),(1789,'Limburg','VLI',1020),(1790,'Luxembourg','WLX',1020),(1791,'Namur','WNA',1020),(1792,'Oost-Vlaanderen','VOV',1020),(1793,'Vlaams-Brabant','VBR',1020),(1794,'West-Vlaanderen','VWV',1020),(1795,'Bale','BAL',1034),(1796,'Bam','BAM',1034),(1797,'Banwa','BAN',1034),(1798,'Bazega','BAZ',1034),(1799,'Bougouriba','BGR',1034),(1800,'Boulgou','BLG',1034),(1801,'Boulkiemde','BLK',1034),(1802,'Comoe','COM',1034),(1803,'Ganzourgou','GAN',1034),(1804,'Gnagna','GNA',1034),(1805,'Gourma','GOU',1034),(1806,'Houet','HOU',1034),(1807,'Ioba','IOB',1034),(1808,'Kadiogo','KAD',1034),(1809,'Kenedougou','KEN',1034),(1810,'Komondjari','KMD',1034),(1811,'Kompienga','KMP',1034),(1812,'Kossi','KOS',1034),(1813,'Koulpulogo','KOP',1034),(1814,'Kouritenga','KOT',1034),(1815,'Kourweogo','KOW',1034),(1816,'Leraba','LER',1034),(1817,'Loroum','LOR',1034),(1818,'Mouhoun','MOU',1034),(1819,'Nahouri','NAO',1034),(1820,'Namentenga','NAM',1034),(1821,'Nayala','NAY',1034),(1822,'Noumbiel','NOU',1034),(1823,'Oubritenga','OUB',1034),(1824,'Oudalan','OUD',1034),(1825,'Passore','PAS',1034),(1826,'Poni','PON',1034),(1827,'Sanguie','SNG',1034),(1828,'Sanmatenga','SMT',1034),(1829,'Seno','SEN',1034),(1830,'Siasili','SIS',1034),(1831,'Soum','SOM',1034),(1832,'Sourou','SOR',1034),(1833,'Tapoa','TAP',1034),(1834,'Tui','TUI',1034),(1835,'Yagha','YAG',1034),(1836,'Yatenga','YAT',1034),(1837,'Ziro','ZIR',1034),(1838,'Zondoma','ZON',1034),(1839,'Zoundweogo','ZOU',1034),(1840,'Blagoevgrad','01',1033),(1841,'Burgas','02',1033),(1842,'Dobrich','08',1033),(1843,'Gabrovo','07',1033),(1844,'Haskovo','26',1033),(1845,'Yambol','28',1033),(1846,'Kardzhali','09',1033),(1847,'Kyustendil','10',1033),(1848,'Lovech','11',1033),(1849,'Montana','12',1033),(1850,'Pazardzhik','13',1033),(1851,'Pernik','14',1033),(1852,'Pleven','15',1033),(1853,'Plovdiv','16',1033),(1854,'Razgrad','17',1033),(1855,'Ruse','18',1033),(1856,'Silistra','19',1033),(1857,'Sliven','20',1033),(1858,'Smolyan','21',1033),(1859,'Sofia','23',1033),(1860,'Stara Zagora','24',1033),(1861,'Shumen','27',1033),(1862,'Targovishte','25',1033),(1863,'Varna','03',1033),(1864,'Veliko Tarnovo','04',1033),(1865,'Vidin','05',1033),(1866,'Vratsa','06',1033),(1867,'Al Hadd','01',1016),(1868,'Al Manamah','03',1016),(1869,'Al Mintaqah al Gharbiyah','10',1016),(1870,'Al Mintagah al Wusta','07',1016),(1871,'Al Mintaqah ash Shamaliyah','05',1016),(1872,'Al Muharraq','02',1016),(1873,'Ar Rifa','09',1016),(1874,'Jidd Hafs','04',1016),(1875,'Madluat Jamad','12',1016),(1876,'Madluat Isa','08',1016),(1877,'Mintaqat Juzur tawar','11',1016),(1878,'Sitrah','06',1016),(1879,'Bubanza','BB',1036),(1880,'Bujumbura','BJ',1036),(1881,'Bururi','BR',1036),(1882,'Cankuzo','CA',1036),(1883,'Cibitoke','CI',1036),(1884,'Gitega','GI',1036),(1885,'Karuzi','KR',1036),(1886,'Kayanza','KY',1036),(1887,'Makamba','MA',1036),(1888,'Muramvya','MU',1036),(1889,'Mwaro','MW',1036),(1890,'Ngozi','NG',1036),(1891,'Rutana','RT',1036),(1892,'Ruyigi','RY',1036),(1893,'Alibori','AL',1022),(1894,'Atakora','AK',1022),(1895,'Atlantique','AQ',1022),(1896,'Borgou','BO',1022),(1897,'Collines','CO',1022),(1898,'Donga','DO',1022),(1899,'Kouffo','KO',1022),(1900,'Littoral','LI',1022),(1901,'Mono','MO',1022),(1902,'Oueme','OU',1022),(1903,'Plateau','PL',1022),(1904,'Zou','ZO',1022),(1905,'Belait','BE',1032),(1906,'Brunei-Muara','BM',1032),(1907,'Temburong','TE',1032),(1908,'Tutong','TU',1032),(1909,'Cochabamba','C',1025),(1910,'Chuquisaca','H',1025),(1911,'El Beni','B',1025),(1912,'La Paz','L',1025),(1913,'Oruro','O',1025),(1914,'Pando','N',1025),(1915,'Potosi','P',1025),(1916,'Tarija','T',1025),(1917,'Acre','AC',1029),(1918,'Alagoas','AL',1029),(1919,'Amazonas','AM',1029),(1920,'Amapa','AP',1029),(1921,'Bahia','BA',1029),(1922,'Ceara','CE',1029),(1923,'Distrito Federal','DF',1029),(1924,'Espirito Santo','ES',1029),(1926,'Goias','GO',1029),(1927,'Maranhao','MA',1029),(1928,'Minas Gerais','MG',1029),(1929,'Mato Grosso do Sul','MS',1029),(1930,'Mato Grosso','MT',1029),(1931,'Para','PA',1029),(1932,'Paraiba','PB',1029),(1933,'Pernambuco','PE',1029),(1934,'Piaui','PI',1029),(1935,'Parana','PR',1029),(1936,'Rio de Janeiro','RJ',1029),(1937,'Rio Grande do Norte','RN',1029),(1938,'Rondonia','RO',1029),(1939,'Roraima','RR',1029),(1940,'Rio Grande do Sul','RS',1029),(1941,'Santa Catarina','SC',1029),(1942,'Sergipe','SE',1029),(1943,'Sao Paulo','SP',1029),(1944,'Tocantins','TO',1029),(1945,'Acklins and Crooked Islands','AC',1212),(1946,'Bimini','BI',1212),(1947,'Cat Island','CI',1212),(1948,'Exuma','EX',1212),(1955,'Inagua','IN',1212),(1957,'Long Island','LI',1212),(1959,'Mayaguana','MG',1212),(1960,'New Providence','NP',1212),(1962,'Ragged Island','RI',1212),(1966,'Bumthang','33',1024),(1967,'Chhukha','12',1024),(1968,'Dagana','22',1024),(1969,'Gasa','GA',1024),(1970,'Ha','13',1024),(1971,'Lhuentse','44',1024),(1972,'Monggar','42',1024),(1973,'Paro','11',1024),(1974,'Pemagatshel','43',1024),(1975,'Punakha','23',1024),(1976,'Samdrup Jongkha','45',1024),(1977,'Samtee','14',1024),(1978,'Sarpang','31',1024),(1979,'Thimphu','15',1024),(1980,'Trashigang','41',1024),(1981,'Trashi Yangtse','TY',1024),(1982,'Trongsa','32',1024),(1983,'Tsirang','21',1024),(1984,'Wangdue Phodrang','24',1024),(1985,'Zhemgang','34',1024),(1986,'Central','CE',1027),(1987,'Ghanzi','GH',1027),(1988,'Kgalagadi','KG',1027),(1989,'Kgatleng','KL',1027),(1990,'Kweneng','KW',1027),(1991,'Ngamiland','NG',1027),(1992,'North-East','NE',1027),(1993,'North-West','NW',1027),(1994,'South-East','SE',1027),(1995,'Southern','SO',1027),(1996,'Brèsckaja voblasc\'','BR',1019),(1997,'Homel\'skaja voblasc\'','HO',1019),(1998,'Hrodzenskaja voblasc\'','HR',1019),(1999,'Mahilëuskaja voblasc\'','MA',1019),(2000,'Minskaja voblasc\'','MI',1019),(2001,'Vicebskaja voblasc\'','VI',1019),(2002,'Belize','BZ',1021),(2003,'Cayo','CY',1021),(2004,'Corozal','CZL',1021),(2005,'Orange Walk','OW',1021),(2006,'Stann Creek','SC',1021),(2007,'Toledo','TOL',1021),(2008,'Kinshasa','KN',1050),(2011,'Equateur','EQ',1050),(2014,'Kasai-Oriental','KE',1050),(2016,'Maniema','MA',1050),(2017,'Nord-Kivu','NK',1050),(2019,'Sud-Kivu','SK',1050),(2020,'Bangui','BGF',1042),(2021,'Bamingui-Bangoran','BB',1042),(2022,'Basse-Kotto','BK',1042),(2023,'Haute-Kotto','HK',1042),(2024,'Haut-Mbomou','HM',1042),(2025,'Kemo','KG',1042),(2026,'Lobaye','LB',1042),(2027,'Mambere-Kadei','HS',1042),(2028,'Mbomou','MB',1042),(2029,'Nana-Grebizi','KB',1042),(2030,'Nana-Mambere','NM',1042),(2031,'Ombella-Mpoko','MP',1042),(2032,'Ouaka','UK',1042),(2033,'Ouham','AC',1042),(2034,'Ouham-Pende','OP',1042),(2035,'Sangha-Mbaere','SE',1042),(2036,'Vakaga','VR',1042),(2037,'Brazzaville','BZV',1051),(2038,'Bouenza','11',1051),(2039,'Cuvette','8',1051),(2040,'Cuvette-Ouest','15',1051),(2041,'Kouilou','5',1051),(2042,'Lekoumou','2',1051),(2043,'Likouala','7',1051),(2044,'Niari','9',1051),(2045,'Plateaux','14',1051),(2046,'Pool','12',1051),(2047,'Sangha','13',1051),(2048,'Aargau','AG',1205),(2049,'Appenzell Innerrhoden','AI',1205),(2050,'Appenzell Ausserrhoden','AR',1205),(2051,'Bern','BE',1205),(2052,'Basel-Landschaft','BL',1205),(2053,'Basel-Stadt','BS',1205),(2054,'Fribourg','FR',1205),(2055,'Geneva','GE',1205),(2056,'Glarus','GL',1205),(2057,'Graubunden','GR',1205),(2058,'Jura','JU',1205),(2059,'Luzern','LU',1205),(2060,'Neuchatel','NE',1205),(2061,'Nidwalden','NW',1205),(2062,'Obwalden','OW',1205),(2063,'Sankt Gallen','SG',1205),(2064,'Schaffhausen','SH',1205),(2065,'Solothurn','SO',1205),(2066,'Schwyz','SZ',1205),(2067,'Thurgau','TG',1205),(2068,'Ticino','TI',1205),(2069,'Uri','UR',1205),(2070,'Vaud','VD',1205),(2071,'Valais','VS',1205),(2072,'Zug','ZG',1205),(2073,'Zurich','ZH',1205),(2074,'18 Montagnes','06',1054),(2075,'Agnebi','16',1054),(2076,'Bas-Sassandra','09',1054),(2077,'Denguele','10',1054),(2078,'Haut-Sassandra','02',1054),(2079,'Lacs','07',1054),(2080,'Lagunes','01',1054),(2081,'Marahoue','12',1054),(2082,'Moyen-Comoe','05',1054),(2083,'Nzi-Comoe','11',1054),(2084,'Savanes','03',1054),(2085,'Sud-Bandama','15',1054),(2086,'Sud-Comoe','13',1054),(2087,'Vallee du Bandama','04',1054),(2088,'Worodouqou','14',1054),(2089,'Zanzan','08',1054),(2090,'Aisen del General Carlos Ibanez del Campo','AI',1044),(2091,'Antofagasta','AN',1044),(2092,'Araucania','AR',1044),(2093,'Atacama','AT',1044),(2094,'Bio-Bio','BI',1044),(2095,'Coquimbo','CO',1044),(2096,'Libertador General Bernardo O\'Higgins','LI',1044),(2097,'Los Lagos','LL',1044),(2098,'Magallanes','MA',1044),(2099,'Maule','ML',1044),(2100,'Santiago Metropolitan','SM',1044),(2101,'Tarapaca','TA',1044),(2102,'Valparaiso','VS',1044),(2103,'Adamaoua','AD',1038),(2104,'Centre','CE',1038),(2105,'East','ES',1038),(2106,'Far North','EN',1038),(2107,'North','NO',1038),(2108,'South','SW',1038),(2109,'South-West','SW',1038),(2110,'West','OU',1038),(2111,'Beijing','11',1045),(2112,'Chongqing','50',1045),(2113,'Shanghai','31',1045),(2114,'Tianjin','12',1045),(2115,'Anhui','34',1045),(2116,'Fujian','35',1045),(2117,'Gansu','62',1045),(2118,'Guangdong','44',1045),(2119,'Guizhou','52',1045),(2120,'Hainan','46',1045),(2121,'Hebei','13',1045),(2122,'Heilongjiang','23',1045),(2123,'Henan','41',1045),(2124,'Hubei','42',1045),(2125,'Hunan','43',1045),(2126,'Jiangsu','32',1045),(2127,'Jiangxi','36',1045),(2128,'Jilin','22',1045),(2129,'Liaoning','21',1045),(2130,'Qinghai','63',1045),(2131,'Shaanxi','61',1045),(2132,'Shandong','37',1045),(2133,'Shanxi','14',1045),(2134,'Sichuan','51',1045),(2135,'Taiwan','71',1045),(2136,'Yunnan','53',1045),(2137,'Zhejiang','33',1045),(2138,'Guangxi','45',1045),(2139,'Neia Mongol (mn)','15',1045),(2140,'Xinjiang','65',1045),(2141,'Xizang','54',1045),(2142,'Hong Kong','91',1045),(2143,'Macau','92',1045),(2144,'Distrito Capital de Bogotá','DC',1048),(2145,'Amazonea','AMA',1048),(2146,'Antioquia','ANT',1048),(2147,'Arauca','ARA',1048),(2148,'Atlántico','ATL',1048),(2149,'BolÃvar','BOL',1048),(2150,'Boyacá','BOY',1048),(2151,'Caldea','CAL',1048),(2152,'Caquetá','CAQ',1048),(2153,'Casanare','CAS',1048),(2154,'Cauca','CAU',1048),(2155,'Cesar','CES',1048),(2156,'Córdoba','COR',1048),(2157,'Cundinamarca','CUN',1048),(2158,'Chocó','CHO',1048),(2159,'GuainÃa','GUA',1048),(2160,'Guaviare','GUV',1048),(2161,'La Guajira','LAG',1048),(2162,'Magdalena','MAG',1048),(2163,'Meta','MET',1048),(2164,'Nariño','NAR',1048),(2165,'Norte de Santander','NSA',1048),(2166,'Putumayo','PUT',1048),(2167,'Quindio','QUI',1048),(2168,'Risaralda','RIS',1048),(2169,'San Andrés, Providencia y Santa Catalina','SAP',1048),(2170,'Santander','SAN',1048),(2171,'Sucre','SUC',1048),(2172,'Tolima','TOL',1048),(2173,'Valle del Cauca','VAC',1048),(2174,'Vaupés','VAU',1048),(2175,'Vichada','VID',1048),(2176,'Alajuela','A',1053),(2177,'Cartago','C',1053),(2178,'Guanacaste','G',1053),(2179,'Heredia','H',1053),(2180,'Limon','L',1053),(2181,'Puntarenas','P',1053),(2182,'San Jose','SJ',1053),(2183,'Camagey','09',1056),(2184,'Ciego de `vila','08',1056),(2185,'Cienfuegos','06',1056),(2186,'Ciudad de La Habana','03',1056),(2187,'Granma','12',1056),(2188,'Guantanamo','14',1056),(2189,'Holquin','11',1056),(2190,'La Habana','02',1056),(2191,'Las Tunas','10',1056),(2192,'Matanzas','04',1056),(2193,'Pinar del Rio','01',1056),(2194,'Sancti Spiritus','07',1056),(2195,'Santiago de Cuba','13',1056),(2196,'Villa Clara','05',1056),(2197,'Isla de la Juventud','99',1056),(2198,'Pinar del Roo','PR',1056),(2199,'Ciego de Avila','CA',1056),(2200,'Camagoey','CG',1056),(2201,'Holgun','HO',1056),(2202,'Sancti Spritus','SS',1056),(2203,'Municipio Especial Isla de la Juventud','IJ',1056),(2204,'Boa Vista','BV',1040),(2205,'Brava','BR',1040),(2206,'Calheta de Sao Miguel','CS',1040),(2207,'Fogo','FO',1040),(2208,'Maio','MA',1040),(2209,'Mosteiros','MO',1040),(2210,'Paul','PA',1040),(2211,'Porto Novo','PN',1040),(2212,'Praia','PR',1040),(2213,'Ribeira Grande','RG',1040),(2214,'Sal','SL',1040),(2215,'Sao Domingos','SD',1040),(2216,'Sao Filipe','SF',1040),(2217,'Sao Nicolau','SN',1040),(2218,'Sao Vicente','SV',1040),(2219,'Tarrafal','TA',1040),(2220,'Ammochostos Magusa','04',1057),(2221,'Keryneia','06',1057),(2222,'Larnaka','03',1057),(2223,'Lefkosia','01',1057),(2224,'Lemesos','02',1057),(2225,'Pafos','05',1057),(2226,'JihoÄeský kraj','JC',1058),(2227,'Jihomoravský kraj','JM',1058),(2228,'Karlovarský kraj','KA',1058),(2229,'Královéhradecký kraj','KR',1058),(2230,'Liberecký kraj','LI',1058),(2231,'Moravskoslezský kraj','MO',1058),(2232,'Olomoucký kraj','OL',1058),(2233,'Pardubický kraj','PA',1058),(2234,'Plzeňský kraj','PL',1058),(2235,'Praha, hlavnà mÄ›sto','PR',1058),(2236,'StÅ™edoÄeský kraj','ST',1058),(2237,'Ústecký kraj','US',1058),(2238,'VysoÄina','VY',1058),(2239,'ZlÃnský kraj','ZL',1058),(2240,'Baden-Württemberg','BW',1082),(2241,'Bayern','BY',1082),(2242,'Bremen','HB',1082),(2243,'Hamburg','HH',1082),(2244,'Hessen','HE',1082),(2245,'Niedersachsen','NI',1082),(2246,'Nordrhein-Westfalen','NW',1082),(2247,'Rheinland-Pfalz','RP',1082),(2248,'Saarland','SL',1082),(2249,'Schleswig-Holstein','SH',1082),(2250,'Berlin','BE',1082),(2251,'Brandenburg','BB',1082),(2252,'Mecklenburg-Vorpommern','MV',1082),(2253,'Sachsen','SN',1082),(2254,'Sachsen-Anhalt','ST',1082),(2255,'Thüringen','TH',1082),(2256,'Ali Sabiah','AS',1060),(2257,'Dikhil','DI',1060),(2258,'Djibouti','DJ',1060),(2259,'Obock','OB',1060),(2260,'Tadjoura','TA',1060),(2261,'Frederiksberg','147',1059),(2262,'Copenhagen City','101',1059),(2263,'Copenhagen','015',1059),(2264,'Frederiksborg','020',1059),(2265,'Roskilde','025',1059),(2266,'Vestsjælland','030',1059),(2267,'Storstrøm','035',1059),(2268,'Bornholm','040',1059),(2269,'Fyn','042',1059),(2270,'South Jutland','050',1059),(2271,'Ribe','055',1059),(2272,'Vejle','060',1059),(2273,'Ringkjøbing','065',1059),(2274,'Ã…rhus','070',1059),(2275,'Viborg','076',1059),(2276,'North Jutland','080',1059),(2277,'Distrito Nacional (Santo Domingo)','01',1062),(2278,'Azua','02',1062),(2279,'Bahoruco','03',1062),(2280,'Barahona','04',1062),(2281,'Dajabón','05',1062),(2282,'Duarte','06',1062),(2283,'El Seybo [El Seibo]','08',1062),(2284,'Espaillat','09',1062),(2285,'Hato Mayor','30',1062),(2286,'Independencia','10',1062),(2287,'La Altagracia','11',1062),(2288,'La Estrelleta [Elias Pina]','07',1062),(2289,'La Romana','12',1062),(2290,'La Vega','13',1062),(2291,'Maroia Trinidad Sánchez','14',1062),(2292,'Monseñor Nouel','28',1062),(2293,'Monte Cristi','15',1062),(2294,'Monte Plata','29',1062),(2295,'Pedernales','16',1062),(2296,'Peravia','17',1062),(2297,'Puerto Plata','18',1062),(2298,'Salcedo','19',1062),(2299,'Samaná','20',1062),(2300,'San Cristóbal','21',1062),(2301,'San Pedro de MacorÃs','23',1062),(2302,'Sánchez RamÃrez','24',1062),(2303,'Santiago','25',1062),(2304,'Santiago RodrÃguez','26',1062),(2305,'Valverde','27',1062),(2306,'Adrar','01',1003),(2307,'Ain Defla','44',1003),(2308,'Ain Tmouchent','46',1003),(2309,'Alger','16',1003),(2310,'Annaba','23',1003),(2311,'Batna','05',1003),(2312,'Bechar','08',1003),(2313,'Bejaia','06',1003),(2314,'Biskra','07',1003),(2315,'Blida','09',1003),(2316,'Bordj Bou Arreridj','34',1003),(2317,'Bouira','10',1003),(2318,'Boumerdes','35',1003),(2319,'Chlef','02',1003),(2320,'Constantine','25',1003),(2321,'Djelfa','17',1003),(2322,'El Bayadh','32',1003),(2323,'El Oued','39',1003),(2324,'El Tarf','36',1003),(2325,'Ghardaia','47',1003),(2326,'Guelma','24',1003),(2327,'Illizi','33',1003),(2328,'Jijel','18',1003),(2329,'Khenchela','40',1003),(2330,'Laghouat','03',1003),(2331,'Mascara','29',1003),(2332,'Medea','26',1003),(2333,'Mila','43',1003),(2334,'Mostaganem','27',1003),(2335,'Msila','28',1003),(2336,'Naama','45',1003),(2337,'Oran','31',1003),(2338,'Ouargla','30',1003),(2339,'Oum el Bouaghi','04',1003),(2340,'Relizane','48',1003),(2341,'Saida','20',1003),(2342,'Setif','19',1003),(2343,'Sidi Bel Abbes','22',1003),(2344,'Skikda','21',1003),(2345,'Souk Ahras','41',1003),(2346,'Tamanghasset','11',1003),(2347,'Tebessa','12',1003),(2348,'Tiaret','14',1003),(2349,'Tindouf','37',1003),(2350,'Tipaza','42',1003),(2351,'Tissemsilt','38',1003),(2352,'Tizi Ouzou','15',1003),(2353,'Tlemcen','13',1003),(2354,'Azuay','A',1064),(2355,'Bolivar','B',1064),(2356,'Canar','F',1064),(2357,'Carchi','C',1064),(2358,'Cotopaxi','X',1064),(2359,'Chimborazo','H',1064),(2360,'El Oro','O',1064),(2361,'Esmeraldas','E',1064),(2362,'Galapagos','W',1064),(2363,'Guayas','G',1064),(2364,'Imbabura','I',1064),(2365,'Loja','L',1064),(2366,'Los Rios','R',1064),(2367,'Manabi','M',1064),(2368,'Morona-Santiago','S',1064),(2369,'Napo','N',1064),(2370,'Orellana','D',1064),(2371,'Pastaza','Y',1064),(2372,'Pichincha','P',1064),(2373,'Sucumbios','U',1064),(2374,'Tungurahua','T',1064),(2375,'Zamora-Chinchipe','Z',1064),(2376,'Harjumaa','37',1069),(2377,'Hiiumaa','39',1069),(2378,'Ida-Virumaa','44',1069),(2379,'Jõgevamaa','49',1069),(2380,'Järvamaa','51',1069),(2381,'Läänemaa','57',1069),(2382,'Lääne-Virumaa','59',1069),(2383,'Põlvamaa','65',1069),(2384,'Pärnumaa','67',1069),(2385,'Raplamaa','70',1069),(2386,'Saaremaa','74',1069),(2387,'Tartumaa','7B',1069),(2388,'Valgamaa','82',1069),(2389,'Viljandimaa','84',1069),(2390,'Võrumaa','86',1069),(2391,'Ad Daqahllyah','DK',1065),(2392,'Al Bahr al Ahmar','BA',1065),(2393,'Al Buhayrah','BH',1065),(2394,'Al Fayym','FYM',1065),(2395,'Al Gharbiyah','GH',1065),(2396,'Al Iskandarlyah','ALX',1065),(2397,'Al Isma illyah','IS',1065),(2398,'Al Jizah','GZ',1065),(2399,'Al Minuflyah','MNF',1065),(2400,'Al Minya','MN',1065),(2401,'Al Qahirah','C',1065),(2402,'Al Qalyublyah','KB',1065),(2403,'Al Wadi al Jadid','WAD',1065),(2404,'Ash Sharqiyah','SHR',1065),(2405,'As Suways','SUZ',1065),(2406,'Aswan','ASN',1065),(2407,'Asyut','AST',1065),(2408,'Bani Suwayf','BNS',1065),(2409,'Bur Sa\'id','PTS',1065),(2410,'Dumyat','DT',1065),(2411,'Janub Sina\'','JS',1065),(2412,'Kafr ash Shaykh','KFS',1065),(2413,'Matruh','MT',1065),(2414,'Qina','KN',1065),(2415,'Shamal Sina\'','SIN',1065),(2416,'Suhaj','SHG',1065),(2417,'Anseba','AN',1068),(2418,'Debub','DU',1068),(2419,'Debubawi Keyih Bahri [Debub-Keih-Bahri]','DK',1068),(2420,'Gash-Barka','GB',1068),(2421,'Maakel [Maekel]','MA',1068),(2422,'Semenawi Keyih Bahri [Semien-Keih-Bahri]','SK',1068),(2423,'Ãlava','VI',1198),(2424,'Albacete','AB',1198),(2425,'Alicante','A',1198),(2426,'AlmerÃa','AL',1198),(2427,'Asturias','O',1198),(2428,'Ãvila','AV',1198),(2429,'Badajoz','BA',1198),(2430,'Baleares','PM',1198),(2431,'Barcelona','B',1198),(2432,'Burgos','BU',1198),(2433,'Cáceres','CC',1198),(2434,'Cádiz','CA',1198),(2435,'Cantabria','S',1198),(2436,'Castellón','CS',1198),(2437,'Ciudad Real','CR',1198),(2438,'Cuenca','CU',1198),(2439,'Girona [Gerona]','GE',1198),(2440,'Granada','GR',1198),(2441,'Guadalajara','GU',1198),(2442,'Guipúzcoa','SS',1198),(2443,'Huelva','H',1198),(2444,'Huesca','HU',1198),(2445,'Jaén','J',1198),(2446,'La Coruña','C',1198),(2447,'La Rioja','LO',1198),(2448,'Las Palmas','GC',1198),(2449,'León','LE',1198),(2450,'Lleida [Lérida]','L',1198),(2451,'Lugo','LU',1198),(2452,'Madrid','M',1198),(2453,'Málaga','MA',1198),(2454,'Murcia','MU',1198),(2455,'Navarra','NA',1198),(2456,'Ourense','OR',1198),(2457,'Palencia','P',1198),(2458,'Pontevedra','PO',1198),(2459,'Salamanca','SA',1198),(2460,'Santa Cruz de Tenerife','TF',1198),(2461,'Segovia','SG',1198),(2462,'Sevilla','SE',1198),(2463,'Soria','SO',1198),(2464,'Tarragona','T',1198),(2465,'Teruel','TE',1198),(2466,'Valencia','V',1198),(2467,'Valladolid','VA',1198),(2468,'Vizcaya','BI',1198),(2469,'Zamora','ZA',1198),(2470,'Zaragoza','Z',1198),(2471,'Ceuta','CE',1198),(2472,'Melilla','ML',1198),(2473,'Addis Ababa','AA',1070),(2474,'Dire Dawa','DD',1070),(2475,'Afar','AF',1070),(2476,'Amara','AM',1070),(2477,'Benshangul-Gumaz','BE',1070),(2478,'Gambela Peoples','GA',1070),(2479,'Harari People','HA',1070),(2480,'Oromia','OR',1070),(2481,'Somali','SO',1070),(2482,'Southern Nations, Nationalities and Peoples','SN',1070),(2483,'Tigrai','TI',1070),(2490,'Eastern','E',1074),(2491,'Northern','N',1074),(2492,'Western','W',1074),(2493,'Rotuma','R',1074),(2494,'Chuuk','TRK',1141),(2495,'Kosrae','KSA',1141),(2496,'Pohnpei','PNI',1141),(2497,'Yap','YAP',1141),(2498,'Ain','01',1076),(2499,'Aisne','02',1076),(2500,'Allier','03',1076),(2501,'Alpes-de-Haute-Provence','04',1076),(2502,'Alpes-Maritimes','06',1076),(2503,'Ardèche','07',1076),(2504,'Ardennes','08',1076),(2505,'Ariège','09',1076),(2506,'Aube','10',1076),(2507,'Aude','11',1076),(2508,'Aveyron','12',1076),(2509,'Bas-Rhin','67',1076),(2510,'Bouches-du-Rhône','13',1076),(2511,'Calvados','14',1076),(2512,'Cantal','15',1076),(2513,'Charente','16',1076),(2514,'Charente-Maritime','17',1076),(2515,'Cher','18',1076),(2516,'Corrèze','19',1076),(2517,'Corse-du-Sud','20A',1076),(2518,'Côte-d\'Or','21',1076),(2519,'Côtes-d\'Armor','22',1076),(2520,'Creuse','23',1076),(2521,'Deux-Sèvres','79',1076),(2522,'Dordogne','24',1076),(2523,'Doubs','25',1076),(2524,'Drôme','26',1076),(2525,'Essonne','91',1076),(2526,'Eure','27',1076),(2527,'Eure-et-Loir','28',1076),(2528,'Finistère','29',1076),(2529,'Gard','30',1076),(2530,'Gers','32',1076),(2531,'Gironde','33',1076),(2532,'Haut-Rhin','68',1076),(2533,'Haute-Corse','20B',1076),(2534,'Haute-Garonne','31',1076),(2535,'Haute-Loire','43',1076),(2536,'Haute-Saône','70',1076),(2537,'Haute-Savoie','74',1076),(2538,'Haute-Vienne','87',1076),(2539,'Hautes-Alpes','05',1076),(2540,'Hautes-Pyrénées','65',1076),(2541,'Hauts-de-Seine','92',1076),(2542,'Hérault','34',1076),(2543,'Indre','36',1076),(2544,'Ille-et-Vilaine','35',1076),(2545,'Indre-et-Loire','37',1076),(2546,'Isère','38',1076),(2547,'Landes','40',1076),(2548,'Loir-et-Cher','41',1076),(2549,'Loire','42',1076),(2550,'Loire-Atlantique','44',1076),(2551,'Loiret','45',1076),(2552,'Lot','46',1076),(2553,'Lot-et-Garonne','47',1076),(2554,'Lozère','48',1076),(2555,'Maine-et-Loire','49',1076),(2556,'Manche','50',1076),(2557,'Marne','51',1076),(2558,'Mayenne','53',1076),(2559,'Meurthe-et-Moselle','54',1076),(2560,'Meuse','55',1076),(2561,'Morbihan','56',1076),(2562,'Moselle','57',1076),(2563,'Nièvre','58',1076),(2564,'Nord','59',1076),(2565,'Oise','60',1076),(2566,'Orne','61',1076),(2567,'Paris','75',1076),(2568,'Pas-de-Calais','62',1076),(2569,'Puy-de-Dôme','63',1076),(2570,'Pyrénées-Atlantiques','64',1076),(2571,'Pyrénées-Orientales','66',1076),(2572,'Rhône','69',1076),(2573,'Saône-et-Loire','71',1076),(2574,'Sarthe','72',1076),(2575,'Savoie','73',1076),(2576,'Seine-et-Marne','77',1076),(2577,'Seine-Maritime','76',1076),(2578,'Seine-Saint-Denis','93',1076),(2579,'Somme','80',1076),(2580,'Tarn','81',1076),(2581,'Tarn-et-Garonne','82',1076),(2582,'Val d\'Oise','95',1076),(2583,'Territoire de Belfort','90',1076),(2584,'Val-de-Marne','94',1076),(2585,'Var','83',1076),(2586,'Vaucluse','84',1076),(2587,'Vendée','85',1076),(2588,'Vienne','86',1076),(2589,'Vosges','88',1076),(2590,'Yonne','89',1076),(2591,'Yvelines','78',1076),(2592,'Aberdeen City','ABE',1226),(2593,'Aberdeenshire','ABD',1226),(2594,'Angus','ANS',1226),(2595,'Co Antrim','ANT',1226),(2597,'Argyll and Bute','AGB',1226),(2598,'Co Armagh','ARM',1226),(2606,'Bedfordshire','BDF',1226),(2612,'Blaenau Gwent','BGW',1226),(2620,'Bristol, City of','BST',1226),(2622,'Buckinghamshire','BKM',1226),(2626,'Cambridgeshire','CAM',1226),(2634,'Cheshire','CHS',1226),(2635,'Clackmannanshire','CLK',1226),(2639,'Cornwall','CON',1226),(2643,'Cumbria','CMA',1226),(2647,'Derbyshire','DBY',1226),(2648,'Co Londonderry','DRY',1226),(2649,'Devon','DEV',1226),(2651,'Dorset','DOR',1226),(2652,'Co Down','DOW',1226),(2654,'Dumfries and Galloway','DGY',1226),(2655,'Dundee City','DND',1226),(2657,'County Durham','DUR',1226),(2659,'East Ayrshire','EAY',1226),(2660,'East Dunbartonshire','EDU',1226),(2661,'East Lothian','ELN',1226),(2662,'East Renfrewshire','ERW',1226),(2663,'East Riding of Yorkshire','ERY',1226),(2664,'East Sussex','ESX',1226),(2665,'Edinburgh, City of','EDH',1226),(2666,'Na h-Eileanan Siar','ELS',1226),(2668,'Essex','ESS',1226),(2669,'Falkirk','FAL',1226),(2670,'Co Fermanagh','FER',1226),(2671,'Fife','FIF',1226),(2674,'Glasgow City','GLG',1226),(2675,'Gloucestershire','GLS',1226),(2678,'Gwynedd','GWN',1226),(2682,'Hampshire','HAM',1226),(2687,'Herefordshire','HEF',1226),(2688,'Hertfordshire','HRT',1226),(2689,'Highland','HED',1226),(2692,'Inverclyde','IVC',1226),(2694,'Isle of Wight','IOW',1226),(2699,'Kent','KEN',1226),(2705,'Lancashire','LAN',1226),(2709,'Leicestershire','LEC',1226),(2712,'Lincolnshire','LIN',1226),(2723,'Midlothian','MLN',1226),(2726,'Moray','MRY',1226),(2734,'Norfolk','NFK',1226),(2735,'North Ayrshire','NAY',1226),(2738,'North Lanarkshire','NLK',1226),(2742,'North Yorkshire','NYK',1226),(2743,'Northamptonshire','NTH',1226),(2744,'Northumberland','NBL',1226),(2746,'Nottinghamshire','NTT',1226),(2747,'Oldham','OLD',1226),(2748,'Omagh','OMH',1226),(2749,'Orkney Islands','ORR',1226),(2750,'Oxfordshire','OXF',1226),(2752,'Perth and Kinross','PKN',1226),(2757,'Powys','POW',1226),(2761,'Renfrewshire','RFW',1226),(2766,'Rutland','RUT',1226),(2770,'Scottish Borders','SCB',1226),(2773,'Shetland Islands','ZET',1226),(2774,'Shropshire','SHR',1226),(2777,'Somerset','SOM',1226),(2778,'South Ayrshire','SAY',1226),(2779,'South Gloucestershire','SGC',1226),(2780,'South Lanarkshire','SLK',1226),(2785,'Staffordshire','STS',1226),(2786,'Stirling','STG',1226),(2791,'Suffolk','SFK',1226),(2793,'Surrey','SRY',1226),(2804,'Vale of Glamorgan, The','VGL',1226),(2811,'Warwickshire','WAR',1226),(2813,'West Dunbartonshire','WDU',1226),(2814,'West Lothian','WLN',1226),(2815,'West Sussex','WSX',1226),(2818,'Wiltshire','WIL',1226),(2823,'Worcestershire','WOR',1226),(2826,'Ashanti','AH',1083),(2827,'Brong-Ahafo','BA',1083),(2828,'Greater Accra','AA',1083),(2829,'Upper East','UE',1083),(2830,'Upper West','UW',1083),(2831,'Volta','TV',1083),(2832,'Banjul','B',1213),(2833,'Lower River','L',1213),(2834,'MacCarthy Island','M',1213),(2835,'North Bank','N',1213),(2836,'Upper River','U',1213),(2837,'Beyla','BE',1091),(2838,'Boffa','BF',1091),(2839,'Boke','BK',1091),(2840,'Coyah','CO',1091),(2841,'Dabola','DB',1091),(2842,'Dalaba','DL',1091),(2843,'Dinguiraye','DI',1091),(2844,'Dubreka','DU',1091),(2845,'Faranah','FA',1091),(2846,'Forecariah','FO',1091),(2847,'Fria','FR',1091),(2848,'Gaoual','GA',1091),(2849,'Guekedou','GU',1091),(2850,'Kankan','KA',1091),(2851,'Kerouane','KE',1091),(2852,'Kindia','KD',1091),(2853,'Kissidougou','KS',1091),(2854,'Koubia','KB',1091),(2855,'Koundara','KN',1091),(2856,'Kouroussa','KO',1091),(2857,'Labe','LA',1091),(2858,'Lelouma','LE',1091),(2859,'Lola','LO',1091),(2860,'Macenta','MC',1091),(2861,'Mali','ML',1091),(2862,'Mamou','MM',1091),(2863,'Mandiana','MD',1091),(2864,'Nzerekore','NZ',1091),(2865,'Pita','PI',1091),(2866,'Siguiri','SI',1091),(2867,'Telimele','TE',1091),(2868,'Tougue','TO',1091),(2869,'Yomou','YO',1091),(2870,'Region Continental','C',1067),(2871,'Region Insular','I',1067),(2872,'Annobon','AN',1067),(2873,'Bioko Norte','BN',1067),(2874,'Bioko Sur','BS',1067),(2875,'Centro Sur','CS',1067),(2876,'Kie-Ntem','KN',1067),(2877,'Litoral','LI',1067),(2878,'Wele-Nzas','WN',1067),(2879,'Achaïa','13',1085),(2880,'Aitolia-Akarnania','01',1085),(2881,'Argolis','11',1085),(2882,'Arkadia','12',1085),(2883,'Arta','31',1085),(2884,'Attiki','A1',1085),(2885,'Chalkidiki','64',1085),(2886,'Chania','94',1085),(2887,'Chios','85',1085),(2888,'Dodekanisos','81',1085),(2889,'Drama','52',1085),(2890,'Evros','71',1085),(2891,'Evrytania','05',1085),(2892,'Evvoia','04',1085),(2893,'Florina','63',1085),(2894,'Fokis','07',1085),(2895,'Fthiotis','06',1085),(2896,'Grevena','51',1085),(2897,'Ileia','14',1085),(2898,'Imathia','53',1085),(2899,'Ioannina','33',1085),(2900,'Irakleion','91',1085),(2901,'Karditsa','41',1085),(2902,'Kastoria','56',1085),(2903,'Kavalla','55',1085),(2904,'Kefallinia','23',1085),(2905,'Kerkyra','22',1085),(2906,'Kilkis','57',1085),(2907,'Korinthia','15',1085),(2908,'Kozani','58',1085),(2909,'Kyklades','82',1085),(2910,'Lakonia','16',1085),(2911,'Larisa','42',1085),(2912,'Lasithion','92',1085),(2913,'Lefkas','24',1085),(2914,'Lesvos','83',1085),(2915,'Magnisia','43',1085),(2916,'Messinia','17',1085),(2917,'Pella','59',1085),(2918,'Preveza','34',1085),(2919,'Rethymnon','93',1085),(2920,'Rodopi','73',1085),(2921,'Samos','84',1085),(2922,'Serrai','62',1085),(2923,'Thesprotia','32',1085),(2924,'Thessaloniki','54',1085),(2925,'Trikala','44',1085),(2926,'Voiotia','03',1085),(2927,'Xanthi','72',1085),(2928,'Zakynthos','21',1085),(2929,'Agio Oros','69',1085),(2930,'Alta Verapaz','AV',1090),(2931,'Baja Verapaz','BV',1090),(2932,'Chimaltenango','CM',1090),(2933,'Chiquimula','CQ',1090),(2934,'El Progreso','PR',1090),(2935,'Escuintla','ES',1090),(2936,'Guatemala','GU',1090),(2937,'Huehuetenango','HU',1090),(2938,'Izabal','IZ',1090),(2939,'Jalapa','JA',1090),(2940,'Jutiapa','JU',1090),(2941,'Peten','PE',1090),(2942,'Quetzaltenango','QZ',1090),(2943,'Quiche','QC',1090),(2944,'Retalhuleu','RE',1090),(2945,'Sacatepequez','SA',1090),(2946,'San Marcos','SM',1090),(2947,'Santa Rosa','SR',1090),(2948,'Sololá','SO',1090),(2949,'Suchitepequez','SU',1090),(2950,'Totonicapan','TO',1090),(2951,'Zacapa','ZA',1090),(2952,'Bissau','BS',1092),(2953,'Bafata','BA',1092),(2954,'Biombo','BM',1092),(2955,'Bolama','BL',1092),(2956,'Cacheu','CA',1092),(2957,'Gabu','GA',1092),(2958,'Oio','OI',1092),(2959,'Quloara','QU',1092),(2960,'Tombali S','TO',1092),(2961,'Barima-Waini','BA',1093),(2962,'Cuyuni-Mazaruni','CU',1093),(2963,'Demerara-Mahaica','DE',1093),(2964,'East Berbice-Corentyne','EB',1093),(2965,'Essequibo Islands-West Demerara','ES',1093),(2966,'Mahaica-Berbice','MA',1093),(2967,'Pomeroon-Supenaam','PM',1093),(2968,'Potaro-Siparuni','PT',1093),(2969,'Upper Demerara-Berbice','UD',1093),(2970,'Upper Takutu-Upper Essequibo','UT',1093),(2971,'Atlantida','AT',1097),(2972,'Colon','CL',1097),(2973,'Comayagua','CM',1097),(2974,'Copan','CP',1097),(2975,'Cortes','CR',1097),(2976,'Choluteca','CH',1097),(2977,'El Paraiso','EP',1097),(2978,'Francisco Morazan','FM',1097),(2979,'Gracias a Dios','GD',1097),(2980,'Intibuca','IN',1097),(2981,'Islas de la Bahia','IB',1097),(2982,'Lempira','LE',1097),(2983,'Ocotepeque','OC',1097),(2984,'Olancho','OL',1097),(2985,'Santa Barbara','SB',1097),(2986,'Valle','VA',1097),(2987,'Yoro','YO',1097),(2988,'Bjelovarsko-bilogorska zupanija','07',1055),(2989,'Brodsko-posavska zupanija','12',1055),(2990,'Dubrovacko-neretvanska zupanija','19',1055),(2991,'Istarska zupanija','18',1055),(2992,'Karlovacka zupanija','04',1055),(2993,'Koprivnickco-krizevacka zupanija','06',1055),(2994,'Krapinako-zagorska zupanija','02',1055),(2995,'Licko-senjska zupanija','09',1055),(2996,'Medimurska zupanija','20',1055),(2997,'Osjecko-baranjska zupanija','14',1055),(2998,'Pozesko-slavonska zupanija','11',1055),(2999,'Primorsko-goranska zupanija','08',1055),(3000,'Sisacko-moelavacka Iupanija','03',1055),(3001,'Splitako-dalmatinska zupanija','17',1055),(3002,'Sibenako-kninska zupanija','15',1055),(3003,'Varaidinska zupanija','05',1055),(3004,'VirovitiEko-podravska zupanija','10',1055),(3005,'VuRovarako-srijemska zupanija','16',1055),(3006,'Zadaraka','13',1055),(3007,'Zagrebacka zupanija','01',1055),(3008,'Grande-Anse','GA',1094),(3009,'Nord-Est','NE',1094),(3010,'Nord-Ouest','NO',1094),(3011,'Ouest','OU',1094),(3012,'Sud','SD',1094),(3013,'Sud-Est','SE',1094),(3014,'Budapest','BU',1099),(3015,'Bács-Kiskun','BK',1099),(3016,'Baranya','BA',1099),(3017,'Békés','BE',1099),(3018,'Borsod-Abaúj-Zemplén','BZ',1099),(3019,'Csongrád','CS',1099),(3020,'Fejér','FE',1099),(3021,'GyÅ‘r-Moson-Sopron','GS',1099),(3022,'Hajdu-Bihar','HB',1099),(3023,'Heves','HE',1099),(3024,'Jász-Nagykun-Szolnok','JN',1099),(3025,'Komárom-Esztergom','KE',1099),(3026,'Nográd','NO',1099),(3027,'Pest','PE',1099),(3028,'Somogy','SO',1099),(3029,'Szabolcs-Szatmár-Bereg','SZ',1099),(3030,'Tolna','TO',1099),(3031,'Vas','VA',1099),(3032,'Veszprém','VE',1099),(3033,'Zala','ZA',1099),(3034,'Békéscsaba','BC',1099),(3035,'Debrecen','DE',1099),(3036,'Dunaújváros','DU',1099),(3037,'Eger','EG',1099),(3038,'GyÅ‘r','GY',1099),(3039,'HódmezÅ‘vásárhely','HV',1099),(3040,'Kaposvár','KV',1099),(3041,'Kecskemét','KM',1099),(3042,'Miskolc','MI',1099),(3043,'Nagykanizsa','NK',1099),(3044,'Nyiregyháza','NY',1099),(3045,'Pécs','PS',1099),(3046,'Salgótarján','ST',1099),(3047,'Sopron','SN',1099),(3048,'Szeged','SD',1099),(3049,'Székesfehérvár','SF',1099),(3050,'Szekszárd','SS',1099),(3051,'Szolnok','SK',1099),(3052,'Szombathely','SH',1099),(3053,'Tatabánya','TB',1099),(3054,'Zalaegerszeg','ZE',1099),(3055,'Bali','BA',1102),(3056,'Kepulauan Bangka Belitung','BB',1102),(3057,'Banten','BT',1102),(3058,'Bengkulu','BE',1102),(3059,'Gorontalo','GO',1102),(3060,'Papua Barat','PB',1102),(3061,'Jambi','JA',1102),(3062,'Jawa Barat','JB',1102),(3063,'Jawa Tengah','JT',1102),(3064,'Jawa Timur','JI',1102),(3065,'Kalimantan Barat','KB',1102),(3066,'Kalimantan Timur','KI',1102),(3067,'Kalimantan Selatan','KS',1102),(3068,'Kepulauan Riau','KR',1102),(3069,'Lampung','LA',1102),(3070,'Maluku','MA',1102),(3071,'Maluku Utara','MU',1102),(3072,'Nusa Tenggara Barat','NB',1102),(3073,'Nusa Tenggara Timur','NT',1102),(3074,'Papua','PA',1102),(3075,'Riau','RI',1102),(3076,'Sulawesi Selatan','SN',1102),(3077,'Sulawesi Tengah','ST',1102),(3078,'Sulawesi Tenggara','SG',1102),(3079,'Sulawesi Utara','SA',1102),(3080,'Sumatra Barat','SB',1102),(3081,'Sumatra Selatan','SS',1102),(3082,'Sumatera Utara','SU',1102),(3083,'DKI Jakarta','JK',1102),(3084,'Aceh','AC',1102),(3085,'DI Yogyakarta','YO',1102),(3086,'Cork','C',1105),(3087,'Clare','CE',1105),(3088,'Cavan','CN',1105),(3089,'Carlow','CW',1105),(3090,'Dublin','D',1105),(3091,'Donegal','DL',1105),(3092,'Galway','G',1105),(3093,'Kildare','KE',1105),(3094,'Kilkenny','KK',1105),(3095,'Kerry','KY',1105),(3096,'Longford','LD',1105),(3097,'Louth','LH',1105),(3098,'Limerick','LK',1105),(3099,'Leitrim','LM',1105),(3100,'Laois','LS',1105),(3101,'Meath','MH',1105),(3102,'Monaghan','MN',1105),(3103,'Mayo','MO',1105),(3104,'Offaly','OY',1105),(3105,'Roscommon','RN',1105),(3106,'Sligo','SO',1105),(3107,'Tipperary','TA',1105),(3108,'Waterford','WD',1105),(3109,'Westmeath','WH',1105),(3110,'Wicklow','WW',1105),(3111,'Wexford','WX',1105),(3112,'HaDarom','D',1106),(3113,'HaMerkaz','M',1106),(3114,'HaZafon','Z',1106),(3115,'Haifa','HA',1106),(3116,'Tel-Aviv','TA',1106),(3117,'Jerusalem','JM',1106),(3118,'Al Anbar','AN',1104),(3119,'Al Ba,rah','BA',1104),(3120,'Al Muthanna','MU',1104),(3121,'Al Qadisiyah','QA',1104),(3122,'An Najef','NA',1104),(3123,'Arbil','AR',1104),(3124,'As Sulaymaniyah','SW',1104),(3125,'At Ta\'mim','TS',1104),(3126,'Babil','BB',1104),(3127,'Baghdad','BG',1104),(3128,'Dahuk','DA',1104),(3129,'Dhi Qar','DQ',1104),(3130,'Diyala','DI',1104),(3131,'Karbala\'','KA',1104),(3132,'Maysan','MA',1104),(3133,'Ninawa','NI',1104),(3134,'Salah ad Din','SD',1104),(3135,'Wasit','WA',1104),(3136,'Ardabil','03',1103),(3137,'Azarbayjan-e Gharbi','02',1103),(3138,'Azarbayjan-e Sharqi','01',1103),(3139,'Bushehr','06',1103),(3140,'Chahar Mahall va Bakhtiari','08',1103),(3141,'Esfahan','04',1103),(3142,'Fars','14',1103),(3143,'Gilan','19',1103),(3144,'Golestan','27',1103),(3145,'Hamadan','24',1103),(3146,'Hormozgan','23',1103),(3147,'Iiam','05',1103),(3148,'Kerman','15',1103),(3149,'Kermanshah','17',1103),(3150,'Khorasan','09',1103),(3151,'Khuzestan','10',1103),(3152,'Kohjiluyeh va Buyer Ahmad','18',1103),(3153,'Kordestan','16',1103),(3154,'Lorestan','20',1103),(3155,'Markazi','22',1103),(3156,'Mazandaran','21',1103),(3157,'Qazvin','28',1103),(3158,'Qom','26',1103),(3159,'Semnan','12',1103),(3160,'Sistan va Baluchestan','13',1103),(3161,'Tehran','07',1103),(3162,'Yazd','25',1103),(3163,'Zanjan','11',1103),(3164,'Austurland','7',1100),(3165,'Hofuoborgarsvaeoi utan Reykjavikur','1',1100),(3166,'Norourland eystra','6',1100),(3167,'Norourland vestra','5',1100),(3168,'Reykjavik','0',1100),(3169,'Suourland','8',1100),(3170,'Suournes','2',1100),(3171,'Vestfirolr','4',1100),(3172,'Vesturland','3',1100),(3173,'Agrigento','AG',1107),(3174,'Alessandria','AL',1107),(3175,'Ancona','AN',1107),(3176,'Aosta','AO',1107),(3177,'Arezzo','AR',1107),(3178,'Ascoli Piceno','AP',1107),(3179,'Asti','AT',1107),(3180,'Avellino','AV',1107),(3181,'Bari','BA',1107),(3182,'Belluno','BL',1107),(3183,'Benevento','BN',1107),(3184,'Bergamo','BG',1107),(3185,'Biella','BI',1107),(3186,'Bologna','BO',1107),(3187,'Bolzano','BZ',1107),(3188,'Brescia','BS',1107),(3189,'Brindisi','BR',1107),(3190,'Cagliari','CA',1107),(3191,'Caltanissetta','CL',1107),(3192,'Campobasso','CB',1107),(3193,'Caserta','CE',1107),(3194,'Catania','CT',1107),(3195,'Catanzaro','CZ',1107),(3196,'Chieti','CH',1107),(3197,'Como','CO',1107),(3198,'Cosenza','CS',1107),(3199,'Cremona','CR',1107),(3200,'Crotone','KR',1107),(3201,'Cuneo','CN',1107),(3202,'Enna','EN',1107),(3203,'Ferrara','FE',1107),(3204,'Firenze','FI',1107),(3205,'Foggia','FG',1107),(3206,'Forlì-Cesena','FC',1107),(3207,'Frosinone','FR',1107),(3208,'Genova','GE',1107),(3209,'Gorizia','GO',1107),(3210,'Grosseto','GR',1107),(3211,'Imperia','IM',1107),(3212,'Isernia','IS',1107),(3213,'L\'Aquila','AQ',1107),(3214,'La Spezia','SP',1107),(3215,'Latina','LT',1107),(3216,'Lecce','LE',1107),(3217,'Lecco','LC',1107),(3218,'Livorno','LI',1107),(3219,'Lodi','LO',1107),(3220,'Lucca','LU',1107),(3221,'Macerata','MC',1107),(3222,'Mantova','MN',1107),(3223,'Massa-Carrara','MS',1107),(3224,'Matera','MT',1107),(3225,'Messina','ME',1107),(3226,'Milano','MI',1107),(3227,'Modena','MO',1107),(3228,'Napoli','NA',1107),(3229,'Novara','NO',1107),(3230,'Nuoro','NU',1107),(3231,'Oristano','OR',1107),(3232,'Padova','PD',1107),(3233,'Palermo','PA',1107),(3234,'Parma','PR',1107),(3235,'Pavia','PV',1107),(3236,'Perugia','PG',1107),(3237,'Pesaro e Urbino','PU',1107),(3238,'Pescara','PE',1107),(3239,'Piacenza','PC',1107),(3240,'Pisa','PI',1107),(3241,'Pistoia','PT',1107),(3242,'Pordenone','PN',1107),(3243,'Potenza','PZ',1107),(3244,'Prato','PO',1107),(3245,'Ragusa','RG',1107),(3246,'Ravenna','RA',1107),(3247,'Reggio Calabria','RC',1107),(3248,'Reggio Emilia','RE',1107),(3249,'Rieti','RI',1107),(3250,'Rimini','RN',1107),(3251,'Roma','RM',1107),(3252,'Rovigo','RO',1107),(3253,'Salerno','SA',1107),(3254,'Sassari','SS',1107),(3255,'Savona','SV',1107),(3256,'Siena','SI',1107),(3257,'Siracusa','SR',1107),(3258,'Sondrio','SO',1107),(3259,'Taranto','TA',1107),(3260,'Teramo','TE',1107),(3261,'Terni','TR',1107),(3262,'Torino','TO',1107),(3263,'Trapani','TP',1107),(3264,'Trento','TN',1107),(3265,'Treviso','TV',1107),(3266,'Trieste','TS',1107),(3267,'Udine','UD',1107),(3268,'Varese','VA',1107),(3269,'Venezia','VE',1107),(3270,'Verbano-Cusio-Ossola','VB',1107),(3271,'Vercelli','VC',1107),(3272,'Verona','VR',1107),(3273,'Vibo Valentia','VV',1107),(3274,'Vicenza','VI',1107),(3275,'Viterbo','VT',1107),(3276,'Aichi','23',1109),(3277,'Akita','05',1109),(3278,'Aomori','02',1109),(3279,'Chiba','12',1109),(3280,'Ehime','38',1109),(3281,'Fukui','18',1109),(3282,'Fukuoka','40',1109),(3283,'Fukusima','07',1109),(3284,'Gifu','21',1109),(3285,'Gunma','10',1109),(3286,'Hiroshima','34',1109),(3287,'Hokkaido','01',1109),(3288,'Hyogo','28',1109),(3289,'Ibaraki','08',1109),(3290,'Ishikawa','17',1109),(3291,'Iwate','03',1109),(3292,'Kagawa','37',1109),(3293,'Kagoshima','46',1109),(3294,'Kanagawa','14',1109),(3295,'Kochi','39',1109),(3296,'Kumamoto','43',1109),(3297,'Kyoto','26',1109),(3298,'Mie','24',1109),(3299,'Miyagi','04',1109),(3300,'Miyazaki','45',1109),(3301,'Nagano','20',1109),(3302,'Nagasaki','42',1109),(3303,'Nara','29',1109),(3304,'Niigata','15',1109),(3305,'Oita','44',1109),(3306,'Okayama','33',1109),(3307,'Okinawa','47',1109),(3308,'Osaka','27',1109),(3309,'Saga','41',1109),(3310,'Saitama','11',1109),(3311,'Shiga','25',1109),(3312,'Shimane','32',1109),(3313,'Shizuoka','22',1109),(3314,'Tochigi','09',1109),(3315,'Tokushima','36',1109),(3316,'Tokyo','13',1109),(3317,'Tottori','31',1109),(3318,'Toyama','16',1109),(3319,'Wakayama','30',1109),(3320,'Yamagata','06',1109),(3321,'Yamaguchi','35',1109),(3322,'Yamanashi','19',1109),(3323,'Clarendon','CN',1108),(3324,'Hanover','HR',1108),(3325,'Kingston','KN',1108),(3326,'Portland','PD',1108),(3327,'Saint Andrew','AW',1108),(3328,'Saint Ann','AN',1108),(3329,'Saint Catherine','CE',1108),(3330,'Saint Elizabeth','EH',1108),(3331,'Saint James','JS',1108),(3332,'Saint Mary','MY',1108),(3333,'Saint Thomas','TS',1108),(3334,'Trelawny','TY',1108),(3335,'Westmoreland','WD',1108),(3336,'Ajln','AJ',1110),(3337,'Al \'Aqaba','AQ',1110),(3338,'Al Balqa\'','BA',1110),(3339,'Al Karak','KA',1110),(3340,'Al Mafraq','MA',1110),(3341,'Amman','AM',1110),(3342,'At Tafilah','AT',1110),(3343,'Az Zarga','AZ',1110),(3344,'Irbid','JR',1110),(3345,'Jarash','JA',1110),(3346,'Ma\'an','MN',1110),(3347,'Madaba','MD',1110),(3353,'Bishkek','GB',1117),(3354,'Batken','B',1117),(3355,'Chu','C',1117),(3356,'Jalal-Abad','J',1117),(3357,'Naryn','N',1117),(3358,'Osh','O',1117),(3359,'Talas','T',1117),(3360,'Ysyk-Kol','Y',1117),(3361,'Krong Kaeb','23',1037),(3362,'Krong Pailin','24',1037),(3363,'Xrong Preah Sihanouk','18',1037),(3364,'Phnom Penh','12',1037),(3365,'Baat Dambang','2',1037),(3366,'Banteay Mean Chey','1',1037),(3367,'Rampong Chaam','3',1037),(3368,'Kampong Chhnang','4',1037),(3369,'Kampong Spueu','5',1037),(3370,'Kampong Thum','6',1037),(3371,'Kampot','7',1037),(3372,'Kandaal','8',1037),(3373,'Kach Kong','9',1037),(3374,'Krachoh','10',1037),(3375,'Mondol Kiri','11',1037),(3376,'Otdar Mean Chey','22',1037),(3377,'Pousaat','15',1037),(3378,'Preah Vihear','13',1037),(3379,'Prey Veaeng','14',1037),(3380,'Rotanak Kiri','16',1037),(3381,'Siem Reab','17',1037),(3382,'Stueng Traeng','19',1037),(3383,'Svaay Rieng','20',1037),(3384,'Taakaev','21',1037),(3385,'Gilbert Islands','G',1113),(3386,'Line Islands','L',1113),(3387,'Phoenix Islands','P',1113),(3388,'Anjouan Ndzouani','A',1049),(3389,'Grande Comore Ngazidja','G',1049),(3390,'Moheli Moili','M',1049),(3391,'Kaesong-si','KAE',1114),(3392,'Nampo-si','NAM',1114),(3393,'Pyongyang-ai','PYO',1114),(3394,'Chagang-do','CHA',1114),(3395,'Hamgyongbuk-do','HAB',1114),(3396,'Hamgyongnam-do','HAN',1114),(3397,'Hwanghaebuk-do','HWB',1114),(3398,'Hwanghaenam-do','HWN',1114),(3399,'Kangwon-do','KAN',1114),(3400,'Pyonganbuk-do','PYB',1114),(3401,'Pyongannam-do','PYN',1114),(3402,'Yanggang-do','YAN',1114),(3403,'Najin Sonbong-si','NAJ',1114),(3404,'Seoul Teugbyeolsi','11',1115),(3405,'Busan Gwang\'yeogsi','26',1115),(3406,'Daegu Gwang\'yeogsi','27',1115),(3407,'Daejeon Gwang\'yeogsi','30',1115),(3408,'Gwangju Gwang\'yeogsi','29',1115),(3409,'Incheon Gwang\'yeogsi','28',1115),(3410,'Ulsan Gwang\'yeogsi','31',1115),(3411,'Chungcheongbugdo','43',1115),(3412,'Chungcheongnamdo','44',1115),(3413,'Gang\'weondo','42',1115),(3414,'Gyeonggido','41',1115),(3415,'Gyeongsangbugdo','47',1115),(3416,'Gyeongsangnamdo','48',1115),(3417,'Jejudo','49',1115),(3418,'Jeonrabugdo','45',1115),(3419,'Jeonranamdo','46',1115),(3420,'Al Ahmadi','AH',1116),(3421,'Al Farwanlyah','FA',1116),(3422,'Al Jahrah','JA',1116),(3423,'Al Kuwayt','KU',1116),(3424,'Hawalli','HA',1116),(3425,'Almaty','ALA',1111),(3426,'Astana','AST',1111),(3427,'Almaty oblysy','ALM',1111),(3428,'Aqmola oblysy','AKM',1111),(3429,'Aqtobe oblysy','AKT',1111),(3430,'Atyrau oblyfiy','ATY',1111),(3431,'Batys Quzaqstan oblysy','ZAP',1111),(3432,'Mangghystau oblysy','MAN',1111),(3433,'Ongtustik Quzaqstan oblysy','YUZ',1111),(3434,'Pavlodar oblysy','PAV',1111),(3435,'Qaraghandy oblysy','KAR',1111),(3436,'Qostanay oblysy','KUS',1111),(3437,'Qyzylorda oblysy','KZY',1111),(3438,'Shyghys Quzaqstan oblysy','VOS',1111),(3439,'Soltustik Quzaqstan oblysy','SEV',1111),(3440,'Zhambyl oblysy Zhambylskaya oblast\'','ZHA',1111),(3441,'Vientiane','VT',1118),(3442,'Attapu','AT',1118),(3443,'Bokeo','BK',1118),(3444,'Bolikhamxai','BL',1118),(3445,'Champasak','CH',1118),(3446,'Houaphan','HO',1118),(3447,'Khammouan','KH',1118),(3448,'Louang Namtha','LM',1118),(3449,'Louangphabang','LP',1118),(3450,'Oudomxai','OU',1118),(3451,'Phongsali','PH',1118),(3452,'Salavan','SL',1118),(3453,'Savannakhet','SV',1118),(3454,'Xaignabouli','XA',1118),(3455,'Xiasomboun','XN',1118),(3456,'Xekong','XE',1118),(3457,'Xiangkhoang','XI',1118),(3458,'Beirut','BA',1120),(3459,'Beqaa','BI',1120),(3460,'Mount Lebanon','JL',1120),(3461,'North Lebanon','AS',1120),(3462,'South Lebanon','JA',1120),(3463,'Nabatieh','NA',1120),(3464,'Ampara','52',1199),(3465,'Anuradhapura','71',1199),(3466,'Badulla','81',1199),(3467,'Batticaloa','51',1199),(3468,'Colombo','11',1199),(3469,'Galle','31',1199),(3470,'Gampaha','12',1199),(3471,'Hambantota','33',1199),(3472,'Jaffna','41',1199),(3473,'Kalutara','13',1199),(3474,'Kandy','21',1199),(3475,'Kegalla','92',1199),(3476,'Kilinochchi','42',1199),(3477,'Kurunegala','61',1199),(3478,'Mannar','43',1199),(3479,'Matale','22',1199),(3480,'Matara','32',1199),(3481,'Monaragala','82',1199),(3482,'Mullaittivu','45',1199),(3483,'Nuwara Eliya','23',1199),(3484,'Polonnaruwa','72',1199),(3485,'Puttalum','62',1199),(3486,'Ratnapura','91',1199),(3487,'Trincomalee','53',1199),(3488,'VavunLya','44',1199),(3489,'Bomi','BM',1122),(3490,'Bong','BG',1122),(3491,'Grand Basaa','GB',1122),(3492,'Grand Cape Mount','CM',1122),(3493,'Grand Gedeh','GG',1122),(3494,'Grand Kru','GK',1122),(3495,'Lofa','LO',1122),(3496,'Margibi','MG',1122),(3497,'Maryland','MY',1122),(3498,'Montserrado','MO',1122),(3499,'Nimba','NI',1122),(3500,'Rivercess','RI',1122),(3501,'Sinoe','SI',1122),(3502,'Berea','D',1121),(3503,'Butha-Buthe','B',1121),(3504,'Leribe','C',1121),(3505,'Mafeteng','E',1121),(3506,'Maseru','A',1121),(3507,'Mohale\'s Hoek','F',1121),(3508,'Mokhotlong','J',1121),(3509,'Qacha\'s Nek','H',1121),(3510,'Quthing','G',1121),(3511,'Thaba-Tseka','K',1121),(3512,'Alytaus Apskritis','AL',1125),(3513,'Kauno Apskritis','KU',1125),(3514,'KlaipÄ—dos Apskritis','KL',1125),(3515,'MarijampolÄ—s Apskritis','MR',1125),(3516,'Panevėžio Apskritis','PN',1125),(3517,'Å iaulių Apskritis','SA',1125),(3518,'TauragÄ—s Apskritis','TA',1125),(3519,'TelÅ¡ių Apskritis','TE',1125),(3520,'Utenos Apskritis','UT',1125),(3521,'Vilniaus Apskritis','VL',1125),(3522,'Diekirch','D',1126),(3523,'GreveNmacher','G',1126),(3550,'Daugavpils','DGV',1119),(3551,'Jelgava','JEL',1119),(3552,'JÅ«rmala','JUR',1119),(3553,'LiepÄja','LPX',1119),(3554,'RÄ“zekne','REZ',1119),(3555,'RÄ«ga','RIX',1119),(3556,'Ventspils','VEN',1119),(3557,'AjdÄbiyÄ','AJ',1123),(3558,'Al BuÅ£nÄn','BU',1123),(3559,'Al HizÄm al Akhdar','HZ',1123),(3560,'Al Jabal al Akhdar','JA',1123),(3561,'Al JifÄrah','JI',1123),(3562,'Al Jufrah','JU',1123),(3563,'Al Kufrah','KF',1123),(3564,'Al Marj','MJ',1123),(3565,'Al Marqab','MB',1123),(3566,'Al QaÅ£rÅ«n','QT',1123),(3567,'Al Qubbah','QB',1123),(3568,'Al WÄhah','WA',1123),(3569,'An NuqaÅ£ al Khams','NQ',1123),(3570,'Ash ShÄÅ£i\'','SH',1123),(3571,'Az ZÄwiyah','ZA',1123),(3572,'BanghÄzÄ«','BA',1123),(3573,'BanÄ« WalÄ«d','BW',1123),(3574,'Darnah','DR',1123),(3575,'GhadÄmis','GD',1123),(3576,'GharyÄn','GR',1123),(3577,'GhÄt','GT',1123),(3578,'JaghbÅ«b','JB',1123),(3579,'MiÅŸrÄtah','MI',1123),(3580,'Mizdah','MZ',1123),(3581,'Murzuq','MQ',1123),(3582,'NÄlÅ«t','NL',1123),(3583,'SabhÄ','SB',1123),(3584,'ÅžabrÄtah ÅžurmÄn','SS',1123),(3585,'Surt','SR',1123),(3586,'TÄjÅ«rÄ\' wa an NawÄhÄ« al ArbÄh','TN',1123),(3587,'Å¢arÄbulus','TB',1123),(3588,'TarhÅ«nah-MasallÄtah','TM',1123),(3589,'WÄdÄ« al hayÄt','WD',1123),(3590,'Yafran-JÄdÅ«','YJ',1123),(3591,'Agadir','AGD',1146),(3592,'Aït Baha','BAH',1146),(3593,'Aït Melloul','MEL',1146),(3594,'Al Haouz','HAO',1146),(3595,'Al Hoceïma','HOC',1146),(3596,'Assa-Zag','ASZ',1146),(3597,'Azilal','AZI',1146),(3598,'Beni Mellal','BEM',1146),(3599,'Ben Sllmane','BES',1146),(3600,'Berkane','BER',1146),(3601,'Boujdour','BOD',1146),(3602,'Boulemane','BOM',1146),(3603,'Casablanca [Dar el Beïda]','CAS',1146),(3604,'Chefchaouene','CHE',1146),(3605,'Chichaoua','CHI',1146),(3606,'El Hajeb','HAJ',1146),(3607,'El Jadida','JDI',1146),(3608,'Errachidia','ERR',1146),(3609,'Essaouira','ESI',1146),(3610,'Es Smara','ESM',1146),(3611,'Fès','FES',1146),(3612,'Figuig','FIG',1146),(3613,'Guelmim','GUE',1146),(3614,'Ifrane','IFR',1146),(3615,'Jerada','JRA',1146),(3616,'Kelaat Sraghna','KES',1146),(3617,'Kénitra','KEN',1146),(3618,'Khemisaet','KHE',1146),(3619,'Khenifra','KHN',1146),(3620,'Khouribga','KHO',1146),(3621,'Laâyoune (EH)','LAA',1146),(3622,'Larache','LAP',1146),(3623,'Marrakech','MAR',1146),(3624,'Meknsès','MEK',1146),(3625,'Nador','NAD',1146),(3626,'Ouarzazate','OUA',1146),(3627,'Oued ed Dahab (EH)','OUD',1146),(3628,'Oujda','OUJ',1146),(3629,'Rabat-Salé','RBA',1146),(3630,'Safi','SAF',1146),(3631,'Sefrou','SEF',1146),(3632,'Settat','SET',1146),(3633,'Sidl Kacem','SIK',1146),(3634,'Tanger','TNG',1146),(3635,'Tan-Tan','TNT',1146),(3636,'Taounate','TAO',1146),(3637,'Taroudannt','TAR',1146),(3638,'Tata','TAT',1146),(3639,'Taza','TAZ',1146),(3640,'Tétouan','TET',1146),(3641,'Tiznit','TIZ',1146),(3642,'Gagauzia, Unitate Teritoriala Autonoma','GA',1142),(3643,'Chisinau','CU',1142),(3644,'Stinga Nistrului, unitatea teritoriala din','SN',1142),(3645,'Balti','BA',1142),(3646,'Cahul','CA',1142),(3647,'Edinet','ED',1142),(3648,'Lapusna','LA',1142),(3649,'Orhei','OR',1142),(3650,'Soroca','SO',1142),(3651,'Taraclia','TA',1142),(3652,'Tighina [Bender]','TI',1142),(3653,'Ungheni','UN',1142),(3654,'Antananarivo','T',1129),(3655,'Antsiranana','D',1129),(3656,'Fianarantsoa','F',1129),(3657,'Mahajanga','M',1129),(3658,'Toamasina','A',1129),(3659,'Toliara','U',1129),(3660,'Ailinglapalap','ALL',1135),(3661,'Ailuk','ALK',1135),(3662,'Arno','ARN',1135),(3663,'Aur','AUR',1135),(3664,'Ebon','EBO',1135),(3665,'Eniwetok','ENI',1135),(3666,'Jaluit','JAL',1135),(3667,'Kili','KIL',1135),(3668,'Kwajalein','KWA',1135),(3669,'Lae','LAE',1135),(3670,'Lib','LIB',1135),(3671,'Likiep','LIK',1135),(3672,'Majuro','MAJ',1135),(3673,'Maloelap','MAL',1135),(3674,'Mejit','MEJ',1135),(3675,'Mili','MIL',1135),(3676,'Namorik','NMK',1135),(3677,'Namu','NMU',1135),(3678,'Rongelap','RON',1135),(3679,'Ujae','UJA',1135),(3680,'Ujelang','UJL',1135),(3681,'Utirik','UTI',1135),(3682,'Wotho','WTN',1135),(3683,'Wotje','WTJ',1135),(3684,'Bamako','BK0',1133),(3685,'Gao','7',1133),(3686,'Kayes','1',1133),(3687,'Kidal','8',1133),(3688,'Xoulikoro','2',1133),(3689,'Mopti','5',1133),(3690,'S69ou','4',1133),(3691,'Sikasso','3',1133),(3692,'Tombouctou','6',1133),(3693,'Ayeyarwady','07',1035),(3694,'Bago','02',1035),(3695,'Magway','03',1035),(3696,'Mandalay','04',1035),(3697,'Sagaing','01',1035),(3698,'Tanintharyi','05',1035),(3699,'Yangon','06',1035),(3700,'Chin','14',1035),(3701,'Kachin','11',1035),(3702,'Kayah','12',1035),(3703,'Kayin','13',1035),(3704,'Mon','15',1035),(3705,'Rakhine','16',1035),(3706,'Shan','17',1035),(3707,'Ulaanbaatar','1',1144),(3708,'Arhangay','073',1144),(3709,'Bayanhongor','069',1144),(3710,'Bayan-Olgiy','071',1144),(3711,'Bulgan','067',1144),(3712,'Darhan uul','037',1144),(3713,'Dornod','061',1144),(3714,'Dornogov,','063',1144),(3715,'DundgovL','059',1144),(3716,'Dzavhan','057',1144),(3717,'Govi-Altay','065',1144),(3718,'Govi-Smber','064',1144),(3719,'Hentiy','039',1144),(3720,'Hovd','043',1144),(3721,'Hovsgol','041',1144),(3722,'Omnogovi','053',1144),(3723,'Orhon','035',1144),(3724,'Ovorhangay','055',1144),(3725,'Selenge','049',1144),(3726,'Shbaatar','051',1144),(3727,'Tov','047',1144),(3728,'Uvs','046',1144),(3729,'Nouakchott','NKC',1137),(3730,'Assaba','03',1137),(3731,'Brakna','05',1137),(3732,'Dakhlet Nouadhibou','08',1137),(3733,'Gorgol','04',1137),(3734,'Guidimaka','10',1137),(3735,'Hodh ech Chargui','01',1137),(3736,'Hodh el Charbi','02',1137),(3737,'Inchiri','12',1137),(3738,'Tagant','09',1137),(3739,'Tiris Zemmour','11',1137),(3740,'Trarza','06',1137),(3741,'Beau Bassin-Rose Hill','BR',1138),(3742,'Curepipe','CU',1138),(3743,'Port Louis','PU',1138),(3744,'Quatre Bornes','QB',1138),(3745,'Vacosa-Phoenix','VP',1138),(3746,'Black River','BL',1138),(3747,'Flacq','FL',1138),(3748,'Grand Port','GP',1138),(3749,'Moka','MO',1138),(3750,'Pamplemousses','PA',1138),(3751,'Plaines Wilhems','PW',1138),(3752,'Riviere du Rempart','RP',1138),(3753,'Savanne','SA',1138),(3754,'Agalega Islands','AG',1138),(3755,'Cargados Carajos Shoals','CC',1138),(3756,'Rodrigues Island','RO',1138),(3757,'Male','MLE',1132),(3758,'Alif','02',1132),(3759,'Baa','20',1132),(3760,'Dhaalu','17',1132),(3761,'Faafu','14',1132),(3762,'Gaaf Alif','27',1132),(3763,'Gaefu Dhaalu','28',1132),(3764,'Gnaviyani','29',1132),(3765,'Haa Alif','07',1132),(3766,'Haa Dhaalu','23',1132),(3767,'Kaafu','26',1132),(3768,'Laamu','05',1132),(3769,'Lhaviyani','03',1132),(3770,'Meemu','12',1132),(3771,'Noonu','25',1132),(3772,'Raa','13',1132),(3773,'Seenu','01',1132),(3774,'Shaviyani','24',1132),(3775,'Thaa','08',1132),(3776,'Vaavu','04',1132),(3777,'Balaka','BA',1130),(3778,'Blantyre','BL',1130),(3779,'Chikwawa','CK',1130),(3780,'Chiradzulu','CR',1130),(3781,'Chitipa','CT',1130),(3782,'Dedza','DE',1130),(3783,'Dowa','DO',1130),(3784,'Karonga','KR',1130),(3785,'Kasungu','KS',1130),(3786,'Likoma Island','LK',1130),(3787,'Lilongwe','LI',1130),(3788,'Machinga','MH',1130),(3789,'Mangochi','MG',1130),(3790,'Mchinji','MC',1130),(3791,'Mulanje','MU',1130),(3792,'Mwanza','MW',1130),(3793,'Mzimba','MZ',1130),(3794,'Nkhata Bay','NB',1130),(3795,'Nkhotakota','NK',1130),(3796,'Nsanje','NS',1130),(3797,'Ntcheu','NU',1130),(3798,'Ntchisi','NI',1130),(3799,'Phalomba','PH',1130),(3800,'Rumphi','RU',1130),(3801,'Salima','SA',1130),(3802,'Thyolo','TH',1130),(3803,'Zomba','ZO',1130),(3804,'Aguascalientes','AGU',1140),(3805,'Baja California','BCN',1140),(3806,'Baja California Sur','BCS',1140),(3807,'Campeche','CAM',1140),(3808,'Coahuila','COA',1140),(3809,'Colima','COL',1140),(3810,'Chiapas','CHP',1140),(3811,'Chihuahua','CHH',1140),(3812,'Durango','DUR',1140),(3813,'Guanajuato','GUA',1140),(3814,'Guerrero','GRO',1140),(3815,'Hidalgo','HID',1140),(3816,'Jalisco','JAL',1140),(3817,'Mexico','MEX',1140),(3818,'Michoacin','MIC',1140),(3819,'Morelos','MOR',1140),(3820,'Nayarit','NAY',1140),(3821,'Nuevo Leon','NLE',1140),(3822,'Oaxaca','OAX',1140),(3823,'Puebla','PUE',1140),(3824,'Queretaro','QUE',1140),(3825,'Quintana Roo','ROO',1140),(3826,'San Luis Potosi','SLP',1140),(3827,'Sinaloa','SIN',1140),(3828,'Sonora','SON',1140),(3829,'Tabasco','TAB',1140),(3830,'Tamaulipas','TAM',1140),(3831,'Tlaxcala','TLA',1140),(3832,'Veracruz','VER',1140),(3833,'Yucatan','YUC',1140),(3834,'Zacatecas','ZAC',1140),(3835,'Wilayah Persekutuan Kuala Lumpur','14',1131),(3836,'Wilayah Persekutuan Labuan','15',1131),(3837,'Wilayah Persekutuan Putrajaya','16',1131),(3838,'Johor','01',1131),(3839,'Kedah','02',1131),(3840,'Kelantan','03',1131),(3841,'Melaka','04',1131),(3842,'Negeri Sembilan','05',1131),(3843,'Pahang','06',1131),(3844,'Perak','08',1131),(3845,'Perlis','09',1131),(3846,'Pulau Pinang','07',1131),(3847,'Sabah','12',1131),(3848,'Sarawak','13',1131),(3849,'Selangor','10',1131),(3850,'Terengganu','11',1131),(3851,'Maputo','MPM',1147),(3852,'Cabo Delgado','P',1147),(3853,'Gaza','G',1147),(3854,'Inhambane','I',1147),(3855,'Manica','B',1147),(3856,'Numpula','N',1147),(3857,'Niaaea','A',1147),(3858,'Sofala','S',1147),(3859,'Tete','T',1147),(3860,'Zambezia','Q',1147),(3861,'Caprivi','CA',1148),(3862,'Erongo','ER',1148),(3863,'Hardap','HA',1148),(3864,'Karas','KA',1148),(3865,'Khomas','KH',1148),(3866,'Kunene','KU',1148),(3867,'Ohangwena','OW',1148),(3868,'Okavango','OK',1148),(3869,'Omaheke','OH',1148),(3870,'Omusati','OS',1148),(3871,'Oshana','ON',1148),(3872,'Oshikoto','OT',1148),(3873,'Otjozondjupa','OD',1148),(3874,'Niamey','8',1156),(3875,'Agadez','1',1156),(3876,'Diffa','2',1156),(3877,'Dosso','3',1156),(3878,'Maradi','4',1156),(3879,'Tahoua','S',1156),(3880,'Tillaberi','6',1156),(3881,'Zinder','7',1156),(3882,'Abuja Federal Capital Territory','FC',1157),(3883,'Abia','AB',1157),(3884,'Adamawa','AD',1157),(3885,'Akwa Ibom','AK',1157),(3886,'Anambra','AN',1157),(3887,'Bauchi','BA',1157),(3888,'Bayelsa','BY',1157),(3889,'Benue','BE',1157),(3890,'Borno','BO',1157),(3891,'Cross River','CR',1157),(3892,'Delta','DE',1157),(3893,'Ebonyi','EB',1157),(3894,'Edo','ED',1157),(3895,'Ekiti','EK',1157),(3896,'Enugu','EN',1157),(3897,'Gombe','GO',1157),(3898,'Imo','IM',1157),(3899,'Jigawa','JI',1157),(3900,'Kaduna','KD',1157),(3901,'Kano','KN',1157),(3902,'Katsina','KT',1157),(3903,'Kebbi','KE',1157),(3904,'Kogi','KO',1157),(3905,'Kwara','KW',1157),(3906,'Lagos','LA',1157),(3907,'Nassarawa','NA',1157),(3908,'Niger','NI',1157),(3909,'Ogun','OG',1157),(3910,'Ondo','ON',1157),(3911,'Osun','OS',1157),(3912,'Oyo','OY',1157),(3913,'Rivers','RI',1157),(3914,'Sokoto','SO',1157),(3915,'Taraba','TA',1157),(3916,'Yobe','YO',1157),(3917,'Zamfara','ZA',1157),(3918,'Boaco','BO',1155),(3919,'Carazo','CA',1155),(3920,'Chinandega','CI',1155),(3921,'Chontales','CO',1155),(3922,'Esteli','ES',1155),(3923,'Jinotega','JI',1155),(3924,'Leon','LE',1155),(3925,'Madriz','MD',1155),(3926,'Managua','MN',1155),(3927,'Masaya','MS',1155),(3928,'Matagalpa','MT',1155),(3929,'Nueva Segovia','NS',1155),(3930,'Rio San Juan','SJ',1155),(3931,'Rivas','RI',1155),(3932,'Atlantico Norte','AN',1155),(3933,'Atlantico Sur','AS',1155),(3934,'Drente','DR',1152),(3935,'Flevoland','FL',1152),(3936,'Friesland','FR',1152),(3937,'Gelderland','GL',1152),(3938,'Groningen','GR',1152),(3939,'Noord-Brabant','NB',1152),(3940,'Noord-Holland','NH',1152),(3941,'Overijssel','OV',1152),(3942,'Utrecht','UT',1152),(3943,'Zuid-Holland','ZH',1152),(3944,'Zeeland','ZL',1152),(3945,'Akershus','02',1161),(3946,'Aust-Agder','09',1161),(3947,'Buskerud','06',1161),(3948,'Finnmark','20',1161),(3949,'Hedmark','04',1161),(3950,'Hordaland','12',1161),(3951,'Møre og Romsdal','15',1161),(3952,'Nordland','18',1161),(3953,'Nord-Trøndelag','17',1161),(3954,'Oppland','05',1161),(3955,'Oslo','03',1161),(3956,'Rogaland','11',1161),(3957,'Sogn og Fjordane','14',1161),(3958,'Sør-Trøndelag','16',1161),(3959,'Telemark','06',1161),(3960,'Troms','19',1161),(3961,'Vest-Agder','10',1161),(3962,'Vestfold','07',1161),(3963,'Østfold','01',1161),(3964,'Jan Mayen','22',1161),(3965,'Svalbard','21',1161),(3966,'Auckland','AUK',1154),(3967,'Bay of Plenty','BOP',1154),(3968,'Canterbury','CAN',1154),(3969,'Gisborne','GIS',1154),(3970,'Hawkes Bay','HKB',1154),(3971,'Manawatu-Wanganui','MWT',1154),(3972,'Marlborough','MBH',1154),(3973,'Nelson','NSN',1154),(3974,'Northland','NTL',1154),(3975,'Otago','OTA',1154),(3976,'Southland','STL',1154),(3977,'Taranaki','TKI',1154),(3978,'Tasman','TAS',1154),(3979,'Waikato','WKO',1154),(3980,'Wellington','WGN',1154),(3981,'West Coast','WTC',1154),(3982,'Ad Dakhillyah','DA',1162),(3983,'Al Batinah','BA',1162),(3984,'Al Janblyah','JA',1162),(3985,'Al Wusta','WU',1162),(3986,'Ash Sharqlyah','SH',1162),(3987,'Az Zahirah','ZA',1162),(3988,'Masqat','MA',1162),(3989,'Musandam','MU',1162),(3990,'Bocas del Toro','1',1166),(3991,'Cocle','2',1166),(3992,'Chiriqui','4',1166),(3993,'Darien','5',1166),(3994,'Herrera','6',1166),(3995,'Loa Santoa','7',1166),(3996,'Panama','8',1166),(3997,'Veraguas','9',1166),(3998,'Comarca de San Blas','Q',1166),(3999,'El Callao','CAL',1169),(4000,'Ancash','ANC',1169),(4001,'Apurimac','APU',1169),(4002,'Arequipa','ARE',1169),(4003,'Ayacucho','AYA',1169),(4004,'Cajamarca','CAJ',1169),(4005,'Cuzco','CUS',1169),(4006,'Huancavelica','HUV',1169),(4007,'Huanuco','HUC',1169),(4008,'Ica','ICA',1169),(4009,'Junin','JUN',1169),(4010,'La Libertad','LAL',1169),(4011,'Lambayeque','LAM',1169),(4012,'Lima','LIM',1169),(4013,'Loreto','LOR',1169),(4014,'Madre de Dios','MDD',1169),(4015,'Moquegua','MOQ',1169),(4016,'Pasco','PAS',1169),(4017,'Piura','PIU',1169),(4018,'Puno','PUN',1169),(4019,'San Martin','SAM',1169),(4020,'Tacna','TAC',1169),(4021,'Tumbes','TUM',1169),(4022,'Ucayali','UCA',1169),(4023,'National Capital District (Port Moresby)','NCD',1167),(4024,'Chimbu','CPK',1167),(4025,'Eastern Highlands','EHG',1167),(4026,'East New Britain','EBR',1167),(4027,'East Sepik','ESW',1167),(4028,'Enga','EPW',1167),(4029,'Gulf','GPK',1167),(4030,'Madang','MPM',1167),(4031,'Manus','MRL',1167),(4032,'Milne Bay','MBA',1167),(4033,'Morobe','MPL',1167),(4034,'New Ireland','NIK',1167),(4035,'North Solomons','NSA',1167),(4036,'Santaun','SAN',1167),(4037,'Southern Highlands','SHM',1167),(4038,'Western Highlands','WHM',1167),(4039,'West New Britain','WBK',1167),(4040,'Abra','ABR',1170),(4041,'Agusan del Norte','AGN',1170),(4042,'Agusan del Sur','AGS',1170),(4043,'Aklan','AKL',1170),(4044,'Albay','ALB',1170),(4045,'Antique','ANT',1170),(4046,'Apayao','APA',1170),(4047,'Aurora','AUR',1170),(4048,'Basilan','BAS',1170),(4049,'Bataan','BAN',1170),(4050,'Batanes','BTN',1170),(4051,'Batangas','BTG',1170),(4052,'Benguet','BEN',1170),(4053,'Biliran','BIL',1170),(4054,'Bohol','BOH',1170),(4055,'Bukidnon','BUK',1170),(4056,'Bulacan','BUL',1170),(4057,'Cagayan','CAG',1170),(4058,'Camarines Norte','CAN',1170),(4059,'Camarines Sur','CAS',1170),(4060,'Camiguin','CAM',1170),(4061,'Capiz','CAP',1170),(4062,'Catanduanes','CAT',1170),(4063,'Cavite','CAV',1170),(4064,'Cebu','CEB',1170),(4065,'Compostela Valley','COM',1170),(4066,'Davao','DAV',1170),(4067,'Davao del Sur','DAS',1170),(4068,'Davao Oriental','DAO',1170),(4069,'Eastern Samar','EAS',1170),(4070,'Guimaras','GUI',1170),(4071,'Ifugao','IFU',1170),(4072,'Ilocos Norte','ILN',1170),(4073,'Ilocos Sur','ILS',1170),(4074,'Iloilo','ILI',1170),(4075,'Isabela','ISA',1170),(4076,'Kalinga-Apayso','KAL',1170),(4077,'Laguna','LAG',1170),(4078,'Lanao del Norte','LAN',1170),(4079,'Lanao del Sur','LAS',1170),(4080,'La Union','LUN',1170),(4081,'Leyte','LEY',1170),(4082,'Maguindanao','MAG',1170),(4083,'Marinduque','MAD',1170),(4084,'Masbate','MAS',1170),(4085,'Mindoro Occidental','MDC',1170),(4086,'Mindoro Oriental','MDR',1170),(4087,'Misamis Occidental','MSC',1170),(4088,'Misamis Oriental','MSR',1170),(4089,'Mountain Province','MOU',1170),(4090,'Negroe Occidental','NEC',1170),(4091,'Negros Oriental','NER',1170),(4092,'North Cotabato','NCO',1170),(4093,'Northern Samar','NSA',1170),(4094,'Nueva Ecija','NUE',1170),(4095,'Nueva Vizcaya','NUV',1170),(4096,'Palawan','PLW',1170),(4097,'Pampanga','PAM',1170),(4098,'Pangasinan','PAN',1170),(4099,'Quezon','QUE',1170),(4100,'Quirino','QUI',1170),(4101,'Rizal','RIZ',1170),(4102,'Romblon','ROM',1170),(4103,'Sarangani','SAR',1170),(4104,'Siquijor','SIG',1170),(4105,'Sorsogon','SOR',1170),(4106,'South Cotabato','SCO',1170),(4107,'Southern Leyte','SLE',1170),(4108,'Sultan Kudarat','SUK',1170),(4109,'Sulu','SLU',1170),(4110,'Surigao del Norte','SUN',1170),(4111,'Surigao del Sur','SUR',1170),(4112,'Tarlac','TAR',1170),(4113,'Tawi-Tawi','TAW',1170),(4114,'Western Samar','WSA',1170),(4115,'Zambales','ZMB',1170),(4116,'Zamboanga del Norte','ZAN',1170),(4117,'Zamboanga del Sur','ZAS',1170),(4118,'Zamboanga Sibiguey','ZSI',1170),(4119,'Islamabad Federal Capital Area','IS',1163),(4120,'Baluchistan','BA',1163),(4121,'Khyber Pakhtun Khawa','NW',1163),(4122,'Sindh','SD',1163),(4123,'Federally Administered Tribal Areas','TA',1163),(4124,'Azad Kashmir','JK',1163),(4125,'Gilgit-Baltistan','NA',1163),(4126,'Aveiro','01',1173),(4127,'Beja','02',1173),(4128,'Braga','03',1173),(4129,'Bragança','04',1173),(4130,'Castelo Branco','05',1173),(4131,'Coimbra','06',1173),(4132,'Évora','07',1173),(4133,'Faro','08',1173),(4134,'Guarda','09',1173),(4135,'Leiria','10',1173),(4136,'Lisboa','11',1173),(4137,'Portalegre','12',1173),(4138,'Porto','13',1173),(4139,'Santarém','14',1173),(4140,'Setúbal','15',1173),(4141,'Viana do Castelo','16',1173),(4142,'Vila Real','17',1173),(4143,'Viseu','18',1173),(4144,'Região Autónoma dos Açores','20',1173),(4145,'Região Autónoma da Madeira','30',1173),(4146,'Asuncion','ASU',1168),(4147,'Alto Paraguay','16',1168),(4148,'Alto Parana','10',1168),(4149,'Amambay','13',1168),(4150,'Boqueron','19',1168),(4151,'Caeguazu','5',1168),(4152,'Caazapl','6',1168),(4153,'Canindeyu','14',1168),(4154,'Concepcion','1',1168),(4155,'Cordillera','3',1168),(4156,'Guaira','4',1168),(4157,'Itapua','7',1168),(4158,'Miaiones','8',1168),(4159,'Neembucu','12',1168),(4160,'Paraguari','9',1168),(4161,'Presidente Hayes','15',1168),(4162,'San Pedro','2',1168),(4163,'Ad Dawhah','DA',1175),(4164,'Al Ghuwayriyah','GH',1175),(4165,'Al Jumayliyah','JU',1175),(4166,'Al Khawr','KH',1175),(4167,'Al Wakrah','WA',1175),(4168,'Ar Rayyan','RA',1175),(4169,'Jariyan al Batnah','JB',1175),(4170,'Madinat ash Shamal','MS',1175),(4171,'Umm Salal','US',1175),(4172,'Bucuresti','B',1176),(4173,'Alba','AB',1176),(4174,'Arad','AR',1176),(4175,'ArgeÈ™','AG',1176),(4176,'Bacău','BC',1176),(4177,'Bihor','BH',1176),(4178,'BistriÈ›a-Năsăud','BN',1176),(4179,'BotoÈ™ani','BT',1176),(4180,'BraÈ™ov','BV',1176),(4181,'Brăila','BR',1176),(4182,'Buzău','BZ',1176),(4183,'CaraÈ™-Severin','CS',1176),(4184,'CălăraÈ™i','CL',1176),(4185,'Cluj','CJ',1176),(4186,'ConstanÈ›a','CT',1176),(4187,'Covasna','CV',1176),(4188,'DâmboviÈ›a','DB',1176),(4189,'Dolj','DJ',1176),(4190,'GalaÈ›i','GL',1176),(4191,'Giurgiu','GR',1176),(4192,'Gorj','GJ',1176),(4193,'Harghita','HR',1176),(4194,'Hunedoara','HD',1176),(4195,'IalomiÈ›a','IL',1176),(4196,'IaÈ™i','IS',1176),(4197,'Ilfov','IF',1176),(4198,'MaramureÈ™','MM',1176),(4199,'MehedinÈ›i','MH',1176),(4200,'MureÈ™','MS',1176),(4201,'NeamÈ›','NT',1176),(4202,'Olt','OT',1176),(4203,'Prahova','PH',1176),(4204,'Satu Mare','SM',1176),(4205,'Sălaj','SJ',1176),(4206,'Sibiu','SB',1176),(4207,'Suceava','SV',1176),(4208,'Teleorman','TR',1176),(4209,'TimiÈ™','TM',1176),(4210,'Tulcea','TL',1176),(4211,'Vaslui','VS',1176),(4212,'Vâlcea','VL',1176),(4213,'Vrancea','VN',1176),(4214,'Adygeya, Respublika','AD',1177),(4215,'Altay, Respublika','AL',1177),(4216,'Bashkortostan, Respublika','BA',1177),(4217,'Buryatiya, Respublika','BU',1177),(4218,'Chechenskaya Respublika','CE',1177),(4219,'Chuvashskaya Respublika','CU',1177),(4220,'Dagestan, Respublika','DA',1177),(4221,'Ingushskaya Respublika','IN',1177),(4222,'Kabardino-Balkarskaya','KB',1177),(4223,'Kalmykiya, Respublika','KL',1177),(4224,'Karachayevo-Cherkesskaya Respublika','KC',1177),(4225,'Kareliya, Respublika','KR',1177),(4226,'Khakasiya, Respublika','KK',1177),(4227,'Komi, Respublika','KO',1177),(4228,'Mariy El, Respublika','ME',1177),(4229,'Mordoviya, Respublika','MO',1177),(4230,'Sakha, Respublika [Yakutiya]','SA',1177),(4231,'Severnaya Osetiya, Respublika','SE',1177),(4232,'Tatarstan, Respublika','TA',1177),(4233,'Tyva, Respublika [Tuva]','TY',1177),(4234,'Udmurtskaya Respublika','UD',1177),(4235,'Altayskiy kray','ALT',1177),(4236,'Khabarovskiy kray','KHA',1177),(4237,'Krasnodarskiy kray','KDA',1177),(4238,'Krasnoyarskiy kray','KYA',1177),(4239,'Primorskiy kray','PRI',1177),(4240,'Stavropol\'skiy kray','STA',1177),(4241,'Amurskaya oblast\'','AMU',1177),(4242,'Arkhangel\'skaya oblast\'','ARK',1177),(4243,'Astrakhanskaya oblast\'','AST',1177),(4244,'Belgorodskaya oblast\'','BEL',1177),(4245,'Bryanskaya oblast\'','BRY',1177),(4246,'Chelyabinskaya oblast\'','CHE',1177),(4247,'Zabaykalsky Krai\'','ZSK',1177),(4248,'Irkutskaya oblast\'','IRK',1177),(4249,'Ivanovskaya oblast\'','IVA',1177),(4250,'Kaliningradskaya oblast\'','KGD',1177),(4251,'Kaluzhskaya oblast\'','KLU',1177),(4252,'Kamchatka Krai\'','KAM',1177),(4253,'Kemerovskaya oblast\'','KEM',1177),(4254,'Kirovskaya oblast\'','KIR',1177),(4255,'Kostromskaya oblast\'','KOS',1177),(4256,'Kurganskaya oblast\'','KGN',1177),(4257,'Kurskaya oblast\'','KRS',1177),(4258,'Leningradskaya oblast\'','LEN',1177),(4259,'Lipetskaya oblast\'','LIP',1177),(4260,'Magadanskaya oblast\'','MAG',1177),(4261,'Moskovskaya oblast\'','MOS',1177),(4262,'Murmanskaya oblast\'','MUR',1177),(4263,'Nizhegorodskaya oblast\'','NIZ',1177),(4264,'Novgorodskaya oblast\'','NGR',1177),(4265,'Novosibirskaya oblast\'','NVS',1177),(4266,'Omskaya oblast\'','OMS',1177),(4267,'Orenburgskaya oblast\'','ORE',1177),(4268,'Orlovskaya oblast\'','ORL',1177),(4269,'Penzenskaya oblast\'','PNZ',1177),(4270,'Perm krai\'','PEK',1177),(4271,'Pskovskaya oblast\'','PSK',1177),(4272,'Rostovskaya oblast\'','ROS',1177),(4273,'Ryazanskaya oblast\'','RYA',1177),(4274,'Sakhalinskaya oblast\'','SAK',1177),(4275,'Samarskaya oblast\'','SAM',1177),(4276,'Saratovskaya oblast\'','SAR',1177),(4277,'Smolenskaya oblast\'','SMO',1177),(4278,'Sverdlovskaya oblast\'','SVE',1177),(4279,'Tambovskaya oblast\'','TAM',1177),(4280,'Tomskaya oblast\'','TOM',1177),(4281,'Tul\'skaya oblast\'','TUL',1177),(4282,'Tverskaya oblast\'','TVE',1177),(4283,'Tyumenskaya oblast\'','TYU',1177),(4284,'Ul\'yanovskaya oblast\'','ULY',1177),(4285,'Vladimirskaya oblast\'','VLA',1177),(4286,'Volgogradskaya oblast\'','VGG',1177),(4287,'Vologodskaya oblast\'','VLG',1177),(4288,'Voronezhskaya oblast\'','VOR',1177),(4289,'Yaroslavskaya oblast\'','YAR',1177),(4290,'Moskva','MOW',1177),(4291,'Sankt-Peterburg','SPE',1177),(4292,'Yevreyskaya avtonomnaya oblast\'','YEV',1177),(4294,'Chukotskiy avtonomnyy okrug','CHU',1177),(4296,'Khanty-Mansiyskiy avtonomnyy okrug','KHM',1177),(4299,'Nenetskiy avtonomnyy okrug','NEN',1177),(4302,'Yamalo-Nenetskiy avtonomnyy okrug','YAN',1177),(4303,'Butare','C',1178),(4304,'Byumba','I',1178),(4305,'Cyangugu','E',1178),(4306,'Gikongoro','D',1178),(4307,'Gisenyi','G',1178),(4308,'Gitarama','B',1178),(4309,'Kibungo','J',1178),(4310,'Kibuye','F',1178),(4311,'Kigali-Rural Kigali y\' Icyaro','K',1178),(4312,'Kigali-Ville Kigali Ngari','L',1178),(4313,'Mutara','M',1178),(4314,'Ruhengeri','H',1178),(4315,'Al Bahah','11',1187),(4316,'Al Hudud Ash Shamaliyah','08',1187),(4317,'Al Jawf','12',1187),(4318,'Al Madinah','03',1187),(4319,'Al Qasim','05',1187),(4320,'Ar Riyad','01',1187),(4321,'Asir','14',1187),(4322,'Ha\'il','06',1187),(4323,'Jlzan','09',1187),(4324,'Makkah','02',1187),(4325,'Najran','10',1187),(4326,'Tabuk','07',1187),(4327,'Capital Territory (Honiara)','CT',1194),(4328,'Guadalcanal','GU',1194),(4329,'Isabel','IS',1194),(4330,'Makira','MK',1194),(4331,'Malaita','ML',1194),(4332,'Temotu','TE',1194),(4333,'A\'ali an Nil','23',1200),(4334,'Al Bah al Ahmar','26',1200),(4335,'Al Buhayrat','18',1200),(4336,'Al Jazirah','07',1200),(4337,'Al Khartum','03',1200),(4338,'Al Qadarif','06',1200),(4339,'Al Wahdah','22',1200),(4340,'An Nil','04',1200),(4341,'An Nil al Abyaq','08',1200),(4342,'An Nil al Azraq','24',1200),(4343,'Ash Shamallyah','01',1200),(4344,'Bahr al Jabal','17',1200),(4345,'Gharb al Istiwa\'iyah','16',1200),(4346,'Gharb Ba~r al Ghazal','14',1200),(4347,'Gharb Darfur','12',1200),(4348,'Gharb Kurdufan','10',1200),(4349,'Janub Darfur','11',1200),(4350,'Janub Rurdufan','13',1200),(4351,'Jnqall','20',1200),(4352,'Kassala','05',1200),(4353,'Shamal Batr al Ghazal','15',1200),(4354,'Shamal Darfur','02',1200),(4355,'Shamal Kurdufan','09',1200),(4356,'Sharq al Istiwa\'iyah','19',1200),(4357,'Sinnar','25',1200),(4358,'Warab','21',1200),(4359,'Blekinge län','K',1204),(4360,'Dalarnas län','W',1204),(4361,'Gotlands län','I',1204),(4362,'Gävleborgs län','X',1204),(4363,'Hallands län','N',1204),(4364,'Jämtlands län','Z',1204),(4365,'Jönkopings län','F',1204),(4366,'Kalmar län','H',1204),(4367,'Kronobergs län','G',1204),(4368,'Norrbottens län','BD',1204),(4369,'SkÃ¥ne län','M',1204),(4370,'Stockholms län','AB',1204),(4371,'Södermanlands län','D',1204),(4372,'Uppsala län','C',1204),(4373,'Värmlands län','S',1204),(4374,'Västerbottens län','AC',1204),(4375,'Västernorrlands län','Y',1204),(4376,'Västmanlands län','U',1204),(4377,'Västra Götalands län','Q',1204),(4378,'Örebro län','T',1204),(4379,'Östergötlands län','E',1204),(4380,'Saint Helena','SH',1180),(4381,'Ascension','AC',1180),(4382,'Tristan da Cunha','TA',1180),(4383,'AjdovÅ¡Äina','001',1193),(4384,'Beltinci','002',1193),(4385,'Benedikt','148',1193),(4386,'Bistrica ob Sotli','149',1193),(4387,'Bled','003',1193),(4388,'Bloke','150',1193),(4389,'Bohinj','004',1193),(4390,'Borovnica','005',1193),(4391,'Bovec','006',1193),(4392,'BraslovÄe','151',1193),(4393,'Brda','007',1193),(4394,'Brezovica','008',1193),(4395,'Brežice','009',1193),(4396,'Cankova','152',1193),(4397,'Celje','011',1193),(4398,'Cerklje na Gorenjskem','012',1193),(4399,'Cerknica','013',1193),(4400,'Cerkno','014',1193),(4401,'Cerkvenjak','153',1193),(4402,'ÄŒrenÅ¡ovci','015',1193),(4403,'ÄŒrna na KoroÅ¡kem','016',1193),(4404,'ÄŒrnomelj','017',1193),(4405,'Destrnik','018',1193),(4406,'DivaÄa','019',1193),(4407,'Dobje','154',1193),(4408,'Dobrepolje','020',1193),(4409,'Dobrna','155',1193),(4410,'Dobrova-Polhov Gradec','021',1193),(4411,'Dobrovnik','156',1193),(4412,'Dol pri Ljubljani','022',1193),(4413,'Dolenjske Toplice','157',1193),(4414,'Domžale','023',1193),(4415,'Dornava','024',1193),(4416,'Dravograd','025',1193),(4417,'Duplek','026',1193),(4418,'Gorenja vas-Poljane','027',1193),(4419,'GoriÅ¡nica','028',1193),(4420,'Gornja Radgona','029',1193),(4421,'Gornji Grad','030',1193),(4422,'Gornji Petrovci','031',1193),(4423,'Grad','158',1193),(4424,'Grosuplje','032',1193),(4425,'Hajdina','159',1193),(4426,'HoÄe-Slivnica','160',1193),(4427,'HodoÅ¡','161',1193),(4428,'Horjul','162',1193),(4429,'Hrastnik','034',1193),(4430,'Hrpelje-Kozina','035',1193),(4431,'Idrija','036',1193),(4432,'Ig','037',1193),(4433,'Ilirska Bistrica','038',1193),(4434,'IvanÄna Gorica','039',1193),(4435,'Izola','040',1193),(4436,'Jesenice','041',1193),(4437,'Jezersko','163',1193),(4438,'JurÅ¡inci','042',1193),(4439,'Kamnik','043',1193),(4440,'Kanal','044',1193),(4441,'KidriÄevo','045',1193),(4442,'Kobarid','046',1193),(4443,'Kobilje','047',1193),(4444,'KoÄevje','048',1193),(4445,'Komen','049',1193),(4446,'Komenda','164',1193),(4447,'Koper','050',1193),(4448,'Kostel','165',1193),(4449,'Kozje','051',1193),(4450,'Kranj','052',1193),(4451,'Kranjska Gora','053',1193),(4452,'Križevci','166',1193),(4453,'KrÅ¡ko','054',1193),(4454,'Kungota','055',1193),(4455,'Kuzma','056',1193),(4456,'LaÅ¡ko','057',1193),(4457,'Lenart','058',1193),(4458,'Lendava','059',1193),(4459,'Litija','060',1193),(4460,'Ljubljana','061',1193),(4461,'Ljubno','062',1193),(4462,'Ljutomer','063',1193),(4463,'Logatec','064',1193),(4464,'LoÅ¡ka dolina','065',1193),(4465,'LoÅ¡ki Potok','066',1193),(4466,'Lovrenc na Pohorju','167',1193),(4467,'LuÄe','067',1193),(4468,'Lukovica','068',1193),(4469,'MajÅ¡perk','069',1193),(4470,'Maribor','070',1193),(4471,'Markovci','168',1193),(4472,'Medvode','071',1193),(4473,'MengeÅ¡','072',1193),(4474,'Metlika','073',1193),(4475,'Mežica','074',1193),(4476,'Miklavž na Dravskem polju','169',1193),(4477,'Miren-Kostanjevica','075',1193),(4478,'Mirna PeÄ','170',1193),(4479,'Mislinja','076',1193),(4480,'MoravÄe','077',1193),(4481,'Moravske Toplice','078',1193),(4482,'Mozirje','079',1193),(4483,'Murska Sobota','080',1193),(4484,'Muta','081',1193),(4485,'Naklo','082',1193),(4486,'Nazarje','083',1193),(4487,'Nova Gorica','084',1193),(4488,'Novo mesto','085',1193),(4489,'Sveta Ana','181',1193),(4490,'Sveti Andraž v Slovenskih goricah','182',1193),(4491,'Sveti Jurij','116',1193),(4492,'Å alovci','033',1193),(4493,'Å empeter-Vrtojba','183',1193),(4494,'Å enÄur','117',1193),(4495,'Å entilj','118',1193),(4496,'Å entjernej','119',1193),(4497,'Å entjur','120',1193),(4498,'Å kocjan','121',1193),(4499,'Å kofja Loka','122',1193),(4500,'Å kofljica','123',1193),(4501,'Å marje pri JelÅ¡ah','124',1193),(4502,'Å martno ob Paki','125',1193),(4503,'Å martno pri Litiji','194',1193),(4504,'Å oÅ¡tanj','126',1193),(4505,'Å tore','127',1193),(4506,'Tabor','184',1193),(4507,'TiÅ¡ina','010',1193),(4508,'Tolmin','128',1193),(4509,'Trbovlje','129',1193),(4510,'Trebnje','130',1193),(4511,'Trnovska vas','185',1193),(4512,'TržiÄ','131',1193),(4513,'Trzin','186',1193),(4514,'TurniÅ¡Äe','132',1193),(4515,'Velenje','133',1193),(4516,'Velika Polana','187',1193),(4517,'Velike LaÅ¡Äe','134',1193),(4518,'Veržej','188',1193),(4519,'Videm','135',1193),(4520,'Vipava','136',1193),(4521,'Vitanje','137',1193),(4522,'Vojnik','138',1193),(4523,'Vransko','189',1193),(4524,'Vrhnika','140',1193),(4525,'Vuzenica','141',1193),(4526,'Zagorje ob Savi','142',1193),(4527,'ZavrÄ','143',1193),(4528,'ZreÄe','144',1193),(4529,'Žalec','190',1193),(4530,'Železniki','146',1193),(4531,'Žetale','191',1193),(4532,'Žiri','147',1193),(4533,'Žirovnica','192',1193),(4534,'Žužemberk','193',1193),(4535,'Banskobystrický kraj','BC',1192),(4536,'Bratislavský kraj','BL',1192),(4537,'KoÅ¡ický kraj','KI',1192),(4538,'Nitriansky kraj','NJ',1192),(4539,'PreÅ¡ovský kraj','PV',1192),(4540,'TrenÄiansky kraj','TC',1192),(4541,'Trnavský kraj','TA',1192),(4542,'Žilinský kraj','ZI',1192),(4543,'Western Area (Freetown)','W',1190),(4544,'Dakar','DK',1188),(4545,'Diourbel','DB',1188),(4546,'Fatick','FK',1188),(4547,'Kaolack','KL',1188),(4548,'Kolda','KD',1188),(4549,'Louga','LG',1188),(4550,'Matam','MT',1188),(4551,'Saint-Louis','SL',1188),(4552,'Tambacounda','TC',1188),(4553,'Thies','TH',1188),(4554,'Ziguinchor','ZG',1188),(4555,'Awdal','AW',1195),(4556,'Bakool','BK',1195),(4557,'Banaadir','BN',1195),(4558,'Bay','BY',1195),(4559,'Galguduud','GA',1195),(4560,'Gedo','GE',1195),(4561,'Hiirsan','HI',1195),(4562,'Jubbada Dhexe','JD',1195),(4563,'Jubbada Hoose','JH',1195),(4564,'Mudug','MU',1195),(4565,'Nugaal','NU',1195),(4566,'Saneag','SA',1195),(4567,'Shabeellaha Dhexe','SD',1195),(4568,'Shabeellaha Hoose','SH',1195),(4569,'Sool','SO',1195),(4570,'Togdheer','TO',1195),(4571,'Woqooyi Galbeed','WO',1195),(4572,'Brokopondo','BR',1201),(4573,'Commewijne','CM',1201),(4574,'Coronie','CR',1201),(4575,'Marowijne','MA',1201),(4576,'Nickerie','NI',1201),(4577,'Paramaribo','PM',1201),(4578,'Saramacca','SA',1201),(4579,'Sipaliwini','SI',1201),(4580,'Wanica','WA',1201),(4581,'Principe','P',1207),(4582,'Sao Tome','S',1207),(4583,'Ahuachapan','AH',1066),(4584,'Cabanas','CA',1066),(4585,'Cuscatlan','CU',1066),(4586,'Chalatenango','CH',1066),(4587,'Morazan','MO',1066),(4588,'San Miguel','SM',1066),(4589,'San Salvador','SS',1066),(4590,'Santa Ana','SA',1066),(4591,'San Vicente','SV',1066),(4592,'Sonsonate','SO',1066),(4593,'Usulutan','US',1066),(4594,'Al Hasakah','HA',1206),(4595,'Al Ladhiqiyah','LA',1206),(4596,'Al Qunaytirah','QU',1206),(4597,'Ar Raqqah','RA',1206),(4598,'As Suwayda\'','SU',1206),(4599,'Dar\'a','DR',1206),(4600,'Dayr az Zawr','DY',1206),(4601,'Dimashq','DI',1206),(4602,'Halab','HL',1206),(4603,'Hamah','HM',1206),(4604,'Jim\'','HI',1206),(4605,'Idlib','ID',1206),(4606,'Rif Dimashq','RD',1206),(4607,'Tarts','TA',1206),(4608,'Hhohho','HH',1203),(4609,'Lubombo','LU',1203),(4610,'Manzini','MA',1203),(4611,'Shiselweni','SH',1203),(4612,'Batha','BA',1043),(4613,'Biltine','BI',1043),(4614,'Borkou-Ennedi-Tibesti','BET',1043),(4615,'Chari-Baguirmi','CB',1043),(4616,'Guera','GR',1043),(4617,'Kanem','KA',1043),(4618,'Lac','LC',1043),(4619,'Logone-Occidental','LO',1043),(4620,'Logone-Oriental','LR',1043),(4621,'Mayo-Kebbi','MK',1043),(4622,'Moyen-Chari','MC',1043),(4623,'Ouaddai','OD',1043),(4624,'Salamat','SA',1043),(4625,'Tandjile','TA',1043),(4626,'Kara','K',1214),(4627,'Maritime (Region)','M',1214),(4628,'Savannes','S',1214),(4629,'Krung Thep Maha Nakhon Bangkok','10',1211),(4630,'Phatthaya','S',1211),(4631,'Amnat Charoen','37',1211),(4632,'Ang Thong','15',1211),(4633,'Buri Ram','31',1211),(4634,'Chachoengsao','24',1211),(4635,'Chai Nat','18',1211),(4636,'Chaiyaphum','36',1211),(4637,'Chanthaburi','22',1211),(4638,'Chiang Mai','50',1211),(4639,'Chiang Rai','57',1211),(4640,'Chon Buri','20',1211),(4641,'Chumphon','86',1211),(4642,'Kalasin','46',1211),(4643,'Kamphasng Phet','62',1211),(4644,'Kanchanaburi','71',1211),(4645,'Khon Kaen','40',1211),(4646,'Krabi','81',1211),(4647,'Lampang','52',1211),(4648,'Lamphun','51',1211),(4649,'Loei','42',1211),(4650,'Lop Buri','16',1211),(4651,'Mae Hong Son','58',1211),(4652,'Maha Sarakham','44',1211),(4653,'Mukdahan','49',1211),(4654,'Nakhon Nayok','26',1211),(4655,'Nakhon Pathom','73',1211),(4656,'Nakhon Phanom','48',1211),(4657,'Nakhon Ratchasima','30',1211),(4658,'Nakhon Sawan','60',1211),(4659,'Nakhon Si Thammarat','80',1211),(4660,'Nan','55',1211),(4661,'Narathiwat','96',1211),(4662,'Nong Bua Lam Phu','39',1211),(4663,'Nong Khai','43',1211),(4664,'Nonthaburi','12',1211),(4665,'Pathum Thani','13',1211),(4666,'Pattani','94',1211),(4667,'Phangnga','82',1211),(4668,'Phatthalung','93',1211),(4669,'Phayao','56',1211),(4670,'Phetchabun','67',1211),(4671,'Phetchaburi','76',1211),(4672,'Phichit','66',1211),(4673,'Phitsanulok','65',1211),(4674,'Phrae','54',1211),(4675,'Phra Nakhon Si Ayutthaya','14',1211),(4676,'Phuket','83',1211),(4677,'Prachin Buri','25',1211),(4678,'Prachuap Khiri Khan','77',1211),(4679,'Ranong','85',1211),(4680,'Ratchaburi','70',1211),(4681,'Rayong','21',1211),(4682,'Roi Et','45',1211),(4683,'Sa Kaeo','27',1211),(4684,'Sakon Nakhon','47',1211),(4685,'Samut Prakan','11',1211),(4686,'Samut Sakhon','74',1211),(4687,'Samut Songkhram','75',1211),(4688,'Saraburi','19',1211),(4689,'Satun','91',1211),(4690,'Sing Buri','17',1211),(4691,'Si Sa Ket','33',1211),(4692,'Songkhla','90',1211),(4693,'Sukhothai','64',1211),(4694,'Suphan Buri','72',1211),(4695,'Surat Thani','84',1211),(4696,'Surin','32',1211),(4697,'Tak','63',1211),(4698,'Trang','92',1211),(4699,'Trat','23',1211),(4700,'Ubon Ratchathani','34',1211),(4701,'Udon Thani','41',1211),(4702,'Uthai Thani','61',1211),(4703,'Uttaradit','53',1211),(4704,'Yala','95',1211),(4705,'Yasothon','35',1211),(4706,'Sughd','SU',1209),(4707,'Khatlon','KT',1209),(4708,'Gorno-Badakhshan','GB',1209),(4709,'Ahal','A',1220),(4710,'Balkan','B',1220),(4711,'Dasoguz','D',1220),(4712,'Lebap','L',1220),(4713,'Mary','M',1220),(4714,'Béja','31',1218),(4715,'Ben Arous','13',1218),(4716,'Bizerte','23',1218),(4717,'Gabès','81',1218),(4718,'Gafsa','71',1218),(4719,'Jendouba','32',1218),(4720,'Kairouan','41',1218),(4721,'Rasserine','42',1218),(4722,'Kebili','73',1218),(4723,'L\'Ariana','12',1218),(4724,'Le Ref','33',1218),(4725,'Mahdia','53',1218),(4726,'La Manouba','14',1218),(4727,'Medenine','82',1218),(4728,'Moneatir','52',1218),(4729,'Naboul','21',1218),(4730,'Sfax','61',1218),(4731,'Sidi Bouxid','43',1218),(4732,'Siliana','34',1218),(4733,'Sousse','51',1218),(4734,'Tataouine','83',1218),(4735,'Tozeur','72',1218),(4736,'Tunis','11',1218),(4737,'Zaghouan','22',1218),(4738,'Adana','01',1219),(4739,'Ad yaman','02',1219),(4740,'Afyon','03',1219),(4741,'Ag r','04',1219),(4742,'Aksaray','68',1219),(4743,'Amasya','05',1219),(4744,'Ankara','06',1219),(4745,'Antalya','07',1219),(4746,'Ardahan','75',1219),(4747,'Artvin','08',1219),(4748,'Aydin','09',1219),(4749,'Bal kesir','10',1219),(4750,'Bartin','74',1219),(4751,'Batman','72',1219),(4752,'Bayburt','69',1219),(4753,'Bilecik','11',1219),(4754,'Bingol','12',1219),(4755,'Bitlis','13',1219),(4756,'Bolu','14',1219),(4757,'Burdur','15',1219),(4758,'Bursa','16',1219),(4759,'Canakkale','17',1219),(4760,'Cankir','18',1219),(4761,'Corum','19',1219),(4762,'Denizli','20',1219),(4763,'Diyarbakir','21',1219),(4764,'Duzce','81',1219),(4765,'Edirne','22',1219),(4766,'Elazig','23',1219),(4767,'Erzincan','24',1219),(4768,'Erzurum','25',1219),(4769,'Eskis\'ehir','26',1219),(4770,'Gaziantep','27',1219),(4771,'Giresun','28',1219),(4772,'Gms\'hane','29',1219),(4773,'Hakkari','30',1219),(4774,'Hatay','31',1219),(4775,'Igidir','76',1219),(4776,'Isparta','32',1219),(4777,'Icel','33',1219),(4778,'Istanbul','34',1219),(4779,'Izmir','35',1219),(4780,'Kahramanmaras','46',1219),(4781,'Karabk','78',1219),(4782,'Karaman','70',1219),(4783,'Kars','36',1219),(4784,'Kastamonu','37',1219),(4785,'Kayseri','38',1219),(4786,'Kirikkale','71',1219),(4787,'Kirklareli','39',1219),(4788,'Kirs\'ehir','40',1219),(4789,'Kilis','79',1219),(4790,'Kocaeli','41',1219),(4791,'Konya','42',1219),(4792,'Ktahya','43',1219),(4793,'Malatya','44',1219),(4794,'Manisa','45',1219),(4795,'Mardin','47',1219),(4796,'Mugila','48',1219),(4797,'Mus','49',1219),(4798,'Nevs\'ehir','50',1219),(4799,'Nigide','51',1219),(4800,'Ordu','52',1219),(4801,'Osmaniye','80',1219),(4802,'Rize','53',1219),(4803,'Sakarya','54',1219),(4804,'Samsun','55',1219),(4805,'Siirt','56',1219),(4806,'Sinop','57',1219),(4807,'Sivas','58',1219),(4808,'S\'anliurfa','63',1219),(4809,'S\'rnak','73',1219),(4810,'Tekirdag','59',1219),(4811,'Tokat','60',1219),(4812,'Trabzon','61',1219),(4813,'Tunceli','62',1219),(4814,'Us\'ak','64',1219),(4815,'Van','65',1219),(4816,'Yalova','77',1219),(4817,'Yozgat','66',1219),(4818,'Zonguldak','67',1219),(4819,'Couva-Tabaquite-Talparo','CTT',1217),(4820,'Diego Martin','DMN',1217),(4821,'Eastern Tobago','ETO',1217),(4822,'Penal-Debe','PED',1217),(4823,'Princes Town','PRT',1217),(4824,'Rio Claro-Mayaro','RCM',1217),(4825,'Sangre Grande','SGE',1217),(4826,'San Juan-Laventille','SJL',1217),(4827,'Siparia','SIP',1217),(4828,'Tunapuna-Piarco','TUP',1217),(4829,'Western Tobago','WTO',1217),(4830,'Arima','ARI',1217),(4831,'Chaguanas','CHA',1217),(4832,'Point Fortin','PTF',1217),(4833,'Port of Spain','POS',1217),(4834,'San Fernando','SFO',1217),(4835,'Aileu','AL',1063),(4836,'Ainaro','AN',1063),(4837,'Bacucau','BA',1063),(4838,'Bobonaro','BO',1063),(4839,'Cova Lima','CO',1063),(4840,'Dili','DI',1063),(4841,'Ermera','ER',1063),(4842,'Laulem','LA',1063),(4843,'Liquica','LI',1063),(4844,'Manatuto','MT',1063),(4845,'Manafahi','MF',1063),(4846,'Oecussi','OE',1063),(4847,'Viqueque','VI',1063),(4848,'Changhua County','CHA',1208),(4849,'Chiayi County','CYQ',1208),(4850,'Hsinchu County','HSQ',1208),(4851,'Hualien County','HUA',1208),(4852,'Ilan County','ILA',1208),(4853,'Kaohsiung County','KHQ',1208),(4854,'Miaoli County','MIA',1208),(4855,'Nantou County','NAN',1208),(4856,'Penghu County','PEN',1208),(4857,'Pingtung County','PIF',1208),(4858,'Taichung County','TXQ',1208),(4859,'Tainan County','TNQ',1208),(4860,'Taipei County','TPQ',1208),(4861,'Taitung County','TTT',1208),(4862,'Taoyuan County','TAO',1208),(4863,'Yunlin County','YUN',1208),(4864,'Keelung City','KEE',1208),(4865,'Arusha','01',1210),(4866,'Dar-es-Salaam','02',1210),(4867,'Dodoma','03',1210),(4868,'Iringa','04',1210),(4869,'Kagera','05',1210),(4870,'Kaskazini Pemba','06',1210),(4871,'Kaskazini Unguja','07',1210),(4872,'Xigoma','08',1210),(4873,'Kilimanjaro','09',1210),(4874,'Rusini Pemba','10',1210),(4875,'Kusini Unguja','11',1210),(4876,'Lindi','12',1210),(4877,'Manyara','26',1210),(4878,'Mara','13',1210),(4879,'Mbeya','14',1210),(4880,'Mjini Magharibi','15',1210),(4881,'Morogoro','16',1210),(4882,'Mtwara','17',1210),(4883,'Pwani','19',1210),(4884,'Rukwa','20',1210),(4885,'Ruvuma','21',1210),(4886,'Shinyanga','22',1210),(4887,'Singida','23',1210),(4888,'Tabora','24',1210),(4889,'Tanga','25',1210),(4890,'Cherkas\'ka Oblast\'','71',1224),(4891,'Chernihivs\'ka Oblast\'','74',1224),(4892,'Chernivets\'ka Oblast\'','77',1224),(4893,'Dnipropetrovs\'ka Oblast\'','12',1224),(4894,'Donets\'ka Oblast\'','14',1224),(4895,'Ivano-Frankivs\'ka Oblast\'','26',1224),(4896,'Kharkivs\'ka Oblast\'','63',1224),(4897,'Khersons\'ka Oblast\'','65',1224),(4898,'Khmel\'nyts\'ka Oblast\'','68',1224),(4899,'Kirovohrads\'ka Oblast\'','35',1224),(4900,'Kyivs\'ka Oblast\'','32',1224),(4901,'Luhans\'ka Oblast\'','09',1224),(4902,'L\'vivs\'ka Oblast\'','46',1224),(4903,'Mykolaivs\'ka Oblast\'','48',1224),(4904,'Odes \'ka Oblast\'','51',1224),(4905,'Poltavs\'ka Oblast\'','53',1224),(4906,'Rivnens\'ka Oblast\'','56',1224),(4907,'Sums \'ka Oblast\'','59',1224),(4908,'Ternopil\'s\'ka Oblast\'','61',1224),(4909,'Vinnyts\'ka Oblast\'','05',1224),(4910,'Volyos\'ka Oblast\'','07',1224),(4911,'Zakarpats\'ka Oblast\'','21',1224),(4912,'Zaporiz\'ka Oblast\'','23',1224),(4913,'Zhytomyrs\'ka Oblast\'','18',1224),(4914,'Respublika Krym','43',1224),(4915,'Kyiv','30',1224),(4916,'Sevastopol','40',1224),(4917,'Adjumani','301',1223),(4918,'Apac','302',1223),(4919,'Arua','303',1223),(4920,'Bugiri','201',1223),(4921,'Bundibugyo','401',1223),(4922,'Bushenyi','402',1223),(4923,'Busia','202',1223),(4924,'Gulu','304',1223),(4925,'Hoima','403',1223),(4926,'Iganga','203',1223),(4927,'Jinja','204',1223),(4928,'Kabale','404',1223),(4929,'Kabarole','405',1223),(4930,'Kaberamaido','213',1223),(4931,'Kalangala','101',1223),(4932,'Kampala','102',1223),(4933,'Kamuli','205',1223),(4934,'Kamwenge','413',1223),(4935,'Kanungu','414',1223),(4936,'Kapchorwa','206',1223),(4937,'Kasese','406',1223),(4938,'Katakwi','207',1223),(4939,'Kayunga','112',1223),(4940,'Kibaale','407',1223),(4941,'Kiboga','103',1223),(4942,'Kisoro','408',1223),(4943,'Kitgum','305',1223),(4944,'Kotido','306',1223),(4945,'Kumi','208',1223),(4946,'Kyenjojo','415',1223),(4947,'Lira','307',1223),(4948,'Luwero','104',1223),(4949,'Masaka','105',1223),(4950,'Masindi','409',1223),(4951,'Mayuge','214',1223),(4952,'Mbale','209',1223),(4953,'Mbarara','410',1223),(4954,'Moroto','308',1223),(4955,'Moyo','309',1223),(4956,'Mpigi','106',1223),(4957,'Mubende','107',1223),(4958,'Mukono','108',1223),(4959,'Nakapiripirit','311',1223),(4960,'Nakasongola','109',1223),(4961,'Nebbi','310',1223),(4962,'Ntungamo','411',1223),(4963,'Pader','312',1223),(4964,'Pallisa','210',1223),(4965,'Rakai','110',1223),(4966,'Rukungiri','412',1223),(4967,'Sembabule','111',1223),(4968,'Sironko','215',1223),(4969,'Soroti','211',1223),(4970,'Tororo','212',1223),(4971,'Wakiso','113',1223),(4972,'Yumbe','313',1223),(4973,'Baker Island','81',1227),(4974,'Howland Island','84',1227),(4975,'Jarvis Island','86',1227),(4976,'Johnston Atoll','67',1227),(4977,'Kingman Reef','89',1227),(4978,'Midway Islands','71',1227),(4979,'Navassa Island','76',1227),(4980,'Palmyra Atoll','95',1227),(4981,'Wake Island','79',1227),(4982,'Artigsa','AR',1229),(4983,'Canelones','CA',1229),(4984,'Cerro Largo','CL',1229),(4985,'Colonia','CO',1229),(4986,'Durazno','DU',1229),(4987,'Flores','FS',1229),(4988,'Lavalleja','LA',1229),(4989,'Maldonado','MA',1229),(4990,'Montevideo','MO',1229),(4991,'Paysandu','PA',1229),(4992,'Rivera','RV',1229),(4993,'Rocha','RO',1229),(4994,'Salto','SA',1229),(4995,'Soriano','SO',1229),(4996,'Tacuarembo','TA',1229),(4997,'Treinta y Tres','TT',1229),(4998,'Toshkent (city)','TK',1230),(4999,'Qoraqalpogiston Respublikasi','QR',1230),(5000,'Andijon','AN',1230),(5001,'Buxoro','BU',1230),(5002,'Farg\'ona','FA',1230),(5003,'Jizzax','JI',1230),(5004,'Khorazm','KH',1230),(5005,'Namangan','NG',1230),(5006,'Navoiy','NW',1230),(5007,'Qashqadaryo','QA',1230),(5008,'Samarqand','SA',1230),(5009,'Sirdaryo','SI',1230),(5010,'Surxondaryo','SU',1230),(5011,'Toshkent','TO',1230),(5012,'Xorazm','XO',1230),(5013,'Distrito Federal','A',1232),(5014,'Anzoategui','B',1232),(5015,'Apure','C',1232),(5016,'Aragua','D',1232),(5017,'Barinas','E',1232),(5018,'Carabobo','G',1232),(5019,'Cojedes','H',1232),(5020,'Falcon','I',1232),(5021,'Guarico','J',1232),(5022,'Lara','K',1232),(5023,'Merida','L',1232),(5024,'Miranda','M',1232),(5025,'Monagas','N',1232),(5026,'Nueva Esparta','O',1232),(5027,'Portuguesa','P',1232),(5028,'Tachira','S',1232),(5029,'Trujillo','T',1232),(5030,'Vargas','X',1232),(5031,'Yaracuy','U',1232),(5032,'Zulia','V',1232),(5033,'Delta Amacuro','Y',1232),(5034,'Dependencias Federales','W',1232),(5035,'An Giang','44',1233),(5036,'Ba Ria - Vung Tau','43',1233),(5037,'Bac Can','53',1233),(5038,'Bac Giang','54',1233),(5039,'Bac Lieu','55',1233),(5040,'Bac Ninh','56',1233),(5041,'Ben Tre','50',1233),(5042,'Binh Dinh','31',1233),(5043,'Binh Duong','57',1233),(5044,'Binh Phuoc','58',1233),(5045,'Binh Thuan','40',1233),(5046,'Ca Mau','59',1233),(5047,'Can Tho','48',1233),(5048,'Cao Bang','04',1233),(5049,'Da Nang, thanh pho','60',1233),(5050,'Dong Nai','39',1233),(5051,'Dong Thap','45',1233),(5052,'Gia Lai','30',1233),(5053,'Ha Giang','03',1233),(5054,'Ha Nam','63',1233),(5055,'Ha Noi, thu do','64',1233),(5056,'Ha Tay','15',1233),(5057,'Ha Tinh','23',1233),(5058,'Hai Duong','61',1233),(5059,'Hai Phong, thanh pho','62',1233),(5060,'Hoa Binh','14',1233),(5061,'Ho Chi Minh, thanh pho [Sai Gon]','65',1233),(5062,'Hung Yen','66',1233),(5063,'Khanh Hoa','34',1233),(5064,'Kien Giang','47',1233),(5065,'Kon Tum','28',1233),(5066,'Lai Chau','01',1233),(5067,'Lam Dong','35',1233),(5068,'Lang Son','09',1233),(5069,'Lao Cai','02',1233),(5070,'Long An','41',1233),(5071,'Nam Dinh','67',1233),(5072,'Nghe An','22',1233),(5073,'Ninh Binh','18',1233),(5074,'Ninh Thuan','36',1233),(5075,'Phu Tho','68',1233),(5076,'Phu Yen','32',1233),(5077,'Quang Binh','24',1233),(5078,'Quang Nam','27',1233),(5079,'Quang Ngai','29',1233),(5080,'Quang Ninh','13',1233),(5081,'Quang Tri','25',1233),(5082,'Soc Trang','52',1233),(5083,'Son La','05',1233),(5084,'Tay Ninh','37',1233),(5085,'Thai Binh','20',1233),(5086,'Thai Nguyen','69',1233),(5087,'Thanh Hoa','21',1233),(5088,'Thua Thien-Hue','26',1233),(5089,'Tien Giang','46',1233),(5090,'Tra Vinh','51',1233),(5091,'Tuyen Quang','07',1233),(5092,'Vinh Long','49',1233),(5093,'Vinh Phuc','70',1233),(5094,'Yen Bai','06',1233),(5095,'Malampa','MAP',1231),(5096,'Penama','PAM',1231),(5097,'Sanma','SAM',1231),(5098,'Shefa','SEE',1231),(5099,'Tafea','TAE',1231),(5100,'Torba','TOB',1231),(5101,'A\'ana','AA',1185),(5102,'Aiga-i-le-Tai','AL',1185),(5103,'Atua','AT',1185),(5104,'Fa\'aaaleleaga','FA',1185),(5105,'Gaga\'emauga','GE',1185),(5106,'Gagaifomauga','GI',1185),(5107,'Palauli','PA',1185),(5108,'Satupa\'itea','SA',1185),(5109,'Tuamasaga','TU',1185),(5110,'Va\'a-o-Fonoti','VF',1185),(5111,'Vaisigano','VS',1185),(5112,'Crna Gora','CG',1243),(5113,'Srbija','SR',1242),(5114,'Kosovo-Metohija','KM',1242),(5115,'Vojvodina','VO',1242),(5116,'Abyan','AB',1237),(5117,'Adan','AD',1237),(5118,'Ad Dali','DA',1237),(5119,'Al Bayda\'','BA',1237),(5120,'Al Hudaydah','MU',1237),(5121,'Al Mahrah','MR',1237),(5122,'Al Mahwit','MW',1237),(5123,'Amran','AM',1237),(5124,'Dhamar','DH',1237),(5125,'Hadramawt','HD',1237),(5126,'Hajjah','HJ',1237),(5127,'Ibb','IB',1237),(5128,'Lahij','LA',1237),(5129,'Ma\'rib','MA',1237),(5130,'Sa\'dah','SD',1237),(5131,'San\'a\'','SN',1237),(5132,'Shabwah','SH',1237),(5133,'Ta\'izz','TA',1237),(5134,'Eastern Cape','EC',1196),(5135,'Free State','FS',1196),(5136,'Gauteng','GT',1196),(5137,'Kwazulu-Natal','NL',1196),(5138,'Mpumalanga','MP',1196),(5139,'Northern Cape','NC',1196),(5140,'Limpopo','NP',1196),(5141,'Western Cape','WC',1196),(5142,'Copperbelt','08',1239),(5143,'Luapula','04',1239),(5144,'Lusaka','09',1239),(5145,'North-Western','06',1239),(5146,'Bulawayo','BU',1240),(5147,'Harare','HA',1240),(5148,'Manicaland','MA',1240),(5149,'Mashonaland Central','MC',1240),(5150,'Mashonaland East','ME',1240),(5151,'Mashonaland West','MW',1240),(5152,'Masvingo','MV',1240),(5153,'Matabeleland North','MN',1240),(5154,'Matabeleland South','MS',1240),(5155,'Midlands','MI',1240),(5156,'South Karelia','SK',1075),(5157,'South Ostrobothnia','SO',1075),(5158,'Etelä-Savo','ES',1075),(5159,'Häme','HH',1075),(5160,'Itä-Uusimaa','IU',1075),(5161,'Kainuu','KA',1075),(5162,'Central Ostrobothnia','CO',1075),(5163,'Central Finland','CF',1075),(5164,'Kymenlaakso','KY',1075),(5165,'Lapland','LA',1075),(5166,'Tampere Region','TR',1075),(5167,'Ostrobothnia','OB',1075),(5168,'North Karelia','NK',1075),(5169,'Northern Ostrobothnia','NO',1075),(5170,'Northern Savo','NS',1075),(5171,'Päijät-Häme','PH',1075),(5172,'Satakunta','SK',1075),(5173,'Uusimaa','UM',1075),(5174,'South-West Finland','SW',1075),(5175,'Ã…land','AL',1075),(5176,'Limburg','LI',1152),(5177,'Central and Western','CW',1098),(5178,'Eastern','EA',1098),(5179,'Southern','SO',1098),(5180,'Wan Chai','WC',1098),(5181,'Kowloon City','KC',1098),(5182,'Kwun Tong','KU',1098),(5183,'Sham Shui Po','SS',1098),(5184,'Wong Tai Sin','WT',1098),(5185,'Yau Tsim Mong','YT',1098),(5186,'Islands','IS',1098),(5187,'Kwai Tsing','KI',1098),(5188,'North','NO',1098),(5189,'Sai Kung','SK',1098),(5190,'Sha Tin','ST',1098),(5191,'Tai Po','TP',1098),(5192,'Tsuen Wan','TW',1098),(5193,'Tuen Mun','TM',1098),(5194,'Yuen Long','YL',1098),(5195,'Manchester','MR',1108),(5196,'Al ManÄmah (Al ‘Āşimah)','13',1016),(5197,'Al JanÅ«bÄ«yah','14',1016),(5199,'Al Wusţá','16',1016),(5200,'Ash ShamÄlÄ«yah','17',1016),(5201,'Jenin','_A',1165),(5202,'Tubas','_B',1165),(5203,'Tulkarm','_C',1165),(5204,'Nablus','_D',1165),(5205,'Qalqilya','_E',1165),(5206,'Salfit','_F',1165),(5207,'Ramallah and Al-Bireh','_G',1165),(5208,'Jericho','_H',1165),(5209,'Jerusalem','_I',1165),(5210,'Bethlehem','_J',1165),(5211,'Hebron','_K',1165),(5212,'North Gaza','_L',1165),(5213,'Gaza','_M',1165),(5214,'Deir el-Balah','_N',1165),(5215,'Khan Yunis','_O',1165),(5216,'Rafah','_P',1165),(5217,'Brussels','BRU',1020),(5218,'Distrito Federal','DIF',1140),(5219,'Taichung City','TXG',1208),(5220,'Kaohsiung City','KHH',1208),(5221,'Taipei City','TPE',1208),(5222,'Chiayi City','CYI',1208),(5223,'Hsinchu City','HSZ',1208),(5224,'Tainan City','TNN',1208),(9000,'North West','NW',1196),(9986,'Tyne and Wear','TWR',1226),(9988,'Greater Manchester','GTM',1226),(9989,'Co Tyrone','TYR',1226),(9990,'West Yorkshire','WYK',1226),(9991,'South Yorkshire','SYK',1226),(9992,'Merseyside','MSY',1226),(9993,'Berkshire','BRK',1226),(9994,'West Midlands','WMD',1226),(9998,'West Glamorgan','WGM',1226),(9999,'London','LON',1226),(10000,'Carbonia-Iglesias','CI',1107),(10001,'Olbia-Tempio','OT',1107),(10002,'Medio Campidano','VS',1107),(10003,'Ogliastra','OG',1107),(10009,'Jura','39',1076),(10010,'Barletta-Andria-Trani','BT',1107),(10011,'Fermo','FM',1107),(10012,'Monza e Brianza','MB',1107),(10013,'Clwyd','CWD',1226),(10015,'South Glamorgan','SGM',1226),(10016,'Artibonite','AR',1094),(10017,'Centre','CE',1094),(10018,'Nippes','NI',1094),(10019,'Nord','ND',1094),(10020,'La Rioja','F',1010),(10021,'Andorra la Vella','07',1005),(10022,'Canillo','02',1005),(10023,'Encamp','03',1005),(10024,'Escaldes-Engordany','08',1005),(10025,'La Massana','04',1005),(10026,'Ordino','05',1005),(10027,'Sant Julia de Loria','06',1005),(10028,'Abaco Islands','AB',1212),(10029,'Andros Island','AN',1212),(10030,'Berry Islands','BR',1212),(10031,'Eleuthera','EL',1212),(10032,'Grand Bahama','GB',1212),(10033,'Rum Cay','RC',1212),(10034,'San Salvador Island','SS',1212),(10035,'Kongo central','01',1050),(10036,'Kwango','02',1050),(10037,'Kwilu','03',1050),(10038,'Mai-Ndombe','04',1050),(10039,'Kasai','05',1050),(10040,'Lulua','06',1050),(10041,'Lomami','07',1050),(10042,'Sankuru','08',1050),(10043,'Ituri','09',1050),(10044,'Haut-Uele','10',1050),(10045,'Tshopo','11',1050),(10046,'Bas-Uele','12',1050),(10047,'Nord-Ubangi','13',1050),(10048,'Mongala','14',1050),(10049,'Sud-Ubangi','15',1050),(10050,'Tshuapa','16',1050),(10051,'Haut-Lomami','17',1050),(10052,'Lualaba','18',1050),(10053,'Haut-Katanga','19',1050),(10054,'Tanganyika','20',1050),(10055,'Toledo','TO',1198),(10056,'Córdoba','CO',1198),(10057,'Metropolitan Manila','MNL',1170),(10058,'La Paz','LP',1097),(10059,'Yinchuan','YN',1045),(10060,'Shizuishan','SZ',1045),(10061,'Wuzhong','WZ',1045),(10062,'Guyuan','GY',1045),(10063,'Zhongwei','ZW',1045),(10064,'Luxembourg','L',1126),(10065,'Aizkraukles novads','002',1119),(10066,'Jaunjelgavas novads','038',1119),(10067,'Pļaviņu novads','072',1119),(10068,'Kokneses novads','046',1119),(10069,'Neretas novads','065',1119),(10070,'SkrÄ«veru novads','092',1119),(10071,'AlÅ«ksnes novads','007',1119),(10072,'Apes novads','009',1119),(10073,'Balvu novads','015',1119),(10074,'Viļakas novads','108',1119),(10075,'Baltinavas novads','014',1119),(10076,'RugÄju novads','082',1119),(10077,'Bauskas novads','016',1119),(10078,'Iecavas novads','034',1119),(10079,'RundÄles novads','083',1119),(10080,'Vecumnieku novads','105',1119),(10081,'CÄ“su novads','022',1119),(10082,'LÄ«gatnes novads','055',1119),(10083,'Amatas novads','008',1119),(10084,'Jaunpiebalgas novads','039',1119),(10085,'Priekuļu novads','075',1119),(10086,'PÄrgaujas novads','070',1119),(10087,'Raunas novads','076',1119),(10088,'Vecpiebalgas novads','104',1119),(10089,'Daugavpils novads','025',1119),(10090,'IlÅ«kstes novads','036',1119),(10091,'Dobeles novads','026',1119),(10092,'Auces novads','010',1119),(10093,'TÄ“rvetes novads','098',1119),(10094,'Gulbenes novads','033',1119),(10095,'Jelgavas novads','041',1119),(10096,'Ozolnieku novads','069',1119),(10097,'JÄ“kabpils novads','042',1119),(10098,'AknÄ«stes novads','004',1119),(10099,'ViesÄ«tes novads','107',1119),(10100,'Krustpils novads','049',1119),(10101,'Salas novads','085',1119),(10102,'KrÄslavas novads','047',1119),(10103,'Dagdas novads','024',1119),(10104,'Aglonas novads','001',1119),(10105,'KuldÄ«gas novads','050',1119),(10106,'Skrundas novads','093',1119),(10107,'Alsungas novads','006',1119),(10108,'Aizputes novads','003',1119),(10109,'Durbes novads','028',1119),(10110,'Grobiņas novads','032',1119),(10111,'PÄvilostas novads','071',1119),(10112,'Priekules novads','074',1119),(10113,'NÄ«cas novads','066',1119),(10114,'Rucavas novads','081',1119),(10115,'Vaiņodes novads','100',1119),(10116,'Limbažu novads','054',1119),(10117,'Alojas novads','005',1119),(10118,'SalacgrÄ«vas novads','086',1119),(10119,'Ludzas novads','058',1119),(10120,'KÄrsavas novads','044',1119),(10121,'Zilupes novads','110',1119),(10122,'Ciblas novads','023',1119),(10123,'Madonas novads','059',1119),(10124,'Cesvaines novads','021',1119),(10125,'LubÄnas novads','057',1119),(10126,'VarakļÄnu novads','102',1119),(10127,'Ä’rgļu novads','030',1119),(10128,'Ogres novads','067',1119),(10129,'IkÅ¡Ä·iles novads','035',1119),(10130,'Ķeguma novads','051',1119),(10131,'LielvÄrdes novads','053',1119),(10132,'Preiļu novads','073',1119),(10133,'LÄ«vÄnu novads','056',1119),(10134,'Riebiņu novads','078',1119),(10135,'VÄrkavas novads','103',1119),(10136,'RÄ“zeknes novads','077',1119),(10137,'ViļÄnu novads','109',1119),(10138,'Baldones novads','013',1119),(10139,'Ķekavas novads','052',1119),(10140,'Olaines novads','068',1119),(10141,'Salaspils novads','087',1119),(10142,'Saulkrastu novads','089',1119),(10143,'Siguldas novads','091',1119),(10144,'InÄukalna novads','037',1119),(10145,'Ä€dažu novads','011',1119),(10146,'BabÄ«tes novads','012',1119),(10147,'Carnikavas novads','020',1119),(10148,'Garkalnes novads','031',1119),(10149,'Krimuldas novads','048',1119),(10150,'MÄlpils novads','061',1119),(10151,'MÄrupes novads','062',1119),(10152,'Ropažu novads','080',1119),(10153,'SÄ“jas novads','090',1119),(10154,'Stopiņu novads','095',1119),(10155,'Saldus novads','088',1119),(10156,'BrocÄ“nu novads','018',1119),(10157,'Talsu novads','097',1119),(10158,'Dundagas novads','027',1119),(10159,'MÄ“rsraga novads','063',1119),(10160,'Rojas novads','079',1119),(10161,'Tukuma novads','099',1119),(10162,'Kandavas novads','043',1119),(10163,'Engures novads','029',1119),(10164,'Jaunpils novads','040',1119),(10165,'Valkas novads','101',1119),(10166,'Smiltenes novads','094',1119),(10167,'StrenÄu novads','096',1119),(10168,'KocÄ“nu novads','045',1119),(10169,'Mazsalacas novads','060',1119),(10170,'RÅ«jienas novads','084',1119),(10171,'BeverÄ«nas novads','017',1119),(10172,'Burtnieku novads','019',1119),(10173,'NaukÅ¡Ä“nu novads','064',1119),(10174,'Ventspils novads','106',1119),(10175,'JÄ“kabpils','JKB',1119),(10176,'Valmiera','VMR',1119),(10177,'Florida','FL',1229),(10178,'Rio Negro','RN',1229),(10179,'San Jose','SJ',1229),(10180,'Plateau','PL',1157),(10181,'Pieria','61',1085),(10182,'Los Rios','LR',1044),(10183,'Arica y Parinacota','AP',1044),(10184,'Amazonas','AMA',1169),(10185,'Kalimantan Tengah','KT',1102),(10186,'Sulawesi Barat','SR',1102),(10187,'Kalimantan Utara','KU',1102),(10188,'Ankaran','86',1193),(10189,'ApaÄe','87',1193),(10190,'Cirkulane','88',1193),(10191,'Gorje','89',1193),(10192,'Kostanjevica na Krki','90',1193),(10193,'Log-Dragomer','91',1193),(10194,'Makole','92',1193),(10195,'Mirna','93',1193),(10196,'Mokronog-Trebelno','94',1193),(10197,'Odranci','95',1193),(10198,'Oplotnica','96',1193),(10199,'Ormož','97',1193),(10200,'Osilnica','98',1193),(10201,'Pesnica','99',1193),(10202,'Piran','100',1193),(10203,'Pivka','101',1193),(10204,'PodÄetrtek','102',1193),(10205,'Podlehnik','103',1193),(10206,'Podvelka','104',1193),(10207,'PoljÄane','105',1193),(10208,'Polzela','106',1193),(10209,'Postojna','107',1193),(10210,'Prebold','108',1193),(10211,'Preddvor','109',1193),(10212,'Prevalje','110',1193),(10213,'Ptuj','111',1193),(10214,'Puconci','112',1193),(10215,'RaÄe-Fram','113',1193),(10216,'RadeÄe','114',1193),(10217,'Radenci','115',1193),(10218,'Radlje ob Dravi','139',1193),(10219,'Radovljica','145',1193),(10220,'Ravne na KoroÅ¡kem','171',1193),(10221,'Razkrižje','172',1193),(10222,'ReÄica ob Savinji','173',1193),(10223,'RenÄe-Vogrsko','174',1193),(10224,'Ribnica','175',1193),(10225,'Ribnica na Pohorju','176',1193),(10226,'RogaÅ¡ka Slatina','177',1193),(10227,'RogaÅ¡ovci','178',1193),(10228,'Rogatec','179',1193),(10229,'RuÅ¡e','180',1193),(10230,'Selnica ob Dravi','195',1193),(10231,'SemiÄ','196',1193),(10232,'Å entrupert','197',1193),(10233,'Sevnica','198',1193),(10234,'Sežana','199',1193),(10235,'Slovenj Gradec','200',1193),(10236,'Slovenska Bistrica','201',1193),(10237,'Slovenske Konjice','202',1193),(10238,'Å marjeÅ¡ke Toplice','203',1193),(10239,'Sodražica','204',1193),(10240,'SolÄava','205',1193),(10241,'SrediÅ¡Äe ob Dravi','206',1193),(10242,'StarÅ¡e','207',1193),(10243,'Straža','208',1193),(10244,'Sveta Trojica v Slovenskih goricah','209',1193),(10245,'Sveti Jurij v Slovenskih goricah','210',1193),(10246,'Sveti Tomaž','211',1193),(10247,'Vodice','212',1193),(10248,'Abkhazia','AB',1081),(10249,'Adjara','AJ',1081),(10250,'Tbilisi','TB',1081),(10251,'Guria','GU',1081),(10252,'Imereti','IM',1081),(10253,'Kakheti','KA',1081),(10254,'Kvemo Kartli','KK',1081),(10255,'Mtskheta-Mtianeti','MM',1081),(10256,'Racha-Lechkhumi and Kvemo Svaneti','RL',1081),(10257,'Samegrelo-Zemo Svaneti','SZ',1081),(10258,'Samtskhe-Javakheti','SJ',1081),(10259,'Shida Kartli','SK',1081),(10260,'Central','C',1074),(10261,'Punjab','PB',1163),(10262,'La Libertad','LI',1066),(10263,'La Paz','PA',1066),(10264,'La Union','UN',1066),(10265,'Littoral','LT',1038),(10266,'Nord-Ouest','NW',1038),(10267,'Telangana','TG',1101),(10268,'Ash Sharqiyah','04',1187),(10269,'Guadeloupe','GP',1076),(10270,'Martinique','MQ',1076),(10271,'Guyane','GF',1076),(10272,'La Réunion','RE',1076),(10273,'Mayotte','YT',1076),(10274,'Baringo','01',1112),(10275,'Bomet','02',1112),(10276,'Bungoma','03',1112),(10277,'Busia','04',1112),(10278,'Elgeyo/Marakwet','05',1112),(10279,'Embu','06',1112),(10280,'Garissa','07',1112),(10281,'Homa Bay','08',1112),(10282,'Isiolo','09',1112),(10283,'Kajiado','10',1112),(10284,'Kakamega','11',1112),(10285,'Kericho','12',1112),(10286,'Kiambu','13',1112),(10287,'Kilifi','14',1112),(10288,'Kirinyaga','15',1112),(10289,'Kisii','16',1112),(10290,'Kisumu','17',1112),(10291,'Kitui','18',1112),(10292,'Kwale','19',1112),(10293,'Laikipia','20',1112),(10294,'Lamu','21',1112),(10295,'Machakos','22',1112),(10296,'Makueni','23',1112),(10297,'Mandera','24',1112),(10298,'Marsabit','25',1112),(10299,'Meru','26',1112),(10300,'Migori','27',1112),(10301,'Mombasa','28',1112),(10302,'Murang\'a','29',1112),(10303,'Nairobi City','30',1112),(10304,'Nakuru','31',1112),(10305,'Nandi','32',1112),(10306,'Narok','33',1112),(10307,'Nyamira','34',1112),(10308,'Nyandarua','35',1112),(10309,'Nyeri','36',1112),(10310,'Samburu','37',1112),(10311,'Siaya','38',1112),(10312,'Taita/Taveta','39',1112),(10313,'Tana River','40',1112),(10314,'Tharaka-Nithi','41',1112),(10315,'Trans Nzoia','42',1112),(10316,'Turkana','43',1112),(10317,'Uasin Gishu','44',1112),(10318,'Vihiga','45',1112),(10319,'Wajir','46',1112),(10320,'West Pokot','47',1112),(10321,'Chandigarh','CH',1101),(10322,'Central','CP',1083),(10323,'Eastern','EP',1083),(10324,'Northern','NP',1083),(10325,'Western','WP',1083),(10326,'Saint Kitts','K',1181),(10327,'Nevis','N',1181),(10328,'Eastern','E',1190),(10329,'Northern','N',1190),(10330,'Southern','S',1190),(10331,'Dushanbe','DU',1209),(10332,'Nohiyahoi Tobei JumhurÃ','RA',1209),(10333,'Wallis-et-Futuna','WF',1076),(10334,'Nouvelle-Calédonie','NC',1076),(10335,'Haute-Marne','52',1076),(10336,'Saint George','03',1009),(10337,'Saint John','04',1009),(10338,'Saint Mary','05',1009),(10339,'Saint Paul','06',1009),(10340,'Saint Peter','07',1009),(10341,'Saint Philip','08',1009),(10342,'Barbuda','10',1009),(10343,'Redonda','11',1009),(10344,'Christ Church','01',1018),(10345,'Saint Andrew','02',1018),(10346,'Saint George','03',1018),(10347,'Saint James','04',1018),(10348,'Saint John','05',1018),(10349,'Saint Joseph','06',1018),(10350,'Saint Lucy','07',1018),(10351,'Saint Michael','08',1018),(10352,'Saint Peter','09',1018),(10353,'Saint Philip','10',1018),(10354,'Saint Thomas','11',1018),(10355,'Estuaire','01',1080),(10356,'Haut-Ogooué','02',1080),(10357,'Moyen-Ogooué','03',1080),(10358,'Ngounié','04',1080),(10359,'Nyanga','05',1080),(10360,'Ogooué-Ivindo','06',1080),(10361,'Ogooué-Lolo','07',1080),(10362,'Ogooué-Maritime','08',1080),(10363,'Woleu-Ntem','09',1080),(10364,'Monmouthshire','MON',1226),(10365,'Antrim and Newtownabbey','ANN',1226),(10366,'Ards and North Down','AND',1226),(10367,'Armagh City, Banbridge and Craigavon','ABC',1226),(10368,'Belfast','BFS',1226),(10369,'Causeway Coast and Glens','CCG',1226),(10370,'Derry City and Strabane','DRS',1226),(10371,'Fermanagh and Omagh','FMO',1226),(10372,'Lisburn and Castlereagh','LBC',1226),(10373,'Mid and East Antrim','MEA',1226),(10374,'Mid Ulster','MUL',1226),(10375,'Newry, Mourne and Down','NMD',1226),(10376,'Bridgend','BGE',1226),(10377,'Caerphilly','CAY',1226),(10378,'Cardiff','CRF',1226),(10379,'Carmarthenshire','CMN',1226),(10380,'Ceredigion','CGN',1226),(10381,'Conwy','CWY',1226),(10382,'Denbighshire','DEN',1226),(10383,'Flintshire','FLN',1226),(10384,'Isle of Anglesey','AGY',1226),(10385,'Merthyr Tydfil','MTY',1226),(10386,'Neath Port Talbot','NTL',1226),(10387,'Newport','NWP',1226),(10388,'Pembrokeshire','PEM',1226),(10389,'Rhondda, Cynon, Taff','RCT',1226),(10390,'Swansea','SWA',1226),(10391,'Torfaen','TOF',1226),(10392,'Wrexham','WRX',1226),(10393,'Sejong','50',1115); /*!40000 ALTER TABLE `civicrm_state_province` ENABLE KEYS */; UNLOCK TABLES; diff --git a/civicrm/sql/civicrm_navigation.mysql b/civicrm/sql/civicrm_navigation.mysql index d4065b2aa3..15d8289a49 100644 --- a/civicrm/sql/civicrm_navigation.mysql +++ b/civicrm/sql/civicrm_navigation.mysql @@ -388,7 +388,7 @@ VALUES ( @domainID, 'civicrm/admin/setting/path?reset=1', 'Directories', 'Directories', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/mapping?reset=1', 'Import/Export Mappings', 'Import/Export Mappings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 8 ), ( @domainID, 'civicrm/admin/setting/mapping?reset=1', 'Mapping and Geocoding', 'Mapping and Geocoding', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 9 ), - ( @domainID, 'civicrm/admin/setting/misc?reset=1', 'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)', 'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/setting/misc?reset=1', 'Misc (Undelete, PDFs, Limits, Logging, etc.)', 'misc_admin_settings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 10 ), ( @domainID, 'civicrm/admin/setting/preferences/multisite?reset=1', 'Multi Site Settings', 'Multi Site Settings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 11 ), ( @domainID, 'civicrm/admin/options?reset=1', 'Option Groups', 'Option Groups', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 12 ), ( @domainID, 'civicrm/admin/setting/smtp?reset=1', 'Outbound Email (SMTP/Sendmail)', 'Outbound Email', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 13 ), diff --git a/civicrm/templates/CRM/Activity/Calendar/ICal.tpl b/civicrm/templates/CRM/Activity/Calendar/ICal.tpl index cd385eccec..2ff0c050d2 100644 --- a/civicrm/templates/CRM/Activity/Calendar/ICal.tpl +++ b/civicrm/templates/CRM/Activity/Calendar/ICal.tpl @@ -16,8 +16,8 @@ BEGIN:VEVENT UID:CIVICRMACTIVITY{$activity->id} SUMMARY:{$activity->subject|crmICalText} CALSCALE:GREGORIAN -DTSTAMP;VALUE=DATE-TIME:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'|crmICalDate} -DTSTART;VALUE=DATE-TIME:{$activity->activity_date_time|crmICalDate} +DTSTAMP;TZID={$timezone}:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'|crmICalDate} +DTSTART;TZID={$timezone}:{$activity->activity_date_time|crmICalDate} DURATION:PT{$activity->duration}M {if $activity->location} LOCATION:{$activity->location|crmICalText} diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl index be6d4b5c9a..de22fc47b2 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl @@ -69,7 +69,7 @@ <td class="label">{$form.moneyformat.label} {help id='moneyformat' title=$form.moneyformat.label}</td> <td>{$form.moneyformat.html}</td> </tr> - <tr class="crm-localization-form-block-customTranslateFunction"> + <tr class="crm-localization-form-block-customTranslateFunction"> <td class="label">{$form.customTranslateFunction.label} {help id='customTranslateFunction' title=$form.customTranslateFunction.label}</td> <td>{$form.customTranslateFunction.html}</td> </tr> @@ -84,10 +84,7 @@ </table> <h3>{ts}Contact Address Fields - Selection Values{/ts}</h3> <table class="form-layout-compressed"> - <tr class="crm-localization-form-block-defaultContactCountry"> - <td class="label">{$form.defaultContactCountry.label} {help id='defaultContactCountry' title=$form.defaultContactCountry.label}</td> - <td>{$form.defaultContactCountry.html}</td> - </tr> + {include file='CRM/Admin/Form/Setting/SettingField.tpl' setting_name='defaultContactCountry' fieldSpec=$settings_fields.defaultContactCountry} <tr class="crm-localization-form-block-pinnedContactCountries"> <td class="label">{$form.pinnedContactCountries.label} {help id='pinnedContactCountries' title=$form.pinnedContactCountries.label}</td> <td>{$form.pinnedContactCountries.html}</td> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl index 00b453ce21..6b761b840e 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl @@ -80,38 +80,5 @@ </td> </tr> </table> - - <h3>{ts}reCAPTCHA v2{/ts}</h3> - <div class="description"> - {ts 1='href="https://www.google.com/recaptcha" target="_blank"'}reCAPTCHA is a free service that helps prevent automated abuse of your site. To use it on public-facing CiviCRM forms: sign up at <a %1>Google's reCaptcha site</a>; enter the provided public and private keys here; then enable reCAPTCHA under Advanced Settings in any Profile.{/ts} - <br/><strong>{ts}Only the reCAPTCHA v2 checkbox type is supported.{/ts}</strong> - </div> - <table class="form-layout"> - <tr class="crm-miscellaneous-form-block-recaptchaPublicKey"> - <td class="label">{$form.recaptchaPublicKey.label}</td> - <td>{$form.recaptchaPublicKey.html}</td> - </tr> - <tr class="crm-miscellaneous-form-block-recaptchaPrivateKey"> - <td class="label">{$form.recaptchaPrivateKey.label}</td> - <td>{$form.recaptchaPrivateKey.html}</td> - </tr> - <tr class="crm-miscellaneous-form-block-recaptchaOptions"> - <td class="label">{$form.recaptchaOptions.label}</td> - <td>{$form.recaptchaOptions.html}<br /> - <span class="description"> - {ts}You can specify the reCAPTCHA theme options as comma separated data.(eg: theme:'blackglass', lang : 'fr' ).{/ts} - <br /> - {ts 1='href="https://developers.google.com/recaptcha/docs/display#configuration" target="_blank"'}Check the available options at <a %1>Customizing the Look and Feel of reCAPTCHA</a>.{/ts} - </span> - </td> - </tr> - <tr class="crm-miscellaneous-form-block-recaptchaPrivateKey"> - <td class="label">{$form.forceRecaptcha.label}</td> - <td> - {$form.forceRecaptcha.html} - <p class="description">{ts}If enabled, reCAPTCHA will show on all contribution pages.{/ts}</p> - </td> - </tr> - </table> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> </div> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl b/civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl new file mode 100644 index 0000000000..0182f99bf8 --- /dev/null +++ b/civicrm/templates/CRM/Admin/Form/Setting/SettingField.tpl @@ -0,0 +1,18 @@ +{* Display setting field from metadata - todo consolidate with CRM_Core_Form_Field.tpl *} +<tr class="crm-setting-form-block-{$setting_name}"> + <td class="label">{$form.$setting_name.label}</td> + <td> + {if !empty($fieldSpec.wrapper_element)} + {$fieldSpec.wrapper_element.0}{$form.$setting_name.html}{$fieldSpec.wrapper_element.1} + {else} + {$form.$setting_name.html} + {/if} + <div class="description"> + {$fieldSpec.description} + </div> + {if $fieldSpec.help_text} + {* @todo the appended -id here appears to be inconsistent in the hlp files *} + {assign var='tplhelp_id' value = $setting_name|cat:'-id'|replace:'_':'-'}{help id="$tplhelp_id"} + {/if} + </td> +</tr> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl b/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl index 99ec6404e5..d128edfc13 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl @@ -9,23 +9,8 @@ *} <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout-compressed"> - {foreach from=$settings_fields key="setting_name" item="setting_detail"} - <tr class="crm-mail-form-block-{$setting_name}"> - <td class="label">{$form.$setting_name.label}</td> - <td> - {if !empty($setting_detail.wrapper_element)} - {$setting_detail.wrapper_element.0}{$form.$setting_name.html}{$setting_detail.wrapper_element.1} - {else} - {$form.$setting_name.html} - {/if} - <div class="description"> - {$setting_detail.description} - </div> - {if $setting_detail.help_text} - {assign var='tplhelp_id' value = $setting_name|cat:'-id'|replace:'_':'-'}{help id="$tplhelp_id"} - {/if} - </td> - </tr> + {foreach from=$settings_fields key="setting_name" item="fieldSpec"} + {include file="CRM/Admin/Form/Setting/SettingField.tpl"} {/foreach} </table> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> diff --git a/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl b/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl index 26f6ebf3df..31e2997e3d 100644 --- a/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl +++ b/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl @@ -55,8 +55,8 @@ <td>{ts}Adjust search behaviors including wildcards, and data to include in quick search results. Adjusting search settings can improve performance for larger datasets.{/ts}</td> </tr> <tr class="even"> - <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/setting/misc" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.){/ts}</a></td> - <td>{ts}Version reporting and alerts, reCAPTCHA configuration and attachments.{/ts}</td> + <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/setting/misc" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}Misc (Undelete, PDFs, Limits, Logging, etc.){/ts}</a></td> + <td>{ts}Version reporting, alerts and attachments.{/ts}</td> </tr> <tr class="even"> <td class="tasklist nowrap"><a href="{crmURL p="civicrm/admin/options/subtype" q="reset=1&civicrmDestination=`$destination`"}" title="{$linkTitle|escape}">{ts}Contact Types{/ts}</a></td> diff --git a/civicrm/templates/CRM/Admin/Page/Setting.tpl b/civicrm/templates/CRM/Admin/Page/Setting.tpl index fe2a904ad5..9b446fbdb0 100644 --- a/civicrm/templates/CRM/Admin/Page/Setting.tpl +++ b/civicrm/templates/CRM/Admin/Page/Setting.tpl @@ -74,7 +74,7 @@ <tr> <td class="nowrap"><a href="{crmURL p='civicrm/admin/setting/misc' q='reset=1'}" id="idMisc"><i class="crm-i fa-chevron-right" aria-hidden="true"></i> {ts}Miscellaneous Settings{/ts}</a></td> - <td>{ts}Dashboard caching time, move to trash / undelete, change logging, version checking and reCAPTCHA (prevents automated abuse of public forms).{/ts}</td> + <td>{ts}Dashboard caching time, move to trash / undelete, change logging and version checking.{/ts}</td> </tr> <tr> diff --git a/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl b/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl index 6fd10e2c97..d2fed32143 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl @@ -153,11 +153,12 @@ popup.create(evt); } - if (window.addEventListener) { - window.addEventListener("load", initMap, false); - } else if (window.attachEvent) { - document.attachEvent("onreadystatechange", initMap); - } + var checkExist = setInterval(function() { + if (typeof OpenLayers !== 'undefined') { + clearInterval(checkExist); + initMap(); + } + }, 100); // check every 100ms function gpopUp() { var from = document.getElementById('from').value; diff --git a/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl b/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl index 0ddd19d6aa..5a02515989 100644 --- a/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl @@ -32,8 +32,6 @@ <div class="crm-content crm-custom-data crm-contact-reference"> {', '|implode:$element.contact_ref_links} </div> - {elseif $element.field_data_type EQ 'Money'} - <div class="crm-content crm-custom-data">{$element.field_value|crmMoney}</div> {else} <div class="crm-content crm-custom-data">{$element.field_value}</div> {/if} diff --git a/civicrm/templates/CRM/Contact/Page/View/Note.tpl b/civicrm/templates/CRM/Contact/Page/View/Note.tpl index 8cdf82cfd7..c35f0d2ad3 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Note.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Note.tpl @@ -13,7 +13,8 @@ <div class="crm-block crm-content-block crm-note-view-block"> <table class="crm-info-panel"> <tr><td class="label">{ts}Subject{/ts}</td><td>{$note.subject}</td></tr> - <tr><td class="label">{ts}Date:{/ts}</td><td>{$note.modified_date|crmDate}</td></tr> + <tr><td class="label">{ts}Date:{/ts}</td><td>{$note.note_date|crmDate}</td></tr> + <tr><td class="label">{ts}Modified Date:{/ts}</td><td>{$note.modified_date|crmDate}</td></tr> <tr><td class="label">{ts}Privacy:{/ts}</td><td>{$note.privacy}</td></tr> <tr><td class="label">{ts}Note:{/ts}</td><td>{$note.note|nl2br}</td></tr> @@ -33,7 +34,7 @@ <tr><th>{ts}Comment{/ts}</th><th>{ts}Created By{/ts}</th><th>{ts}Date{/ts}</th></tr> </thead> {foreach from=$comments item=comment} - <tr class="{cycle values='odd-row,even-row'}"><td>{$comment.note}</td><td>{$comment.createdBy}</td><td>{$comment.modified_date}</td></tr> + <tr class="{cycle values='odd-row,even-row'}"><td>{$comment.note}</td><td>{$comment.createdBy}</td><td>{$comment.note_date}</td><td>{$comment.modified_date}</td></tr> {/foreach} </table> </fieldset> @@ -51,6 +52,10 @@ {$form.subject.html} </td> </tr> + <tr> + <td class="label">{$form.note_date.label}</td> + <td>{$form.note_date.html}</td> + </tr> <tr> <td class="label">{$form.privacy.label}</td> <td> @@ -149,6 +154,8 @@ + '</td><td>' + response['values'][i].subject + '</td><td>' + + response['values'][i].note_date + + '</td><td>' + response['values'][i].modified_date + '</td><td>' + '<a href="'+ urlTemplate + response['values'][i].createdById +'">'+ response['values'][i].createdBy +'</a>' @@ -193,6 +200,7 @@ <th>{ts}Note{/ts}</th> <th>{ts}Subject{/ts}</th> <th>{ts}Date{/ts}</th> + <th>{ts}Modified Date{/ts}</th> <th>{ts}Created By{/ts}</th> <th data-orderable="false">{ts}Attachment(s){/ts}</th> <th data-orderable="false"></th> @@ -222,6 +230,7 @@ {/if} </td> <td class="crm-note-subject crmf-subject crm-editable">{$note.subject}</td> + <td class="crm-note-note_date" data-order="{$note.note_date}">{$note.note_date|crmDate}</td> <td class="crm-note-modified_date" data-order="{$note.modified_date}">{$note.modified_date|crmDate}</td> <td class="crm-note-createdBy"> <a href="{crmURL p='civicrm/contact/view' q="reset=1&cid=`$note.contact_id`"}">{$note.createdBy}</a> diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl b/civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl new file mode 100644 index 0000000000..67cf851f3e --- /dev/null +++ b/civicrm/templates/CRM/Contact/Page/View/Summary-tab.tpl @@ -0,0 +1,156 @@ +{* + +--------------------------------------------------------------------+ + | 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 | + +--------------------------------------------------------------------+ +*} +{* Summary tab from Contact Summary screen *} + +{if (isset($hookContentPlacement) and ($hookContentPlacement neq 3)) or empty($hookContentPlacement)} + + {if !empty($hookContent) and isset($hookContentPlacement) and $hookContentPlacement eq 2} + {include file="CRM/Contact/Page/View/SummaryHook.tpl"} + {/if} + + <div class="contactTopBar contact_panel"> + <div class="contactCardLeft"> + {crmRegion name="contact-basic-info-left"} + <div class="crm-summary-contactinfo-block"> + <div class="crm-summary-block" id="contactinfo-block"> + {include file="CRM/Contact/Page/Inline/ContactInfo.tpl"} + </div> + </div> + {/crmRegion} + </div> + <div class="contactCardRight"> + {crmRegion name="contact-basic-info-right"} + {if !empty($imageURL)} + <div id="crm-contact-thumbnail"> + {include file="CRM/Contact/Page/ContactImage.tpl"} + </div> + {/if} + <div class="{if !empty($imageURL)} float-left{/if}"> + <div class="crm-summary-basic-block crm-summary-block"> + {include file="CRM/Contact/Page/Inline/Basic.tpl"} + </div> + </div> + {/crmRegion} + </div> + </div> + <div class="contact_details"> + <div class="contact_panel"> + <div class="contactCardLeft"> + {crmRegion name="contact-details-left"} + <div > + {if $showEmail} + <div class="crm-summary-email-block crm-summary-block" id="email-block"> + {include file="CRM/Contact/Page/Inline/Email.tpl"} + </div> + {/if} + {if $showWebsite} + <div class="crm-summary-website-block crm-summary-block" id="website-block"> + {include file="CRM/Contact/Page/Inline/Website.tpl"} + </div> + {/if} + </div> + {/crmRegion} + </div><!-- #contactCardLeft --> + + <div class="contactCardRight"> + {crmRegion name="contact-details-right"} + <div> + {if $showPhone} + <div class="crm-summary-phone-block crm-summary-block" id="phone-block"> + {include file="CRM/Contact/Page/Inline/Phone.tpl"} + </div> + {/if} + {if $showIM} + <div class="crm-summary-im-block crm-summary-block" id="im-block"> + {include file="CRM/Contact/Page/Inline/IM.tpl"} + </div> + {/if} + {if $showOpenID} + <div class="crm-summary-openid-block crm-summary-block" id="openid-block"> + {include file="CRM/Contact/Page/Inline/OpenID.tpl"} + </div> + {/if} + </div> + {/crmRegion} + </div><!-- #contactCardRight --> + + <div class="clear"></div> + </div><!-- #contact_panel --> + {if $showAddress} + <div class="contact_panel"> + {crmRegion name="contact-addresses"} + {assign var='locationIndex' value=1} + {if $address} + {foreach from=$address item=add key=locationIndex} + <div class="{if $locationIndex is odd}contactCardLeft{else}contactCardRight{/if} crm-address_{$locationIndex} crm-address-block crm-summary-block"> + {include file="CRM/Contact/Page/Inline/Address.tpl"} + </div> + {/foreach} + {assign var='locationIndex' value=$locationIndex+1} + {/if} + {* add new link *} + {if $permission EQ 'edit'} + {assign var='add' value=0} + <div class="{if $locationIndex is odd}contactCardLeft{else}contactCardRight{/if} crm-address-block crm-summary-block"> + {include file="CRM/Contact/Page/Inline/Address.tpl"} + </div> + {/if} + {/crmRegion} + </div> <!-- end of contact panel --> + {/if} + <div class="contact_panel"> + {if $showCommunicationPreferences} + <div class="contactCardLeft"> + {crmRegion name="contact-comm-pref"} + <div class="crm-summary-comm-pref-block"> + <div class="crm-summary-block" id="communication-pref-block" > + {include file="CRM/Contact/Page/Inline/CommunicationPreferences.tpl"} + </div> + </div> + {/crmRegion} + </div> <!-- contactCardLeft --> + {/if} + {if $contact_type eq 'Individual' AND $showDemographics} + <div class="contactCardRight"> + {crmRegion name="contact-demographic"} + <div class="crm-summary-demographic-block"> + <div class="crm-summary-block" id="demographic-block"> + {include file="CRM/Contact/Page/Inline/Demographics.tpl"} + </div> + </div> + {/crmRegion} + </div> <!-- contactCardRight --> + {/if} + <div class="clear"></div> + <div class="separator"></div> + </div> <!-- contact panel --> + </div><!--contact_details--> + + {if $showCustomData} + <div id="customFields"> + <div class="contact_panel"> + <div class="contactCardLeft"> + {include file="CRM/Contact/Page/View/CustomDataView.tpl" side='1'} + </div><!--contactCardLeft--> + <div class="contactCardRight"> + {include file="CRM/Contact/Page/View/CustomDataView.tpl" side='0'} + </div> + + <div class="clear"></div> + </div> + </div> + {/if} + + {if !empty($hookContent) and isset($hookContentPlacement) and $hookContentPlacement eq 1} + {include file="CRM/Contact/Page/View/SummaryHook.tpl"} + {/if} +{else} + {include file="CRM/Contact/Page/View/SummaryHook.tpl"} +{/if} diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl index bad21b98b2..1fbd228aa2 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl @@ -107,9 +107,9 @@ <div class="crm-block crm-content-block crm-contact-page crm-inline-edit-container"> <div id="mainTabContainer"> <ul class="crm-contact-tabs-list"> - {foreach from=$allTabs key=tabName item=tabValue} + {foreach from=$allTabs item=tabValue} <li id="tab_{$tabValue.id}" class="crm-tab-button ui-corner-all crm-count-{$tabValue.count}{if isset($tabValue.class)} {$tabValue.class}{/if}"> - <a href="{$tabValue.url}" title="{$tabValue.title|escape}"> + <a href="{if !empty($tabValue.template)}#contact-{$tabValue.id}{else}{$tabValue.url}{/if}" title="{$tabValue.title|escape}"> <i class="{if $tabValue.icon}{$tabValue.icon}{else}crm-i fa-puzzle-piece{/if}" aria-hidden="true"></i> <span>{$tabValue.title}</span> {if empty($tabValue.hideCount)}<em>{$tabValue.count}</em>{/if} @@ -118,158 +118,16 @@ {/foreach} </ul> - <div id="contact-summary" class="ui-tabs-panel ui-widget-content ui-corner-bottom"> - {if (isset($hookContentPlacement) and ($hookContentPlacement neq 3)) or empty($hookContentPlacement)} - - {if !empty($hookContent) and isset($hookContentPlacement) and $hookContentPlacement eq 2} - {include file="CRM/Contact/Page/View/SummaryHook.tpl"} - {/if} - - <div class="contactTopBar contact_panel"> - <div class="contactCardLeft"> - {crmRegion name="contact-basic-info-left"} - <div class="crm-summary-contactinfo-block"> - <div class="crm-summary-block" id="contactinfo-block"> - {include file="CRM/Contact/Page/Inline/ContactInfo.tpl"} - </div> - </div> - {/crmRegion} - </div> <!-- end of left side --> - <div class="contactCardRight"> - {crmRegion name="contact-basic-info-right"} - {if !empty($imageURL)} - <div id="crm-contact-thumbnail"> - {include file="CRM/Contact/Page/ContactImage.tpl"} - </div> - {/if} - <div class="{if !empty($imageURL)} float-left{/if}"> - <div class="crm-summary-basic-block crm-summary-block"> - {include file="CRM/Contact/Page/Inline/Basic.tpl"} - </div> - </div> - {/crmRegion} - </div> - <!-- end of right side --> - </div> - <div class="contact_details"> - <div class="contact_panel"> - <div class="contactCardLeft"> - {crmRegion name="contact-details-left"} - <div > - {if $showEmail} - <div class="crm-summary-email-block crm-summary-block" id="email-block"> - {include file="CRM/Contact/Page/Inline/Email.tpl"} - </div> - {/if} - {if $showWebsite} - <div class="crm-summary-website-block crm-summary-block" id="website-block"> - {include file="CRM/Contact/Page/Inline/Website.tpl"} - </div> - {/if} - </div> - {/crmRegion} - </div><!-- #contactCardLeft --> - - <div class="contactCardRight"> - {crmRegion name="contact-details-right"} - <div> - {if $showPhone} - <div class="crm-summary-phone-block crm-summary-block" id="phone-block"> - {include file="CRM/Contact/Page/Inline/Phone.tpl"} - </div> - {/if} - {if $showIM} - <div class="crm-summary-im-block crm-summary-block" id="im-block"> - {include file="CRM/Contact/Page/Inline/IM.tpl"} - </div> - {/if} - {if $showOpenID} - <div class="crm-summary-openid-block crm-summary-block" id="openid-block"> - {include file="CRM/Contact/Page/Inline/OpenID.tpl"} - </div> - {/if} - </div> - {/crmRegion} - </div><!-- #contactCardRight --> - - <div class="clear"></div> - </div><!-- #contact_panel --> - {if $showAddress} - <div class="contact_panel"> - {crmRegion name="contact-addresses"} - {assign var='locationIndex' value=1} - {if $address} - {foreach from=$address item=add key=locationIndex} - <div class="{if $locationIndex is odd}contactCardLeft{else}contactCardRight{/if} crm-address_{$locationIndex} crm-address-block crm-summary-block"> - {include file="CRM/Contact/Page/Inline/Address.tpl"} - </div> - {/foreach} - {assign var='locationIndex' value=$locationIndex+1} - {/if} - {* add new link *} - {if $permission EQ 'edit'} - {assign var='add' value=0} - <div class="{if $locationIndex is odd}contactCardLeft{else}contactCardRight{/if} crm-address-block crm-summary-block"> - {include file="CRM/Contact/Page/Inline/Address.tpl"} - </div> - {/if} - {/crmRegion} - </div> <!-- end of contact panel --> - {/if} - <div class="contact_panel"> - {if $showCommunicationPreferences} - <div class="contactCardLeft"> - {crmRegion name="contact-comm-pref"} - <div class="crm-summary-comm-pref-block"> - <div class="crm-summary-block" id="communication-pref-block" > - {include file="CRM/Contact/Page/Inline/CommunicationPreferences.tpl"} - </div> - </div> - {/crmRegion} - </div> <!-- contactCardLeft --> - {/if} - {if $contact_type eq 'Individual' AND $showDemographics} - <div class="contactCardRight"> - {crmRegion name="contact-demographic"} - <div class="crm-summary-demographic-block"> - <div class="crm-summary-block" id="demographic-block"> - {include file="CRM/Contact/Page/Inline/Demographics.tpl"} - </div> - </div> - {/crmRegion} - </div> <!-- contactCardRight --> - {/if} - <div class="clear"></div> - <div class="separator"></div> - </div> <!-- contact panel --> - </div><!--contact_details--> - - {if $showCustomData} - <div id="customFields"> - <div class="contact_panel"> - <div class="contactCardLeft"> - {include file="CRM/Contact/Page/View/CustomDataView.tpl" side='1'} - </div><!--contactCardLeft--> - <div class="contactCardRight"> - {include file="CRM/Contact/Page/View/CustomDataView.tpl" side='0'} - </div> - - <div class="clear"></div> - </div> - </div> - {/if} - - {if !empty($hookContent) and isset($hookContentPlacement) and $hookContentPlacement eq 1} - {include file="CRM/Contact/Page/View/SummaryHook.tpl"} - {/if} - {else} - {include file="CRM/Contact/Page/View/SummaryHook.tpl"} - {/if} - </div> - <div class="clear"></div> + {foreach from=$allTabs item=tabValue} + {if !empty($tabValue.template)} + <div id="contact-{$tabValue.id}"> + {include file=$tabValue.template} + </div> + {/if} + {/foreach} </div> <div class="clear"></div> - </div><!-- /.crm-content-block --> + </div> {/if} {* CRM-10560 *} diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl index d138524d16..185d5970d1 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl @@ -113,7 +113,7 @@ </strong> <br /> <span class="description"> - {ts}Your recurring contribution will be processed automatically for the number of installments you specify. You can leave the number of installments blank if you want to make an open-ended commitment. In either case, you can choose to cancel at any time. You will receive an email receipt for each recurring contribution. The receipts will include a link you can use if you decide to modify or cancel your future contributions.{/ts} + {ts}You can leave the number of installments blank if you want to make an open-ended commitment. In either case, you can choose to cancel at any time.{/ts} </span> </td> </tr> diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl index 0e5a3c2c61..1a8d218053 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl @@ -96,7 +96,7 @@ {else} <div class="display-block"> <td class="label">{$form.total_amount.label}</td> - <td><span>{$form.total_amount.html|crmMoney} {if $taxAmount}{ts 1=$taxTerm 2=$taxAmount|crmMoney}(includes %1 of %2){/ts}{/if}</span></td> + <td><span>{$form.total_amount.html} {if $taxAmount}{ts 1=$taxTerm 2=$taxAmount|crmMoney}(includes %1 of %2){/ts}{/if}</span></td> </div> {/if} {else} diff --git a/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl b/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl index c688678b93..7e3f88661b 100644 --- a/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl @@ -64,19 +64,19 @@ </tr> <tr class="crm-contribution-form-block-min_contribution"> <td class="label">{$form.min_contribution.label}</td> - <td class="html-adjust">{$form.min_contribution.html|crmMoney}<br /> + <td class="html-adjust">{$form.min_contribution.html}<br /> <span class="description">{ts}The minimum contribution amount required to be eligible to select this premium. If you want to offer it to all contributors regardless of contribution amount, enter '0'. If display of minimum contribution amounts is enabled then this text is displayed:{/ts} <em>{ts}(Contribute at least X to be eligible for this gift.){/ts}</em></span> </td> </tr> <tr class="crm-contribution-form-block-price"> <td class="label">{$form.price.label}</td> - <td class="html-adjust">{$form.price.html|crmMoney}<br /> + <td class="html-adjust">{$form.price.html}<br /> <span class="description">{ts}The market value of this premium (e.g. retail price). For tax-deductible contributions, this amount will be used to set the non-deductible amount in the contribution record and receipt.{/ts}</span> </td> </tr> <tr class="crm-contribution-form-block-cost"> <td class="label">{$form.cost.label}</td> - <td class="html-adjust">{$form.cost.html|crmMoney}<br /> + <td class="html-adjust">{$form.cost.html}<br /> <span class="description">{ts}You may optionally record the actual cost of this premium to your organization. This may be useful when evaluating net return for this incentive.{/ts}</span> </td> </tr> diff --git a/civicrm/templates/CRM/Core/Calendar/ICal.tpl b/civicrm/templates/CRM/Core/Calendar/ICal.tpl index 9f3a385e2c..f38502d5ad 100644 --- a/civicrm/templates/CRM/Core/Calendar/ICal.tpl +++ b/civicrm/templates/CRM/Core/Calendar/ICal.tpl @@ -24,15 +24,15 @@ CATEGORIES:{$event.event_type|crmICalText} {/if} CALSCALE:GREGORIAN {if $event.start_date} -DTSTAMP;VALUE=DATE-TIME:{$event.start_date|crmICalDate} -DTSTART;VALUE=DATE-TIME:{$event.start_date|crmICalDate} +DTSTAMP;TZID={$timezone}:{$event.start_date|crmICalDate} +DTSTART;TZID={$timezone}:{$event.start_date|crmICalDate} {else} -DTSTAMP;VALUE=DATE-TIME:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'|crmICalDate} +DTSTAMP;TZID={$timezone}:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'|crmICalDate} {/if} {if $event.end_date} -DTEND;VALUE=DATE-TIME:{$event.end_date|crmICalDate} +DTEND;TZID={$timezone}:{$event.end_date|crmICalDate} {else} -DTEND;VALUE=DATE-TIME:{$event.start_date|crmICalDate} +DTEND;TZID={$timezone}:{$event.start_date|crmICalDate} {/if} {if $event.is_show_location EQ 1 && $event.location} LOCATION:{$event.location|crmICalText} diff --git a/civicrm/templates/CRM/Core/Form/Field.tpl b/civicrm/templates/CRM/Core/Form/Field.tpl index 116376898f..d8b8ea42fc 100644 --- a/civicrm/templates/CRM/Core/Form/Field.tpl +++ b/civicrm/templates/CRM/Core/Form/Field.tpl @@ -17,7 +17,7 @@ {/capture}{help id=$help.id file=$help.file}{/if} {if $action == 2 && $fieldSpec.is_add_translate_dialog}{include file='CRM/Core/I18n/Dialog.tpl' table=$entityTable field=$fieldName id=$entityID}{/if} </td> - <td>{$fieldSpec.pre_html_text}{if $form.$fieldName.html}{if $fieldSpec.formatter === 'crmMoney'}{$form.$fieldName.html|crmMoney:$fieldSpec.formatterParam}{else}{$form.$fieldName.html}{/if}{else}{$fieldSpec.place_holder}{/if}{$fieldSpec.post_html_text}<br /> + <td>{$fieldSpec.pre_html_text}{if $form.$fieldName.html}{$form.$fieldName.html}{else}{$fieldSpec.place_holder}{/if}{$fieldSpec.post_html_text}<br /> {if $fieldSpec.description}<span class="description">{$fieldSpec.description}</span>{/if} {if $fieldSpec.documentation_link}{docURL page=$fieldSpec.documentation_link.page resource=$fieldSpec.documentation_link.resource}{/if} </td> diff --git a/civicrm/templates/CRM/Event/Form/EventFees.tpl b/civicrm/templates/CRM/Event/Form/EventFees.tpl index 355e821caa..e6c5ef4ab4 100644 --- a/civicrm/templates/CRM/Event/Form/EventFees.tpl +++ b/civicrm/templates/CRM/Event/Form/EventFees.tpl @@ -68,7 +68,7 @@ <td class="label">{$form.financial_type_id.label}<span class="crm-marker"> *</span></td> <td>{$form.financial_type_id.html}<br /><span class="description">{ts}Select the appropriate financial type for this payment.{/ts}</span></td> </tr> - <tr class="crm-event-eventfees-form-block-total_amount"><td class="label">{$form.total_amount.label}</td><td>{$form.total_amount.html|crmMoney:$currency}</td></tr> + <tr class="crm-event-eventfees-form-block-total_amount"><td class="label">{$form.total_amount.label}</td><td>{$form.total_amount.html}</td></tr> <tr> <td class="label" >{$form.receive_date.label}</td> <td>{$form.receive_date.html}</td> diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl index e397febb8c..45abb521a6 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl @@ -146,7 +146,7 @@ <tr class="columnheader"><td scope="column">{ts}Fee Label{/ts}</td><td scope="column">{ts}Amount{/ts}</td><td scope="column">{ts}Default?{/ts}<br />{$form.default.0.html}</td></tr> {section name=loop start=1 loop=11} {assign var=idx value=$smarty.section.loop.index} - <tr><td class="even-row crm-event-manage-fee-form-block-label_{$idx}">{$form.label.$idx.html}</td><td class="crm-event-manage-fee-form-block-value_{$idx}">{$form.value.$idx.html|crmMoney}</td><td class="even-row crm-event-manage-fee-form-block-default_{$idx}">{$form.default.$idx.html}</td></tr> + <tr><td class="even-row crm-event-manage-fee-form-block-label_{$idx}">{$form.label.$idx.html}</td><td class="crm-event-manage-fee-form-block-value_{$idx}">{$form.value.$idx.html}</td><td class="even-row crm-event-manage-fee-form-block-default_{$idx}">{$form.default.$idx.html}</td></tr> {/section} </table> </fieldset> @@ -208,7 +208,7 @@ {section name=loop1 start=1 loop=6} {assign var=idy value=$smarty.section.loop1.index} {if $form.discount_name.$idy.value} - <td>{$form.discounted_value.$idx.$idy.html|crmMoney}</td> + <td>{$form.discounted_value.$idx.$idy.html}</td> {/if} {/section} <td class="even-row">{$form.discounted_default.$idx.html}</td> diff --git a/civicrm/templates/CRM/Export/Form/Map.tpl b/civicrm/templates/CRM/Export/Form/Map.tpl index dda47d32d2..24eb7a9816 100644 --- a/civicrm/templates/CRM/Export/Form/Map.tpl +++ b/civicrm/templates/CRM/Export/Form/Map.tpl @@ -22,9 +22,9 @@ {include file="CRM/common/WizardHeader.tpl"} <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> - <div ng-app="exportui"> + <crm-angular-js modules="exportui"> <div class="crm-export-field-selector-outer" ng-controller="ExportUiCtrl" ng-include="'~/exportui/export.html'"></div> - </div> + </crm-angular-js> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> {$initHideBoxes} diff --git a/civicrm/templates/CRM/Financial/Form/Export.tpl b/civicrm/templates/CRM/Financial/Form/Export.tpl index 4b1bf47f1d..1bd38a56bf 100644 --- a/civicrm/templates/CRM/Financial/Form/Export.tpl +++ b/civicrm/templates/CRM/Financial/Form/Export.tpl @@ -40,7 +40,8 @@ $('input[name="export_format"]').filter('[value=IIF]').prop('checked', true); $('#_qf_Export_next').click(function(){ $(this).hide(); - $('#_qf_Export_cancel').val('{/literal}{ts}Done{/ts}{literal}'); + {/literal}{capture assign=tsdone}{ts}Done{/ts}{/capture}{literal} + $('#_qf_Export_cancel').html('<i aria-hidden="true" class="crm-i fa-check"></i> {/literal}{$tsdone|escape}{literal}'); }); }); </script> diff --git a/civicrm/templates/CRM/Financial/Form/Search.tpl b/civicrm/templates/CRM/Financial/Form/Search.tpl index 3cc7b90473..3c10417481 100644 --- a/civicrm/templates/CRM/Financial/Form/Search.tpl +++ b/civicrm/templates/CRM/Financial/Form/Search.tpl @@ -214,9 +214,6 @@ CRM.$(function($) { } function saveRecords(records, op) { - if (op == 'export') { - return exportRecords(records); - } var postUrl = CRM.url('civicrm/ajax/rest', 'className=CRM_Financial_Page_AJAX&fnName=assignRemove'); //post request and get response $.post(postUrl, {records: records, recordBAO: 'CRM_Batch_BAO_Batch', op: op, key: {/literal}"{crmKey name='civicrm/ajax/ar'}"{literal}}, @@ -234,19 +231,6 @@ CRM.$(function($) { 'json').error(serverError); } - function exportRecords(records) { - var query = {'batch_id': records, 'export_format': $('select.export-format').val()}; - var exportUrl = CRM.url('civicrm/financial/batch/export', 'reset=1'); - // jQuery redirect expects all query args as an object, so extract them from crm url - var urlParts = exportUrl.split('?'); - $.each(urlParts[1].split('&'), function(key, val) { - var q = val.split('='); - query[q[0]] = q[1]; - }); - $().redirect(urlParts[0], query, 'GET'); - setTimeout(function() {batchSelector.fnDraw();}, 4000); - } - function validateOp(records, op) { switch (op) { case 'reopen': @@ -302,6 +286,11 @@ CRM.$(function($) { $("input.select-row:checked").each(function() { records.push($(this).attr('id').replace('check_', '')); }); + if (op == 'export') { + // No need for the modal pop-up, just proceed to the next screen. + window.location = CRM.url("civicrm/financial/batch/export", {reset: 1, id: records[0], status: 1}); + return false; + } editRecords(records, op); } return false; diff --git a/civicrm/templates/CRM/Member/Form/Membership.tpl b/civicrm/templates/CRM/Member/Form/Membership.tpl index 6f61bba51a..2da528bd35 100644 --- a/civicrm/templates/CRM/Member/Form/Membership.tpl +++ b/civicrm/templates/CRM/Member/Form/Membership.tpl @@ -294,7 +294,8 @@ // skip this for test and live modes because financial type is set automatically cj("#financial_type_id").val(membershipType['financial_type_id']); - var term = cj('#num_terms').val(); + // Get the number of terms from the form, default to 1 if no num_terms element. + var term = cj('#num_terms').val() || 1; var taxTerm = {/literal}{$taxTerm|@json_encode}{literal}; var currency = {/literal}{$currency_symbol|@json_encode}{literal}; var taxExclusiveAmount = membershipType['total_amount_numeric'] * term; diff --git a/civicrm/templates/CRM/Pledge/Form/Pledge.tpl b/civicrm/templates/CRM/Pledge/Form/Pledge.tpl index fa6afe6e6c..09ba2bca48 100644 --- a/civicrm/templates/CRM/Pledge/Form/Pledge.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Pledge.tpl @@ -51,7 +51,7 @@ <td>{$form.installments.html} {ts}installments of{/ts} <span class='currency-symbol'> {if $action eq 1 or $isPending} - {$form.eachPaymentAmount.html|crmMoney:$currency} + {$form.eachPaymentAmount.html} {elseif $action eq 2 and !$isPending} {$eachPaymentAmount|crmMoney:$currency} {/if} diff --git a/civicrm/templates/CRM/UF/Form/Group.hlp b/civicrm/templates/CRM/UF/Form/Group.hlp index 3a0a93d8f1..7142292f7e 100644 --- a/civicrm/templates/CRM/UF/Form/Group.hlp +++ b/civicrm/templates/CRM/UF/Form/Group.hlp @@ -112,9 +112,9 @@ {ts}reCaptcha{/ts} {/htxt} {htxt id='id-add_captcha'} -{capture assign="miscURL"}{crmURL p="civicrm/admin/setting/misc" q="reset=1"}{/capture} +{capture assign="miscURL"}{crmURL p="civicrm/admin/setting/recaptcha" q="reset=1"}{/capture} <p>{ts}When reCAPTCHA is enabled for a profile form, anonymous users are required to read an image with letters and numbers and enter the value in a field. This helps prevent abuse by automated scripts.{/ts}</p> -<p>{ts 1="https://www.google.com/recaptcha" 2=$miscURL}To use reCAPTCHA you must sign up at <a href="%1" target="_blank">Google's reCaptcha site</a> to get your public and private keys. Then enter both keys in <a href="%2">Administer CiviCRM » System Settings » Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)</a>.{/ts}</p> +<p>{ts 1="https://www.google.com/recaptcha" 2=$miscURL}To use reCAPTCHA you must sign up at <a href="%1" target="_blank">Google's reCaptcha site</a> to get your public and private keys. Then enter both keys in <a href="%2">Administer CiviCRM » Customize Data and Screens » reCAPTCHA settings</a>.{/ts}</p> <p><strong>{ts}Do not enable this feature if you are using this profile as an HTML Form Snippet embedded in a non-CiviCRM web page. reCAPTCHA requires dynamic page generation. Submitting a stand-alone form with reCAPTCHA included will always result in a reCAPTCHA validation error.{/ts}</strong></p> {if $config->userSystem->supports_form_extensions EQ '1'} <p><strong>{ts}reCAPTCHA is also not available when a profile is used inside the User Registration and My Account screens.{/ts}</strong></p> diff --git a/civicrm/templates/CRM/common/SocialNetwork.tpl b/civicrm/templates/CRM/common/SocialNetwork.tpl index 3034f36162..57f91076de 100644 --- a/civicrm/templates/CRM/common/SocialNetwork.tpl +++ b/civicrm/templates/CRM/common/SocialNetwork.tpl @@ -17,18 +17,16 @@ <a href="https://facebook.com/sharer/sharer.php?u={$url|escape:'url'}" target="_blank" class="btn btn-default" role="button">{ts}Share on Facebook{/ts}</a> <a href="ttps://www.linkedin.com/shareArticle?mini=true&url={$url|escape:'url'}&title={$title}" target="_blank" rel="noopener" class="btn btn-default">{ts}Share on LinkedIn{/ts}</a> {else} - <button onclick="window.open('https://twitter.com/share?url={$url|escape:'url'}&text={$title}','_blank')" type="button" class="btn btn-default crm-button" id="crm-tw"><i aria-hidden="true" class="crm-i fa-twitter"></i> {ts}Tweet{/ts}</button> + <button onclick="window.open('https://twitter.com/intent/tweet?url={$url|escape:'url'}&text={$title}','_blank')" type="button" class="btn btn-default crm-button" id="crm-tw"><i aria-hidden="true" class="crm-i fa-twitter"></i> {ts}Tweet{/ts}</button> <button onclick="window.open('https://facebook.com/sharer/sharer.php?u={$url|escape:'url'}','_blank')" type="button" class="btn btn-default crm-button" role="button" id="crm-fb"><i aria-hidden="true" class="crm-i fa-facebook"></i> {ts}Share on Facebook{/ts}</button> <button onclick="window.open('https://www.linkedin.com/shareArticle?mini=true&url={$url|escape:'url'}&title={$title}','_blank')" type="button" rel="noopener" class="btn btn-default crm-button" id="crm-li"><i aria-hidden="true" class="crm-i fa-linkedin"></i> {ts}Share on LinkedIn{/ts}</button> <button onclick="window.open('mailto:?subject={$title}&body={$url|escape:'url'}','_self')" type="button" rel="noopener" class="btn btn-default crm-button" id="crm-email"><i aria-hidden="true" class="crm-i fa-envelope"></i> {ts}Email{/ts}</button> - {/if} + {/if} {if $pageURL} - {if $emailMode neq true} - <br/> - {/if} - <br/> - <p><strong>{ts}You can also share the below link in an email or on your website:{/ts}</strong><br /> + <p class="clear"> + <br/><strong>{ts}You can also share the below link in an email or on your website:{/ts}</strong><br /> <a href="{$pageURL}">{$pageURL}</a></p> {else} + <div class="clear"></div> {/if} </div> diff --git a/civicrm/templates/CRM/common/TabHeader.tpl b/civicrm/templates/CRM/common/TabHeader.tpl index 1345f31f9a..c2e54d9b8a 100644 --- a/civicrm/templates/CRM/common/TabHeader.tpl +++ b/civicrm/templates/CRM/common/TabHeader.tpl @@ -28,7 +28,7 @@ </ul> {foreach from=$tabHeader key=tabName item=tabValue} {if !empty($tabValue.template)} - <div id="#panel_{$tabName}"> + <div id="panel_{$tabName}"> {include file=$tabValue.template} </div> {/if} diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index 9b7fe927fe..a04741bb61 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit0dbc77f5b64a42583beba4f4cba7283d::getLoader(); +return ComposerAutoloaderInitdba5a8c8a6449ed6d9ad495c62fe9492::getLoader(); diff --git a/civicrm/vendor/brick/math/.github/FUNDING.yml b/civicrm/vendor/brick/math/.github/FUNDING.yml deleted file mode 100644 index 882491c12d..0000000000 --- a/civicrm/vendor/brick/math/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -tidelift: "packagist/brick/math" diff --git a/civicrm/vendor/brick/math/CHANGELOG.md b/civicrm/vendor/brick/math/CHANGELOG.md new file mode 100644 index 0000000000..61ab09d182 --- /dev/null +++ b/civicrm/vendor/brick/math/CHANGELOG.md @@ -0,0 +1,403 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [0.9.1](https://github.com/brick/math/releases/tag/0.9.1) - 2020-08-19 + +✨ New features + +- `BigInteger::not()` returns the bitwise `NOT` value + +🛠**Bug fixes** + +- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers +- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available + +## [0.9.0](https://github.com/brick/math/releases/tag/0.9.0) - 2020-08-18 + +👌 **Improvements** + +- `BigNumber::of()` now accepts `.123` and `123.` formats, both of which return a `BigDecimal` + +💥 **Breaking changes** + +- Deprecated method `BigInteger::powerMod()` has been removed - use `modPow()` instead +- Deprecated method `BigInteger::parse()` has been removed - use `fromBase()` instead + +## [0.8.9](https://github.com/brick/math/releases/tag/0.8.9) - 2020-01-08 + +âš¡ï¸ **Performance improvements** + +A few additional optimizations in `BigInteger` and `BigDecimal` when one of the operands can be returned as is. Thanks to @tomtomsen in #24. + +## [0.8.8](https://github.com/brick/math/releases/tag/0.8.8) - 2019-04-25 + +🛠**Bug fixes** + +- `BigInteger::toBase()` could return an empty string for zero values (BCMath & Native calculators only, GMP calculator unaffected) + +✨ **New features** + +- `BigInteger::toArbitraryBase()` converts a number to an arbitrary base, using a custom alphabet +- `BigInteger::fromArbitraryBase()` converts a string in an arbitrary base, using a custom alphabet, back to a number + +These methods can be used as the foundation to convert strings between different bases/alphabets, using BigInteger as an intermediate representation. + +💩 **Deprecations** + +- `BigInteger::parse()` is now deprecated in favour of `fromBase()` + +`BigInteger::fromBase()` works the same way as `parse()`, with 2 minor differences: + +- the `$base` parameter is required, it does not default to `10` +- it throws a `NumberFormatException` instead of an `InvalidArgumentException` when the number is malformed + +## [0.8.7](https://github.com/brick/math/releases/tag/0.8.7) - 2019-04-20 + +**Improvements** + +- Safer conversion from `float` when using custom locales +- **Much faster** `NativeCalculator` implementation 🚀 + +You can expect **at least a 3x performance improvement** for common arithmetic operations when using the library on systems without GMP or BCMath; it gets exponentially faster on multiplications with a high number of digits. This is due to calculations now being performed on whole blocks of digits (the block size depending on the platform, 32-bit or 64-bit) instead of digit-by-digit as before. + +## [0.8.6](https://github.com/brick/math/releases/tag/0.8.6) - 2019-04-11 + +**New method** + +`BigNumber::sum()` returns the sum of one or more numbers. + +## [0.8.5](https://github.com/brick/math/releases/tag/0.8.5) - 2019-02-12 + +**Bug fix**: `of()` factory methods could fail when passing a `float` in environments using a `LC_NUMERIC` locale with a decimal separator other than `'.'` (#20). + +Thanks @manowark 👠+ +## [0.8.4](https://github.com/brick/math/releases/tag/0.8.4) - 2018-12-07 + +**New method** + +`BigDecimal::sqrt()` calculates the square root of a decimal number, to a given scale. + +## [0.8.3](https://github.com/brick/math/releases/tag/0.8.3) - 2018-12-06 + +**New method** + +`BigInteger::sqrt()` calculates the square root of a number (thanks @peter279k). + +**New exception** + +`NegativeNumberException` is thrown when calling `sqrt()` on a negative number. + +## [0.8.2](https://github.com/brick/math/releases/tag/0.8.2) - 2018-11-08 + +**Performance update** + +- Further improvement of `toInt()` performance +- `NativeCalculator` can now perform some multiplications more efficiently + +## [0.8.17](https://github.com/brick/math/releases/tag/0.8.17) - 2020-08-19 + +🛠**Bug fix** + +- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers +- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available + +## [0.8.16](https://github.com/brick/math/releases/tag/0.8.16) - 2020-08-18 + +🚑 **Critical fix** + +- This version reintroduces the deprecated `BigInteger::parse()` method, that has been removed by mistake in version `0.8.9` and should have lasted for the whole `0.8` release cycle. + +✨ **New features** + +- `BigInteger::modInverse()` calculates a modular multiplicative inverse +- `BigInteger::fromBytes()` creates a `BigInteger` from a byte string +- `BigInteger::toBytes()` converts a `BigInteger` to a byte string +- `BigInteger::randomBits()` creates a pseudo-random `BigInteger` of a given bit length +- `BigInteger::randomRange()` creates a pseudo-random `BigInteger` between two bounds + +💩 **Deprecations** + +- `BigInteger::powerMod()` is now deprecated in favour of `modPow()` + +## [0.8.15](https://github.com/brick/math/releases/tag/0.8.15) - 2020-04-15 + +🛠**Fixes** + +- added missing `ext-json` requirement, due to `BigNumber` implementing `JsonSerializable` + +âš¡ï¸ **Optimizations** + +- additional optimization in `BigInteger::remainder()` + +## [0.8.14](https://github.com/brick/math/releases/tag/0.8.14) - 2020-02-18 + +✨ **New features** + +- `BigInteger::getLowestSetBit()` returns the index of the rightmost one bit + +## [0.8.13](https://github.com/brick/math/releases/tag/0.8.13) - 2020-02-16 + +✨ **New features** + +- `BigInteger::isEven()` tests whether the number is even +- `BigInteger::isOdd()` tests whether the number is odd +- `BigInteger::testBit()` tests if a bit is set +- `BigInteger::getBitLength()` returns the number of bits in the minimal representation of the number + +## [0.8.12](https://github.com/brick/math/releases/tag/0.8.12) - 2020-02-03 + +ðŸ› ï¸ **Maintenance release** + +Classes are now annotated for better static analysis with [psalm](https://psalm.dev/). + +This is a maintenance release: no bug fixes, no new features, no breaking changes. + +## [0.8.11](https://github.com/brick/math/releases/tag/0.8.11) - 2020-01-23 + +✨ **New feature** + +`BigInteger::powerMod()` performs a power-with-modulo operation. Useful for crypto. + +## [0.8.10](https://github.com/brick/math/releases/tag/0.8.10) - 2020-01-21 + +✨ **New feature** + +`BigInteger::mod()` returns the **modulo** of two numbers. The *modulo* differs from the *remainder* when the signs of the operands are different. + +## [0.8.1](https://github.com/brick/math/releases/tag/0.8.1) - 2018-11-07 + +Performance optimization of `toInt()` methods. + +## [0.8.0](https://github.com/brick/math/releases/tag/0.8.0) - 2018-10-13 + +**Breaking changes** + +The following deprecated methods have been removed. Use the new method name instead: + +| Method removed | Replacement method | +| --- | --- | +| `BigDecimal::getIntegral()` | `BigDecimal::getIntegralPart()` | +| `BigDecimal::getFraction()` | `BigDecimal::getFractionalPart()` | + +--- + +**New features** + +`BigInteger` has been augmented with 5 new methods for bitwise operations: + +| New method | Description | +| --- | --- | +| `and()` | performs a bitwise `AND` operation on two numbers | +| `or()` | performs a bitwise `OR` operation on two numbers | +| `xor()` | performs a bitwise `XOR` operation on two numbers | +| `shiftedLeft()` | returns the number shifted left by a number of bits | +| `shiftedRight()` | returns the number shifted right by a number of bits | + +Thanks to @DASPRiD 👠+ +## [0.7.3](https://github.com/brick/math/releases/tag/0.7.3) - 2018-08-20 + +**New method:** `BigDecimal::hasNonZeroFractionalPart()` + +**Renamed/deprecated methods:** + +- `BigDecimal::getIntegral()` has been renamed to `getIntegralPart()` and is now deprecated +- `BigDecimal::getFraction()` has been renamed to `getFractionalPart()` and is now deprecated + +## [0.7.2](https://github.com/brick/math/releases/tag/0.7.2) - 2018-07-21 + +**Performance update** + +`BigInteger::parse()` and `toBase()` now use GMP's built-in base conversion features when available. + +## [0.7.1](https://github.com/brick/math/releases/tag/0.7.1) - 2018-03-01 + +This is a maintenance release, no code has been changed. + +- When installed with `--no-dev`, the autoloader does not autoload tests anymore +- Tests and other files unnecessary for production are excluded from the dist package + +This will help make installations more compact. + +## [0.7.0](https://github.com/brick/math/releases/tag/0.7.0) - 2017-10-02 + +Methods renamed: + +- `BigNumber:sign()` has been renamed to `getSign()` +- `BigDecimal::unscaledValue()` has been renamed to `getUnscaledValue()` +- `BigDecimal::scale()` has been renamed to `getScale()` +- `BigDecimal::integral()` has been renamed to `getIntegral()` +- `BigDecimal::fraction()` has been renamed to `getFraction()` +- `BigRational::numerator()` has been renamed to `getNumerator()` +- `BigRational::denominator()` has been renamed to `getDenominator()` + +Classes renamed: + +- `ArithmeticException` has been renamed to `MathException` + +## [0.6.2](https://github.com/brick/math/releases/tag/0.6.2) - 2017-10-02 + +The base class for all exceptions is now `MathException`. +`ArithmeticException` has been deprecated, and will be removed in 0.7.0. + +## [0.6.1](https://github.com/brick/math/releases/tag/0.6.1) - 2017-10-02 + +A number of methods have been renamed: + +- `BigNumber:sign()` is deprecated; use `getSign()` instead +- `BigDecimal::unscaledValue()` is deprecated; use `getUnscaledValue()` instead +- `BigDecimal::scale()` is deprecated; use `getScale()` instead +- `BigDecimal::integral()` is deprecated; use `getIntegral()` instead +- `BigDecimal::fraction()` is deprecated; use `getFraction()` instead +- `BigRational::numerator()` is deprecated; use `getNumerator()` instead +- `BigRational::denominator()` is deprecated; use `getDenominator()` instead + +The old methods will be removed in version 0.7.0. + +## [0.6.0](https://github.com/brick/math/releases/tag/0.6.0) - 2017-08-25 + +- Minimum PHP version is now [7.1](https://gophp71.org/); for PHP 5.6 and PHP 7.0 support, use version `0.5` +- Deprecated method `BigDecimal::withScale()` has been removed; use `toScale()` instead +- Method `BigNumber::toInteger()` has been renamed to `toInt()` + +## [0.5.4](https://github.com/brick/math/releases/tag/0.5.4) - 2016-10-17 + +`BigNumber` classes now implement [JsonSerializable](http://php.net/manual/en/class.jsonserializable.php). +The JSON output is always a string. + +## [0.5.3](https://github.com/brick/math/releases/tag/0.5.3) - 2016-03-31 + +This is a bugfix release. Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.5.2](https://github.com/brick/math/releases/tag/0.5.2) - 2015-08-06 + +The `$scale` parameter of `BigDecimal::dividedBy()` is now optional again. + +## [0.5.1](https://github.com/brick/math/releases/tag/0.5.1) - 2015-07-05 + +**New method: `BigNumber::toScale()`** + +This allows to convert any `BigNumber` to a `BigDecimal` with a given scale, using rounding if necessary. + +## [0.5.0](https://github.com/brick/math/releases/tag/0.5.0) - 2015-07-04 + +**New features** +- Common `BigNumber` interface for all classes, with the following methods: + - `sign()` and derived methods (`isZero()`, `isPositive()`, ...) + - `compareTo()` and derived methods (`isEqualTo()`, `isGreaterThan()`, ...) that work across different `BigNumber` types + - `toBigInteger()`, `toBigDecimal()`, `toBigRational`() conversion methods + - `toInteger()` and `toFloat()` conversion methods to native types +- Unified `of()` behaviour: every class now accepts any type of number, provided that it can be safely converted to the current type +- New method: `BigDecimal::exactlyDividedBy()`; this method automatically computes the scale of the result, provided that the division yields a finite number of digits +- New methods: `BigRational::quotient()` and `remainder()` +- Fine-grained exceptions: `DivisionByZeroException`, `RoundingNecessaryException`, `NumberFormatException` +- Factory methods `zero()`, `one()` and `ten()` available in all classes +- Rounding mode reintroduced in `BigInteger::dividedBy()` + +This release also comes with many performance improvements. + +--- + +**Breaking changes** +- `BigInteger`: + - `getSign()` is renamed to `sign()` + - `toString()` is renamed to `toBase()` + - `BigInteger::dividedBy()` now throws an exception by default if the remainder is not zero; use `quotient()` to get the previous behaviour +- `BigDecimal`: + - `getSign()` is renamed to `sign()` + - `getUnscaledValue()` is renamed to `unscaledValue()` + - `getScale()` is renamed to `scale()` + - `getIntegral()` is renamed to `integral()` + - `getFraction()` is renamed to `fraction()` + - `divideAndRemainder()` is renamed to `quotientAndRemainder()` + - `dividedBy()` now takes a **mandatory** `$scale` parameter **before** the rounding mode + - `toBigInteger()` does not accept a `$roundingMode` parameter any more + - `toBigRational()` does not simplify the fraction any more; explicitly add `->simplified()` to get the previous behaviour +- `BigRational`: + - `getSign()` is renamed to `sign()` + - `getNumerator()` is renamed to `numerator()` + - `getDenominator()` is renamed to `denominator()` + - `of()` is renamed to `nd()`, while `parse()` is renamed to `of()` +- Miscellaneous: + - `ArithmeticException` is moved to an `Exception\` sub-namespace + - `of()` factory methods now throw `NumberFormatException` instead of `InvalidArgumentException` + +## [0.4.3](https://github.com/brick/math/releases/tag/0.4.3) - 2016-03-31 + +Backport of two bug fixes from the 0.5 branch: +- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected +- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.4.2](https://github.com/brick/math/releases/tag/0.4.2) - 2015-06-16 + +New method: `BigDecimal::stripTrailingZeros()` + +## [0.4.1](https://github.com/brick/math/releases/tag/0.4.1) - 2015-06-12 + +Introducing a `BigRational` class, to perform calculations on fractions of any size. + +## [0.4.0](https://github.com/brick/math/releases/tag/0.4.0) - 2015-06-12 + +Rounding modes have been removed from `BigInteger`, and are now a concept specific to `BigDecimal`. + +`BigInteger::dividedBy()` now always returns the quotient of the division. + +## [0.3.5](https://github.com/brick/math/releases/tag/0.3.5) - 2016-03-31 + +Backport of two bug fixes from the 0.5 branch: + +- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected +- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.3.4](https://github.com/brick/math/releases/tag/0.3.4) - 2015-06-11 + +New methods: +- `BigInteger::remainder()` returns the remainder of a division only +- `BigInteger::gcd()` returns the greatest common divisor of two numbers + +## [0.3.3](https://github.com/brick/math/releases/tag/0.3.3) - 2015-06-07 + +Fix `toString()` not handling negative numbers. + +## [0.3.2](https://github.com/brick/math/releases/tag/0.3.2) - 2015-06-07 + +`BigInteger` and `BigDecimal` now have a `getSign()` method that returns: +- `-1` if the number is negative +- `0` if the number is zero +- `1` if the number is positive + +## [0.3.1](https://github.com/brick/math/releases/tag/0.3.1) - 2015-06-05 + +Minor performance improvements + +## [0.3.0](https://github.com/brick/math/releases/tag/0.3.0) - 2015-06-04 + +The `$roundingMode` and `$scale` parameters have been swapped in `BigDecimal::dividedBy()`. + +## [0.2.2](https://github.com/brick/math/releases/tag/0.2.2) - 2015-06-04 + +Stronger immutability guarantee for `BigInteger` and `BigDecimal`. + +So far, it would have been possible to break immutability of these classes by calling the `unserialize()` internal function. This release fixes that. + +## [0.2.1](https://github.com/brick/math/releases/tag/0.2.1) - 2015-06-02 + +Added `BigDecimal::divideAndRemainder()` + +## [0.2.0](https://github.com/brick/math/releases/tag/0.2.0) - 2015-05-22 + +- `min()` and `max()` do not accept an `array` any more, but a variable number of parameters +- **minimum PHP version is now 5.6** +- continuous integration with PHP 7 + +## [0.1.1](https://github.com/brick/math/releases/tag/0.1.1) - 2014-09-01 + +- Added `BigInteger::power()` +- Added HHVM support + +## [0.1.0](https://github.com/brick/math/releases/tag/0.1.0) - 2014-08-31 + +First beta release. + diff --git a/civicrm/vendor/brick/math/SECURITY.md b/civicrm/vendor/brick/math/SECURITY.md index 6bdc74f0df..cc8289bb50 100644 --- a/civicrm/vendor/brick/math/SECURITY.md +++ b/civicrm/vendor/brick/math/SECURITY.md @@ -2,10 +2,11 @@ ## Supported Versions -Only the latest release stream is supported. +Only the last two release streams are supported. | Version | Supported | | ------- | ------------------ | +| 0.9.x | :white_check_mark: | | 0.8.x | :white_check_mark: | | < 0.8 | :x: | diff --git a/civicrm/vendor/brick/math/composer.json b/civicrm/vendor/brick/math/composer.json index d347b6bdeb..c89955d12b 100644 --- a/civicrm/vendor/brick/math/composer.json +++ b/civicrm/vendor/brick/math/composer.json @@ -14,13 +14,13 @@ ], "license": "MIT", "require": { - "php": "^7.1|^8.0", + "php": "^7.1 || ^8.0", "ext-json": "*" }, "require-dev": { - "phpunit/phpunit": "^7.5.15|^8.5", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", "php-coveralls/php-coveralls": "^2.2", - "vimeo/psalm": "^3.5" + "vimeo/psalm": "4.3.2" }, "autoload": { "psr-4": { diff --git a/civicrm/vendor/brick/math/psalm-baseline.xml b/civicrm/vendor/brick/math/psalm-baseline.xml deleted file mode 100644 index fe05b998cd..0000000000 --- a/civicrm/vendor/brick/math/psalm-baseline.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<files psalm-version="3.8.5@e6ec5fa22a7b9e61670a24d07b3119aff80dcd89"> - <file src="src/Internal/Calculator/BcMathCalculator.php"> - <InvalidNullableReturnType occurrences="3"> - <code>string</code> - <code>string</code> - <code>string</code> - </InvalidNullableReturnType> - <InvalidReturnStatement occurrences="1"> - <code>[$q, $r]</code> - </InvalidReturnStatement> - <InvalidReturnType occurrences="1"> - <code>array</code> - </InvalidReturnType> - <NullableReturnStatement occurrences="3"> - <code>\bcdiv($a, $b, 0)</code> - <code>\bcmod($a, $b)</code> - <code>\bcpowmod($base, $exp, $mod, 0)</code> - </NullableReturnStatement> - </file> - <file src="src/Internal/Calculator/NativeCalculator.php"> - <InvalidOperand occurrences="6"> - <code>$a</code> - <code>$a</code> - <code>$a</code> - <code>$b</code> - <code>$blockA</code> - <code>$blockA</code> - </InvalidOperand> - <LoopInvalidation occurrences="4"> - <code>$i</code> - <code>$i</code> - <code>$i</code> - <code>$j</code> - </LoopInvalidation> - <PossiblyInvalidArgument occurrences="1"> - <code>$e / 2</code> - </PossiblyInvalidArgument> - </file> -</files> diff --git a/civicrm/vendor/brick/math/psalm.xml b/civicrm/vendor/brick/math/psalm.xml deleted file mode 100644 index 123263ef49..0000000000 --- a/civicrm/vendor/brick/math/psalm.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0"?> -<psalm - totallyTyped="false" - resolveFromConfigFile="true" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="https://getpsalm.org/schema/config" - xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" - errorBaseline="psalm-baseline.xml" -> - <projectFiles> - <directory name="src" /> - <ignoreFiles> - <directory name="vendor" /> - </ignoreFiles> - </projectFiles> - - <issueHandlers> - <LessSpecificReturnType errorLevel="info" /> - - <!-- level 3 issues - slightly lazy code writing, but provably low false-negatives --> - - <DeprecatedMethod errorLevel="info" /> - <DeprecatedProperty errorLevel="info" /> - <DeprecatedClass errorLevel="info" /> - <DeprecatedConstant errorLevel="info" /> - <DeprecatedFunction errorLevel="info" /> - <DeprecatedInterface errorLevel="info" /> - <DeprecatedTrait errorLevel="info" /> - - <InternalMethod errorLevel="info" /> - <InternalProperty errorLevel="info" /> - <InternalClass errorLevel="info" /> - - <MissingClosureReturnType errorLevel="info" /> - <MissingReturnType errorLevel="info" /> - <MissingPropertyType errorLevel="info" /> - <InvalidDocblock errorLevel="info" /> - <MisplacedRequiredParam errorLevel="info" /> - - <PropertyNotSetInConstructor errorLevel="info" /> - <MissingConstructor errorLevel="info" /> - <MissingClosureParamType errorLevel="info" /> - <MissingParamType errorLevel="info" /> - - <RedundantCondition errorLevel="info" /> - - <DocblockTypeContradiction errorLevel="info" /> - <RedundantConditionGivenDocblockType errorLevel="info" /> - - <UnresolvableInclude errorLevel="info" /> - - <RawObjectIteration errorLevel="info" /> - - <InvalidStringClass errorLevel="info" /> - </issueHandlers> -</psalm> diff --git a/civicrm/vendor/brick/math/random-tests.php b/civicrm/vendor/brick/math/random-tests.php new file mode 100644 index 0000000000..d9053fc119 --- /dev/null +++ b/civicrm/vendor/brick/math/random-tests.php @@ -0,0 +1,194 @@ +<?php + +/** + * This script stress tests calculators with random large numbers and ensures that all implementations return the same + * results. It is designed to run in an infinite loop unless a bug is found. + */ + +declare(strict_types=1); + +require __DIR__ . '/vendor/autoload.php'; + +use Brick\Math\Internal\Calculator; + +(new class(30) { // max digits + private $gmp; + private $bcmath; + private $native; + + private $maxDigits; + + public function __construct(int $maxDigits) + { + $this->gmp = new Calculator\GmpCalculator(); + $this->bcmath = new Calculator\BcMathCalculator(); + $this->native = new Calculator\NativeCalculator(); + + $this->maxDigits = $maxDigits; + } + + public function __invoke() : void + { + for (;;) { + $a = $this->generateRandomNumber(); + $b = $this->generateRandomNumber(); + $c = $this->generateRandomNumber(); + + $this->runTests($a, $b); + $this->runTests($b, $a); + + if ($a !== '0') { + $this->runTests("-$a", $b); + $this->runTests($b, "-$a"); + } + + if ($b !== '0') { + $this->runTests($a, "-$b"); + $this->runTests("-$b", $a); + } + + if ($a !== '0' && $b !== '0') { + $this->runTests("-$a", "-$b"); + $this->runTests("-$b", "-$a"); + } + + if ($c !== '0') { + $this->test("$a POW $b MOD $c", function(Calculator $calc) use($a, $b, $c) { + return $calc->modPow($a, $b, $c); + }); + } + } + } + + /** + * @param string $a The left operand. + * @param string $b The right operand. + */ + private function runTests(string $a, string $b) : void + { + $this->test("$a + $b", function(Calculator $c) use($a, $b) { + return $c->add($a, $b); + }); + + $this->test("$a - $b", function(Calculator $c) use($a, $b) { + return $c->sub($a, $b); + }); + + $this->test("$a * $b", function(Calculator $c) use($a, $b) { + return $c->mul($a, $b); + }); + + if ($b !== '0') { + $this->test("$a / $b", function(Calculator $c) use($a, $b) { + return $c->divQR($a, $b); + }); + + $this->test("$a MOD $b", function(Calculator $c) use($a, $b) { + return $c->mod($a, $b); + }); + } + + if ($b !== '0' && $b[0] !== '-') { + $this->test("INV $a MOD $b", function(Calculator $c) use($a, $b) { + return $c->modInverse($a, $b); + }); + } + + $this->test("GCD $a, $b", function(Calculator $c) use($a, $b) { + return $c->gcd($a, $b); + }); + + if ($a[0] !== '-') { + $this->test("SQRT $a", function(Calculator $c) use($a, $b) { + return $c->sqrt($a); + }); + } + + $this->test("$a AND $b", function(Calculator $c) use($a, $b) { + return $c->and($a, $b); + }); + + $this->test("$a OR $b", function(Calculator $c) use($a, $b) { + return $c->or($a, $b); + }); + + $this->test("$a XOR $b", function(Calculator $c) use($a, $b) { + return $c->xor($a, $b); + }); + } + + /** + * @param string $test A string representing the test being executed. + * @param Closure $callback A callback function accepting a Calculator instance and returning a calculation result. + */ + private function test(string $test, Closure $callback) : void + { + static $testCounter = 0; + static $lastOutputTime = 0.0; + static $currentSecond = 0; + static $currentSecondTestCounter = 0; + static $testsPerSecond = 0; + + $gmpResult = $callback($this->gmp); + $bcmathResult = $callback($this->bcmath); + $nativeResult = $callback($this->native); + + if ($gmpResult !== $bcmathResult) { + self::failure('GMP', 'BCMath', $test); + } + + if ($gmpResult !== $nativeResult) { + self::failure('GMP', 'Native', $test); + } + + $testCounter++; + $currentSecondTestCounter++; + + $time = microtime(true); + $second = (int) $time; + + if ($second !== $currentSecond) { + $currentSecond = $second; + $testsPerSecond = $currentSecondTestCounter; + $currentSecondTestCounter = 0; + } + + if ($time - $lastOutputTime >= 0.1) { + echo "\r", number_format($testCounter), ' (', number_format($testsPerSecond) . ' / s)'; + $lastOutputTime = $time; + } + } + + /** + * @param string $c1 The name of the first calculator. + * @param string $c2 The name of the second calculator. + * @param string $test A string representing the test being executed. + */ + private static function failure(string $c1, string $c2, string $test) : void + { + echo PHP_EOL; + echo 'FAILURE!', PHP_EOL; + echo $c1, ' vs ', $c2, PHP_EOL; + echo $test, PHP_EOL; + die; + } + + private function generateRandomNumber() : string + { + $length = random_int(1, $this->maxDigits); + + $number = ''; + + for ($i = 0; $i < $length; $i++) { + $number .= random_int(0, 9); + } + + $number = ltrim($number, '0'); + + if ($number === '') { + return '0'; + } + + return $number; + } +})(); diff --git a/civicrm/vendor/brick/math/src/BigDecimal.php b/civicrm/vendor/brick/math/src/BigDecimal.php index 29bdd320b0..7707b166e2 100644 --- a/civicrm/vendor/brick/math/src/BigDecimal.php +++ b/civicrm/vendor/brick/math/src/BigDecimal.php @@ -96,7 +96,10 @@ final class BigDecimal extends BigNumber */ public static function zero() : BigDecimal { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $zero + */ static $zero; if ($zero === null) { @@ -115,7 +118,10 @@ final class BigDecimal extends BigNumber */ public static function one() : BigDecimal { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $one + */ static $one; if ($one === null) { @@ -134,7 +140,10 @@ final class BigDecimal extends BigNumber */ public static function ten() : BigDecimal { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $ten + */ static $ten; if ($ten === null) { @@ -289,7 +298,7 @@ final class BigDecimal extends BigNumber throw DivisionByZeroException::divisionByZero(); } - [$a, $b] = $this->scaleValues($this, $that); + [, $b] = $this->scaleValues($this, $that); $d = \rtrim($b, '0'); $scale = \strlen($b) - \strlen($d); @@ -677,11 +686,7 @@ final class BigDecimal extends BigNumber */ public function toBigInteger() : BigInteger { - if ($this->scale === 0) { - $zeroScaleDecimal = $this; - } else { - $zeroScaleDecimal = $this->dividedBy(1, 0); - } + $zeroScaleDecimal = $this->scale === 0 ? $this : $this->dividedBy(1, 0); return BigInteger::create($zeroScaleDecimal->value); } @@ -763,6 +768,7 @@ final class BigDecimal extends BigNumber * This method is only here to implement interface Serializable and cannot be accessed directly. * * @internal + * @psalm-suppress RedundantPropertyInitializationCheck * * @param string $value * diff --git a/civicrm/vendor/brick/math/src/BigInteger.php b/civicrm/vendor/brick/math/src/BigInteger.php index c811d17bd6..0dcc8f3b34 100644 --- a/civicrm/vendor/brick/math/src/BigInteger.php +++ b/civicrm/vendor/brick/math/src/BigInteger.php @@ -168,6 +168,133 @@ final class BigInteger extends BigNumber return new BigInteger($number); } + /** + * Translates a string of bytes containing the binary representation of a BigInteger into a BigInteger. + * + * The input string is assumed to be in big-endian byte-order: the most significant byte is in the zeroth element. + * + * If `$signed` is true, the input is assumed to be in two's-complement representation, and the leading bit is + * interpreted as a sign bit. If `$signed` is false, the input is interpreted as an unsigned number, and the + * resulting BigInteger will always be positive or zero. + * + * This method can be used to retrieve a number exported by `toBytes()`, as long as the `$signed` flags match. + * + * @param string $value The byte string. + * @param bool $signed Whether to interpret as a signed number in two's-complement representation with a leading + * sign bit. + * + * @return BigInteger + * + * @throws NumberFormatException If the string is empty. + */ + public static function fromBytes(string $value, bool $signed = true) : BigInteger + { + if ($value === '') { + throw new NumberFormatException('The byte string must not be empty.'); + } + + $twosComplement = false; + + if ($signed) { + $x = \ord($value[0]); + + if (($twosComplement = ($x >= 0x80))) { + $value = ~$value; + } + } + + $number = self::fromBase(\bin2hex($value), 16); + + if ($twosComplement) { + return $number->plus(1)->negated(); + } + + return $number; + } + + /** + * Generates a pseudo-random number in the range 0 to 2^numBits - 1. + * + * Using the default random bytes generator, this method is suitable for cryptographic use. + * + * @psalm-param callable(int): string $randomBytesGenerator + * + * @param int $numBits The number of bits. + * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, and returns a + * string of random bytes of the given length. Defaults to the + * `random_bytes()` function. + * + * @return BigInteger + * + * @throws \InvalidArgumentException If $numBits is negative. + */ + public static function randomBits(int $numBits, ?callable $randomBytesGenerator = null) : BigInteger + { + if ($numBits < 0) { + throw new \InvalidArgumentException('The number of bits cannot be negative.'); + } + + if ($numBits === 0) { + return BigInteger::zero(); + } + + if ($randomBytesGenerator === null) { + $randomBytesGenerator = 'random_bytes'; + } + + $byteLength = \intdiv($numBits - 1, 8) + 1; + + $extraBits = ($byteLength * 8 - $numBits); + $bitmask = \chr(0xFF >> $extraBits); + + $randomBytes = $randomBytesGenerator($byteLength); + $randomBytes[0] = $randomBytes[0] & $bitmask; + + return self::fromBytes($randomBytes, false); + } + + /** + * Generates a pseudo-random number between `$min` and `$max`. + * + * Using the default random bytes generator, this method is suitable for cryptographic use. + * + * @psalm-param (callable(int): string)|null $randomBytesGenerator + * + * @param BigNumber|int|float|string $min The lower bound. Must be convertible to a BigInteger. + * @param BigNumber|int|float|string $max The upper bound. Must be convertible to a BigInteger. + * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, + * and returns a string of random bytes of the given length. + * Defaults to the `random_bytes()` function. + * + * @return BigInteger + * + * @throws MathException If one of the parameters cannot be converted to a BigInteger, + * or `$min` is greater than `$max`. + */ + public static function randomRange($min, $max, ?callable $randomBytesGenerator = null) : BigInteger + { + $min = BigInteger::of($min); + $max = BigInteger::of($max); + + if ($min->isGreaterThan($max)) { + throw new MathException('$min cannot be greater than $max.'); + } + + if ($min->isEqualTo($max)) { + return $min; + } + + $diff = $max->minus($min); + $bitLength = $diff->getBitLength(); + + // try until the number is in range (50% to 100% chance of success) + do { + $randomNumber = self::randomBits($bitLength, $randomBytesGenerator); + } while ($randomNumber->isGreaterThan($diff)); + + return $randomNumber->plus($min); + } + /** * Returns a BigInteger representing zero. * @@ -177,7 +304,10 @@ final class BigInteger extends BigNumber */ public static function zero() : BigInteger { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $zero + */ static $zero; if ($zero === null) { @@ -196,7 +326,10 @@ final class BigInteger extends BigNumber */ public static function one() : BigInteger { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $one + */ static $one; if ($one === null) { @@ -215,7 +348,10 @@ final class BigInteger extends BigNumber */ public static function ten() : BigInteger { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $ten + */ static $ten; if ($ten === null) { @@ -455,10 +591,47 @@ final class BigInteger extends BigNumber $that = BigInteger::of($that); if ($that->value === '0') { - throw DivisionByZeroException::divisionByZero(); + throw DivisionByZeroException::modulusMustNotBeZero(); + } + + $value = Calculator::get()->mod($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the modular multiplicative inverse of this BigInteger modulo $m. + * + * @param BigInteger $m + * + * @return BigInteger + * + * @throws DivisionByZeroException If $m is zero. + * @throws NegativeNumberException If $m is negative. + * @throws MathException If this BigInteger has no multiplicative inverse mod m (that is, this BigInteger + * is not relatively prime to m). + */ + public function modInverse(BigInteger $m) : BigInteger + { + if ($m->value === '0') { + throw DivisionByZeroException::modulusMustNotBeZero(); } - return $this->remainder($that)->plus($that)->remainder($that); + if ($m->isNegative()) { + throw new NegativeNumberException('Modulus must not be negative.'); + } + + if ($m->value === '1') { + return BigInteger::zero(); + } + + $value = Calculator::get()->modInverse($this->value, $m->value); + + if ($value === null) { + throw new MathException('Unable to compute the modInverse for the given modulus.'); + } + + return new BigInteger($value); } /** @@ -466,15 +639,15 @@ final class BigInteger extends BigNumber * * This operation only works on positive numbers. * - * @param BigNumber|int|float|string $exp The positive exponent. - * @param BigNumber|int|float|string $mod The modulo. Must not be zero. + * @param BigNumber|int|float|string $exp The exponent. Must be positive or zero. + * @param BigNumber|int|float|string $mod The modulus. Must be strictly positive. * * @return BigInteger * * @throws NegativeNumberException If any of the operands is negative. - * @throws DivisionByZeroException If the modulo is zero. + * @throws DivisionByZeroException If the modulus is zero. */ - public function powerMod($exp, $mod) : BigInteger + public function modPow($exp, $mod) : BigInteger { $exp = BigInteger::of($exp); $mod = BigInteger::of($mod); @@ -484,10 +657,10 @@ final class BigInteger extends BigNumber } if ($mod->isZero()) { - throw DivisionByZeroException::divisionByZero(); + throw DivisionByZeroException::modulusMustNotBeZero(); } - $result = Calculator::get()->powmod($this->value, $exp->value, $mod->value); + $result = Calculator::get()->modPow($this->value, $exp->value, $mod->value); return new BigInteger($result); } @@ -606,6 +779,16 @@ final class BigInteger extends BigNumber return new BigInteger(Calculator::get()->xor($this->value, $that->value)); } + /** + * Returns the bitwise-not of this BigInteger. + * + * @return BigInteger + */ + public function not() : BigInteger + { + return $this->negated()->minus(1); + } + /** * Returns the integer left shifted by a given number of bits. * @@ -670,7 +853,7 @@ final class BigInteger extends BigNumber return $this->abs()->minus(1)->getBitLength(); } - return strlen($this->toBase(2)); + return \strlen($this->toBase(2)); } /** @@ -703,7 +886,7 @@ final class BigInteger extends BigNumber */ public function isEven() : bool { - return in_array($this->value[-1], ['0', '2', '4', '6', '8'], true); + return \in_array($this->value[-1], ['0', '2', '4', '6', '8'], true); } /** @@ -713,7 +896,7 @@ final class BigInteger extends BigNumber */ public function isOdd() : bool { - return in_array($this->value[-1], ['1', '3', '5', '7', '9'], true); + return \in_array($this->value[-1], ['1', '3', '5', '7', '9'], true); } /** @@ -724,6 +907,8 @@ final class BigInteger extends BigNumber * @param int $n The bit to test, 0-based. * * @return bool + * + * @throws \InvalidArgumentException If the bit to test is negative. */ public function testBit(int $n) : bool { @@ -862,6 +1047,67 @@ final class BigInteger extends BigNumber return Calculator::get()->toArbitraryBase($this->value, $alphabet, $base); } + /** + * Returns a string of bytes containing the binary representation of this BigInteger. + * + * The string is in big-endian byte-order: the most significant byte is in the zeroth element. + * + * If `$signed` is true, the output will be in two's-complement representation, and a sign bit will be prepended to + * the output. If `$signed` is false, no sign bit will be prepended, and this method will throw an exception if the + * number is negative. + * + * The string will contain the minimum number of bytes required to represent this BigInteger, including a sign bit + * if `$signed` is true. + * + * This representation is compatible with the `fromBytes()` factory method, as long as the `$signed` flags match. + * + * @param bool $signed Whether to output a signed number in two's-complement representation with a leading sign bit. + * + * @return string + * + * @throws NegativeNumberException If $signed is false, and the number is negative. + */ + public function toBytes(bool $signed = true) : string + { + if (! $signed && $this->isNegative()) { + throw new NegativeNumberException('Cannot convert a negative number to a byte string when $signed is false.'); + } + + $hex = $this->abs()->toBase(16); + + if (\strlen($hex) % 2 !== 0) { + $hex = '0' . $hex; + } + + $baseHexLength = \strlen($hex); + + if ($signed) { + if ($this->isNegative()) { + $bin = \hex2bin($hex); + assert($bin !== false); + + $hex = \bin2hex(~$bin); + $hex = self::fromBase($hex, 16)->plus(1)->toBase(16); + + $hexLength = \strlen($hex); + + if ($hexLength < $baseHexLength) { + $hex = \str_repeat('0', $baseHexLength - $hexLength) . $hex; + } + + if ($hex[0] < '8') { + $hex = 'FF' . $hex; + } + } else { + if ($hex[0] >= '8') { + $hex = '00' . $hex; + } + } + } + + return \hex2bin($hex); + } + /** * {@inheritdoc} */ @@ -886,6 +1132,7 @@ final class BigInteger extends BigNumber * This method is only here to implement interface Serializable and cannot be accessed directly. * * @internal + * @psalm-suppress RedundantPropertyInitializationCheck * * @param string $value * diff --git a/civicrm/vendor/brick/math/src/BigNumber.php b/civicrm/vendor/brick/math/src/BigNumber.php index acd6b3d506..38c8c554e1 100644 --- a/civicrm/vendor/brick/math/src/BigNumber.php +++ b/civicrm/vendor/brick/math/src/BigNumber.php @@ -18,20 +18,22 @@ abstract class BigNumber implements \Serializable, \JsonSerializable { /** * The regular expression used to parse integer, decimal and rational numbers. - * - * @var string */ private const PARSE_REGEXP = '/^' . - '(?<integral>[\-\+]?[0-9]+)' . - '(?:' . + '(?<sign>[\-\+])?' . '(?:' . - '(?:\.(?<fractional>[0-9]+))?' . - '(?:[eE](?<exponent>[\-\+]?[0-9]+))?' . - ')' . '|' . '(?:' . - '(?:\/(?<denominator>[0-9]+))?' . + '(?:' . + '(?<integral>[0-9]+)?' . + '(?<point>\.)?' . + '(?<fractional>[0-9]+)?' . + '(?:[eE](?<exponent>[\-\+]?[0-9]+))?' . + ')|(?:' . + '(?<numerator>[0-9]+)' . + '\/?' . + '(?<denominator>[0-9]+)' . + ')' . ')' . - ')?' . '$/'; /** @@ -65,32 +67,71 @@ abstract class BigNumber implements \Serializable, \JsonSerializable return new BigInteger((string) $value); } - if (is_float($value)) { - $value = self::floatToString($value); - } else { - $value = (string) $value; - } + /** @psalm-suppress RedundantCastGivenDocblockType We cannot trust the untyped $value here! */ + $value = \is_float($value) ? self::floatToString($value) : (string) $value; + + $throw = static function() use ($value) : void { + throw new NumberFormatException(\sprintf( + 'The given value "%s" does not represent a valid number.', + $value + )); + }; if (\preg_match(self::PARSE_REGEXP, $value, $matches) !== 1) { - throw new NumberFormatException(\sprintf('The given value "%s" does not represent a valid number.', $value)); + $throw(); } - if (isset($matches['denominator'])) { - $numerator = self::cleanUp($matches['integral']); - $denominator = \ltrim($matches['denominator'], '0'); + $getMatch = static function(string $value) use ($matches) : ?string { + return isset($matches[$value]) && $matches[$value] !== '' ? $matches[$value] : null; + }; + + $sign = $getMatch('sign'); + $numerator = $getMatch('numerator'); + $denominator = $getMatch('denominator'); + + if ($numerator !== null) { + assert($denominator !== null); + + if ($sign !== null) { + $numerator = $sign . $numerator; + } + + $numerator = self::cleanUp($numerator); + $denominator = self::cleanUp($denominator); - if ($denominator === '') { + if ($denominator === '0') { throw DivisionByZeroException::denominatorMustNotBeZero(); } - return new BigRational(new BigInteger($numerator), new BigInteger($denominator), false); + return new BigRational( + new BigInteger($numerator), + new BigInteger($denominator), + false + ); } - if (isset($matches['fractional']) || isset($matches['exponent'])) { - $fractional = isset($matches['fractional']) ? $matches['fractional'] : ''; - $exponent = isset($matches['exponent']) ? (int) $matches['exponent'] : 0; + $point = $getMatch('point'); + $integral = $getMatch('integral'); + $fractional = $getMatch('fractional'); + $exponent = $getMatch('exponent'); - $unscaledValue = self::cleanUp($matches['integral'] . $fractional); + if ($integral === null && $fractional === null) { + $throw(); + } + + if ($integral === null) { + $integral = '0'; + } + + if ($point !== null || $exponent !== null) { + $fractional = ($fractional ?? ''); + $exponent = ($exponent !== null) ? (int) $exponent : 0; + + if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) { + throw new NumberFormatException('Exponent too large.'); + } + + $unscaledValue = self::cleanUp(($sign ?? ''). $integral . $fractional); $scale = \strlen($fractional) - $exponent; @@ -104,7 +145,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable return new BigDecimal($unscaledValue, $scale); } - $integral = self::cleanUp($matches['integral']); + $integral = self::cleanUp(($sign ?? '') . $integral); return new BigInteger($integral); } @@ -143,10 +184,11 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @return static * * @psalm-pure + * @psalm-suppress TooManyArguments + * @psalm-suppress UnsafeInstantiation */ protected static function create(... $args) : BigNumber { - /** @psalm-suppress TooManyArguments */ return new static(... $args); } @@ -161,6 +203,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @throws \InvalidArgumentException If no values are given. * @throws MathException If an argument is not valid. * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType * @psalm-pure */ public static function min(...$values) : BigNumber @@ -193,6 +237,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @throws \InvalidArgumentException If no values are given. * @throws MathException If an argument is not valid. * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType * @psalm-pure */ public static function max(...$values) : BigNumber @@ -225,6 +271,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @throws \InvalidArgumentException If no values are given. * @throws MathException If an argument is not valid. * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType * @psalm-pure */ public static function sum(...$values) : BigNumber @@ -235,11 +283,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable foreach ($values as $value) { $value = static::of($value); - if ($sum === null) { - $sum = $value; - } else { - $sum = self::add($sum, $value); - } + $sum = $sum === null ? $value : self::add($sum, $value); } if ($sum === null) { @@ -290,7 +334,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable /** * Removes optional leading zeros and + sign from the given number. * - * @param string $number The number, validated as a non-empty string of digits with optional sign. + * @param string $number The number, validated as a non-empty string of digits with optional leading sign. * * @return string * diff --git a/civicrm/vendor/brick/math/src/BigRational.php b/civicrm/vendor/brick/math/src/BigRational.php index ff035c5c06..7fbabd7f12 100644 --- a/civicrm/vendor/brick/math/src/BigRational.php +++ b/civicrm/vendor/brick/math/src/BigRational.php @@ -108,7 +108,10 @@ final class BigRational extends BigNumber */ public static function zero() : BigRational { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $zero + */ static $zero; if ($zero === null) { @@ -127,7 +130,10 @@ final class BigRational extends BigNumber */ public static function one() : BigRational { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $one + */ static $one; if ($one === null) { @@ -146,7 +152,10 @@ final class BigRational extends BigNumber */ public static function ten() : BigRational { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $ten + */ static $ten; if ($ten === null) { @@ -458,6 +467,7 @@ final class BigRational extends BigNumber * This method is only here to implement interface Serializable and cannot be accessed directly. * * @internal + * @psalm-suppress RedundantPropertyInitializationCheck * * @param string $value * diff --git a/civicrm/vendor/brick/math/src/Exception/DivisionByZeroException.php b/civicrm/vendor/brick/math/src/Exception/DivisionByZeroException.php index 49a9157f11..a4e4431765 100644 --- a/civicrm/vendor/brick/math/src/Exception/DivisionByZeroException.php +++ b/civicrm/vendor/brick/math/src/Exception/DivisionByZeroException.php @@ -19,6 +19,16 @@ class DivisionByZeroException extends MathException return new self('Division by zero.'); } + /** + * @return DivisionByZeroException + * + * @psalm-pure + */ + public static function modulusMustNotBeZero() : DivisionByZeroException + { + return new self('The modulus must not be zero.'); + } + /** * @return DivisionByZeroException * diff --git a/civicrm/vendor/brick/math/src/Exception/MathException.php b/civicrm/vendor/brick/math/src/Exception/MathException.php index 3fc37a0d7d..21fda90e18 100644 --- a/civicrm/vendor/brick/math/src/Exception/MathException.php +++ b/civicrm/vendor/brick/math/src/Exception/MathException.php @@ -9,6 +9,6 @@ namespace Brick\Math\Exception; * * This class is abstract to ensure that only fine-grained exceptions are thrown throughout the code. */ -abstract class MathException extends \RuntimeException +class MathException extends \RuntimeException { } diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator.php index 3e59a2961e..99b478193d 100644 --- a/civicrm/vendor/brick/math/src/Internal/Calculator.php +++ b/civicrm/vendor/brick/math/src/Internal/Calculator.php @@ -248,16 +248,62 @@ abstract class Calculator */ abstract public function pow(string $a, int $e) : string; + /** + * @param string $a + * @param string $b The modulus; must not be zero. + * + * @return string + */ + public function mod(string $a, string $b) : string + { + return $this->divR($this->add($this->divR($a, $b), $b), $b); + } + + /** + * Returns the modular multiplicative inverse of $x modulo $m. + * + * If $x has no multiplicative inverse mod m, this method must return null. + * + * This method can be overridden by the concrete implementation if the underlying library has built-in support. + * + * @param string $x + * @param string $m The modulus; must not be negative or zero. + * + * @return string|null + */ + public function modInverse(string $x, string $m) : ?string + { + if ($m === '1') { + return '0'; + } + + $modVal = $x; + + if ($x[0] === '-' || ($this->cmp($this->abs($x), $m) >= 0)) { + $modVal = $this->mod($x, $m); + } + + $x = '0'; + $y = '0'; + $g = $this->gcdExtended($modVal, $m, $x, $y); + + if ($g !== '1') { + return null; + } + + return $this->mod($this->add($this->mod($x, $m), $m), $m); + } + /** * Raises a number into power with modulo. * * @param string $base The base number; must be positive or zero. * @param string $exp The exponent; must be positive or zero. - * @param string $mod The modulo; must be strictly positive. + * @param string $mod The modulus; must be strictly positive. * * @return string The power. */ - abstract function powmod(string $base, string $exp, string $mod) : string; + abstract public function modPow(string $base, string $exp, string $mod) : string; /** * Returns the greatest common divisor of the two numbers. @@ -283,6 +329,26 @@ abstract class Calculator return $this->gcd($b, $this->divR($a, $b)); } + private function gcdExtended(string $a, string $b, string &$x, string &$y) : string + { + if ($a === '0') { + $x = '0'; + $y = '1'; + + return $b; + } + + $x1 = '0'; + $y1 = '0'; + + $gcd = $this->gcdExtended($this->mod($b, $a), $a, $x1, $y1); + + $x = $this->sub($y1, $this->mul($this->divQ($b, $a), $x1)); + $y = $x1; + + return $gcd; + } + /** * Returns the square root of the given number, rounded down. * @@ -420,7 +486,7 @@ abstract class Calculator * Rounding is performed when the remainder of the division is not zero. * * @param string $a The dividend. - * @param string $b The divisor. + * @param string $b The divisor, must not be zero. * @param int $roundingMode The rounding mode. * * @return string @@ -611,6 +677,9 @@ abstract class Calculator } /** + * @psalm-suppress InvalidOperand + * @see https://github.com/vimeo/psalm/issues/4456 + * * @param string $number A positive, binary number. * * @return string @@ -619,7 +688,7 @@ abstract class Calculator { $xor = \str_repeat("\xff", \strlen($number)); - $number = $number ^ $xor; + $number ^= $xor; for ($i = \strlen($number) - 1; $i >= 0; $i--) { $byte = \ord($number[$i]); @@ -629,7 +698,11 @@ abstract class Calculator break; } - $number[$i] = \chr(0); + $number[$i] = "\x00"; + + if ($i === 0) { + $number = "\x01" . $number; + } } return $number; diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php index 944ee9edb8..6632b378a3 100644 --- a/civicrm/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php +++ b/civicrm/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php @@ -41,6 +41,9 @@ class BcMathCalculator extends Calculator /** * {@inheritdoc} + * + * @psalm-suppress InvalidNullableReturnType + * @psalm-suppress NullableReturnStatement */ public function divQ(string $a, string $b) : string { @@ -49,9 +52,16 @@ class BcMathCalculator extends Calculator /** * {@inheritdoc} + * + * @psalm-suppress InvalidNullableReturnType + * @psalm-suppress NullableReturnStatement */ public function divR(string $a, string $b) : string { + if (version_compare(PHP_VERSION, '7.2') >= 0) { + return \bcmod($a, $b, 0); + } + return \bcmod($a, $b); } @@ -61,7 +71,15 @@ class BcMathCalculator extends Calculator public function divQR(string $a, string $b) : array { $q = \bcdiv($a, $b, 0); - $r = \bcmod($a, $b); + + if (version_compare(PHP_VERSION, '7.2') >= 0) { + $r = \bcmod($a, $b, 0); + } else { + $r = \bcmod($a, $b); + } + + assert($q !== null); + assert($r !== null); return [$q, $r]; } @@ -76,14 +94,20 @@ class BcMathCalculator extends Calculator /** * {@inheritdoc} + * + * @psalm-suppress InvalidNullableReturnType + * @psalm-suppress NullableReturnStatement */ - public function powmod(string $base, string $exp, string $mod) : string + public function modPow(string $base, string $exp, string $mod) : string { return \bcpowmod($base, $exp, $mod, 0); } /** * {@inheritDoc} + * + * @psalm-suppress NullableReturnStatement + * @psalm-suppress InvalidNullableReturnType */ public function sqrt(string $n) : string { diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php index 01926da875..52d18800a6 100644 --- a/civicrm/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php +++ b/civicrm/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php @@ -79,7 +79,21 @@ class GmpCalculator extends Calculator /** * {@inheritdoc} */ - public function powmod(string $base, string $exp, string $mod) : string + public function modInverse(string $x, string $m) : ?string + { + $result = \gmp_invert($x, $m); + + if ($result === false) { + return null; + } + + return \gmp_strval($result); + } + + /** + * {@inheritdoc} + */ + public function modPow(string $base, string $exp, string $mod) : string { return \gmp_strval(\gmp_powm($base, $exp, $mod)); } diff --git a/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php b/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php index 8264bf8aed..a5f8a9b487 100644 --- a/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php +++ b/civicrm/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php @@ -53,6 +53,10 @@ class NativeCalculator extends Calculator */ public function add(string $a, string $b) : string { + /** + * @psalm-var numeric-string $a + * @psalm-var numeric-string $b + */ $result = $a + $b; if (is_int($result)) { @@ -69,11 +73,7 @@ class NativeCalculator extends Calculator [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); - if ($aNeg === $bNeg) { - $result = $this->doAdd($aDig, $bDig); - } else { - $result = $this->doSub($aDig, $bDig); - } + $result = $aNeg === $bNeg ? $this->doAdd($aDig, $bDig) : $this->doSub($aDig, $bDig); if ($aNeg) { $result = $this->neg($result); @@ -95,6 +95,10 @@ class NativeCalculator extends Calculator */ public function mul(string $a, string $b) : string { + /** + * @psalm-var numeric-string $a + * @psalm-var numeric-string $b + */ $result = $a * $b; if (is_int($result)) { @@ -169,9 +173,11 @@ class NativeCalculator extends Calculator return [$this->neg($a), '0']; } + /** @psalm-var numeric-string $a */ $na = $a * 1; // cast to number if (is_int($na)) { + /** @psalm-var numeric-string $b */ $nb = $b * 1; if (is_int($nb)) { @@ -221,6 +227,8 @@ class NativeCalculator extends Calculator $e -= $odd; $aa = $this->mul($a, $a); + + /** @psalm-suppress PossiblyInvalidArgument We're sure that $e / 2 is an int now */ $result = $this->pow($aa, $e / 2); if ($odd === 1) { @@ -235,7 +243,7 @@ class NativeCalculator extends Calculator * * {@inheritdoc} */ - public function powmod(string $base, string $exp, string $mod) : string + public function modPow(string $base, string $exp, string $mod) : string { // special case: the algorithm below fails with 0 power 0 mod 1 (returns 1 instead of 0) if ($base === '0' && $exp === '0' && $mod === '1') { @@ -316,10 +324,14 @@ class NativeCalculator extends Calculator if ($i < 0) { $blockLength += $i; + /** @psalm-suppress LoopInvalidation */ $i = 0; } + /** @psalm-var numeric-string $blockA */ $blockA = \substr($a, $i, $blockLength); + + /** @psalm-var numeric-string $blockB */ $blockB = \substr($b, $i, $blockLength); $sum = (string) ($blockA + $blockB + $carry); @@ -386,10 +398,14 @@ class NativeCalculator extends Calculator if ($i < 0) { $blockLength += $i; + /** @psalm-suppress LoopInvalidation */ $i = 0; } + /** @psalm-var numeric-string $blockA */ $blockA = \substr($a, $i, $blockLength); + + /** @psalm-var numeric-string $blockB */ $blockB = \substr($b, $i, $blockLength); $sum = $blockA - $blockB - $carry; @@ -450,6 +466,7 @@ class NativeCalculator extends Calculator if ($i < 0) { $blockALength += $i; + /** @psalm-suppress LoopInvalidation */ $i = 0; } @@ -463,6 +480,7 @@ class NativeCalculator extends Calculator if ($j < 0) { $blockBLength += $j; + /** @psalm-suppress LoopInvalidation */ $j = 0; } diff --git a/civicrm/vendor/brick/money/.github/workflows/ci.yml b/civicrm/vendor/brick/money/.github/workflows/ci.yml new file mode 100644 index 0000000000..172066542c --- /dev/null +++ b/civicrm/vendor/brick/money/.github/workflows/ci.yml @@ -0,0 +1,76 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + psalm: + name: Psalm + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "8.0" + + - name: Install composer dependencies + uses: "ramsey/composer-install@v1" + + - name: Run Psalm + run: vendor/bin/psalm --show-info=false --find-unused-psalm-suppress --no-progress + + phpunit: + name: PHPUnit + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - "7.1" + - "7.2" + - "7.3" + - "7.4" + - "8.0" + deps: + - "highest" + include: + - php-version: "7.1" + deps: "lowest" + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + coverage: pcov + + - name: Install composer dependencies + uses: "ramsey/composer-install@v1" + with: + dependency-versions: ${{ matrix.deps }} + + - name: Run PHPUnit + run: vendor/bin/phpunit + if: ${{ matrix.php-version != '8.0' }} + + - name: Run PHPUnit with coverage + run: | + mkdir -p build/logs + vendor/bin/phpunit --coverage-clover build/logs/clover.xml + if: ${{ matrix.php-version == '8.0' }} + + - name: Upload coverage report to Coveralls + run: vendor/bin/php-coveralls --coverage_clover=build/logs/clover.xml -v + env: + COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: ${{ matrix.php-version == '8.0' }} diff --git a/civicrm/vendor/brick/money/CHANGELOG.md b/civicrm/vendor/brick/money/CHANGELOG.md new file mode 100644 index 0000000000..2f70dbf73e --- /dev/null +++ b/civicrm/vendor/brick/money/CHANGELOG.md @@ -0,0 +1,142 @@ +# Changelog + +## [0.5.0](https://github.com/brick/money/releases/tag/0.5.0) - 2020-08-19 + +👌 **Improvements** + +- compatibility with `brick/math` version `0.9` + +âš ï¸ **Caution** + +When using `brick/math` version `0.9`, the `Money` factory methods such as `of()` and `ofMinor()` now accept decimal numbers in the form `.123` and `123.`, and do not throw an exception anymore in this case. + +## [0.4.5](https://github.com/brick/money/releases/tag/0.4.5) - 2020-05-31 + +🛠**Bug fix** + +`MoneyBag::getAmount()`, `add()` and `subtract()` would throw an exception when using a custom currency (#25). + +## [0.4.4](https://github.com/brick/money/releases/tag/0.4.4) - 2020-01-23 + +✨ **New method** + +`AbstractMoney::isAmountAndCurrencyEqualTo()` compares a money to another. (#17) + +This method is different from `isEqualTo()` in 2 aspects: + +- it only accepts another money, not a raw number; +- **it returns `false` if the money is in another currency**, instead of throwing an exception. + +## [0.4.3](https://github.com/brick/money/releases/tag/0.4.3) - 2020-01-09 + +🛠**Improvements** + +- `MoneyBag::getAmount()` now accepts an ISO numeric currency code as well + +✨ **New methods** + +- `CurrencyConverter::convertToRational()` converts to a `RationalMoney` (#22) + +## [0.4.2](https://github.com/brick/money/releases/tag/0.4.2) - 2019-07-04 + +Performance improvement when calling `Money::formatTo()` many times for the same locale. + +## [0.4.1](https://github.com/brick/money/releases/tag/0.4.1) - 2018-10-17 + +Added support for `brick/math` version `0.8`. + +## [0.4.0](https://github.com/brick/money/releases/tag/0.4.0) - 2018-10-09 + +**Breaking Changes** + +- Deprecated method `BigRational::toMoney()` has been removed, use `BigRational::to()` instead; +- `BigRational::__toString()` now always outputs the amount in non-simplified rational form. + +**New methods** + +- `BigRational::simplified()` returns a copy of the money with the amount simplified. + +## [0.3.4](https://github.com/brick/money/releases/tag/0.3.4) - 2018-09-12 + +ISO currency list update. + +## [0.3.3](https://github.com/brick/money/releases/tag/0.3.3) - 2018-08-22 + +ISO currency list update. + +## [0.3.2](https://github.com/brick/money/releases/tag/0.3.2) - 2018-08-20 + +`Money::formatTo()` can now format the amount as a whole number: + +```php +formatTo(string $locale, bool $allowWholeNumber = false) : string +``` + +By default, `formatTo()` always outputs all the fraction digits: + +```php +Money::of('23.5', 'USD')->formatTo('en_US'); // $23.50 +Money::of(23, 'USD')->formatTo('en_US'); // $23.00 +``` + +But can now be allowed to return the whole number by passing `true` as a second argument: + +```php +Money::of('23.5', 'USD')->formatTo('en_US', true); // $23.50 +Money::of(23, 'USD')->formatTo('en_US', true); // $23 +``` + +*Note that this version now requires `brick/math` version `0.7.3`. This is not a BC break. If you've locked your composer.json to an earlier version, you will just not be able to install `brick/money` version `0.3.2`.* + +## [0.3.1](https://github.com/brick/money/releases/tag/0.3.1) - 2018-08-04 + +ISO currency list update. + +## [0.3.0](https://github.com/brick/money/releases/tag/0.3.0) - 2018-07-26 + +**New methods:** + +- `CurrencyConversionException::getSourceCurrencyCode()` +- `CurrencyConversionException::getTargetCurrencyCode()` + +This allows to programmatically get the failing currency pair when an exchange rate is not available. + +**Breaking change:** + +- `CurrencyConversionException` constructor signature changed + +Although this is technically a breaking change and requires a version bump, your code is unlikely to be affected, unless you're creating `CurrencyConversionException` instances manually (you shouldn't). + +## [0.2.4](https://github.com/brick/money/releases/tag/0.2.4) - 2018-01-10 + +ISO currency list update. + +## [0.2.3](https://github.com/brick/money/releases/tag/0.2.3) - 2017-12-01 + +Bug fix: `Money::allocate()` incorrectly allocated negative monies. + +## [0.2.2](https://github.com/brick/money/releases/tag/0.2.2) - 2017-11-20 + +`Money::formatTo()` now always respects the scale of the Money. + +## [0.2.1](https://github.com/brick/money/releases/tag/0.2.1) - 2017-11-05 + +New method: `CustomContext::getScale()` + +## [0.2.0](https://github.com/brick/money/releases/tag/0.2.0) - 2017-10-02 + +- Minimum requirement is now PHP 7.1 +- `BigRational::toMoney()` has been deprecated; use `to()` instead. This is the result of a factorization of a common feature in Money and RationalMoney. + +## [0.1.1](https://github.com/brick/money/releases/tag/0.1.1) - 2017-12-08 + +Backports from 0.2.x: + +- New method: `CustomContext::getScale()` +- `Money::formatTo()` now always respects the scale of the Money +- Bug fix: `Money::allocate()` incorrectly allocated negative monies + +## [0.1.0](https://github.com/brick/money/releases/tag/0.1.0) - 2017-10-02 + +First beta release! + diff --git a/civicrm/vendor/brick/money/composer.json b/civicrm/vendor/brick/money/composer.json index 24bfad29b6..8987a56ed0 100644 --- a/civicrm/vendor/brick/money/composer.json +++ b/civicrm/vendor/brick/money/composer.json @@ -9,15 +9,16 @@ ], "license": "MIT", "require": { - "php": "^7.1|^8.0", - "brick/math": "~0.7.3 || ~0.8.0" + "php": "^7.1 || ^8.0", + "brick/math": "~0.7.3 || ~0.8.0 || ~0.9.0" }, "require-dev": { + "ext-dom": "*", + "ext-pdo": "*", "brick/varexporter": "~0.2.1", - "phpunit/phpunit": "^7.5.15", "php-coveralls/php-coveralls": "^2.2", - "ext-pdo": "*", - "ext-dom": "*" + "phpunit/phpunit": "^7.5.15 || ^8.0 || ^9.0", + "vimeo/psalm": "4.3.2" }, "suggest": { "ext-intl": "Required to format Money objects" @@ -31,5 +32,8 @@ "psr-4": { "Brick\\Money\\Tests\\": "tests/" } + }, + "config": { + "sort-packages": true } } diff --git a/civicrm/vendor/brick/money/psalm.xml b/civicrm/vendor/brick/money/psalm.xml new file mode 100644 index 0000000000..32408861d9 --- /dev/null +++ b/civicrm/vendor/brick/money/psalm.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<psalm + errorLevel="1" + resolveFromConfigFile="true" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="https://getpsalm.org/schema/config" + xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" +> + <projectFiles> + <directory name="src" /> + <ignoreFiles> + <directory name="vendor" /> + </ignoreFiles> + </projectFiles> +</psalm> diff --git a/civicrm/vendor/brick/money/src/AbstractMoney.php b/civicrm/vendor/brick/money/src/AbstractMoney.php index 1dad5c44e9..fed229e1d0 100644 --- a/civicrm/vendor/brick/money/src/AbstractMoney.php +++ b/civicrm/vendor/brick/money/src/AbstractMoney.php @@ -44,6 +44,8 @@ abstract class AbstractMoney implements MoneyContainer /** * Required by interface MoneyContainer. * + * @psalm-return array<string, BigNumber> + * * @return BigNumber[] */ final public function getAmounts() : array diff --git a/civicrm/vendor/brick/money/src/Currency.php b/civicrm/vendor/brick/money/src/Currency.php index 8a90743975..b1b5a44ec8 100644 --- a/civicrm/vendor/brick/money/src/Currency.php +++ b/civicrm/vendor/brick/money/src/Currency.php @@ -58,7 +58,7 @@ final class Currency private $defaultFractionDigits; /** - * Private constructor. Use getInstance() to obtain an instance. + * Class constructor. * * @param string $currencyCode The currency code. * @param int $numericCode The numeric currency code. diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php index 254e015d9d..75861ee695 100644 --- a/civicrm/vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Brick\Money\ExchangeRateProvider; +use Brick\Math\BigNumber; use Brick\Money\ExchangeRateProvider; use Brick\Math\BigRational; @@ -46,10 +47,10 @@ final class BaseCurrencyProvider implements ExchangeRateProvider /** * {@inheritdoc} */ - public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode) + public function getExchangeRate(string $sourceCurrencyCode, string $targetCurrencyCode): BigNumber { if ($sourceCurrencyCode === $this->baseCurrencyCode) { - return $this->provider->getExchangeRate($sourceCurrencyCode, $targetCurrencyCode); + return BigNumber::of($this->provider->getExchangeRate($sourceCurrencyCode, $targetCurrencyCode)); } if ($targetCurrencyCode === $this->baseCurrencyCode) { diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php index 1c1eb4a22a..024f495c68 100644 --- a/civicrm/vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Brick\Money\ExchangeRateProvider; +use Brick\Math\BigNumber; use Brick\Money\ExchangeRateProvider; /** @@ -21,6 +22,8 @@ final class CachedProvider implements ExchangeRateProvider /** * The cached exchange rates. * + * @psalm-var array<string, array<string, BigNumber|int|float|string>> + * * @var array */ private $exchangeRates = []; diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php index 3a5f7cf7fe..3fa2bba0ef 100644 --- a/civicrm/vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php @@ -15,6 +15,8 @@ use Brick\Math\BigNumber; final class ConfigurableProvider implements ExchangeRateProvider { /** + * @psalm-var array<string, array<string, BigNumber|int|float|string>> + * * @var array */ private $exchangeRates = []; diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php index f466f30c86..b7a12805af 100644 --- a/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php @@ -50,10 +50,12 @@ final class PDOProvider implements ExchangeRateProvider { $conditions = []; + /** @psalm-suppress DocblockTypeContradiction */ if ($configuration->tableName === null) { throw new \InvalidArgumentException('Invalid configuration: $tableName is not set.'); } + /** @psalm-suppress DocblockTypeContradiction */ if ($configuration->exchangeRateColumnName === null) { throw new \InvalidArgumentException('Invalid configuration: $exchangeRateColumnName is not set.'); } @@ -134,11 +136,13 @@ final class PDOProvider implements ExchangeRateProvider $this->statement->execute($parameters); + /** @var int|float|numeric-string|false $exchangeRate */ $exchangeRate = $this->statement->fetchColumn(); if ($exchangeRate === false) { if ($this->parameters !== []) { $info = []; + /** @psalm-suppress MixedAssignment */ foreach ($this->parameters as $parameter) { $info[] = var_export($parameter, true); } diff --git a/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php index 0068166318..9e86907aa8 100644 --- a/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php +++ b/civicrm/vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php @@ -6,6 +6,8 @@ namespace Brick\Money\ExchangeRateProvider; /** * Configuration for the PDOExchangeRateProvider. + * + * @psalm-suppress MissingConstructor */ final class PDOProviderConfiguration { diff --git a/civicrm/vendor/brick/money/src/ISOCurrencyProvider.php b/civicrm/vendor/brick/money/src/ISOCurrencyProvider.php index d90561a630..7b2e56723d 100644 --- a/civicrm/vendor/brick/money/src/ISOCurrencyProvider.php +++ b/civicrm/vendor/brick/money/src/ISOCurrencyProvider.php @@ -19,6 +19,8 @@ final class ISOCurrencyProvider /** * The raw currency data, indexed by currency code. * + * @psalm-var array<string, array{string, int, string, int}> + * * @var array */ private $currencyData; @@ -28,6 +30,8 @@ final class ISOCurrencyProvider * * This property is set on-demand, as soon as required. * + * @psalm-var array<int, string>|null + * * @var array|null */ private $numericToCurrency; @@ -37,6 +41,8 @@ final class ISOCurrencyProvider * * This property is set on-demand, as soon as required. * + * @psalm-var array<string, list<string>>|null + * * @var array|null */ private $countryToCurrency; @@ -46,6 +52,8 @@ final class ISOCurrencyProvider * * The instances are created on-demand, as soon as they are requested. * + * @psalm-var array<string, Currency> + * * @var Currency[] */ private $currencies = []; @@ -92,11 +100,7 @@ final class ISOCurrencyProvider */ public function getCurrency($currencyCode) : Currency { - if (isset($this->currencies[$currencyCode])) { - return $this->currencies[$currencyCode]; - } - - if (! isset($this->currencyData[$currencyCode])) { + if (is_int($currencyCode)) { if ($this->numericToCurrency === null) { $this->numericToCurrency = require __DIR__ . '/../data/numeric-to-currency.php'; } @@ -108,6 +112,14 @@ final class ISOCurrencyProvider throw UnknownCurrencyException::unknownCurrency($currencyCode); } + if (isset($this->currencies[$currencyCode])) { + return $this->currencies[$currencyCode]; + } + + if (! isset($this->currencyData[$currencyCode])) { + throw UnknownCurrencyException::unknownCurrency($currencyCode); + } + $currency = new Currency(... $this->currencyData[$currencyCode]); return $this->currencies[$currencyCode] = $currency; diff --git a/civicrm/vendor/brick/money/src/Money.php b/civicrm/vendor/brick/money/src/Money.php index 67df7b02da..43c1ac4a00 100644 --- a/civicrm/vendor/brick/money/src/Money.php +++ b/civicrm/vendor/brick/money/src/Money.php @@ -175,7 +175,9 @@ final class Money extends AbstractMoney * @return Money * * @throws NumberFormatException If the amount is a string in a non-supported format. - * @throws RoundingNecessaryException If the rounding was necessary to represent the amount at the requested scale. + * @throws UnknownCurrencyException If the currency is an unknown currency code. + * @throws RoundingNecessaryException If the rounding mode is RoundingMode::UNNECESSARY, and rounding is necessary + * to represent the amount at the requested scale. */ public static function of($amount, $currency, ?Context $context = null, int $roundingMode = RoundingMode::UNNECESSARY) : Money { @@ -206,8 +208,10 @@ final class Money extends AbstractMoney * * @return Money * - * @throws UnknownCurrencyException If the currency is an unknown currency code. - * @throws MathException If the amount cannot be converted to a BigInteger. + * @throws NumberFormatException If the amount is a string in a non-supported format. + * @throws UnknownCurrencyException If the currency is an unknown currency code. + * @throws RoundingNecessaryException If the rounding mode is RoundingMode::UNNECESSARY, and rounding is necessary + * to represent the amount at the requested scale. */ public static function ofMinor($minorAmount, $currency, ?Context $context = null, int $roundingMode = RoundingMode::UNNECESSARY) : Money { @@ -659,6 +663,7 @@ final class Money extends AbstractMoney */ public function formatTo(string $locale, bool $allowWholeNumber = false) : string { + /** @var \NumberFormatter|null $lastFormatter */ static $lastFormatter = null; static $lastFormatterLocale; static $lastFormatterScale; diff --git a/civicrm/vendor/brick/money/src/MoneyBag.php b/civicrm/vendor/brick/money/src/MoneyBag.php index 01389bf085..bf5a7d0abf 100644 --- a/civicrm/vendor/brick/money/src/MoneyBag.php +++ b/civicrm/vendor/brick/money/src/MoneyBag.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Brick\Money; use Brick\Math\BigRational; -use Brick\Money\Tests\CurrencyTest; /** * Container for monies in different currencies. @@ -17,6 +16,8 @@ final class MoneyBag implements MoneyContainer /** * The amounts in this bag, indexed by currency code. * + * @psalm-var array<string, BigRational> + * * @var BigRational[] */ private $amounts = []; @@ -24,7 +25,9 @@ final class MoneyBag implements MoneyContainer /** * Returns the amount in the given currency contained in the bag, as a rational number. * - * @param Currency|string|int $currency The Currency instance, ISO currency code or ISO numeric currency code. + * Non-ISO (non-numeric) currency codes are accepted. + * + * @param Currency|string|int $currency The Currency instance, currency code or ISO numeric currency code. * * @return BigRational */ @@ -44,6 +47,8 @@ final class MoneyBag implements MoneyContainer /** * Returns the amounts contained in this bag, as rational numbers, indexed by currency code. * + * @psalm-return array<string, BigRational> + * * @return BigRational[] */ public function getAmounts() : array diff --git a/civicrm/vendor/brick/money/src/MoneyContainer.php b/civicrm/vendor/brick/money/src/MoneyContainer.php index 89031f3483..0c328d3697 100644 --- a/civicrm/vendor/brick/money/src/MoneyContainer.php +++ b/civicrm/vendor/brick/money/src/MoneyContainer.php @@ -14,6 +14,8 @@ interface MoneyContainer /** * Returns the amounts contained in this money container, indexed by currency code. * + * @psalm-return array<string, BigNumber> + * * @return BigNumber[] */ public function getAmounts() : array; diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index 800c33e862..0a482e4625 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 ComposerAutoloaderInit0dbc77f5b64a42583beba4f4cba7283d +class ComposerAutoloaderInitdba5a8c8a6449ed6d9ad495c62fe9492 { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit0dbc77f5b64a42583beba4f4cba7283d return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit0dbc77f5b64a42583beba4f4cba7283d', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitdba5a8c8a6449ed6d9ad495c62fe9492', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit0dbc77f5b64a42583beba4f4cba7283d', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitdba5a8c8a6449ed6d9ad495c62fe9492', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; $includePaths[] = get_include_path(); @@ -31,7 +31,7 @@ class ComposerAutoloaderInit0dbc77f5b64a42583beba4f4cba7283d if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInit0dbc77f5b64a42583beba4f4cba7283d $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d::$files; + $includeFiles = Composer\Autoload\ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire0dbc77f5b64a42583beba4f4cba7283d($fileIdentifier, $file); + composerRequiredba5a8c8a6449ed6d9ad495c62fe9492($fileIdentifier, $file); } return $loader; } } -function composerRequire0dbc77f5b64a42583beba4f4cba7283d($fileIdentifier, $file) +function composerRequiredba5a8c8a6449ed6d9ad495c62fe9492($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 1346d90af9..3a4640b7ea 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d +class ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492 { public static $files = array ( '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', @@ -575,11 +575,11 @@ class ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d::$prefixesPsr0; - $loader->fallbackDirsPsr0 = ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d::$fallbackDirsPsr0; - $loader->classMap = ComposerStaticInit0dbc77f5b64a42583beba4f4cba7283d::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInitdba5a8c8a6449ed6d9ad495c62fe9492::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index e55ff00463..25957db16b 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -44,29 +44,29 @@ }, { "name": "brick/math", - "version": "0.8.15", - "version_normalized": "0.8.15.0", + "version": "0.9.2", + "version_normalized": "0.9.2.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "9b08d412b9da9455b210459ff71414de7e6241cd" + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/9b08d412b9da9455b210459ff71414de7e6241cd", - "reference": "9b08d412b9da9455b210459ff71414de7e6241cd", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15|^8.5", - "vimeo/psalm": "^3.5" + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.3.2" }, - "time": "2020-04-15T15:59:35+00:00", + "time": "2021-01-20T22:51:39+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -92,34 +92,35 @@ }, { "name": "brick/money", - "version": "0.4.5", - "version_normalized": "0.4.5.0", + "version": "0.5.1", + "version_normalized": "0.5.1.0", "source": { "type": "git", "url": "https://github.com/brick/money.git", - "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c" + "reference": "c6f2883c8a759bf7f77c79aaa6004af6d6c0afaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/money/zipball/91f2b5bc35646f172b038e46bb496ad18db59c3c", - "reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c", + "url": "https://api.github.com/repos/brick/money/zipball/c6f2883c8a759bf7f77c79aaa6004af6d6c0afaf", + "reference": "c6f2883c8a759bf7f77c79aaa6004af6d6c0afaf", "shasum": "" }, "require": { - "brick/math": "~0.7.3 || ~0.8.0", - "php": "^7.1|^8.0" + "brick/math": "~0.7.3 || ~0.8.0 || ~0.9.0", + "php": "^7.1 || ^8.0" }, "require-dev": { "brick/varexporter": "~0.2.1", "ext-dom": "*", "ext-pdo": "*", "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15" + "phpunit/phpunit": "^7.5.15 || ^8.0 || ^9.0", + "vimeo/psalm": "4.3.2" }, "suggest": { "ext-intl": "Required to format Money objects" }, - "time": "2020-05-31T14:17:02+00:00", + "time": "2021-02-10T14:14:29+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -408,11 +409,7 @@ "email": "info@civicrm.org" } ], - "description": "Define a 'compile' event for all packages in the dependency-graph", - "support": { - "issues": "https://github.com/civicrm/composer-compile-plugin/issues", - "source": "https://github.com/civicrm/composer-compile-plugin/tree/v0.15" - } + "description": "Define a 'compile' event for all packages in the dependency-graph" }, { "name": "civicrm/composer-downloads-plugin", @@ -2165,17 +2162,17 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.29", - "version_normalized": "2.0.29.0", + "version": "2.0.31", + "version_normalized": "2.0.31.0", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "497856a8d997f640b4a516062f84228a772a48a8" + "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/497856a8d997f640b4a516062f84228a772a48a8", - "reference": "497856a8d997f640b4a516062f84228a772a48a8", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4", + "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4", "shasum": "" }, "require": { @@ -2183,7 +2180,7 @@ }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", "squizlabs/php_codesniffer": "~2.0" }, "suggest": { @@ -2192,7 +2189,7 @@ "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, - "time": "2020-09-08T04:24:43+00:00", + "time": "2021-04-06T13:56:45+00:00", "type": "library", "installation-source": "dist", "autoload": { diff --git a/civicrm/vendor/phpseclib/phpseclib/README.md b/civicrm/vendor/phpseclib/phpseclib/README.md index a2e079c4cb..099486dc9b 100644 --- a/civicrm/vendor/phpseclib/phpseclib/README.md +++ b/civicrm/vendor/phpseclib/phpseclib/README.md @@ -1,6 +1,6 @@ # phpseclib - PHP Secure Communications Library -[](https://travis-ci.org/phpseclib/phpseclib) +[](https://travis-ci.com/phpseclib/phpseclib) ## Supporting phpseclib @@ -10,16 +10,16 @@ ## Introduction -MIT-licensed pure-PHP implementations of an arbitrary-precision integer -arithmetic library, fully PKCS#1 (v2.1) compliant RSA, DES, 3DES, RC4, Rijndael, -AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509 +MIT-licensed pure-PHP implementations of the following: + +SSH-2, SFTP, X.509, an arbitrary-precision integer arithmetic library, Ed25519 / Ed449 / Curve25519 / Curve449, ECDSA / ECDH (with support for 66 curves), RSA (PKCS#1 v2.2 compliant), DSA / DH, DES / 3DES / RC4 / Rijndael / AES / Blowfish / Twofish / Salsa20 / ChaCha20, GCM / Poly1305 * [Browse Git](https://github.com/phpseclib/phpseclib) ## Documentation -* [Documentation / Manual](http://phpseclib.sourceforge.net/) -* [API Documentation](https://api.phpseclib.org/2.0/) (generated by Doctum) +* [Documentation / Manual](https://phpseclib.com/) +* [API Documentation](https://api.phpseclib.com/2.0/) (generated by Doctum) ## Branches @@ -29,6 +29,14 @@ AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509 * Unstable API * Do not use in production +### 3.0 + +* Long term support (LTS) release +* Major expansion of cryptographic primitives +* Minimum PHP version: 5.6.1 +* PSR-4 autoloading with namespace rooted at `\phpseclib3` +* Install via Composer: `composer require phpseclib/phpseclib:~3.0` + ### 2.0 * Long term support (LTS) release diff --git a/civicrm/vendor/phpseclib/phpseclib/composer.json b/civicrm/vendor/phpseclib/phpseclib/composer.json index 9303f8aa99..08b9c7c91c 100644 --- a/civicrm/vendor/phpseclib/phpseclib/composer.json +++ b/civicrm/vendor/phpseclib/phpseclib/composer.json @@ -55,7 +55,7 @@ }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", "squizlabs/php_codesniffer": "~2.0" }, "suggest": { diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php index 224eaa5219..8822b9b883 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php @@ -779,12 +779,14 @@ abstract class Base } if ($this->engine === self::ENGINE_MCRYPT) { + set_error_handler(array($this, 'do_nothing')); + if ($this->changed) { $this->_setupMcrypt(); $this->changed = false; } if ($this->enchanged) { - @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); $this->enchanged = false; } @@ -817,15 +819,15 @@ abstract class Base if ($len >= $block_size) { if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) { if ($this->enbuffer['enmcrypt_init'] === true) { - @mcrypt_generic_init($this->enmcrypt, $this->key, $iv); + mcrypt_generic_init($this->enmcrypt, $this->key, $iv); $this->enbuffer['enmcrypt_init'] = false; } - $ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size)); + $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size)); $iv = substr($ciphertext, -$block_size); $len%= $block_size; } else { while ($len >= $block_size) { - $iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size); + $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size); $ciphertext.= $iv; $len-= $block_size; $i+= $block_size; @@ -834,22 +836,26 @@ abstract class Base } if ($len) { - $iv = @mcrypt_generic($this->ecb, $iv); + $iv = mcrypt_generic($this->ecb, $iv); $block = $iv ^ substr($plaintext, -$len); $iv = substr_replace($iv, $block, 0, $len); $ciphertext.= $block; $pos = $len; } + restore_error_handler(); + return $ciphertext; } - $ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext); + $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext); if (!$this->continuousBuffer) { - @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); } + restore_error_handler(); + return $ciphertext; } @@ -1118,13 +1124,14 @@ abstract class Base } if ($this->engine === self::ENGINE_MCRYPT) { + set_error_handler(array($this, 'do_nothing')); $block_size = $this->block_size; if ($this->changed) { $this->_setupMcrypt(); $this->changed = false; } if ($this->dechanged) { - @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); $this->dechanged = false; } @@ -1152,26 +1159,30 @@ abstract class Base } if ($len >= $block_size) { $cb = substr($ciphertext, $i, $len - $len % $block_size); - $plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb; + $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb; $iv = substr($cb, -$block_size); $len%= $block_size; } if ($len) { - $iv = @mcrypt_generic($this->ecb, $iv); + $iv = mcrypt_generic($this->ecb, $iv); $plaintext.= $iv ^ substr($ciphertext, -$len); $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len); $pos = $len; } + restore_error_handler(); + return $plaintext; } - $plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext); + $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext); if (!$this->continuousBuffer) { - @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); } + restore_error_handler(); + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; } @@ -1649,9 +1660,12 @@ abstract class Base } return false; case self::ENGINE_MCRYPT: - return $this->cipher_name_mcrypt && + set_error_handler(array($this, 'do_nothing')); + $result = $this->cipher_name_mcrypt && extension_loaded('mcrypt') && - in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms()); + in_array($this->cipher_name_mcrypt, mcrypt_list_algorithms()); + restore_error_handler(); + return $result; case self::ENGINE_INTERNAL: return true; } @@ -1728,17 +1742,19 @@ abstract class Base } if ($this->engine != self::ENGINE_MCRYPT && $this->enmcrypt) { + set_error_handler(array($this, 'do_nothing')); // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed, // (re)open them with the module named in $this->cipher_name_mcrypt - @mcrypt_module_close($this->enmcrypt); - @mcrypt_module_close($this->demcrypt); + mcrypt_module_close($this->enmcrypt); + mcrypt_module_close($this->demcrypt); $this->enmcrypt = null; $this->demcrypt = null; if ($this->ecb) { - @mcrypt_module_close($this->ecb); + mcrypt_module_close($this->ecb); $this->ecb = null; } + restore_error_handler(); } $this->changed = true; @@ -1851,19 +1867,19 @@ abstract class Base self::MODE_STREAM => MCRYPT_MODE_STREAM, ); - $this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], ''); - $this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], ''); + $this->demcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], ''); + $this->enmcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], ''); // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer() // to workaround mcrypt's broken ncfb implementation in buffered mode // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps} if ($this->mode == self::MODE_CFB) { - $this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, ''); + $this->ecb = mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, ''); } } // else should mcrypt_generic_deinit be called? if ($this->mode == self::MODE_CFB) { - @mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size)); + mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size)); } } @@ -2627,7 +2643,7 @@ abstract class Base * * @see self::_setupInlineCrypt() * @access private - * @param $bytes + * @param string $bytes * @return string */ function _hashInlineCryptFunction($bytes) @@ -2696,4 +2712,13 @@ abstract class Base return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))'; } } + + /** + * Dummy error handler to suppress mcrypt errors + * + * @access private + */ + function do_nothing() + { + } } diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php index a61668209a..248b65ef7b 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php @@ -849,7 +849,6 @@ class Hash * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the * possibility of overflow exists, care has to be taken. BigInteger could be used but this should be faster. * - * @param int $... * @return int * @see self::_sha256() * @access private diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php index 3ece517053..811d039d33 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php @@ -537,7 +537,7 @@ class RSA * @access public * @param int $bits * @param int $timeout - * @param array $p + * @param array $partial */ function createKey($bits = 1024, $timeout = false, $partial = array()) { @@ -716,7 +716,12 @@ class RSA * * @access private * @see self::setPrivateKeyFormat() - * @param string $RSAPrivateKey + * @param Math_BigInteger $n + * @param Math_BigInteger $e + * @param Math_BigInteger $d + * @param array<int,Math_BigInteger> $primes + * @param array<int,Math_BigInteger> $exponents + * @param array<int,Math_BigInteger> $coefficients * @return string */ function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients) @@ -997,8 +1002,9 @@ class RSA * * @access private * @see self::setPublicKeyFormat() - * @param string $RSAPrivateKey - * @return string + * @param Math_BigInteger $n + * @param Math_BigInteger $e + * @return string|array<string,Math_BigInteger> */ function _convertPublicKey($n, $e) { @@ -1213,6 +1219,7 @@ class RSA $length = $this->_decodeLength($temp); switch ($this->_string_shift($temp, $length)) { case "\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01": // rsaEncryption + case "\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0A": // rsaPSS break; case "\x2a\x86\x48\x86\xf7\x0d\x01\x05\x03": // pbeWithMD5AndDES-CBC /* @@ -1880,7 +1887,6 @@ class RSA * * @see self::getPublicKey() * @access public - * @param string $key * @param int $type optional */ function getPublicKey($type = self::PUBLIC_FORMAT_PKCS8) @@ -1938,7 +1944,6 @@ class RSA * * @see self::getPublicKey() * @access public - * @param string $key * @param int $type optional * @return mixed */ @@ -1963,8 +1968,7 @@ class RSA * * @see self::getPrivateKey() * @access private - * @param string $key - * @param int $type optional + * @param int $mode optional */ function _getPrivatePublicKey($mode = self::PUBLIC_FORMAT_PKCS8) { @@ -2181,7 +2185,7 @@ class RSA * of the hash function Hash) and 0. * * @access public - * @param int $format + * @param int $sLen */ function setSaltLength($sLen) { @@ -2214,7 +2218,7 @@ class RSA * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}. * * @access private - * @param string $x + * @param int|string|resource $x * @return \phpseclib\Math\BigInteger */ function _os2ip($x) @@ -2441,7 +2445,7 @@ class RSA * * @access private * @param string $mgfSeed - * @param int $mgfLen + * @param int $maskLen * @return string */ function _mgf1($mgfSeed, $maskLen) @@ -2913,6 +2917,59 @@ class RSA return $em; } + /** + * EMSA-PKCS1-V1_5-ENCODE (without NULL) + * + * Quoting https://tools.ietf.org/html/rfc8017#page-65, + * + * "The parameters field associated with id-sha1, id-sha224, id-sha256, + * id-sha384, id-sha512, id-sha512/224, and id-sha512/256 should + * generally be omitted, but if present, it shall have a value of type + * NULL" + * + * @access private + * @param string $m + * @param int $emLen + * @return string + */ + function _emsa_pkcs1_v1_5_encode_without_null($m, $emLen) + { + $h = $this->hash->hash($m); + if ($h === false) { + return false; + } + + switch ($this->hashName) { + case 'sha1': + $t = pack('H*', '301f300706052b0e03021a0414'); + break; + case 'sha256': + $t = pack('H*', '302f300b06096086480165030402010420'); + break; + case 'sha384': + $t = pack('H*', '303f300b06096086480165030402020430'); + break; + case 'sha512': + $t = pack('H*', '304f300b06096086480165030402030440'); + break; + default: + return false; + } + $t.= $h; + $tLen = strlen($t); + + if ($emLen < $tLen + 11) { + user_error('Intended encoded message length too short'); + return false; + } + + $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3); + + $em = "\0\1$ps\0$t"; + + return $em; + } + /** * RSASSA-PKCS1-V1_5-SIGN * @@ -2950,6 +3007,7 @@ class RSA * * @access private * @param string $m + * @param string $s * @return string */ function _rsassa_pkcs1_v1_5_verify($m, $s) @@ -2978,13 +3036,17 @@ class RSA // EMSA-PKCS1-v1_5 encoding $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); - if ($em2 === false) { + $em3 = $this->_emsa_pkcs1_v1_5_encode_without_null($m, $this->k); + + if ($em2 === false && $em3 === false) { user_error('RSA modulus too short'); return false; } // Compare - return $this->_equals($em, $em2); + + return ($em2 !== false && $this->_equals($em, $em2)) || + ($em3 !== false && $this->_equals($em, $em3)); } /** @@ -3090,7 +3152,7 @@ class RSA * * @see self::encrypt() * @access public - * @param string $plaintext + * @param string $ciphertext * @return string */ function decrypt($ciphertext) diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php index 334d10faf5..b6874d3578 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php @@ -203,8 +203,7 @@ class ANSI /** * Set the number of lines that should be logged past the terminal height * - * @param int $x - * @param int $y + * @param int $history * @access public */ function setHistory($history) @@ -316,19 +315,20 @@ class ANSI $mods = explode(';', $match[1]); foreach ($mods as $mod) { switch ($mod) { - case 0: // Turn off character attributes + case '': + case '0': // Turn off character attributes $attr_cell = clone $this->base_attr_cell; break; - case 1: // Turn bold mode on + case '1': // Turn bold mode on $attr_cell->bold = true; break; - case 4: // Turn underline mode on + case '4': // Turn underline mode on $attr_cell->underline = true; break; - case 5: // Turn blinking mode on + case '5': // Turn blinking mode on $attr_cell->blink = true; break; - case 7: // Turn reverse video on + case '7': // Turn reverse video on $attr_cell->reverse = !$attr_cell->reverse; $temp = $attr_cell->background; $attr_cell->background = $attr_cell->foreground; @@ -341,23 +341,23 @@ class ANSI $back = &$attr_cell->{ $attr_cell->reverse ? 'foreground' : 'background' }; switch ($mod) { // @codingStandardsIgnoreStart - case 30: $front = 'black'; break; - case 31: $front = 'red'; break; - case 32: $front = 'green'; break; - case 33: $front = 'yellow'; break; - case 34: $front = 'blue'; break; - case 35: $front = 'magenta'; break; - case 36: $front = 'cyan'; break; - case 37: $front = 'white'; break; - - case 40: $back = 'black'; break; - case 41: $back = 'red'; break; - case 42: $back = 'green'; break; - case 43: $back = 'yellow'; break; - case 44: $back = 'blue'; break; - case 45: $back = 'magenta'; break; - case 46: $back = 'cyan'; break; - case 47: $back = 'white'; break; + case '30': $front = 'black'; break; + case '31': $front = 'red'; break; + case '32': $front = 'green'; break; + case '33': $front = 'yellow'; break; + case '34': $front = 'blue'; break; + case '35': $front = 'magenta'; break; + case '36': $front = 'cyan'; break; + case '37': $front = 'white'; break; + + case '40': $back = 'black'; break; + case '41': $back = 'red'; break; + case '42': $back = 'green'; break; + case '43': $back = 'yellow'; break; + case '44': $back = 'blue'; break; + case '45': $back = 'magenta'; break; + case '46': $back = 'cyan'; break; + case '47': $back = 'white'; break; // @codingStandardsIgnoreEnd default: diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php index a304a000a7..dc5b78f64e 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php @@ -235,7 +235,7 @@ class ASN1 $current = array('start' => $start); $type = ord($encoded[$encoded_pos++]); - $start++; + $startOffset = 1; $constructed = ($type >> 5) & 1; @@ -245,13 +245,20 @@ class ASN1 // process septets (since the eighth bit is ignored, it's not an octet) do { $temp = ord($encoded[$encoded_pos++]); + $startOffset++; $loop = $temp >> 7; $tag <<= 7; - $tag |= $temp & 0x7F; - $start++; + $temp &= 0x7F; + // "bits 7 to 1 of the first subsequent octet shall not all be zero" + if ($startOffset == 2 && $temp == 0) { + return false; + } + $tag |= $temp; } while ($loop); } + $start+= $startOffset; + // Length, as discussed in paragraph 8.1.3 of X.690-0207.pdf#page=13 $length = ord($encoded[$encoded_pos++]); $start++; @@ -344,13 +351,16 @@ class ASN1 switch ($tag) { case self::TYPE_BOOLEAN: // "The contents octets shall consist of a single octet." -- paragraph 8.2.1 - //if (strlen($content) != 1) { - // return false; - //} + if ($constructed || strlen($content) != 1) { + return false; + } $current['content'] = (bool) ord($content[$content_pos]); break; case self::TYPE_INTEGER: case self::TYPE_ENUMERATED: + if ($constructed) { + return false; + } $current['content'] = new BigInteger(substr($content, $content_pos), -256); break; case self::TYPE_REAL: // not currently supported @@ -370,15 +380,15 @@ class ASN1 $last = count($temp) - 1; for ($i = 0; $i < $last; $i++) { // all subtags should be bit strings - //if ($temp[$i]['type'] != self::TYPE_BIT_STRING) { - // return false; - //} + if ($temp[$i]['type'] != self::TYPE_BIT_STRING) { + return false; + } $current['content'].= substr($temp[$i]['content'], 1); } // all subtags should be bit strings - //if ($temp[$last]['type'] != self::TYPE_BIT_STRING) { - // return false; - //} + if ($temp[$last]['type'] != self::TYPE_BIT_STRING) { + return false; + } $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1); } break; @@ -395,9 +405,9 @@ class ASN1 } $content_pos += $temp['length']; // all subtags should be octet strings - //if ($temp['type'] != self::TYPE_OCTET_STRING) { - // return false; - //} + if ($temp['type'] != self::TYPE_OCTET_STRING) { + return false; + } $current['content'].= $temp['content']; $length+= $temp['length']; } @@ -408,12 +418,15 @@ class ASN1 break; case self::TYPE_NULL: // "The contents octets shall not contain any octets." -- paragraph 8.8.2 - //if (strlen($content)) { - // return false; - //} + if ($constructed || strlen($content)) { + return false; + } break; case self::TYPE_SEQUENCE: case self::TYPE_SET: + if (!$constructed) { + return false; + } $offset = 0; $current['content'] = array(); $content_len = strlen($content); @@ -434,7 +447,13 @@ class ASN1 } break; case self::TYPE_OBJECT_IDENTIFIER: + if ($constructed) { + return false; + } $current['content'] = $this->_decodeOID(substr($content, $content_pos)); + if ($current['content'] === false) { + return false; + } break; /* Each character string type shall be encoded as if it had been declared: [UNIVERSAL x] IMPLICIT OCTET STRING @@ -464,12 +483,20 @@ class ASN1 case self::TYPE_UTF8_STRING: // ???? case self::TYPE_BMP_STRING: + if ($constructed) { + return false; + } $current['content'] = substr($content, $content_pos); break; case self::TYPE_UTC_TIME: case self::TYPE_GENERALIZED_TIME: + if ($constructed) { + return false; + } $current['content'] = $this->_decodeTime(substr($content, $content_pos), $tag); + break; default: + return false; } $start+= $length; @@ -790,7 +817,7 @@ class ASN1 * * @param string $source * @param string $mapping - * @param int $idx + * @param array $special * @return string * @access public */ @@ -806,6 +833,7 @@ class ASN1 * @param string $source * @param string $mapping * @param int $idx + * @param array $special * @return string * @access private */ @@ -1126,6 +1154,11 @@ class ASN1 $oid = array(); $pos = 0; $len = strlen($content); + + if (ord($content[$len - 1]) & 0x80) { + return false; + } + $n = new BigInteger(); while ($pos < $len) { $temp = ord($content[$pos++]); @@ -1161,7 +1194,7 @@ class ASN1 * Called by _encode_der() * * @access private - * @param string $content + * @param string $source * @return string */ function _encodeOID($source) diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/X509.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/X509.php index 9612b82553..7b1b1cfadd 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/X509.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/File/X509.php @@ -1608,7 +1608,7 @@ class X509 * Map extension values from octet string to extension-specific internal * format. * - * @param array ref $root + * @param array $root (by reference) * @param string $path * @param object $asn1 * @access private @@ -1661,7 +1661,7 @@ class X509 * Map extension values from extension-specific internal format to * octet string. * - * @param array ref $root + * @param array $root (by reference) * @param string $path * @param object $asn1 * @access private @@ -1727,7 +1727,7 @@ class X509 * Map attribute values from ANY type to attribute-specific internal * format. * - * @param array ref $root + * @param array $root (by reference) * @param string $path * @param object $asn1 * @access private @@ -1768,7 +1768,7 @@ class X509 * Map attribute values from attribute-specific internal format to * ANY type. * - * @param array ref $root + * @param array $root (by reference) * @param string $path * @param object $asn1 * @access private @@ -1811,7 +1811,7 @@ class X509 * Map DN values from ANY type to DN-specific internal * format. * - * @param array ref $root + * @param array $root (by reference) * @param string $path * @param object $asn1 * @access private @@ -1841,7 +1841,7 @@ class X509 * Map DN values from DN-specific internal format to * ANY type. * - * @param array ref $root + * @param array $root (by reference) * @param string $path * @param object $asn1 * @access private @@ -3195,7 +3195,8 @@ class X509 /** * Load a Certificate Signing Request * - * @param string $csr + * @param string|array $csr + * @param int $mode * @access public * @return mixed */ @@ -3332,7 +3333,7 @@ class X509 * * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen * - * @param string $csr + * @param string|array $spkac * @access public * @return mixed */ @@ -3403,7 +3404,7 @@ class X509 /** * Save a SPKAC CSR request * - * @param array $csr + * @param string|array $spkac * @param int $format optional * @access public * @return string @@ -3447,6 +3448,7 @@ class X509 * Load a Certificate Revocation List * * @param string $crl + * @param int $mode * @access public * @return mixed */ @@ -4043,8 +4045,7 @@ class X509 /** * X.509 certificate signing helper function. * - * @param object $key - * @param \phpseclib\File\X509 $subject + * @param \phpseclib\File\X509 $key * @param string $signatureAlgorithm * @access public * @return mixed @@ -4119,7 +4120,7 @@ class X509 * Set Serial Number * * @param string $serial - * @param $base optional + * @param int $base optional * @access public */ function setSerialNumber($serial, $base = -256) @@ -4782,7 +4783,6 @@ class X509 * Set the IP Addresses's which the cert is to be valid for * * @access public - * @param string $ipAddress optional */ function setIPAddress() { @@ -5054,13 +5054,16 @@ class X509 * subject=/O=organization/OU=org unit/CN=common name * issuer=/O=organization/CN=common name */ - $temp = strlen($str) <= ini_get('pcre.backtrack_limit') ? - preg_replace('#.*?^-+[^-]+-+[\r\n ]*$#ms', '', $str, 1) : - $str; - // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff - $temp = preg_replace('#-+[^-]+-+#', '', $temp); + if (strlen($str) > ini_get('pcre.backtrack_limit')) { + $temp = $str; + } else { + $temp = preg_replace('#.*?^-+[^-]+-+[\r\n ]*$#ms', '', $str, 1); + $temp = preg_replace('#-+END.*[\r\n ]*.*#ms', '', $str, 1); + } // remove new lines $temp = str_replace(array("\r", "\n", ' '), '', $temp); + // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff + $temp = preg_replace('#^-+[^-]+-+|-+[^-]+-+$#', '', $temp); $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; return $temp != false ? $temp : $str; } diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php index e7f6646703..fc24b91452 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php @@ -243,7 +243,7 @@ class BigInteger * ?> * </code> * - * @param $x base-10 number or base-$base number if $base set. + * @param int|string|resource $x base-10 number or base-$base number if $base set. * @param int $base * @return \phpseclib\Math\BigInteger * @access public @@ -658,11 +658,11 @@ class BigInteger { $hex = $this->toHex($twos_compliment); $bits = ''; - for ($i = strlen($hex) - 8, $start = strlen($hex) & 7; $i >= $start; $i-=8) { - $bits = str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT) . $bits; + for ($i = strlen($hex) - 6, $start = strlen($hex) % 6; $i >= $start; $i-=6) { + $bits = str_pad(decbin(hexdec(substr($hex, $i, 6))), 24, '0', STR_PAD_LEFT) . $bits; } if ($start) { // hexdec('') == 0 - $bits = str_pad(decbin(hexdec(substr($hex, 0, $start))), 8, '0', STR_PAD_LEFT) . $bits; + $bits = str_pad(decbin(hexdec(substr($hex, 0, $start))), 8 * $start, '0', STR_PAD_LEFT) . $bits; } $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0'); @@ -1994,7 +1994,7 @@ class BigInteger * * @see self::_slidingWindow() * @access private - * @param \phpseclib\Math\BigInteger + * @param \phpseclib\Math\BigInteger $n * @return \phpseclib\Math\BigInteger */ function _mod2($n) @@ -2688,7 +2688,7 @@ class BigInteger * Note how the same comparison operator is used. If you want to test for equality, use $x->equals($y). * * @param \phpseclib\Math\BigInteger $y - * @return int < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal. + * @return int that is < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal. * @access public * @see self::equals() * @internal Could return $this->subtract($x), but that's not as fast as what we do do. @@ -3090,7 +3090,7 @@ class BigInteger * * Byte length is equal to $length. Uses \phpseclib\Crypt\Random if it's loaded and mt_rand if it's not. * - * @param int $length + * @param int $size * @return \phpseclib\Math\BigInteger * @access private */ @@ -3557,7 +3557,7 @@ class BigInteger * * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision * - * @param \phpseclib\Math\BigInteger + * @param \phpseclib\Math\BigInteger $result * @return \phpseclib\Math\BigInteger * @see self::_trim() * @access private @@ -3634,8 +3634,8 @@ class BigInteger /** * Array Repeat * - * @param $input Array - * @param $multiplier mixed + * @param array $input + * @param mixed $multiplier * @return array * @access private */ @@ -3649,8 +3649,8 @@ class BigInteger * * Shifts binary strings $shift bits, essentially multiplying by 2**$shift. * - * @param $x String - * @param $shift Integer + * @param string $x (by reference) + * @param int $shift * @return string * @access private */ @@ -3678,8 +3678,8 @@ class BigInteger * * Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder. * - * @param $x String - * @param $shift Integer + * @param string $x (by referenc) + * @param int $shift * @return string * @access private */ diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php index 2826a607f8..34741831b0 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php @@ -416,7 +416,6 @@ class SFTP extends SSH2 * Login * * @param string $username - * @param string $password * @return bool * @access public */ @@ -1025,7 +1024,7 @@ class SFTP extends SSH2 uasort($contents, array(&$this, '_comparator')); } - return $raw ? $contents : array_keys($contents); + return $raw ? $contents : array_map('strval', array_keys($contents)); } /** @@ -1227,7 +1226,7 @@ class SFTP extends SSH2 * * Mainly used by file_exists * - * @param string $dir + * @param string $path * @return mixed * @access private */ @@ -1782,6 +1781,8 @@ class SFTP extends SSH2 * Creates a directory. * * @param string $dir + * @param int $mode + * @param bool $recursive * @return bool * @access public */ @@ -1814,6 +1815,7 @@ class SFTP extends SSH2 * Helper function for directory creation * * @param string $dir + * @param int $mode * @return bool * @access private */ @@ -2215,7 +2217,7 @@ class SFTP extends SSH2 $res_offset = $stat['size']; } else { $res_offset = 0; - if ($local_file !== false) { + if ($local_file !== false && !is_callable($local_file)) { $fp = fopen($local_file, 'wb'); if (!$fp) { return false; @@ -2225,7 +2227,7 @@ class SFTP extends SSH2 } } - $fclose_check = $local_file !== false && !is_resource($local_file); + $fclose_check = $local_file !== false && !is_callable($local_file) && !is_resource($local_file); $start = $offset; $read = 0; @@ -2246,9 +2248,6 @@ class SFTP extends SSH2 } $packet = null; $read+= $packet_size; - if (is_callable($progressCallback)) { - call_user_func($progressCallback, $read); - } $i++; } @@ -2275,9 +2274,14 @@ class SFTP extends SSH2 $offset+= strlen($temp); if ($local_file === false) { $content.= $temp; + } elseif (is_callable($local_file)) { + $local_file($temp); } else { fputs($fp, $temp); } + if (is_callable($progressCallback)) { + call_user_func($progressCallback, $offset); + } $temp = null; break; case NET_SFTP_STATUS: @@ -2735,6 +2739,7 @@ class SFTP extends SSH2 * * @param string $path * @param string $prop + * @param mixed $type * @return mixed * @access private */ @@ -2975,6 +2980,7 @@ class SFTP extends SSH2 * * @param int $type * @param string $data + * @param int $request_id * @see self::_get_sftp_packet() * @see self::_send_channel_packet() * @return bool @@ -2998,9 +3004,17 @@ class SFTP extends SSH2 $packet_type = '-> ' . $this->packet_types[$type] . ' (' . round($stop - $start, 4) . 's)'; if (NET_SFTP_LOGGING == self::LOG_REALTIME) { - echo "<pre>\r\n" . $this->_format_log(array($data), array($packet_type)) . "\r\n</pre>\r\n"; - flush(); - ob_flush(); + switch (PHP_SAPI) { + case 'cli': + $start = $stop = "\r\n"; + break; + default: + $start = '<pre>'; + $stop = '</pre>'; + } + echo $start . $this->_format_log(array($data), array($packet_type)) . $stop; + @flush(); + @ob_flush(); } else { $this->packet_type_log[] = $packet_type; if (NET_SFTP_LOGGING == self::LOG_COMPLEX) { @@ -3107,9 +3121,17 @@ class SFTP extends SSH2 $packet_type = '<- ' . $this->packet_types[$this->packet_type] . ' (' . round($stop - $start, 4) . 's)'; if (NET_SFTP_LOGGING == self::LOG_REALTIME) { - echo "<pre>\r\n" . $this->_format_log(array($packet), array($packet_type)) . "\r\n</pre>\r\n"; - flush(); - ob_flush(); + switch (PHP_SAPI) { + case 'cli': + $start = $stop = "\r\n"; + break; + default: + $start = '<pre>'; + $stop = '</pre>'; + } + echo $start . $this->_format_log(array($packet), array($packet_type)) . $stop; + @flush(); + @ob_flush(); } else { $this->packet_type_log[] = $packet_type; if (NET_SFTP_LOGGING == self::LOG_COMPLEX) { diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php index d2c4425dea..ec9e5841a3 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php @@ -410,7 +410,7 @@ class Stream { switch ($whence) { case SEEK_SET: - if ($offset >= $this->size || $offset < 0) { + if ($offset < 0) { return false; } break; @@ -447,7 +447,9 @@ class Stream // and https://github.com/php/php-src/blob/master/main/php_streams.h#L592 switch ($option) { case 1: // PHP_STREAM_META_TOUCH - return $this->sftp->touch($path, $var[0], $var[1]); + $time = isset($var[0]) ? $var[0] : null; + $atime = isset($var[1]) ? $var[1] : null; + return $this->sftp->touch($path, $time, $atime); case 2: // PHP_STREAM_OWNER_NAME case 3: // PHP_STREAM_GROUP_NAME return false; @@ -626,7 +628,6 @@ class Stream * $options. What does 8 correspond to? * * @param string $path - * @param int $mode * @param int $options * @return bool * @access public @@ -768,8 +769,8 @@ class Stream * If NET_SFTP_STREAM_LOGGING is defined all calls will be output on the screen and then (regardless of whether or not * NET_SFTP_STREAM_LOGGING is enabled) the parameters will be passed through to the appropriate method. * - * @param string - * @param array + * @param string $name + * @param array $arguments * @return mixed * @access public */ diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php index ff48d5436f..e372b8b923 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php @@ -812,6 +812,7 @@ class SSH1 * @see self::interactiveRead() * @see self::interactiveWrite() * @param string $cmd + * @param bool $block * @return mixed * @access public */ @@ -1385,7 +1386,6 @@ class SSH1 * named constants from it, using the value as the name of the constant and the index as the value of the constant. * If any of the constants that would be defined already exists, none of the constants will be defined. * - * @param array $array * @access private */ function _define_array() @@ -1584,7 +1584,8 @@ class SSH1 * * Makes sure that only the last 1MB worth of packets will be logged * - * @param string $data + * @param int $protocol_flags + * @param string $message * @access private */ function _append_log($protocol_flags, $message) diff --git a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php index f125185bb0..f8f8dcfdef 100644 --- a/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php +++ b/civicrm/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php @@ -687,6 +687,14 @@ class SSH2 */ var $curTimeout; + /** + * Keep Alive Interval + * + * @see self::setKeepAlive() + * @access private + */ + var $keepAlive; + /** * Real-time log file pointer * @@ -1538,6 +1546,32 @@ class SSH2 return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } + $server_host_key_algorithm = $this->_array_intersect_first($server_host_key_algorithms, $this->server_host_key_algorithms); + if ($server_host_key_algorithm === false) { + user_error('No compatible server host key algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $mac_algorithm_in = $this->_array_intersect_first($s2c_mac_algorithms, $this->mac_algorithms_server_to_client); + if ($mac_algorithm_in === false) { + user_error('No compatible server to client message authentication algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $compression_algorithm_out = $this->_array_intersect_first($c2s_compression_algorithms, $this->compression_algorithms_client_to_server); + if ($compression_algorithm_out === false) { + user_error('No compatible client to server compression algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + //$this->decompress = $compression_algorithm_out == 'zlib'; + + $compression_algorithm_in = $this->_array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_client_to_server); + if ($compression_algorithm_in === false) { + user_error('No compatible server to client compression algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + //$this->compress = $compression_algorithm_in == 'zlib'; + // Only relevant in diffie-hellman-group-exchange-sha{1,256}, otherwise empty. $exchange_hash_rfc4419 = ''; @@ -1773,12 +1807,6 @@ class SSH2 $this->session_id = $this->exchange_hash; } - $server_host_key_algorithm = $this->_array_intersect_first($server_host_key_algorithms, $this->server_host_key_algorithms); - if ($server_host_key_algorithm === false) { - user_error('No compatible server host key algorithms found'); - return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); - } - switch ($server_host_key_algorithm) { case 'ssh-dss': $expected_key_format = 'ssh-dss'; @@ -1903,14 +1931,14 @@ class SSH2 $this->decrypt->decrypt(str_repeat("\0", 1536)); } - $mac_algorithm = $this->_array_intersect_first($c2s_mac_algorithms, $this->mac_algorithms_client_to_server); - if ($mac_algorithm === false) { + $mac_algorithm_out = $this->_array_intersect_first($c2s_mac_algorithms, $this->mac_algorithms_client_to_server); + if ($mac_algorithm_out === false) { user_error('No compatible client to server message authentication algorithms found'); return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); } $createKeyLength = 0; // ie. $mac_algorithm == 'none' - switch ($mac_algorithm) { + switch ($mac_algorithm_out) { case 'hmac-sha2-256': $this->hmac_create = new Hash('sha256'); $createKeyLength = 32; @@ -1931,17 +1959,11 @@ class SSH2 $this->hmac_create = new Hash('md5-96'); $createKeyLength = 16; } - $this->hmac_create->name = $mac_algorithm; - - $mac_algorithm = $this->_array_intersect_first($s2c_mac_algorithms, $this->mac_algorithms_server_to_client); - if ($mac_algorithm === false) { - user_error('No compatible server to client message authentication algorithms found'); - return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); - } + $this->hmac_create->name = $mac_algorithm_out; $checkKeyLength = 0; $this->hmac_size = 0; - switch ($mac_algorithm) { + switch ($mac_algorithm_in) { case 'hmac-sha2-256': $this->hmac_check = new Hash('sha256'); $checkKeyLength = 32; @@ -1967,7 +1989,7 @@ class SSH2 $checkKeyLength = 16; $this->hmac_size = 12; } - $this->hmac_check->name = $mac_algorithm; + $this->hmac_check->name = $mac_algorithm_in; $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id); while ($createKeyLength > strlen($key)) { @@ -1981,20 +2003,6 @@ class SSH2 } $this->hmac_check->setKey(substr($key, 0, $checkKeyLength)); - $compression_algorithm = $this->_array_intersect_first($c2s_compression_algorithms, $this->compression_algorithms_client_to_server); - if ($compression_algorithm === false) { - user_error('No compatible client to server compression algorithms found'); - return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); - } - //$this->decompress = $compression_algorithm == 'zlib'; - - $compression_algorithm = $this->_array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_client_to_server); - if ($compression_algorithm === false) { - user_error('No compatible server to client compression algorithms found'); - return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); - } - //$this->compress = $compression_algorithm == 'zlib'; - return true; } @@ -2112,8 +2120,6 @@ class SSH2 * The $password parameter can be a plaintext password, a \phpseclib\Crypt\RSA object or an array * * @param string $username - * @param mixed $password - * @param mixed $... * @return bool * @see self::_login() * @access public @@ -2140,8 +2146,6 @@ class SSH2 * Login Helper * * @param string $username - * @param mixed $password - * @param mixed $... * @return bool * @see self::_login_helper() * @access private @@ -2402,7 +2406,6 @@ class SSH2 /** * Handle the keyboard-interactive requests / responses. * - * @param string $responses... * @return bool * @access private */ @@ -2547,7 +2550,7 @@ class SSH2 * Login with an RSA private key * * @param string $username - * @param \phpseclib\Crypt\RSA $password + * @param \phpseclib\Crypt\RSA $privatekey * @return bool * @access private * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis} @@ -2631,6 +2634,13 @@ class SSH2 // we'll just take it on faith that the public key blob and the public key algorithm name are as // they should be $this->_updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_PK_OK'); + break; + case NET_SSH2_MSG_USERAUTH_SUCCESS: + $this->bitmap |= self::MASK_LOGIN; + return true; + default: + user_error('Unexpected response to publickey authentication pt 1'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } $packet = $part1 . chr(1) . $part2; @@ -2665,7 +2675,8 @@ class SSH2 return true; } - return false; + user_error('Unexpected response to publickey authentication pt 2'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } /** @@ -2682,6 +2693,19 @@ class SSH2 $this->timeout = $this->curTimeout = $timeout; } + /** + * Set Keep Alive + * + * Sends an SSH2_MSG_IGNORE message every x seconds, if x is a positive non-zero number. + * + * @param int $interval + * @access public + */ + function setKeepAlive($interval) + { + $this->keepAlive = $interval; + } + /** * Get the output from stdError * @@ -2911,28 +2935,6 @@ class SSH2 return false; } - $response = $this->_get_binary_packet(); - if ($response === false) { - $this->bitmap = 0; - user_error('Connection closed by server'); - return false; - } - - if (!strlen($response)) { - return false; - } - list(, $type) = unpack('C', $this->_string_shift($response, 1)); - - switch ($type) { - case NET_SSH2_MSG_CHANNEL_SUCCESS: - // if a pty can't be opened maybe commands can still be executed - case NET_SSH2_MSG_CHANNEL_FAILURE: - break; - default: - user_error('Unable to request pseudo-terminal'); - return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); - } - $packet = pack( 'CNNa*C', NET_SSH2_MSG_CHANNEL_REQUEST, @@ -2945,14 +2947,7 @@ class SSH2 return false; } - $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST; - - $response = $this->_get_channel_packet(self::CHANNEL_SHELL); - if ($response === false) { - return false; - } - - $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA; + $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_IGNORE; $this->bitmap |= self::MASK_SHELL; @@ -3320,6 +3315,54 @@ class SSH2 */ function _get_binary_packet($skip_channel_filter = false) { + if ($skip_channel_filter) { + $read = array($this->fsock); + $write = $except = null; + + if ($this->curTimeout <= 0) { + if ($this->keepAlive <= 0) { + @stream_select($read, $write, $except, null); + } else { + if (!@stream_select($read, $write, $except, $this->keepAlive) && !count($read)) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0)); + return $this->_get_binary_packet(true); + } + } + } else { + if ($this->curTimeout < 0) { + $this->is_timeout = true; + return true; + } + + $read = array($this->fsock); + $write = $except = null; + + $start = microtime(true); + + if ($this->keepAlive > 0 && $this->keepAlive < $this->curTimeout) { + if (!@stream_select($read, $write, $except, $this->keepAlive) && !count($read)) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0)); + $elapsed = microtime(true) - $start; + $this->curTimeout-= $elapsed; + return $this->_get_binary_packet(true); + } + $elapsed = microtime(true) - $start; + $this->curTimeout-= $elapsed; + } + + $sec = floor($this->curTimeout); + $usec = 1000000 * ($this->curTimeout - $sec); + + // on windows this returns a "Warning: Invalid CRT parameters detected" error + if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { + $this->is_timeout = true; + return true; + } + $elapsed = microtime(true) - $start; + $this->curTimeout-= $elapsed; + } + } + if (!is_resource($this->fsock) || feof($this->fsock)) { $this->bitmap = 0; user_error('Connection closed prematurely'); @@ -3471,9 +3514,19 @@ class SSH2 // only called when we've already logged in if (($this->bitmap & self::MASK_CONNECTED) && $this->isAuthenticated()) { switch (ord($payload[0])) { + case NET_SSH2_MSG_CHANNEL_REQUEST: + if (strlen($payload) == 31) { + extract(unpack('cpacket_type/Nchannel/Nlength', $payload)); + if (substr($payload, 9, $length) == 'keepalive@openssh.com' && isset($this->server_channels[$channel])) { + if (ord(substr($payload, 9 + $length))) { // want reply + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_SUCCESS, $this->server_channels[$channel])); + } + $payload = $this->_get_binary_packet($skip_channel_filter); + } + } + break; case NET_SSH2_MSG_CHANNEL_DATA: case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA: - case NET_SSH2_MSG_CHANNEL_REQUEST: case NET_SSH2_MSG_CHANNEL_CLOSE: case NET_SSH2_MSG_CHANNEL_EOF: if (!$skip_channel_filter && !empty($this->server_channels)) { @@ -3653,8 +3706,9 @@ class SSH2 * * Returns the data as a string if it's available and false if not. * - * @param $client_channel - * @return mixed + * @param int $client_channel + * @param bool $skip_extended + * @return mixed|bool * @access private */ function _get_channel_packet($client_channel, $skip_extended = false) @@ -3668,36 +3722,13 @@ class SSH2 $response = $this->binary_packet_buffer; $this->binary_packet_buffer = false; } else { - $read = array($this->fsock); - $write = $except = null; - - if (!$this->curTimeout) { - @stream_select($read, $write, $except, null); - } else { - if ($this->curTimeout < 0) { - $this->is_timeout = true; - return true; - } - - $read = array($this->fsock); - $write = $except = null; - - $start = microtime(true); - $sec = floor($this->curTimeout); - $usec = 1000000 * ($this->curTimeout - $sec); - // on windows this returns a "Warning: Invalid CRT parameters detected" error - if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { - $this->is_timeout = true; - if ($client_channel == self::CHANNEL_EXEC && !$this->request_pty) { - $this->_close_channel($client_channel); - } - return true; + $response = $this->_get_binary_packet(true); + if ($response === true && $this->is_timeout) { + if ($client_channel == self::CHANNEL_EXEC && !$this->request_pty) { + $this->_close_channel($client_channel); } - $elapsed = microtime(true) - $start; - $this->curTimeout-= $elapsed; + return true; } - - $response = $this->_get_binary_packet(true); if ($response === false) { $this->bitmap = 0; user_error('Connection closed by server'); @@ -3845,6 +3876,16 @@ class SSH2 return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); } break; + case NET_SSH2_MSG_IGNORE: + switch ($type) { + case NET_SSH2_MSG_CHANNEL_SUCCESS: + //$this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_DATA; + continue 3; + case NET_SSH2_MSG_CHANNEL_FAILURE: + user_error('Error opening channel'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + break; case NET_SSH2_MSG_CHANNEL_REQUEST: switch ($type) { case NET_SSH2_MSG_CHANNEL_SUCCESS: @@ -3864,6 +3905,10 @@ class SSH2 switch ($type) { case NET_SSH2_MSG_CHANNEL_DATA: + //if ($this->channel_status[$channel] == NET_SSH2_MSG_IGNORE) { + // $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_DATA; + //} + /* if ($channel == self::CHANNEL_EXEC) { // SCP requires null packets, such as this, be sent. further, in the case of the ssh.com SSH server @@ -3984,7 +4029,8 @@ class SSH2 * * Makes sure that only the last 1MB worth of packets will be logged * - * @param string $data + * @param string $message_number + * @param string $message * @access private */ function _append_log($message_number, $message) @@ -4189,7 +4235,6 @@ class SSH2 * named constants from it, using the value as the name of the constant and the index as the value of the constant. * If any of the constants that would be defined already exists, none of the constants will be defined. * - * @param array $array * @access private */ function _define_array() diff --git a/civicrm/xml/schema/Activity/Activity.xml b/civicrm/xml/schema/Activity/Activity.xml index 1fb0d32e51..5b49a49a47 100644 --- a/civicrm/xml/schema/Activity/Activity.xml +++ b/civicrm/xml/schema/Activity/Activity.xml @@ -36,6 +36,7 @@ <type>int unsigned</type> <title>Source Record</title> <comment>Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Table can be figured out through activity_type_id, and further through component registry.</comment> + <readonly>true</readonly> <add>2.0</add> </field> <index> @@ -216,6 +217,7 @@ <title>Parent Activity ID</title> <type>int unsigned</type> <comment>Parent meeting ID (if this is a follow-up item). This is not currently implemented</comment> + <readonly>true</readonly> <html> <label>Parent Activity</label> </html> @@ -305,6 +307,7 @@ <type>int unsigned</type> <title>Original Activity ID</title> <comment>Activity ID of the first activity record in versioning chain.</comment> + <readonly>true</readonly> <html> <label>Original Activity</label> </html> @@ -421,6 +424,7 @@ <html> <label>Modified Date</label> </html> + <readonly>true</readonly> <add>4.7</add> </field> </table> diff --git a/civicrm/xml/schema/Batch/Batch.xml b/civicrm/xml/schema/Batch/Batch.xml index a1960cc3bb..d7b4541bbd 100644 --- a/civicrm/xml/schema/Batch/Batch.xml +++ b/civicrm/xml/schema/Batch/Batch.xml @@ -105,7 +105,8 @@ <name>modified_date</name> <title>Batch Modified Date</title> <type>datetime</type> - <comment>When was this item created</comment> + <comment>When was this item modified</comment> + <readonly>true</readonly> <add>3.3</add> </field> <foreignKey> diff --git a/civicrm/xml/schema/Case/Case.xml b/civicrm/xml/schema/Case/Case.xml index 2f4b086a64..545765b3e0 100644 --- a/civicrm/xml/schema/Case/Case.xml +++ b/civicrm/xml/schema/Case/Case.xml @@ -165,6 +165,7 @@ <html> <label>Modified Date</label> </html> + <readonly>true</readonly> <add>4.7</add> </field> </table> diff --git a/civicrm/xml/schema/Case/CaseType.xml b/civicrm/xml/schema/Case/CaseType.xml index 8640e62268..ba361ba9e1 100644 --- a/civicrm/xml/schema/Case/CaseType.xml +++ b/civicrm/xml/schema/Case/CaseType.xml @@ -60,7 +60,8 @@ <name>is_active</name> <title>Case Type Is Active</title> <type>boolean</type> - <comment>Is this entry active?</comment> + <comment>Is this case type enabled?</comment> + <default>1</default> <add>4.5</add> </field> <field> diff --git a/civicrm/xml/schema/Contact/Contact.xml b/civicrm/xml/schema/Contact/Contact.xml index e539c2805c..0922d4c4b8 100644 --- a/civicrm/xml/schema/Contact/Contact.xml +++ b/civicrm/xml/schema/Contact/Contact.xml @@ -361,6 +361,7 @@ <label>API KEY</label> </html> <add>2.2</add> + <readonly>true</readonly> <permission> <or>administer CiviCRM, edit api keys</or> </permission> @@ -559,6 +560,7 @@ <type>varchar</type> <length>255</length> <comment>Cache Email Greeting.</comment> + <readonly>true</readonly> <add>3.0</add> </field> <field> @@ -594,6 +596,7 @@ <type>varchar</type> <length>255</length> <comment>Cache Postal greeting.</comment> + <readonly>true</readonly> <add>3.0</add> </field> <field> @@ -629,6 +632,7 @@ <type>varchar</type> <length>255</length> <comment>Cache Addressee.</comment> + <readonly>true</readonly> <add>3.0</add> </field> <field> @@ -752,6 +756,7 @@ </html> <add>1.1</add> <contactType>Household</contactType> + <readonly>true</readonly> </field> <foreignKey> <name>primary_contact_id</name> diff --git a/civicrm/xml/schema/Contact/Group.xml b/civicrm/xml/schema/Contact/Group.xml index 5be873cd8f..7970845139 100644 --- a/civicrm/xml/schema/Contact/Group.xml +++ b/civicrm/xml/schema/Contact/Group.xml @@ -82,7 +82,7 @@ <table>civicrm_saved_search</table> <key>id</key> <add>1.1</add> - <onDelete>SET NULL</onDelete> + <onDelete>CASCADE</onDelete> </foreignKey> <field> <name>is_active</name> @@ -111,6 +111,7 @@ <type>text</type> <title>Group Where Clause</title> <comment>the sql where clause if a saved search acl</comment> + <readonly>true</readonly> <add>1.6</add> </field> <field> @@ -118,6 +119,7 @@ <type>text</type> <title>Tables For Select Clause</title> <comment>the tables to be included in a select data</comment> + <readonly>true</readonly> <serialize>PHP</serialize> <add>1.6</add> </field> @@ -126,6 +128,7 @@ <type>text</type> <title>Tables For Where Clause</title> <comment>the tables to be included in the count statement</comment> + <readonly>true</readonly> <serialize>PHP</serialize> <add>1.6</add> </field> @@ -146,6 +149,7 @@ <type>timestamp</type> <title>Group Cache Date</title> <required>false</required> + <readonly>true</readonly> <comment>Date when we created the cache for a smart group</comment> <add>2.1</add> </field> @@ -159,6 +163,7 @@ <type>timestamp</type> <title>Next Group Refresh Time</title> <required>false</required> + <readonly>true</readonly> <comment>Date and time when we need to refresh the cache next.</comment> <add>4.3</add> </field> @@ -237,6 +242,7 @@ <html> <label>Modified By</label> </html> + <readonly>true</readonly> <add>4.5</add> </field> <foreignKey> diff --git a/civicrm/xml/schema/Contact/RelationshipCache.xml b/civicrm/xml/schema/Contact/RelationshipCache.xml index 17d03c3670..e24998f55e 100644 --- a/civicrm/xml/schema/Contact/RelationshipCache.xml +++ b/civicrm/xml/schema/Contact/RelationshipCache.xml @@ -35,6 +35,7 @@ <label>Relationship</label> </html> <add>5.29</add> + <readonly>true</readonly> </field> <foreignKey> <name>relationship_id</name> @@ -54,6 +55,7 @@ <label>Relationship Type</label> </html> <add>5.29</add> + <readonly>true</readonly> </field> <foreignKey> <name>relationship_type_id</name> @@ -74,6 +76,7 @@ </pseudoconstant> <comment>The cache record is a permutation of the original relationship record. The orientation indicates whether it is forward (a_b) or reverse (b_a) relationship.</comment> <add>5.29</add> + <readonly>true</readonly> </field> <field> @@ -87,6 +90,7 @@ <type>EntityRef</type> <label>Contact (Near side)</label> </html> + <readonly>true</readonly> </field> <foreignKey> <name>near_contact_id</name> @@ -109,6 +113,7 @@ <pseudoconstant> <callback>CRM_Core_PseudoConstant::relationshipTypeOptions</callback> </pseudoconstant> + <readonly>true</readonly> </field> <field> @@ -122,6 +127,7 @@ <type>EntityRef</type> <label>Contact (Far side)</label> </html> + <readonly>true</readonly> </field> <foreignKey> <name>far_contact_id</name> @@ -144,6 +150,7 @@ <pseudoconstant> <callback>CRM_Core_PseudoConstant::relationshipTypeOptions</callback> </pseudoconstant> + <readonly>true</readonly> </field> <index> @@ -186,6 +193,7 @@ <html> <type>CheckBox</type> </html> + <readonly>true</readonly> </field> <field> <name>start_date</name> @@ -198,6 +206,7 @@ <type>Select Date</type> <formatType>activityDate</formatType> </html> + <readonly>true</readonly> </field> <field> <name>end_date</name> @@ -210,5 +219,6 @@ <type>Select Date</type> <formatType>activityDate</formatType> </html> + <readonly>true</readonly> </field> </table> diff --git a/civicrm/xml/schema/Contact/SavedSearch.xml b/civicrm/xml/schema/Contact/SavedSearch.xml index 586dd30195..a06a794ab1 100644 --- a/civicrm/xml/schema/Contact/SavedSearch.xml +++ b/civicrm/xml/schema/Contact/SavedSearch.xml @@ -161,6 +161,7 @@ <html> <label>Modified By</label> </html> + <readonly>true</readonly> <add>5.36</add> </field> <foreignKey> @@ -193,6 +194,7 @@ <required>true</required> <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> <add>5.36</add> + <readonly>true</readonly> </field> <field> <name>description</name> diff --git a/civicrm/xml/schema/Contribute/Contribution.xml b/civicrm/xml/schema/Contribute/Contribution.xml index e5ed3cad94..6099ff56e7 100644 --- a/civicrm/xml/schema/Contribute/Contribution.xml +++ b/civicrm/xml/schema/Contribute/Contribution.xml @@ -203,6 +203,7 @@ <import>true</import> <headerPattern>/tr(ansactio|x)n(.?id)?/i</headerPattern> <comment>unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method</comment> + <readonly>true</readonly> <html> <type>Text</type> </html> @@ -216,6 +217,7 @@ <import>true</import> <headerPattern>/invoice(.?id)?/i</headerPattern> <comment>unique invoice id, system generated or passed in</comment> + <readonly>true</readonly> <html> <type>Text</type> </html> @@ -359,6 +361,7 @@ <type>int unsigned</type> <comment>Conditional foreign key to civicrm_contribution_recur id. Each contribution made in connection with a recurring contribution carries a foreign key to the recurring contribution record. This assumes we can track these processor initiated events.</comment> <export>true</export> + <readonly>true</readonly> <html> <label>Recurring Contribution</label> </html> @@ -521,13 +524,14 @@ </html> <add>4.7</add> </field> - <field> + <field> <name>is_template</name> <title>Is a Template Contribution</title> <type>boolean</type> <default>0</default> <import>true</import> <comment>Shows this is a template for recurring contributions.</comment> + <readonly>true</readonly> <html> <type>CheckBox</type> </html> diff --git a/civicrm/xml/schema/Contribute/ContributionRecur.xml b/civicrm/xml/schema/Contribute/ContributionRecur.xml index 431bc7eea2..39c5fd7a36 100644 --- a/civicrm/xml/schema/Contribute/ContributionRecur.xml +++ b/civicrm/xml/schema/Contribute/ContributionRecur.xml @@ -93,6 +93,7 @@ <title>Interval (number of units)</title> <type>int unsigned</type> <required>true</required> + <default>1</default> <comment>Number of time units for recurrence of payment.</comment> <add>1.6</add> <html> @@ -114,6 +115,7 @@ <title>Start Date</title> <type>datetime</type> <required>true</required> + <default>CURRENT_TIMESTAMP</default> <comment>The date the first scheduled recurring contribution occurs.</comment> <add>1.6</add> <html> @@ -128,6 +130,7 @@ <title>Created Date</title> <type>datetime</type> <required>true</required> + <default>CURRENT_TIMESTAMP</default> <comment>When this recurring contribution record was created.</comment> <add>1.6</add> <html> @@ -141,6 +144,7 @@ <name>modified_date</name> <title>Modified Date</title> <type>datetime</type> + <default>CURRENT_TIMESTAMP</default> <comment>Last updated date for this record. mostly the last time a payment was received</comment> <add>1.6</add> <html> @@ -149,6 +153,7 @@ </html> <uniqueName>contribution_recur_modified_date</uniqueName> <uniqueTitle>Recurring Contribution Modified Date</uniqueTitle> + <readonly>true</readonly> </field> <field> <name>cancel_date</name> @@ -258,7 +263,7 @@ <uniqueName>contribution_recur_contribution_status_id</uniqueName> <title>Status</title> <type>int unsigned</type> - <default>1</default> + <default>2</default> <import>true</import> <add>1.6</add> <pseudoconstant> diff --git a/civicrm/xml/schema/Core/ActionSchedule.xml b/civicrm/xml/schema/Core/ActionSchedule.xml index 8fe7ad01c8..532d6dbc61 100644 --- a/civicrm/xml/schema/Core/ActionSchedule.xml +++ b/civicrm/xml/schema/Core/ActionSchedule.xml @@ -424,6 +424,7 @@ <label>Modified Date</label> </html> <add>5.34</add> + <readonly>true</readonly> </field> <field> <name>effective_start_date</name> diff --git a/civicrm/xml/schema/Core/Note.xml b/civicrm/xml/schema/Core/Note.xml index 4f594b78d4..dd0ef304a5 100644 --- a/civicrm/xml/schema/Core/Note.xml +++ b/civicrm/xml/schema/Core/Note.xml @@ -86,6 +86,26 @@ <add>1.1</add> <onDelete>SET NULL</onDelete> </foreignKey> + <field> + <name>note_date</name> + <title>Note Date</title> + <type>timestamp</type> + <add>5.36</add> + <default>CURRENT_TIMESTAMP</default> + <comment>Date attached to the note</comment> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>created_date</name> + <type>timestamp</type> + <comment>When the note was created.</comment> + <required>true</required> + <default>CURRENT_TIMESTAMP</default> + <add>5.36</add> + </field> <field> <name>modified_date</name> <title>Note Modified By</title> @@ -93,6 +113,7 @@ <comment>When was this note last modified/edited</comment> <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> <add>1.1</add> + <readonly>true</readonly> </field> <field> <name>subject</name> diff --git a/civicrm/xml/schema/Cxn/Cxn.xml b/civicrm/xml/schema/Cxn/Cxn.xml index 89e616d0bd..979dbcdb04 100644 --- a/civicrm/xml/schema/Cxn/Cxn.xml +++ b/civicrm/xml/schema/Cxn/Cxn.xml @@ -44,7 +44,7 @@ </field> <!-- Connection details --> - + <field> <name>cxn_guid</name> <title>Connection GUID</title> @@ -119,6 +119,7 @@ <label>Modified Date</label> </html> <add>4.6</add> + <readonly>true</readonly> </field> <field> <name>fetched_date</name> diff --git a/civicrm/xml/schema/Financial/EntityFinancialAccount.xml b/civicrm/xml/schema/Financial/EntityFinancialAccount.xml index 95e3111928..8c70d4c706 100644 --- a/civicrm/xml/schema/Financial/EntityFinancialAccount.xml +++ b/civicrm/xml/schema/Financial/EntityFinancialAccount.xml @@ -32,6 +32,9 @@ <import>true</import> <add>4.3</add> <comment>Links to an entity_table like civicrm_financial_type</comment> + <pseudoconstant> + <callback>CRM_Financial_BAO_EntityFinancialAccount::entityTables</callback> + </pseudoconstant> </field> <field> <name>entity_id</name> diff --git a/civicrm/xml/schema/Financial/EntityFinancialTrxn.xml b/civicrm/xml/schema/Financial/EntityFinancialTrxn.xml index dd40409bd9..b1fbbcc8ae 100644 --- a/civicrm/xml/schema/Financial/EntityFinancialTrxn.xml +++ b/civicrm/xml/schema/Financial/EntityFinancialTrxn.xml @@ -28,6 +28,9 @@ <length>64</length> <required>true</required> <import>true</import> + <pseudoconstant> + <callback>CRM_Financial_BAO_EntityFinancialTrxn::entityTables</callback> + </pseudoconstant> <add>3.2</add> <comment>May contain civicrm_financial_item, civicrm_contribution, civicrm_financial_trxn, civicrm_grant, etc</comment> </field> diff --git a/civicrm/xml/schema/Mailing/Mailing.xml b/civicrm/xml/schema/Mailing/Mailing.xml index 2a257dcc00..7682e66362 100644 --- a/civicrm/xml/schema/Mailing/Mailing.xml +++ b/civicrm/xml/schema/Mailing/Mailing.xml @@ -345,6 +345,7 @@ <html> <label>Modified Date</label> </html> + <readonly>true</readonly> <add>4.7</add> </field> <field> @@ -503,6 +504,7 @@ <type>varchar</type> <length>16</length> <comment>Key for validating requests related to this mailing.</comment> + <readonly>true</readonly> <add>4.5</add> </field> <index> diff --git a/civicrm/xml/schema/Member/MembershipLog.xml b/civicrm/xml/schema/Member/MembershipLog.xml index 4bd61a786d..a3c59ce07b 100644 --- a/civicrm/xml/schema/Member/MembershipLog.xml +++ b/civicrm/xml/schema/Member/MembershipLog.xml @@ -82,6 +82,7 @@ <html> <label>Modified By</label> </html> + <readonly>true</readonly> <add>1.5</add> </field> <foreignKey> diff --git a/civicrm/xml/schema/Pledge/Pledge.xml b/civicrm/xml/schema/Pledge/Pledge.xml index 58d6ef5749..0fc7c6491d 100644 --- a/civicrm/xml/schema/Pledge/Pledge.xml +++ b/civicrm/xml/schema/Pledge/Pledge.xml @@ -232,6 +232,7 @@ <type>datetime</type> <title>Pledge Modified Date</title> <comment>Last updated date for this pledge record.</comment> + <readonly>true</readonly> <add>2.1</add> </field> <field> diff --git a/civicrm/xml/templates/civicrm_data.tpl b/civicrm/xml/templates/civicrm_data.tpl index b2e0f82847..d7b27aa297 100644 --- a/civicrm/xml/templates/civicrm_data.tpl +++ b/civicrm/xml/templates/civicrm_data.tpl @@ -850,9 +850,9 @@ VALUES (@option_group_id_paperSize, '{ts escape="sql"}ISO SRA4{/ts}', '{literal}{"metric":"pt","width":637.8,"height":907.09}{/literal}', 'sra4', NULL, NULL, 0, 62, NULL, 0, 0, 1, NULL, NULL, NULL), -- activity_contacts - (@option_group_id_aco, '{ts escape="sql"}Activity Assignees{/ts}', 1, 'Activity Assignees', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aco, '{ts escape="sql"}Activity Assignees{/ts}', 1, 'Activity Assignees', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), (@option_group_id_aco, '{ts escape="sql"}Activity Source{/ts}', 2, 'Activity Source', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), - (@option_group_id_aco, '{ts escape="sql"}Activity Targets{/ts}', 3, 'Activity Targets', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aco, '{ts escape="sql"}Activity Targets{/ts}', 3, 'Activity Targets', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), -- financial_account_type -- grouping field is specific to Quickbooks for mapping to .iif format @@ -1782,3 +1782,5 @@ INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_act INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'eventcart', 'Event cart', 'Event cart', 'eventcart', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'financialacls', 'Financial ACLs', 'Financial ACLs', 'financialacls', 1); INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'contributioncancelactions', 'Contribution cancel actions', 'Contribution cancel actions', 'contributioncancelactions', 1); +INSERT IGNORE INTO civicrm_extension (type, full_name, name, label, file, is_active) VALUES ('module', 'recaptcha', 'reCAPTCHA', 'reCAPTCHA', 'recaptcha', 1); + diff --git a/civicrm/xml/templates/civicrm_navigation.tpl b/civicrm/xml/templates/civicrm_navigation.tpl index db3bda1a46..efd43de92b 100644 --- a/civicrm/xml/templates/civicrm_navigation.tpl +++ b/civicrm/xml/templates/civicrm_navigation.tpl @@ -388,7 +388,7 @@ VALUES ( @domainID, 'civicrm/admin/setting/path?reset=1', '{ts escape="sql" skip="true"}Directories{/ts}', 'Directories', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/mapping?reset=1', '{ts escape="sql" skip="true"}Import/Export Mappings{/ts}', 'Import/Export Mappings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 8 ), ( @domainID, 'civicrm/admin/setting/mapping?reset=1', '{ts escape="sql" skip="true"}Mapping and Geocoding{/ts}', 'Mapping and Geocoding', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 9 ), - ( @domainID, 'civicrm/admin/setting/misc?reset=1', '{ts escape="sql" skip="true"}Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.){/ts}', 'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/setting/misc?reset=1', '{ts escape="sql" skip="true"}Misc (Undelete, PDFs, Limits, Logging, etc.){/ts}', 'misc_admin_settings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 10 ), ( @domainID, 'civicrm/admin/setting/preferences/multisite?reset=1', '{ts escape="sql" skip="true"}Multi Site Settings{/ts}', 'Multi Site Settings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 11 ), ( @domainID, 'civicrm/admin/options?reset=1', '{ts escape="sql" skip="true"}Option Groups{/ts}', 'Option Groups', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 12 ), ( @domainID, 'civicrm/admin/setting/smtp?reset=1', '{ts escape="sql" skip="true"}Outbound Email (SMTP/Sendmail){/ts}', 'Outbound Email', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 13 ), diff --git a/civicrm/xml/templates/civicrm_state_province.tpl b/civicrm/xml/templates/civicrm_state_province.tpl index ad35bf236b..4ba9fd530f 100644 --- a/civicrm/xml/templates/civicrm_state_province.tpl +++ b/civicrm/xml/templates/civicrm_state_province.tpl @@ -4125,7 +4125,7 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1226, "BGE", "Bridgend"), (NULL, 1226, "CAY", "Caerphilly"), (NULL, 1226, "CRF", "Cardiff"), -(NULL, 1226, "CRF", "Carmarthenshire"), +(NULL, 1226, "CMN", "Carmarthenshire"), (NULL, 1226, "CGN", "Ceredigion"), (NULL, 1226, "CWY", "Conwy"), (NULL, 1226, "DEN", "Denbighshire"), diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml index b1d5876048..3d61973691 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.36.1</version_no> + <version_no>5.37.0</version_no> </version> diff --git a/includes/admin-metaboxes/civicrm.metabox.contact.add.php b/includes/admin-metaboxes/civicrm.metabox.contact.add.php index fc517a4f0b..c51fb4b071 100644 --- a/includes/admin-metaboxes/civicrm.metabox.contact.add.php +++ b/includes/admin-metaboxes/civicrm.metabox.contact.add.php @@ -51,6 +51,11 @@ class CiviCRM_For_WordPress_Admin_Metabox_Contact_Add { */ public function __construct() { + // Bail if CiviCRM is not installed. + if (!CIVICRM_INSTALLED) { + return; + } + // Store reference to CiviCRM plugin object. $this->civi = civi_wp(); @@ -69,6 +74,11 @@ class CiviCRM_For_WordPress_Admin_Metabox_Contact_Add { */ public function register_hooks() { + // Bail if the current WordPress User cannot add Contacts. + if (!$this->civi->users->check_civicrm_permission('add_contacts')) { + return; + } + // Add our meta boxes. add_action('wp_dashboard_setup', [$this, 'meta_box_add']); diff --git a/includes/admin-pages/civicrm.page.integration.php b/includes/admin-pages/civicrm.page.integration.php index 346d6fcaf0..67b09734af 100644 --- a/includes/admin-pages/civicrm.page.integration.php +++ b/includes/admin-pages/civicrm.page.integration.php @@ -62,6 +62,11 @@ class CiviCRM_For_WordPress_Admin_Page_Integration { // Disable until Messages API is active. return; + // Bail if CiviCRM is not installed. + if (!CIVICRM_INSTALLED) { + return; + } + // Store reference to CiviCRM plugin object. $this->civi = civi_wp(); @@ -88,6 +93,25 @@ class CiviCRM_For_WordPress_Admin_Page_Integration { } + /** + * Get the capability required to access the Settings Page. + * + * @since 5.37 + */ + public function access_capability() { + + /** + * Return default capability but allow overrides. + * + * @since 5.37 + * + * @param str The default access capability. + * @return str The modified access capability. + */ + return apply_filters('civicrm/admin/integration/cap', 'manage_options'); + + } + /** * Adds CiviCRM sub-menu items to WordPress admin menu. * @@ -100,12 +124,15 @@ class CiviCRM_For_WordPress_Admin_Page_Integration { return; } + // Get access capability. + $capability = $this->access_capability(); + // Add Integration submenu item. $integration_page = add_submenu_page( 'CiviCRM', __('Integrating CiviCRM with WordPress', 'civicrm'), __('Integration', 'civicrm'), - 'access_civicrm', + $capability, 'civi_integration', [$this, 'page_integration'] ); @@ -208,8 +235,9 @@ class CiviCRM_For_WordPress_Admin_Page_Integration { return; } - // Bail if user cannot access CiviCRM. - if (!current_user_can('access_civicrm')) { + // Bail if user cannot access the Integration Page. + $capability = $this->access_capability(); + if (!current_user_can($capability)) { return; } diff --git a/includes/admin-pages/civicrm.page.options.php b/includes/admin-pages/civicrm.page.options.php index d4dd4161f5..d22a590f21 100644 --- a/includes/admin-pages/civicrm.page.options.php +++ b/includes/admin-pages/civicrm.page.options.php @@ -59,6 +59,11 @@ class CiviCRM_For_WordPress_Admin_Page_Options { */ public function __construct() { + // Bail if CiviCRM is not installed. + if (!CIVICRM_INSTALLED) { + return; + } + // Store reference to CiviCRM plugin object. $this->civi = civi_wp(); @@ -90,6 +95,25 @@ class CiviCRM_For_WordPress_Admin_Page_Options { } + /** + * Get the capability required to access the Settings Page. + * + * @since 5.37 + */ + public function access_capability() { + + /** + * Return default capability but allow overrides. + * + * @since 5.37 + * + * @param str The default access capability. + * @return str The modified access capability. + */ + return apply_filters('civicrm/admin/settings/cap', 'manage_options'); + + } + /** * Adds CiviCRM sub-menu items to WordPress admin menu. * @@ -97,12 +121,15 @@ class CiviCRM_For_WordPress_Admin_Page_Options { */ public function add_menu_items() { + // Get access capability. + $capability = $this->access_capability(); + // Add Settings submenu item. $options_page = add_submenu_page( 'CiviCRM', __('CiviCRM Settings for WordPress', 'civicrm'), __('Settings', 'civicrm'), - 'access_civicrm', + $capability, $this->slug, [$this, 'page_options'] ); @@ -260,8 +287,9 @@ class CiviCRM_For_WordPress_Admin_Page_Options { return; } - // Bail if user cannot access CiviCRM. - if (!current_user_can('access_civicrm')) { + // Bail if user cannot access the Settings Page. + $capability = $this->access_capability(); + if (!current_user_can($capability)) { return; } diff --git a/includes/civicrm.shortcodes.php b/includes/civicrm.shortcodes.php index fa50df66e4..0529ca3a34 100644 --- a/includes/civicrm.shortcodes.php +++ b/includes/civicrm.shortcodes.php @@ -303,37 +303,61 @@ class CiviCRM_For_WordPress_Shortcodes { return '<p>' . __('Do not know how to handle this shortcode.', 'civicrm') . '</p>'; } - // invoke() requires environment variables to be set. - foreach ($args as $key => $value) { - if ($value !== NULL) { - set_query_var($key, $value); - $_REQUEST[$key] = $_GET[$key] = $value; + // If the shortcode has a path (`q`), fetch content by invoking the civicrm route + if (!empty($args['q'])) { + // invoke() requires environment variables to be set. + foreach ($args as $key => $value) { + if ($value !== NULL) { + set_query_var($key, $value); + $_REQUEST[$key] = $_GET[$key] = $value; + } } - } - // Kick out if not CiviCRM. - if (!$this->civi->initialize()) { - return ''; - } + // Kick out if not CiviCRM. + if (!$this->civi->initialize()) { + return ''; + } - // Check permission. - $argdata = $this->civi->get_request_args(); - if (!$this->civi->users->check_permission($argdata['args'])) { - return $this->civi->users->get_permission_denied();; - } + // Check permission. + $argdata = $this->civi->get_request_args(); + if (!$this->civi->users->check_permission($argdata['args'])) { + return $this->civi->users->get_permission_denied();; + } - // CMW: why do we need this? Nothing that follows uses it. - require_once ABSPATH . WPINC . '/pluggable.php'; + // CMW: why do we need this? Nothing that follows uses it. + require_once ABSPATH . WPINC . '/pluggable.php'; - // Start buffering. - ob_start(); - // Now, instead of echoing, shortcode output ends up in buffer. - $this->civi->invoke(); - // Save the output and flush the buffer. - $content = ob_get_clean(); + // Start buffering. + ob_start(); + // Now, instead of echoing, shortcode output ends up in buffer. + $this->civi->invoke(); + // Save the output and flush the buffer. + $content = ob_get_clean(); + } + // If there is no path, rely on civicrm_shortcode_get_markup to provide the markup. + else { + $content = '<p>' . __('Do not know how to handle this shortcode.', 'civicrm') . '</p>'; + /** + * Get the markup for "pathless" Shortcodes. + * + * This filter allows plugins or CiviCRM Extensions to modify the markup used + * to display a shortcode that has no CiviCRM route/path. This may be: + * + * * Accidental due to an improperly constructed shortcode or + * * Deliberate because a component may not require a route/path + * + * @since 5.37 + * + * @param str $markup The default markup for an improperly constructed shortcode. + * @param array $atts The shortcode attributes array. + * @param array $args The shortcode arguments array. + * @param str Context flag - value is either 'single' or 'multiple'. + * @return str The modified shortcode markup. + */ + $content = apply_filters('civicrm_shortcode_get_markup', $content, $atts, $args, 'single'); + } return $content; - } /** @@ -359,6 +383,12 @@ class CiviCRM_For_WordPress_Shortcodes { return '<p>' . __('Do not know how to handle this shortcode.', 'civicrm') . '</p>'; } + // Get pathless markup from filter callback + if (empty($args['q'])) { + $markup = '<p>' . __('Do not know how to handle this shortcode.', 'civicrm') . '</p>'; + return apply_filters('civicrm_shortcode_get_markup', $markup, $atts, $args, 'multiple'); + } + // Get data for this shortcode. $data = $this->get_data($atts, $args); @@ -814,11 +844,6 @@ class CiviCRM_For_WordPress_Shortcodes { */ $args = apply_filters('civicrm_shortcode_preprocess_atts', $args, $shortcode_atts); - // Sanity check for path - if (!isset($args['q'])) { - return FALSE; - } - return $args; } diff --git a/includes/civicrm.users.php b/includes/civicrm.users.php index 6c7b9fee82..e4ee2f7542 100644 --- a/includes/civicrm.users.php +++ b/includes/civicrm.users.php @@ -124,6 +124,33 @@ class CiviCRM_For_WordPress_Users { } + /** + * Check a CiviCRM permission. + * + * @since 5.35 + * + * @param str $permission The permission string. + * @return bool $permitted True if allowed, false otherwise. + */ + public function check_civicrm_permission($permission) { + + // Always deny if CiviCRM is not initialised. + if (!$this->civi->initialize()) { + return FALSE; + } + + // Deny by default. + $permitted = FALSE; + + // Check CiviCRM permissions. + if (CRM_Core_Permission::check($permission)) { + $permitted = TRUE; + } + + return $permitted; + + } + /** * Get "permission denied" text. * diff --git a/tests/phpunit/CiviWP/HookTest.php b/tests/phpunit/CiviWP/HookTest.php index 4986f08bbd..bffafe50ed 100644 --- a/tests/phpunit/CiviWP/HookTest.php +++ b/tests/phpunit/CiviWP/HookTest.php @@ -11,7 +11,7 @@ namespace CiviWP { */ class HookTest extends \PHPUnit\Framework\TestCase implements EndToEndInterface { - public function testFoo() { + public function testFoo(): void { add_action('civicrm_fakeAlterableHook', 'onFakeAlterableHook', 10, 2); $arg1 = 'hello'; diff --git a/tests/phpunit/CiviWP/PhpVersionTest.php b/tests/phpunit/CiviWP/PhpVersionTest.php index dd5289ba2b..8fb997c376 100644 --- a/tests/phpunit/CiviWP/PhpVersionTest.php +++ b/tests/phpunit/CiviWP/PhpVersionTest.php @@ -12,7 +12,7 @@ class PhpVersionTest extends \PHPUnit\Framework\TestCase implements EndToEndInte * * The literal value should be duplicated in the define() to prevent dependency issues. */ - public function testConstantMatch() { + public function testConstantMatch(): void { $constantFile = $this->getModulePath() . '/civicrm.php'; $this->assertFileExists($constantFile); $content = file_get_contents($constantFile); diff --git a/tests/phpunit/bootstrap.php b/tests/phpunit/bootstrap.php index 111952c00e..7b357ffb46 100644 --- a/tests/phpunit/bootstrap.php +++ b/tests/phpunit/bootstrap.php @@ -4,7 +4,6 @@ define('CIVICRM_CONTAINER_CACHE', 'never'); ini_set('memory_limit', '2G'); -ini_set('safe_mode', 0); // phpcs:disable eval(cv('php:boot', 'phpcode')); // phpcs:enable @@ -22,11 +21,11 @@ assert("CIVICRM_UF === 'WordPress'"); * @throws \RuntimeException * If the command terminates abnormally. */ -function cv($cmd, $decode = 'json') { +function cv(string $cmd, $decode = 'json'): string { $cmd = 'cv ' . $cmd; - $descriptorSpec = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => STDERR); + $descriptorSpec = [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => STDERR]; $oldOutput = getenv('CV_OUTPUT'); - putenv("CV_OUTPUT=json"); + putenv('CV_OUTPUT=json'); $process = proc_open($cmd, $descriptorSpec, $pipes, __DIR__); putenv("CV_OUTPUT=$oldOutput"); fclose($pipes[0]); @@ -41,7 +40,7 @@ function cv($cmd, $decode = 'json') { case 'phpcode': // If the last output is /*PHPCODE*/, then we managed to complete execution. - if (substr(trim($result), 0, 12) !== "/*BEGINPHP*/" || substr(trim($result), -10) !== "/*ENDPHP*/") { + if (substr(trim($result), 0, 12) !== '/*BEGINPHP*/' || substr(trim($result), -10) !== '/*ENDPHP*/') { throw new \RuntimeException("Command failed ($cmd):\n$result"); } return $result; -- GitLab