3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.6 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
32 * @copyright CiviCRM LLC (c) 2004-2014
38 * This class generates form components for processing Event
41 class CRM_Event_Form_Registration_AdditionalParticipant
extends CRM_Event_Form_Registration
{
44 * The defaults involved in this page.
46 public $_defaults = array();
49 * Pre-registered additional participant id.
51 public $additionalParticipantId = NULL;
54 * Set variables up before form is built.
58 public function preProcess() {
61 $participantNo = substr($this->_name
, 12);
63 //lets process in-queue participants.
64 if ($this->_participantId
&& $this->_additionalParticipantIds
) {
65 $this->_additionalParticipantId
= CRM_Utils_Array
::value($participantNo, $this->_additionalParticipantIds
);
68 $participantCnt = $participantNo +
1;
69 $this->assign('formId', $participantNo);
70 $this->_params
= array();
71 $this->_params
= $this->get('params');
73 $participantTot = $this->_params
[0]['additional_participants'] +
1;
74 $skipCount = count(array_keys($this->_params
, "skip"));
76 $this->assign('skipCount', $skipCount);
78 CRM_Utils_System
::setTitle(ts('Register Participant %1 of %2', array(1 => $participantCnt, 2 => $participantTot)));
80 //CRM-4320, hack to check last participant.
81 $this->_lastParticipant
= FALSE;
82 if ($participantTot == $participantCnt) {
83 $this->_lastParticipant
= TRUE;
85 $this->assign('lastParticipant', $this->_lastParticipant
);
89 * Set default values for the form. For edit/view mode
90 * the default values are retrieved from the database
95 public function setDefaultValues() {
96 $defaults = $unsetSubmittedOptions = array();
98 //fix for CRM-3088, default value for discount set.
99 if (!empty($this->_values
['discount'])) {
100 $discountId = CRM_Core_BAO_Discount
::findSet($this->_eventId
, 'civicrm_event');
101 if ($discountId && !empty($this->_values
['event']['default_discount_fee_id'])) {
102 $discountKey = CRM_Core_DAO
::getFieldValue("CRM_Core_DAO_OptionValue", $this->_values
['event']['default_discount_fee_id'], 'weight', 'id'
104 $defaults['amount'] = key(array_slice($this->_values
['discount'][$discountId], $discountKey - 1, $discountKey, TRUE));
107 if ($this->_priceSetId
) {
108 foreach ($this->_feeBlock
as $key => $val) {
109 if (empty($val['options'])) {
113 $optionsFull = CRM_Utils_Array
::value('option_full_ids', $val, array());
114 foreach ($val['options'] as $keys => $values) {
115 if ($values['is_default'] && !in_array($keys, $optionsFull)) {
116 if ($val['html_type'] == 'CheckBox') {
117 $defaults["price_{$key}"][$keys] = 1;
120 $defaults["price_{$key}"] = $keys;
124 if (!empty($optionsFull)) {
125 $unsetSubmittedOptions[$val['id']] = $optionsFull;
130 //CRM-4320, setdefault additional participant values.
131 if ($this->_allowConfirmation
&& $this->_additionalParticipantId
) {
132 //hack to get set default from eventFees.php
133 $this->_discountId
= $discountId;
134 $this->_pId
= $this->_additionalParticipantId
;
135 $this->_contactId
= CRM_Core_DAO
::getFieldValue('CRM_Event_DAO_Participant', $this->_additionalParticipantId
, 'contact_id');
136 $participantDefaults = CRM_Event_Form_EventFees
::setDefaultValues($this);
137 $participantDefaults = array_merge($this->_defaults
, $participantDefaults);
138 // use primary email address if billing email address is empty
139 if (empty($this->_defaults
["email-{$this->_bltID}"]) &&
140 !empty($this->_defaults
["email-Primary"])
142 $participantDefaults["email-{$this->_bltID}"] = $this->_defaults
["email-Primary"];
144 $defaults = array_merge($defaults, $participantDefaults);
147 $defaults = array_merge($this->_defaults
, $defaults);
149 //reset values for all options those are full.
150 if (!empty($unsetSubmittedOptions) && empty($_POST)) {
151 $this->resetElementValue($unsetSubmittedOptions);
154 //load default campaign from page.
155 if (array_key_exists('participant_campaign_id', $this->_fields
)) {
156 $defaults['participant_campaign_id'] = CRM_Utils_Array
::value('campaign_id', $this->_values
['event']);
163 * Build the form object.
167 public function buildQuickForm() {
168 $config = CRM_Core_Config
::singleton();
169 $button = substr($this->controller
->getButtonName(), -4);
171 $this->add('hidden', 'scriptFee', NULL);
172 $this->add('hidden', 'scriptArray', NULL);
174 if ($this->_values
['event']['is_monetary']) {
175 CRM_Event_Form_Registration_Register
::buildAmount($this);
177 $first_name = $last_name = NULL;
178 $pre = $post = array();
183 if (isset($this->_values
['additional_custom_' . $keys . '_id'])) {
184 $this->buildCustom($this->_values
['additional_custom_' . $keys . '_id'], 'additionalCustom' . ucfirst($keys), TRUE);
185 $
$keys = CRM_Core_BAO_UFGroup
::getFields($this->_values
['additional_custom_' . $keys . '_id']);
191 if (array_key_exists($name, $
$keys) &&
192 CRM_Utils_Array
::value('is_required', CRM_Utils_Array
::value($name, $
$keys))
199 $required = ($button == 'skip' ||
200 $this->_values
['event']['allow_same_participant_emails'] == 1 &&
201 ($first_name && $last_name)
206 if ($this->isLastParticipant(TRUE) && empty($this->_values
['event']['is_monetary'])) {
207 $js = array('onclick' => "return submitOnce(this,'" . $this->_name
. "','" . ts('Processing') . "');");
210 //handle case where user might sart with waiting by group
211 //registration and skip some people and now group fit to
212 //become registered so need to take payment from user.
213 //this case only occurs at dynamic waiting status, CRM-4320
214 $statusMessage = NULL;
215 $allowToProceed = TRUE;
216 $includeSkipButton = TRUE;
217 $this->_resetAllowWaitlist
= FALSE;
219 $pricesetFieldsCount = CRM_Price_BAO_PriceSet
::getPricesetCount($this->_priceSetId
);
221 if ($this->_lastParticipant ||
$pricesetFieldsCount) {
222 //get the participant total.
223 $processedCnt = self
::getParticipantCount($this, $this->_params
, TRUE);
226 if (!$this->_allowConfirmation
&& !empty($this->_params
[0]['bypass_payment']) &&
227 $this->_lastParticipant
230 //get the event spaces.
231 $spaces = $this->_availableRegistrations
;
233 $currentPageMaxCount = 1;
234 if ($pricesetFieldsCount) {
235 $currentPageMaxCount = $pricesetFieldsCount;
238 //we might did reset allow waiting in case of dynamic calculation
239 if (!empty($this->_params
[0]['bypass_payment']) &&
240 is_numeric($spaces) &&
241 $processedCnt > $spaces
243 $this->_allowWaitlist
= TRUE;
244 $this->set('allowWaitlist', TRUE);
247 //lets allow to become a part of runtime waiting list, if primary selected pay later.
248 $realPayLater = FALSE;
249 if (!empty($this->_values
['event']['is_monetary']) && !empty($this->_values
['event']['is_pay_later'])) {
250 $realPayLater = CRM_Utils_Array
::value('is_pay_later', $this->_params
[0]);
253 //truly spaces are greater than required.
254 if (is_numeric($spaces) && $spaces >= ($processedCnt +
$currentPageMaxCount)) {
255 if (CRM_Utils_Array
::value('amount', $this->_params
[0], 0) == 0 ||
$this->_requireApproval
) {
256 $this->_allowWaitlist
= FALSE;
257 $this->set('allowWaitlist', $this->_allowWaitlist
);
258 if ($this->_requireApproval
) {
259 $statusMessage = ts("It looks like you are now registering a group of %1 participants. The event has %2 available spaces (you will not be wait listed). Registration for this event requires approval. You will receive an email once your registration has been reviewed.", array(
260 1 => ++
$processedCnt,
265 $statusMessage = ts("It looks like you are now registering a group of %1 participants. The event has %2 available spaces (you will not be wait listed).", array(
266 1 => ++
$processedCnt,
272 $statusMessage = ts("It looks like you are now registering a group of %1 participants. The event has %2 available spaces (you will not be wait listed). Please go back to the main registration page and reduce the number of additional people. You will also need to complete payment information.", array(
273 1 => ++
$processedCnt,
276 $allowToProceed = FALSE;
278 CRM_Core_Session
::setStatus($statusMessage, ts('Registration Error'), 'error');
280 elseif ($processedCnt == $spaces) {
281 if (CRM_Utils_Array
::value('amount', $this->_params
[0], 0) == 0
282 ||
$realPayLater ||
$this->_requireApproval
284 $this->_resetAllowWaitlist
= TRUE;
285 if ($this->_requireApproval
) {
286 $statusMessage = ts("If you skip this participant there will be enough spaces in the event for your group (you will not be wait listed). Registration for this event requires approval. You will receive an email once your registration has been reviewed.");
289 $statusMessage = ts("If you skip this participant there will be enough spaces in the event for your group (you will not be wait listed).");
293 //hey there is enough space and we require payment.
294 $statusMessage = ts("If you skip this participant there will be enough spaces in the event for your group (you will not be wait listed). Please go back to the main registration page and reduce the number of additional people. You will also need to complete payment information.");
295 $includeSkipButton = FALSE;
300 // for priceset with count
301 if ($pricesetFieldsCount && !empty($this->_values
['event']['has_waitlist']) &&
302 !$this->_allowConfirmation
305 if ($this->_isEventFull
) {
306 $statusMessage = ts('This event is currently full. You are registering for the waiting list. You will be notified if spaces become available.');
308 elseif ($this->_allowWaitlist ||
309 (!$this->_allowWaitlist
&& ($processedCnt +
$pricesetFieldsCount) > $this->_availableRegistrations
)
312 $waitingMsg = ts('It looks like you are registering more participants then there are spaces available. All participants will be added to the waiting list. You will be notified if spaces become available.');
313 $confirmedMsg = ts('It looks like there are enough spaces in this event for your group (you will not be wait listed).');
314 if ($this->_requireApproval
) {
315 $waitingMsg = ts('It looks like you are now registering a group of %1 participants. The event has %2 available spaces (you will not be wait listed). Registration for this event requires approval. You will receive an email once your registration has been reviewed.');
316 $confirmedMsg = ts('It looks there are enough spaces in this event for your group (you will not be wait listed). Registration for this event requires approval. You will receive an email once your registration has been reviewed.');
319 $this->assign('waitingMsg', $waitingMsg);
320 $this->assign('confirmedMsg', $confirmedMsg);
322 $this->assign('availableRegistrations', $this->_availableRegistrations
);
323 $this->assign('currentParticipantCount', $processedCnt);
324 $this->assign('allowGroupOnWaitlist', TRUE);
326 $paymentBypassed = NULL;
327 if (!empty($this->_params
[0]['bypass_payment']) &&
328 !$this->_allowWaitlist
&&
330 !$this->_requireApproval
&&
331 !(CRM_Utils_Array
::value('amount', $this->_params
[0], 0) == 0)
333 $paymentBypassed = ts('Please go back to the main registration page, to complete payment information.');
335 $this->assign('paymentBypassed', $paymentBypassed);
339 $this->assign('statusMessage', $statusMessage);
344 'name' => ts('Go Back'),
345 'spacing' => '  ',
350 if ($allowToProceed) {
351 $buttons = array_merge($buttons, array(
354 'name' => ts('Continue'),
355 'spacing' => ' ',
361 if ($includeSkipButton) {
362 $buttons = array_merge($buttons, array(
365 'name' => ts('Skip Participant'),
367 'icon' => 'seek-next',
373 $this->addButtons($buttons);
374 $this->addFormRule(array('CRM_Event_Form_Registration_AdditionalParticipant', 'formRule'), $this);
380 * @param array $fields
381 * The input form values.
382 * @param array $files
383 * The uploaded files if any.
388 * true if no errors, else array of errors
390 public static function formRule($fields, $files, $self) {
392 //get the button name.
393 $button = substr($self->controller
->getButtonName(), -4);
395 $realPayLater = FALSE;
396 if (!empty($self->_values
['event']['is_monetary']) && !empty($self->_values
['event']['is_pay_later'])) {
397 $realPayLater = CRM_Utils_Array
::value('is_pay_later', $self->_params
[0]);
400 if ($button != 'skip') {
401 //Check that either an email or firstname+lastname is included in the form(CRM-9587)
402 CRM_Event_Form_Registration_Register
::checkProfileComplete($fields, $errors, $self->_eventId
);
404 //Additional Participant can also register for an event only once
405 $isRegistered = CRM_Event_Form_Registration_Register
::checkRegistration($fields, $self, TRUE);
407 if ($self->_values
['event']['allow_same_participant_emails']) {
408 $errors['_qf_default'] = ts('A person is already registered for this event.');
411 $errors["email-{$self->_bltID}"] = ts('A person with this email address is already registered for this event.');
415 //get the complete params.
416 $params = $self->get('params');
418 //take the participant instance.
419 $addParticipantNum = substr($self->_name
, 12);
421 if (is_array($params)) {
422 foreach ($params as $key => $value) {
423 if ($key != $addParticipantNum) {
424 if (!$self->_values
['event']['allow_same_participant_emails']) {
425 //collect all email fields
426 $existingEmails = array();
427 $additionalParticipantEmails = array();
428 if (is_array($value)) {
429 foreach ($value as $key => $val) {
430 if (substr($key, 0, 6) == 'email-' && $val) {
431 $existingEmails[] = $val;
435 foreach ($fields as $key => $val) {
436 if (substr($key, 0, 6) == 'email-' && $val) {
437 $additionalParticipantEmails[] = $val;
441 //check if any emails are common to both arrays
442 if (count(array_intersect($existingEmails, $additionalParticipantEmails))) {
443 $errors[$mailKey] = ts('The email address must be unique for each participant.');
448 // check with first_name and last_name for additional participants
449 if (!empty($value['first_name']) && ($value['first_name'] == CRM_Utils_Array
::value('first_name', $fields)) &&
450 (CRM_Utils_Array
::value('last_name', $value) == CRM_Utils_Array
::value('last_name', $fields))
452 $errors['first_name'] = ts('The first name and last name must be unique for each participant.');
460 //check for atleast one pricefields should be selected
461 if (!empty($fields['priceSetId'])) {
462 $allParticipantParams = $params;
464 //format current participant params.
465 $allParticipantParams[$addParticipantNum] = self
::formatPriceSetParams($self, $fields);
466 $totalParticipants = self
::getParticipantCount($self, $allParticipantParams);
468 //validate price field params.
469 $priceSetErrors = self
::validatePriceSet($self, $allParticipantParams);
470 $errors = array_merge($errors, CRM_Utils_Array
::value($addParticipantNum, $priceSetErrors, array()));
472 if (!$self->_allowConfirmation
&&
473 is_numeric($self->_availableRegistrations
)
475 if (!empty($self->_params
[0]['bypass_payment']) &&
476 !$self->_allowWaitlist
&&
478 !$self->_requireApproval
&&
479 !(CRM_Utils_Array
::value('amount', $self->_params
[0], 0) == 0) &&
480 $totalParticipants < $self->_availableRegistrations
482 $errors['_qf_default'] = ts("Your event registration will be confirmed. Please go back to the main registration page, to complete payment information.");
484 //check for availability of registrations.
485 if (!$self->_allowConfirmation
&& empty($self->_values
['event']['has_waitlist']) &&
486 $totalParticipants > $self->_availableRegistrations
488 $errors['_qf_default'] = ts('It looks like event has only %2 seats available and you are trying to register %1 participants, so could you please select price options accordingly.', array(
489 1 => $totalParticipants,
490 2 => $self->_availableRegistrations
,
497 if ($button == 'skip' && $self->_lastParticipant
&& !empty($fields['priceSetId'])) {
498 $pricesetFieldsCount = CRM_Price_BAO_PriceSet
::getPricesetCount($fields['priceSetId']);
499 if (($pricesetFieldsCount < 1) ||
$self->_allowConfirmation
) {
503 if (!empty($self->_values
['event']['has_waitlist']) && !empty($self->_params
[0]['bypass_payment']) &&
504 !$self->_allowWaitlist
&&
506 !$self->_requireApproval
&&
507 !(CRM_Utils_Array
::value('amount', $self->_params
[0], 0) == 0)
509 $errors['_qf_default'] = ts("You are going to skip the last participant, your event registration will be confirmed. Please go back to the main registration page, to complete payment information.");
513 if ($button != 'skip' &&
514 $self->_values
['event']['is_monetary'] &&
515 !isset($errors['_qf_default']) &&
516 !$self->validatePaymentValues($self, $fields)
518 $errors['_qf_default'] = ts("Your payment information looks incomplete. Please go back to the main registration page, to complete payment information.");
519 $self->set('forcePayement', TRUE);
521 elseif ($button == 'skip') {
522 $self->set('forcePayement', TRUE);
534 public function validatePaymentValues($self, $fields) {
536 if (!empty($self->_params
[0]['bypass_payment']) ||
537 $self->_allowWaitlist ||
538 empty($self->_fields
) ||
539 CRM_Utils_Array
::value('amount', $self->_params
[0]) > 0
544 $validatePayement = FALSE;
545 if (!empty($fields['priceSetId'])) {
547 CRM_Price_BAO_PriceSet
::processAmount($self->_values
['fee'], $fields, $lineItem);
548 if ($fields['amount'] > 0) {
549 $validatePayement = TRUE;
550 // $self->_forcePayement = true;
554 elseif (!empty($fields['amount']) &&
555 (CRM_Utils_Array
::value('value', $self->_values
['fee'][$fields['amount']]) > 0)
557 $validatePayement = TRUE;
560 if (!$validatePayement) {
566 CRM_Core_Form
::validateMandatoryFields($self->_fields
, $fields, $errors);
568 // make sure that credit card number and cvv are valid
569 CRM_Core_Payment_Form
::validateCreditCard($self->_params
[0], $errors);
575 foreach (CRM_Contact_BAO_Contact
::$_greetingTypes as $greeting) {
576 if ($greetingType = CRM_Utils_Array
::value($greeting, $self->_params
[0])) {
577 $customizedValue = CRM_Core_OptionGroup
::getValue($greeting, 'Customized', 'name');
578 if ($customizedValue == $greetingType && empty($self->_params
[0][$greeting . '_custom'])) {
586 * Process the form submission.
591 public function postProcess() {
592 //get the button name.
593 $button = substr($this->controller
->getButtonName(), -4);
595 //take the participant instance.
596 $addParticipantNum = substr($this->_name
, 12);
598 //user submitted params.
599 $params = $this->controller
->exportValues($this->_name
);
601 if (!$this->_allowConfirmation
) {
602 // check if the participant is already registered
603 $params['contact_id'] = CRM_Event_Form_Registration_Register
::checkRegistration($params, $this, TRUE, TRUE);
606 //carry campaign to partcipants.
607 if (array_key_exists('participant_campaign_id', $params)) {
608 $params['campaign_id'] = $params['participant_campaign_id'];
611 $params['campaign_id'] = CRM_Utils_Array
::value('campaign_id', $this->_values
['event']);
614 // if waiting is enabled
615 if (!$this->_allowConfirmation
&&
616 is_numeric($this->_availableRegistrations
)
618 $this->_allowWaitlist
= FALSE;
619 //get the current page count.
620 $currentCount = self
::getParticipantCount($this, $params);
621 if ($button == 'skip') {
622 $currentCount = 'skip';
625 //get the total count.
626 $previousCount = self
::getParticipantCount($this, $this->_params
, TRUE);
627 $totalParticipants = $previousCount;
628 if (is_numeric($currentCount)) {
629 $totalParticipants +
= $currentCount;
631 if (!empty($this->_values
['event']['has_waitlist']) &&
632 $totalParticipants > $this->_availableRegistrations
634 $this->_allowWaitlist
= TRUE;
636 $this->set('allowWaitlist', $this->_allowWaitlist
);
637 $this->_lineItemParticipantsCount
[$addParticipantNum] = $currentCount;
640 if ($button == 'skip') {
641 //hack for free/zero amount event.
642 if ($this->_resetAllowWaitlist
) {
643 $this->_allowWaitlist
= FALSE;
644 $this->set('allowWaitlist', FALSE);
645 if ($this->_requireApproval
) {
646 $status = ts("You have skipped last participant and which result into event having enough spaces, but your registration require approval, Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.");
649 $status = ts("You have skipped last participant and which result into event having enough spaces, hence your group become as register participants though you selected on wait list.");
651 CRM_Core_Session
::setStatus($status);
654 $this->_params
[$addParticipantNum] = 'skip';
655 if (isset($this->_lineItem
)) {
656 $this->_lineItem
[$addParticipantNum] = 'skip';
657 $this->_lineItemParticipantsCount
[$addParticipantNum] = 'skip';
662 $config = CRM_Core_Config
::singleton();
663 $params['currencyID'] = $config->defaultCurrency
;
665 if ($this->_values
['event']['is_monetary']) {
668 $discountId = CRM_Core_BAO_Discount
::findSet($this->_eventId
, 'civicrm_event');
670 if (!empty($this->_values
['discount'][$discountId])) {
671 $params['discount_id'] = $discountId;
672 $params['amount_level'] = $this->_values
['discount'][$discountId][$params['amount']]['label'];
673 $params['amount'] = $this->_values
['discount'][$discountId][$params['amount']]['value'];
675 elseif (empty($params['priceSetId'])) {
676 $params['amount_level'] = $this->_values
['fee'][$params['amount']]['label'];
677 $params['amount'] = $this->_values
['fee'][$params['amount']]['value'];
681 CRM_Price_BAO_PriceSet
::processAmount($this->_values
['fee'], $params, $lineItem);
683 //build the line item..
684 if (array_key_exists($addParticipantNum, $this->_lineItem
)) {
685 $this->_lineItem
[$addParticipantNum] = $lineItem;
688 $this->_lineItem
[] = $lineItem;
693 if (array_key_exists('participant_role', $params)) {
694 $params['participant_role_id'] = $params['participant_role'];
697 if (empty($params['participant_role_id']) && $this->_values
['event']['default_role_id']) {
698 $params['participant_role_id'] = $this->_values
['event']['default_role_id'];
701 if (!empty($this->_params
[0]['is_pay_later'])) {
702 $params['is_pay_later'] = 1;
705 //carry additional participant id, contact id if pre-registered.
706 if ($this->_allowConfirmation
&& $this->_additionalParticipantId
) {
707 $params['contact_id'] = $this->_contactId
;
708 $params['participant_id'] = $this->_additionalParticipantId
;
711 //build the params array.
712 if (array_key_exists($addParticipantNum, $this->_params
)) {
713 $this->_params
[$addParticipantNum] = $params;
716 $this->_params
[] = $params;
720 //finally set the params.
721 $this->set('params', $this->_params
);
723 if ($this->_lineItem
) {
724 $this->set('lineItem', $this->_lineItem
);
725 $this->set('lineItemParticipantsCount', $this->_lineItemParticipantsCount
);
728 $participantNo = count($this->_params
);
729 if ($button != 'skip') {
730 $statusMsg = ts('Registration information for participant %1 has been saved.', array(1 => $participantNo));
731 CRM_Core_Session
::setStatus($statusMsg, ts('Registration Saved'), 'success');
734 // Check whether to process the registration now, calling processRegistration()
736 !$this->_values
['event']['is_confirm_enabled'] // CRM-11182 - Optional confirmation screen
737 && !$this->_values
['event']['is_monetary']
738 && CRM_Utils_Array
::value('additional_participants', $this->_params
[0])
739 && $this->isLastParticipant()
741 CRM_Event_Form_Registration_Register
::processRegistration($this->_params
, NULL);
746 * @param $additionalParticipant
750 public static function &getPages($additionalParticipant) {
752 for ($i = 1; $i <= $additionalParticipant; $i++
) {
753 $details["Participant_{$i}"] = array(
754 'className' => 'CRM_Event_Form_Registration_AdditionalParticipant',
755 'title' => "Register Additional Participant {$i}",
762 * Check whether call current participant is last one.
764 * @param bool $isButtonJs
769 public function isLastParticipant($isButtonJs = FALSE) {
770 $participant = $isButtonJs ?
$this->_params
[0]['additional_participants'] : $this->_params
[0]['additional_participants'] +
1;
771 if (count($this->_params
) == $participant) {
778 * Reset values for all options those are full.
781 public function resetElementValue($optionFullIds = array()) {
782 if (!is_array($optionFullIds) ||
783 empty($optionFullIds) ||
784 !$this->isSubmitted()
789 foreach ($optionFullIds as $fldId => $optIds) {
790 $name = "price_$fldId";
791 if (!$this->elementExists($name)) {
795 $element = $this->getElement($name);
796 $eleType = $element->getType();
798 $resetSubmitted = FALSE;
801 if ($element->isFrozen()) {
802 $element->setValue('');
803 $resetSubmitted = TRUE;
808 if (is_array($element->_elements
)) {
809 foreach ($element->_elements
as $child) {
810 $childType = $child->getType();
811 $methodName = 'getName';
813 $methodName = 'getValue';
815 if (in_array($child->{$methodName}(), $optIds) && $child->isFrozen()) {
816 $resetSubmitted = TRUE;
817 $child->updateAttributes(array('checked' => NULL));
824 $resetSubmitted = TRUE;
825 $element->_values
= array();
829 //finally unset values from submitted.
830 if ($resetSubmitted) {
831 $this->resetSubmittedValue($name, $optIds);
837 * @param string $elementName
838 * @param array $optionIds
840 public function resetSubmittedValue($elementName, $optionIds = array()) {
841 if (empty($elementName) ||
842 !$this->elementExists($elementName) ||
843 !$this->getSubmitValue($elementName)
852 $values = &$this->{"_$val"};
853 if (!is_array($values) ||
empty($values)) {
856 $eleVal = CRM_Utils_Array
::value($elementName, $values);
857 if (empty($eleVal)) {
860 if (is_array($eleVal)) {
862 foreach ($eleVal as $keyId => $ignore) {
863 if (in_array($keyId, $optionIds)) {
865 unset($values[$elementName][$keyId]);
868 if ($found && empty($values[$elementName][$keyId])) {
869 $values[$elementName][$keyId] = NULL;
873 $values[$elementName][$keyId] = NULL;