Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
49 changes: 41 additions & 8 deletions features/sidebar.feature
Original file line number Diff line number Diff line change
@@ -1,28 +1,61 @@
Feature: Manage WordPress sidebars

Scenario: List available sidebars
Given a WP install

When I try `wp theme delete twentytwelve --force`
And I run `wp theme install twentytwelve --activate`
Then STDOUT should not be empty

When I run `wp theme install twentytwelve`
And I run `wp theme activate twentytwelve`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
And I run `wp theme activate twentytwelve`
And I run `wp theme activate twentytwelve --force`

There would be warning if theme already exists. Try "--force" argument.

Then the return code should be 0
When I run `wp sidebar list --fields=name,id`
Then STDOUT should be a table containing rows:
| name | id |
| Main Sidebar | sidebar-1 |
| First Front Page Widget Area | sidebar-2 |
| Second Front Page Widget Area | sidebar-3 |
| Inactive Widgets | wp_inactive_widgets |

When I run `wp sidebar list --format=ids`
Then STDOUT should be:
"""
sidebar-1 sidebar-2 sidebar-3 wp_inactive_widgets
"""

When I run `wp sidebar list --format=count`
Then STDOUT should be:
"""
4
"""

Scenario: Get sidebar details
Given a WP install
When I run `wp theme install twentytwelve`
And I run `wp theme activate twentytwelve`
Then the return code should be 0
When I run `wp sidebar get sidebar-1`
Then STDOUT should contain:
"""
sidebar-1
"""

Scenario: Sidebar exists command returns success
Given a WP install
When I run `wp theme install twentytwelve`
And I run `wp theme activate twentytwelve`
Then the return code should be 0
When I run `wp sidebar exists sidebar-1`
Then the return code should be 0

Scenario: Sidebar exists command returns failure
Given a WP install
When I run `wp theme install twentytwelve`
And I run `wp theme activate twentytwelve`
Then the return code should be 0
When I try `wp sidebar exists does-not-exist`
Then the return code should be 1

Scenario: Get non-existing sidebar returns error
Given a WP install
When I run `wp theme install twentytwelve`
And I run `wp theme activate twentytwelve`
Then the return code should be 0
When I try `wp sidebar get does-not-exist`
Then STDERR should contain:
"""
does not exist
"""
Comment thread
swissspidy marked this conversation as resolved.
70 changes: 70 additions & 0 deletions src/Sidebar_Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,74 @@ public function list_( $args, $assoc_args ) {
$formatter = new Formatter( $assoc_args, $this->fields );
$formatter->display_items( $sidebars );
}

/**
* Get details about a specific sidebar.
*
* ## OPTIONS
*
* <id>
* : The sidebar ID.
*
* [--fields=<fields>]
* : Limit the output to specific object fields.
*
* [--format=<format>]
* : Render output in a particular format.
* ---
* default: table
* options:
* - table
* - json
Comment thread
iamsohilvahora marked this conversation as resolved.
* - yaml
* ---
*
* ## EXAMPLES
*
* $ wp sidebar get sidebar-1
* $ wp sidebar get wp_inactive_widgets --format=json
*
* @when after_wp_load
*/
public function get( $args, $assoc_args ) {
global $wp_registered_sidebars;

Utils\wp_register_unused_sidebar();

$id = $args[0];

if ( ! isset( $wp_registered_sidebars[ $id ] ) ) {
WP_CLI::error( "Sidebar '{$id}' does not exist." );
}
Comment thread
swissspidy marked this conversation as resolved.
Outdated

$formatter = new Formatter( $assoc_args, $this->fields );
$formatter->display_item( $wp_registered_sidebars[ $id ] );
}

/**
* Check if a sidebar exists.
*
* ## OPTIONS
*
* <id>
* : The sidebar ID.
*
* ## EXAMPLES
*
* $ wp sidebar exists sidebar-1
* $ wp sidebar exists wp_inactive_widgets && echo "exists"
*
* @when after_wp_load
*/
public function exists( $args ) {
global $wp_registered_sidebars;

Utils\wp_register_unused_sidebar();

if ( isset( $wp_registered_sidebars[ $args[0] ] ) ) {
WP_CLI::halt( 0 );
}
Comment thread
swissspidy marked this conversation as resolved.
Outdated

WP_CLI::halt( 1 );
}
Comment on lines +87 to +159

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The logic for loading registered sidebars (global $wp_registered_sidebars; and Utils\wp_register_unused_sidebar();) is duplicated across the list_, get, and exists methods. To improve maintainability and adhere to the DRY (Don't Repeat Yourself) principle, I recommend extracting this logic into a private helper method. This way, if the sidebar loading mechanism changes in the future, you'll only need to update it in one place.

	private function get_registered_sidebars() {
		global $wp_registered_sidebars;

		Utils\wp_register_unused_sidebar();

		return $wp_registered_sidebars;
	}

	/**
	 * Get details about a specific sidebar.
	 *
	 * ## OPTIONS
	 *
	 * <id>
	 * : The sidebar ID.
	 *
	 * [--fields=<fields>]
	 * : Limit the output to specific object fields.
	 *
	 * [--format=<format>]
	 * : Render output in a particular format.
	 * ---
	 * default: table
	 * options:
	 *   - table
	 *   - json
	 *   - yaml
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 *     $ wp sidebar get sidebar-1
	 *     $ wp sidebar get wp_inactive_widgets --format=json
	 *
	 * @when after_wp_load
	 */
	public function get( $args, $assoc_args ) {
		$wp_registered_sidebars = $this->get_registered_sidebars();

		$id = $args[0];

		if ( ! isset( $wp_registered_sidebars[ $id ] ) ) {
			WP_CLI::error( "Sidebar '{$id}' does not exist." );
		}

		$formatter = new Formatter( $assoc_args, $this->fields );
		$formatter->display_item( $wp_registered_sidebars[ $id ] );
	}

	/**
	 * Check if a sidebar exists.
	 *
	 * ## OPTIONS
	 *
	 * <id>
	 * : The sidebar ID.
	 *
	 * ## EXAMPLES
	 *
	 *     $ wp sidebar exists sidebar-1
	 *     $ wp sidebar exists wp_inactive_widgets && echo "exists"
	 *
	 * @when after_wp_load
	 */
	public function exists( $args ) {
		$wp_registered_sidebars = $this->get_registered_sidebars();

		if ( isset( $wp_registered_sidebars[ $args[0] ] ) ) {
			WP_CLI::halt( 0 );
		}

		WP_CLI::halt( 1 );
	}

}
Loading