@@ -79,7 +79,8 @@ public function create( $args, $assoc_args ) {
7979 }
8080
8181 if ( 'member ' !== $ role ) {
82- groups_promote_member ( $ user ->ID , $ group_id , $ role );
82+ $ group_member = new \BP_Groups_Member ( $ user ->ID , $ group_id );
83+ $ group_member ->promote ( $ role );
8384 }
8485
8586 WP_CLI ::success (
@@ -117,12 +118,20 @@ public function create( $args, $assoc_args ) {
117118 * @alias trash
118119 */
119120 public function delete ( $ args , $ assoc_args ) {
120- $ group_id = $ this ->get_group_id_from_identifier ( $ assoc_args ['group-id ' ] );
121- $ user = $ this ->get_user_id_from_identifier ( $ assoc_args ['user-id ' ] );
122- $ member = new \BP_Groups_Member ( $ user ->ID , $ group_id );
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+ }
123132
124133 // True on success.
125- if ( $ member ->remove () ) {
134+ if ( $ group_member ->remove () ) {
126135 WP_CLI ::success ( sprintf ( 'Member #%d removed from the group #%d. ' , $ user ->ID , $ group_id ) );
127136 } else {
128137 WP_CLI ::error ( 'Could not remove member from the group. ' );
@@ -217,6 +226,10 @@ public function list_( $args, $assoc_args ) {
217226
218227 $ members = $ members_query ['members ' ];
219228
229+ if ( empty ( $ members ) ) {
230+ WP_CLI ::error ( 'No group members found. ' );
231+ }
232+
220233 // Make 'role' human-readable.
221234 foreach ( $ members as &$ member ) {
222235 $ role = 'member ' ;
@@ -229,10 +242,6 @@ public function list_( $args, $assoc_args ) {
229242 $ member ->role = $ role ;
230243 }
231244
232- if ( empty ( $ members ) ) {
233- WP_CLI ::error ( 'No group members found. ' );
234- }
235-
236245 if ( empty ( $ assoc_args ['fields ' ] ) ) {
237246 $ assoc_args ['fields ' ] = [
238247 'id ' ,
@@ -277,11 +286,11 @@ public function list_( $args, $assoc_args ) {
277286 * Success: Member promoted to new role successfully.
278287 */
279288 public function promote ( $ args , $ assoc_args ) {
280- $ group_id = $ this ->get_group_id_from_identifier ( $ assoc_args ['group-id ' ] );
281- $ user = $ this ->get_user_id_from_identifier ( $ assoc_args ['user-id ' ] );
282- $ member = new \BP_Groups_Member ( $ user ->ID , $ group_id );
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 );
283292
284- if ( $ member ->promote ( $ assoc_args ['role ' ] ) ) {
293+ if ( $ group_member ->promote ( $ assoc_args ['role ' ] ) ) {
285294 WP_CLI ::success ( 'Member promoted to new role successfully. ' );
286295 } else {
287296 WP_CLI ::error ( 'Could not promote the member. ' );
@@ -301,20 +310,38 @@ public function promote( $args, $assoc_args ) {
301310 *
302311 * ## EXAMPLES
303312 *
304- * # Demote a user to the "member" status.
313+ * # Demote a user to the "member" status using numeric IDs .
305314 * $ wp bp group member demote --group-id=3 --user-id=10
306315 * Success: User demoted to the "member" status.
307316 *
308- * # Demote a user to the "member" status.
317+ * # Demote a user to the "member" status using slugs .
309318 * $ wp bp group member demote --group-id=foo --user-id=admin
310319 * 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.
311324 */
312325 public function demote ( $ args , $ assoc_args ) {
313326 $ group_id = $ this ->get_group_id_from_identifier ( $ assoc_args ['group-id ' ] );
314327 $ user = $ this ->get_user_id_from_identifier ( $ assoc_args ['user-id ' ] );
315- $ member = new \BP_Groups_Member ( $ user ->ID , $ group_id );
316328
317- if ( $ member ->demote () ) {
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 () ) {
318345 WP_CLI ::success ( 'User demoted to the "member" status. ' );
319346 } else {
320347 WP_CLI ::error ( 'Could not demote the member. ' );
@@ -345,9 +372,15 @@ public function demote( $args, $assoc_args ) {
345372 public function ban ( $ args , $ assoc_args ) {
346373 $ group_id = $ this ->get_group_id_from_identifier ( $ assoc_args ['group-id ' ] );
347374 $ user = $ this ->get_user_id_from_identifier ( $ assoc_args ['user-id ' ] );
348- $ member = new \BP_Groups_Member ( $ user ->ID , $ group_id );
349375
350- if ( $ member ->ban () ) {
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 () ) {
351384 WP_CLI ::success ( 'Member banned from the group. ' );
352385 } else {
353386 WP_CLI ::error ( 'Could not ban the member. ' );
0 commit comments