PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 4.4.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v4.4.1
6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 5.2.1 5.2.2 5.3 All 153 releases
mainwp / class / class-mainwp-wp-cli-command.php

class-mainwp-wp-cli-command.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 4.4.1, at class/class-mainwp-wp-cli-command.php

861 lines 32.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MainWP-CLI
4 *
5 * This file extends the WP-CLI and provides a set of SubCommands to Control your
6 * Child Sites that are added to the MainWP Dashboard.
7 *
8 * @todo: allow to add or remove child sites
9 * @package MainWP/Dashboard
10 */
11
12 namespace MainWP\Dashboard;
13
14 // Exit if access directly.
15 if ( ! defined( 'WP_CLI' ) ) {
16 return;
17 }
18
19 /**
20 * Class MainWP_WP_CLI_Command
21 *
22 * Manage all child sites added to the MainWP Dashboard.
23 *
24 * @package MainWP\Dashboard
25 */
26 class MainWP_WP_CLI_Command extends \WP_CLI_Command {
27
28 /**
29 * Method init()
30 *
31 * Initiate the MainWP CLI after all Plugins have loaded.
32 */
33 public static function init() {
34 add_action( 'plugins_loaded', array( self::class, 'init_wpcli_commands' ), 99999 );
35 }
36
37 /**
38 * Method init_wpcli_commands
39 *
40 * Adds the MainWP WP CLI Commands via WP_CLI::add_command
41 */
42 public static function init_wpcli_commands() {
43 \WP_CLI::add_command( 'mainwp', self::class );
44 }
45
46 /**
47 * List information about added child sites.
48 *
49 * ## OPTIONS
50 *
51 * [--list]
52 * : Get a list of all child sites
53 *
54 * [--count]
55 * : If set, count child sites.
56 *
57 *
58 * ## EXAMPLES
59 *
60 * wp mainwp sites --list
61 * wp mainwp sites --all-sites-count
62 *
63 * ## Synopsis [--list] [--all-sites-count]
64 *
65 * @param array $args Function arguments.
66 * @param array $assoc_args Function associate arguments.
67 *
68 * @uses \MainWP\Dashboard\MainWP_DB::query()
69 * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
70 * @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
71 * @uses \MainWP\Dashboard\MainWP_DB::free_result()
72 * @uses \MainWP\Dashboard\MainWP_DB::data_seek()
73 */
74 public function sites( $args, $assoc_args ) {
75
76 // support new mainwp sites cli commands.
77 $handle = MainWP_WP_CLI_Handle::get_assoc_args_commands( 'sites', $assoc_args );
78 if ( ! empty( $handle ) ) {
79 MainWP_WP_CLI_Handle::handle_cli_callback( 'sites', $args, $assoc_args );
80 return;
81 }
82
83 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
84
85 $idLength = strlen( 'id' );
86 $nameLength = strlen( 'name' );
87 $urlLength = strlen( 'url' );
88 $versionLength = strlen( 'version' );
89 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
90 if ( $idLength < strlen( $website->id ) ) {
91 $idLength = strlen( $website->id );
92 }
93 if ( $nameLength < strlen( $website->name ) ) {
94 $nameLength = strlen( $website->name );
95 }
96 if ( $urlLength < strlen( $website->url ) ) {
97 $urlLength = strlen( $website->url );
98 }
99 if ( $versionLength < strlen( $website->version ) ) {
100 $versionLength = strlen( $website->version );
101 }
102 }
103 MainWP_DB::data_seek( $websites, 0 );
104
105 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $urlLength + 2 ) . "s+%'--" . ( $versionLength + 2 ) . 's+', '', '', '', '' ) );
106 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $urlLength . 's | %-' . $versionLength . 's |', 'id', 'name', 'url', 'version' ) );
107 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $urlLength + 2 ) . "s+%'--" . ( $versionLength + 2 ) . 's+', '', '', '', '' ) );
108
109 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
110 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $urlLength . 's | %-' . $versionLength . 's |', $website->id, $website->name, $website->url, $website->version ) );
111 }
112
113 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $urlLength + 2 ) . "s+%'--" . ( $versionLength + 2 ) . 's+', '', '', '', '' ) );
114 MainWP_DB::free_result( $websites );
115 }
116
117 /**
118 * Site commands.
119 *
120 * ## OPTIONS
121 *
122 * [--site]
123 * : Get site data
124 *
125 * [--site-info]
126 * : If set, get site info.
127 *
128 *
129 * ## EXAMPLES
130 *
131 * wp mainwp site --site [<websiteid>]
132 * wp mainwp site --site-info [<websiteid>]
133 *
134 * ## Synopsis [--site] [--site-info] [...]
135 *
136 * @param array $args Function arguments.
137 * @param array $assoc_args Function associate arguments.
138 */
139 public function site( $args, $assoc_args ) {
140 MainWP_WP_CLI_Handle::handle_cli_callback( 'site', $args, $assoc_args );
141 }
142
143
144 /**
145 * Updates commands.
146 *
147 * ## OPTIONS
148 *
149 * [--available-updates <websiteid>]
150 * : Get available updates
151 *
152 * [--ignored-plugins-updates <websiteid>]
153 * : If set, get ignored plugins updates.
154 *
155 * [--site-ignored-plugins-updates <websiteid>]
156 * : If set, get ignored plugins updates of site.
157 *
158 * [--ignored-themes-updates <websiteid>]
159 * : If set, get ignored themes updates.
160 *
161 * [--site-ignored-themes-updates <websiteid>]
162 * : If set, get ignored themes updates of site.
163 *
164 * [--ignore-updates --type=[type] --slug=[slug]]
165 * : If set, ignored updates.
166 *
167 * [--ignore-update <websiteid> --type=[type] --slug=[slug]]
168 * : If set, ignored update.
169 *
170 * [--unignore-updates --type=[type] --slug=[slug]]
171 * : If set, unignore updates.
172 *
173 * [--unignore-update <websiteid> --type=[type] --slug=[slug]]
174 * : If set, unignore update.
175 *
176 *
177 * ## EXAMPLES
178 *
179 * wp mainwp updates --available-updates
180 * wp mainwp updates --ignored-plugins-updates
181 * wp mainwp updates --site-ignored-plugins-updates 3
182 *
183 * ## Synopsis [--available-updates] [--ignored-plugins-updates] [--site-ignored-plugins-updates] [...]
184 *
185 * @param array $args Function arguments.
186 * @param array $assoc_args Function associate arguments.
187 */
188 public function updates( $args, $assoc_args ) {
189 MainWP_WP_CLI_Handle::handle_cli_callback( 'updates', $args, $assoc_args );
190 }
191
192 /**
193 * Sync Data with Child Sites
194 *
195 * ## OPTIONS
196 *
197 * [<websiteid>]
198 * : The id (or ids, comma separated) of the child sites that need to be synced.
199 *
200 * [--all]
201 * : If set, all child sites will be synced.
202 *
203 * ## EXAMPLES
204 *
205 * wp mainwp sync 2,5
206 * wp mainwp sync --all
207 *
208 * ## Synopsis [<websiteid>] [--all]
209 *
210 * @param array $args Function arguments.
211 * @param array $assoc_args Function associate arguments.
212 *
213 * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_console_error_message()
214 * @uses \MainWP\Dashboard\MainWP_DB::query()
215 * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
216 * @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
217 * @uses \MainWP\Dashboard\MainWP_DB::free_result()
218 * @uses \MainWP\Dashboard\MainWP_Sync::sync_site()
219 */
220 public function sync( $args, $assoc_args ) {
221 $sites = array();
222 if ( count( $args ) > 0 ) {
223 $args_exploded = explode( ',', $args[0] );
224 foreach ( $args_exploded as $arg ) {
225 if ( ! is_numeric( trim( $arg ) ) ) {
226 \WP_CLI::error( 'Child site ids should be numeric.' );
227 }
228
229 $sites[] = trim( $arg );
230 }
231 }
232
233 if ( is_array( $assoc_args ) && isset( $assoc_args['all'] ) ) {
234 update_option( 'mainwp_last_synced_all_sites', time() );
235 }
236
237 if ( ( count( $sites ) == 0 ) && ( ! isset( $assoc_args['all'] ) ) ) {
238 \WP_CLI::error( 'Please specify one or more child sites, or use --all.' );
239 }
240 MainWP_WP_CLI_Handle::handle_sync_sites( $args, $assoc_args );
241 }
242
243 /**
244 * Reconnect with Child Sites
245 *
246 * ## OPTIONS
247 *
248 * [<websiteid>]
249 * : The id (or ids, comma separated) of the child sites that need to be reconnect.
250 *
251 * ## EXAMPLES
252 *
253 * wp mainwp reconnect 2,5
254 *
255 * ## Synopsis [<websiteid>]
256 *
257 * @param array $args Function arguments.
258 * @param array $assoc_args Function associate arguments.
259 *
260 * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_console_error_message()
261 * @uses \MainWP\Dashboard\MainWP_DB::query()
262 * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
263 * @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
264 * @uses \MainWP\Dashboard\MainWP_DB::free_result()
265 * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::m_reconnect_site()
266 */
267 public function reconnect( $args, $assoc_args ) {
268 $sites = array();
269 if ( 0 < count( $args ) ) {
270 $args_exploded = explode( ',', $args[0] );
271 foreach ( $args_exploded as $arg ) {
272 if ( ! is_numeric( trim( $arg ) ) ) {
273 \WP_CLI::error( 'Child site ids should be numeric.' );
274 }
275
276 $sites[] = trim( $arg );
277 }
278 }
279
280 if ( count( $sites ) == 0 ) {
281 \WP_CLI::error( 'Please specify one or more child sites.' );
282 }
283
284 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
285 \WP_CLI::line( 'Reconnect started' );
286 $warnings = 0;
287 $errors = 0;
288 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
289 if ( ( 0 < count( $sites ) ) && ( ! in_array( $website->id, $sites, true ) ) ) {
290 continue;
291 }
292 \WP_CLI::line( ' -> ' . $website->name . ' (' . $website->url . ')' );
293 try {
294 if ( MainWP_Manage_Sites_View::m_reconnect_site( $website ) ) {
295 \WP_CLI::success( ' Reconnected successfully' );
296 } else {
297 \WP_CLI::warning( ' Reconnect failed' );
298 $warnings++;
299 }
300 } catch ( \Exception $e ) {
301 \WP_CLI::error( ' Reconnect failed: ' . MainWP_Error_Helper::get_console_error_message( $e ) );
302 $errors++;
303 }
304 }
305 MainWP_DB::free_result( $websites );
306 if ( 0 < $errors ) {
307 \WP_CLI::error( 'Reconnect completed with errors' );
308 } elseif ( 0 < $warnings ) {
309 \WP_CLI::warning( 'Reconnect completed with warnings' );
310 } else {
311 \WP_CLI::success( 'Reconnect completed' );
312 }
313 }
314
315
316 /**
317 * List information about plugin updates
318 *
319 * ## OPTIONS
320 *
321 * [<websiteid>]
322 * : The id (or ids, comma separated) of the child sites that need to be listed/upgraded, when omitted all childsites are used.
323 *
324 * [--list]
325 * : Get a list of plugins with available updates
326 *
327 * [--list-all]
328 * : List all plugins
329 *
330 * [--upgrade=<pluginslug>]
331 * : Update the plugin slugs
332 *
333 * [--upgrade-all]
334 * : Update all plugins
335 *
336 * ## EXAMPLES
337 *
338 * wp mainwp plugin 2,5 --list
339 * wp mainwp plugin --list
340 * wp mainwp plugin 2,5 --list-all
341 * wp mainwp plugin 2,5 --upgrade-all
342 * wp mainwp plugin 2,5 --upgrade=mainwpchild
343 *
344 * ## Synopsis [<websiteid>] [--list] [--list-all] [--upgrade=<pluginslug>] [--upgrade-all]
345 *
346 * @param array $args Function arguments.
347 * @param array $assoc_args Function associate arguments.
348 *
349 * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension()
350 * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_console_error_message()
351 * @uses \MainWP\Dashboard\MainWP_DB::query()
352 * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
353 * @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
354 * @uses \MainWP\Dashboard\MainWP_Updates_Handler::upgrade_plugin_theme_translation()
355 * @uses \MainWP\Dashboard\MainWP_Utility::value_to_string()
356 */
357 public function plugin( $args, $assoc_args ) { // phpcs:ignore -- Current complexity is the only way to achieve desired results, pull request solutions appreciated.
358 $sites = array();
359 if ( 0 < count( $args ) ) {
360 $args_exploded = explode( ',', $args[0] );
361 foreach ( $args_exploded as $arg ) {
362 if ( ! is_numeric( trim( $arg ) ) ) {
363 \WP_CLI::error( 'Child site IDs should be numeric.' );
364 }
365
366 $sites[] = trim( $arg );
367 }
368 }
369
370 if ( isset( $assoc_args['list'] ) ) {
371 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
372 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
373 $websites_to_upgrade = array();
374 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
375 if ( ( count( $sites ) > 0 ) && ( ! in_array( $website->id, $sites, true ) ) ) {
376 continue;
377 }
378
379 $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
380
381 if ( is_array( $plugin_upgrades ) ) {
382 $ignored_plugins = json_decode( $website->ignored_plugins, true );
383 if ( is_array( $ignored_plugins ) ) {
384 $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
385 }
386
387 $ignored_plugins = json_decode( $userExtension->ignored_plugins, true );
388 if ( is_array( $ignored_plugins ) ) {
389 $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
390 }
391
392 $tmp = array();
393 foreach ( $plugin_upgrades as $plugin_upgrade ) {
394 $tmp[] = array(
395 'name' => $plugin_upgrade['update']['slug'],
396 'version' => $plugin_upgrade['Version'],
397 'new_version' => $plugin_upgrade['update']['new_version'],
398 );
399 }
400 $websites_to_upgrade[] = array(
401 'id' => $website->id,
402 'name' => $website->name,
403 'plugins' => $tmp,
404 );
405 }
406 }
407
408 $idLength = strlen( 'id' );
409 $nameLength = strlen( 'name' );
410 $pluginLength = strlen( 'plugin' );
411 $oldVersionLength = strlen( 'version' );
412 $newVersionLength = strlen( 'new version' );
413 foreach ( $websites_to_upgrade as $website_to_upgrade ) {
414 if ( $idLength < strlen( $website_to_upgrade['id'] ) ) {
415 $idLength = strlen( $website_to_upgrade['id'] );
416 }
417 if ( $nameLength < strlen( $website_to_upgrade['name'] ) ) {
418 $nameLength = strlen( $website_to_upgrade['name'] );
419 }
420
421 foreach ( $website_to_upgrade['plugins'] as $plugin_to_upgrade ) {
422 if ( $pluginLength < strlen( $plugin_to_upgrade['name'] ) ) {
423 $pluginLength = strlen( $plugin_to_upgrade['name'] );
424 }
425 if ( $oldVersionLength < strlen( $plugin_to_upgrade['version'] ) ) {
426 $oldVersionLength = strlen( $plugin_to_upgrade['version'] );
427 }
428 if ( $newVersionLength < strlen( $plugin_to_upgrade['new_version'] ) ) {
429 $newVersionLength = strlen( $plugin_to_upgrade['new_version'] );
430 }
431 }
432 }
433
434 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $pluginLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . "s+%'--" . ( $newVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
435 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $pluginLength . 's | %-' . $oldVersionLength . 's | %-' . $newVersionLength . 's |', 'id', 'name', 'plugin', 'version', 'new version' ) );
436 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $pluginLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . "s+%'--" . ( $newVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
437
438 foreach ( $websites_to_upgrade as $website_to_upgrade ) {
439 if ( $idLength < strlen( $website_to_upgrade['id'] ) ) {
440 $idLength = strlen( $website_to_upgrade['id'] );
441 }
442 if ( $nameLength < strlen( $website_to_upgrade['name'] ) ) {
443 $nameLength = strlen( $website_to_upgrade['name'] );
444 }
445
446 $i = 0;
447 foreach ( $website_to_upgrade['plugins'] as $plugin_to_upgrade ) {
448 if ( 0 == $i ) {
449 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $pluginLength . 's | %-' . $oldVersionLength . 's | %-' . $newVersionLength . 's |', $website_to_upgrade['id'], $website_to_upgrade['name'], $plugin_to_upgrade['name'], $plugin_to_upgrade['version'], $plugin_to_upgrade['new_version'] ) );
450 } else {
451 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $pluginLength . 's | %-' . $oldVersionLength . 's | %-' . $newVersionLength . 's |', '', '', $plugin_to_upgrade['name'], $plugin_to_upgrade['version'], $plugin_to_upgrade['new_version'] ) );
452 }
453 $i++;
454 }
455 }
456
457 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $pluginLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . "s+%'--" . ( $newVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
458 } elseif ( isset( $assoc_args['list-all'] ) ) {
459 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
460 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
461 $websites_to_list = array();
462 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
463 if ( ( 0 < count( $sites ) ) && ( ! in_array( $website->id, $sites, true ) ) ) {
464 continue;
465 }
466
467 $plugins_to_list = json_decode( $website->plugins, true );
468 if ( is_array( $plugins_to_list ) ) {
469 $tmp = array();
470 foreach ( $plugins_to_list as $plugin ) {
471 $tmp[] = array(
472 'name' => $plugin['slug'],
473 'version' => $plugin['version'],
474 );
475 }
476 $websites_to_list[] = array(
477 'id' => $website->id,
478 'name' => $website->name,
479 'plugins' => $tmp,
480 );
481 }
482 }
483
484 $idLength = strlen( 'id' );
485 $nameLength = strlen( 'name' );
486 $pluginLength = strlen( 'plugin' );
487 $oldVersionLength = strlen( 'version' );
488 foreach ( $websites_to_list as $website_item ) {
489 if ( $idLength < strlen( $website_item['id'] ) ) {
490 $idLength = strlen( $website_item['id'] );
491 }
492 if ( $nameLength < strlen( $website_item['name'] ) ) {
493 $nameLength = strlen( $website_item['name'] );
494 }
495
496 foreach ( $website_item['plugins'] as $plugin_item ) {
497 if ( $pluginLength < strlen( $plugin_item['name'] ) ) {
498 $pluginLength = strlen( $plugin_item['name'] );
499 }
500 if ( $oldVersionLength < strlen( $plugin_item['version'] ) ) {
501 $oldVersionLength = strlen( $plugin_item['version'] );
502 }
503 }
504 }
505
506 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $pluginLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . 's+', '', '', '', '' ) );
507 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $pluginLength . 's | %-' . $oldVersionLength . 's |', 'id', 'name', 'plugin', 'version' ) );
508 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $pluginLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . 's+', '', '', '', '' ) );
509
510 foreach ( $websites_to_list as $website_item ) {
511 if ( $idLength < strlen( $website_item['id'] ) ) {
512 $idLength = strlen( $website_item['id'] );
513 }
514 if ( $nameLength < strlen( $website_item['name'] ) ) {
515 $nameLength = strlen( $website_item['name'] );
516 }
517
518 $i = 0;
519 foreach ( $website_item['plugins'] as $plugin_item ) {
520 if ( 0 == $i ) {
521 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $pluginLength . 's | %-' . $oldVersionLength . 's |', $website_item['id'], $website_item['name'], $plugin_item['name'], $plugin_item['version'] ) );
522 } else {
523 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $pluginLength . 's | %-' . $oldVersionLength . 's |', '', '', $plugin_item['name'], $plugin_item['version'] ) );
524 }
525 $i++;
526 }
527 }
528
529 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $pluginLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . 's+', '', '', '', '' ) );
530 } elseif ( isset( $assoc_args['upgrade'] ) || isset( $assoc_args['upgrade-all'] ) ) {
531
532 $pluginSlugs = array();
533 if ( isset( $assoc_args['upgrade'] ) ) {
534 $pluginSlugs = explode( ',', $assoc_args['upgrade'] );
535 }
536
537 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
538 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
539 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
540 if ( ( count( $sites ) > 0 ) && ( ! in_array( $website->id, $sites, true ) ) ) {
541 continue;
542 }
543
544 $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
545
546 if ( is_array( $plugin_upgrades ) ) {
547 $ignored_plugins = json_decode( $website->ignored_plugins, true );
548 if ( is_array( $ignored_plugins ) ) {
549 $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
550 }
551
552 $ignored_plugins = json_decode( $userExtension->ignored_plugins, true );
553 if ( is_array( $ignored_plugins ) ) {
554 $plugin_upgrades = array_diff_key( $plugin_upgrades, $ignored_plugins );
555 }
556
557 $tmp = array();
558 foreach ( $plugin_upgrades as $key => $plugin_upgrade ) {
559 if ( ( count( $pluginSlugs ) > 0 ) && ( ! in_array( $plugin_upgrade['update']['slug'], $pluginSlugs, true ) ) ) {
560 continue;
561 }
562
563 $tmp[] = $key;
564 }
565
566 if ( count( $tmp ) == 0 ) {
567 \WP_CLI::line( 'No available plugin updates for ' . $website->name );
568
569 continue;
570 }
571
572 \WP_CLI::line( 'Updating ' . count( $tmp ) . ' plugins for ' . $website->name );
573
574 try {
575 MainWP_Updates_Handler::upgrade_plugin_theme_translation( $website->id, 'plugin', implode( ',', $tmp ) );
576 \WP_CLI::success( 'Updates completed' );
577 } catch ( \Exception $e ) {
578 \WP_CLI::error( 'Updates failed: ' . MainWP_Error_Helper::get_console_error_message( $e ) );
579 if ( $e->getMesage() == 'WPERROR' ) {
580 \WP_CLI::debug( 'Error: ' . MainWP_Utility::value_to_string( $e->get_message_extra(), 1 ) );
581 }
582 }
583 }
584 }
585 }
586 }
587
588 /**
589 * List information about theme updates
590 *
591 * ## OPTIONS
592 *
593 * [<websiteid>]
594 * : The id (or ids, comma separated) of the child sites that need to be listed/upgraded, when omitted all childsites are used.
595 *
596 * [--list]
597 * : Get a list of themes with available updates
598 *
599 * [--list-all]
600 * : list all themes
601 *
602 * [--upgrade=<theme>]
603 * : Update the themes
604 *
605 * [--upgrade-all]
606 * : Update all themes
607 *
608 * ## EXAMPLES
609 *
610 * wp mainwp theme 2,5 --list
611 * wp mainwp theme --list
612 * wp mainwp theme 2,5 --upgrade-all
613 * wp mainwp theme 2,5 --upgrade=twentysixteen
614 *
615 * ## Synopsis [<websiteid>] [--list] [--list-all] [--upgrade=<theme>] [--upgrade-all]
616 *
617 * @param array $args Function arguments.
618 * @param array $assoc_args Function associate arguments.
619 *
620 * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension()
621 * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_console_error_message()
622 * @uses \MainWP\Dashboard\MainWP_DB::query()
623 * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
624 * @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
625 * @uses \MainWP\Dashboard\MainWP_Updates_Handler::upgrade_plugin_theme_translation()
626 * @uses \MainWP\Dashboard\MainWP_Utility::value_to_string()
627 */
628 public function theme( $args, $assoc_args ) { // phpcs:ignore -- Current complexity is the only way to achieve desired results, pull request solutions appreciated.
629 $sites = array();
630 if ( count( $args ) > 0 ) {
631 $args_exploded = explode( ',', $args[0] );
632 foreach ( $args_exploded as $arg ) {
633 if ( ! is_numeric( trim( $arg ) ) ) {
634 \WP_CLI::error( 'Child site IDs should be numeric.' );
635 }
636
637 $sites[] = trim( $arg );
638 }
639 }
640
641 if ( isset( $assoc_args['list'] ) ) {
642 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
643 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
644 $websites_to_upgrade = array();
645 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
646 if ( ( count( $sites ) > 0 ) && ( ! in_array( $website->id, $sites, true ) ) ) {
647 continue;
648 }
649
650 $theme_upgrades = json_decode( $website->theme_upgrades, true );
651
652 if ( is_array( $theme_upgrades ) ) {
653 $ignored_themes = json_decode( $website->ignored_themes, true );
654 if ( is_array( $ignored_themes ) ) {
655 $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
656 }
657
658 $ignored_themes = json_decode( $userExtension->ignored_themes, true );
659 if ( is_array( $ignored_themes ) ) {
660 $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
661 }
662
663 $tmp = array();
664 foreach ( $theme_upgrades as $theme_upgrade ) {
665 $tmp[] = array(
666 'name' => $theme_upgrade['update']['theme'],
667 'version' => $theme_upgrade['Version'],
668 'new_version' => $theme_upgrade['update']['new_version'],
669 );
670 }
671 $websites_to_upgrade[] = array(
672 'id' => $website->id,
673 'name' => $website->name,
674 'themes' => $tmp,
675 );
676 }
677 }
678
679 $idLength = strlen( 'id' );
680 $nameLength = strlen( 'name' );
681 $themeLength = strlen( 'theme' );
682 $oldVersionLength = strlen( 'version' );
683 $newVersionLength = strlen( 'new version' );
684 foreach ( $websites_to_upgrade as $website_to_upgrade ) {
685 if ( $idLength < strlen( $website_to_upgrade['id'] ) ) {
686 $idLength = strlen( $website_to_upgrade['id'] );
687 }
688 if ( $nameLength < strlen( $website_to_upgrade['name'] ) ) {
689 $nameLength = strlen( $website_to_upgrade['name'] );
690 }
691
692 foreach ( $website_to_upgrade['themes'] as $theme_to_upgrade ) {
693 if ( $themeLength < strlen( $theme_to_upgrade['name'] ) ) {
694 $themeLength = strlen( $theme_to_upgrade['name'] );
695 }
696 if ( $oldVersionLength < strlen( $theme_to_upgrade['version'] ) ) {
697 $oldVersionLength = strlen( $theme_to_upgrade['version'] );
698 }
699 if ( $newVersionLength < strlen( $theme_to_upgrade['new_version'] ) ) {
700 $newVersionLength = strlen( $theme_to_upgrade['new_version'] );
701 }
702 }
703 }
704
705 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $themeLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . "s+%'--" . ( $newVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
706 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $themeLength . 's | %-' . $oldVersionLength . 's | %-' . $newVersionLength . 's |', 'id', 'name', 'theme', 'version', 'new version' ) );
707 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $themeLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . "s+%'--" . ( $newVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
708
709 foreach ( $websites_to_upgrade as $website_to_upgrade ) {
710 if ( $idLength < strlen( $website_to_upgrade['id'] ) ) {
711 $idLength = strlen( $website_to_upgrade['id'] );
712 }
713 if ( $nameLength < strlen( $website_to_upgrade['name'] ) ) {
714 $nameLength = strlen( $website_to_upgrade['name'] );
715 }
716
717 $i = 0;
718 foreach ( $website_to_upgrade['themes'] as $theme_to_upgrade ) {
719 if ( 0 == $i ) {
720 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $themeLength . 's | %-' . $oldVersionLength . 's | %-' . $newVersionLength . 's |', $website_to_upgrade['id'], $website_to_upgrade['name'], $theme_to_upgrade['name'], $theme_to_upgrade['version'], $theme_to_upgrade['new_version'] ) );
721 } else {
722 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $themeLength . 's | %-' . $oldVersionLength . 's | %-' . $newVersionLength . 's |', '', '', $theme_to_upgrade['name'], $theme_to_upgrade['version'], $theme_to_upgrade['new_version'] ) );
723 }
724 $i++;
725 }
726 }
727
728 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $themeLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . "s+%'--" . ( $newVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
729 } elseif ( isset( $assoc_args['list-all'] ) ) {
730 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
731 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
732 $websites_to_upgrade = array();
733 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
734 if ( ( count( $sites ) > 0 ) && ( ! in_array( $website->id, $sites, true ) ) ) {
735 continue;
736 }
737 $theme_to_list = json_decode( $website->themes, true );
738 if ( is_array( $theme_to_list ) ) {
739 $tmp = array();
740 foreach ( $theme_to_list as $theme ) {
741 $tmp[] = array(
742 'name' => $theme['name'],
743 'active' => $theme['active'] ? 'yes' : '',
744 'version' => $theme['version'],
745 );
746 }
747 $websites_to_upgrade[] = array(
748 'id' => $website->id,
749 'name' => $website->name,
750 'themes' => $tmp,
751 );
752 }
753 }
754
755 $idLength = strlen( 'id' );
756 $nameLength = strlen( 'name' );
757 $themeLength = strlen( 'theme' );
758 $oldVersionLength = strlen( 'version' );
759 $activeLength = strlen( 'active' );
760 foreach ( $websites_to_upgrade as $website_item ) {
761 if ( $idLength < strlen( $website_item['id'] ) ) {
762 $idLength = strlen( $website_item['id'] );
763 }
764 if ( $nameLength < strlen( $website_item['name'] ) ) {
765 $nameLength = strlen( $website_item['name'] );
766 }
767
768 foreach ( $website_item['themes'] as $theme_item ) {
769 if ( $themeLength < strlen( $theme_item['name'] ) ) {
770 $themeLength = strlen( $theme_item['name'] );
771 }
772 if ( $oldVersionLength < strlen( $theme_item['version'] ) ) {
773 $oldVersionLength = strlen( $theme_item['version'] );
774 }
775 }
776 }
777
778 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $themeLength + 2 ) . "s+%'--" . ( $activeLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
779 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $themeLength . 's | %-' . $activeLength . 's | %-' . $oldVersionLength . 's |', 'id', 'name', 'theme', 'active', 'version' ) );
780 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $themeLength + 2 ) . "s+%'--" . ( $activeLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
781
782 foreach ( $websites_to_upgrade as $website_item ) {
783 if ( $idLength < strlen( $website_item['id'] ) ) {
784 $idLength = strlen( $website_item['id'] );
785 }
786 if ( $nameLength < strlen( $website_item['name'] ) ) {
787 $nameLength = strlen( $website_item['name'] );
788 }
789
790 $i = 0;
791 foreach ( $website_item['themes'] as $theme_item ) {
792 if ( 0 == $i ) {
793 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $themeLength . 's | %-' . $activeLength . 's | %-' . $oldVersionLength . 's |', $website_item['id'], $website_item['name'], $theme_item['name'], $theme_item['active'], $theme_item['version'] ) );
794 } else {
795 \WP_CLI::line( sprintf( '| %-' . $idLength . 's | %-' . $nameLength . 's | %-' . $themeLength . 's | %-' . $activeLength . 's | %-' . $oldVersionLength . 's |', '', '', $theme_item['name'], $theme_item['active'], $theme_item['version'] ) );
796 }
797 $i++;
798 }
799 }
800
801 \WP_CLI::line( sprintf( "+%'--" . ( $idLength + 2 ) . "s+%'--" . ( $nameLength + 2 ) . "s+%'--" . ( $themeLength + 2 ) . "s+%'--" . ( $activeLength + 2 ) . "s+%'--" . ( $oldVersionLength + 2 ) . 's+', '', '', '', '', '' ) );
802 } elseif ( isset( $assoc_args['upgrade'] ) || isset( $assoc_args['upgrade-all'] ) ) {
803
804 $themeSlugs = array();
805 if ( isset( $assoc_args['upgrade'] ) ) {
806 $themeSlugs = explode( ',', $assoc_args['upgrade'] );
807 }
808
809 $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, true ) );
810 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
811 while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
812 if ( ( count( $sites ) > 0 ) && ( ! in_array( $website->id, $sites, true ) ) ) {
813 continue;
814 }
815
816 $theme_upgrades = json_decode( $website->theme_upgrades, true );
817
818 if ( is_array( $theme_upgrades ) ) {
819 $ignored_themes = json_decode( $website->ignored_themes, true );
820 if ( is_array( $ignored_themes ) ) {
821 $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
822 }
823
824 $ignored_themes = json_decode( $userExtension->ignored_themes, true );
825 if ( is_array( $ignored_themes ) ) {
826 $theme_upgrades = array_diff_key( $theme_upgrades, $ignored_themes );
827 }
828
829 $tmp = array();
830 foreach ( $theme_upgrades as $key => $theme_upgrade ) {
831 if ( ( count( $themeSlugs ) > 0 ) && ( ! in_array( $theme_upgrade['update']['slug'], $themeSlugs, true ) ) ) {
832 continue;
833 }
834
835 $tmp[] = $key;
836 }
837
838 if ( count( $tmp ) == 0 ) {
839 \WP_CLI::line( 'No available theme updates for ' . $website->name );
840
841 continue;
842 }
843
844 \WP_CLI::line( 'Updating ' . count( $tmp ) . ' themes for ' . $website->name );
845
846 try {
847 MainWP_Updates_Handler::upgrade_plugin_theme_translation( $website->id, 'theme', implode( ',', $tmp ) );
848 \WP_CLI::success( 'Updates completed' );
849 } catch ( \Exception $e ) {
850 \WP_CLI::error( 'Updates failed: ' . MainWP_Error_Helper::get_console_error_message( $e ) );
851 if ( $e->getMesage() == 'WPERROR' ) {
852 \WP_CLI::debug( 'Error: ' . MainWP_Utility::value_to_string( $e->get_message_extra(), 1 ) );
853 }
854 }
855 }
856 }
857 }
858 }
859
860 }
861