PluginProbe
User Access Manager / 2.0.0
User Access Manager v2.0.0
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 / UserAccessManager / Command / GroupCommand.php

GroupCommand.php in User Access Manager 2.0.0, at src/UserAccessManager/Command/GroupCommand.php

277 lines 7.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * GroupCommand.php
4 *
5 * The GroupCommand class file.
6 *
7 * PHP versions 5
8 *
9 * @author Alexander Schneider <alexanderschneider85@gmail.com>
10 * @author Nils Woetzel nils.woetzel@h-its.org
11 * @copyright 2008-2017 Alexander Schneider
12 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2
13 * @version SVN: $id$
14 * @link http://wordpress.org/extend/plugins/user-access-manager/
15 */
16 namespace UserAccessManager\Command;
17
18 use UserAccessManager\AccessHandler\AccessHandler;
19 use UserAccessManager\ObjectHandler\ObjectHandler;
20 use UserAccessManager\UserGroup\UserGroupFactory;
21 use UserAccessManager\Wrapper\WordpressCli;
22 use WP_CLI\CommandWithDBObject;
23
24 /**
25 * Class GroupCommand
26 *
27 * @package UserAccessManager\Command
28 */
29 class GroupCommand extends CommandWithDBObject
30 {
31 const FORMATTER_PREFIX = 'uam_user_groups';
32
33 /**
34 * @var array
35 */
36 private static $allowedAccessValues = ['group', 'all'];
37
38 /**
39 * @var WordpressCli
40 */
41 private $wordpressCli;
42
43 /**
44 * @var AccessHandler
45 */
46 private $accessHandler;
47
48 /**
49 * @var UserGroupFactory
50 */
51 private $userGroupFactory;
52
53 /**
54 * ObjectCommand constructor.
55 *
56 * @param WordpressCli $wordpressCli
57 * @param AccessHandler $accessHandler
58 * @param UserGroupFactory $userGroupFactory
59 */
60 public function __construct(
61 WordpressCli $wordpressCli,
62 AccessHandler $accessHandler,
63 UserGroupFactory $userGroupFactory
64 ) {
65 $this->wordpressCli = $wordpressCli;
66 $this->accessHandler = $accessHandler;
67 $this->userGroupFactory = $userGroupFactory;
68 }
69
70 /**
71 * Returns the formatter
72 *
73 * @param $assocArguments
74 *
75 * @return \WP_CLI\Formatter
76 */
77 private function getFormatter(&$assocArguments)
78 {
79 return $this->wordpressCli->createFormatter(
80 $assocArguments,
81 [
82 'ID',
83 'group_name',
84 'group_desc',
85 'read_access',
86 'write_access',
87 'roles',
88 'ip_range',
89 ],
90 self::FORMATTER_PREFIX
91 );
92 }
93
94 /**
95 * list groups
96 *
97 * ## OPTIONS
98 *
99 * [--format=<format>]
100 * : Accepted values: table, csv, json, count, ids. Default: table
101 *
102 * ## EXAMPLES
103 *
104 * wp uam groups list
105 *
106 * @subcommand ls
107 *
108 * @param array $arguments
109 * @param array $assocArguments
110 */
111 public function ls(array $arguments, array $assocArguments)
112 {
113 if (count($arguments) > 0) {
114 $this->wordpressCli->error('No arguments excepted. Please use the format option.');
115 return;
116 }
117
118 $userGroups = $this->accessHandler->getUserGroups();
119
120 if (count($userGroups) <= 0) {
121 $this->wordpressCli->error('No groups defined yet!');
122 return;
123 }
124
125 $groups = [];
126
127 foreach ($userGroups as $userGroup) {
128 $groups[$userGroup->getId()] = [
129 'ID' => $userGroup->getId(),
130 'group_name' => $userGroup->getName(),
131 'group_desc' => $userGroup->getDescription(),
132 'read_access' => $userGroup->getReadAccess(),
133 'write_access' => $userGroup->getWriteAccess(),
134 'roles' => implode(
135 ',',
136 array_keys($userGroup->getAssignedObjectsByType(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE))
137 ),
138 'ip_range' => $userGroup->getIpRange() !== null ? $userGroup->getIpRange(true) : ''
139 ];
140 }
141
142 $formatter = $this->getFormatter($assocArguments);
143 $formatter->display_items($groups);
144 }
145
146 /**
147 * delete groups
148 *
149 * ## OPTIONS
150 * <group_id>
151 * : id of the group(s) to delete; accepts unlimited ids
152 *
153 * ## EXAMPLES
154 *
155 * wp uam groups del 3 5
156 *
157 * @subcommand del
158 *
159 * @param array $arguments
160 */
161 public function del(array $arguments)
162 {
163 if (count($arguments) < 1) {
164 $this->wordpressCli->error('Expected: wp uam groups del \<id\> ...');
165 return;
166 }
167
168 foreach ($arguments as $userGroupId) {
169 if ($this->accessHandler->deleteUserGroup($userGroupId) === true) {
170 $this->wordpressCli->success("Successfully deleted group with id '{$userGroupId}'.");
171 } else {
172 $this->wordpressCli->error("Group id '{$userGroupId}' doesn't exists.");
173 }
174 }
175 }
176
177 /**
178 * add group
179 *
180 * ## OPTIONS
181 * <group_name>
182 * : the name of the new group
183 *
184 * [--porcelain]
185 * : Output just the new post id.
186 *
187 * [--roles=<list>]
188 * : comma separated list of group associated roles
189 *
190 * [--<field>=<value>]
191 * : Associative args for new UamUserGroup object
192 * allowed fields and values are:
193 * desc="",
194 * read_access={group,all*},
195 * write_access={group,all*},
196 * ip_range="192.168.0.1-192.168.0.10;192.168.0.20-192.168.0.30"
197 *
198 * *=default
199 *
200 * ## EXAMPLES
201 *
202 * wp uam groups add fighters --read_access=all
203 *
204 * @param array $arguments
205 * @param array $assocArguments
206 */
207 public function add(array $arguments, array $assocArguments)
208 {
209 if (isset($arguments[0]) === false) {
210 $this->wordpressCli->error("Please provide a group name.");
211 return;
212 }
213
214 $groupName = $arguments[0];
215 $userGroups = $this->accessHandler->getUserGroups();
216
217 foreach ($userGroups as $userGroup) {
218 if ($userGroup->getName() === $groupName) {
219 $this->wordpressCli->error(
220 "Group with the same name '{$groupName}' already exists: {$userGroup->getId()}"
221 );
222 return;
223 }
224 }
225
226 $groupDescription = (isset($assocArguments['desc']) === true) ? $assocArguments['desc'] : '';
227 $ipRange = (isset($assocArguments['ip_range']) === true) ? $assocArguments['ip_range'] : '';
228 $readAccess = (isset($assocArguments['read_access']) === true) ? $assocArguments['read_access'] : '';
229 $writeAccess = (isset($assocArguments['write_access']) === true) ? $assocArguments['write_access'] : '';
230 $porcelain = isset($assocArguments['porcelain']);
231
232 if (in_array($readAccess, self::$allowedAccessValues) === false) {
233 if ($porcelain === true) {
234 $this->wordpressCli->line('setting read_access to '.self::$allowedAccessValues[0]);
235 }
236
237 $readAccess = self::$allowedAccessValues[0];
238 }
239
240 if (in_array($writeAccess, self::$allowedAccessValues) === false) {
241 if ($porcelain === true) {
242 $this->wordpressCli->line('setting write_access to '.self::$allowedAccessValues[0]);
243 }
244
245 $writeAccess = self::$allowedAccessValues[0];
246 }
247
248 $userGroup = $this->userGroupFactory->createUserGroup();
249 $userGroup->setName($groupName);
250 $userGroup->setDescription($groupDescription);
251 $userGroup->setIpRange($ipRange);
252 $userGroup->setReadAccess($readAccess);
253 $userGroup->setWriteAccess($writeAccess);
254
255 // add roles
256 if (isset($assocArguments['roles']) === true) {
257 $roles = explode(',', $assocArguments['roles']);
258
259 $userGroup->removeObject(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE);
260
261 foreach ($roles as $role) {
262 $userGroup->addObject(ObjectHandler::GENERAL_ROLE_OBJECT_TYPE, trim($role));
263 }
264 }
265
266 $userGroup->save();
267
268 $this->accessHandler->addUserGroup($userGroup);
269
270 if ($porcelain === true) {
271 $this->wordpressCli->line($userGroup->getId());
272 } else {
273 $this->wordpressCli->success("Added new group '{$groupName}' with id {$userGroup->getId()}.");
274 }
275 }
276 }
277