PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.0.3.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.0.3.2
6.2.2 6.2.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 All 155 releases
mainwp / pages / page-mainwp-overview.php

page-mainwp-overview.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.0.3.2, at pages/page-mainwp-overview.php

465 lines 14.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MainWP Overview Page.
4 *
5 * @package MainWP/Dashboard
6 */
7
8 namespace MainWP\Dashboard;
9
10 /**
11 * Class MainWP_Overview
12 *
13 * @package MainWP\Dashboard
14 */
15 class MainWP_Overview {
16
17 /**
18 * Get Class Name
19 *
20 * @return string __CLASS__
21 */
22 public static function get_class_name() {
23 return __CLASS__;
24 }
25
26 /**
27 * The single instance of the class
28 *
29 * @var mixed Default null
30 */
31 protected static $instance = null;
32
33 /**
34 * Screen dashdoard ID value.
35 *
36 * @var int $dashBoard default 0.
37 */
38 public $dashBoard = 0;
39
40 /**
41 * Enabled widgets
42 *
43 * @var array $enable_widgets
44 */
45 private static $enable_widgets = array(
46 'overview' => true,
47 'connection_status' => true,
48 'recent_posts' => true,
49 'recent_pages' => true,
50 'security_issues' => true,
51 'backup_tasks' => true,
52 'non_mainwp_changes' => true,
53 'clients' => true,
54 'get-started' => true,
55 );
56
57 /**
58 * Check if there is a session,
59 * if there isn't one create it.
60 *
61 * @return self::singlton Overview Page Session.
62 *
63 * @uses \MainWP\Dashboard\MainWP_Overview
64 */
65 public static function get() {
66 if ( null === self::$instance ) {
67 self::$instance = new MainWP_Overview();
68 }
69
70 return self::$instance;
71 }
72
73 /**
74 * MainWP_Overview constructor.
75 *
76 * Run each time the class is called.
77 */
78 public function __construct() {
79 add_filter( 'screen_layout_columns', array( &$this, 'on_screen_layout_columns' ), 10, 2 );
80 add_action( 'admin_menu', array( &$this, 'on_admin_menu' ) );
81 add_action( 'mainwp_help_sidebar_content', array( &$this, 'mainwp_help_content' ) );
82 }
83
84 /**
85 * Set the number of page coumns.
86 *
87 * @param mixed $columns Number of Columns.
88 * @param mixed $screen Screen size.
89 *
90 * @return int $columns Number of desired page columns.
91 */
92 public function on_screen_layout_columns( $columns, $screen ) {
93 if ( $screen === $this->dashBoard ) {
94 $columns[ $this->dashBoard ] = 3;
95 }
96
97 return $columns;
98 }
99
100 /**
101 * Add MainWP Overview top level menu.
102 *
103 * @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
104 * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
105 */
106 public function on_admin_menu() {
107 if ( MainWP_System_Utility::is_admin() ) {
108
109 /**
110 * Current user global.
111 *
112 * @global string
113 */
114 global $current_user;
115
116 // The icon in Base64 format.
117 $icon_base64 = 'PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNi4zLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCA1MCA1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAgNTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM5Q0EyQTc7fQ0KPC9zdHlsZT4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNSwwLjVDMTEuNDcsMC41LDAuNSwxMS40NywwLjUsMjVjMCwxMy41MywxMC45NywyNC41LDI0LjUsMjQuNVM0OS41LDM4LjUzLDQ5LjUsMjUNCglDNDkuNSwxMS40NywzOC41MywwLjUsMjUsMC41eiBNMjUsNDQuNmwtOC4zMy00LjlsNi4wOS0yNS4wN2MtMS41Ny0wLjgyLTIuNjYtMi40NC0yLjY2LTQuMzNjMC0yLjcxLDIuMTktNC45LDQuOS00LjkNCglzNC45LDIuMTksNC45LDQuOWMwLDEuODktMS4wOSwzLjUyLTIuNjYsNC4zM2w2LjA5LDI1LjA3TDI1LDQ0LjZ6Ii8+DQo8L3N2Zz4NCg==';
118
119 // The icon in the data URI scheme.
120 $icon_data_uri = 'data:image/svg+xml;base64,' . $icon_base64;
121
122 delete_user_option( $current_user->ID, 'screen_layout_toplevel_page_mainwp_tab' );
123 $this->dashBoard = add_menu_page(
124 'MainWP',
125 'MainWP',
126 'read',
127 'mainwp_tab',
128 array(
129 $this,
130 'on_show_page',
131 ),
132 $icon_data_uri,
133 '2.00001'
134 );
135
136 if ( mainwp_current_user_have_right( 'dashboard', 'access_global_dashboard' ) ) {
137 add_submenu_page(
138 'mainwp_tab',
139 'MainWP',
140 __( 'Overview', 'mainwp' ),
141 'read',
142 'mainwp_tab',
143 array(
144 $this,
145 'on_show_page',
146 )
147 );
148 }
149
150 $val = get_user_option( 'screen_layout_' . $this->dashBoard );
151 if ( ! MainWP_Utility::ctype_digit( $val ) ) {
152 update_user_option( $current_user->ID, 'screen_layout_' . $this->dashBoard, 2, true );
153 }
154 add_action( 'load-' . $this->dashBoard, array( &$this, 'on_load_page' ) );
155 self::init_left_menu();
156
157 }
158 }
159
160 /**
161 * Instantiate the MainWP Overview Menu item.
162 *
163 * @uses \MainWP\Dashboard\MainWP_Menu::add_left_menu()
164 */
165 public static function init_left_menu() {
166 MainWP_Menu::add_left_menu(
167 array(
168 'title' => esc_html__( 'Overview', 'mainwp' ),
169 'parent_key' => 'mainwp_tab',
170 'slug' => 'mainwp_tab',
171 'href' => 'admin.php?page=mainwp_tab',
172 'icon' => '<i class="th large icon"></i>',
173 ),
174 0
175 );
176 }
177
178 /**
179 * Method on_load_page()
180 *
181 * Run on page load.
182 */
183 public function on_load_page() {
184 wp_enqueue_script( 'common' );
185 wp_enqueue_script( 'wp-lists' );
186 wp_enqueue_script( 'postbox' );
187 wp_enqueue_script( 'dashboard' );
188 wp_enqueue_script( 'widgets' );
189
190 self::add_meta_boxes( $this->dashBoard );
191 }
192
193 /**
194 * Method add_meta_boxes()
195 *
196 * Add MainWP Overview Page Widgets.
197 *
198 * @param array $page Current page.
199 *
200 * @uses \MainWP\Dashboard\MainWP_System_Handler::apply_filters()
201 * @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
202 * @uses \MainWP\Dashboard\MainWP_UI::add_widget_box()
203 * @uses \MainWP\Dashboard\MainWP_Connection_Status::get_class_name()
204 * @uses \MainWP\Dashboard\MainWP_Recent_Pages::get_class_name()
205 * @uses \MainWP\Dashboard\MainWP_Recent_Posts::get_class_name()
206 * @uses \MainWP\Dashboard\MainWP_Security_Issues_Widget::get_class_name()
207 * @uses \MainWP\Dashboard\MainWP_Updates_Overview::get_class_name()
208 */
209 public static function add_meta_boxes( $page ) { // phpcs:ignore -- complex method. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
210
211 /**
212 * Get getmetaboxes
213 *
214 * Adds metaboxes (widgets) to the Overview page.
215 *
216 * @since Unknown
217 */
218 $extMetaBoxs = MainWP_System_Handler::instance()->apply_filters( 'mainwp-getmetaboxes', array() );
219 $extMetaBoxs = MainWP_System_Handler::instance()->apply_filters( 'mainwp_getmetaboxes', $extMetaBoxs ); // hooks to load widgets for general overview dashboard page.
220
221 foreach ( $extMetaBoxs as $box ) {
222 if ( isset( $box['plugin'] ) ) {
223 $name = basename( $box['plugin'], '.php' );
224 self::$enable_widgets[ $name ] = true;
225 }
226 }
227
228 $values = self::$enable_widgets;
229
230 /**
231 * Unset unwanted Widgets
232 *
233 * Contains the list of enabled widgets and allows user to unset unwanted widgets.
234 *
235 * @param array $values Array containing enabled widgets.
236 * @param int $dashboard_siteid Child site (Overview) ID.
237 *
238 * @since 4.0
239 */
240 $values = apply_filters( 'mainwp_overview_enabled_widgets', $values, null );
241 self::$enable_widgets = array_merge( self::$enable_widgets, $values );
242
243 $i = 1;
244 foreach ( $extMetaBoxs as $metaBox ) {
245 $enabled = true;
246 if ( isset( $metaBox['plugin'] ) ) {
247 $name = basename( $metaBox['plugin'], '.php' );
248 if ( isset( self::$enable_widgets[ $name ] ) && ! self::$enable_widgets[ $name ] ) {
249 $enabled = false;
250 }
251 }
252
253 $id = isset( $metaBox['id'] ) ? $metaBox['id'] : $i++;
254 $id = 'advanced-' . $id;
255
256 if ( $enabled ) {
257 if ( 'google-widget' === $id || 'matomo' === $id ) {
258 MainWP_UI::add_widget_box( $id, $metaBox['callback'], $page, array( 1, 1, 4, 18 ) );
259 } else {
260 MainWP_UI::add_widget_box( $id, $metaBox['callback'], $page, array( 1, 1, 4, 11 ) );
261 }
262 }
263 }
264
265 // Load the Updates Overview widget.
266 if ( self::$enable_widgets['get-started'] ) {
267 MainWP_UI::add_widget_box( 'get-started', array( MainWP_Get_Started::get_class_name(), 'render' ), $page, array( 1, 1, 4, 11 ) );
268 }
269
270 // Load the Recent Posts widget.
271 if ( mainwp_current_user_have_right( 'dashboard', 'manage_posts' ) ) {
272 if ( self::$enable_widgets['recent_posts'] ) {
273 MainWP_UI::add_widget_box( 'recent_posts', array( MainWP_Recent_Posts::get_class_name(), 'render' ), $page, array( 1, 1, 6, 11 ) );
274 }
275 }
276
277 // Load the Recent Pages widget.
278 if ( mainwp_current_user_have_right( 'dashboard', 'manage_pages' ) ) {
279 if ( self::$enable_widgets['recent_pages'] ) {
280 MainWP_UI::add_widget_box( 'recent_pages', array( MainWP_Recent_Pages::get_class_name(), 'render' ), $page, array( 1, 1, 6, 11 ) );
281 }
282 }
283
284 // Load the Security Issues widget.
285 if ( mainwp_current_user_have_right( 'dashboard', 'manage_security_issues' ) ) {
286 if ( self::$enable_widgets['security_issues'] ) {
287 MainWP_UI::add_widget_box( 'security_issues', array( MainWP_Security_Issues_Widget::get_class_name(), 'render_widget' ), $page, array( 1, 1, 4, 4 ) );
288 }
289 }
290
291 // Load the Connection Status widget.
292 if ( ! MainWP_System_Utility::get_current_wpid() ) {
293 if ( self::$enable_widgets['connection_status'] ) {
294 MainWP_UI::add_widget_box( 'connection_status', array( MainWP_Connection_Status::get_class_name(), 'render' ), $page, array( 1, 1, 4, 5 ) );
295 }
296 }
297
298 // Load the Non-MainWP Changes widget.
299 if ( self::$enable_widgets['non_mainwp_changes'] ) {
300 MainWP_UI::add_widget_box( 'non_mainwp_changes', array( MainWP_Site_Actions::get_class_name(), 'render' ), $page, array( 1, 1, 4, 18 ) );
301 }
302
303 // Load the Clients widget.
304 if ( self::$enable_widgets['clients'] ) {
305 MainWP_UI::add_widget_box( 'clients', array( MainWP_Clients::get_class_name(), 'render' ), $page, array( 1, 1, 4, 9 ) );
306 }
307
308 // Load the Updates Overview widget.
309 if ( self::$enable_widgets['overview'] ) {
310 MainWP_UI::add_widget_box( 'overview', array( MainWP_Updates_Overview::get_class_name(), 'render' ), $page, array( 1, 1, 4, 18 ) );
311 }
312 }
313
314 /**
315 * Method on_show_page()
316 *
317 * When the page loads render the body content.
318 *
319 * @uses \MainWP\Dashboard\MainWP_UI::render_top_header()
320 * @uses \MainWP\Dashboard\MainWP_UI::render_second_top_header()
321 */
322 public function on_show_page() {
323 if ( ! mainwp_current_user_have_right( 'dashboard', 'access_global_dashboard' ) ) {
324 mainwp_do_not_have_permissions( esc_html__( 'global dashboard', 'mainwp' ) );
325 return;
326 }
327
328 /**
329 * Screen layout columns array.
330 *
331 * @global object
332 */
333 global $screen_layout_columns;
334
335 $params = array(
336 'title' => esc_html__( 'Overview', 'mainwp' ),
337 );
338
339 MainWP_UI::render_top_header( $params );
340
341 MainWP_UI::render_second_top_header();
342
343 self::render_dashboard_body();
344 ?>
345 </div>
346 <?php
347 }
348
349
350 /**
351 * Method render_dashboard_body()
352 *
353 * Render the Dashboard Body content.
354 *
355 * @param object $websites Object containing child sites info.
356 *
357 * @uses \MainWP\Dashboard\MainWP_System_Utility::get_current_wpid()
358 * @uses \MainWP\Dashboard\MainWP_System_Utility::get_page_id()
359 * @uses \MainWP\Dashboard\MainWP_UI::do_widget_boxes()
360 * @uses \MainWP\Dashboard\MainWP_Utility::show_mainwp_message()
361 */
362 public static function render_dashboard_body( $websites = array() ) {
363 $current_wp_id = MainWP_System_Utility::get_current_wpid();
364 $website = null;
365 if ( ! empty( $current_wp_id ) ) {
366 $website = $websites[0];
367 }
368 $screen = get_current_screen();
369
370 MainWP_Demo_Handle::get_instance()->init_data_demo();
371 ?>
372 <div class="mainwp-primary-content-wrap">
373 <div class="ui segment" style="padding-top:0px;padding-bottom:0px;margin-bottom:0px;">
374 <div id="mainwp-dashboard-info-box"></div>
375 <?php
376 if ( ! empty( $current_wp_id ) ) {
377 if ( ! empty( $website->sync_errors ) ) {
378 ?>
379 <div class="ui red message">
380 <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>
381 </div>
382 <?php
383 }
384 }
385 ?>
386 <div id="mainwp-message-zone" class="ui message" style="display:none;"></div>
387 <?php if ( MainWP_Utility::show_mainwp_message( 'notice', 'widgets' ) ) : ?>
388 <div class="ui info message">
389 <i class="close icon mainwp-notice-dismiss" notice-id="widgets"></i>
390 <?php printf( esc_html__( 'To hide or show a widget, click the Cog (%1$s) icon.', 'mainwp' ), '<i class="cog icon"></i>' ); ?>
391 </div>
392 <?php endif; ?>
393 </div>
394 <?php
395 /**
396 * Action: mainwp_before_overview_widgets
397 *
398 * Fires at the top of the Overview page (before first widget).
399 *
400 * @since 4.1
401 */
402 do_action( 'mainwp_before_overview_widgets', 'dashboard' );
403 ?>
404 <div id="mainwp-grid-wrapper" class="gridster">
405 <?php MainWP_UI::do_widget_boxes( $screen->id ); ?>
406 </div>
407 <?php
408 /**
409 * Action: 'mainwp_after_overview_widgets'
410 *
411 * Fires at the bottom of the Overview page (after the last widget).
412 *
413 * @since 4.1
414 */
415 do_action( 'mainwp_after_overview_widgets', 'dashboard' );
416 ?>
417 <script type="text/javascript">
418 jQuery( document ).ready( function( $ ) {
419 jQuery( '.mainwp-widget .mainwp-dropdown-tab .item' ).tab();
420 mainwp_get_icon_start();
421 } );
422 </script>
423 <?php
424 MainWP_UI::render_modal_upload_icon();
425 MainWP_Updates::render_plugin_details_modal();
426 }
427
428 /**
429 * Method mainwp_help_content()
430 *
431 * Hook the section help content to the Help Sidebar element
432 *
433 * @return void
434 */
435 public static function mainwp_help_content() {
436 if ( isset( $_GET['page'] ) && 'mainwp_tab' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
437 ?>
438 <p><?php esc_html_e( 'If you need help with your MainWP Dashboard, please review following help documents', 'mainwp' ); ?></p>
439 <div class="ui relaxed bulleted list">
440 <div class="item"><a href="https://kb.mainwp.com/docs/understanding-mainwp-dashboard-user-interface/" target="_blank">Understanding MainWP Dashboard UI</a> <i class="external alternate icon"></i></div>
441 <div class="item"><a href="https://kb.mainwp.com/docs/mainwp-navigation/" target="_blank">MainWP Navigation</a> <i class="external alternate icon"></i></div>
442 <div class="item"><a href="https://kb.mainwp.com/docs/screen-options/" target="_blank">Page Settings</a> <i class="external alternate icon"></i></div>
443 <div class="item"><a href="https://kb.mainwp.com/docs/mainwp-dashboard/" target="_blank">MainWP Dashboard</a> <i class="external alternate icon"></i></div>
444 <div class="item"><a href="https://kb.mainwp.com/docs/mainwp-tables/" target="_blank">MainWP Tables</a> <i class="external alternate icon"></i></div>
445 <div class="item"><a href="https://kb.mainwp.com/docs/individual-child-site-mode/" target="_blank">Individual Child Site Mode</a> <i class="external alternate icon"></i></div>
446 <?php
447 /**
448 * Action: mainwp_overview_help_item
449 *
450 * Fires at the bottom of the help articles list in the Help sidebar on the Overview page.
451 *
452 * Suggested HTML markup:
453 *
454 * <div class="item"><a href="Your custom URL">Your custom text</a></div>
455 *
456 * @since 4.1
457 */
458 do_action( 'mainwp_overview_help_item' );
459 ?>
460 </div>
461 <?php
462 }
463 }
464 }
465