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