PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 4.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v4.2
6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 5.2.1 5.2.2 5.3 All 153 releases
← All changes | class/class-mainwp-system.php +983 -1222 5.2.24.2 View file →
@@ -6,9 +6,15 @@
6 6 */
7 7
8 8 namespace MainWP\Dashboard;
9 9
10 -// phpcs:disable Generic.Metrics.CyclomaticComplexity -- complexity.
10 +/**
11 + * Defines MainWP Twitter Max Seconds.
12 + *
13 + * @const ( string ) 60 * 5
14 + * @source https://github.com/mainwp/mainwp/blob/master/cron/bootstrap.php
15 + */
16 +define( 'MAINWP_TWITTER_MAX_SECONDS', 60 * 5 );
11 17
12 18 const MAINWP_VIEW_PER_SITE = 1;
13 19 const MAINWP_VIEW_PER_PLUGIN_THEME = 0;
14 20 const MAINWP_VIEW_PER_GROUP = 2;
@@ -19,1361 +25,1116 @@
19 25 * Class MainWP_System
20 26 *
21 27 * @package MainWP\Dashboard
22 28 */
23 -class MainWP_System { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
29 +class MainWP_System {
24 30
25 - /**
26 - * Public static variable to hold the current plugin version.
27 - *
28 - * @var string Current plugin version.
29 - */
30 - public static $version = '5.2.2'; // NOSONAR.
31 + /**
32 + * Public static variable to hold the current plugin version.
33 + *
34 + * @var string Current plugin version.
35 + */
36 + public static $version = '4.2';
31 37
32 - /**
33 - * Private static variable to hold the single instance of the class.
34 - *
35 - * @var mixed Default null
36 - */
37 - private static $instance = null;
38 + /**
39 + * Private static variable to hold the single instance of the class.
40 + *
41 + * @var mixed Default null
42 + */
43 + private static $instance = null;
38 44
39 - /**
40 - * Public variable to hold the Metaboxes instance.
41 - *
42 - * @var object Metaboxes.
43 - */
44 - public $metaboxes;
45 + /**
46 + * Public variable to hold the Metaboxes instance.
47 + *
48 + * @var object Metaboxes.
49 + */
50 + public $metaboxes;
45 51
46 - /**
47 - * Private variable to hold the current version.
48 - *
49 - * @var string The plugin current version.
50 - */
51 - private $current_version = null;
52 + /**
53 + * Private variable to hold the current version.
54 + *
55 + * @var string The plugin current version.
56 + */
57 + private $current_version = null;
52 58
59 + /**
60 + * Private variable to hold the plugin slug (mainwp/mainwp.php)
61 + *
62 + * @var string Plugin slug.
63 + */
64 + private $plugin_slug;
53 65
54 - /**
55 - * Private variable to hold the check update version number.
56 - *
57 - * @var string The plugin current update version.
58 - */
59 - private $check_ver_update = '0.0.5';
66 + /**
67 + * Method instance()
68 + *
69 + * Create a public static instance.
70 + *
71 + * @static
72 + * @return MainWP_System
73 + */
74 + public static function instance() {
75 + return self::$instance;
76 + }
60 77
61 - /**
62 - * Private variable to hold the plugin slug (mainwp/mainwp.php)
63 - *
64 - * @var string Plugin slug.
65 - */
66 - private $plugin_slug;
78 + /**
79 + * MainWP_System constructor.
80 + *
81 + * Runs any time class is called.
82 + *
83 + * @param string $mainwp_plugin_file Plugn slug.
84 + *
85 + * @uses \MainWP\Dashboard\MainWP_Bulk_Post
86 + * @uses \MainWP\Dashboard\MainWP_Hooks
87 + * @uses \MainWP\Dashboard\MainWP_Menu::get_class_name()
88 + * @uses \MainWP\Dashboard\MainWP_Menu
89 + * @uses \MainWP\Dashboard\MainWP_Meta_Boxes
90 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::init_cron_jobs()
91 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs
92 + * @uses \MainWP\Dashboard\MainWP_System_Handler
93 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_class_name()
94 + * @uses \MainWP\Dashboard\MainWP_System_View::get_class_name()
95 + * @uses \MainWP\Dashboard\MainWP_UI::get_class_name()
96 + * @uses \MainWP\Dashboard\MainWP_WP_CLI_Command::init()
97 + * @uses \MainWP\Dashboard\MainWP_Updates_Overview::init()
98 + * @uses \MainWP\Dashboard\MainWP_Extensions::init()
99 + * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_class_name()
100 + * @uses \MainWP\Dashboard\MainWP_Install_Bulk::init()
101 + * @uses \MainWP\Dashboard\MainWP_Manage_Backups::init()
102 + * @uses \MainWP\Dashboard\MainWP_Manage_Sites::init()
103 + * @uses \MainWP\Dashboard\MainWP_Overview::get()
104 + * @uses \MainWP\Dashboard\MainWP_Page::init()
105 + * @uses \MainWP\Dashboard\MainWP_Plugins::init()
106 + * @uses \MainWP\Dashboard\MainWP_Post::init()
107 + * @uses \MainWP\Dashboard\MainWP_Settings::init()
108 + * @uses \MainWP\Dashboard\MainWP_Themes::init()
109 + * @uses \MainWP\Dashboard\MainWP_Updates::init()
110 + * @uses \MainWP\Dashboard\MainWP_User::init()
111 + * @uses \MainWP\Dashboard\MainWP_Updates::init()
112 + * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
113 + */
114 + public function __construct( $mainwp_plugin_file ) {
115 + self::$instance = $this;
116 + $this->load_all_options();
117 + $this->update();
118 + $this->plugin_slug = plugin_basename( $mainwp_plugin_file );
67 119
68 - /**
69 - * Method instance()
70 - *
71 - * Create a public static instance.
72 - *
73 - * @static
74 - * @return MainWP_System
75 - */
76 - public static function instance() {
77 - return static::$instance;
78 - }
120 + // includes rest api work.
121 + require 'class-mainwp-rest-api.php';
122 + Rest_Api::instance()->init();
79 123
80 - /**
81 - * MainWP_System constructor.
82 - *
83 - * Runs any time class is called.
84 - *
85 - * @param string $mainwp_plugin_file Plugn slug.
86 - *
87 - * @uses \MainWP\Dashboard\MainWP_Bulk_Post
88 - * @uses \MainWP\Dashboard\MainWP_Hooks
89 - * @uses \MainWP\Dashboard\MainWP_Menu::get_class_name()
90 - * @uses \MainWP\Dashboard\MainWP_Menu
91 - * @uses \MainWP\Dashboard\MainWP_Meta_Boxes
92 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::init_cron_jobs()
93 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs
94 - * @uses \MainWP\Dashboard\MainWP_System_Handler
95 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_class_name()
96 - * @uses \MainWP\Dashboard\MainWP_System_View::get_class_name()
97 - * @uses \MainWP\Dashboard\MainWP_UI::get_class_name()
98 - * @uses \MainWP\Dashboard\MainWP_WP_CLI_Command::init()
99 - * @uses \MainWP\Dashboard\MainWP_Updates_Overview::init()
100 - * @uses \MainWP\Dashboard\MainWP_Extensions::init()
101 - * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_class_name()
102 - * @uses \MainWP\Dashboard\MainWP_Install_Bulk::init()
103 - * @uses \MainWP\Dashboard\MainWP_Manage_Backups::init()
104 - * @uses \MainWP\Dashboard\MainWP_Manage_Sites::init()
105 - * @uses \MainWP\Dashboard\MainWP_Overview::get()
106 - * @uses \MainWP\Dashboard\MainWP_Page::init()
107 - * @uses \MainWP\Dashboard\MainWP_Plugins::init()
108 - * @uses \MainWP\Dashboard\MainWP_Post::init()
109 - * @uses \MainWP\Dashboard\MainWP_Settings::init()
110 - * @uses \MainWP\Dashboard\MainWP_Themes::init()
111 - * @uses \MainWP\Dashboard\MainWP_Updates::init()
112 - * @uses \MainWP\Dashboard\MainWP_User::init()
113 - * @uses \MainWP\Dashboard\MainWP_Updates::init()
114 - * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
115 - */
116 - public function __construct( $mainwp_plugin_file ) { //phpcs:ignore -- NOSONAR - complex.
117 - static::$instance = $this;
124 + if ( is_admin() ) {
125 + include_once ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'plugin.php';
126 + $pluginData = get_plugin_data( $mainwp_plugin_file );
127 + $this->current_version = $pluginData['Version'];
128 + $currentVersion = get_option( 'mainwp_plugin_version' );
118 129
119 - MainWP_Execution_Helper::instance()->init_exec_time();
130 + if ( ! empty( $currentVersion ) && version_compare( $currentVersion, '4.0', '<' ) && version_compare( $this->current_version, '4.0', '>=' ) ) {
131 + add_action( 'mainwp_before_header', array( MainWP_System_View::get_class_name(), 'mainwp_4_update_notice' ) );
132 + }
120 133
121 - $includer = new MainWP_Includes();
122 - $includer->includes();
134 + MainWP_Utility::update_option( 'mainwp_plugin_version', $this->current_version );
135 + }
123 136
124 - MainWP_Keys_Manager::auto_load_files();
137 + if ( ! defined( 'MAINWP_VERSION' ) ) {
125 138
126 - $this->load_all_options();
139 + /**
140 + * Defines MainWP Version.
141 + *
142 + * @const ( string )
143 + * @source https://code-reference.mainwp.com/classes/MainWP.Dashboard.MainWP_System.html
144 + */
145 + define( 'MAINWP_VERSION', $this->current_version );
146 + }
127 147
128 - $this->update_install();
129 - $this->plugin_slug = plugin_basename( $mainwp_plugin_file );
148 + $ssl_api_verifyhost = ( ( get_option( 'mainwp_api_sslVerifyCertificate' ) === false ) || ( get_option( 'mainwp_api_sslVerifyCertificate' ) == 1 ) ) ? 1 : 0;
149 + if ( 0 == $ssl_api_verifyhost ) {
150 + add_filter(
151 + 'http_request_args',
152 + array(
153 + MainWP_Extensions_Handler::get_class_name(),
154 + 'no_ssl_filter_extension_upgrade',
155 + ),
156 + 99,
157 + 2
158 + );
159 + }
130 160
131 - do_action( 'mainwp_system_init' );
161 + MainWP_Extensions::init();
132 162
133 - if ( is_admin() ) {
134 - include_once ABSPATH . 'wp-admin' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'plugin.php'; // NOSONAR - WP compatible.
135 - $pluginData = get_plugin_data( $mainwp_plugin_file, true, false ); // to fix issue of user language setting.
136 - $this->current_version = $pluginData['Version'];
137 - $currentVersion = get_option( 'mainwp_plugin_version' );
163 + $systemHandler = MainWP_System_Handler::instance();
138 164
139 - if ( ! empty( $currentVersion ) && version_compare( $currentVersion, '4.0', '<' ) && version_compare( $this->current_version, '4.0', '>=' ) ) {
140 - add_action( 'mainwp_after_header', array( MainWP_System_View::get_class_name(), 'mainwp_4_update_notice' ) );
141 - }
165 + add_action( 'parse_request', array( &$this, 'parse_request' ) );
166 + add_action( 'init', array( &$this, 'localization' ) );
167 + add_filter( 'site_transient_update_plugins', array( $systemHandler, 'check_update_custom' ) );
168 + add_filter( 'pre_set_site_transient_update_plugins', array( $systemHandler, 'pre_check_update_custom' ) );
169 + add_filter( 'plugins_api', array( $systemHandler, 'plugins_api_info' ), 10, 3 );
142 170
143 - if ( ! empty( $currentVersion ) && version_compare( $currentVersion, '5.0', '<' ) && version_compare( $this->current_version, '5.0', '>=' ) ) {
144 - add_action( 'mainwp_after_header', array( MainWP_System_View::get_class_name(), 'mainwp_ver5_update_notice' ) );
145 - }
171 + $this->metaboxes = new MainWP_Meta_Boxes();
146 172
147 - if ( ! empty( $currentVersion ) && version_compare( $currentVersion, '5.0.2', '<' ) && version_compare( $this->current_version, '5.0.2', '>=' ) ) {
148 - add_action( 'mainwp_after_header', array( MainWP_System_View::get_class_name(), 'mainwp_ver502_update_notice' ) );
149 - }
173 + MainWP_Overview::get();
150 174
151 - MainWP_Utility::update_option( 'mainwp_plugin_version', $this->current_version );
152 - }
175 + MainWP_Manage_Sites::init();
176 + new MainWP_Hooks();
177 + new MainWP_Menu();
153 178
154 - if ( ! defined( 'MAINWP_VERSION' ) ) {
179 + add_action( 'admin_menu', array( MainWP_Menu::get_class_name(), 'init_mainwp_menus' ) );
180 + add_filter( 'admin_footer', array( &$this, 'admin_footer' ), 15 );
181 + add_action( 'admin_head', array( MainWP_System_View::get_class_name(), 'admin_head' ) );
182 + add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_styles' ) );
183 + add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) );
184 + add_action( 'admin_body_class', array( MainWP_System_View::get_class_name(), 'admin_body_class' ) );
155 185
156 - /**
157 - * Defines MainWP Version.
158 - *
159 - * @const ( string )
160 - * @source https://code-reference.mainwp.com/classes/MainWP.Dashboard.MainWP_System.html
161 - */
162 - define( 'MAINWP_VERSION', $this->current_version );
163 - }
186 + new MainWP_Bulk_Post();
164 187
165 - if ( get_option( 'mainwp_setting_demo_mode_enabled' ) && ! defined( 'MAINWP_DEMO_MODE' ) ) {
166 - define( 'MAINWP_DEMO_MODE', true );
167 - }
188 + add_action( 'admin_init', array( &$this, 'admin_init' ), 20 );
189 + add_action( 'after_setup_theme', array( &$this, 'after_setup_theme' ) );
168 190
169 - $ssl_api_verifyhost = ( ( get_option( 'mainwp_api_sslVerifyCertificate' ) === false ) || ( 1 === (int) get_option( 'mainwp_api_sslVerifyCertificate' ) ) ) ? 1 : 0;
170 - if ( empty( $ssl_api_verifyhost ) ) {
171 - add_filter(
172 - 'http_request_args',
173 - array(
174 - MainWP_Extensions_Handler::get_class_name(),
175 - 'no_ssl_filter_extension_upgrade',
176 - ),
177 - 99,
178 - 2
179 - );
180 - }
191 + add_action( 'init', array( &$this, 'parse_init' ) );
192 + add_action( 'init', array( &$this, 'init' ), 9999 );
193 + add_action( 'admin_init', array( $this, 'admin_redirects' ) );
194 + add_action( 'admin_menu', array( &$this, 'admin_menu' ) );
195 + add_action( 'login_form', array( &$this, 'login_form_redirect' ) );
196 + add_action( 'admin_print_styles', array( MainWP_System_View::get_class_name(), 'admin_print_styles' ) );
181 197
182 - MainWP_Extensions::init();
183 - MainWP_Extensions_Groups::init();
198 + MainWP_Install_Bulk::init();
184 199
185 - $systemHandler = MainWP_System_Handler::instance();
200 + MainWP_System_Cron_Jobs::instance()->init_cron_jobs();
186 201
187 - add_action( 'plugins_loaded', array( &$this, 'localization' ) );
188 - add_filter( 'site_transient_update_plugins', array( $systemHandler, 'check_update_custom' ) );
189 - add_filter( 'pre_set_site_transient_update_plugins', array( $systemHandler, 'pre_check_update_custom' ) );
190 - add_filter( 'plugins_api', array( $systemHandler, 'plugins_api_extension_info' ), 10, 3 );
191 - add_filter( 'plugins_api_result', array( $systemHandler, 'plugins_api_wp_plugins_api_result' ), 10, 3 );
202 + add_action( 'mainwp_before_header', array( MainWP_System_View::get_class_name(), 'admin_notices' ) );
203 + add_action( 'admin_notices', array( MainWP_System_View::get_class_name(), 'wp_admin_notices' ) );
204 + add_action( 'wp_mail_failed', array( &$this, 'wp_mail_failed' ) );
192 205
193 - $this->metaboxes = new MainWP_Meta_Boxes();
206 + add_action( 'after_plugin_row', array( MainWP_System_View::get_class_name(), 'after_extensions_plugin_row' ), 10, 3 );
194 207
195 - MainWP_Overview::get();
196 - MainWP_Client_Overview::instance();
208 + add_filter( 'mainwp-activated-check', array( &$this, 'activated_check' ) ); // @deprecated Use 'mainwp_activated_check' instead.
209 + add_filter( 'mainwp_activated_check', array( &$this, 'activated_check' ) );
197 210
198 - MainWP_Manage_Sites::init();
211 + do_action_deprecated( 'mainwp-activated', array(), '4.0.7.2', 'mainwp_activated' ); // @deprecated Use 'mainwp_activated' instead.
199 212
200 - MainWP_Hooks::get_instance();
201 - MainWP_Menu::get_instance();
213 + /**
214 + * Action: mainwp_activated
215 + *
216 + * Fires upon MainWP plugin activation.
217 + *
218 + * @since Unknown
219 + */
220 + do_action( 'mainwp_activated' );
202 221
203 - add_action( 'admin_menu', array( MainWP_Menu::get_class_name(), 'init_mainwp_menus' ) );
204 - add_filter( 'admin_footer', array( &$this, 'admin_footer' ), 15 );
205 - add_action( 'admin_head', array( MainWP_System_View::get_class_name(), 'admin_head' ) );
206 - add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_styles' ) );
207 - add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) );
208 - add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts_fix_conflict' ), 9 );
209 - add_action( 'admin_body_class', array( MainWP_System_View::get_class_name(), 'admin_body_class' ) );
222 + MainWP_Updates::init();
223 + MainWP_Post::init();
224 + MainWP_Settings::init();
225 + if ( get_option( 'mainwp_enableLegacyBackupFeature' ) ) {
226 + MainWP_Manage_Backups::init();
227 + }
228 + MainWP_User::init();
229 + MainWP_Page::init();
230 + MainWP_Themes::init();
231 + MainWP_Plugins::init();
232 + MainWP_Updates_Overview::init();
233 + if ( defined( 'WP_CLI' ) && WP_CLI ) {
234 + MainWP_WP_CLI_Command::init();
235 + }
236 + if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
237 + if ( isset( $_GET['mainwp_run'] ) && ! empty( $_GET['mainwp_run'] ) ) {
238 + add_action( 'init', array( MainWP_System_Cron_Jobs::instance(), 'cron_active' ), PHP_INT_MAX );
239 + }
240 + }
241 + }
210 242
211 - MainWP_Bulk_Post::get_instance();
243 + /**
244 + * Method load_all_options()
245 + *
246 + * Load all wp_options data.
247 + *
248 + * @return array $alloptions Array of all options.
249 + */
250 + public function load_all_options() {
212 251
213 - add_action( 'admin_init', array( &$this, 'admin_init' ), 20 );
214 - add_action( 'admin_init', array( $this, 'hook_admin_update_check' ) );
215 - add_action( 'after_setup_theme', array( &$this, 'after_setup_theme' ) );
252 + /**
253 + * WordPress Database instance.
254 + *
255 + * @global object $wpdb
256 + */
257 + global $wpdb;
216 258
217 - add_action( 'init', array( &$this, 'parse_init' ) );
218 - add_action( 'init', array( &$this, 'init' ), 9999 );
219 - add_action( 'admin_init', array( $this, 'admin_redirects' ) );
220 - add_action( 'current_screen', array( &$this, 'current_screen_redirects' ), 15 );
221 - add_filter( 'plugin_action_links', array( $this, 'hook_plugin_action_links' ), 10, 4 );
222 - add_action( 'admin_menu', array( &$this, 'admin_menu' ) );
223 - add_action( 'admin_print_styles', array( MainWP_System_View::get_class_name(), 'admin_print_styles' ) );
259 + if ( ! defined( 'WP_INSTALLING' ) || ! is_multisite() ) {
260 + $alloptions = wp_cache_get( 'alloptions', 'options' );
261 + } else {
262 + $alloptions = false;
263 + }
224 264
225 - add_action( 'wp_logout', array( &$this, 'clear_sessions' ) );
265 + if ( ! defined( 'WP_INSTALLING' ) || ! is_multisite() ) {
266 + $notoptions = wp_cache_get( 'notoptions', 'options' );
267 + } else {
268 + $notoptions = false;
269 + }
226 270
227 - MainWP_Install_Bulk::init();
271 + if ( ! isset( $alloptions['mainwp_db_version'] ) ) {
272 + $suppress = $wpdb->suppress_errors();
273 + $options = array(
274 + 'mainwp_db_version',
275 + 'mainwp_plugin_version',
276 + 'mainwp_upgradeVersionInfo',
277 + 'mainwp_extensions',
278 + 'mainwp_activated',
279 + 'mainwp_api_sslVerifyCertificate',
280 + 'mainwp_automaticDailyUpdate',
281 + 'mainwp_backup_before_upgrade',
282 + 'mainwp_enableLegacyBackupFeature',
283 + 'mainwp_hide_twitters_message',
284 + 'mainwp_maximumInstallUpdateRequests',
285 + 'mainwp_maximumSyncRequests',
286 + 'mainwp_primaryBackup',
287 + 'mainwp_security',
288 + 'mainwp_use_favicon',
289 + 'mainwp_wp_cron',
290 + 'mainwp_timeDailyUpdate',
291 + 'mainwp_frequencyDailyUpdate',
292 + 'mainwp_wpcreport_extension',
293 + 'mainwp_daily_digest_plain_text',
294 + 'mainwp_enable_managed_cr_for_wc',
295 + 'mainwp_hide_update_everything',
296 + 'mainwp_number_overview_columns',
297 + 'mainwp_disable_update_confirmations',
298 + 'mainwp_settings_show_widgets',
299 + 'mainwp_settings_show_manage_sites_columns',
300 + 'mainwp_disableSitesChecking',
301 + 'mainwp_disableSitesHealthMonitoring',
302 + 'mainwp_frequencySitesChecking',
303 + 'mainwp_sitehealthThreshold',
304 + 'mainwp_updatescheck_frequency_today_count',
305 + 'mainwp_settings_notification_emails',
306 + 'mainwp_ignore_HTTP_response_status',
307 + 'mainwp_check_http_response',
308 + 'mainwp_extmenu',
309 + 'mainwp_opensslLibLocation',
310 + 'mwp_setup_opensslLibLocation',
311 + 'mainwp_notice_wp_mail_failed',
312 + 'mainwp_show_language_updates',
313 + 'mainwp_logger_check_daily',
314 + );
228 315
229 - MainWP_System_Cron_Jobs::instance()->init_cron_jobs();
316 + $query = "SELECT option_name, option_value FROM $wpdb->options WHERE option_name in (";
317 + foreach ( $options as $option ) {
318 + $query .= "'" . $option . "', ";
319 + }
320 + $query = substr( $query, 0, strlen( $query ) - 2 );
321 + $query .= ")"; // phpcs:ignore -- ignore double quotes auto-correction.
322 + $alloptions_db = $wpdb->get_results( $query ); // phpcs:ignore -- unprepared SQL ok.
323 + $wpdb->suppress_errors( $suppress );
324 + if ( ! is_array( $alloptions ) ) {
325 + $alloptions = array();
326 + }
327 + if ( is_array( $alloptions_db ) ) {
328 + foreach ( (array) $alloptions_db as $o ) {
329 + $alloptions[ $o->option_name ] = $o->option_value;
330 + unset( $options[ array_search( $o->option_name, $options ) ] );
331 + }
332 + if ( ! is_array( $notoptions ) ) {
333 + $notoptions = array();
334 + }
335 + foreach ( $options as $option ) {
336 + $notoptions[ $option ] = true;
337 + }
338 + if ( ! defined( 'WP_INSTALLING' ) || ! is_multisite() ) {
339 + wp_cache_set( 'alloptions', $alloptions, 'options' );
340 + wp_cache_set( 'notoptions', $notoptions, 'options' );
341 + }
342 + }
343 + }
230 344
231 - add_action( 'mainwp_after_header', array( MainWP_System_View::get_class_name(), 'admin_notices' ) );
232 - add_action( 'admin_notices', array( MainWP_System_View::get_class_name(), 'wp_admin_notices' ) );
233 - add_action( 'wp_mail_failed', array( &$this, 'wp_mail_failed' ) );
345 + return $alloptions;
346 + }
234 347
235 - add_action( 'after_plugin_row', array( MainWP_System_View::get_class_name(), 'after_extensions_plugin_row' ), 10, 3 );
348 + /**
349 + * Method parse_request()
350 + *
351 + * Includes api.php.
352 + */
353 + public function parse_request() {
354 + include_once MAINWP_PLUGIN_DIR . 'includes/api.php';
355 + }
236 356
237 - add_filter( 'mainwp-activated-check', array( &$this, 'activated_check' ) ); // @deprecated Use 'mainwp_activated_check' instead.
238 - add_filter( 'mainwp_activated_check', array( &$this, 'activated_check' ) );
357 + /**
358 + * Method localization()
359 + *
360 + * Loads plugin language files.
361 + */
362 + public function localization() {
363 + $load = apply_filters( 'mainwp_load_text_domain', true );
364 + if ( $load ) {
365 + load_plugin_textdomain( 'mainwp', false, dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' );
366 + }
367 + }
239 368
240 - do_action_deprecated( 'mainwp-activated', array(), '4.0.7.2', 'mainwp_activated' ); // @deprecated Use 'mainwp_activated' instead. NOSONAR - not IP.
369 + /**
370 + * Method wp_mail_failed()
371 + *
372 + * Check if there has been a wp mail failer.
373 + *
374 + * @param string $error Array of error messages.
375 + *
376 + * @uses \MainWP\Dashboard\MainWP_Logger::debug()
377 + * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
378 + */
379 + public function wp_mail_failed( $error ) {
380 + $mail_failed = get_option( 'mainwp_notice_wp_mail_failed' );
381 + if ( is_object( $error ) && empty( $mail_failed ) ) {
382 + MainWP_Utility::update_option( 'mainwp_notice_wp_mail_failed', 'yes' );
383 + $er = $error->get_error_message();
384 + if ( ! empty( $er ) ) {
385 + MainWP_Logger::instance()->debug( 'Error :: wp_mail :: [error=' . $er . ']' );
386 + }
387 + }
388 + }
241 389
242 - /**
243 - * Action: mainwp_activated
244 - *
245 - * Fires upon MainWP plugin activation.
246 - *
247 - * @since Unknown
248 - */
249 - do_action( 'mainwp_activated' );
390 + /**
391 + * Method get_version()
392 + *
393 + * Get current plugin version.
394 + *
395 + * @return string Current plugin version.
396 + */
397 + public function get_version() {
398 + return $this->current_version;
399 + }
250 400
251 - MainWP_Updates::init();
252 - MainWP_Post::init();
253 - MainWP_Settings::init();
254 - if ( get_option( 'mainwp_enableLegacyBackupFeature' ) ) {
255 - MainWP_Manage_Backups::init();
256 - }
257 - MainWP_Manage_Groups::init();
258 - MainWP_User::init();
259 - MainWP_Page::init();
260 - MainWP_Themes::init();
261 - MainWP_Plugins::init();
262 - MainWP_Updates_Overview::init();
263 - MainWP_Client::init();
264 - MainWP_Rest_Api_Page::init();
265 - MainWP_Non_MainWP_Actions::instance();
401 + /**
402 + * Method mainwp_cronpingchilds_action()
403 + *
404 + * Run cron ping child's action.
405 + *
406 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_ping_childs()
407 + */
408 + public function mainwp_cronpingchilds_action() {
409 + MainWP_System_Cron_Jobs::instance()->cron_ping_childs();
410 + }
266 411
267 - if ( defined( 'WP_CLI' ) && WP_CLI ) {
268 - MainWP_WP_CLI_Command::init();
269 - }
270 - if ( defined( 'DOING_CRON' ) && DOING_CRON && isset( $_GET['mainwp_run'] ) && 'test' === $_GET['mainwp_run'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
271 - add_action( 'init', array( MainWP_System_Cron_Jobs::instance(), 'cron_active' ), PHP_INT_MAX );
272 - }
273 - }
412 + /**
413 + * Method mainwp_cronbackups_continue_action()
414 + *
415 + * Run cron backups continue action.
416 + *
417 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_backups_continue()
418 + */
419 + public function mainwp_cronbackups_continue_action() {
420 + MainWP_System_Cron_Jobs::instance()->cron_backups_continue();
421 + }
274 422
275 - /**
276 - * Method get_dashboard_version()
277 - *
278 - * Get dashboard version.
279 - *
280 - * @return string $version Version.
281 - */
282 - public function get_dashboard_version() {
283 - return static::$version;
284 - }
423 + /**
424 + * Method mainwp_cronbackups_action()
425 + *
426 + * Run cron backups action.
427 + *
428 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_backups()
429 + */
430 + public function mainwp_cronbackups_action() {
431 + MainWP_System_Cron_Jobs::instance()->cron_backups();
432 + }
285 433
286 - /**
287 - * Method load_all_options()
288 - *
289 - * Load all wp_options data.
290 - *
291 - * @return array $alloptions Array of all options.
292 - */
293 - public function load_all_options() { //phpcs:ignore -- NOSONAR - complex.
434 + /**
435 + * Method mainwp_cronstats_action()
436 + *
437 + * Run cron stats action.
438 + *
439 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_stats()
440 + */
441 + public function mainwp_cronstats_action() {
442 + MainWP_System_Cron_Jobs::instance()->cron_stats();
443 + }
294 444
295 - /**
296 - * WordPress Database instance.
297 - *
298 - * @global object $wpdb
299 - */
300 - global $wpdb;
445 + /**
446 + * Method mainwp_cronupdatescheck_action()
447 + *
448 + * Run cron updates check action.
449 + *
450 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_updates_check()
451 + */
452 + public function mainwp_cronupdatescheck_action() {
453 + MainWP_System_Cron_Jobs::instance()->cron_updates_check();
454 + }
301 455
302 - if ( ! defined( 'WP_INSTALLING' ) || ! is_multisite() ) {
303 - $alloptions = wp_cache_get( 'alloptions', 'options' );
304 - } else {
305 - $alloptions = false;
306 - }
456 + /**
457 + * Method mainwp_croncheckstatus_action()
458 + *
459 + * Run cron check sites status action.
460 + *
461 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_check_websites_status()
462 + */
463 + public function mainwp_croncheckstatus_action() {
464 + MainWP_System_Cron_Jobs::instance()->cron_check_websites_status();
465 + }
307 466
308 - if ( ! defined( 'WP_INSTALLING' ) || ! is_multisite() ) {
309 - $notoptions = wp_cache_get( 'notoptions', 'options' );
310 - } else {
311 - $notoptions = false;
312 - }
467 + /**
468 + * Method mainwp_cronchecksitehealth_action()
469 + *
470 + * Run cron check sites health action.
471 + *
472 + * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_check_websites_health()
473 + */
474 + public function mainwp_cronchecksitehealth_action() {
475 + MainWP_System_Cron_Jobs::instance()->cron_check_websites_health();
476 + }
313 477
314 - if ( ! isset( $alloptions['mainwp_db_version'] ) ) {
315 - $suppress = $wpdb->suppress_errors();
316 - $options = array(
317 - 'mainwp_db_version',
318 - 'mainwp_plugin_version',
319 - 'mainwp_upgradeVersionInfo',
320 - 'mainwp_extensions',
321 - 'mainwp_activated',
322 - 'mainwp_api_sslVerifyCertificate',
323 - 'mainwp_automaticDailyUpdate',
324 - 'mainwp_pluginAutomaticDailyUpdate',
325 - 'mainwp_themeAutomaticDailyUpdate',
326 - 'mainwp_backup_before_upgrade',
327 - 'mainwp_enableLegacyBackupFeature',
328 - 'mainwp_maximumInstallUpdateRequests',
329 - 'mainwp_maximumSyncRequests',
330 - 'mainwp_primaryBackup',
331 - 'mainwp_security',
332 - 'mainwp_use_favicon',
333 - 'mainwp_wp_cron',
334 - 'mainwp_timeDailyUpdate',
335 - 'mainwp_frequencyDailyUpdate',
336 - 'mainwp_delay_autoupdate',
337 - 'mainwp_wpcreport_extension',
338 - 'mainwp_daily_digest_plain_text',
339 - 'mainwp_hide_update_everything',
340 - 'mainwp_disable_update_confirmations',
341 - 'mainwp_settings_show_widgets',
342 - 'mainwp_clients_show_widgets',
343 - 'mainwp_settings_show_manage_sites_columns',
344 - 'mainwp_disableSitesChecking',
345 - 'mainwp_disableSitesHealthMonitoring',
346 - 'mainwp_frequencySitesChecking',
347 - 'mainwp_sitehealthThreshold',
348 - 'mainwp_settings_notification_emails',
349 - 'mainwp_ignore_HTTP_response_status',
350 - 'mainwp_check_http_response',
351 - 'mainwp_extmenu',
352 - 'mainwp_opensslLibLocation',
353 - 'mainwp_notice_wp_mail_failed',
354 - 'mainwp_show_language_updates',
355 - 'mainwp_logger_check_daily',
356 - 'mainwp_site_actions_notification_enable',
357 - 'mainwp_update_check_version',
358 - 'mainwp_setting_demo_mode_enabled',
359 - 'mainwp_log_wait_lasttime',
360 - 'mainwp_updatescheck_start_last_schedule_timestamp',
361 - 'mainwp_cron_license_deactivated_alert_lasttime',
362 - 'mainwp_updatescheck_is_running',
363 - 'mainwp_automatic_updates_is_running',
364 - 'mainwp_frequency_AutoUpdate',
365 - 'mainwp_batch_updates_is_running',
366 - 'mainwp_batch_individual_updates_is_running',
478 + /**
479 + * Method is_mainwp_pages()
480 + *
481 + * Get the current page and check it for "mainwp_".
482 + *
483 + * @return boolean ture|false.
484 + */
485 + public static function is_mainwp_pages() {
486 + $screen = get_current_screen();
487 + if ( $screen && strpos( $screen->base, 'mainwp_' ) !== false && strpos( $screen->base, 'mainwp_child_tab' ) === false ) {
488 + return true;
489 + }
367 490
368 - );
491 + return false;
492 + }
369 493
370 - $options = apply_filters( 'mainwp_init_load_all_options', $options );
494 + /**
495 + * Method init()
496 + *
497 + * Instantiate Plugin.
498 + */
499 + public function init() {
371 500
372 - $query = "SELECT option_name, option_value FROM $wpdb->options WHERE option_name in (";
373 - foreach ( $options as $option ) {
374 - $query .= "'" . $option . "', ";
375 - }
376 - $query = substr( $query, 0, strlen( $query ) - 2 );
377 - $query .= ")"; // phpcs:ignore -- ignore double quotes auto-correction.
378 - $alloptions_db = $wpdb->get_results( $query ); // phpcs:ignore -- unprepared SQL ok.
379 - $wpdb->suppress_errors( $suppress );
380 - if ( ! is_array( $alloptions ) ) {
381 - $alloptions = array();
382 - }
383 - if ( is_array( $alloptions_db ) ) {
384 - foreach ( (array) $alloptions_db as $o ) {
385 - $alloptions[ $o->option_name ] = $o->option_value;
386 - unset( $options[ array_search( $o->option_name, $options ) ] );
387 - }
388 - if ( ! is_array( $notoptions ) ) {
389 - $notoptions = array();
390 - }
391 - foreach ( $options as $option ) {
392 - $notoptions[ $option ] = true;
393 - }
394 - if ( ! defined( 'WP_INSTALLING' ) || ! is_multisite() ) {
395 - wp_cache_set( 'alloptions', $alloptions, 'options' );
396 - wp_cache_set( 'notoptions', $notoptions, 'options' );
397 - }
398 - }
399 - }
501 + /**
502 + * MainWP disabled menu items array.
503 + *
504 + * @global object $_mainwp_disable_menus_items
505 + */
506 + global $_mainwp_disable_menus_items;
400 507
401 - return $alloptions;
402 - }
508 + $_mainwp_disable_menus_items = apply_filters( 'mainwp_disablemenuitems', $_mainwp_disable_menus_items );
403 509
404 - /**
405 - * Method localization()
406 - *
407 - * Loads plugin language files.
408 - */
409 - public function localization() {
410 - $load = apply_filters( 'mainwp_load_text_domain', true );
411 - if ( $load ) {
412 - load_plugin_textdomain( 'mainwp', false, dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' );
413 - }
414 - }
510 + /**
511 + * Filter: mainwp_main_menu_disable_menu_items
512 + *
513 + * Filters disabled MainWP navigation items.
514 + *
515 + * @since Unknown
516 + */
517 + $_mainwp_disable_menus_items = apply_filters( 'mainwp_main_menu_disable_menu_items', $_mainwp_disable_menus_items );
415 518
416 - /**
417 - * Method wp_mail_failed()
418 - *
419 - * Check if there has been a wp mail failer.
420 - *
421 - * @param string $error Array of error messages.
422 - *
423 - * @uses \MainWP\Dashboard\MainWP_Logger::debug()
424 - * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
425 - */
426 - public function wp_mail_failed( $error ) {
427 - $mail_failed = get_option( 'mainwp_notice_wp_mail_failed' );
428 - if ( is_object( $error ) && empty( $mail_failed ) ) {
429 - MainWP_Utility::update_option( 'mainwp_notice_wp_mail_failed', 'yes' );
430 - $er = $error->get_error_message();
431 - if ( ! empty( $er ) ) {
432 - MainWP_Logger::instance()->debug( 'Error :: wp_mail :: [error=' . $er . ']' );
433 - }
434 - }
435 - }
519 + if ( ! function_exists( 'MainWP\Dashboard\mainwp_current_user_have_right' ) ) {
436 520
437 - /**
438 - * Method get_version()
439 - *
440 - * Get current plugin version.
441 - *
442 - * @return string Current plugin version.
443 - */
444 - public function get_version() {
445 - return $this->current_version;
446 - }
521 + /**
522 + * Method mainwp_current_user_have_right()
523 + *
524 + * Check permission level by hook mainwp_currentusercan of Team Control extension.
525 + *
526 + * @param string $cap_type group or type of capabilities.
527 + * @param string $cap capabilities for current user.
528 + *
529 + * @return bool true|false
530 + *
531 + * @uses \MainWP\Dashboard\MainWP_System_Handler::handle_settings_post()
532 + */
533 + function mainwp_current_user_have_right( $cap_type = '', $cap = '' ) {
447 534
448 - /**
449 - * Method mainwp_cronpingchilds_action()
450 - *
451 - * Run cron ping child's action.
452 - *
453 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_ping_childs()
454 - */
455 - public function mainwp_cronpingchilds_action() {
456 - MainWP_System_Cron_Jobs::instance()->cron_ping_childs();
457 - }
535 + /**
536 + * Current user global.
537 + *
538 + * @global string
539 + */
540 + global $current_user;
458 541
459 - /**
460 - * Method mainwp_cronbackups_continue_action()
461 - *
462 - * Run cron backups continue action.
463 - *
464 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_backups_continue()
465 - */
466 - public function mainwp_cronbackups_continue_action() {
467 - MainWP_System_Cron_Jobs::instance()->cron_backups_continue();
468 - }
542 + if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
543 + return true;
544 + }
469 545
470 - /**
471 - * Method mainwp_cronbackups_action()
472 - *
473 - * Run cron backups action.
474 - *
475 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_backups()
476 - */
477 - public function mainwp_cronbackups_action() {
478 - MainWP_System_Cron_Jobs::instance()->cron_backups();
479 - }
546 + if ( defined( 'WP_CLI' ) && WP_CLI ) {
547 + return true;
548 + }
480 549
481 - /**
482 - * Method mainwp_cronreconnect_action()
483 - *
484 - * Run cron stats action.
485 - *
486 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_reconnect()
487 - */
488 - public function mainwp_cronreconnect_action() {
489 - MainWP_System_Cron_Jobs::instance()->cron_reconnect();
490 - }
550 + if ( defined( 'MAINWP_REST_API' ) && MAINWP_REST_API ) {
551 + return true;
552 + }
491 553
492 - /**
493 - * Method mainwp_cronupdatescheck_action()
494 - *
495 - * Run cron updates check action.
496 - *
497 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_updates_check()
498 - */
499 - public function mainwp_cronupdatescheck_action() {
500 - MainWP_System_Cron_Jobs::instance()->cron_updates_check();
501 - }
554 + if ( empty( $current_user ) ) {
555 + if ( ! function_exists( 'wp_get_current_user' ) ) {
556 + require_once ABSPATH . WPINC . '/pluggable.php';
557 + }
558 + }
502 559
503 - /**
504 - * Method mainwp_crondeactivatedlicensesalert_action()
505 - *
506 - * Run cron activated licenses alert action.
507 - */
508 - public function mainwp_crondeactivatedlicensesalert_action() {
509 - MainWP_System_Cron_Jobs::instance()->cron_deactivated_licenses_alert();
510 - }
560 + return apply_filters( 'mainwp_currentusercan', true, $cap_type, $cap );
561 + }
562 + }
511 563
512 - /**
513 - * Method mainwp_croncheckstatus_action()
514 - *
515 - * Run cron check sites status action.
516 - *
517 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_check_websites_status()
518 - */
519 - public function mainwp_croncheckstatus_action() {
520 - MainWP_System_Cron_Jobs::instance()->cron_check_websites_status();
521 - }
564 + MainWP_System_Handler::instance()->handle_settings_post();
565 + }
522 566
523 - /**
524 - * Method mainwp_cronchecksitehealth_action()
525 - *
526 - * Run cron check sites health action.
527 - *
528 - * @uses \MainWP\Dashboard\MainWP_System_Cron_Jobs::cron_check_websites_health()
529 - */
530 - public function mainwp_cronchecksitehealth_action() {
531 - MainWP_System_Cron_Jobs::instance()->cron_check_websites_health();
532 - }
567 + /**
568 + * Method parse_init()
569 + *
570 + * Initiate plugin installation & then run the Quick Setup Wizard.
571 + *
572 + * @uses \MainWP\Dashboard\MainWP_System_Handler::upload_file()
573 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_mainwp_dir()
574 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_wp_file_system()
575 + * @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
576 + * @uses \MainWP\Dashboard\MainWP_Setup_Wizard()
577 + */
578 + public function parse_init() {
579 + if ( isset( $_GET['mwpdl'] ) && isset( $_GET['sig'] ) ) {
580 + $mwpDir = MainWP_System_Utility::get_mainwp_dir();
581 + $mwpDir = $mwpDir[0];
582 + $mwpdl = isset( $_REQUEST['mwpdl'] ) ? wp_unslash( $_REQUEST['mwpdl'] ) : '';
583 + $file = trailingslashit( $mwpDir ) . rawurldecode( $mwpdl );
533 584
534 - /**
535 - * Method is_mainwp_pages()
536 - *
537 - * Get the current page and check it for "mainwp_".
538 - *
539 - * @return boolean ture|false.
540 - */
541 - public static function is_mainwp_pages() {
542 - $screen = get_current_screen();
543 - if ( $screen && strpos( $screen->base, 'mainwp_' ) !== false && strpos( $screen->base, 'mainwp_child_tab' ) === false ) {
544 - return true;
545 - }
585 + if ( stristr( rawurldecode( $mwpdl ), '..' ) ) {
586 + return;
587 + }
546 588
547 - return false;
548 - }
589 + $hasWPFileSystem = MainWP_System_Utility::get_wp_file_system();
549 590
550 - /**
551 - * Method is_mainwp_site_page()
552 - *
553 - * Checks if the current page is under the site mode.
554 - *
555 - * @return boolean ture|false.
556 - */
557 - public static function is_mainwp_site_page() {
558 - //phpcs:disable WordPress.Security.NonceVerification.Recommended
559 - if ( isset( $_GET['page'] ) && 'CostTrackerAdd' !== $_GET['page'] && ( ( ( isset( $_GET['id'] ) && ! empty( $_GET['id'] ) ) || ( isset( $_GET['dashboard'] ) && ! empty( $_GET['dashboard'] ) ) || ( isset( $_GET['updateid'] ) && ! empty( $_GET['updateid'] ) ) || ( isset( $_GET['emailsettingsid'] ) && ! empty( $_GET['emailsettingsid'] ) ) || ( isset( $_GET['scanid'] ) && ! empty( $_GET['scanid'] ) ) ) || ( 'ServerInformation' === $_GET['page'] || 'ServerInformationCron' === $_GET['page'] || 'ErrorLog' === $_GET['page'] || 'ActionLogs' === $_GET['page'] || 'PluginPrivacy' === $_GET['page'] || 'Settings' === $_GET['page'] || 'SettingsAdvanced' === $_GET['page'] || 'SettingsEmail' === $_GET['page'] || 'MainWPTools' === $_GET['page'] || 'SettingsInsights' === $_GET['page'] || 'SettingsApiBackups' === $_GET['page'] ) ) ) {
560 - return true;
561 - }
562 - //phpcs:enable
563 - return false;
564 - }
591 + /**
592 + * WordPress files system object.
593 + *
594 + * @global object
595 + */
596 + global $wp_filesystem;
565 597
566 - /**
567 - * Method init()
568 - *
569 - * Instantiate Plugin.
570 - */
571 - public function init() { //phpcs:ignore -- NOSONAR - complex.
598 + if ( $hasWPFileSystem && $wp_filesystem->exists( $file ) && md5( filesize( $file ) ) == $_GET['sig'] ) {
599 + MainWP_System_Handler::instance()->upload_file( $file );
600 + exit();
601 + }
602 + } elseif ( isset( $_GET['page'] ) ) {
603 + if ( MainWP_System_Utility::is_admin() ) {
604 + switch ( $_GET['page'] ) {
605 + case 'mainwp-setup':
606 + new MainWP_Setup_Wizard();
607 + break;
608 + }
609 + }
610 + }
611 + }
572 612
573 - /**
574 - * MainWP disabled menu items array.
575 - *
576 - * @global object $_mainwp_disable_menus_items
577 - */
578 - global $_mainwp_disable_menus_items;
613 + /**
614 + * Method login_form_redirect()
615 + *
616 + * Login redirect.
617 + */
618 + public function login_form_redirect() {
579 619
580 - $_mainwp_disable_menus_items = apply_filters( 'mainwp_disablemenuitems', $_mainwp_disable_menus_items );
620 + /**
621 + * Redirect to global.
622 + *
623 + * @global string $redirect_to
624 + */
625 + global $redirect_to;
626 + if ( ! isset( $_GET['redirect_to'] ) ) {
627 + $redirect_to = get_admin_url() . 'index.php';
628 + }
629 + }
581 630
582 - /**
583 - * Filter: mainwp_main_menu_disable_menu_items
584 - *
585 - * Filters disabled MainWP navigation items.
586 - *
587 - * @since Unknown
588 - */
589 - $_mainwp_disable_menus_items = apply_filters( 'mainwp_main_menu_disable_menu_items', $_mainwp_disable_menus_items );
631 + /**
632 + * Method after_setup_theme()
633 + *
634 + * After setup theme hook, to support post thumbnails.
635 + */
636 + public function after_setup_theme() {
637 + add_theme_support( 'post-thumbnails' );
638 + }
590 639
591 - if ( ! function_exists( 'MainWP\Dashboard\mainwp_current_user_have_right' ) ) {
640 + /**
641 + * Method admin_init()
642 + *
643 + * Do nothing if current user is not an Admin else display the page.
644 + *
645 + * @uses \MainWP\Dashboard\MainWP_Post_Backup_Handler::init()
646 + * @uses \MainWP\Dashboard\MainWP_Post_Extension_Handler::init()
647 + * @uses \MainWP\Dashboard\MainWP_Post_Handler::init()
648 + * @uses \MainWP\Dashboard\MainWP_Post_Plugin_Theme_Handler::init()
649 + * @uses \MainWP\Dashboard\MainWP_Post_Site_Handler::init()
650 + * @uses \MainWP\Dashboard\MainWP_System_Handler::activate_extension()
651 + * @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
652 + * @uses \MainWP\Dashboard\MainWP_System_View::get_class_name()
653 + * @uses \MainWP\Dashboard\MainWP_System_View::get_mainwp_translations()
654 + * @uses \MainWP\Dashboard\MainWP_Twitter::enabled_twitter_messages()
655 + */
656 + public function admin_init() {
657 + if ( ! MainWP_System_Utility::is_admin() ) {
658 + return;
659 + }
592 660
593 - /**
594 - * Method mainwp_current_user_have_right()
595 - *
596 - * Check permission level by hook mainwp_currentusercan of Team Control extension.
597 - *
598 - * @param string $cap_type group or type of capabilities.
599 - * @param string $cap capabilities for current user.
600 - *
601 - * @return bool true|false
602 - *
603 - * @uses \MainWP\Dashboard\MainWP_System_Handler::handle_settings_post()
604 - */
605 - function mainwp_current_user_have_right( $cap_type = '', $cap = '' ) {
661 + add_action( 'mainwp_activate_extention', array( MainWP_System_Handler::instance(), 'activate_extension' ), 10, 2 ); // @deprecated Use 'mainwp_activate_extension' instead.
662 + add_action( 'mainwp_deactivate_extention', array( MainWP_System_Handler::instance(), 'deactivate_extension' ), 10, 1 ); // @deprecated Use 'mainwp_deactivate_extension' instead.
606 663
607 - /**
608 - * Current user global.
609 - *
610 - * @global string
611 - */
612 - global $current_user;
664 + add_action( 'mainwp_activate_extension', array( MainWP_System_Handler::instance(), 'activate_extension' ), 10, 2 );
665 + add_action( 'mainwp_deactivate_extension', array( MainWP_System_Handler::instance(), 'deactivate_extension' ), 10, 1 );
613 666
614 - if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
615 - return true;
616 - }
667 + /**
668 + * MainWP use external primary backup method.
669 + *
670 + * @global string
671 + */
672 + global $mainwpUseExternalPrimaryBackupsMethod;
617 673
618 - if ( defined( 'WP_CLI' ) && WP_CLI ) {
619 - return true;
620 - }
674 + if ( null === $mainwpUseExternalPrimaryBackupsMethod ) {
675 + $return = '';
621 676
622 - if ( defined( 'MAINWP_REST_API_DOING' ) && MAINWP_REST_API_DOING ) {
623 - return true;
624 - }
677 + /*
678 + * @deprecated Use 'mainwp_getprimarybackup_activated' instead.
679 + *
680 + */
681 + $return = apply_filters_deprecated( 'mainwp-getprimarybackup-activated', array( $return ), '4.0.7.2', 'mainwp_getprimarybackup_activated' );
682 + $mainwpUseExternalPrimaryBackupsMethod = apply_filters( 'mainwp_getprimarybackup_activated', $return );
683 + }
625 684
626 - if ( empty( $current_user ) && ! function_exists( 'wp_get_current_user' ) ) {
627 - require_once ABSPATH . WPINC . '/pluggable.php'; // NOSONAR - WP compatible.
628 - }
685 + add_action( 'mainwp_before_header', array( MainWP_System_View::get_class_name(), 'mainwp_warning_notice' ) );
629 686
630 - return apply_filters( 'mainwp_currentusercan', true, $cap_type, $cap );
631 - }
632 - }
687 + MainWP_Post_Handler::instance()->init();
688 + MainWP_Post_Site_Handler::instance()->init();
689 + MainWP_Post_Plugin_Theme_Handler::instance()->init();
690 + MainWP_Post_Extension_Handler::instance()->init();
691 + MainWP_Post_Backup_Handler::instance()->init();
633 692
634 - MainWP_System_Handler::instance()->handle_settings_post();
635 - }
693 + /**
694 + * Initiate MainWP Cache Control Class.
695 + *
696 + * @since 4.2
697 + */
698 + MainWP_Auto_Cache_Purge_View::instance()->init();
636 699
637 - /**
638 - * Method parse_init()
639 - *
640 - * Initiate plugin installation & then run the Quick Setup Wizard.
641 - *
642 - * @uses \MainWP\Dashboard\MainWP_System_Handler::upload_file()
643 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_mainwp_dir()
644 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_wp_file_system()
645 - * @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
646 - * @uses \MainWP\Dashboard\MainWP_Setup_Wizard()
647 - */
648 - public function parse_init() {
649 - // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
650 - if ( isset( $_GET['mwpdl'] ) && isset( $_GET['sig'] ) ) {
651 - $mwpDir = MainWP_System_Utility::get_mainwp_dir();
652 - $mwpDir = $mwpDir[0];
653 - $mwpdl = isset( $_REQUEST['mwpdl'] ) ? wp_unslash( $_REQUEST['mwpdl'] ) : '';
654 - $file = trailingslashit( $mwpDir ) . rawurldecode( $mwpdl );
700 + /**
701 + * Filter: mainwp_ui_use_wp_calendar
702 + *
703 + * Filters whether default jQuery datepicker should be used to avoid potential problems with Senatic UI Calendar library.
704 + *
705 + * @since 4.0.5
706 + */
707 + $use_wp_datepicker = apply_filters( 'mainwp_ui_use_wp_calendar', false );
708 + if ( $use_wp_datepicker ) {
709 + wp_enqueue_script( 'jquery-ui-datepicker' );
710 + }
711 + wp_enqueue_script( 'jquery-ui-dialog' );
712 + $en_params = array( 'jquery-ui-dialog' );
713 + if ( $use_wp_datepicker ) {
714 + $en_params[] = 'jquery-ui-datepicker';
715 + }
716 + wp_enqueue_script( 'mainwp', MAINWP_PLUGIN_URL . 'assets/js/mainwp.js', $en_params, $this->current_version, true );
655 717
656 - if ( stristr( rawurldecode( $mwpdl ), '..' ) ) {
657 - return;
658 - }
718 + $enableLegacyBackupFeature = get_option( 'mainwp_enableLegacyBackupFeature' );
719 + $primaryBackup = get_option( 'mainwp_primaryBackup' );
720 + $disable_backup_checking = true; // removed option.
659 721
660 - $hasWPFileSystem = MainWP_System_Utility::get_wp_file_system();
722 + $mainwpParams = array(
723 + 'image_url' => MAINWP_PLUGIN_URL . 'assets/images/',
724 + 'backup_before_upgrade' => ( get_option( 'mainwp_backup_before_upgrade' ) == 1 ),
725 + 'disable_checkBackupBeforeUpgrade' => $disable_backup_checking,
726 + 'admin_url' => admin_url(),
727 + 'use_wp_datepicker' => $use_wp_datepicker ? 1 : 0,
728 + 'date_format' => get_option( 'date_format' ),
729 + 'time_format' => get_option( 'time_format' ),
730 + 'enabledTwit' => MainWP_Twitter::enabled_twitter_messages(),
731 + 'maxSecondsTwit' => MAINWP_TWITTER_MAX_SECONDS,
732 + 'installedBulkSettingsManager' => is_plugin_active( 'mainwp-bulk-settings-manager/mainwp-bulk-settings-manager.php' ) ? 1 : 0,
733 + 'maximumSyncRequests' => ( get_option( 'mainwp_maximumSyncRequests' ) === false ) ? 8 : get_option( 'mainwp_maximumSyncRequests' ),
734 + 'maximumInstallUpdateRequests' => ( get_option( 'mainwp_maximumInstallUpdateRequests' ) === false ) ? 3 : get_option( 'mainwp_maximumInstallUpdateRequests' ),
735 + );
736 + wp_localize_script( 'mainwp', 'mainwpParams', $mainwpParams );
661 737
662 - /**
663 - * WordPress files system object.
664 - *
665 - * @global object
666 - */
667 - global $wp_filesystem;
668 - $sig_value = wp_unslash( $_GET['sig'] );
669 - $valid_sig = MainWP_System_Utility::valid_download_sig( $file, $sig_value );
738 + $mainwpTranslations = MainWP_System_View::get_mainwp_translations();
670 739
671 - if ( ! $valid_sig ) {
672 - MainWP_Logger::instance()->debug( ' :: download :: invalid sig :: ' . base64_decode( $sig_value ) ); // phpcs:ignore -- for debug logging.
673 - }
740 + wp_localize_script( 'mainwp', 'mainwpTranslations', $mainwpTranslations );
674 741
675 - if ( $hasWPFileSystem && $wp_filesystem->exists( $file ) && $valid_sig ) {
676 - MainWP_System_Handler::instance()->upload_file( $file );
677 - exit();
678 - }
679 - } elseif ( isset( $_GET['page'] ) ) {
680 - if ( MainWP_System_Utility::is_admin() && 'mainwp-setup' === $_GET['page'] ) {
681 - MainWP_Setup_Wizard::get_instance();
682 - }
683 - }
684 - // phpcs:enable
685 - }
742 + $security_nonces = MainWP_Post_Handler::instance()->create_security_nonces(); // to fix conflict with Post S M T P plugin.
743 + $nonces_filter = apply_filters( 'mainwp_security_nonces', array() );
744 + if ( is_array( $nonces_filter ) && ! empty( $nonces_filter ) ) {
745 + $security_nonces = array_merge( $security_nonces, $nonces_filter );
746 + }
747 + wp_localize_script( 'mainwp', 'security_nonces', $security_nonces );
686 748
687 - /**
688 - * Method after_setup_theme()
689 - *
690 - * After setup theme hook, to support post thumbnails.
691 - */
692 - public function after_setup_theme() {
693 - add_theme_support( 'post-thumbnails' );
694 - }
749 + wp_enqueue_script( 'thickbox' );
750 + wp_enqueue_script( 'user-profile' );
751 + wp_enqueue_style( 'thickbox' );
695 752
753 + if ( isset( $_GET['page'] ) && ( 'mainwp_tab' === $_GET['page'] || ( 'managesites' === $_GET['page'] ) && isset( $_GET['dashboard'] ) ) ) {
754 + wp_enqueue_script( 'dragula', MAINWP_PLUGIN_URL . 'assets/js/dragula/dragula.min.js', array(), $this->current_version, true );
755 + wp_enqueue_style( 'dragula', MAINWP_PLUGIN_URL . 'assets/js/dragula/dragula.min.css', array(), $this->current_version );
756 + }
696 757
697 - /**
698 - * Method hook_admin_update_check()
699 - */
700 - public function hook_admin_update_check() {
701 - $current_ver = $this->check_ver_update;
702 - $saved_ver = get_option( 'mainwp_update_check_version', false );
758 + if ( isset( $_GET['page'] ) && ( 'managesites' === $_GET['page'] || 'MonitoringSites' === $_GET['page'] || 'ManageGroups' === $_GET['page'] ) ) {
759 + wp_enqueue_script( 'preview', MAINWP_PLUGIN_URL . 'assets/js/preview.js', array(), $this->current_version, true );
760 + wp_enqueue_style( 'preview', MAINWP_PLUGIN_URL . 'assets/css/preview.css', array(), $this->current_version );
761 + }
703 762
704 - if ( false === $saved_ver ) {
705 - return;
706 - }
763 + $this->init_session();
707 764
708 - if ( version_compare( $saved_ver, $current_ver, '=' ) ) {
709 - return;
710 - }
765 + if ( ! current_user_can( 'update_core' ) ) {
766 + remove_action( 'admin_notices', 'update_nag', 3 );
767 + }
768 + }
711 769
712 - if ( version_compare( $saved_ver, '0.0.4', '<' ) ) {
713 - $sched = wp_next_scheduled( 'mainwp_cronstats_action' );
714 - if ( ! empty( $sched ) ) {
715 - wp_unschedule_event( $sched, 'mainwp_cronstats_action' );
716 - }
717 - global $wpdb;
718 - $wpdb->query( 'DELETE FROM ' . $wpdb->usermeta . ' WHERE meta_key = "mainwp_widgets_sorted_toplevel_page_mainwp_tab" OR meta_key="mainwp_settings_show_widgets"' );//phpcs:ignore -- safe.
719 - }
770 + /**
771 + * Method admin_redirects()
772 + *
773 + * MainWP admin redirects.
774 + */
775 + public function admin_redirects() {
776 + if ( ( defined( 'DOING_CRON' ) && DOING_CRON ) || defined( 'DOING_AJAX' ) ) {
777 + return;
778 + }
720 779
721 - if ( version_compare( $saved_ver, '0.0.5', '<' ) ) {
722 - $all_ext = MainWP_Extensions_View::get_available_extensions();
723 - foreach ( $all_ext as $slug => $info ) {
724 - $data = MainWP_Api_Manager::instance()->get_activation_info( $slug );
725 - if ( is_array( $data ) && isset( $data['api_key'] ) ) {
726 - $data['api_key'] = '';
727 - $data['activated_key'] = 'Deactivated';
728 - MainWP_Api_Manager::instance()->set_activation_info( $slug, $data );
729 - }
730 - }
731 - update_option( 'mainwp_extensions_all_activation_cached', '' );
732 - }
780 + if ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], array( 'mainwp-setup' ) ) ) {
781 + return;
782 + }
733 783
734 - MainWP_Utility::update_option( 'mainwp_update_check_version', $current_ver );
735 - }
784 + $quick_setup = get_option( 'mainwp_run_quick_setup', false );
785 + if ( 'yes' === $quick_setup ) {
786 + wp_safe_redirect( admin_url( 'admin.php?page=mainwp-setup' ) );
787 + exit;
788 + }
736 789
737 - /**
738 - * Method admin_init()
739 - *
740 - * Do nothing if current user is not an Admin else display the page.
741 - *
742 - * @uses \MainWP\Dashboard\MainWP_Post_Backup_Handler::init()
743 - * @uses \MainWP\Dashboard\MainWP_Post_Extension_Handler::init()
744 - * @uses \MainWP\Dashboard\MainWP_Post_Handler::init()
745 - * @uses \MainWP\Dashboard\MainWP_Post_Plugin_Theme_Handler::init()
746 - * @uses \MainWP\Dashboard\MainWP_Post_Site_Handler::init()
747 - * @uses \MainWP\Dashboard\MainWP_System_Handler::activate_extension()
748 - * @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
749 - * @uses \MainWP\Dashboard\MainWP_System_View::get_class_name()
750 - * @uses \MainWP\Dashboard\MainWP_System_View::get_mainwp_translations()
751 - */
752 - public function admin_init() { // phpcs:ignore -- NOSONAR - complex function.
790 + if ( 'yes' === get_option( 'mainwp_activated' ) ) {
791 + delete_option( 'mainwp_activated' );
792 + wp_cache_delete( 'mainwp_activated', 'options' );
793 + wp_cache_delete( 'alloptions', 'options' );
794 + wp_safe_redirect( admin_url( 'admin.php?page=mainwp_tab' ) );
753 795
754 - if ( ! MainWP_System_Utility::is_admin() ) {
755 - return;
756 - }
796 + return;
797 + }
757 798
758 - add_action( 'mainwp_activate_extention', array( MainWP_System_Handler::instance(), 'activate_extension' ), 10, 2 ); // @deprecated Use 'mainwp_activate_extension' instead.
759 - add_action( 'mainwp_deactivate_extention', array( MainWP_System_Handler::instance(), 'deactivate_extension' ), 10, 3 ); // @deprecated Use 'mainwp_deactivate_extension' instead.
799 + $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : '';
800 + $_pos = strlen( $request_uri ) - strlen( '/wp-admin/' );
801 + if ( ! empty( $request_uri ) && strpos( $request_uri, '/wp-admin/' ) !== false && strpos( $request_uri, '/wp-admin/' ) == $_pos ) {
802 + $referer = wp_get_referer();
803 + if ( ! empty( $referer ) && strpos( $referer, 'wp-login.php?redirect_to' ) !== false && strpos( $referer, '&reauth=1' ) !== false ) {
804 + if ( mainwp_current_user_have_right( 'dashboard', 'access_global_dashboard' ) ) {
805 + wp_safe_redirect( admin_url( 'admin.php?page=mainwp_tab' ) );
806 + die();
807 + }
808 + }
809 + }
760 810
761 - add_action( 'mainwp_activate_extension', array( MainWP_System_Handler::instance(), 'activate_extension' ), 10, 2 );
762 - add_action( 'mainwp_deactivate_extension', array( MainWP_System_Handler::instance(), 'deactivate_extension' ), 10, 3 );
811 + MainWP_Logger::instance()->check_log_daily();
812 + }
763 813
764 - /**
765 - * MainWP use external primary backup method.
766 - *
767 - * @global string
768 - */
769 - global $mainwpUseExternalPrimaryBackupsMethod;
814 + /**
815 + * Method init_session()
816 + *
817 + * Check current page & initiate a session.
818 + *
819 + * @uses \MainWP\Dashboard\MainWP_Cache::init_session()
820 + */
821 + public function init_session() {
822 + if ( isset( $_GET['page'] ) && in_array(
823 + $_GET['page'],
824 + array(
825 + 'PostBulkManage',
826 + 'PageBulkManage',
827 + 'PluginsManage',
828 + 'PluginsAutoUpdate',
829 + 'ThemesManage',
830 + 'ThemesAutoUpdate',
831 + 'UserBulkManage',
832 + )
833 + )
834 + ) {
835 + MainWP_Cache::init_session();
836 + }
837 + }
770 838
771 - if ( null === $mainwpUseExternalPrimaryBackupsMethod ) {
772 - $return = '';
839 + /**
840 + * Method admin_enqueue_scripts()
841 + *
842 + * Enqueue all Mainwp Admin Scripts.
843 + *
844 + * @param mixed $hook Enqueue hook.
845 + */
846 + public function admin_enqueue_scripts( $hook ) {
773 847
774 - /*
775 - * @deprecated Use 'mainwp_getprimarybackup_activated' instead.
776 - *
777 - */
778 - $return = apply_filters_deprecated( 'mainwp-getprimarybackup-activated', array( $return ), '4.0.7.2', 'mainwp_getprimarybackup_activated' ); // NOSONAR - not IP.
779 - $mainwpUseExternalPrimaryBackupsMethod = apply_filters( 'mainwp_getprimarybackup_activated', $return );
780 - }
848 + $load_cust_scripts = false;
781 849
782 - add_action( 'mainwp_after_header', array( MainWP_System_View::get_class_name(), 'mainwp_warning_notice' ) );
850 + /**
851 + * Current pagenow.
852 + *
853 + * @global string
854 + */
855 + global $pagenow;
783 856
784 - MainWP_Post_Handler::instance()->init();
785 - MainWP_Post_Site_Handler::instance()->init();
786 - MainWP_Post_Plugin_Theme_Handler::instance()->init();
787 - MainWP_Post_Extension_Handler::instance()->init();
788 - MainWP_Post_Backup_Handler::instance()->init();
789 - MainWP_Manage_Sites_Filter_Segment::get_instance()->admin_init();
857 + if ( is_plugin_active( 'mainwp-custom-post-types/mainwp-custom-post-types.php' ) && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) ) {
858 + $load_cust_scripts = true;
859 + }
790 860
791 - /**
792 - * Filter: mainwp_ui_use_wp_calendar
793 - *
794 - * Filters whether default jQuery datepicker should be used to avoid potential problems with Senatic UI Calendar library.
795 - *
796 - * @since 4.0.5
797 - */
798 - $use_wp_datepicker = apply_filters( 'mainwp_ui_use_wp_calendar', false );
799 - if ( $use_wp_datepicker ) {
800 - wp_enqueue_script( 'jquery-ui-datepicker' );
801 - }
802 - wp_enqueue_script( 'jquery-ui-dialog' );
803 - $en_params = array( 'jquery-ui-dialog' );
804 - if ( $use_wp_datepicker ) {
805 - $en_params[] = 'jquery-ui-datepicker';
806 - }
807 - wp_enqueue_script( 'mainwp', MAINWP_PLUGIN_URL . 'assets/js/mainwp.js', $en_params, $this->current_version, true );
808 - $disable_backup_checking = true; // removed option.
809 - $mainwpParams = array(
810 - 'image_url' => MAINWP_PLUGIN_URL . 'assets/images/',
811 - 'backup_before_upgrade' => 1 === (int) get_option( 'mainwp_backup_before_upgrade' ),
812 - 'disable_checkBackupBeforeUpgrade' => $disable_backup_checking,
813 - 'admin_url' => admin_url(),
814 - 'use_wp_datepicker' => $use_wp_datepicker ? 1 : 0,
815 - 'date_format' => get_option( 'date_format' ),
816 - 'time_format' => get_option( 'time_format' ),
817 - 'installedBulkSettingsManager' => is_plugin_active( 'mainwp-bulk-settings-manager/mainwp-bulk-settings-manager.php' ) ? 1 : 0,
818 - 'maximumSyncRequests' => ( get_option( 'mainwp_maximumSyncRequests' ) === false ) ? 8 : get_option( 'mainwp_maximumSyncRequests' ),
819 - 'maximumInstallUpdateRequests' => ( get_option( 'mainwp_maximumInstallUpdateRequests' ) === false ) ? 3 : get_option( 'mainwp_maximumInstallUpdateRequests' ),
820 - '_wpnonce' => wp_create_nonce( 'mainwp-admin-nonce' ),
821 - 'demoMode' => MainWP_Demo_Handle::is_demo_mode() ? 1 : 0,
822 - 'roll_ui_icon' => MainWP_Updates_Helper::get_roll_icon( '', true ),
823 - );
824 - wp_localize_script( 'mainwp', 'mainwpParams', $mainwpParams );
861 + if ( self::is_mainwp_pages() ) {
862 + wp_enqueue_script( 'jquery-migrate' ); // to compatible.
863 + wp_enqueue_script( 'mainwp-updates', MAINWP_PLUGIN_URL . 'assets/js/mainwp-updates.js', array(), $this->current_version, true );
864 + wp_enqueue_script( 'mainwp-managesites-action', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-action.js', array(), $this->current_version, true );
865 + wp_enqueue_script( 'mainwp-managesites-update', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-update.js', array(), $this->current_version, true );
866 + wp_enqueue_script( 'mainwp-managesites-import', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-import.js', array(), $this->current_version, true );
867 + wp_enqueue_script( 'mainwp-plugins-themes', MAINWP_PLUGIN_URL . 'assets/js/mainwp-plugins-themes.js', array(), $this->current_version, true );
868 + wp_enqueue_script( 'mainwp-backups', MAINWP_PLUGIN_URL . 'assets/js/mainwp-backups.js', array(), $this->current_version, true );
869 + wp_enqueue_script( 'mainwp-posts', MAINWP_PLUGIN_URL . 'assets/js/mainwp-posts.js', array(), $this->current_version, true );
870 + wp_enqueue_script( 'mainwp-users', MAINWP_PLUGIN_URL . 'assets/js/mainwp-users.js', array(), $this->current_version, true );
871 + wp_enqueue_script( 'mainwp-extensions', MAINWP_PLUGIN_URL . 'assets/js/mainwp-extensions.js', array(), $this->current_version, true );
872 + wp_enqueue_script( 'mainwp-moment', MAINWP_PLUGIN_URL . 'assets/js/moment/moment.min.js', array(), $this->current_version, true );
873 + wp_enqueue_script( 'semantic', MAINWP_PLUGIN_URL . 'assets/js/semantic-ui/semantic.min.js', array( 'jquery' ), $this->current_version, false );
874 + wp_enqueue_script( 'semantic-ui-datatables', MAINWP_PLUGIN_URL . 'assets/js/datatables/datatables.min.js', array( 'jquery' ), $this->current_version, false );
875 + wp_enqueue_script( 'semantic-ui-datatables-colreorder', MAINWP_PLUGIN_URL . 'assets/js/colreorder/dataTables.colReorder.js', array( 'jquery' ), $this->current_version, false );
876 + wp_enqueue_script( 'semantic-ui-datatables-scroller', MAINWP_PLUGIN_URL . 'assets/js/scroller/scroller.dataTables.js', array( 'jquery' ), $this->current_version, false );
877 + wp_enqueue_script( 'semantic-ui-datatables-fixedcolumns', MAINWP_PLUGIN_URL . 'assets/js/fixedcolumns/dataTables.fixedColumns.js', array( 'jquery' ), $this->current_version, false );
878 + wp_enqueue_script( 'semantic-ui-calendar', MAINWP_PLUGIN_URL . 'assets/js/calendar/calendar.min.js', array( 'jquery' ), $this->current_version, true );
879 + wp_enqueue_script( 'semantic-ui-hamburger', MAINWP_PLUGIN_URL . 'assets/js/hamburger/hamburger.js', array( 'jquery' ), $this->current_version, true );
880 + wp_enqueue_script( 'mainwp-clipboard', MAINWP_PLUGIN_URL . 'assets/js/clipboard/clipboard.min.js', array( 'jquery' ), $this->current_version, true );
881 + wp_enqueue_script( 'mainwp-rest-api', MAINWP_PLUGIN_URL . 'assets/js/mainwp-rest-api.js', array(), $this->current_version, true );
825 882
826 - $mainwpTranslations = MainWP_System_View::get_mainwp_translations();
883 + if ( isset( $_GET['page'] ) && 'ManageGroups' === $_GET['page'] ) {
884 + wp_enqueue_script( 'mainwp-groups', MAINWP_PLUGIN_URL . 'assets/js/mainwp-groups.js', array(), $this->current_version, true );
885 + }
886 + }
827 887
828 - wp_localize_script( 'mainwp', 'mainwpTranslations', $mainwpTranslations );
888 + if ( $load_cust_scripts ) {
889 + wp_enqueue_script( 'semantic', MAINWP_PLUGIN_URL . 'assets/js/semantic-ui/semantic.min.js', array( 'jquery' ), $this->current_version, true );
890 + }
829 891
830 - $security_nonces = MainWP_Post_Handler::instance()->create_security_nonces(); // to fix conflict with Post S M T P plugin.
831 - $nonces_filter = apply_filters( 'mainwp_security_nonces', array() );
832 - if ( is_array( $nonces_filter ) && ! empty( $nonces_filter ) ) {
833 - $security_nonces = array_merge( $security_nonces, $nonces_filter );
834 - }
835 - wp_localize_script( 'mainwp', 'security_nonces', $security_nonces );
892 + wp_enqueue_script( 'mainwp-ui', MAINWP_PLUGIN_URL . 'assets/js/mainwp-ui.js', array(), $this->current_version, true );
893 + wp_enqueue_script( 'mainwp-js-popup', MAINWP_PLUGIN_URL . 'assets/js/mainwp-popup.js', array(), $this->current_version, true );
894 + wp_enqueue_script( 'mainwp-fileuploader', MAINWP_PLUGIN_URL . 'assets/js/fileuploader.js', array(), $this->current_version ); // phpcs:ignore -- fileuploader scripts need to load at header.
895 + wp_enqueue_script( 'mainwp-date', MAINWP_PLUGIN_URL . 'assets/js/date.js', array(), $this->current_version, true );
896 + wp_enqueue_script( 'mainwp-filesaver', MAINWP_PLUGIN_URL . 'assets/js/FileSaver.js', array(), $this->current_version, true );
897 + wp_enqueue_script( 'mainwp-jqueryfiletree', MAINWP_PLUGIN_URL . 'assets/js/jqueryFileTree.js', array(), $this->current_version, true );
898 + }
836 899
837 - wp_enqueue_script( 'thickbox' );
838 - wp_enqueue_script( 'user-profile' );
839 - wp_enqueue_style( 'thickbox' );
900 + /**
901 + * Method admin_enqueue_styles()
902 + *
903 + * Enqueue all Mainwp Admin Styles.
904 + *
905 + * @param mixed $hook Enqueue hook.
906 + */
907 + public function admin_enqueue_styles( $hook ) {
840 908
841 - $load_gridster = false;
909 + wp_enqueue_style( 'mainwp', MAINWP_PLUGIN_URL . 'assets/css/mainwp.css', array(), $this->current_version );
910 + wp_enqueue_style( 'mainwp-responsive-layouts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-responsive-layouts.css', array(), $this->current_version );
842 911
843 - // phpcs:disable WordPress.Security.NonceVerification
844 - if ( ( isset( $_GET['page'] ) && ( 'mainwp_tab' === $_GET['page'] || ( 'managesites' === $_GET['page'] && isset( $_GET['dashboard'] ) ) ) ) || ( isset( $_GET['page'] ) && 'ManageClients' === $_GET['page'] && isset( $_GET['client_id'] ) ) || ( isset( $_GET['page'] ) && 0 === strpos( wp_unslash( $_GET['page'] ), 'ManageSites' ) ) ) { //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- individual page.
845 - $load_gridster = true;
846 - }
912 + if ( isset( $_GET['hideall'] ) && 1 === $_GET['hideall'] ) {
913 + remove_action( 'admin_footer', 'wp_admin_bar_render', 1000 );
914 + }
847 915
848 - $load_gridster = apply_filters( 'mainwp_enqueue_script_gridster', $load_gridster );
916 + /**
917 + * Current pagenow.
918 + *
919 + * @global string
920 + */
921 + global $pagenow;
849 922
850 - if ( $load_gridster ) {
851 - wp_enqueue_script( 'gridster', MAINWP_PLUGIN_URL . 'assets/js/gridster/jquery.dsmorse-gridster.js', array(), $this->current_version, true );
852 - wp_enqueue_style( 'gridster', MAINWP_PLUGIN_URL . 'assets/js/gridster/jquery.gridster.min.css', array(), $this->current_version );
853 - }
923 + $load_cust_scripts = false;
924 + if ( is_plugin_active( 'mainwp-custom-post-types/mainwp-custom-post-types.php' ) && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) ) {
925 + $load_cust_scripts = true;
926 + }
854 927
855 - if ( isset( $_GET['page'] ) && ( 'managesites' === $_GET['page'] || 'MonitoringSites' === $_GET['page'] || 'ManageGroups' === $_GET['page'] ) ) { //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
856 - wp_enqueue_script( 'preview', MAINWP_PLUGIN_URL . 'assets/js/preview.js', array(), $this->current_version, true );
857 - wp_enqueue_style( 'preview', MAINWP_PLUGIN_URL . 'assets/css/preview.css', array(), $this->current_version );
858 - }
859 - // phpcs:enable
928 + if ( self::is_mainwp_pages() ) {
929 + wp_enqueue_style( 'mainwp-filetree', MAINWP_PLUGIN_URL . 'assets/css/jqueryFileTree.css', array(), $this->current_version );
930 + wp_enqueue_style( 'semantic', MAINWP_PLUGIN_URL . 'assets/js/semantic-ui/semantic.min.css', array(), $this->current_version );
931 + wp_enqueue_style( 'semantic-mainwp', MAINWP_PLUGIN_URL . 'assets/css/mainwp-semantic.css', array(), $this->current_version );
932 + wp_enqueue_style( 'semantic-ui-datatables', MAINWP_PLUGIN_URL . 'assets/js/datatables/datatables.min.css', array(), $this->current_version );
933 + wp_enqueue_style( 'semantic-ui-datatables-colreorder', MAINWP_PLUGIN_URL . 'assets/js/colreorder/colReorder.semanticui.css', array(), $this->current_version );
934 + wp_enqueue_style( 'semantic-ui-datatables-scroller', MAINWP_PLUGIN_URL . 'assets/js/scroller/scroller.dataTables.css', array(), $this->current_version );
935 + wp_enqueue_style( 'semantic-ui-calendar', MAINWP_PLUGIN_URL . 'assets/js/calendar/calendar.min.css', array(), $this->current_version );
936 + wp_enqueue_style( 'semantic-ui-hamburger', MAINWP_PLUGIN_URL . 'assets/js/hamburger/hamburger.css', array(), $this->current_version );
937 + // to fix conflict layout.
938 + wp_enqueue_style( 'jquery-ui-style', MAINWP_PLUGIN_URL . 'assets/css/1.11.1/jquery-ui.min.css', array(), '1.11.1' );
939 + }
860 940
861 - wp_enqueue_style( 'wp-color-picker' );
862 - wp_enqueue_script( 'wp-color-picker' );
941 + if ( $load_cust_scripts ) {
942 + wp_enqueue_style( 'semantic', MAINWP_PLUGIN_URL . 'assets/js/semantic-ui/semantic.min.css', array(), $this->current_version );
943 + }
944 + }
863 945
864 - $this->init_session();
946 + /**
947 + * Method admin_menu()
948 + *
949 + * Add Bulk Post/Pages menue.
950 + */
951 + public function admin_menu() {
865 952
866 - if ( ! current_user_can( 'update_core' ) ) {
867 - remove_action( 'admin_notices', 'update_nag', 3 );
868 - }
869 - }
953 + /**
954 + * Admin menu array.
955 + *
956 + * @global object
957 + */
958 + global $menu;
870 959
871 - /**
872 - * Method hook_plugin_action_links()
873 - *
874 - * @param string[] $actions An array of plugin action links. By default this can include
875 - * 'activate', 'deactivate', and 'delete'. With Multisite active
876 - * this can also include 'network_active' and 'network_only' items.
877 - * @param string $plugin_file Path to the plugin file relative to the plugins directory.
878 - * @param array $plugin_data An array of plugin data. See get_plugin_data()
879 - * and the {@see 'plugin_row_meta'} filter for the list
880 - * of possible values.
881 - */
882 - public function hook_plugin_action_links( $actions, $plugin_file, $plugin_data ) {
883 - unset( $plugin_file ); // not use, compatible.
884 - if ( is_array( $plugin_data ) && ! empty( $plugin_data['slug'] ) && ! empty( $plugin_data['plugin'] ) && 'mainwp' === $plugin_data['slug'] && 'mainwp/mainwp.php' === $plugin_data['plugin'] ) {
885 - $tmp = array(
886 - 'mainwp-setup' => '<a href="admin.php?page=mainwp-setup" id="mainwp-setup" aria-label="' . esc_html__( 'MainWP Dashboard Setup Wizard', 'mainwp' ) . '">' . esc_html__( 'Setup Wizard', 'mainwp' ) . '</a>',
887 - );
888 - if ( is_array( $actions ) ) {
889 - foreach ( $actions as $key => $val ) {
890 - $tmp[ $key ] = $val;
960 + foreach ( $menu as $k => $item ) {
961 + if ( 'edit.php?post_type=bulkpost' === $item[2] ) {
962 + unset( $menu[ $k ] );
963 + } elseif ( 'edit.php?post_type=bulkpage' === $item[2] ) {
964 + unset( $menu[ $k ] );
965 + }
966 + }
967 + }
891 968
892 - }
893 - }
894 - return $tmp;
895 - }
896 - return $actions;
897 - }
969 + /**
970 + * Method enqueue_postbox_scripts()
971 + *
972 + * Enqueue postbox scripts.
973 + */
974 + public static function enqueue_postbox_scripts() {
975 + wp_enqueue_script( 'common' );
976 + wp_enqueue_script( 'wp-lists' );
977 + wp_enqueue_script( 'postbox' );
978 + }
898 979
899 - /**
900 - * Method current_screen_redirects()
901 - *
902 - * MainWP current screen redirects.
903 - */
904 - public function current_screen_redirects() {
980 + /**
981 + * Method admin_footer()
982 + *
983 + * Create MainWP admin footer.
984 + *
985 + * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id()
986 + * @uses \MainWP\Dashboard\MainWP_DB::query()
987 + * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
988 + * @uses \MainWP\Dashboard\MainWP_DB::free_result()
989 + * @uses \MainWP\Dashboard\MainWP_Menu::init_subpages_menu()
990 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
991 + * @uses \MainWP\Dashboard\MainWP_System_View::render_footer_content()
992 + * @uses \MainWP\Dashboard\MainWP_System_View::admin_footer()
993 + */
994 + public function admin_footer() {
995 + if ( ! self::is_mainwp_pages() ) {
996 + return;
997 + }
905 998
906 - if ( ( defined( 'DOING_CRON' ) && DOING_CRON ) || defined( 'DOING_AJAX' ) ) {
907 - return;
908 - }
909 - if ( static::is_mainwp_pages() ) {
910 - $quick_setup = get_option( 'mainwp_run_quick_setup', false );
911 - if ( 'yes' === $quick_setup ) {
912 - delete_option( 'mainwp_run_quick_setup' );
913 - wp_safe_redirect( admin_url( 'admin.php?page=mainwp-setup' ) );
914 - exit;
915 - }
916 - }
999 + ?>
1000 + <div class="ui large modal" id="mainwp-response-data-modal">
1001 + <div class="header"><?php esc_html_e( 'Child Site Response', 'mainwp' ); ?></div>
1002 + <div class="content">
1003 + <div class="ui info message"><?php esc_html_e( 'To see the response in a more readable way, you can copy it and paste it into some HTML render tool, such as Codepen.io.', 'mainwp' ); ?>
1004 + </div>
1005 + </div>
1006 + <div class="scrolling content content-response"></div>
1007 + <div class="actions">
1008 + <button class="ui green button mainwp-response-copy-button"><?php esc_html_e( 'Copy Response', 'mainwp' ); ?></button>
1009 + <div class="ui cancel button"><?php esc_html_e( 'Close', 'mainwp' ); ?></div>
1010 + </div>
1011 + </div>
1012 + <div id="mainwp-response-data-container" resp-data=""></div>
1013 + <?php
917 1014
918 - if ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], array( 'mainwp-setup' ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
919 - return;
920 - }
1015 + if ( isset( $_GET['hideall'] ) && 1 === $_GET['hideall'] ) {
1016 + return;
1017 + }
1018 + $current_wpid = MainWP_System_Utility::get_current_wpid();
1019 + if ( $current_wpid ) {
1020 + $website = MainWP_DB::instance()->get_website_by_id( $current_wpid );
1021 + $websites = array( $website );
1022 + } else {
1023 + $is_staging = 'no';
1024 + if ( isset( $_GET['page'] ) ) {
1025 + if ( ( 'managesites' == $_GET['page'] ) && ! isset( $_GET['id'] ) && ! isset( $_GET['do'] ) && ! isset( $_GET['dashboard'] ) ) {
1026 + $group_ids = get_user_option( 'mainwp_managesites_filter_group' );
1027 + if ( ! empty( $group_ids ) ) {
1028 + $group_ids = explode( ',', $group_ids ); // convert to array.
1029 + }
1030 + if ( $group_ids ) {
1031 + $staging_group = get_option( 'mainwp_stagingsites_group_id' );
1032 + }
1033 + } elseif ( 'UpdatesManage' == $_GET['page'] || 'mainwp_tab' == $_GET['page'] ) {
1034 + $staging_enabled = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) ? true : false;
1035 + if ( $staging_enabled ) {
1036 + $staging_view = get_user_option( 'mainwp_staging_options_updates_view' ) == 'staging' ? true : false;
1037 + if ( $staging_view ) {
1038 + $is_staging = 'yes';
1039 + }
1040 + }
1041 + }
1042 + }
1043 + $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp_sync.dtsSync DESC, wp.url ASC', false, false, null, false, array(), $is_staging ) );
1044 + }
921 1045
922 - if ( static::is_mainwp_pages() && 'yes' === get_option( 'mainwp_activated' ) ) {
923 - delete_option( 'mainwp_activated' );
924 - wp_cache_delete( 'mainwp_activated', 'options' );
925 - wp_cache_delete( 'alloptions', 'options' );
926 - wp_safe_redirect( admin_url( 'admin.php?page=mainwp_tab' ) );
927 - exit;
928 - }
929 - }
1046 + MainWP_System_View::render_footer_content( $websites, $current_wpid );
1047 + if ( empty( $current_wpid ) ) {
1048 + MainWP_DB::free_result( $websites );
1049 + }
930 1050
931 - /**
932 - * Method admin_redirects()
933 - *
934 - * MainWP admin redirects.
935 - */
936 - public function admin_redirects() {
937 - if ( ( defined( 'DOING_CRON' ) && DOING_CRON ) || defined( 'DOING_AJAX' ) ) {
938 - return;
939 - }
1051 + MainWP_System_View::admin_footer();
1052 + MainWP_Menu::init_subpages_menu();
940 1053
941 - if ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], array( 'mainwp-setup' ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
942 - return;
943 - }
1054 + /**
1055 + * MainWP disabled menu items array.
1056 + *
1057 + * @global object
1058 + */
1059 + global $_mainwp_disable_menus_items;
944 1060
945 - $quick_setup = get_option( 'mainwp_run_quick_setup', false );
946 - if ( 'yes' === $quick_setup ) {
947 - wp_safe_redirect( admin_url( 'admin.php?page=mainwp-setup' ) );
948 - exit;
949 - }
1061 + $_mainwp_disable_menus_items = apply_filters( 'mainwp_all_disablemenuitems', $_mainwp_disable_menus_items );
1062 + }
950 1063
951 - $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
952 - $_pos = strlen( $request_uri ) - strlen( '/wp-admin/' );
953 - if ( ! empty( $request_uri ) && strpos( $request_uri, '/wp-admin/' ) !== false && strpos( $request_uri, '/wp-admin/' ) === $_pos ) {
954 - $referer = wp_get_referer();
955 - if ( ! empty( $referer ) && strpos( $referer, 'wp-login.php?redirect_to' ) !== false && strpos( $referer, '&reauth=1' ) !== false && mainwp_current_user_have_right( 'dashboard', 'access_global_dashboard' ) ) {
956 - wp_safe_redirect( admin_url( 'admin.php?page=mainwp_tab' ) );
957 - die();
958 - }
959 - }
1064 + /**
1065 + * Method activated_check()
1066 + *
1067 + * Activated check.
1068 + *
1069 + * @uses \MainWP\Dashboard\MainWP_Deprecated_Hooks::maybe_handle_deprecated_hook()
1070 + */
1071 + public function activated_check() {
1072 + MainWP_Deprecated_Hooks::maybe_handle_deprecated_hook();
1073 + return $this->get_version();
1074 + }
960 1075
961 - MainWP_Logger::instance()->check_log_daily();
962 - }
1076 + /**
1077 + * Method activation()
1078 + *
1079 + * Activate MainWP.
1080 + *
1081 + * @uses \MainWP\Dashboard\MainWP_Install::install()
1082 + * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
1083 + */
1084 + public function activation() {
1085 + MainWP_Install::instance()->install();
1086 + MainWP_Utility::update_option( 'mainwp_activated', 'yes' );
1087 + }
963 1088
964 - /**
965 - * Method init_session()
966 - *
967 - * Check current page & initiate a session.
968 - *
969 - * @uses \MainWP\Dashboard\MainWP_Cache::init_session()
970 - */
971 - public function init_session() {
972 - $page = isset( $_GET['page'] ) ? wp_unslash( $_GET['page'] ) : ''; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
973 - if ( ! empty( $page ) && in_array(
974 - $page,
975 - array(
976 - 'PostBulkManage',
977 - 'PageBulkManage',
978 - 'PluginsManage',
979 - 'PluginsAutoUpdate',
980 - 'ThemesManage',
981 - 'ThemesAutoUpdate',
982 - 'UserBulkManage',
983 - )
984 - )
985 - ) {
986 - MainWP_Cache::init_session();
987 - }
988 - }
1089 + /**
1090 + * Method deactivation()
1091 + *
1092 + * Deactivate MainWP.
1093 + */
1094 + public function deactivation() {
1095 + update_option( 'mainwp_extensions_all_activation_cached', '' );
1096 + }
989 1097
990 - /**
991 - * Method clear_sessions()
992 - *
993 - * When logout clear the sessions to reset.
994 - */
995 - public function clear_sessions() {
996 - MainWP_Cache::init_session();
997 - $clear_cached = array(
998 - 'Post',
999 - 'Page',
1000 - );
1001 - foreach ( $clear_cached as $ca ) {
1002 - MainWP_Cache::init_cache( $ca ); // to re-set cache.
1003 - }
1004 - }
1098 + /**
1099 + * Method update()
1100 + *
1101 + * Update MainWP.
1102 + *
1103 + * @uses \MainWP\Dashboard\MainWP_Install::install()
1104 + */
1105 + public function update() {
1106 + MainWP_Install::instance()->install();
1107 + }
1005 1108
1006 - /**
1007 - * Method admin_enqueue_scripts()
1008 - *
1009 - * Enqueue all Mainwp Admin Scripts.
1010 - */
1011 - public function admin_enqueue_scripts() {
1109 + /**
1110 + * Method is_single_user()
1111 + *
1112 + * Check if single user environment.
1113 + *
1114 + * @return boolean true|false.
1115 + */
1116 + public function is_single_user() {
1117 + return true;
1118 + }
1012 1119
1013 - $load_cust_scripts = false;
1120 + /**
1121 + * Method is_multi_user()
1122 + *
1123 + * Check if multi user environment.
1124 + *
1125 + * @return boolean true|false.
1126 + */
1127 + public function is_multi_user() {
1128 + return ! $this->is_single_user();
1129 + }
1014 1130
1015 - /**
1016 - * Current pagenow.
1017 - *
1018 - * @global string
1019 - */
1020 - global $pagenow;
1131 + /**
1132 + * Method get_plugin_slug()
1133 + *
1134 + * Get MainWP Plugin Slug.
1135 + */
1136 + public function get_plugin_slug() {
1137 + return $this->plugin_slug;
1138 + }
1021 1139
1022 - if ( is_plugin_active( 'mainwp-custom-post-types/mainwp-custom-post-types.php' ) && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) ) {
1023 - $load_cust_scripts = true;
1024 - }
1025 -
1026 - if ( static::is_mainwp_pages() ) {
1027 - wp_enqueue_script( 'jquery-migrate' );
1028 - wp_enqueue_script( 'mainwp-updates', MAINWP_PLUGIN_URL . 'assets/js/mainwp-updates.js', array(), $this->current_version, true );
1029 - wp_enqueue_script( 'mainwp-managesites-action', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-action.js', array(), $this->current_version, true );
1030 - wp_enqueue_script( 'mainwp-managesites-update', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-update.js', array(), $this->current_version, true );
1031 - wp_enqueue_script( 'mainwp-managesites-import', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-import.js', array(), $this->current_version, true );
1032 - wp_enqueue_script( 'mainwp-plugins-themes', MAINWP_PLUGIN_URL . 'assets/js/mainwp-plugins-themes.js', array(), $this->current_version, true );
1033 - wp_enqueue_script( 'mainwp-backups', MAINWP_PLUGIN_URL . 'assets/js/mainwp-backups.js', array(), $this->current_version, true );
1034 - wp_enqueue_script( 'mainwp-posts', MAINWP_PLUGIN_URL . 'assets/js/mainwp-posts.js', array(), $this->current_version, true );
1035 - wp_enqueue_script( 'mainwp-users', MAINWP_PLUGIN_URL . 'assets/js/mainwp-users.js', array(), $this->current_version, true );
1036 - wp_enqueue_script( 'mainwp-clients', MAINWP_PLUGIN_URL . 'assets/js/mainwp-clients.js', array(), $this->current_version, true );
1037 - wp_enqueue_script( 'mainwp-extensions', MAINWP_PLUGIN_URL . 'assets/js/mainwp-extensions.js', array(), $this->current_version, true );
1038 - wp_enqueue_script( 'mainwp-moment', MAINWP_PLUGIN_URL . 'assets/js/moment/moment.min.js', array(), $this->current_version, true );
1039 - wp_enqueue_script( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.js', array( 'jquery' ), $this->current_version, false );
1040 -
1041 - wp_enqueue_script( 'datatables', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.js', array( 'jquery' ), $this->current_version, false );
1042 - wp_enqueue_script( 'datatables-semanticui', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.semanticui.js', array( 'datatables' ), $this->current_version, false );
1043 - wp_enqueue_script( 'datatables-select', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.select.min.js', array( 'datatables' ), $this->current_version, false );
1044 - wp_enqueue_script( 'datatables-add-ons', MAINWP_PLUGIN_URL . 'assets/js/datatables/datatables.min.js', array( 'datatables' ), $this->current_version, false );
1045 -
1046 - wp_enqueue_script( 'hamburger', MAINWP_PLUGIN_URL . 'assets/js/hamburger/hamburger.js', array( 'jquery' ), $this->current_version, true );
1047 - wp_enqueue_script( 'datatables-natural-sorting', MAINWP_PLUGIN_URL . 'assets/js/sorting/natural.js', array( 'jquery' ), $this->current_version, true );
1048 -
1049 - wp_enqueue_script( 'mainwp-clipboard', MAINWP_PLUGIN_URL . 'assets/js/clipboard/clipboard.min.js', array( 'jquery' ), $this->current_version, true );
1050 - wp_enqueue_script( 'mainwp-rest-api', MAINWP_PLUGIN_URL . 'assets/js/mainwp-rest-api.js', array(), $this->current_version, true );
1051 -
1052 - if ( isset( $_GET['page'] ) && 'ManageGroups' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1053 - wp_enqueue_script( 'mainwp-groups', MAINWP_PLUGIN_URL . 'assets/js/mainwp-groups.js', array(), $this->current_version, true );
1054 - }
1055 - $enqueue_scripts = apply_filters( 'mainwp_admin_enqueue_scripts', array() );
1056 - if ( is_array( $enqueue_scripts ) && ! empty( $enqueue_scripts['apexcharts'] ) ) {
1057 - wp_enqueue_script(
1058 - 'mainwp-apexcharts',
1059 - MAINWP_PLUGIN_URL . 'assets/js/apexcharts/apexcharts.js',
1060 - array(
1061 - 'jquery',
1062 - 'mainwp',
1063 - ),
1064 - $this->current_version,
1065 - true
1066 - );
1067 - }
1068 - wp_enqueue_script( 'mainwp-dropzone', MAINWP_PLUGIN_URL . 'assets/js/dropzone/dropzone.min.js', array(), $this->current_version, true );
1069 - }
1070 -
1071 - if ( $load_cust_scripts ) {
1072 - wp_enqueue_script( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.js', array( 'jquery' ), $this->current_version, true );
1073 - }
1074 -
1075 - wp_enqueue_script( 'mainwp-ui', MAINWP_PLUGIN_URL . 'assets/js/mainwp-ui.js', array(), $this->current_version, true );
1076 - wp_enqueue_script( 'mainwp-js-popup', MAINWP_PLUGIN_URL . 'assets/js/mainwp-popup.js', array(), $this->current_version, true );
1077 - // to support extension uploader.
1078 - wp_enqueue_script( 'mainwp-fileuploader', MAINWP_PLUGIN_URL . 'assets/js/fileuploader.js', array(), $this->current_version ); // phpcs:ignore -- fileuploader scripts need to load at header.
1079 - wp_enqueue_script( 'mainwp-filesaver', MAINWP_PLUGIN_URL . 'assets/js/FileSaver.js', array(), $this->current_version, true );
1080 - }
1081 -
1082 - /**
1083 - * Method admin_enqueue_scripts_fix_conflict()
1084 - *
1085 - * Enqueue Admin Scripts fix conflict.
1086 - */
1087 - public function admin_enqueue_scripts_fix_conflict() {
1088 - if ( static::is_mainwp_pages() ) {
1089 - // to fix conflict with the SVG Support plugin.
1090 - remove_action( 'admin_enqueue_scripts', 'bodhi_svgs_admin_multiselect' );
1091 - }
1092 - }
1093 -
1094 - /**
1095 - * Method admin_enqueue_styles()
1096 - *
1097 - * Enqueue all Mainwp Admin Styles.
1098 - */
1099 - public function admin_enqueue_styles() { //phpcs:ignore -- NOSONAR - complex.
1100 -
1101 - wp_enqueue_style( 'mainwp', MAINWP_PLUGIN_URL . 'assets/css/mainwp.css', array(), $this->current_version );
1102 - wp_enqueue_style( 'mainwp-responsive-layouts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-responsive-layouts.css', array(), $this->current_version );
1103 -
1104 - if ( isset( $_GET['hideall'] ) && 1 === (int) $_GET['hideall'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1105 - remove_action( 'admin_footer', 'wp_admin_bar_render', 1000 );
1106 - }
1107 -
1108 - /**
1109 - * Current pagenow.
1110 - *
1111 - * @global string
1112 - */
1113 - global $pagenow;
1114 -
1115 - $load_cust_scripts = false;
1116 - if ( is_plugin_active( 'mainwp-custom-post-types/mainwp-custom-post-types.php' ) && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) ) {
1117 - $load_cust_scripts = true;
1118 - }
1119 -
1120 - if ( static::is_mainwp_pages() ) {
1121 - wp_enqueue_style( 'mainwp-fonts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fonts.css', array(), $this->current_version );
1122 - wp_enqueue_style( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.css', array(), $this->current_version );
1123 - wp_enqueue_style( 'mainwp-fomantic', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fomantic.css', array(), $this->current_version );
1124 -
1125 - wp_enqueue_style( 'datatables', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.dataTables.css', array(), $this->current_version );
1126 - wp_enqueue_style( 'datatables-semanticui', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.semanticui.css', array(), $this->current_version );
1127 - wp_enqueue_style( 'datatables-select', MAINWP_PLUGIN_URL . 'assets/js/datatables/select.semanticui.min.css', array(), $this->current_version );
1128 - wp_enqueue_style( 'datatables-add-ons', MAINWP_PLUGIN_URL . 'assets/js/datatables/datatables.min.css', array(), $this->current_version );
1129 -
1130 - wp_enqueue_style( 'hamburger', MAINWP_PLUGIN_URL . 'assets/js/hamburger/hamburger.css', array(), $this->current_version );
1131 - // to fix conflict layout.
1132 - wp_enqueue_style( 'jquery-ui-style', MAINWP_PLUGIN_URL . 'assets/css/1.11.1/jquery-ui.min.css', array(), '1.11.1' );
1133 -
1134 - // load custom MainWP theme.
1135 - $selected_theme = MainWP_Settings::get_instance()->get_selected_theme();
1136 - if ( ! empty( $selected_theme ) ) {
1137 - if ( 'dark' === $selected_theme ) {
1138 - wp_enqueue_style( 'mainwp-custom-dashboard-extension-dark-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-dark-theme.css', array(), $this->current_version );
1139 - } elseif ( 'wpadmin' === $selected_theme ) {
1140 - wp_enqueue_style( 'mainwp-custom-dashboard-extension-wp-admin-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-wpadmin-theme.css', array(), $this->current_version );
1141 - } elseif ( 'minimalistic' === $selected_theme ) {
1142 - wp_enqueue_style( 'mainwp-custom-dashboard-extension-minimalistic-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-minimalistic-theme.css', array(), $this->current_version );
1143 - } elseif ( 'default' === $selected_theme ) {
1144 - wp_enqueue_style( 'mainwp-custom-dashboard-extension-default-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-default-theme.css', array(), $this->current_version );
1145 - } else {
1146 - $dirs = MainWP_Settings::get_instance()->get_custom_theme_folder();
1147 - $custom_theme_url = $dirs[1];
1148 - wp_enqueue_style( 'mainwp-custom-dashboard-theme', $custom_theme_url . $selected_theme, array(), $this->current_version );
1149 - }
1150 - }
1151 - }
1152 -
1153 - if ( $load_cust_scripts ) {
1154 - wp_enqueue_style( 'mainwp-fonts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fonts.css', array(), $this->current_version );
1155 - wp_enqueue_style( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.css', array(), $this->current_version );
1156 - }
1157 - }
1158 -
1159 - /**
1160 - * Method admin_menu()
1161 - *
1162 - * Add Bulk Post/Pages menue.
1163 - */
1164 - public function admin_menu() {
1165 -
1166 - /**
1167 - * Admin menu array.
1168 - *
1169 - * @global object
1170 - */
1171 - global $menu;
1172 -
1173 - foreach ( $menu as $k => $item ) {
1174 - if ( 'edit.php?post_type=bulkpost' === $item[2] || 'edit.php?post_type=bulkpage' === $item[2] ) {
1175 - unset( $menu[ $k ] );
1176 - }
1177 - }
1178 - }
1179 -
1180 - /**
1181 - * Method enqueue_postbox_scripts()
1182 - *
1183 - * Enqueue postbox scripts.
1184 - */
1185 - public static function enqueue_postbox_scripts() {
1186 - wp_enqueue_script( 'common' );
1187 - wp_enqueue_script( 'wp-lists' );
1188 - wp_enqueue_script( 'postbox' );
1189 - }
1190 -
1191 - /**
1192 - * Method admin_footer()
1193 - *
1194 - * Create MainWP admin footer.
1195 - *
1196 - * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id()
1197 - * @uses \MainWP\Dashboard\MainWP_DB::query()
1198 - * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
1199 - * @uses \MainWP\Dashboard\MainWP_DB::free_result()
1200 - * @uses \MainWP\Dashboard\MainWP_Menu::init_subpages_menu()
1201 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
1202 - * @uses \MainWP\Dashboard\MainWP_System_View::render_footer_content()
1203 - * @uses \MainWP\Dashboard\MainWP_System_View::admin_footer()
1204 - */
1205 - public function admin_footer() { //phpcs:ignore -- NOSONAR - complex.
1206 - if ( ! static::is_mainwp_pages() ) {
1207 - $sites_count = MainWP_DB::instance()->get_websites_count();
1208 - if ( empty( $sites_count ) ) {
1209 - ?>
1210 - <script type="text/javascript">
1211 - jQuery( function($){
1212 - $( 'li#toplevel_page_mainwp_tab .wp-submenu-wrap .wp-submenu-head' ).after('<li style="background: #FFD300 !important;" class="wp-first-item"><a href="admin.php?page=mainwp-setup" style="color: #000 !important;" class="wp-first-item"><?php esc_html_e( 'Quick Setup', 'mainwp' ); ?></a></li>');
1213 - });
1214 - </script>
1215 - <?php
1216 - }
1217 - return;
1218 - }
1219 -
1220 - ?>
1221 - <div class="ui large modal" id="mainwp-response-data-modal">
1222 - <i class="close icon"></i>
1223 - <div class="header"><?php esc_html_e( 'Child Site Response', 'mainwp' ); ?></div>
1224 - <div class="content">
1225 - <div class="ui info message"><?php esc_html_e( 'To see the response in a more readable way, you can copy it and paste it into some HTML render tool, such as Codepen.io.', 'mainwp' ); ?>
1226 - </div>
1227 - </div>
1228 - <div class="scrolling content content-response" contenteditable="true"></div>
1229 - <div class="actions">
1230 - <button class="ui green button mainwp-response-copy-button"><?php esc_html_e( 'Copy Response', 'mainwp' ); ?></button>
1231 - </div>
1232 - </div>
1233 - <div id="mainwp-response-data-container" resp-data=""></div>
1234 - <?php
1235 -
1236 - if ( isset( $_GET['hideall'] ) && 1 === (int) $_GET['hideall'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1237 - return;
1238 - }
1239 - $current_wpid = MainWP_System_Utility::get_current_wpid();
1240 - if ( $current_wpid ) {
1241 - $website = MainWP_DB::instance()->get_website_by_id( $current_wpid );
1242 - $websites = array( $website );
1243 - } else {
1244 - $is_staging = 'no';
1245 - if ( isset( $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1246 - if ( ( 'managesites' === $_GET['page'] ) && ! isset( $_GET['id'] ) && ! isset( $_GET['do'] ) && ! isset( $_GET['dashboard'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1247 - $group_ids = get_user_option( 'mainwp_managesites_filter_group' );
1248 - if ( ! empty( $group_ids ) ) {
1249 - $group_ids = explode( ',', $group_ids ); // convert to array.
1250 - }
1251 - } elseif ( 'UpdatesManage' === $_GET['page'] || 'mainwp_tab' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1252 - $staging_enabled = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) ? true : false;
1253 - if ( $staging_enabled ) {
1254 - $staging_view = MainWP_System_Utility::get_staging_options_sites_view_for_current_users();
1255 - if ( 'staging' === $staging_view ) {
1256 - $is_staging = 'yes';
1257 - }
1258 - }
1259 - }
1260 - }
1261 - $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, 'wp_sync.dtsSync DESC, wp.url ASC', false, false, null, false, array(), $is_staging ) );
1262 - }
1263 -
1264 - MainWP_System_View::render_footer_content( $websites, $current_wpid );
1265 - if ( empty( $current_wpid ) ) {
1266 - MainWP_DB::free_result( $websites );
1267 - }
1268 -
1269 - MainWP_System_View::admin_footer();
1270 - MainWP_System_View::render_plugins_install_check();
1271 -
1272 - MainWP_Menu::init_sub_pages();
1273 -
1274 - /**
1275 - * MainWP disabled menu items array.
1276 - *
1277 - * @global object
1278 - */
1279 - global $_mainwp_disable_menus_items;
1280 -
1281 - $_mainwp_disable_menus_items = apply_filters( 'mainwp_all_disablemenuitems', $_mainwp_disable_menus_items );
1282 - }
1283 -
1284 - /**
1285 - * Method activated_check()
1286 - *
1287 - * Activated check.
1288 - *
1289 - * @uses \MainWP\Dashboard\MainWP_Deprecated_Hooks::maybe_handle_deprecated_hook()
1290 - */
1291 - public function activated_check() {
1292 - MainWP_Deprecated_Hooks::maybe_handle_deprecated_hook();
1293 - return $this->get_version();
1294 - }
1295 -
1296 - /**
1297 - * Method activation()
1298 - *
1299 - * Activate MainWP.
1300 - *
1301 - * @uses \MainWP\Dashboard\MainWP_Install::install()
1302 - * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
1303 - */
1304 - public function activation() {
1305 - $this->update_install();
1306 - MainWP_Utility::update_option( 'mainwp_activated', 'yes' );
1307 - }
1308 -
1309 - /**
1310 - * Method deactivation()
1311 - *
1312 - * Deactivate MainWP.
1313 - */
1314 - public function deactivation() {
1315 - update_option( 'mainwp_extensions_all_activation_cached', '' );
1316 - }
1317 -
1318 - /**
1319 - * Method update_install()
1320 - *
1321 - * Update MainWP.
1322 - *
1323 - * @uses \MainWP\Dashboard\MainWP_Install::install()
1324 - */
1325 - public function update_install() {
1326 - MainWP_DB_Client::instance();
1327 - MainWP_DB_Site_Actions::instance();
1328 - MainWP_Install::instance()->install();
1329 - $this->check_to_updates();
1330 - }
1331 -
1332 -
1333 - /**
1334 - * Method check_to_updates()
1335 - *
1336 - * To check updates options.
1337 - */
1338 - public function check_to_updates() {
1339 - $update_ver = get_option( 'mainwp_update_check_version', false );
1340 - $current_ver = $this->check_ver_update;
1341 -
1342 - if ( false === $update_ver && version_compare( $current_ver, '0.0.1', '=' ) ) {
1343 - // to update new saving format.
1344 - MainWP_Api_Manager_Key::instance()->get_decrypt_master_api_key();
1345 - MainWP_Utility::update_option( 'mainwp_update_check_version', $current_ver );
1346 - }
1347 - }
1348 -
1349 - /**
1350 - * Method is_single_user()
1351 - *
1352 - * Check if single user environment.
1353 - *
1354 - * @return boolean true|false.
1355 - */
1356 - public function is_single_user() {
1357 - return true;
1358 - }
1359 -
1360 - /**
1361 - * Method is_multi_user()
1362 - *
1363 - * Check if multi user environment.
1364 - *
1365 - * @return boolean true|false.
1366 - */
1367 - public function is_multi_user() {
1368 - return ! $this->is_single_user();
1369 - }
1370 -
1371 - /**
1372 - * Method get_plugin_slug()
1373 - *
1374 - * Get MainWP Plugin Slug.
1375 - */
1376 - public function get_plugin_slug() {
1377 - return $this->plugin_slug;
1378 - }
1379 1140 }