PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.0.4
Adminify – White Label, Admin Menu Editor, Login Customizer v3.0.4
4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.1.17 All 164 releases
adminify / Inc / Classes / MenuStyles / VerticalMainMenu.php

VerticalMainMenu.php in Adminify – White Label, Admin Menu Editor, Login Customizer 3.0.4, at Inc/Classes/MenuStyles/VerticalMainMenu.php

621 lines 21.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPAdminify\Inc\Classes\MenuStyles;
4
5 use WPAdminify\Inc\Utils;
6 use WPAdminify\Inc\Admin\AdminSettings;
7 use WPAdminify\Inc\Classes\MenuStyles\MenuStyleBase;
8 use WPAdminify\Inc\Modules\MenuEditor\MenuEditorOptions;
9
10 // no direct access allowed
11 if (!defined('ABSPATH')) exit;
12
13 class VerticalMainMenu extends MenuStyleBase
14 {
15 protected $options;
16
17 public function __construct()
18 {
19 parent::__construct();
20 $this->menu_settings = (new MenuEditorOptions())->get();
21 $this->options = (array) AdminSettings::get_instance()->get();
22
23 add_filter('admin_body_class', [$this, 'admin_menu_body_class']);
24
25 if (empty($this->options['admin_ui'])) {
26 return;
27 }
28
29 add_filter('parent_file', [$this, 'render_adminify_admin_menu'], 999);
30 add_action('adminmenu', [$this, 'render_output_adminify_admin_menu']);
31 }
32
33 // Body Class
34 public function admin_menu_body_class($classes)
35 {
36
37
38 $this->options = (array) AdminSettings::get_instance()->get('menu_layout_settings');
39 $menu_layout = !empty($this->options['layout_type']) ? $this->options['layout_type'] : 'vertical';
40 $menu_mode = !empty($this->options['menu_mode']) ? $this->options['menu_mode'] : 'classic';
41
42 $bodyclass = '';
43 if ($menu_layout == 'vertical' && $menu_mode === 'icon_menu') {
44 $classes .= " folded ";
45 }
46 $classes .= ' adminify_admin_menu ';
47 return $classes . $bodyclass;
48 }
49
50 /**
51 * Render Admin Menu
52 * @package WP Adminify
53 * @return void
54 */
55 public function render_adminify_admin_menu($parent_file)
56 {
57 global $menu, $pagenow, $wp_adminify_menu;
58 $current_user = wp_get_current_user();
59 $this->original_menu = $menu;
60 $this->options = (array) AdminSettings::get_instance()->get();
61
62 // Disable Default Menu
63 $menu = array();
64 ob_start();
65 ?>
66
67 <div class="wp_adminify_sidebar_admin-menu menu-default-light">
68
69 <ul class="wp_adminify_admin-menu">
70
71 <?php
72 // User Info Section
73 if (!empty($this->options['menu_layout_settings']['user_info'])) { ?>
74 <li class="wp_adminify_admin-menu-top">
75 <div class="wp_adminify_user has-text-centered p-2 pt-4 pb-5 mb-2">
76 <div class="wp_adminify_user-avatar image is-80x80">
77 <?php if (isset($this->options['menu_layout_settings']['user_info_avatar']) && $this->options['menu_layout_settings']['user_info_avatar'] === 'rounded') { ?>
78 <?php echo get_avatar($current_user->user_email, 80, '', '', array('class' => 'is-rounded')); ?>
79 <?php } else {
80 echo get_avatar($current_user->user_email, 80, '', '', array('class' => 'is-square'));
81 }
82 ?>
83 </div>
84
85 <?php if (isset($this->options['menu_layout_settings']['user_info_content']) && $this->options['menu_layout_settings']['user_info_content'] === 'text') { ?>
86
87 <div class="wp_adminify_user-details">
88 <h4 class="wp_adminify_user-name is-capitalized">
89 <a class="has-text-weight-bold" href="<?php echo admin_url('profile.php'); ?>">
90 <?php echo esc_html($current_user->display_name); ?>
91 </a>
92 </h4>
93 <span class="wp_adminify_user-url">
94 <a href="<?php echo admin_url('profile.php'); ?>">
95 <?php echo is_email($current_user->user_email); ?>
96 </a>
97 </span>
98
99 <a class="logout mt-2" href="<?php echo wp_logout_url(); ?>">
100 <?php echo esc_html__('Log Out', 'adminify'); ?>
101 </a>
102 </div>
103
104 <?php } elseif (isset($this->options['menu_layout_settings']['user_info_content']) && $this->options['menu_layout_settings']['user_info_content'] === 'icon') { ?>
105 <div class="wp_adminify_user-actions">
106 <a href="<?php echo admin_url('profile.php'); ?>">
107 <i class="icon-user icons"></i>
108 </a>
109 <a href="<?php echo wp_logout_url(); ?>">
110 <i class="icon-logout icons"></i>
111 </a>
112 </div>
113 <?php } ?>
114 </div>
115 </li>
116 <?php } ?>
117
118 <?php $this->render_top_level_menu_items($this->original_menu); ?>
119
120
121 </ul>
122
123 </div>
124
125
126 <?php
127 $wp_adminify_menu = ob_get_clean();
128
129 return $parent_file;
130 }
131
132
133 /**
134 * Render Top Level Menu Items
135 */
136
137 public function render_top_level_menu_items($the_menu)
138 {
139 global $submenu;
140 $this->original_submenu = $submenu;
141 $menu_options = $this->menu_settings;
142
143 foreach ($the_menu as $menu_item) {
144 $menu_name = $menu_item[0];
145 $menu_link = $menu_item[2];
146 $divider = false;
147
148 $disabled_for = [];
149 if (is_array($menu_options)) {
150 if (isset($menu_options[$menu_item[2]])) {
151 $optiongroup = $menu_options[$menu_item[2]];
152 if (isset($optiongroup['hidden_for'])) {
153 $disabled_for = $optiongroup['hidden_for'];
154 }
155 }
156 }
157 $custom_menu = isset($menu_item[5]) ? $menu_item[5] : '';
158 if (strpos($custom_menu, 'adminify-custom-menu-') !== false) {
159 if (isset($menu_options[$menu_item[5]]['hidden_for'])) {
160 $disabled_for = $menu_options[$menu_item[5]]['hidden_for'];
161 }
162 $disabled_for = array_flip($disabled_for);
163 $disabled_for = array_change_key_case($disabled_for, CASE_LOWER);
164 $disabled_for = array_flip($disabled_for);
165 if (Utils::restricted_for($disabled_for)) {
166 continue;
167 }
168 }
169
170 if (strpos($menu_link, "separator") !== false) {
171 $divider = true;
172 // $this->render_divider($menu_item);
173 continue;
174 }
175
176 if (!$menu_name) {
177 continue;
178 }
179
180 if (isset($submenu[$menu_link])) {
181 $sub_menu_items = $submenu[$menu_link];
182 } else {
183 $sub_menu_items = false;
184 }
185
186 $link = $this->get_menu_link($menu_item);
187
188 if( 'edit.php?post_type=elementor_library' === $link ){
189 $link .= '&tabs_group=library';
190 }
191 $classes = $this->get_menu_clases($menu_item, $submenu);
192
193 ?>
194
195 <li class="<?php echo $classes ?>" id="<?php echo $menu_item[5] ?>">
196 <a class="menu-icon-generic <?php echo $classes; ?>" href="<?php echo $link; ?>">
197
198 <?php $this->get_icon($menu_item); ?>
199
200 <span class="wp-menu-name" id="adminify-main-topmenu-<?php echo preg_replace("/[^A-Za-z0-9 ]/", '', $menu_item[5]); ?>"><?php echo $menu_name; ?></span>
201
202 </a>
203
204 <?php
205 if (is_array($sub_menu_items)) {
206 $this->render_sub_level_menu_items($sub_menu_items,$menu_item,$menu_options);
207 }
208 ?>
209
210 </li>
211
212 <?php
213
214 if( isset($menu_item['separator']) && $menu_item['separator'] == 1 ){
215 $this->render_divider($menu_item);
216 }
217
218 }
219 }
220
221
222 /**
223 * Gets correct classes for top level menu item
224 * @since 1.4
225 */
226
227 public function get_menu_clases($menu_item, $sub_menu)
228 {
229
230 $menu_link = $menu_item[2];
231 $classes = $menu_item[4];
232
233 if (isset($sub_menu[$menu_link])) {
234 $classes = $classes . ' wp-has-submenu wp-adminify-parent ';
235 $classes = $classes . ' ' . $this->check_if_active($menu_item, $sub_menu[$menu_link]);
236 } else {
237 $classes = $classes . ' ' . $this->check_if_single_active($menu_item);
238 }
239
240 return $classes;
241 }
242
243
244 /**
245 * Checks if we are on an active link or sub link
246 * @since 1.4
247 */
248
249 public function check_if_active($menu_item, $sub_menu)
250 {
251
252 if (!is_array($sub_menu)) {
253 return "";
254 }
255
256 global $pagenow;
257
258 $currentquery = $_SERVER['QUERY_STRING'];
259 if ($currentquery) {
260 $currentquery = '?' . $currentquery;
261 }
262 $wholestring = $pagenow . $currentquery;
263 $visibility = 'hidden';
264 $open = 'wp-not-current-submenu';
265 $files = $this->files;
266
267 foreach ($sub_menu as $sub) {
268 if ($sub[2] === 'edit-tags.php?taxonomy=elementor_library_category&amp;post_type=elementor_library') {
269 $link = 'edit-tags.php?taxonomy=elementor_library_category&post_type=elementor_library';
270 } else if ($sub[2] === 'edit.php?post_type=elementor_library') {
271 $link = 'edit.php?post_type=elementor_library';
272 } else if (($sub[2] === 'e-landing-page') || ($sub[2] === 'popup_templates')) {
273 $link = 'edit.php?post_type=elementor_library&page=' . $sub[2];
274 } else if ($sub[2] === 'updraftplus') {
275 $link = 'options-general.php?page=' . $sub[2];
276 } else if (strpos($sub[2], '.php') !== false) {
277 $link = $sub[2];
278
279 $querypieces = explode("?", $link);
280 $temp = $querypieces[0];
281
282 if (!in_array($temp, $files)) {
283 $link = 'admin.php?page=' . $sub[2];
284 }
285 } else {
286 $link = 'admin.php?page=' . $sub[2];
287 }
288 $linkclass = '';
289 if (($wholestring == $link) || ( (strpos($wholestring, 'edit.php?post_type=elementor_library') !== false) && (strpos($link, 'edit.php?post_type=elementor_library') !== false) ) ) {
290 $linkclass = "wp-has-current-submenu wp-menu-open";
291 $open = 'wp-adminify-active wp-adminify-open wp-menu-open wp-has-current-submenu';
292 $visibility = '';
293 break;
294 }
295 }
296
297 return $open;
298 }
299
300
301
302 /**
303 * Render Divider
304 * @package WP Adminify
305 * @return void
306 */
307 public function render_divider($divider)
308 {
309 if (isset($divider['name'])) {
310 ?>
311
312 <li class="wp-adminify-nav-header"><?php echo $divider['name'] ?></li>
313 <li class="wp-adminify-nav-divider divider-placeholder"></li>
314
315 <?php
316
317 } else {
318 ?>
319
320 <li class="wp-adminify-nav-divider"></li>
321
322 <?php
323 }
324 }
325
326
327 /**
328 * Render Sub Menu Items
329 *
330 * @return void
331 */
332 public function render_sub_level_menu_items($sub_menu,$parent_menu,$menu_options)
333 {
334 ?>
335 <ul class="wp-adminify-nav-sub wp-submenu wp-submenu-wrap">
336
337 <?php
338 foreach ($sub_menu as $sub_item) {
339 $sub_menu_name = $sub_item[0];
340 $sub_menu_link = $sub_item[2];
341 $link = $this->get_menu_link($sub_item);
342 $class = $this->check_if_single_active($sub_item);
343
344 $parent_menu_id = preg_replace("/[^A-Za-z0-9 ]/", '', $sub_menu_link);
345
346 $disabled_for = [];
347 $custom_submenu = isset($sub_item['key']) ? $sub_item['key'] : '';
348 if (strpos($parent_menu[5], 'adminify-custom-menu-') !== false) {
349 if (strpos($custom_submenu, 'adminify-custom-submenu-') !== false) {
350 $submenu_options = $menu_options[$parent_menu[5]]['submenu'][$custom_submenu];
351 if( !empty($submenu_options['hidden_for']) ){
352 $disabled_for = $submenu_options['hidden_for'];
353 }
354 $disabled_for = array_flip($disabled_for);
355 $disabled_for = array_change_key_case($disabled_for, CASE_LOWER);
356 $disabled_for = array_flip($disabled_for);
357 if (Utils::restricted_for($disabled_for)) {
358 continue;
359 }
360 }
361 }
362
363 // hide pricing menu when user is using pro version
364 if ( ($sub_menu_link === 'wp-adminify-settings-pricing') && jltwp_adminify()->can_use_premium_code__premium_only() ) {
365 // Do not display the menu item
366 }else{
367 ?>
368 <li class="<?php echo $class; ?>">
369 <a class="<?php echo $class; ?>" href="<?php echo $link; ?>" id="adminify-main-submenu-<?php echo esc_attr($parent_menu_id); ?>">
370 <?php echo $sub_menu_name ?>
371 </a>
372 </li>
373 <?php }
374
375 }
376 ?>
377
378 </ul>
379 <?php
380 }
381
382
383 /**
384 * Checks if we are on an active link or sub link
385 * @since 1.4
386 */
387
388 public function check_if_single_active($sub_menu_item)
389 {
390
391 global $pagenow;
392
393 $currentquery = $_SERVER['QUERY_STRING'];
394 if ($currentquery) {
395 $currentquery = '?' . $currentquery;
396 }
397 $wholestring = $pagenow . $currentquery;
398 $visibility = 'hidden';
399 $open = 'wp-not-current-submenu';
400 $files = $this->files;
401
402 if ($sub_menu_item[2] === 'edit-tags.php?taxonomy=elementor_library_category&amp;post_type=elementor_library') {
403 $link = 'edit-tags.php?taxonomy=elementor_library_category&post_type=elementor_library';
404 } else if ($sub_menu_item[2] === 'popup_templates') {
405 $link = 'edit.php?post_type=elementor_library&page=' . $sub_menu_item[2];
406 } else if ($sub_menu_item[2] === 'updraftplus') {
407 $link = 'options-general.php?page=' . $sub_menu_item[2];
408 } else if (strpos($sub_menu_item[2], '.php') !== false) {
409 $link = $sub_menu_item[2];
410
411 $querypieces = explode("?", $link);
412 $temp = $querypieces[0];
413
414 if (!in_array($temp, $files)) {
415 $link = 'admin.php?page=' . $sub_menu_item[2];
416 }
417 } else {
418 $link = 'admin.php?page=' . $sub_menu_item[2];
419 }
420
421 $linkclass = '';
422 if ($wholestring == $link) {
423 $linkclass = "wp-adminify-active current";
424 }
425
426
427 return $linkclass;
428 }
429
430
431
432 /**
433 * Scans admin directory for menu links
434 * @since 1.4
435 */
436 public function get_admin_files()
437 {
438
439 $absolutepath = ABSPATH . '/wp-admin' . "/";
440 $files = array_diff(scandir($absolutepath), array('.', '..'));
441
442 if (is_multisite()) {
443 $pathtonetwork = ABSPATH . '/wp-admin' . "/network/";
444 $networkfiles = array_diff(scandir($pathtonetwork), array('.', '..'));
445 $files = array_merge($files, $networkfiles);
446 }
447
448 return $files;
449 }
450
451 /**
452 * Gets correct link for menu item
453 * @since 1.4
454 */
455
456 public function get_menu_link($menu_item)
457 {
458
459 $menu_link = $menu_item[2];
460 $files = $this->get_admin_files();
461 $this->files = $files;
462
463 if ($menu_link == 'woocommerce') {
464 $menu_link = 'wc-admin';
465 }
466
467 if (($menu_link === 'e-landing-page') || ($menu_link === 'popup_templates')) {
468 $link = 'edit.php?post_type=elementor_library&page=' . $menu_link;
469 } else if ($menu_link === 'updraftplus') {
470 $link = 'options-general.php?page=' . $menu_link;
471 } else if (strpos($menu_link, 'admin.php') !== false) {
472 $link = $menu_link;
473 } else if (strpos($menu_link, '.php') !== false) {
474
475 $link = $menu_link;
476 if (strpos($menu_link, '/') !== false) {
477 $pieces = explode("/", $menu_link);
478 if (strpos($pieces[0], '.php') !== true || !file_exists(get_admin_url() . $menu_link)) {
479 $link = 'admin.php?page=' . $menu_link;
480 }
481 }
482
483 $querypieces = explode("?", $link);
484 $temp = $querypieces[0];
485
486 if (!in_array($temp, $files)) {
487 $link = 'admin.php?page=' . $menu_link;
488 }
489 } else {
490
491 $link = 'admin.php?page=' . $menu_link;
492 }
493
494 if (strpos($menu_link, "/wp-content/") !== false) {
495
496 $link = 'admin.php?page=' . $menu_link;
497 }
498
499 //CHECK IF INTERNAL URL
500 if (strpos($menu_link, get_site_url()) !== false) {
501
502 $link = $menu_link;
503 }
504
505 ///CHECK IF EXTERNAL LINK
506 if (strpos($menu_link, 'https://') !== false || strpos($menu_link, 'http://') !== false) {
507
508 $link = $menu_link;
509 }
510
511 return $link;
512 }
513
514
515
516 /**
517 * Gets top level menu item icon
518 * @since 1.4
519 */
520
521 public function get_icon($menu_item)
522 {
523
524 /// LIST OF AVAILABLE MENU ICONS
525 $icons = array(
526 'dashicons-dashboard' => 'dashicons dashicons-dashboard',
527 'dashicons-admin-post' => 'dashicons dashicons-admin-post',
528 'dashicons-database' => 'dashicons dashicons-database',
529 'dashicons-admin-media' => 'dashicons dashicons-admin-media',
530 'dashicons-admin-page' => 'dashicons dashicons-admin-page',
531 'dashicons-admin-comments' => 'dashicons dashicons-admin-comments',
532 'dashicons-admin-appearance' => 'dashicons dashicons-admin-appearance',
533 'dashicons-admin-plugins' => 'dashicons dashicons-admin-plugins',
534 'dashicons-admin-users' => 'dashicons dashicons-admin-users',
535 'dashicons-admin-tools' => 'dashicons dashicons-admin-tools',
536 'dashicons-chart-bar' => 'dashicons dashicons-chart-bar',
537 'dashicons-admin-settings' => 'dashicons dashicons-admin-settings'
538 );
539
540 // SET MENU ICON
541 $theicon = '';
542 // $wpicon = $menu_item;
543 $wpicon = (isset($menu_item)) ? $menu_item[6] : '';
544
545 if (isset($menu_item['icon']) && !empty($menu_item['icon'])) {
546
547 if( preg_match('/http(s?)\:\/\//i', $menu_item['icon']) ) {
548 $icon = explode(',', $menu_item['icon']);
549
550 ?>
551 <span class="wp-adminify-icon-button" style="background-image: url(<?php echo $icon[1] ?>);"></span>
552 <?php
553 return;
554 }else{
555 ?>
556 <span class="wp-adminify-icon-button <?php echo $menu_item['icon'] ?>"></span>
557 <?php
558 return;
559 }
560 }
561
562 if (isset($icons[$wpicon])) {
563
564 //ICON IS SET BY WP ADMINIFY
565 ?>
566 <span class="wp-adminify-icon-button <?php echo $icons[$wpicon] ?>"></span>
567 <?php
568 return;
569 }
570
571 if (!$theicon) {
572 if (strpos($wpicon, 'http') !== false || strpos($wpicon, 'data:') !== false) {
573 //ICON IS IMAGE && BASE64
574 $class = '';
575 // ICON IS BASE64
576 if(strpos($wpicon, 'data:') !== false){
577 $deocded_bas64 = base64_decode(explode(',',$wpicon)[1]);
578 }
579 // ICON IS IMAGE
580 if(strpos($wpicon, 'http') !== false){
581 $class = 'svg-image-icon';
582 $wpicon = (strpos($wpicon,',') !== false) ? explode(',',$wpicon)[1] : $wpicon;
583 }
584 ?>
585 <span class="wp-adminify-icon wp-adminify-icon-image wp-adminify-icon-button <?php echo $class; ?>" <?php if(strpos($wpicon, 'data:') === false) { ?> style="background-image: url(<?php echo $wpicon ?>);" <?php } ?>><?php if(strpos($wpicon, 'data:') !== false) echo $deocded_bas64; ?></span>
586 <?php
587
588 } else {
589
590 ///ICON IS ::BEFORE ELEMENT
591 if( empty($wpicon) ){
592 $wpicon = empty($wpicon) ? WP_ADMINIFY_ASSETS_IMAGE . 'logos/menu-icon.svg' : '';
593 ?>
594 <span class="wp-adminify-icon wp-adminify-icon-image wp-adminify-icon-button svg-image-icon" style="background-image: url(<?php echo $wpicon ?>);"></span>
595 <?php
596 }else{
597 $wpicon = (strpos($wpicon,'dashicons-') !== false) ? 'dashicons-before '. $wpicon : $wpicon;
598 ?>
599 <div class="wp-menu-image <?php echo $wpicon ?> wp-adminify-icon wp-adminify-icon-image wp-adminify-icon-button"></div>
600 <?php
601 }
602
603 }
604 }
605 }
606
607
608 /**
609 * Render Output Admin Menu
610 *
611 * @return void
612 */
613 public function render_output_adminify_admin_menu()
614 {
615 global $menu, $submenu, $wp_adminify_menu;
616 echo $wp_adminify_menu;
617 $menu = $this->original_menu;
618 $submenu = $this->original_submenu;
619 }
620 }
621