Skip to content

Commit 6dd1782

Browse files
Merge pull request civicrm#14658 from MegaphoneJon/mail-46
mail#46 - show label, not value, on contribution custom field tokens
2 parents e6b7b59 + 596a28f commit 6dd1782

4 files changed

Lines changed: 35 additions & 14 deletions

File tree

CRM/Contribute/BAO/Contribution.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5907,14 +5907,38 @@ public static function replaceContributionTokens(
59075907
}
59085908
$contributionDetails = [];
59095909
foreach ($contributionIds as $id) {
5910-
$result = civicrm_api3('Contribution', 'get', ['id' => $id]);
5910+
$result = self::getContributionTokenValues($id, $messageToken);
59115911
$contributionDetails[$result['values'][$result['id']]['contact_id']]['subject'] = CRM_Utils_Token::replaceContributionTokens($subject, $result, FALSE, $subjectToken, FALSE, $escapeSmarty);
59125912
$contributionDetails[$result['values'][$result['id']]['contact_id']]['text'] = CRM_Utils_Token::replaceContributionTokens($text, $result, FALSE, $messageToken, FALSE, $escapeSmarty);
59135913
$contributionDetails[$result['values'][$result['id']]['contact_id']]['html'] = CRM_Utils_Token::replaceContributionTokens($html, $result, FALSE, $messageToken, FALSE, $escapeSmarty);
59145914
}
59155915
return $contributionDetails;
59165916
}
59175917

5918+
/**
5919+
* Get the contribution fields for $id and display labels where
5920+
* appropriate (if the token is present).
5921+
*
5922+
* @param int $id
5923+
* @param array $messageToken
5924+
* @return array
5925+
*/
5926+
public static function getContributionTokenValues($id, $messageToken) {
5927+
if (empty($id)) {
5928+
return [];
5929+
}
5930+
$result = civicrm_api3('Contribution', 'get', ['id' => $id]);
5931+
// lab.c.o mail#46 - show labels, not values, for custom fields with option values.
5932+
if (!empty($messageToken)) {
5933+
foreach ($result['values'][$id] as $fieldName => $fieldValue) {
5934+
if (strpos($fieldName, 'custom_') === 0 && array_search($fieldName, $messageToken['contribution']) !== FALSE) {
5935+
$result['values'][$id][$fieldName] = CRM_Core_BAO_CustomField::displayValue($result['values'][$id][$fieldName], $fieldName);
5936+
}
5937+
}
5938+
}
5939+
return $result;
5940+
}
5941+
59185942
/**
59195943
* Get invoice_number for contribution.
59205944
*

CRM/Contribute/Form/Task/PDFLetterCommon.php

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -257,16 +257,7 @@ private static function resolveTokens($html_message, $contact, $contribution, $m
257257
public static function buildContributionArray($groupBy, $contributionIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $task, $separator, $isIncludeSoftCredits) {
258258
$contributions = $contacts = [];
259259
foreach ($contributionIDs as $item => $contributionId) {
260-
// Basic return attributes available to the template.
261-
$returnValues = ['contact_id', 'total_amount', 'financial_type', 'receive_date', 'contribution_campaign_title'];
262-
if (!empty($messageToken['contribution'])) {
263-
$returnValues = array_merge($messageToken['contribution'], $returnValues);
264-
}
265-
// retrieve contribution tokens listed in $returnProperties using Contribution.Get API
266-
$contribution = civicrm_api3('Contribution', 'getsingle', [
267-
'id' => $contributionId,
268-
'return' => $returnValues,
269-
]);
260+
$contribution = CRM_Contribute_BAO_Contribution::getContributionTokenValues($contributionId, $messageToken)['values'][$contributionId];
270261
$contribution['campaign'] = CRM_Utils_Array::value('contribution_campaign_title', $contribution);
271262
$contributions[$contributionId] = $contribution;
272263

tests/phpunit/CRM/Contribute/BAO/ContributionTest.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,6 +1466,8 @@ public function testProcessOnBehalfOrganization() {
14661466
* This function tests whether the contribution tokens are replaced with values from contribution.
14671467
*/
14681468
public function testReplaceContributionTokens() {
1469+
$customGroup = $this->customGroupCreate(['extends' => 'Contribution', 'title' => 'contribution stuff']);
1470+
$customField = $this->customFieldOptionValueCreate($customGroup, 'myCustomField');
14691471
$contactId1 = $this->individualCreate();
14701472
$params = array(
14711473
'contact_id' => $contactId1,
@@ -1476,6 +1478,7 @@ public function testReplaceContributionTokens() {
14761478
'invoice_id' => 67890,
14771479
'source' => 'SSF',
14781480
'contribution_status_id' => 2,
1481+
"custom_{$customField['id']}" => 'value1',
14791482
);
14801483
$contribution1 = $this->contributionCreate($params);
14811484
$contactId2 = $this->individualCreate();
@@ -1488,6 +1491,7 @@ public function testReplaceContributionTokens() {
14881491
'invoice_id' => 12345,
14891492
'source' => 'ABC',
14901493
'contribution_status_id' => 1,
1494+
"custom_{$customField['id']}" => 'value2',
14911495
);
14921496
$contribution2 = $this->contributionCreate($params);
14931497
$ids = array($contribution1, $contribution2);
@@ -1496,7 +1500,8 @@ public function testReplaceContributionTokens() {
14961500
$text = "Contribution Amount: {contribution.total_amount}";
14971501
$html = "<p>Contribution Source: {contribution.contribution_source}</p></br>
14981502
<p>Contribution Invoice ID: {contribution.invoice_id}</p></br>
1499-
<p>Contribution Receive Date: {contribution.receive_date}</p></br>";
1503+
<p>Contribution Receive Date: {contribution.receive_date}</p></br>
1504+
<p>Contribution Custom Field: {contribution.custom_{$customField['id']}}</p></br>";
15001505

15011506
$subjectToken = CRM_Utils_Token::getTokens($subject);
15021507
$messageToken = CRM_Utils_Token::getTokens($text);
@@ -1515,7 +1520,8 @@ public function testReplaceContributionTokens() {
15151520
$this->assertEquals("Contribution Amount: $ 100.00", $contributionDetails[$contactId1]['text'], "The text does not match");
15161521
$this->assertEquals("<p>Contribution Source: ABC</p></br>
15171522
<p>Contribution Invoice ID: 12345</p></br>
1518-
<p>Contribution Receive Date: May 11th, 2015</p></br>", $contributionDetails[$contactId2]['html'], "The html does not match");
1523+
<p>Contribution Receive Date: May 11th, 2015</p></br>
1524+
<p>Contribution Custom Field: Label2</p></br>", $contributionDetails[$contactId2]['html'], "The html does not match");
15191525
}
15201526

15211527
/**

tests/phpunit/CiviTest/CiviUnitTestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1684,7 +1684,7 @@ public function customFieldOptionValueCreate($customGroup, $name, $extraParams =
16841684
'option_value' => array('value1', 'value2'),
16851685
'option_name' => array($name . '_1', $name . '_2'),
16861686
'option_weight' => array(1, 2),
1687-
'option_status' => 1,
1687+
'option_status' => array(1, 1),
16881688
);
16891689

16901690
$params = array_merge($fieldParams, $optionGroup, $optionValue, $extraParams);

0 commit comments

Comments
 (0)