Skip to content

Commit 56575d1

Browse files
Fix fatal error when resetting an already deleted role (#57)
1 parent e4eed74 commit 56575d1

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

features/roles.feature

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,37 @@ Feature: Manage WordPress roles
111111
Success: Role reset.
112112
"""
113113

114+
Scenario: Resetting an already-deleted role
115+
Given a WP install
116+
117+
When I run `wp role delete editor`
118+
Then STDOUT should be:
119+
"""
120+
Success: Role with key 'editor' deleted.
121+
"""
122+
123+
When I try `wp role exists editor`
124+
Then STDERR should be:
125+
"""
126+
Error: Role with ID 'editor' does not exist.
127+
"""
128+
129+
When I run `wp role reset editor`
130+
Then STDOUT should contain:
131+
"""
132+
removed 0 capabilities from 'editor' role.
133+
"""
134+
And STDOUT should contain:
135+
"""
136+
Success: Role reset.
137+
"""
138+
139+
When I run `wp role exists editor`
140+
Then STDOUT should be:
141+
"""
142+
Success: Role with ID 'editor' exists.
143+
"""
144+
114145
Scenario: Cloning a role
115146
When I try `wp role create reporter Reporter --clone=no-role`
116147
Then STDERR should be:

src/Role_Command.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -359,13 +359,14 @@ public function reset( $args, $assoc_args ) {
359359
// phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison -- Object instances won't be same, strict check will fail here.
360360
if ( $after[ $role_key ] != $before[ $role_key ] ) {
361361
++$num_reset;
362-
$restored_cap = array_diff_key( $after[ $role_key ]->capabilities, $before[ $role_key ]->capabilities );
363-
$removed_cap = array_diff_key( $before[ $role_key ]->capabilities, $after[ $role_key ]->capabilities );
364-
$restored_cap_count = count( $restored_cap );
365-
$removed_cap_count = count( $removed_cap );
366-
$restored_text = ( 1 === $restored_cap_count ) ? '%d capability' : '%d capabilities';
367-
$removed_text = ( 1 === $removed_cap_count ) ? '%d capability' : '%d capabilities';
368-
$message = "Restored {$restored_text} to and removed {$removed_text} from '%s' role.";
362+
$before_capabilities = isset( $before[ $role_key ] ) ? $before[ $role_key ]->capabilities : [];
363+
$restored_cap = array_diff_key( $after[ $role_key ]->capabilities, $before_capabilities );
364+
$removed_cap = array_diff_key( $before_capabilities, $after[ $role_key ]->capabilities );
365+
$restored_cap_count = count( $restored_cap );
366+
$removed_cap_count = count( $removed_cap );
367+
$restored_text = ( 1 === $restored_cap_count ) ? '%d capability' : '%d capabilities';
368+
$removed_text = ( 1 === $removed_cap_count ) ? '%d capability' : '%d capabilities';
369+
$message = "Restored {$restored_text} to and removed {$removed_text} from '%s' role.";
369370
WP_CLI::log( sprintf( $message, $restored_cap_count, $removed_cap_count, $role_key ) );
370371
} else {
371372
WP_CLI::log( "No changes necessary for '{$role_key}' role." );

0 commit comments

Comments
 (0)