PluginProbe
DecaLog / 4.4.0
DecaLog v4.4.0
3.0.2 3.1.0 3.10.0 3.2.0 3.3.0 3.4.0 3.4.1 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.6.3 3.7.0 3.7.1 3.8.0 3.9.0 3.9.1 4.0.0 4.1.0 4.2.0 4.3.0 4.3.1 4.4.0 4.5.0 All 75 releases
decalog / includes / system / class-role.php

class-role.php in DecaLog 4.4.0, at includes/system/class-role.php

183 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Roles handling
4 *
5 * Handles all roles operations and detection.
6 *
7 * @package System
8 * @author Pierre Lannoy <https://pierre.lannoy.fr/>.
9 * @since 1.0.0
10 */
11
12 namespace Decalog\System;
13
14 /**
15 * Define the roles functionality.
16 *
17 * Handles all roles operations and detection.
18 *
19 * @package System
20 * @author Pierre Lannoy <https://pierre.lannoy.fr/>.
21 * @since 1.0.0
22 */
23 class Role {
24
25 /**
26 * The super (network) admin.
27 *
28 * @since 1.0.0
29 */
30 const SUPER_ADMIN = 4;
31
32 /**
33 * The single site admin.
34 *
35 * @since 1.0.0
36 */
37 const SINGLE_ADMIN = 2;
38
39 /**
40 * The local admin (in network site).
41 *
42 * @since 1.0.0
43 */
44 const LOCAL_ADMIN = 1;
45
46 /**
47 * Initializes the class and set its properties.
48 *
49 * @since 1.0.0
50 */
51 public function __construct() {
52 }
53
54 /**
55 * Get a user nice name.
56 *
57 * @param integer $user_id Optional. The user id.
58 * @return integer The type of admin.
59 * @since 1.0.0
60 */
61 public static function admin_type( $user_id = false ) {
62 if ( ! $user_id ) {
63 $user = wp_get_current_user();
64 } else {
65 $user = get_userdata( $user_id );
66 }
67 if ( ! $user || ! $user->exists() ) {
68 return 0;
69 }
70 if ( is_multisite() ) {
71 $super_admins = get_super_admins();
72 if ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins, true ) ) {
73 return self::SUPER_ADMIN;
74 } elseif ( in_array( 'administrator', $user->roles, true ) ) {
75 return self::LOCAL_ADMIN;
76 }
77 } else {
78 if ( in_array( 'administrator', $user->roles, true ) ) {
79 return self::SINGLE_ADMIN;
80 }
81 }
82 return 0;
83 }
84
85 /**
86 * Verify privileges overriding.
87 *
88 * @param integer $user_id Optional. The user id.
89 * @return boolean True if privileges can be overridded, false otherwise.
90 * @since 2.4.0
91 */
92 public static function override_privileges( $user_id = false ) {
93 if ( ! function_exists( 'wp_get_environment_type' ) ) {
94 return false;
95 }
96 if ( ! $user_id ) {
97 $user = wp_get_current_user();
98 } else {
99 $user = get_userdata( $user_id );
100 }
101 if ( ! $user || ! $user->exists() ) {
102 return false;
103 }
104 switch ( Option::network_get( 'privileges' ) ) {
105 case 1:
106 if ( 'local' === wp_get_environment_type() || 'development' === wp_get_environment_type() ) {
107 return $user->has_cap( 'read_private_pages' );
108 }
109 break;
110 case 2:
111 if ( 'staging' === wp_get_environment_type() ) {
112 return $user->has_cap( 'read_private_pages' );
113 }
114 break;
115 case 3:
116 if ( 'local' === wp_get_environment_type() || 'development' === wp_get_environment_type() || 'staging' === wp_get_environment_type() ) {
117 return $user->has_cap( 'read_private_pages' );
118 }
119 break;
120 }
121 return false;
122 }
123
124 /**
125 * Get a list of available roles.
126 *
127 * @return array The list of available roles.
128 * @since 1.0.0
129 */
130 public static function get_all() {
131 global $wp_roles;
132 if ( ! isset( $wp_roles ) ) {
133 $wp_roles = new \WP_Roles();
134 }
135 $result = [];
136 foreach ( $wp_roles->get_names() as $role => $name ) {
137 $result[ $role ] = [];
138 $result[ $role ]['name'] = $name;
139 $result[ $role ]['l10n_name'] = translate_user_role( $name );
140 }
141 return $result;
142 }
143
144 /**
145 * Get user main role.
146 *
147 * @param integer $user_id The user id.
148 * @return string The role id.
149 * @since 1.0.0
150 */
151 public static function get_user_main( $user_id ) {
152 $user = get_user_by( 'id', $user_id );
153 $role = '';
154 foreach ( self::get_all() as $key => $detail ) {
155 if ( in_array( $key, $user->roles, true ) ) {
156 $role = $key;
157 break;
158 }
159 }
160 return $role;
161 }
162
163 /**
164 * Get all user roles.
165 *
166 * @param integer $user_id The user id.
167 * @return array The roles id.
168 * @since 1.0.0
169 */
170 public static function get_user_all( $user_id ) {
171 $user = get_user_by( 'id', $user_id );
172 $role = [];
173 foreach ( self::get_all() as $key => $detail ) {
174 if ( in_array( $key, $user->roles, true ) ) {
175 $role[] = $key;
176 break;
177 }
178 }
179 return $role;
180 }
181
182 }
183