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

525 lines 15.5 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', WP_ADMINIFY_TD); ?>
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 (strpos($menu_link, 'admin.php') !== false) {
399 $link = $menu_link;
400 } else if (strpos($menu_link, '.php') !== false) {
401
402 $link = $menu_link;
403 if (strpos($menu_link, '/') !== false) {
404 $pieces = explode("/", $menu_link);
405 if (strpos($pieces[0], '.php') !== true || !file_exists(get_admin_url() . $menu_link)) {
406 $link = 'admin.php?page=' . $menu_link;
407 }
408 }
409
410 $querypieces = explode("?", $link);
411 $temp = $querypieces[0];
412
413 if (!in_array($temp, $files)) {
414 $link = 'admin.php?page=' . $menu_link;
415 }
416 } else {
417
418 $link = 'admin.php?page=' . $menu_link;
419 }
420
421 if (strpos($menu_link, "/wp-content/") !== false) {
422
423 $link = 'admin.php?page=' . $menu_link;
424 }
425
426 //CHECK IF INTERNAL URL
427 if (strpos($menu_link, get_site_url()) !== false) {
428
429 $link = $menu_link;
430 }
431
432 ///CHECK IF EXTERNAL LINK
433 if (strpos($menu_link, 'https://') !== false || strpos($menu_link, 'http://') !== false) {
434
435 $link = $menu_link;
436 }
437
438 return $link;
439 }
440
441
442
443 /**
444 * Gets top level menu item icon
445 * @since 1.4
446 */
447
448 public function get_icon($menu_item)
449 {
450
451 /// LIST OF AVAILABLE MENU ICONS
452 $icons = array(
453 'dashicons-dashboard' => 'dashicons dashicons-dashboard',
454 'dashicons-admin-post' => 'dashicons dashicons-admin-post',
455 'dashicons-database' => 'dashicons dashicons-database',
456 'dashicons-admin-media' => 'dashicons dashicons-admin-media',
457 'dashicons-admin-page' => 'dashicons dashicons-admin-page',
458 'dashicons-admin-comments' => 'dashicons dashicons-admin-comments',
459 'dashicons-admin-appearance' => 'dashicons dashicons-admin-appearance',
460 'dashicons-admin-plugins' => 'dashicons dashicons-admin-plugins',
461 'dashicons-admin-users' => 'dashicons dashicons-admin-users',
462 'dashicons-admin-tools' => 'dashicons dashicons-admin-tools',
463 'dashicons-chart-bar' => 'dashicons dashicons-chart-bar',
464 'dashicons-admin-settings' => 'dashicons dashicons-admin-settings'
465 );
466
467 // SET MENU ICON
468 $theicon = '';
469 // $wpicon = $menu_item;
470 $wpicon = (isset($menu_item)) ? $menu_item[6] : '';
471
472
473 if (isset($menu_item['icon'])) {
474 if ($menu_item['icon'] != "") {
475
476 ?>
477 <span class="wp-adminify-icon-button <?php echo $menu_item['icon'] ?>"></span>
478 <?php
479 return;
480 }
481 }
482
483 if (isset($icons[$wpicon])) {
484
485 //ICON IS SET BY WP ADMINIFY
486 ?>
487 <span class="wp-adminify-icon-button <?php echo $icons[$wpicon] ?>"></span>
488 <?php
489 return;
490 }
491
492 if (!$theicon) {
493 if (strpos($wpicon, 'http') !== false || strpos($wpicon, 'data:') !== false) {
494
495 ///ICON IS IMAGE
496 ?>
497 <span class="wp-adminify-icon wp-adminify-icon-image wp-adminify-icon-button" style="background-image: url(<?php echo $wpicon ?>);"></span>
498 <?php
499
500 } else {
501
502 ///ICON IS ::BEFORE ELEMENT
503 ?>
504 <div class="wp-menu-image dashicons-before <?php echo $wpicon ?> wp-adminify-icon wp-adminify-icon-image wp-adminify-icon-button"></div>
505 <?php
506
507 }
508 }
509 }
510
511
512 /**
513 * Render Output Admin Menu
514 *
515 * @return void
516 */
517 public function render_output_adminify_admin_menu()
518 {
519 global $menu, $submenu, $wp_adminify_menu;
520 echo $wp_adminify_menu;
521 $menu = $this->original_menu;
522 $submenu = $this->original_submenu;
523 }
524 }
525