PluginProbe
User Access Manager / 2.2.3
User Access Manager v2.2.3
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
← All changes | src/UserGroup/UserGroupHandler.php +126 -38 2.3.132.2.3 View file →
@@ -1,5 +1,18 @@
1 1 <?php
2 +/**
3 + * UserGroupHandler.php
4 + *
5 + * The UserGroupHandler 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 + */
2 15
3 16 declare(strict_types=1);
4 17
5 18 namespace UserAccessManager\UserGroup;
@@ -4,9 +17,8 @@
4 17
5 18 namespace UserAccessManager\UserGroup;
6 19
7 20 use Exception;
8 -use UserAccessManager\Config\MainConfig;
9 21 use UserAccessManager\Config\WordpressConfig;
10 22 use UserAccessManager\Database\Database;
11 23 use UserAccessManager\Object\ObjectHandler;
12 24 use UserAccessManager\User\UserHandler;
@@ -12,32 +24,89 @@
12 24 use UserAccessManager\User\UserHandler;
13 25 use UserAccessManager\Wrapper\Wordpress;
14 26 use WP_User;
15 27
28 +/**
29 + * Class UserGroupHandler
30 + *
31 + * @package UserAccessManager\UserGroup
32 + */
16 33 class UserGroupHandler
17 34 {
18 - /** @var null|UserGroup[] */
19 - private ?array $userGroups = null;
20 - /** @var null|DynamicUserGroup[] */
21 - private ?array $dynamicUserGroups = null;
22 - /** @var null|AbstractUserGroup[] */
23 - private ?array $userGroupsForUser = null;
24 - /** @var AbstractUserGroup[] */
25 - private array $objectUserGroups = [];
35 + /**
36 + * @var Wordpress
37 + */
38 + private $wordpress;
26 39
40 + /**
41 + * @var WordpressConfig
42 + */
43 + private $wordpressConfig;
44 +
45 + /**
46 + * @var Database
47 + */
48 + private $database;
49 +
50 + /**
51 + * @var ObjectHandler
52 + */
53 + private $objectHandler;
54 +
55 + /**
56 + * @var UserHandler
57 + */
58 + private $userHandler;
59 +
60 + /**
61 + * @var UserGroupFactory
62 + */
63 + private $userGroupFactory;
64 +
65 + /**
66 + * @var null|UserGroup[]
67 + */
68 + private $userGroups = null;
69 +
70 + /**
71 + * @var null|DynamicUserGroup[]
72 + */
73 + private $dynamicUserGroups = null;
74 +
75 + /**
76 + * @var null|UserGroup[]
77 + */
78 + private $filteredUserGroups = null;
79 +
80 + /**
81 + * @var null|AbstractUserGroup[]
82 + */
83 + private $userGroupsForUser = null;
84 +
85 + /**
86 + * @var array
87 + */
88 + private $objectUserGroups = [];
89 +
27 90 public function __construct(
28 - private Wordpress $wordpress,
29 - private WordpressConfig $wordpressConfig,
30 - private MainConfig $mainConfig,
31 - private Database $database,
32 - private ObjectHandler $objectHandler,
33 - private UserHandler $userHandler,
34 - private UserGroupFactory $userGroupFactory
91 + Wordpress $wordpress,
92 + WordpressConfig $wordpressConfig,
93 + Database $database,
94 + ObjectHandler $objectHandler,
95 + UserHandler $userHandler,
96 + UserGroupFactory $userGroupFactory
35 97 ) {
98 + $this->wordpress = $wordpress;
99 + $this->wordpressConfig = $wordpressConfig;
100 + $this->database = $database;
101 + $this->objectHandler = $objectHandler;
102 + $this->userHandler = $userHandler;
103 + $this->userGroupFactory = $userGroupFactory;
36 104 }
37 105
38 106 /**
39 - * @return null|UserGroup[]
107 + * Returns all user groups.
108 + * @return UserGroup[]
40 109 * @throws UserGroupTypeException
41 110 */
42 111 public function getUserGroups(): ?array
43 112 {
@@ -56,8 +125,9 @@
56 125 return $this->userGroups;
57 126 }
58 127
59 128 /**
129 + * Returns all dynamic user groups.
60 130 * @return null|DynamicUserGroup[]
61 131 * @throws UserGroupTypeException
62 132 */
63 133 public function getDynamicUserGroups(): ?array
@@ -74,9 +144,9 @@
74 144 $userGroupTypes = implode('\', \'', [DynamicUserGroup::ROLE_TYPE, DynamicUserGroup::USER_TYPE]);
75 145
76 146 $query = "SELECT group_id AS id, group_type AS type
77 147 FROM {$this->database->getUserGroupToObjectTable()}
78 - WHERE group_type IN ('$userGroupTypes')
148 + WHERE group_type IN ('{$userGroupTypes}')
79 149 GROUP BY group_type, group_id";
80 150
81 151 $dynamicUserGroups = (array) $this->database->getResults($query);
82 152
@@ -93,9 +163,10 @@
93 163 return $this->dynamicUserGroups;
94 164 }
95 165
96 166 /**
97 - * @return null|AbstractUserGroup[]
167 + * Returns the full user groups
168 + * @return AbstractUserGroup[]
98 169 * @throws UserGroupTypeException
99 170 */
100 171 public function getFullUserGroups(): ?array
101 172 {
@@ -102,8 +173,9 @@
102 173 return $this->getUserGroups() + $this->getDynamicUserGroups();
103 174 }
104 175
105 176 /**
177 + * Returns the user groups filtered by the user user groups.
106 178 * @return AbstractUserGroup[]
107 179 * @throws UserGroupTypeException
108 180 */
109 181 public function getFilteredUserGroups(): array
@@ -113,11 +185,13 @@
113 185 return array_intersect_key($userGroups, $userUserGroups);
114 186 }
115 187
116 188 /**
189 + * Adds a user group.
190 + * @param UserGroup $userGroup
117 191 * @throws UserGroupTypeException
118 192 */
119 - public function addUserGroup(UserGroup $userGroup): void
193 + public function addUserGroup(UserGroup $userGroup)
120 194 {
121 195 $this->getUserGroups();
122 196 $this->userGroups[$userGroup->getId()] = $userGroup;
123 197 }
@@ -122,12 +196,15 @@
122 196 $this->userGroups[$userGroup->getId()] = $userGroup;
123 197 }
124 198
125 199 /**
200 + * Deletes a user group.
201 + * @param string|int $userGroupId
202 + * @return bool
126 203 * @throws UserGroupTypeException
127 204 * @throws Exception
128 205 */
129 - public function deleteUserGroup(int|string $userGroupId): bool
206 + public function deleteUserGroup($userGroupId): bool
130 207 {
131 208 $userGroups = $this->getUserGroups();
132 209
133 210 if (isset($userGroups[$userGroupId])
@@ -141,17 +218,18 @@
141 218 return false;
142 219 }
143 220
144 221 /**
222 + * Returns the user groups for the given object.
223 + * @param string $objectType The object type.
224 + * @param int|string $objectId The id of the object.
225 + * @param bool $ignoreDates If true we ignore the dates for the object assignment.
145 226 * @return AbstractUserGroup[]
146 227 * @throws UserGroupTypeException
147 228 * @throws Exception
148 229 */
149 - public function getUserGroupsForObject(
150 - string $objectType,
151 - int|string|null $objectId,
152 - bool $ignoreDates = false
153 - ): array {
230 + public function getUserGroupsForObject(string $objectType, $objectId, bool $ignoreDates = false): array
231 + {
154 232 if ($this->objectHandler->isValidObjectType($objectType) === false) {
155 233 return [];
156 234 }
157 235
@@ -172,19 +250,24 @@
172 250
173 251 return $this->objectUserGroups[$ignoreDates][$objectType][$objectId];
174 252 }
175 253
176 - public function unsetUserGroupsForObject(): void
254 + /**
255 + * Unset the object user groups.
256 + */
257 + public function unsetUserGroupsForObject()
177 258 {
178 259 $this->objectUserGroups = [];
179 260 }
180 261
262 + /**
263 + * Checks if the current user is in the ip range or if the user group is public.
264 + * @param UserGroup $userGroup
265 + * @return bool
266 + */
181 267 private function checkUserGroupAccess(UserGroup $userGroup): bool
182 268 {
183 - $extraIpHeader = $this->mainConfig->getExtraIpHeader();
184 - $userIp = $extraIpHeader !== null ?
185 - $_SERVER[$extraIpHeader] ?? ($_SERVER['REMOTE_ADDR'] ?? '') :
186 - $_SERVER['REMOTE_ADDR'] ?? '';
269 + $userIp = isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : $_SERVER['REMOTE_ADDR'];
187 270
188 271 return $this->userHandler->isIpInRange($userIp, $userGroup->getIpRangeArray())
189 272 || $this->wordpressConfig->atAdminPanel() === false && $userGroup->getReadAccess() === 'all'
190 273 || $this->wordpressConfig->atAdminPanel() === true && $userGroup->getWriteAccess() === 'all';
@@ -190,11 +273,14 @@
190 273 || $this->wordpressConfig->atAdminPanel() === true && $userGroup->getWriteAccess() === 'all';
191 274 }
192 275
193 276 /**
277 + * Assigns the dynamic user groups to the user user groups.
278 + * @param WP_User $currentUser
279 + * @param array $userGroupsForUser
194 280 * @throws UserGroupTypeException
195 281 */
196 - private function assignDynamicUserGroupsForUser(WP_User $currentUser, array &$userGroupsForUser): void
282 + private function assignDynamicUserGroupsForUser(WP_User $currentUser, array &$userGroupsForUser)
197 283 {
198 284 $userUserGroup = $this->userGroupFactory->createDynamicUserGroup(
199 285 DynamicUserGroup::USER_TYPE,
200 286 $currentUser->ID
@@ -212,9 +298,10 @@
212 298 }
213 299 }
214 300
215 301 /**
216 - * @return AbstractUserGroup[]|null
302 + * Returns the user groups for the user.
303 + * @return AbstractUserGroup[]
217 304 * @throws UserGroupTypeException
218 305 */
219 306 public function getUserGroupsForUser(): ?array
220 307 {
@@ -246,16 +333,17 @@
246 333 return $this->userGroupsForUser;
247 334 }
248 335
249 336 /**
337 + * Returns the user groups for the object filtered by the user user groups.
338 + * @param string $objectType
339 + * @param string|int $objectId
340 + * @param bool $ignoreDates
250 341 * @return AbstractUserGroup[]
251 342 * @throws UserGroupTypeException
252 343 */
253 - public function getFilteredUserGroupsForObject(
254 - string $objectType,
255 - int|string|null $objectId,
256 - bool $ignoreDates = false
257 - ): array {
344 + public function getFilteredUserGroupsForObject(string $objectType, $objectId, bool $ignoreDates = false): array
345 + {
258 346 $userGroups = $this->getUserGroupsForObject($objectType, $objectId, $ignoreDates);
259 347 $userUserGroups = $this->getUserGroupsForUser() + $this->getDynamicUserGroups();
260 348 return array_intersect_key($userGroups, $userUserGroups);
261 349 }