CRM-12856 - CRM_Core_Lock - Quieter logs
[civicrm-core.git] / CRM / Core / Payment.php
index a1e6e8c28726431fcf6bdd449633938c7f07848c..56249840903185d4f2f806e43a08b0e0daa56e21 100644 (file)
@@ -204,7 +204,9 @@ abstract class CRM_Core_Payment {
   }
 
   /**
-   * Payment callback handler
+   * Payment callback handler. The processor_name or processor_id is passed in.
+   * Note that processor_id is more reliable as one site may have more than one instance of a
+   * processor & ideally the processor will be validating the results
    * Load requested payment processor and call that processor's handle<$method> method
    *
    * @public
@@ -253,15 +255,12 @@ abstract class CRM_Core_Payment {
       // Check pp is extension
       $ext = CRM_Extension_System::singleton()->getMapper();
       if ($ext->isExtensionKey($dao->class_name)) {
-        $extension_instance_found = TRUE;
         $paymentClass = $ext->keyToClass($dao->class_name, 'payment');
         require_once $ext->classToPath($paymentClass);
       }
       else {
-        // Legacy instance - but there may also be an extension instance, so
-        // continue on to the next instance and check that one. We'll raise an
-        // error later on if none are found.
-        continue;
+        // Legacy or extension as module instance
+        $paymentClass = 'CRM_Core_' . $dao->class_name;
       }
 
       $paymentProcessor = CRM_Financial_BAO_PaymentProcessor::getPayment($dao->processor_id, $mode);
@@ -278,13 +277,14 @@ abstract class CRM_Core_Payment {
       if (!method_exists($processorInstance, $method) ||
         !is_callable(array($processorInstance, $method))
       ) {
-        // No? This will be the case in all instances, so let's just die now
-        // and not prolong the agony.
-        CRM_Core_Error::fatal("Payment processor does not implement a '$method' method");
+        // on the off chance there is a double implementation of this processor we should keep looking for another
+        // note that passing processor_id is more reliable & we should work to deprecate processor_name
+        continue;
       }
 
       // Everything, it seems, is ok - execute pp callback handler
       $processorInstance->$method();
+      $extension_instance_found = TRUE;
     }
 
     if (!$extension_instance_found) CRM_Core_Error::fatal(
@@ -373,8 +373,9 @@ INNER JOIN civicrm_contribution con ON ( con.contribution_recur_id = rec.id )
    */
   static function allowBackofficeCreditCard($template = NULL, $variableName = 'newCredit') {
     $newCredit = FALSE;
+    // restrict to type=1 (credit card) payment processor payment_types and only include billing mode types 1 and 3
     $processors = CRM_Core_PseudoConstant::paymentProcessor(FALSE, FALSE,
-      "billing_mode IN ( 1, 3 )"
+      "billing_mode IN ( 1, 3 ) AND payment_type = 1"
     );
     if (count($processors) > 0) {
       $newCredit = TRUE;