CRM-16955 make payment form load billing defaults on processor change
authoreileenmcnaugton <eileen@fuzion.co.nz>
Mon, 3 Aug 2015 02:25:05 +0000 (14:25 +1200)
committereileenmcnaugton <eileen@fuzion.co.nz>
Mon, 3 Aug 2015 14:03:39 +0000 (02:03 +1200)
CRM/Core/Payment/Form.php
CRM/Event/Form/Registration/Register.php
CRM/Financial/Form/Payment.php

index 6ece599a74700549d46b1901fad253f5c22413a1..a39aa22f1e1954df2ed1907ded423cd00adce4ff 100644 (file)
  *
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2015
- * $Id$
- *
  */
 class CRM_Core_Payment_Form {
 
 
   /**
-   * Add payment fields depending on payment processor. The payment processor can implement the following functions to override the built in fields.
+   * Add payment fields depending on payment processor.
+   *
+   * The payment processor can implement the following functions to override the built in fields.
    *
    *  - getPaymentFormFields()
    *  - getPaymentFormFieldsMetadata()
@@ -349,6 +349,30 @@ class CRM_Core_Payment_Form {
     return $creditCardTypes;
   }
 
+  /**
+   * Set default values for the form.
+   *
+   * @param CRM_Core_Form $form
+   * @param int $contactID
+   */
+  public static function setDefaultValues(&$form, $contactID) {
+    $billingDefaults = $form->getProfileDefaults('Billing', $contactID);
+    $form->_defaults = array_merge($form->_defaults, $billingDefaults);
+
+    // set default country & state from config if no country set
+    // note the effect of this is to set the billing country to default to the site default
+    // country if the person has an address but no country (for anonymous country is set above)
+    // this could have implications if the billing profile is filled but hidden.
+    // this behaviour has been in place for a while but the use of js to hide things has increased
+    if (empty($form->_defaults["billing_country_id-{$form->_bltID}"])) {
+      $form->_defaults["billing_country_id-{$form->_bltID}"] = CRM_Core_Config::singleton()->defaultContactCountry;
+    }
+    if (empty($form->_defaults["billing_state_province_id-{$form->_bltID}"])) {
+      $form->_defaults["billing_state_province_id-{$form->_bltID}"] = CRM_Core_Config::singleton()
+        ->defaultContactStateProvince;
+    }
+  }
+
   /**
    * Make sure that credit card number and cvv are valid.
    * Called within the scope of a QF formRule function
index 92128a003e9990e312f7405fc2f0b1d97eb90b0c..8900cdb6624cef31b4fdfd0814a7aec6b4c396e1 100644 (file)
@@ -116,38 +116,12 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration {
   }
 
   /**
-   * Set default values for the form. For edit/view mode
-   * the default values are retrieved from the database
-   * Adding discussion from CRM-11915 as code comments
-   * When multiple payment processors are configured for a event and user does any selection changes for them on online event registeration page :
-   * The 'Register' page gets loaded through ajax and following happens :
-   * the setDefaults function is called with the variable _ppType set with selected payment processor type,
-   * so in the 'if' condition checked whether the selected payment processor's billing mode is of 'billing form mode'. If its not, don't setDefaults for billing form and return instead.
-   * - For payment processors of billing mode 'Notify' - return from setDefaults before the code for billing profile population execution .
-   * (done this is because for payment processors with 'Notify' mode billing profile form doesn't get rendered on UI)
-   *
-   * @return void
+   * Set default values for the form.
    */
   public function setDefaultValues() {
     $this->_defaults = array();
     $contactID = $this->getContactID();
-    $billingDefaults = $this->getProfileDefaults('Billing', $contactID);
-    $this->_defaults = array_merge($this->_defaults, $billingDefaults);
-
-    $config = CRM_Core_Config::singleton();
-    // set default country from config if no country set
-    // note the effect of this is to set the billing country to default to the site default
-    // country if the person has an address but no country (for anonymous country is set above)
-    // this could have implications if the billing profile is filled but hidden.
-    // this behaviour has been in place for a while but the use of js to hide things has increased
-    if (empty($this->_defaults["billing_country_id-{$this->_bltID}"])) {
-      $this->_defaults["billing_country_id-{$this->_bltID}"] = $config->defaultContactCountry;
-    }
-
-    // set default state/province from config if no state/province set
-    if (empty($this->_defaults["billing_state_province_id-{$this->_bltID}"])) {
-      $this->_defaults["billing_state_province_id-{$this->_bltID}"] = $config->defaultContactStateProvince;
-    }
+    CRM_Core_Payment_Form::setDefaultValues($this, $contactID);
 
     if ($contactID) {
       $fields = array();
index 61452dea74ba323469be17b43685ab2ecfa24cd6..a415b02d1ac271f81fdc689505db091111b7b653 100644 (file)
@@ -55,6 +55,15 @@ class CRM_Financial_Form_Payment extends CRM_Core_Form {
     CRM_Core_Payment_ProcessorForm::buildQuickForm($this);
   }
 
+  /**
+   * Set default values for the form.
+   */
+  public function setDefaultValues() {
+    $contactID = $this->getContactID();
+    CRM_Core_Payment_Form::setDefaultValues($this, $contactID);
+    return $this->_defaults;
+  }
+
   /**
    * Add JS to show icons for the accepted credit cards
    */