From d7ade6feb2e1bb601d10f8ebe9ea1aa1013dd125 Mon Sep 17 00:00:00 2001 From: eileen Date: Tue, 15 Oct 2019 22:39:57 +1300 Subject: [PATCH] [REF] basic extraction of sendMails functionality along with a small test extension --- CRM/Event/Form/Registration.php | 109 ++++++++++-------- .../Event/Form/Registration/ConfirmTest.php | 10 +- 2 files changed, 68 insertions(+), 51 deletions(-) diff --git a/CRM/Event/Form/Registration.php b/CRM/Event/Form/Registration.php index 522dc6fcf0..d12d4ed4cd 100644 --- a/CRM/Event/Form/Registration.php +++ b/CRM/Event/Form/Registration.php @@ -1511,6 +1511,8 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { * @param array $params * Form values. * @param int $contactID + * + * @throws \CiviCRM_API3_Exception */ public function processRegistration($params, $contactID = NULL) { $session = CRM_Core_Session::singleton(); @@ -1620,66 +1622,79 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { if ($this->_contributeMode != 'checkout' || $this->_contributeMode != 'notify' ) { - $isTest = FALSE; - if ($this->_action & CRM_Core_Action::PREVIEW) { - $isTest = TRUE; - } + $this->sendMails($params, $registerByID, $participantCount); + } + } - //handle if no additional participant. - if (!$registerByID) { - $registerByID = $this->get('registerByID'); - } - $primaryContactId = $this->get('primaryContactId'); + /** + * Send Mail to participants. + * + * @param $params + * @param $registerByID + * @param array $participantCount + * + * @throws \CiviCRM_API3_Exception + */ + private function sendMails($params, $registerByID, array $participantCount) { + $isTest = FALSE; + if ($this->_action & CRM_Core_Action::PREVIEW) { + $isTest = TRUE; + } - //build an array of custom profile and assigning it to template. - $additionalIDs = CRM_Event_BAO_Event::buildCustomProfile($registerByID, NULL, - $primaryContactId, $isTest, TRUE - ); + //handle if no additional participant. + if (!$registerByID) { + $registerByID = $this->get('registerByID'); + } + $primaryContactId = $this->get('primaryContactId'); - //lets carry all participant params w/ values. - foreach ($additionalIDs as $participantID => $contactId) { - $participantNum = NULL; - if ($participantID == $registerByID) { - $participantNum = 0; - } - else { - if ($participantNum = array_search('participant', $participantCount)) { - unset($participantCount[$participantNum]); - } - } + //build an array of custom profile and assigning it to template. + $additionalIDs = CRM_Event_BAO_Event::buildCustomProfile($registerByID, NULL, + $primaryContactId, $isTest, TRUE + ); - if ($participantNum === NULL) { - break; + //lets carry all participant params w/ values. + foreach ($additionalIDs as $participantID => $contactId) { + $participantNum = NULL; + if ($participantID == $registerByID) { + $participantNum = 0; + } + else { + if ($participantNum = array_search('participant', $participantCount)) { + unset($participantCount[$participantNum]); } + } - //carry the participant submitted values. - $this->_values['params'][$participantID] = $params[$participantNum]; + if ($participantNum === NULL) { + break; } - //lets send mails to all with meanigful text, CRM-4320. - $this->assign('isOnWaitlist', $this->_allowWaitlist); - $this->assign('isRequireApproval', $this->_requireApproval); + //carry the participant submitted values. + $this->_values['params'][$participantID] = $params[$participantNum]; + } + + //lets send mails to all with meanigful text, CRM-4320. + $this->assign('isOnWaitlist', $this->_allowWaitlist); + $this->assign('isRequireApproval', $this->_requireApproval); - foreach ($additionalIDs as $participantID => $contactId) { - if ($participantID == $registerByID) { - //set as Primary Participant - $this->assign('isPrimary', 1); + foreach ($additionalIDs as $participantID => $contactId) { + if ($participantID == $registerByID) { + //set as Primary Participant + $this->assign('isPrimary', 1); - $customProfile = CRM_Event_BAO_Event::buildCustomProfile($participantID, $this->_values, NULL, $isTest); + $customProfile = CRM_Event_BAO_Event::buildCustomProfile($participantID, $this->_values, NULL, $isTest); - if (count($customProfile)) { - $this->assign('customProfile', $customProfile); - $this->set('customProfile', $customProfile); - } - } - else { - $this->assign('isPrimary', 0); - $this->assign('customProfile', NULL); + if (count($customProfile)) { + $this->assign('customProfile', $customProfile); + $this->set('customProfile', $customProfile); } - - //send Confirmation mail to Primary & additional Participants if exists - CRM_Event_BAO_Event::sendMail($contactId, $this->_values, $participantID, $isTest); } + else { + $this->assign('isPrimary', 0); + $this->assign('customProfile', NULL); + } + + //send Confirmation mail to Primary & additional Participants if exists + CRM_Event_BAO_Event::sendMail($contactId, $this->_values, $participantID, $isTest); } } diff --git a/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php b/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php index f07544b84a..12a03668cc 100644 --- a/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php +++ b/tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php @@ -214,9 +214,10 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase { /** * Test for Tax amount for multiple participant. * - * @throws \Exception + * @throws \CRM_Core_Exception */ public function testTaxMultipleParticipant() { + $mut = new CiviMailUtils($this); $params = ['is_monetary' => 1, 'financial_type_id' => 1]; $event = $this->eventCreate($params); CRM_Event_Form_Registration_Confirm::testSubmit([ @@ -232,8 +233,6 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase { 'first_name' => 'Participant1', 'last_name' => 'LastName', 'email-Primary' => 'participant1@example.com', - 'scriptFee' => '', - 'scriptArray' => '', 'additional_participants' => 2, 'payment_processor_id' => 0, 'bypass_payment' => '', @@ -286,7 +285,8 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase { ], ], ]); - $this->callAPISuccessGetCount('Participant', [], 3); + $participants = $this->callAPISuccess('Participant', 'get', [])['values']; + $this->assertCount(3, $participants); $contribution = $this->callAPISuccessGetSingle( 'Contribution', [ @@ -295,6 +295,8 @@ class CRM_Event_Form_Registration_ConfirmTest extends CiviUnitTestCase { ); $this->assertEquals($contribution['tax_amount'], 40, 'Invalid Tax amount.'); $this->assertEquals($contribution['total_amount'], 440, 'Invalid Tax amount.'); + $mailSent = $mut->getAllMessages(); + $this->assertCount(3, $mailSent, 'Three mails should have been sent to the 3 participants.'); } /** -- 2.25.1