PluginProbe
User Access Manager / 2.3.4
User Access Manager v2.3.4
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.3.4, at src/ObjectMembership/PostMembershipHandler.php

127 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace UserAccessManager\ObjectMembership;
6
7 use Exception;
8 use UserAccessManager\Object\ObjectHandler;
9 use UserAccessManager\Object\ObjectMapHandler;
10 use UserAccessManager\UserGroup\AbstractUserGroup;
11 use UserAccessManager\UserGroup\AssignmentInformation;
12 use UserAccessManager\UserGroup\AssignmentInformationFactory;
13 use UserAccessManager\Wrapper\Wordpress;
14
15 class PostMembershipHandler extends ObjectMembershipWithMapHandler
16 {
17 protected ?string $generalObjectType = ObjectHandler::GENERAL_POST_OBJECT_TYPE;
18
19 public function __construct(
20 AssignmentInformationFactory $assignmentInformationFactory,
21 private Wordpress $wordpress,
22 private ObjectHandler $objectHandler,
23 private ObjectMapHandler $objectMapHandler
24 ) {
25 parent::__construct($assignmentInformationFactory);
26 }
27
28 public function getObjectName(int|string $objectId, string &$typeName = ''): int|string
29 {
30 $post = $this->objectHandler->getPost($objectId);
31
32 if ($post !== false) {
33 $postTypeObject = $this->wordpress->getPostTypeObject($post->post_type);
34 $typeName = ($postTypeObject !== null) ? $postTypeObject->labels->name : $typeName;
35 return $post->post_title;
36 }
37
38 return $objectId;
39 }
40
41 public function getHandledObjects(): array
42 {
43 $keys = array_keys($this->objectHandler->getPostTypes());
44 return array_merge(parent::getHandledObjects(), array_combine($keys, $keys));
45 }
46
47 protected function getMap(): array
48 {
49 return $this->objectMapHandler->getPostTreeMap();
50 }
51
52 /**
53 * @throws Exception
54 */
55 private function assignRecursiveMembershipByTerm(
56 AbstractUserGroup $userGroup,
57 int|string $objectId,
58 array &$recursiveMembership
59 ): void {
60 $postTermMap = $this->objectMapHandler->getPostTermMap();
61
62 if (isset($postTermMap[$objectId]) === true) {
63 foreach ($postTermMap[$objectId] as $termId => $type) {
64 if ($userGroup->isTermMember($termId, $rmAssignmentInformation) === true) {
65 $recursiveMembership[ObjectHandler::GENERAL_TERM_OBJECT_TYPE][$termId] = $rmAssignmentInformation;
66 }
67 }
68 }
69 }
70
71 /**
72 * @throws Exception
73 */
74 public function isMember(
75 AbstractUserGroup $userGroup,
76 bool $lockRecursive,
77 int|string $objectId,
78 ?AssignmentInformation &$assignmentInformation = null
79 ): bool {
80 $isMember = $this->getMembershipByMap($userGroup, $lockRecursive, $objectId, $assignmentInformation);
81
82 if ($lockRecursive === true) {
83 $recursiveMembership = ($assignmentInformation !== null) ?
84 $assignmentInformation->getRecursiveMembership() : [];
85
86 $this->assignRecursiveMembershipByTerm($userGroup, $objectId, $recursiveMembership);
87 $this->assignRecursiveMembership($assignmentInformation, $recursiveMembership);
88 $isMember = $isMember || count($recursiveMembership) > 0;
89 }
90
91 return $isMember;
92 }
93
94 /**
95 * @throws Exception
96 */
97 public function getFullObjects(AbstractUserGroup $userGroup, bool $lockRecursive, ?string $objectType = null): array
98 {
99 $objectType = ($objectType === null) ? $this->generalObjectType : $objectType;
100 $posts = $this->getFullObjectsByMap($userGroup, $lockRecursive, $objectType);
101
102 if ($lockRecursive === true) {
103 $termsPostMap = $this->objectMapHandler->getTermPostMap();
104 $terms = $userGroup->getFullTerms();
105
106 foreach ($terms as $termId => $term) {
107 if (isset($termsPostMap[$termId]) === true) {
108 $map = $termsPostMap[$termId];
109
110 if ($objectType !== $this->generalObjectType) {
111 $map = array_filter(
112 $map,
113 function ($element) use ($objectType) {
114 return ($element === $objectType);
115 }
116 );
117 }
118
119 $posts += $map;
120 }
121 }
122 }
123
124 return $posts;
125 }
126 }
127