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