' . esc_html__( 'Updates', 'mainwp' ) . '', 'read', 'UpdatesManage', array( self::get_class_name(), 'render', ) ); $updates_count = MainWP_Common_Handler::instance()->sites_available_updates_count(); $label_color_plugins = ''; $label_color_themes = ''; $label_color_wp = ''; $label_color_translations = ''; $label_color_total = ''; if ( isset( $updates_count['plugins'] ) && 0 < $updates_count['plugins'] ) { $label_color_plugins = ' blue '; } if ( isset( $updates_count['wp'] ) && 0 < $updates_count['wp'] ) { $label_color_wp = ' blue '; } if ( isset( $updates_count['themes'] ) && 0 < $updates_count['themes'] ) { $label_color_themes = ' blue '; } if ( isset( $updates_count['translations'] ) && 0 < $updates_count['translations'] ) { $label_color_translations = ' blue '; } if ( isset( $updates_count['total'] ) && 0 < $updates_count['total'] ) { $label_color_total = ' blue '; } MainWP_Menu::add_left_menu( array( 'title' => esc_html__( 'Updates', 'mainwp' ) . ' ' . intval( $updates_count['total'] ) . '', 'parent_key' => 'managesites', 'slug' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage', 'icon' => '', 'desc' => 'Manage updates on your child sites', 'leftsub_order' => 4, ), 1 ); $show_language_updates = get_option( 'mainwp_show_language_updates', 1 ); if ( $show_language_updates ) { $init_sub_subleftmenu = array( array( 'title' => esc_html__( 'Plugins', 'mainwp' ) . ' ' . intval( $updates_count['plugins'] ) . '', 'parent_key' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage&tab=plugins-updates', 'slug' => 'UpdatesManage', 'right' => '', ), array( 'title' => esc_html__( 'Themes', 'mainwp' ) . ' ' . intval( $updates_count['themes'] ) . '', 'parent_key' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage&tab=themes-updates', 'slug' => 'UpdatesManage', 'right' => '', ), array( 'title' => esc_html__( 'WordPress', 'mainwp' ) . ' ' . intval( $updates_count['wp'] ) . '', 'parent_key' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage&tab=wordpress-updates', 'slug' => 'UpdatesManage&tab=wordpress-updates', 'right' => '', ), array( 'title' => esc_html__( 'Translation', 'mainwp' ) . ' ' . intval( $updates_count['translations'] ) . '', 'parent_key' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage&tab=translations-updates', 'slug' => 'UpdatesManage&tab=translations-updates', 'right' => '', ), ); } else { $init_sub_subleftmenu = array( array( 'title' => esc_html__( 'Plugins', 'mainwp' ) . ' ' . intval( $updates_count['plugins'] ) . '', 'parent_key' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage&tab=plugins-updates', 'slug' => 'UpdatesManage', 'right' => '', ), array( 'title' => esc_html__( 'Themes', 'mainwp' ) . ' ' . intval( $updates_count['themes'] ) . '', 'parent_key' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage&tab=themes-updates', 'slug' => 'UpdatesManage', 'right' => '', ), array( 'title' => esc_html__( 'WordPress', 'mainwp' ) . ' ' . intval( $updates_count['wp'] ) . '1', 'parent_key' => 'UpdatesManage', 'href' => 'admin.php?page=UpdatesManage&tab=wordpress-updates', 'slug' => 'UpdatesManage&tab=wordpress-updates', 'right' => '', ), ); } $init_sub_subleftmenu = apply_filters( 'mainwp_sub_leftmenu_updates', $init_sub_subleftmenu ); MainWP_Menu::init_subpages_left_menu( $subPages, $init_sub_subleftmenu, 'UpdatesManage', 'UpdatesManage' ); foreach ( $init_sub_subleftmenu as $item ) { if ( MainWP_Menu::is_disable_menu_item( 3, $item['slug'] ) ) { continue; } MainWP_Menu::add_left_menu( $item, 2 ); } } /** * Method on_load_page() * * Run on page load. */ public static function on_load_page() { add_filter( 'mainwp_header_actions_right', array( self::get_class_name(), 'screen_options' ), 10, 2 ); } /** * Method screen_options() * * Create Page Settings button. * * @param mixed $input Page Settings button HTML. * * @return mixed Page Settings button. */ public static function screen_options( $input ) { return $input . ' '; } /** * Sets the MainWP Update page page title and pass it off to method MainWP_UI::render_top_header(). * * @uses \MainWP\Dashboard\MainWP_UI::render_top_header() */ public static function render_header() { $params = array( 'title' => esc_html__( 'Available Updates', 'mainwp' ), ); MainWP_UI::render_top_header( $params ); } /** * Closes the page container. */ public static function render_footer() { echo ''; } /** * Generates individual site overview page link. * * @param object $website The site object. * @param bool $echo_out Either echo or not. * * @return string Dashboard link. */ public static function render_site_link_dashboard( $website, $echo_out = true ) { $lnk = '' . stripslashes( $website->name ) . ''; if ( $echo_out ) { echo $lnk; // phpcs:ignore WordPress.Security.EscapeOutput } else { return $lnk; } } /** * Checks if the current user has permission to uignore updates. * * @return bool Whether user can ignore updates or not. */ public static function user_can_ignore_updates() { if ( null === self::$user_can_ignore_updates ) { self::$user_can_ignore_updates = mainwp_current_user_have_right( 'dashboard', 'ignore_unignore_updates' ); } return self::$user_can_ignore_updates; } /** * Checks if the current user has permission to update translations. * * @return bool Whether user can update translations or not. */ public static function user_can_update_trans() { if ( null === self::$user_can_update_trans ) { self::$user_can_update_trans = mainwp_current_user_have_right( 'dashboard', 'update_translations' ); } return self::$user_can_update_trans; } /** * Checks if the current user has permission to update WordPress core files. * * @return bool Whether user can update WordPress or not. */ public static function user_can_update_wp() { if ( null === self::$user_can_update_wp ) { self::$user_can_update_wp = mainwp_current_user_have_right( 'dashboard', 'update_wordpress' ); } return self::$user_can_update_wp; } /** * Checks if the current user has permission to update themes. * * @return bool Whether user can update themes or not. */ public static function user_can_update_themes() { if ( null === self::$user_can_update_themes ) { self::$user_can_update_themes = mainwp_current_user_have_right( 'dashboard', 'update_themes' ); } return self::$user_can_update_themes; } /** * Checks if the current user has permission to update plugins. * * @return bool Whether user can update plugins or not. */ public static function user_can_update_plugins() { if ( null === self::$user_can_update_plugins ) { self::$user_can_update_plugins = mainwp_current_user_have_right( 'dashboard', 'update_plugins' ); } return self::$user_can_update_plugins; } /** * Renders updates page. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB_Common::get_groups_for_current_user() * @uses \MainWP\Dashboard\MainWP_DB::get_websites_by_group_id() * @uses \MainWP\Dashboard\MainWP_DB::get_website_option() * @uses \MainWP\Dashboard\MainWP_DB::fetch_object() * @uses \MainWP\Dashboard\MainWP_DB::data_seek() * @uses \MainWP\Dashboard\MainWP_Utility::array_sort() */ public static function render() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity -- current complexity is the only way to achieve desired results, pull request solutions appreciated. $websites = self::get_sites_for_current_user(); $userExtension = MainWP_DB_Common::instance()->get_user_extension(); $site_view = (int) $userExtension->site_view; $site_offset_for_groups = array(); $all_groups = array(); $sites_in_groups = array(); $all_groups_sites = array(); if ( MAINWP_VIEW_PER_GROUP === $site_view ) { $groups = MainWP_DB_Common::instance()->get_groups_for_current_user(); foreach ( $groups as $group ) { $all_groups[ $group->id ] = $group->name; } foreach ( $all_groups as $group_id => $group_name ) { $all_groups_sites[ $group_id ] = array(); $group_sites = MainWP_DB::instance()->get_websites_by_group_id( $group_id ); foreach ( $group_sites as $site ) { if ( ! isset( $sites_in_groups[ $site->id ] ) ) { $sites_in_groups[ $site->id ] = 1; } $all_groups_sites[ $group_id ][] = $site->id; } unset( $group_sites ); } $sites_not_in_groups = array(); $pos = 0; MainWP_DB::data_seek( $websites, 0 ); while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) { $site_offset_for_groups[ $website->id ] = $pos; ++$pos; if ( ! isset( $sites_in_groups[ $website->id ] ) ) { $sites_not_in_groups[] = $website->id; } } if ( 0 < count( $sites_not_in_groups ) ) { $all_groups_sites[0] = $sites_not_in_groups; $all_groups[0] = esc_html__( 'Others', 'mainwp' ); } } $decodedDismissedPlugins = json_decode( $userExtension->dismissed_plugins, true ); $decodedDismissedThemes = json_decode( $userExtension->dismissed_themes, true ); $total_wp_upgrades = 0; $total_plugin_upgrades = 0; $total_translation_upgrades = 0; $total_theme_upgrades = 0; $total_sync_errors = 0; $total_plugins_outdate = 0; $total_themes_outdate = 0; $allTranslations = array(); $translationsInfo = array(); $allPlugins = array(); $pluginsInfo = array(); $allThemes = array(); $themesInfo = array(); $allPluginsOutdate = array(); $allThemesOutdate = array(); MainWP_DB::data_seek( $websites, 0 ); while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) { $wp_upgrades = MainWP_DB::instance()->get_website_option( $website, 'wp_upgrades' ); $wp_upgrades = ! empty( $wp_upgrades ) ? json_decode( $wp_upgrades, true ) : array(); if ( $website->is_ignoreCoreUpdates ) { $wp_upgrades = array(); } if ( is_array( $wp_upgrades ) && 0 < count( $wp_upgrades ) ) { ++$total_wp_upgrades; } $translation_upgrades = json_decode( $website->translation_upgrades, true ); $plugin_upgrades = json_decode( $website->plugin_upgrades, true ); if ( $website->is_ignorePluginUpdates ) { $plugin_upgrades = array(); } $theme_upgrades = json_decode( $website->theme_upgrades, true ); 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 ] ) ) { $plugin_upgrades[ $crrSlug ] = array(); } $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 ( is_array( $plugin_upgrades ) && ! $website->is_ignorePluginUpdates ) { $_ignored_plugins = json_decode( $website->ignored_plugins, true ); if ( is_array( $_ignored_plugins ) ) { $plugin_upgrades = array_diff_key( $plugin_upgrades, $_ignored_plugins ); } $_ignored_plugins = json_decode( $userExtension->ignored_plugins, true ); if ( is_array( $_ignored_plugins ) ) { $plugin_upgrades = array_diff_key( $plugin_upgrades, $_ignored_plugins ); } $total_plugin_upgrades += count( $plugin_upgrades ); } if ( is_array( $theme_upgrades ) ) { $_ignored_themes = json_decode( $website->ignored_themes, true ); if ( is_array( $_ignored_themes ) ) { $theme_upgrades = array_diff_key( $theme_upgrades, $_ignored_themes ); } $_ignored_themes = json_decode( $userExtension->ignored_themes, true ); if ( is_array( $_ignored_themes ) ) { $theme_upgrades = array_diff_key( $theme_upgrades, $_ignored_themes ); } $total_theme_upgrades += count( $theme_upgrades ); } $themesIgnoredAbandoned_perSites = array(); $ignoredAbandoned_themes = MainWP_DB::instance()->get_website_option( $website, 'themes_outdate_dismissed' ); $ignoredAbandoned_themes = ! empty( $ignoredAbandoned_themes ) ? json_decode( $ignoredAbandoned_themes, true ) : array(); if ( is_array( $ignoredAbandoned_themes ) ) { $ignoredAbandoned_themes = array_filter( $ignoredAbandoned_themes ); $themesIgnoredAbandoned_perSites = array_merge( $themesIgnoredAbandoned_perSites, $ignoredAbandoned_themes ); } $ignoredAbandoned_plugins = MainWP_DB::instance()->get_website_option( $website, 'plugins_outdate_dismissed' ); $ignoredAbandoned_plugins = ! empty( $ignoredAbandoned_plugins ) ? json_decode( $ignoredAbandoned_plugins, true ) : array(); $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( $ignoredAbandoned_plugins ) ) { $plugins_outdate = array_diff_key( $plugins_outdate, $ignoredAbandoned_plugins ); } 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 ); } if ( MAINWP_VIEW_PER_PLUGIN_THEME === $site_view ) { if ( is_array( $translation_upgrades ) ) { foreach ( $translation_upgrades as $translation_upgrade ) { $slug = esc_html( $translation_upgrade['slug'] ); if ( ! isset( $allTranslations[ $slug ] ) ) { $allTranslations[ $slug ] = array( 'name' => isset( $translation_upgrade['name'] ) ? esc_html( $translation_upgrade['name'] ) : $slug, 'cnt' => 1, ); } else { ++$allTranslations[ $slug ]['cnt']; } $translationsInfo[ $slug ] = array( 'name' => isset( $translation_upgrade['name'] ) ? esc_html( $translation_upgrade['name'] ) : $slug, 'slug' => $slug, 'version' => esc_html( $translation_upgrade['version'] ), ); } } if ( is_array( $plugin_upgrades ) ) { foreach ( $plugin_upgrades as $slug => $plugin_upgrade ) { if ( ! isset( $allPlugins[ $slug ] ) ) { $allPlugins[ $slug ] = array( 'name' => esc_html( $plugin_upgrade['Name'] ), 'cnt' => 1, ); } else { ++$allPlugins[ $slug ]['cnt']; } $pluginsInfo[ $slug ] = array( 'name' => esc_html( $plugin_upgrade['Name'] ), 'slug' => isset( $plugin_upgrade['update']['slug'] ) ? esc_html( $plugin_upgrade['update']['slug'] ) : '', 'premium' => ( isset( $plugin_upgrade['premium'] ) ? esc_html( $plugin_upgrade['premium'] ) : 0 ), 'PluginURI' => esc_html( $plugin_upgrade['PluginURI'] ), ); } } if ( is_array( $theme_upgrades ) ) { foreach ( $theme_upgrades as $slug => $theme_upgrade ) { if ( ! isset( $allThemes[ $slug ] ) ) { $allThemes[ $slug ] = array( 'name' => esc_html( $theme_upgrade['Name'] ), 'cnt' => 1, ); } else { ++$allThemes[ $slug ]['cnt']; } $themesInfo[ $slug ] = array( 'name' => esc_html( $theme_upgrade['Name'] ), 'premium' => ( isset( $theme_upgrade['premium'] ) ? esc_html( $theme_upgrade['premium'] ) : 0 ), ); } } if ( is_array( $plugins_outdate ) ) { foreach ( $plugins_outdate as $slug => $plugin_outdate ) { $slug = esc_html( $slug ); if ( ! isset( $allPluginsOutdate[ $slug ] ) ) { $allPluginsOutdate[ $slug ] = array( 'name' => esc_html( $plugin_outdate['Name'] ), 'cnt' => 1, 'uri' => esc_html( $plugin_outdate['PluginURI'] ), ); } else { ++$allPluginsOutdate[ $slug ]['cnt']; } } } if ( is_array( $themes_outdate ) ) { foreach ( $themes_outdate as $slug => $theme_outdate ) { $slug = esc_html( $slug ); if ( ! isset( $allThemesOutdate[ $slug ] ) ) { $allThemesOutdate[ $slug ] = array( 'name' => esc_html( $theme_outdate['Name'] ), 'cnt' => 1, ); } else { ++$allThemesOutdate[ $slug ]['cnt']; } } } } if ( '' !== $website->sync_errors ) { ++$total_sync_errors; } } /** * Filter: mainwp_updates_translation_sort_by * * Filters the default sorting option for Translation updates. * * @since 4.1 */ $allTranslationsSortBy = apply_filters( 'mainwp_updates_translation_sort_by', 'name' ); /** * Filter: mainwp_updates_plugins_sort_by * * Filters the default sorting option for Plugin updates. * * @since 4.1 */ $allPluginsSortBy = apply_filters( 'mainwp_updates_plugins_sort_by', 'name' ); /** * Filter: mainwp_updates_themes_sort_by * * Filters the default sorting option for Theme updates. * * @since 4.1 */ $allThemesSortBy = apply_filters( 'mainwp_updates_themes_sort_by', 'name' ); /** * Filter: mainwp_updates_abandoned_plugins_sort_by * * Filters the default sorting option for Abandoned plugins. * * @since 4.1 */ $allPluginsOutdateSortBy = apply_filters( 'mainwp_updates_abandoned_plugins_sort_by', 'name' ); /** * Filter: mainwp_updates_abandoned_themes_sort_by * * Filters the default sorting option for Abandoned themes. * * @since 4.1 */ $allThemesOutdateSortBy = apply_filters( 'mainwp_updates_abandoned_themes_sort_by', 'name' ); MainWP_Utility::array_sort( $allTranslations, $allTranslationsSortBy ); MainWP_Utility::array_sort( $allPlugins, $allPluginsSortBy ); MainWP_Utility::array_sort( $allThemes, $allThemesSortBy ); MainWP_Utility::array_sort( $allPluginsOutdate, $allPluginsOutdateSortBy ); MainWP_Utility::array_sort( $allThemesOutdate, $allThemesOutdateSortBy ); $mainwp_show_language_updates = get_option( 'mainwp_show_language_updates', 1 ); /** * Limits number of updates to process. * * 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 ); // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( 0 < $limit_updates_all ) { if ( isset( $_GET['continue_update'] ) && '' !== $_GET['continue_update'] ) { self::$continue_update = sanitize_text_field( wp_unslash( $_GET['continue_update'] ) ); if ( 'plugins_upgrade_all' === self::$continue_update || 'themes_upgrade_all' === self::$continue_update || 'translations_upgrade_all' === self::$continue_update ) { if ( isset( $_GET['slug'] ) && '' !== $_GET['slug'] ) { self::$continue_update_slug = wp_unslash( $_GET['slug'] ); } } } } $current_tab = ''; if ( isset( $_GET['tab'] ) ) { $current_tab = sanitize_text_field( wp_unslash( $_GET['tab'] ) ); if ( ! in_array( $current_tab, array( 'wordpress-updates', 'plugins-updates', 'themes-updates', 'translations-updates', 'abandoned-plugins', 'abandoned-themes', true ) ) ) { $current_tab = 'plugins-updates'; } } else { $current_tab = 'plugins-updates'; } // phpcs:enable self::render_header( 'UpdatesManage' ); self::render_header_tabs( $mainwp_show_language_updates, $current_tab, $total_wp_upgrades, $total_plugin_upgrades, $total_theme_upgrades, $total_translation_upgrades, $total_plugins_outdate, $total_themes_outdate, $site_view ); ?>
', '', '', ' ', '', ' ' ); ?>
', '', '', ' ', '', ' ' ); ?>
trusted_plugins, true ); if ( ! is_array( $trustedPlugins ) ) { $trustedPlugins = array(); } ?>
trusted_themes, true ); if ( ! is_array( $trustedThemes ) ) { $trustedThemes = array(); } ?>
'false', 'paging' => 'false', 'stateSave' => 'true', 'info' => 'false', 'exclusive' => 'false', 'duration' => '200', ); /** * Filter: mainwp_updates_table_features * * Filters the Updates table features. * * @since 4.1 */ $table_features = apply_filters( 'mainwp_updates_table_features', $table_features ); ?> get_sql_website_by_id( $current_wpid, false, array( 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ) ); } else { $staging_enabled = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) || is_plugin_active( 'mainwp-timecapsule-extension/mainwp-timecapsule-extension.php' ); $is_staging = 'no'; if ( $staging_enabled ) { $staging_updates_view = MainWP_System_Utility::get_staging_options_sites_view_for_current_users(); if ( 'staging' === $staging_updates_view ) { $is_staging = 'yes'; } } $params = array( 'connected' => 'yes', ); $sql = MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp.url', false, false, null, false, array( 'premium_upgrades', 'plugins_outdate_dismissed', 'themes_outdate_dismissed', 'plugins_outdate_info', 'themes_outdate_info', 'favi_icon' ), $is_staging, $params ); } return MainWP_DB::instance()->query( $sql ); } /** * Renders header tabs * * @param bool $show_language_updates show language update. * @param string $current_tab current tab. * @param int $total_wp_upgrades total WP update. * @param int $total_plugin_upgrades total plugins update. * @param int $total_theme_upgrades total themes update. * @param int $total_translation_upgrades total translation update. * @param int $total_plugins_outdate total plugins outdate. * @param int $total_themes_outdate total theme outdate. * @param string $site_view current site view. */ public static function render_header_tabs( $show_language_updates, $current_tab, $total_wp_upgrades, $total_plugin_upgrades, $total_theme_upgrades, $total_translation_upgrades, $total_plugins_outdate, $total_themes_outdate, $site_view ) { // phpcs:ignore -- Current complexity is the only way to achieve desired results, pull request solutions appreciated. /** * Action: mainwp_updates_before_nav_tabs * * Fires before the navigation tabs on the Updates page. * * @since 4.1 */ do_action( 'mainwp_updates_before_nav_tabs' ); $header_tabs = array( 'plugins-updates' => array( 'slug' => 'plugins-updates', 'title' => esc_html__( 'Plugins Updates', 'mainwp' ), 'total_upgrades' => $total_plugin_upgrades, ), 'themes-updates' => array( 'slug' => 'themes-updates', 'title' => esc_html__( 'Themes Updates', 'mainwp' ), 'total_upgrades' => $total_theme_upgrades, ), 'wordpress-updates' => array( 'slug' => 'wordpress-updates', 'title' => esc_html__( 'WordPress Updates', 'mainwp' ), 'total_upgrades' => $total_wp_upgrades, ), ); if ( $show_language_updates ) { $header_tabs['translations-updates'] = array( 'slug' => 'translations-updates', 'title' => esc_html__( 'Translations Updates', 'mainwp' ), 'total_upgrades' => $total_translation_upgrades, ); } $header_tabs['abandoned-plugins'] = array( 'slug' => 'abandoned-plugins', 'title' => esc_html__( 'Abandoned Plugins', 'mainwp' ), 'total_upgrades' => $total_plugins_outdate, ); $header_tabs['abandoned-themes'] = array( 'slug' => 'abandoned-themes', 'title' => esc_html__( 'Abandoned Themes', 'mainwp' ), 'total_upgrades' => $total_themes_outdate, ); $header_tabs = apply_filters( 'mainwp_page_hearder_tabs_updates', $header_tabs ); ?>
render_demo_disable_button( '' . esc_html__( 'Check for Abandoned Plugins', 'mainwp' ) . '' ); } else { ?> render_demo_disable_button( '' . esc_html__( 'Check for Abandoned Themes', 'mainwp' ) . '' ); } else { ?>
offline_check_result || '-1' === $website->http_response_code ) { continue; } $restoreSlug = ''; if ( ! empty( $restorePageSlug ) ) { if ( $enable_legacy_backup ) { $restoreSlug = $restorePageSlug . '&backupid=' . intval( $website->id ); } elseif ( self::activated_primary_backup_plugin( $mainwp_primaryBackup, $website ) ) { $restoreSlug = $restorePageSlug . '&id=' . intval( $website->id ); } } ?>
sync_errors ) ) { ?>
'false', 'paging' => 'false', 'stateSave' => 'true', 'info' => 'false', 'responsive' => 'true', ); /** * Filter: mainwp_updates_http_responses_datatable_features * * Filters the DataTable options for the HTTP Responses table on the Updates page. * * @since 4.1 */ $table_features = apply_filters( 'mainwp_updates_http_responses_datatable_features', $table_features ); ?>
plugins, 1 ); if ( ! is_array( $plugins ) || 0 === count( $plugins ) ) { return false; } $checks = array( 'backupbuddy' => 'backupbuddy/backupbuddy.php', 'backupwp' => array( 'backwpup/backwpup.php', 'backwpup-pro/backwpup.php' ), 'updraftplus' => 'updraftplus/updraftplus.php', ); $slug = isset( $checks[ $what ] ) ? $checks[ $what ] : ''; if ( empty( $slug ) ) { return false; } $installed = false; foreach ( $plugins as $plugin ) { if ( ( is_string( $slug ) && strtolower( $plugin['slug'] ) === $slug ) || ( is_array( $slug ) && in_array( $plugin['slug'], $slug ) ) ) { if ( $plugin['active'] ) { $installed = true; } break; } } return $installed; } /** * Sets the HTML selector to continue updates. * * @param string $current_update current update string. * @param bool $slug Whether to update slug. */ public static function set_continue_update_html_selector( $current_update, $slug = false ) { $check_slug = true; if ( ! empty( $slug ) ) { $check_slug = ( $slug === self::$continue_update_slug ) ? true : false; } if ( $check_slug && $current_update === self::$continue_update ) { self::$continue_selector = 'updatesoverview_continue_update_me'; } else { self::$continue_selector = ''; } } /** * Gets the HTML selector to continue updates. * * @return void. */ public static function get_continue_update_selector() { echo esc_attr( self::$continue_selector ); } /** * Displays the updates modal window during updates. */ public static function render_updates_modal() { ?>

Update Plugins
Plugins Auto Updates
Ignore Plugin Updates
Update Themes
Themes Auto Updates
Ignore Theme Updates
Update WordPress Core
Auto Update WordPress Core
Ignore WordPress Core Update
Your custom text
* * @since 4.1 */ do_action( 'mainwp_updates_help_item' ); ?>