PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.3.13
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.3.13
1.17.10 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 All 144 releases
erp / modules / hrm / includes / functions-capabilities.php

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

429 lines 11.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * HR Capabilities
5 *
6 * The functions in this file are used primarily as convenient wrappers for
7 * capability output in user profiles. This includes mapping capabilities and
8 * groups to human readable strings,
9 *
10 * @package WP ERP
11 * @subpackage HR
12 */
13
14 /**
15 * The manager role for HR employees
16 *
17 * @return string
18 */
19 function erp_hr_get_manager_role() {
20 return apply_filters( 'erp_hr_get_manager_role', 'erp_hr_manager' );
21 }
22
23 /**
24 * The manager role for HR employees
25 *
26 * @return string
27 */
28 function erp_hr_get_employee_role() {
29 return apply_filters( 'erp_hr_get_employee_role', 'employee' );
30 }
31
32 /**
33 * Get dynamic roles for HR
34 *
35 * @return array
36 */
37 function erp_hr_get_roles() {
38 $roles = [
39 erp_hr_get_manager_role() => [
40 'name' => __( 'HR Manager', 'erp' ),
41 'public' => false,
42 'capabilities' => erp_hr_get_caps_for_role( erp_hr_get_manager_role() )
43 ],
44
45 erp_hr_get_employee_role() => [
46 'name' => __( 'Employee', 'erp' ),
47 'public' => true,
48 'capabilities' => erp_hr_get_caps_for_role( erp_hr_get_employee_role() )
49 ]
50 ];
51
52 return apply_filters( 'erp_hr_get_roles', $roles );
53 }
54
55 /**
56 * Returns an array of capabilities based on the role that is being requested.
57 *
58 * @param string $role
59 *
60 * @return array
61 */
62 function erp_hr_get_caps_for_role( $role = '' ) {
63 $caps = [];
64
65 // Which role are we looking for?
66 switch ( $role ) {
67
68 case erp_hr_get_manager_role():
69 $caps = [
70 'read' => true,
71
72 'upload_files' => true,
73 'erp_view_list' => true,
74
75 // employee
76 'erp_list_employee' => true,
77 'erp_create_employee' => true,
78 'erp_view_employee' => true,
79 'erp_edit_employee' => true,
80 'erp_delete_employee' => true,
81
82 // review (note, permission, performance)
83 'erp_create_review' => true,
84 'erp_delete_review' => true,
85 'erp_manage_review' => true,
86
87 // announcement
88 'erp_crate_announcement' => true,
89 'erp_view_announcement' => true,
90 'erp_manage_announcement' => true,
91
92 // job
93 'erp_manage_jobinfo' => true,
94 'erp_view_jobinfo' => true,
95
96 // department
97 'erp_manage_department' => true,
98
99 // designation
100 'erp_manage_designation' => true,
101
102 // leave and holidays
103 'erp_leave_create_request' => true,
104 'erp_leave_manage' => true,
105
106 'erp_manage_hr_settings' => true,
107
108 // @since 1.3.2
109
110 // experience
111 'erp_create_experience' => true,
112 'erp_edit_experience' => true,
113 'erp_view_experience' => true,
114 'erp_delete_experience' => true,
115
116 // education
117 'erp_create_education' => true,
118 'erp_edit_education' => true,
119 'erp_view_education' => true,
120 'erp_delete_education' => true,
121
122 'erp_can_terminate' => true,
123
124 // dependent
125 'erp_create_dependent' => true,
126 'erp_edit_dependent' => true,
127 'erp_view_dependent' => true,
128 'erp_delete_dependent' => true,
129
130 // document
131 'erp_create_document' => true,
132 'erp_edit_document' => true,
133 'erp_view_document' => true,
134 'erp_delete_document' => true,
135
136 // attendance
137 'erp_create_attendance' => true,
138 'erp_edit_attendance' => true,
139 'erp_view_attendance' => true,
140 'erp_delete_attendance' => true,
141
142 ];
143 break;
144
145 case erp_hr_get_employee_role():
146
147 $caps = [
148 'read' => true,
149
150 'upload_files' => true,
151
152 //cap for listing any resources
153 'erp_view_list' => true,
154
155 // employee
156 'erp_list_employee' => true,
157 'erp_view_employee' => true,
158 'erp_edit_employee' => true,
159
160 // job
161 'erp_view_jobinfo' => true,
162
163 // leave
164 'erp_leave_create_request' => true,
165
166 // @since 1.3.2
167
168 // announcement
169 'erp_view_announcement' => true,
170
171 // experience
172 'erp_create_experience' => true,
173 'erp_edit_experience' => true,
174 'erp_view_experience' => true,
175 'erp_delete_experience' => true,
176
177 // education
178 'erp_create_education' => true,
179 'erp_edit_education' => true,
180 'erp_view_education' => true,
181 'erp_delete_education' => true,
182
183 // dependent
184 'erp_create_dependent' => true,
185 'erp_edit_dependent' => true,
186 'erp_view_dependent' => true,
187 'erp_delete_dependent' => true,
188
189 // document
190 'erp_create_document' => true,
191 'erp_edit_document' => true,
192 'erp_view_document' => true,
193 'erp_delete_document' => true,
194
195 // attendance
196 'erp_view_attendance' => true
197 ];
198
199 break;
200 }
201
202 return apply_filters( 'erp_hr_get_caps_for_role', $caps, $role );
203 }
204
205 /**
206 * Maps HR capabilities to employee or HR manager
207 *
208 * @param array $caps Capabilities for meta capability
209 * @param string $cap Capability name
210 * @param int $user_id User id
211 * @param mixed $args Arguments
212 *
213 * @return array Actual capabilities for meta capability
214 */
215 function erp_hr_map_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
216 // What capability is being checked?
217 switch ( $cap ) {
218
219 // employee and hr manager
220 case 'erp_list_employee':
221 if ( user_can( $user_id, 'employee' ) ) {
222 $caps = [ $cap ];
223 }
224 break;
225 case 'erp_view_list':
226 if ( user_can( $user_id, 'employee' ) ) {
227 $caps = [ $cap ];
228 }
229 break;
230 case 'erp_view_employee':
231 case 'erp_edit_employee':
232
233 case 'erp_view_announcement':
234
235 case 'erp_view_jobinfo':
236
237 case 'erp_leave_create_request':
238
239 case 'erp_create_experience':
240 case 'erp_view_experience':
241 case 'erp_edit_experience':
242 case 'erp_delete_experience':
243
244 case 'erp_create_education':
245 case 'erp_view_education':
246 case 'erp_edit_education':
247 case 'erp_delete_education':
248
249 case 'erp_create_dependent':
250 case 'erp_view_dependent':
251 case 'erp_edit_dependent':
252 case 'erp_delete_dependent':
253
254 case 'erp_create_document':
255 case 'erp_view_document':
256 case 'erp_edit_document':
257 case 'erp_delete_document':
258
259 case 'erp_view_attendance':
260 $employee_id = isset( $args[0] ) ? $args[0] : false;
261
262 if ( $user_id == $employee_id ) {
263 $caps = [ $cap ];
264 } else {
265 $hr_manager_role = erp_hr_get_manager_role();
266 // HR manager can read any employee
267 if ( user_can( $user_id, $hr_manager_role ) ) {
268 $caps = array( $hr_manager_role );
269 } else {
270 $caps = [ 'do_not_allow' ];
271 }
272 }
273
274 break;
275
276 // only hr manager
277 case 'erp_create_employee':
278 case 'erp_delete_employee':
279 case 'erp_can_terminate':
280
281 case 'erp_crate_announcement':
282 case 'erp_manage_announcement':
283
284 case 'erp_manage_jobinfo':
285
286 case 'erp_manage_department':
287
288 case 'erp_manage_designation':
289
290 case 'erp_leave_manage':
291
292 case 'erp_manage_hr_settings':
293
294 case 'erp_create_attendance':
295 case 'erp_edit_attendance':
296 case 'erp_delete_attendance':
297 $hr_manager_role = erp_hr_get_manager_role();
298
299 if ( user_can( $user_id, $hr_manager_role ) ) {
300 $caps = array( $hr_manager_role );
301 } else {
302 $caps = [ 'do_not_allow' ];
303 }
304
305 break;
306
307 // review (note, permission, performance)
308 case 'erp_create_review':
309 case 'erp_manage_review':
310 case 'erp_delete_review':
311 $employee_id = isset( $args[0] ) ? $args[0] : false;
312 $employee = new \WeDevs\ERP\HRM\Employee( $employee_id );
313
314 if ( $employee->get_reporting_to() && $employee->get_reporting_to() == $user_id ) {
315 $caps = [ 'employee' ];
316 } else {
317 $caps = [ $cap ];
318 }
319
320 break;
321 }
322
323 return apply_filters( 'erp_hr_map_meta_caps', $caps, $cap, $user_id, $args );
324 }
325
326 /**
327 * Removes the non-public HR roles from the editable roles array
328 *
329 * @param array $all_roles All registered roles
330 *
331 * @return array
332 */
333 function erp_hr_filter_editable_roles( $all_roles = [] ) {
334 $roles = erp_hr_get_roles();
335
336 foreach ( $roles as $hr_role_key => $hr_role ) {
337
338 if ( isset( $hr_role['public'] ) && $hr_role['public'] === false ) {
339
340 // Loop through WordPress roles
341 foreach ( array_keys( $all_roles ) as $wp_role ) {
342
343 // If keys match, unset
344 if ( $wp_role === $hr_role_key ) {
345 unset( $all_roles[ $wp_role ] );
346 }
347 }
348 }
349
350 }
351
352 return $all_roles;
353 }
354
355 /**
356 * Return a user's HR role
357 *
358 * @param int $user_id
359 *
360 * @return string
361 */
362 function erp_hr_get_user_role( $user_id = 0 ) {
363
364 // Validate user id
365 $user = get_userdata( $user_id );
366 $role = false;
367
368 // User has roles so look for a HR one
369 if ( ! empty( $user->roles ) ) {
370
371 // Look for a HR role
372 $roles = array_intersect(
373 array_values( $user->roles ),
374 array_keys( erp_hr_get_roles() )
375 );
376
377 // If there's a role in the array, use the first one. This isn't very
378 // smart, but since roles aren't exactly hierarchical, and HR
379 // does not yet have a UI for multiple user roles, it's fine for now.
380 if ( ! empty( $roles ) ) {
381 $role = array_shift( $roles );
382 }
383 }
384
385 return apply_filters( 'erp_hr_get_user_role', $role, $user_id, $user );
386 }
387
388 /**
389 * Create a new employee when a user role is changed to employee
390 *
391 * @param int $user_id
392 * @param string $role
393 *
394 * @return void
395 */
396 function erp_hr_existing_role_to_employee( $user_id, $role ) {
397 if ( 'employee' != $role ) {
398 return;
399 }
400
401 // check if a employee of that ID exists, otherwise create one
402 $employee = new \WeDevs\ERP\HRM\Models\Employee();
403 $exists = $employee->where( 'user_id', '=', $user_id )->get()->first();
404
405 if ( null === $exists ) {
406 $employee->create( [
407 'user_id' => $user_id,
408 'designation' => 0,
409 'department' => 0,
410 'status' => 'active'
411 ] );
412 }
413 }
414
415 /**
416 * When a new administrator is created, make him HR Manager by default
417 *
418 * @param int $user_id
419 *
420 * @return void
421 */
422 function erp_hr_new_admin_as_manager( $user_id ) {
423 $user = get_user_by( 'id', $user_id );
424
425 if ( $user && in_array( 'administrator', $user->roles ) ) {
426 $user->add_role( erp_hr_get_manager_role() );
427 }
428 }
429