CRM-20747: {contribution.campaign} token not working on Contribution ThankYou letter
authordeb.monish <monish.deb@jmaconsulting.biz>
Tue, 20 Jun 2017 11:24:59 +0000 (16:54 +0530)
committerdeb.monish <monish.deb@jmaconsulting.biz>
Wed, 28 Jun 2017 08:56:41 +0000 (14:26 +0530)
CRM/Contribute/Form/Task/PDFLetterCommon.php
tests/phpunit/CRM/Contribute/Form/Task/PDFLetterCommonTest.php
tests/phpunit/CiviTest/CiviUnitTestCase.php

index a010487a2a29233aa874c0230f92d8ae346a4bec..7d2cd8bc300bbe10bd2a351251b6229e3c98e431 100644 (file)
@@ -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) {
index 372ad5e7cf857a5e02fa0d4aae981602bfbbef1b..4e7fccf31ed464e143e6bfbb76df33ed85d2e694 100644 (file)
@@ -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]);
 
index 37a0bcd77f57c03d42c968d843a1f29be542fc48..c94d2bdc0f22e37e4de29cef906b3f495029111f 100644 (file)
@@ -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);
   }