require_once 'financialacls.civix.php';
// phpcs:disable
use Civi\Api4\EntityFinancialAccount;
+use Civi\Api4\MembershipType;
use CRM_Financialacls_ExtensionUtil as E;
// phpcs:enable
$clauses['financial_type_id'] = _financialacls_civicrm_get_type_clause();
break;
+ case 'Membership':
+ $clauses['membership_type_id'] = _financialacls_civicrm_get_membership_type_clause();
+ break;
+
case 'FinancialType':
$clauses['id'] = _financialacls_civicrm_get_type_clause();
break;
* @return string
*/
function _financialacls_civicrm_get_type_clause(): string {
+ return 'IN (' . implode(',', _financialacls_civicrm_get_accessible_financial_types()) . ')';
+}
+
+/**
+ * Get an array of the ids of accessible financial types.
+ *
+ * If none then it will be [0]
+ *
+ * @return int[]
+ */
+function _financialacls_civicrm_get_accessible_financial_types(): array {
$types = [];
CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types);
- if ($types) {
- return 'IN (' . implode(',', array_keys($types)) . ')';
+ if (empty($types)) {
+ $types = [0];
}
- return '= 0';
+ return array_keys($types);
+}
+
+/**
+ * Get the clause to limit available membership types.
+ *
+ * @return string
+ *
+ * @throws \API_Exception
+ */
+function _financialacls_civicrm_get_membership_type_clause(): string {
+ $financialTypes = _financialacls_civicrm_get_accessible_financial_types();
+ if ($financialTypes === [0] || !CRM_Core_Component::isEnabled('CiviMember')) {
+ return '= 0';
+ }
+ $membershipTypes = (array) MembershipType::get(FALSE)
+ ->addWhere('financial_type_id', 'IN', $financialTypes)->execute()->indexBy('id');
+ return empty($membershipTypes) ? '= 0' : ('IN (' . implode(',', array_keys($membershipTypes)) . ')');
}
/**
//
//}
+/**
+ * Require financial acl permissions for financial screens.
+ *
+ * @param array $menu
+ */
+function financialacls_civicrm_alterMenu(array &$menu): void {
+ if (!financialacls_is_acl_limiting_enabled()) {
+ return;
+ }
+ $menu['civicrm/admin/financial/financialType']['access_arguments'] = [['administer CiviCRM Financial Types']];
+}
+
/**
* Implements hook_civicrm_navigationMenu().
*