<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.5 |
+ | CiviCRM version 4.6 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
* The values for the contribution db object
*
* @var array
- * @protected
*/
public $_values;
* The total amount
*
* @var float
- * @public
*/
public $_totalAmount;
* 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';
* 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;
}
* Build the form object
*
* @return void
- * @access public
*/
public function buildQuickForm() {
$this->assignToTemplate();
}
}
- $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) {
// 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;
+ }
/**
* Process the form submission
*
- * @access public
*
* @return void
*/
}
}
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);
}
$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];
* @param bool $isAdditionalAmount
*
* @return void
- * @access public
*/
- static function processContribution(&$form, $params, $result, $contactID,
+ static function processContribution(
+ &$form, $params, $result, $contactID,
$pending = FALSE, $isAdditionalAmount = FALSE
) {
$transaction = new CRM_Core_Transaction();
$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'],
* @param CRM_Core_Form $form
*
* @return void
- * @access public
*/
public static function fixLocationFields(&$params, &$fields, &$form) {
if (!empty($form->_fields)) {
* @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
$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
}
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);
}
}
}