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
mainwp / class / class-mainwp-wp-cli-command.php

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

659 lines 28.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 }
659