PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.1
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
mainwp / class / class-mainwp-system.php

class-mainwp-system.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.1, at class/class-mainwp-system.php

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