2583 lines
138 KiB
PHP
2583 lines
138 KiB
PHP
<?php
|
|
/**
|
|
* MainWP Updates Page.
|
|
*
|
|
* @package MainWP/Dashboard
|
|
*/
|
|
|
|
namespace MainWP\Dashboard;
|
|
|
|
/**
|
|
* Class MainWP_Updates
|
|
*
|
|
* @package MainWP\Dashboard
|
|
*/
|
|
class MainWP_Updates { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
|
|
|
|
/**
|
|
* User can ignore updates.
|
|
*
|
|
* @var bool $user_can_ignore_updates User can ignore updates.
|
|
*/
|
|
public static $user_can_ignore_updates = null;
|
|
|
|
/**
|
|
* User can update translations.
|
|
*
|
|
* @var bool $user_can_update_trans User can update translations.
|
|
*/
|
|
public static $user_can_update_trans = null;
|
|
|
|
/**
|
|
* User can update WordPress core files.
|
|
*
|
|
* @var bool $user_can_update_wp User can update WordPress core files.
|
|
*/
|
|
public static $user_can_update_wp = null;
|
|
|
|
/**
|
|
* User can update themes.
|
|
*
|
|
* @var bool $user_can_update_themes User can update themes.
|
|
*/
|
|
public static $user_can_update_themes = null;
|
|
|
|
/**
|
|
* User can update plugins.
|
|
*
|
|
* @var bool $user_can_update_plugins User can update plugins.
|
|
*/
|
|
public static $user_can_update_plugins = null;
|
|
|
|
/**
|
|
* Placeholder for continue selector.
|
|
*
|
|
* @var string $continue_selector Placeholder for continue selector.
|
|
*/
|
|
public static $continue_selector = '';
|
|
|
|
/**
|
|
* Placeholder for continue update.
|
|
*
|
|
* @var string $continue_update Placeholder for continue update.
|
|
*/
|
|
public static $continue_update = '';
|
|
|
|
/**
|
|
* Placeholder for continue update slug.
|
|
*
|
|
* @var string $continue_update_slug Placeholder for continue update slug.
|
|
*/
|
|
public static $continue_update_slug = '';
|
|
|
|
/**
|
|
* Public static varable to hold Subpages information.
|
|
*
|
|
* @var array $subPages
|
|
*/
|
|
public static $subPages;
|
|
|
|
/**
|
|
* Current page.
|
|
*
|
|
* @static
|
|
* @var string $page Current page.
|
|
*/
|
|
public static $page;
|
|
|
|
/**
|
|
* Gets Class Name.
|
|
*
|
|
* @return object
|
|
*/
|
|
public static function get_class_name() {
|
|
return __CLASS__;
|
|
}
|
|
|
|
/**
|
|
* Instantiates MainWP Updates Page.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Post::get_class_name()
|
|
*/
|
|
public static function init() {
|
|
/**
|
|
* This hook allows you to render the Post page header via the 'mainwp-pageheader-updates' action.
|
|
*
|
|
* This hook is normally used in the same context of 'mainwp-getsubpages-updates'
|
|
*
|
|
* @see \MainWP_Updates::render_header
|
|
*/
|
|
add_action( 'mainwp-pageheader-updates', array( MainWP_Post::get_class_name(), 'render_header' ) );
|
|
|
|
/**
|
|
* This hook allows you to render the Updates page footer via the 'mainwp-pagefooter-updates' action.
|
|
*
|
|
* This hook is normally used in the same context of 'mainwp-getsubpages-updates'
|
|
*
|
|
* @see \MainWP_Updates::render_footer
|
|
*/
|
|
add_action( 'mainwp-pagefooter-updates', array( MainWP_Post::get_class_name(), 'render_footer' ) );
|
|
|
|
add_action( 'mainwp_help_sidebar_content', array( static::get_class_name(), 'mainwp_help_content' ) );
|
|
add_action( 'admin_init', array( static::get_class_name(), 'admin_init' ) );
|
|
}
|
|
|
|
/**
|
|
* Init method.
|
|
*/
|
|
public static function admin_init() {
|
|
static::handle_post_staging_sites_view();
|
|
}
|
|
|
|
/**
|
|
* Renders init updates menu.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Menu::add_left_menu()
|
|
*/
|
|
public static function init_menu() {
|
|
static::init_left_menu( static::$subPages );
|
|
add_action( 'load-' . static::$page, array( static::get_class_name(), 'on_load_page' ) );
|
|
}
|
|
|
|
/**
|
|
* Initiates Updates menu.
|
|
*
|
|
* @param array $subPages Sub pages array.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Menu::add_left_menu()
|
|
* @uses \MainWP\Dashboard\MainWP_Menu::init_subpages_left_menu()
|
|
* @uses \MainWP\Dashboard\MainWP_Menu::is_disable_menu_item()
|
|
*/
|
|
public static function init_left_menu( $subPages = array() ) {
|
|
static::$page = add_submenu_page(
|
|
'mainwp_tab',
|
|
__( 'Updates', 'mainwp' ),
|
|
'<span id="mainwp-Updates">' . esc_html__( 'Updates', 'mainwp' ) . '</span>',
|
|
'read',
|
|
'UpdatesManage',
|
|
array(
|
|
static::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' ) . ' <span class="ui ' . $label_color_total . ' mini label">' . intval( $updates_count['total'] ) . '</span>',
|
|
'parent_key' => 'managesites',
|
|
'slug' => 'UpdatesManage',
|
|
'href' => 'admin.php?page=UpdatesManage',
|
|
'icon' => '<i class="sync icon"></i>',
|
|
'desc' => 'Manage updates on your child sites',
|
|
'leftsub_order' => 4,
|
|
),
|
|
1
|
|
);
|
|
|
|
$init_sub_subleftmenu = array(
|
|
array(
|
|
'title' => esc_html__( 'Plugins', 'mainwp' ) . ' <span class="ui ' . $label_color_plugins . ' label">' . intval( $updates_count['plugins'] ) . '</span>',
|
|
'parent_key' => 'UpdatesManage',
|
|
'href' => 'admin.php?page=UpdatesManage&tab=plugins-updates',
|
|
'slug' => 'UpdatesManage',
|
|
'right' => '',
|
|
),
|
|
array(
|
|
'title' => esc_html__( 'Themes', 'mainwp' ) . ' <span class="ui ' . $label_color_themes . ' label">' . intval( $updates_count['themes'] ) . '</span>',
|
|
'parent_key' => 'UpdatesManage',
|
|
'href' => 'admin.php?page=UpdatesManage&tab=themes-updates',
|
|
'slug' => 'UpdatesManage',
|
|
'right' => '',
|
|
),
|
|
array(
|
|
'title' => esc_html__( 'WordPress', 'mainwp' ) . ' <span class="ui ' . $label_color_wp . ' label">' . intval( $updates_count['wp'] ) . '</span>',
|
|
'parent_key' => 'UpdatesManage',
|
|
'href' => 'admin.php?page=UpdatesManage&tab=wordpress-updates',
|
|
'slug' => 'UpdatesManage&tab=wordpress-updates',
|
|
'right' => '',
|
|
'active_params' => array( 'tab' => 'updates-ignore' ),
|
|
),
|
|
array(
|
|
'title' => esc_html__( 'Updates Ignore', 'mainwp' ),
|
|
'parent_key' => 'UpdatesManage',
|
|
'slug' => 'UpdatesManage&tab=updates-ignore',
|
|
'href' => '', // fix warning.
|
|
'menu_hidden' => true,
|
|
),
|
|
);
|
|
|
|
$show_language_updates = get_option( 'mainwp_show_language_updates', 1 );
|
|
if ( $show_language_updates ) {
|
|
$init_sub_subleftmenu[] = array(
|
|
'title' => esc_html__( 'Translation', 'mainwp' ) . ' <span class="ui ' . $label_color_translations . ' label">' . intval( $updates_count['translations'] ) . '</span>',
|
|
'parent_key' => 'UpdatesManage',
|
|
'href' => 'admin.php?page=UpdatesManage&tab=translations-updates',
|
|
'slug' => 'UpdatesManage&tab=translations-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( static::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 .
|
|
'<a class="ui button basic icon" onclick="mainwp_manage_updates_screen_options(); return false;" data-inverted="" data-position="bottom right" href="#" target="_blank" data-tooltip="' . esc_html__( 'Page Settings', 'mainwp' ) . '">
|
|
<i class="cog icon"></i>
|
|
</a>';
|
|
}
|
|
|
|
/**
|
|
* 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 '</div>';
|
|
}
|
|
|
|
/**
|
|
* 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 = '<a href="' . esc_url( admin_url( 'admin.php?page=managesites&dashboard=' . $website->id ) ) . '" data-inverted="" data-tooltip="' . esc_html__( 'Visit this dashboard.', 'mainwp' ) . '">' . stripslashes( $website->name ) . '</a>';
|
|
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 === static::$user_can_ignore_updates ) {
|
|
static::$user_can_ignore_updates = \mainwp_current_user_can( 'dashboard', 'ignore_unignore_updates' );
|
|
}
|
|
return static::$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 === static::$user_can_update_trans ) {
|
|
static::$user_can_update_trans = \mainwp_current_user_can( 'dashboard', 'update_translations' );
|
|
}
|
|
return static::$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 === static::$user_can_update_wp ) {
|
|
static::$user_can_update_wp = \mainwp_current_user_can( 'dashboard', 'update_wordpress' );
|
|
}
|
|
return static::$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 === static::$user_can_update_themes ) {
|
|
static::$user_can_update_themes = \mainwp_current_user_can( 'dashboard', 'update_themes' );
|
|
}
|
|
return static::$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 === static::$user_can_update_plugins ) {
|
|
static::$user_can_update_plugins = \mainwp_current_user_can( 'dashboard', 'update_plugins' );
|
|
}
|
|
return static::$user_can_update_plugins;
|
|
}
|
|
|
|
/**
|
|
* Renders updates page.
|
|
*
|
|
* @param string $abandoned_tab Render abandoned plugins|themes tab, abandoned_plugins|abandoned_themes.
|
|
*
|
|
* @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( $abandoned_tab = '' ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity -- NOSONAR - current complexity is the only way to achieve desired results, pull request solutions appreciated.
|
|
|
|
static::handle_limit_sites();
|
|
|
|
$websites = static::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 ( ! empty( $sites_not_in_groups ) ) {
|
|
$all_groups_sites[0] = $sites_not_in_groups;
|
|
$all_groups[0] = esc_html__( 'Others', 'mainwp' );
|
|
}
|
|
}
|
|
|
|
$decodedDismissedPlugins = ! empty( $userExtension->dismissed_plugins ) ? json_decode( $userExtension->dismissed_plugins, true ) : array();
|
|
$decodedDismissedThemes = ! empty( $userExtension->dismissed_themes ) ? json_decode( $userExtension->dismissed_themes, true ) : array();
|
|
$decodedDismissedCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array();
|
|
|
|
$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 = ! 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, $decodedDismissedCores, 'core' ) ) {
|
|
$wp_upgrades = array();
|
|
}
|
|
|
|
if ( is_array( $wp_upgrades ) && ! empty( $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 ] ) ) {
|
|
continue; // to fix missing update name.
|
|
}
|
|
$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 = 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 );
|
|
}
|
|
$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 = 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 );
|
|
}
|
|
|
|
$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 );
|
|
}
|
|
|
|
// to fix displaying per sites/tags.
|
|
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 ( 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'] ),
|
|
'version' => esc_html( $plugin_upgrade['Version'] ),
|
|
);
|
|
}
|
|
}
|
|
|
|
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'];
|
|
}
|
|
|
|
$up_th_name = isset( $theme_upgrade['Name'] ) ? esc_html( $theme_upgrade['Name'] ) : '';
|
|
|
|
if ( empty( $up_th_name ) ) {
|
|
$up_th_name = isset( $theme_upgrade['name'] ) ? esc_html( $theme_upgrade['name'] ) : 'N/A';
|
|
}
|
|
|
|
$themesInfo[ $slug ] = array(
|
|
'name' => $up_th_name,
|
|
'premium' => ( isset( $theme_upgrade['premium'] ) ? esc_html( $theme_upgrade['premium'] ) : 0 ),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
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 && isset( $_GET['continue_update'] ) && '' !== $_GET['continue_update'] ) {
|
|
static::$continue_update = sanitize_text_field( wp_unslash( $_GET['continue_update'] ) );
|
|
if ( ( 'plugins_upgrade_all' === static::$continue_update || 'themes_upgrade_all' === static::$continue_update || 'translations_upgrade_all' === static::$continue_update ) && isset( $_GET['slug'] ) && '' !== $_GET['slug'] ) {
|
|
static::$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', 'updates-ignore', 'plugins-updates', 'themes-updates', 'translations-updates', true ) ) ) {
|
|
$current_tab = 'plugins-updates';
|
|
}
|
|
} elseif ( 'abandoned_plugins' === $abandoned_tab ) {
|
|
$current_tab = 'abandoned-plugins';
|
|
} elseif ( 'abandoned_themes' === $abandoned_tab ) {
|
|
$current_tab = 'abandoned-themes';
|
|
}
|
|
|
|
if ( empty( $current_tab ) ) {
|
|
$current_tab = 'plugins-updates';
|
|
}
|
|
|
|
// phpcs:enable
|
|
static::render_header( 'UpdatesManage' );
|
|
|
|
static::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 );
|
|
|
|
?>
|
|
<div class="ui segment" id="mainwp-manage-updates">
|
|
<?php if ( MainWP_Utility::show_mainwp_message( 'notice', 'mainwp-manage-updates-message' ) ) { ?>
|
|
<div class="ui info message">
|
|
<i class="close icon mainwp-notice-dismiss" notice-id="mainwp-manage-updates-message"></i>
|
|
<div><?php printf( esc_html__( 'Manage available updates for all your child sites. From here, you can update update %1$splugins%2$s, %3$sthemes%4$s, and %5$sWordPress core%6$s.', 'mainwp' ), '<a href="https://mainwp.com/kb/update-plugins/" target="_blank">', '</a>', '<a href="https://mainwp.com/kb/update-themes/" target="_blank">', '</a> <i class="external alternate icon"></i>', '<a href="https://mainwp.com/kb/update-wordpress-core/" target="_blank">', '</a> <i class="external alternate icon"></i>' ); ?></div>
|
|
<div><?php printf( esc_html__( 'Also, from here, you can ignore updates for %1$sWordPress core%2$s, %3$splugins%4$s, and %5$sthemes%6$s.', 'mainwp' ), '<a href="https://mainwp.com/kb/ignore-wordpress-core-update/" target="_blank">', '</a>', '<a href="https://mainwp.com/kb/ignore-plugin-updates/" target="_blank">', '</a> <i class="external alternate icon"></i>', '<a href="https://mainwp.com/kb/ignore-theme-updates/" target="_blank">', '</a> <i class="external alternate icon"></i>' ); ?></div>
|
|
</div>
|
|
<?php } ?>
|
|
<?php
|
|
|
|
$hooks_tabs = apply_filters( 'mainwp_pages_updates_render_tabs', false, $current_tab );
|
|
|
|
if ( false === $hooks_tabs ) {
|
|
if ( 'wordpress-updates' === $current_tab ) {
|
|
static::render_wp_update_tab( $websites, $userExtension, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups, $site_view );
|
|
} elseif ( 'updates-ignore' === $current_tab ) {
|
|
static::render_wp_ignore_update_tab( $websites, $userExtension );
|
|
} elseif ( 'plugins-updates' === $current_tab ) {
|
|
static::render_plugins_update_tab( $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups, $site_view );
|
|
} elseif ( 'themes-updates' === $current_tab ) {
|
|
static::render_themes_update_tab( $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups, $site_view );
|
|
} elseif ( 'translations-updates' === $current_tab ) {
|
|
static::render_trans_update_tab( $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups, $site_view );
|
|
} elseif ( 'abandoned-plugins' === $current_tab ) {
|
|
static::render_abandoned_plugins_tab( $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups, $site_view );
|
|
} elseif ( 'abandoned-themes' === $current_tab ) {
|
|
static::render_abandoned_themes_tab( $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups, $site_view );
|
|
}
|
|
?>
|
|
</div>
|
|
<?php
|
|
static::render_js_updates( $site_view );
|
|
}
|
|
|
|
static::render_updates_modal();
|
|
|
|
static::render_plugin_details_modal();
|
|
MainWP_UI::render_modal_upload_icon();
|
|
static::render_screen_options_modal();
|
|
static::render_footer();
|
|
?>
|
|
<script type="text/javascript">
|
|
mainwp_manage_updates_screen_options = function () {
|
|
jQuery( '#mainwp-manage-updates-screen-options-modal' ).modal( 'show' );
|
|
jQuery( '#manage-updates-screen-options-form' ).submit( function() {
|
|
jQuery( '#mainwp-manage-updates-screen-options-modal' ).modal( 'hide' );
|
|
} );
|
|
return false;
|
|
};
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Render WP updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param object $userExtension User Extension object.
|
|
* @param int $total_wp_upgrades Number of available WP upates.
|
|
* @param array $all_groups_sites Array containing all groups and sites.
|
|
* @param array $all_groups Array containing all groups.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
* @param string $site_view Current view.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_DB::data_seek()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Group::render_wpcore_updates()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Site::render_wpcore_updates()
|
|
*/
|
|
public static function render_wp_update_tab( $websites, $userExtension, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups, $site_view ) {
|
|
?>
|
|
<div class="ui active tab" data-tab="wordpress-updates">
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_before_wp_updates
|
|
*
|
|
* Fires at the top of the WP updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_wp_upgrades Number of available WP upates.
|
|
* @param array $all_groups_sites Array containing all groups and sites.
|
|
* @param array $all_groups Array containing all groups.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_before_wp_updates', $websites, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups );
|
|
if ( MAINWP_VIEW_PER_GROUP === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_pergroup_before_wp_updates
|
|
*
|
|
* Fires at the top of the WP updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_wp_upgrades Number of available WP upates.
|
|
* @param array $all_groups_sites Array containing all groups and sites.
|
|
* @param array $all_groups Array containing all groups.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_before_wp_updates', $websites, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Group::render_wpcore_updates( $websites, $userExtension, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups );
|
|
/**
|
|
* Action: mainwp_updates_pergroup_after_wp_updates
|
|
*
|
|
* Fires at the bottom of the WP updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_wp_upgrades Number of available WP upates.
|
|
* @param array $all_groups_sites Array containing all groups and sites.
|
|
* @param array $all_groups Array containing all groups.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_after_wp_updates', $websites, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups );
|
|
} else {
|
|
/**
|
|
* Action: mainwp_updates_persite_before_wp_updates
|
|
*
|
|
* Fires at the top of the WP updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_wp_upgrades Number of available WP upates.
|
|
* @param array $all_groups_sites Array containing all groups and sites.
|
|
* @param array $all_groups Array containing all groups.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_before_wp_updates', $websites, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups );
|
|
MainWP_DB::data_seek( $websites, 0 );
|
|
MainWP_Updates_Per_Site::render_wpcore_updates( $websites, $userExtension, $total_wp_upgrades );
|
|
/**
|
|
* Action: mainwp_updates_persite_after_wp_updates
|
|
*
|
|
* Fires at the bottom of the WP updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_wp_upgrades Number of available WP upates.
|
|
* @param array $all_groups_sites Array containing all groups and sites.
|
|
* @param array $all_groups Array containing all groups.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_after_wp_updates', $websites, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups );
|
|
}
|
|
/**
|
|
* Action: mainwp_updates_after_wp_updates
|
|
*
|
|
* Fires at the top of the WP updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_wp_upgrades Number of available WP upates.
|
|
* @param array $all_groups_sites Array containing all groups and sites.
|
|
* @param array $all_groups Array containing all groups.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_wp_updates', $websites, $total_wp_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups );
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
|
|
/**
|
|
* Renders WP updates tab.
|
|
*
|
|
* @param array $websites Object containing child sites info.
|
|
* @param object $userExtension User extension.
|
|
*/
|
|
public static function render_wp_ignore_update_tab( $websites, $userExtension ) {
|
|
MainWP_WP_Updates::instance()->render_ignore( $websites, $userExtension );
|
|
}
|
|
|
|
/**
|
|
* Renders WP updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
* @param string $site_view Current view.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Group::render_plugins_updates()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Item::render_plugins_updates()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Site::render_plugins_updates()
|
|
*/
|
|
public static function render_plugins_update_tab( $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups, $site_view ) { //phpcs:ignore -- NOSONAR - compatible.
|
|
$trustedPlugins = json_decode( $userExtension->trusted_plugins, true );
|
|
if ( ! is_array( $trustedPlugins ) ) {
|
|
$trustedPlugins = array();
|
|
}
|
|
?>
|
|
<div class="ui active tab" data-tab="plugins-updates">
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_before_plugin_updates
|
|
*
|
|
* Fires at the top of the Plugin updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_before_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
if ( MAINWP_VIEW_PER_SITE === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_persite_before_plugin_updates
|
|
*
|
|
* Fires at the top of the Plugin updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_before_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Site::render_plugins_updates( $websites, $total_plugin_upgrades, $userExtension, $trustedPlugins );
|
|
/**
|
|
* Action: mainwp_updates_persite_after_plugin_updates
|
|
*
|
|
* Fires at the bottom of the Plugin updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_after_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
} elseif ( MAINWP_VIEW_PER_GROUP === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_pergroup_before_plugin_updates
|
|
*
|
|
* Fires at the top of the Plugin updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_before_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Group::render_plugins_updates( $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $site_offset_for_groups, $trustedPlugins );
|
|
/**
|
|
* Action: mainwp_updates_pergroup_after_plugin_updates
|
|
*
|
|
* Fires at the bottom of the Plugin updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_after_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
} else {
|
|
/**
|
|
* Action: mainwp_updates_perplugin_before_plugin_updates
|
|
*
|
|
* Fires at the top of the Plugin updates tab, per Plugin view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_perplugin_before_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Item::render_plugins_updates( $websites, $total_plugin_upgrades, $userExtension, $allPlugins, $pluginsInfo, $trustedPlugins );
|
|
/**
|
|
* Action: mainwp_updates_perplugin_after_plugin_updates
|
|
*
|
|
* Fires at the bottom of the Plugin updates tab, per Plugin view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_perplugin_after_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
}
|
|
/**
|
|
* Action: mainwp_updates_after_plugin_updates
|
|
*
|
|
* Fires at the bottom of the Plugin updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_plugin_upgrades Number of available plugin updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPlugins Array of all plugins.
|
|
* @param array $pluginsInfo Array of all plugins info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_plugin_updates', $websites, $total_plugin_upgrades, $userExtension, $all_groups_sites, $all_groups, $allPlugins, $pluginsInfo, $site_offset_for_groups );
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Renders theme update tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
* @param string $site_view Current view.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Group::render_themes_updates()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Item::render_themes_updates()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Site::render_themes_updates()
|
|
*/
|
|
public static function render_themes_update_tab( $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups, $site_view ) { //phpcs:ignore -- NOSONAR - compatible.
|
|
$trustedThemes = json_decode( $userExtension->trusted_themes, true );
|
|
if ( ! is_array( $trustedThemes ) ) {
|
|
$trustedThemes = array();
|
|
}
|
|
?>
|
|
<div class="ui active tab" data-tab="themes-updates">
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_before_theme_updates
|
|
*
|
|
* Fires at the top of the Theme updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_before_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
if ( MAINWP_VIEW_PER_SITE === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_persite_before_theme_updates
|
|
*
|
|
* Fires at the top of the Theme updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_before_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Site::render_themes_updates( $websites, $total_theme_upgrades, $userExtension, $trustedThemes );
|
|
/**
|
|
* Action: mainwp_updates_persite_after_theme_updates
|
|
*
|
|
* Fires at the bottom of the Theme updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_after_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
} elseif ( MAINWP_VIEW_PER_GROUP === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_pergroup_before_theme_updates
|
|
*
|
|
* Fires at the top of the Theme updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_before_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Group::render_themes_updates( $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $site_offset_for_groups, $trustedThemes );
|
|
/**
|
|
* Action: mainwp_updates_pergroup_after_theme_updates
|
|
*
|
|
* Fires at the bottom of the Theme updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_after_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
} else {
|
|
/**
|
|
* Action: mainwp_updates_pertheme_before_theme_updates
|
|
*
|
|
* Fires at the top of the Theme updates tab, per Theme view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pertheme_before_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Item::render_themes_updates( $websites, $total_theme_upgrades, $userExtension, $allThemes, $themesInfo, $trustedThemes );
|
|
/**
|
|
* Action: mainwp_updates_pertheme_after_theme_updates
|
|
*
|
|
* Fires at the bottom of the Theme updates tab, per Theme view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pertheme_after_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
}
|
|
/**
|
|
* Action: mainwp_updates_after_theme_updates
|
|
*
|
|
* Fires at the bottom of the Theme updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_theme_upgrades Number of available theme updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemes Array of all themes.
|
|
* @param array $themesInfo Array of all themes info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_theme_updates', $websites, $total_theme_upgrades, $userExtension, $all_groups_sites, $all_groups, $allThemes, $themesInfo, $site_offset_for_groups );
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Renders translations update tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param bool $mainwp_show_language_updates Either or not show language updates.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
* @param string $site_view Current Site view.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Group::render_trans_update()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Item::render_trans_update()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Site::render_trans_update()
|
|
*/
|
|
public static function render_trans_update_tab( $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups, $site_view ) { //phpcs:ignore -- NOSONAR - compatible.
|
|
if ( 1 === (int) $mainwp_show_language_updates ) {
|
|
?>
|
|
<div class="ui active tab" data-tab="translations-updates">
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_before_translation_updates
|
|
*
|
|
* Fires at the top of the Translation updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_before_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
if ( MAINWP_VIEW_PER_SITE === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_persite_before_translation_updates
|
|
*
|
|
* Fires at the top of the Translation updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_before_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Site::render_trans_update( $websites, $total_translation_upgrades, $userExtension );
|
|
/**
|
|
* Action: mainwp_updates_persite_after_translation_updates
|
|
*
|
|
* Fires at the bottom of the Translation updates tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_after_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
} elseif ( MAINWP_VIEW_PER_GROUP === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_pergroup_before_translation_updates
|
|
*
|
|
* Fires at the top of the Translation updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_before_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Group::render_trans_update( $websites, $total_translation_upgrades, $all_groups_sites, $all_groups, $site_offset_for_groups, $userExtension );
|
|
/**
|
|
* Action: mainwp_updates_pergroup_after_translation_updates
|
|
*
|
|
* Fires at the bottom of the Translation updates tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_after_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
} else {
|
|
/**
|
|
* Action: mainwp_updates_pertranslation_before_translation_updates
|
|
*
|
|
* Fires at the top of the Translation updates tab, per Translation view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pertranslation_before_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Item::render_trans_update( $websites, $total_translation_upgrades, $userExtension, $allTranslations, $translationsInfo );
|
|
/**
|
|
* Action: mainwp_updates_pertranslation_after_translation_updates
|
|
*
|
|
* Fires at the bottom of the Translation updates tab, per Translation view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pertranslation_after_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
}
|
|
/**
|
|
* Action: mainwp_updates_after_translation_updates
|
|
*
|
|
* Fires at the bottom of the Translation updates tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param int $total_translation_upgrades Number of available translation updates.
|
|
* @param object $userExtension User extension.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allTranslations Array of all translations.
|
|
* @param array $translationsInfo Array of all translations info.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_translation_updates', $websites, $total_translation_upgrades, $userExtension, $all_groups_sites, $all_groups, $allTranslations, $translationsInfo, $mainwp_show_language_updates, $site_offset_for_groups );
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Renders abandoned plugins tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
* @param string $site_view Current site view.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Group::render_abandoned_plugins()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Item::render_abandoned_plugins()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Site::render_abandoned_plugins()
|
|
*/
|
|
public static function render_abandoned_plugins_tab( $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups, $site_view ) {
|
|
?>
|
|
<div class="ui active tab" data-tab="abandoned-plugins">
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_before_abandoned_plugins
|
|
*
|
|
* Fires at the top of the Abandoned plugins tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_before_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
if ( MAINWP_VIEW_PER_SITE === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_persite_before_abandoned_plugins
|
|
*
|
|
* Fires at the top of the Abandoned plugins tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_before_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Site::render_abandoned_plugins( $websites, $allPluginsOutdate, $decodedDismissedPlugins );
|
|
/**
|
|
* Action: mainwp_updates_persite_after_abandoned_plugins
|
|
*
|
|
* Fires at the bottom of the Abandoned plugins tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_after_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
} elseif ( MAINWP_VIEW_PER_GROUP === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_pergroup_before_abandoned_plugins
|
|
*
|
|
* Fires at the top of the Abandoned plugins tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_before_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Group::render_abandoned_plugins( $websites, $allPluginsOutdate, $all_groups_sites, $all_groups, $site_offset_for_groups, $decodedDismissedPlugins );
|
|
/**
|
|
* Action: mainwp_updates_pergroup_after_abandoned_plugins
|
|
*
|
|
* Fires at the bottom of the Abandoned plugins tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_after_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
} else {
|
|
/**
|
|
* Action: mainwp_updates_perplugin_before_abandoned_plugins
|
|
*
|
|
* Fires at the top of the Abandoned plugins tab, per Plugin view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_perplugin_before_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Item::render_abandoned_plugins( $websites, $allPluginsOutdate, $decodedDismissedPlugins );
|
|
/**
|
|
* Action: mainwp_updates_perplugin_after_abandoned_plugins
|
|
*
|
|
* Fires at the bottom of the Abandoned plugins tab, per Plugin view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_perplugin_after_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
}
|
|
/**
|
|
* Action: mainwp_updates_after_abandoned_plugins
|
|
*
|
|
* Fires at the bottom of the Abandoned plugins tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allPluginsOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedPlugins Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_abandoned_plugins', $websites, $all_groups_sites, $all_groups, $allPluginsOutdate, $decodedDismissedPlugins, $site_offset_for_groups );
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Renders abandoned themes tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
* @param string $site_view Current site view.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Group::render_abandoned_themes()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Item::render_abandoned_themes()
|
|
* @uses \MainWP\Dashboard\MainWP_Updates_Per_Site::render_abandoned_themes()
|
|
*/
|
|
public static function render_abandoned_themes_tab( $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups, $site_view ) {
|
|
?>
|
|
<div class="ui active tab" data-tab="abandoned-themes">
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_before_abandoned_themes
|
|
*
|
|
* Fires at the top of the Abandoned themes tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_before_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
if ( MAINWP_VIEW_PER_SITE === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_persite_before_abandoned_themes
|
|
*
|
|
* Fires at the top of the Abandoned themes tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_before_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Site::render_abandoned_themes( $websites, $allThemesOutdate, $decodedDismissedThemes );
|
|
/**
|
|
* Action: mainwp_updates_persite_after_abandoned_themes
|
|
*
|
|
* Fires at the bottom of the Abandoned themes tab, per Site view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_persite_after_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
} elseif ( MAINWP_VIEW_PER_GROUP === $site_view ) {
|
|
/**
|
|
* Action: mainwp_updates_pergroup_before_abandoned_themes
|
|
*
|
|
* Fires at the top of the Abandoned themes tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_before_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Group::render_abandoned_themes( $websites, $allThemesOutdate, $all_groups_sites, $all_groups, $site_offset_for_groups, $decodedDismissedThemes );
|
|
/**
|
|
* Action: mainwp_updates_pergroup_after_abandoned_themes
|
|
*
|
|
* Fires at the bottom of the Abandoned themes tab, per Group view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pergroup_after_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
} else {
|
|
/**
|
|
* Action: mainwp_updates_pertheme_before_abandoned_themes
|
|
*
|
|
* Fires at the top of the Abandoned themes tab, per Theme view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pertheme_before_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
MainWP_Updates_Per_Item::render_abandoned_themes( $websites, $allThemesOutdate, $decodedDismissedThemes );
|
|
/**
|
|
* Action: mainwp_updates_pertheme_after_abandoned_themes
|
|
*
|
|
* Fires at the bottom of the Abandoned themes tab, per Theme view.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_pertheme_after_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
}
|
|
/**
|
|
* Action: mainwp_updates_after_abandoned_themes
|
|
*
|
|
* Fires at the bottom of the Abandoned themes tab.
|
|
*
|
|
* @param object $websites Object containing child sites info.
|
|
* @param array $all_groups_sites Array of all groups and sites.
|
|
* @param array $all_groups Array of all groups.
|
|
* @param array $allThemesOutdate Array of all abandoned plugins.
|
|
* @param array $decodedDismissedThemes Array of dismissed abandoned plugins.
|
|
* @param int $site_offset_for_groups Offset value.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_abandoned_themes', $websites, $all_groups_sites, $all_groups, $allThemesOutdate, $decodedDismissedThemes, $site_offset_for_groups );
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Renders JavaScript for update page.
|
|
*
|
|
* @param string $site_view current site view.
|
|
*/
|
|
public static function render_js_updates( $site_view ) {
|
|
$table_features = array(
|
|
'searching' => '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 );
|
|
?>
|
|
<script type="text/javascript">
|
|
jQuery( document ).ready( function () {
|
|
jQuery( '#mainwp-manage-updates .ui.accordion' ).accordion( {
|
|
"exclusive": <?php echo esc_html( $table_features['exclusive'] ); ?>,
|
|
"duration": <?php echo esc_html( $table_features['duration'] ); ?>,
|
|
onOpen: function(){
|
|
//mainwp_datatable_init_and_fix_recalc('table.mainwp-manage-updates-item-table');
|
|
}
|
|
} );
|
|
} );
|
|
|
|
mainwp_datatable_init_and_fix_recalc = function(selector){
|
|
jQuery(selector).each( function(e) {
|
|
if(jQuery(this).is(":visible")){
|
|
console.log('visible ' + jQuery(this).attr('id'));
|
|
jQuery(this).css( 'display', 'table' );
|
|
jQuery(this).DataTable().destroy();
|
|
let tb = jQuery(this).DataTable({
|
|
"paging":false,
|
|
"info": false,
|
|
"searching": false,
|
|
"ordering" : false,
|
|
"responsive": true
|
|
});
|
|
tb.columns.adjust();
|
|
tb.responsive.recalc();
|
|
}
|
|
});
|
|
}
|
|
|
|
jQuery( document ).on( 'click', '.trigger-all-accordion', function() {
|
|
if ( jQuery( this ).hasClass( 'active' ) ) {
|
|
jQuery( this ).removeClass( 'active' );
|
|
jQuery( '#mainwp-manage-updates .ui.accordion tr.title' ).each( function( i ) {
|
|
if ( jQuery( this ).hasClass( 'active' ) ) {
|
|
jQuery( this ).trigger( 'click' );
|
|
}
|
|
} );
|
|
} else {
|
|
jQuery( this ).addClass( 'active' );
|
|
jQuery( '#mainwp-manage-updates .ui.accordion tr.title' ).each( function( i ) {
|
|
if ( !jQuery( this ).hasClass( 'active' ) ) {
|
|
jQuery( this ).trigger( 'click' );
|
|
}
|
|
} );
|
|
}
|
|
} );
|
|
|
|
</script>
|
|
<?php
|
|
|
|
if ( MAINWP_VIEW_PER_GROUP === $site_view ) {
|
|
?>
|
|
<script type="text/javascript">
|
|
jQuery( document ).ready( function () {
|
|
updatesoverview_updates_init_group_view();
|
|
} );
|
|
</script>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets sites for updates
|
|
*
|
|
* @return object Object containing websites info.
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_DB::query()
|
|
* @uses \MainWP\Dashboard\MainWP_DB::get_sql_website_by_id()
|
|
* @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
|
|
* @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
|
|
* @uses \MainWP\Dashboard\MainWP_DB::data_seek()
|
|
* @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
|
|
*/
|
|
public static function get_sites_for_current_user() {
|
|
/**
|
|
* 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( '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_select_staging_view_sites();
|
|
if ( 'staging' === $staging_updates_view ) {
|
|
$is_staging = 'yes';
|
|
}
|
|
}
|
|
$params = array(
|
|
'connected' => 'yes',
|
|
);
|
|
|
|
$limit_sites = get_option( 'mainwp_manage_updates_limit_sites' );
|
|
if ( ! empty( $limit_sites ) ) {
|
|
$params['limit_sites'] = $limit_sites;
|
|
}
|
|
$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', 'rollback_updates_data', '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 -- NOSONAR -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__( 'Plugin Updates', 'mainwp' ),
|
|
'total_upgrades' => $total_plugin_upgrades,
|
|
),
|
|
'themes-updates' => array(
|
|
'slug' => 'themes-updates',
|
|
'title' => esc_html__( 'Theme 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 );
|
|
|
|
?>
|
|
<div id="mainwp-page-navigation-wrapper">
|
|
<div class="ui vertical menu mainwp-page-navigation">
|
|
<?php
|
|
foreach ( $header_tabs as $slug => $tab ) {
|
|
if ( empty( $tab['title'] ) ) {
|
|
continue;
|
|
}
|
|
?>
|
|
<a class="<?php echo $slug === $current_tab ? 'active' : ''; ?> item" data-tab="<?php echo esc_html( $slug ); ?>" href="admin.php?page=UpdatesManage&tab=<?php echo esc_html( $slug ); ?>"><?php echo esc_html( $tab['title'] ); ?><div class="ui small <?php echo empty( $tab['total_upgrades'] ) ? 'green' : 'red'; ?> label" timestamp="<?php echo esc_html( time() ); ?>"><?php echo intval( $tab['total_upgrades'] ); ?></div></a>
|
|
<?php
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
|
|
$hide_show_updates_per = 'updates-ignore' === $current_tab ? true : false;
|
|
|
|
$hide_show_updates_per = apply_filters( 'mainwp_updates_hide_show_updates_per', $hide_show_updates_per, $current_tab );
|
|
|
|
$show_select_staging_sites = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' );
|
|
|
|
/**
|
|
* Action: mainwp_updates_after_nav_tabs
|
|
*
|
|
* Fires after the navigation tabs on the Updates page.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_nav_tabs' );
|
|
|
|
/**
|
|
* Action: mainwp_updates_before_actions_bar
|
|
*
|
|
* Fires before the actions bar on the Updates page.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_before_actions_bar' );
|
|
?>
|
|
|
|
<?php if ( ! $hide_show_updates_per || $show_select_staging_sites ) : ?>
|
|
<?php if ( ( 'plugins-updates' === $current_tab && 0 < $total_plugin_upgrades ) || ( 'themes-updates' === $current_tab && 0 < $total_theme_upgrades ) || ( 'wordpress-updates' === $current_tab && 0 < $total_wp_upgrades ) || ( 'translations-updates' === $current_tab && 0 < $total_translation_upgrades ) || ( 'abandoned-plugins' === $current_tab && 0 < $total_plugins_outdate ) || ( 'abandoned-themes' === $current_tab && 0 < $total_themes_outdate ) ) : ?>
|
|
<div class="mainwp-sub-header">
|
|
<div class="ui three column grid">
|
|
<div class="left aligned middle aligned column">
|
|
<?php static::render_updates_view_options( $site_view ); ?>
|
|
<?php
|
|
if ( $show_select_staging_sites ) {
|
|
static::render_select_staging_sites_view();
|
|
}
|
|
?>
|
|
</div>
|
|
<div class="center aligned middle aligned column"></div>
|
|
<div class="right aligned middle aligned column">
|
|
<?php
|
|
/**
|
|
* Action: mainwp_widget_updates_actions_top
|
|
*
|
|
* Updates actions top content.
|
|
*
|
|
* @since 5.4.1
|
|
*/
|
|
do_action( 'mainwp_widget_updates_actions_top', $current_tab );
|
|
?>
|
|
<?php static::render_updates_actions_buttons( $current_tab ); ?>
|
|
<?php static::render_button_view_ignored_updates( $current_tab ); ?>
|
|
<?php static::render_abandoned_plugins_themes_buttons( $current_tab ); ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php elseif ( $show_select_staging_sites ) : ?>
|
|
<div class="mainwp-sub-header">
|
|
<div class="ui three column grid">
|
|
<div class="left aligned middle aligned column">
|
|
<?php static::render_select_staging_sites_view(); ?>
|
|
</div>
|
|
<div class="center aligned middle aligned column"></div>
|
|
<div class="right aligned middle aligned column">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
<?php endif; ?>
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_after_actions_bar
|
|
*
|
|
* Fires after the actions bar on the Updates page.
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_after_actions_bar' );
|
|
}
|
|
|
|
/**
|
|
* Method handle_post_staging_sites_view.
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function handle_post_staging_sites_view() {
|
|
//phpcs:disable WordPress.Security.NonceVerification.Missing
|
|
if ( isset( $_POST['mainwpStagingNonceView'] ) && wp_verify_nonce( sanitize_key( $_POST['mainwpStagingNonceView'] ), 'mainwpStagingNonceView' ) ) {
|
|
global $current_user;
|
|
if ( isset( $_POST['select_staging_options_siteview'] ) && in_array( $_POST['select_staging_options_siteview'], array( 'live', 'staging' ), true ) ) {
|
|
update_user_option( $current_user->ID, 'mainwp_staging_options_updates_view', $_POST['select_staging_options_siteview'] );
|
|
}
|
|
}
|
|
//phpcs:enable WordPress.Security.NonceVerification.Missing
|
|
}
|
|
|
|
/**
|
|
* Method render_select_staging_sites_view.
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function render_select_staging_sites_view() {
|
|
$view = MainWP_System_Utility::get_select_staging_view_sites();
|
|
$view_stagings = 'staging' === (string) $view ? true : false;
|
|
|
|
?>
|
|
<form method="post" action="" style="display:inline">
|
|
<select class="ui dropdown mini" id="mainwp_staging_select_options_siteview" name="select_staging_options_siteview">
|
|
<option value="live" <?php echo $view_stagings ? '' : 'selected'; ?>><?php esc_html_e( 'Production sites', 'mainwp' ); ?></option>
|
|
<option value="staging" <?php echo $view_stagings ? 'selected' : ''; ?>><?php esc_html_e( 'Staging sites', 'mainwp' ); ?></option>
|
|
</select>
|
|
<?php wp_nonce_field( 'mainwpStagingNonceView', 'mainwpStagingNonceView' ); ?>
|
|
</form>
|
|
<script type="text/javascript">
|
|
jQuery(document).ready(function ($) {
|
|
jQuery("#mainwp_staging_select_options_siteview").change(function() {
|
|
jQuery(this).closest("form").submit();
|
|
});
|
|
})
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
|
|
/**
|
|
* Method render_updates_view_options().
|
|
*
|
|
* @param mixed $site_view Site view.
|
|
* @return void
|
|
*/
|
|
public static function render_updates_view_options( $site_view = '' ) {
|
|
?>
|
|
<form method="post" action="" class="ui mini form" style="display:inline flow-root">
|
|
<?php wp_nonce_field( 'mainwp-admin-nonce' ); ?>
|
|
<div class="inline field">
|
|
<select class="ui mini dropdown" onchange="mainwp_siteview_onchange(this)" id="mainwp_select_options_siteview" name="select_mainwp_options_siteview">
|
|
<option value="1" class="item" <?php echo MAINWP_VIEW_PER_SITE === $site_view ? 'selected' : ''; ?>><?php esc_html_e( 'Show updates per Site', 'mainwp' ); ?></option>
|
|
<option value="0" class="item" <?php echo MAINWP_VIEW_PER_PLUGIN_THEME === $site_view ? 'selected' : ''; ?>><?php esc_html_e( 'Show updates per Item', 'mainwp' ); ?></option>
|
|
<option value="2" class="item" <?php echo MAINWP_VIEW_PER_GROUP === $site_view ? 'selected' : ''; ?>><?php esc_html_e( 'Show updates per Tag', 'mainwp' ); ?></option>
|
|
</select>
|
|
</div>
|
|
</form>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Method render_abandoned_plugins_themes_buttons().
|
|
*
|
|
* @param mixed $current_tab Current tab.
|
|
* @return void
|
|
*/
|
|
public static function render_abandoned_plugins_themes_buttons( $current_tab = '' ) {
|
|
if ( 'abandoned-plugins' === $current_tab ) {
|
|
?>
|
|
<a href="#" onClick="updatesoverview_bulk_check_abandoned('plugin'); return false;" class="ui green mini basic button"><?php esc_html_e( 'Check for Abandoned Plugins', 'mainwp' ); ?></a>
|
|
<?php } elseif ( 'abandoned-themes' === $current_tab ) { ?>
|
|
<a href="#" onClick="updatesoverview_bulk_check_abandoned('theme'); return false;" class="ui green mini basic button"><?php esc_html_e( 'Check for Abandoned Themes', 'mainwp' ); ?></a>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Method render_updates_actions_buttons().
|
|
*
|
|
* @param mixed $current_tab Current tab.
|
|
* @return void
|
|
*/
|
|
public static function render_updates_actions_buttons( $current_tab ) {
|
|
// dev-to-do: add checks if number of updates is higher than 0 to hide buttons when not needed.
|
|
if ( 'plugins-updates' === $current_tab ) {
|
|
if ( static::user_can_update_plugins() ) {
|
|
static::set_continue_update_html_selector( 'plugins_global_upgrade_all' );
|
|
?>
|
|
<a href="javascript:void(0)" onClick="updatesoverview_plugins_global_upgrade_all( false, true ); return false;" class="mainwp-update-selected-button ui mini green basic button"><?php esc_html_e( 'Update Selected Plugins', 'mainwp' ); ?></a>
|
|
<a href="javascript:void(0)" onClick="updatesoverview_plugins_global_upgrade_all(); return false;" class="mainwp-update-all-button ui mini green button"><?php esc_html_e( 'Update All Sites', 'mainwp' ); ?></a>
|
|
<?php
|
|
}
|
|
} elseif ( 'themes-updates' === $current_tab ) {
|
|
if ( static::user_can_update_themes() ) {
|
|
static::set_continue_update_html_selector( 'themes_global_upgrade_all' );
|
|
?>
|
|
<a href="javascript:void(0)" onClick="updatesoverview_themes_global_upgrade_all( false, true ); return false;" class="mainwp-update-selected-button ui mini green basic button"><?php esc_html_e( 'Update Selected Themes', 'mainwp' ); ?></a>
|
|
<a href="javascript:void(0)" onClick="updatesoverview_themes_global_upgrade_all(); return false;" class="mainwp-update-all-button ui mini green button"><?php esc_html_e( 'Update All Themes', 'mainwp' ); ?></a>
|
|
<?php
|
|
}
|
|
} elseif ( 'wordpress-updates' === $current_tab ) {
|
|
if ( static::user_can_update_wp() ) {
|
|
static::set_continue_update_html_selector( 'wpcore_global_upgrade_all' );
|
|
?>
|
|
<a href="javascript:void(0)" class="mainwp-update-selected-button ui green mini basic button" onclick="event.stopPropagation(); updatesoverview_wordpress_global_upgrade_all( false, true ); return false;"><?php esc_html_e( 'Update Selected WP Cores', 'mainwp' ); ?></a>
|
|
<a href="javascript:void(0)" class="mainwp-update-all-button ui green mini button" onclick="updatesoverview_wordpress_global_upgrade_all(); return false;"><?php esc_html_e( 'Update All WP Cores', 'mainwp' ); ?></a>
|
|
<?php
|
|
}
|
|
} elseif ( 'translations-updates' === $current_tab ) {
|
|
if ( static::user_can_update_trans() ) {
|
|
?>
|
|
<a href="javascript:void(0)" onClick="updatesoverview_translations_global_upgrade_all( false, true ); return false;" class="mainwp-update-selected-button ui button mini basic green"><?php esc_html_e( 'Update Selected Translations', 'mainwp' ); ?></a>
|
|
<a href="javascript:void(0)" onClick="updatesoverview_translations_global_upgrade_all(); return false;" class="mainwp-update-all-button ui button mini green"><?php esc_html_e( 'Update All Translations', 'mainwp' ); ?></a>
|
|
<?php
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Method render_button_view_ignored_updates().
|
|
*
|
|
* @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension()
|
|
* @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
|
|
* @uses \MainWP\Dashboard\MainWP_DB::fetch_object()
|
|
*
|
|
* @param string $current_tab current tab.
|
|
*
|
|
* @return null
|
|
*/
|
|
public static function render_button_view_ignored_updates( $current_tab = '' ) { //phpcs:ignore -- NOSONAR - complex.
|
|
if ( ! in_array( $current_tab, array( 'wordpress-updates', 'plugins-updates', 'themes-updates' ) ) ) {
|
|
return;
|
|
}
|
|
$websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user() );
|
|
$userExtension = MainWP_DB_Common::instance()->get_user_extension();
|
|
$decodedIgnoredPlugins = json_decode( $userExtension->ignored_plugins, true );
|
|
$decodedIgnoredThemes = json_decode( $userExtension->ignored_themes, true );
|
|
$decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array();
|
|
|
|
$cntp = 0;
|
|
$cntt = 0;
|
|
|
|
while ( $websites && ( $website = MainWP_DB::fetch_object( $websites ) ) ) {
|
|
|
|
$tmpDecodedIgnoredPlugins = json_decode( $website->ignored_plugins, true );
|
|
$tmpDecodedIgnoredThemes = json_decode( $website->ignored_themes, true );
|
|
if ( ! empty( $tmpDecodedIgnoredPlugins ) && is_array( $tmpDecodedIgnoredPlugins ) ) {
|
|
++$cntp;
|
|
}
|
|
if ( ! empty( $tmpDecodedIgnoredThemes ) && is_array( $tmpDecodedIgnoredThemes ) ) {
|
|
++$cntt;
|
|
}
|
|
}
|
|
|
|
$count_ignored_plugins = is_array( $decodedIgnoredPlugins ) ? count( $decodedIgnoredPlugins ) + $cntp : $cntp;
|
|
$count_ignored_themes = is_array( $decodedIgnoredThemes ) ? count( $decodedIgnoredThemes ) + $cntt : $cntt;
|
|
$count_ignored_cores = is_array( $decodedIgnoredCores ) ? count( $decodedIgnoredCores ) : 0;
|
|
?>
|
|
<?php if ( 'wordpress-updates' === $current_tab && 0 < $count_ignored_cores ) : ?>
|
|
<a class="ui mini basic button" href="admin.php?page=UpdatesManage&tab=updates-ignore" data-position="bottom right" data-tooltip="<?php esc_attr_e( 'Click here to see the list of ignored WordPress core updates.', 'mainwp' ); ?>" data-inverted=""><?php esc_html_e( 'View Ignored Updates', 'mainwp' ); ?></a>
|
|
<?php elseif ( 'plugins-updates' === $current_tab && 0 < $count_ignored_plugins ) : ?>
|
|
<a class="ui mini basic button" href="admin.php?page=PluginsIgnore"><?php esc_html_e( 'View Ignored Updates', 'mainwp' ); ?></a>
|
|
<?php elseif ( 'themes-updates' === $current_tab && 0 < $count_ignored_themes ) : ?>
|
|
<a class="ui mini basic button" href="admin.php?page=ThemesIgnore" ><?php esc_html_e( 'View Ignored Updates', 'mainwp' ); ?></a>
|
|
<?php endif; ?>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Method handle_limit_sites().
|
|
*/
|
|
public static function handle_limit_sites(){ // phpcs:ignore -- NOSONAR - complex function. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
|
|
// put hook here before loading sites.
|
|
$limit_number = apply_filters( 'mainwp_manage_updates_limit_loading', false, 'updates' );
|
|
$current_limit = get_option( 'mainwp_manage_updates_limit_sites' );
|
|
|
|
if ( (int) $limit_number !== (int) $current_limit ) {
|
|
update_option( 'mainwp_manage_updates_limit_sites', $limit_number );
|
|
update_option( 'mainwp_manage_updates_limit_current_page', 1 );
|
|
}
|
|
|
|
if ( ! empty( $limit_number ) ) {
|
|
|
|
$count = MainWP_DB::instance()->get_websites_count( null, true );
|
|
|
|
$current_page = 1;
|
|
if ( isset( $_GET['current_page'] ) && isset( $_GET['_opennonce'] ) && wp_verify_nonce( sanitize_key( $_GET['_opennonce'] ), 'mainwp-admin-nonce' ) ) {
|
|
$current_page = intval( $_GET['current_page'] );
|
|
}
|
|
|
|
if ( 0 >= $current_page ) {
|
|
$current_page = 1;
|
|
}
|
|
|
|
$total_page = ceil( $count / $limit_number );
|
|
|
|
if ( $current_page > $total_page ) {
|
|
$current_page = $total_page;
|
|
}
|
|
update_option( 'mainwp_manage_updates_limit_current_page', $current_page );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Method render_limit_load_sites().
|
|
*
|
|
* @param int $limit_number limit loading sites.
|
|
*/
|
|
public static function render_limit_load_sites( $limit_number) { // phpcs:ignore -- NOSONAR - complex function. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
|
|
|
|
$count = MainWP_DB::instance()->get_websites_count( null, true );
|
|
$total_page = ceil( $count / $limit_number );
|
|
|
|
$current_page = (int) get_option( 'mainwp_manage_updates_limit_current_page' );
|
|
|
|
$first = 1 === $current_page;
|
|
$last = $total_page <= $current_page;
|
|
|
|
?>
|
|
<div class="dt-paging paging_full_numbers">
|
|
<div class="ui stackable pagination menu"><menu>
|
|
<?php if ( $first ) { ?>
|
|
<li class="dt-paging-button item disabled"><div class="page-link first" aria-controls="mainwp-manage-sites-table" aria-disabled="true" aria-label="First" data-dt-idx="first" tabindex="-1">First</div></li>
|
|
<li class="dt-paging-button item disabled"><div class="page-link previous" aria-controls="mainwp-manage-sites-table" aria-disabled="true" aria-label="Previous" data-dt-idx="previous" tabindex="-1">Previous</div></li>
|
|
<?php } else { ?>
|
|
<li class="dt-paging-button item"><a href="admin.php?page=UpdatesManage" class="page-link first" aria-controls="mainwp-manage-sites-table" aria-label="First" data-dt-idx="first" tabindex="0">First</a></li>
|
|
<li class="dt-paging-button item"><a href="admin.php?page=UpdatesManage¤t_page=<?php echo intval( $current_page - 1 ); ?>&_opennonce=<?php echo esc_html( wp_create_nonce( 'mainwp-admin-nonce' ) ); ?>" class="page-link previous" aria-controls="mainwp-manage-sites-table" aria-label="Previous" data-dt-idx="previous" tabindex="0">Previous</a></li>
|
|
<?php } ?>
|
|
<?php
|
|
for ( $i = 1; $i <= $total_page;$i++ ) {
|
|
?>
|
|
<li class="dt-paging-button item <?php echo $current_page === $i ? 'active' : ''; ?>"><a href="admin.php?page=UpdatesManage¤t_page=<?php echo intval( $i ); ?>&_opennonce=<?php echo esc_html( wp_create_nonce( 'mainwp-admin-nonce' ) ); ?>" class="page-link" aria-controls="mainwp-manage-sites-table" aria-current="page" data-dt-idx="1" tabindex="0"><?php echo intval( $i ); ?></a></li>
|
|
<?php
|
|
}
|
|
?>
|
|
<?php if ( $last ) { ?>
|
|
<li class="dt-paging-button item disabled"><div class="page-link next" aria-controls="mainwp-manage-sites-table" aria-disabled="true" aria-label="Next" data-dt-idx="next" tabindex="-1">Next</div></li>
|
|
<li class="dt-paging-button item disabled"><div class="page-link last" aria-controls="mainwp-manage-sites-table" aria-disabled="true" aria-label="Last" data-dt-idx="last" tabindex="-1">Last</div></li>
|
|
<?php } else { ?>
|
|
<li class="dt-paging-button item"><a href="admin.php?page=UpdatesManage¤t_page=<?php echo $current_page === $last ? intval( $last ) : intval( $current_page + 1 ); ?>&_opennonce=<?php echo esc_html( wp_create_nonce( 'mainwp-admin-nonce' ) ); ?>" class="page-link next" aria-controls="mainwp-manage-sites-table" aria-label="Next" data-dt-idx="next" tabindex="0">Next</a></li>
|
|
<li class="dt-paging-button item"><a href="admin.php?page=UpdatesManage¤t_page=<?php echo intval( $total_page ); ?>&_opennonce=<?php echo esc_html( wp_create_nonce( 'mainwp-admin-nonce' ) ); ?>" class="page-link last" aria-controls="mainwp-manage-sites-table" aria-label="Last" data-dt-idx="last" tabindex="0">Last</a></li>
|
|
<?php } ?>
|
|
</menu></div>
|
|
</div>
|
|
<br/>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Cheks which primary backup plugin is being used.
|
|
*
|
|
* @param mixed $what Which backup plugin is being use.
|
|
* @param object $website Website array of information.
|
|
*
|
|
* @return boolean True|False.
|
|
*/
|
|
public static function activated_primary_backup_plugin( $what, $website ) {
|
|
$plugins = json_decode( $website->plugins, 1 );
|
|
if ( ! is_array( $plugins ) || empty( $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 === static::$continue_update_slug ) ? true : false;
|
|
}
|
|
|
|
if ( $check_slug && $current_update === static::$continue_update ) {
|
|
static::$continue_selector = 'updatesoverview_continue_update_me';
|
|
} else {
|
|
static::$continue_selector = '';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the HTML selector to continue updates.
|
|
*
|
|
* @return void.
|
|
*/
|
|
public static function get_continue_update_selector() {
|
|
echo esc_attr( static::$continue_selector );
|
|
}
|
|
|
|
/**
|
|
* Displays the updates modal window during updates.
|
|
*/
|
|
public static function render_updates_modal() {
|
|
?>
|
|
<div class="ui modal" id="updatesoverview-backup-box">
|
|
<div class="header"><?php esc_html_e( 'Backup Check', 'mainwp' ); ?></div>
|
|
<div class="scrolling content mainwp-modal-content"></div>
|
|
<div class="actions mainwp-modal-actions">
|
|
<input id="updatesoverview-backup-all" type="button" name="Backup All" value="<?php esc_html_e( 'Backup All', 'mainwp' ); ?>" class="button-primary"/>
|
|
<a id="updatesoverview-backup-now" href="javascript:void(0)" target="_blank" style="display: none" class="button-primary button"><?php esc_html_e( 'Backup Now', 'mainwp' ); ?></a>
|
|
<input id="updatesoverview-backup-ignore" type="button" name="Ignore" value="<?php esc_html_e( 'Ignore', 'mainwp' ); ?>" class="button"/>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Displays the plugin details modal window.
|
|
*/
|
|
public static function render_plugin_details_modal() {
|
|
?>
|
|
<div class="ui modal" id="mainwp-plugin-details-modal">
|
|
<i class="close icon"></i>
|
|
<div class="header"><?php echo esc_html__( 'Plugin Details', 'mainwp' ); ?></div>
|
|
<div class="content">
|
|
<div class="ui embed"></div>
|
|
</div>
|
|
<div class="actions">
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Method render_screen_options_modal()
|
|
*
|
|
* Renders Page Settings Modal.
|
|
*/
|
|
public static function render_screen_options_modal() { // phpcs:ignore -- NOSONAR - complex method.
|
|
|
|
$snAutomaticDailyUpdate = (int) get_option( 'mainwp_automaticDailyUpdate' );
|
|
$snPluginAutomaticDailyUpdate = (int) get_option( 'mainwp_pluginAutomaticDailyUpdate' );
|
|
$snThemeAutomaticDailyUpdate = (int) get_option( 'mainwp_themeAutomaticDailyUpdate' );
|
|
$snTransAutomaticUpdate = (int) get_option( 'mainwp_transAutomaticDailyUpdate' );
|
|
|
|
$mainwp_show_language_updates = (int) get_option( 'mainwp_show_language_updates', 1 );
|
|
$disableUpdateConfirmations = (int) get_option( 'mainwp_disable_update_confirmations', 0 );
|
|
$delay_autoupdate = (int) get_option( 'mainwp_delay_autoupdate', 1 );
|
|
?>
|
|
<div class="ui modal" id="mainwp-manage-updates-screen-options-modal">
|
|
<i class="close icon"></i>
|
|
<div class="header"><?php esc_html_e( 'Page Settings', 'mainwp' ); ?></div>
|
|
<div class="scrolling content ui form">
|
|
<form method="POST" action="" id="manage-updates-screen-options-form" name="manage-updates-screen-options-form">
|
|
<?php wp_nonce_field( 'mainwp-admin-nonce' ); ?>
|
|
<input type="hidden" name="wp_nonce" value="<?php echo esc_attr( wp_create_nonce( 'UpdatesScrOptions' ) ); ?>" />
|
|
<div class="ui grid field">
|
|
<label class="six wide column middle aligned"><?php esc_html_e( 'Plugin advanced automatic updates', 'mainwp' ); ?></label>
|
|
<div class="ten wide column" data-tooltip="<?php esc_attr_e( 'Enable or disable automatic plugin updates.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
|
|
<select name="mainwp_pluginAutomaticDailyUpdate" id="mainwp_pluginAutomaticDailyUpdate" class="ui dropdown">
|
|
<option value="1" <?php echo 1 === $snPluginAutomaticDailyUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Install Trusted Updates', 'mainwp' ); ?></option>
|
|
<option value="0" <?php echo ( false !== $snPluginAutomaticDailyUpdate && empty( $snPluginAutomaticDailyUpdate ) ) || 2 === $snPluginAutomaticDailyUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Disabled', 'mainwp' ); ?></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="ui grid field">
|
|
<label class="six wide column middle aligned"><?php esc_html_e( 'Theme advanced automatic updates', 'mainwp' ); ?></label>
|
|
<div class="ten wide column" data-tooltip="<?php esc_attr_e( 'Enable or disable automatic theme updates.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
|
|
<select name="mainwp_themeAutomaticDailyUpdate" id="mainwp_themeAutomaticDailyUpdate" class="ui dropdown">
|
|
<option value="1" <?php echo 1 === $snThemeAutomaticDailyUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Install Trusted Updates', 'mainwp' ); ?></option>
|
|
<option value="0" <?php echo ( false !== $snThemeAutomaticDailyUpdate && 0 === $snThemeAutomaticDailyUpdate ) || 2 === $snThemeAutomaticDailyUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Disabled', 'mainwp' ); ?></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="ui grid field">
|
|
<label class="six wide column middle aligned"><?php esc_html_e( 'Translation advanced automatic updates', 'mainwp' ); ?></label>
|
|
<div class="ten wide column" data-tooltip="<?php esc_attr_e( 'Enable or disable automatic translation updates.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
|
|
<select name="mainwp_transAutomaticDailyUpdate" id="mainwp_transAutomaticDailyUpdate" class="ui dropdown">
|
|
<option value="1" <?php echo 1 === $snTransAutomaticUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Install Trusted Updates', 'mainwp' ); ?></option>
|
|
<option value="0" <?php echo ( false !== $snTransAutomaticUpdate && 0 === $snTransAutomaticUpdate ) || 2 === $snTransAutomaticUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Disabled', 'mainwp' ); ?></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="ui grid field">
|
|
<label class="six wide column middle aligned"><?php esc_html_e( 'WP Core advanced automatic updates', 'mainwp' ); ?></label>
|
|
<div class="ten wide column" data-tooltip="<?php esc_attr_e( 'Enable or disable automatic WordPress core updates.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
|
|
<select name="mainwp_automaticDailyUpdate" id="mainwp_automaticDailyUpdate" class="ui dropdown">
|
|
<option value="1" <?php echo 1 === $snAutomaticDailyUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Install Trusted Updates', 'mainwp' ); ?></option>
|
|
<option value="0" <?php echo ( false !== $snAutomaticDailyUpdate && 0 === $snAutomaticDailyUpdate ) || 2 === $snAutomaticDailyUpdate ? 'selected' : ''; ?>><?php esc_html_e( 'Disabled', 'mainwp' ); ?></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="ui grid field">
|
|
<label class="six wide column middle aligned"><?php esc_html_e( 'Advanced automatic updates delay', 'mainwp' ); ?></label>
|
|
<div class="ten wide column ui input" data-tooltip="<?php esc_attr_e( 'Set the number of days to delay automatic updates.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
|
|
<select name="mainwp_delay_autoupdate" id="mainwp_delay_autoupdate" class="ui dropdown">
|
|
<option value="0" <?php echo 0 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( 'Delay off', 'mainwp' ); ?></option>
|
|
<option value="1" <?php echo 1 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '1 day', 'mainwp' ); ?></option>
|
|
<option value="2" <?php echo 2 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '2 days', 'mainwp' ); ?></option>
|
|
<option value="3" <?php echo 3 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '3 days', 'mainwp' ); ?></option>
|
|
<option value="4" <?php echo 4 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '4 days', 'mainwp' ); ?></option>
|
|
<option value="5" <?php echo 5 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '5 days', 'mainwp' ); ?></option>
|
|
<option value="6" <?php echo 6 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '6 days', 'mainwp' ); ?></option>
|
|
<option value="7" <?php echo 7 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '7 days', 'mainwp' ); ?></option>
|
|
<option value="14" <?php echo 14 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '14 days', 'mainwp' ); ?></option>
|
|
<option value="30" <?php echo 30 === $delay_autoupdate ? 'selected' : ''; ?>><?php esc_html_e( '30 days', 'mainwp' ); ?></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="ui grid field">
|
|
<label class="six wide column middle aligned"><?php esc_html_e( 'Show WordPress language updates', 'mainwp' ); ?></label>
|
|
<div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'Enable if you want to manage Translation updates', 'mainwp' ); ?>" data-inverted="" data-position="top left">
|
|
<input type="checkbox" name="mainwp_show_language_updates" id="mainwp_show_language_updates" <?php echo 1 === $mainwp_show_language_updates ? 'checked="true"' : ''; ?>/>
|
|
</div>
|
|
</div>
|
|
<div class="ui grid field">
|
|
<label class="six wide column middle aligned"><?php esc_html_e( 'Update confirmations', 'mainwp' ); ?></label>
|
|
<div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'Choose if you want to disable the popup confirmations when performing updates.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
|
|
<select name="mainwp_disable_update_confirmations" id="mainwp_disable_update_confirmations" class="ui dropdown">
|
|
<option value="0" <?php echo 0 === $disableUpdateConfirmations ? 'selected' : ''; ?>><?php esc_html_e( 'Enable', 'mainwp' ); ?></option>
|
|
<option value="2" <?php echo 2 === $disableUpdateConfirmations ? 'selected' : ''; ?>><?php esc_html_e( 'Disable', 'mainwp' ); ?></option>
|
|
<option value="1" <?php echo 1 === $disableUpdateConfirmations ? 'selected' : ''; ?>><?php esc_html_e( 'Disable for single updates', 'mainwp' ); ?></option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="ui hidden divider"></div>
|
|
<div class="ui hidden divider"></div>
|
|
</div>
|
|
<div class="actions">
|
|
<div class="ui two columns grid">
|
|
<div class="left aligned column"></div>
|
|
<div class="ui right aligned column">
|
|
<input type="submit" class="ui green button" name="btnSubmit" id="submit-manage-updates-settings" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
|
|
/**
|
|
* Method mainwp_help_content()
|
|
*
|
|
* Creates the MainWP Help Documentation List for the help component in the sidebar.
|
|
*/
|
|
public static function mainwp_help_content() {
|
|
if ( isset( $_GET['page'] ) && 'UpdatesManage' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
|
?>
|
|
<p><?php esc_html_e( 'If you need help with managing updates, please review following help documents', 'mainwp' ); ?></p>
|
|
<div class="ui list">
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#update-plugins" target="_blank">Update Plugins</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#plugins-auto-updates" target="_blank">Plugins Auto Updates</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#ignore-plugin-updates" target="_blank">Ignore Plugin Updates</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#update-themes" target="_blank">Update Themes</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#themes-auto-updates" target="_blank">Themes Auto Updates</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#ignore-theme-updates" target="_blank">Ignore Theme Updates</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#update-wordpress-core" target="_blank">Update WordPress Core</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#auto-update-wordpress-core" target="_blank">Auto Update WordPress Core</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#ignore-wordpress-core-update" target="_blank">Ignore WordPress Core Update</a></div>
|
|
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/manage-updates/#safe-updates---updates-rollback" target="_blank">Safe Updates/Updates Rollback</a></div>
|
|
<?php
|
|
/**
|
|
* Action: mainwp_updates_help_item
|
|
*
|
|
* Fires at the bottom of the help articles list in the Help sidebar on the Updates page.
|
|
*
|
|
* Suggested HTML markup:
|
|
*
|
|
* <div class="item"><a href="Your custom URL">Your custom text</a></div>
|
|
*
|
|
* @since 4.1
|
|
*/
|
|
do_action( 'mainwp_updates_help_item' );
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
}
|