PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 2.0.9
Adminify – White Label, Admin Menu Editor, Login Customizer v2.0.9
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 2.0.9, at Inc/Classes/MenuStyles/VerticalMainMenu.php

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