$cc = NULL,
$bcc = NULL,
$contactIds = NULL,
- $additionalDetails = NULL
+ $additionalDetails = NULL,
+ $contributionIds = NULL
) {
// get the contact details of logged in contact, which we set as from email
if ($userID == NULL) {
$escapeSmarty = TRUE;
}
+ $contributionDetails = array();
+ if (!empty($contributionIds)) {
+ $contributionDetails = CRM_Contribute_BAO_Contribution::replaceContributionTokens(
+ $contributionIds,
+ $subject,
+ $subjectToken,
+ $text,
+ $html,
+ $messageToken,
+ $escapeSmarty
+ );
+ }
+
$sent = $notSent = array();
foreach ($contactDetails as $values) {
$contactId = $values['contact_id'];
$emailAddress = $values['email'];
+ if (!empty($contributionDetails)) {
+ $subject = $contributionDetails[$contactId]['subject'];
+ $text = $contributionDetails[$contactId]['text'];
+ $html = $contributionDetails[$contactId]['html'];
+ }
+
if (!empty($details) && is_array($details["{$contactId}"])) {
// unset email from details since it always returns primary email address
unset($details["{$contactId}"]['email']);
}
}
+ $contributionIds = array();
+ if ($form->getVar('_contributionIds')) {
+ $contributionIds = $form->getVar('_contributionIds');
+ }
+
// send the mail
list($sent, $activityId) = CRM_Activity_BAO_Activity::sendEmail(
$formattedContactDetails,
$cc,
$bcc,
array_keys($form->_toContactDetails),
- $additionalDetails
+ $additionalDetails,
+ $contributionIds
);
$followupStatus = '';
return TRUE;
}
+ /**
+ * Function to replace contribution tokens.
+ *
+ * @param array $contributionIds
+ *
+ * @param string $subject
+ *
+ * @param array $subjectToken
+ *
+ * @param string $text
+ *
+ * @param string $html
+ *
+ * @param array $messageToken
+ *
+ * @param bool $escapeSmarty
+ *
+ * @return array
+ */
+ public static function replaceContributionTokens(
+ $contributionIds,
+ $subject,
+ $subjectToken,
+ $text,
+ $html,
+ $messageToken,
+ $escapeSmarty
+ ) {
+ if (empty($contributionIds)) {
+ return array();
+ }
+ $contributionDetails = array();
+ foreach ($contributionIds as $id) {
+ $result = civicrm_api3('Contribution', 'get', array('id' => $id));
+ $contributionDetails[$result['values'][$result['id']]['contact_id']]['subject'] = CRM_Utils_Token::replaceContributionTokens($subject, $result, FALSE, $subjectToken, FALSE, $escapeSmarty);
+ $contributionDetails[$result['values'][$result['id']]['contact_id']]['text'] = CRM_Utils_Token::replaceContributionTokens($text, $result, FALSE, $messageToken, FALSE, $escapeSmarty);
+ $contributionDetails[$result['values'][$result['id']]['contact_id']]['html'] = CRM_Utils_Token::replaceContributionTokens($html, $result, FALSE, $messageToken, FALSE, $escapeSmarty);
+ }
+ return $contributionDetails;
+ }
+
}
*/
public function listTokens() {
$tokens = CRM_Core_SelectValues::contactTokens();
+ $tokens = array_merge(CRM_Core_SelectValues::contributionTokens(), $tokens);
return $tokens;
}
return array($contribution, $financialAccount);
}
+ /**
+ * Test for replaceContributionTokens.
+ * This function tests whether the contribution tokens are replaced with values from contribution.
+ */
+ public function testReplaceContributionTokens() {
+ $contactId1 = $this->individualCreate();
+ $params = array(
+ 'contact_id' => $contactId1,
+ 'receive_date' => '20120511',
+ 'total_amount' => 100.00,
+ 'financial_type_id' => 1,
+ 'trxn_id' => 12345,
+ 'invoice_id' => 67890,
+ 'source' => 'SSF',
+ 'contribution_status_id' => 2,
+ );
+ $contribution1 = $this->contributionCreate($params);
+ $contactId2 = $this->individualCreate();
+ $params = array(
+ 'contact_id' => $contactId2,
+ 'receive_date' => '20150511',
+ 'total_amount' => 200.00,
+ 'financial_type_id' => 1,
+ 'trxn_id' => 6789,
+ 'invoice_id' => 12345,
+ 'source' => 'ABC',
+ 'contribution_status_id' => 1,
+ );
+ $contribution2 = $this->contributionCreate($params);
+ $ids = array($contribution1, $contribution2);
+
+ $subject = "This is a test for contribution ID: {contribution.contribution_id}";
+ $text = "Contribution Amount: {contribution.total_amount}";
+ $html = "<p>Contribution Source: {contribution.contribution_source}</p></br>
+ <p>Contribution Invoice ID: {contribution.invoice_id}</p></br>
+ <p>Contribution Receive Date: {contribution.receive_date}</p></br>";
+
+ $subjectToken = CRM_Utils_Token::getTokens($subject);
+ $messageToken = CRM_Utils_Token::getTokens($text);
+ $messageToken = array_merge($messageToken, CRM_Utils_Token::getTokens($html));
+
+ $contributionDetails = CRM_Contribute_BAO_Contribution::replaceContributionTokens(
+ $ids,
+ $subject,
+ $subjectToken,
+ $text,
+ $html,
+ $messageToken,
+ TRUE
+ );
+
+ $this->assertEquals("Contribution Amount: $ 100.00", $contributionDetails[$contactId1]['text'], "The text does not match");
+ $this->assertEquals("<p>Contribution Source: ABC</p></br>
+ <p>Contribution Invoice ID: 12345</p></br>
+ <p>Contribution Receive Date: May 11th, 2015</p></br>", $contributionDetails[$contactId2]['html'], "The html does not match");
+ }
+
}