Facades
3 weeks ago
Canvas.php
3 weeks ago
CollectionItem.php
3 weeks ago
ContentManager.php
3 weeks ago
DateTime.php
3 weeks ago
EditorPreview.php
3 weeks ago
FileHandler.php
3 weeks ago
FilterHooks.php
3 weeks ago
PageUrl.php
3 weeks ago
Role.php
3 weeks ago
Template.php
3 weeks ago
Role.php
70 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Role manager api |
| 4 | * |
| 5 | * @package kirki |
| 6 | */ |
| 7 | |
| 8 | namespace Kirki\App\Supports; |
| 9 | |
| 10 | defined('ABSPATH') || exit; |
| 11 | |
| 12 | use Kirki\App\Constants\AccessLevels; |
| 13 | use Kirki\Framework\Supports\Facades\Option; |
| 14 | use function Kirki\Framework\collection; |
| 15 | use function Kirki\Framework\with_prefix; |
| 16 | |
| 17 | class Role |
| 18 | { |
| 19 | /** |
| 20 | * Get all roles |
| 21 | * |
| 22 | * @return array |
| 23 | */ |
| 24 | public static function get_all() |
| 25 | { |
| 26 | global $wp_roles; |
| 27 | |
| 28 | return is_array($wp_roles->roles) ? array_keys($wp_roles->roles) : []; |
| 29 | } |
| 30 | |
| 31 | /** |
| 32 | * Get all the access levels by roles |
| 33 | * |
| 34 | * @param array<string> $roles |
| 35 | * |
| 36 | * @return array<string, string> |
| 37 | */ |
| 38 | public static function get_access_levels_by_roles(array $roles) |
| 39 | { |
| 40 | $all_accesses = []; |
| 41 | $option_keys = collection($roles)->map(fn($role) => with_prefix($role))->to_array(); |
| 42 | |
| 43 | $options = Option::get($option_keys, [], false); |
| 44 | |
| 45 | foreach ($roles as $role) { |
| 46 | $prefixed_role = with_prefix($role); |
| 47 | |
| 48 | if (in_array($role, AccessLevels::USERS_DEFAULT_FULL_ACCESS, true)) { |
| 49 | $all_accesses[$role] = AccessLevels::FULL_ACCESS; |
| 50 | } |
| 51 | |
| 52 | if (!empty($options[$prefixed_role])) { |
| 53 | $all_accesses[$role] = $options[$prefixed_role]; |
| 54 | } |
| 55 | } |
| 56 | |
| 57 | return $all_accesses; |
| 58 | } |
| 59 | |
| 60 | public static function get_roles_by_levels($levels) |
| 61 | { |
| 62 | $all_roles = static::get_all(); |
| 63 | $roles_with_levels = static::get_access_levels_by_roles($all_roles); |
| 64 | |
| 65 | return array_keys(collection($roles_with_levels) |
| 66 | ->filter(fn($level, $role) => in_array($level, $levels, true)) |
| 67 | ->all()); |
| 68 | } |
| 69 | } |
| 70 |