Skip to content

Commit

Permalink
Merge pull request #10000 from eileenmcnaughton/agile
Browse files Browse the repository at this point in the history
CRM-19710 - Preserve is_email_receipt parameter through to email sent
  • Loading branch information
eileenmcnaughton authored Mar 17, 2017
2 parents f037ae5 + 55df121 commit bf4f0b1
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 18 deletions.
73 changes: 55 additions & 18 deletions CRM/Contribute/BAO/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -2322,23 +2322,12 @@ public function loadRelatedObjects(&$input, &$ids, $loadAll = FALSE) {

$ids['contributionType'] = $this->financial_type_id;
$ids['financialType'] = $this->financial_type_id;

$entities = array(
'contact' => 'CRM_Contact_BAO_Contact',
'contributionRecur' => 'CRM_Contribute_BAO_ContributionRecur',
'contributionType' => 'CRM_Financial_BAO_FinancialType',
'financialType' => 'CRM_Financial_BAO_FinancialType',
);
foreach ($entities as $entity => $bao) {
if (!empty($ids[$entity])) {
$this->_relatedObjects[$entity] = new $bao();
$this->_relatedObjects[$entity]->id = $ids[$entity];
if (!$this->_relatedObjects[$entity]->find(TRUE)) {
throw new CRM_Core_Exception($entity . ' could not be loaded');
}
}
if ($this->contribution_page_id) {
$ids['contributionPage'] = $this->contribution_page_id;
}

$this->loadRelatedEntitiesByID($ids);

if (!empty($ids['contributionRecur']) && !$paymentProcessorID) {
$paymentProcessorID = $this->_relatedObjects['contributionRecur']->payment_processor_id;
}
Expand Down Expand Up @@ -2434,6 +2423,7 @@ public function composeMessageArray(&$input, &$ids, &$values, $returnMessageText

//not really sure what params might be passed in but lets merge em into values
$values = array_merge($this->_gatherMessageValues($input, $values, $ids), $values);
$values['is_email_receipt'] = $this->isEmailReceipt($input, $values);
if (!empty($input['receipt_date'])) {
$values['receipt_date'] = $input['receipt_date'];
}
Expand Down Expand Up @@ -2498,7 +2488,7 @@ public function composeMessageArray(&$input, &$ids, &$values, $returnMessageText
if (!empty($input['amount'])) {
$values['totalAmount'] = $input['amount'];
}

// @todo set this in is_email_receipt, based on $this->_relatedObjects.
if ($values['event']['is_email_confirm']) {
$values['is_email_receipt'] = 1;
}
Expand Down Expand Up @@ -2611,8 +2601,14 @@ public function _gatherMessageValues($input, &$values, $ids = array()) {
$values['softContributions'] = $softContributions['soft_credit'];
}
if (isset($this->contribution_page_id)) {
// This is a call we want to use less, in favour of loading related objects.
$values = $this->addContributionPageValuesToValuesHeavyHandedly($values);
if ($this->contribution_page_id) {
// This is precautionary as there are some legacy flows, but it should really be
// loaded by now.
if (!isset($this->_relatedObjects['contributionPage'])) {
$this->loadRelatedEntitiesByID(array('contributionPage' => $this->contribution_page_id));
}
// CRM-8254 - override default currency if applicable
$config = CRM_Core_Config::singleton();
$config->defaultCurrency = CRM_Utils_Array::value(
Expand All @@ -2625,7 +2621,6 @@ public function _gatherMessageValues($input, &$values, $ids = array()) {
// no contribution page -probably back office
else {
// Handle re-print receipt for offline contributions (call from PDF.php - no contribution_page_id)
$values['is_email_receipt'] = 1;
$values['title'] = 'Contribution';
}
// set lineItem for contribution
Expand Down Expand Up @@ -5057,7 +5052,6 @@ protected function addContributionPageValuesToValuesHeavyHandedly(&$values) {
// These are the values that I believe to be useful.
'id',
'title',
'is_email_receipt',
'pay_later_receipt',
'pay_later_text',
'receipt_from_email',
Expand Down Expand Up @@ -5468,4 +5462,47 @@ public static function createProportionalFinancialEntries($entityParams, $lineIt
}
}

/**
* Load entities related to the contribution into $this->_relatedObjects.
*
* @param array $ids
*
* @throws \CRM_Core_Exception
*/
protected function loadRelatedEntitiesByID($ids) {
$entities = array(
'contact' => 'CRM_Contact_BAO_Contact',
'contributionRecur' => 'CRM_Contribute_BAO_ContributionRecur',
'contributionType' => 'CRM_Financial_BAO_FinancialType',
'financialType' => 'CRM_Financial_BAO_FinancialType',
'contributionPage' => 'CRM_Contribute_BAO_ContributionPage',
);
foreach ($entities as $entity => $bao) {
if (!empty($ids[$entity])) {
$this->_relatedObjects[$entity] = new $bao();
$this->_relatedObjects[$entity]->id = $ids[$entity];
if (!$this->_relatedObjects[$entity]->find(TRUE)) {
throw new CRM_Core_Exception($entity . ' could not be loaded');
}
}
}
}

/**
* Should an email receipt be sent for this contribution when complete.
*
* @param array $input
*
* @return mixed
*/
protected function isEmailReceipt($input) {
if (isset($input['is_email_receipt'])) {
return $input['is_email_receipt'];
}
if (!empty($this->_relatedObjects['contribution_page_id'])) {
return $this->_relatedObjects['contribution_page_id']->is_email_receipt;
}
return TRUE;
}

}
1 change: 1 addition & 0 deletions api/v3/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ function civicrm_api3_contribution_sendconfirmation($params) {
'payment_processor_id',
);
$input = array_intersect_key($params, array_flip($allowedParams));
$input['is_email_receipt'] = TRUE;
CRM_Contribute_BAO_Contribution::sendMail($input, $ids, $params['id'], $values);
}

Expand Down
31 changes: 31 additions & 0 deletions tests/phpunit/api/v3/ContributionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2473,6 +2473,37 @@ public function testCompleteTransactionForRecurring() {
$this->mut->stop();
$this->revertTemplateToReservedTemplate();
}
/**
* CRM-19710 - Test to ensure that completetransaction respects the input for is_email_receipt setting.
*
* If passed in it will override the default from contribution page.
*/
public function testCompleteTransactionWithEmailReceiptInputTrue() {
$mut = new CiviMailUtils($this, TRUE);
$this->createLoggedInUser();
// Create a Contribution Page with is_email_receipt = FALSE
$contributionPage = $this->callAPISuccess('ContributionPage', 'create', array(
'receipt_from_name' => 'Mickey Mouse',
'receipt_from_email' => '[email protected]',
'title' => "Test Contribution Page",
'financial_type_id' => 1,
'currency' => 'CAD',
'is_monetary' => TRUE,
'is_email_receipt' => 0,
));
$this->_params['contribution_page_id'] = $contributionPage['id'];
$params = array_merge($this->_params, array('contribution_status_id' => 2, 'receipt_date' => 'now'));
$contribution = $this->callAPISuccess('contribution', 'create', $params);
// Complete the transaction overriding is_email_receipt to = TRUE
$this->callAPISuccess('contribution', 'completetransaction', array(
'id' => $contribution['id'],
'is_email_receipt' => 1,
));
$mut->checkMailLog(array(
'Please print this receipt for your records.',
));
$mut->stop();
}

/**
* Complete the transaction using the template with all the possible.
Expand Down

0 comments on commit bf4f0b1

Please sign in to comment.