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