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

1,376 lines 57.6 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.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 $quick_setup = get_option( 'mainwp_run_quick_setup', false );
942 if ( 'yes' === $quick_setup ) {
943 wp_safe_redirect( admin_url( 'admin.php?page=mainwp-setup' ) );
944 exit;
945 }
946
947 $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
948 $_pos = strlen( $request_uri ) - strlen( '/wp-admin/' );
949 if ( ! empty( $request_uri ) && strpos( $request_uri, '/wp-admin/' ) !== false && strpos( $request_uri, '/wp-admin/' ) === $_pos ) {
950 $referer = wp_get_referer();
951 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' ) ) {
952 wp_safe_redirect( admin_url( 'admin.php?page=mainwp_tab' ) );
953 die();
954 }
955 }
956
957 MainWP_Logger::instance()->check_log_daily();
958 }
959
960 /**
961 * Method init_session()
962 *
963 * Check current page & initiate a session.
964 *
965 * @uses \MainWP\Dashboard\MainWP_Cache::init_session()
966 */
967 public function init_session() {
968 $page = isset( $_GET['page'] ) ? wp_unslash( $_GET['page'] ) : ''; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
969 if ( ! empty( $page ) && in_array(
970 $page,
971 array(
972 'PostBulkManage',
973 'PageBulkManage',
974 'PluginsManage',
975 'PluginsAutoUpdate',
976 'ThemesManage',
977 'ThemesAutoUpdate',
978 'UserBulkManage',
979 )
980 )
981 ) {
982 MainWP_Cache::init_session();
983 }
984 }
985
986 /**
987 * Method clear_sessions()
988 *
989 * When logout clear the sessions to reset.
990 */
991 public function clear_sessions() {
992 MainWP_Cache::init_session();
993 $clear_cached = array(
994 'Post',
995 'Page',
996 );
997 foreach ( $clear_cached as $ca ) {
998 MainWP_Cache::init_cache( $ca ); // to re-set cache.
999 }
1000 }
1001
1002 /**
1003 * Method admin_enqueue_scripts()
1004 *
1005 * Enqueue all Mainwp Admin Scripts.
1006 */
1007 public function admin_enqueue_scripts() {
1008
1009 $load_cust_scripts = false;
1010
1011 /**
1012 * Current pagenow.
1013 *
1014 * @global string
1015 */
1016 global $pagenow;
1017
1018 if ( is_plugin_active( 'mainwp-custom-post-types/mainwp-custom-post-types.php' ) && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) ) {
1019 $load_cust_scripts = true;
1020 }
1021
1022 if ( static::is_mainwp_pages() ) {
1023 wp_enqueue_script( 'jquery-migrate' );
1024 wp_enqueue_script( 'mainwp-updates', MAINWP_PLUGIN_URL . 'assets/js/mainwp-updates.js', array(), $this->current_version, true );
1025 wp_enqueue_script( 'mainwp-managesites-action', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-action.js', array(), $this->current_version, true );
1026 wp_enqueue_script( 'mainwp-managesites-update', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-update.js', array(), $this->current_version, true );
1027 wp_enqueue_script( 'mainwp-managesites-import', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-import.js', array(), $this->current_version, true );
1028 wp_enqueue_script( 'mainwp-plugins-themes', MAINWP_PLUGIN_URL . 'assets/js/mainwp-plugins-themes.js', array(), $this->current_version, true );
1029 wp_enqueue_script( 'mainwp-backups', MAINWP_PLUGIN_URL . 'assets/js/mainwp-backups.js', array(), $this->current_version, true );
1030 wp_enqueue_script( 'mainwp-posts', MAINWP_PLUGIN_URL . 'assets/js/mainwp-posts.js', array(), $this->current_version, true );
1031 wp_enqueue_script( 'mainwp-users', MAINWP_PLUGIN_URL . 'assets/js/mainwp-users.js', array(), $this->current_version, true );
1032 wp_enqueue_script( 'mainwp-clients', MAINWP_PLUGIN_URL . 'assets/js/mainwp-clients.js', array(), $this->current_version, true );
1033 wp_enqueue_script( 'mainwp-extensions', MAINWP_PLUGIN_URL . 'assets/js/mainwp-extensions.js', array(), $this->current_version, true );
1034 wp_enqueue_script( 'mainwp-moment', MAINWP_PLUGIN_URL . 'assets/js/moment/moment.min.js', array(), $this->current_version, true );
1035 wp_enqueue_script( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.js', array( 'jquery' ), $this->current_version, false );
1036
1037 wp_enqueue_script( 'datatables', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.js', array( 'jquery' ), $this->current_version, false );
1038 wp_enqueue_script( 'datatables-semanticui', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.semanticui.js', array( 'datatables' ), $this->current_version, false );
1039 wp_enqueue_script( 'datatables-select', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.select.min.js', array( 'datatables' ), $this->current_version, false );
1040 wp_enqueue_script( 'datatables-add-ons', MAINWP_PLUGIN_URL . 'assets/js/datatables/datatables.min.js', array( 'datatables' ), $this->current_version, false );
1041
1042 wp_enqueue_script( 'hamburger', MAINWP_PLUGIN_URL . 'assets/js/hamburger/hamburger.js', array( 'jquery' ), $this->current_version, true );
1043 wp_enqueue_script( 'datatables-natural-sorting', MAINWP_PLUGIN_URL . 'assets/js/sorting/natural.js', array( 'jquery' ), $this->current_version, true );
1044
1045 wp_enqueue_script( 'mainwp-clipboard', MAINWP_PLUGIN_URL . 'assets/js/clipboard/clipboard.min.js', array( 'jquery' ), $this->current_version, true );
1046 wp_enqueue_script( 'mainwp-rest-api', MAINWP_PLUGIN_URL . 'assets/js/mainwp-rest-api.js', array(), $this->current_version, true );
1047
1048 if ( isset( $_GET['page'] ) && 'ManageGroups' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1049 wp_enqueue_script( 'mainwp-groups', MAINWP_PLUGIN_URL . 'assets/js/mainwp-groups.js', array(), $this->current_version, true );
1050 }
1051 $enqueue_scripts = apply_filters( 'mainwp_admin_enqueue_scripts', array() );
1052 if ( is_array( $enqueue_scripts ) && ! empty( $enqueue_scripts['apexcharts'] ) ) {
1053 wp_enqueue_script(
1054 'mainwp-apexcharts',
1055 MAINWP_PLUGIN_URL . 'assets/js/apexcharts/apexcharts.js',
1056 array(
1057 'jquery',
1058 'mainwp',
1059 ),
1060 $this->current_version,
1061 true
1062 );
1063 }
1064 wp_enqueue_script( 'mainwp-dropzone', MAINWP_PLUGIN_URL . 'assets/js/dropzone/dropzone.min.js', array(), $this->current_version, true );
1065 }
1066
1067 if ( $load_cust_scripts ) {
1068 wp_enqueue_script( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.js', array( 'jquery' ), $this->current_version, true );
1069 }
1070
1071 wp_enqueue_script( 'mainwp-ui', MAINWP_PLUGIN_URL . 'assets/js/mainwp-ui.js', array(), $this->current_version, true );
1072 wp_enqueue_script( 'mainwp-js-popup', MAINWP_PLUGIN_URL . 'assets/js/mainwp-popup.js', array(), $this->current_version, true );
1073 // to support extension uploader.
1074 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.
1075 wp_enqueue_script( 'mainwp-filesaver', MAINWP_PLUGIN_URL . 'assets/js/FileSaver.js', array(), $this->current_version, true );
1076 }
1077
1078 /**
1079 * Method admin_enqueue_scripts_fix_conflict()
1080 *
1081 * Enqueue Admin Scripts fix conflict.
1082 */
1083 public function admin_enqueue_scripts_fix_conflict() {
1084 if ( static::is_mainwp_pages() ) {
1085 // to fix conflict with the SVG Support plugin.
1086 remove_action( 'admin_enqueue_scripts', 'bodhi_svgs_admin_multiselect' );
1087 }
1088 }
1089
1090 /**
1091 * Method admin_enqueue_styles()
1092 *
1093 * Enqueue all Mainwp Admin Styles.
1094 */
1095 public function admin_enqueue_styles() { //phpcs:ignore -- NOSONAR - complex.
1096
1097 wp_enqueue_style( 'mainwp', MAINWP_PLUGIN_URL . 'assets/css/mainwp.css', array(), $this->current_version );
1098 wp_enqueue_style( 'mainwp-responsive-layouts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-responsive-layouts.css', array(), $this->current_version );
1099
1100 if ( isset( $_GET['hideall'] ) && 1 === (int) $_GET['hideall'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1101 remove_action( 'admin_footer', 'wp_admin_bar_render', 1000 );
1102 }
1103
1104 /**
1105 * Current pagenow.
1106 *
1107 * @global string
1108 */
1109 global $pagenow;
1110
1111 $load_cust_scripts = false;
1112 if ( is_plugin_active( 'mainwp-custom-post-types/mainwp-custom-post-types.php' ) && ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) ) {
1113 $load_cust_scripts = true;
1114 }
1115
1116 if ( static::is_mainwp_pages() ) {
1117 wp_enqueue_style( 'mainwp-fonts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fonts.css', array(), $this->current_version );
1118 wp_enqueue_style( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.css', array(), $this->current_version );
1119 wp_enqueue_style( 'mainwp-fomantic', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fomantic.css', array(), $this->current_version );
1120
1121 wp_enqueue_style( 'datatables', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.dataTables.css', array(), $this->current_version );
1122 wp_enqueue_style( 'datatables-semanticui', MAINWP_PLUGIN_URL . 'assets/js/datatables/dataTables.semanticui.css', array(), $this->current_version );
1123 wp_enqueue_style( 'datatables-select', MAINWP_PLUGIN_URL . 'assets/js/datatables/select.semanticui.min.css', array(), $this->current_version );
1124 wp_enqueue_style( 'datatables-add-ons', MAINWP_PLUGIN_URL . 'assets/js/datatables/datatables.min.css', array(), $this->current_version );
1125
1126 wp_enqueue_style( 'hamburger', MAINWP_PLUGIN_URL . 'assets/js/hamburger/hamburger.css', array(), $this->current_version );
1127 // to fix conflict layout.
1128 wp_enqueue_style( 'jquery-ui-style', MAINWP_PLUGIN_URL . 'assets/css/1.11.1/jquery-ui.min.css', array(), '1.11.1' );
1129
1130 // load custom MainWP theme.
1131 $selected_theme = MainWP_Settings::get_instance()->get_selected_theme();
1132 if ( ! empty( $selected_theme ) ) {
1133 if ( 'dark' === $selected_theme ) {
1134 wp_enqueue_style( 'mainwp-custom-dashboard-extension-dark-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-dark-theme.css', array(), $this->current_version );
1135 } elseif ( 'wpadmin' === $selected_theme ) {
1136 wp_enqueue_style( 'mainwp-custom-dashboard-extension-wp-admin-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-wpadmin-theme.css', array(), $this->current_version );
1137 } elseif ( 'minimalistic' === $selected_theme ) {
1138 wp_enqueue_style( 'mainwp-custom-dashboard-extension-minimalistic-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-minimalistic-theme.css', array(), $this->current_version );
1139 } elseif ( 'default' === $selected_theme ) {
1140 wp_enqueue_style( 'mainwp-custom-dashboard-extension-default-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-default-theme.css', array(), $this->current_version );
1141 } else {
1142 $dirs = MainWP_Settings::get_instance()->get_custom_theme_folder();
1143 $custom_theme_url = $dirs[1];
1144 wp_enqueue_style( 'mainwp-custom-dashboard-theme', $custom_theme_url . $selected_theme, array(), $this->current_version );
1145 }
1146 }
1147 }
1148
1149 if ( $load_cust_scripts ) {
1150 wp_enqueue_style( 'mainwp-fonts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fonts.css', array(), $this->current_version );
1151 wp_enqueue_style( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.css', array(), $this->current_version );
1152 }
1153 }
1154
1155 /**
1156 * Method admin_menu()
1157 *
1158 * Add Bulk Post/Pages menue.
1159 */
1160 public function admin_menu() {
1161
1162 /**
1163 * Admin menu array.
1164 *
1165 * @global object
1166 */
1167 global $menu;
1168
1169 foreach ( $menu as $k => $item ) {
1170 if ( 'edit.php?post_type=bulkpost' === $item[2] || 'edit.php?post_type=bulkpage' === $item[2] ) {
1171 unset( $menu[ $k ] );
1172 }
1173 }
1174 }
1175
1176 /**
1177 * Method enqueue_postbox_scripts()
1178 *
1179 * Enqueue postbox scripts.
1180 */
1181 public static function enqueue_postbox_scripts() {
1182 wp_enqueue_script( 'common' );
1183 wp_enqueue_script( 'wp-lists' );
1184 wp_enqueue_script( 'postbox' );
1185 }
1186
1187 /**
1188 * Method admin_footer()
1189 *
1190 * Create MainWP admin footer.
1191 *
1192 * @uses \MainWP\Dashboard\MainWP_DB::get_website_by_id()
1193 * @uses \MainWP\Dashboard\MainWP_DB::query()
1194 * @uses \MainWP\Dashboard\MainWP_DB::get_sql_websites_for_current_user()
1195 * @uses \MainWP\Dashboard\MainWP_DB::free_result()
1196 * @uses \MainWP\Dashboard\MainWP_Menu::init_subpages_menu()
1197 * @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
1198 * @uses \MainWP\Dashboard\MainWP_System_View::render_footer_content()
1199 * @uses \MainWP\Dashboard\MainWP_System_View::admin_footer()
1200 */
1201 public function admin_footer() { //phpcs:ignore -- NOSONAR - complex.
1202 if ( ! static::is_mainwp_pages() ) {
1203 $sites_count = MainWP_DB::instance()->get_websites_count();
1204 if ( empty( $sites_count ) ) {
1205 ?>
1206 <script type="text/javascript">
1207 jQuery( function($){
1208 $( '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>');
1209 });
1210 </script>
1211 <?php
1212 }
1213 return;
1214 }
1215
1216 ?>
1217 <div class="ui large modal" id="mainwp-response-data-modal">
1218 <i class="close icon"></i>
1219 <div class="header"><?php esc_html_e( 'Child Site Response', 'mainwp' ); ?></div>
1220 <div class="content">
1221 <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' ); ?>
1222 </div>
1223 </div>
1224 <div class="scrolling content content-response" contenteditable="true"></div>
1225 <div class="actions">
1226 <button class="ui green button mainwp-response-copy-button"><?php esc_html_e( 'Copy Response', 'mainwp' ); ?></button>
1227 </div>
1228 </div>
1229 <div id="mainwp-response-data-container" resp-data=""></div>
1230 <?php
1231
1232 if ( isset( $_GET['hideall'] ) && 1 === (int) $_GET['hideall'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1233 return;
1234 }
1235 $current_wpid = MainWP_System_Utility::get_current_wpid();
1236 if ( $current_wpid ) {
1237 $website = MainWP_DB::instance()->get_website_by_id( $current_wpid );
1238 $websites = array( $website );
1239 } else {
1240 $is_staging = 'no';
1241 if ( isset( $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1242 if ( ( 'managesites' === $_GET['page'] ) && ! isset( $_GET['id'] ) && ! isset( $_GET['do'] ) && ! isset( $_GET['dashboard'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1243 $group_ids = get_user_option( 'mainwp_managesites_filter_group' );
1244 if ( ! empty( $group_ids ) ) {
1245 $group_ids = explode( ',', $group_ids ); // convert to array.
1246 }
1247 } elseif ( 'UpdatesManage' === $_GET['page'] || 'mainwp_tab' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1248 $staging_enabled = is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) ? true : false;
1249 if ( $staging_enabled ) {
1250 $staging_view = MainWP_System_Utility::get_staging_options_sites_view_for_current_users();
1251 if ( 'staging' === $staging_view ) {
1252 $is_staging = 'yes';
1253 }
1254 }
1255 }
1256 }
1257 $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 ) );
1258 }
1259
1260 MainWP_System_View::render_footer_content( $websites, $current_wpid );
1261 if ( empty( $current_wpid ) ) {
1262 MainWP_DB::free_result( $websites );
1263 }
1264
1265 MainWP_System_View::admin_footer();
1266 MainWP_System_View::render_plugins_install_check();
1267
1268 MainWP_Menu::init_sub_pages();
1269
1270 /**
1271 * MainWP disabled menu items array.
1272 *
1273 * @global object
1274 */
1275 global $_mainwp_disable_menus_items;
1276
1277 $_mainwp_disable_menus_items = apply_filters( 'mainwp_all_disablemenuitems', $_mainwp_disable_menus_items );
1278 }
1279
1280 /**
1281 * Method activated_check()
1282 *
1283 * Activated check.
1284 *
1285 * @uses \MainWP\Dashboard\MainWP_Deprecated_Hooks::maybe_handle_deprecated_hook()
1286 */
1287 public function activated_check() {
1288 MainWP_Deprecated_Hooks::maybe_handle_deprecated_hook();
1289 return $this->get_version();
1290 }
1291
1292 /**
1293 * Method activation()
1294 *
1295 * Activate MainWP.
1296 *
1297 * @uses \MainWP\Dashboard\MainWP_Install::install()
1298 * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
1299 */
1300 public function activation() {
1301 $this->update_install();
1302 MainWP_Utility::update_option( 'mainwp_activated', 'yes' );
1303 }
1304
1305 /**
1306 * Method deactivation()
1307 *
1308 * Deactivate MainWP.
1309 */
1310 public function deactivation() {
1311 update_option( 'mainwp_extensions_all_activation_cached', '' );
1312 }
1313
1314 /**
1315 * Method update_install()
1316 *
1317 * Update MainWP.
1318 *
1319 * @uses \MainWP\Dashboard\MainWP_Install::install()
1320 */
1321 public function update_install() {
1322 MainWP_DB_Client::instance();
1323 MainWP_DB_Site_Actions::instance();
1324 MainWP_Install::instance()->install();
1325 $this->check_to_updates();
1326 }
1327
1328
1329 /**
1330 * Method check_to_updates()
1331 *
1332 * To check updates options.
1333 */
1334 public function check_to_updates() {
1335 $update_ver = get_option( 'mainwp_update_check_version', false );
1336 $current_ver = $this->check_ver_update;
1337
1338 if ( false === $update_ver && version_compare( $current_ver, '0.0.1', '=' ) ) {
1339 // to update new saving format.
1340 MainWP_Api_Manager_Key::instance()->get_decrypt_master_api_key();
1341 MainWP_Utility::update_option( 'mainwp_update_check_version', $current_ver );
1342 }
1343 }
1344
1345 /**
1346 * Method is_single_user()
1347 *
1348 * Check if single user environment.
1349 *
1350 * @return boolean true|false.
1351 */
1352 public function is_single_user() {
1353 return true;
1354 }
1355
1356 /**
1357 * Method is_multi_user()
1358 *
1359 * Check if multi user environment.
1360 *
1361 * @return boolean true|false.
1362 */
1363 public function is_multi_user() {
1364 return ! $this->is_single_user();
1365 }
1366
1367 /**
1368 * Method get_plugin_slug()
1369 *
1370 * Get MainWP Plugin Slug.
1371 */
1372 public function get_plugin_slug() {
1373 return $this->plugin_slug;
1374 }
1375 }
1376