Skip to content

Commit

Permalink
Merge pull request #14797 from eileenmcnaughton/ex_address
Browse files Browse the repository at this point in the history
[REF] [Export] Move function that parses tokens to address processor
  • Loading branch information
colemanw authored Jul 11, 2019
2 parents 42d7f27 + e358ebd commit 2732e58
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 38 deletions.
44 changes: 6 additions & 38 deletions CRM/Export/BAO/Export.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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) {
Expand Down Expand Up @@ -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');
Expand Down Expand Up @@ -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
);
Expand All @@ -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'
);
Expand Down
33 changes: 33 additions & 0 deletions CRM/Export/BAO/ExportProcessor.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

}

0 comments on commit 2732e58

Please sign in to comment.