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

529 lines 15.6 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 <li class="<?php echo $class ?>">
310 <a class="<?php echo $class ?>" href="<?php echo $link ?>" id="adminify-main-submenu-<?php echo esc_attr($parent_menu_id); ?>">
311 <?php echo $sub_menu_name ?>
312 </a>
313 </li>
314 <?php
315
316 }
317 ?>
318
319 </ul>
320 <?php
321 }
322
323
324 /**
325 * Checks if we are on an active link or sub link
326 * @since 1.4
327 */
328
329 public function check_if_single_active($sub_menu_item)
330 {
331
332 global $pagenow;
333
334 $currentquery = $_SERVER['QUERY_STRING'];
335 if ($currentquery) {
336 $currentquery = '?' . $currentquery;
337 }
338 $wholestring = $pagenow . $currentquery;
339 $visibility = 'hidden';
340 $open = 'wp-not-current-submenu';
341 $files = $this->files;
342
343 if (strpos($sub_menu_item[2], '.php') !== false) {
344 $link = $sub_menu_item[2];
345
346 $querypieces = explode("?", $link);
347 $temp = $querypieces[0];
348
349 if (!in_array($temp, $files)) {
350 $link = 'admin.php?page=' . $sub_menu_item[2];
351 }
352 } else {
353 $link = 'admin.php?page=' . $sub_menu_item[2];
354 }
355
356 $linkclass = '';
357 if ($wholestring == $link) {
358 $linkclass = "wp-adminify-active current";
359 }
360
361
362 return $linkclass;
363 }
364
365
366
367 /**
368 * Scans admin directory for menu links
369 * @since 1.4
370 */
371 public function get_admin_files()
372 {
373
374 $absolutepath = ABSPATH . '/wp-admin' . "/";
375 $files = array_diff(scandir($absolutepath), array('.', '..'));
376
377 if (is_multisite()) {
378 $pathtonetwork = ABSPATH . '/wp-admin' . "/network/";
379 $networkfiles = array_diff(scandir($pathtonetwork), array('.', '..'));
380 $files = array_merge($files, $networkfiles);
381 }
382
383 return $files;
384 }
385
386 /**
387 * Gets correct link for menu item
388 * @since 1.4
389 */
390
391 public function get_menu_link($menu_item)
392 {
393
394 $menu_link = $menu_item[2];
395 $files = $this->get_admin_files();
396 $this->files = $files;
397
398 if ($menu_link == 'woocommerce') {
399 $menu_link = 'wc-admin';
400 }
401
402 if (strpos($menu_link, 'admin.php') !== false) {
403 $link = $menu_link;
404 } else if (strpos($menu_link, '.php') !== false) {
405
406 $link = $menu_link;
407 if (strpos($menu_link, '/') !== false) {
408 $pieces = explode("/", $menu_link);
409 if (strpos($pieces[0], '.php') !== true || !file_exists(get_admin_url() . $menu_link)) {
410 $link = 'admin.php?page=' . $menu_link;
411 }
412 }
413
414 $querypieces = explode("?", $link);
415 $temp = $querypieces[0];
416
417 if (!in_array($temp, $files)) {
418 $link = 'admin.php?page=' . $menu_link;
419 }
420 } else {
421
422 $link = 'admin.php?page=' . $menu_link;
423 }
424
425 if (strpos($menu_link, "/wp-content/") !== false) {
426
427 $link = 'admin.php?page=' . $menu_link;
428 }
429
430 //CHECK IF INTERNAL URL
431 if (strpos($menu_link, get_site_url()) !== false) {
432
433 $link = $menu_link;
434 }
435
436 ///CHECK IF EXTERNAL LINK
437 if (strpos($menu_link, 'https://') !== false || strpos($menu_link, 'http://') !== false) {
438
439 $link = $menu_link;
440 }
441
442 return $link;
443 }
444
445
446
447 /**
448 * Gets top level menu item icon
449 * @since 1.4
450 */
451
452 public function get_icon($menu_item)
453 {
454
455 /// LIST OF AVAILABLE MENU ICONS
456 $icons = array(
457 'dashicons-dashboard' => 'dashicons dashicons-dashboard',
458 'dashicons-admin-post' => 'dashicons dashicons-admin-post',
459 'dashicons-database' => 'dashicons dashicons-database',
460 'dashicons-admin-media' => 'dashicons dashicons-admin-media',
461 'dashicons-admin-page' => 'dashicons dashicons-admin-page',
462 'dashicons-admin-comments' => 'dashicons dashicons-admin-comments',
463 'dashicons-admin-appearance' => 'dashicons dashicons-admin-appearance',
464 'dashicons-admin-plugins' => 'dashicons dashicons-admin-plugins',
465 'dashicons-admin-users' => 'dashicons dashicons-admin-users',
466 'dashicons-admin-tools' => 'dashicons dashicons-admin-tools',
467 'dashicons-chart-bar' => 'dashicons dashicons-chart-bar',
468 'dashicons-admin-settings' => 'dashicons dashicons-admin-settings'
469 );
470
471 // SET MENU ICON
472 $theicon = '';
473 // $wpicon = $menu_item;
474 $wpicon = (isset($menu_item)) ? $menu_item[6] : '';
475
476
477 if (isset($menu_item['icon'])) {
478 if ($menu_item['icon'] != "") {
479
480 ?>
481 <span class="wp-adminify-icon-button <?php echo $menu_item['icon'] ?>"></span>
482 <?php
483 return;
484 }
485 }
486
487 if (isset($icons[$wpicon])) {
488
489 //ICON IS SET BY WP ADMINIFY
490 ?>
491 <span class="wp-adminify-icon-button <?php echo $icons[$wpicon] ?>"></span>
492 <?php
493 return;
494 }
495
496 if (!$theicon) {
497 if (strpos($wpicon, 'http') !== false || strpos($wpicon, 'data:') !== false) {
498
499 ///ICON IS IMAGE
500 ?>
501 <span class="wp-adminify-icon wp-adminify-icon-image wp-adminify-icon-button" style="background-image: url(<?php echo $wpicon ?>);"></span>
502 <?php
503
504 } else {
505
506 ///ICON IS ::BEFORE ELEMENT
507 ?>
508 <div class="wp-menu-image dashicons-before <?php echo $wpicon ?> wp-adminify-icon wp-adminify-icon-image wp-adminify-icon-button"></div>
509 <?php
510
511 }
512 }
513 }
514
515
516 /**
517 * Render Output Admin Menu
518 *
519 * @return void
520 */
521 public function render_output_adminify_admin_menu()
522 {
523 global $menu, $submenu, $wp_adminify_menu;
524 echo $wp_adminify_menu;
525 $menu = $this->original_menu;
526 $submenu = $this->original_submenu;
527 }
528 }
529