Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 77 additions & 11 deletions features/signup.feature
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ Feature: Manage signups in a multisite installation

Scenario: List signups
Given a WP multisite install
And I run `wp eval 'wpmu_signup_user( "bobuser", "bobuser@example.com" );'`
And I run `wp eval 'wpmu_signup_user( "johnuser", "johnuser@example.com" );'`
And I run `wp eval "wpmu_signup_user( 'bobuser', 'bobuser@example.com' );"`
And I run `wp eval "wpmu_signup_user( 'johnuser', 'johnuser@example.com' );"`

When I run `wp user signup list --fields=signup_id,user_login,user_email,active --format=csv`
Then STDOUT should be:
Expand Down Expand Up @@ -50,7 +50,7 @@ Feature: Manage signups in a multisite installation

Scenario: Get signup
Given a WP multisite install
And I run `wp eval 'wpmu_signup_user( "bobuser", "bobuser@example.com" );'`
And I run `wp eval "wpmu_signup_user( 'bobuser', 'bobuser@example.com' );"`

When I run `wp user signup get 1 --field=user_login`
Then STDOUT should be:
Expand All @@ -67,7 +67,7 @@ Feature: Manage signups in a multisite installation

Scenario: Activate signup
Given a WP multisite install
And I run `wp eval 'wpmu_signup_user( "bobuser", "bobuser@example.com" );'`
And I run `wp eval "wpmu_signup_user( 'bobuser', 'bobuser@example.com' );"`

When I run `wp user signup get bobuser --field=active`
Then STDOUT should be:
Expand Down Expand Up @@ -101,8 +101,8 @@ Feature: Manage signups in a multisite installation

Scenario: Activate multiple signups
Given a WP multisite install
And I run `wp eval 'wpmu_signup_user( "bobuser", "bobuser@example.com" );'`
And I run `wp eval 'wpmu_signup_user( "johnuser", "johnuser@example.com" );'`
And I run `wp eval "wpmu_signup_user( 'bobuser', 'bobuser@example.com' );"`
And I run `wp eval "wpmu_signup_user( 'johnuser', 'johnuser@example.com' );"`

When I run `wp user signup list --active=0 --format=count`
Then STDOUT should be:
Expand All @@ -124,7 +124,7 @@ Feature: Manage signups in a multisite installation

Scenario: Activate blog signup entry
Given a WP multisite install
And I run `wp eval 'wpmu_signup_blog( "example.com", "/bobsite/", "My Awesome Title", "bobuser", "bobuser@example.com" );'`
And I run `wp eval "wpmu_signup_blog( 'example.com', '/bobsite/', 'My Awesome Title', 'bobuser', 'bobuser@example.com' );"`

When I run `wp user signup get bobuser --fields=user_login,domain,path,active --format=csv`
Then STDOUT should be:
Expand All @@ -147,8 +147,8 @@ Feature: Manage signups in a multisite installation

Scenario: Delete signups
Given a WP multisite install
And I run `wp eval 'wpmu_signup_user( "bobuser", "bobuser@example.com" );'`
And I run `wp eval 'wpmu_signup_user( "johnuser", "johnuser@example.com" );'`
And I run `wp eval "wpmu_signup_user( 'bobuser', 'bobuser@example.com' );"`
And I run `wp eval "wpmu_signup_user( 'johnuser', 'johnuser@example.com' );"`

When I run `wp user signup get bobuser --field=user_email`
Then STDOUT should be:
Expand Down Expand Up @@ -176,8 +176,8 @@ Feature: Manage signups in a multisite installation

Scenario: Delete all signups
Given a WP multisite install
And I run `wp eval 'wpmu_signup_user( "bobuser", "bobuser@example.com" );'`
And I run `wp eval 'wpmu_signup_user( "johnuser", "johnuser@example.com" );'`
And I run `wp eval "wpmu_signup_user( 'bobuser', 'bobuser@example.com' );"`
And I run `wp eval "wpmu_signup_user( 'johnuser', 'johnuser@example.com' );"`

When I try `wp user signup delete`
Then STDERR should be:
Expand All @@ -196,3 +196,69 @@ Feature: Manage signups in a multisite installation
"""
0
"""

Scenario: Expose add_to_blog, new_role, and blog_id fields and support filtering by them
Given a WP multisite install
And I run `wp eval "wpmu_signup_user( 'adminuser', 'adminuser@example.com', array( 'add_to_blog' => 228, 'new_role' => 'administrator' ) );"`
And I run `wp eval "wpmu_signup_user( 'editoruser', 'editoruser@example.com', array( 'add_to_blog' => 228, 'new_role' => 'editor' ) );"`
And I run `wp eval "wpmu_signup_user( 'otherbloguser', 'otherbloguser@example.com', array( 'add_to_blog' => 300, 'new_role' => 'administrator' ) );"`
And I run `wp eval "wpmu_signup_user( 'plainuser', 'plainuser@example.com' );"`

When I run `wp user signup list --active=0 --new_role=administrator --fields=user_login,new_role,blog_id --format=csv`
Then STDOUT should be:
"""
user_login,new_role,blog_id
adminuser,administrator,228
otherbloguser,administrator,300
"""

When I run `wp user signup list --active=0 --blog_id=228 --fields=user_login,new_role,add_to_blog --format=csv`
Then STDOUT should be:
"""
user_login,new_role,add_to_blog
adminuser,administrator,228
editoruser,editor,228
"""

When I run `wp user signup list --active=0 --add_to_blog=228 --fields=user_login,new_role,add_to_blog --format=csv`
Then STDOUT should be:
"""
user_login,new_role,add_to_blog
adminuser,administrator,228
editoruser,editor,228
"""

When I run `wp user signup get adminuser --field=add_to_blog`
Then STDOUT should be:
"""
228
"""

When I run `wp user signup get adminuser --field=new_role`
Then STDOUT should be:
"""
administrator
"""

When I run `wp user signup get adminuser --field=blog_id`
Then STDOUT should be:
"""
228
"""

Scenario: Filter signups by metadata with per_page pagination
Given a WP multisite install
And I run `wp eval "wpmu_signup_user( 'plainuser', 'plainuser@example.com' );"`
And I run `wp eval "wpmu_signup_user( 'adminuser', 'adminuser@example.com', array( 'add_to_blog' => 228, 'new_role' => 'administrator' ) );"`
And I run `wp eval "wpmu_signup_user( 'editoruser', 'editoruser@example.com', array( 'add_to_blog' => 228, 'new_role' => 'editor' ) );"`
And I run `wp eval "wpmu_signup_user( 'otherbloguser', 'otherbloguser@example.com', array( 'add_to_blog' => 300, 'new_role' => 'administrator' ) );"`

When I run `wp user signup list --blog_id=228 --per_page=2 --fields=user_login,blog_id --format=csv`
Then STDOUT should be:
"""
user_login,blog_id
adminuser,228
editoruser,228
"""


52 changes: 48 additions & 4 deletions src/Signup_Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ public function __construct() {
* * title
* * activated
* * meta
* * add_to_blog
* * new_role
* * blog_id
*
* ## EXAMPLES
*
Expand Down Expand Up @@ -135,7 +138,12 @@ public function list_( $args, $assoc_args ) {
*/
$per_page = Utils\get_flag_value( $assoc_args, 'per_page' );

$limit = $per_page ? $wpdb->prepare( 'LIMIT %d', (int) $per_page ) : '';
$filter_args = array_diff_key(
$assoc_args,
array_flip( array( 'fields', 'field', 'format', 'per_page' ) )
);

$limit = ( $per_page && empty( $filter_args ) ) ? $wpdb->prepare( 'LIMIT %d', (int) $per_page ) : '';

$query = "SELECT * FROM $wpdb->signups {$limit}";

Expand All @@ -144,9 +152,13 @@ public function list_( $args, $assoc_args ) {

if ( $results ) {
foreach ( $results as $item ) {
// Support features like --active=0.
foreach ( array_keys( $item ) as $field ) {
if ( isset( $assoc_args[ $field ] ) && $assoc_args[ $field ] !== $item[ $field ] ) {
$item = $this->prepare_signup_array( $item );

// Support features like --active=0, --new_role=administrator, --blog_id=228.
foreach ( $filter_args as $field => $value ) {
$item_val = is_scalar( $item[ $field ] ?? null ) ? (string) $item[ $field ] : '';
$filter_val = is_scalar( $value ) ? (string) $value : '';
if ( ! isset( $item[ $field ] ) || $item_val !== $filter_val ) {
continue 2;
}
}
Expand All @@ -155,6 +167,10 @@ public function list_( $args, $assoc_args ) {
}
}

if ( $per_page ) {
$signups = array_slice( $signups, 0, (int) $per_page );
}

$format = Utils\get_flag_value( $assoc_args, 'format', 'table' );

$formatter = $this->get_formatter( $assoc_args );
Expand Down Expand Up @@ -204,6 +220,7 @@ public function list_( $args, $assoc_args ) {
*/
public function get( $args, $assoc_args ) {
$signup = $this->fetcher->get_check( $args[0] );
$signup = (object) $this->prepare_signup_array( (array) $signup );

if ( empty( $assoc_args['fields'] ) ) {
$assoc_args['fields'] = array_keys( (array) $signup );
Expand Down Expand Up @@ -336,4 +353,31 @@ private function delete_all_signups() {

return $results ? true : false;
}

/**
* Prepare a signup item by extracting meta properties.
*
* @param array<string, mixed> $item Signup array item.
* @return array<string, mixed> Prepared signup array item.
*/
private function prepare_signup_array( array $item ) {
if ( ! empty( $item['meta'] ) && is_string( $item['meta'] ) ) {
$meta_data = maybe_unserialize( $item['meta'] );
if ( is_array( $meta_data ) ) {
foreach ( $meta_data as $meta_key => $meta_value ) {
if ( ! isset( $item[ $meta_key ] ) ) {
$item[ $meta_key ] = $meta_value;
}
}

if ( isset( $meta_data['add_to_blog'] ) && ! isset( $item['blog_id'] ) ) {
$item['blog_id'] = $meta_data['add_to_blog'];
} elseif ( isset( $meta_data['blog_id'] ) && ! isset( $item['add_to_blog'] ) ) {
$item['add_to_blog'] = $meta_data['blog_id'];
}
}
}

return $item;
}
}
Loading