Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add --recently-active option in plugin list command #424

Merged
merged 2 commits into from
May 2, 2024
Merged
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
146 changes: 146 additions & 0 deletions features/plugin-list-recently-active.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
Feature: List recently active WordPress plugins

Scenario: Verify plugin installation, activation, deactivation and confirm listing recently active plugins list is correct
Given a WP install

When I run `wp plugin install site-secrets debug-bar p2-by-email --activate`
Then STDOUT should contain:
"""
Plugin 'site-secrets' activated.
"""
And STDOUT should contain:
"""
Plugin 'debug-bar' activated.
"""
And STDOUT should contain:
"""
Plugin 'p2-by-email' activated.
"""

When I run `wp plugin list --recently-active --field=name --format=json`
Then STDOUT should be:
"""
[]
"""

When I run `wp plugin activate akismet`
Then STDOUT should contain:
"""
Plugin 'akismet' activated.
"""

When I run `wp plugin deactivate site-secrets debug-bar`
Then STDOUT should contain:
"""
Plugin 'site-secrets' deactivated.
Plugin 'debug-bar' deactivated.
Success: Deactivated 2 of 2 plugins.
"""

When I run `wp plugin list --recently-active --field=name`
Then STDOUT should be a table containing rows:
| debug-bar |
| site-secrets |

Scenario: Use recently active plugin to activate plugins
Given a WP install

When I run `wp plugin install site-secrets debug-bar --activate`
Then STDOUT should contain:
"""
Plugin 'site-secrets' activated.
"""
And STDOUT should contain:
"""
Plugin 'debug-bar' activated.
"""

When I run `wp plugin deactivate site-secrets debug-bar`
Then STDOUT should be:
"""
Plugin 'site-secrets' deactivated.
Plugin 'debug-bar' deactivated.
Success: Deactivated 2 of 2 plugins.
"""

When I run `wp plugin activate $(wp plugin list --recently-active --field=name)`
Then STDOUT should contain:
"""
Plugin 'debug-bar' activated.
"""
And STDOUT should contain:
"""
Plugin 'site-secrets' activated.
"""

Scenario: For a MU site, verify plugin installation, activation, deactivation and confirm listing recently active plugins list is correct
Given a WP multisite install

When I run `wp plugin install site-secrets debug-bar p2-by-email --activate-network`
Then STDOUT should contain:
"""
Plugin 'site-secrets' network activated.
"""
And STDOUT should contain:
"""
Plugin 'debug-bar' network activated.
"""
And STDOUT should contain:
"""
Plugin 'p2-by-email' network activated.
"""

When I run `wp plugin activate akismet --network`
Then STDOUT should contain:
"""
Plugin 'akismet' network activated.
"""

When I run `wp plugin list --recently-active --field=name --format=json`
Then STDOUT should be:
"""
[]
"""
When I run `wp plugin deactivate site-secrets debug-bar --network`
Then STDOUT should be:
"""
Plugin 'site-secrets' network deactivated.
Plugin 'debug-bar' network deactivated.
Success: Network deactivated 2 of 2 plugins.
"""

When I run `wp plugin list --recently-active --field=name`
Then STDOUT should be a table containing rows:
| debug-bar |
| site-secrets |

Scenario: For a MU site, use recently active plugin to activate plugins
Given a WP multisite install

When I run `wp plugin install site-secrets debug-bar --activate-network`
Then STDOUT should contain:
"""
Plugin 'site-secrets' network activated.
"""
And STDOUT should contain:
"""
Plugin 'debug-bar' network activated.
"""

When I run `wp plugin deactivate site-secrets debug-bar --network`
Then STDOUT should be:
"""
Plugin 'site-secrets' network deactivated.
Plugin 'debug-bar' network deactivated.
Success: Network deactivated 2 of 2 plugins.
"""

When I run `wp plugin activate $(wp plugin list --recently-active --field=name) --network`
Then STDOUT should contain:
"""
Plugin 'site-secrets' network activated.
"""
And STDOUT should contain:
"""
Plugin 'debug-bar' network activated.
"""
26 changes: 26 additions & 0 deletions src/Plugin_Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,18 @@ protected function get_all_items() {
* $ wp plugin activate hello --network
* Plugin 'hello' network activated.
* Success: Network activated 1 of 1 plugins.
*
* # Activate plugins that were recently active.
* $ wp plugin activate $(wp plugin list --recently-active --field=name)
* Plugin 'bbpress' activated.
* Plugin 'buddypress' activated.
* Success: Activated 2 of 2 plugins.
*
* # Activate plugins that were recently active on a multisite.
* $ wp plugin activate $(wp plugin list --recently-active --field=name) --network
* Plugin 'bbpress' network activated.
* Plugin 'buddypress' network activated.
* Success: Activated 2 of 2 plugins.
*/
public function activate( $args, $assoc_args = array() ) {
$network_wide = Utils\get_flag_value( $assoc_args, 'network', false );
Expand Down Expand Up @@ -718,6 +730,12 @@ protected function get_item_list() {
$auto_updates = [];
}

$recently_active = is_network_admin() ? get_site_option( 'recently_activated' ) : get_option( 'recently_activated' );

if ( false === $recently_active ) {
$recently_active = [];
}

foreach ( $this->get_all_plugins() as $file => $details ) {
$all_update_info = $this->get_update_info();
$update_info = ( isset( $all_update_info->response[ $file ] ) && null !== $all_update_info->response[ $file ] ) ? (array) $all_update_info->response[ $file ] : null;
Expand Down Expand Up @@ -745,6 +763,7 @@ protected function get_item_list() {
'tested_up_to' => '',
'wporg_status' => $wporg_info['status'],
'wporg_last_updated' => $wporg_info['last_updated'],
'recently_active' => in_array( $file, array_keys( $recently_active ), true ),
];

if ( $this->check_headers['tested_up_to'] ) {
Expand Down Expand Up @@ -1306,6 +1325,9 @@ public function delete( $args, $assoc_args = array() ) {
* [--skip-update-check]
* : If set, the plugin update check will be skipped.
*
* [--recently-active]
* : If set, only recently active plugins will be shown and the status filter will be ignored.
*
* ## AVAILABLE FIELDS
*
* These fields will be displayed by default for each plugin:
Expand Down Expand Up @@ -1361,6 +1383,10 @@ public function delete( $args, $assoc_args = array() ) {
* | local | | |
* +--------------------+--------------+--------------------+
*
* # List recently active plugins on the site.
* $ wp plugin list --recently-active --field=name --format=json
* ["akismet","bbpress","buddypress"]
*
* @subcommand list
*/
public function list_( $_, $assoc_args ) {
Expand Down
9 changes: 9 additions & 0 deletions src/WP_CLI/CommandWithUpgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,15 @@ protected function _list( $_, $assoc_args ) {

$all_items = $this->get_all_items();

if ( false !== (bool) Utils\get_flag_value( $assoc_args, 'recently-active', false ) ) {
$all_items = array_filter(
$all_items,
function ( $value ) {
return isset( $value['recently_active'] ) && true === $value['recently_active'];
}
);
}

if ( ! is_array( $all_items ) ) {
WP_CLI::error( "No {$this->item_type}s found." );
}
Expand Down