760 lines
42 KiB
PHP
760 lines
42 KiB
PHP
<?php
|
|
if (!defined('ABSPATH')) die('No direct access.');
|
|
/**
|
|
* Easy Updates Manager admin controller.
|
|
* Initializes the admin panel options and load the admin dependencies
|
|
*
|
|
* @package WordPress
|
|
* @since 5.0.0
|
|
*/
|
|
class MPSUM_Admin {
|
|
|
|
/**
|
|
* Holds the class instance.
|
|
*
|
|
* @since 5.0.0
|
|
* @access static
|
|
* @var MPSUM_Admin $instance
|
|
*/
|
|
private static $instance = null;
|
|
|
|
/**
|
|
* Holds the URL to the admin panel page
|
|
*
|
|
* @since 5.0.0
|
|
* @access static
|
|
* @var string $url
|
|
*/
|
|
private static $url = '';
|
|
|
|
/**
|
|
* Holds the slug to the admin panel page
|
|
*
|
|
* @since 5.0.0
|
|
* @access static
|
|
* @var string $slug
|
|
*/
|
|
private static $slug = 'mpsum-update-options';
|
|
|
|
/**
|
|
* Set a class instance.
|
|
*
|
|
* Set a class instance.
|
|
*
|
|
* @since 5.0.0
|
|
* @access static
|
|
*/
|
|
public static function run() {
|
|
if (null == self::$instance) {
|
|
self::$instance = new self;
|
|
}
|
|
return self::$instance;
|
|
} //end get_instance
|
|
|
|
/**
|
|
* Class constructor.
|
|
*
|
|
* Initialize the class
|
|
*
|
|
* @since 5.0.0
|
|
* @access private
|
|
*/
|
|
private function __construct() {
|
|
add_action('init', array( $this, 'init' ), 9);
|
|
add_filter('set-screen-option', array( $this, 'add_screen_option_save' ), 10, 3);
|
|
} //end constructor
|
|
|
|
/**
|
|
* Save the screen options.
|
|
*
|
|
* @since 6.2.0
|
|
* @param string $status Screen option status
|
|
* @param string $option Screen option
|
|
* @param string $value Screen value
|
|
* @return string Returns value if succeeds, otherwise status
|
|
*/
|
|
public function add_screen_option_save( $status, $option, $value ) {
|
|
return MPSUM_Admin_Screen_Options::save_options($status, $option, $value);
|
|
}
|
|
|
|
/**
|
|
* Return the URL to the admin panel page.
|
|
*
|
|
* Return the URL to the admin panel page.
|
|
*
|
|
* @since 5.0.0
|
|
* @access static
|
|
*
|
|
* @return string URL to the admin panel page.
|
|
*/
|
|
public static function get_url() {
|
|
$url = self::$url;
|
|
if (empty($url)) {
|
|
if (is_multisite()) {
|
|
$url = add_query_arg(array( 'page' => self::get_slug() ), network_admin_url('index.php'));
|
|
} else {
|
|
$url = add_query_arg(array( 'page' => self::get_slug() ), admin_url('index.php'));
|
|
}
|
|
self::$url = $url;
|
|
}
|
|
return $url;
|
|
}
|
|
|
|
/**
|
|
* Return the slug for the admin panel page.
|
|
*
|
|
* Return the slug for the admin panel page.
|
|
*
|
|
* @since 5.0.0
|
|
* @access static
|
|
*
|
|
* @return string slug to the admin panel page.
|
|
*/
|
|
public static function get_slug() {
|
|
return self::$slug;
|
|
}
|
|
|
|
/**
|
|
* Initialize the admin menu.
|
|
*
|
|
* Initialize the admin menu.
|
|
*
|
|
* @since 5.0.0
|
|
* @access public
|
|
* @see __construct
|
|
* @internal Uses init action
|
|
*/
|
|
public function init() {
|
|
|
|
// Plugin and Theme actions
|
|
if (is_multisite()) {
|
|
add_action('network_admin_menu', array($this, 'init_network_admin_menus'));
|
|
add_action('wp_before_admin_bar_render', array($this, 'add_networkadmin_page'));
|
|
} else {
|
|
add_action('admin_menu', array($this, 'init_single_site_admin_menus'));
|
|
}
|
|
add_action('admin_bar_menu', array($this, 'add_admin_bar'), 100);
|
|
|
|
// Disable information bar in modal popup
|
|
add_action('admin_head', array($this, 'maybe_disable_plugin_information_bar'));
|
|
|
|
// todo - maybe load these conditionally based on $_REQUEST[ 'tab' ] param
|
|
new MPSUM_Admin_Dashboard(self::get_slug());
|
|
new MPSUM_Admin_Plugins(self::get_slug());
|
|
new MPSUM_Admin_Themes(self::get_slug());
|
|
new MPSUM_Admin_Logs(self::get_slug());
|
|
new MPSUM_Admin_Core(self::get_slug());
|
|
new MPSUM_Admin_Advanced(self::get_slug());
|
|
if (!Easy_Updates_Manager()->is_premium()) {
|
|
new MPSUM_Advanced_Premium();
|
|
}
|
|
|
|
MPSUM_Admin_Screen_Options::maybe_save_dashboard_screen_option();
|
|
|
|
}
|
|
|
|
/**
|
|
* Initializes the help screen.
|
|
*
|
|
* Initializes the help screen.
|
|
*
|
|
* @since 5.0.0
|
|
* @access public
|
|
* @see init
|
|
* @internal Uses load_{$hook} action
|
|
*/
|
|
public function init_help_screen() {
|
|
new MPSUM_Admin_Help();
|
|
}
|
|
|
|
/**
|
|
* Initializes the screen options.
|
|
*
|
|
* Initializes the screen options.
|
|
*
|
|
* @since 6.2
|
|
* @access public
|
|
* @see init
|
|
* @internal Uses load_{$hook} action
|
|
*/
|
|
public function init_screen_options() {
|
|
MPSUM_Admin_Screen_Options::run();
|
|
}
|
|
|
|
/**
|
|
* Returns formatted array of EUM options
|
|
*
|
|
* Returns formatted array of EUM options.
|
|
*
|
|
* @since 6.3
|
|
* @access public
|
|
*
|
|
* @return array EUM implementation options
|
|
*/
|
|
private function get_options_for_default() {
|
|
$options = MPSUM_Updates_Manager::get_options();
|
|
if (! isset($options['core'])) {
|
|
$options['core'] = MPSUM_Admin_Core::get_defaults();
|
|
}
|
|
if (! isset($options['plugins'])) {
|
|
$options['plugins'] = array();
|
|
}
|
|
if (! isset($options['themes'])) {
|
|
$options['themes'] = array();
|
|
}
|
|
if (! isset($options['plugins_automatic'])) {
|
|
$options['plugins_automatic'] = array();
|
|
}
|
|
if (! isset($options['themes_automatic'])) {
|
|
$options['themes_automatic'] = array();
|
|
}
|
|
if (!isset($options['logs'])) {
|
|
$options['logs'] = array();
|
|
}
|
|
if (!isset($options['advanced'])) {
|
|
$options['advanced'] = array();
|
|
}
|
|
|
|
return $options;
|
|
|
|
}
|
|
|
|
/**
|
|
* When more details modal pops up, maybe disable the footer
|
|
*
|
|
* @return void
|
|
*/
|
|
public function maybe_disable_plugin_information_bar() {
|
|
|
|
// When the more details modal shows up on the plugins tab, it displays an information footer for active
|
|
// or inactive installs. It also shows when a plugin is available to update.
|
|
// This will inject styles into the modal hiding the information bar to prevent
|
|
// any kind of confusion.
|
|
if (isset($_GET['eum_action']) && 'EUM_modal' === $_GET['eum_action'] && isset($_GET['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['_wpnonce'])), 'eum-modal')) {
|
|
echo '<style>#plugin-information-footer{display:none;}</style>';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Enqueue scripts
|
|
*
|
|
* @return void
|
|
*/
|
|
public function enqueue_scripts() {
|
|
|
|
// Get active page and active tab fore enqueuing
|
|
// phpcs:disable WordPress.Security.NonceVerification.Recommended -- It gets the page and checks for the active tab.
|
|
$pagenow = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : false;
|
|
$is_active_tab = isset($_GET['tab']) ? sanitize_text_field(wp_unslash($_GET['tab'])) : false;
|
|
// phpcs:enable WordPress.Security.NonceVerification.Recommended
|
|
|
|
// Check to make sure we're on the mpsum admin page
|
|
if ('mpsum-update-options' != $pagenow) {
|
|
return;
|
|
}
|
|
$min_or_not = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '' : '.min';
|
|
|
|
// Get user data
|
|
$user_id = get_current_user_id();
|
|
$dashboard_showing = get_user_meta($user_id, 'mpsum_dashboard', true);
|
|
|
|
// Get options
|
|
$options = MPSUM_Updates_Manager::get_options('core');
|
|
|
|
// Modal dependencies on the plugins and logs tab
|
|
if ('plugins' === $is_active_tab) {
|
|
wp_enqueue_script('plugin-install');
|
|
wp_enqueue_script('updates');
|
|
}
|
|
if ('plugins' === $is_active_tab || 'logs' === $is_active_tab) {
|
|
wp_enqueue_script('common');
|
|
wp_enqueue_style('common');
|
|
wp_enqueue_script('thickbox');
|
|
wp_enqueue_style('thickbox');
|
|
}
|
|
|
|
$file_path = "includes/blockui/jquery.blockUI$min_or_not";
|
|
wp_enqueue_script('jquery-blockui', MPSUM_Updates_Manager::get_plugin_url("/$file_path.js"), array('jquery'), (int) filemtime(MPSUM_Updates_Manager::get_plugin_dir("$file_path.js")), true);
|
|
$file_path = "js/jquery.serializejson$min_or_not";
|
|
wp_enqueue_script('jquery-serializejson', MPSUM_Updates_Manager::get_plugin_url("/$file_path.js"), array('jquery'), (int) filemtime(MPSUM_Updates_Manager::get_plugin_dir("$file_path.js")), true);
|
|
$file_path = "js/eum-admin$min_or_not";
|
|
wp_enqueue_script('mpsum_dashboard_js', MPSUM_Updates_Manager::get_plugin_url("/$file_path.js"), array( 'jquery', 'wp-ajax-response' ), (int) filemtime(MPSUM_Updates_Manager::get_plugin_dir("$file_path.js")), true);
|
|
$file_path = "js/admin$min_or_not";
|
|
wp_enqueue_script('mpsum_dashboard_react', MPSUM_Updates_Manager::get_plugin_url("/$file_path.js"), array( 'jquery', 'mpsum_dashboard_js' ), (int) filemtime(MPSUM_Updates_Manager::get_plugin_dir("$file_path.js")), true);
|
|
|
|
|
|
$user_id = get_current_user_id();
|
|
$dashboard_showing = get_user_meta($user_id, 'mpsum_dashboard', true);
|
|
if (! $dashboard_showing) {
|
|
$dashboard_showing = 'on';
|
|
}
|
|
|
|
$options = MPSUM_Updates_Manager::get_options();
|
|
|
|
$I18N = array(
|
|
'default' => _x('Default', 'Option as default', 'stops-core-theme-and-plugin-updates'),
|
|
'on' => _x('On', 'Option enabled', 'stops-core-theme-and-plugin-updates'),
|
|
'off' => _x('Off', 'Option disabled', 'stops-core-theme-and-plugin-updates'),
|
|
'nothing' => __('Nothing', 'stops-core-theme-and-plugin-updates'),
|
|
'everything' => __('Everything', 'stops-core-theme-and-plugin-updates'),
|
|
'custom' => _x('Custom', 'Option allows for configuration', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_on' => __('Auto update everything', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_off' => __('Disable auto updates', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_custom_tooltip' => __('Customize each option individually', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_default' => __('WordPress default settings', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_default_tooltip' => __('WordPress acts like this plugin is not installed.', 'stops-core-theme-and-plugin-updates').' '.__('Only minor core updates, translations, and severe security patches will be automatically updated.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_off_tooltip' => __('No automatic updates should occur.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_default_status' => __('You have selected default.', 'stops-core-theme-and-plugin-updates').' '.__('WordPress will behave as if this plugin is not installed for automatic updates.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_on_status' => __('Automatic updates are on for everything.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_on_tooltip' => __('Auto update everything.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_off_status' => __('Automatic updates are off for everything.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_custom_status' => __('You have selected to customize the updates below.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates' => __('Quick configuration actions', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_updates_description' => __('Press a button below for quick configuration; this is a quick way to change several other settings below in one go.', 'stops-core-theme-and-plugin-updates'),
|
|
'major_releases' => __('Major WordPress releases', 'stops-core-theme-and-plugin-updates'),
|
|
'major_releases_description' => __('Automatically update to new major releases of WordPress (e.g., 4.1, 4.2, 4.3).', 'stops-core-theme-and-plugin-updates'),
|
|
'major_releases_label_on' => __('Enable major releases', 'stops-core-theme-and-plugin-updates'),
|
|
'major_releases_label_on_status' => __('Automatic major release updates are now turned on.', 'stops-core-theme-and-plugin-updates'),
|
|
'major_releases_label_off' => __('Disable major releases', 'stops-core-theme-and-plugin-updates'),
|
|
'major_releases_label_off_status' => __('Automatic major release updates are now turned off.', 'stops-core-theme-and-plugin-updates'),
|
|
'minor_releases' => _x('Minor WordPress releases', 'Minor releases for WordPress', 'stops-core-theme-and-plugin-updates'),
|
|
'minor_releases_description' => __('Automatically update to new minor releases in your current series (e.g., 4.1.1, 4.1.2, 4.1.3).', 'stops-core-theme-and-plugin-updates'),
|
|
'minor_releases_label_on' => __('Enable minor releases', 'stops-core-theme-and-plugin-updates'),
|
|
'minor_releases_label_on_status' => __('Automatic minor release updates are now turned on.', 'stops-core-theme-and-plugin-updates'),
|
|
'minor_releases_label_off' => __('Disable minor releases', 'stops-core-theme-and-plugin-updates'),
|
|
'minor_releases_label_off_status' => __('Automatic minor release updates are now turned off.', 'stops-core-theme-and-plugin-updates'),
|
|
'development_releases' => _x('Development updates (Core)', 'Beta and RC releases for WordPress core', 'stops-core-theme-and-plugin-updates'),
|
|
'development_releases_description' => __('Allow your install to receive development updates for WordPress core (for advanced users only)', 'stops-core-theme-and-plugin-updates'),
|
|
'development_releases_label_on' => __('Allow development versions to be replaced with a new minor/major version', 'stops-core-theme-and-plugin-updates'),
|
|
'development_releases_label_on_status' => __('Automatic development release updates are now turned on.', 'stops-core-theme-and-plugin-updates'),
|
|
'development_releases_label_off' => __('Disable development updates', 'stops-core-theme-and-plugin-updates'),
|
|
'development_releases_label_off_status' => __('Automatic development release updates are now turned off.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_releases' => _x('Translation updates', 'Enable or disable translation updates', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_releases_description' => __('Automatically update your translations.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_releases_label_on' => __('Enable translation updates', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_releases_label_on_status' => __('Automatic translation updates are now turned on.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_releases_label_off' => __('Disable translation updates', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_releases_label_off_status' => __('Automatic translation updates are now turned off.', 'stops-core-theme-and-plugin-updates'),
|
|
'select_individually' => __('Select individually', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_plugin_updates' => __('Automatic plugin updates', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_plugin_updates_description' => __('Automatically update your plugins.', 'stops-core-theme-and-plugin-updates').' '.__('Select always on, always off, the WordPress default, or select plugins individually using the plugins tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_plugin_updates_default_status' => __('Automatic updates for plugins are now at their default setting (default is off).', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_plugin_updates_on_status' => __('Automatic updates for plugins are now on.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_plugin_updates_off_status' => __('Automatic updates for plugins are now off.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_plugin_updates_individual_status' => __('Automatic updates for plugins can be customized in the plugins tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_theme_updates' => __('Automatic theme updates', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_theme_updates_description' => __('Automatically update your themes.', 'stops-core-theme-and-plugin-updates').' '.__('Select always on, always off, the WordPress default, or select themes individually using the themes tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_theme_updates_default_status' => __('Automatic updates for themes are now at their default setting (default is off).', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_theme_updates_on_status' => __('Automatic updates for themes are now on.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_theme_updates_off_status' => __('Automatic updates for themes are now off.', 'stops-core-theme-and-plugin-updates'),
|
|
'automatic_theme_updates_individual_status' => __('Automatic updates for themes can be customized in the themes tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'disable_updates' => __('Disable all updates', 'stops-core-theme-and-plugin-updates'),
|
|
'disable_updates_description' => __('This is a master switch and will enable or disable updates for the WordPress installation.', 'stops-core-theme-and-plugin-updates').' '.__('Switching updates off is not recommended.', 'stops-core-theme-and-plugin-updates'),
|
|
'disable_updates_label_on' => __('Enable all updates', 'stops-core-theme-and-plugin-updates'),
|
|
'disable_updates_label_on_status' => __('Updates are allowed; however, you still need to configure the updates below.', 'stops-core-theme-and-plugin-updates'),
|
|
'disable_updates_label_off' => __('Disable all updates', 'stops-core-theme-and-plugin-updates'),
|
|
'disable_updates_label_off_status' => __('All updates are disabled.', 'stops-core-theme-and-plugin-updates').' '.__('Individual updates settings (i.e. for automatic updates and for plugin/theme/translation updates) below will be ignored.', 'stops-core-theme-and-plugin-updates'),
|
|
'logs' => _x('Logs', 'Log what is stored when assets update', 'stops-core-theme-and-plugin-updates'),
|
|
'logs_description' => __('Logs will show you what assets have updated and will show up in the logs tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'logs_url' => sprintf('<a href="%s" class="%s" id="%s">%s</a>', esc_url(add_query_arg(array('tab' => 'logs'), MPSUM_Admin::get_url())), 'nav-tab', 'eum-logs', esc_html__('Logs', 'stops-core-theme-and-plugin-updates')),
|
|
'logs_label_on' => __('Enable logs', 'stops-core-theme-and-plugin-updates'),
|
|
'logs_label_on_status' => __('Logs are enabled.', 'stops-core-theme-and-plugin-updates').' '.__('You will find logs in the logs tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'logs_label_off' => __('Disable logs', 'stops-core-theme-and-plugin-updates'),
|
|
'logs_label_off_status' => __('Logs are disabled.', 'stops-core-theme-and-plugin-updates'),
|
|
'ratings_nag' => _x('Please give us a rating', 'Asks a user to give a rating for the plugin.', 'stops-core-theme-and-plugin-updates'),
|
|
'ratings_nag_description' => __('We work very hard on this plugin.', 'stops-core-theme-and-plugin-updates').' '.__('Please show your appreciation and rate the plugin as you see fit.', 'stops-core-theme-and-plugin-updates'),
|
|
'ratings_nag_label_on' => __('Rate the plugin on WordPress.org', 'stops-core-theme-and-plugin-updates'),
|
|
'ratings_nag_label_off' => __('I have already left a rating', 'stops-core-theme-and-plugin-updates'),
|
|
'emails' => __('Notification e-mails', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_description' => __('This plugin periodically sends update notification e-mails, such as in the case of automatic updates.', 'stops-core-theme-and-plugin-updates').' '.__('By default, the e-mail address used is the one in Settings->General, but you can override this below.', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_placeholder' => __('Add an e-mail address', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_input_label' => __('Enter comma-separated e-mail addresses', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_invalid' => __('One or more e-mail addresses are invalid.', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_saveed' => __('Your e-mail address settings have been successfully saved.', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_save' => __('Save e-mail addresses', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_save_empty' => __('Please enter an e-mail address', 'stops-core-theme-and-plugin-updates'),
|
|
'emails_saving' => __('Saving...', 'stops-core-theme-and-plugin-updates'),
|
|
'auto_updates_notification_label' => __('Automatic updates notification e-mails', 'stops-core-theme-and-plugin-updates'),
|
|
'core_auto_updates_notification_description' => __('Be notified when WordPress core files are updated.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_auto_notification_emails_off_status' => __('Notifications for automatic core update are now off.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_auto_notification_emails_on_status' => __('Notifications for automatic core update are now on.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_auto_updates_notification_description' => __('Be notified when a plugin automatically updates.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_auto_notification_emails_off_status' => __('Notifications for automatic plugin updates are now off.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_auto_notification_emails_on_status' => __('Notifications for automatic plugin updates are now on.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_auto_updates_notification_description' => __('Be notified when a theme automatically updates.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_auto_notification_emails_off_status' => __('Notifications for automatic theme updates are now off.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_auto_notification_emails_on_status' => __('Notifications for automatic theme updates are now on.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_auto_updates_notification_description' => __('Be notified when a translation automatically updates.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_auto_notification_emails_off_status' => __('Notifications for automatic translation updates are now off.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_auto_notification_emails_on_status' => __('Notifications for automatic translation updates are now on.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates' => __('WordPress core updates', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_description' => __('This allows you to configure how WordPress updates are handled, including automatic updates.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_on' => __('Manually update', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_on_tooltip' => __('Update WordPress manually through the updates screen and turn off all automatic updates for WordPress core.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_on_status' => __('Core updates are set to manual.', 'stops-core-theme-and-plugin-updates').' '.__('Update WordPress from the updates screen.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_off' => __('Disable core updates', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_off_tooltip' => __('Turn off all core WordPress updates and prevent update notices from being shown.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_automatic' => __('Auto update all releases', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_automatic_tooltip' => __('Update WordPress core and minor versions automatically.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_automatic_minor' => __('Auto update all minor versions', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_automatic_minor_tooltip' => __('Default behavior.', 'stops-core-theme-and-plugin-updates').' '.__('WordPress will automatically update minor versions.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_automatic_status' => __('Choose how to automatically update WordPress.', 'stops-core-theme-and-plugin-updates'),
|
|
'core_updates_label_off_status' => __('Core updates are disabled and will not show up on the updates screen.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates' => __('Plugin updates', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_description' => __('This allows you to disable or enable all plugin updates, including automatic updates.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_on' => __('Manually update', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_on_tooltip' => __('Manually update your plugins.', 'stops-core-theme-and-plugin-updates').' '.__('Some auto updates may still occur such as security patches.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_on_status' => __('Plugin updates are enabled.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_off' => __('Disable plugin updates', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_off_tooltip' => __('Turn off all plugin updates and prevent update notices from being shown.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_automatic' => __('Enable auto updates', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_automatic_tooltip' => __('Automatically upgrade all plugins.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_auto_disabled' => __('Disable auto updates', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_auto_disabled_tooltip' => __('Turn off automatic updates for plugins.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_individually' => __('Choose per plugin', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_individually_tooltip' => __('Select which plugins receive automatic updates in the plugins tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'plugin_updates_label_off_status' => __('Plugin updates are disabled.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates' => __('Theme updates', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_description' => __('This allows you to disable or enable all theme updates.', 'stops-core-theme-and-plugin-updates').' '.__('Disabling this option will also disable automatic updates.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_on' => __('Manually update', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_on_tooltip' => __('Manually update your themes.', 'stops-core-theme-and-plugin-updates').' '.__('Some auto updates may still occur such as security patches.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_on_status' => __('Theme updates are enabled.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_off' => __('Disable theme updates', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_off_tooltip' => __('Turn off all theme updates and prevent update notices from being shown.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_off_status' => __('Theme updates are disabled.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_automatic' => __('Enable auto updates', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_automatic_tooltip' => __('Enable automatic updates for all themes.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_auto_disabled' => __('Disable auto updates', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_auto_disabled_tooltip' => __('Turn off automatic updates for themes.', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_individually' => __('Choose per theme', 'stops-core-theme-and-plugin-updates'),
|
|
'theme_updates_label_individually_tooltip' => __('Select which themes receive automatic updates in the themes tab.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates' => __('Translation updates', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_description' => __('This allows you to disable or enable all translations.', 'stops-core-theme-and-plugin-updates').' '.__('Choose automatic to automatically update your translations.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_label_on' => __('Manually update', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_label_on_tooltip' => __('Manually update your translations and receive periodic translations from the WordPress automatic update component.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_label_on_status' => __('Translation updates are enabled.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_label_off' => __('Disable translation updates', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_label_off_tooltip' => __('Turn off all translation updates and prevent update notices from being shown.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_label_automatic' => __('Enable auto updates', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_automatic_tooltip' => __('Automatically update all translations as they are ready.', 'stops-core-theme-and-plugin-updates'),
|
|
'translation_updates_label_off_status' => __('Translation updates are disabled.', 'stops-core-theme-and-plugin-updates'),
|
|
'general_section_title_updates_settings' => __('Updates settings', 'stops-core-theme-and-plugin-updates'),
|
|
'general_section_title_notifications' => __('Notifications', 'stops-core-theme-and-plugin-updates'),
|
|
'general_section_title_others' => __('Others', 'stops-core-theme-and-plugin-updates'),
|
|
'general_section_title_rating' => __('Rating', 'stops-core-theme-and-plugin-updates'),
|
|
'rollback_updates_notification_label' => __('Updates rollback notification e-mails', 'stops-core-theme-and-plugin-updates'),
|
|
'rollback_updates_notification_description' => __('Be notified when there are problematic plugins, which updates cause a fatal PHP error.', 'stops-core-theme-and-plugin-updates'),
|
|
'rollback_updates_notification_emails_off_status' => __('E-mail notifications for problematic plugins are now off.', 'stops-core-theme-and-plugin-updates'),
|
|
'rollback_updates_notification_emails_on_status' => __('E-mail notifications for problematic plugins are now on.', 'stops-core-theme-and-plugin-updates'),
|
|
);
|
|
|
|
// Show the ratings? Based on a constant and a default option that a user can select.
|
|
$maybe_show_ratings_nag = 'on';
|
|
if (isset($options['core']['ratings_nag'])) {
|
|
$maybe_show_ratings_nag = $options['core']['ratings_nag'];
|
|
}
|
|
if (defined('EUM_ENABLE_RATINGS_NAG') && !EUM_ENABLE_RATINGS_NAG) {
|
|
$maybe_show_ratings_nag = 'off';
|
|
}
|
|
|
|
wp_localize_script('mpsum_dashboard_react', 'mpsum', apply_filters('eum_i18n', array(
|
|
'spinner' => MPSUM_Updates_Manager::get_plugin_url('/images/spinner.gif'),
|
|
'tabs' => _x('Tabs', 'Show or hide admin tabs', 'stops-core-theme-and-plugin-updates'),
|
|
'dashboard' => _x('Show dashboard', 'Show or hide the dashboard', 'stops-core-theme-and-plugin-updates'),
|
|
'dashboard_showing' => $dashboard_showing,
|
|
'enabled' => __('Enabled', 'stops-core-theme-and-plugin-updates'),
|
|
'disabled' => __('Disabled', 'stops-core-theme-and-plugin-updates'),
|
|
'admin_nonce' => wp_create_nonce('mpsum_options_save'),
|
|
'eum_nonce' => wp_create_nonce('eum_nonce'),
|
|
'ajax_url' => admin_url('admin-ajax.php'),
|
|
'unexpected_response' => __('Unexpected response:', 'stops-core-theme-and-plugin-updates'),
|
|
'I18N' => $I18N,
|
|
'saving' => __('Saving...', 'stops-core-theme-and-plugin-updates'),
|
|
'working' => __('Working...', 'stops-core-theme-and-plugin-updates'),
|
|
'logo' => MPSUM_Updates_Manager::get_plugin_url('/images/site_icon.png'),
|
|
'is_premium' => MPSUM_Updates_Manager::get_instance()->is_premium() ? 'true' : 'false',
|
|
'is_debug' => (defined('WP_DEBUG') && WP_DEBUG) ? 'true' : 'false',
|
|
'ratings_nag' => $maybe_show_ratings_nag
|
|
)));
|
|
$file_path = "css/style$min_or_not";
|
|
wp_enqueue_style('mpsum_dashboard', MPSUM_Updates_Manager::get_plugin_url("/$file_path.css"), array(), (int) filemtime(MPSUM_Updates_Manager::get_plugin_dir("$file_path.css")));
|
|
}
|
|
|
|
/**
|
|
* Add the "Easy Updates Manager" menu.
|
|
*
|
|
* @since 8.0.1
|
|
*
|
|
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin bar Instance
|
|
*/
|
|
public function add_admin_bar($wp_admin_bar) {
|
|
|
|
if (defined('EASY_UPDATES_MANAGER_ADMIN_BAR') && !EASY_UPDATES_MANAGER_ADMIN_BAR) return;
|
|
|
|
// Check for valid permissions
|
|
if (is_multisite() && !current_user_can('manage_network')) {
|
|
return;
|
|
}
|
|
if (!is_multisite() && !current_user_can('update_plugins')) {
|
|
return;
|
|
}
|
|
|
|
// Get core options
|
|
$options = MPSUM_Updates_Manager::get_options('core');
|
|
|
|
// Check to see if logs are enabled
|
|
$admin_bar_enabled = true;
|
|
if (isset($options['enable_admin_bar']) && 'off' === $options['enable_admin_bar']) {
|
|
$admin_bar_enabled = false;
|
|
}
|
|
if ($admin_bar_enabled) :
|
|
// Add parent menu
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'easy-updates-manager-admin-bar',
|
|
'title' => __('Updates', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => self::get_url(),
|
|
));
|
|
|
|
// Add General Tab
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'easy-updates-manager-admin-bar-general',
|
|
'title' => __('General', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => add_query_arg(array('tab' => 'general'), self::get_url()),
|
|
'parent' => 'easy-updates-manager-admin-bar'
|
|
));
|
|
|
|
// Add plugins tab
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'easy-updates-manager-admin-bar-plugins',
|
|
'title' => __('Plugins', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => add_query_arg(array('tab' => 'plugins'), self::get_url()),
|
|
'parent' => 'easy-updates-manager-admin-bar'
|
|
));
|
|
|
|
// Add Themes tab
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'easy-updates-manager-admin-bar-themes',
|
|
'title' => __('Themes', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => add_query_arg(array('tab' => 'themes'), self::get_url()),
|
|
'parent' => 'easy-updates-manager-admin-bar'
|
|
));
|
|
|
|
// Add logs tab
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'easy-updates-manager-admin-bar-logs',
|
|
'title' => __('Logs', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => add_query_arg(array('tab' => 'logs'), self::get_url()),
|
|
'parent' => 'easy-updates-manager-admin-bar'
|
|
));
|
|
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'easy-updates-manager-admin-bar-advanced',
|
|
'title' => __('Advanced', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => add_query_arg(array('tab' => 'advanced'), self::get_url()),
|
|
'parent' => 'easy-updates-manager-admin-bar'
|
|
));
|
|
|
|
if (!MPSUM_Updates_Manager::get_instance()->is_premium()) {
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'easy-updates-manager-admin-bar-premium',
|
|
'title' => __('Premium', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => add_query_arg(array('tab' => 'premium'), self::get_url()),
|
|
'parent' => 'easy-updates-manager-admin-bar'
|
|
));
|
|
}
|
|
endif;
|
|
}
|
|
|
|
/**
|
|
* Adds a sub-menu page for multisite.
|
|
*
|
|
* Adds a sub-menu page for multisite.
|
|
*
|
|
* @since 5.0.0
|
|
* @access public
|
|
* @see init
|
|
* @internal Uses network_admin_menu action
|
|
*/
|
|
public function init_network_admin_menus() {
|
|
$hook = add_dashboard_page(__('Updates options', 'stops-core-theme-and-plugin-updates'), __('Updates options', 'stops-core-theme-and-plugin-updates'), 'manage_options', self::get_slug(), array( $this, 'output_admin_interface' ));
|
|
add_action('admin_enqueue_scripts', array( $this, 'enqueue_scripts' ));
|
|
add_action("load-$hook", array( $this, 'init_help_screen' ));
|
|
add_action("load-$hook", array( $this, 'init_screen_options' ));
|
|
}
|
|
|
|
/**
|
|
* Adds a sub-menu page for single-site.
|
|
*
|
|
* Adds a sub-menu page for single-site.
|
|
*
|
|
* @since 5.0.0
|
|
* @access public
|
|
* @see init
|
|
* @internal Uses admin_menu action
|
|
*/
|
|
public function init_single_site_admin_menus() {
|
|
$hook = add_dashboard_page(__('Updates options', 'stops-core-theme-and-plugin-updates'), __('Updates options', 'stops-core-theme-and-plugin-updates'), 'manage_options', self::get_slug(), array( $this, 'output_admin_interface' ));
|
|
add_action('admin_enqueue_scripts', array( $this, 'enqueue_scripts' ));
|
|
add_action("load-$hook", array( $this, 'init_help_screen' ));
|
|
add_action("load-$hook", array( $this, 'init_screen_options' ));
|
|
}
|
|
|
|
/**
|
|
* Outputs admin interface for sub-menu.
|
|
*
|
|
* Outputs admin interface for sub-menu.
|
|
*
|
|
* @since 5.0.0
|
|
* @access public
|
|
* @see init_network_admin_menus, init_single_site_admin_menus
|
|
*/
|
|
public function output_admin_interface() {
|
|
?>
|
|
<div class="wrap">
|
|
<h1 id="eum-main-heading">
|
|
<?php
|
|
$eum_white_label = apply_filters('eum_whitelabel_name', __('Easy Updates Manager', 'stops-core-theme-and-plugin-updates'));
|
|
echo esc_html($eum_white_label);
|
|
?>
|
|
</h1>
|
|
<?php
|
|
$tabs = array();
|
|
|
|
$tabs[] = array(
|
|
'url' => add_query_arg(array( 'tab' => 'general' ), self::get_url()), /* URL to the tab */
|
|
'label' => esc_html__('General', 'stops-core-theme-and-plugin-updates'),
|
|
'get' => 'general', /*$_GET variable*/
|
|
'action' => 'mpsum_admin_tab_dashboard' /* action variable in do_action */
|
|
);
|
|
|
|
$tabs[] = array(
|
|
'url' => add_query_arg(array( 'tab' => 'plugins' ), self::get_url()), /* URL to the tab */
|
|
'label' => esc_html__('Plugins', 'stops-core-theme-and-plugin-updates'),
|
|
'get' => 'plugins', /*$_GET variable*/
|
|
'action' => 'mpsum_admin_tab_plugins' /* action variable in do_action */
|
|
);
|
|
$tabs[] = array(
|
|
'url' => add_query_arg(array( 'tab' => 'themes' ), self::get_url()), /* URL to the tab */
|
|
'label' => esc_html__('Themes', 'stops-core-theme-and-plugin-updates'),
|
|
'get' => 'themes', /*$_GET variable*/
|
|
'action' => 'mpsum_admin_tab_themes' /* action variable in do_action */
|
|
);
|
|
$tabs[] = array(
|
|
'url' => add_query_arg(array( 'tab' => 'logs' ), self::get_url()), /* URL to the tab */
|
|
'label' => esc_html__('Logs', 'stops-core-theme-and-plugin-updates'),
|
|
'get' => 'logs', /*$_GET variable*/
|
|
'action' => 'mpsum_admin_tab_logs' /* action variable in do_action */
|
|
);
|
|
$tabs[] = array(
|
|
'url' => add_query_arg(array( 'tab' => 'advanced' ), self::get_url()), /* URL to the tab */
|
|
'label' => esc_html__('Advanced', 'stops-core-theme-and-plugin-updates'),
|
|
'get' => 'advanced', /*$_GET variable*/
|
|
'action' => 'mpsum_admin_tab_advanced' /* action variable in do_action */
|
|
);
|
|
if (!Easy_Updates_Manager()->is_premium()) {
|
|
$tabs[] = array(
|
|
'url' => add_query_arg(array( 'tab' => 'premium' ), self::get_url()), /* URL to the tab */
|
|
'label' => esc_html__('Premium', 'stops-core-theme-and-plugin-updates'),
|
|
'get' => 'premium', /*$_GET variable*/
|
|
'action' => 'mpsum_admin_tab_premium' /* action variable in do_action */
|
|
);
|
|
}
|
|
$tabs_count = count($tabs);
|
|
if ($tabs && !empty($tabs)) {
|
|
$tab_html = '<h2 class="nav-tab-wrapper">';
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- It gets active tab.
|
|
$active_tab = isset($_GET['tab']) ? sanitize_text_field(wp_unslash($_GET['tab'])) : 'general';
|
|
$is_tab_match = false;
|
|
if ('general' == $active_tab) {
|
|
$active_tab = 'general';
|
|
} else {
|
|
foreach ($tabs as $tab) {
|
|
$tab_get = isset($tab['get']) ? $tab['get'] : '';
|
|
if ($active_tab === $tab_get) {
|
|
$is_tab_match = true;
|
|
}
|
|
}
|
|
if (!$is_tab_match) {
|
|
$active_tab = 'general';
|
|
}
|
|
}
|
|
$do_action = false;
|
|
foreach ($tabs as $tab) {
|
|
$classes = array( 'nav-tab' );
|
|
$tab_get = isset($tab['get']) ? $tab['get'] : '';
|
|
if ($active_tab == $tab_get) {
|
|
$classes[] = 'nav-tab-active';
|
|
$do_action = isset($tab['action']) ? $tab['action'] : false;
|
|
} elseif (!$is_tab_match && 'general' === $tab_get) {
|
|
$classes[] = 'nav-tab-active';
|
|
$do_action = isset($tab['action']) ? $tab['action'] : false;
|
|
}
|
|
$tab_url = isset($tab['url']) ? $tab['url'] : '';
|
|
$tab_html .= sprintf('<a href="%s" class="%s" id="eum-%s">%s</a>', esc_url($tab_url), esc_attr(implode(' ', $classes)), esc_attr($tab_get), esc_html($tab['label']));
|
|
}
|
|
$tab_html .= '</h2>';
|
|
if ($tabs_count > 1) {
|
|
echo wp_kses_post($tab_html);
|
|
}
|
|
if ($do_action) {
|
|
|
|
/**
|
|
* Perform a tab action.
|
|
*
|
|
* Perform a tab action.
|
|
*
|
|
* @since 5.0.0
|
|
*
|
|
* @param string $action Can be mpsum_admin_tab_main, mpsum_admin_tab_plugins, mpsum_admin_tab_themes, and mpsum_admin_tab_advanced.
|
|
*/
|
|
do_action($do_action);
|
|
}
|
|
}
|
|
?>
|
|
|
|
</div><!-- .wrap -->
|
|
<?php
|
|
} //end output_admin_interface
|
|
|
|
/**
|
|
* Adds plugin settings page link to plugin links in WordPress Dashboard Plugins Page
|
|
*
|
|
* @since 5.0.0
|
|
* @access public
|
|
* @see __construct
|
|
* @param array $settings Uses $prefix . "plugin_action_links_$plugin_file" action
|
|
* @return array Array of settings
|
|
*/
|
|
public function plugin_settings_link( $settings ) {
|
|
$admin_anchor = sprintf('<a href="%s">%s</a>', esc_url($this->get_url()), esc_html__('Configure', 'stops-core-theme-and-plugin-updates'));
|
|
|
|
if (! is_array($settings)) {
|
|
return array( $admin_anchor );
|
|
} else {
|
|
return array_merge(array( $admin_anchor ), $settings);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Adds Easy Updates Manager option to the admin bar
|
|
*
|
|
* @since 8.0.1
|
|
* @access public
|
|
* @see init
|
|
*/
|
|
public function add_networkadmin_page() {
|
|
global $wp_admin_bar;
|
|
|
|
if (!is_object($wp_admin_bar) || !is_super_admin() || !function_exists('is_admin_bar_showing') || !is_admin_bar_showing()) {
|
|
return;
|
|
}
|
|
|
|
$wp_admin_bar->add_node(array(
|
|
'parent' => 'network-admin',
|
|
'id' => 'eum-admin-settings',
|
|
'title' => __('Easy Updates Manager', 'stops-core-theme-and-plugin-updates'),
|
|
'href' => self::get_url()
|
|
));
|
|
}
|
|
}
|