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

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

206 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 public function __construct(
60 AssignmentInformationFactory $assignmentInformationFactory,
61 Wordpress $wordpress,
62 ObjectHandler $objectHandler,
63 ObjectMapHandler $objectMapHandler
64 ) {
65 parent::__construct($assignmentInformationFactory);
66
67 $this->wordpress = $wordpress;
68 $this->objectHandler = $objectHandler;
69 $this->objectMapHandler = $objectMapHandler;
70 }
71
72 /**
73 * Returns the object and type name.
74 *
75 * @param string $objectId
76 * @param string $typeName
77 *
78 * @return string
79 */
80 public function getObjectName($objectId, &$typeName = '')
81 {
82 $post = $this->objectHandler->getPost($objectId);
83
84 if ($post !== false) {
85 $postTypeObject = $this->wordpress->getPostTypeObject($post->post_type);
86 $typeName = ($postTypeObject !== null) ? $postTypeObject->labels->name : $typeName;
87 return $post->post_title;
88 }
89
90 return $objectId;
91 }
92
93 /**
94 * Returns the handled objects.
95 *
96 * @return array
97 */
98 public function getHandledObjects()
99 {
100 $keys = array_keys($this->objectHandler->getPostTypes());
101 return array_merge(parent::getHandledObjects(), array_combine($keys, $keys));
102 }
103
104 /**
105 * Returns the map.
106 *
107 * @return array
108 */
109 protected function getMap()
110 {
111 return $this->objectMapHandler->getPostTreeMap();
112 }
113
114 /**
115 * Assigns the recursive member ship by the group terms.
116 *
117 * @param AbstractUserGroup $userGroup
118 * @param string $objectId
119 * @param array $recursiveMembership
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 *
140 * @param AbstractUserGroup $userGroup
141 * @param bool $lockRecursive
142 * @param string $objectId
143 * @param null|AssignmentInformation $assignmentInformation
144 *
145 * @return bool
146 */
147 public function isMember(
148 AbstractUserGroup $userGroup,
149 $lockRecursive,
150 $objectId,
151 &$assignmentInformation = null
152 ) {
153 $isMember = $this->getMembershipByMap($userGroup, $lockRecursive, $objectId, $assignmentInformation);
154
155 if ($lockRecursive === true) {
156 $recursiveMembership = ($assignmentInformation !== null) ?
157 $assignmentInformation->getRecursiveMembership() : [];
158
159 $this->assignRecursiveMembershipByTerm($userGroup, $objectId, $recursiveMembership);
160 $this->assignRecursiveMembership($assignmentInformation, $recursiveMembership);
161 $isMember = $isMember || count($recursiveMembership) > 0;
162 }
163
164 return $isMember;
165 }
166
167 /**
168 * Returns the full post objects.
169 *
170 * @param AbstractUserGroup $userGroup
171 * @param bool $lockRecursive
172 * @param null $objectType
173 *
174 * @return array
175 */
176 public function getFullObjects(AbstractUserGroup $userGroup, $lockRecursive, $objectType = null)
177 {
178 $objectType = ($objectType === null) ? $this->generalObjectType : $objectType;
179 $posts = $this->getFullObjectsByMap($userGroup, $lockRecursive, $objectType);
180
181 if ($lockRecursive === true) {
182 $termsPostMap = $this->objectMapHandler->getTermPostMap();
183 $terms = $userGroup->getFullTerms();
184
185 foreach ($terms as $termId => $term) {
186 if (isset($termsPostMap[$termId]) === true) {
187 $map = $termsPostMap[$termId];
188
189 if ($objectType !== $this->generalObjectType) {
190 $map = array_filter(
191 $map,
192 function ($element) use ($objectType) {
193 return ($element === $objectType);
194 }
195 );
196 }
197
198 $posts += $map;
199 }
200 }
201 }
202
203 return $posts;
204 }
205 }
206