e7339d59 |
1 | <?php |
2 | |
3 | require_once 'financialacls.civix.php'; |
4 | // phpcs:disable |
5 | use CRM_Financialacls_ExtensionUtil as E; |
6 | // phpcs:enable |
7 | |
8 | /** |
9 | * Implements hook_civicrm_config(). |
10 | * |
11 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config/ |
12 | */ |
13 | function financialacls_civicrm_config(&$config) { |
14 | _financialacls_civix_civicrm_config($config); |
15 | } |
16 | |
17 | /** |
18 | * Implements hook_civicrm_xmlMenu(). |
19 | * |
20 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu |
21 | */ |
22 | function financialacls_civicrm_xmlMenu(&$files) { |
23 | _financialacls_civix_civicrm_xmlMenu($files); |
24 | } |
25 | |
26 | /** |
27 | * Implements hook_civicrm_install(). |
28 | * |
29 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install |
30 | */ |
31 | function financialacls_civicrm_install() { |
32 | _financialacls_civix_civicrm_install(); |
33 | } |
34 | |
35 | /** |
36 | * Implements hook_civicrm_postInstall(). |
37 | * |
38 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall |
39 | */ |
40 | function financialacls_civicrm_postInstall() { |
41 | _financialacls_civix_civicrm_postInstall(); |
42 | } |
43 | |
44 | /** |
45 | * Implements hook_civicrm_uninstall(). |
46 | * |
47 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall |
48 | */ |
49 | function financialacls_civicrm_uninstall() { |
50 | _financialacls_civix_civicrm_uninstall(); |
51 | } |
52 | |
53 | /** |
54 | * Implements hook_civicrm_enable(). |
55 | * |
56 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable |
57 | */ |
58 | function financialacls_civicrm_enable() { |
59 | _financialacls_civix_civicrm_enable(); |
60 | } |
61 | |
62 | /** |
63 | * Implements hook_civicrm_disable(). |
64 | * |
65 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable |
66 | */ |
67 | function financialacls_civicrm_disable() { |
68 | _financialacls_civix_civicrm_disable(); |
69 | } |
70 | |
71 | /** |
72 | * Implements hook_civicrm_upgrade(). |
73 | * |
74 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade |
75 | */ |
76 | function financialacls_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { |
77 | return _financialacls_civix_civicrm_upgrade($op, $queue); |
78 | } |
79 | |
80 | /** |
81 | * Implements hook_civicrm_managed(). |
82 | * |
83 | * Generate a list of entities to create/deactivate/delete when this module |
84 | * is installed, disabled, uninstalled. |
85 | * |
86 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed |
87 | */ |
88 | function financialacls_civicrm_managed(&$entities) { |
89 | _financialacls_civix_civicrm_managed($entities); |
90 | } |
91 | |
92 | /** |
93 | * Implements hook_civicrm_caseTypes(). |
94 | * |
95 | * Generate a list of case-types. |
96 | * |
97 | * Note: This hook only runs in CiviCRM 4.4+. |
98 | * |
99 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes |
100 | */ |
101 | function financialacls_civicrm_caseTypes(&$caseTypes) { |
102 | _financialacls_civix_civicrm_caseTypes($caseTypes); |
103 | } |
104 | |
105 | /** |
106 | * Implements hook_civicrm_angularModules(). |
107 | * |
108 | * Generate a list of Angular modules. |
109 | * |
110 | * Note: This hook only runs in CiviCRM 4.5+. It may |
111 | * use features only available in v4.6+. |
112 | * |
113 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules |
114 | */ |
115 | function financialacls_civicrm_angularModules(&$angularModules) { |
116 | _financialacls_civix_civicrm_angularModules($angularModules); |
117 | } |
118 | |
119 | /** |
120 | * Implements hook_civicrm_alterSettingsFolders(). |
121 | * |
122 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders |
123 | */ |
124 | function financialacls_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { |
125 | _financialacls_civix_civicrm_alterSettingsFolders($metaDataFolders); |
126 | } |
127 | |
128 | /** |
129 | * Implements hook_civicrm_entityTypes(). |
130 | * |
131 | * Declare entity types provided by this module. |
132 | * |
133 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes |
134 | */ |
135 | function financialacls_civicrm_entityTypes(&$entityTypes) { |
136 | _financialacls_civix_civicrm_entityTypes($entityTypes); |
137 | } |
138 | |
139 | /** |
140 | * Implements hook_civicrm_thems(). |
141 | */ |
142 | function financialacls_civicrm_themes(&$themes) { |
143 | _financialacls_civix_civicrm_themes($themes); |
144 | } |
145 | |
b82fb202 |
146 | /** |
147 | * Intervene to prevent deletion, where permissions block it. |
148 | * |
aeee327d |
149 | * @param string $op |
b82fb202 |
150 | * @param string $objectName |
151 | * @param int|null $id |
152 | * @param array $params |
153 | * |
154 | * @throws \API_Exception |
155 | * @throws \CRM_Core_Exception |
156 | */ |
157 | function financialacls_civicrm_pre($op, $objectName, $id, &$params) { |
34509ae3 |
158 | if (!financialacls_is_acl_limiting_enabled()) { |
159 | return; |
160 | } |
aeee327d |
161 | if ($objectName === 'LineItem' && !empty($params['check_permissions'])) { |
34509ae3 |
162 | $operationMap = ['delete' => CRM_Core_Action::DELETE, 'edit' => CRM_Core_Action::UPDATE, 'create' => CRM_Core_Action::ADD]; |
163 | CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types, $operationMap[$op]); |
164 | if (empty($params['financial_type_id'])) { |
165 | $params['financial_type_id'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_LineItem', $params['id'], 'financial_type_id'); |
166 | } |
167 | if (!in_array($params['financial_type_id'], array_keys($types))) { |
168 | throw new API_Exception('You do not have permission to ' . $op . ' this line item'); |
b82fb202 |
169 | } |
170 | } |
171 | } |
172 | |
28188a1e |
173 | /** |
174 | * Implements hook_civicrm_selectWhereClause(). |
175 | * |
176 | * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_selectWhereClause |
177 | */ |
178 | function financialacls_civicrm_selectWhereClause($entity, &$clauses) { |
34509ae3 |
179 | if (!financialacls_is_acl_limiting_enabled()) { |
180 | return; |
181 | } |
28188a1e |
182 | if ($entity === 'LineItem') { |
34509ae3 |
183 | $types = []; |
184 | CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($types); |
185 | if ($types) { |
186 | $clauses['financial_type_id'] = 'IN (' . implode(',', array_keys($types)) . ')'; |
187 | } |
188 | else { |
189 | $clauses['financial_type_id'] = '= 0'; |
28188a1e |
190 | } |
191 | } |
192 | |
193 | } |
194 | |
07d89c14 |
195 | /** |
34509ae3 |
196 | * Remove unpermitted options. |
07d89c14 |
197 | * |
198 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_buildAmount |
199 | * |
200 | * @param string $component |
201 | * @param \CRM_Core_Form $form |
202 | * @param array $feeBlock |
203 | */ |
204 | function financialacls_civicrm_buildAmount($component, $form, &$feeBlock) { |
34509ae3 |
205 | if (!financialacls_is_acl_limiting_enabled()) { |
206 | return; |
207 | } |
208 | |
209 | foreach ($feeBlock as $key => $value) { |
210 | foreach ($value['options'] as $k => $options) { |
211 | if (!CRM_Core_Permission::check('add contributions of type ' . CRM_Contribute_PseudoConstant::financialType($options['financial_type_id']))) { |
212 | unset($feeBlock[$key]['options'][$k]); |
07d89c14 |
213 | } |
214 | } |
34509ae3 |
215 | if (empty($feeBlock[$key]['options'])) { |
216 | unset($feeBlock[$key]); |
217 | } |
07d89c14 |
218 | } |
219 | } |
220 | |
e9eed3db |
221 | /** |
222 | * Remove unpermitted membership types from selection availability.. |
223 | * |
224 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_membershipTypeValues |
225 | * |
226 | * @param \CRM_Core_Form $form |
227 | * @param array $membershipTypeValues |
228 | */ |
229 | function financialacls_civicrm_membershipTypeValues($form, &$membershipTypeValues) { |
34509ae3 |
230 | if (!financialacls_is_acl_limiting_enabled()) { |
231 | return; |
232 | } |
e9eed3db |
233 | $financialTypes = NULL; |
234 | $financialTypes = CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes, CRM_Core_Action::ADD); |
235 | foreach ($membershipTypeValues as $id => $type) { |
236 | if (!isset($financialTypes[$type['financial_type_id']])) { |
237 | unset($membershipTypeValues[$id]); |
238 | } |
239 | } |
240 | } |
241 | |
51d1f926 |
242 | /** |
243 | * Remove unpermitted financial types from field Options in search context. |
244 | * |
245 | * Search context is described as |
246 | * 'search' => "search: searchable options are returned; labels are translated.", |
247 | * So this is appropriate to removing the options from search screens. |
248 | * |
249 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_fieldOptions |
250 | * |
251 | * @param string $entity |
252 | * @param string $field |
253 | * @param array $options |
254 | * @param array $params |
255 | */ |
256 | function financialacls_civicrm_fieldOptions($entity, $field, &$options, $params) { |
34509ae3 |
257 | if (!financialacls_is_acl_limiting_enabled()) { |
258 | return; |
259 | } |
51d1f926 |
260 | if ($entity === 'Contribution' && $field === 'financial_type_id' && $params['context'] === 'search') { |
261 | $action = CRM_Core_Action::VIEW; |
262 | // At this stage we are only considering the view action. Code from |
263 | // CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes(). |
264 | $actions = [ |
265 | CRM_Core_Action::VIEW => 'view', |
266 | CRM_Core_Action::UPDATE => 'edit', |
267 | CRM_Core_Action::ADD => 'add', |
268 | CRM_Core_Action::DELETE => 'delete', |
269 | ]; |
270 | $cacheKey = 'available_types_' . $action; |
271 | if (!isset(\Civi::$statics['CRM_Financial_BAO_FinancialType'][$cacheKey])) { |
272 | foreach ($options as $finTypeId => $type) { |
273 | if (!CRM_Core_Permission::check($actions[$action] . ' contributions of type ' . $type)) { |
274 | unset($options[$finTypeId]); |
275 | } |
276 | } |
277 | \Civi::$statics['CRM_Financial_BAO_FinancialType'][$cacheKey] = $options; |
278 | } |
279 | $options = \Civi::$statics['CRM_Financial_BAO_FinancialType'][$cacheKey]; |
280 | } |
281 | } |
282 | |
34509ae3 |
283 | /** |
284 | * Is financial acl limiting enabled. |
285 | * |
286 | * Once this extension is detangled enough to be optional this will go |
287 | * and the status of the extension rather than the setting will dictate. |
288 | * |
289 | * @return bool |
290 | */ |
291 | function financialacls_is_acl_limiting_enabled() { |
292 | return (bool) Civi::settings()->get('acl_financial_type'); |
293 | } |
294 | |
e7339d59 |
295 | // --- Functions below this ship commented out. Uncomment as required. --- |
296 | |
297 | /** |
298 | * Implements hook_civicrm_preProcess(). |
299 | * |
300 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_preProcess |
301 | */ |
302 | //function financialacls_civicrm_preProcess($formName, &$form) { |
303 | // |
304 | //} |
305 | |
306 | /** |
307 | * Implements hook_civicrm_navigationMenu(). |
308 | * |
309 | * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_navigationMenu |
310 | */ |
311 | //function financialacls_civicrm_navigationMenu(&$menu) { |
312 | // _financialacls_civix_insert_navigation_menu($menu, 'Mailings', array( |
313 | // 'label' => E::ts('New subliminal message'), |
314 | // 'name' => 'mailing_subliminal_message', |
315 | // 'url' => 'civicrm/mailing/subliminal', |
316 | // 'permission' => 'access CiviMail', |
317 | // 'operator' => 'OR', |
318 | // 'separator' => 0, |
319 | // )); |
320 | // _financialacls_civix_navigationMenu($menu); |
321 | //} |