Move check permissioned line items to acl now it is not used in core
authorEileen McNaughton <emcnaughton@wikimedia.org>
Thu, 14 Dec 2023 06:34:15 +0000 (19:34 +1300)
committereileen <emcnaughton@wikimedia.org>
Tue, 2 Jan 2024 21:49:30 +0000 (10:49 +1300)
CRM/Financial/BAO/FinancialType.php
ext/financialacls/financialacls.php
ext/financialacls/tests/phpunit/Civi/Financialacls/FinancialTypeTest.php

index 458114015022c097f40462f0a1ece7197f3d78f3..1e1f35cf40811edc19d7c3bc5cc69a0f12b41271 100644 (file)
@@ -347,7 +347,7 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType im
   /**
    * Function to check if lineitems present in a contribution have permissioned FTs.
    *
-   * @deprecated since 5.68 not part of core - to be handled within financialacls extension
+   * @deprecated since 5.68 not part of core - to be removed 5.74
    *
    * @param int $id
    *   contribution id
@@ -359,6 +359,7 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType im
    * @return bool
    */
   public static function checkPermissionedLineItems($id, $op, $force = TRUE, $contactID = NULL) {
+    CRM_Core_Error::deprecatedFunctionWarning('use financial acls extension');
     if (!self::isACLFinancialTypeStatus()) {
       return TRUE;
     }
index da20a0922f2fd37263e4539dd1ad5622848873ef..e638def58942ddbfb6a388d2ade3d9cddb5a340f 100644 (file)
@@ -285,14 +285,46 @@ function _financialacls_civi_api4_authorizeContribution(\Civi\Api4\Event\Authori
     if ($e->getActionName() === 'delete') {
       // First check contribution financial type
       // Now check permissioned line items & permissioned contribution
-      if (!CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($contributionID, 'delete', FALSE, $e->getUserID())
-      ) {
+      if (!_civicrm_financial_acls_check_permissioned_line_items($contributionID, 'delete', FALSE, $e->getUserID())) {
         $e->setAuthorized(FALSE);
       }
     }
   }
 }
 
+/**
+ * Function to check if lineitems present in a contribution have permissioned FTs.
+ *
+ * @param int $id
+ *   contribution id
+ * @param string $op
+ *   the mode of operation, can be add, view, edit, delete
+ * @param bool $force
+ * @param int $contactID
+ *
+ * @return bool
+ */
+function _civicrm_financial_acls_check_permissioned_line_items($id, $op, $force = TRUE, $contactID = NULL) {
+  if (!financialacls_is_acl_limiting_enabled()) {
+    return TRUE;
+  }
+  $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($id);
+  $flag = FALSE;
+  foreach ($lineItems as $items) {
+    if (!CRM_Core_Permission::check($op . ' contributions of type ' . CRM_Contribute_PseudoConstant::financialType($items['financial_type_id']), $contactID)) {
+      if ($force) {
+        throw new CRM_Core_Exception(ts('You do not have permission to access this page.'));
+      }
+      $flag = FALSE;
+      break;
+    }
+    else {
+      $flag = TRUE;
+    }
+  }
+  return $flag;
+}
+
 /**
  * Get the permission required to perform this action on this financial type.
  *
index ef9f5f58cc6c1beaa7506e45fc30e0804ff9bfa7..b7f79b09b969b49b88129220eabdbd6aba2b2420 100644 (file)
@@ -78,7 +78,7 @@ class FinancialTypeTest extends BaseTestClass {
   }
 
   /**
-   * Check method testCheckPermissionedLineItems()
+   * Check method test_civicrm_financial_acls_check_permissioned_line_items()
    *
    * @throws \CRM_Core_Exception
    */
@@ -139,7 +139,7 @@ class FinancialTypeTest extends BaseTestClass {
     ]);
 
     try {
-      \CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($contribution['id'], 'view');
+      _civicrm_financial_acls_check_permissioned_line_items($contribution['id'], 'view');
       $this->fail('Missed expected exception');
     }
     catch (\CRM_Core_Exception $e) {
@@ -150,7 +150,7 @@ class FinancialTypeTest extends BaseTestClass {
       'view contributions of type Donation',
     ]);
     try {
-      \CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($contribution['id'], 'view');
+      _civicrm_financial_acls_check_permissioned_line_items($contribution['id'], 'view');
     }
     catch (\CRM_Core_Exception $e) {
       $this->fail('permissions should be established');