CRM-16526 CIVI-3 Added BAO function to filter the financial types instead of logic...
authorEdsel <edsel.lopez@jmaconsulting.biz>
Fri, 26 Feb 2016 08:01:38 +0000 (13:31 +0530)
committerEdsel <edsel.lopez@jmaconsulting.biz>
Fri, 26 Feb 2016 08:01:38 +0000 (13:31 +0530)
----------------------------------------
* CRM-16526: ACLs for Financial Types
  https://issues.civicrm.org/jira/browse/CRM-16526

CRM/Price/BAO/LineItem.php
api/v3/LineItem.php

index cb750b32bc60911e323fd03483d9c280b40c0016..6e16600c9c094288c340dc65fae902eb747c45c8 100644 (file)
@@ -116,6 +116,34 @@ class CRM_Price_BAO_LineItem extends CRM_Price_DAO_LineItem {
     return NULL;
   }
 
+  /**
+   * Modifies $params array for filtering financial types.
+   *
+   * @param array $params
+   *   (reference ) an assoc array of name/value pairs.
+   *
+   */
+  public static function getAPILineItemParams(&$params) {
+    CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types);
+    if ($types && empty($params['financial_type_id'])) {
+      $params['financial_type_id'] = array('IN' => array_keys($types));
+    }
+    elseif ($types) {
+      if (is_array($params['financial_type_id'])) {
+        $invalidFts = array_diff($params['financial_type_id'], array_keys($types));
+      }
+      elseif (!in_array($params['financial_type_id'], array_keys($types))) {
+        $invalidFts = $params['financial_type_id'];
+      }
+      if ($invalidFts) {
+        $params['financial_type_id'] = array('NOT IN' => $invalidFts);
+      }
+    }
+    else {
+      $params['financial_type_id'] = 0;
+    }
+  }
+
   /**
    * @param int $entityId
    * @param $entityTable
index 3ed9556b4540423edbcca3cd67bc1c1d476b7c33..437df48118a482ed7ca79b0db9539129a45d318e 100644 (file)
@@ -76,21 +76,7 @@ function _civicrm_api3_line_item_create_spec(&$params) {
  */
 function civicrm_api3_line_item_get($params) {
   if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && CRM_Utils_Array::value('check_permissions', $params)) {
-    CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types);
-    if (empty($params['financial_type_id'])) {
-      $params['financial_type_id'] = array('IN' => array_keys($types));
-    }
-    else {
-      if (is_array($params['financial_type_id'])) {
-        $invalidFts = array_diff($params['financial_type_id'], array_keys($types));
-      }
-      elseif (!in_array($params['financial_type_id'], array_keys($types))) {
-        $invalidFts = $params['financial_type_id'];
-      }
-      if ($invalidFts) {
-        $params['financial_type_id'] = array('NOT IN' => $invalidFts);
-      }
-    }
+    CRM_Price_BAO_LineItem::getAPILineItemParams($params);
   }
   return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
@@ -110,10 +96,7 @@ function civicrm_api3_line_item_delete($params) {
   if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && CRM_Utils_Array::value('check_permissions', $params)) {
     CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types, CRM_Core_Action::DELETE);
     if (empty($params['financial_type_id'])) {
-      $params['financial_type_id'] = civicrm_api3('LineItem', 'getvalue', array(
-        'id' => $params['id'],
-        'return' => 'financial_type_id',
-      ));
+      $params['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_LineItem', $params['id'], 'financial_type_id');
     }
     if (!in_array($params['financial_type_id'], array_keys($types))) {
       throw new API_Exception('You do not have permission to delete this line item');