PluginProbe
User Access Manager / 2.1.11
User Access Manager v2.1.11
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/ObjectMembership/ObjectMembershipWithMapHandler.php +73 -53 2.3.19 → 2.1.11 View file →
@@ -1,85 +1,105 @@
1 1 <?php
2 -
3 -declare(strict_types=1);
4 -
2 +/**
3 + * MembershipWithMapHandler.php
4 + *
5 + * The MembershipWithMapHandler class file.
6 + *
7 + * PHP versions 5
8 + *
9 + * @author Alexander Schneider <[email protected]>
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 + */
5 15 namespace UserAccessManager\ObjectMembership;
6 16
7 -use Exception;
8 17 use UserAccessManager\Object\ObjectMapHandler;
9 18 use UserAccessManager\UserGroup\AbstractUserGroup;
10 19 use UserAccessManager\UserGroup\AssignmentInformation;
11 20
21 +/**
22 + * Class MembershipWithMapHandler
23 + *
24 + * @package UserAccessManager\UserGroup
25 + */
12 26 abstract class ObjectMembershipWithMapHandler extends ObjectMembershipHandler
13 27 {
14 - abstract protected function getMap(): array;
28 + /**
29 + * Returns the map.
30 + *
31 + * @return array
32 + */
33 + abstract protected function getMap();
15 34
16 - protected function getHandledObjectsIncluding(array $objectTypes): array
17 - {
18 - $objectTypeNames = array_keys($objectTypes);
19 -
20 - return array_merge(
21 - parent::getHandledObjects(),
22 - array_combine($objectTypeNames, $objectTypeNames)
23 - );
24 - }
25 -
26 35 /**
27 - * @throws Exception
36 + * Uses a map function to resolve the recursive membership.
37 + *
38 + * @param AbstractUserGroup $userGroup
39 + * @param bool $lockRecursive
40 + * @param string $objectId
41 + * @param null|AssignmentInformation $assignmentInformation
42 + *
43 + * @return bool
28 44 */
29 - private function getRecursiveMembershipByMap(AbstractUserGroup $userGroup, int|string|null $objectId): array
30 - {
31 - $parentMap = $this->getMap()[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType] ?? [];
45 + protected function getMembershipByMap(
46 + AbstractUserGroup $userGroup,
47 + $lockRecursive,
48 + $objectId,
49 + &$assignmentInformation = null
50 + ) {
51 + // Reset value to prevent errors
32 52 $recursiveMembership = [];
33 53
34 - foreach (array_keys($parentMap[$objectId] ?? []) as $parentId) {
35 - $isObjectMember = $userGroup->isObjectMember(
36 - $this->generalObjectType,
37 - $parentId,
38 - $parentAssignmentInformation
39 - );
54 + if ($lockRecursive === true) {
55 + $map = $this->getMap();
56 + $generalMap = isset($map[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType]) ?
57 + $map[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType] : [];
40 58
41 - if ($isObjectMember === true) {
42 - $recursiveMembership[$this->generalObjectType][$parentId] = $parentAssignmentInformation;
59 + if (isset($generalMap[$objectId]) === true) {
60 + foreach ($generalMap[$objectId] as $parentId => $type) {
61 + $isObjectMember = $userGroup->isObjectMember(
62 + $this->generalObjectType,
63 + $parentId,
64 + $rmAssignmentInformation
65 + );
66 +
67 + if ($isObjectMember === true) {
68 + $recursiveMembership[$this->generalObjectType][$parentId] = $rmAssignmentInformation;
69 + }
70 + }
43 71 }
44 72 }
45 73
46 - return $recursiveMembership;
47 - }
48 -
49 - /**
50 - * @throws Exception
51 - */
52 - protected function getMembershipByMap(
53 - AbstractUserGroup $userGroup,
54 - bool $lockRecursive,
55 - int|string|null $objectId,
56 - ?AssignmentInformation &$assignmentInformation = null
57 - ): bool {
58 - $recursiveMembership = ($lockRecursive === true) ?
59 - $this->getRecursiveMembershipByMap($userGroup, $objectId) : [];
60 -
61 74 $isMember = $userGroup->isObjectAssignedToGroup($this->generalObjectType, $objectId, $assignmentInformation);
62 75 return $this->checkAccessWithRecursiveMembership($isMember, $recursiveMembership, $assignmentInformation);
63 76 }
64 77
65 78 /**
66 - * @throws Exception
79 + * Returns the objects by the given type including the children.
80 + *
81 + * @param AbstractUserGroup $userGroup
82 + * @param bool $lockRecursive
83 + * @param string $objectType
84 + *
85 + * @return array
67 86 */
68 - protected function getFullObjectsByMap(AbstractUserGroup $userGroup, bool $lockRecursive, string $objectType): array
87 + protected function getFullObjectsByMap(AbstractUserGroup $userGroup, $lockRecursive, $objectType)
69 88 {
70 89 $objects = $this->getSimpleAssignedObjects($userGroup, $objectType);
71 90
72 - if ($lockRecursive === false) {
73 - return $objects;
74 - }
91 + if ($lockRecursive === true) {
92 + $map = $this->getMap();
93 + $map = isset($map[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType]) ?
94 + $map[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType] : [];
95 + $map = array_intersect_key($map, $objects);
75 96
76 - $childrenMap = $this->getMap()[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType] ?? [];
77 -
78 - foreach (array_intersect_key($childrenMap, $objects) as $childrenIds) {
79 - foreach ($childrenIds as $parentId => $type) {
80 - if ($userGroup->isObjectMember($objectType, $parentId) === true) {
81 - $objects[$parentId] = $type;
97 + foreach ($map as $childrenIds) {
98 + foreach ($childrenIds as $parentId => $type) {
99 + if ($userGroup->isObjectMember($objectType, $parentId) === true) {
100 + $objects[$parentId] = $type;
101 + }
82 102 }
83 103 }
84 104 }
85 105