PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 4.4.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v4.4.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-menu.php

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

695 lines 21.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MainWP Main Menu
4 *
5 * Build & Render MainWP Main Menu.
6 *
7 * @package MainWP/Dashboard
8 */
9
10 namespace MainWP\Dashboard;
11
12 /**
13 * Class MainWP_Menu
14 *
15 * @package MainWP\Dashboard
16 */
17 class MainWP_Menu {
18
19 /**
20 * Method get_class_name()
21 *
22 * Get Class Name.
23 *
24 * @return object
25 */
26 public static function get_class_name() {
27 return __CLASS__;
28 }
29
30 /**
31 * MainWP_Menu constructor.
32 *
33 * Run each time the class is called.
34 * Define MainWP Main Menu Items.
35 */
36 public function __construct() {
37
38 /**
39 * MainWP Disable Menus items array.
40 *
41 * @global object
42 */
43 global $_mainwp_disable_menus_items;
44
45 // Init disable menu items, default is false.
46 // Use the MainWP Hook 'mainwp_main_menu_disable_menu_items' to disable menu items.
47 if ( null === $_mainwp_disable_menus_items ) {
48 $_mainwp_disable_menus_items = array(
49 // Compatible with old hooks.
50 'level_1' => array(
51 'not_set_this_level' => true,
52 ),
53 'level_2' => array(
54 // 'mainwp_tab' - Do not hide this menu.
55 'UpdatesManage' => false,
56 'managesites' => false,
57 'ManageClients' => false,
58 'ManageGroups' => false,
59 'PostBulkManage' => false,
60 'PageBulkManage' => false,
61 'ThemesManage' => false,
62 'PluginsManage' => false,
63 'UserBulkManage' => false,
64 'ManageBackups' => false,
65 'Settings' => false,
66 'Extensions' => false,
67 'ServerInformation' => false,
68 ),
69 // Compatible with old hooks.
70 'level_3' => array(),
71 );
72 }
73 }
74
75 /**
76 * Method init_mainwp_menus()
77 *
78 * Init MainWP menus.
79 *
80 * @uses \MainWP\Dashboard\MainWP_System_Utility::is_admin()
81 * @uses \MainWP\Dashboard\MainWP_Updates::init_menu()
82 * @uses \MainWP\Dashboard\MainWP_Manage_Sites::init_menu()
83 * @uses \MainWP\Dashboard\MainWP_Post::init_menu()
84 * @uses \MainWP\Dashboard\MainWP_Page::init_menu()
85 * @uses \MainWP\Dashboard\MainWP_Themes::init_menu()
86 * @uses \MainWP\Dashboard\MainWP_Plugins::init_menu()
87 * @uses \MainWP\Dashboard\MainWP_User::init_menu()
88 * @uses \MainWP\Dashboard\MainWP_Manage_Backups::init_menu()
89 * @uses \MainWP\Dashboard\MainWP_Manage_Groups::init_menu()
90 * @uses \MainWP\Dashboard\MainWP_Monitoring::init_menu()
91 * @uses \MainWP\Dashboard\MainWP_Settings::init_menu()
92 * @uses \MainWP\Dashboard\MainWP_Extensions::init_menu()
93 * @uses \MainWP\Dashboard\MainWP_Bulk_Update_Admin_Passwords::init_menu()
94 */
95 public static function init_mainwp_menus() { // phpcs:ignore -- complex method. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
96 if ( MainWP_System_Utility::is_admin() ) {
97
98 // Manage Sites.
99 if ( ! self::is_disable_menu_item( 2, 'managesites' ) ) {
100 if ( mainwp_current_user_have_right( 'dashboard', 'add_sites' ) || mainwp_current_user_have_right( 'dashboard', 'edit_sites' ) || mainwp_current_user_have_right( 'dashboard', 'delete_sites' ) || mainwp_current_user_have_right( 'dashboard', 'access_individual_dashboard' ) || mainwp_current_user_have_right( 'dashboard', 'access_wpadmin_on_child_sites' ) || mainwp_current_user_have_right( 'dashboard', 'manage_security_issues' ) && mainwp_current_user_have_right( 'dashboard', 'test_connection' ) || mainwp_current_user_have_right( 'dashboard', 'manage_groups' ) ) {
101 MainWP_Manage_Sites::init_menu();
102 }
103 }
104
105 // Manage Clients.
106 if ( ! self::is_disable_menu_item( 2, 'ManageClients' ) ) {
107 if ( mainwp_current_user_have_right( 'dashboard', 'manage_clients' ) ) {
108 MainWP_Client::init_menu();
109 }
110 }
111
112 // Manage Tags.
113 if ( ! self::is_disable_menu_item( 2, 'ManageGroups' ) ) {
114 if ( mainwp_current_user_have_right( 'dashboard', 'manage_groups' ) ) {
115 MainWP_Manage_Groups::init_menu();
116 }
117 }
118
119 // Manage Updates.
120 if ( ! self::is_disable_menu_item( 2, 'UpdatesManage' ) ) {
121 if ( mainwp_current_user_have_right( 'dashboard', 'update_wordpress' ) || mainwp_current_user_have_right( 'dashboard', 'update_plugins' ) || mainwp_current_user_have_right( 'dashboard', 'update_themes' ) || mainwp_current_user_have_right( 'dashboard', 'update_translations' ) || mainwp_current_user_have_right( 'dashboard', 'ignore_unignore_updates' ) || mainwp_current_user_have_right( 'dashboard', 'trust_untrust_updates' ) ) {
122 MainWP_Updates::init_menu();
123 }
124 }
125
126 // Manage Plugins.
127 if ( ! self::is_disable_menu_item( 2, 'PluginsManage' ) ) {
128 if ( mainwp_current_user_have_right( 'dashboard', 'install_plugins' ) || mainwp_current_user_have_right( 'dashboard', 'delete_plugins' ) || mainwp_current_user_have_right( 'dashboard', 'activate_deactivate_plugins' ) ) {
129 MainWP_Plugins::init_menu();
130 }
131 }
132
133 // Manage Themes.
134 if ( ! self::is_disable_menu_item( 2, 'ThemesManage' ) ) {
135 if ( mainwp_current_user_have_right( 'dashboard', 'install_themes' ) || mainwp_current_user_have_right( 'dashboard', 'delete_themes' ) || mainwp_current_user_have_right( 'dashboard', 'activate_deactivate_themes' ) ) {
136 MainWP_Themes::init_menu();
137 }
138 }
139
140 // Manage Users.
141 if ( ! self::is_disable_menu_item( 2, 'UserBulkManage' ) ) {
142 if ( mainwp_current_user_have_right( 'dashboard', 'manage_users' ) ) {
143 MainWP_User::init_menu();
144 }
145 }
146
147 // Manage Posts.
148 if ( ! self::is_disable_menu_item( 2, 'PostBulkManage' ) ) {
149 if ( mainwp_current_user_have_right( 'dashboard', 'manage_posts' ) ) {
150 MainWP_Post::init_menu();
151 }
152 }
153
154 // Manage Pages.
155 if ( ! self::is_disable_menu_item( 2, 'PageBulkManage' ) ) {
156 if ( mainwp_current_user_have_right( 'dashboard', 'manage_pages' ) ) {
157 MainWP_Page::init_menu();
158 }
159 }
160
161 // Manage Backups.
162 if ( ! self::is_disable_menu_item( 2, 'ManageBackups' ) ) {
163 MainWP_Manage_Backups::init_menu();
164 }
165
166 // Monitoring Sites.
167 if ( ! self::is_disable_menu_item( 3, 'Extensions' ) ) {
168 if ( mainwp_current_user_have_right( 'dashboard', 'manage_extensions' ) ) {
169 MainWP_Extensions::init_menu();
170 }
171 }
172
173 // Manage Settings.
174 if ( ! self::is_disable_menu_item( 2, 'Settings' ) ) {
175 if ( mainwp_current_user_have_right( 'dashboard', 'manage_dashboard_settings' ) ) {
176 MainWP_Settings::init_menu();
177 }
178 }
179
180 // Manage Admin Passwords.
181 if ( ! self::is_disable_menu_item( 3, 'UpdateAdminPasswords' ) ) {
182 if ( mainwp_current_user_have_right( 'dashboard', 'manage_users' ) ) {
183 MainWP_Bulk_Update_Admin_Passwords::init_menu();
184 }
185 }
186
187 // Monitoring Sites.
188 if ( ! self::is_disable_menu_item( 3, 'MonitoringSites' ) ) {
189 MainWP_Monitoring::init_menu();
190 }
191
192 /**
193 * Action: mainwp_admin_menu
194 *
195 * Hooks main navigation menu items.
196 *
197 * @since 4.0
198 */
199 do_action( 'mainwp_admin_menu' );
200
201 if ( ! self::is_disable_menu_item( 2, 'ServerInformation' ) ) {
202 if ( mainwp_current_user_have_right( 'dashboard', 'see_server_information' ) ) {
203 MainWP_Server_Information::init_menu();
204 }
205 }
206 }
207 }
208
209 /**
210 * Method init_sub_pages()
211 *
212 * Init subpages MainWP menus.
213 *
214 * @uses \MainWP\Dashboard\MainWP_Extensions::init_subpages_menu()
215 * @uses \MainWP\Dashboard\MainWP_Manage_Backups::init_subpages_menu()
216 * @uses \MainWP\Dashboard\MainWP_Manage_Sites::init_subpages_menu()
217 * @uses \MainWP\Dashboard\MainWP_Page::init_subpages_menu()
218 * @uses \MainWP\Dashboard\MainWP_Post::init_subpages_menu()
219 * @uses \MainWP\Dashboard\MainWP_Settings::init_subpages_menu()
220 * @uses \MainWP\Dashboard\MainWP_Themes::init_subpages_menu()
221 * @uses \MainWP\Dashboard\MainWP_Themes::init_subpages_menu()
222 * @uses \MainWP\Dashboard\MainWP_Plugins::init_subpages_menu()
223 * @uses \MainWP\Dashboard\MainWP_User::init_subpages_menu()
224 * @uses \MainWP\Dashboard\MainWP_Settings::init_subpages_menu()
225 */
226 public static function init_sub_pages() {
227
228 if ( ! self::is_disable_menu_item( 2, 'PostBulkManage' ) ) {
229 MainWP_Post::init_subpages_menu();
230 }
231 if ( ! self::is_disable_menu_item( 2, 'managesites' ) ) {
232 MainWP_Manage_Sites::init_subpages_menu();
233 }
234
235 if ( ! self::is_disable_menu_item( 2, 'Settings' ) ) {
236 MainWP_Settings::init_subpages_menu();
237 }
238
239 if ( ! self::is_disable_menu_item( 2, 'Extensions' ) ) {
240 MainWP_Extensions::init_subpages_menu();
241 }
242 if ( ! self::is_disable_menu_item( 2, 'PageBulkManage' ) ) {
243 MainWP_Page::init_subpages_menu();
244 }
245 if ( ! self::is_disable_menu_item( 2, 'ThemesManage' ) ) {
246 MainWP_Themes::init_subpages_menu();
247 }
248 if ( ! self::is_disable_menu_item( 2, 'PluginsManage' ) ) {
249 MainWP_Plugins::init_subpages_menu();
250 }
251 if ( ! self::is_disable_menu_item( 2, 'UserBulkManage' ) ) {
252 MainWP_User::init_subpages_menu();
253 }
254 if ( ! self::is_disable_menu_item( 2, 'ManageClients' ) ) {
255 MainWP_Client::init_subpages_menu();
256 }
257 if ( get_option( 'mainwp_enableLegacyBackupFeature' ) ) {
258 if ( ! self::is_disable_menu_item( 2, 'ManageBackups' ) ) {
259 MainWP_Manage_Backups::init_subpages_menu();
260 }
261 }
262 if ( ! self::is_disable_menu_item( 2, 'Settings' ) ) {
263 MainWP_Settings::init_subpages_menu();
264 }
265
266 /**
267 * Action: mainwp_admin_menu_sub
268 *
269 * Hooks main navigation sub-menu items.
270 *
271 * @since 4.0
272 */
273 do_action( 'mainwp_admin_menu_sub' );
274
275 if ( ! self::is_disable_menu_item( 2, 'ServerInformation' ) ) {
276 MainWP_Server_Information::init_subpages_menu();
277 }
278 }
279
280
281 /**
282 * Method init_subpages_left_menu
283 *
284 * Build left menu subpages array.
285 *
286 * @param array $subPages Array of SubPages.
287 * @param array $initSubpage Initial SubPage Array.
288 * @param string $parentKey Parent Menu Slug.
289 * @param mixed $slug SubPage Slug.
290 */
291 public static function init_subpages_left_menu( $subPages, &$initSubpage, $parentKey, $slug ) {
292
293 if ( ! is_array( $subPages ) ) {
294 $subPages = array();
295 }
296
297 $subPages = apply_filters( 'mainwp_subpages_left_menu', $subPages, $initSubpage, $parentKey, $slug );
298
299 foreach ( $subPages as $subPage ) {
300 if ( ! isset( $subPage['menu_hidden'] ) || ( isset( $subPage['menu_hidden'] ) && true != $subPage['menu_hidden'] ) ) {
301 $_item = array(
302 'title' => $subPage['title'],
303 'parent_key' => $parentKey,
304 'href' => 'admin.php?page=' . $slug . $subPage['slug'],
305 'slug' => $slug . $subPage['slug'],
306 'right' => '',
307 );
308
309 // To support check right to open menu for sometime.
310 if ( isset( $subPage['item_slug'] ) ) {
311 $_item['item_slug'] = $subPage['item_slug'];
312 }
313
314 if ( isset( $subPage['href'] ) && ! empty( $subPage['href'] ) ) { // override href.
315 $_item['href'] = $subPage['href'];
316 }
317
318 $initSubpage[] = $_item;
319 }
320 }
321 }
322
323 /**
324 * Method is_disable_menu_item
325 *
326 * Check if $_mainwp_disable_menus_items contains any menu items to hide.
327 *
328 * @param string $level The level the menu item is on.
329 * @param array $item The menu items meta data.
330 *
331 * @return bool True|False, default is False.
332 */
333 public static function is_disable_menu_item( $level, $item ) {
334
335 /**
336 * MainWP Disable Menus items array.
337 *
338 * @global object
339 */
340 global $_mainwp_disable_menus_items;
341 $disabled = false;
342 $_level = 'level_' . $level;
343 if ( is_array( $_mainwp_disable_menus_items ) && isset( $_mainwp_disable_menus_items[ $_level ] ) && isset( $_mainwp_disable_menus_items[ $_level ][ $item ] ) ) {
344 $disabled = $_mainwp_disable_menus_items[ $_level ][ $item ];
345 }
346 $disabled = apply_filters( 'mainwp_is_disable_menu_item', $disabled, $level, $item );
347 $_mainwp_disable_menus_items[ $_level ][ $item ] = $disabled;
348 return $disabled;
349 }
350
351 /**
352 * Method add_left_menu
353 *
354 * Build Top Level Menu
355 *
356 * @param array $params Menu Item parameters.
357 * @param integer $level Menu Item Level 1 or 2.
358 *
359 * @return array $mainwp_leftmenu[] | $mainwp_sub_leftmenu[].
360 */
361 public static function add_left_menu( $params = array(), $level = 1 ) {
362
363 if ( empty( $params ) ) {
364 return;
365 }
366
367 if ( 1 != $level && 2 != $level ) {
368 $level = 1;
369 }
370
371 $title = $params['title'];
372
373 if ( 1 === $level ) {
374 $parent_key = 'mainwp_tab'; // forced value.
375 } else {
376 if ( isset( $params['parent_key'] ) ) {
377 $parent_key = $params['parent_key'];
378 } else {
379 $parent_key = 'mainwp_tab'; // forced value.
380 }
381 }
382
383 $slug = $params['slug'];
384 $href = $params['href'];
385 $right = isset( $params['right'] ) ? $params['right'] : '';
386 $id = isset( $params['id'] ) ? $params['id'] : '';
387
388 /**
389 * MainWP Left Menu, Sub Menu & Active menu slugs.
390 *
391 * @global object $mainwp_leftmenu
392 * @global object $mainwp_sub_leftmenu
393 * @global object $_mainwp_menu_active_slugs
394 */
395 global $mainwp_leftmenu, $mainwp_sub_leftmenu, $_mainwp_menu_active_slugs;
396
397 $title = esc_html( $title );
398
399 if ( 1 == $level ) {
400 $mainwp_leftmenu[ $parent_key ][] = array( $title, $slug, $href, $id );
401 if ( ! empty( $slug ) ) {
402 $_mainwp_menu_active_slugs[ $slug ] = $slug; // to get active menu.
403 }
404 } elseif ( 2 == $level ) {
405 $mainwp_sub_leftmenu[ $parent_key ][] = array( $title, $href, $right, $id );
406 if ( ! empty( $slug ) ) {
407 $_mainwp_menu_active_slugs[ $slug ] = $parent_key; // to get active menu.
408 }
409 }
410 }
411
412 /**
413 * Method render_left_menu
414 *
415 * Build Top Level Main Menu HTML & Render.
416 */
417 public static function render_left_menu() { // phpcs:ignore -- Current complexity is the only way to achieve desired results, pull request solutions appreciated.
418
419 /**
420 * MainWP Left Menu, Sub Menu & Active menu slugs.
421 *
422 * @global object $mainwp_leftmenu
423 * @global object $mainwp_sub_leftmenu
424 * @global object $_mainwp_menu_active_slugs
425 */
426 global $mainwp_leftmenu, $mainwp_sub_leftmenu, $_mainwp_menu_active_slugs, $plugin_page;
427
428 /**
429 * Filter: mainwp_main_menu
430 *
431 * Filters main navigation menu items
432 *
433 * @since 4.0
434 */
435 $mainwp_leftmenu = apply_filters( 'mainwp_main_menu', $mainwp_leftmenu );
436
437 /**
438 * Filter: mainwp_main_menu_submenu
439 *
440 * Filters main navigation subt-menu items
441 *
442 * @since 4.0
443 */
444 $mainwp_sub_leftmenu = apply_filters( 'mainwp_main_menu_submenu', $mainwp_sub_leftmenu );
445
446 $mainwp_leftmenu = isset( $mainwp_leftmenu['mainwp_tab'] ) ? $mainwp_leftmenu['mainwp_tab'] : array();
447
448 $version = get_option( 'mainwp_plugin_version' );
449
450 ?>
451 <div class="mainwp-nav-wrap">
452 <div id="mainwp-logo">
453 <a href="
454 <?php
455 /**
456 * Filter: mainwp_menu_logo_href
457 *
458 * Filters the Logo link.
459 *
460 * @since 4.1.4
461 */
462 echo apply_filters( 'mainwp_menu_logo_href', admin_url( 'admin.php?page=mainwp_tab' ) );
463 ?>
464 ">
465 <img src="
466 <?php
467 /**
468 * Filter: mainwp_menu_logo_src
469 *
470 * Filters the Logo src attribute.
471 *
472 * @since 4.1
473 */
474 echo apply_filters( 'mainwp_menu_logo_src', MAINWP_PLUGIN_URL . 'assets/images/logo.png' );
475 ?>
476 " alt="
477 <?php
478 /**
479 * Filter: mainwp_menu_logo_alt
480 *
481 * Filters the Logo alt attribute.
482 *
483 * @since 4.1
484 */
485 echo apply_filters( 'mainwp_menu_logo_alt', 'MainWP' );
486 ?>
487 " />
488 </a>
489 <span id="mainwp-version-label" class="ui mini green right ribbon label"><?php echo esc_html__( 'V. ', 'mainwp' ); ?> <?php echo $version; ?></span>
490 </div>
491 <div class="ui hidden divider"></div>
492 <div class="mainwp-nav-menu">
493 <?php
494 /**
495 * Action: before_mainwp_menu
496 *
497 * Fires before the main navigation element.
498 *
499 * @since 4.0
500 */
501 do_action( 'before_mainwp_menu' );
502 ?>
503 <div id="mainwp-main-menu" class="ui inverted vertical accordion menu stackable">
504 <?php
505 if ( is_array( $mainwp_leftmenu ) && ! empty( $mainwp_leftmenu ) ) {
506 foreach ( $mainwp_leftmenu as $item ) {
507 $title = wptexturize( $item[0] );
508 $item_key = $item[1];
509 $href = $item[2];
510 $item_id = isset( $item[3] ) ? $item[3] : '';
511
512 $has_sub = true;
513 if ( ! isset( $mainwp_sub_leftmenu[ $item_key ] ) || empty( $mainwp_sub_leftmenu[ $item_key ] ) ) {
514 $has_sub = false;
515 }
516 $active_item = '';
517 $set_actived = false;
518 // to fix active menu.
519 if ( ! $set_actived ) {
520 if ( isset( $_mainwp_menu_active_slugs[ $plugin_page ] ) ) {
521 if ( $item_key == $_mainwp_menu_active_slugs[ $plugin_page ] ) {
522 $active_item = 'active';
523 $set_actived = true;
524 }
525 }
526 }
527
528 $id_attr = ! empty( $item_id ) ? 'id="' . esc_html( $item_id ) . '"' : '';
529
530 if ( $has_sub ) {
531 echo '<div ' . $id_attr . " class=\"item $active_item\">";
532 echo "<a class=\"title with-sub $active_item\" href=\"$href\"><b>$title</b> <i class=\"dropdown icon\"></i></a>";
533 echo "<div class=\"content menu $active_item\">";
534 self::render_sub_item( $item_key );
535 echo '</div>';
536 echo '</div>';
537 } else {
538 echo '<div ' . $id_attr . ' class="item">';
539 echo "<a class='title $active_item' href=\"$href\"><b>$title</b></a>";
540 echo '</div>';
541 }
542 }
543 } else {
544 echo "\n\t<div class='item'>";
545 echo '</div>';
546 }
547
548 $go_back_wpadmin_url = admin_url( 'index.php' );
549
550 $link = array(
551 'url' => $go_back_wpadmin_url,
552 'text' => esc_html__( 'WP Admin', 'mainwp' ),
553 'tip' => esc_html__( 'Click to go back to the site WP Admin area.', 'mainwp' ),
554 );
555
556 /**
557 * Filter: mainwp_go_back_wpadmin_link
558 *
559 * Filters URL for the Go to WP Admin button in Main navigation.
560 *
561 * @since 4.0
562 */
563 $go_back_link = apply_filters( 'mainwp_go_back_wpadmin_link', $link );
564
565 if ( false !== $go_back_link ) {
566 if ( is_array( $go_back_link ) ) {
567 if ( isset( $go_back_link['url'] ) ) {
568 $link['url'] = $go_back_link['url'];
569 }
570 if ( isset( $go_back_link['text'] ) ) {
571 $link['text'] = $go_back_link['text'];
572 }
573 if ( isset( $go_back_link['tip'] ) ) {
574 $link['tip'] = $go_back_link['tip'];
575 }
576 }
577 ?>
578 <div class="item item-wp-admin">
579 <a href="<?php echo esc_html( $link['url'] ); ?>" class="title" style="display:inline" data-position="top left" data-tooltip="<?php echo esc_html( $link['tip'] ); ?>"><b><i class="icon wordpress"></i> <?php echo esc_html( $link['text'] ); ?></b></a> <a class="ui small label" data-position="top right" data-tooltip="<?php esc_html_e( 'Logout', 'mainwp' ); ?>" href="<?php echo wp_logout_url(); ?>"><i class="sign out icon" style="margin:0"></i></a> <?php //phpcs:ignore -- to avoid auto fix icon wordpress ?>
580 </div>
581 <?php } ?>
582 <div class="hamburger">
583 <span class="hamburger-bun"></span>
584 <span class="hamburger-patty"></span>
585 <span class="hamburger-bun"></span>
586 </div>
587 </div>
588 <?php
589 /**
590 * Action: after_mainwp_menu
591 *
592 * Fires after the main navigation element.
593 *
594 * @since 4.0
595 */
596 do_action( 'after_mainwp_menu' );
597 ?>
598 </div>
599 </div>
600 <script type="text/javascript">
601 jQuery( document ).ready( function () {
602 // click on menu with-sub icon.
603 jQuery( '.mainwp-nav-menu a.title.with-sub .icon' ).on( "click", function ( event ) {
604 var pr = jQuery( this ).closest( '.item' );
605 var title = jQuery( this ).closest( '.title' );
606 var active = jQuery( title ).hasClass( 'active' );
607
608 // remove current active.
609 mainwp_menu_collapse();
610
611 // if current menu item are not active then set it active.
612 if ( !active ) {
613 jQuery( title ).addClass( 'active' );
614 jQuery( pr ).find('.content.menu').addClass( 'active' );
615 pr.addClass('active');
616 }
617 return false;
618 } );
619
620 jQuery( '.mainwp-nav-menu a.title.with-sub' ).on( "click", function ( event ) {
621 var pr = jQuery( this ).closest( '.item' );
622 var active = jQuery( this ).hasClass( 'active' );
623
624 // remove current active.
625 mainwp_menu_collapse();
626
627 // set active before go to the page.
628 if ( !active ) {
629 jQuery( this ).addClass( 'active' );
630 jQuery( pr ).find('.content.menu').addClass( 'active' );
631 pr.addClass('active');
632 }
633 } );
634
635 mainwp_menu_collapse = function() {
636 // remove current active.
637 jQuery( '.mainwp-nav-menu a.title.active').removeClass('active');
638 jQuery( '.mainwp-nav-menu .menu .item').removeClass('active');
639 jQuery( '.mainwp-nav-menu .content.menu.active').removeClass('active');
640 };
641 } );
642 </script>
643 <?php
644 }
645
646 /**
647 * Method render_sub_item
648 *
649 * Grab all submenu items and attatch to Main Menu.
650 *
651 * @param mixed $parent_key The parent key.
652 */
653 public static function render_sub_item( $parent_key ) {
654 if ( empty( $parent_key ) ) {
655 return;
656 }
657
658 /**
659 * MainWP Left Menu.
660 *
661 * @global object $mainwp_sub_leftmenu
662 */
663 global $mainwp_sub_leftmenu;
664
665 $submenu_items = $mainwp_sub_leftmenu[ $parent_key ];
666
667 if ( ! is_array( $submenu_items ) || count( $submenu_items ) == 0 ) {
668 return;
669 }
670
671 foreach ( $submenu_items as $sub_key => $sub_item ) {
672 $title = $sub_item[0];
673 $href = $sub_item[1];
674 $right = $sub_item[2];
675 $_blank = isset( $sub_item[3] ) ? $sub_item[3] : '';
676
677 $right_group = 'dashboard';
678 if ( ! empty( $right ) ) {
679 if ( strpos( $right, 'extension_' ) === 0 ) {
680 $right_group = 'extension';
681 $right = str_replace( 'extension_', '', $right );
682 }
683 }
684 if ( empty( $right ) || ( ! empty( $right ) && mainwp_current_user_have_right( $right_group, $right ) ) ) {
685 ?>
686 <a class="item" href="<?php echo esc_url( $href ); ?>" <?php echo '_blank' == $_blank ? 'target="_blank"' : ''; ?>>
687 <?php echo esc_html( $title ); ?>
688 </a>
689 <?php
690 }
691 }
692 }
693
694 }
695