PluginProbe ʕ •ᴥ•ʔ
MainWP Child Reports / 2.3.1
MainWP Child Reports v2.3.1
0.0.1 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9.1 1.9.2 1.9.3 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.1 2.1.1 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.3 2.3.1 trunk
mainwp-child-reports / classes / class-cli.php
mainwp-child-reports / classes Last commit date
class-admin.php 3 months ago class-author.php 3 months ago class-cli.php 3 months ago class-connector.php 3 months ago class-connectors.php 3 months ago class-date-interval.php 3 months ago class-db-driver-wpdb.php 2 months ago class-db-driver.php 3 months ago class-db.php 3 months ago class-export.php 3 months ago class-exporter.php 3 months ago class-filter-input.php 3 months ago class-form-generator.php 3 months ago class-install.php 3 months ago class-list-table.php 3 months ago class-live-update.php 3 months ago class-log.php 2 months ago class-mainwp-child-report-helper.php 3 months ago class-network.php 3 months ago class-plugin.php 3 months ago class-preview-list-table.php 3 months ago class-query.php 3 months ago class-record.php 3 months ago class-settings.php 3 months ago class-uninstall.php 3 months ago
class-cli.php
249 lines
1 <?php
2 /**
3 * Stream command for WP-CLI
4 *
5 * @see https://github.com/wp-cli/wp-cli
6 */
7
8 namespace WP_MainWP_Stream;
9
10 // Exit if accessed directly.
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit;
13 }
14
15 /**
16 * Class CLI.
17 * @package WP_MainWP_Stream
18 */
19 class CLI extends \WP_CLI_Command {
20
21 /**
22 * Query a set of Stream records.
23 *
24 * ## OPTIONS
25 *
26 * [--fields=<fields>]
27 * : Limit the output to specific object fields.
28 *
29 * [--<field>=<value>]
30 * : One or more args to pass to WP_MainWP_Stream_Query.
31 *
32 * [--format=<format>]
33 * : Accepted values: table, count, json, json_pretty, csv. Default: table
34 *
35 * ## AVAILABLE FIELDS TO QUERY
36 *
37 * You can build a query from these fields:
38 *
39 * * user_id
40 * * user_id__in
41 * * user_id__not_in
42 * * user_role
43 * * user_role__in
44 * * user_role__not_in
45 * * date
46 * * date_from
47 * * date_to
48 * * date_after
49 * * date_before
50 * * ip
51 * * ip__in
52 * * ip__not_in
53 * * connector
54 * * connector__in
55 * * connector__not_in
56 * * context
57 * * context__in
58 * * context__not_in
59 * * action
60 * * action__in
61 * * action__not_in
62 * * search
63 * * search_field
64 * * record
65 * * record__in
66 * * record__not_in
67 * * records_per_page
68 * * paged
69 * * order
70 * * orderby
71 *
72 * ## AVAILABLE FIELDS
73 *
74 * These fields will be displayed by default for each post:
75 *
76 * * created
77 * * ip
78 * * user_id
79 * * user_role
80 * * summary
81 *
82 * These fields are optionally available:
83 *
84 * * ID
85 * * site_id
86 * * blog_id
87 * * object_id
88 * * connector
89 * * context
90 * * action
91 *
92 * ## EXAMPLES
93 *
94 * wp stream query --user_role__not_in=administrator --date_after=2015-01-01T12:00:00
95 * wp stream query --user_id=1 --action=login --records_per_page=50 --fields=created
96 *
97 * @see WP_MainWP_Stream_Query
98 * @see https://github.com/wp-stream/stream/wiki/WP-CLI-Command
99 * @see https://github.com/wp-stream/stream/wiki/Query-Reference
100 *
101 * @param array $args Query arguments.
102 * @param array $assoc_args Association arguments.
103 *
104 * @uses \WP_MainWP_Stream\CLI::connection()
105 */
106 public function query( $args, $assoc_args ) {
107 unset( $args );
108
109 $query_args = array();
110 $formatted_records = array();
111
112 $this->connection();
113
114 if ( empty( $assoc_args['fields'] ) ) {
115 $fields = array(
116 'created',
117 'ip',
118 'user_id',
119 'user_role',
120 'summary',
121 );
122 } else {
123 $fields = explode( ',', $assoc_args['fields'] );
124 }
125
126 foreach ( $assoc_args as $key => $value ) {
127 if ( 'format' === $key ) {
128 continue;
129 }
130
131 $query_args[ $key ] = $value;
132 }
133
134 $query_args['fields'] = implode( ',', $fields );
135
136 $records = wp_mainwp_stream_get_instance()->db->query( $query_args );
137
138 // Make structure Formatter compatible
139 foreach ( (array) $records as $key => $record ) {
140 $formatted_records[ $key ] = array();
141
142 // Catch any fields missing in records
143 foreach ( $fields as $field ) {
144 if ( ! array_key_exists( $field, $record ) ) {
145 $record->$field = null;
146 }
147 }
148
149 foreach ( $record as $field_name => $field ) {
150
151 $formatted_records[ $key ] = array_merge(
152 $formatted_records[ $key ],
153 $this->format_field( $field_name, $field )
154 );
155 }
156 }
157
158 if ( isset( $assoc_args['format'] ) && 'table' !== $assoc_args['format'] ) {
159 if ( 'count' === $assoc_args['format'] ) {
160 \WP_CLI::line( count( $records ) );
161 }
162
163 if ( 'json' === $assoc_args['format'] ) {
164 \WP_CLI::line( wp_mainwp_stream_json_encode( $formatted_records ) );
165 }
166
167 if ( 'json_pretty' === $assoc_args['format'] ) {
168 if ( version_compare( PHP_VERSION, '5.4', '<' ) ) {
169 \WP_CLI::line( wp_mainwp_stream_json_encode( $formatted_records ) ); // xss ok
170 } else {
171 \WP_CLI::line( wp_mainwp_stream_json_encode( $formatted_records, JSON_PRETTY_PRINT ) ); // xss ok
172 }
173 }
174
175 if ( 'csv' === $assoc_args['format'] ) {
176 \WP_CLI::line( $this->csv_format( $formatted_records ) );
177 }
178
179 return;
180 }
181
182 $formatter = new \WP_CLI\Formatter(
183 $assoc_args,
184 $fields
185 );
186
187 $formatter->display_items( $formatted_records );
188 }
189
190 /**
191 * Convert any field to a flat array.
192 *
193 * @param string $name The output array element name
194 * @param mixed $object Any value to be converted to an array
195 *
196 * @return array The flat array
197 */
198 private function format_field( $name, $object ) {
199 $array = array();
200
201 if ( is_object( $object ) ) {
202 foreach ( $object as $key => $property ) {
203 $array = array_merge( $array, $this->format_field( $name . '.' . $key, $property ) );
204 }
205 } elseif ( is_array( $object ) ) {
206 $array[ $name ] = $object[0];
207 } else {
208 $array[ $name ] = $object;
209 }
210
211 return $array;
212 }
213
214 /**
215 * Convert an array of flat records to CSV
216 *
217 * @param array $array The input array of records
218 *
219 * @return string The CSV output
220 */
221 private function csv_format( $array ) {
222 $output = fopen( 'php://output', 'w' ); // @codingStandardsIgnoreLine Clever output for WP CLI using php://output
223
224 foreach ( $array as $line ) {
225 fputcsv( $output, $line ); // @codingStandardsIgnoreLine
226 }
227
228 fclose( $output ); // @codingStandardsIgnoreLine
229 }
230
231 /**
232 * Checks for a Stream connection and displays an error or success message.
233 *
234 * @return void
235 */
236 private function connection() {
237 $query = wp_mainwp_stream_get_instance()->db->query(
238 array(
239 'records_per_page' => 1,
240 'fields' => 'created',
241 )
242 );
243
244 if ( ! $query ) {
245 \WP_CLI::error( esc_html__( 'SITE IS DISCONNECTED', 'mainwp-child-reports' ) );
246 }
247 }
248 }
249