diff --git a/CRM/Export/BAO/Export.php b/CRM/Export/BAO/Export.php index f8f4b0ac9fd..57f5ba5f090 100644 --- a/CRM/Export/BAO/Export.php +++ b/CRM/Export/BAO/Export.php @@ -606,7 +606,7 @@ public static function mergeSameAddress($processor, &$sqlColumns, $exportParams) INNER JOIN civicrm_address adr ON r1.master_id = adr.id INNER JOIN $tableName r2 ON adr.contact_id = r2.civicrm_primary_id ORDER BY r1.id"; - $linkedMerge = self::_buildMasterCopyArray($sql, $exportParams, TRUE); + $linkedMerge = self::_buildMasterCopyArray($processor, $sql, $exportParams, TRUE); // find all the records that have the same street address BUT not in a household // require match on city and state as well @@ -633,7 +633,7 @@ public static function mergeSameAddress($processor, &$sqlColumns, $exportParams) AND r2.id > r1.id ORDER BY r1.id "; - $merge = self::_buildMasterCopyArray($sql, $exportParams); + $merge = self::_buildMasterCopyArray($processor, $sql, $exportParams); // unset ids from $merge already present in $linkedMerge foreach ($linkedMerge as $masterID => $values) { @@ -728,46 +728,14 @@ public static function _replaceMergeTokens($contactId, $exportParams) { } /** - * The function unsets static part of the string, if token is the dynamic part. - * - * Example: 'Hello {contact.first_name}' => converted to => '{contact.first_name}' - * i.e 'Hello Alan' => converted to => 'Alan' - * - * @param string $parsedString - * @param string $defaultGreeting - * @param bool $addressMergeGreetings - * @param string $greetingType - * - * @return mixed - */ - public static function _trimNonTokens( - &$parsedString, $defaultGreeting, - $addressMergeGreetings, $greetingType = 'postal_greeting' - ) { - if (!empty($addressMergeGreetings[$greetingType])) { - $greetingLabel = $addressMergeGreetings[$greetingType]; - } - $greetingLabel = empty($greetingLabel) ? $defaultGreeting : $greetingLabel; - - $stringsToBeReplaced = preg_replace('/(\{[a-zA-Z._ ]+\})/', ';;', $greetingLabel); - $stringsToBeReplaced = explode(';;', $stringsToBeReplaced); - foreach ($stringsToBeReplaced as $key => $string) { - // to keep one space - $stringsToBeReplaced[$key] = ltrim($string); - } - $parsedString = str_replace($stringsToBeReplaced, "", $parsedString); - - return $parsedString; - } - - /** + * @param \CRM_Export_BAO_ExportProcessor $processor * @param $sql * @param array $exportParams * @param bool $sharedAddress * * @return array */ - public static function _buildMasterCopyArray($sql, $exportParams, $sharedAddress = FALSE) { + public static function _buildMasterCopyArray($processor, $sql, $exportParams, $sharedAddress = FALSE) { static $contactGreetingTokens = []; $addresseeOptions = CRM_Core_OptionGroup::values('addressee'); @@ -834,7 +802,7 @@ public static function _buildMasterCopyArray($sql, $exportParams, $sharedAddress $merge[$masterID]['postalGreeting'] = $exportParams['postal_greeting_other']; } elseif ($copyPostalGreeting) { - self::_trimNonTokens($copyPostalGreeting, + $processor->trimNonTokensFromAddressString($copyPostalGreeting, $postalOptions[$dao->copy_postal_greeting_id], $exportParams ); @@ -850,7 +818,7 @@ public static function _buildMasterCopyArray($sql, $exportParams, $sharedAddress $merge[$masterID]['addressee'] = $exportParams['addressee_other']; } elseif ($copyAddressee) { - self::_trimNonTokens($copyAddressee, + $processor->trimNonTokensFromAddressString($copyAddressee, $addresseeOptions[$dao->copy_addressee_id], $exportParams, 'addressee' ); diff --git a/CRM/Export/BAO/ExportProcessor.php b/CRM/Export/BAO/ExportProcessor.php index b41592a1623..e8dce0468f2 100644 --- a/CRM/Export/BAO/ExportProcessor.php +++ b/CRM/Export/BAO/ExportProcessor.php @@ -1609,4 +1609,37 @@ public function determineReturnProperties() { return $returnProperties; } + /** + * The function unsets static part of the string, if token is the dynamic part. + * + * Example: 'Hello {contact.first_name}' => converted to => '{contact.first_name}' + * i.e 'Hello Alan' => converted to => 'Alan' + * + * @param string $parsedString + * @param string $defaultGreeting + * @param bool $addressMergeGreetings + * @param string $greetingType + * + * @return mixed + */ + public function trimNonTokensFromAddressString( + &$parsedString, $defaultGreeting, + $addressMergeGreetings, $greetingType = 'postal_greeting' + ) { + if (!empty($addressMergeGreetings[$greetingType])) { + $greetingLabel = $addressMergeGreetings[$greetingType]; + } + $greetingLabel = empty($greetingLabel) ? $defaultGreeting : $greetingLabel; + + $stringsToBeReplaced = preg_replace('/(\{[a-zA-Z._ ]+\})/', ';;', $greetingLabel); + $stringsToBeReplaced = explode(';;', $stringsToBeReplaced); + foreach ($stringsToBeReplaced as $key => $string) { + // to keep one space + $stringsToBeReplaced[$key] = ltrim($string); + } + $parsedString = str_replace($stringsToBeReplaced, "", $parsedString); + + return $parsedString; + } + }