PluginProbe
User Access Manager / 2.3.9
User Access Manager v2.3.9
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 / Controller / Backend / UserGroupController.php

UserGroupController.php in User Access Manager 2.3.9, at src/Controller/Backend/UserGroupController.php

254 lines 8.4 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\Controller\Backend;
6
7 use Exception;
8 use UserAccessManager\Config\WordpressConfig;
9 use UserAccessManager\Controller\Controller;
10 use UserAccessManager\Form\FormHelper;
11 use UserAccessManager\Object\ObjectHandler;
12 use UserAccessManager\UserGroup\UserGroup;
13 use UserAccessManager\UserGroup\UserGroupFactory;
14 use UserAccessManager\UserGroup\UserGroupHandler;
15 use UserAccessManager\UserGroup\UserGroupTypeException;
16 use UserAccessManager\Wrapper\Php;
17 use UserAccessManager\Wrapper\Wordpress;
18 use WP_Post_Type;
19 use WP_Taxonomy;
20
21 class UserGroupController extends Controller
22 {
23 use ControllerTabNavigationTrait;
24
25 public const INSERT_UPDATE_GROUP_NONCE = 'uamInsertUpdateGroup';
26 public const DELETE_GROUP_NONCE = 'uamDeleteGroup';
27 public const SET_DEFAULT_USER_GROUPS_NONCE = 'uamSetDefaultUserGroups';
28 public const GROUP_USER_GROUPS = 'user_groups';
29 public const GROUP_DEFAULT_USER_GROUPS = 'default_user_groups';
30 public const DEFAULT_USER_GROUPS_FORM_FIELD = 'default_user_groups';
31
32 protected ?string $template = 'AdminUserGroup.php';
33 private ?UserGroup $userGroup = null;
34
35 public function __construct(
36 Php $php,
37 Wordpress $wordpress,
38 WordpressConfig $wordpressConfig,
39 private UserGroupHandler $userGroupHandler,
40 private UserGroupFactory $userGroupFactory,
41 private FormHelper $formHelper
42 ) {
43 parent::__construct($php, $wordpress, $wordpressConfig);
44 }
45
46 public function getTabGroups(): array
47 {
48 return [
49 self::GROUP_USER_GROUPS => ['user_groups'],
50 self::GROUP_DEFAULT_USER_GROUPS => array_merge(
51 array_keys($this->wordpress->getPostTypes(['public' => true], 'objects')),
52 array_keys($this->wordpress->getTaxonomies(['public' => true], 'objects')),
53 [ObjectHandler::GENERAL_USER_OBJECT_TYPE]
54 )
55 ];
56 }
57
58 public function getGroupText(string $key): string
59 {
60 return $this->formHelper->getText($key);
61 }
62
63 public function getGroupSectionText(string $key): string
64 {
65 $objects = $this->wordpress->getPostTypes(['public' => true], 'objects')
66 + $this->wordpress->getTaxonomies(['public' => true], 'objects');
67
68 $objectName = $key;
69
70 if ($objectName === ObjectHandler::GENERAL_USER_OBJECT_TYPE) {
71 $objectName = TXT_UAM_USER;
72 } elseif (isset($objects[$key]) === true) {
73 $objectName = $objects[$key]->labels->name;
74
75 if ($objects[$key] instanceof WP_Post_Type) {
76 $objectName .= ' (' . TXT_UAM_POST_TYPE . ')';
77 } elseif ($objects[$key] instanceof WP_Taxonomy) {
78 $objectName .= ' (' . TXT_UAM_TAXONOMY_TYPE . ')';
79 }
80 }
81
82 return $objectName;
83 }
84
85 /**
86 * @throws UserGroupTypeException
87 */
88 public function getUserGroup(): UserGroup
89 {
90 if ($this->userGroup === null) {
91 $userGroupId = $this->getRequestParameter('userGroupId');
92 $this->userGroup = $this->userGroupFactory->createUserGroup($userGroupId);
93 }
94
95 return $this->userGroup;
96 }
97
98 public function getSortUrl(string $sort): string
99 {
100 $requestUrl = $this->getRequestUrl();
101 $requestUrl = preg_replace('/&amp;orderby[^&]*/i', '', $requestUrl);
102 $requestUrl = preg_replace('/&amp;order[^&]*/i', '', $requestUrl);
103 $divider = !str_contains($requestUrl, '?') ? '?' : '&amp;';
104 $order = (string) $this->getRequestParameter('order') === 'asc' ? 'desc' : 'asc';
105 return "$requestUrl{$divider}orderby=$sort&amp;order=$order";
106 }
107
108 /**
109 * @return UserGroup[]
110 * @throws UserGroupTypeException
111 */
112 public function getUserGroups(): array
113 {
114 $userGroups = $this->userGroupHandler->getUserGroups();
115
116 $sort = $this->getRequestParameter('orderby');
117
118 if ($sort !== null) {
119 $reverse = (string) $this->getRequestParameter('order') === 'desc';
120
121 uasort(
122 $userGroups,
123 function (UserGroup $userGroupOne, UserGroup $userGroupTwo) use ($sort, $reverse) {
124 $values = ['', ''];
125 $method = 'get' . ucfirst($sort);
126
127 if (method_exists($userGroupOne, $method) === true) {
128 $values = [(string) $userGroupOne->{$method}(), (string) $userGroupTwo->{$method}()];
129 $values = ($reverse === true) ? array_reverse($values) : $values;
130 }
131
132 return strnatcasecmp($values[0], $values[1]);
133 }
134 );
135 }
136
137 return $userGroups;
138 }
139
140 public function getRoleNames(): array
141 {
142 $roles = $this->wordpress->getRoles();
143 return $roles->role_names;
144 }
145
146 /**
147 * @throws UserGroupTypeException
148 * @throws Exception
149 */
150 public function insertUpdateUserGroupAction(): void
151 {
152 $this->verifyNonce(self::INSERT_UPDATE_GROUP_NONCE);
153
154 $userGroupId = $this->getRequestParameter('userGroupId');
155
156 $userGroup = $this->userGroupFactory->createUserGroup($userGroupId);
157
158 // Assign parameters
159 $groupName = (string) $this->getRequestParameter('userGroupName');
160
161 if (trim($groupName) === '') {
162 $this->setUpdateMessage(TXT_UAM_GROUP_NAME_ERROR);
163 return;
164 }
165
166 $userGroup->setName($groupName);
167
168 $userGroupDescription = $this->getRequestParameter('userGroupDescription');
169 $userGroup->setDescription($userGroupDescription);
170
171 $readAccess = $this->getRequestParameter('readAccess');
172 $userGroup->setReadAccess($readAccess);
173
174 $writeAccess = $this->getRequestParameter('writeAccess');
175 $userGroup->setWriteAccess($writeAccess);
176
177 $ipRange = $this->getRequestParameter('ipRange');
178 $userGroup->setIpRange($ipRange);
179
180 if ($userGroup->save() === true) {
181 $roles = $this->getRequestParameter('roles', []);
182
183 $userGroup->removeObject(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE);
184
185 foreach ($roles as $role) {
186 $userGroup->addObject(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE, htmlentities($role));
187 }
188
189 if ($userGroupId === null) {
190 $this->setUpdateMessage(TXT_UAM_GROUP_ADDED);
191 } else {
192 $this->setUpdateMessage(TXT_UAM_USER_GROUP_EDIT_SUCCESS);
193 }
194
195 $this->userGroupHandler->addUserGroup($userGroup);
196 }
197 }
198
199 /**
200 * @throws UserGroupTypeException
201 */
202 public function deleteUserGroupAction(): void
203 {
204 $this->verifyNonce(self::DELETE_GROUP_NONCE);
205 $userGroups = $this->getRequestParameter('delete', []);
206
207 foreach ($userGroups as $id) {
208 $this->userGroupHandler->deleteUserGroup($id);
209 }
210
211 $this->setUpdateMessage(TXT_UAM_DELETE_GROUP);
212 }
213
214 private function isDefaultTypeAdd(
215 array $defaultUserGroups,
216 string $userGroupId,
217 string &$fromTime = null,
218 string &$toTime = null
219 ): bool {
220 $userGroupInfo = isset($defaultUserGroups[$userGroupId]) === true ? $defaultUserGroups[$userGroupId] : [];
221
222 if (isset($userGroupInfo['id']) === true && (string) $userGroupInfo['id'] === $userGroupId) {
223 $fromTime = empty($userGroupInfo['fromTime']) === false ? $userGroupInfo['fromTime'] : null;
224 $toTime = empty($userGroupInfo['toTime']) === false ? $userGroupInfo['toTime'] : null;
225 return true;
226 }
227
228 return false;
229 }
230
231 /**
232 * @throws UserGroupTypeException
233 * @throws Exception
234 */
235 public function setDefaultUserGroupsAction(): void
236 {
237 $this->verifyNonce(self::SET_DEFAULT_USER_GROUPS_NONCE);
238 $objectType = $this->getCurrentTabGroupSection();
239 $defaultUserGroups = $this->getRequestParameter(self::DEFAULT_USER_GROUPS_FORM_FIELD, []);
240 $userGroups = $this->getUserGroups();
241
242 foreach ($userGroups as $userGroup) {
243 $userGroupId = $userGroup->getId();
244 $userGroup->removeDefaultType($objectType);
245
246 if ($this->isDefaultTypeAdd($defaultUserGroups, $userGroupId, $fromTime, $toTime) === true) {
247 $userGroup->addDefaultType($objectType, $fromTime, $toTime);
248 }
249 }
250
251 $this->setUpdateMessage(TXT_UAM_SET_DEFAULT_USER_GROUP_SUCCESS);
252 }
253 }
254