PluginProbe
User Access Manager / trunk
User Access Manager vtrunk
2.3.20 2.3.19 2.3.18 2.3.17 2.3.16 2.3.15 2.3.14 2.3.13 trunk 0.6 0.6.1 0.6.2 0.7 0.7 Beta 0.7.0.1 0.8 0.8.0.1 0.8.0.2 0.9 0.9.1 0.9.1.1 0.9.1.2 0.9.1.3 0.9.1.4 1.0 All 136 releases
user-access-manager / src / Controller / Backend / ObjectMembership / DynamicGroupsController.php

DynamicGroupsController.php in User Access Manager trunk, at src/Controller/Backend/ObjectMembership/DynamicGroupsController.php

69 lines 1.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace UserAccessManager\Controller\Backend\ObjectMembership;
6
7 use JetBrains\PhpStorm\NoReturn;
8 use UserAccessManager\UserGroup\DynamicUserGroup;
9 use WP_Role;
10
11 class DynamicGroupsController extends ObjectController
12 {
13 #[NoReturn]
14 public function getDynamicGroupsForAjax(): void
15 {
16 if ($this->checkUserAccess() === false) {
17 echo json_encode([]);
18 $this->php->callExit();
19 return;
20 }
21
22 $searchTerms = explode(',', (string) $this->getRequestParameter('q'));
23 $search = trim(end($searchTerms));
24
25 echo json_encode(array_merge($this->getMatchingUsers($search), $this->getMatchingRoles($search)));
26 $this->php->callExit();
27 }
28
29 private function getMatchingUsers(string $search): array
30 {
31 $users = $this->wordpress->getUsers([
32 'search' => '*' . $search . '*',
33 'fields' => ['ID', 'display_name', 'user_login', 'user_email']
34 ]);
35
36 return array_map(
37 function ($user) {
38 return [
39 'id' => $user->ID,
40 'name' => TXT_UAM_USER . ": $user->display_name ($user->user_login)",
41 'type' => DynamicUserGroup::USER_TYPE
42 ];
43 },
44 $users
45 );
46 }
47
48 private function getMatchingRoles(string $search): array
49 {
50 /**
51 * @var WP_Role[] $roles
52 */
53 $roles = $this->wordpress->getRoles()->roles;
54 $matches = [];
55
56 foreach ($roles as $key => $role) {
57 if (str_contains(strtolower($role['name']), strtolower($search))) {
58 $matches[] = [
59 'id' => $key,
60 'name' => TXT_UAM_ROLE . ': ' . $role['name'],
61 'type' => DynamicUserGroup::ROLE_TYPE
62 ];
63 }
64 }
65
66 return $matches;
67 }
68 }
69