From: eileen Date: Fri, 23 Oct 2020 05:36:14 +0000 (+1300) Subject: Move filtering of unpermitted options for reports/ search select to financial acl... X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=51d1f9260a2fcb03188f14eb9ae26fc370b48cd9;p=civicrm-core.git Move filtering of unpermitted options for reports/ search select to financial acl extension --- diff --git a/CRM/Contribute/BAO/Query.php b/CRM/Contribute/BAO/Query.php index f91512a0ea..5255b6d36e 100644 --- a/CRM/Contribute/BAO/Query.php +++ b/CRM/Contribute/BAO/Query.php @@ -931,9 +931,8 @@ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query { ); // CRM-13848 - CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, CRM_Core_Action::VIEW); $form->addSelect('financial_type_id', - ['entity' => 'contribution', 'multiple' => 'multiple', 'context' => 'search', 'options' => $financialTypes] + ['entity' => 'contribution', 'multiple' => 'multiple', 'context' => 'search', 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search')] ); // use contribution_payment_instrument_id instead of payment_instrument_id diff --git a/CRM/Financial/BAO/FinancialType.php b/CRM/Financial/BAO/FinancialType.php index dd4d85dbe6..841952fba7 100644 --- a/CRM/Financial/BAO/FinancialType.php +++ b/CRM/Financial/BAO/FinancialType.php @@ -267,6 +267,12 @@ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { /** * Get available Financial Types. * + * This logic is being moved into the financialacls extension. + * + * Rather than call this function consider using + * + * $types = \CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'); + * * @param array $financialTypes * (reference ) an array of financial types * @param int|string $action diff --git a/CRM/Report/Form/Contribute/Bookkeeping.php b/CRM/Report/Form/Contribute/Bookkeeping.php index 06f89ab8c9..c0bc36eacb 100644 --- a/CRM/Report/Form/Contribute/Bookkeeping.php +++ b/CRM/Report/Form/Contribute/Bookkeeping.php @@ -245,7 +245,7 @@ class CRM_Report_Form_Contribute_Bookkeeping extends CRM_Report_Form { 'title' => ts('Financial Type'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), ], ], 'order_bys' => [ diff --git a/CRM/Report/Form/Contribute/Detail.php b/CRM/Report/Form/Contribute/Detail.php index 14b5facbd9..4576423e11 100644 --- a/CRM/Report/Form/Contribute/Detail.php +++ b/CRM/Report/Form/Contribute/Detail.php @@ -205,7 +205,7 @@ class CRM_Report_Form_Contribute_Detail extends CRM_Report_Form { 'financial_type_id' => [ 'title' => ts('Financial Type'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), 'type' => CRM_Utils_Type::T_INT, ], 'contribution_page_id' => [ diff --git a/CRM/Report/Form/Contribute/Lybunt.php b/CRM/Report/Form/Contribute/Lybunt.php index 101717609d..97c0d8f9d3 100644 --- a/CRM/Report/Form/Contribute/Lybunt.php +++ b/CRM/Report/Form/Contribute/Lybunt.php @@ -205,7 +205,7 @@ class CRM_Report_Form_Contribute_Lybunt extends CRM_Report_Form { 'title' => ts('Financial Type'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), ], 'contribution_status_id' => [ 'title' => ts('Contribution Status'), diff --git a/CRM/Report/Form/Contribute/Recur.php b/CRM/Report/Form/Contribute/Recur.php index 6f0109d284..c61fb4b76d 100644 --- a/CRM/Report/Form/Contribute/Recur.php +++ b/CRM/Report/Form/Contribute/Recur.php @@ -185,7 +185,7 @@ class CRM_Report_Form_Contribute_Recur extends CRM_Report_Form { 'financial_type_id' => [ 'title' => ts('Financial Type'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), 'type' => CRM_Utils_Type::T_INT, ], 'frequency_unit' => [ diff --git a/CRM/Report/Form/Contribute/Repeat.php b/CRM/Report/Form/Contribute/Repeat.php index d5044a08e7..18bfd109bd 100644 --- a/CRM/Report/Form/Contribute/Repeat.php +++ b/CRM/Report/Form/Contribute/Repeat.php @@ -220,7 +220,7 @@ class CRM_Report_Form_Contribute_Repeat extends CRM_Report_Form { 'title' => ts('Financial Type'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), ), 'contribution_status_id' => array( 'title' => ts('Contribution Status'), diff --git a/CRM/Report/Form/Contribute/SoftCredit.php b/CRM/Report/Form/Contribute/SoftCredit.php index 8370e74203..4d4277f6b6 100644 --- a/CRM/Report/Form/Contribute/SoftCredit.php +++ b/CRM/Report/Form/Contribute/SoftCredit.php @@ -206,7 +206,7 @@ class CRM_Report_Form_Contribute_SoftCredit extends CRM_Report_Form { 'title' => ts('Financial Type'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), ], ], 'grouping' => 'softcredit-fields', diff --git a/CRM/Report/Form/Contribute/Summary.php b/CRM/Report/Form/Contribute/Summary.php index b7c40f5a19..c73da90e77 100644 --- a/CRM/Report/Form/Contribute/Summary.php +++ b/CRM/Report/Form/Contribute/Summary.php @@ -171,7 +171,7 @@ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form { 'financial_type_id' => [ 'title' => ts('Financial Type'), 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), 'type' => CRM_Utils_Type::T_INT, ], 'contribution_page_id' => [ diff --git a/CRM/Report/Form/Contribute/Sybunt.php b/CRM/Report/Form/Contribute/Sybunt.php index 1b45af360e..dc6b31898a 100644 --- a/CRM/Report/Form/Contribute/Sybunt.php +++ b/CRM/Report/Form/Contribute/Sybunt.php @@ -209,7 +209,7 @@ class CRM_Report_Form_Contribute_Sybunt extends CRM_Report_Form { 'title' => ts('Financial Type'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), ], 'contribution_status_id' => [ 'title' => ts('Contribution Status'), diff --git a/CRM/Report/Form/Contribute/TopDonor.php b/CRM/Report/Form/Contribute/TopDonor.php index 83d903950e..7b6c14f51f 100644 --- a/CRM/Report/Form/Contribute/TopDonor.php +++ b/CRM/Report/Form/Contribute/TopDonor.php @@ -135,7 +135,7 @@ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form { 'title' => ts('Financial Type'), 'type' => CRM_Utils_Type::T_INT, 'operatorType' => CRM_Report_Form::OP_MULTISELECT, - 'options' => CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(), + 'options' => CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'), ], 'contribution_status_id' => [ 'title' => ts('Contribution Status'), diff --git a/ext/financialacls/financialacls.php b/ext/financialacls/financialacls.php index 0aa087dc79..c039ef1998 100644 --- a/ext/financialacls/financialacls.php +++ b/ext/financialacls/financialacls.php @@ -232,6 +232,44 @@ function financialacls_civicrm_membershipTypeValues($form, &$membershipTypeValue } } +/** + * Remove unpermitted financial types from field Options in search context. + * + * Search context is described as + * 'search' => "search: searchable options are returned; labels are translated.", + * So this is appropriate to removing the options from search screens. + * + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_fieldOptions + * + * @param string $entity + * @param string $field + * @param array $options + * @param array $params + */ +function financialacls_civicrm_fieldOptions($entity, $field, &$options, $params) { + if ($entity === 'Contribution' && $field === 'financial_type_id' && $params['context'] === 'search') { + $action = CRM_Core_Action::VIEW; + // At this stage we are only considering the view action. Code from + // CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(). + $actions = [ + CRM_Core_Action::VIEW => 'view', + CRM_Core_Action::UPDATE => 'edit', + CRM_Core_Action::ADD => 'add', + CRM_Core_Action::DELETE => 'delete', + ]; + $cacheKey = 'available_types_' . $action; + if (!isset(\Civi::$statics['CRM_Financial_BAO_FinancialType'][$cacheKey])) { + foreach ($options as $finTypeId => $type) { + if (!CRM_Core_Permission::check($actions[$action] . ' contributions of type ' . $type)) { + unset($options[$finTypeId]); + } + } + \Civi::$statics['CRM_Financial_BAO_FinancialType'][$cacheKey] = $options; + } + $options = \Civi::$statics['CRM_Financial_BAO_FinancialType'][$cacheKey]; + } +} + // --- Functions below this ship commented out. Uncomment as required. --- /** diff --git a/ext/financialacls/tests/phpunit/Civi/Financialacls/OptionsTest.php b/ext/financialacls/tests/phpunit/Civi/Financialacls/OptionsTest.php new file mode 100644 index 0000000000..1f9ab60309 --- /dev/null +++ b/ext/financialacls/tests/phpunit/Civi/Financialacls/OptionsTest.php @@ -0,0 +1,24 @@ +setupLoggedInUserWithLimitedFinancialTypeAccess(); + $options = \CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(); + $this->assertEquals(['Donation'], array_merge($options)); + $builtOptions = \CRM_Contribute_BAO_Contribution::buildOptions('financial_type_id', 'search'); + $this->assertEquals(['Donation'], array_merge($builtOptions)); + } + +}