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 ''; } } /** * 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('%s', 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() { ?>