PluginProbe
User Access Manager / 2.0.1
User Access Manager v2.0.1
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 / UserAccessManager / UserGroup / UserGroup.php

UserGroup.php in User Access Manager 2.0.1, at src/UserAccessManager/UserGroup/UserGroup.php

943 lines 26.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * UserGroup.php
4 *
5 * The UserGroup 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 namespace UserAccessManager\UserGroup;
16
17 use UserAccessManager\Config\Config;
18 use UserAccessManager\Database\Database;
19 use UserAccessManager\ObjectHandler\ObjectHandler;
20 use UserAccessManager\Util\Util;
21 use UserAccessManager\Wrapper\Php;
22 use UserAccessManager\Wrapper\Wordpress;
23
24 /**
25 * Class UserGroup
26 *
27 * @package UserAccessManager\UserGroup
28 */
29 class UserGroup
30 {
31 const NONE_ROLE = '_none-role_';
32
33 /**
34 * @var Php
35 */
36 private $php;
37
38 /**
39 * @var Wordpress
40 */
41 private $wordpress;
42
43 /**
44 * @var Database
45 */
46 private $database;
47
48 /**
49 * @var Config
50 */
51 private $config;
52
53 /**
54 * @var Util
55 */
56 private $util;
57
58 /**
59 * @var ObjectHandler
60 */
61 private $objectHandler;
62
63 /**
64 * @var int
65 */
66 private $id = null;
67
68 /**
69 * @var string
70 */
71 private $name = null;
72
73 /**
74 * @var string
75 */
76 private $description = null;
77
78 /**
79 * @var string
80 */
81 private $readAccess = null;
82
83 /**
84 * @var string
85 */
86 private $writeAccess = null;
87
88 /**
89 * @var string
90 */
91 private $ipRange = null;
92
93 /**
94 * @var array
95 */
96 private $assignedObjects = [];
97
98 /**
99 * @var array
100 */
101 private $roleMembership = [];
102
103 /**
104 * @var array
105 */
106 private $userMembership = [];
107
108 /**
109 * @var array
110 */
111 private $termMembership = [];
112
113 /**
114 * @var array
115 */
116 private $postMembership = [];
117
118 /**
119 * @var array
120 */
121 private $pluggableObjectMembership = [];
122
123 /**
124 * @var array
125 */
126 private $fullObjectMembership = [];
127
128 /**
129 * UserGroup constructor.
130 *
131 * @param Php $php
132 * @param Wordpress $wordpress
133 * @param Database $database
134 * @param Config $config
135 * @param Util $util
136 * @param ObjectHandler $objectHandler
137 * @param null|string $id
138 */
139 public function __construct(
140 Php $php,
141 Wordpress $wordpress,
142 Database $database,
143 Config $config,
144 Util $util,
145 ObjectHandler $objectHandler,
146 $id = null
147 ) {
148 $this->php = $php;
149 $this->wordpress = $wordpress;
150 $this->database = $database;
151 $this->config = $config;
152 $this->util = $util;
153 $this->objectHandler = $objectHandler;
154
155 if ($id !== null) {
156 $this->load($id);
157 }
158 }
159
160 /*
161 * Primary values.
162 */
163
164 /**
165 * Returns the group _iId.
166 *
167 * @return integer
168 */
169 public function getId()
170 {
171 return $this->id;
172 }
173
174 /**
175 * Returns the group name.
176 *
177 * @return string
178 */
179 public function getName()
180 {
181 return $this->name;
182 }
183
184 /**
185 * Sets the group name.
186 *
187 * @param string $name The new group name.
188 */
189 public function setName($name)
190 {
191 $this->name = $name;
192 }
193
194 /**
195 * Returns the group description.
196 *
197 * @return string
198 */
199 public function getDescription()
200 {
201 return $this->description;
202 }
203
204 /**
205 * Sets the group description.
206 *
207 * @param string $description The new group description.
208 */
209 public function setDescription($description)
210 {
211 $this->description = $description;
212 }
213
214 /**
215 * Returns the read access.
216 *
217 * @return string
218 */
219 public function getReadAccess()
220 {
221 return $this->readAccess;
222 }
223
224 /**
225 * Sets the read access.
226 *
227 * @param string $readAccess The read access.
228 */
229 public function setReadAccess($readAccess)
230 {
231 $this->readAccess = $readAccess;
232 }
233
234 /**
235 * Returns the write access.
236 *
237 * @return string
238 */
239 public function getWriteAccess()
240 {
241 return $this->writeAccess;
242 }
243
244 /**
245 * Sets the write access.
246 *
247 * @param string $writeAccess The write access.
248 */
249 public function setWriteAccess($writeAccess)
250 {
251 $this->writeAccess = $writeAccess;
252 }
253
254 /**
255 * Returns the ip range.
256 *
257 * @param bool $string If true return it as string.
258 *
259 * @return array|string
260 */
261 public function getIpRange($string = false)
262 {
263 return ($string === true) ? $this->ipRange : explode(';', $this->ipRange);
264 }
265
266 /**
267 * Sets the ip range.
268 *
269 * @param string|array $ipRange The new ip range.
270 */
271 public function setIpRange($ipRange)
272 {
273 $this->ipRange = (is_array($ipRange) === true) ? implode(';', $ipRange) : $ipRange;
274 }
275
276 /**
277 * Loads the user group.
278 *
279 * @param $id
280 *
281 * @return bool
282 */
283 public function load($id)
284 {
285 $query = $this->database->prepare(
286 "SELECT *
287 FROM {$this->database->getUserGroupTable()}
288 WHERE ID = %s
289 LIMIT 1",
290 $id
291 );
292
293 $dbUserGroup = $this->database->getRow($query);
294
295 if ($dbUserGroup !== null) {
296 $this->id = $id;
297 $this->name = $dbUserGroup->groupname;
298 $this->description = $dbUserGroup->groupdesc;
299 $this->readAccess = $dbUserGroup->read_access;
300 $this->writeAccess = $dbUserGroup->write_access;
301 $this->ipRange = $dbUserGroup->ip_range;
302
303 return true;
304 }
305
306 return false;
307 }
308
309 /**
310 * Saves the user group.
311 *
312 * @return bool
313 */
314 public function save()
315 {
316 if ($this->id === null) {
317 $return = $this->database->insert(
318 $this->database->getUserGroupTable(),
319 [
320 'groupname' => $this->name,
321 'groupdesc' => $this->description,
322 'read_access' => $this->readAccess,
323 'write_access' => $this->writeAccess,
324 'ip_range' => $this->ipRange
325 ]
326 );
327
328 if ($return !== false) {
329 $this->id = $this->database->getLastInsertId();
330 }
331 } else {
332 $return = $this->database->update(
333 $this->database->getUserGroupTable(),
334 [
335 'groupname' => $this->name,
336 'groupdesc' => $this->description,
337 'read_access' => $this->readAccess,
338 'write_access' => $this->writeAccess,
339 'ip_range' => $this->ipRange
340 ],
341 ['ID' => $this->id]
342 );
343 }
344
345 return ($return !== false);
346 }
347
348 /**
349 * Deletes the user group.
350 *
351 * @return bool
352 */
353 public function delete()
354 {
355 if ($this->id === null) {
356 return false;
357 }
358
359 $success = $this->database->delete(
360 $this->database->getUserGroupTable(),
361 ['ID' => $this->id]
362 );
363
364 if ($success !== false) {
365 $allObjectTypes = $this->objectHandler->getAllObjectTypes();
366
367 foreach ($allObjectTypes as $objectType) {
368 $this->removeObject($objectType);
369 }
370 }
371
372 return $success;
373 }
374
375 /**
376 * Adds a object of the given type.
377 *
378 * @param string $objectType The object type.
379 * @param string $objectId The object id.
380 *
381 * @return bool
382 */
383 public function addObject($objectType, $objectId)
384 {
385 $generalObjectType = $this->objectHandler->getGeneralObjectType($objectType);
386
387 if ($generalObjectType === null
388 || $this->objectHandler->isValidObjectType($objectType) === false
389 ) {
390 return false;
391 }
392
393 $return = $this->database->insert(
394 $this->database->getUserGroupToObjectTable(),
395 [
396 'group_id' => $this->id,
397 'object_id' => $objectId,
398 'general_object_type' => $generalObjectType,
399 'object_type' => $objectType
400 ],
401 [
402 '%d',
403 '%s',
404 '%s',
405 '%s'
406 ]
407 );
408
409 if ($return !== false) {
410 $this->assignedObjects = [];
411 $this->roleMembership = [];
412 $this->userMembership = [];
413 $this->termMembership = [];
414 $this->postMembership = [];
415 $this->pluggableObjectMembership = [];
416 $this->fullObjectMembership = [];
417
418 return true;
419 }
420
421 return false;
422 }
423
424 /**
425 * Removes a object of the given type.
426 *
427 * @param string $objectType The object type.
428 * @param string $objectId The object id.
429 *
430 * @return bool
431 */
432 public function removeObject($objectType, $objectId = null)
433 {
434 if ($this->objectHandler->isValidObjectType($objectType) === false) {
435 return false;
436 }
437
438 $query = "DELETE FROM {$this->database->getUserGroupToObjectTable()}
439 WHERE group_id = %d
440 AND (general_object_type = '%s' OR object_type = '%s')";
441
442 $values = [
443 $this->id,
444 $objectType,
445 $objectType
446 ];
447
448 if ($objectId !== null) {
449 $query .= ' AND object_id = %d';
450 $values[] = $objectId;
451 }
452
453 $query = $this->database->prepare($query, $values);
454 $success = ($this->database->query($query) !== false);
455
456 if ($success === true) {
457 $this->assignedObjects = [];
458 $this->roleMembership = [];
459 $this->userMembership = [];
460 $this->termMembership = [];
461 $this->postMembership = [];
462 $this->pluggableObjectMembership = [];
463 $this->fullObjectMembership = [];
464 }
465
466 return $success;
467 }
468
469 /**
470 * Returns the assigned objects.
471 *
472 * @param string $objectType The object type.
473 *
474 * @return array
475 */
476 public function getAssignedObjects($objectType)
477 {
478 if (isset($this->assignedObjects[$objectType]) === false) {
479 $query = $this->database->prepare(
480 "SELECT object_id AS id, object_type AS objectType
481 FROM {$this->database->getUserGroupToObjectTable()}
482 WHERE group_id = %d
483 AND (general_object_type = '%s' OR object_type = '%s')",
484 [
485 $this->getId(),
486 $objectType,
487 $objectType
488 ]
489 );
490
491 $results = (array)$this->database->getResults($query);
492 $this->assignedObjects[$objectType] = [];
493
494 foreach ($results as $result) {
495 $this->assignedObjects[$objectType][$result->id] = $result->objectType;
496 }
497 }
498
499 return $this->assignedObjects[$objectType];
500 }
501
502 /**
503 * Checks if the object is assigned to the group.
504 *
505 * @param string $objectType The object type.
506 * @param string $objectId The object id.
507 *
508 * @return bool
509 */
510 private function isObjectAssignedToGroup($objectType, $objectId)
511 {
512 $assignedObjects = $this->getAssignedObjects($objectType);
513 return isset($assignedObjects[$objectId]);
514 }
515
516 /**
517 * Returns the recursive membership.
518 *
519 * @param \Closure $mapFunction
520 * @param string $objectType
521 * @param string $objectId
522 * @param array $recursiveMembership
523 *
524 * @return bool
525 */
526 private function isObjectRecursiveMember(
527 $mapFunction,
528 $objectType,
529 $objectId,
530 array &$recursiveMembership = []
531 ) {
532 // Reset value to prevent errors
533 $recursiveMembership = [];
534
535 if ($this->config->lockRecursive() === true) {
536 $map = $mapFunction();
537 $generalMap = isset($map[ObjectHandler::TREE_MAP_PARENTS][$objectType]) ?
538 $map[ObjectHandler::TREE_MAP_PARENTS][$objectType] : [];
539
540 if (isset($generalMap[$objectId]) === true) {
541 foreach ($generalMap[$objectId] as $parentId => $type) {
542 if ($this->isObjectAssignedToGroup($objectType, $parentId)) {
543 $recursiveMembership[$objectType][$parentId] = $type;
544 }
545 }
546 }
547 }
548
549 return $this->isObjectAssignedToGroup($objectType, $objectId)
550 || count($recursiveMembership) > 0;
551 }
552
553 /**
554 * Checks if the role is a group member.
555 *
556 * @param string $roleId
557 * @param array $recursiveMembership
558 *
559 * @return bool
560 */
561 public function isRoleMember($roleId, array &$recursiveMembership = [])
562 {
563 if (isset($this->roleMembership[$roleId]) === false) {
564 $recursiveMembership = [];
565 $isMember = $this->isObjectAssignedToGroup(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE, $roleId);
566 $this->roleMembership[$roleId] = ($isMember === true) ? $recursiveMembership : false;
567 }
568
569 $recursiveMembership = ($this->roleMembership[$roleId] !== false) ? $this->roleMembership[$roleId] : [];
570
571 return ($this->roleMembership[$roleId] !== false);
572 }
573
574 /**
575 * Checks if the user is a group member.
576 *
577 * @param integer $userId The user id.
578 * @param array $recursiveMembership The recursive membership array.
579 *
580 * @return bool
581 */
582 public function isUserMember($userId, array &$recursiveMembership = [])
583 {
584 if (isset($this->userMembership[$userId]) === false) {
585 $recursiveMembership = [];
586 $user = $this->objectHandler->getUser($userId);
587
588 if ($user !== false) {
589 $capabilitiesTable = $this->database->getCapabilitiesTable();
590
591 $capabilities = (isset($user->{$capabilitiesTable}) === true) ? $user->{$capabilitiesTable} : [];
592
593 if (is_array($capabilities) === true && count($capabilities) > 0) {
594 $assignedRoles = $this->getAssignedObjects(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE);
595 $recursiveRoles = array_intersect(
596 array_keys($capabilities),
597 array_keys($assignedRoles)
598 );
599
600 if (count($recursiveRoles) > 0) {
601 $recursiveMembership[ObjectHandler::GENERAL_ROLE_OBJECT_TYPE] = array_combine(
602 $recursiveRoles,
603 $this->php->arrayFill(
604 0,
605 count($recursiveRoles),
606 ObjectHandler::GENERAL_ROLE_OBJECT_TYPE
607 )
608 );
609 }
610 }
611 }
612
613 $isMember = $this->isObjectAssignedToGroup(ObjectHandler::GENERAL_USER_OBJECT_TYPE, $userId)
614 || count($recursiveMembership) > 0;
615
616 $this->userMembership[$userId] = ($isMember === true) ? $recursiveMembership : false;
617 }
618
619 $recursiveMembership = ($this->userMembership[$userId] !== false) ? $this->userMembership[$userId] : [];
620
621 return ($this->userMembership[$userId] !== false);
622 }
623
624 /**
625 * Checks if the term is a group member.
626 *
627 * @param int $termId
628 * @param array $recursiveMembership
629 *
630 * @return bool
631 */
632 public function isTermMember($termId, array &$recursiveMembership = [])
633 {
634 if (isset($this->termMembership[$termId]) === false) {
635 $isMember = $this->isObjectRecursiveMember(
636 function () {
637 return $this->objectHandler->getTermTreeMap();
638 },
639 ObjectHandler::GENERAL_TERM_OBJECT_TYPE,
640 $termId,
641 $recursiveMembership
642 );
643
644 $this->termMembership[$termId] = ($isMember === true) ? $recursiveMembership : false;
645 }
646
647 $recursiveMembership = ($this->termMembership[$termId] !== false) ? $this->termMembership[$termId] : [];
648
649 return ($this->termMembership[$termId] !== false);
650 }
651
652 /**
653 * Checks if the post is a group member
654 *
655 * @param int $postId
656 * @param array $recursiveMembership
657 *
658 * @return bool
659 */
660 public function isPostMember($postId, array &$recursiveMembership = [])
661 {
662 if (isset($this->postMembership[$postId]) === false) {
663 $isMember = $this->isObjectRecursiveMember(
664 function () {
665 return $this->objectHandler->getPostTreeMap();
666 },
667 ObjectHandler::GENERAL_POST_OBJECT_TYPE,
668 $postId,
669 $recursiveMembership
670 );
671
672 if ($this->config->lockRecursive() === true) {
673 $postTermMap = $this->objectHandler->getPostTermMap();
674
675 if (isset($postTermMap[$postId]) === true) {
676 foreach ($postTermMap[$postId] as $termId => $type) {
677 if ($this->isTermMember($termId) === true) {
678 $recursiveMembership[ObjectHandler::GENERAL_TERM_OBJECT_TYPE][$termId] = $type;
679 }
680 }
681 }
682
683 $isMember = $isMember || count($recursiveMembership) > 0;
684 }
685
686 $this->postMembership[$postId] = ($isMember === true) ? $recursiveMembership : false;
687 }
688
689 $recursiveMembership = ($this->postMembership[$postId] !== false) ? $this->postMembership[$postId] : [];
690
691 return ($this->postMembership[$postId] !== false);
692 }
693
694 /**
695 * Returns a the recursive membership for a pluggable object.
696 *
697 * @param string $objectType The pluggable object type.
698 * @param string $objectId The object id.
699 * @param array $recursiveMembership The object id.
700 *
701 * @return bool
702 */
703 public function isPluggableObjectMember($objectType, $objectId, array &$recursiveMembership = [])
704 {
705 if (isset($this->pluggableObjectMembership[$objectType]) === false) {
706 $this->pluggableObjectMembership[$objectType] = [];
707 }
708
709 if (isset($this->pluggableObjectMembership[$objectType][$objectId]) === false) {
710 $isMember = false;
711 $pluggableObject = $this->objectHandler->getPluggableObject($objectType);
712
713 if ($pluggableObject !== null) {
714 $recursiveMembership = $pluggableObject->getRecursiveMembership($this, $objectId);
715 $isMember = $this->isObjectAssignedToGroup($objectType, $objectId)
716 || count($recursiveMembership) > 0;
717 }
718
719 $this->pluggableObjectMembership[$objectType][$objectId] =
720 ($isMember === true) ? $recursiveMembership : false;
721 }
722
723 $recursiveMembership = ($this->pluggableObjectMembership[$objectType][$objectId] !== false) ?
724 $this->pluggableObjectMembership[$objectType][$objectId] : [];
725
726 return ($this->pluggableObjectMembership[$objectType][$objectId] !== false);
727 }
728
729 /**
730 * Returns a single object.
731 *
732 * @param string $objectType The object type.
733 * @param string $objectId The id of the object which should be checked.
734 * @param array $recursiveMembership The recursive membership.
735 *
736 * @return bool
737 */
738 public function isObjectMember($objectType, $objectId, array &$recursiveMembership = [])
739 {
740 $isMember = false;
741 $recursiveMembership = [];
742
743 if ($objectType === ObjectHandler::GENERAL_ROLE_OBJECT_TYPE) {
744 $isMember = $this->isRoleMember($objectId, $recursiveMembership);
745 } elseif ($objectType === ObjectHandler::GENERAL_USER_OBJECT_TYPE) {
746 $isMember = $this->isUserMember($objectId, $recursiveMembership);
747 } elseif ($objectType === ObjectHandler::GENERAL_TERM_OBJECT_TYPE
748 || $this->objectHandler->isTaxonomy($objectType) === true
749 ) {
750 $isMember = $this->isTermMember($objectId, $recursiveMembership);
751 } elseif ($objectType === ObjectHandler::GENERAL_POST_OBJECT_TYPE
752 || $this->objectHandler->isPostType($objectType) === true
753 ) {
754 $isMember = $this->isPostMember($objectId, $recursiveMembership);
755 } elseif ($this->objectHandler->isPluggableObject($objectType) === true) {
756 $isMember = $this->isPluggableObjectMember($objectType, $objectId, $recursiveMembership);
757 }
758
759 return $isMember;
760 }
761
762 /**
763 * Returns the recursive membership.
764 *
765 * @param string $objectType The object type.
766 * @param string $objectId The object id.
767 *
768 * @return array
769 */
770 public function getRecursiveMembershipForObject($objectType, $objectId)
771 {
772 $recursiveMembership = [];
773
774 if ($this->isObjectMember($objectType, $objectId, $recursiveMembership) === true) {
775 return $recursiveMembership;
776 }
777
778 return [];
779 }
780
781 /**
782 * Returns true if the requested object is locked recursive.
783 *
784 * @param string $objectType The object type.
785 * @param string $objectId The object id.
786 *
787 * @return bool
788 */
789 public function isLockedRecursive($objectType, $objectId)
790 {
791 $recursiveMembership = [];
792
793 if ($this->isObjectMember($objectType, $objectId, $recursiveMembership) === true) {
794 return (count($recursiveMembership) > 0);
795 }
796
797 return false;
798 }
799
800 /**
801 * Returns the objects by the given type including the children.
802 *
803 * @param \Closure $mapFunction
804 * @param string $objectType
805 *
806 * @return array
807 */
808 private function getFullObjects($mapFunction, $objectType)
809 {
810 $objects = $this->getAssignedObjects($objectType);
811
812 if ($this->config->lockRecursive() === true) {
813 $map = $mapFunction();
814 $map = isset($map[ObjectHandler::TREE_MAP_CHILDREN][$objectType]) ?
815 $map[ObjectHandler::TREE_MAP_CHILDREN][$objectType] : [];
816 $map = array_intersect_key($map, $objects);
817
818 foreach ($map as $childrenIds) {
819 foreach ($childrenIds as $parentId => $type) {
820 if ($this->isObjectMember($objectType, $parentId) === true) {
821 $objects[$parentId] = $type;
822 }
823 }
824 }
825 }
826
827 return $objects;
828 }
829
830 /**
831 * Returns the users assigned to the group.
832 *
833 * @return array
834 */
835 public function getFullUsers()
836 {
837 if (isset($this->fullObjectMembership[ObjectHandler::GENERAL_USER_OBJECT_TYPE]) === false) {
838 $this->fullObjectMembership[ObjectHandler::GENERAL_USER_OBJECT_TYPE] = [];
839
840 $databaseUsers = (array)$this->database->getResults(
841 "SELECT ID, user_nicename
842 FROM {$this->database->getUsersTable()}"
843 );
844
845 foreach ($databaseUsers as $user) {
846 if ($this->isObjectMember(ObjectHandler::GENERAL_USER_OBJECT_TYPE, $user->ID) === true) {
847 $this->fullObjectMembership[ObjectHandler::GENERAL_USER_OBJECT_TYPE][$user->ID] =
848 ObjectHandler::GENERAL_USER_OBJECT_TYPE;
849 }
850 }
851 }
852
853 return $this->fullObjectMembership[ObjectHandler::GENERAL_USER_OBJECT_TYPE];
854 }
855
856 /**
857 * Returns the terms assigned to the group.
858 *
859 * @param string $termType The term type.
860 *
861 * @return array
862 */
863 public function getFullTerms($termType = null)
864 {
865 if (isset($this->fullObjectMembership[$termType]) === false) {
866 $termType = ($termType === null) ? ObjectHandler::GENERAL_TERM_OBJECT_TYPE : $termType;
867
868 $this->fullObjectMembership[$termType] = $this->getFullObjects(
869 function () {
870 return $this->objectHandler->getTermTreeMap();
871 },
872 $termType
873 );
874 }
875
876 return $this->fullObjectMembership[$termType];
877 }
878
879 /**
880 * Returns the posts assigned to the group.
881 *
882 * @param string $postType The post type.
883 *
884 * @return array
885 */
886 public function getFullPosts($postType = null)
887 {
888 if (isset($this->fullObjectMembership[$postType]) === false) {
889 $postType = ($postType === null) ? ObjectHandler::GENERAL_POST_OBJECT_TYPE : $postType;
890 $posts = $this->getFullObjects(
891 function () {
892 return $this->objectHandler->getPostTreeMap();
893 },
894 $postType
895 );
896
897 if ($this->config->lockRecursive() === true) {
898 $termsPostMap = $this->objectHandler->getTermPostMap();
899 $terms = $this->getFullTerms();
900
901 foreach ($terms as $termId => $term) {
902 if (isset($termsPostMap[$termId]) === true) {
903 $posts += $termsPostMap[$termId];
904 }
905 }
906 }
907
908 $this->fullObjectMembership[$postType] = $posts;
909 }
910
911 return $this->fullObjectMembership[$postType];
912 }
913
914 /**
915 * Returns all objects of the given type.
916 *
917 * @param string $objectType The object type.
918 *
919 * @return array
920 */
921 public function getAssignedObjectsByType($objectType)
922 {
923 if ($objectType === ObjectHandler::GENERAL_ROLE_OBJECT_TYPE) {
924 return $this->getAssignedObjects($objectType);
925 } elseif ($objectType === ObjectHandler::GENERAL_USER_OBJECT_TYPE) {
926 return $this->getFullUsers();
927 } elseif ($objectType === ObjectHandler::GENERAL_TERM_OBJECT_TYPE
928 || $this->objectHandler->isTaxonomy($objectType) === true
929 ) {
930 return $this->getFullTerms($objectType);
931 } elseif ($objectType === ObjectHandler::GENERAL_POST_OBJECT_TYPE
932 || $this->objectHandler->isPostType($objectType) === true
933 ) {
934 return $this->getFullPosts($objectType);
935 } elseif ($this->objectHandler->isPluggableObject($objectType)) {
936 $pluggableObject = $this->objectHandler->getPluggableObject($objectType);
937 return ($pluggableObject !== null) ? $pluggableObject->getFullObjects($this) : [];
938 }
939
940 return [];
941 }
942 }
943