Enumerate.php 3.01 KB
Newer Older
cyrille's avatar
cyrille committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
<?php
/**
 * Addon List class file
 *
 * @package LifterLMS/CLI
 *
 * @since 0.0.1
 * @version 0.0.1
 */

namespace LifterLMS\CLI\Commands\AddOn;

use WP_CLI\Formatter;

/**
 * AddOn List command
 *
 * "List" is a php reserved keyword, so we enumerate instead.
 *
 * @since 0.0.1
 *
 * @link https://www.php.net/manual/en/reserved.keywords.php
 */
trait Enumerate {

	/**
	 * Gets a list of add-ons.
	 *
	 * Displays a list of add-ons with their activation status,
	 * license status, current version, update availability, etc...
	 *
	 * ## OPTIONS
	 *
	 * [--<field>=<value>]
	 * : Filter results based on the value of a field.
	 *
	 * [--field=<field>]
	 * : Prints the value of a single field for each add-on.
	 *
	 * [--fields=<fields>]
	 * : Limit the output to only the specified fields. Use "all" to display all available fields.
	 *
	 * [--format=<format>]
	 * : Render output in a particular format.
	 * ---
	 * default: table
	 * options:
	 *   - table
	 *   - csv
	 *   - count
	 *   - json
	 *   - yaml
	 * ---
	 *
	 * ## AVAILABLE FIELDS
	 *
	 * These fields will be displayed by default for each add-on:
	 *
	 * * name
	 * * status
	 * * update
	 * * version
	 *
	 * These fields are optionally available:
	 *
	 * * update_version
	 * * license
	 * * title
	 * * channel
	 * * type
	 * * file
	 *
	 * ## EXAMPLES
	 *
	 *     # List all add-ons.
	 *     $ wp llms addon list
	 *
	 *     # List all add-ons in JSON format.
	 *     $ wp llms addon list --format=json
	 *
	 *     # List all add-ons by name only.
	 *     $ wp llms addon list --field=name
	 *
	 *     # List all add-ons with all available fields.
	 *     $ wp llms addon list --fields=all
	 *
	 *     # List all add-ons with a custom fields list.
	 *     $ wp llms addon list --fields=title,status,version
	 *
	 *     # List currently activated add-ons.
	 *     $ wp llms addon list --status=active
	 *
	 *     # List all theme add-ons.
	 *     $ wp llms addon list --type=theme
	 *
	 *     # List all add-ons with available updates.
	 *     $ wp llms addon list --update=available
	 *
	 *     # List all add-ons licensed on the site.
	 *     $ wp llms addon list --license=active
	 *
	 * @since 0.0.1
	 *
	 * @param array $args       Indexed array of positional command arguments.
	 * @param array $assoc_args Associative array of command options.
	 * @return null
	 */
	public function list( $args, $assoc_args ) {

		$fields     = array( 'name', 'status', 'update', 'version' );
		$all_fields = array_merge( $fields, array( 'update_version', 'license', 'title', 'channel', 'type', 'file' ) );

		// Determine if there's a user filter submitted through`--<field>=<value>`.
		$filter_field = array_values( array_intersect( $all_fields, array_keys( $assoc_args ) ) );

		$list = $this->get_filtered_items( $assoc_args, ! empty( $filter_field ) ? $filter_field[0] : '' );

		if ( ! empty( $assoc_args['fields'] ) && 'all' === $assoc_args['fields'] ) {
			$assoc_args['fields'] = $all_fields;
		}

		$formatter = new Formatter( $assoc_args, $fields );
		return $formatter->display_items( $list );

	}

}