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

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

338 lines 10.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * UserGroupController.php
4 *
5 * The UserGroupController 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\Controller\Backend;
16
17 use UserAccessManager\Config\WordpressConfig;
18 use UserAccessManager\Controller\Controller;
19 use UserAccessManager\Form\FormHelper;
20 use UserAccessManager\Object\ObjectHandler;
21 use UserAccessManager\UserGroup\UserGroup;
22 use UserAccessManager\UserGroup\UserGroupFactory;
23 use UserAccessManager\UserGroup\UserGroupHandler;
24 use UserAccessManager\Wrapper\Php;
25 use UserAccessManager\Wrapper\Wordpress;
26
27 /**
28 * Class UserGroupController
29 *
30 * @package UserAccessManager\Controller
31 */
32 class UserGroupController extends Controller
33 {
34 use ControllerTabNavigationTrait;
35
36 const INSERT_UPDATE_GROUP_NONCE = 'uamInsertUpdateGroup';
37 const DELETE_GROUP_NONCE = 'uamDeleteGroup';
38 const SET_DEFAULT_USER_GROUPS_NONCE = 'uamSetDefaultUserGroups';
39 const GROUP_USER_GROUPS = 'user_groups';
40 const GROUP_DEFAULT_USER_GROUPS = 'default_user_groups';
41 const DEFAULT_USER_GROUPS_FORM_FIELD = 'default_user_groups';
42
43 /**
44 * @var string
45 */
46 protected $template = 'AdminUserGroup.php';
47
48 /**
49 * @var UserGroupHandler
50 */
51 private $userGroupHandler;
52
53 /**
54 * @var UserGroupFactory
55 */
56 private $userGroupFactory;
57
58 /**
59 * @var FormHelper
60 */
61 private $formHelper;
62
63 /**
64 * @var \UserAccessManager\UserGroup\UserGroup
65 */
66 private $userGroup = null;
67
68 /**
69 * UserGroupController constructor.
70 *
71 * @param Php $php
72 * @param Wordpress $wordpress
73 * @param WordpressConfig $wordpressConfig
74 * @param UserGroupHandler $userGroupHandler
75 * @param UserGroupFactory $userGroupFactory
76 * @param FormHelper $formHelper
77 */
78 public function __construct(
79 Php $php,
80 Wordpress $wordpress,
81 WordpressConfig $wordpressConfig,
82 UserGroupHandler $userGroupHandler,
83 UserGroupFactory $userGroupFactory,
84 FormHelper $formHelper
85 ) {
86 parent::__construct($php, $wordpress, $wordpressConfig);
87 $this->userGroupHandler = $userGroupHandler;
88 $this->userGroupFactory = $userGroupFactory;
89 $this->formHelper = $formHelper;
90 }
91
92 /**
93 * Returns the tab groups.
94 *
95 * @return array
96 */
97 public function getTabGroups()
98 {
99 return [
100 self::GROUP_USER_GROUPS => ['user_groups'],
101 self::GROUP_DEFAULT_USER_GROUPS => array_merge(
102 array_keys($this->wordpress->getPostTypes(['public' => true], 'objects')),
103 array_keys($this->wordpress->getTaxonomies(['public' => true], 'objects')),
104 [ObjectHandler::GENERAL_USER_OBJECT_TYPE]
105 )
106 ];
107 }
108
109 /**
110 * Returns the translated tag group name by the given key.
111 *
112 * @param string $key
113 *
114 * @return string
115 */
116 public function getGroupText($key)
117 {
118 return $this->formHelper->getText($key);
119 }
120
121 /**
122 * Returns the translated tag group section name by the given key.
123 *
124 * @param string $key
125 *
126 * @return string
127 */
128 public function getGroupSectionText($key)
129 {
130 $objects = $this->wordpress->getPostTypes(['public' => true], 'objects')
131 + $this->wordpress->getTaxonomies(['public' => true], 'objects');
132
133 $objectName = $key;
134
135 if ($objectName === ObjectHandler::GENERAL_USER_OBJECT_TYPE) {
136 $objectName = TXT_UAM_USER;
137 } elseif (isset($objects[$key]) === true) {
138 $objectName = $objects[$key]->labels->name;
139
140 if ($objects[$key] instanceof \WP_Post_Type) {
141 $objectName .= ' ('.TXT_UAM_POST_TYPE.')';
142 } elseif ($objects[$key] instanceof \WP_Taxonomy) {
143 $objectName .= ' ('.TXT_UAM_TAXONOMY_TYPE.')';
144 }
145 }
146
147 return $objectName;
148 }
149
150 /**
151 * Returns the a user group object.
152 *
153 * @return \UserAccessManager\UserGroup\UserGroup
154 */
155 public function getUserGroup()
156 {
157 if ($this->userGroup === null) {
158 $userGroupId = $this->getRequestParameter('userGroupId');
159 $this->userGroup = $this->userGroupFactory->createUserGroup($userGroupId);
160 }
161
162 return $this->userGroup;
163 }
164
165 /**
166 * Returns the sort url.
167 *
168 * @param string $sort
169 *
170 * @return string
171 */
172 public function getSortUrl($sort)
173 {
174 $requestUrl = $this->getRequestUrl();
175 $requestUrl = preg_replace('/&amp;orderby[^&]*/i', '', $requestUrl);
176 $requestUrl = preg_replace('/&amp;order[^&]*/i', '', $requestUrl);
177 $divider = strpos($requestUrl, '?') === false ? '?' : '&amp;';
178 $order = (string) $this->getRequestParameter('order') === 'asc' ? 'desc' : 'asc';
179 return "{$requestUrl}{$divider}orderby={$sort}&amp;order={$order}";
180 }
181
182 /**
183 * Returns all user groups.
184 *
185 * @return \UserAccessManager\UserGroup\UserGroup[]
186 */
187 public function getUserGroups()
188 {
189 $userGroups = $this->userGroupHandler->getUserGroups();
190
191 $sort = $this->getRequestParameter('orderby');
192
193 if ($sort !== null) {
194 $reverse = (string) $this->getRequestParameter('order') === 'desc' ? true : false;
195
196 uasort(
197 $userGroups,
198 function (UserGroup $userGroupOne, UserGroup $userGroupTwo) use ($sort, $reverse) {
199 $values = ['', ''];
200 $method = 'get'.ucfirst($sort);
201
202 if (method_exists($userGroupOne, $method) === true) {
203 $values = [(string)$userGroupOne->{$method}(), (string)$userGroupTwo->{$method}()];
204 $values = ($reverse === true) ? array_reverse($values) : $values;
205 }
206
207 return strnatcasecmp($values[0], $values[1]);
208 }
209 );
210 }
211
212 return $userGroups;
213 }
214
215 /**
216 * Returns the wordpress role names.
217 *
218 * @return array
219 */
220 public function getRoleNames()
221 {
222 $roles = $this->wordpress->getRoles();
223 return $roles->role_names;
224 }
225
226 /**
227 * Action to insert or update a user group.
228 */
229 public function insertUpdateUserGroupAction()
230 {
231 $this->verifyNonce(self::INSERT_UPDATE_GROUP_NONCE);
232
233 $userGroupId = $this->getRequestParameter('userGroupId');
234
235 $userGroup = $this->userGroupFactory->createUserGroup($userGroupId);
236
237 // Assign parameters
238 $groupName = $this->getRequestParameter('userGroupName');
239
240 if (trim($groupName) === '') {
241 $this->setUpdateMessage(TXT_UAM_GROUP_NAME_ERROR);
242 return;
243 }
244
245 $userGroup->setName($groupName);
246
247 $userGroupDescription = $this->getRequestParameter('userGroupDescription');
248 $userGroup->setDescription($userGroupDescription);
249
250 $readAccess = $this->getRequestParameter('readAccess');
251 $userGroup->setReadAccess($readAccess);
252
253 $writeAccess = $this->getRequestParameter('writeAccess');
254 $userGroup->setWriteAccess($writeAccess);
255
256 $ipRange = $this->getRequestParameter('ipRange');
257 $userGroup->setIpRange($ipRange);
258
259 if ($userGroup->save() === true) {
260 $roles = $this->getRequestParameter('roles', []);
261
262 $userGroup->removeObject(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE);
263
264 foreach ($roles as $role) {
265 $userGroup->addObject(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE, htmlentities($role));
266 }
267
268 if ($userGroupId === null) {
269 $this->setUpdateMessage(TXT_UAM_GROUP_ADDED);
270 } else {
271 $this->setUpdateMessage(TXT_UAM_USER_GROUP_EDIT_SUCCESS);
272 }
273
274 $this->userGroupHandler->addUserGroup($userGroup);
275 }
276 }
277
278 /**
279 * Action to delete user groups.
280 */
281 public function deleteUserGroupAction()
282 {
283 $this->verifyNonce(self::DELETE_GROUP_NONCE);
284 $userGroups = $this->getRequestParameter('delete', []);
285
286 foreach ($userGroups as $id) {
287 $this->userGroupHandler->deleteUserGroup($id);
288 }
289
290 $this->setUpdateMessage(TXT_UAM_DELETE_GROUP);
291 }
292
293 /**
294 * Checks if the default user group type should be added.
295 *
296 * @param array $defaultUserGroups
297 * @param string $userGroupId
298 * @param null|string $fromTime
299 * @param null|string $toTime
300 *
301 * @return bool
302 */
303 private function isDefaultTypeAdd(array $defaultUserGroups, $userGroupId, &$fromTime = null, &$toTime = null)
304 {
305 $userGroupInfo = isset($defaultUserGroups[$userGroupId]) === true ? $defaultUserGroups[$userGroupId] : [];
306
307 if (isset($userGroupInfo['id']) === true && (string)$userGroupInfo['id'] === (string)$userGroupId) {
308 $fromTime = empty($userGroupInfo['fromTime']) === false ? $userGroupInfo['fromTime'] : null;
309 $toTime = empty($userGroupInfo['toTime']) === false ? $userGroupInfo['toTime'] : null;
310 return true;
311 }
312
313 return false;
314 }
315
316 /**
317 * Action to set default user groups.
318 */
319 public function setDefaultUserGroupsAction()
320 {
321 $this->verifyNonce(self::SET_DEFAULT_USER_GROUPS_NONCE);
322 $objectType = $this->getCurrentTabGroupSection();
323 $defaultUserGroups = $this->getRequestParameter(self::DEFAULT_USER_GROUPS_FORM_FIELD, []);
324 $userGroups = $this->getUserGroups();
325
326 foreach ($userGroups as $userGroup) {
327 $userGroupId = $userGroup->getId();
328 $userGroup->removeDefaultType($objectType);
329
330 if ($this->isDefaultTypeAdd($defaultUserGroups, $userGroupId, $fromTime, $toTime) === true) {
331 $userGroup->addDefaultType($objectType, $fromTime, $toTime);
332 }
333 }
334
335 $this->setUpdateMessage(TXT_UAM_SET_DEFAULT_USER_GROUP_SUCCESS);
336 }
337 }
338