id; static::render_individual_updates( $website_id ); } /** * Method render_individual_updates() * * Render Plugin updates Tab. * * @param mixed $id Child Site ID. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB::get_sql_website_by_id() * @uses \MainWP\Dashboard\MainWP_DB::query() * @uses \MainWP\Dashboard\MainWP_DB::fetch_object() * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::render_header_tabs() */ public static function render_individual_updates( $id ) { /** * Current user global. * * @global string */ global $current_user; $userExtension = MainWP_DB_Common::instance()->get_user_extension(); $sql = MainWP_DB::instance()->get_sql_website_by_id( $id, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ) ); $websites = MainWP_DB::instance()->query( $sql ); MainWP_DB::data_seek( $websites, 0 ); if ( $websites ) { $website = MainWP_DB::fetch_object( $websites ); } $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 ); $active_tab = 'plugins'; $active_text = esc_html__( 'Plugin Updates', 'mainwp' ); // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( isset( $_GET['tab'] ) ) { if ( 'wordpress-updates' === $_GET['tab'] ) { $active_tab = 'wordpress'; $active_text = esc_html__( 'WordPress Updates', 'mainwp' ); } elseif ( 'themes-updates' === $_GET['tab'] ) { $active_tab = 'themes'; $active_text = esc_html__( 'Theme Updates', 'mainwp' ); } elseif ( 'translations-updates' === $_GET['tab'] ) { $active_tab = 'trans'; $active_text = esc_html__( 'Translation Updates', 'mainwp' ); } elseif ( 'abandoned-plugins' === $_GET['tab'] ) { $active_tab = 'abandoned-plugins'; $active_text = esc_html__( 'Abandoned Plugins', 'mainwp' ); } elseif ( 'abandoned-themes' === $_GET['tab'] ) { $active_tab = 'abandoned-themes'; $active_text = esc_html__( 'Abandoned Themes', 'mainwp' ); } } // phpcs:enable MainWP_Manage_Sites_View::render_header_tabs( $active_tab, $active_text, $mainwp_show_language_updates ) ?>
', ' ', '', ' ', '', ' ' ); // NOSONAR - noopener - open safe. ?>
', ' ', '', ' ', '', ' ' ); // NOSONAR - noopener - open safe. ?>
get_user_extension(); $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array(); if ( ! is_array( $decodedIgnoredCores ) ) { $decodedIgnoredCores = array(); } $sql = MainWP_DB::instance()->get_sql_website_by_id( $site_id, false, array( 'wp_upgrades', 'ignored_wp_upgrades', 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ) ); $websites = MainWP_DB::instance()->query( $sql ); MainWP_DB::data_seek( $websites, 0 ); if ( $websites ) { $website = MainWP_DB::fetch_object( $websites ); } $return = array( 'total_wp' => 0, 'total_plugins' => 0, 'total_themes' => 0, 'total_trans' => 0, 'total_aband_plugins' => 0, 'total_aband_themes' => 0, 'total_upgrades' => 0, ); if ( empty( $website ) ) { return $return; } $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(); } $return['total_wp'] = ! empty( $wp_upgrades ) ? 1 : 0; $plugin_upgrades = json_decode( $website->plugin_upgrades, true ); if ( $website->is_ignorePluginUpdates ) { $plugin_upgrades = array(); } if ( ! is_array( $plugin_upgrades ) ) { $plugin_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'] ) { $premiumUpgrade = array_filter( $premiumUpgrade ); if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) { continue; } $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade ); } } } $ignored_plugins = json_decode( $website->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins ); } $ignored_plugins = json_decode( $userExtension->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins ); } $return['total_plugins'] = count( $plugin_upgrades ); $theme_upgrades = json_decode( $website->theme_upgrades, true ); if ( $website->is_ignoreThemeUpdates ) { $theme_upgrades = array(); } if ( ! is_array( $theme_upgrades ) ) { $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 ( 'theme' === $premiumUpgrade['type'] ) { $premiumUpgrade = array_filter( $premiumUpgrade ); if ( ! isset( $theme_upgrades[ $crrSlug ] ) ) { $theme_upgrades[ $crrSlug ] = array(); } $theme_upgrades[ $crrSlug ] = array_merge( $theme_upgrades[ $crrSlug ], $premiumUpgrade ); } } } $ignored_themes = json_decode( $website->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes ); } $ignored_themes = json_decode( $userExtension->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes ); } $return['total_themes'] = count( $theme_upgrades ); $translation_upgrades = json_decode( $website->translation_upgrades, true ); if ( ! is_array( $translation_upgrades ) ) { $translation_upgrades = array(); } $return['total_trans'] = count( $translation_upgrades ); $plugins_outdate = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_info' ); $plugins_outdate = ! empty( $plugins_outdate ) ? json_decode( $plugins_outdate, true ) : array(); if ( ! is_array( $plugins_outdate ) ) { $plugins_outdate = array(); } if ( ! empty( $plugins_outdate ) ) { $pluginsOutdateDismissed = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' ); $pluginsOutdateDismissed = ! empty( $pluginsOutdateDismissed ) ? json_decode( $pluginsOutdateDismissed, true ) : array(); if ( is_array( $pluginsOutdateDismissed ) ) { $plugins_outdate = array_diff_key( $plugins_outdate, $pluginsOutdateDismissed ); } $decodedDismissedPlugins = json_decode( $userExtension->dismissed_plugins, true ); if ( is_array( $decodedDismissedPlugins ) ) { $plugins_outdate = array_diff_key( $plugins_outdate, $decodedDismissedPlugins ); } } $return['total_aband_plugins'] = count( $plugins_outdate ); $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( $themes_outdate ) ) { $themes_outdate = array(); } if ( ! empty( $themes_outdate ) ) { $themesOutdateDismissed = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' ); $themesOutdateDismissed = ! empty( $themesOutdateDismissed ) ? json_decode( $themesOutdateDismissed, true ) : array(); if ( is_array( $themesOutdateDismissed ) ) { $themes_outdate = array_diff_key( $themes_outdate, $themesOutdateDismissed ); } $decodedDismissedThemes = json_decode( $userExtension->dismissed_themes, true ); if ( is_array( $decodedDismissedThemes ) ) { $themes_outdate = array_diff_key( $themes_outdate, $decodedDismissedThemes ); } } $return['total_aband_themes'] = count( $themes_outdate ); $return['total_upgrades'] = $return['total_wp'] + $return['total_plugins'] + $return['total_themes'] + $return['total_trans']; return $return; } /** * Method render_wpcore_updates() * * Render the WordPress Updates Tab. * * @param mixed $website Child Site info. * @param mixed $active_tab Current active tab. * @param object $userExtension User Extension. * * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() */ public static function render_wpcore_updates( $website, $active_tab, $userExtension ) { // phpcs:ignore -- NOSONAR - complex. $user_can_update_wp = \mainwp_current_user_can( 'dashboard', 'update_wordpress' ); ?>
ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array(); if ( ! is_array( $decodedIgnoredCores ) ) { $decodedIgnoredCores = 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(); ?> 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' ) ) : ?> sync_errors ) : ?>
trusted_plugins, true ); if ( ! is_array( $trustedPlugins ) ) { $trustedPlugins = array(); } $user_can_update_plugins = \mainwp_current_user_can( 'dashboard', 'update_plugins' ); $user_can_ignore_unignore = \mainwp_current_user_can( 'dashboard', 'ignore_unignore_updates' ); ?>
is_ignorePluginUpdates ) : ?> plugin_upgrades, true ); if ( ! is_array( $plugin_upgrades ) ) { $plugin_upgrades = array(); } $site_opts = MainWP_DB::instance()->get_website_options_array( $website, array( 'premium_upgrades', 'rollback_updates_data' ) ); if ( ! is_array( $site_opts ) ) { $site_opts = array(); } $decodedPremiumUpgrades = ! empty( $site_opts['premium_upgrades'] ) ? json_decode( $site_opts['premium_upgrades'], true ) : array(); $rollItems = ! empty( $site_opts['rollback_updates_data'] ) ? json_decode( $site_opts['rollback_updates_data'], true ) : array(); $rollPlugins = array(); if ( is_array( $rollItems ) && ! empty( $rollItems['plugin'] ) && is_array( $rollItems['plugin'] ) ) { $rollPlugins = $rollItems['plugin']; } if ( is_array( $decodedPremiumUpgrades ) ) { foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) { $premiumUpgrade['premium'] = true; if ( 'plugin' === $premiumUpgrade['type'] ) { $premiumUpgrade = array_filter( $premiumUpgrade ); if ( ! isset( $plugin_upgrades[ $crrSlug ] ) ) { continue; } $plugin_upgrades[ $crrSlug ] = array_merge( $plugin_upgrades[ $crrSlug ], $premiumUpgrade ); } } } $ignored_plugins = json_decode( $website->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins ); } $ignored_plugins = json_decode( $userExtension->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins ); } $updates_table_helper = new MainWP_Updates_Table_Helper( MAINWP_VIEW_PER_SITE, 'plugin', array( 'show_select' => true ) ); add_filter( 'mainwp_updates_table_header_content', array( static::class, 'hook_table_update_plugins_header_content' ), 10, 3 ); ?> print_column_headers(); ?> $plugin_upgrade ) : ?> id ) . '_' . esc_html( $plugin_name ) . '" value="0" />'; $last_version = $plugin_upgrade['update']['new_version']; $row_columns = array( 'title' => MainWP_System_Utility::get_plugin_icon( $item_slug ) . ' ' . esc_html( $plugin_upgrade['Name'] ) . '' . $indent_hidden, 'version' => esc_html( $plugin_upgrade['Version'] ), 'latest' => '' . esc_html( $last_version ) . '', 'trusted' => ( in_array( $slug, $trustedPlugins ) ? true : false ), 'status' => ( isset( $plugin_upgrade['active'] ) && $plugin_upgrade['active'] ) ? true : false, ); $others = array(); if ( ! empty( $rollPlugins[ $slug ][ $last_version ] ) ) { $msg = MainWP_Updates_Helper::get_roll_msg( $rollPlugins[ $slug ][ $last_version ], true, 'notice' ); $others['roll_info'] = $msg; } ?> render_columns( $row_columns, $website, $others ); $action_rendered = isset( $row_columns['action'] ) ? true : false; if ( ! $action_rendered ) : ?> print_column_headers( false ); ?>
'; } return $column_display_name; } /** * Method hook_table_update_themes_header_content() * * Hook render the column header updates table. * * @param string $column_display_name column display name. * @param mixed $column_key column key. * @param bool $top Top or bottom header. */ public static function hook_table_update_themes_header_content( $column_display_name, $column_key, $top ) { if ( $top && 'title' === $column_key ) { $column_display_name = '
'; } return $column_display_name; } /** * Method render_themes_updates() * * Render the Themes Update Tab. * * @param mixed $website Child Site info. * @param mixed $active_tab Current active tab. * @param mixed $userExtension MainWP trusted themes data. * * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() * @uses \MainWP\Dashboard\MainWP_Updates_Table_Helper */ public static function render_themes_updates( $website, $active_tab, $userExtension ) { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated. $trustedThemes = json_decode( $userExtension->trusted_themes, true ); if ( ! is_array( $trustedThemes ) ) { $trustedThemes = array(); } $user_can_update_themes = \mainwp_current_user_can( 'dashboard', 'update_themes' ); $user_can_ignore_unignore = \mainwp_current_user_can( 'dashboard', 'ignore_unignore_updates' ); ?>
is_ignoreThemeUpdates ) : ?> theme_upgrades, true ); if ( ! is_array( $theme_upgrades ) ) { $theme_upgrades = array(); } $site_opts = MainWP_DB::instance()->get_website_options_array( $website, array( 'premium_upgrades', 'rollback_updates_data' ) ); if ( ! is_array( $site_opts ) ) { $site_opts = array(); } $decodedPremiumUpgrades = ! empty( $site_opts['premium_upgrades'] ) ? json_decode( $site_opts['premium_upgrades'], true ) : array(); $rollItems = ! empty( $site_opts['rollback_updates_data'] ) ? json_decode( $site_opts['rollback_updates_data'], true ) : array(); $rollThemes = array(); if ( is_array( $rollItems ) && ! empty( $rollItems['theme'] ) && is_array( $rollItems['theme'] ) ) { $rollThemes = $rollItems['theme']; } if ( is_array( $decodedPremiumUpgrades ) ) { foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) { $premiumUpgrade['premium'] = true; if ( 'theme' === $premiumUpgrade['type'] ) { $premiumUpgrade = array_filter( $premiumUpgrade ); if ( ! isset( $theme_upgrades[ $crrSlug ] ) ) { $theme_upgrades[ $crrSlug ] = array(); } $theme_upgrades[ $crrSlug ] = array_merge( $theme_upgrades[ $crrSlug ], $premiumUpgrade ); } } } $ignored_themes = json_decode( $website->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes ); } $ignored_themes = json_decode( $userExtension->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes ); } $updates_table_helper = new MainWP_Updates_Table_Helper( MAINWP_VIEW_PER_SITE, 'theme', array( 'show_select' => true ) ); add_filter( 'mainwp_updates_table_header_content', array( static::class, 'hook_table_update_themes_header_content' ), 10, 3 ); ?> print_column_headers(); ?> $theme_upgrade ) : ?> id ) . '_' . esc_attr( $theme_name ) . '" value="0" />'; ?> MainWP_System_Utility::get_theme_icon( $slug ) . ' ' . esc_html( $theme_upgrade['Name'] ) . $indent_hidden, 'version' => esc_html( $theme_upgrade['Version'] ), 'latest' => esc_html( $last_version ), 'trusted' => ( in_array( $slug, $trustedThemes, true ) ? true : false ), 'status' => ( isset( $theme_upgrade['active'] ) && $theme_upgrade['active'] ) ? true : false, ); $others = array(); if ( ! empty( $rollThemes[ $slug ][ $last_version ] ) ) { $msg = MainWP_Updates_Helper::get_roll_msg( $rollThemes[ $slug ][ $last_version ], true, 'notice' ); $others['roll_info'] = $msg; } ?> render_columns( $row_columns, $website, $others ); $action_rendered = isset( $row_columns['action'] ) ? true : false; if ( ! $action_rendered ) : ?> print_column_headers( false ); ?>
trusted_plugins ) ? json_decode( $userExtension->trusted_plugins, true ) : array(); if ( ! is_array( $trustedPlugins ) ) { $trustedPlugins = array(); } $trustedThemes = json_decode( $userExtension->trusted_themes, true ); if ( ! is_array( $trustedThemes ) ) { $trustedThemes = array(); } $user_can_update_translation = \mainwp_current_user_can( 'dashboard', 'update_translations' ); $is_demo = MainWP_Demo_Handle::is_demo_mode(); ?>
translation_upgrades, true ); ?>
render_demo_disable_button( '' . esc_html__( 'Update', 'mainwp' ) . '' ); } else { ?>
Trusted'; } else { $label = 'Not Trusted'; } return '' . $label . ''; } /** * Check if trans is trusted update. * * @param string $tran_info Translation slug. * @param array $trusted_plugins Trusted update plugins. * @param array $trusted_themes Trusted update themes. */ public static function is_trans_trusted_update( $tran_info, $trusted_plugins, $trusted_themes ) { if ( is_array( $tran_info ) && isset( $tran_info['type'] ) && isset( $tran_info['slug'] ) ) { $tran_slug = $tran_info['slug']; if ( 'plugin' === $tran_info['type'] && is_array( $trusted_plugins ) ) { foreach ( $trusted_plugins as $slug ) { $_slug = explode( '/', $slug )[0]; if ( $tran_slug === $_slug ) { return true; } } } elseif ( 'theme' === $tran_info['type'] && is_array( $trusted_themes ) && in_array( $tran_slug, $trusted_themes ) ) { return true; } } return false; } /** * Method render_abandoned_plugins() * * Render the Abandoned Plugin Tab. * * @param mixed $website Child Site info. * @param mixed $active_tab Current active tab. * @param mixed $userExtension MainWP trusted plugin data. * * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() */ public static function render_abandoned_plugins( $website, $active_tab, $userExtension ) { $user_can_ignore_unignore = \mainwp_current_user_can( 'dashboard', 'ignore_unignore_updates' ); $plugins_outdate = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_info' ); $plugins_outdate = ! empty( $plugins_outdate ) ? json_decode( $plugins_outdate, true ) : array(); if ( ! is_array( $plugins_outdate ) ) { $plugins_outdate = array(); } $pluginsOutdateDismissed = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' ); $pluginsOutdateDismissed = ! empty( $pluginsOutdateDismissed ) ? json_decode( $pluginsOutdateDismissed, true ) : array(); if ( is_array( $pluginsOutdateDismissed ) ) { $plugins_outdate = array_diff_key( $plugins_outdate, $pluginsOutdateDismissed ); } $decodedDismissedPlugins = json_decode( $userExtension->dismissed_plugins, true ); if ( is_array( $decodedDismissedPlugins ) ) { $plugins_outdate = array_diff_key( $plugins_outdate, $decodedDismissedPlugins ); } $str_format = esc_html__( 'Updated %s days ago', 'mainwp' ); ?>
$plugin_outdate ) : ?> diff( $plugin_last_updated_date )->format( '%a' ); $outdate_notice = sprintf( $str_format, $diff_in_days ); ?>
get_website_option( $website, 'themes_outdate_info' ); $themes_outdate = ! empty( $themes_outdate ) ? json_decode( $themes_outdate, true ) : array(); if ( ! is_array( $themes_outdate ) ) { $themes_outdate = array(); } if ( ! empty( $themes_outdate ) ) { $themesOutdateDismissed = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' ); $themesOutdateDismissed = ! empty( $themesOutdateDismissed ) ? json_decode( $themesOutdateDismissed, true ) : array(); if ( is_array( $themesOutdateDismissed ) ) { $themes_outdate = array_diff_key( $themes_outdate, $themesOutdateDismissed ); } $decodedDismissedThemes = json_decode( $userExtension->dismissed_themes, true ); if ( is_array( $decodedDismissedThemes ) ) { $themes_outdate = array_diff_key( $themes_outdate, $decodedDismissedThemes ); } } $str_format = esc_html__( 'Updated %s days ago', 'mainwp' ); ?>
$theme_outdate ) : ?> diff( $theme_last_updated_date )->format( '%a' ); $outdate_notice = sprintf( $str_format, $diff_in_days ); ?>