Skip to content

Commit bd1543c

Browse files
authored
Merge pull request #36 from wojsmol/use-wp_cli_cs
Implement CS checking based on the `WP_CLI_CS` ruleset
2 parents 7cba321 + 6a626dc commit bd1543c

File tree

6 files changed

+111
-35
lines changed

6 files changed

+111
-35
lines changed

.distignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
.travis.yml
77
behat.yml
88
circle.yml
9+
phpcs.xml.dist
10+
phpunit.xml.dist
911
bin/
1012
features/
1113
utils/

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
.DS_Store
2+
.phpcs.xml
3+
phpunit.xml
4+
phpcs.xml
25
wp-cli.local.yml
36
node_modules/
47
vendor/

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
},
1717
"require-dev": {
1818
"wp-cli/entity-command": "^1.3 || ^2",
19-
"wp-cli/wp-cli-tests": "^2.0.7"
19+
"wp-cli/wp-cli-tests": "^2.1"
2020
},
2121
"config": {
2222
"process-timeout": 7200,

phpcs.xml.dist

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?xml version="1.0"?>
2+
<ruleset name="WP-CLI-super-admin">
3+
<description>Custom ruleset for WP-CLI super-admin-command</description>
4+
5+
<!--
6+
#############################################################################
7+
COMMAND LINE ARGUMENTS
8+
For help understanding this file: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml
9+
For help using PHPCS: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Usage
10+
#############################################################################
11+
-->
12+
13+
<!-- What to scan. -->
14+
<file>.</file>
15+
16+
<!-- Show progress. -->
17+
<arg value="p"/>
18+
19+
<!-- Strip the filepaths down to the relevant bit. -->
20+
<arg name="basepath" value="./"/>
21+
22+
<!-- Check up to 8 files simultaneously. -->
23+
<arg name="parallel" value="8"/>
24+
25+
<!--
26+
#############################################################################
27+
USE THE WP_CLI_CS RULESET
28+
#############################################################################
29+
-->
30+
31+
<rule ref="WP_CLI_CS"/>
32+
33+
<!--
34+
#############################################################################
35+
PROJECT SPECIFIC CONFIGURATION FOR SNIFFS
36+
#############################################################################
37+
-->
38+
39+
<!-- For help understanding the `testVersion` configuration setting:
40+
https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions -->
41+
<config name="testVersion" value="5.4-"/>
42+
43+
<!-- Verify that everything in the global namespace is either namespaced or prefixed.
44+
See: https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/wiki/Customizable-sniff-properties#naming-conventions-prefix-everything-in-the-global-namespace -->
45+
<rule ref="WordPress.NamingConventions.PrefixAllGlobals">
46+
<properties>
47+
<property name="prefixes" type="array">
48+
<element value="WP_CLI\SuperAdmin"/><!-- Namespaces. -->
49+
<element value="wpcli_super_admin"/><!-- Global variables and such. -->
50+
</property>
51+
</properties>
52+
</rule>
53+
54+
<!-- Exclude existing classes from the prefix rule as it would break BC to prefix them now. -->
55+
<rule ref="WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound">
56+
<exclude-pattern>*/src/Super_Admin_Command\.php$</exclude-pattern>
57+
</rule>
58+
</ruleset>

src/Super_Admin_Command.php

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

34
/**
45
* Lists, adds, or removes super admin users on a multisite installation.
@@ -23,11 +24,11 @@
2324
class 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
}

super-admin-command.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@
44
return;
55
}
66

7-
$autoload = dirname( __FILE__ ) . '/vendor/autoload.php';
8-
if ( file_exists( $autoload ) ) {
9-
require_once $autoload;
7+
$wpcli_super_admin_autoloader = dirname( __FILE__ ) . '/vendor/autoload.php';
8+
if ( file_exists( $wpcli_super_admin_autoloader ) ) {
9+
require_once $wpcli_super_admin_autoloader;
1010
}
1111

12-
WP_CLI::add_command( 'super-admin', 'Super_Admin_Command', array(
13-
'before_invoke' => function () {
14-
if ( !is_multisite() ) {
15-
WP_CLI::error( 'This is not a multisite installation.' );
16-
}
17-
}
18-
) );
12+
WP_CLI::add_command(
13+
'super-admin',
14+
'Super_Admin_Command',
15+
array(
16+
'before_invoke' => function () {
17+
if ( ! is_multisite() ) {
18+
WP_CLI::error( 'This is not a multisite installation.' );
19+
}
20+
},
21+
)
22+
);

0 commit comments

Comments
 (0)