Merge pull request #16108 from civicrm/5.21
[civicrm-core.git] / CRM / Core / Payment / Dummy.php
index 92f932c273cc726f9dc3815f55fa43f74db9d95a..b2b66125fbdd866217a1ef944cb959473e588952 100644 (file)
@@ -14,6 +14,8 @@
  * $Id: Dummy.php 45429 2013-02-06 22:11:18Z lobo $
  */
 
+use Civi\Payment\Exception\PaymentProcessorException;
+
 /**
  * Dummy payment processor
  */
@@ -22,8 +24,8 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
 
   protected $_mode = NULL;
 
-  protected $_params = array();
-  protected $_doDirectPaymentResult = array();
+  protected $_params = [];
+  protected $_doDirectPaymentResult = [];
 
   /**
    * Set result from do Direct Payment for test purposes.
@@ -34,7 +36,7 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
   public function setDoDirectPaymentResult($doDirectPaymentResult) {
     $this->_doDirectPaymentResult = $doDirectPaymentResult;
     if (empty($this->_doDirectPaymentResult['trxn_id'])) {
-      $this->_doDirectPaymentResult['trxn_id'] = array();
+      $this->_doDirectPaymentResult['trxn_id'] = [];
     }
     else {
       $this->_doDirectPaymentResult['trxn_id'] = (array) $doDirectPaymentResult['trxn_id'];
@@ -73,6 +75,7 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
    *
    * @return array
    *   the result in a nice formatted array (or an error object)
+   * @throws \Civi\Payment\Exception\PaymentProcessorException
    */
   public function doDirectPayment(&$params) {
     // Invoke hook_civicrm_paymentProcessor
@@ -99,21 +102,24 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
     //end of hook invocation
     if (!empty($this->_doDirectPaymentResult)) {
       $result = $this->_doDirectPaymentResult;
+      if (CRM_Utils_Array::value('payment_status_id', $result) === 'failed') {
+        throw new PaymentProcessorException($result['message'] ?? 'failed');
+      }
       $result['trxn_id'] = array_shift($this->_doDirectPaymentResult['trxn_id']);
       return $result;
     }
     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));
+      $p = [];
+      $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'] = 'test_' . $trxn_id . '_' . uniqid();
     }
     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));
+      $p = [];
+      $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'] = 'live_' . $trxn_id . '_' . uniqid();
@@ -122,6 +128,7 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
     // 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'];
+    $params['description'] = $this->getPaymentDescription($params);
 
     return $params;
   }
@@ -146,6 +153,14 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
     return TRUE;
   }
 
+  /**
+   * Supports altering future start dates
+   * @return bool
+   */
+  public function supportsFutureRecurStartDate() {
+    return TRUE;
+  }
+
   /**
    * Submit a refund payment
    *
@@ -214,7 +229,7 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
    * @return array
    */
   public function getEditableRecurringScheduleFields() {
-    return array('amount', 'next_sched_contribution_date');
+    return ['amount', 'next_sched_contribution_date'];
   }
 
   /**
@@ -223,7 +238,7 @@ class CRM_Core_Payment_Dummy extends CRM_Core_Payment {
    *
    * @return bool|object
    */
-  public function cancelSubscription(&$message = '', $params = array()) {
+  public function cancelSubscription(&$message = '', $params = []) {
     return TRUE;
   }