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

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