INFRA-132 - Put "else" and "catch" on new line
[civicrm-core.git] / CRM / Event / Form / Registration / Confirm.php
index 41be90095125eb6c0cdd320de8fed6de424547dd..031f6709238d1b1652e9002d984ed9f113f763a7 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.5                                                |
+ | CiviCRM version 4.6                                                |
  +--------------------------------------------------------------------+
  | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
@@ -44,7 +44,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * The values for the contribution db object
    *
    * @var array
-   * @protected
    */
   public $_values;
 
@@ -52,7 +51,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * The total amount
    *
    * @var float
-   * @public
    */
   public $_totalAmount;
 
@@ -60,9 +58,8 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * 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
@@ -95,12 +92,14 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       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'];
 
@@ -122,6 +121,9 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
           $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';
@@ -207,9 +209,8 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * 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;
     }
@@ -222,7 +223,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * Build the form object
    *
    * @return void
-   * @access public
    */
   public function buildQuickForm() {
     $this->assignToTemplate();
@@ -275,7 +275,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
         }
       }
 
-      $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) {
@@ -388,12 +388,37 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
 
     // 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
    */
@@ -555,10 +580,12 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
           }
         }
         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);
@@ -692,7 +719,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       }
 
       $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();
@@ -765,6 +792,59 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       // 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
@@ -802,8 +882,9 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
             unset($copyParticipantCount[$participantNum]);
           }
         }
-        if ($participantNum === NULL)
-        break;
+        if ($participantNum === NULL) {
+          break;
+        }
 
         //carry the participant submitted values.
         $this->_values['params'][$participantID] = $params[$participantNum];
@@ -873,9 +954,9 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * @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();
@@ -893,8 +974,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
 
     $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'],
@@ -991,7 +1071,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * @param CRM_Core_Form $form
    *
    * @return void
-   * @access public
    */
   public static function fixLocationFields(&$params, &$fields, &$form) {
     if (!empty($form->_fields)) {
@@ -1040,7 +1119,6 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    * @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
@@ -1140,18 +1218,19 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
     $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
@@ -1195,11 +1274,11 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
     }
     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);
       }
     }
   }