PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.2.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.2.1
6.2.3 6.2.2 6.2.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 All 156 releases
← All changes | widgets/widget-mainwp-updates-overview.php +797 -553 5.2.1 → 6.2.1 View file →
@@ -8,8 +8,14 @@
8 8 */
9 9
10 10 namespace MainWP\Dashboard;
11 11
12 +// Exit if accessed directly.
13 +if ( ! defined( 'ABSPATH' ) ) {
14 + exit;
15 +}
16 +
17 +
12 18 /**
13 19 * Class MainWP_Updates_Overview
14 20 *
15 21 * @package MainWP\Dashboard
@@ -119,19 +125,19 @@
119 125 * @global string
120 126 */
121 127 global $current_user;
122 128
123 - $current_wpid = MainWP_System_Utility::get_current_wpid();
129 + $current_wpid = (int) MainWP_System_Utility::get_current_wpid();
130 + $is_staging = 'no';
124 131
125 132 if ( $current_wpid ) {
126 - $sql = MainWP_DB::instance()->get_sql_website_by_id( $current_wpid, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ) );
133 + $sql = MainWP_DB::instance()->get_sql_website_by_id( $current_wpid, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'ignored_trans_updates', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ) );
127 134 $globalView = false;
128 135 } else {
129 136 $staging_enabled = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) || is_plugin_active( 'mainwp-timecapsule-extension/mainwp-timecapsule-extension.php' );
130 137 // To support staging extension.
131 - $is_staging = 'no';
132 138 if ( $staging_enabled ) {
133 - $staging_updates_view = MainWP_System_Utility::get_staging_options_sites_view_for_current_users();
139 + $staging_updates_view = MainWP_System_Utility::get_select_staging_view_sites();
134 140 if ( 'staging' === $staging_updates_view ) {
135 141 $is_staging = 'yes';
136 142 }
137 143 }
@@ -136,24 +142,16 @@
136 142 }
137 143 }
138 144 // end support.
139 145
140 - $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ), $is_staging );
146 + $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'ignored_trans_updates', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ), $is_staging, array( 'connected' => 'yes' ) );
141 147 }
142 148
143 149 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
144 - $websites = MainWP_DB::instance()->query( $sql );
145 150
146 151 $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
152 + $count_websites = 0;
147 153
148 - $decodedDismissedPlugins = ! empty( $userExtension->dismissed_plugins ) ? json_decode( $userExtension->dismissed_plugins, true ) : array();
149 - $decodedDismissedThemes = ! empty( $userExtension->dismissed_themes ) ? json_decode( $userExtension->dismissed_themes, true ) : array();
150 - $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array();
151 -
152 - if ( ! is_array( $decodedIgnoredCores ) ) {
153 - $decodedIgnoredCores = array();
154 - }
155 -
156 154 $total_wp_upgrades = 0;
157 155 $total_plugin_upgrades = 0;
158 156 $total_translation_upgrades = 0;
159 157 $total_theme_upgrades = 0;
@@ -160,190 +158,217 @@
160 158
161 159 $total_plugins_outdate = 0;
162 160 $total_themes_outdate = 0;
163 161
164 - $all_wp_updates = array();
165 - $all_plugins_updates = array();
166 - $all_themes_updates = array();
167 - $all_translations_updates = array();
162 + $sites_ids = array();
168 163
169 - MainWP_DB::data_seek( $websites, 0 );
170 -
171 164 $currentSite = null;
172 165
173 - while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
174 - if ( ! $globalView ) {
175 - $currentSite = $website;
176 - }
166 + $count_plugins = 0;
167 + $count_themes = 0;
177 168
178 - $pluginsIgnoredAbandoned_perSites = array();
179 - $themesIgnoredAbandoned_perSites = array();
169 + $cache_overview = array();
170 + $use_cached = false;
180 171
181 - $wp_upgrades = ! empty( $website->wp_upgrades ) ? json_decode( $website->wp_upgrades, true ) : array();
182 - $ignored_core_upgrades = ! empty( $website->ignored_wp_upgrades ) ? json_decode( $website->ignored_wp_upgrades, true ) : array();
172 + $cache_group = '';
173 + if ( $globalView ) {
174 + $count_websites = MainWP_DB::instance()->get_websites_count();
175 + $cache_group = MainWP_Cache_Helper::CGR_UPDATES;
176 + $cache_key = MainWP_Cache_Helper::get_cache_key( 'updates_overview', $cache_group, array( 'staging' => $is_staging ) );
177 + $cache_overview = MainWP_Cache_Helper::instance()->get_cache(
178 + $cache_key,
179 + $cache_group
180 + );
181 + }
183 182
184 - if ( $website->is_ignoreCoreUpdates || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $ignored_core_upgrades, 'core' ) || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $decodedIgnoredCores, 'core' ) ) {
185 - $wp_upgrades = array();
186 - }
183 + if ( ! empty( $cache_overview ) && is_array( $cache_overview ) ) {
184 + $use_cached = true;
185 + $total_wp_upgrades = isset( $cache_overview['total_wp_upgrades'] ) ? intval( $cache_overview['total_wp_upgrades'] ) : 0;
186 + $total_plugin_upgrades = isset( $cache_overview['total_plugin_upgrades'] ) ? intval( $cache_overview['total_plugin_upgrades'] ) : 0;
187 + $total_translation_upgrades = isset( $cache_overview['total_translation_upgrades'] ) ? intval( $cache_overview['total_translation_upgrades'] ) : 0;
188 + $total_theme_upgrades = isset( $cache_overview['total_theme_upgrades'] ) ? intval( $cache_overview['total_theme_upgrades'] ) : 0;
187 189
188 - if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) {
189 - ++$total_wp_upgrades;
190 - $all_wp_updates[] = array(
191 - 'id' => $website->id,
192 - 'name' => $website->name,
193 - );
194 - }
190 + $count_plugins = isset( $cache_overview['count_plugins'] ) ? intval( $cache_overview['count_plugins'] ) : 0;
191 + $count_themes = isset( $cache_overview['count_themes'] ) ? intval( $cache_overview['count_themes'] ) : 0;
195 192
196 - $translation_upgrades = ! empty( $website->translation_upgrades ) ? json_decode( $website->translation_upgrades, true ) : array();
193 + $total_plugins_outdate = isset( $cache_overview['total_plugins_outdate'] ) ? intval( $cache_overview['total_plugins_outdate'] ) : 0;
194 + $total_themes_outdate = isset( $cache_overview['total_themes_outdate'] ) ? intval( $cache_overview['total_themes_outdate'] ) : 0;
197 195
198 - $plugin_upgrades = ! empty( $website->plugin_upgrades ) ? json_decode( $website->plugin_upgrades, true ) : array();
199 -
200 - if ( $website->is_ignorePluginUpdates ) {
201 - $plugin_upgrades = array();
196 + $sites_ids = isset( $cache_overview['sites_ids'] ) && is_array( $cache_overview['sites_ids'] ) ? $cache_overview['sites_ids'] : array();
197 + } else {
198 + $decodedDismissedPlugins = ! empty( $userExtension->dismissed_plugins ) ? json_decode( $userExtension->dismissed_plugins, true ) : array();
199 + $decodedDismissedThemes = ! empty( $userExtension->dismissed_themes ) ? json_decode( $userExtension->dismissed_themes, true ) : array();
200 + $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array();
201 + if ( ! is_array( $decodedIgnoredCores ) ) {
202 + $decodedIgnoredCores = array();
202 203 }
204 + }
203 205
204 - $theme_upgrades = ! empty( $website->theme_upgrades ) ? json_decode( $website->theme_upgrades, true ) : array();
205 - if ( $website->is_ignoreThemeUpdates ) {
206 - $theme_upgrades = array();
207 - }
206 + if ( ! $globalView || ! $use_cached ) {
207 + $websites = MainWP_DB::instance()->query( $sql );
208 + MainWP_DB::data_seek( $websites, 0 );
209 + while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
210 + if ( ! $globalView ) {
211 + $currentSite = $website;
212 + }
208 213
209 - $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
210 - $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array();
214 + $sites_ids[] = $website->id;
211 215
212 - if ( is_array( $decodedPremiumUpgrades ) ) {
213 - foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
214 - $premiumUpgrade['premium'] = true;
216 + $count_plugins += ! empty( $website->plugins ) ? count( json_decode( $website->plugins, true ) ) : 0;
217 + $count_themes += ! empty( $website->themes ) ? count( json_decode( $website->themes, true ) ) : 0;
215 218
216 - if ( 'plugin' === $premiumUpgrade['type'] ) {
217 - if ( ! is_array( $plugin_upgrades ) ) {
218 - $plugin_upgrades = array();
219 - }
220 - if ( ! $website->is_ignorePluginUpdates ) {
219 + $pluginsIgnoredAbandoned_perSites = array();
220 + $themesIgnoredAbandoned_perSites = array();
221 221
222 - $premiumUpgrade = array_filter( $premiumUpgrade );
223 - if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
224 - $plugin_upgrades[ $crrSlug ] = array();
225 - }
222 + $wp_upgrades = ! empty( $website->wp_upgrades ) ? json_decode( $website->wp_upgrades, true ) : array();
223 + $ignored_core_upgrades = ! empty( $website->ignored_wp_upgrades ) ? json_decode( $website->ignored_wp_upgrades, true ) : array();
226 224
227 - $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
228 - }
229 - } elseif ( 'theme' === $premiumUpgrade['type'] ) {
230 - if ( ! is_array( $theme_upgrades ) ) {
231 - $theme_upgrades = array();
232 - }
233 - if ( ! $website->is_ignoreThemeUpdates ) {
234 - $theme_upgrades[ $crrSlug ] = $premiumUpgrade;
235 - }
236 - }
225 + if ( $website->is_ignoreCoreUpdates || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $ignored_core_upgrades, 'core' ) || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $decodedIgnoredCores, 'core' ) ) {
226 + $wp_upgrades = array();
237 227 }
238 - }
239 228
240 - if ( is_array( $translation_upgrades ) ) {
229 + if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) {
230 + ++$total_wp_upgrades;
231 + }
241 232
242 - $total_translation_upgrades += count( $translation_upgrades );
233 + $translation_upgrades = ! empty( $website->translation_upgrades ) ? json_decode( $website->translation_upgrades, true ) : array();
243 234
244 - if ( ! empty( $translation_upgrades ) ) {
245 - foreach ( $translation_upgrades as $trans_upgrade ) {
246 - $slug = $trans_upgrade['slug'];
247 - $all_translations_updates[] = array(
248 - 'id' => $website->id,
249 - 'name' => $website->name,
250 - 'translation_slug' => $slug,
251 - );
252 - }
235 + if ( ! empty( $website->ignored_trans_updates ) ) {
236 + $translation_upgrades = array();
253 237 }
254 - }
255 238
256 - if ( is_array( $plugin_upgrades ) ) {
257 - $ignored_plugins = ! empty( $website->ignored_plugins ) ? json_decode( $website->ignored_plugins, true ) : array();
258 - if ( is_array( $ignored_plugins ) ) {
259 - $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
239 + $plugin_upgrades = ! empty( $website->plugin_upgrades ) ? json_decode( $website->plugin_upgrades, true ) : array();
260 240
241 + if ( $website->is_ignorePluginUpdates ) {
242 + $plugin_upgrades = array();
261 243 }
262 244
263 - $ignored_plugins = ! empty( $userExtension->ignored_plugins ) ? json_decode( $userExtension->ignored_plugins, true ) : array();
264 - if ( is_array( $ignored_plugins ) ) {
265 - $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
245 + $theme_upgrades = ! empty( $website->theme_upgrades ) ? json_decode( $website->theme_upgrades, true ) : array();
246 + if ( $website->is_ignoreThemeUpdates ) {
247 + $theme_upgrades = array();
248 + }
266 249
267 - }
250 + $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
251 + $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array();
268 252
269 - $total_plugin_upgrades += count( $plugin_upgrades );
253 + if ( is_array( $decodedPremiumUpgrades ) ) {
254 + foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
255 + $premiumUpgrade['premium'] = true;
270 256
271 - if ( ! empty( $plugin_upgrades ) ) {
272 - foreach ( $plugin_upgrades as $slug => $value ) {
273 - $all_plugins_updates[] = array(
274 - 'id' => $website->id,
275 - 'name' => $website->name,
276 - 'plugin_slug' => $slug,
277 - );
257 + if ( 'plugin' === $premiumUpgrade['type'] ) {
258 + if ( ! is_array( $plugin_upgrades ) ) {
259 + $plugin_upgrades = array();
260 + }
261 + if ( ! $website->is_ignorePluginUpdates ) {
262 +
263 + $premiumUpgrade = array_filter( $premiumUpgrade );
264 + if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
265 + continue;
266 + }
267 +
268 + $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
269 + }
270 + } elseif ( 'theme' === $premiumUpgrade['type'] ) {
271 + if ( ! is_array( $theme_upgrades ) ) {
272 + $theme_upgrades = array();
273 + }
274 + if ( ! $website->is_ignoreThemeUpdates ) {
275 + $theme_upgrades[ $crrSlug ] = $premiumUpgrade;
276 + }
277 + }
278 278 }
279 279 }
280 - }
281 280
282 - if ( is_array( $theme_upgrades ) ) {
283 - $ignored_themes = ! empty( $website->ignored_themes ) ? json_decode( $website->ignored_themes, true ) : array();
284 - if ( is_array( $ignored_themes ) ) {
285 - $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
281 + if ( is_array( $translation_upgrades ) ) {
282 + $total_translation_upgrades += count( $translation_upgrades );
286 283 }
287 284
288 - $ignored_themes = ! empty( $userExtension->ignored_themes ) ? json_decode( $userExtension->ignored_themes, true ) : array();
289 - if ( is_array( $ignored_themes ) ) {
290 - $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
291 - }
285 + if ( is_array( $plugin_upgrades ) ) {
286 + $ignored_plugins = ! empty( $website->ignored_plugins ) ? json_decode( $website->ignored_plugins, true ) : array();
287 + if ( is_array( $ignored_plugins ) ) {
288 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
292 289
293 - $total_theme_upgrades += count( $theme_upgrades );
290 + }
294 291
295 - if ( ! empty( $theme_upgrades ) ) {
296 - foreach ( $theme_upgrades as $slug => $value ) {
297 - $all_themes_updates[] = array(
298 - 'id' => $website->id,
299 - 'name' => $website->name,
300 - 'theme_slug' => $slug,
301 - );
292 + $ignored_plugins = ! empty( $userExtension->ignored_plugins ) ? json_decode( $userExtension->ignored_plugins, true ) : array();
293 + if ( is_array( $ignored_plugins ) ) {
294 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
295 +
302 296 }
297 +
298 + $total_plugin_upgrades += count( $plugin_upgrades );
303 299 }
304 - }
305 300
306 - $pluginsIgnoredAbandoned_perSites = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' );
307 - $pluginsIgnoredAbandoned_perSites = ! empty( $pluginsIgnoredAbandoned_perSites ) ? json_decode( $pluginsIgnoredAbandoned_perSites, true ) : array();
308 - if ( is_array( $pluginsIgnoredAbandoned_perSites ) ) {
309 - $pluginsIgnoredAbandoned_perSites = array_filter( $pluginsIgnoredAbandoned_perSites );
310 - }
301 + if ( is_array( $theme_upgrades ) ) {
302 + $ignored_themes = ! empty( $website->ignored_themes ) ? json_decode( $website->ignored_themes, true ) : array();
303 + if ( is_array( $ignored_themes ) ) {
304 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
305 + }
311 306
312 - $themesIgnoredAbandoned_perSites = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' );
313 - $themesIgnoredAbandoned_perSites = ! empty( $themesIgnoredAbandoned_perSites ) ? json_decode( $themesIgnoredAbandoned_perSites, true ) : array();
314 - if ( is_array( $themesIgnoredAbandoned_perSites ) ) {
315 - $themesIgnoredAbandoned_perSites = array_filter( $themesIgnoredAbandoned_perSites );
316 - }
307 + $ignored_themes = ! empty( $userExtension->ignored_themes ) ? json_decode( $userExtension->ignored_themes, true ) : array();
308 + if ( is_array( $ignored_themes ) ) {
309 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
310 + }
317 311
318 - $plugins_outdate = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_info' );
319 - $plugins_outdate = ! empty( $plugins_outdate ) ? json_decode( $plugins_outdate, true ) : array();
312 + $total_theme_upgrades += count( $theme_upgrades );
313 + }
320 314
321 - $themes_outdate = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_info' );
322 - $themes_outdate = ! empty( $themes_outdate ) ? json_decode( $themes_outdate, true ) : array();
323 -
324 - if ( is_array( $plugins_outdate ) ) {
315 + $pluginsIgnoredAbandoned_perSites = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' );
316 + $pluginsIgnoredAbandoned_perSites = ! empty( $pluginsIgnoredAbandoned_perSites ) ? json_decode( $pluginsIgnoredAbandoned_perSites, true ) : array();
325 317 if ( is_array( $pluginsIgnoredAbandoned_perSites ) ) {
326 - $plugins_outdate = array_diff_key( $plugins_outdate, $pluginsIgnoredAbandoned_perSites );
318 + $pluginsIgnoredAbandoned_perSites = array_filter( $pluginsIgnoredAbandoned_perSites );
327 319 }
328 320
329 - if ( is_array( $decodedDismissedPlugins ) ) {
330 - $plugins_outdate = array_diff_key( $plugins_outdate, $decodedDismissedPlugins );
321 + $themesIgnoredAbandoned_perSites = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' );
322 + $themesIgnoredAbandoned_perSites = ! empty( $themesIgnoredAbandoned_perSites ) ? json_decode( $themesIgnoredAbandoned_perSites, true ) : array();
323 + if ( is_array( $themesIgnoredAbandoned_perSites ) ) {
324 + $themesIgnoredAbandoned_perSites = array_filter( $themesIgnoredAbandoned_perSites );
331 325 }
332 326
333 - $total_plugins_outdate += count( $plugins_outdate );
334 - }
327 + $plugins_outdate = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_info' );
328 + $plugins_outdate = ! empty( $plugins_outdate ) ? json_decode( $plugins_outdate, true ) : array();
335 329
336 - if ( is_array( $themes_outdate ) ) {
337 - if ( is_array( $themesIgnoredAbandoned_perSites ) ) {
338 - $themes_outdate = array_diff_key( $themes_outdate, $themesIgnoredAbandoned_perSites );
330 + $themes_outdate = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_info' );
331 + $themes_outdate = ! empty( $themes_outdate ) ? json_decode( $themes_outdate, true ) : array();
332 +
333 + if ( is_array( $plugins_outdate ) ) {
334 + if ( is_array( $pluginsIgnoredAbandoned_perSites ) ) {
335 + $plugins_outdate = array_diff_key( $plugins_outdate, $pluginsIgnoredAbandoned_perSites );
336 + }
337 +
338 + if ( is_array( $decodedDismissedPlugins ) ) {
339 + $plugins_outdate = array_diff_key( $plugins_outdate, $decodedDismissedPlugins );
340 + }
341 +
342 + $total_plugins_outdate += count( $plugins_outdate );
339 343 }
340 344
341 - if ( is_array( $decodedDismissedThemes ) ) {
342 - $themes_outdate = array_diff_key( $themes_outdate, $decodedDismissedThemes );
345 + if ( is_array( $themes_outdate ) ) {
346 + if ( is_array( $themesIgnoredAbandoned_perSites ) ) {
347 + $themes_outdate = array_diff_key( $themes_outdate, $themesIgnoredAbandoned_perSites );
348 + }
349 +
350 + if ( is_array( $decodedDismissedThemes ) ) {
351 + $themes_outdate = array_diff_key( $themes_outdate, $decodedDismissedThemes );
352 + }
353 +
354 + $total_themes_outdate += count( $themes_outdate );
343 355 }
356 + }
344 357
345 - $total_themes_outdate += count( $themes_outdate );
358 + if ( $globalView && ! empty( $cache_key ) ) {
359 + $data = array(
360 + 'total_wp_upgrades',
361 + 'total_plugin_upgrades',
362 + 'total_translation_upgrades',
363 + 'total_theme_upgrades',
364 + 'total_plugins_outdate',
365 + 'total_themes_outdate',
366 + 'count_plugins',
367 + 'count_themes',
368 + 'sites_ids',
369 + );
370 + MainWP_Cache_Helper::add_cache( $cache_key, $cache_group, compact( $data ) );
346 371 }
347 372 }
348 373
349 374 // WP Upgrades part.
@@ -374,9 +399,9 @@
374 399
375 400 if ( ! $globalView ) {
376 401 $last_dtsSync = $currentSite->dtsSync;
377 402 } else {
378 - $result = MainWP_DB_Common::instance()->get_last_sync_status();
403 + $result = MainWP_DB_Common::instance()->get_last_sync_status( $is_staging );
379 404 $sync_status = $result['sync_status'];
380 405 $last_sync = $result['last_sync'];
381 406 $last_dtsSync = $result['last_sync'];
382 407
@@ -386,80 +411,283 @@
386 411 }
387 412
388 413 $lastSyncMsg = '';
389 414 if ( $last_dtsSync ) {
390 - $lastSyncMsg = esc_html__( 'Last successfully completed synchronization: ', 'mainwp' ) . MainWP_Utility::format_timestamp( MainWP_Utility::get_timestamp( $last_dtsSync ) );
415 + $lastSyncMsg = esc_html__( 'Last synchronization completed on: ', 'mainwp' ) . MainWP_Utility::format_timestamp( MainWP_Utility::get_timestamp( $last_dtsSync ) );
391 416 }
392 417
393 - $user_can_update_translation = mainwp_current_user_have_right( 'dashboard', 'update_translations' );
394 - $user_can_update_wordpress = mainwp_current_user_have_right( 'dashboard', 'update_wordpress' );
395 - $user_can_update_themes = mainwp_current_user_have_right( 'dashboard', 'update_themes' );
396 - $user_can_update_plugins = mainwp_current_user_have_right( 'dashboard', 'update_plugins' );
418 + $user_can_update_translation = \mainwp_current_user_can( 'dashboard', 'update_translations' );
419 + $user_can_update_wordpress = \mainwp_current_user_can( 'dashboard', 'update_wordpress' );
420 + $user_can_update_themes = \mainwp_current_user_can( 'dashboard', 'update_themes' );
421 + $user_can_update_plugins = \mainwp_current_user_can( 'dashboard', 'update_plugins' );
397 422
398 423 $can_total_update = ( $user_can_update_wordpress && $user_can_update_plugins && $user_can_update_themes && $user_can_update_translation ) ? true : false;
399 424
400 - static::render_total_update( $total_upgrades, $lastSyncMsg, $can_total_update, $limit_updates_all );
401 - echo '<div class="mainwp-scrolly-overflow">';
402 - static::render_wordpress_update( $user_can_update_wordpress, $total_wp_upgrades, $globalView, $current_wpid );
403 - static::render_plugins_update( $user_can_update_plugins, $total_plugin_upgrades, $globalView, $current_wpid );
404 - static::render_themes_update( $user_can_update_themes, $total_theme_upgrades, $globalView, $current_wpid );
405 - if ( 1 === (int) $mainwp_show_language_updates ) {
406 - static::render_language_update( $user_can_update_translation, $total_translation_upgrades, $globalView, $current_wpid );
407 - }
425 + static::render_updates_overview_widget_header( $lastSyncMsg );
426 + ?>
427 + <div class="mainwp-scrolly-overflow">
408 428
409 - /**
410 - * Action: mainwp_updates_overview_after_update_details
411 - *
412 - * Fires at the bottom of the Update Details section in the Updates Overview widget.
413 - *
414 - * @since 4.1
415 - */
416 - do_action( 'mainwp_updates_overview_after_update_details', $currentSite, $globalView, $userExtension );
429 + <div class="ui small cards mainwp-cards">
417 430
418 - static::render_abandoned_plugins( $total_plugins_outdate, $globalView, $current_wpid );
419 - static::render_abandoned_themes( $total_themes_outdate, $globalView, $current_wpid );
431 + <?php static::render_total_update( $total_upgrades, $can_total_update, $limit_updates_all, $count_websites, $count_plugins, $count_themes, $current_wpid ); ?>
432 + <?php static::render_wordpress_update( $user_can_update_wordpress, $total_wp_upgrades, $globalView, $current_wpid, $count_websites ); ?>
433 + <?php static::render_plugins_update( $user_can_update_plugins, $total_plugin_upgrades, $globalView, $current_wpid, $count_plugins ); ?>
434 + <?php static::render_themes_update( $user_can_update_themes, $total_theme_upgrades, $globalView, $current_wpid, $count_themes ); ?>
435 + <?php if ( 1 === (int) $mainwp_show_language_updates ) : ?>
436 + <?php static::render_language_update( $user_can_update_translation, $total_translation_upgrades, $globalView, $current_wpid ); ?>
437 + <?php endif; ?>
438 + <?php static::render_abandoned_plugins( $total_plugins_outdate, $globalView, $current_wpid, $count_plugins ); ?>
439 + <?php static::render_abandoned_themes( $total_themes_outdate, $globalView, $current_wpid, $count_themes ); ?>
420 440
421 - static::render_global_update(
422 - $user_can_update_wordpress,
423 - $total_wp_upgrades,
424 - $all_wp_updates,
425 - $user_can_update_plugins,
426 - $total_plugin_upgrades,
427 - $all_plugins_updates,
428 - $user_can_update_themes,
429 - $total_theme_upgrades,
430 - $all_themes_updates,
431 - $mainwp_show_language_updates,
432 - $user_can_update_translation,
433 - $total_translation_upgrades,
434 - $all_translations_updates
435 - );
436 - static::render_bottom( $websites, $globalView );
437 - echo '</div>';
438 - echo '<div class="ui stackable grid mainwp-widget-footer">';
439 - echo '<div class="eight wide column"></div>';
440 - echo '<div class="eight wide column"></div>';
441 - echo '</div>';
441 + <?php
442 + /**
443 + * Action: mainwp_updates_overview_after_update_details
444 + *
445 + * Fires at the bottom of the Update Details section in the Updates Overview widget.
446 + *
447 + * @since 4.1
448 + */
449 + do_action( 'mainwp_updates_overview_after_update_details', $currentSite, $globalView, $userExtension );
450 + ?>
451 +
452 + </div>
453 +
454 + </div>
455 + <div id="mainwp_prepare_global_update_all_container" style="display: none"></div>
456 + <?php
457 +
458 + static::render_bottom( $sites_ids, $globalView );
442 459 }
443 460
444 461 /**
445 - * Render total update.
462 + * Method prepare_update_data().
446 463 *
447 - * @param int $total_upgrades number of update.
448 - * @param string $lastSyncMsg last sync info.
449 - * @param bool true|false $can_total_update permission to update all.
450 - * @param int $limit_updates_all limit number of update per request, 0 is no limit.
464 + * @param string $update_type: Values all, core, plugin, theme, trans.
465 + * @param int $current_wpid Current site id.
451 466 */
452 - public static function render_total_update( $total_upgrades, $lastSyncMsg, $can_total_update, $limit_updates_all ) { // phpcs:ignore -- NOSONAR - complex.
453 - $current_wpid = MainWP_System_Utility::get_current_wpid();
454 - $globalView = true;
467 + public static function prepare_update_data( $update_type, $current_wpid ) { // phpcs:ignore -- NOSONAR - long function.
468 +
469 + $process = array(
470 + 'core' => in_array( $update_type, array( 'all', 'core' ), true ),
471 + 'plugin' => in_array( $update_type, array( 'all', 'plugin' ), true ),
472 + 'theme' => in_array( $update_type, array( 'all', 'theme' ), true ),
473 + 'trans' => in_array( $update_type, array( 'all', 'trans' ), true ),
474 + );
475 +
455 476 if ( $current_wpid ) {
456 - $globalView = false;
477 + $sql = MainWP_DB::instance()->get_sql_website_by_id( $current_wpid, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'ignored_trans_updates', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ) );
478 + } else {
479 + $staging_enabled = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) || is_plugin_active( 'mainwp-timecapsule-extension/mainwp-timecapsule-extension.php' );
480 + // To support staging extension.
481 + $is_staging = 'no';
482 + if ( $staging_enabled ) {
483 + $staging_updates_view = MainWP_System_Utility::get_select_staging_view_sites();
484 + if ( 'staging' === $staging_updates_view ) {
485 + $is_staging = 'yes';
486 + }
487 + }
488 + // end support.
489 +
490 + $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'ignored_trans_updates', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ), $is_staging, array( 'connected' => 'yes' ) );
457 491 }
492 +
493 + $userExtension = MainWP_DB_Common::instance()->get_user_extension();
494 +
495 + $total_wp_upgrades = 0;
496 + $total_plugin_upgrades = 0;
497 + $total_translation_upgrades = 0;
498 + $total_theme_upgrades = 0;
499 +
500 + $all_wp_updates = array();
501 + $all_plugins_updates = array();
502 + $all_themes_updates = array();
503 + $all_translations_updates = array();
504 +
505 + $decodedIgnoredCores = MainWP_Utility::get_decoded_array( $userExtension->ignored_wp_upgrades );
506 + $decodedIgnoredPlugins = MainWP_Utility::get_decoded_array( $userExtension->ignored_plugins );
507 + $decodedIgnoredThemes = MainWP_Utility::get_decoded_array( $userExtension->ignored_themes );
508 +
509 + $websites = MainWP_DB::instance()->query( $sql );
510 + MainWP_DB::data_seek( $websites, 0 );
511 + while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
512 +
513 + $plugin_upgrades = array();
514 + $theme_upgrades = array();
515 +
516 + if ( $process['core'] ) {
517 +
518 + $wp_upgrades = MainWP_Utility::get_decoded_array( $website->wp_upgrades );
519 + $ignored_core_upgrades = MainWP_Utility::get_decoded_array( $website->ignored_wp_upgrades );
520 +
521 + if (
522 + $website->is_ignoreCoreUpdates ||
523 + MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $ignored_core_upgrades, 'core' ) ||
524 + MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $decodedIgnoredCores, 'core' )
525 + ) {
526 + $wp_upgrades = array();
527 + }
528 +
529 + if ( ! empty( $wp_upgrades ) ) {
530 + ++$total_wp_upgrades;
531 +
532 + $all_wp_updates[] = array(
533 + 'id' => $website->id,
534 + 'name' => $website->name,
535 + 'is_suspended' => $website->suspended ? 1 : 0,
536 + );
537 + }
538 + }
539 +
540 + if ( $process['trans'] ) {
541 +
542 + $translation_upgrades = MainWP_Utility::get_decoded_array( $website->translation_upgrades );
543 +
544 + if ( ! empty( $website->ignored_trans_updates ) ) {
545 + $translation_upgrades = array();
546 + }
547 +
548 + if ( is_array( $translation_upgrades ) ) {
549 +
550 + $total_translation_upgrades += count( $translation_upgrades );
551 +
552 + foreach ( $translation_upgrades as $trans_upgrade ) {
553 + $all_translations_updates[] = array(
554 + 'id' => $website->id,
555 + 'name' => $website->name,
556 + 'translation_slug' => rawurlencode( $trans_upgrade['slug'] ),
557 + 'is_suspended' => $website->suspended ? 1 : 0,
558 + );
559 + }
560 + }
561 + }
562 +
563 + $decodedPremiumUpgrades = array();
564 +
565 + if ( $process['plugin'] || $process['theme'] ) {
566 + $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' );
567 + $decodedPremiumUpgrades = MainWP_Utility::get_decoded_array( $decodedPremiumUpgrades );
568 + }
569 +
570 + if ( $process['plugin'] ) {
571 + $plugin_upgrades = MainWP_Utility::get_decoded_array( $website->plugin_upgrades );
572 +
573 + if ( $website->is_ignorePluginUpdates ) {
574 + $plugin_upgrades = array();
575 + }
576 + if ( is_array( $decodedPremiumUpgrades ) ) {
577 + foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
578 + $premiumUpgrade['premium'] = true;
579 + if ( 'plugin' === $premiumUpgrade['type'] ) {
580 + if ( ! is_array( $plugin_upgrades ) ) {
581 + $plugin_upgrades = array();
582 + }
583 + if ( ! $website->is_ignorePluginUpdates ) {
584 +
585 + $premiumUpgrade = array_filter( $premiumUpgrade );
586 + if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) {
587 + continue;
588 + }
589 +
590 + $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade );
591 + }
592 + }
593 + }
594 + }
595 + }
596 +
597 + if ( $process['theme'] ) {
598 + $theme_upgrades = MainWP_Utility::get_decoded_array( $website->theme_upgrades );
599 + if ( $website->is_ignoreThemeUpdates ) {
600 + $theme_upgrades = array();
601 + }
602 +
603 + if ( is_array( $decodedPremiumUpgrades ) ) {
604 + foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) {
605 + $premiumUpgrade['premium'] = true;
606 + if ( 'theme' === $premiumUpgrade['type'] ) {
607 + if ( ! is_array( $theme_upgrades ) ) {
608 + $theme_upgrades = array();
609 + }
610 + if ( ! $website->is_ignoreThemeUpdates ) {
611 + $theme_upgrades[ $crrSlug ] = $premiumUpgrade;
612 + }
613 + }
614 + }
615 + }
616 + }
617 +
618 + if ( $process['plugin'] && is_array( $plugin_upgrades ) ) {
619 + $ignored_plugins = MainWP_Utility::get_decoded_array( $website->ignored_plugins );
620 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins );
621 +
622 + if ( is_array( $decodedIgnoredPlugins ) ) {
623 + $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $decodedIgnoredPlugins );
624 +
625 + }
626 +
627 + $total_plugin_upgrades += count( $plugin_upgrades );
628 +
629 + if ( ! empty( $plugin_upgrades ) ) {
630 + foreach ( $plugin_upgrades as $slug => $value ) {
631 + $all_plugins_updates[] = array(
632 + 'id' => $website->id,
633 + 'name' => $website->name,
634 + 'plugin_slug' => $slug,
635 + 'is_suspended' => $website->suspended ? 1 : 0,
636 + );
637 + }
638 + }
639 + }
640 +
641 + if ( $process['theme'] && is_array( $theme_upgrades ) ) {
642 + $ignored_themes = MainWP_Utility::get_decoded_array( $website->ignored_themes );
643 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes );
644 +
645 + if ( is_array( $decodedIgnoredThemes ) ) {
646 + $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $decodedIgnoredThemes );
647 + }
648 +
649 + $total_theme_upgrades += count( $theme_upgrades );
650 +
651 + if ( ! empty( $theme_upgrades ) ) {
652 + foreach ( $theme_upgrades as $slug => $value ) {
653 + $all_themes_updates[] = array(
654 + 'id' => $website->id,
655 + 'name' => $website->name,
656 + 'theme_slug' => $slug,
657 + 'is_suspended' => $website->suspended ? 1 : 0,
658 + );
659 + }
660 + }
661 + }
662 + }
663 +
664 + switch ( $update_type ) {
665 + case 'core':
666 + return compact( 'total_wp_upgrades', 'all_wp_updates' );
667 + case 'plugin':
668 + return compact( 'total_plugin_upgrades', 'all_plugins_updates' );
669 + case 'theme':
670 + return compact( 'total_theme_upgrades', 'all_themes_updates' );
671 + case 'trans':
672 + return compact( 'total_translation_upgrades', 'all_translations_updates' );
673 + case 'all':
674 + default:
675 + return compact( 'total_wp_upgrades', 'total_plugin_upgrades', 'total_translation_upgrades', 'total_theme_upgrades', 'all_wp_updates', 'all_plugins_updates', 'all_themes_updates', 'all_translations_updates' );
676 + }
677 + }
678 +
679 +
680 + /**
681 + * Renders Updates Overview widget header.
682 + *
683 + * @param string $lastSyncMsg last sync info.
684 + */
685 + public static function render_updates_overview_widget_header( $lastSyncMsg ) {
458 686 ?>
459 687 <div class="ui grid mainwp-widget-header">
460 688 <div class="sixteen wide column">
461 - <h3 class="ui header handle-drag">
689 + <h2 class="ui header handle-drag">
462 690 <?php
463 691 /**
464 692 * Filter: mainwp_updates_overview_widget_title
465 693 *
@@ -469,62 +697,89 @@
469 697 */
470 698 echo esc_html( apply_filters( 'mainwp_updates_overview_widget_title', esc_html__( 'Updates Overview', 'mainwp' ) ) );
471 699 ?>
472 700 <div class="sub header"><?php echo $lastSyncMsg; // phpcs:ignore WordPress.Security.EscapeOutput ?></div>
473 - </h3>
701 + </h2>
474 702 </div>
475 703 </div>
704 + <?php
705 + }
476 706
477 - <input type="hidden" name="updatesoverview_limit_updates_all" id="updatesoverview_limit_updates_all" value="<?php echo intval( $limit_updates_all ); ?>">
478 - <?php
479 - /**
480 - * Action: mainwp_updates_overview_before_total_updates
481 - *
482 - * Fires before the total updates section in the Updates Overview widget.
483 - *
484 - * @since 4.1
485 - */
486 - do_action( 'mainwp_updates_overview_before_total_updates' );
487 - ?>
488 - <div class="ui stackable grid">
707 + /**
708 + * Renders Updates Overview widget footer.
709 + */
710 + public static function render_updates_overview_widget_footer() {
711 + ?>
712 + <div class="ui two column grid mainwp-widget-footer">
713 + <div class="left aligned middle aligned column"></div>
714 + <div class="right aligned middle aligned column"></div>
715 + </div>
716 + <?php
717 + }
489 718
490 - <div class="eight wide middle aligned column">
719 + /**
720 + * Render total update.
721 + *
722 + * @param int $total_upgrades number of update.
723 + * @param bool $can_total_update permission to update all.
724 + * @param int $limit_updates_all limit number of update per request, 0 is no limit.
725 + * @param int $count_websites count websites.
726 + * @param int $count_plugins count plugins.
727 + * @param int $count_themes count themes.
728 + * @param int $current_wpid Current site id.
729 + */
730 + public static function render_total_update( $total_upgrades, $can_total_update, $limit_updates_all, $count_websites, $count_plugins, $count_themes, $current_wpid ) { // phpcs:ignore -- NOSONAR - complex.
491 731
492 - <div class="ui large statistic horizontal">
493 - <div class="value">
494 - <?php echo intval( $total_upgrades ); ?>
495 - </div>
496 - <div class="label">
497 - <?php esc_html_e( 'Total Updates', 'mainwp' ); ?>
498 - </div>
499 - </div>
500 - </div>
732 + if ( 0 < $count_plugins ) {
733 + $outdated_percentage = round( ( ( intval( $total_upgrades ) / intval( $count_themes + $count_plugins + $count_websites ) ) * 100 ), 2 ) . '%';
734 + } else {
735 + $outdated_percentage = '0.00%';
736 + }
501 737
502 - <div class="eight wide middle aligned right aligned column">
503 - <?php
504 - /**
505 - * Filter: mainwp_update_everything_button_text
506 - *
507 - * Filters the Update Everything button text.
508 - *
509 - * @since 4.1
510 - */
738 + ?>
739 + <input type="hidden" name="updatesoverview_limit_updates_all" id="updatesoverview_limit_updates_all" value="<?php echo intval( $limit_updates_all ); ?>">
740 + <?php
741 + /**
742 + * Action: mainwp_updates_overview_before_total_updates
743 + *
744 + * Fires before the total updates section in the Updates Overview widget.
745 + *
746 + * @since 4.1
747 + */
748 + do_action( 'mainwp_updates_overview_before_total_updates' );
511 749
512 - $is_demo = MainWP_Demo_Handle::is_demo_mode();
513 - ?>
514 - <?php if ( $can_total_update ) : ?>
515 - <?php
516 - if ( ! get_option( 'mainwp_hide_update_everything', false ) ) :
517 - if ( $is_demo ) {
518 - MainWP_Demo_Handle::get_instance()->render_demo_disable_button( '<a href="javascript:void(0)" class="ui big button green fluid disabled" disabled="disabled">' . esc_html( apply_filters( 'mainwp_update_everything_button_text', esc_html__( 'Update Everything', 'mainwp' ) ) ) . '</a>' );
519 - } else {
520 - ?>
521 - <a href="#" <?php echo empty( $total_upgrades ) ? 'disabled' : 'onClick="updatesoverview_global_upgrade_all( \'all\' ); return false;"'; ?> class="ui big button fluid green" id="mainwp-update-everything-button" data-tooltip="<?php $globalView ? esc_attr_e( 'Clicking this button will update all Plugins, Themes, WP Core files and translations on ALL your websites.', 'mainwp' ) : esc_attr_e( 'Clicking this button will update all Plugins, Themes, WP Core files and translations on this website.', 'mainwp' ); ?>" data-inverted="" data-position="top center"><?php echo esc_html( apply_filters( 'mainwp_update_everything_button_text', esc_html__( 'Update Everything', 'mainwp' ) ) ); ?></a>
522 - <?php } ?>
750 + /**
751 + * Filter: mainwp_update_everything_button_text
752 + *
753 + * Filters the Update Everything button text.
754 + *
755 + * @since 4.1
756 + */
757 + ?>
758 + <div class="ui card">
759 + <div class="content">
760 + <div class="header">
761 + <span class="ui large text"><i class="sync alternate icon"></i> <?php echo esc_html( MainWP_Utility::short_number_format( intval( $total_upgrades ) ) ); ?></span>
762 + <?php if ( intval( $total_upgrades ) > 0 ) : ?>
763 + <span class="ui small text">(<?php echo esc_html( $outdated_percentage ); ?>)</span>
764 + <?php else : ?>
765 + <span class="ui small text">(0%)</span>
766 + <?php endif; ?>
767 + </div>
768 + <div class="description"><?php esc_html_e( 'Available updates.', 'mainwp' ); ?></div>
769 + </div>
770 + <div class="extra content">
771 + <div class="ui grid">
772 + <div class="center aligned middle alidgned column">
773 + <?php if ( ! get_option( 'mainwp_hide_update_everything', false ) ) : ?>
774 + <?php if ( $can_total_update ) : ?>
775 + <a href="#" <?php echo empty( $total_upgrades ) ? 'disabled' : 'onClick="updatesoverview_global_upgrade_all( \'all\', ' . intval( $current_wpid ) . ' ); return false;"'; ?> class="ui mini basic green fluid button" id="mainwp-update-everything-button"><?php echo esc_html( apply_filters( 'mainwp_update_everything_button_text', esc_html__( 'Update Everything', 'mainwp' ) ) ); ?></a>
523 776 <?php endif; ?>
524 - <?php endif; ?>
777 + <?php endif; ?>
778 + </div>
525 779 </div>
526 780 </div>
781 + </div>
527 782 <?php
528 783 /**
529 784 * Action: mainwp_updates_overview_after_total_updates
530 785 *
@@ -535,35 +790,34 @@
535 790 do_action( 'mainwp_updates_overview_after_total_updates' );
536 791 }
537 792
538 793 /**
539 - * Render WordPress update details.
794 + * Renders WordPress update details.
540 795 *
541 796 * @param bool $user_can_update_wordpress Permission to update WordPress.
542 797 * @param int $total_wp_upgrades Total number of WordPress update.
543 798 * @param bool $globalView Global view or not.
544 799 * @param int $current_wpid Current site ID.
800 + * @param int $count_websites Number of sites.
545 801 *
546 802 * @uses \MainWP\Dashboard\MainWP_Updates::set_continue_update_html_selector()
547 803 * @uses \MainWP\Dashboard\MainWP_Updates::get_continue_update_selector()
548 804 */
549 - public static function render_wordpress_update( $user_can_update_wordpress, $total_wp_upgrades, $globalView, $current_wpid ) {
550 - ?>
551 - <div class="ui hidden divider"></div>
552 - <div class="ui horizontal divider">
553 - <?php
554 - /**
555 - * Filter: mainwp_updates_overview_update_details_divider
556 - *
557 - * Filters the Update Details divider text in the Updates Overview widget.
558 - *
559 - * @since 4.1
560 - */
561 - echo esc_html( apply_filters( 'mainwp_updates_overview_update_details_divider', esc_html__( 'Available Updates', 'mainwp' ) ) );
562 - ?>
563 - </div>
564 - <div class="ui hidden divider"></div>
565 - <?php
805 + public static function render_wordpress_update( $user_can_update_wordpress, $total_wp_upgrades, $globalView, $current_wpid, $count_websites ) { //phpcs:ignore -- NOSONAR - complexity.
806 + if ( 0 < $count_websites ) {
807 + $outdated_percentage = round( ( ( intval( $total_wp_upgrades ) / $count_websites ) * 100 ), 2 ) . '%';
808 + } else {
809 + $outdated_percentage = '0.00%';
810 + }
811 +
812 + $wpcore_update_disabled_by = '';
813 + if ( $globalView ) {
814 + $detail_wp_up = 'admin.php?page=UpdatesManage&tab=wordpress-updates';
815 + } else {
816 + $detail_wp_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=wordpress-updates';
817 + $wpcore_update_disabled_by = MainWP_System_Utility::disabled_wpcore_update_by( $current_wpid );
818 + }
819 +
566 820 /**
567 821 * Action: mainwp_updates_overview_before_update_details
568 822 *
569 823 * Fires at the top of the Update Details section in the Updates Overview widget.
@@ -579,62 +833,44 @@
579 833 *
580 834 * @since 4.1
581 835 */
582 836 do_action( 'mainwp_updates_overview_before_wordpress_updates' );
583 -
584 - $is_demo = MainWP_Demo_Handle::is_demo_mode();
585 837 ?>
586 - <div class="ui grid">
587 - <div class="two column row">
588 838
589 - <div class="six wide column">
590 - <div class="ui horizontal statistic">
591 - <div class="value">
592 - <?php echo intval( $total_wp_upgrades ); ?>
593 - </div>
594 - <div class="label">
595 - <?php esc_html_e( 'WordPress', 'mainwp' ); ?>
596 - </div>
597 - </div>
598 - </div>
599 -
600 - <div class="ten wide right aligned column">
601 - <div class="ui small buttons">
602 - <?php
603 - if ( $user_can_update_wordpress ) :
604 - $wpcore_update_disabled_by = '';
605 - if ( $globalView ) {
606 - $detail_wp_up = 'admin.php?page=UpdatesManage&tab=wordpress-updates';
607 - } else {
608 - $detail_wp_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=wordpress-updates';
609 - $wpcore_update_disabled_by = MainWP_System_Utility::disabled_wpcore_update_by( $current_wpid );
610 - }
611 - ?>
612 - <?php if ( 0 < $total_wp_upgrades ) : ?>
613 - <?php MainWP_Updates::set_continue_update_html_selector( 'wpcore_global_upgrade_all' ); ?>
614 - <a href="<?php echo esc_url( $detail_wp_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
615 - <?php
616 - if ( ! empty( $wpcore_update_disabled_by ) ) {
617 - ?>
618 - <span data-tooltip="<?php echo esc_html( $wpcore_update_disabled_by ); ?>" data-inverted="" data-position="left center"><a href="javascript:void(0)" class="ui button basic green disabled mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a></span>
619 - <?php
620 - } elseif ( $is_demo ) {
621 - MainWP_Demo_Handle::get_instance()->render_demo_disable_button( '<a href="javascript:void(0)" class="ui green basic button disabled mainwp-update-all-button" disabled="disabled">' . esc_html__( 'Update All', 'mainwp' ) . '</a>' );
622 - } else {
623 - ?>
624 - <a href="#" onClick="updatesoverview_global_upgrade_all('wp'); return false;" class="ui green basic button mainwp-update-all-button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>" data-tooltip="<?php esc_html_e( 'Clicking this button will update WP Core files on All your websites.', 'mainwp' ); ?>" data-inverted="" data-position="top right"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
625 - <?php
626 - }
627 - ?>
839 + <div class="ui card">
840 + <div class="content">
841 + <div class="header">
842 + <span class="ui large text"><i class="wordpress icon"></i> <?php echo esc_html( MainWP_Utility::short_number_format( intval( $total_wp_upgrades ) ) ); ?></span> <?php // keep `wordpress`. ?>
843 + <?php if ( intval( $total_wp_upgrades ) > 0 ) : ?>
844 + <span class="ui small red text">(<?php echo esc_html( $outdated_percentage ); ?>)</span>
628 845 <?php else : ?>
629 -
630 - <a href="<?php echo esc_url( $detail_wp_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
631 - <a href="#" class="ui disabled green basic button mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
632 -
846 + <span class="ui small green text">(0%)</span>
633 847 <?php endif; ?>
634 - <?php endif; ?>
635 848 </div>
849 + <div class="description"><?php esc_html_e( 'Available WordPress core updates.', 'mainwp' ); ?></div>
636 850 </div>
851 + <div class="extra content">
852 + <div class="ui two column grid">
853 + <div class="left aligned middle aligned column">
854 + <?php if ( $user_can_update_wordpress ) : ?>
855 + <?php if ( 0 < $total_wp_upgrades ) : ?>
856 + <?php MainWP_Updates::set_continue_update_html_selector( 'wpcore_global_upgrade_all' ); ?>
857 + <?php if ( ! empty( $wpcore_update_disabled_by ) ) : ?>
858 + <a href="javascript:void(0)" class="ui mini button basic green disabled mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
859 + <?php else : ?>
860 + <a href="#" onClick="updatesoverview_global_upgrade_all('wp', <?php echo intval( $current_wpid ); ?>); return false;" class="ui mini green button mainwp-update-all-button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
861 + <?php endif; ?>
862 + <?php else : ?>
863 + <a href="#" class="ui disabled green mini button mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
864 + <?php endif; ?>
865 + <?php endif; ?>
866 + </div>
867 + <div class="right aligned middle aligned column">
868 + <?php if ( 0 < $total_wp_upgrades ) : ?>
869 + <a href="<?php echo esc_url( $detail_wp_up ); ?>" class="ui mini basic button" aria-label="<?php esc_attr_e( 'View WordPress core updates details', 'mainwp' ); ?>"><?php esc_html_e( 'Details', 'mainwp' ); ?></a>
870 + <?php endif; ?>
871 + </div>
872 + </div>
637 873 </div>
638 874 </div>
639 875 <?php
640 876 /**
@@ -647,19 +883,32 @@
647 883 do_action( 'mainwp_updates_overview_after_wordpress_updates' );
648 884 }
649 885
650 886 /**
651 - * Render Plugins update detail.
887 + * Renders Plugins update detail.
652 888 *
653 - * @param bool true|false $user_can_update_plugins permission to update.
654 - * @param int $total_plugin_upgrades total number of update.
655 - * @param bool true|false $globalView global view or not.
656 - * @param int $current_wpid current site id.
889 + * @param bool $user_can_update_plugins permission to update.
890 + * @param int $total_plugin_upgrades total number of update.
891 + * @param bool $globalView global view or not.
892 + * @param int $current_wpid current site id.
893 + * @param int $count_plugins count plugin.
657 894 *
658 895 * @uses \MainWP\Dashboard\MainWP_Updates::set_continue_update_html_selector()
659 896 * @uses \MainWP\Dashboard\MainWP_Updates::get_continue_update_selector()
660 897 */
661 - public static function render_plugins_update( $user_can_update_plugins, $total_plugin_upgrades, $globalView, $current_wpid ) {
898 + public static function render_plugins_update( $user_can_update_plugins, $total_plugin_upgrades, $globalView, $current_wpid, $count_plugins ) { //phpcs:ignore -- NOSONAR - complexity.
899 + if ( 0 < $count_plugins ) {
900 + $outdated_percentage = round( ( ( intval( $total_plugin_upgrades ) / $count_plugins ) * 100 ), 2 ) . '%';
901 + } else {
902 + $outdated_percentage = '0.00%';
903 + }
904 +
905 + if ( $globalView ) {
906 + $detail_plugins_up = 'admin.php?page=UpdatesManage&tab=plugins-updates';
907 + } else {
908 + $detail_plugins_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=plugins-updates';
909 + }
910 +
662 911 /**
663 912 * Action: mainwp_updates_overview_before_plugin_updates
664 913 *
665 914 * Fires before the Plugin updates section in the Updates Overview widget.
@@ -666,58 +915,41 @@
666 915 *
667 916 * @since 4.1
668 917 */
669 918 do_action( 'mainwp_updates_overview_before_plugin_updates' );
670 - $is_demo = MainWP_Demo_Handle::is_demo_mode();
671 919 ?>
672 - <div class="ui grid">
673 - <div class="two column row">
674 - <div class="six wide column">
675 - <div class="ui horizontal statistic">
676 - <div class="value">
677 - <?php echo intval( $total_plugin_upgrades ); ?>
678 - </div>
679 - <div class="label">
680 - <?php esc_html_e( 'Plugins', 'mainwp' ); ?>
920 + <div class="ui card">
921 + <div class="content">
922 + <div class="header">
923 + <span class="ui large text"><i class="plug icon"></i> <?php echo esc_html( MainWP_Utility::short_number_format( intval( $total_plugin_upgrades ) ) ); ?></span>
924 + <?php if ( intval( $total_plugin_upgrades ) > 0 ) : ?>
925 + <span class="ui small red text">(<?php echo esc_html( $outdated_percentage ); ?>)</span>
926 + <?php else : ?>
927 + <span class="ui small green text">(0%)</span>
928 + <?php endif; ?>
929 + </div>
930 + <div class="description"><?php esc_html_e( 'Available plugin updates.', 'mainwp' ); ?></div>
931 + </div>
932 + <div class="extra content">
933 + <div class="ui two column grid">
934 + <div class="left aligned middle aligned column">
935 + <?php if ( $user_can_update_plugins ) : ?>
936 + <?php if ( ! empty( $total_plugin_upgrades ) ) : ?>
937 + <?php MainWP_Updates::set_continue_update_html_selector( 'plugins_global_upgrade_all' ); ?>
938 + <a href="#" onClick="updatesoverview_global_upgrade_all('plugin', <?php echo intval( $current_wpid ); ?>); return false;" class="ui mini green mainwp-update-all-button button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
939 + <?php else : ?>
940 + <a href="#" class="ui disabled green mini button mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
941 + <?php endif; ?>
942 + <?php endif; ?>
681 943 </div>
944 + <div class="right aligned middle aligned column">
945 + <?php if ( ! empty( $total_plugin_upgrades ) ) : ?>
946 + <a href="<?php echo esc_url( $detail_plugins_up ); ?>" class="ui mini basic button" aria-label="<?php esc_attr_e( 'View plugin updates details', 'mainwp' ); ?>"><?php esc_html_e( 'Details', 'mainwp' ); ?></a>
947 + <?php endif; ?>
682 948 </div>
683 949 </div>
684 - <div class="ten wide right aligned column">
685 - <div class="ui small buttons">
686 - <?php
687 - if ( $user_can_update_plugins ) {
688 - MainWP_Updates::set_continue_update_html_selector( 'plugins_global_upgrade_all' );
689 - if ( $globalView ) {
690 - $detail_plugins_up = 'admin.php?page=UpdatesManage&tab=plugins-updates';
691 - $update_all_tooltip = esc_html__( 'Clicking this button will update all Plugins on All your websites.', 'mainwp' );
692 - } else {
693 - $detail_plugins_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=plugins-updates';
694 - $update_all_tooltip = esc_html__( 'Clicking this button will update all Plugins on the website.', 'mainwp' );
695 - }
696 -
697 - if ( empty( $total_plugin_upgrades ) ) {
698 - ?>
699 - <a href="<?php echo esc_url( $detail_plugins_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
700 - <a href="#" class="ui disabled green basic button mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
701 - <?php
702 - } else {
703 - ?>
704 - <a href="<?php echo esc_url( $detail_plugins_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
705 - <?php
706 - if ( $is_demo ) {
707 - MainWP_Demo_Handle::get_instance()->render_demo_disable_button( '<a href="javascript:void(0)" class="ui basic green button mainwp-update-all-button disabled" disabled="disabled">' . esc_html__( 'Update All', 'mainwp' ) . '</a>' );
708 - } else {
709 - ?>
710 - <a href="#" onClick="updatesoverview_global_upgrade_all('plugin'); return false;" class="ui basic green mainwp-update-all-button button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>" data-tooltip="<?php echo esc_attr( $update_all_tooltip ); ?>" data-inverted="" data-position="top right"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
711 - <?php
712 - }
713 - }
714 - }
715 - ?>
716 - </div>
717 950 </div>
718 - </div>
719 - </div>
951 + </div>
720 952 <?php
721 953 /**
722 954 * Action: mainwp_updates_overview_after_plugin_updates
723 955 *
@@ -730,17 +962,30 @@
730 962
731 963 /**
732 964 * Render Themes update detail.
733 965 *
734 - * @param bool true|false $user_can_update_themes permission to update.
735 - * @param int $total_theme_upgrades total number of update.
736 - * @param bool true|false $globalView global view or not.
737 - * @param int $current_wpid current site id.
966 + * @param bool $user_can_update_themes permission to update.
967 + * @param int $total_theme_upgrades total number of update.
968 + * @param bool $globalView global view or not.
969 + * @param int $current_wpid current site id.
970 + * @param int $count_themes count themes.
738 971 *
739 972 * @uses \MainWP\Dashboard\MainWP_Updates::set_continue_update_html_selector()
740 973 * @uses \MainWP\Dashboard\MainWP_Updates::get_continue_update_selector()
741 974 */
742 - public static function render_themes_update( $user_can_update_themes, $total_theme_upgrades, $globalView, $current_wpid ) {
975 + public static function render_themes_update( $user_can_update_themes, $total_theme_upgrades, $globalView, $current_wpid, $count_themes ) { //phpcs:ignore -- NOSONAR - complexity.
976 + if ( 0 < $count_themes ) {
977 + $outdated_percentage = round( ( ( intval( $total_theme_upgrades ) / $count_themes ) * 100 ), 2 ) . '%';
978 + } else {
979 + $outdated_percentage = '0.00%';
980 + }
981 +
982 + if ( $globalView ) {
983 + $detail_themes_up = 'admin.php?page=UpdatesManage&tab=themes-updates';
984 + } else {
985 + $detail_themes_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=themes-updates';
986 + }
987 +
743 988 /**
744 989 * Action: mainwp_updates_overview_before_theme_updates
745 990 *
746 991 * Fires before the Theme updates section in the Updates Overview widget.
@@ -747,55 +992,41 @@
747 992 *
748 993 * @since 4.1
749 994 */
750 995 do_action( 'mainwp_updates_overview_before_theme_updates' );
751 - $is_demo = MainWP_Demo_Handle::is_demo_mode();
752 996 ?>
753 - <div class="ui grid">
754 - <div class="two column row">
755 - <div class="six wide column">
756 - <div class="ui horizontal statistic">
757 - <div class="value">
758 - <?php echo intval( $total_theme_upgrades ); ?>
997 + <div class="ui card">
998 + <div class="content">
999 + <div class="header">
1000 + <span class="ui large text"><i class="tint icon"></i> <?php echo esc_html( MainWP_Utility::short_number_format( intval( $total_theme_upgrades ) ) ); ?></span>
1001 + <?php if ( intval( $total_theme_upgrades ) > 0 ) : ?>
1002 + <span class="ui small red text">(<?php echo esc_html( $outdated_percentage ); ?>)</span>
1003 + <?php else : ?>
1004 + <span class="ui small green text">(0%)</span>
1005 + <?php endif; ?>
1006 + </div>
1007 + <div class="description"><?php esc_html_e( 'Available theme updates.', 'mainwp' ); ?></div>
1008 + </div>
1009 + <div class="extra content">
1010 + <div class="ui two column grid">
1011 + <div class="left aligned middle aligned column">
1012 + <?php if ( $user_can_update_themes ) : ?>
1013 + <?php if ( ! empty( $total_theme_upgrades ) ) : ?>
1014 + <?php MainWP_Updates::set_continue_update_html_selector( 'themes_global_upgrade_all' ); ?>
1015 + <a href="#" onClick="updatesoverview_global_upgrade_all('theme', <?php echo intval( $current_wpid ); ?>); return false;" class="ui mini green mainwp-update-all-button button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
1016 + <?php else : ?>
1017 + <a href="#" class="ui disabled green mini button mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
1018 + <?php endif; ?>
1019 + <?php endif; ?>
759 1020 </div>
760 - <div class="label">
761 - <?php esc_html_e( 'Themes', 'mainwp' ); ?>
1021 + <div class="right aligned middle aligned column">
1022 + <?php if ( ! empty( $total_theme_upgrades ) ) : ?>
1023 + <a href="<?php echo esc_url( $detail_themes_up ); ?>" class="ui mini basic button" aria-label="<?php esc_attr_e( 'View theme updates details', 'mainwp' ); ?>"><?php esc_html_e( 'Details', 'mainwp' ); ?></a>
1024 + <?php endif; ?>
762 1025 </div>
763 1026 </div>
764 1027 </div>
765 - <div class="ten wide right aligned column">
766 - <div class="ui small buttons">
767 - <?php
768 - if ( $user_can_update_themes ) {
769 - MainWP_Updates::set_continue_update_html_selector( 'themes_global_upgrade_all' );
770 - if ( $globalView ) {
771 - $detail_themes_up = 'admin.php?page=UpdatesManage&tab=themes-updates';
772 - } else {
773 - $detail_themes_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=themes-updates';
774 - }
775 - if ( empty( $total_theme_upgrades ) ) {
776 - ?>
777 - <a href="<?php echo esc_url( $detail_themes_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
778 - <a href="#" class="ui disabled green basic mainwp-update-all-button button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
779 - <?php
780 - } else {
781 - ?>
782 - <a href="<?php echo esc_url( $detail_themes_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
783 - <?php
784 - if ( $is_demo ) {
785 - MainWP_Demo_Handle::get_instance()->render_demo_disable_button( '<a href="javascript:void(0)" class="ui basic green button mainwp-update-all-button disabled" disabled="disabled">' . esc_html__( 'Update All', 'mainwp' ) . '</a>' );
786 - } else {
787 - ?>
788 - <a href="#" onClick="updatesoverview_global_upgrade_all('theme'); return false;" class="ui basic green mainwp-update-all-button button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>" data-tooltip="<?php esc_html_e( 'Clicking this button will update all Themes on All your websites.', 'mainwp' ); ?>" data-inverted="" data-position="top right"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
789 - <?php
790 - }
791 - }
792 - }
793 - ?>
794 - </div>
795 1028 </div>
796 - </div>
797 - </div>
798 1029 <?php
799 1030 /**
800 1031 * Action: mainwp_updates_overview_after_theme_updates
801 1032 *
@@ -816,8 +1047,13 @@
816 1047 * @uses \MainWP\Dashboard\MainWP_Updates::set_continue_update_html_selector()
817 1048 * @uses \MainWP\Dashboard\MainWP_Updates::get_continue_update_selector()
818 1049 */
819 1050 public static function render_language_update( $user_can_update_translation, $total_translation_upgrades, $globalView, $current_wpid ) {
1051 + if ( $globalView ) {
1052 + $detail_trans_up = 'admin.php?page=UpdatesManage&tab=translations-updates';
1053 + } else {
1054 + $detail_trans_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=translations-updates';
1055 + }
820 1056 /**
821 1057 * Action: mainwp_updates_overview_before_translation_updates
822 1058 *
823 1059 * Fires before the Translation updates section in the Updates Overview widget.
@@ -824,55 +1060,36 @@
824 1060 *
825 1061 * @since 4.1
826 1062 */
827 1063 do_action( 'mainwp_updates_overview_before_translation_updates' );
828 - $is_demo = MainWP_Demo_Handle::is_demo_mode();
829 1064 ?>
830 - <div class="ui grid">
831 - <div class="two column row">
832 - <div class="six wide column">
833 - <div class="ui horizontal statistic">
834 - <div class="value">
835 - <?php echo intval( $total_translation_upgrades ); ?>
1065 + <div class="ui card">
1066 + <div class="content">
1067 + <div class="header">
1068 + <span class="ui large text"><i class="language icon"></i> <?php echo esc_html( MainWP_Utility::short_number_format( intval( $total_translation_upgrades ) ) ); ?></span>
1069 + </div>
1070 + <div class="description"><?php esc_html_e( 'Available translation updates.', 'mainwp' ); ?></div>
1071 + </div>
1072 + <div class="extra content">
1073 + <div class="ui two column grid">
1074 + <div class="left aligned middle aligned column">
1075 + <?php if ( $user_can_update_translation ) : ?>
1076 + <?php if ( ! empty( $total_translation_upgrades ) ) : ?>
1077 + <?php MainWP_Updates::set_continue_update_html_selector( 'translations_global_upgrade_all' ); ?>
1078 + <a href="#" onClick="updatesoverview_global_upgrade_all('translation', <?php echo intval( $current_wpid ); ?>); return false;" class="ui mini green mainwp-update-all-button button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
1079 + <?php else : ?>
1080 + <a href="#" class="ui disabled green mini button mainwp-update-all-button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
1081 + <?php endif; ?>
1082 + <?php endif; ?>
836 1083 </div>
837 - <div class="label">
838 - <?php esc_html_e( 'Translations', 'mainwp' ); ?>
1084 + <div class="right aligned middle aligned column">
1085 + <?php if ( ! empty( $total_translation_upgrades ) ) : ?>
1086 + <a href="<?php echo esc_url( $detail_trans_up ); ?>" class="ui mini basic button" aria-label="<?php esc_attr_e( 'View translation updates details', 'mainwp' ); ?>"><?php esc_html_e( 'Details', 'mainwp' ); ?></a>
1087 + <?php endif; ?>
839 1088 </div>
840 1089 </div>
841 1090 </div>
842 - <div class="ten wide right aligned column">
843 - <div class="ui small buttons">
844 - <?php
845 - if ( $user_can_update_translation ) {
846 - MainWP_Updates::set_continue_update_html_selector( 'translations_global_upgrade_all' );
847 - if ( $globalView ) {
848 - $detail_trans_up = 'admin.php?page=UpdatesManage&tab=translations-updates';
849 - } else {
850 - $detail_trans_up = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=translations-updates';
851 - }
852 - if ( empty( $total_translation_upgrades ) ) {
853 - ?>
854 - <a href="<?php echo esc_url( $detail_trans_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
855 - <a href="#" class="ui disabled green basic mainwp-update-all-button button"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
856 - <?php
857 - } else {
858 - ?>
859 - <a href="<?php echo esc_url( $detail_trans_up ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
860 - <?php
861 - if ( $is_demo ) {
862 - MainWP_Demo_Handle::get_instance()->render_demo_disable_button( '<a href="javascript:void(0)" class="ui basic green button mainwp-update-all-button disabled" disabled="disabled">' . esc_html__( 'Update All', 'mainwp' ) . '</a>' );
863 - } else {
864 - ?>
865 - <a href="#" onClick="updatesoverview_global_upgrade_all('translation'); return false;" class="ui basic green mainwp-update-all-button button <?php MainWP_Updates::get_continue_update_selector(); // phpcs:ignore WordPress.Security.EscapeOutput ?>" data-tooltip="<?php esc_html_e( 'Clicking this button will update all Translations on All your websites.', 'mainwp' ); ?>" data-inverted="" data-position="top right"><?php esc_html_e( 'Update All', 'mainwp' ); ?></a>
866 - <?php
867 - }
868 - }
869 - }
870 - ?>
871 - </div>
872 - </div>
873 1091 </div>
874 - </div>
875 1092 <?php
876 1093 /**
877 1094 * Action: mainwp_updates_overview_after_translation_updates
878 1095 *
@@ -883,32 +1100,28 @@
883 1100 do_action( 'mainwp_updates_overview_after_translation_updates' );
884 1101 }
885 1102
886 1103 /**
887 - * Render abandoned plugins detail.
1104 + * Renders abandoned plugins detail.
888 1105 *
889 1106 * @param int $total_plugins_outdate total number of update.
890 1107 * @param bool $globalView global view or not.
891 1108 * @param int $current_wpid current site id.
1109 + * @param int $count_plugins count plugins.
892 1110 */
893 - public static function render_abandoned_plugins( $total_plugins_outdate, $globalView, $current_wpid ) {
894 - ?>
895 - <div class="ui hidden divider"></div>
896 - <div class="ui horizontal divider">
897 - <?php
1111 + public static function render_abandoned_plugins( $total_plugins_outdate, $globalView, $current_wpid, $count_plugins ) {
1112 + if ( $globalView ) {
1113 + $detail_aban_plugins = 'admin.php?page=PluginsAbandoned';
1114 + } else {
1115 + $detail_aban_plugins = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=abandoned-plugins';
1116 + }
1117 +
1118 + if ( 0 < $count_plugins ) {
1119 + $outdated_percentage = round( ( ( intval( $total_plugins_outdate ) / $count_plugins ) * 100 ), 2 ) . '%';
1120 + } else {
1121 + $outdated_percentage = '0.00%';
1122 + }
898 1123 /**
899 - * Filter: mainwp_updates_overview_abandoned_plugins_themes_divider
900 - *
901 - * Filters the Abandoned Plugins & Themes divider text in the Updates Overview widget.
902 - *
903 - * @since 4.1
904 - */
905 - echo esc_html( apply_filters( 'mainwp_updates_overview_abandoned_plugins_themes_divider', esc_html__( 'Abandoned Plugins & Themes', 'mainwp' ) ) );
906 - ?>
907 - </div>
908 - <div class="ui hidden divider"></div>
909 - <?php
910 - /**
911 1124 * Action: mainwp_updates_overview_before_abandoned_plugins_themes
912 1125 *
913 1126 * Fires at the top of the Abandoned Plugins & Themes section in the Updates Overview widget.
914 1127 *
@@ -915,30 +1128,35 @@
915 1128 * @since 4.1
916 1129 */
917 1130 do_action( 'mainwp_updates_overview_before_abandoned_plugins_themes' );
918 1131 ?>
919 - <div class="ui grid">
920 - <div class="two column row">
921 - <div class="six wide column">
922 - <div class="ui horizontal statistic">
923 - <?php
924 - if ( $globalView ) {
925 - $detail_aban_plugins = 'admin.php?page=UpdatesManage&tab=abandoned-plugins';
926 - } else {
927 - $detail_aban_plugins = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=abandoned-plugins';
928 - }
929 - ?>
930 - <div class="value">
931 - <?php echo intval( $total_plugins_outdate ); ?>
1132 + <div class="ui light card">
1133 + <div class="content">
1134 + <div class="header">
1135 + <span class="ui large text">
1136 + <i class="icons">
1137 + <i class="plug icon"></i>
1138 + <i class="inverted corner clock icon"></i>
1139 + </i>
1140 + <?php echo esc_html( MainWP_Utility::short_number_format( intval( $total_plugins_outdate ) ) ); ?>
1141 + </span>
1142 + <?php if ( intval( $total_plugins_outdate ) > 0 ) : ?>
1143 + <span class="ui small red text">(<?php echo esc_html( $outdated_percentage ); ?>)</span>
1144 + <?php else : ?>
1145 + <span class="ui small green text">(0%)</span>
1146 + <?php endif; ?>
1147 + </div>
1148 + <div class="description"><?php esc_html_e( 'Detected abandoned plugins.', 'mainwp' ); ?></div>
1149 + </div>
1150 + <div class="extra content">
1151 + <div class="ui two column grid">
1152 + <div class="left aligned middle aligned column">
1153 +
932 1154 </div>
933 - <div class="label">
934 - <?php esc_html_e( 'Plugins', 'mainwp' ); ?>
1155 + <div class="right aligned middle aligned column">
1156 + <a href="<?php echo esc_url( $detail_aban_plugins ); ?>" class="ui mini basic button" aria-label="<?php esc_attr_e( 'View abandoned plugins details', 'mainwp' ); ?>"><?php esc_html_e( 'Details', 'mainwp' ); ?></a>
935 1157 </div>
936 - </div>
937 - </div>
938 - <div class="ten wide right aligned column">
939 - <a href="<?php echo esc_url( $detail_aban_plugins ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
940 - </div>
1158 + </div>
941 1159 </div>
942 1160 </div>
943 1161 <?php
944 1162 }
@@ -943,38 +1161,56 @@
943 1161 <?php
944 1162 }
945 1163
946 1164 /**
947 - * Render abandoned themes detail.
1165 + * Renders abandoned themes detail.
948 1166 *
949 1167 * @param int $total_themes_outdate Total number of update.
950 1168 * @param bool $globalView global View or not.
951 1169 * @param int $current_wpid Current site ID.
1170 + * @param int $count_themes count themes.
952 1171 */
953 - public static function render_abandoned_themes( $total_themes_outdate, $globalView, $current_wpid ) {
1172 + public static function render_abandoned_themes( $total_themes_outdate, $globalView, $current_wpid, $count_themes ) {
1173 + if ( $globalView ) {
1174 + $detail_aban_themes = 'admin.php?page=ThemesAbandoned';
1175 + } else {
1176 + $detail_aban_themes = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=abandoned-themes';
1177 + }
1178 +
1179 + if ( 0 < $count_themes ) {
1180 + $outdated_percentage = round( ( ( intval( $total_themes_outdate ) / $count_themes ) * 100 ), 2 ) . '%';
1181 + } else {
1182 + $outdated_percentage = '0.00%';
1183 + }
1184 +
954 1185 ?>
955 - <div class="ui grid">
956 - <div class="two column row">
957 - <div class="six wide column">
958 - <div class="ui horizontal statistic">
959 - <?php
960 - if ( $globalView ) {
961 - $detail_aban_themes = 'admin.php?page=UpdatesManage&tab=abandoned-themes';
962 - } else {
963 - $detail_aban_themes = 'admin.php?page=managesites&updateid=' . $current_wpid . '&tab=abandoned-themes';
964 - }
965 - ?>
966 - <div class="value">
967 - <?php echo intval( $total_themes_outdate ); ?>
968 - </div>
969 - <div class="label">
970 - <?php esc_html_e( 'Themes', 'mainwp' ); ?>
971 - </div>
1186 + <div class="ui light card">
1187 + <div class="content">
1188 + <div class="header">
1189 + <span class="ui large text">
1190 + <i class="icons">
1191 + <i class="tint icon"></i>
1192 + <i class="inverted corner clock icon"></i>
1193 + </i>
1194 + <?php echo esc_html( MainWP_Utility::short_number_format( intval( $total_themes_outdate ) ) ); ?>
1195 + </span>
1196 + <?php if ( intval( $total_themes_outdate ) > 0 ) : ?>
1197 + <span class="ui small red text">(<?php echo esc_html( $outdated_percentage ); ?>)</span>
1198 + <?php else : ?>
1199 + <span class="ui small green text">(0%)</span>
1200 + <?php endif; ?>
1201 + </div>
1202 + <div class="description"><?php esc_html_e( 'Detected abandoned themes.', 'mainwp' ); ?></div>
1203 + </div>
1204 + <div class="extra content">
1205 + <div class="ui two column grid">
1206 + <div class="left aligned middle aligned column">
1207 +
972 1208 </div>
1209 + <div class="right aligned middle aligned column">
1210 + <a href="<?php echo esc_url( $detail_aban_themes ); ?>" class="ui mini basic button" aria-label="<?php esc_attr_e( 'View abandoned themes details', 'mainwp' ); ?>"><?php esc_html_e( 'Details', 'mainwp' ); ?></a>
1211 + </div>
973 1212 </div>
974 - <div class="ten wide right aligned column">
975 - <a href="<?php echo esc_url( $detail_aban_themes ); ?>" class="ui button"><?php esc_html_e( 'See Details', 'mainwp' ); ?></a>
976 - </div>
977 1213 </div>
978 1214 </div>
979 1215 <?php
980 1216 /**
@@ -991,26 +1227,28 @@
991 1227 * Method render_global_update()
992 1228 *
993 1229 * Render global updates.
994 1230 *
995 - * @param bool $user_can_update_wordpress Permission to update WordPress.
996 - * @param int $total_wp_upgrades Total WordPress update.
997 - * @param array $all_wp_updates All WordPress update list.
1231 + * @param string $update_type Update type.
1232 + * @param bool $user_can_update_wordpress Permission to update WordPress.
1233 + * @param int $total_wp_upgrades Total WordPress update.
1234 + * @param array $all_wp_updates All WordPress update list.
998 1235 *
999 - * @param bool $user_can_update_plugins permission to update plugings.
1000 - * @param int $total_plugin_upgrades total WordPress update.
1001 - * @param array $all_plugins_updates all WordPress update list.
1236 + * @param bool $user_can_update_plugins permission to update plugings.
1237 + * @param int $total_plugin_upgrades total WordPress update.
1238 + * @param array $all_plugins_updates all WordPress update list.
1002 1239 *
1003 - * @param bool $user_can_update_themes permission to update themes.
1004 - * @param int $total_theme_upgrades total themes update.
1005 - * @param mixed $all_themes_updates all themes update list.
1240 + * @param bool $user_can_update_themes permission to update themes.
1241 + * @param int $total_theme_upgrades total themes update.
1242 + * @param mixed $all_themes_updates all themes update list.
1006 1243 *
1007 - * @param mixed $mainwp_show_language_updates MainWP Language Updates.
1008 - * @param bool $user_can_update_translation permission to update languages.
1009 - * @param int $total_translation_upgrades total WordPress update.
1010 - * @param mixed $all_translations_updates all transations update list.
1244 + * @param mixed $mainwp_show_language_updates MainWP Language Updates.
1245 + * @param bool $user_can_update_translation permission to update languages.
1246 + * @param int $total_translation_upgrades total WordPress update.
1247 + * @param mixed $all_translations_updates all transations update list.
1011 1248 */
1012 1249 public static function render_global_update( // phpcs:ignore -- NOSONAR - complex.
1250 + $update_type,
1013 1251 $user_can_update_wordpress,
1014 1252 $total_wp_upgrades,
1015 1253 $all_wp_updates,
1016 1254 $user_can_update_plugins,
@@ -1023,17 +1261,24 @@
1023 1261 $user_can_update_translation,
1024 1262 $total_translation_upgrades,
1025 1263 $all_translations_updates
1026 1264 ) {
1265 +
1266 + $process = array(
1267 + 'core' => in_array( $update_type, array( 'all', 'core' ), true ),
1268 + 'plugin' => in_array( $update_type, array( 'all', 'plugin' ), true ),
1269 + 'theme' => in_array( $update_type, array( 'all', 'theme' ), true ),
1270 + 'trans' => in_array( $update_type, array( 'all', 'trans' ), true ),
1271 + );
1272 +
1027 1273 ?>
1028 - <div style="display: none">
1029 1274
1030 1275 <div id="wp_upgrades">
1031 1276 <?php
1032 - if ( $user_can_update_wordpress && $total_wp_upgrades > 0 ) {
1277 + if ( $process['core'] && $user_can_update_wordpress && $total_wp_upgrades > 0 ) {
1033 1278 foreach ( $all_wp_updates as $item ) {
1034 1279 ?>
1035 - <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" ></div>
1280 + <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" is-suspended="<?php echo ! empty( $item['is_suspended'] ) ? esc_attr( $item['is_suspended'] ) : ''; ?>"></div>
1036 1281 <?php
1037 1282 }
1038 1283 }
1039 1284 ?>
@@ -1040,12 +1285,12 @@
1040 1285 </div>
1041 1286
1042 1287 <div id="wp_plugin_upgrades">
1043 1288 <?php
1044 - if ( $user_can_update_plugins && $total_plugin_upgrades > 0 ) {
1289 + if ( $process['plugin'] && $user_can_update_plugins && $total_plugin_upgrades > 0 ) {
1045 1290 foreach ( $all_plugins_updates as $item ) {
1046 1291 ?>
1047 - <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" plugin_slug="<?php echo esc_attr( $item['plugin_slug'] ); ?>" ></div>
1292 + <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" plugin_slug="<?php echo esc_attr( $item['plugin_slug'] ); ?>" is-suspended="<?php echo ! empty( $item['is_suspended'] ) ? esc_attr( $item['is_suspended'] ) : ''; ?>"></div>
1048 1293 <?php
1049 1294 }
1050 1295 }
1051 1296 ?>
@@ -1052,12 +1297,12 @@
1052 1297 </div>
1053 1298 <div id="wp_theme_upgrades">
1054 1299
1055 1300 <?php
1056 - if ( $user_can_update_themes && $total_theme_upgrades > 0 ) {
1301 + if ( $process['theme'] && $user_can_update_themes && $total_theme_upgrades > 0 ) {
1057 1302 foreach ( $all_themes_updates as $item ) {
1058 1303 ?>
1059 - <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" theme_slug="<?php echo esc_attr( $item['theme_slug'] ); ?>" ></div>
1304 + <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" theme_slug="<?php echo esc_attr( $item['theme_slug'] ); ?>" is-suspended="<?php echo ! empty( $item['is_suspended'] ) ? esc_attr( $item['is_suspended'] ) : ''; ?>"></div>
1060 1305 <?php
1061 1306 }
1062 1307 }
1063 1308 ?>
@@ -1066,12 +1311,12 @@
1066 1311 <?php if ( 1 === (int) $mainwp_show_language_updates ) : ?>
1067 1312 <div id="wp_translation_upgrades">
1068 1313
1069 1314 <?php
1070 - if ( $user_can_update_translation && $total_translation_upgrades > 0 ) {
1315 + if ( $process['trans'] && $user_can_update_translation && $total_translation_upgrades > 0 ) {
1071 1316 foreach ( $all_translations_updates as $item ) {
1072 1317 ?>
1073 - <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" translation_slug="<?php echo esc_attr( $item['translation_slug'] ); ?>" ></div>
1318 + <div updated="0" site_id="<?php echo intval( $item['id'] ); ?>" site_name="<?php echo esc_attr( $item['name'] ); ?>" translation_slug="<?php echo esc_attr( $item['translation_slug'] ); ?>" is-suspended="<?php echo ! empty( $item['is_suspended'] ) ? esc_attr( $item['is_suspended'] ) : ''; ?>"></div>
1074 1319 <?php
1075 1320 }
1076 1321 }
1077 1322 ?>
@@ -1076,9 +1321,8 @@
1076 1321 }
1077 1322 ?>
1078 1323 </div>
1079 1324 <?php endif; ?>
1080 - </div>
1081 1325 <?php
1082 1326 }
1083 1327
1084 1328 /**
@@ -1083,24 +1327,17 @@
1083 1327
1084 1328 /**
1085 1329 * Render bottom of widget.
1086 1330 *
1087 - * @param object $websites Object containing child sites info.
1088 - * @param bool $globalView Whether it's global or individual site view.
1331 + * @param array $sites_ids Child sites ids.
1332 + * @param bool $globalView Whether it's global or individual site view.
1089 1333 *
1090 1334 * @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
1091 1335 * @uses \MainWP\Dashboard\MainWP_DB::data_seek()
1092 1336 * @uses \MainWP\Dashboard\MainWP_DB::free_result()
1093 1337 */
1094 - public static function render_bottom( $websites, $globalView ) {
1338 + public static function render_bottom( $sites_ids, $globalView ) {
1095 1339
1096 - MainWP_DB::data_seek( $websites, 0 );
1097 -
1098 - $site_ids = array();
1099 - while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
1100 - $site_ids[] = $website->id;
1101 - }
1102 -
1103 1340 /**
1104 1341 * Action: mainwp_updatesoverview_widget_bottom
1105 1342 *
1106 1343 * Fires at the bottom of the Updates Overview widgets.
@@ -1109,22 +1346,20 @@
1109 1346 * @param bool $globalView Whether it's global or individual site view.
1110 1347 *
1111 1348 * @since 4.0
1112 1349 */
1113 - do_action( 'mainwp_updatesoverview_widget_bottom', $site_ids, $globalView );
1350 + do_action( 'mainwp_updatesoverview_widget_bottom', $sites_ids, $globalView );
1114 1351 ?>
1115 1352 <div class="ui modal" id="updatesoverview-backup-box" tabindex="0">
1116 - <div class="header"><?php esc_html_e( 'Backup Check', 'mainwp' ); ?></div>
1117 - <div class="scrolling content mainwp-modal-content"></div>
1118 - <div class="actions mainwp-modal-actions">
1119 - <input id="updatesoverview-backup-all" type="button" name="Backup All" value="<?php esc_html_e( 'Backup All', 'mainwp' ); ?>" class="button-primary"/>
1120 - <a id="updatesoverview-backup-now" href="#" target="_blank" style="display: none" class="button-primary button"><?php esc_html_e( 'Backup Now', 'mainwp' ); ?></a>&nbsp;
1121 - <input id="updatesoverview-backup-ignore" type="button" name="Ignore" value="<?php esc_html_e( 'Ignore', 'mainwp' ); ?>" class="button"/>
1122 - </div>
1353 + <div class="header"><?php esc_html_e( 'Backup Check', 'mainwp' ); ?></div>
1354 + <div class="scrolling content mainwp-modal-content"></div>
1355 + <div class="actions mainwp-modal-actions">
1356 + <input id="updatesoverview-backup-all" type="button" name="<?php esc_attr_e( 'Backup All', 'mainwp' ); ?>" value="<?php esc_attr_e( 'Backup All', 'mainwp' ); ?>" class="ui basic button"/>
1357 + <a id="updatesoverview-backup-now" href="#" target="_blank" style="display: none" class="ui basic button"><?php esc_html_e( 'Backup Now', 'mainwp' ); ?></a>&nbsp;
1358 + <input id="updatesoverview-backup-ignore" type="button" name="<?php esc_attr_e( 'Ignore', 'mainwp' ); ?>" value="<?php esc_attr_e( 'Ignore', 'mainwp' ); ?>" class="button"/>
1359 + </div>
1123 1360 </div>
1124 -
1125 1361 <?php
1126 - MainWP_DB::free_result( $websites );
1127 1362 }
1128 1363
1129 1364 /**
1130 1365 * Method dismiss_sync_errors()
@@ -1173,15 +1408,24 @@
1173 1408 if ( ( 0 === (int) $website->backup_before_upgrade ) || ( ( 2 === (int) $website->backup_before_upgrade ) && empty( $global_backup_before_upgrade ) ) ) {
1174 1409 continue;
1175 1410 }
1176 1411
1177 - if ( ! empty( $primaryBackup ) ) {
1412 + $backup_method = '';
1413 + if ( property_exists( $website, 'primary_backup_method' ) ) {
1414 + if ( '' === $website->primary_backup_method || 'global' === $website->primary_backup_method ) {
1415 + $backup_method = $primaryBackup;
1416 + } else {
1417 + $backup_method = $website->primary_backup_method;
1418 + }
1419 + }
1420 +
1421 + if ( ! empty( $backup_method ) ) {
1178 1422 $lastBackup = MainWP_DB::instance()->get_website_option( $website, 'primary_lasttime_backup' );
1179 1423
1180 1424 if ( -1 !== $lastBackup ) { // installed backup plugin.
1181 1425 $output['sites'][ $siteId ] = ( $lastBackup < ( time() - ( $mainwp_backup_before_upgrade_days * 24 * 60 * 60 ) ) ? false : true );
1182 1426 }
1183 - $output['primary_backup'] = $primaryBackup;
1427 + $output['primary_backup'] = $backup_method;
1184 1428 } else {
1185 1429 $dir = MainWP_System_Utility::get_mainwp_specific_dir( $siteId );
1186 1430 // Check if backup ok.
1187 1431 $lastBackup = - 1;