From d31d0888ace5432293470e451a6af2847d3828f9 Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Tue, 20 Jun 2017 16:54:59 +0530 Subject: [PATCH] CRM-20747: {contribution.campaign} token not working on Contribution ThankYou letter --- CRM/Contribute/Form/Task/PDFLetterCommon.php | 5 ++--- .../Form/Task/PDFLetterCommonTest.php | 8 ++++++-- tests/phpunit/CiviTest/CiviUnitTestCase.php | 18 +++++++++++++----- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CRM/Contribute/Form/Task/PDFLetterCommon.php b/CRM/Contribute/Form/Task/PDFLetterCommon.php index a010487a2a..7d2cd8bc30 100644 --- a/CRM/Contribute/Form/Task/PDFLetterCommon.php +++ b/CRM/Contribute/Form/Task/PDFLetterCommon.php @@ -246,10 +246,8 @@ class CRM_Contribute_Form_Task_PDFLetterCommon extends CRM_Contact_Form_Task_PDF public static function buildContributionArray($groupBy, $contributionIDs, $returnProperties, $skipOnHold, $skipDeceased, $messageToken, $task, $separator, $isIncludeSoftCredits) { $contributions = $contacts = $notSent = array(); foreach ($contributionIDs as $item => $contributionId) { - // get contribution information - // basic return attributes needed, see below for there usage - $returnValues = array('contact_id', 'total_amount'); + $returnValues = array('contact_id', 'total_amount', 'contribution_campaign_title'); if (!empty($messageToken['contribution'])) { $returnValues = array_merge($messageToken['contribution'], $returnValues); } @@ -258,6 +256,7 @@ class CRM_Contribute_Form_Task_PDFLetterCommon extends CRM_Contact_Form_Task_PDF 'id' => $contributionId, 'return' => $returnValues, )); + $contribution['campaign'] = CRM_Utils_Array::value('contribution_campaign_title', $contribution); $contributions[$contributionId] = $contribution; if ($isIncludeSoftCredits) { diff --git a/tests/phpunit/CRM/Contribute/Form/Task/PDFLetterCommonTest.php b/tests/phpunit/CRM/Contribute/Form/Task/PDFLetterCommonTest.php index 372ad5e7cf..4e7fccf31e 100644 --- a/tests/phpunit/CRM/Contribute/Form/Task/PDFLetterCommonTest.php +++ b/tests/phpunit/CRM/Contribute/Form/Task/PDFLetterCommonTest.php @@ -78,18 +78,18 @@ class CRM_Contribute_Form_Task_PDFLetterCommonTest extends CiviUnitTestCase { ); $customField = $this->callAPISuccess('CustomField', 'create', $params); $customFieldKey = 'custom_' . $customField['id']; + $campaignTitle = 'Test Campaign ' . substr(sha1(rand()), 0, 7); $params = array( 'contact_id' => $this->_individualId, 'total_amount' => 6, + 'campaign_id' => $this->campaignCreate(array('title' => $campaignTitle), FALSE), 'financial_type_id' => 'Donation', $customFieldKey => 'Text_' . substr(sha1(rand()), 0, 7), ); $contributionIDs = $returnProperties = array(); $result = $this->callAPISuccess('Contribution', 'create', $params); $contributionIDs[] = $result['id']; - $result = $this->callAPISuccess('Contribution', 'create', $params); - $contributionIDs[] = $result['id']; $this->hookClass->setHook('civicrm_tokenValues', array($this, 'hookTokenValues')); // assume that there are two token {contribution.financial_type} and @@ -97,6 +97,8 @@ class CRM_Contribute_Form_Task_PDFLetterCommonTest extends CiviUnitTestCase { $messageToken = array( 'contribution' => array( 'financial_type', + 'payment_instrument', + 'campaign', $customFieldKey, ), ); @@ -106,6 +108,8 @@ class CRM_Contribute_Form_Task_PDFLetterCommonTest extends CiviUnitTestCase { $this->assertEquals('Anthony', $contacts[$this->_individualId]['first_name']); $this->assertEquals('emo', $contacts[$this->_individualId]['favourite_emoticon']); $this->assertEquals('Donation', $contributions[$result['id']]['financial_type']); + $this->assertEquals($campaignTitle, $contributions[$result['id']]['campaign']); + $this->assertEquals('Check', $contributions[$result['id']]['payment_instrument']); // CRM-20359: assert that contribution custom field token is rightfully replaced by its value $this->assertEquals($params[$customFieldKey], $contributions[$result['id']][$customFieldKey]); diff --git a/tests/phpunit/CiviTest/CiviUnitTestCase.php b/tests/phpunit/CiviTest/CiviUnitTestCase.php index 37a0bcd77f..c94d2bdc0f 100644 --- a/tests/phpunit/CiviTest/CiviUnitTestCase.php +++ b/tests/phpunit/CiviTest/CiviUnitTestCase.php @@ -1952,12 +1952,15 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { /** * @param array $params * Optional parameters. + * @param bool $reloadConfig + * While enabling CiviCampaign component, we shouldn't always forcibly + * reload config as this hinder hook call in test environment * * @return int * Campaign ID. */ - public function campaignCreate($params = array()) { - $this->enableCiviCampaign(); + public function campaignCreate($params = array(), $reloadConfig = TRUE) { + $this->enableCiviCampaign($reloadConfig); $campaign = $this->callAPISuccess('campaign', 'create', array_merge(array( 'name' => 'big_campaign', 'title' => 'Campaign', @@ -2248,11 +2251,16 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { /** * Enable CiviCampaign Component. + * + * @param bool $reloadConfig + * Force relaod config or not */ - public function enableCiviCampaign() { + public function enableCiviCampaign($reloadConfig = TRUE) { CRM_Core_BAO_ConfigSetting::enableComponent('CiviCampaign'); - // force reload of config object - $config = CRM_Core_Config::singleton(TRUE, TRUE); + if ($reloadConfig) { + // force reload of config object + $config = CRM_Core_Config::singleton(TRUE, TRUE); + } //flush cache by calling with reset $activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, TRUE, 'name', TRUE); } -- 2.25.1