<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.3 |
+ | CiviCRM version 4.4 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2013 |
+--------------------------------------------------------------------+
}
/**
- * 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
// 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);
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(
*/
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;