38217-vm/wp-content/plugins/mainwp/pages/page-mainwp-overview.php
2026-02-05 17:08:59 +03:00

463 lines
18 KiB
PHP

<?php
/**
* MainWP Overview Page.
*
* @package MainWP/Dashboard
*/
namespace MainWP\Dashboard;
/**
* Class MainWP_Overview
*
* @package MainWP\Dashboard
*/
class MainWP_Overview { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
/**
* Get Class Name
*
* @return string __CLASS__
*/
public static function get_class_name() {
return __CLASS__;
}
/**
* The single instance of the class
*
* @var mixed Default null
*/
protected static $instance = null;
/**
* Screen dashdoard ID value.
*
* @var int $dashBoard default 0.
*/
public $dashBoard = 0;
/**
* Enabled widgets
*
* @var array $enable_widgets
*/
private static $enable_widgets = array(
'overview' => true,
'connection_status' => true,
'uptime_monitoring_status' => true,
'recent_posts' => true,
'recent_pages' => true,
'security_issues' => true,
'backup_tasks' => true,
'non_mainwp_changes' => true,
'clients' => true,
'get-started' => true,
);
/**
* Check if there is a session,
* if there isn't one create it.
*
* @return static::singlton Overview Page Session.
*
* @uses \MainWP\Dashboard\MainWP_Overview
*/
public static function get() {
if ( null === static::$instance ) {
static::$instance = new MainWP_Overview();
}
return static::$instance;
}
/**
* MainWP_Overview constructor.
*
* Run each time the class is called.
*/
public function __construct() {
add_filter( 'screen_layout_columns', array( &$this, 'on_screen_layout_columns' ), 10, 2 );
add_action( 'admin_menu', array( &$this, 'on_admin_menu' ) );
add_action( 'mainwp_help_sidebar_content', array( &$this, 'mainwp_help_content' ) );
}
/**
* Set the number of page coumns.
*
* @param mixed $columns Number of Columns.
* @param mixed $screen Screen size.
*
* @return int $columns Number of desired page columns.
*/
public function on_screen_layout_columns( $columns, $screen ) {
if ( $screen === $this->dashBoard ) {
$columns[ $this->dashBoard ] = 3;
}
return $columns;
}
/**
* Add MainWP Overview top level menu.
*
* @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
* @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
*/
public function on_admin_menu() {
if ( MainWP_System_Utility::is_admin() ) {
/**
* Current user global.
*
* @global string
*/
global $current_user;
// The icon in Base64 format.
$icon_base64 = 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNi4zLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCA1MCA1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAgNTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM5Q0EyQTc7fQ0KPC9zdHlsZT4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNSwwLjVDMTEuNDcsMC41LDAuNSwxMS40NywwLjUsMjVjMCwxMy41MywxMC45NywyNC41LDI0LjUsMjQuNVM0OS41LDM4LjUzLDQ5LjUsMjUNCglDNDkuNSwxMS40NywzOC41MywwLjUsMjUsMC41eiBNMjUsNDQuNmwtOC4zMy00LjlsNi4wOS0yNS4wN2MtMS41Ny0wLjgyLTIuNjYtMi40NC0yLjY2LTQuMzNjMC0yLjcxLDIuMTktNC45LDQuOS00LjkNCglzNC45LDIuMTksNC45LDQuOWMwLDEuODktMS4wOSwzLjUyLTIuNjYsNC4zM2w2LjA5LDI1LjA3TDI1LDQ0LjZ6Ii8+DQo8L3N2Zz4NCg==';
// The icon in the data URI scheme.
$icon_data_uri = 'data:image/svg+xml;base64,' . $icon_base64;
delete_user_option( $current_user->ID, 'screen_layout_toplevel_page_mainwp_tab' );
$this->dashBoard = add_menu_page(
'MainWP',
'MainWP',
'read',
'mainwp_tab',
array(
$this,
'on_show_page',
),
$icon_data_uri,
'2.00001'
);
add_submenu_page(
'mainwp_tab',
'MainWP',
__( 'Overview', 'mainwp' ),
'read',
'mainwp_tab',
array(
$this,
'on_show_page',
)
);
$val = get_user_option( 'screen_layout_' . $this->dashBoard );
if ( ! MainWP_Utility::ctype_digit( $val ) ) {
update_user_option( $current_user->ID, 'screen_layout_' . $this->dashBoard, 2, true );
}
add_action( 'load-' . $this->dashBoard, array( &$this, 'on_load_page' ) );
static::init_left_menu();
}
}
/**
* Instantiate the MainWP Overview Menu item.
*
* @uses \MainWP\Dashboard\MainWP_Menu::add_left_menu()
*/
public static function init_left_menu() {
MainWP_Menu::add_left_menu(
array(
'title' => esc_html__( 'Overview', 'mainwp' ),
'parent_key' => 'mainwp_tab',
'slug' => 'mainwp_tab',
'href' => 'admin.php?page=mainwp_tab',
'icon' => '<i class="th large icon"></i>',
),
0
);
}
/**
* Method on_load_page()
*
* Run on page load.
*/
public function on_load_page() {
wp_enqueue_script( 'common' );
wp_enqueue_script( 'wp-lists' );
wp_enqueue_script( 'postbox' );
wp_enqueue_script( 'dashboard' );
wp_enqueue_script( 'widgets' );
static::add_meta_boxes( $this->dashBoard );
}
/**
* Method add_meta_boxes()
*
* Add MainWP Overview Page Widgets.
*
* @param array $page Current page.
*
* @uses \MainWP\Dashboard\MainWP_System_Handler::apply_filters()
* @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
* @uses \MainWP\Dashboard\MainWP_UI::add_widget_box()
* @uses \MainWP\Dashboard\MainWP_Connection_Status::get_class_name()
* @uses \MainWP\Dashboard\MainWP_Recent_Pages::get_class_name()
* @uses \MainWP\Dashboard\MainWP_Recent_Posts::get_class_name()
* @uses \MainWP\Dashboard\MainWP_Security_Issues_Widget::get_class_name()
* @uses \MainWP\Dashboard\MainWP_Updates_Overview::get_class_name()
*/
public static function add_meta_boxes( $page ) { // phpcs:ignore -- NOSONAR - complex method. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
/**
* Get getmetaboxes
*
* Adds metaboxes (widgets) to the Overview page.
*
* @since Unknown
*/
$extMetaBoxs = MainWP_System_Handler::instance()->apply_filters( 'mainwp-getmetaboxes', array() );
$extMetaBoxs = MainWP_System_Handler::instance()->apply_filters( 'mainwp_getmetaboxes', $extMetaBoxs ); // hooks to load widgets for general overview dashboard page.
foreach ( $extMetaBoxs as $box ) {
if ( isset( $box['plugin'] ) ) {
$name = basename( $box['plugin'], '.php' );
static::$enable_widgets[ $name ] = true;
}
}
$values = static::$enable_widgets;
/**
* Unset unwanted Widgets
*
* Contains the list of enabled widgets and allows user to unset unwanted widgets.
*
* @param array $values Array containing enabled widgets.
* @param int $dashboard_siteid Child site (Overview) ID.
*
* @since 4.0
*/
$values = apply_filters( 'mainwp_overview_enabled_widgets', $values, null );
static::$enable_widgets = array_merge( static::$enable_widgets, $values );
// Load the Updates Overview widget.
if ( static::$enable_widgets['overview'] ) {
MainWP_UI::add_widget_box( 'overview', array( MainWP_Updates_Overview::get_class_name(), 'render' ), $page, array( 0, 0, 12, 19 ) );
}
// Load the Clients widget.
if ( static::$enable_widgets['clients'] && \mainwp_current_user_can( 'dashboard', 'manage_clients' ) ) {
MainWP_UI::add_widget_box( 'clients', array( MainWP_Clients::get_class_name(), 'render' ), $page, array( -1, -1, 4, 30 ) );
}
// Load the Non-MainWP Changes widget.
if ( static::$enable_widgets['non_mainwp_changes'] ) {
MainWP_UI::add_widget_box( 'non_mainwp_changes', array( MainWP_Site_Actions::get_class_name(), 'render' ), $page, array( -1, -1, 4, 30 ) );
}
// Load the Connection Status widget.
if ( ! MainWP_System_Utility::get_current_wpid() && static::$enable_widgets['connection_status'] ) {
MainWP_UI::add_widget_box( 'connection_status', array( MainWP_Connection_Status::get_class_name(), 'render' ), $page, array( -1, -1, 4, 30 ) );
}
// Load the Connection Status widget.
if ( MainWP_Uptime_Monitoring_Edit::is_enable_global_monitoring() && ! MainWP_System_Utility::get_current_wpid() && static::$enable_widgets['uptime_monitoring_status'] ) {
MainWP_UI::add_widget_box( 'uptime_monitoring_status', array( MainWP_Uptime_Monitoring_Status::get_class_name(), 'render_status' ), $page, array( -1, -1, 4, 30 ) );
}
// Load the Security Issues widget.
if ( \mainwp_current_user_can( 'dashboard', 'manage_security_issues' ) && static::$enable_widgets['security_issues'] ) {
MainWP_UI::add_widget_box( 'security_issues', array( MainWP_Security_Issues_Widget::get_class_name(), 'render_widget' ), $page, array( -1, -1, 4, 30 ) );
}
// Load the Recent Pages widget.
if ( \mainwp_current_user_can( 'dashboard', 'manage_pages' ) && static::$enable_widgets['recent_pages'] ) {
MainWP_UI::add_widget_box( 'recent_pages', array( MainWP_Recent_Pages::get_class_name(), 'render' ), $page, array( -1, -1, 4, 30 ) );
}
// Load the Recent Posts widget.
if ( \mainwp_current_user_can( 'dashboard', 'manage_posts' ) && static::$enable_widgets['recent_posts'] ) {
MainWP_UI::add_widget_box( 'recent_posts', array( MainWP_Recent_Posts::get_class_name(), 'render' ), $page, array( -1, -1, 4, 30 ) );
}
$i = 1;
foreach ( $extMetaBoxs as $metaBox ) {
$enabled = true;
if ( isset( $metaBox['plugin'] ) ) {
$name = basename( $metaBox['plugin'], '.php' );
if ( isset( static::$enable_widgets[ $name ] ) && ! static::$enable_widgets[ $name ] ) {
$enabled = false;
}
}
$id = isset( $metaBox['id'] ) ? $metaBox['id'] : $i++;
$id = 'advanced-' . $id;
if ( $enabled ) {
MainWP_UI::add_widget_box( $id, $metaBox['callback'], $page, array( -1, -1, 6, 30 ) );
}
}
}
/**
* Method on_show_page()
*
* When the page loads render the body content.
*
* @uses \MainWP\Dashboard\MainWP_UI::render_top_header()
* @uses \MainWP\Dashboard\MainWP_UI::render_second_top_header()
*/
public function on_show_page() {
if ( ! \mainwp_current_user_can( 'dashboard', 'access_global_dashboard' ) ) {
\mainwp_do_not_have_permissions( esc_html__( 'global dashboard', 'mainwp' ) );
return;
}
/**
* Screen layout columns array.
*
* @global object
*/
global $screen_layout_columns;
$params = array(
'title' => esc_html__( 'Overview', 'mainwp' ),
);
MainWP_UI::render_top_header( $params );
MainWP_UI::render_second_top_header();
static::render_dashboard_body();
?>
</div>
<?php
}
/**
* Method render_dashboard_body()
*
* Render the Dashboard Body content.
*
* @param object $websites Object containing child sites info.
*
* @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
* @uses \MainWP\Dashboard\MainWP_System_Utility::get_page_id()
* @uses \MainWP\Dashboard\MainWP_UI::do_widget_boxes()
* @uses \MainWP\Dashboard\MainWP_Utility::show_mainwp_message()
*/
public static function render_dashboard_body( $websites = array() ) {
$current_wp_id = MainWP_System_Utility::get_current_wpid();
$website = null;
if ( ! empty( $current_wp_id ) ) {
$website = $websites[0];
}
$screen = get_current_screen();
MainWP_Demo_Handle::get_instance()->init_data_demo();
static::render_layout_selection();
?>
<div class="mainwp-primary-content-wrap">
<div class="ui segment" style="padding-top:0px;padding-bottom:0px;margin-bottom:0px;">
<div id="mainwp-dashboard-info-box"></div>
<?php
if ( ! empty( $current_wp_id ) && ! empty( $website->sync_errors ) ) {
?>
<div class="ui red message">
<p><?php echo '<strong>' . esc_html( stripslashes( $website->name ) ) . '</strong>' . esc_html__( ' is Disconnected. Click the Reconnect button to establish the connection again.', 'mainwp' ); ?></p>
</div>
<?php
}
?>
<div id="mainwp-message-zone" class="ui message" style="display:none;"></div>
<?php if ( MainWP_Utility::show_mainwp_message( 'notice', 'widgets' ) ) : ?>
<div class="ui info message">
<i class="close icon mainwp-notice-dismiss" notice-id="widgets"></i>
<?php printf( esc_html__( 'To hide or show a widget, click the Cog (%1$s) icon.', 'mainwp' ), '<i class="cog icon"></i>' ); ?>
</div>
<?php endif; ?>
</div>
<?php
/**
* Action: mainwp_before_overview_widgets
*
* Fires at the top of the Overview page (before first widget).
*
* @since 4.1
*/
do_action( 'mainwp_before_overview_widgets', 'dashboard' );
?>
<div id="mainwp-grid-wrapper" class="gridster">
<?php MainWP_UI::do_widget_boxes( $screen->id ); ?>
</div>
<?php
/**
* Action: 'mainwp_after_overview_widgets'
*
* Fires at the bottom of the Overview page (after the last widget).
*
* @since 4.1
*/
do_action( 'mainwp_after_overview_widgets', 'dashboard' );
?>
<script type="text/javascript">
jQuery( document ).ready( function( $ ) {
jQuery( '.mainwp-widget .mainwp-dropdown-tab .item' ).tab();
mainwp_get_icon_start();
} );
</script>
<?php
MainWP_UI::render_modal_upload_icon();
MainWP_Updates::render_plugin_details_modal();
}
/**
* Render layout selection.
*/
public static function render_layout_selection() { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR - complexity.
$screen = get_current_screen();
?>
<div class="mainwp-sub-header ui right aligned segment" id="mainwp-manage-widgets-layout-row">
<?php MainWP_Ui_Manage_Widgets_Layout::render_edit_layout( $screen->id ); ?>
</div>
<?php
MainWP_Ui_Manage_Widgets_Layout::render_modal_save_layout();
}
/**
* Method mainwp_help_content()
*
* Creates the MainWP Help Documentation List for the help component in the sidebar.
*/
public static function mainwp_help_content() {
if ( isset( $_GET['page'] ) && 'mainwp_tab' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
?>
<p><?php esc_html_e( 'If you need help with your MainWP Dashboard, please review following help documents', 'mainwp' ); ?></p>
<div class="ui list">
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/mainwp-user-interface/" target="_blank">Understanding MainWP Dashboard UI</a></div>
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/mainwp-user-interface/#navigation" target="_blank">MainWP Navigation</a></div>
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/mainwp-user-interface/#page-settings" target="_blank">Page Settings</a></div>
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/mainwp-user-interface/#widgetized-page-layout" target="_blank">Widgetized Page Layout</a></div>
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/mainwp-user-interface/#tables" target="_blank">MainWP Tables</a></div>
<div class="item"><i class="external alternate icon"></i> <a href="https://mainwp.com/kb/mainwp-user-interface/#individual-site-mode" target="_blank">Individual Child Site Mode</a></div>
<?php
/**
* Action: mainwp_overview_help_item
*
* Fires at the bottom of the help articles list in the Help sidebar on the Overview page.
*
* Suggested HTML markup:
*
* <div class="item"><a href="Your custom URL">Your custom text</a></div>
*
* @since 4.1
*/
do_action( 'mainwp_overview_help_item' );
?>
</div>
<?php
}
}
}