<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.5 |
+ | CiviCRM version 4.6 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
/**
- * the values for the contribution db object
+ * The values for the contribution db object
*
* @var array
- * @protected
*/
public $_values;
/**
- * the total amount
+ * The total amount
*
* @var float
- * @public
*/
public $_totalAmount;
/**
- * Function to set variables up before form is built
+ * Set variables up before form is built
*
* @return void
- * @access public
*/
- function preProcess() {
+ public function preProcess() {
parent::preProcess();
// lineItem isn't set until Register postProcess
if ($rfp || CRM_Utils_Array::value('additional_participants', $this->_params[0], FALSE)) {
$payment = CRM_Core_Payment::singleton($this->_mode, $this->_paymentProcessor, $this);
$paymentObjError = ts('The system did not record payment details for this payment and so could not process the transaction. Please report this error to the site administrator.');
- if (is_object($payment))
+ if (is_object($payment)) {
$expressParams = $payment->getExpressCheckoutDetails($this->get('token'));
- else
+ }
+ else {
CRM_Core_Error::fatal($paymentObjError);
+ }
- $params['payer'] = $expressParams['payer'];
+ $params['payer'] = CRM_Utils_Array::value('payer', $expressParams);
$params['payer_id'] = $expressParams['payer_id'];
$params['payer_status'] = $expressParams['payer_status'];
$params['discountAmount'] = $this->_params[0]['discountAmount'];
$params['discountMessage'] = $this->_params[0]['discountMessage'];
}
+ if (!empty($this->_params[0]['amount_priceset_level_radio'])) {
+ $params['amount_priceset_level_radio'] = $this->_params[0]['amount_priceset_level_radio'];
+ }
$params['amount_level'] = $this->_params[0]['amount_level'];
$params['currencyID'] = $this->_params[0]['currencyID'];
$params['payment_action'] = 'Sale';
$registerParams["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($registerParams["billing_country_id-{$this->_bltID}"]);
}
if (isset($registerParams['credit_card_exp_date'])) {
- $registerParams['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($registerParams);
+ $registerParams['year'] = CRM_Core_Payment_Form::getCreditCardExpirationYear($registerParams);
$registerParams['month'] = CRM_Core_Payment_Form::getCreditCardExpirationMonth($registerParams);
}
if ($this->_values['event']['is_monetary']) {
}
/**
- * overwrite action, since we are only showing elements in frozen mode
+ * Overwrite action, since we are only showing elements in frozen mode
* no help display needed
*
* @return int
- * @access public
*/
- function getAction() {
+ public function getAction() {
if ($this->_action & CRM_Core_Action::PREVIEW) {
return CRM_Core_Action::VIEW | CRM_Core_Action::PREVIEW;
}
}
/**
- * Function to build the form
+ * Build the form object
*
* @return void
- * @access public
*/
public function buildQuickForm() {
$this->assignToTemplate();
$taxAmount += $v['tax_amount'];
if (is_array($v)) {
foreach (array(
- 'first_name', 'last_name') as $name) {
+ 'first_name',
+ 'last_name',
+ ) as $name) {
if (isset($v['billing_' . $name]) &&
!isset($v[$name])
) {
}
}
- $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME,'contribution_invoice_settings');
+ $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME, 'contribution_invoice_settings');
$taxTerm = CRM_Utils_Array::value('tax_term', $invoiceSettings);
$invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings);
if ($invoicing) {
$this->addButtons(array(
array(
'type' => 'back',
- 'name' => ts('<< Go Back'),
+ 'name' => ts('Go Back'),
),
)
);
}
else {
- $contribButton = ts('Continue >>');
+ $contribButton = ts('Continue');
$this->addButtons(array(
array(
'type' => 'back',
- 'name' => ts('<< Go Back'),
+ 'name' => ts('Go Back'),
),
array(
'type' => 'next',
// Assign Participant Count to Lineitem Table
$this->assign('pricesetFieldsCount', CRM_Price_BAO_PriceSet::getPricesetCount($this->_priceSetId));
+ $this->addFormRule(array('CRM_Event_Form_Registration_Confirm', 'formRule'), $this);
+ }
+
+ public static function formRule($fields, $files, $self) {
+ $errors = array();
+ $eventFull = CRM_Event_BAO_Participant::eventFull($self->_eventId, FALSE, CRM_Utils_Array::value('has_waitlist', $self->_values['event']));
+ if ($eventFull && empty($self->_allowConfirmation)) {
+ if (empty($self->_allowWaitlist)) {
+ CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/event/register', "reset=1&id={$self->_eventId}", FALSE, NULL, FALSE, TRUE));
+ }
+ }
+ $self->_feeBlock = $self->_values['fee'];
+ CRM_Event_Form_Registration_Register::formatFieldsForOptionFull($self);
+
+ if (!empty($self->_priceSetId)) {
+ $priceSetErrors = self::validatePriceSet($self, $self->_params);
+ //get price set fields errors in.
+ $errors = array_merge($errors, CRM_Utils_Array::value(0, $priceSetErrors, array()));
+ }
+
+ if (!empty($errors)) {
+ $soldOutOptions = implode("<br/>", $priceSetErrors['soldOutOptions']);
+ CRM_Core_Session::setStatus(ts('You have been returned to the start of the registration process and any sold out events have been removed from your selections. You will not be able to continue until you review your booking and select different events if you wish. The following events were sold out:'), ts('Unfortunately some of your options have now sold out for one or more participants.'), 'error');
+ CRM_Core_Session::setStatus(ts("{$soldOutOptions}"), ts('Sold out:'), 'error');
+ CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/event/register', "_qf_Register_display=true&qfKey=" . $fields['qfKey']));
+ }
+ return empty($errors) ? TRUE : $errors;
}
/**
- * Function to process the form
+ * Process the form submission
*
- * @access public
*
* @return void
*/
public function postProcess() {
- $now = date('YmdHis');
+ $now = date('YmdHis');
$this->_params = $this->get('params');
if (!empty($this->_params[0]['contact_id'])) {
}
}
elseif ($this->_contributeMode == 'express' && !empty($value['is_primary'])) {
- if (is_object($payment))
+ if (is_object($payment)) {
$result = $payment->doExpressCheckout($value);
- else
+ }
+ else {
CRM_Core_Error::fatal($paymentObjError);
+ }
}
elseif (!empty($value['is_primary'])) {
CRM_Core_Payment_Form::mapParams($this->_bltID, $value, $value, TRUE);
}
//passing contribution id is already registered.
- $contribution =
- self::processContribution($this, $value, $result, $contactID, $pending, $isAdditionalAmount);
+ $contribution = self::processContribution($this, $value, $result, $contactID, $pending, $isAdditionalAmount);
$value['contributionID'] = $contribution->id;
$value['contributionTypeID'] = $contribution->financial_type_id;
$value['receive_date'] = $contribution->receive_date;
$value['contributionTypeID'] = $contribution->financial_type_id;
}
$value['contactID'] = $contactID;
- $value['eventID'] = $this->_eventId;
+ $value['eventID'] = $this->_eventId;
$value['item_name'] = $value['description'];
}
// handle register date CRM-4320
if ($this->_allowConfirmation) {
- $registerDate = CRM_Utils_Array::value( 'participant_register_date', $params );
+ $registerDate = CRM_Utils_Array::value('participant_register_date', $params);
}
elseif (!empty($params['participant_register_date']) &&
is_array($params['participant_register_date']) &&
}
$entityTable = 'civicrm_participant';
- $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME,'contribution_invoice_settings');
+ $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME, 'contribution_invoice_settings');
$invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings);
$totalTaxAmount = 0;
$dataArray = array();
// do a transfer only if a monetary payment greater than 0
if ($this->_values['event']['is_monetary'] && $primaryParticipant) {
if ($payment && is_object($payment)) {
+ //CRM 14512 provide line items of all participants to payment gateway
+ $primaryContactId = $this->get('primaryContactId');
+
+ //build an array of cId/pId of participants
+ $additionalIDs = CRM_Event_BAO_Event::buildCustomProfile($registerByID, NULL, $primaryContactId, $isTest, TRUE);
+
+ //need to copy, since we are unsetting on the way.
+ $copyParticipantCountLines = $participantCount;
+
+ //lets carry all participant params w/ values.
+ foreach ($additionalIDs as $participantID => $contactId) {
+ $participantNum = NULL;
+ $participantNum = $participantID;
+ if ($participantID == $registerByID) {
+ $participantNum = 0; // is primary particpant
+ }
+ else {
+ if ($participantNum = array_search('participant', $copyParticipantCountLines)) {
+ //if no participant found break.
+ if ($participantNum === NULL) {
+ break;
+ }
+ //unset current particpant so we don't check them again
+ unset($copyParticipantCountLines[$participantNum]);
+ }
+ }
+ // get values of line items
+ if ($this->_amount) {
+ $amount = array();
+ $amount[$participantNum]['label'] = preg_replace('/\ 1/', '', $params[$participantNum]['amount_level']);
+ $amount[$participantNum]['amount'] = $params[$participantNum]['amount'];
+ $params[$participantNum]['amounts'] = $amount;
+ }
+
+ if (!empty($this->_lineItem)) {
+ $lineItems = $this->_lineItem;
+ $lineItem = array();
+ if ($lineItemValue = CRM_Utils_Array::value($participantNum, $lineItems)) {
+ $lineItem[] = $lineItemValue;
+ }
+ $params[$participantNum]['lineItem'] = $lineItem;
+ }
+
+ //only add additional particpants and not the primary particpant as we already have that
+ //added to $primaryParticipant so that this change doesn't break or require changes to
+ //existing gateway implementations
+ $primaryParticipant['participants_info'][$participantID] = $params[$participantNum];
+ }
+
+ //get event custom field information
+ $groupTree = CRM_Core_BAO_CustomGroup::getTree('Event', $this, $this->_eventId, 0, $this->_values['event']['event_type_id']);
+ $primaryParticipant['eventCustomFields'] = $groupTree;
+
// call postprocess hook before leaving
$this->postProcessHook();
// this does not return
unset($copyParticipantCount[$participantNum]);
}
}
- if ($participantNum === NULL)
- break;
+ if ($participantNum === NULL) {
+ break;
+ }
//carry the participant submitted values.
$this->_values['params'][$participantID] = $params[$participantNum];
$this->assign('amounts', $amount);
}
if ($this->_lineItem) {
- $lineItems = $this->_lineItem;
- $lineItem = array();
+ $lineItems = $this->_lineItem;
+ $lineItem = array();
if ($lineItemValue = CRM_Utils_Array::value($participantNum, $lineItems)) {
$lineItem[] = $lineItemValue;
}
}
}
}
- //end of function
/**
* Process the contribution
*
- * @param $form
- * @param $params
+ * @param CRM_Core_Form $form
+ * @param array $params
* @param $result
- * @param $contactID
+ * @param int $contactID
* @param bool $pending
* @param bool $isAdditionalAmount
*
* @return void
- * @access public
*/
- static function processContribution(&$form, $params, $result, $contactID,
+ public static function processContribution(
+ &$form, $params, $result, $contactID,
$pending = FALSE, $isAdditionalAmount = FALSE
) {
$transaction = new CRM_Core_Transaction();
- $now = date('YmdHis');
+ $now = date('YmdHis');
$receiptDate = NULL;
if (!empty($form->_values['event']['is_email_confirm'])) {
$contribParams = array(
'contact_id' => $contactID,
- 'financial_type_id' => !empty($form->_values['event']['financial_type_id']) ?
- $form->_values['event']['financial_type_id'] : $params['financial_type_id'],
+ 'financial_type_id' => !empty($form->_values['event']['financial_type_id']) ? $form->_values['event']['financial_type_id'] : $params['financial_type_id'],
'receive_date' => $now,
'total_amount' => $params['amount'],
'tax_amount' => $params['tax_amount'],
/**
* Fix the Location Fields
*
- * @param $params
+ * @param array $params
* @param $fields
- * @param $form
+ * @param CRM_Core_Form $form
*
* @return void
- * @access public
*/
public static function fixLocationFields(&$params, &$fields, &$form) {
if (!empty($form->_fields)) {
!$form->_values['event']['is_monetary'] ||
$form->_allowWaitlist ||
$form->_requireApproval
- ) && !empty($params["email-{$form->_bltID}"])) {
+ ) && !empty($params["email-{$form->_bltID}"])
+ ) {
$params['email-Primary'] = $params["email-{$form->_bltID}"];
}
}
/**
- * function to update contact fields
+ * Update contact fields
*
- * @param $contactID
- * @param $params
+ * @param int $contactID
+ * @param array $params
* @param $fields
- * @param $form
+ * @param CRM_Core_Form $form
*
* @return void
- * @access public
*/
public static function updateContactFields($contactID, $params, $fields, &$form) {
//add the contact to group, if add to group is selected for a
'contact_type'
);
- if(array_key_exists('contact_id', $params) && empty($params['contact_id'])) {
+ if (array_key_exists('contact_id', $params) && empty($params['contact_id'])) {
// we unset this here because the downstream function ignores the contactID we give it
// if it is set & it is difficult to understand the implications of 'fixing' this downstream
// but if we are passing a contact id into this function it's reasonable to assume we don't
public static function assignProfiles(&$form) {
$participantParams = $form->_params;
$formattedValues = $profileFields = array();
- $count = 1;
+ $count = 1;
foreach ($participantParams as $participantNum => $participantValue) {
if ($participantNum) {
- $prefix1 = 'additional';
- $prefix2 = 'additional_';
- } else {
- $prefix1 = '';
- $prefix2 = '';
+ $prefix1 = 'additional';
+ $prefix2 = 'additional_';
+ }
+ else {
+ $prefix1 = '';
+ $prefix2 = '';
}
if ($participantValue != 'skip') {
//get the customPre profile info
if (!empty($form->_values[$prefix2 . 'custom_pre_id'])) {
$values = $groupName = array();
CRM_Event_BAO_Event::displayProfile($participantValue,
- $form->_values[ $prefix2 . 'custom_pre_id'],
+ $form->_values[$prefix2 . 'custom_pre_id'],
$groupName,
$values,
$profileFields
}
$form->_fields = $profileFields;
}
- if (!empty($formattedValues) ) {
+ if (!empty($formattedValues)) {
$form->assign('primaryParticipantProfile', $formattedValues[1]);
- $form->set('primaryParticipantProfile', $formattedValues[1]);
+ $form->set('primaryParticipantProfile', $formattedValues[1]);
if ($count > 2) {
unset($formattedValues[1]);
$form->assign('addParticipantProfile', $formattedValues);
- $form->set('addParticipantProfile', $formattedValues);
+ $form->set('addParticipantProfile', $formattedValues);
}
}
}