Merge pull request #15613 from eileenmcnaughton/lines_extract
[civicrm-core.git] / CRM / Contribute / Form / UpdateSubscription.php
index c1a092e53cbe31f0b876bfd9d47efec98e66197a..43c94c4caed096738cf17438baf36c545d1f7e87 100644 (file)
@@ -41,8 +41,6 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
 
   protected $_subscriptionDetails = NULL;
 
-  protected $_selfService = FALSE;
-
   public $_paymentProcessor = NULL;
 
   public $_paymentProcessorObj = NULL;
@@ -52,7 +50,7 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
    *
    * @var array
    */
-  protected $editableScheduleFields = array();
+  protected $editableScheduleFields = [];
 
   /**
    * The id of the contact associated with this recurring contribution.
@@ -71,24 +69,10 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
     parent::preProcess();
     $this->setAction(CRM_Core_Action::UPDATE);
 
-    if ($this->contributionRecurID) {
-      try {
-        $this->_paymentProcessorObj = CRM_Financial_BAO_PaymentProcessor::getPaymentProcessorForRecurringContribution($this->contributionRecurID);
-      }
-      catch (CRM_Core_Exception $e) {
-        CRM_Core_Error::statusBounce(ts('There is no valid processor for this subscription so it cannot be edited.'));
-      }
-      catch (CiviCRM_API3_Exception $e) {
-        CRM_Core_Error::statusBounce(ts('There is no valid processor for this subscription so it cannot be edited.'));
-      }
-      $this->_subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->contributionRecurID);
-    }
-
     if ($this->_coid) {
       $this->_paymentProcessor = CRM_Financial_BAO_PaymentProcessor::getProcessorForEntity($this->_coid, 'contribute', 'info');
       // @todo test & replace with $this->_paymentProcessorObj =  Civi\Payment\System::singleton()->getById($this->_paymentProcessor['id']);
       $this->_paymentProcessorObj = CRM_Financial_BAO_PaymentProcessor::getProcessorForEntity($this->_coid, 'contribute', 'obj');
-      $this->_subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->_coid, 'contribution');
       $this->contributionRecurID = $this->_subscriptionDetails->recur_id;
     }
     elseif ($this->contributionRecurID) {
@@ -101,9 +85,9 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
 
     if ($this->_subscriptionDetails->membership_id && $this->_subscriptionDetails->auto_renew) {
       // Add Membership details to form
-      $membership = civicrm_api3('Membership', 'get', array(
+      $membership = civicrm_api3('Membership', 'get', [
         'contribution_recur_id' => $this->contributionRecurID,
-      ));
+      ]);
       if (!empty($membership['count'])) {
         $membershipDetails = reset($membership['values']);
         $values['membership_id'] = $membershipDetails['id'];
@@ -113,13 +97,7 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
       $this->assign('contactId', $this->_subscriptionDetails->contact_id);
     }
 
-    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 update subscription.'));
-      }
-      $this->_selfService = TRUE;
-    }
-    $this->assign('self_service', $this->_selfService);
+    $this->assign('self_service', $this->isSelfService());
 
     $this->editableScheduleFields = $this->_paymentProcessorObj->getEditableRecurringScheduleFields();
 
@@ -131,15 +109,15 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
     else {
       $this->assign('changeHelpText', $changeHelpText);
     }
-    $alreadyHardCodedFields = array('amount', 'installments');
+    $alreadyHardCodedFields = ['amount', 'installments'];
     foreach ($this->editableScheduleFields as $editableScheduleField) {
       if (!in_array($editableScheduleField, $alreadyHardCodedFields)) {
-        $this->addField($editableScheduleField, array('entity' => 'ContributionRecur'), FALSE, FALSE);
+        $this->addField($editableScheduleField, ['entity' => 'ContributionRecur'], FALSE, FALSE);
       }
     }
 
     // when custom data is included in this page
-    if (!empty($_POST['hidden_custom'])) {
+    if (!empty($_POST['hidden_custom']) && !$this->isSelfService()) {
       CRM_Custom_Form_CustomData::preProcess($this, NULL, NULL, 1, 'ContributionRecur', $this->contributionRecurID);
       CRM_Custom_Form_CustomData::buildQuickForm($this);
       CRM_Custom_Form_CustomData::setDefaultValues($this);
@@ -163,7 +141,7 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
    * Note that in edit/view mode the default values are retrieved from the database.
    */
   public function setDefaultValues() {
-    $this->_defaults = array();
+    $this->_defaults = [];
     $this->_defaults['amount'] = $this->_subscriptionDetails->amount;
     $this->_defaults['installments'] = $this->_subscriptionDetails->installments;
     $this->_defaults['campaign_id'] = $this->_subscriptionDetails->campaign_id;
@@ -181,16 +159,16 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
    */
   public function buildQuickForm() {
     // CRM-16398: If current recurring contribution got > 1 lineitems then make amount field readonly
-    $amtAttr = array('size' => 20);
+    $amtAttr = ['size' => 20];
     $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->_coid);
     if (count($lineItems) > 1) {
-      $amtAttr += array('readonly' => TRUE);
+      $amtAttr += ['readonly' => TRUE];
     }
     $this->addMoney('amount', ts('Recurring Contribution Amount'), TRUE, $amtAttr,
       TRUE, 'currency', $this->_subscriptionDetails->currency, TRUE
     );
 
-    $this->add('text', 'installments', ts('Number of Installments'), array('size' => 20), FALSE);
+    $this->add('text', 'installments', ts('Number of Installments'), ['size' => 20], FALSE);
 
     if ($this->_donorEmail) {
       $this->add('checkbox', 'is_notify', ts('Notify Contributor?'));
@@ -201,7 +179,7 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
     }
 
     if (CRM_Contribute_BAO_ContributionRecur::supportsFinancialTypeChange($this->contributionRecurID)) {
-      $this->addEntityRef('financial_type_id', ts('Financial Type'), array('entity' => 'FinancialType'), !$this->_selfService);
+      $this->addEntityRef('financial_type_id', ts('Financial Type'), ['entity' => 'FinancialType'], !$this->isSelfService());
     }
 
     // Add custom data
@@ -209,23 +187,22 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
     $this->assign('entityID', $this->contributionRecurID);
 
     $type = 'next';
-    if ($this->_selfService) {
+    if ($this->isSelfService()) {
       $type = 'submit';
     }
 
     // define the buttons
-    $this->addButtons(array(
-        array(
-          'type' => $type,
-          'name' => ts('Save'),
-          'isDefault' => TRUE,
-        ),
-        array(
-          'type' => 'cancel',
-          'name' => ts('Cancel'),
-        ),
-      )
-    );
+    $this->addButtons([
+      [
+        'type' => $type,
+        'name' => ts('Save'),
+        'isDefault' => TRUE,
+      ],
+      [
+        'type' => 'cancel',
+        'name' => ts('Cancel'),
+      ],
+    ]);
   }
 
   /**
@@ -235,7 +212,7 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
     // store the submitted values in an array
     $params = $this->exportValues();
 
-    if ($this->_selfService && $this->_donorEmail) {
+    if ($this->isSelfService() && $this->_donorEmail) {
       // for self service force notify
       $params['is_notify'] = 1;
     }
@@ -261,12 +238,12 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
       // save the changes
       CRM_Contribute_BAO_ContributionRecur::add($params);
       $status = ts('Recurring contribution has been updated to: %1, every %2 %3(s) for %4 installments.',
-        array(
+        [
           1 => CRM_Utils_Money::format($params['amount'], $this->_subscriptionDetails->currency),
           2 => $this->_subscriptionDetails->frequency_interval,
           3 => $this->_subscriptionDetails->frequency_unit,
           4 => $params['installments'],
-        )
+        ]
       );
 
       $msgTitle = ts('Update Success');
@@ -276,10 +253,10 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
 
       if ($this->_subscriptionDetails->amount != $params['amount']) {
         $message .= "<br /> " . ts("Recurring contribution amount has been updated from %1 to %2 for this subscription.",
-            array(
+            [
               1 => CRM_Utils_Money::format($this->_subscriptionDetails->amount, $this->_subscriptionDetails->currency),
               2 => CRM_Utils_Money::format($params['amount'], $this->_subscriptionDetails->currency),
-            )) . ' ';
+            ]) . ' ';
         if ($this->_subscriptionDetails->amount < $params['amount']) {
           $msg = ts('Recurring Contribution Updated - increased installment amount');
         }
@@ -289,20 +266,20 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
       }
 
       if ($this->_subscriptionDetails->installments != $params['installments']) {
-        $message .= "<br /> " . ts("Recurring contribution installments have been updated from %1 to %2 for this subscription.", array(
-              1 => $this->_subscriptionDetails->installments,
-              2 => $params['installments'],
-            )) . ' ';
+        $message .= "<br /> " . ts("Recurring contribution installments have been updated from %1 to %2 for this subscription.", [
+          1 => $this->_subscriptionDetails->installments,
+          2 => $params['installments'],
+        ]) . ' ';
       }
 
-      $activityParams = array(
+      $activityParams = [
         'source_contact_id' => $contactID,
         'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Update Recurring Contribution'),
         'subject' => $msg,
         'details' => $message,
         'activity_date_time' => date('YmdHis'),
         'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Completed'),
-      );
+      ];
 
       $session = CRM_Core_Session::singleton();
       $cid = $session->get('userID');
@@ -317,11 +294,11 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
         // send notification
         if ($this->_subscriptionDetails->contribution_page_id) {
           CRM_Core_DAO::commonRetrieveAll('CRM_Contribute_DAO_ContributionPage', 'id',
-            $this->_subscriptionDetails->contribution_page_id, $value, array(
+            $this->_subscriptionDetails->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]) . '" <' . $value[$this->_subscriptionDetails->contribution_page_id]['receipt_from_email'] . '>';
         }
@@ -332,17 +309,17 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
 
         list($donorDisplayName, $donorEmail) = CRM_Contact_BAO_Contact::getContactDetails($contactID);
 
-        $tplParams = array(
+        $tplParams = [
           'recur_frequency_interval' => $this->_subscriptionDetails->frequency_interval,
           'recur_frequency_unit' => $this->_subscriptionDetails->frequency_unit,
           'amount' => CRM_Utils_Money::format($params['amount']),
           'installments' => $params['installments'],
-        );
+        ];
 
-        $tplParams['contact'] = array('display_name' => $donorDisplayName);
+        $tplParams['contact'] = ['display_name' => $donorDisplayName];
         $tplParams['receipt_from_email'] = $receiptFrom;
 
-        $sendTemplateParams = array(
+        $sendTemplateParams = [
           'groupName' => 'msg_tpl_workflow_contribution',
           'valueName' => 'contribution_recurring_edit',
           'contactId' => $contactID,
@@ -352,7 +329,7 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
           'from' => $receiptFrom,
           'toName' => $donorDisplayName,
           'toEmail' => $donorEmail,
-        );
+        ];
         list($sent) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams);
       }
     }