Skip to content

Commit

Permalink
Merge pull request #15516 from eileenmcnaughton/part_mult
Browse files Browse the repository at this point in the history
[REF] basic extraction of sendMails functionality along with a small test extension
  • Loading branch information
seamuslee001 authored Oct 16, 2019
2 parents 4cef1bb + d7ade6f commit 86d75e4
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 51 deletions.
109 changes: 62 additions & 47 deletions CRM/Event/Form/Registration.php
Original file line number Diff line number Diff line change
Expand Up @@ -1511,6 +1511,8 @@ protected function getAmountLevel($params, $discountID) {
* @param array $params
* Form values.
* @param int $contactID
*
* @throws \CiviCRM_API3_Exception
*/
public function processRegistration($params, $contactID = NULL) {
$session = CRM_Core_Session::singleton();
Expand Down Expand Up @@ -1620,66 +1622,79 @@ public function processRegistration($params, $contactID = NULL) {
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);
}
}

Expand Down
10 changes: 6 additions & 4 deletions tests/phpunit/CRM/Event/Form/Registration/ConfirmTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,10 @@ public function testPaidSubmit($thousandSeparator) {
/**
* 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([
Expand All @@ -232,8 +233,6 @@ public function testTaxMultipleParticipant() {
'first_name' => 'Participant1',
'last_name' => 'LastName',
'email-Primary' => 'participant1@example.com',
'scriptFee' => '',
'scriptArray' => '',
'additional_participants' => 2,
'payment_processor_id' => 0,
'bypass_payment' => '',
Expand Down Expand Up @@ -286,7 +285,8 @@ public function testTaxMultipleParticipant() {
],
],
]);
$this->callAPISuccessGetCount('Participant', [], 3);
$participants = $this->callAPISuccess('Participant', 'get', [])['values'];
$this->assertCount(3, $participants);
$contribution = $this->callAPISuccessGetSingle(
'Contribution',
[
Expand All @@ -295,6 +295,8 @@ public function testTaxMultipleParticipant() {
);
$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.');
}

/**
Expand Down

0 comments on commit 86d75e4

Please sign in to comment.