Fix button breakage on viewContribution
[civicrm-core.git] / CRM / Contribute / Form / ContributionView.php
index 69022ec099796c0e21f2205f3c91b26372f28466..b16ec29a04b24170db8c7d9c00d9ee9020d01575 100644 (file)
@@ -31,6 +31,11 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form {
   public function preProcess() {
     $id = $this->getID();
 
+    // Check permission for action.
+    if (!CRM_Core_Permission::checkActionPermission('CiviContribute', $this->_action)) {
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
+    }
+    $params = ['id' => $id];
     $context = CRM_Utils_Request::retrieve('context', 'Alphanumeric', $this);
     $this->assign('context', $context);
 
@@ -44,12 +49,11 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form {
     $values = (array) $contribution;
     $contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $values['contribution_status_id']);
 
-    if (!isset($this->get_template_vars()['hookDiscount'])) {
-      $this->assign('hookDiscount', ['message' => '']);
-    }
     $this->addExpectedSmartyVariables([
+      'hookDiscount',
       'pricesetFieldsCount',
       'pcp_id',
+      'getTaxDetails',
       // currencySymbol maybe doesn't make sense but is probably old?
       'currencySymbol',
     ]);
@@ -102,26 +106,30 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form {
       }
     }
 
-    $participantLineItems = \Civi\Api4\LineItem::get()
-      ->addSelect('entity_id', 'participant.role_id:label', 'participant.fee_level', 'participant.contact_id', 'contact.display_name')
-      ->addJoin('Participant AS participant', 'LEFT', ['participant.id', '=', 'entity_id'])
-      ->addJoin('Contact AS contact', 'LEFT', ['contact.id', '=', 'participant.contact_id'])
-      ->addWhere('entity_table', '=', 'civicrm_participant')
-      ->addWhere('contribution_id', '=', $id)
-      ->execute();
+    try {
+      $participantLineItems = \Civi\Api4\LineItem::get()
+        ->addSelect('entity_id', 'participant.role_id:label', 'participant.fee_level', 'participant.contact_id', 'contact.display_name')
+        ->addJoin('Participant AS participant', 'LEFT', ['participant.id', '=', 'entity_id'])
+        ->addJoin('Contact AS contact', 'LEFT', ['contact.id', '=', 'participant.contact_id'])
+        ->addWhere('entity_table', '=', 'civicrm_participant')
+        ->addWhere('contribution_id', '=', $id)
+        ->execute();
+    }
+    catch (API_Exception $e) {
+      // likely don't have permission for events/participants
+      $participantLineItems = [];
+    }
 
     $associatedParticipants = FALSE;
-    if ($participantLineItems->count()) {
-      foreach ($participantLineItems as $participant) {
-        $associatedParticipants[] = [
-          'participantLink' => CRM_Utils_System::url('civicrm/contact/view/participant',
-            "action=view&reset=1&id={$participant['entity_id']}&cid={$participant['participant.contact_id']}&context=home"
-          ),
-          'participantName' => $participant['contact.display_name'],
-          'fee' => implode(', ', $participant['participant.fee_level']),
-          'role' => implode(', ', $participant['participant.role_id:label']),
-        ];
-      }
+    foreach ($participantLineItems as $participant) {
+      $associatedParticipants[] = [
+        'participantLink' => CRM_Utils_System::url('civicrm/contact/view/participant',
+          "action=view&reset=1&id={$participant['entity_id']}&cid={$participant['participant.contact_id']}&context=home"
+        ),
+        'participantName' => $participant['contact.display_name'],
+        'fee' => implode(', ', $participant['participant.fee_level']),
+        'role' => implode(', ', $participant['participant.role_id:label']),
+      ];
     }
     $this->assign('associatedParticipants', $associatedParticipants);
 
@@ -153,6 +161,7 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form {
     $values['note'] = array_values($noteValue);
 
     // show billing address location details, if exists
+    $values['billing_address'] = '';
     if (!empty($values['address_id'])) {
       $addressParams = ['id' => $values['address_id']];
       $addressDetails = CRM_Core_BAO_Address::getValues($addressParams, FALSE, 'id');
@@ -346,6 +355,7 @@ class CRM_Contribute_Form_ContributionView extends CRM_Core_Form {
     $paymentInfo = CRM_Contribute_BAO_Contribution::getPaymentInfo($id, 'contribution', TRUE);
     $title = ts('View Payment');
     $this->assign('transaction', TRUE);
+    // Used in paymentInfoBlock.tpl
     $this->assign('payments', $paymentInfo['transaction']);
     $this->assign('paymentLinks', $paymentInfo['payment_links']);
     return $title;