PluginProbe
User Access Manager / 2.2.5
User Access Manager v2.2.5
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 / ObjectMembership / ObjectMembershipWithMapHandler.php

ObjectMembershipWithMapHandler.php in User Access Manager 2.2.5, at src/ObjectMembership/ObjectMembershipWithMapHandler.php

110 lines 3.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MembershipWithMapHandler.php
4 *
5 * The MembershipWithMapHandler 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
16 declare(strict_types=1);
17
18 namespace UserAccessManager\ObjectMembership;
19
20 use Exception;
21 use UserAccessManager\Object\ObjectMapHandler;
22 use UserAccessManager\UserGroup\AbstractUserGroup;
23 use UserAccessManager\UserGroup\AssignmentInformation;
24
25 /**
26 * Class MembershipWithMapHandler
27 *
28 * @package UserAccessManager\UserGroup
29 */
30 abstract class ObjectMembershipWithMapHandler extends ObjectMembershipHandler
31 {
32 /**
33 * Returns the map.
34 * @return array
35 */
36 abstract protected function getMap(): array;
37
38 /**
39 * Uses a map function to resolve the recursive membership.
40 * @param AbstractUserGroup $userGroup
41 * @param bool $lockRecursive
42 * @param int|string $objectId
43 * @param null|AssignmentInformation $assignmentInformation
44 * @return bool
45 * @throws Exception
46 */
47 protected function getMembershipByMap(
48 AbstractUserGroup $userGroup,
49 bool $lockRecursive,
50 $objectId,
51 &$assignmentInformation = null
52 ): bool {
53 // Reset value to prevent errors
54 $recursiveMembership = [];
55
56 if ($lockRecursive === true) {
57 $map = $this->getMap();
58 $generalMap = isset($map[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType]) ?
59 $map[ObjectMapHandler::TREE_MAP_PARENTS][$this->generalObjectType] : [];
60
61 if (isset($generalMap[$objectId]) === true) {
62 foreach ($generalMap[$objectId] as $parentId => $type) {
63 $isObjectMember = $userGroup->isObjectMember(
64 $this->generalObjectType,
65 $parentId,
66 $rmAssignmentInformation
67 );
68
69 if ($isObjectMember === true) {
70 $recursiveMembership[$this->generalObjectType][$parentId] = $rmAssignmentInformation;
71 }
72 }
73 }
74 }
75
76 $isMember = $userGroup->isObjectAssignedToGroup($this->generalObjectType, $objectId, $assignmentInformation);
77 return $this->checkAccessWithRecursiveMembership($isMember, $recursiveMembership, $assignmentInformation);
78 }
79
80 /**
81 * Returns the objects by the given type including the children.
82 * @param AbstractUserGroup $userGroup
83 * @param bool $lockRecursive
84 * @param string $objectType
85 * @return array
86 * @throws Exception
87 */
88 protected function getFullObjectsByMap(AbstractUserGroup $userGroup, bool $lockRecursive, string $objectType): array
89 {
90 $objects = $this->getSimpleAssignedObjects($userGroup, $objectType);
91
92 if ($lockRecursive === true) {
93 $map = $this->getMap();
94 $map = isset($map[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType]) ?
95 $map[ObjectMapHandler::TREE_MAP_CHILDREN][$objectType] : [];
96 $map = array_intersect_key($map, $objects);
97
98 foreach ($map as $childrenIds) {
99 foreach ($childrenIds as $parentId => $type) {
100 if ($userGroup->isObjectMember($objectType, $parentId) === true) {
101 $objects[$parentId] = $type;
102 }
103 }
104 }
105 }
106
107 return $objects;
108 }
109 }
110