PluginProbe
BuddyPress / trunk
BuddyPress vtrunk
11.6.2 12.7.2 14.5.2 11.6.0 12.7.0 2.5.0-rc1 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.0-beta1 2.6.0-rc1 2.6.1 2.6.1.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.0-beta1 2.7.0-rc1 2.7.0-rc2 2.7.1 2.7.2 All 274 releases
buddypress / cli / src / group-member.php

group-member.php in BuddyPress trunk, at cli/src/group-member.php

423 lines 11.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Buddypress\CLI\Command;
4
5 use WP_CLI;
6
7 /**
8 * Manage BuddyPress group members.
9 *
10 * ## EXAMPLES
11 *
12 * # Add a user to a group as a member.
13 * $ wp bp group member add --group-id=3 --user-id=10
14 * Success: Added user #3 to group #3 as member.
15 *
16 * # Add a user to a group as a mod.
17 * $ wp bp group member create --group-id=bar --user-id=20 --role=mod
18 * Success: Added user #20 to group #45 as mod.
19 *
20 * @since 1.5.0
21 */
22 class Group_Member extends BuddyPressCommand {
23
24 /**
25 * Group ID Object Key
26 *
27 * @var string
28 */
29 protected $obj_id_key = 'group_id';
30
31 /**
32 * Group Object Type
33 *
34 * @var string
35 */
36 protected $obj_type = 'group';
37
38 /**
39 * Add a member to a group.
40 *
41 * ## OPTIONS
42 *
43 * --group-id=<group>
44 * : Identifier for the group. Accepts either a slug or a numeric ID.
45 *
46 * --user-id=<user>
47 * : Identifier for the user. Accepts either a user_login or a numeric ID.
48 *
49 * [--role=<role>]
50 * : Group member role (member, mod, admin).
51 * ---
52 * default: member
53 * options:
54 * - member
55 * - mod
56 * - admin
57 * ---
58 *
59 * ## EXAMPLES
60 *
61 * # Add a user to a group as a member.
62 * $ wp bp group member add --group-id=3 --user-id=10
63 * Success: Added user #3 to group #3 as member.
64 *
65 * # Add a user to a group as a moderator.
66 * $ wp bp group member create --group-id=bar --user-id=20 --role=mod
67 * Success: Added user #20 to group #45 as mod.
68 *
69 * @alias add
70 */
71 public function create( $args, $assoc_args ) {
72 $group_id = $this->get_group_id_from_identifier( $assoc_args['group-id'] );
73 $user = $this->get_user_id_from_identifier( $assoc_args['user-id'] );
74 $role = $assoc_args['role'];
75 $joined = groups_join_group( $group_id, $user->ID );
76
77 if ( ! $joined ) {
78 WP_CLI::error( 'Could not add user to the group.' );
79 }
80
81 if ( 'member' !== $role ) {
82 $group_member = new \BP_Groups_Member( $user->ID, $group_id );
83 $group_member->promote( $role );
84 }
85
86 WP_CLI::success(
87 sprintf(
88 'Added user #%d to group #%d as %s.',
89 $user->ID,
90 $group_id,
91 $role
92 )
93 );
94 }
95
96 /**
97 * Remove a member from a group.
98 *
99 * ## OPTIONS
100 *
101 * --group-id=<group>
102 * : Identifier for the group. Accepts either a slug or a numeric ID.
103 *
104 * --user-id=<user>
105 * : Identifier for the user. Accepts either a user_login or a numeric ID.
106 *
107 * ## EXAMPLES
108 *
109 * # Remove a member from a group.
110 * $ wp bp group member remove --group-id=3 --user-id=10
111 * Success: Member #10 removed from the group #3.
112 *
113 * # Remove a member from a group.
114 * $ wp bp group member delete --group-id=foo --user-id=admin
115 * Success: Member #545 removed from the group #12.
116 *
117 * @alias remove
118 * @alias trash
119 */
120 public function delete( $args, $assoc_args ) {
121 $group_id = $this->get_group_id_from_identifier( $assoc_args['group-id'] );
122 $user = $this->get_user_id_from_identifier( $assoc_args['user-id'] );
123 $group_member = new \BP_Groups_Member( $user->ID, $group_id );
124
125 // Check if the user is the only admin of the group.
126 if ( (bool) $group_member->is_admin ) {
127 $group_admins = groups_get_group_admins( $group_id );
128 if ( 1 === count( $group_admins ) ) {
129 WP_CLI::error( 'Cannot remove the only admin of the group.' );
130 }
131 }
132
133 // True on success.
134 if ( $group_member->remove() ) {
135 WP_CLI::success( sprintf( 'Member #%d removed from the group #%d.', $user->ID, $group_id ) );
136 } else {
137 WP_CLI::error( 'Could not remove member from the group.' );
138 }
139 }
140
141 /**
142 * Get a list of group memberships.
143 *
144 * This command can be used to fetch a list of a user's groups (using the --user-id
145 * parameter) or a group's members (using the --group-id flag).
146 *
147 * ## OPTIONS
148 *
149 * <group-id>
150 * : Identifier for the group. Can be a numeric ID or the group slug.
151 *
152 * [--fields=<fields>]
153 * : Limit the output to specific signup fields.
154 *
155 * [--<field>=<value>]
156 * : One or more parameters to pass. See groups_get_group_members()
157 *
158 * [--role=<role>]
159 * : Limit the output to members with a specific role.
160 * ---
161 * default: members
162 * options:
163 * - members
164 * - mod
165 * - admin
166 * - banned
167 * ---
168 *
169 * [--count=<number>]
170 * : How many members to list.
171 * ---
172 * default: 50
173 * ---
174 *
175 * [--format=<format>]
176 * : Render output in a particular format.
177 * ---
178 * default: table
179 * options:
180 * - table
181 * - csv
182 * - ids
183 * - json
184 * - count
185 * - yaml
186 * ---
187 *
188 * ## AVAILABLE FIELDS
189 *
190 * These fields will be displayed by default for each group member:
191 *
192 * * id
193 * * user_login
194 * * fullname
195 * * date_modified
196 * * role
197 *
198 * ## EXAMPLE
199 *
200 * # Get a list of group members.
201 * $ wp bp group member list 3
202 * +---------+------------+----------+---------------------+-------+
203 * | id | user_login | fullname | date_modified | role |
204 * +---------+------------+----------+---------------------+-------+
205 * | 1 | user | User | 2022-07-04 02:12:02 | admin |
206 * +---------+------------+----------+---------------------+-------+
207 *
208 * # Get a list of group members and get the count.
209 * $ wp bp group member list 65465 --format=count
210 * 100
211 *
212 * @subcommand list
213 */
214 public function list_( $args, $assoc_args ) {
215 $group_id = $this->get_group_id_from_identifier( $args[0] );
216
217 // Get our members.
218 $members_query = groups_get_group_members(
219 [
220 'per_page' => $assoc_args['count'],
221 'group_id' => $group_id,
222 'exclude_admins_mods' => false,
223 'group_role' => [ $assoc_args['role'] ],
224 ]
225 );
226
227 $members = $members_query['members'];
228
229 if ( empty( $members ) ) {
230 WP_CLI::error( 'No group members found.' );
231 }
232
233 // Make 'role' human-readable.
234 foreach ( $members as &$member ) {
235 $role = 'member';
236 if ( $member->is_mod ) {
237 $role = 'mod';
238 } elseif ( $member->is_admin ) {
239 $role = 'admin';
240 }
241
242 $member->role = $role;
243 }
244
245 if ( empty( $assoc_args['fields'] ) ) {
246 $assoc_args['fields'] = [
247 'id',
248 'user_login',
249 'fullname',
250 'date_modified',
251 'role',
252 ];
253 }
254
255 $formatter = $this->get_formatter( $assoc_args );
256 $formatter->display_items( 'ids' === $formatter->format ? wp_list_pluck( $members, 'user_id' ) : $members );
257 }
258
259 /**
260 * Promote a member to a new status within a group.
261 *
262 * ## OPTIONS
263 *
264 * --group-id=<group>
265 * : Identifier for the group. Accepts either a slug or a numeric ID.
266 *
267 * --user-id=<user>
268 * : Identifier for the user. Accepts either a user_login or a numeric ID.
269 *
270 * --role=<role>
271 * : Group role to promote the member.
272 * ---
273 * options:
274 * - mod
275 * - admin
276 * ---
277 *
278 * ## EXAMPLES
279 *
280 * # Promote a member to a new role.
281 * $ wp bp group member promote --group-id=3 --user-id=10 --role=admin
282 * Success: Member promoted to new role successfully.
283 *
284 * # Promote a member to a new role.
285 * $ wp bp group member promote --group-id=foo --user-id=admin --role=mod
286 * Success: Member promoted to new role successfully.
287 */
288 public function promote( $args, $assoc_args ) {
289 $group_id = $this->get_group_id_from_identifier( $assoc_args['group-id'] );
290 $user = $this->get_user_id_from_identifier( $assoc_args['user-id'] );
291 $group_member = new \BP_Groups_Member( $user->ID, $group_id );
292
293 if ( $group_member->promote( $assoc_args['role'] ) ) {
294 WP_CLI::success( 'Member promoted to new role successfully.' );
295 } else {
296 WP_CLI::error( 'Could not promote the member.' );
297 }
298 }
299
300 /**
301 * Demote user to the 'member' status.
302 *
303 * ## OPTIONS
304 *
305 * --group-id=<group>
306 * : Identifier for the group. Accepts either a slug or a numeric ID.
307 *
308 * --user-id=<user>
309 * : Identifier for the user. Accepts either a user_login or a numeric ID.
310 *
311 * ## EXAMPLES
312 *
313 * # Demote a user to the "member" status using numeric IDs.
314 * $ wp bp group member demote --group-id=3 --user-id=10
315 * Success: User demoted to the "member" status.
316 *
317 * # Demote a user to the "member" status using slugs.
318 * $ wp bp group member demote --group-id=foo --user-id=admin
319 * Success: User demoted to the "member" status.
320 *
321 * # Demote a user not part of the group.
322 * $ wp bp group member demote --group-id=foo --user-id=admin
323 * Error: User is not a member of the group.
324 */
325 public function demote( $args, $assoc_args ) {
326 $group_id = $this->get_group_id_from_identifier( $assoc_args['group-id'] );
327 $user = $this->get_user_id_from_identifier( $assoc_args['user-id'] );
328
329 // Check if the user is a member of the group.
330 if ( ! groups_is_user_member( $user->ID, $group_id ) ) {
331 WP_CLI::error( 'User is not a member of the group.' );
332 }
333
334 $group_member = new \BP_Groups_Member( $user->ID, $group_id );
335
336 // Check if the user is the only admin of the group.
337 if ( (bool) $group_member->is_admin ) {
338 $group_admins = groups_get_group_admins( $group_id );
339 if ( 1 === count( $group_admins ) ) {
340 WP_CLI::error( 'Cannot demote the only admin of the group.' );
341 }
342 }
343
344 if ( $group_member->demote() ) {
345 WP_CLI::success( 'User demoted to the "member" status.' );
346 } else {
347 WP_CLI::error( 'Could not demote the member.' );
348 }
349 }
350
351 /**
352 * Ban a member from a group.
353 *
354 * ## OPTIONS
355 *
356 * --group-id=<group>
357 * : Identifier for the group. Accepts either a slug or a numeric ID.
358 *
359 * --user-id=<user>
360 * : Identifier for the user. Accepts either a user_login or a numeric ID.
361 *
362 * ## EXAMPLES
363 *
364 * # Ban a member from a group.
365 * $ wp bp group member ban --group-id=3 --user-id=10
366 * Success: Member banned from the group.
367 *
368 * # Ban a member from a group.
369 * $ wp bp group member ban --group-id=foo --user-id=admin
370 * Success: Member banned from the group.
371 */
372 public function ban( $args, $assoc_args ) {
373 $group_id = $this->get_group_id_from_identifier( $assoc_args['group-id'] );
374 $user = $this->get_user_id_from_identifier( $assoc_args['user-id'] );
375
376 // Check if the user is a member of the group.
377 if ( ! groups_is_user_member( $user->ID, $group_id ) ) {
378 WP_CLI::error( 'User is not a member of the group.' );
379 }
380
381 $group_member = new \BP_Groups_Member( $user->ID, $group_id );
382
383 if ( $group_member->ban() ) {
384 WP_CLI::success( 'Member banned from the group.' );
385 } else {
386 WP_CLI::error( 'Could not ban the member.' );
387 }
388 }
389
390 /**
391 * Unban a member from a group.
392 *
393 * ## OPTIONS
394 *
395 * --group-id=<group>
396 * : Identifier for the group. Accepts either a slug or a numeric ID.
397 *
398 * --user-id=<user>
399 * : Identifier for the user. Accepts either a user_login or a numeric ID.
400 *
401 * ## EXAMPLES
402 *
403 * # Unban a member from a group.
404 * $ wp bp group member unban --group-id=3 --user-id=10
405 * Success: Member unbanned from the group.
406 *
407 * # Unban a member from a group.
408 * $ wp bp group member unban --group-id=foo --user-id=admin
409 * Success: Member unbanned from the group.
410 */
411 public function unban( $args, $assoc_args ) {
412 $group_id = $this->get_group_id_from_identifier( $assoc_args['group-id'] );
413 $user = $this->get_user_id_from_identifier( $assoc_args['user-id'] );
414 $member = new \BP_Groups_Member( $user->ID, $group_id );
415
416 if ( $member->unban() ) {
417 WP_CLI::success( 'Member unbanned from the group.' );
418 } else {
419 WP_CLI::error( 'Could not unban the member.' );
420 }
421 }
422 }
423