<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.4 |
+ | CiviCRM version 4.5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013 |
+ | Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
* $Id$
*
*/
protected $_paymentProcessor;
+ /**
+ * @var CRM_Core_Form
+ */
protected $_paymentForm = NULL;
/**
* singleton function used to manage this object
*
* @param string $mode the mode of operation: live or test
- * @param object $paymentProcessor the details of the payment processor being invoked
+ * @param array $paymentProcessor the details of the payment processor being invoked
* @param object $paymentForm reference to the form object if available
* @param boolean $force should we force a reload of this payment object
*
return self::$_singleton[$cacheKey];
}
+ /**
+ * @param $params
+ *
+ * @return mixed
+ */
+ public static function logPaymentNotification($params) {
+ $message = 'payment_notification ';
+ if (!empty($params['processor_name'])) {
+ $message .= 'processor_name=' . $params['processor_name'];
+ }
+ if (!empty($params['processor_id'])) {
+ $message .= 'processor_id=' . $params['processor_id'];
+ }
+
+ $log = new CRM_Utils_SystemLogger();
+ $log->alert($message, $_REQUEST);
+ }
+
/**
* Setter for the payment form that wants to use the processor
*
- * @param obj $paymentForm
+ * @param CRM_Core_Form $paymentForm
*
*/
function setForm(&$paymentForm) {
/**
* Getter for payment form that is using the processor
*
- * @return obj A form object
+ * @return CRM_Core_Form A form object
*/
function getForm() {
return $this->_paymentForm;
/**
* This function checks to see if we have the right config values
*
- * @param string $mode the mode we are operating in (live or test)
+ * @internal param string $mode the mode we are operating in (live or test)
*
* @return string the error message if any
* @public
*/
abstract function checkConfig();
+ /**
+ * @param $paymentProcessor
+ *
+ * @return bool
+ */
static function paypalRedirect(&$paymentProcessor) {
if (!$paymentProcessor) {
return FALSE;
* Load requested payment processor and call that processor's handle<$method> method
*
* @public
+ * @param $method
+ * @param array $params
*/
- static function handlePaymentMethod($method, $params = array( )) {
+ static function handlePaymentMethod($method, $params = array()) {
if (!isset($params['processor_id']) && !isset($params['processor_name'])) {
CRM_Core_Error::fatal("Either 'processor_id' or 'processor_name' param is required for payment callback");
}
+ self::logPaymentNotification($params);
// Query db for processor ..
$mode = @$params['mode'];
// 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 or extension as module instance
- if(empty($paymentClass)) {
+ if (empty($paymentClass)) {
$paymentClass = 'CRM_Core_' . $dao->class_name;
}
// Everything, it seems, is ok - execute pp callback handler
$processorInstance->$method();
+ $extension_instance_found = TRUE;
}
if (!$extension_instance_found) CRM_Core_Error::fatal(
return method_exists(CRM_Utils_System::getClassName($this), $method);
}
+ /**
+ * @param null $entityID
+ * @param null $entity
+ * @param string $action
+ *
+ * @return string
+ */
function subscriptionURL($entityID = NULL, $entity = NULL, $action = 'cancel') {
- if ($action == 'cancel') {
- $url = 'civicrm/contribute/unsubscribe';
- }
- elseif ($action == 'billing') {
- //in notify mode don't return the update billing url
- if ($this->_paymentProcessor['billing_mode'] == self::BILLING_MODE_NOTIFY) {
- return NULL;
- }
- $url = 'civicrm/contribute/updatebilling';
- }
- elseif ($action == 'update') {
- $url = 'civicrm/contribute/updaterecur';
- }
- $session = CRM_Core_Session::singleton();
- $userId = $session->get('userID');
- $checksumValue = "";
-
- if ($entityID && $entity == 'membership') {
- if (!$userId) {
- $contactID = CRM_Core_DAO::getFieldValue("CRM_Member_DAO_Membership", $entityID, "contact_id");
- $checksumValue = CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf');
- $checksumValue = "&cs={$checksumValue}";
- }
- return CRM_Utils_System::url($url, "reset=1&mid={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE);
- }
+ // Set URL
+ switch ($action) {
+ case 'cancel' :
+ $url = 'civicrm/contribute/unsubscribe';
+ break;
+
+ case 'billing' :
+ //in notify mode don't return the update billing url
+ if ($this->_paymentProcessor['billing_mode'] == self::BILLING_MODE_NOTIFY) {
+ return NULL;
+ }
+ $url = 'civicrm/contribute/updatebilling';
+ break;
- if ($entityID && $entity == 'contribution') {
- if (!$userId) {
- $contactID = CRM_Core_DAO::getFieldValue("CRM_Contribute_DAO_Contribution", $entityID, "contact_id");
- $checksumValue = CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf');
- $checksumValue = "&cs={$checksumValue}";
- }
- return CRM_Utils_System::url($url, "reset=1&coid={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE);
+ case 'update' :
+ $url = 'civicrm/contribute/updaterecur';
+ break;
}
- if ($entityID && $entity == 'recur') {
- if (!$userId) {
- $sql = "
+ $session = CRM_Core_Session::singleton();
+ $userId = $session->get('userID');
+ $contactID = 0;
+ $checksumValue = '';
+ $entityArg = '';
+
+ // Find related Contact
+ if ($entityID) {
+ switch ($entity) {
+ case 'membership' :
+ $contactID = CRM_Core_DAO::getFieldValue("CRM_Member_DAO_Membership", $entityID, "contact_id");
+ $entityArg = 'mid';
+ break;
+
+ case 'contribution' :
+ $contactID = CRM_Core_DAO::getFieldValue("CRM_Contribute_DAO_Contribution", $entityID, "contact_id");
+ $entityArg = 'coid';
+ break;
+
+ case 'recur' :
+ $sql = "
SELECT con.contact_id
FROM civicrm_contribution_recur rec
INNER JOIN civicrm_contribution con ON ( con.contribution_recur_id = rec.id )
WHERE rec.id = %1
GROUP BY rec.id";
- $contactID = CRM_Core_DAO::singleValueQuery($sql, array(1 => array($entityID, 'Integer')));
- $checksumValue = CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf');
- $checksumValue = "&cs={$checksumValue}";
+ $contactID = CRM_Core_DAO::singleValueQuery($sql, array(1 => array($entityID, 'Integer')));
+ $entityArg = 'crid';
+ break;
+ }
+ }
+
+ // Add entity arguments
+ if ($entityArg != '') {
+ // Add checksum argument
+ if ($contactID != 0 && $userId != $contactID) {
+ $checksumValue = '&cs=' . CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf');
}
- return CRM_Utils_System::url($url, "reset=1&crid={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE);
+ return CRM_Utils_System::url($url, "reset=1&{$entityArg}={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE);
}
+ // Else login URL
if ($this->isSupported('accountLoginURL')) {
return $this->accountLoginURL();
}
- return $this->_paymentProcessor['url_recur'];
- }
- /**
- * Check for presence of type 1 or type 3 enabled processors (means we can do back-office submit credit/debit card trxns)
- * @public
- */
- static function allowBackofficeCreditCard($template = NULL, $variableName = 'newCredit') {
- $newCredit = FALSE;
- $processors = CRM_Core_PseudoConstant::paymentProcessor(FALSE, FALSE,
- "billing_mode IN ( 1, 3 )"
- );
- if (count($processors) > 0) {
- $newCredit = TRUE;
- }
- if ($template) {
- $template->assign($variableName, $newCredit);
- }
- return $newCredit;
+ // Else default
+ return $this->_paymentProcessor['url_recur'];
}
-
}