PluginProbe
User Access Manager / 2.2.13
User Access Manager v2.2.13
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 -43 2.3.162.2.13 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,84 @@
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|AbstractUserGroup[]
77 + */
78 + private $userGroupsForUser = null;
79 +
80 + /**
81 + * @var array
82 + */
83 + private $objectUserGroups = [];
84 +
27 85 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
86 + Wordpress $wordpress,
87 + WordpressConfig $wordpressConfig,
88 + Database $database,
89 + ObjectHandler $objectHandler,
90 + UserHandler $userHandler,
91 + UserGroupFactory $userGroupFactory
35 92 ) {
93 + $this->wordpress = $wordpress;
94 + $this->wordpressConfig = $wordpressConfig;
95 + $this->database = $database;
96 + $this->objectHandler = $objectHandler;
97 + $this->userHandler = $userHandler;
98 + $this->userGroupFactory = $userGroupFactory;
36 99 }
37 100
38 101 /**
39 - * @return null|UserGroup[]
102 + * Returns all user groups.
103 + * @return UserGroup[]
40 104 * @throws UserGroupTypeException
41 105 */
42 106 public function getUserGroups(): ?array
43 107 {
@@ -43,14 +107,14 @@
43 107 {
44 108 if ($this->userGroups === null) {
45 109 $this->userGroups = [];
46 110
47 - $query = "SELECT * FROM {$this->database->getUserGroupTable()}";
48 - $databaseUserGroups = (array) $this->database->getResults($query);
111 + $query = "SELECT ID FROM {$this->database->getUserGroupTable()}";
112 + $userGroups = (array) $this->database->getResults($query);
49 113
50 - foreach ($databaseUserGroups as $databaseUserGroup) {
51 - $userGroup = $this->userGroupFactory->createUserGroupFromDatabaseRow($databaseUserGroup);
52 - $this->userGroups[$userGroup->getId()] = $userGroup;
114 + foreach ($userGroups as $userGroup) {
115 + $group = $this->userGroupFactory->createUserGroup($userGroup->ID);
116 + $this->userGroups[$group->getId()] = $group;
53 117 }
54 118 }
55 119
56 120 return $this->userGroups;
@@ -56,8 +120,9 @@
56 120 return $this->userGroups;
57 121 }
58 122
59 123 /**
124 + * Returns all dynamic user groups.
60 125 * @return null|DynamicUserGroup[]
61 126 * @throws UserGroupTypeException
62 127 */
63 128 public function getDynamicUserGroups(): ?array
@@ -74,9 +139,9 @@
74 139 $userGroupTypes = implode('\', \'', [DynamicUserGroup::ROLE_TYPE, DynamicUserGroup::USER_TYPE]);
75 140
76 141 $query = "SELECT group_id AS id, group_type AS type
77 142 FROM {$this->database->getUserGroupToObjectTable()}
78 - WHERE group_type IN ('$userGroupTypes')
143 + WHERE group_type IN ('{$userGroupTypes}')
79 144 GROUP BY group_type, group_id";
80 145
81 146 $dynamicUserGroups = (array) $this->database->getResults($query);
82 147
@@ -93,9 +158,10 @@
93 158 return $this->dynamicUserGroups;
94 159 }
95 160
96 161 /**
97 - * @return null|AbstractUserGroup[]
162 + * Returns the full user groups
163 + * @return AbstractUserGroup[]
98 164 * @throws UserGroupTypeException
99 165 */
100 166 public function getFullUserGroups(): ?array
101 167 {
@@ -102,8 +168,9 @@
102 168 return $this->getUserGroups() + $this->getDynamicUserGroups();
103 169 }
104 170
105 171 /**
172 + * Returns the user groups filtered by the user user groups.
106 173 * @return AbstractUserGroup[]
107 174 * @throws UserGroupTypeException
108 175 */
109 176 public function getFilteredUserGroups(): array
@@ -113,11 +180,13 @@
113 180 return array_intersect_key($userGroups, $userUserGroups);
114 181 }
115 182
116 183 /**
184 + * Adds a user group.
185 + * @param UserGroup $userGroup
117 186 * @throws UserGroupTypeException
118 187 */
119 - public function addUserGroup(UserGroup $userGroup): void
188 + public function addUserGroup(UserGroup $userGroup)
120 189 {
121 190 $this->getUserGroups();
122 191 $this->userGroups[$userGroup->getId()] = $userGroup;
123 192 }
@@ -122,12 +191,15 @@
122 191 $this->userGroups[$userGroup->getId()] = $userGroup;
123 192 }
124 193
125 194 /**
195 + * Deletes a user group.
196 + * @param string|int $userGroupId
197 + * @return bool
126 198 * @throws UserGroupTypeException
127 199 * @throws Exception
128 200 */
129 - public function deleteUserGroup(int|string $userGroupId): bool
201 + public function deleteUserGroup($userGroupId): bool
130 202 {
131 203 $userGroups = $this->getUserGroups();
132 204
133 205 if (isset($userGroups[$userGroupId])
@@ -141,17 +213,18 @@
141 213 return false;
142 214 }
143 215
144 216 /**
217 + * Returns the user groups for the given object.
218 + * @param string $objectType The object type.
219 + * @param int|string $objectId The id of the object.
220 + * @param bool $ignoreDates If true we ignore the dates for the object assignment.
145 221 * @return AbstractUserGroup[]
146 222 * @throws UserGroupTypeException
147 223 * @throws Exception
148 224 */
149 - public function getUserGroupsForObject(
150 - string $objectType,
151 - int|string|null $objectId,
152 - bool $ignoreDates = false
153 - ): array {
225 + public function getUserGroupsForObject(string $objectType, $objectId, bool $ignoreDates = false): array
226 + {
154 227 if ($this->objectHandler->isValidObjectType($objectType) === false) {
155 228 return [];
156 229 }
157 230
@@ -172,19 +245,24 @@
172 245
173 246 return $this->objectUserGroups[$ignoreDates][$objectType][$objectId];
174 247 }
175 248
176 - public function unsetUserGroupsForObject(): void
249 + /**
250 + * Unset the object user groups.
251 + */
252 + public function unsetUserGroupsForObject()
177 253 {
178 254 $this->objectUserGroups = [];
179 255 }
180 256
257 + /**
258 + * Checks if the current user is in the ip range or if the user group is public.
259 + * @param UserGroup $userGroup
260 + * @return bool
261 + */
181 262 private function checkUserGroupAccess(UserGroup $userGroup): bool
182 263 {
183 - $extraIpHeader = $this->mainConfig->getExtraIpHeader();
184 - $userIp = $extraIpHeader !== null ?
185 - $_SERVER[$extraIpHeader] ?? ($_SERVER['REMOTE_ADDR'] ?? '') :
186 - $_SERVER['REMOTE_ADDR'] ?? '';
264 + $userIp = $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'] ?? '';
187 265
188 266 return $this->userHandler->isIpInRange($userIp, $userGroup->getIpRangeArray())
189 267 || $this->wordpressConfig->atAdminPanel() === false && $userGroup->getReadAccess() === 'all'
190 268 || $this->wordpressConfig->atAdminPanel() === true && $userGroup->getWriteAccess() === 'all';
@@ -190,11 +268,14 @@
190 268 || $this->wordpressConfig->atAdminPanel() === true && $userGroup->getWriteAccess() === 'all';
191 269 }
192 270
193 271 /**
272 + * Assigns the dynamic user groups to the user user groups.
273 + * @param WP_User $currentUser
274 + * @param array $userGroupsForUser
194 275 * @throws UserGroupTypeException
195 276 */
196 - private function assignDynamicUserGroupsForUser(WP_User $currentUser, array &$userGroupsForUser): void
277 + private function assignDynamicUserGroupsForUser(WP_User $currentUser, array &$userGroupsForUser)
197 278 {
198 279 $userUserGroup = $this->userGroupFactory->createDynamicUserGroup(
199 280 DynamicUserGroup::USER_TYPE,
200 281 $currentUser->ID
@@ -212,9 +293,10 @@
212 293 }
213 294 }
214 295
215 296 /**
216 - * @return AbstractUserGroup[]|null
297 + * Returns the user groups for the user.
298 + * @return AbstractUserGroup[]
217 299 * @throws UserGroupTypeException
218 300 */
219 301 public function getUserGroupsForUser(): ?array
220 302 {
@@ -246,16 +328,17 @@
246 328 return $this->userGroupsForUser;
247 329 }
248 330
249 331 /**
332 + * Returns the user groups for the object filtered by the user user groups.
333 + * @param string $objectType
334 + * @param string|int $objectId
335 + * @param bool $ignoreDates
250 336 * @return AbstractUserGroup[]
251 337 * @throws UserGroupTypeException
252 338 */
253 - public function getFilteredUserGroupsForObject(
254 - string $objectType,
255 - int|string|null $objectId,
256 - bool $ignoreDates = false
257 - ): array {
339 + public function getFilteredUserGroupsForObject(string $objectType, $objectId, bool $ignoreDates = false): array
340 + {
258 341 $userGroups = $this->getUserGroupsForObject($objectType, $objectId, $ignoreDates);
259 342 $userUserGroups = $this->getUserGroupsForUser() + $this->getDynamicUserGroups();
260 343 return array_intersect_key($userGroups, $userUserGroups);
261 344 }