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