11<?php
2+ use WP_CLI \Fetchers \User as UserFetcher ;
23
34/**
45 * Lists, adds, or removes super admin users on a multisite installation.
2324class Super_Admin_Command extends WP_CLI_Command {
2425
2526 private $ fields = array (
26- 'user_login '
27+ 'user_login ' ,
2728 );
2829
2930 public function __construct () {
30- $ this ->fetcher = new \ WP_CLI \ Fetchers \ User ;
31+ $ this ->fetcher = new UserFetcher () ;
3132 }
3233
3334 /**
@@ -57,18 +58,17 @@ public function __construct() {
5758 *
5859 * @subcommand list
5960 */
60- public function _list ( $ _ , $ assoc_args ) {
61+ public function list_subcommand ( $ _ , $ assoc_args ) {
6162 $ super_admins = self ::get_admins ();
6263
6364 if ( 'list ' === $ assoc_args ['format ' ] ) {
6465 foreach ( $ super_admins as $ user_login ) {
6566 WP_CLI ::line ( $ user_login );
6667 }
67- }
68- else {
68+ } else {
6969 $ output_users = array ();
7070 foreach ( $ super_admins as $ user_login ) {
71- $ output_user = new stdClass ;
71+ $ output_user = new stdClass () ;
7272
7373 $ output_user ->user_login = $ user_login ;
7474
@@ -94,17 +94,18 @@ public function _list( $_, $assoc_args ) {
9494 */
9595 public function add ( $ args , $ _ ) {
9696
97- $ successes = $ errors = 0 ;
98- $ users = $ this ->fetcher ->get_many ( $ args );
99- if ( count ( $ users ) != count ( $ args ) ) {
97+ $ successes = 0 ;
98+ $ errors = 0 ;
99+ $ users = $ this ->fetcher ->get_many ( $ args );
100+ if ( count ( $ users ) !== count ( $ args ) ) {
100101 $ errors = count ( $ args ) - count ( $ users );
101102 }
102- $ user_logins = wp_list_pluck ( $ users , 'user_login ' );
103- $ super_admins = self ::get_admins ();
103+ $ user_logins = wp_list_pluck ( $ users , 'user_login ' );
104+ $ super_admins = self ::get_admins ();
104105 $ num_super_admins = count ( $ super_admins );
105106
106107 foreach ( $ user_logins as $ user_login ) {
107- if ( in_array ( $ user_login , $ super_admins ) ) {
108+ if ( in_array ( $ user_login , $ super_admins, true ) ) {
108109 WP_CLI ::warning ( "User ' {$ user_login }' already has super-admin capabilities. " );
109110 continue ;
110111 }
@@ -113,15 +114,15 @@ public function add( $args, $_ ) {
113114 $ successes ++;
114115 }
115116
116- if ( $ num_super_admins === count ( $ super_admins ) ) {
117+ if ( count ( $ super_admins ) === $ num_super_admins ) {
117118 if ( $ errors ) {
118119 $ user_count = count ( $ args );
119120 WP_CLI ::error ( "Couldn't grant super-admin capabilities to {$ errors } of {$ user_count } users. " );
120121 } else {
121122 WP_CLI ::success ( 'Super admins remain unchanged. ' );
122123 }
123124 } else {
124- if ( update_site_option ( 'site_admins ' , $ super_admins ) ) {
125+ if ( update_site_option ( 'site_admins ' , $ super_admins ) ) {
125126 if ( $ errors ) {
126127 $ user_count = count ( $ args );
127128 WP_CLI ::error ( "Only granted super-admin capabilities to {$ successes } of {$ user_count } users. " );
@@ -154,18 +155,26 @@ public function remove( $args, $_ ) {
154155 WP_CLI ::error ( 'No super admins to revoke super-admin privileges from. ' );
155156 }
156157
157- $ users = $ this ->fetcher ->get_many ( $ args );
158- $ user_logins = $ users ? array_values ( array_unique ( wp_list_pluck ( $ users , 'user_login ' ) ) ) : array ();
158+ $ users = $ this ->fetcher ->get_many ( $ args );
159+ $ user_logins = $ users ? array_values ( array_unique ( wp_list_pluck ( $ users , 'user_login ' ) ) ) : array ();
159160 $ user_logins_count = count ( $ user_logins );
160161
161162 if ( $ user_logins_count < count ( $ args ) ) {
162163 $ flipped_user_logins = array_flip ( $ user_logins );
163164 // Fetcher has already warned so don't bother here, but continue with any args that are possible login names to cater for invalid users in the site options meta.
164165
165- $ user_logins = array_merge ( $ user_logins , array_unique ( array_filter ( $ args , function ( $ v ) use ( $ flipped_user_logins ) {
166- // Exclude numeric and email-like logins (login names can be email-like but ignore this given the circumstances).
167- return ! isset ( $ flipped_user_logins [ $ v ] ) && ! is_numeric ( $ v ) && ! is_email ( $ v );
168- } ) ) );
166+ $ user_logins = array_merge (
167+ $ user_logins ,
168+ array_unique (
169+ array_filter (
170+ $ args ,
171+ function ( $ v ) use ( $ flipped_user_logins ) {
172+ // Exclude numeric and email-like logins (login names can be email-like but ignore this given the circumstances).
173+ return ! isset ( $ flipped_user_logins [ $ v ] ) && ! is_numeric ( $ v ) && ! is_email ( $ v );
174+ }
175+ )
176+ )
177+ );
169178 $ user_logins_count = count ( $ user_logins );
170179 }
171180 if ( ! $ user_logins ) {
@@ -174,15 +183,15 @@ public function remove( $args, $_ ) {
174183
175184 $ update_super_admins = array_diff ( $ super_admins , $ user_logins );
176185 if ( $ update_super_admins === $ super_admins ) {
177- WP_CLI ::error ( $ user_logins_count > 1 ? 'None of the given users is a super admin. ' : 'The given user is not a super admin. ' );
186+ WP_CLI ::error ( $ user_logins_count > 1 ? 'None of the given users is a super admin. ' : 'The given user is not a super admin. ' );
178187 }
179188
180- update_site_option ( 'site_admins ' , $ update_super_admins );
189+ update_site_option ( 'site_admins ' , $ update_super_admins );
181190
182191 $ successes = count ( $ super_admins ) - count ( $ update_super_admins );
183192 if ( $ successes === $ user_logins_count ) {
184193 $ message = $ user_logins_count > 1 ? 'users ' : 'user ' ;
185- $ msg = "Revoked super-admin capabilities from {$ user_logins_count } {$ message }. " ;
194+ $ msg = "Revoked super-admin capabilities from {$ user_logins_count } {$ message }. " ;
186195 } else {
187196 $ msg = "Revoked super-admin capabilities from {$ successes } of {$ user_logins_count } users. " ;
188197 }
@@ -194,6 +203,6 @@ public function remove( $args, $_ ) {
194203
195204 private static function get_admins () {
196205 // We don't use get_super_admins() because we don't want to mess with the global
197- return (array ) get_site_option ( 'site_admins ' , array ('admin ' ) );
206+ return (array ) get_site_option ( 'site_admins ' , array ( 'admin ' ) );
198207 }
199208}
0 commit comments