Skip to content

Commit 2f40397

Browse files
Felix Arntzschlessera
authored andcommitted
Trigger missing hooks when granting or revoking super admin permissions.
1 parent ca9c604 commit 2f40397

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

src/Super_Admin_Command.php

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
use WP_CLI\Fetchers\User as UserFetcher;
34

45
/**
@@ -23,9 +24,9 @@
2324
*/
2425
class Super_Admin_Command extends WP_CLI_Command {
2526

26-
private $fields = array(
27+
private $fields = [
2728
'user_login',
28-
);
29+
];
2930

3031
public function __construct() {
3132
$this->fetcher = new UserFetcher();
@@ -66,7 +67,7 @@ public function list_subcommand( $_, $assoc_args ) {
6667
WP_CLI::line( $user_login );
6768
}
6869
} else {
69-
$output_users = array();
70+
$output_users = [];
7071
foreach ( $super_admins as $user_login ) {
7172
$output_user = new stdClass();
7273

@@ -97,20 +98,25 @@ public function add( $args, $_ ) {
9798
$successes = 0;
9899
$errors = 0;
99100
$users = $this->fetcher->get_many( $args );
101+
100102
if ( count( $users ) !== count( $args ) ) {
101103
$errors = count( $args ) - count( $users );
102104
}
103-
$user_logins = wp_list_pluck( $users, 'user_login' );
105+
104106
$super_admins = self::get_admins();
105107
$num_super_admins = count( $super_admins );
106108

107-
foreach ( $user_logins as $user_login ) {
108-
if ( in_array( $user_login, $super_admins, true ) ) {
109-
WP_CLI::warning( "User '{$user_login}' already has super-admin capabilities." );
109+
$new_super_admins = [];
110+
foreach ( $users as $user ) {
111+
do_action( 'grant_super_admin', (int) $user->ID );
112+
113+
if ( in_array( $user->user_login, $super_admins, true ) ) {
114+
WP_CLI::warning( "User '{$user->user_login}' already has super-admin capabilities." );
110115
continue;
111116
}
112117

113-
$super_admins[] = $user_login;
118+
$new_super_admins[] = $user->ID;
119+
$super_admins[] = $user->user_login;
114120
$successes++;
115121
}
116122

@@ -134,6 +140,10 @@ public function add( $args, $_ ) {
134140
WP_CLI::error( 'Site options update failed.' );
135141
}
136142
}
143+
144+
foreach ( $new_super_admins as $user_id ) {
145+
do_action( 'granted_super_admin', (int) $user_id );
146+
}
137147
}
138148

139149
/**
@@ -159,6 +169,13 @@ public function remove( $args, $_ ) {
159169
$user_logins = $users ? array_values( array_unique( wp_list_pluck( $users, 'user_login' ) ) ) : array();
160170
$user_logins_count = count( $user_logins );
161171

172+
$user_ids = [];
173+
foreach ( $users as $user ) {
174+
$user_ids[ $user->user_login ] = $user->ID;
175+
176+
do_action( 'revoke_super_admin', (int) $user->ID );
177+
}
178+
162179
if ( $user_logins_count < count( $args ) ) {
163180
$flipped_user_logins = array_flip( $user_logins );
164181
// 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.
@@ -199,10 +216,15 @@ function ( $v ) use ( $flipped_user_logins ) {
199216
$msg .= ' There are no remaining super admins.';
200217
}
201218
WP_CLI::success( $msg );
219+
220+
$removed_logins = array_intersect( $user_logins, $super_admins );
221+
foreach ( $removed_logins as $user_login ) {
222+
do_action( 'revoked_super_admin', (int) $user_ids[ $user_login ] );
223+
}
202224
}
203225

204226
private static function get_admins() {
205227
// We don't use get_super_admins() because we don't want to mess with the global
206-
return (array) get_site_option( 'site_admins', array( 'admin' ) );
228+
return (array) get_site_option( 'site_admins', [ 'admin' ] );
207229
}
208230
}

0 commit comments

Comments
 (0)