From 8fccc8a2b539c0c020030c15201e5e5dbe2e9d74 Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Mon, 8 Feb 2021 21:00:59 +1100 Subject: [PATCH 01/20] Expose mapping search task to Search Kit Fix OSM Javascript to work on Search Kit display --- CRM/Contact/Form/Task.php | 2 +- CRM/Contact/Task.php | 2 ++ .../CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl | 11 ++++++----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CRM/Contact/Form/Task.php b/CRM/Contact/Form/Task.php index 6dd27e02479e..67b7f2be125f 100644 --- a/CRM/Contact/Form/Task.php +++ b/CRM/Contact/Form/Task.php @@ -86,7 +86,7 @@ public static function preProcessCommon(&$form) { $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/CRM/Contact/Task.php b/CRM/Contact/Task.php index 4c3ac29c81c0..3597e319c991 100644 --- a/CRM/Contact/Task.php +++ b/CRM/Contact/Task.php @@ -228,6 +228,8 @@ public static function tasks() { 'title' => ts('Map contacts'), 'class' => 'CRM_Contact_Form_Task_Map', 'result' => FALSE, + 'url' => 'civicrm/contact/map', + 'icon' => 'fa-map', ); } diff --git a/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl b/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl index 6fd10e2c9734..d2fed321438d 100644 --- a/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl +++ b/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; From 53480c545c05ed4d9fb251674fc7a8a3b2069909 Mon Sep 17 00:00:00 2001 From: eileen Date: Fri, 26 Mar 2021 13:46:53 +1300 Subject: [PATCH 02/20] [REF] [Towards membership api] more consistent handling on amount This also moves template assignments to the email function --- CRM/Member/Form/Membership.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/CRM/Member/Form/Membership.php b/CRM/Member/Form/Membership.php index 31bcac4792c6..b877b720ea53 100644 --- a/CRM/Member/Form/Membership.php +++ b/CRM/Member/Form/Membership.php @@ -1155,7 +1155,7 @@ public function submit(): void { } $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; @@ -1225,7 +1225,7 @@ public function submit(): void { if ($softParams) { $softParams['contribution_id'] = $contribution->id; $softParams['currency'] = $this->getCurrency(); - $softParams['amount'] = $contribution->total_amount; + $softParams['amount'] = $this->order->getTotalAmount(); CRM_Contribute_BAO_ContributionSoft::add($softParams); } @@ -1238,14 +1238,12 @@ public function submit(): void { } $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'])) { @@ -1405,9 +1403,6 @@ public function submit(): void { } } - $this->assign('totalTaxAmount', $this->order->getTotalTaxAmount()); - // 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); } } @@ -1672,10 +1667,14 @@ protected function isUpdateToExistingRecurringMembership() { * * @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 From 633d512254424bba7c2195da8c62a9d3ff43d1e4 Mon Sep 17 00:00:00 2001 From: Mathieu Lutfy Date: Mon, 16 Nov 2020 16:25:30 -0500 Subject: [PATCH 03/20] dev/wordpress#82 Add support for creating WordPress accounts from the contact record Also removes the possibility to set a user-defined password for WordPress users. --- CRM/Contact/Form/Task/Useradd.php | 14 +++++--- CRM/Utils/System/WordPress.php | 57 ++++++++++++++++++++++++++++--- 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/CRM/Contact/Form/Task/Useradd.php b/CRM/Contact/Form/Task/Useradd.php index 385405c6a2e1..d75239adac34 100644 --- a/CRM/Contact/Form/Task/Useradd.php +++ b/CRM/Contact/Form/Task/Useradd.php @@ -64,14 +64,20 @@ public function setDefaultValues() { * 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/CRM/Utils/System/WordPress.php b/CRM/Utils/System/WordPress.php index 2877ffed2ad9..b6311c89dbaa 100644 --- a/CRM/Utils/System/WordPress.php +++ b/CRM/Utils/System/WordPress.php @@ -765,7 +765,6 @@ public function cmsRootPath() { 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'], @@ -783,15 +782,22 @@ public function createUser(&$params, $mail) { } } + $this->hooks_core_remove(); $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); - wp_new_user_notification($uid, $user_data['user_pass']); + // 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')) { + wp_signon($creds, FALSE); + } + + do_action('register_new_user', $uid); + $this->hooks_core_add(); + return $uid; } @@ -870,7 +876,7 @@ public function isUserRegistrationPermitted() { * @inheritDoc */ public function isPasswordUserGenerated() { - return TRUE; + return FALSE; } /** @@ -990,6 +996,13 @@ public function alterAssetUrl(\Civi\Core\Event\GenericHookEvent $e) { } } + /** + * @inheritDoc + */ + public function checkPermissionAddUser() { + return current_user_can('create_users'); + } + /** * @inheritDoc */ @@ -1252,4 +1265,38 @@ public function getCMSPermissionsUrlParams() { 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']); + } + } From 9e582c5fc762bcf6c1742558f9294be7c2a52146 Mon Sep 17 00:00:00 2001 From: eileen Date: Fri, 26 Mar 2021 16:23:25 +1300 Subject: [PATCH 04/20] [REF] Extract getMembershipTypeValues --- CRM/Member/Form/Membership.php | 83 +++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/CRM/Member/Form/Membership.php b/CRM/Member/Form/Membership.php index b3f6b63bf33c..0214b6b0280c 100644 --- a/CRM/Member/Form/Membership.php +++ b/CRM/Member/Form/Membership.php @@ -991,7 +991,7 @@ public function submit(): void { $this->storeContactFields($this->_params); $this->beginPostProcess(); $endDate = NULL; - $membership = $calcDate = []; + $membership = []; $params = $softParams = $ids = []; @@ -1014,15 +1014,9 @@ public function submit(): void { $formValues ); $formValues['financial_type_id'] = $this->getFinancialTypeID(); - $membershipTypeValues = []; - foreach ($this->_memTypeSelected as $memType) { - $membershipTypeValues[$memType]['membership_type_id'] = $memType; - } $isQuickConfig = $this->_priceSet['is_quick_config']; - $termsByType = []; - $lineItem = [$this->order->getPriceSetID() => $this->order->getLineItems()]; $params['tax_amount'] = $this->order->getTotalTaxAmount(); @@ -1031,36 +1025,7 @@ public function submit(): void { $params = array_merge($params, $this->getFormMembershipParams()); - $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; - } - } + $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()); @@ -1894,4 +1859,48 @@ 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; + } + } From fc2e1993cc0577b831537c77795cdd6fdcffba3d Mon Sep 17 00:00:00 2001 From: Samuel Vanhove Date: Mon, 29 Mar 2021 12:06:07 -0400 Subject: [PATCH 05/20] dev/core#527 use public title for on behalf profile and confirm/thank you pages --- CRM/Contribute/BAO/ContributionPage.php | 2 +- CRM/Event/BAO/Event.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CRM/Contribute/BAO/ContributionPage.php b/CRM/Contribute/BAO/ContributionPage.php index 271d0e70a88e..9ce2481d5f77 100644 --- a/CRM/Contribute/BAO/ContributionPage.php +++ b/CRM/Contribute/BAO/ContributionPage.php @@ -483,7 +483,7 @@ protected static function getProfileNameAndFields($gid, $cid, $params, $fieldTyp $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 = !empty($v['groupDisplayTitle']) ? $v['groupDisplayTitle'] : $v['groupTitle']; } // suppress all file fields from display and formatting fields if ( diff --git a/CRM/Event/BAO/Event.php b/CRM/Event/BAO/Event.php index 015b2e96609c..0eb730187d6a 100644 --- a/CRM/Event/BAO/Event.php +++ b/CRM/Event/BAO/Event.php @@ -1320,7 +1320,7 @@ public static function buildCustomDisplay( $groupTitle = NULL; foreach ($fields as $k => $v) { if (!$groupTitle) { - $groupTitle = $v['groupTitle']; + $groupTitle = !empty($v['groupDisplayTitle']) ? $v['groupDisplayTitle'] : $v['groupTitle']; } // suppress all file fields from display if ( From 7652b05f4dba6b8b9ed46ebeb64000e31e83ae5e Mon Sep 17 00:00:00 2001 From: demeritcowboy Date: Mon, 29 Mar 2021 13:54:24 -0400 Subject: [PATCH 06/20] trigger an error if non-numeric --- CRM/Utils/Money.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CRM/Utils/Money.php b/CRM/Utils/Money.php index acf785d20115..e81330950b2a 100644 --- a/CRM/Utils/Money.php +++ b/CRM/Utils/Money.php @@ -192,7 +192,12 @@ protected static function formatUSLocaleNumericRounded($amount, int $numberOfPla 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 - self::missingIntlNotice(); + 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::HALF_UP); From e908d4ab1ad4cbecd768b4f27ad522c5adc83932 Mon Sep 17 00:00:00 2001 From: eileen Date: Wed, 31 Mar 2021 13:17:58 +1300 Subject: [PATCH 07/20] [REF] Minor cleanup Makes typing a bit stricter, uses preferred strpos function --- CRM/Dedupe/Merger.php | 14 +++++++------- api/v3/Contact.php | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CRM/Dedupe/Merger.php b/CRM/Dedupe/Merger.php index 59bc053582bd..13beca29c6eb 100644 --- a/CRM/Dedupe/Merger.php +++ b/CRM/Dedupe/Merger.php @@ -657,7 +657,7 @@ protected static function createContact($contactID, $params) { // 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); } @@ -1021,7 +1021,7 @@ public static function merge($dupePairs = [], $cacheParams = [], $mode = 'safe', */ 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. @@ -1236,7 +1236,7 @@ public static function getRowsElementsAndInfo($mainId, $otherId, $checkPermissio $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 @@ -1454,7 +1454,7 @@ public static function moveAllBelongings($mainId, $otherId, $migrationInfo, $che $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 @@ -2119,7 +2119,7 @@ protected static function getCustomFieldMetadata($contactType) { * @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. @@ -2138,8 +2138,8 @@ public static function getConflicts(&$migrationInfo, $mainId, $otherId, $mode) { 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/api/v3/Contact.php b/api/v3/Contact.php index 8217b646d1a2..2b82060958b8 100644 --- a/api/v3/Contact.php +++ b/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 ); } From a9ade36d2f1346d96dc43a5e6de7aa3c4e1ce1ee Mon Sep 17 00:00:00 2001 From: eileen Date: Wed, 31 Mar 2021 14:28:11 +1300 Subject: [PATCH 08/20] dev/core#2498 Fix regression on saving dedupe rules --- CRM/Contact/Form/DedupeRules.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CRM/Contact/Form/DedupeRules.php b/CRM/Contact/Form/DedupeRules.php index c99ea8195e6f..1d6d2eb50771 100644 --- a/CRM/Contact/Form/DedupeRules.php +++ b/CRM/Contact/Form/DedupeRules.php @@ -140,11 +140,11 @@ public static function formRule($fields, $files, $self) { for ($count = 0; $count < self::RULES_COUNT; $count++) { if (!empty($fields["where_$count"]) || (isset($self->_defaults['is_reserved']) && !empty($self->_defaults["where_$count"]))) { $fieldSelected = TRUE; + if (!empty($fields["weight_$count"])) { + $actualThreshold += $fields["weight_$count"]; + } break; } - if (!empty($self->_defaults["weight_$count"])) { - $actualThreshold += $self->_defaults["weight_$count"]; - } } if (empty($fields['threshold'])) { // CRM-20607 - Don't validate the threshold of hard-coded rules From c64b189c834f7992ef8fcec096e56765e3316bcb Mon Sep 17 00:00:00 2001 From: Pradeep Nayak Date: Wed, 31 Mar 2021 02:16:23 +0100 Subject: [PATCH 09/20] Donot over-ride total amount incase contribution has more than one line item --- CRM/Price/BAO/LineItem.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CRM/Price/BAO/LineItem.php b/CRM/Price/BAO/LineItem.php index dfaf89f0639d..0f0b3815ca9c 100644 --- a/CRM/Price/BAO/LineItem.php +++ b/CRM/Price/BAO/LineItem.php @@ -529,7 +529,7 @@ public static function getLineItemArray(&$params, $entityId = NULL, $entityTable $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']; } From df43ca0112ff509032514c788f707d2b24cd1f68 Mon Sep 17 00:00:00 2001 From: Pradeep Nayak Date: Wed, 31 Mar 2021 02:55:37 +0100 Subject: [PATCH 10/20] Adding test to support fix --- .../CRM/Contribute/BAO/ContributionTest.php | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php b/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php index 9e05b4684e51..65611892fcf7 100644 --- a/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php +++ b/tests/phpunit/CRM/Contribute/BAO/ContributionTest.php @@ -1688,4 +1688,136 @@ public function testCancelOrderWithPledge(): void { $this->assertCount(0, $payments); } + /** + * Test contribution update when more than one quick + * config line item is linked to contribution. + * + * @throws CRM_Core_Exception + * @throws \CiviCRM_API3_Exception + * @throws \API_Exception + */ + public function testContributionQuickConfigTwoLineItems(): void { + $contactId1 = $this->individualCreate(); + $contactId2 = $this->individualCreate(); + $membershipOrganizationId = $this->organizationCreate(); + + // Created new contribution to bypass the deprecated error + // 'Per https://lab.civicrm.org/dev/core/issues/15 this data fix should not be required.' + // in CRM_Price_BAO_LineItem::processPriceSet(); + $this->callAPISuccess('Contribution', 'create', [ + 'contact_id' => $contactId1, + 'receive_date' => '2010-01-20', + 'financial_type_id' => 'Member Dues', + 'contribution_status_id' => 'Completed', + 'total_amount' => 150, + ]); + $this->callAPISuccess('Contribution', 'create', [ + 'contact_id' => $contactId1, + 'receive_date' => '2010-01-20', + 'financial_type_id' => 'Member Dues', + 'contribution_status_id' => 'Completed', + 'total_amount' => 150, + ]); + + // create membership type + $membershipTypeId1 = $this->callAPISuccess('MembershipType', 'create', [ + 'domain_id' => 1, + 'member_of_contact_id' => $membershipOrganizationId, + 'financial_type_id' => 'Member Dues', + 'duration_unit' => 'month', + 'duration_interval' => 1, + 'period_type' => 'rolling', + 'minimum_fee' => 100, + 'name' => 'Parent', + ])['id']; + + $membershipTypeId2 = $this->callAPISuccess('MembershipType', 'create', [ + 'domain_id' => 1, + 'member_of_contact_id' => $membershipOrganizationId, + 'financial_type_id' => 'Member Dues', + 'duration_unit' => 'month', + 'duration_interval' => 1, + 'period_type' => 'rolling', + 'minimum_fee' => 50, + 'name' => 'Child', + ])['id']; + + $contactIds = [ + $contactId1 => $membershipTypeId1, + $contactId2 => $membershipTypeId2, + ]; + + $priceFields = CRM_Price_BAO_PriceSet::getDefaultPriceSet('membership'); + + // prepare order api params. + $p = [ + 'contact_id' => $contactId1, + 'receive_date' => '2010-01-20', + 'financial_type_id' => 'Member Dues', + 'contribution_status_id' => 'Pending', + 'total_amount' => 150, + 'api.Payment.create' => ['total_amount' => 150], + ]; + + $now = date('Ymd'); + foreach ($priceFields as $priceField) { + $lineItems = []; + $contactId = array_search($priceField['membership_type_id'], $contactIds); + $lineItems[1] = [ + 'price_field_id' => $priceField['priceFieldID'], + 'price_field_value_id' => $priceField['priceFieldValueID'], + 'label' => $priceField['label'], + 'field_title' => $priceField['label'], + 'qty' => 1, + 'unit_price' => $priceField['amount'], + 'line_total' => $priceField['amount'], + 'financial_type_id' => $priceField['financial_type_id'], + 'entity_table' => 'civicrm_membership', + 'membership_type_id' => $priceField['membership_type_id'], + ]; + $p['line_items'][] = [ + 'line_item' => $lineItems, + 'params' => [ + 'contact_id' => $contactId, + 'membership_type_id' => $priceField['membership_type_id'], + 'source' => 'Payment', + 'join_date' => '2020-04-28', + 'start_date' => '2020-04-28', + 'status_id' => 'Pending', + 'is_override' => 1, + ], + ]; + } + $order = $this->callAPISuccess('order', 'create', $p); + $contributionId = $order['id']; + + $count = CRM_Core_DAO::singleValueQuery(' + SELECT count(*), total_amount + FROM civicrm_contribution cc + INNER JOIN civicrm_line_item cli + ON cli.contribution_id = cc.id + AND cc.id = %1 + GROUP BY cc.id, total_amount + HAVING SUM(cli.line_total) != total_amount + ', [1 => [$contributionId, 'Integer']]); + + $this->assertEquals(0, $count); + + $this->callAPISuccess('Contribution', 'create', [ + 'id' => $contributionId, + 'total_amount' => 150, + ]); + $count = CRM_Core_DAO::singleValueQuery(' + SELECT count(*), total_amount + FROM civicrm_contribution cc + INNER JOIN civicrm_line_item cli + ON cli.contribution_id = cc.id + AND cc.id = %1 + GROUP BY cc.id, total_amount + HAVING SUM(cli.line_total) != total_amount + ', [1 => [$contributionId, 'Integer']]); + + $this->assertEquals(0, $count); + } + } From a5e9dbe9b141a4e409f1fe70ff089d41783ff451 Mon Sep 17 00:00:00 2001 From: eileen Date: Wed, 31 Mar 2021 16:47:13 +1300 Subject: [PATCH 11/20] [REF] Move function from static class to OO class Part of using the mergeHandler to (slowly) make code more readable. changes from self::mergeLocations(); to mergeHandler->mergeLocations() --- CRM/Dedupe/MergeHandler.php | 109 +++++++++++++++++++++++++++++++++++ CRM/Dedupe/Merger.php | 110 +----------------------------------- 2 files changed, 110 insertions(+), 109 deletions(-) diff --git a/CRM/Dedupe/MergeHandler.php b/CRM/Dedupe/MergeHandler.php index cb0d64ebacdc..7d8ad7ca2f6c 100644 --- a/CRM/Dedupe/MergeHandler.php +++ b/CRM/Dedupe/MergeHandler.php @@ -359,4 +359,113 @@ protected function getSelectedType($entity, $blockIndex) { 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 { + $mergeHandler = $this; + $locBlocks = $mergeHandler->getLocationBlocksToMerge(); + $blocksDAO = []; + $migrationInfo = $mergeHandler->getMigrationInfo(); + + // @todo Handle OpenID (not currently in API). + if (!empty($locBlocks)) { + $locationBlocks = CRM_Dedupe_Merger::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(); + } + } + } + } + } diff --git a/CRM/Dedupe/Merger.php b/CRM/Dedupe/Merger.php index 59bc053582bd..52a1c1de64fc 100644 --- a/CRM/Dedupe/Merger.php +++ b/CRM/Dedupe/Merger.php @@ -1401,7 +1401,7 @@ public static function moveAllBelongings($mainId, $otherId, $migrationInfo, $che } $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 @@ -1770,114 +1770,6 @@ public static function getMergeContactDetails($contact_id) { 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. * From 31c5844fc2b0afde917008d98193fcc36bd5b23d Mon Sep 17 00:00:00 2001 From: "B. Endres" Date: Wed, 31 Mar 2021 08:59:49 +0200 Subject: [PATCH 12/20] extending the @wannesderoy patch from https://github.com/civicrm/civicrm-core/pull/18920 --- CRM/Export/BAO/ExportProcessor.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CRM/Export/BAO/ExportProcessor.php b/CRM/Export/BAO/ExportProcessor.php index c3b0dd24bf6c..067a2ee3876c 100644 --- a/CRM/Export/BAO/ExportProcessor.php +++ b/CRM/Export/BAO/ExportProcessor.php @@ -1454,12 +1454,16 @@ public function getSqlColumnDefinition($fieldName, $columnName) { if ($type) { switch ($type) { case CRM_Utils_Type::T_INT: - case CRM_Utils_Type::T_BOOLEAN: if (in_array(CRM_Utils_Array::value('data_type', $fieldSpec), ['Country', 'StateProvince', 'ContactReference'])) { return "`$fieldName` varchar(255)"; } return "`$fieldName` varchar(16)"; + case CRM_Utils_Type::T_BOOLEAN: + // 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'])) { return "`$fieldName` varchar({$fieldSpec['maxlength']})"; From df7cc147e27fa8e54f1d173e378c3369f3ab21cc Mon Sep 17 00:00:00 2001 From: "B. Endres" Date: Wed, 31 Mar 2021 08:59:58 +0200 Subject: [PATCH 13/20] adjusting unit tests --- tests/phpunit/CRM/Export/BAO/ExportTest.php | 66 ++++++++++----------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/tests/phpunit/CRM/Export/BAO/ExportTest.php b/tests/phpunit/CRM/Export/BAO/ExportTest.php index 9bc95db1d9cf..6e17d56bae28 100644 --- a/tests/phpunit/CRM/Export/BAO/ExportTest.php +++ b/tests/phpunit/CRM/Export/BAO/ExportTest.php @@ -1984,7 +1984,7 @@ public function getAllSpecifiableParticipantReturnColumns(): array { 'participant_fee_currency' => '`participant_fee_currency` varchar(3)', 'fee_label' => '`fee_label` varchar(255)', 'participant_fee_level' => '`participant_fee_level` longtext', - 'participant_is_pay_later' => '`participant_is_pay_later` varchar(16)', + 'participant_is_pay_later' => '`participant_is_pay_later` varchar(64)', 'participant_id' => '`participant_id` varchar(16)', 'participant_note' => '`participant_note` longtext', 'participant_role_id' => '`participant_role_id` varchar(128)', @@ -1994,7 +1994,7 @@ public function getAllSpecifiableParticipantReturnColumns(): array { 'participant_status' => '`participant_status` varchar(255)', 'participant_register_date' => '`participant_register_date` varchar(32)', 'participant_registered_by_id' => '`participant_registered_by_id` varchar(16)', - 'participant_is_test' => '`participant_is_test` varchar(16)', + 'participant_is_test' => '`participant_is_test` varchar(64)', 'componentpaymentfield_total_amount' => '`componentpaymentfield_total_amount` varchar(32)', 'componentpaymentfield_transaction_id' => '`componentpaymentfield_transaction_id` varchar(255)', 'transferred_to_contact_id' => '`transferred_to_contact_id` varchar(16)', @@ -2540,12 +2540,12 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'civicrm_primary_id' => '`civicrm_primary_id` varchar(16)', 'contact_type' => '`contact_type` varchar(64)', 'contact_sub_type' => '`contact_sub_type` varchar(255)', - 'do_not_email' => '`do_not_email` varchar(16)', - 'do_not_phone' => '`do_not_phone` varchar(16)', - 'do_not_mail' => '`do_not_mail` varchar(16)', - 'do_not_sms' => '`do_not_sms` varchar(16)', - 'do_not_trade' => '`do_not_trade` varchar(16)', - 'is_opt_out' => '`is_opt_out` varchar(16)', + 'do_not_email' => '`do_not_email` varchar(64)', + 'do_not_phone' => '`do_not_phone` varchar(64)', + 'do_not_mail' => '`do_not_mail` varchar(64)', + 'do_not_sms' => '`do_not_sms` varchar(64)', + 'do_not_trade' => '`do_not_trade` varchar(64)', + 'is_opt_out' => '`is_opt_out` varchar(64)', 'legal_identifier' => '`legal_identifier` varchar(32)', 'external_identifier' => '`external_identifier` varchar(64)', 'sort_name' => '`sort_name` varchar(128)', @@ -2571,14 +2571,14 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'job_title' => '`job_title` varchar(255)', 'gender_id' => '`gender_id` varchar(255)', 'birth_date' => '`birth_date` varchar(32)', - 'is_deceased' => '`is_deceased` varchar(16)', + 'is_deceased' => '`is_deceased` varchar(64)', 'deceased_date' => '`deceased_date` varchar(32)', 'household_name' => '`household_name` varchar(128)', 'organization_name' => '`organization_name` varchar(128)', 'sic_code' => '`sic_code` varchar(8)', 'user_unique_id' => '`user_unique_id` varchar(255)', 'current_employer_id' => '`current_employer_id` varchar(16)', - 'contact_is_deleted' => '`contact_is_deleted` varchar(16)', + 'contact_is_deleted' => '`contact_is_deleted` varchar(64)', 'created_date' => '`created_date` varchar(32)', 'modified_date' => '`modified_date` varchar(32)', 'addressee' => '`addressee` varchar(255)', @@ -2610,8 +2610,8 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'phone_ext' => '`phone_ext` varchar(16)', 'phone_type_id' => '`phone_type_id` varchar(16)', 'email' => '`email` varchar(254)', - 'on_hold' => '`on_hold` varchar(16)', - 'is_bulkmail' => '`is_bulkmail` varchar(16)', + 'on_hold' => '`on_hold` varchar(64)', + 'is_bulkmail' => '`is_bulkmail` varchar(64)', 'signature_text' => '`signature_text` longtext', 'signature_html' => '`signature_html` longtext', 'im_provider' => '`im_provider` varchar(255)', @@ -2647,14 +2647,14 @@ protected function getCaseSqlColumns(): array { 'case_activity_duration' => '`case_activity_duration` varchar(16)', 'case_activity_medium_id' => '`case_activity_medium_id` varchar(16)', 'case_activity_details' => '`case_activity_details` longtext', - 'case_activity_is_auto' => '`case_activity_is_auto` varchar(16)', + 'case_activity_is_auto' => '`case_activity_is_auto` varchar(64)', 'contact_id' => '`contact_id` varchar(16)', 'case_id' => '`case_id` varchar(16)', 'case_activity_subject' => '`case_activity_subject` varchar(255)', 'case_status' => '`case_status` text', 'case_type' => '`case_type` text', 'case_role' => '`case_role` text', - 'case_deleted' => '`case_deleted` varchar(16)', + 'case_deleted' => '`case_deleted` varchar(64)', 'case_activity_date_time' => '`case_activity_date_time` varchar(32)', 'case_activity_type' => '`case_activity_type` varchar(255)', ]; @@ -2679,7 +2679,7 @@ protected function getActivitySqlColumns(): array { 'activity_priority' => '`activity_priority` varchar(255)', 'source_contact' => '`source_contact` varchar(255)', 'source_record_id' => '`source_record_id` varchar(255)', - 'activity_is_test' => '`activity_is_test` varchar(16)', + 'activity_is_test' => '`activity_is_test` varchar(64)', 'activity_campaign_id' => '`activity_campaign_id` varchar(16)', 'result' => '`result` text', 'activity_engagement_level' => '`activity_engagement_level` varchar(16)', @@ -2708,8 +2708,8 @@ protected function getParticipantSqlColumns(): array { 'participant_register_date' => '`participant_register_date` varchar(32)', 'participant_source' => '`participant_source` varchar(128)', 'participant_fee_level' => '`participant_fee_level` longtext', - 'participant_is_test' => '`participant_is_test` varchar(16)', - 'participant_is_pay_later' => '`participant_is_pay_later` varchar(16)', + 'participant_is_test' => '`participant_is_test` varchar(64)', + 'participant_is_pay_later' => '`participant_is_pay_later` varchar(64)', 'participant_fee_amount' => '`participant_fee_amount` varchar(32)', 'participant_discount_name' => '`participant_discount_name` varchar(16)', 'participant_fee_currency' => '`participant_fee_currency` varchar(3)', @@ -2728,12 +2728,12 @@ public function getContributionSqlColumns(): array { 'civicrm_primary_id' => '`civicrm_primary_id` varchar(16)', 'contact_type' => '`contact_type` varchar(64)', 'contact_sub_type' => '`contact_sub_type` varchar(255)', - 'do_not_email' => '`do_not_email` varchar(16)', - 'do_not_phone' => '`do_not_phone` varchar(16)', - 'do_not_mail' => '`do_not_mail` varchar(16)', - 'do_not_sms' => '`do_not_sms` varchar(16)', - 'do_not_trade' => '`do_not_trade` varchar(16)', - 'is_opt_out' => '`is_opt_out` varchar(16)', + 'do_not_email' => '`do_not_email` varchar(64)', + 'do_not_phone' => '`do_not_phone` varchar(64)', + 'do_not_mail' => '`do_not_mail` varchar(64)', + 'do_not_sms' => '`do_not_sms` varchar(64)', + 'do_not_trade' => '`do_not_trade` varchar(64)', + 'is_opt_out' => '`is_opt_out` varchar(64)', 'legal_identifier' => '`legal_identifier` varchar(32)', 'external_identifier' => '`external_identifier` varchar(64)', 'sort_name' => '`sort_name` varchar(128)', @@ -2759,14 +2759,14 @@ public function getContributionSqlColumns(): array { 'job_title' => '`job_title` varchar(255)', 'gender_id' => '`gender_id` varchar(255)', 'birth_date' => '`birth_date` varchar(32)', - 'is_deceased' => '`is_deceased` varchar(16)', + 'is_deceased' => '`is_deceased` varchar(64)', 'deceased_date' => '`deceased_date` varchar(32)', 'household_name' => '`household_name` varchar(128)', 'organization_name' => '`organization_name` varchar(128)', 'sic_code' => '`sic_code` varchar(8)', 'user_unique_id' => '`user_unique_id` varchar(255)', 'current_employer_id' => '`current_employer_id` varchar(16)', - 'contact_is_deleted' => '`contact_is_deleted` varchar(16)', + 'contact_is_deleted' => '`contact_is_deleted` varchar(64)', 'created_date' => '`created_date` varchar(32)', 'modified_date' => '`modified_date` varchar(32)', 'addressee' => '`addressee` varchar(255)', @@ -2795,8 +2795,8 @@ public function getContributionSqlColumns(): array { 'phone' => '`phone` varchar(32)', 'phone_ext' => '`phone_ext` varchar(16)', 'email' => '`email` varchar(254)', - 'on_hold' => '`on_hold` varchar(16)', - 'is_bulkmail' => '`is_bulkmail` varchar(16)', + 'on_hold' => '`on_hold` varchar(64)', + 'is_bulkmail' => '`is_bulkmail` varchar(64)', 'signature_text' => '`signature_text` longtext', 'signature_html' => '`signature_html` longtext', 'im_provider' => '`im_provider` varchar(255)', @@ -2824,8 +2824,8 @@ public function getContributionSqlColumns(): array { 'currency' => '`currency` varchar(3)', 'cancel_reason' => '`cancel_reason` longtext', 'receipt_date' => '`receipt_date` varchar(32)', - 'is_test' => '`is_test` varchar(16)', - 'is_pay_later' => '`is_pay_later` varchar(16)', + 'is_test' => '`is_test` varchar(64)', + 'is_pay_later' => '`is_pay_later` varchar(64)', 'contribution_status' => '`contribution_status` varchar(255)', 'contribution_recur_id' => '`contribution_recur_id` varchar(16)', 'amount_level' => '`amount_level` longtext', @@ -2856,7 +2856,7 @@ public function getPledgeSqlColumns(): array { 'pledge_next_pay_date' => '`pledge_next_pay_date` text', 'pledge_next_pay_amount' => '`pledge_next_pay_amount` text', 'pledge_status' => '`pledge_status` varchar(255)', - 'pledge_is_test' => '`pledge_is_test` varchar(16)', + 'pledge_is_test' => '`pledge_is_test` varchar(64)', 'pledge_contribution_page_id' => '`pledge_contribution_page_id` varchar(16)', 'pledge_financial_type' => '`pledge_financial_type` text', 'pledge_frequency_interval' => '`pledge_frequency_interval` varchar(16)', @@ -2883,8 +2883,8 @@ public function getPledgeSqlColumns(): array { public function getMembershipSqlColumns(): array { return [ 'membership_type' => '`membership_type` varchar(128)', - 'member_is_test' => '`member_is_test` varchar(16)', - 'member_is_pay_later' => '`member_is_pay_later` varchar(16)', + 'member_is_test' => '`member_is_test` varchar(64)', + 'member_is_pay_later' => '`member_is_pay_later` varchar(64)', 'membership_join_date' => '`membership_join_date` varchar(32)', 'membership_start_date' => '`membership_start_date` varchar(32)', 'membership_end_date' => '`membership_end_date` varchar(32)', @@ -2895,7 +2895,7 @@ public function getMembershipSqlColumns(): array { 'max_related' => '`max_related` varchar(16)', 'membership_recur_id' => '`membership_recur_id` varchar(16)', 'member_campaign_id' => '`member_campaign_id` varchar(16)', - 'member_is_override' => '`member_is_override` varchar(16)', + 'member_is_override' => '`member_is_override` varchar(64)', ]; } From db43311c7f0b5fdd2b8879a09035149779435888 Mon Sep 17 00:00:00 2001 From: "B. Endres" Date: Wed, 31 Mar 2021 15:01:01 +0200 Subject: [PATCH 14/20] integers are affected as well --- CRM/Export/BAO/ExportProcessor.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CRM/Export/BAO/ExportProcessor.php b/CRM/Export/BAO/ExportProcessor.php index 067a2ee3876c..fff50a8dad1e 100644 --- a/CRM/Export/BAO/ExportProcessor.php +++ b/CRM/Export/BAO/ExportProcessor.php @@ -1454,12 +1454,10 @@ public function getSqlColumnDefinition($fieldName, $columnName) { if ($type) { switch ($type) { case CRM_Utils_Type::T_INT: + case CRM_Utils_Type::T_BOOLEAN: if (in_array(CRM_Utils_Array::value('data_type', $fieldSpec), ['Country', 'StateProvince', 'ContactReference'])) { return "`$fieldName` varchar(255)"; } - return "`$fieldName` varchar(16)"; - - case CRM_Utils_Type::T_BOOLEAN: // some of those will be exported as a (localisable) string // @see https://lab.civicrm.org/dev/core/-/issues/2164 return "`$fieldName` varchar(64)"; From 0f608ae7e15bed923412c7ae2be7a7a3d1e2cebe Mon Sep 17 00:00:00 2001 From: "B. Endres" Date: Wed, 31 Mar 2021 15:05:36 +0200 Subject: [PATCH 15/20] adjusting unit tests --- tests/phpunit/CRM/Export/BAO/ExportTest.php | 120 ++++++++++---------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/tests/phpunit/CRM/Export/BAO/ExportTest.php b/tests/phpunit/CRM/Export/BAO/ExportTest.php index 6e17d56bae28..2d9aabfc2a68 100644 --- a/tests/phpunit/CRM/Export/BAO/ExportTest.php +++ b/tests/phpunit/CRM/Export/BAO/ExportTest.php @@ -1014,7 +1014,7 @@ public function testExportAddressData(): void { } $this->assertEquals([ - 'contact_id' => '`contact_id` varchar(16)', + 'contact_id' => '`contact_id` varchar(64)', 'billing_city' => '`billing_city` varchar(64)', 'billing_street_address' => '`billing_street_address` varchar(96)', 'billing_postal_code' => '`billing_postal_code` varchar(64)', @@ -1968,14 +1968,14 @@ public function getAllSpecifiableReturnFields(): array { */ public function getAllSpecifiableParticipantReturnColumns(): array { return [ - 'participant_campaign_id' => '`participant_campaign_id` varchar(16)', - 'participant_contact_id' => '`participant_contact_id` varchar(16)', + 'participant_campaign_id' => '`participant_campaign_id` varchar(64)', + 'participant_contact_id' => '`participant_contact_id` varchar(64)', 'componentpaymentfield_contribution_status' => '`componentpaymentfield_contribution_status` varchar(255)', 'currency' => '`currency` varchar(3)', 'componentpaymentfield_received_date' => '`componentpaymentfield_received_date` varchar(32)', - 'default_role_id' => '`default_role_id` varchar(16)', + 'default_role_id' => '`default_role_id` varchar(64)', 'participant_discount_name' => '`participant_discount_name` varchar(16)', - 'event_id' => '`event_id` varchar(16)', + 'event_id' => '`event_id` varchar(64)', 'event_end_date' => '`event_end_date` varchar(32)', 'event_start_date' => '`event_start_date` varchar(32)', 'template_title' => '`template_title` varchar(255)', @@ -1985,19 +1985,19 @@ public function getAllSpecifiableParticipantReturnColumns(): array { 'fee_label' => '`fee_label` varchar(255)', 'participant_fee_level' => '`participant_fee_level` longtext', 'participant_is_pay_later' => '`participant_is_pay_later` varchar(64)', - 'participant_id' => '`participant_id` varchar(16)', + 'participant_id' => '`participant_id` varchar(64)', 'participant_note' => '`participant_note` longtext', 'participant_role_id' => '`participant_role_id` varchar(128)', 'participant_role' => '`participant_role` varchar(255)', 'participant_source' => '`participant_source` varchar(128)', - 'participant_status_id' => '`participant_status_id` varchar(16)', + 'participant_status_id' => '`participant_status_id` varchar(64)', 'participant_status' => '`participant_status` varchar(255)', 'participant_register_date' => '`participant_register_date` varchar(32)', - 'participant_registered_by_id' => '`participant_registered_by_id` varchar(16)', + 'participant_registered_by_id' => '`participant_registered_by_id` varchar(64)', 'participant_is_test' => '`participant_is_test` varchar(64)', 'componentpaymentfield_total_amount' => '`componentpaymentfield_total_amount` varchar(32)', 'componentpaymentfield_transaction_id' => '`componentpaymentfield_transaction_id` varchar(255)', - 'transferred_to_contact_id' => '`transferred_to_contact_id` varchar(16)', + 'transferred_to_contact_id' => '`transferred_to_contact_id` varchar(64)', ]; } @@ -2537,7 +2537,7 @@ protected function getPledgeHeaderDefinition(): array { */ protected function getBasicSqlColumnDefinition($isContactExport): array { $columns = [ - 'civicrm_primary_id' => '`civicrm_primary_id` varchar(16)', + 'civicrm_primary_id' => '`civicrm_primary_id` varchar(64)', 'contact_type' => '`contact_type` varchar(64)', 'contact_sub_type' => '`contact_sub_type` varchar(255)', 'do_not_email' => '`do_not_email` varchar(64)', @@ -2565,9 +2565,9 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'suffix_id' => '`suffix_id` varchar(255)', 'formal_title' => '`formal_title` varchar(64)', 'communication_style_id' => '`communication_style_id` varchar(255)', - 'email_greeting_id' => '`email_greeting_id` varchar(16)', - 'postal_greeting_id' => '`postal_greeting_id` varchar(16)', - 'addressee_id' => '`addressee_id` varchar(16)', + 'email_greeting_id' => '`email_greeting_id` varchar(64)', + 'postal_greeting_id' => '`postal_greeting_id` varchar(64)', + 'addressee_id' => '`addressee_id` varchar(64)', 'job_title' => '`job_title` varchar(255)', 'gender_id' => '`gender_id` varchar(255)', 'birth_date' => '`birth_date` varchar(32)', @@ -2577,7 +2577,7 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'organization_name' => '`organization_name` varchar(128)', 'sic_code' => '`sic_code` varchar(8)', 'user_unique_id' => '`user_unique_id` varchar(255)', - 'current_employer_id' => '`current_employer_id` varchar(16)', + 'current_employer_id' => '`current_employer_id` varchar(64)', 'contact_is_deleted' => '`contact_is_deleted` varchar(64)', 'created_date' => '`created_date` varchar(32)', 'modified_date' => '`modified_date` varchar(32)', @@ -2586,12 +2586,12 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'postal_greeting' => '`postal_greeting` varchar(255)', 'current_employer' => '`current_employer` varchar(255)', 'location_type' => '`location_type` varchar(255)', - 'address_id' => '`address_id` varchar(16)', + 'address_id' => '`address_id` varchar(64)', 'street_address' => '`street_address` varchar(96)', - 'street_number' => '`street_number` varchar(16)', + 'street_number' => '`street_number` varchar(64)', 'street_number_suffix' => '`street_number_suffix` varchar(8)', 'street_name' => '`street_name` varchar(64)', - 'street_unit' => '`street_unit` varchar(16)', + 'street_unit' => '`street_unit` varchar(64)', 'supplemental_address_1' => '`supplemental_address_1` varchar(96)', 'supplemental_address_2' => '`supplemental_address_2` varchar(96)', 'supplemental_address_3' => '`supplemental_address_3` varchar(96)', @@ -2600,15 +2600,15 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'postal_code' => '`postal_code` varchar(64)', 'geo_code_1' => '`geo_code_1` varchar(32)', 'geo_code_2' => '`geo_code_2` varchar(32)', - 'manual_geo_code' => '`manual_geo_code` varchar(16)', + 'manual_geo_code' => '`manual_geo_code` varchar(64)', 'address_name' => '`address_name` varchar(255)', 'master_id' => '`master_id` varchar(128)', 'county' => '`county` varchar(64)', 'state_province' => '`state_province` varchar(64)', 'country' => '`country` varchar(64)', 'phone' => '`phone` varchar(32)', - 'phone_ext' => '`phone_ext` varchar(16)', - 'phone_type_id' => '`phone_type_id` varchar(16)', + 'phone_ext' => '`phone_ext` varchar(64)', + 'phone_type_id' => '`phone_type_id` varchar(64)', 'email' => '`email` varchar(254)', 'on_hold' => '`on_hold` varchar(64)', 'is_bulkmail' => '`is_bulkmail` varchar(64)', @@ -2644,12 +2644,12 @@ protected function getCaseSqlColumns(): array { 'case_subject' => '`case_subject` varchar(128)', 'case_source_contact_id' => '`case_source_contact_id` varchar(255)', 'case_activity_status' => '`case_activity_status` varchar(255)', - 'case_activity_duration' => '`case_activity_duration` varchar(16)', - 'case_activity_medium_id' => '`case_activity_medium_id` varchar(16)', + 'case_activity_duration' => '`case_activity_duration` varchar(64)', + 'case_activity_medium_id' => '`case_activity_medium_id` varchar(64)', 'case_activity_details' => '`case_activity_details` longtext', 'case_activity_is_auto' => '`case_activity_is_auto` varchar(64)', - 'contact_id' => '`contact_id` varchar(16)', - 'case_id' => '`case_id` varchar(16)', + 'contact_id' => '`contact_id` varchar(64)', + 'case_id' => '`case_id` varchar(64)', 'case_activity_subject' => '`case_activity_subject` varchar(255)', 'case_status' => '`case_status` text', 'case_type' => '`case_type` text', @@ -2667,12 +2667,12 @@ protected function getCaseSqlColumns(): array { */ protected function getActivitySqlColumns(): array { return [ - 'activity_id' => '`activity_id` varchar(16)', + 'activity_id' => '`activity_id` varchar(64)', 'activity_type' => '`activity_type` varchar(255)', - 'activity_type_id' => '`activity_type_id` varchar(16)', + 'activity_type_id' => '`activity_type_id` varchar(64)', 'activity_subject' => '`activity_subject` varchar(255)', 'activity_date_time' => '`activity_date_time` varchar(32)', - 'activity_duration' => '`activity_duration` varchar(16)', + 'activity_duration' => '`activity_duration` varchar(64)', 'activity_location' => '`activity_location` varchar(255)', 'activity_details' => '`activity_details` longtext', 'activity_status' => '`activity_status` varchar(255)', @@ -2680,9 +2680,9 @@ protected function getActivitySqlColumns(): array { 'source_contact' => '`source_contact` varchar(255)', 'source_record_id' => '`source_record_id` varchar(255)', 'activity_is_test' => '`activity_is_test` varchar(64)', - 'activity_campaign_id' => '`activity_campaign_id` varchar(16)', + 'activity_campaign_id' => '`activity_campaign_id` varchar(64)', 'result' => '`result` text', - 'activity_engagement_level' => '`activity_engagement_level` varchar(16)', + 'activity_engagement_level' => '`activity_engagement_level` varchar(64)', 'parent_id' => '`parent_id` varchar(255)', ]; } @@ -2694,14 +2694,14 @@ protected function getActivitySqlColumns(): array { */ protected function getParticipantSqlColumns(): array { return [ - 'event_id' => '`event_id` varchar(16)', + 'event_id' => '`event_id` varchar(64)', 'event_title' => '`event_title` varchar(255)', 'event_start_date' => '`event_start_date` varchar(32)', 'event_end_date' => '`event_end_date` varchar(32)', 'event_type' => '`event_type` varchar(255)', - 'participant_id' => '`participant_id` varchar(16)', + 'participant_id' => '`participant_id` varchar(64)', 'participant_status' => '`participant_status` varchar(255)', - 'participant_status_id' => '`participant_status_id` varchar(16)', + 'participant_status_id' => '`participant_status_id` varchar(64)', 'participant_role' => '`participant_role` varchar(255)', 'participant_role_id' => '`participant_role_id` varchar(128)', 'participant_note' => '`participant_note` longtext', @@ -2711,10 +2711,10 @@ protected function getParticipantSqlColumns(): array { 'participant_is_test' => '`participant_is_test` varchar(64)', 'participant_is_pay_later' => '`participant_is_pay_later` varchar(64)', 'participant_fee_amount' => '`participant_fee_amount` varchar(32)', - 'participant_discount_name' => '`participant_discount_name` varchar(16)', + 'participant_discount_name' => '`participant_discount_name` varchar(64)', 'participant_fee_currency' => '`participant_fee_currency` varchar(3)', - 'participant_registered_by_id' => '`participant_registered_by_id` varchar(16)', - 'participant_campaign_id' => '`participant_campaign_id` varchar(16)', + 'participant_registered_by_id' => '`participant_registered_by_id` varchar(64)', + 'participant_campaign_id' => '`participant_campaign_id` varchar(64)', ]; } @@ -2725,7 +2725,7 @@ protected function getParticipantSqlColumns(): array { */ public function getContributionSqlColumns(): array { return [ - 'civicrm_primary_id' => '`civicrm_primary_id` varchar(16)', + 'civicrm_primary_id' => '`civicrm_primary_id` varchar(64)', 'contact_type' => '`contact_type` varchar(64)', 'contact_sub_type' => '`contact_sub_type` varchar(255)', 'do_not_email' => '`do_not_email` varchar(64)', @@ -2753,9 +2753,9 @@ public function getContributionSqlColumns(): array { 'suffix_id' => '`suffix_id` varchar(255)', 'formal_title' => '`formal_title` varchar(64)', 'communication_style_id' => '`communication_style_id` varchar(255)', - 'email_greeting_id' => '`email_greeting_id` varchar(16)', - 'postal_greeting_id' => '`postal_greeting_id` varchar(16)', - 'addressee_id' => '`addressee_id` varchar(16)', + 'email_greeting_id' => '`email_greeting_id` varchar(64)', + 'postal_greeting_id' => '`postal_greeting_id` varchar(64)', + 'addressee_id' => '`addressee_id` varchar(64)', 'job_title' => '`job_title` varchar(255)', 'gender_id' => '`gender_id` varchar(255)', 'birth_date' => '`birth_date` varchar(32)', @@ -2765,7 +2765,7 @@ public function getContributionSqlColumns(): array { 'organization_name' => '`organization_name` varchar(128)', 'sic_code' => '`sic_code` varchar(8)', 'user_unique_id' => '`user_unique_id` varchar(255)', - 'current_employer_id' => '`current_employer_id` varchar(16)', + 'current_employer_id' => '`current_employer_id` varchar(64)', 'contact_is_deleted' => '`contact_is_deleted` varchar(64)', 'created_date' => '`created_date` varchar(32)', 'modified_date' => '`modified_date` varchar(32)', @@ -2775,10 +2775,10 @@ public function getContributionSqlColumns(): array { 'current_employer' => '`current_employer` varchar(255)', 'location_type' => '`location_type` varchar(255)', 'street_address' => '`street_address` varchar(96)', - 'street_number' => '`street_number` varchar(16)', + 'street_number' => '`street_number` varchar(64)', 'street_number_suffix' => '`street_number_suffix` varchar(8)', 'street_name' => '`street_name` varchar(64)', - 'street_unit' => '`street_unit` varchar(16)', + 'street_unit' => '`street_unit` varchar(64)', 'supplemental_address_1' => '`supplemental_address_1` varchar(96)', 'supplemental_address_2' => '`supplemental_address_2` varchar(96)', 'supplemental_address_3' => '`supplemental_address_3` varchar(96)', @@ -2793,7 +2793,7 @@ public function getContributionSqlColumns(): array { 'state_province' => '`state_province` varchar(64)', 'country' => '`country` varchar(64)', 'phone' => '`phone` varchar(32)', - 'phone_ext' => '`phone_ext` varchar(16)', + 'phone_ext' => '`phone_ext` varchar(64)', 'email' => '`email` varchar(254)', 'on_hold' => '`on_hold` varchar(64)', 'is_bulkmail' => '`is_bulkmail` varchar(64)', @@ -2804,7 +2804,7 @@ public function getContributionSqlColumns(): array { 'openid' => '`openid` varchar(255)', 'world_region' => '`world_region` varchar(128)', 'url' => '`url` varchar(128)', - 'phone_type_id' => '`phone_type_id` varchar(16)', + 'phone_type_id' => '`phone_type_id` varchar(64)', 'financial_type' => '`financial_type` varchar(255)', 'contribution_source' => '`contribution_source` varchar(255)', 'receive_date' => '`receive_date` varchar(32)', @@ -2813,7 +2813,7 @@ public function getContributionSqlColumns(): array { 'total_amount' => '`total_amount` varchar(32)', 'accounting_code' => '`accounting_code` varchar(64)', 'payment_instrument' => '`payment_instrument` varchar(255)', - 'payment_instrument_id' => '`payment_instrument_id` varchar(16)', + 'payment_instrument_id' => '`payment_instrument_id` varchar(64)', 'contribution_check_number' => '`contribution_check_number` varchar(255)', 'non_deductible_amount' => '`non_deductible_amount` varchar(32)', 'fee_amount' => '`fee_amount` varchar(32)', @@ -2827,17 +2827,17 @@ public function getContributionSqlColumns(): array { 'is_test' => '`is_test` varchar(64)', 'is_pay_later' => '`is_pay_later` varchar(64)', 'contribution_status' => '`contribution_status` varchar(255)', - 'contribution_recur_id' => '`contribution_recur_id` varchar(16)', + 'contribution_recur_id' => '`contribution_recur_id` varchar(64)', 'amount_level' => '`amount_level` longtext', 'contribution_note' => '`contribution_note` longtext', 'contribution_batch' => '`contribution_batch` text', 'contribution_campaign_title' => '`contribution_campaign_title` varchar(255)', - 'contribution_campaign_id' => '`contribution_campaign_id` varchar(16)', + 'contribution_campaign_id' => '`contribution_campaign_id` varchar(64)', 'contribution_soft_credit_name' => '`contribution_soft_credit_name` varchar(255)', 'contribution_soft_credit_amount' => '`contribution_soft_credit_amount` varchar(32)', 'contribution_soft_credit_type' => '`contribution_soft_credit_type` varchar(255)', - 'contribution_soft_credit_contact_id' => '`contribution_soft_credit_contact_id` varchar(16)', - 'contribution_soft_credit_contribution_id' => '`contribution_soft_credit_contribution_id` varchar(16)', + 'contribution_soft_credit_contact_id' => '`contribution_soft_credit_contact_id` varchar(64)', + 'contribution_soft_credit_contribution_id' => '`contribution_soft_credit_contribution_id` varchar(64)', ]; } @@ -2848,7 +2848,7 @@ public function getContributionSqlColumns(): array { */ public function getPledgeSqlColumns(): array { return [ - 'pledge_id' => '`pledge_id` varchar(16)', + 'pledge_id' => '`pledge_id` varchar(64)', 'pledge_amount' => '`pledge_amount` varchar(32)', 'pledge_total_paid' => '`pledge_total_paid` text', 'pledge_create_date' => '`pledge_create_date` varchar(32)', @@ -2857,20 +2857,20 @@ public function getPledgeSqlColumns(): array { 'pledge_next_pay_amount' => '`pledge_next_pay_amount` text', 'pledge_status' => '`pledge_status` varchar(255)', 'pledge_is_test' => '`pledge_is_test` varchar(64)', - 'pledge_contribution_page_id' => '`pledge_contribution_page_id` varchar(16)', + 'pledge_contribution_page_id' => '`pledge_contribution_page_id` varchar(64)', 'pledge_financial_type' => '`pledge_financial_type` text', - 'pledge_frequency_interval' => '`pledge_frequency_interval` varchar(16)', + 'pledge_frequency_interval' => '`pledge_frequency_interval` varchar(64)', 'pledge_frequency_unit' => '`pledge_frequency_unit` varchar(255)', 'pledge_currency' => '`pledge_currency` text', - 'pledge_campaign_id' => '`pledge_campaign_id` varchar(16)', + 'pledge_campaign_id' => '`pledge_campaign_id` varchar(64)', 'pledge_balance_amount' => '`pledge_balance_amount` text', - 'pledge_payment_id' => '`pledge_payment_id` varchar(16)', + 'pledge_payment_id' => '`pledge_payment_id` varchar(64)', 'pledge_payment_scheduled_amount' => '`pledge_payment_scheduled_amount` varchar(32)', 'pledge_payment_scheduled_date' => '`pledge_payment_scheduled_date` varchar(32)', 'pledge_payment_paid_amount' => '`pledge_payment_paid_amount` text', 'pledge_payment_paid_date' => '`pledge_payment_paid_date` text', 'pledge_payment_reminder_date' => '`pledge_payment_reminder_date` varchar(32)', - 'pledge_payment_reminder_count' => '`pledge_payment_reminder_count` varchar(16)', + 'pledge_payment_reminder_count' => '`pledge_payment_reminder_count` varchar(64)', 'pledge_payment_status' => '`pledge_payment_status` varchar(255)', ]; } @@ -2890,11 +2890,11 @@ public function getMembershipSqlColumns(): array { 'membership_end_date' => '`membership_end_date` varchar(32)', 'membership_source' => '`membership_source` varchar(128)', 'membership_status' => '`membership_status` varchar(255)', - 'membership_id' => '`membership_id` varchar(16)', - 'owner_membership_id' => '`owner_membership_id` varchar(16)', - 'max_related' => '`max_related` varchar(16)', - 'membership_recur_id' => '`membership_recur_id` varchar(16)', - 'member_campaign_id' => '`member_campaign_id` varchar(16)', + 'membership_id' => '`membership_id` varchar(64)', + 'owner_membership_id' => '`owner_membership_id` varchar(64)', + 'max_related' => '`max_related` varchar(64)', + 'membership_recur_id' => '`membership_recur_id` varchar(64)', + 'member_campaign_id' => '`member_campaign_id` varchar(64)', 'member_is_override' => '`member_is_override` varchar(64)', ]; } From f9044d40a01324c1cc0c029bd02f3d6298bba4f6 Mon Sep 17 00:00:00 2001 From: demeritcowboy Date: Wed, 31 Mar 2021 09:36:50 -0400 Subject: [PATCH 16/20] don't try to money_format html --- tests/phpunit/CRM/Core/Smarty/plugins/CrmMoneyTest.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/phpunit/CRM/Core/Smarty/plugins/CrmMoneyTest.php b/tests/phpunit/CRM/Core/Smarty/plugins/CrmMoneyTest.php index c170adcb5522..e7e111a1b662 100644 --- a/tests/phpunit/CRM/Core/Smarty/plugins/CrmMoneyTest.php +++ b/tests/phpunit/CRM/Core/Smarty/plugins/CrmMoneyTest.php @@ -22,10 +22,6 @@ public function moneyCases() { $cases = []; $cases[] = ['$ 4.00', '{assign var="amount" value="4.00"}{$amount|crmMoney:USD}']; $cases[] = ['€ 1,234.00', '{assign var="amount" value="1234.00"}{$amount|crmMoney:EUR}']; - $cases[] = [ - '$ ', - '{assign var="amount" value=\'\'}{$amount|crmMoney:USD}', - ]; return $cases; } From 6b04b7ea1de1aa771428d872ecdac3177d48122e Mon Sep 17 00:00:00 2001 From: Samuel Vanhove Date: Wed, 31 Mar 2021 15:49:25 -0400 Subject: [PATCH 17/20] dev/core#527 simpler solution --- CRM/Contribute/BAO/ContributionPage.php | 2 +- CRM/Event/BAO/Event.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CRM/Contribute/BAO/ContributionPage.php b/CRM/Contribute/BAO/ContributionPage.php index 9ce2481d5f77..c15e5c3d10d0 100644 --- a/CRM/Contribute/BAO/ContributionPage.php +++ b/CRM/Contribute/BAO/ContributionPage.php @@ -483,7 +483,7 @@ protected static function getProfileNameAndFields($gid, $cid, $params, $fieldTyp $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 = !empty($v['groupDisplayTitle']) ? $v['groupDisplayTitle'] : $v['groupTitle']; + $groupTitle = $v['groupDisplayTitle']; } // suppress all file fields from display and formatting fields if ( diff --git a/CRM/Event/BAO/Event.php b/CRM/Event/BAO/Event.php index 0eb730187d6a..267a00644f37 100644 --- a/CRM/Event/BAO/Event.php +++ b/CRM/Event/BAO/Event.php @@ -1320,7 +1320,7 @@ public static function buildCustomDisplay( $groupTitle = NULL; foreach ($fields as $k => $v) { if (!$groupTitle) { - $groupTitle = !empty($v['groupDisplayTitle']) ? $v['groupDisplayTitle'] : $v['groupTitle']; + $groupTitle = $v['groupDisplayTitle']; } // suppress all file fields from display if ( From 74cdcad76417bd31f23ea39ba5ebc38af1f2c9bb Mon Sep 17 00:00:00 2001 From: "B. Endres" Date: Thu, 1 Apr 2021 14:34:47 +0200 Subject: [PATCH 18/20] adjusting unit tests --- tests/phpunit/CRM/Export/BAO/ExportTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/phpunit/CRM/Export/BAO/ExportTest.php b/tests/phpunit/CRM/Export/BAO/ExportTest.php index 2d9aabfc2a68..1c8dd99a8b2e 100644 --- a/tests/phpunit/CRM/Export/BAO/ExportTest.php +++ b/tests/phpunit/CRM/Export/BAO/ExportTest.php @@ -1974,7 +1974,7 @@ public function getAllSpecifiableParticipantReturnColumns(): array { 'currency' => '`currency` varchar(3)', 'componentpaymentfield_received_date' => '`componentpaymentfield_received_date` varchar(32)', 'default_role_id' => '`default_role_id` varchar(64)', - 'participant_discount_name' => '`participant_discount_name` varchar(16)', + 'participant_discount_name' => '`participant_discount_name` varchar(64)', 'event_id' => '`event_id` varchar(64)', 'event_end_date' => '`event_end_date` varchar(32)', 'event_start_date' => '`event_start_date` varchar(32)', @@ -2591,7 +2591,7 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'street_number' => '`street_number` varchar(64)', 'street_number_suffix' => '`street_number_suffix` varchar(8)', 'street_name' => '`street_name` varchar(64)', - 'street_unit' => '`street_unit` varchar(64)', + 'street_unit' => '`street_unit` varchar(16)', 'supplemental_address_1' => '`supplemental_address_1` varchar(96)', 'supplemental_address_2' => '`supplemental_address_2` varchar(96)', 'supplemental_address_3' => '`supplemental_address_3` varchar(96)', @@ -2607,7 +2607,7 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'state_province' => '`state_province` varchar(64)', 'country' => '`country` varchar(64)', 'phone' => '`phone` varchar(32)', - 'phone_ext' => '`phone_ext` varchar(64)', + 'phone_ext' => '`phone_ext` varchar(16)', 'phone_type_id' => '`phone_type_id` varchar(64)', 'email' => '`email` varchar(254)', 'on_hold' => '`on_hold` varchar(64)', @@ -2778,7 +2778,7 @@ public function getContributionSqlColumns(): array { 'street_number' => '`street_number` varchar(64)', 'street_number_suffix' => '`street_number_suffix` varchar(8)', 'street_name' => '`street_name` varchar(64)', - 'street_unit' => '`street_unit` varchar(64)', + 'street_unit' => '`street_unit` varchar(16)', 'supplemental_address_1' => '`supplemental_address_1` varchar(96)', 'supplemental_address_2' => '`supplemental_address_2` varchar(96)', 'supplemental_address_3' => '`supplemental_address_3` varchar(96)', @@ -2793,7 +2793,7 @@ public function getContributionSqlColumns(): array { 'state_province' => '`state_province` varchar(64)', 'country' => '`country` varchar(64)', 'phone' => '`phone` varchar(32)', - 'phone_ext' => '`phone_ext` varchar(64)', + 'phone_ext' => '`phone_ext` varchar(16)', 'email' => '`email` varchar(254)', 'on_hold' => '`on_hold` varchar(64)', 'is_bulkmail' => '`is_bulkmail` varchar(64)', From 55bf40fe097c8506d3481e9bfeda5982a5889efd Mon Sep 17 00:00:00 2001 From: Jaap Jansma Date: Thu, 1 Apr 2021 15:30:10 +0200 Subject: [PATCH 19/20] Fix for dev/core#2503 --- CRM/Report/Form.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CRM/Report/Form.php b/CRM/Report/Form.php index f9b776a33662..a20ca0d8de3b 100644 --- a/CRM/Report/Form.php +++ b/CRM/Report/Form.php @@ -4004,7 +4004,9 @@ public function addCustomDataToColumns($addFields = TRUE, $permCustomGroupIds = 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': From 4ade2eaf62c36182e558e3a347a0ec60fe4915d6 Mon Sep 17 00:00:00 2001 From: "B. Endres" Date: Wed, 31 Mar 2021 08:59:49 +0200 Subject: [PATCH 20/20] extending the @wannesderoy patch from https://github.com/civicrm/civicrm-core/pull/18920 --- CRM/Export/BAO/ExportProcessor.php | 4 +- tests/phpunit/CRM/Export/BAO/ExportTest.php | 180 ++++++++++---------- 2 files changed, 93 insertions(+), 91 deletions(-) diff --git a/CRM/Export/BAO/ExportProcessor.php b/CRM/Export/BAO/ExportProcessor.php index c3b0dd24bf6c..fff50a8dad1e 100644 --- a/CRM/Export/BAO/ExportProcessor.php +++ b/CRM/Export/BAO/ExportProcessor.php @@ -1458,7 +1458,9 @@ public function getSqlColumnDefinition($fieldName, $columnName) { 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/tests/phpunit/CRM/Export/BAO/ExportTest.php b/tests/phpunit/CRM/Export/BAO/ExportTest.php index 9bc95db1d9cf..1c8dd99a8b2e 100644 --- a/tests/phpunit/CRM/Export/BAO/ExportTest.php +++ b/tests/phpunit/CRM/Export/BAO/ExportTest.php @@ -1014,7 +1014,7 @@ public function testExportAddressData(): void { } $this->assertEquals([ - 'contact_id' => '`contact_id` varchar(16)', + 'contact_id' => '`contact_id` varchar(64)', 'billing_city' => '`billing_city` varchar(64)', 'billing_street_address' => '`billing_street_address` varchar(96)', 'billing_postal_code' => '`billing_postal_code` varchar(64)', @@ -1968,14 +1968,14 @@ public function getAllSpecifiableReturnFields(): array { */ public function getAllSpecifiableParticipantReturnColumns(): array { return [ - 'participant_campaign_id' => '`participant_campaign_id` varchar(16)', - 'participant_contact_id' => '`participant_contact_id` varchar(16)', + 'participant_campaign_id' => '`participant_campaign_id` varchar(64)', + 'participant_contact_id' => '`participant_contact_id` varchar(64)', 'componentpaymentfield_contribution_status' => '`componentpaymentfield_contribution_status` varchar(255)', 'currency' => '`currency` varchar(3)', 'componentpaymentfield_received_date' => '`componentpaymentfield_received_date` varchar(32)', - 'default_role_id' => '`default_role_id` varchar(16)', - 'participant_discount_name' => '`participant_discount_name` varchar(16)', - 'event_id' => '`event_id` varchar(16)', + 'default_role_id' => '`default_role_id` varchar(64)', + 'participant_discount_name' => '`participant_discount_name` varchar(64)', + 'event_id' => '`event_id` varchar(64)', 'event_end_date' => '`event_end_date` varchar(32)', 'event_start_date' => '`event_start_date` varchar(32)', 'template_title' => '`template_title` varchar(255)', @@ -1984,20 +1984,20 @@ public function getAllSpecifiableParticipantReturnColumns(): array { 'participant_fee_currency' => '`participant_fee_currency` varchar(3)', 'fee_label' => '`fee_label` varchar(255)', 'participant_fee_level' => '`participant_fee_level` longtext', - 'participant_is_pay_later' => '`participant_is_pay_later` varchar(16)', - 'participant_id' => '`participant_id` varchar(16)', + 'participant_is_pay_later' => '`participant_is_pay_later` varchar(64)', + 'participant_id' => '`participant_id` varchar(64)', 'participant_note' => '`participant_note` longtext', 'participant_role_id' => '`participant_role_id` varchar(128)', 'participant_role' => '`participant_role` varchar(255)', 'participant_source' => '`participant_source` varchar(128)', - 'participant_status_id' => '`participant_status_id` varchar(16)', + 'participant_status_id' => '`participant_status_id` varchar(64)', 'participant_status' => '`participant_status` varchar(255)', 'participant_register_date' => '`participant_register_date` varchar(32)', - 'participant_registered_by_id' => '`participant_registered_by_id` varchar(16)', - 'participant_is_test' => '`participant_is_test` varchar(16)', + 'participant_registered_by_id' => '`participant_registered_by_id` varchar(64)', + 'participant_is_test' => '`participant_is_test` varchar(64)', 'componentpaymentfield_total_amount' => '`componentpaymentfield_total_amount` varchar(32)', 'componentpaymentfield_transaction_id' => '`componentpaymentfield_transaction_id` varchar(255)', - 'transferred_to_contact_id' => '`transferred_to_contact_id` varchar(16)', + 'transferred_to_contact_id' => '`transferred_to_contact_id` varchar(64)', ]; } @@ -2537,15 +2537,15 @@ protected function getPledgeHeaderDefinition(): array { */ protected function getBasicSqlColumnDefinition($isContactExport): array { $columns = [ - 'civicrm_primary_id' => '`civicrm_primary_id` varchar(16)', + 'civicrm_primary_id' => '`civicrm_primary_id` varchar(64)', 'contact_type' => '`contact_type` varchar(64)', 'contact_sub_type' => '`contact_sub_type` varchar(255)', - 'do_not_email' => '`do_not_email` varchar(16)', - 'do_not_phone' => '`do_not_phone` varchar(16)', - 'do_not_mail' => '`do_not_mail` varchar(16)', - 'do_not_sms' => '`do_not_sms` varchar(16)', - 'do_not_trade' => '`do_not_trade` varchar(16)', - 'is_opt_out' => '`is_opt_out` varchar(16)', + 'do_not_email' => '`do_not_email` varchar(64)', + 'do_not_phone' => '`do_not_phone` varchar(64)', + 'do_not_mail' => '`do_not_mail` varchar(64)', + 'do_not_sms' => '`do_not_sms` varchar(64)', + 'do_not_trade' => '`do_not_trade` varchar(64)', + 'is_opt_out' => '`is_opt_out` varchar(64)', 'legal_identifier' => '`legal_identifier` varchar(32)', 'external_identifier' => '`external_identifier` varchar(64)', 'sort_name' => '`sort_name` varchar(128)', @@ -2565,20 +2565,20 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'suffix_id' => '`suffix_id` varchar(255)', 'formal_title' => '`formal_title` varchar(64)', 'communication_style_id' => '`communication_style_id` varchar(255)', - 'email_greeting_id' => '`email_greeting_id` varchar(16)', - 'postal_greeting_id' => '`postal_greeting_id` varchar(16)', - 'addressee_id' => '`addressee_id` varchar(16)', + 'email_greeting_id' => '`email_greeting_id` varchar(64)', + 'postal_greeting_id' => '`postal_greeting_id` varchar(64)', + 'addressee_id' => '`addressee_id` varchar(64)', 'job_title' => '`job_title` varchar(255)', 'gender_id' => '`gender_id` varchar(255)', 'birth_date' => '`birth_date` varchar(32)', - 'is_deceased' => '`is_deceased` varchar(16)', + 'is_deceased' => '`is_deceased` varchar(64)', 'deceased_date' => '`deceased_date` varchar(32)', 'household_name' => '`household_name` varchar(128)', 'organization_name' => '`organization_name` varchar(128)', 'sic_code' => '`sic_code` varchar(8)', 'user_unique_id' => '`user_unique_id` varchar(255)', - 'current_employer_id' => '`current_employer_id` varchar(16)', - 'contact_is_deleted' => '`contact_is_deleted` varchar(16)', + 'current_employer_id' => '`current_employer_id` varchar(64)', + 'contact_is_deleted' => '`contact_is_deleted` varchar(64)', 'created_date' => '`created_date` varchar(32)', 'modified_date' => '`modified_date` varchar(32)', 'addressee' => '`addressee` varchar(255)', @@ -2586,9 +2586,9 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'postal_greeting' => '`postal_greeting` varchar(255)', 'current_employer' => '`current_employer` varchar(255)', 'location_type' => '`location_type` varchar(255)', - 'address_id' => '`address_id` varchar(16)', + 'address_id' => '`address_id` varchar(64)', 'street_address' => '`street_address` varchar(96)', - 'street_number' => '`street_number` varchar(16)', + 'street_number' => '`street_number` varchar(64)', 'street_number_suffix' => '`street_number_suffix` varchar(8)', 'street_name' => '`street_name` varchar(64)', 'street_unit' => '`street_unit` varchar(16)', @@ -2600,7 +2600,7 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'postal_code' => '`postal_code` varchar(64)', 'geo_code_1' => '`geo_code_1` varchar(32)', 'geo_code_2' => '`geo_code_2` varchar(32)', - 'manual_geo_code' => '`manual_geo_code` varchar(16)', + 'manual_geo_code' => '`manual_geo_code` varchar(64)', 'address_name' => '`address_name` varchar(255)', 'master_id' => '`master_id` varchar(128)', 'county' => '`county` varchar(64)', @@ -2608,10 +2608,10 @@ protected function getBasicSqlColumnDefinition($isContactExport): array { 'country' => '`country` varchar(64)', 'phone' => '`phone` varchar(32)', 'phone_ext' => '`phone_ext` varchar(16)', - 'phone_type_id' => '`phone_type_id` varchar(16)', + 'phone_type_id' => '`phone_type_id` varchar(64)', 'email' => '`email` varchar(254)', - 'on_hold' => '`on_hold` varchar(16)', - 'is_bulkmail' => '`is_bulkmail` varchar(16)', + 'on_hold' => '`on_hold` varchar(64)', + 'is_bulkmail' => '`is_bulkmail` varchar(64)', 'signature_text' => '`signature_text` longtext', 'signature_html' => '`signature_html` longtext', 'im_provider' => '`im_provider` varchar(255)', @@ -2644,17 +2644,17 @@ protected function getCaseSqlColumns(): array { 'case_subject' => '`case_subject` varchar(128)', 'case_source_contact_id' => '`case_source_contact_id` varchar(255)', 'case_activity_status' => '`case_activity_status` varchar(255)', - 'case_activity_duration' => '`case_activity_duration` varchar(16)', - 'case_activity_medium_id' => '`case_activity_medium_id` varchar(16)', + 'case_activity_duration' => '`case_activity_duration` varchar(64)', + 'case_activity_medium_id' => '`case_activity_medium_id` varchar(64)', 'case_activity_details' => '`case_activity_details` longtext', - 'case_activity_is_auto' => '`case_activity_is_auto` varchar(16)', - 'contact_id' => '`contact_id` varchar(16)', - 'case_id' => '`case_id` varchar(16)', + 'case_activity_is_auto' => '`case_activity_is_auto` varchar(64)', + 'contact_id' => '`contact_id` varchar(64)', + 'case_id' => '`case_id` varchar(64)', 'case_activity_subject' => '`case_activity_subject` varchar(255)', 'case_status' => '`case_status` text', 'case_type' => '`case_type` text', 'case_role' => '`case_role` text', - 'case_deleted' => '`case_deleted` varchar(16)', + 'case_deleted' => '`case_deleted` varchar(64)', 'case_activity_date_time' => '`case_activity_date_time` varchar(32)', 'case_activity_type' => '`case_activity_type` varchar(255)', ]; @@ -2667,22 +2667,22 @@ protected function getCaseSqlColumns(): array { */ protected function getActivitySqlColumns(): array { return [ - 'activity_id' => '`activity_id` varchar(16)', + 'activity_id' => '`activity_id` varchar(64)', 'activity_type' => '`activity_type` varchar(255)', - 'activity_type_id' => '`activity_type_id` varchar(16)', + 'activity_type_id' => '`activity_type_id` varchar(64)', 'activity_subject' => '`activity_subject` varchar(255)', 'activity_date_time' => '`activity_date_time` varchar(32)', - 'activity_duration' => '`activity_duration` varchar(16)', + 'activity_duration' => '`activity_duration` varchar(64)', 'activity_location' => '`activity_location` varchar(255)', 'activity_details' => '`activity_details` longtext', 'activity_status' => '`activity_status` varchar(255)', 'activity_priority' => '`activity_priority` varchar(255)', 'source_contact' => '`source_contact` varchar(255)', 'source_record_id' => '`source_record_id` varchar(255)', - 'activity_is_test' => '`activity_is_test` varchar(16)', - 'activity_campaign_id' => '`activity_campaign_id` varchar(16)', + 'activity_is_test' => '`activity_is_test` varchar(64)', + 'activity_campaign_id' => '`activity_campaign_id` varchar(64)', 'result' => '`result` text', - 'activity_engagement_level' => '`activity_engagement_level` varchar(16)', + 'activity_engagement_level' => '`activity_engagement_level` varchar(64)', 'parent_id' => '`parent_id` varchar(255)', ]; } @@ -2694,27 +2694,27 @@ protected function getActivitySqlColumns(): array { */ protected function getParticipantSqlColumns(): array { return [ - 'event_id' => '`event_id` varchar(16)', + 'event_id' => '`event_id` varchar(64)', 'event_title' => '`event_title` varchar(255)', 'event_start_date' => '`event_start_date` varchar(32)', 'event_end_date' => '`event_end_date` varchar(32)', 'event_type' => '`event_type` varchar(255)', - 'participant_id' => '`participant_id` varchar(16)', + 'participant_id' => '`participant_id` varchar(64)', 'participant_status' => '`participant_status` varchar(255)', - 'participant_status_id' => '`participant_status_id` varchar(16)', + 'participant_status_id' => '`participant_status_id` varchar(64)', 'participant_role' => '`participant_role` varchar(255)', 'participant_role_id' => '`participant_role_id` varchar(128)', 'participant_note' => '`participant_note` longtext', 'participant_register_date' => '`participant_register_date` varchar(32)', 'participant_source' => '`participant_source` varchar(128)', 'participant_fee_level' => '`participant_fee_level` longtext', - 'participant_is_test' => '`participant_is_test` varchar(16)', - 'participant_is_pay_later' => '`participant_is_pay_later` varchar(16)', + 'participant_is_test' => '`participant_is_test` varchar(64)', + 'participant_is_pay_later' => '`participant_is_pay_later` varchar(64)', 'participant_fee_amount' => '`participant_fee_amount` varchar(32)', - 'participant_discount_name' => '`participant_discount_name` varchar(16)', + 'participant_discount_name' => '`participant_discount_name` varchar(64)', 'participant_fee_currency' => '`participant_fee_currency` varchar(3)', - 'participant_registered_by_id' => '`participant_registered_by_id` varchar(16)', - 'participant_campaign_id' => '`participant_campaign_id` varchar(16)', + 'participant_registered_by_id' => '`participant_registered_by_id` varchar(64)', + 'participant_campaign_id' => '`participant_campaign_id` varchar(64)', ]; } @@ -2725,15 +2725,15 @@ protected function getParticipantSqlColumns(): array { */ public function getContributionSqlColumns(): array { return [ - 'civicrm_primary_id' => '`civicrm_primary_id` varchar(16)', + 'civicrm_primary_id' => '`civicrm_primary_id` varchar(64)', 'contact_type' => '`contact_type` varchar(64)', 'contact_sub_type' => '`contact_sub_type` varchar(255)', - 'do_not_email' => '`do_not_email` varchar(16)', - 'do_not_phone' => '`do_not_phone` varchar(16)', - 'do_not_mail' => '`do_not_mail` varchar(16)', - 'do_not_sms' => '`do_not_sms` varchar(16)', - 'do_not_trade' => '`do_not_trade` varchar(16)', - 'is_opt_out' => '`is_opt_out` varchar(16)', + 'do_not_email' => '`do_not_email` varchar(64)', + 'do_not_phone' => '`do_not_phone` varchar(64)', + 'do_not_mail' => '`do_not_mail` varchar(64)', + 'do_not_sms' => '`do_not_sms` varchar(64)', + 'do_not_trade' => '`do_not_trade` varchar(64)', + 'is_opt_out' => '`is_opt_out` varchar(64)', 'legal_identifier' => '`legal_identifier` varchar(32)', 'external_identifier' => '`external_identifier` varchar(64)', 'sort_name' => '`sort_name` varchar(128)', @@ -2753,20 +2753,20 @@ public function getContributionSqlColumns(): array { 'suffix_id' => '`suffix_id` varchar(255)', 'formal_title' => '`formal_title` varchar(64)', 'communication_style_id' => '`communication_style_id` varchar(255)', - 'email_greeting_id' => '`email_greeting_id` varchar(16)', - 'postal_greeting_id' => '`postal_greeting_id` varchar(16)', - 'addressee_id' => '`addressee_id` varchar(16)', + 'email_greeting_id' => '`email_greeting_id` varchar(64)', + 'postal_greeting_id' => '`postal_greeting_id` varchar(64)', + 'addressee_id' => '`addressee_id` varchar(64)', 'job_title' => '`job_title` varchar(255)', 'gender_id' => '`gender_id` varchar(255)', 'birth_date' => '`birth_date` varchar(32)', - 'is_deceased' => '`is_deceased` varchar(16)', + 'is_deceased' => '`is_deceased` varchar(64)', 'deceased_date' => '`deceased_date` varchar(32)', 'household_name' => '`household_name` varchar(128)', 'organization_name' => '`organization_name` varchar(128)', 'sic_code' => '`sic_code` varchar(8)', 'user_unique_id' => '`user_unique_id` varchar(255)', - 'current_employer_id' => '`current_employer_id` varchar(16)', - 'contact_is_deleted' => '`contact_is_deleted` varchar(16)', + 'current_employer_id' => '`current_employer_id` varchar(64)', + 'contact_is_deleted' => '`contact_is_deleted` varchar(64)', 'created_date' => '`created_date` varchar(32)', 'modified_date' => '`modified_date` varchar(32)', 'addressee' => '`addressee` varchar(255)', @@ -2775,7 +2775,7 @@ public function getContributionSqlColumns(): array { 'current_employer' => '`current_employer` varchar(255)', 'location_type' => '`location_type` varchar(255)', 'street_address' => '`street_address` varchar(96)', - 'street_number' => '`street_number` varchar(16)', + 'street_number' => '`street_number` varchar(64)', 'street_number_suffix' => '`street_number_suffix` varchar(8)', 'street_name' => '`street_name` varchar(64)', 'street_unit' => '`street_unit` varchar(16)', @@ -2795,8 +2795,8 @@ public function getContributionSqlColumns(): array { 'phone' => '`phone` varchar(32)', 'phone_ext' => '`phone_ext` varchar(16)', 'email' => '`email` varchar(254)', - 'on_hold' => '`on_hold` varchar(16)', - 'is_bulkmail' => '`is_bulkmail` varchar(16)', + 'on_hold' => '`on_hold` varchar(64)', + 'is_bulkmail' => '`is_bulkmail` varchar(64)', 'signature_text' => '`signature_text` longtext', 'signature_html' => '`signature_html` longtext', 'im_provider' => '`im_provider` varchar(255)', @@ -2804,7 +2804,7 @@ public function getContributionSqlColumns(): array { 'openid' => '`openid` varchar(255)', 'world_region' => '`world_region` varchar(128)', 'url' => '`url` varchar(128)', - 'phone_type_id' => '`phone_type_id` varchar(16)', + 'phone_type_id' => '`phone_type_id` varchar(64)', 'financial_type' => '`financial_type` varchar(255)', 'contribution_source' => '`contribution_source` varchar(255)', 'receive_date' => '`receive_date` varchar(32)', @@ -2813,7 +2813,7 @@ public function getContributionSqlColumns(): array { 'total_amount' => '`total_amount` varchar(32)', 'accounting_code' => '`accounting_code` varchar(64)', 'payment_instrument' => '`payment_instrument` varchar(255)', - 'payment_instrument_id' => '`payment_instrument_id` varchar(16)', + 'payment_instrument_id' => '`payment_instrument_id` varchar(64)', 'contribution_check_number' => '`contribution_check_number` varchar(255)', 'non_deductible_amount' => '`non_deductible_amount` varchar(32)', 'fee_amount' => '`fee_amount` varchar(32)', @@ -2824,20 +2824,20 @@ public function getContributionSqlColumns(): array { 'currency' => '`currency` varchar(3)', 'cancel_reason' => '`cancel_reason` longtext', 'receipt_date' => '`receipt_date` varchar(32)', - 'is_test' => '`is_test` varchar(16)', - 'is_pay_later' => '`is_pay_later` varchar(16)', + 'is_test' => '`is_test` varchar(64)', + 'is_pay_later' => '`is_pay_later` varchar(64)', 'contribution_status' => '`contribution_status` varchar(255)', - 'contribution_recur_id' => '`contribution_recur_id` varchar(16)', + 'contribution_recur_id' => '`contribution_recur_id` varchar(64)', 'amount_level' => '`amount_level` longtext', 'contribution_note' => '`contribution_note` longtext', 'contribution_batch' => '`contribution_batch` text', 'contribution_campaign_title' => '`contribution_campaign_title` varchar(255)', - 'contribution_campaign_id' => '`contribution_campaign_id` varchar(16)', + 'contribution_campaign_id' => '`contribution_campaign_id` varchar(64)', 'contribution_soft_credit_name' => '`contribution_soft_credit_name` varchar(255)', 'contribution_soft_credit_amount' => '`contribution_soft_credit_amount` varchar(32)', 'contribution_soft_credit_type' => '`contribution_soft_credit_type` varchar(255)', - 'contribution_soft_credit_contact_id' => '`contribution_soft_credit_contact_id` varchar(16)', - 'contribution_soft_credit_contribution_id' => '`contribution_soft_credit_contribution_id` varchar(16)', + 'contribution_soft_credit_contact_id' => '`contribution_soft_credit_contact_id` varchar(64)', + 'contribution_soft_credit_contribution_id' => '`contribution_soft_credit_contribution_id` varchar(64)', ]; } @@ -2848,7 +2848,7 @@ public function getContributionSqlColumns(): array { */ public function getPledgeSqlColumns(): array { return [ - 'pledge_id' => '`pledge_id` varchar(16)', + 'pledge_id' => '`pledge_id` varchar(64)', 'pledge_amount' => '`pledge_amount` varchar(32)', 'pledge_total_paid' => '`pledge_total_paid` text', 'pledge_create_date' => '`pledge_create_date` varchar(32)', @@ -2856,21 +2856,21 @@ public function getPledgeSqlColumns(): array { 'pledge_next_pay_date' => '`pledge_next_pay_date` text', 'pledge_next_pay_amount' => '`pledge_next_pay_amount` text', 'pledge_status' => '`pledge_status` varchar(255)', - 'pledge_is_test' => '`pledge_is_test` varchar(16)', - 'pledge_contribution_page_id' => '`pledge_contribution_page_id` varchar(16)', + 'pledge_is_test' => '`pledge_is_test` varchar(64)', + 'pledge_contribution_page_id' => '`pledge_contribution_page_id` varchar(64)', 'pledge_financial_type' => '`pledge_financial_type` text', - 'pledge_frequency_interval' => '`pledge_frequency_interval` varchar(16)', + 'pledge_frequency_interval' => '`pledge_frequency_interval` varchar(64)', 'pledge_frequency_unit' => '`pledge_frequency_unit` varchar(255)', 'pledge_currency' => '`pledge_currency` text', - 'pledge_campaign_id' => '`pledge_campaign_id` varchar(16)', + 'pledge_campaign_id' => '`pledge_campaign_id` varchar(64)', 'pledge_balance_amount' => '`pledge_balance_amount` text', - 'pledge_payment_id' => '`pledge_payment_id` varchar(16)', + 'pledge_payment_id' => '`pledge_payment_id` varchar(64)', 'pledge_payment_scheduled_amount' => '`pledge_payment_scheduled_amount` varchar(32)', 'pledge_payment_scheduled_date' => '`pledge_payment_scheduled_date` varchar(32)', 'pledge_payment_paid_amount' => '`pledge_payment_paid_amount` text', 'pledge_payment_paid_date' => '`pledge_payment_paid_date` text', 'pledge_payment_reminder_date' => '`pledge_payment_reminder_date` varchar(32)', - 'pledge_payment_reminder_count' => '`pledge_payment_reminder_count` varchar(16)', + 'pledge_payment_reminder_count' => '`pledge_payment_reminder_count` varchar(64)', 'pledge_payment_status' => '`pledge_payment_status` varchar(255)', ]; } @@ -2883,19 +2883,19 @@ public function getPledgeSqlColumns(): array { public function getMembershipSqlColumns(): array { return [ 'membership_type' => '`membership_type` varchar(128)', - 'member_is_test' => '`member_is_test` varchar(16)', - 'member_is_pay_later' => '`member_is_pay_later` varchar(16)', + 'member_is_test' => '`member_is_test` varchar(64)', + 'member_is_pay_later' => '`member_is_pay_later` varchar(64)', 'membership_join_date' => '`membership_join_date` varchar(32)', 'membership_start_date' => '`membership_start_date` varchar(32)', 'membership_end_date' => '`membership_end_date` varchar(32)', 'membership_source' => '`membership_source` varchar(128)', 'membership_status' => '`membership_status` varchar(255)', - 'membership_id' => '`membership_id` varchar(16)', - 'owner_membership_id' => '`owner_membership_id` varchar(16)', - 'max_related' => '`max_related` varchar(16)', - 'membership_recur_id' => '`membership_recur_id` varchar(16)', - 'member_campaign_id' => '`member_campaign_id` varchar(16)', - 'member_is_override' => '`member_is_override` varchar(16)', + 'membership_id' => '`membership_id` varchar(64)', + 'owner_membership_id' => '`owner_membership_id` varchar(64)', + 'max_related' => '`max_related` varchar(64)', + 'membership_recur_id' => '`membership_recur_id` varchar(64)', + 'member_campaign_id' => '`member_campaign_id` varchar(64)', + 'member_is_override' => '`member_is_override` varchar(64)', ]; }