slug ) ) || ( is_array( $args ) && ! empty( $args['slug'] ) && 'mainwp' === $args['slug'] ) ) { return $default_value; } $url = 'http://api.wordpress.org/plugins/info/1.0/'; $ssl = wp_http_supports( array( 'ssl' ) ); if ( $ssl ) { $url = set_url_scheme( $url, 'https' ); } $args = array( 'timeout' => 15, 'body' => array( 'action' => $action, 'request' => serialize( $args ), // phpcs:ignore -- WP.org API params. ), ); $request = wp_remote_post( $url, $args ); if ( is_wp_error( $request ) ) { $url = isset( $_REQUEST['url'] ) ? esc_url_raw( wp_unslash( $_REQUEST['url'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $name = isset( $_REQUEST['name'] ) ? wp_unslash( $_REQUEST['name'] ) : ''; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized return new \WP_Error( 'plugins_api_failed', esc_html__( '

No plugin information found.

This may be a premium plugin and no other details are available from WordPress.', 'mainwp' ) . ' ' . ( empty( $url ) ? esc_html__( 'Please visit the plugin website for more information.', 'mainwp' ) : esc_html__( 'Please visit the plugin website for more information: ', 'mainwp' ) . '' . esc_html( rawurldecode( $name ) ) . '' ), $request->get_error_message() ); } return $default_value; } /** * Method get_name() * * Define Widget Title. */ public static function get_name() { return esc_html__( 'Update Overview', 'mainwp' ); } /** * Method render() * * Check if $_GET['dashboard'] then run render_sites(). */ public static function render() { static::render_sites(); } /** * Method render_sites() * * Grab available Child Sites updates a build Widget. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB_Common::get_last_sync_status() * @uses \MainWP\Dashboard\MainWP_DB::query() * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() * @uses \MainWP\Dashboard\MainWP_DB::data_seek()::fetch_object() * @uses \MainWP\Dashboard\MainWP_DB::data_seek() * @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid() * @uses \MainWP\Dashboard\MainWP_Utility::format_timestamp() */ public static function render_sites() { // phpcs:ignore -- NOSONAR - current complexity required to achieve desired results. Pull request solutions appreciated. $globalView = true; /** * Current user global. * * @global string */ global $current_user; $current_wpid = MainWP_System_Utility::get_current_wpid(); if ( $current_wpid ) { $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' ) ); $globalView = false; } else { $staging_enabled = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) || is_plugin_active( 'mainwp-timecapsule-extension/mainwp-timecapsule-extension.php' ); // To support staging extension. $is_staging = 'no'; if ( $staging_enabled ) { $staging_updates_view = MainWP_System_Utility::get_select_staging_view_sites(); if ( 'staging' === $staging_updates_view ) { $is_staging = 'yes'; } } // end support. $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 ); } $userExtension = MainWP_DB_Common::instance()->get_user_extension(); $websites = MainWP_DB::instance()->query( $sql ); $count_websites = MainWP_DB::instance()->get_websites_count(); $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 ); $decodedDismissedPlugins = ! empty( $userExtension->dismissed_plugins ) ? json_decode( $userExtension->dismissed_plugins, true ) : array(); $decodedDismissedThemes = ! empty( $userExtension->dismissed_themes ) ? json_decode( $userExtension->dismissed_themes, true ) : array(); $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array(); if ( ! is_array( $decodedIgnoredCores ) ) { $decodedIgnoredCores = array(); } $total_wp_upgrades = 0; $total_plugin_upgrades = 0; $total_translation_upgrades = 0; $total_theme_upgrades = 0; $total_plugins_outdate = 0; $total_themes_outdate = 0; $all_wp_updates = array(); $all_plugins_updates = array(); $all_themes_updates = array(); $all_translations_updates = array(); MainWP_DB::data_seek( $websites, 0 ); $currentSite = null; $count_plugins = 0; $count_themes = 0; while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) { if ( ! $globalView ) { $currentSite = $website; } $count_plugins += ! empty( $website->plugins ) ? count( json_decode( $website->plugins, true ) ) : 0; $count_themes += ! empty( $website->themes ) ? count( json_decode( $website->themes, true ) ) : 0; $pluginsIgnoredAbandoned_perSites = array(); $themesIgnoredAbandoned_perSites = array(); $wp_upgrades = ! empty( $website->wp_upgrades ) ? json_decode( $website->wp_upgrades, true ) : array(); $ignored_core_upgrades = ! empty( $website->ignored_wp_upgrades ) ? json_decode( $website->ignored_wp_upgrades, true ) : array(); 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' ) ) { $wp_upgrades = array(); } if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) { ++$total_wp_upgrades; $all_wp_updates[] = array( 'id' => $website->id, 'name' => $website->name, ); } $translation_upgrades = ! empty( $website->translation_upgrades ) ? json_decode( $website->translation_upgrades, true ) : array(); $plugin_upgrades = ! empty( $website->plugin_upgrades ) ? json_decode( $website->plugin_upgrades, true ) : array(); if ( $website->is_ignorePluginUpdates ) { $plugin_upgrades = array(); } $theme_upgrades = ! empty( $website->theme_upgrades ) ? json_decode( $website->theme_upgrades, true ) : array(); if ( $website->is_ignoreThemeUpdates ) { $theme_upgrades = array(); } $decodedPremiumUpgrades = MainWP_DB::instance()->get_website_option( $website, 'premium_upgrades' ); $decodedPremiumUpgrades = ! empty( $decodedPremiumUpgrades ) ? json_decode( $decodedPremiumUpgrades, true ) : array(); if ( is_array( $decodedPremiumUpgrades ) ) { foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) { $premiumUpgrade['premium'] = true; if ( 'plugin' === $premiumUpgrade['type'] ) { if ( ! is_array( $plugin_upgrades ) ) { $plugin_upgrades = array(); } if ( ! $website->is_ignorePluginUpdates ) { $premiumUpgrade = array_filter( $premiumUpgrade ); if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) { continue; } $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade ); } } elseif ( 'theme' === $premiumUpgrade['type'] ) { if ( ! is_array( $theme_upgrades ) ) { $theme_upgrades = array(); } if ( ! $website->is_ignoreThemeUpdates ) { $theme_upgrades[ $crrSlug ] = $premiumUpgrade; } } } } if ( is_array( $translation_upgrades ) ) { $total_translation_upgrades += count( $translation_upgrades ); if ( ! empty( $translation_upgrades ) ) { foreach ( $translation_upgrades as $trans_upgrade ) { $slug = $trans_upgrade['slug']; $all_translations_updates[] = array( 'id' => $website->id, 'name' => $website->name, 'translation_slug' => $slug, ); } } } if ( is_array( $plugin_upgrades ) ) { $ignored_plugins = ! empty( $website->ignored_plugins ) ? json_decode( $website->ignored_plugins, true ) : array(); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins ); } $ignored_plugins = ! empty( $userExtension->ignored_plugins ) ? json_decode( $userExtension->ignored_plugins, true ) : array(); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins ); } $total_plugin_upgrades += count( $plugin_upgrades ); if ( ! empty( $plugin_upgrades ) ) { foreach ( $plugin_upgrades as $slug => $value ) { $all_plugins_updates[] = array( 'id' => $website->id, 'name' => $website->name, 'plugin_slug' => $slug, ); } } } if ( is_array( $theme_upgrades ) ) { $ignored_themes = ! empty( $website->ignored_themes ) ? json_decode( $website->ignored_themes, true ) : array(); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes ); } $ignored_themes = ! empty( $userExtension->ignored_themes ) ? json_decode( $userExtension->ignored_themes, true ) : array(); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes ); } $total_theme_upgrades += count( $theme_upgrades ); if ( ! empty( $theme_upgrades ) ) { foreach ( $theme_upgrades as $slug => $value ) { $all_themes_updates[] = array( 'id' => $website->id, 'name' => $website->name, 'theme_slug' => $slug, ); } } } $pluginsIgnoredAbandoned_perSites = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' ); $pluginsIgnoredAbandoned_perSites = ! empty( $pluginsIgnoredAbandoned_perSites ) ? json_decode( $pluginsIgnoredAbandoned_perSites, true ) : array(); if ( is_array( $pluginsIgnoredAbandoned_perSites ) ) { $pluginsIgnoredAbandoned_perSites = array_filter( $pluginsIgnoredAbandoned_perSites ); } $themesIgnoredAbandoned_perSites = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' ); $themesIgnoredAbandoned_perSites = ! empty( $themesIgnoredAbandoned_perSites ) ? json_decode( $themesIgnoredAbandoned_perSites, true ) : array(); if ( is_array( $themesIgnoredAbandoned_perSites ) ) { $themesIgnoredAbandoned_perSites = array_filter( $themesIgnoredAbandoned_perSites ); } $plugins_outdate = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_info' ); $plugins_outdate = ! empty( $plugins_outdate ) ? json_decode( $plugins_outdate, true ) : array(); $themes_outdate = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_info' ); $themes_outdate = ! empty( $themes_outdate ) ? json_decode( $themes_outdate, true ) : array(); if ( is_array( $plugins_outdate ) ) { if ( is_array( $pluginsIgnoredAbandoned_perSites ) ) { $plugins_outdate = array_diff_key( $plugins_outdate, $pluginsIgnoredAbandoned_perSites ); } if ( is_array( $decodedDismissedPlugins ) ) { $plugins_outdate = array_diff_key( $plugins_outdate, $decodedDismissedPlugins ); } $total_plugins_outdate += count( $plugins_outdate ); } if ( is_array( $themes_outdate ) ) { if ( is_array( $themesIgnoredAbandoned_perSites ) ) { $themes_outdate = array_diff_key( $themes_outdate, $themesIgnoredAbandoned_perSites ); } if ( is_array( $decodedDismissedThemes ) ) { $themes_outdate = array_diff_key( $themes_outdate, $decodedDismissedThemes ); } $total_themes_outdate += count( $themes_outdate ); } } // WP Upgrades part. $total_upgrades = $total_wp_upgrades + $total_plugin_upgrades + $total_theme_upgrades; // to fix incorrect total updates. if ( $mainwp_show_language_updates ) { $total_upgrades += $total_translation_upgrades; } $trustedPlugins = ! empty( $userExtension->trusted_plugins ) ? json_decode( $userExtension->trusted_plugins, true ) : array(); if ( ! is_array( $trustedPlugins ) ) { $trustedPlugins = array(); } $trustedThemes = ! empty( $userExtension->trusted_themes ) ? json_decode( $userExtension->trusted_themes, true ) : array(); if ( ! is_array( $trustedThemes ) ) { $trustedThemes = array(); } /** * Filter: mainwp_limit_updates_all * * Limits the number of updates that will be processed in a single run on Update Everything action. * * @since 4.0 */ $limit_updates_all = apply_filters( 'mainwp_limit_updates_all', 0 ); if ( ! $globalView ) { $last_dtsSync = $currentSite->dtsSync; } else { $result = MainWP_DB_Common::instance()->get_last_sync_status(); $sync_status = $result['sync_status']; $last_sync = $result['last_sync']; $last_dtsSync = $result['last_sync']; if ( 'all_synced' === $sync_status ) { $last_dtsSync = get_option( 'mainwp_last_synced_all_sites', $last_sync ); } } $lastSyncMsg = ''; if ( $last_dtsSync ) { $lastSyncMsg = esc_html__( 'Last synchronization completed on: ', 'mainwp' ) . MainWP_Utility::format_timestamp( MainWP_Utility::get_timestamp( $last_dtsSync ) ); } $user_can_update_translation = \mainwp_current_user_can( 'dashboard', 'update_translations' ); $user_can_update_wordpress = \mainwp_current_user_can( 'dashboard', 'update_wordpress' ); $user_can_update_themes = \mainwp_current_user_can( 'dashboard', 'update_themes' ); $user_can_update_plugins = \mainwp_current_user_can( 'dashboard', 'update_plugins' ); $can_total_update = ( $user_can_update_wordpress && $user_can_update_plugins && $user_can_update_themes && $user_can_update_translation ) ? true : false; static::render_updates_overview_widget_header( $lastSyncMsg ); ?>

0 ) : ?> () (0%)
0 ) : ?> () (0%)
0 ) : ?> () (0%)
0 ) : ?> () (0%)
0 ) : ?> () (0%)
0 ) : ?> () (0%)
0 ) { foreach ( $all_wp_updates as $item ) { ?>
0 ) { foreach ( $all_plugins_updates as $item ) { ?>
0 ) { foreach ( $all_themes_updates as $item ) { ?>
0 ) { foreach ( $all_translations_updates as $item ) { ?>
id; } /** * Action: mainwp_updatesoverview_widget_bottom * * Fires at the bottom of the Updates Overview widgets. * * @param array $side_ids Array of sites IDs. * @param bool $globalView Whether it's global or individual site view. * * @since 4.0 */ do_action( 'mainwp_updatesoverview_widget_bottom', $site_ids, $globalView ); ?> ID, 'mainwp_syncerrors_dismissed', $dismiss ); return true; } /** * Method checkbackups() * * Check if Child Site needs to be backed up before updates. * * @return mixed $output * * @uses \MainWP\Dashboard\MainWP_Backup_Handler::is_archive() * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() * @uses \MainWP\Dashboard\MainWP_System_Utility::get_primary_backup() * @uses \MainWP\Dashboard\MainWP_System_Utility::get_mainwp_specific_dir() */ public static function check_backups() { // phpcs:ignore -- NOSONAR - complex. if ( empty( $_POST['sites'] ) || ! is_array( $_POST['sites'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- NOSONAR - verified before. return true; } $primaryBackup = MainWP_System_Utility::get_primary_backup(); $global_backup_before_upgrade = get_option( 'mainwp_backup_before_upgrade' ); $mainwp_backup_before_upgrade_days = get_option( 'mainwp_backup_before_upgrade_days' ); if ( empty( $mainwp_backup_before_upgrade_days ) || ! ctype_digit( $mainwp_backup_before_upgrade_days ) ) { $mainwp_backup_before_upgrade_days = 7; } $output = array(); if ( isset( $_POST['sites'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized foreach ( array_map( 'sanitize_text_field', wp_unslash( $_POST['sites'] ) ) as $siteId ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $website = MainWP_DB::instance()->get_website_by_id( $siteId ); if ( ( 0 === (int) $website->backup_before_upgrade ) || ( ( 2 === (int) $website->backup_before_upgrade ) && empty( $global_backup_before_upgrade ) ) ) { continue; } $backup_method = ''; if ( property_exists( $website, 'primary_backup_method' ) ) { if ( '' === $website->primary_backup_method || 'global' === $website->primary_backup_method ) { $backup_method = $primaryBackup; } else { $backup_method = $website->primary_backup_method; } } if ( ! empty( $backup_method ) ) { $lastBackup = MainWP_DB::instance()->get_website_option( $website, 'primary_lasttime_backup' ); if ( -1 !== $lastBackup ) { // installed backup plugin. $output['sites'][ $siteId ] = ( $lastBackup < ( time() - ( $mainwp_backup_before_upgrade_days * 24 * 60 * 60 ) ) ? false : true ); } $output['primary_backup'] = $backup_method; } else { $dir = MainWP_System_Utility::get_mainwp_specific_dir( $siteId ); // Check if backup ok. $lastBackup = - 1; if ( file_exists( $dir ) ) { $dh = opendir( $dir ); // NOSONAR. if ( $dh ) { while ( false !== ( $file = readdir( $dh ) ) ) { if ( '.' !== $file && '..' !== $file ) { $theFile = $dir . $file; if ( MainWP_Backup_Handler::is_archive( $file ) && ! MainWP_Backup_Handler::is_sql_archive( $file ) && ( filemtime( $theFile ) > $lastBackup ) ) { $lastBackup = filemtime( $theFile ); } } } closedir( $dh ); } } $output['sites'][ $siteId ] = ( $lastBackup < ( time() - ( $mainwp_backup_before_upgrade_days * 24 * 60 * 60 ) ) ? false : true ); } } } return $output; } }