PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 1.0.4
Adminify – White Label, Admin Menu Editor, Login Customizer v1.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 1.0.4, at Inc/classes/MenuStyles/VerticalMainMenu.php

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