Add recur ID to doCancelRecurring
[civicrm-core.git] / CRM / Contribute / Form / CancelSubscription.php
index e02ae64bb5860f1c211cf476dd5a5b2de209cfc8..f8b523e2e5d3c55be2abdcd391d10b0768eb4a8c 100644 (file)
@@ -8,6 +8,7 @@
  | and copyright information, see https://civicrm.org/licensing       |
  +--------------------------------------------------------------------+
  */
+use Civi\Payment\PropertyBag;
 
 /**
  *
@@ -45,14 +46,14 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
   public function preProcess() {
     parent::preProcess();
     if ($this->_crid) {
-      $this->assign('frequency_unit', $this->_subscriptionDetails->frequency_unit);
-      $this->assign('frequency_interval', $this->_subscriptionDetails->frequency_interval);
-      $this->assign('amount', $this->_subscriptionDetails->amount);
-      $this->assign('installments', $this->_subscriptionDetails->installments);
+      $this->assign('frequency_unit', $this->getSubscriptionDetails()->frequency_unit);
+      $this->assign('frequency_interval', $this->getSubscriptionDetails()->frequency_interval);
+      $this->assign('amount', $this->getSubscriptionDetails()->amount);
+      $this->assign('installments', $this->getSubscriptionDetails()->installments);
 
       // Are we cancelling a recurring contribution that is linked to an auto-renew membership?
-      if ($this->_subscriptionDetails->membership_id) {
-        $this->_mid = $this->_subscriptionDetails->membership_id;
+      if ($this->getSubscriptionDetails()->membership_id) {
+        $this->_mid = $this->getSubscriptionDetails()->membership_id;
       }
     }
 
@@ -68,19 +69,19 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
 
     if ($this->_coid) {
       if (CRM_Contribute_BAO_Contribution::isSubscriptionCancelled($this->_coid)) {
-        CRM_Core_Error::fatal(ts('The recurring contribution looks to have been cancelled already.'));
+        CRM_Core_Error::statusBounce(ts('The recurring contribution looks to have been cancelled already.'));
       }
       $this->_paymentProcessorObj = CRM_Financial_BAO_PaymentProcessor::getProcessorForEntity($this->_coid, 'contribute', 'obj');
 
-      $this->assign('frequency_unit', $this->_subscriptionDetails->frequency_unit);
-      $this->assign('frequency_interval', $this->_subscriptionDetails->frequency_interval);
-      $this->assign('amount', $this->_subscriptionDetails->amount);
-      $this->assign('installments', $this->_subscriptionDetails->installments);
+      $this->assign('frequency_unit', $this->getSubscriptionDetails()->frequency_unit);
+      $this->assign('frequency_interval', $this->getSubscriptionDetails()->frequency_interval);
+      $this->assign('amount', $this->getSubscriptionDetails()->amount);
+      $this->assign('installments', $this->getSubscriptionDetails()->installments);
     }
 
     if (
       (!$this->_crid && !$this->_coid && !$this->_mid) ||
-      (!$this->_subscriptionDetails)
+      (!$this->getSubscriptionDetails())
     ) {
       CRM_Core_Error::statusBounce('Required information missing.');
     }
@@ -95,9 +96,9 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
       unset($this->entityFields['send_cancel_request'], $this->entityFields['is_notify']);
     }
 
-    if ($this->_subscriptionDetails->contact_id) {
+    if ($this->getSubscriptionDetails()->contact_id) {
       list($this->_donorDisplayName, $this->_donorEmail)
-        = CRM_Contact_BAO_Contact::getContactDetails($this->_subscriptionDetails->contact_id);
+        = CRM_Contact_BAO_Contact::getContactDetails($this->getSubscriptionDetails()->contact_id);
     }
   }
 
@@ -187,7 +188,7 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
    * Process the form submission.
    */
   public function postProcess() {
-    $status = $message = NULL;
+    $message = NULL;
     $cancelSubscription = TRUE;
     $params = $this->controller->exportValues($this->_name);
 
@@ -203,24 +204,21 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
     }
 
     if (CRM_Utils_Array::value('send_cancel_request', $params) == 1) {
-      // Note the 'subscriptionId' here is the value stored in
-      // civicrm_contribution_recur.processor_id
-      $cancelParams = ['subscriptionId' => $this->_subscriptionDetails->subscription_id];
       try {
-        $cancelSubscription = $this->_paymentProcessorObj->cancelSubscription($message, $cancelParams);
+        $propertyBag = new PropertyBag();
+        $propertyBag->setContributionRecurID($this->getSubscriptionDetails()->recur_id);
+        $propertyBag->setRecurProcessorID($this->getSubscriptionDetails()->subscription_id);
+        $message = $this->_paymentProcessorObj->doCancelRecurring($propertyBag)['message'];
       }
       catch (\Civi\Payment\Exception\PaymentProcessorException $e) {
         CRM_Core_Error::statusBounce($e->getMessage());
       }
     }
 
-    if (is_a($cancelSubscription, 'CRM_Core_Error')) {
-      CRM_Core_Error::displaySessionError($cancelSubscription);
-    }
-    elseif ($cancelSubscription) {
+    if ($cancelSubscription) {
       try {
         civicrm_api3('ContributionRecur', 'cancel', [
-          'id' => $this->_subscriptionDetails->recur_id,
+          'id' => $this->getSubscriptionDetails()->recur_id,
           'membership_id' => $this->_mid,
           'processor_message' => $message,
           'cancel_reason' => $params['cancel_reason'],
@@ -240,15 +238,15 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
           $msgType = 'info';
         }
         else {
-          $tplParams['recur_frequency_interval'] = $this->_subscriptionDetails->frequency_interval;
-          $tplParams['recur_frequency_unit'] = $this->_subscriptionDetails->frequency_unit;
-          $tplParams['amount'] = $this->_subscriptionDetails->amount;
+          $tplParams['recur_frequency_interval'] = $this->getSubscriptionDetails()->frequency_interval;
+          $tplParams['recur_frequency_unit'] = $this->getSubscriptionDetails()->frequency_unit;
+          $tplParams['amount'] = $this->getSubscriptionDetails()->amount;
           $tplParams['contact'] = ['display_name' => $this->_donorDisplayName];
           $status = ts('The recurring contribution of %1, every %2 %3 has been cancelled.',
             [
-              1 => $this->_subscriptionDetails->amount,
-              2 => $this->_subscriptionDetails->frequency_interval,
-              3 => $this->_subscriptionDetails->frequency_unit,
+              1 => $this->getSubscriptionDetails()->amount,
+              2 => $this->getSubscriptionDetails()->frequency_interval,
+              3 => $this->getSubscriptionDetails()->frequency_unit,
             ]
           );
           $msgTitle = 'Contribution Cancelled';
@@ -256,18 +254,18 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
         }
 
         if (CRM_Utils_Array::value('is_notify', $params) == 1) {
-          if ($this->_subscriptionDetails->contribution_page_id) {
+          if ($this->getSubscriptionDetails()->contribution_page_id) {
             CRM_Core_DAO::commonRetrieveAll(
               'CRM_Contribute_DAO_ContributionPage',
               'id',
-              $this->_subscriptionDetails->contribution_page_id,
+              $this->getSubscriptionDetails()->contribution_page_id,
               $value,
               ['title', 'receipt_from_name', 'receipt_from_email']
             );
             $receiptFrom
-              = '"' . CRM_Utils_Array::value('receipt_from_name', $value[$this->_subscriptionDetails->contribution_page_id]) .
+              = '"' . CRM_Utils_Array::value('receipt_from_name', $value[$this->getSubscriptionDetails()->contribution_page_id]) .
               '" <' .
-              $value[$this->_subscriptionDetails->contribution_page_id]['receipt_from_email'] .
+              $value[$this->getSubscriptionDetails()->contribution_page_id]['receipt_from_email'] .
               '>';
           }
           else {
@@ -280,7 +278,7 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
             = [
               'groupName' => $this->_mode == 'auto_renew' ? 'msg_tpl_workflow_membership' : 'msg_tpl_workflow_contribution',
               'valueName' => $this->_mode == 'auto_renew' ? 'membership_autorenew_cancelled' : 'contribution_recurring_cancelled',
-              'contactId' => $this->_subscriptionDetails->contact_id,
+              'contactId' => $this->getSubscriptionDetails()->contact_id,
               'tplParams' => $tplParams,
               //'isTest'    => $isTest, set this from _objects
               'PDFFilename' => 'receipt.pdf',