11<?php
22
3+ use WP_CLI \Utils ;
4+ use WP_CLI \Formatter ;
5+
36/**
47 * Manages user roles, including creating new roles and resetting to defaults.
58 *
3639 */
3740class Role_Command extends WP_CLI_Command {
3841
39- private $ fields = array (
40- ' name ' ,
41- ' role '
42- ) ;
42+ private $ fields = [ ' name ' , ' role ' ];
43+
44+ // Array of default roles.
45+ private $ roles = [ ' administrator ' , ' editor ' , ' author ' , ' contributor ' , ' subscriber ' ] ;
4346
4447 /**
4548 * Lists all roles.
@@ -91,15 +94,15 @@ public function list_( $args, $assoc_args ) {
9194
9295 $ output_roles = array ();
9396 foreach ( $ wp_roles ->roles as $ key => $ role ) {
94- $ output_role = new stdClass ;
97+ $ output_role = new stdClass () ;
9598
9699 $ output_role ->name = $ role ['name ' ];
97100 $ output_role ->role = $ key ;
98101
99102 $ output_roles [] = $ output_role ;
100103 }
101104
102- $ formatter = new \ WP_CLI \ Formatter ( $ assoc_args , $ this ->fields );
105+ $ formatter = new Formatter ( $ assoc_args , $ this ->fields );
103106 $ formatter ->display_items ( $ output_roles );
104107 }
105108
@@ -122,11 +125,11 @@ public function list_( $args, $assoc_args ) {
122125 public function exists ( $ args ) {
123126 global $ wp_roles ;
124127
125- if ( ! in_array ($ args [0 ], array_keys ( $ wp_roles ->roles ) ) ) {
126- WP_CLI ::error ( "Role with ID ' $ args [0 ]' does not exist. " );
128+ if ( ! in_array ( $ args [0 ], array_keys ( $ wp_roles ->roles ), true ) ) {
129+ WP_CLI ::error ( "Role with ID ' { $ args [0 ]} ' does not exist. " );
127130 }
128131
129- WP_CLI ::success ( "Role with ID ' $ args [0 ]' exists. " );
132+ WP_CLI ::success ( "Role with ID ' { $ args [0 ]} ' exists. " );
130133 }
131134
132135 /**
@@ -158,11 +161,11 @@ public function create( $args, $assoc_args ) {
158161
159162 self ::persistence_check ();
160163
161- $ role_key = array_shift ( $ args );
164+ $ role_key = array_shift ( $ args );
162165 $ role_name = array_shift ( $ args );
163166
164167 if ( empty ( $ role_key ) || empty ( $ role_name ) ) {
165- WP_CLI ::error ( "Can't create role, insufficient information provided. " );
168+ WP_CLI ::error ( "Can't create role, insufficient information provided. " );
166169 }
167170
168171 $ capabilities = false ;
@@ -177,7 +180,7 @@ public function create( $args, $assoc_args ) {
177180 if ( add_role ( $ role_key , $ role_name ) ) {
178181 if ( ! empty ( $ capabilities ) ) {
179182 $ role_obj = $ wp_roles ->get_role ( $ role_key );
180- foreach ( $ capabilities as $ cap ) {
183+ foreach ( $ capabilities as $ cap ) {
181184 $ role_obj ->add_cap ( $ cap );
182185 }
183186 WP_CLI ::success ( sprintf ( "Role with key '%s' created. Cloned capabilities from '%s'. " , $ role_key , $ assoc_args ['clone ' ] ) );
@@ -214,17 +217,19 @@ public function delete( $args ) {
214217
215218 $ role_key = array_shift ( $ args );
216219
217- if ( empty ( $ role_key ) || ! isset ( $ wp_roles ->roles [$ role_key ] ) )
218- WP_CLI ::error ( "Role key not provided, or is invalid. " );
220+ if ( empty ( $ role_key ) || ! isset ( $ wp_roles ->roles [ $ role_key ] ) ) {
221+ WP_CLI ::error ( 'Role key not provided, or is invalid. ' );
222+ }
219223
220224 remove_role ( $ role_key );
221225
222226 // Note: remove_role() doesn't indicate success or otherwise, so we have to
223227 // check ourselves
224- if ( ! isset ( $ wp_roles ->roles [$ role_key ] ) )
228+ if ( ! isset ( $ wp_roles ->roles [ $ role_key ] ) ) {
225229 WP_CLI ::success ( sprintf ( "Role with key '%s' deleted. " , $ role_key ) );
226- else
230+ } else {
227231 WP_CLI ::error ( sprintf ( "Role with key '%s' could not be deleted. " , $ role_key ) );
232+ }
228233
229234 }
230235
@@ -253,26 +258,28 @@ public function reset( $args, $assoc_args ) {
253258
254259 self ::persistence_check ();
255260
256- if ( ! \WP_CLI \Utils \get_flag_value ( $ assoc_args , 'all ' ) && empty ( $ args ) )
257- WP_CLI ::error ( "Role key not provided, or is invalid. " );
261+ if ( ! Utils \get_flag_value ( $ assoc_args , 'all ' ) && empty ( $ args ) ) {
262+ WP_CLI ::error ( 'Role key not provided, or is invalid. ' );
263+ }
258264
259265 if ( ! function_exists ( 'populate_roles ' ) ) {
260- require_once ( ABSPATH . 'wp-admin/includes/schema.php ' ) ;
266+ require_once ABSPATH . 'wp-admin/includes/schema.php ' ;
261267 }
262268
263269 global $ wp_roles ;
264- $ all_roles = array_keys ( $ wp_roles ->roles );
270+ $ all_roles = array_keys ( $ wp_roles ->roles );
265271 $ preserve_args = $ args ;
266272
267273 // Get our default roles.
268- $ default_roles = $ preserve = array ( 'administrator ' , 'editor ' , 'author ' , 'contributor ' , 'subscriber ' );
269- $ before = array ();
274+ $ default_roles = $ this ->roles ;
275+ $ preserve = $ this ->roles ;
276+ $ before = [];
270277
271- if ( \ WP_CLI \ Utils \get_flag_value ( $ assoc_args , 'all ' ) ) {
272- foreach ( $ default_roles as $ role ) {
278+ if ( Utils \get_flag_value ( $ assoc_args , 'all ' ) ) {
279+ foreach ( $ default_roles as $ role ) {
273280 $ before [ $ role ] = get_role ( $ role );
274281 remove_role ( $ role );
275- $ args []= $ role ;
282+ $ args [] = $ role ;
276283 }
277284 populate_roles ();
278285 $ not_affected_roles = array_diff ( $ all_roles , $ default_roles );
@@ -284,7 +291,7 @@ public function reset( $args, $assoc_args ) {
284291 } else {
285292
286293 foreach ( $ args as $ k => $ role_key ) {
287- $ key = array_search ( $ role_key , $ default_roles );
294+ $ key = array_search ( $ role_key , $ default_roles, true );
288295 if ( false !== $ key ) {
289296 unset( $ preserve [ $ key ] );
290297 $ before [ $ role_key ] = get_role ( $ role_key );
@@ -302,7 +309,7 @@ public function reset( $args, $assoc_args ) {
302309 }
303310
304311 // No roles were unset, bail.
305- if ( count ( $ default_roles ) == count ( $ preserve ) ) {
312+ if ( count ( $ default_roles ) === count ( $ preserve ) ) {
306313 WP_CLI ::error ( 'Must specify a default role to reset. ' );
307314 }
308315
@@ -312,7 +319,7 @@ public function reset( $args, $assoc_args ) {
312319 * if get_role is null
313320 * save role name for re-removal
314321 */
315- $ roleobj = get_role ( $ role );
322+ $ roleobj = get_role ( $ role );
316323 $ preserve [ $ k ] = is_null ( $ roleobj ) ? $ role : $ roleobj ;
317324
318325 remove_role ( $ role );
@@ -334,21 +341,22 @@ public function reset( $args, $assoc_args ) {
334341 }
335342 }
336343
337- $ num_reset = 0 ;
338- $ args = array_unique ( $ args );
344+ $ num_reset = 0 ;
345+ $ args = array_unique ( $ args );
339346 $ num_to_reset = count ( $ args );
340- foreach ( $ args as $ role_key ) {
347+ foreach ( $ args as $ role_key ) {
341348 $ after [ $ role_key ] = get_role ( $ role_key );
342349
350+ // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison -- Object instances won't be same, strict check will fail here.
343351 if ( $ after [ $ role_key ] != $ before [ $ role_key ] ) {
344352 ++$ num_reset ;
345- $ restored_cap = array_diff_key ( $ after [ $ role_key ]->capabilities , $ before [ $ role_key ]->capabilities );
346- $ removed_cap = array_diff_key ( $ before [ $ role_key ]->capabilities , $ after [ $ role_key ]->capabilities );
353+ $ restored_cap = array_diff_key ( $ after [ $ role_key ]->capabilities , $ before [ $ role_key ]->capabilities );
354+ $ removed_cap = array_diff_key ( $ before [ $ role_key ]->capabilities , $ after [ $ role_key ]->capabilities );
347355 $ restored_cap_count = count ( $ restored_cap );
348- $ removed_cap_count = count ( $ removed_cap );
349- $ restored_text = ( 1 === $ restored_cap_count ) ? '%d capability ' : '%d capabilities ' ;
350- $ removed_text = ( 1 === $ removed_cap_count ) ? '%d capability ' : '%d capabilities ' ;
351- $ message = "Restored " . $ restored_text . " to and removed " . $ removed_text . " from '%s' role. " ;
356+ $ removed_cap_count = count ( $ removed_cap );
357+ $ restored_text = ( 1 === $ restored_cap_count ) ? '%d capability ' : '%d capabilities ' ;
358+ $ removed_text = ( 1 === $ removed_cap_count ) ? '%d capability ' : '%d capabilities ' ;
359+ $ message = "Restored { $ restored_text} to and removed { $ removed_text} from '%s' role. " ;
352360 WP_CLI ::log ( sprintf ( $ message , $ restored_cap_count , $ removed_cap_count , $ role_key ) );
353361 } else {
354362 WP_CLI ::log ( "No changes necessary for ' {$ role_key }' role. " );
@@ -372,7 +380,8 @@ public function reset( $args, $assoc_args ) {
372380 private static function persistence_check () {
373381 global $ wp_roles ;
374382
375- if ( !$ wp_roles ->use_db )
376- WP_CLI ::error ( "Role definitions are not persistent. " );
383+ if ( ! $ wp_roles ->use_db ) {
384+ WP_CLI ::error ( 'Role definitions are not persistent. ' );
385+ }
377386 }
378387}
0 commit comments