PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.6.3
LatePoint – Calendar Booking Plugin for Appointments and Events v5.6.3
5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / lib / misc / role.php
latepoint / lib / misc Last commit date
blocked_period.php 3 months ago booked_period.php 3 months ago booking_request.php 3 months ago booking_resource.php 3 months ago booking_slot.php 3 months ago filter.php 3 months ago process_action.php 1 month ago process_event.php 1 month ago role.php 2 weeks ago router.php 3 months ago step.php 3 months ago stripe_connect_customer.php 3 months ago time_period.php 3 months ago user.php 3 months ago work_period.php 3 months ago
role.php
153 lines
1 <?php
2 /*
3 * Copyright (c) 2023 LatePoint LLC. All rights reserved.
4 */
5
6 namespace LatePoint\Misc;
7
8 class Role {
9 public ?string $user_type = null;
10 public ?string $name;
11
12 public ?string $wp_capability = null;
13 public ?string $wp_role = null;
14
15 protected array $capabilities = [];
16
17 function __construct( $user_type = null, $wp_role = null ) {
18 if ( $user_type ) {
19 $this->user_type = $user_type;
20
21 switch ( $this->user_type ) {
22 case LATEPOINT_USER_TYPE_ADMIN:
23 $this->name = __( 'Administrator', 'latepoint' );
24 $this->wp_role = LATEPOINT_WP_ADMIN_ROLE;
25 break;
26 case LATEPOINT_USER_TYPE_AGENT:
27 $this->name = apply_filters( 'latepoint_role_display_name', __( 'LatePoint Agent', 'latepoint' ), LATEPOINT_USER_TYPE_AGENT );
28 $this->wp_role = LATEPOINT_WP_AGENT_ROLE;
29 break;
30 case LATEPOINT_USER_TYPE_CUSTOM:
31 $this->name = __( 'New Custom Role', 'latepoint' );
32 $this->wp_role = $wp_role ?? \OsRolesHelper::generate_role_id();
33 break;
34 }
35 $this->set_capabilities();
36 }
37 }
38
39 public function register_in_wp(): \WP_Role {
40 remove_role( $this->wp_role );
41 add_role( $this->wp_role, $this->name );
42 $role = get_role( $this->wp_role );
43 $role->add_cap( 'read' );
44 $role->add_cap( 'upload_files' );
45 switch ( $this->user_type ) {
46 case LATEPOINT_USER_TYPE_AGENT:
47 $role->add_cap( 'edit_bookings' );
48 break;
49 case LATEPOINT_USER_TYPE_CUSTOM:
50 $role->add_cap( 'manage_latepoint' );
51 break;
52 }
53
54 /**
55 * Custom role that was just been registered in LatePoint
56 *
57 * @since 4.7.0
58 * @hook latepoint_register_role
59 *
60 * @param {WP_Role} $wp_role custom role that was just been added
61 * @param {Role} $role role that is used to register wp role
62 * @returns {WP_Role} The filtered wp role object
63 */
64 return apply_filters( 'latepoint_register_role', $role, $this );
65 }
66
67 public function as_array_to_save() {
68 return [
69 'user_type' => $this->user_type,
70 'wp_role' => $this->wp_role,
71 'name' => $this->name,
72 'capabilities' => $this->capabilities,
73 ];
74 }
75
76 public function set_from_params( $params ) {
77 $this->user_type = $params['user_type'] ?? LATEPOINT_USER_TYPE_CUSTOM;
78 $this->wp_role = $params['wp_role'] ?? '';
79 $this->name = $params['name'] ?? '';
80 $this->capabilities = $params['capabilities'] ?? [];
81 }
82
83 public static function get_from_wp_role( string $wp_role ): Role {
84 switch ( $wp_role ) {
85 case LATEPOINT_WP_ADMIN_ROLE:
86 $role = new self( LATEPOINT_USER_TYPE_ADMIN, LATEPOINT_WP_ADMIN_ROLE );
87 break;
88 case LATEPOINT_WP_AGENT_ROLE:
89 $role = new self( LATEPOINT_USER_TYPE_AGENT, LATEPOINT_WP_AGENT_ROLE );
90
91 break;
92 default:
93 // custom role
94 $custom_roles = \OsRolesHelper::get_custom_roles();
95 $role = new self();
96 if ( isset( $custom_roles[ $wp_role ] ) ) {
97 $role->set_from_params( $custom_roles[ $wp_role ] );
98 }
99 break;
100 }
101 return $role;
102 }
103
104 public static function generate_from_params( array $params ): Role {
105 $role = new self();
106 $role->set_from_params( $params );
107 return $role;
108 }
109
110 public function is_action_permitted( $action ) {
111 return in_array( $action, $this->capabilities );
112 }
113
114 public function get_wp_role_display_name() {
115 switch ( $this->user_type ) {
116 case LATEPOINT_USER_TYPE_ADMIN:
117 $display_name = __( 'Administrator', 'latepoint' );
118 break;
119 case LATEPOINT_USER_TYPE_AGENT:
120 $display_name = apply_filters( 'latepoint_role_display_name', __( 'LatePoint Agent', 'latepoint' ), LATEPOINT_USER_TYPE_AGENT );
121 break;
122 case LATEPOINT_USER_TYPE_CUSTOM:
123 $display_name = $this->name;
124 break;
125 }
126 return $display_name ?? 'n/a';
127 }
128
129
130 public function set_capabilities() {
131 switch ( $this->user_type ) {
132 case LATEPOINT_USER_TYPE_ADMIN:
133 // admin role has access to all actions by default, and can't be changed
134 $this->capabilities = \OsRolesHelper::get_all_available_actions_list();
135 break;
136 case LATEPOINT_USER_TYPE_AGENT:
137 $this->capabilities = \OsRolesHelper::get_capabilities_list_for_agent_role();
138 break;
139 case LATEPOINT_USER_TYPE_CUSTOM:
140 $custom_roles = \OsRolesHelper::get_custom_roles();
141 $this->capabilities = $custom_roles[ $this->wp_role ] ?? [];
142 break;
143 }
144 }
145
146 public function get_capabilities(): array {
147 if ( empty( $this->capabilities ) ) {
148 $this->set_capabilities();
149 }
150 return $this->capabilities;
151 }
152 }
153