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
← All changes | src/Object/ObjectHandler.php +39 -62 2.3.17trunk View file →
@@ -1,18 +1,5 @@
1 1 <?php
2 -/**
3 - * ObjectHandler.php
4 - *
5 - * The ObjectHandler 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 2
16 3 declare(strict_types=1);
17 4
18 5 namespace UserAccessManager\Object;
@@ -17,9 +4,9 @@
17 4
18 5 namespace UserAccessManager\Object;
19 6
20 7 use Exception;
21 -use UserAccessManager\ObjectMembership\MissingObjectMembershipHandlerException;
8 +use UserAccessManager\ObjectMembership\Exception\MissingObjectMembershipHandlerException;
22 9 use UserAccessManager\ObjectMembership\ObjectMembershipHandler;
23 10 use UserAccessManager\ObjectMembership\ObjectMembershipHandlerFactory;
24 11 use UserAccessManager\Wrapper\Php;
25 12 use UserAccessManager\Wrapper\Wordpress;
@@ -28,13 +15,8 @@
28 15 use WP_Taxonomy;
29 16 use WP_Term;
30 17 use WP_User;
31 18
32 -/**
33 - * Class ObjectHandler
34 - *
35 - * @package UserAccessManager\ObjectHandler
36 - */
37 19 class ObjectHandler
38 20 {
39 21 public const GENERAL_ROLE_OBJECT_TYPE = '_role_';
40 22 public const GENERAL_USER_OBJECT_TYPE = '_user_';
@@ -66,9 +48,9 @@
66 48 private ObjectMembershipHandlerFactory $membershipHandlerFactory
67 49 ) {
68 50 }
69 51
70 - public function getPostTypes(): ?array
52 + public function getPostTypes(): array
71 53 {
72 54 if ($this->postTypes === null) {
73 55 $this->postTypes = $this->wordpress->getPostTypes(['public' => true]);
74 56 }
@@ -75,9 +57,9 @@
75 57
76 58 return $this->postTypes;
77 59 }
78 60
79 - public function getTaxonomies(): ?array
61 + public function getTaxonomies(): array
80 62 {
81 63 if ($this->taxonomies === null) {
82 64 $this->taxonomies = $this->wordpress->getTaxonomies(['public' => true]);
83 65 }
@@ -115,8 +97,16 @@
115 97
116 98 return $this->terms[$fullId];
117 99 }
118 100
101 + private function resetDerivedObjectTypeCaches(): void
102 + {
103 + $this->objectTypes = null;
104 + $this->allObjectTypes = null;
105 + $this->allObjectTypesMap = null;
106 + $this->validObjectTypes = [];
107 + }
108 +
119 109 /**
120 110 * @see http://wordpress.org/support/topic/modifying-post-type-using-the-registered_post_type-hook
121 111 */
122 112 public function registeredPostType(string $postType, WP_Post_Type $arguments): void
@@ -123,12 +113,9 @@
123 113 {
124 114 if ($arguments->public === true) {
125 115 $this->postTypes = $this->getPostTypes();
126 116 $this->postTypes[$postType] = $postType;
127 - $this->objectTypes = null;
128 - $this->allObjectTypes = null;
129 - $this->allObjectTypesMap = null;
130 - $this->validObjectTypes = [];
117 + $this->resetDerivedObjectTypeCaches();
131 118 }
132 119 }
133 120
134 121 public function registeredTaxonomy(string $taxonomy, array|string|null $objectType, array $arguments): void
@@ -135,28 +122,23 @@
135 122 {
136 123 if ((bool) $arguments['public'] === true) {
137 124 $this->taxonomies = $this->getTaxonomies();
138 125 $this->taxonomies[$taxonomy] = $taxonomy;
139 - $this->objectTypes = null;
140 - $this->allObjectTypes = null;
141 - $this->allObjectTypesMap = null;
142 - $this->validObjectTypes = [];
126 + $this->resetDerivedObjectTypeCaches();
143 127 }
144 128 }
145 129
146 130 public function isPostType(string $type): bool
147 131 {
148 - $postableTypes = $this->getPostTypes();
149 - return isset($postableTypes[$type]);
132 + return isset($this->getPostTypes()[$type]);
150 133 }
151 134
152 135 public function isTaxonomy(string $taxonomy): bool
153 136 {
154 - $taxonomies = $this->getTaxonomies();
155 - return in_array($taxonomy, $taxonomies);
137 + return in_array($taxonomy, $this->getTaxonomies());
156 138 }
157 139
158 - public function getObjectTypes(): ?array
140 + public function getObjectTypes(): array
159 141 {
160 142 if ($this->objectTypes === null) {
161 143 $this->objectTypes = array_merge(
162 144 $this->getPostTypes(),
@@ -169,27 +151,24 @@
169 151
170 152 /**
171 153 * @throws Exception
172 154 */
173 - private function getAllObjectsTypesMap(): ?array
155 + private function getAllObjectsTypesMap(): array
174 156 {
175 157 if ($this->allObjectTypesMap === null) {
176 158 $this->allObjectTypesMap = [];
177 - $objectHandlers = $this->getObjectMembershipHandlers();
178 159
179 - foreach ($objectHandlers as $objectHandler) {
180 - $handledObjects = $objectHandler->getHandledObjects();
160 + foreach ($this->getObjectMembershipHandlers() as $membershipHandler) {
161 + $handledObjects = $membershipHandler->getHandledObjects();
181 162
182 163 if ($handledObjects === []) {
183 164 continue;
184 165 }
185 166
186 - $handledObjectsMap = array_combine(
167 + $this->allObjectTypesMap = array_merge($this->allObjectTypesMap, array_combine(
187 168 $handledObjects,
188 - $this->php->arrayFill(0, count($handledObjects), $objectHandler->getGeneralObjectType())
189 - );
190 -
191 - $this->allObjectTypesMap = array_merge($this->allObjectTypesMap, $handledObjectsMap);
169 + $this->php->arrayFill(0, count($handledObjects), $membershipHandler->getGeneralObjectType())
170 + ));
192 171 }
193 172 }
194 173
195 174 return $this->allObjectTypesMap;
@@ -197,9 +176,9 @@
197 176
198 177 /**
199 178 * @throws Exception
200 179 */
201 - public function getAllObjectTypes(): ?array
180 + public function getAllObjectTypes(): array
202 181 {
203 182 if ($this->allObjectTypes === null) {
204 183 $objectTypes = array_keys($this->getAllObjectsTypesMap());
205 184 $this->allObjectTypes = array_combine($objectTypes, $objectTypes);
@@ -212,10 +191,9 @@
212 191 * @throws Exception
213 192 */
214 193 public function getGeneralObjectType(?string $objectType): ?string
215 194 {
216 - $objectsTypeMap = $this->getAllObjectsTypesMap();
217 - return (isset($objectsTypeMap[$objectType]) === true) ? $objectsTypeMap[$objectType] : null;
195 + return $this->getAllObjectsTypesMap()[$objectType] ?? null;
218 196 }
219 197
220 198 /**
221 199 * @throws Exception
@@ -222,10 +200,9 @@
222 200 */
223 201 public function isValidObjectType(?string $objectType): bool
224 202 {
225 203 if (isset($this->validObjectTypes[$objectType]) === false) {
226 - $objectTypesMap = $this->getAllObjectTypes();
227 - $this->validObjectTypes[$objectType] = isset($objectTypesMap[$objectType]);
204 + $this->validObjectTypes[$objectType] = isset($this->getAllObjectTypes()[$objectType]);
228 205 }
229 206
230 207 return $this->validObjectTypes[$objectType];
231 208 }
@@ -230,30 +207,30 @@
230 207 return $this->validObjectTypes[$objectType];
231 208 }
232 209
233 210 /**
211 + * @return ObjectMembershipHandler[]
234 212 * @throws Exception
235 213 */
236 - private function getObjectMembershipHandlers(): ?array
214 + private function getObjectMembershipHandlers(): array
237 215 {
238 216 if ($this->objectMembershipHandlers === null) {
239 - $factory = $this->membershipHandlerFactory;
217 + $handlersByGeneralObjectType = [];
240 218
241 - $roleMembershipHandler = $factory->createRoleMembershipHandler();
242 - $userMembershipHandler = $factory->createUserMembershipHandler($this);
243 - $termMembershipHandler = $factory->createTermMembershipHandler($this);
244 - $postMembershipHandler = $factory->createPostMembershipHandler($this);
219 + foreach ([
220 + $this->membershipHandlerFactory->createRoleMembershipHandler(),
221 + $this->membershipHandlerFactory->createUserMembershipHandler($this),
222 + $this->membershipHandlerFactory->createTermMembershipHandler($this),
223 + $this->membershipHandlerFactory->createPostMembershipHandler($this)
224 + ] as $membershipHandler) {
225 + $handlersByGeneralObjectType[$membershipHandler->getGeneralObjectType()] = $membershipHandler;
226 + }
245 227
246 - $this->objectMembershipHandlers = [
247 - $roleMembershipHandler->getGeneralObjectType() => $roleMembershipHandler,
248 - $userMembershipHandler->getGeneralObjectType() => $userMembershipHandler,
249 - $termMembershipHandler->getGeneralObjectType() => $termMembershipHandler,
250 - $postMembershipHandler->getGeneralObjectType() => $postMembershipHandler
251 - ];
252 -
228 + // Published before the filter runs, so a callback that re-enters does not rebuild the handlers.
229 + $this->objectMembershipHandlers = $handlersByGeneralObjectType;
253 230 $this->objectMembershipHandlers = $this->wordpress->applyFilters(
254 231 'uam_register_object_membership_handler',
255 - $this->objectMembershipHandlers
232 + $handlersByGeneralObjectType
256 233 );
257 234 }
258 235
259 236 return $this->objectMembershipHandlers;