Merge pull request #15976 from eileenmcnaughton/5.20
[civicrm-core.git] / CRM / Contribute / Form / ContributionRecur.php
index d37db2c0a35065a28703bfa1b15952f937e327c5..b333159eca837a2ed463ec282a6563b4407ef87b 100644 (file)
@@ -39,12 +39,16 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
   use CRM_Core_Form_EntityFormTrait;
 
   /**
-   * @var int Contribution ID
+   * Contribution ID.
+   *
+   * @var int
    */
   protected $_coid = NULL;
 
   /**
-   * @var int Contribution Recur ID
+   * Contribution Recur ID.
+   *
+   * @var int
    */
   protected $_crid = NULL;
 
@@ -59,7 +63,9 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
   protected $contributionRecurID = NULL;
 
   /**
-   * @var int Membership ID
+   * Membership ID.
+   *
+   * @var int
    */
   protected $_mid = NULL;
 
@@ -71,10 +77,11 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
   protected $_paymentProcessorObj = NULL;
 
   /**
-   * @var array
+   * Current payment processor.
    *
-   * Current payment processor including a copy of the object in 'object' key for
-   * legacy reasons.
+   * This includes a copy of the object in 'object' key for legacy reasons.
+   *
+   * @var array
    */
   public $_paymentProcessor = [];
 
@@ -100,6 +107,13 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
    */
   protected $subscriptionDetails = [];
 
+  /**
+   * Is the form being accessed by a front end user to update their own recurring.
+   *
+   * @var bool
+   */
+  protected $selfService;
+
   /**
    * Explicitly declare the entity api name.
    */
@@ -114,6 +128,15 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
     return 'create';
   }
 
+  /**
+   * Get the entity id being edited.
+   *
+   * @return int|null
+   */
+  public function getEntityId() {
+    return $this->contributionRecurID;
+  }
+
   /**
    * Set variables up before form is built.
    *
@@ -146,6 +169,10 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
       }
       $this->_paymentProcessorObj = $this->_paymentProcessor['object'];
     }
+    elseif ($this->_mid) {
+      $this->_paymentProcessorObj = CRM_Financial_BAO_PaymentProcessor::getProcessorForEntity($this->_mid, 'membership', 'obj');
+      $this->_paymentProcessor = $this->_paymentProcessorObj->getPaymentProcessor();
+    }
   }
 
   /**
@@ -158,6 +185,11 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
     elseif ($this->_coid) {
       $this->subscriptionDetails = $this->_subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->_coid, 'contribution');
     }
+    elseif ($this->_mid) {
+      $this->subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->_mid, 'membership');
+    }
+    // This is being set temporarily - we should eventually just use the getter fn.
+    $this->_subscriptionDetails = $this->subscriptionDetails;
   }
 
   /**
@@ -179,4 +211,23 @@ class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form {
     return isset($sub->contact_id) ? $sub->contact_id : FALSE;
   }
 
+  /**
+   * Is this being used by a front end user to update their own recurring.
+   *
+   * @return bool
+   */
+  protected function isSelfService() {
+    if (!is_null($this->selfService)) {
+      return $this->selfService;
+    }
+    $this->selfService = FALSE;
+    if (!CRM_Core_Permission::check('edit contributions')) {
+      if ($this->_subscriptionDetails->contact_id != $this->getContactID()) {
+        CRM_Core_Error::statusBounce(ts('You do not have permission to cancel this recurring contribution.'));
+      }
+      $this->selfService = TRUE;
+    }
+    return $this->selfService;
+  }
+
 }