PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.6.7
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.6.7
1.17.9 1.17.8 1.17.7 1.17.6 1.17.5 1.17.4 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.3.0 1.3.1 1.3.11 1.3.12 1.3.13 1.3.14 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 All 143 releases
erp / modules / accounting / includes / functions / capabilities.php

capabilities.php in ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce 1.6.7, at modules/accounting/includes/functions/capabilities.php

381 lines 11.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit; // Exit if accessed directly
5 }
6
7 if ( ! function_exists( 'erp_ac_get_manager_role' ) ) {
8
9 /**
10 * The manager role for HR employees
11 *
12 * @return string
13 */
14 function erp_ac_get_manager_role() {
15 return apply_filters( 'erp_ac_get_manager_role', 'erp_ac_manager' );
16 }
17
18 /**
19 * When a new administrator is created, make him HR Manager by default
20 *
21 * @param int $user_id
22 *
23 * @return void
24 */
25 function erp_ac_new_admin_as_manager( $user_id ) {
26 $user = get_user_by( 'id', $user_id );
27
28 if ( $user && in_array( 'administrator', $user->roles, true ) ) {
29 $user->add_role( erp_ac_get_manager_role() );
30 }
31 }
32
33 /**
34 * Return a user's HR role
35 *
36 * @param int $user_id
37 *
38 * @return string
39 */
40 function erp_ac_get_user_role( $user_id = 0 ) {
41
42 // Validate user id
43 $user = get_userdata( $user_id );
44 $role = false;
45
46 // User has roles so look for a HR one
47 if ( ! empty( $user->roles ) ) {
48
49 // Look for a ac role
50 $roles = array_intersect(
51 array_values( $user->roles ),
52 array_keys( erp_ac_get_roles() )
53 );
54
55 // If there's a role in the array, use the first one. This isn't very
56 // smart, but since roles aren't exactly hierarchical, and HR
57 // does not yet have a UI for multiple user roles, it's fine for now.
58 if ( ! empty( $roles ) ) {
59 $role = array_shift( $roles );
60 }
61 }
62
63 return apply_filters( 'erp_ac_get_user_role', $role, $user_id, $user );
64 }
65
66 /**
67 * Get dynamic roles for HR
68 *
69 * @return array
70 */
71 function erp_ac_get_roles() {
72 $roles = [
73 erp_ac_get_manager_role() => [
74 'name' => __( 'Accounting Manager', 'erp' ),
75 'public' => false,
76 'capabilities' => erp_ac_get_caps_for_role( erp_ac_get_manager_role() ),
77 ],
78 ];
79
80 return apply_filters( 'erp_ac_get_roles', $roles );
81 }
82
83 function erp_ac_get_caps_for_role( $role = '' ) {
84 $caps = [];
85
86 // Which role are we looking for?
87 switch ( $role ) {
88
89 case erp_ac_get_manager_role():
90 $caps = [
91 'read' => true,
92 'erp_ac_view_dashboard' => true,
93 'erp_ac_view_customer' => true,
94 'erp_ac_view_single_customer' => true,
95 'erp_ac_view_other_customers' => true,
96 'erp_ac_create_customer' => true,
97 'erp_ac_edit_customer' => true,
98 'erp_ac_edit_other_customers' => true,
99 'erp_ac_delete_customer' => true,
100 'erp_ac_delete_other_customers' => true,
101 'erp_ac_view_vendor' => true,
102 'erp_ac_view_other_vendors' => true,
103 'erp_ac_create_vendor' => true,
104 'erp_ac_edit_vendor' => true,
105 'erp_ac_edit_other_vendors' => true,
106 'erp_ac_delete_vendor' => true,
107 'erp_ac_delete_other_vendors' => true,
108 'erp_ac_view_sale' => true,
109 'erp_ac_view_single_vendor' => true,
110 'erp_ac_view_other_sales' => true,
111 'erp_ac_view_sales_summary' => true,
112 'erp_ac_create_sales_payment' => true,
113 'erp_ac_publish_sales_payment' => true,
114 'erp_ac_create_sales_invoice' => true,
115 'erp_ac_publish_sales_invoice' => true,
116 'erp_ac_view_expense' => true,
117 'erp_ac_view_other_expenses' => true,
118 'erp_ac_view_expenses_summary' => true,
119 'erp_ac_create_expenses_voucher' => true,
120 'erp_ac_publish_expenses_voucher' => true,
121 'erp_ac_create_expenses_credit' => true,
122 'erp_ac_publish_expenses_credit' => true,
123 'erp_ac_view_account_lists' => true,
124 'erp_ac_view_single_account' => true,
125 'erp_ac_create_account' => true,
126 'erp_ac_edit_account' => true,
127 'erp_ac_delete_account' => true,
128 'erp_ac_view_bank_accounts' => true,
129 'erp_ac_create_bank_transfer' => true,
130 'erp_ac_view_journal' => true,
131 'erp_ac_view_other_journals' => true,
132 'erp_ac_create_journal' => true,
133 'erp_ac_view_reports' => true,
134 ];
135
136 break;
137 }
138
139 return apply_filters( 'erp_ac_get_caps_for_role', $caps, $role );
140 }
141
142 function erp_acct_is_hr_current_user_manager() {
143 $current_user_hr_role = erp_hr_get_user_role( get_current_user_id() );
144
145 if ( erp_hr_get_manager_role() !== $current_user_hr_role ) {
146 return false;
147 }
148
149 return true;
150 }
151
152 //Customer
153 function erp_ac_create_customer() {
154 return current_user_can( 'erp_ac_create_customer' );
155 }
156
157 function erp_ac_current_user_can_edit_customer( $created_by = false ) {
158 if ( ! current_user_can( 'erp_ac_edit_customer' ) ) {
159 return false;
160 }
161
162 if ( ! $created_by ) {
163 return false;
164 }
165
166 $user_id = get_current_user_id();
167
168 if ( $created_by === $user_id ) {
169 return true;
170 }
171
172 if ( current_user_can( 'erp_ac_edit_other_customers' ) ) {
173 return true;
174 }
175
176 return false;
177 }
178
179 function erp_ac_current_user_can_view_single_customer() {
180 return current_user_can( 'erp_ac_view_single_customer' );
181 }
182
183 function erp_ac_view_other_customers() {
184 return current_user_can( 'erp_ac_view_other_customers' );
185 }
186
187 function erp_ac_current_user_can_delete_customer( $created_by = false ) {
188 if ( ! current_user_can( 'erp_ac_delete_customer' ) ) {
189 return false;
190 }
191
192 if ( ! $created_by ) {
193 return false;
194 }
195
196 $user_id = get_current_user_id();
197
198 if ( $created_by === $user_id ) {
199 return true;
200 }
201
202 if ( current_user_can( 'erp_ac_delete_other_customers' ) ) {
203 return true;
204 }
205
206 return false;
207 }
208
209 //vendor
210 function erp_ac_create_vendor() {
211 return current_user_can( 'erp_ac_create_vendor' );
212 }
213
214 function erp_ac_current_user_can_edit_vendor( $created_by = false ) {
215 if ( ! current_user_can( 'erp_ac_edit_vendor' ) ) {
216 return false;
217 }
218
219 if ( ! $created_by ) {
220 return false;
221 }
222
223 $user_id = get_current_user_id();
224
225 if ( $created_by === $user_id ) {
226 return true;
227 }
228
229 if ( current_user_can( 'erp_ac_edit_other_vendors' ) ) {
230 return true;
231 }
232
233 return false;
234 }
235
236 function erp_ac_current_user_can_view_single_vendor() {
237 return current_user_can( 'erp_ac_view_single_vendor' );
238 }
239
240 function erp_ac_view_other_vendors() {
241 return current_user_can( 'erp_ac_view_other_vendors' );
242 }
243
244 function erp_ac_current_user_can_delete_vendor( $created_by = false ) {
245 if ( ! current_user_can( 'erp_ac_delete_vendor' ) ) {
246 return false;
247 }
248
249 if ( ! $created_by ) {
250 return false;
251 }
252
253 $user_id = get_current_user_id();
254
255 if ( $created_by === $user_id ) {
256 return true;
257 }
258
259 if ( current_user_can( 'erp_ac_delete_other_vendors' ) ) {
260 return true;
261 }
262
263 return false;
264 }
265
266 //sale
267 function erp_ac_view_other_sales() {
268 return current_user_can( 'erp_ac_view_other_sales' );
269 }
270
271 function erp_ac_view_sales_summary() {
272 return current_user_can( 'erp_ac_view_sales_summary' );
273 }
274
275 function erp_ac_create_sales_payment() {
276 return current_user_can( 'erp_ac_create_sales_payment' );
277 }
278
279 function erp_ac_publish_sales_payment() {
280 return current_user_can( 'erp_ac_publish_sales_payment' );
281 }
282
283 function erp_ac_create_sales_invoice() {
284 return current_user_can( 'erp_ac_create_sales_invoice' );
285 }
286
287 function erp_ac_publish_sales_invoice() {
288 return current_user_can( 'erp_ac_publish_sales_invoice' );
289 }
290
291 /**
292 * Check capability to view expenses created by other managers
293 *
294 * @return bool
295 *
296 * @since 1.2.0 Fix capability spelling
297 * @since 1.0.0
298 */
299 function erp_ac_view_other_expenses() {
300 return current_user_can( 'erp_ac_view_other_expenses' );
301 }
302
303 function erp_ac_view_expenses_summary() {
304 return current_user_can( 'erp_ac_view_expenses_summary' );
305 }
306
307 function erp_ac_create_expenses_voucher() {
308 return current_user_can( 'erp_ac_create_expenses_voucher' );
309 }
310
311 function erp_ac_publish_expenses_voucher() {
312 return current_user_can( 'erp_ac_publish_expenses_voucher' );
313 }
314
315 function erp_ac_create_expenses_credit() {
316 return current_user_can( 'erp_ac_create_expenses_credit' );
317 }
318
319 function erp_ac_publish_expenses_credit() {
320 return current_user_can( 'erp_ac_publish_expenses_credit' );
321 }
322
323 //accounts
324 function erp_ac_view_single_account() {
325 return current_user_can( 'erp_ac_view_single_account' );
326 }
327
328 function erp_ac_create_account() {
329 return current_user_can( 'erp_ac_create_account' );
330 }
331
332 function erp_ac_edit_account() {
333 return current_user_can( 'erp_ac_edit_account' );
334 }
335
336 function erp_ac_delete_account() {
337 return current_user_can( 'erp_ac_delete_account' );
338 }
339
340 //bank accounts
341 function erp_ac_create_bank_transfer() {
342 return current_user_can( 'erp_ac_create_bank_transfer' );
343 }
344
345 //journal
346 function erp_ac_create_journal() {
347 return current_user_can( 'erp_ac_create_journal' );
348 }
349
350 function erp_ac_view_other_journals() {
351 return current_user_can( 'erp_ac_view_other_journals' );
352 }
353 }
354
355 /**
356 * Removes the non-public AC roles from the editable roles array
357 *
358 * @param array $all_roles All registered roles
359 *
360 * @return array
361 */
362 function erp_ac_filter_editable_roles( $all_roles = [] ) {
363 $roles = erp_ac_get_roles();
364
365 foreach ( $roles as $ac_role_key => $ac_role ) {
366 if ( isset( $ac_role['public'] ) && false === $ac_role['public'] ) {
367
368 // Loop through WordPress roles
369 foreach ( array_keys( $all_roles ) as $wp_role ) {
370
371 // If keys match, unset
372 if ( $wp_role === $ac_role_key ) {
373 unset( $all_roles[ $wp_role ] );
374 }
375 }
376 }
377 }
378
379 return $all_roles;
380 }
381