PluginProbe
User Access Manager / 2.2.12
User Access Manager v2.2.12
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 / PostMembershipHandler.php

PostMembershipHandler.php in User Access Manager 2.2.12, at src/ObjectMembership/PostMembershipHandler.php

204 lines 6.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * PostMembershipHandler.php
4 *
5 * The PostMembershipHandler 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\ObjectHandler;
22 use UserAccessManager\Object\ObjectMapHandler;
23 use UserAccessManager\UserGroup\AbstractUserGroup;
24 use UserAccessManager\UserGroup\AssignmentInformation;
25 use UserAccessManager\UserGroup\AssignmentInformationFactory;
26 use UserAccessManager\Wrapper\Wordpress;
27
28 /**
29 * Class PostMembershipHandler
30 *
31 * @package UserAccessManager\UserGroup
32 */
33 class PostMembershipHandler extends ObjectMembershipWithMapHandler
34 {
35 /**
36 * @var string
37 */
38 protected $generalObjectType = ObjectHandler::GENERAL_POST_OBJECT_TYPE;
39
40 /**
41 * @var Wordpress
42 */
43 private $wordpress;
44
45 /**
46 * @var ObjectHandler
47 */
48 private $objectHandler;
49
50 /**
51 * @var ObjectMapHandler
52 */
53 private $objectMapHandler;
54
55 /**
56 * PostMembershipHandler constructor.
57 * @param AssignmentInformationFactory $assignmentInformationFactory
58 * @param Wordpress $wordpress
59 * @param ObjectHandler $objectHandler
60 * @param ObjectMapHandler $objectMapHandler
61 * @throws Exception
62 */
63 public function __construct(
64 AssignmentInformationFactory $assignmentInformationFactory,
65 Wordpress $wordpress,
66 ObjectHandler $objectHandler,
67 ObjectMapHandler $objectMapHandler
68 ) {
69 parent::__construct($assignmentInformationFactory);
70
71 $this->wordpress = $wordpress;
72 $this->objectHandler = $objectHandler;
73 $this->objectMapHandler = $objectMapHandler;
74 }
75
76 /**
77 * Returns the object and type name.
78 * @param int|string $objectId
79 * @param string $typeName
80 * @return int|string
81 */
82 public function getObjectName($objectId, &$typeName = '')
83 {
84 $post = $this->objectHandler->getPost($objectId);
85
86 if ($post !== false) {
87 $postTypeObject = $this->wordpress->getPostTypeObject($post->post_type);
88 $typeName = ($postTypeObject !== null) ? $postTypeObject->labels->name : $typeName;
89 return $post->post_title;
90 }
91
92 return $objectId;
93 }
94
95 /**
96 * Returns the handled objects.
97 * @return array
98 */
99 public function getHandledObjects(): array
100 {
101 $keys = array_keys($this->objectHandler->getPostTypes());
102 return array_merge(parent::getHandledObjects(), array_combine($keys, $keys));
103 }
104
105 /**
106 * Returns the map.
107 * @return array
108 */
109 protected function getMap(): array
110 {
111 return $this->objectMapHandler->getPostTreeMap();
112 }
113
114 /**
115 * Assigns the recursive member ship by the group terms.
116 * @param AbstractUserGroup $userGroup
117 * @param int|string $objectId
118 * @param array $recursiveMembership
119 * @throws Exception
120 */
121 private function assignRecursiveMembershipByTerm(
122 AbstractUserGroup $userGroup,
123 $objectId,
124 array &$recursiveMembership
125 ) {
126 $postTermMap = $this->objectMapHandler->getPostTermMap();
127
128 if (isset($postTermMap[$objectId]) === true) {
129 foreach ($postTermMap[$objectId] as $termId => $type) {
130 if ($userGroup->isTermMember($termId, $rmAssignmentInformation) === true) {
131 $recursiveMembership[ObjectHandler::GENERAL_TERM_OBJECT_TYPE][$termId] = $rmAssignmentInformation;
132 }
133 }
134 }
135 }
136
137 /**
138 * Checks if the post is a member of the user group.
139 * @param AbstractUserGroup $userGroup
140 * @param bool $lockRecursive
141 * @param int|string $objectId
142 * @param null|AssignmentInformation $assignmentInformation
143 * @return bool
144 * @throws Exception
145 */
146 public function isMember(
147 AbstractUserGroup $userGroup,
148 bool $lockRecursive,
149 $objectId,
150 ?AssignmentInformation &$assignmentInformation = null
151 ): bool {
152 $isMember = $this->getMembershipByMap($userGroup, $lockRecursive, $objectId, $assignmentInformation);
153
154 if ($lockRecursive === true) {
155 $recursiveMembership = ($assignmentInformation !== null) ?
156 $assignmentInformation->getRecursiveMembership() : [];
157
158 $this->assignRecursiveMembershipByTerm($userGroup, $objectId, $recursiveMembership);
159 $this->assignRecursiveMembership($assignmentInformation, $recursiveMembership);
160 $isMember = $isMember || count($recursiveMembership) > 0;
161 }
162
163 return $isMember;
164 }
165
166 /**
167 * Returns the full post objects.
168 * @param AbstractUserGroup $userGroup
169 * @param bool $lockRecursive
170 * @param null|string $objectType
171 * @return array
172 * @throws Exception
173 */
174 public function getFullObjects(AbstractUserGroup $userGroup, bool $lockRecursive, $objectType = null): array
175 {
176 $objectType = ($objectType === null) ? $this->generalObjectType : $objectType;
177 $posts = $this->getFullObjectsByMap($userGroup, $lockRecursive, $objectType);
178
179 if ($lockRecursive === true) {
180 $termsPostMap = $this->objectMapHandler->getTermPostMap();
181 $terms = $userGroup->getFullTerms();
182
183 foreach ($terms as $termId => $term) {
184 if (isset($termsPostMap[$termId]) === true) {
185 $map = $termsPostMap[$termId];
186
187 if ($objectType !== $this->generalObjectType) {
188 $map = array_filter(
189 $map,
190 function ($element) use ($objectType) {
191 return ($element === $objectType);
192 }
193 );
194 }
195
196 $posts += $map;
197 }
198 }
199 }
200
201 return $posts;
202 }
203 }
204