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
user-access-manager / src / ObjectMembership / PostMembershipHandler.php

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

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