* $Id: Dummy.php 45429 2013-02-06 22:11:18Z lobo $ */ /* NOTE: * When looking up response codes in the Authorize.Net API, they * begin at one, so always delete one from the "Position in Response" */ class CRM_Core_Payment_Dummy extends CRM_Core_Payment { CONST CHARSET = 'iso-8859-1'; protected $_mode = NULL; protected $_params = array(); protected $_doDirectPaymentResult = array(); /** * @param array $doDirectPaymentResult */ public function setDoDirectPaymentResult($doDirectPaymentResult) { $this->_doDirectPaymentResult = $doDirectPaymentResult; } /** * We only need one instance of this object. So we use the singleton * pattern and cache the instance in this variable * * @var object * @static */ static private $_singleton = NULL; /** * Constructor * * @param string $mode the mode of operation: live or test * * @param $paymentProcessor * * @return \CRM_Core_Payment_Dummy */ function __construct($mode, &$paymentProcessor) { $this->_mode = $mode; $this->_paymentProcessor = $paymentProcessor; $this->_processorName = ts('Dummy Processor'); } /** * Singleton function used to manage this object * * @param string $mode the mode of operation: live or test * * @param object $paymentProcessor * @param null $paymentForm * @param bool $force * * @return object * @static */ static function &singleton($mode, &$paymentProcessor, &$paymentForm = NULL, $force = FALSE) { $processorName = $paymentProcessor['name']; if (CRM_Utils_Array::value($processorName, self::$_singleton) === NULL) { self::$_singleton[$processorName] = new CRM_Core_Payment_Dummy($mode, $paymentProcessor); } return self::$_singleton[$processorName]; } /** * Submit a payment using Advanced Integration Method * * @param array $params assoc array of input parameters for this transaction * * @return array the result in a nice formatted array (or an error object) * @public */ function doDirectPayment(&$params) { // Invoke hook_civicrm_paymentProcessor // In Dummy's case, there is no translation of parameters into // the back-end's canonical set of parameters. But if a processor // does this, it needs to invoke this hook after it has done translation, // but before it actually starts talking to its proprietary back-end. // no translation in Dummy processor $cookedParams = $params; CRM_Utils_Hook::alterPaymentProcessorParams($this, $params, $cookedParams ); //end of hook invocation if (!empty($this->_doDirectPaymentResult)) { return $this->_doDirectPaymentResult; } if ($this->_mode == 'test') { $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'test\\_%'"; $p = array(); $trxn_id = strval(CRM_Core_Dao::singleValueQuery($query, $p)); $trxn_id = str_replace('test_', '', $trxn_id); $trxn_id = intval($trxn_id) + 1; $params['trxn_id'] = sprintf('test_%08d', $trxn_id); } else { $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'live_%'"; $p = array(); $trxn_id = strval(CRM_Core_Dao::singleValueQuery($query, $p)); $trxn_id = str_replace('live_', '', $trxn_id); $trxn_id = intval($trxn_id) + 1; $params['trxn_id'] = sprintf('live_%08d', $trxn_id); } $params['gross_amount'] = $params['amount']; // Add a fee_amount so we can make sure fees are handled properly in underlying classes. $params['fee_amount'] = 1.50; $params['net_amount'] = $params['gross_amount'] - $params['fee_amount']; return $params; } /** * Are back office payments supported - e.g paypal standard won't permit you to enter a credit card associated with someone else's login * @return bool */ protected function supportsLiveMode() { return FALSE; } /** * @param null $errorCode * @param null $errorMessage * * @return object */ function &error($errorCode = NULL, $errorMessage = NULL) { $e = CRM_Core_Error::singleton(); if ($errorCode) { $e->push($errorCode, 0, NULL, $errorMessage); } else { $e->push(9001, 0, NULL, 'Unknown System Error.'); } return $e; } /** * This function checks to see if we have the right config values * * @return string the error message if any * @public */ function checkConfig() { return NULL; } }