CRM-16555 move paypal code addition to buildForm
authorEileen McNaughton <eileen@fuzion.co.nz>
Wed, 3 Jun 2015 03:25:32 +0000 (15:25 +1200)
committerEileen McNaughton <eileen@fuzion.co.nz>
Thu, 4 Jun 2015 08:47:48 +0000 (20:47 +1200)
Not 100% sure about bringing this (existing override) to the fore as opposed to a more granular one
but it does already exist?. The biggest problem is the temptation to do lots of altering from there which
might not be upgrade proof - as opposed to just addition as per here

CRM/Core/Payment.php
CRM/Core/Payment/Form.php
CRM/Core/Payment/PayPalImpl.php
templates/CRM/Core/BillingBlock.tpl

index 03f43009dd9dfa3668da5539956a1f4f45715527..3a35c663eb5de0adb84350bc88241653fc743491 100644 (file)
@@ -102,6 +102,18 @@ abstract class CRM_Core_Payment {
     return $object;
   }
 
+  /**
+   * Opportunity for the payment processor to override the entire form build.
+   *
+   * @param CRM_Core_Form $form
+   *
+   * @return bool
+   *   Should form building stop at this point?
+   */
+  public function buildForm(&$form) {
+     return FALSE;
+  }
+
   /**
    * Log payment notification message to forensic system log.
    *
index 7569320a9d8ebb66626ba5ce4fad5a2fc33a1715..cde6d66028491f2c491407cfa517da0b741e8a52 100644 (file)
@@ -263,14 +263,15 @@ class CRM_Core_Payment_Form {
     // $processor->buildForm appears to be an undocumented (possibly unused) option for payment processors
     // which was previously available only in some form flows
     if (!empty($form->_paymentProcessor) && !empty($form->_paymentProcessor['object']) && $form->_paymentProcessor['object']->isSupported('buildForm')) {
-      $form->_paymentProcessor['object']->buildForm($form);
-      return NULL;
+      if ($form->_paymentProcessor['object']->buildForm($form)) {
+        return NULL;
+      }
     }
 
+
     self::setPaymentFieldsByProcessor($form, $processor, empty($isBillingDataOptional));
     self::addCommonFields($form, !$isBillingDataOptional, $form->_paymentFields);
     self::addRules($form, $form->_paymentFields);
-    self::addPaypalExpressCode($form);
     return (!empty($form->_paymentFields));
   }
 
@@ -294,27 +295,6 @@ class CRM_Core_Payment_Form {
     }
   }
 
-  /**
-   * Billing mode button is basically synonymous with paypal express  - this is probably a good example of 'odds & sods' code we
-   * need to find a way for the payment processor to assign. A tricky aspect is that the payment processor may need to set the order
-   *
-   * @param $form
-   */
-  protected static function addPaypalExpressCode(&$form) {
-    if (empty($form->isBackOffice)) {
-      if (CRM_Utils_Array::value('billing_mode', $form->_paymentProcessor) == 3
-      ) {
-        $form->_expressButtonName = $form->getButtonName('upload', 'express');
-        $form->assign('expressButtonName', $form->_expressButtonName);
-        $form->add('image',
-          $form->_expressButtonName,
-          $form->_paymentProcessor['url_button'],
-          array('class' => 'crm-form-submit')
-        );
-      }
-    }
-  }
-
   /**
    * Validate the payment instrument values before passing it to the payment processor
    * We want this to be overrideable by the payment processor, and default to using
index 3c0443e4b4477f55d718369d975c9315c9c4412c..5316ff5523c7412fbf87eb56a7d6c4c849dea68e 100644 (file)
@@ -85,6 +85,40 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
     return FALSE;
   }
 
+  /**
+   * Opportunity for the payment processor to override the entire form build.
+   *
+   * @param CRM_Core_Form $form
+   *
+   * @return bool
+   *   Should form building stop at this point?
+   */
+  public function buildForm(&$form) {
+    if ($this->_processorName == 'PayPal Express' || $this->_processorName == 'PayPal Pro') {
+      $this->addPaypalExpressCode($form);
+    }
+    return FALSE;
+  }
+
+  /**
+   * Billing mode button is basically synonymous with paypal express  - this is probably a good example of 'odds & sods' code we
+   * need to find a way for the payment processor to assign. A tricky aspect is that the payment processor may need to set the order
+   *
+   * @param $form
+   */
+  protected static function addPaypalExpressCode(&$form) {
+    if (empty($form->isBackOffice)) {
+      $form->_expressButtonName = $form->getButtonName('upload', 'express');
+      $form->assign('expressButtonName', $form->_expressButtonName);
+      $form->add(
+        'image',
+        $form->_expressButtonName,
+        $form->_paymentProcessor['url_button'],
+        array('class' => 'crm-form-submit')
+      );
+    }
+  }
+
   /**
    * Express checkout code. Check PayPal documentation for more information
    *
index 74963fcfa327e120d4a0adcb078f28d17aa87734..ef1c67237fd80bbdc6136303cf5e6b7408a4ad3c 100644 (file)
   </script>
 {/if}
 {/crmRegion}
+{crmRegion name="billing-block-post"}
+  {* Payment processors sometimes need to append something to the end of the billing block. We create a region for
+     clarity  - the plan is to move to assigning this through the payment processor to this region *}
+  {include file= "CRM/Financial/Form/PaypalExpress.tpl"}
+{/crmRegion}
 
-{if $is_monetary}
-  {crmRegion name="billing-block-post"}
-    {* Payment processors sometimes need to append something to the end of the billing block. We create a region for
-       clarity  - the plan is to move to assigning this through the payment processor to this region *}
-    {include file= "CRM/Financial/Form/PaypalExpress.tpl"}
-  {/crmRegion}
-{/if}