PluginProbe
User Access Manager / 2.2.4
User Access Manager v2.2.4
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 / ObjectMembership / UserMembershipHandler.php

UserMembershipHandler.php in User Access Manager 2.2.4, at src/ObjectMembership/UserMembershipHandler.php

170 lines 5.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * UserMembershipHandler.php
4 *
5 * The UserMembershipHandler class file.
6 *
7 * PHP versions 5
8 *
9 * @author Alexander Schneider <alexanderschneider85@gmail.com>
10 * @copyright 2008-2017 Alexander Schneider
11 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2
12 * @version SVN: $id$
13 * @link http://wordpress.org/extend/plugins/user-access-manager/
14 */
15
16 declare(strict_types=1);
17
18 namespace UserAccessManager\ObjectMembership;
19
20 use Exception;
21 use UserAccessManager\Database\Database;
22 use UserAccessManager\Object\ObjectHandler;
23 use UserAccessManager\UserGroup\AbstractUserGroup;
24 use UserAccessManager\UserGroup\AssignmentInformation;
25 use UserAccessManager\UserGroup\AssignmentInformationFactory;
26 use UserAccessManager\Wrapper\Php;
27
28 /**
29 * Class UserMembershipHandler
30 *
31 * @package UserAccessManager\UserGroup
32 */
33 class UserMembershipHandler extends ObjectMembershipHandler
34 {
35 /**
36 * @var string
37 */
38 protected $generalObjectType = ObjectHandler::GENERAL_USER_OBJECT_TYPE;
39
40 /**
41 * @var Php
42 */
43 private $php;
44
45 /**
46 * @var ObjectHandler
47 */
48 private $objectHandler;
49
50 /**
51 * @var Database
52 */
53 private $database;
54
55 /**
56 * UserMembershipHandler constructor.
57 * @param AssignmentInformationFactory $assignmentInformationFactory
58 * @param Php $php
59 * @param Database $database
60 * @param ObjectHandler $objectHandler
61 * @throws Exception
62 */
63 public function __construct(
64 AssignmentInformationFactory $assignmentInformationFactory,
65 Php $php,
66 Database $database,
67 ObjectHandler $objectHandler
68 ) {
69 parent::__construct($assignmentInformationFactory);
70
71 $this->php = $php;
72 $this->database = $database;
73 $this->objectHandler = $objectHandler;
74 }
75
76 /**
77 * Returns the object and type name.
78 * @param int|string $objectId
79 * @param string $typeName
80 * @return int|string
81 */
82 public function getObjectName($objectId, &$typeName = '')
83 {
84 $typeName = $this->generalObjectType;
85 $user = $this->objectHandler->getUser($objectId);
86 return ($user !== false) ? $user->display_name : $objectId;
87 }
88
89 /**
90 * Checks if the user is a member of the user group.
91 * @param AbstractUserGroup $userGroup
92 * @param bool $lockRecursive
93 * @param int|string $objectId
94 * @param null|AssignmentInformation $assignmentInformation
95 * @return bool
96 */
97 public function isMember(
98 AbstractUserGroup $userGroup,
99 bool $lockRecursive,
100 $objectId,
101 ?AssignmentInformation &$assignmentInformation = null
102 ): bool {
103 $assignmentInformation = null;
104 $recursiveMembership = [];
105 $user = $this->objectHandler->getUser($objectId);
106
107 if ($user !== false) {
108 $capabilitiesTable = $this->database->getCapabilitiesTable();
109 $capabilities = (isset($user->{$capabilitiesTable}) === true) ? $user->{$capabilitiesTable} : [];
110
111 if (is_array($capabilities) === true && count($capabilities) > 0) {
112 $assignedRoles = $userGroup->getAssignedObjects(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE);
113
114 $recursiveRoles = array_intersect(
115 array_keys($capabilities),
116 array_keys($assignedRoles)
117 );
118
119 if (count($recursiveRoles) > 0) {
120 $recursiveMembership[ObjectHandler::GENERAL_ROLE_OBJECT_TYPE] = array_combine(
121 $recursiveRoles,
122 $this->php->arrayFill(
123 0,
124 count($recursiveRoles),
125 $this->assignmentInformationFactory->createAssignmentInformation(
126 ObjectHandler::GENERAL_ROLE_OBJECT_TYPE
127 )
128 )
129 );
130 }
131 }
132 }
133
134 $isMember = $userGroup->isObjectAssignedToGroup(
135 $this->generalObjectType,
136 $objectId,
137 $assignmentInformation
138 );
139
140
141 return $this->checkAccessWithRecursiveMembership($isMember, $recursiveMembership, $assignmentInformation);
142 }
143
144 /**
145 * Returns the user role objects.
146 * @param AbstractUserGroup $userGroup
147 * @param bool $lockRecursive
148 * @param null $objectType
149 * @return array
150 * @throws Exception
151 */
152 public function getFullObjects(AbstractUserGroup $userGroup, bool $lockRecursive, $objectType = null): array
153 {
154 $users = [];
155
156 $databaseUsers = (array) $this->database->getResults(
157 "SELECT ID, user_nicename
158 FROM {$this->database->getUsersTable()}"
159 );
160
161 foreach ($databaseUsers as $user) {
162 if ($userGroup->isObjectMember($this->generalObjectType, $user->ID) === true) {
163 $users[$user->ID] = $this->generalObjectType;
164 }
165 }
166
167 return $users;
168 }
169 }
170