From: eileen Date: Tue, 2 Feb 2021 01:15:25 +0000 (+1300) Subject: [REF] Stop passing contributionPageID to isEmailReceipt X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=82b1ec8f97049843b2edc4d773cbb2623bf70919;p=civicrm-core.git [REF] Stop passing contributionPageID to isEmailReceipt By switching to passing in contributionID instead we can significantly simplify this. It could cause an extra query in some cases but the query would be very quick based on my previous query reduction efforts and this will help us remove a bunch of other code --- diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index eb435273de..890183b536 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -10,7 +10,7 @@ */ use Civi\Api4\Activity; -use Civi\Api4\ContributionPage; +use Civi\Api4\Contribution; use Civi\Api4\ContributionRecur; use Civi\Api4\PaymentProcessor; use Civi\Api4\PledgePayment; @@ -1258,14 +1258,13 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * Should an email receipt be sent for this contribution on completion. * * @param array $input - * @param int $contributionPageID + * @param int $contributionID * @param int $recurringContributionID * * @return bool * @throws \API_Exception - * @throws \Civi\API\Exception\UnauthorizedException */ - protected static function isEmailReceipt(array $input, $contributionPageID, $recurringContributionID): bool { + protected static function isEmailReceipt(array $input, int $contributionID, $recurringContributionID): bool { if (isset($input['is_email_receipt'])) { return (bool) $input['is_email_receipt']; } @@ -1278,8 +1277,14 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { // https://lab.civicrm.org/dev/core/issues/1245 return (bool) ContributionRecur::get(FALSE)->addWhere('id', '=', $recurringContributionID)->addSelect('is_email_receipt')->execute()->first()['is_email_receipt']; } - if ($contributionPageID) { - return (bool) ContributionPage::get(FALSE)->addWhere('id', '=', $contributionPageID)->addSelect('is_email_receipt')->execute()->first()['is_email_receipt']; + $contributionPage = Contribution::get(FALSE) + ->addSelect('contribution_page.is_email_receipt') + ->addWhere('contribution_page_id', 'IS NOT NULL') + ->addWhere('id', '=', $contributionID) + ->execute()->first(); + + if (!empty($contributionPage)) { + return (bool) $contributionPage['contribution_page.is_email_receipt']; } // This would be the case for backoffice (where is_email_receipt is not passed in) or events, where Event::sendMail will filter // again anyway. @@ -4307,7 +4312,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac CRM_Contribute_BAO_ContributionRecur::updateRecurLinkedPledge($contributionID, $recurringContributionID, $contributionParams['contribution_status_id'], $input['amount']); - if (self::isEmailReceipt($input, $contribution->contribution_page_id, $recurringContributionID)) { + if (self::isEmailReceipt($input, $contributionID, $recurringContributionID)) { civicrm_api3('Contribution', 'sendconfirmation', [ 'id' => $contributionID, 'payment_processor_id' => $paymentProcessorId, diff --git a/tests/phpunit/api/v3/ContributionPageTest.php b/tests/phpunit/api/v3/ContributionPageTest.php index 4ffb1fa027..c9f7317acb 100644 --- a/tests/phpunit/api/v3/ContributionPageTest.php +++ b/tests/phpunit/api/v3/ContributionPageTest.php @@ -421,7 +421,7 @@ class api_v3_ContributionPageTest extends CiviUnitTestCase { * * @throws \CRM_Core_Exception */ - public function testSubmitMembershipBlockNotSeparatePaymentWithEmail() { + public function testSubmitMembershipBlockNotSeparatePaymentWithEmail(): void { $mut = new CiviMailUtils($this, TRUE); $this->setUpMembershipContributionPage(); $this->addProfile('supporter_profile', $this->_ids['contribution_page']);