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 / Modules / MenuEditor / MenuEditor.php

MenuEditor.php in Adminify – White Label, Admin Menu Editor, Login Customizer 2.0.9, at Inc/Modules/MenuEditor/MenuEditor.php

1,265 lines 55.7 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\Modules\MenuEditor;
4
5 use WPAdminify\Inc\Utils;
6 use WPAdminify\Inc\Modules\MenuEditor\MenuEditorAssets;
7
8 // no direct access allowed
9 if (!defined('ABSPATH')) exit;
10
11 /**
12 * WP Adminify
13 * @package WP Adminify: Menu Editor
14 *
15 * @author WP Adminify <support@wpadminify.com>
16 */
17
18 if (!class_exists('MenuEditor')) {
19 class MenuEditor extends MenuEditorModel
20 {
21 public $url;
22 public $menu;
23 public $submenu;
24
25 public function __construct()
26 {
27 $this->url = WP_ADMINIFY_URL . 'Inc/Modules/MenuEditor';
28 $this->menu_settings = (new MenuEditorOptions())->get();
29
30 add_action('admin_menu', [$this, 'jltwp_adminify_menu_editor_submenu'], 51);
31 add_filter('admin_body_class', [$this, 'jltwp_adminify_menu_editor_body_class']);
32
33 add_filter('parent_file', [$this, 'set_menu'], 800);
34 add_filter('parent_file', [$this, 'apply_menu'], 900);
35
36 add_action('wp_ajax_adminify_save_menu_settings', [$this, 'adminify_save_menu_settings']);
37 add_action('wp_ajax_adminify_reset_menu_settings', [$this, 'adminify_reset_menu_settings']);
38 add_action('wp_ajax_adminify_export_menu_settings', [$this, 'adminify_export_menu_settings']);
39 add_action('wp_ajax_adminify_import_menu_settings', [$this, 'adminify_import_menu_settings']);
40
41 new MenuEditorAssets();
42 }
43
44 // Menu Editor Body Class
45 public function jltwp_adminify_menu_editor_body_class($classes)
46 {
47 $classes .= ' adminify_menu_editor ';
48 return $classes;
49 }
50
51
52 /**
53 * Sanitises and strips tags of input from ajax
54 * @since 1.0.0
55 * @variables $values = item to clean (array or string)
56 */
57 public function clean_ajax_input($values)
58 {
59
60 if (is_array($values)) {
61 foreach ($values as $index => $in) {
62 if (is_array($in)) {
63 $values[$index] = $this->clean_ajax_input($in);
64 } else {
65 $values[$index] = strip_tags($in);
66 }
67 }
68 } else {
69 $values = strip_tags($values);
70 }
71
72 return $values;
73 }
74
75
76 /**
77 * Returns ajax error
78 * @since 1.4
79 * @variables $message = error message to send back to user (string)
80 */
81 public function ajax_error_message($message)
82 {
83 $returndata = array();
84 $returndata['error'] = true;
85 $returndata['error_message'] = $message;
86 return json_encode($returndata);
87 }
88
89
90
91 public function adminify_save_menu_settings()
92 {
93
94 if (defined('DOING_AJAX') && DOING_AJAX && check_ajax_referer('adminify-menu-editor-security-nonce', 'security') > 0) {
95
96 $options = $_POST['options'];
97 $options = $this->clean_ajax_input($options);
98
99 if ($options == "" || !is_array($options)) {
100 $message = __("No options supplied to save", 'adminify');
101 echo $this->ajax_error_message($message);
102 die();
103 }
104
105 if (is_array($options)) {
106 update_option($this->prefix, $options);
107 $returndata = array();
108 $returndata['success'] = true;
109 $returndata['message'] = __('Settings saved', 'adminify');
110 echo json_encode($returndata);
111 die();
112 } else {
113 $message = __("Something went wrong", 'adminify');
114 echo $this->ajax_error_message($message);
115 die();
116 }
117 }
118 die();
119 }
120
121
122 /**
123 * Menu Editor Settings Reset
124 *
125 * @return void
126 */
127 public function adminify_reset_menu_settings()
128 {
129 if (defined('DOING_AJAX') && DOING_AJAX && check_ajax_referer('adminify-menu-editor-security-nonce', 'security') > 0) {
130
131 update_option($this->prefix, array());
132 $menu_editor_options = get_option($this->prefix);
133
134 if (!$menu_editor_options) {
135 $returndata = array();
136 $returndata['success'] = true;
137 $returndata['message'] = __('Settings reset', 'adminify');
138 echo json_encode($returndata);
139 die();
140 } else {
141 $message = __("Something went wrong", 'adminify');
142 echo $this->ajax_error_message($message);
143 die();
144 }
145 }
146 die();
147 }
148
149 /**
150 * Export Menu Editor Settings
151 *
152 * @return void
153 */
154 public function adminify_export_menu_settings()
155 {
156 if (defined('DOING_AJAX') && DOING_AJAX && check_ajax_referer('adminify-menu-editor-security-nonce', 'security') > 0) {
157 $menu_editor_options = get_option($this->prefix);
158 echo json_encode($menu_editor_options);
159 }
160 die();
161 }
162
163
164 /**
165 * Import Menu Editor Settings
166 * @since 1.0.0
167 */
168
169 public function adminify_import_menu_settings()
170 {
171 if (defined('DOING_AJAX') && DOING_AJAX && check_ajax_referer('adminify-menu-editor-security-nonce', 'security') > 0) {
172
173 $new_options = $this->clean_ajax_input($_POST['settings']);
174
175 if ($new_options == "" || !is_array($new_options)) {
176 $message = __("No options supplied to save", 'adminify');
177 echo $this->ajax_error_message($message);
178 die();
179 }
180
181 if (is_array($new_options)) {
182 update_option($this->prefix, $new_options);
183 $returndata = array();
184 $returndata['success'] = true;
185 $returndata['message'] = __('Menu Imported', 'adminify');
186 echo json_encode($returndata);
187 die();
188 } else {
189 $message = __("Something went wrong", 'adminify');
190 echo $this->ajax_error_message($message);
191 die();
192 }
193 }
194 die();
195 }
196
197
198 /**
199 * Get menu items
200 *
201 * @param [type] $parent_file
202 *
203 * @return void
204 */
205 public function set_menu($parent_file)
206 {
207 global $menu, $submenu;
208 $this->menu = $this->sort_menu_settings($menu);
209 $this->submenu = $this->sort_sub_menu_settings($this->menu, $submenu);
210 return $parent_file;
211 }
212
213
214 /**
215 * Sorts Menu's for Option settings
216 */
217 public function sort_menu_settings($thismenu)
218 {
219
220 $menu_settings = $this->menu_settings;
221 $tempmenu = array();
222
223 foreach ($thismenu as $key => $current_menu_item) {
224
225 $optiongroup = array();
226 $order = $key;
227
228 if (is_array($menu_settings)) {
229
230 if (isset($menu_settings[$current_menu_item[2]])) {
231 $optiongroup = $menu_settings[$current_menu_item[2]];
232
233 if (isset($optiongroup['order'])) {
234 $order = $optiongroup['order'];
235 }
236 }
237 }
238
239 $current_menu_item['order'] = $order;
240
241 array_push($tempmenu, $current_menu_item);
242 }
243
244 return $this->sort_array($tempmenu);
245 }
246
247
248 /**
249 * usort function for menu arrays
250 */
251
252 public function sort_array_helper($a, $b)
253 {
254 $result = 0;
255 if (!isset($a['order'])) {
256 return $result;
257 }
258 if ($a['order'] > $b['order']) {
259 $result = 1;
260 } else if ($a['order'] < $b['order']) {
261 $result = -1;
262 }
263 return $result;
264 }
265
266
267 /**
268 * Sorts arrays by key 'order'
269 */
270 public function sort_array($tosort)
271 {
272 usort($tosort, [$this, "sort_array_helper"]);
273 return $tosort;
274 }
275 /**
276 * Sorts Sub Menu for settings
277 * @since 1.4
278 */
279
280 public function sort_sub_menu_settings($themenu, $thesubmenu)
281 {
282
283 $menu_settings = $this->menu_settings;
284
285 $tempsubmenu = array();
286
287 foreach ($themenu as $current_menu_item) {
288
289 $optiongroup = array();
290 $submenu_items = array();
291
292 if (isset($thesubmenu[$current_menu_item[2]])) {
293
294 $submenuitems = $thesubmenu[$current_menu_item[2]];
295
296 foreach ($submenuitems as $key => $subitem) {
297
298 $subitem['order'] = $key;
299
300 if (is_array($menu_settings) && isset($menu_settings[$current_menu_item[2]]) && isset($menu_settings[$current_menu_item[2]]['submenu'])) {
301
302 $submenugroup = $menu_settings[$current_menu_item[2]]['submenu'];
303
304 if (isset($submenugroup[$subitem[2]])) {
305
306 $itemoptions = $submenugroup[$subitem[2]];
307
308 if (isset($itemoptions['order'])) {
309
310 $subitem['order'] = $itemoptions['order'];
311 }
312 }
313 }
314
315 array_push($submenu_items, $subitem);
316 }
317
318 $submenu_items = $this->sort_array($submenu_items);
319
320 $tempsubmenu[$current_menu_item[2]] = $submenu_items;
321 }
322 }
323
324 return $tempsubmenu;
325 }
326
327
328 /**
329 * Applies menu settings
330 */
331 public function apply_menu($parent_file)
332 {
333 global $menu, $submenu;
334 $tempmenu = array();
335 $tempsub = array();
336 $submenu = $this->sort_sub_menu_settings($menu, $submenu);
337
338 if ($menu && is_array($menu)) {
339
340 foreach ($menu as $key => $menu_item) {
341
342 if (strpos($menu_item[2], "separator") !== false && !$menu_item[0]) {
343
344 // Build Separator
345 $newitem = $this->apply_separator_settings($menu_item, $key);
346 if ($newitem) {
347 array_push($tempmenu, $newitem);
348 }
349 } else {
350
351 // Build Top Level
352 $newitem = $this->apply_top_level_settings($menu_item, $key);
353 if ($newitem) {
354 array_push($tempmenu, $newitem);
355
356 if (isset($submenu[$newitem[2]])) {
357
358 $subitem = $this->apply_sub_level_settings($submenu[$newitem[2]], $newitem[2]);
359
360 if ($subitem) {
361 $tempsub[$newitem[2]] = $this->apply_sub_level_settings($submenu[$newitem[2]], $newitem[2]);
362 }
363 }
364 }
365 }
366 }
367 }
368
369 $submenu = $tempsub;
370 $menu = $this->sort_array($tempmenu);
371
372 return $parent_file;
373 }
374
375
376 /**
377 * Applies top level menu item settings
378 * @since 1.4
379 */
380
381 public function apply_sub_level_settings($subitems, $parentname)
382 {
383
384 if (!is_array($this->menu_settings)) {
385 return $subitems;
386 }
387
388 if (!isset($this->menu_settings[$parentname]['submenu'])) {
389 return $subitems;
390 }
391
392 $submenu_settings = $this->menu_settings[$parentname]['submenu'];
393
394 $tempsub = array();
395
396 foreach ($subitems as $current_menu_item) {
397 $name = '';
398 $link = '';
399 $disabled_for = array();
400 $optiongroup = array();
401
402 ///NO SETTINGS
403 if (!isset($submenu_settings[$current_menu_item[2]])) {
404 array_push($tempsub, $current_menu_item);
405 continue;
406 }
407
408 $optiongroup = $submenu_settings[$current_menu_item[2]];
409
410 if (isset($optiongroup['name'])) {
411 $name = $optiongroup['name'];
412
413 if ($name != "") {
414 $current_menu_item[0] = $name;
415 }
416 }
417
418 if (isset($optiongroup['link'])) {
419 $link = $optiongroup['link'];
420
421 if ($link != "") {
422 $current_menu_item[2] = $link;
423 $current_menu_item['link'] = $link;
424 }
425 }
426
427 if (isset($optiongroup['hidden_for'])) {
428 $disabled_for = $optiongroup['hidden_for'];
429
430 if ($this->is_hidden($disabled_for)) {
431 $current_menu_item['hidden'] = true;
432 continue;
433 }
434 }
435
436 array_push($tempsub, $current_menu_item);
437 }
438
439 if (count($tempsub) < 1) {
440 return false;
441 } else {
442 return $tempsub;
443 }
444 }
445
446
447 /**
448 * Applies top level menu item settings
449 * @since 1.4
450 */
451
452 public function apply_top_level_settings($current_menu_item, $key)
453 {
454 $name = '';
455 $link = '';
456 $icon = '';
457 $disabled_for = array();
458 $optiongroup = array();
459 $order = $key;
460
461 if (is_array($this->menu_settings)) {
462
463 if (isset($this->menu_settings[$current_menu_item[2]])) {
464 $optiongroup = $this->menu_settings[$current_menu_item[2]];
465
466 if (isset($optiongroup['name'])) {
467 $name = $optiongroup['name'];
468
469 if ($name != "") {
470 $current_menu_item[0] = $name;
471 }
472 }
473
474 if (isset($optiongroup['link'])) {
475 $link = $optiongroup['link'];
476
477 if ($link != "") {
478 $current_menu_item[2] = $link;
479 $current_menu_item['link'] = $link;
480 }
481 }
482
483 if (isset($optiongroup['icon'])) {
484 $icon = $optiongroup['icon'];
485
486 if ($icon != "") {
487 $current_menu_item['icon'] = $icon;
488 }
489 }
490
491 if (isset($optiongroup['order'])) {
492 $order = $optiongroup['order'];
493 }
494
495 if (isset($optiongroup['hidden_for'])) {
496 $disabled_for = $optiongroup['hidden_for'];
497
498 if ($this->is_hidden($disabled_for)) {
499 $current_menu_item['hidden'] = true;
500 }
501 }
502 }
503 }
504
505 $current_menu_item['order'] = $order;
506
507 if (isset($current_menu_item['hidden'])) {
508
509 if ($current_menu_item['hidden'] == true) {
510
511 return false;
512 } else {
513
514 return $current_menu_item;
515 }
516 } else {
517
518 return $current_menu_item;
519 }
520 }
521
522
523 /**
524 * Hidden for method
525 *
526 * @param [type] $disabled_for
527 *
528 * @return boolean
529 */
530 public function is_hidden($disabled_for)
531 {
532
533 if (!is_array($disabled_for)) {
534 return false;
535 }
536
537 $current_user = wp_get_current_user();
538 $current_name = $current_user->display_name;
539 $current_roles = $current_user->roles;
540 $all_roles = wp_roles()->get_names();
541
542
543 if (in_array($current_name, $disabled_for)) {
544 return true;
545 }
546
547
548 ///MULTISITE SUPER ADMIN
549 if (is_super_admin() && is_multisite()) {
550 if (in_array('Super Admin', $disabled_for)) {
551 return true;
552 } else {
553 return false;
554 }
555 }
556
557 ///NORMAL SUPER ADMIN
558 if ($current_user->ID === 1) {
559 if (in_array('Super Admin', $disabled_for)) {
560 return true;
561 } else {
562 return false;
563 }
564 }
565
566 foreach ($current_roles as $role) {
567
568 $role_name = $all_roles[$role];
569
570 if (in_array($role_name, $disabled_for)) {
571 return true;
572 }
573 }
574 }
575
576
577 /**
578 * Applies separator menu item settings
579 * @since 1.0.0
580 */
581
582 public function apply_separator_settings($current_menu_item, $key)
583 {
584 $name = '';
585 $disabled_for = array();
586 $optiongroup = array();
587 $order = $key;
588
589 if (is_array($this->menu_settings)) {
590
591 if (isset($this->menu_settings[$current_menu_item[2]])) {
592 $optiongroup = $this->menu_settings[$current_menu_item[2]];
593
594 if (isset($optiongroup['name'])) {
595 $name = $optiongroup['name'];
596
597 if ($name != "") {
598 $current_menu_item['name'] = $name;
599 }
600 }
601
602 if (isset($optiongroup['order'])) {
603 $order = $optiongroup['order'];
604 }
605
606 if (isset($optiongroup['hidden_for'])) {
607 $disabled_for = $optiongroup['hidden_for'];
608
609 if ($this->is_hidden($disabled_for)) {
610 $current_menu_item['hidden'] = true;
611 }
612 }
613 }
614 }
615
616 $current_menu_item['order'] = $order;
617
618
619 if (isset($current_menu_item['hidden'])) {
620
621 if ($current_menu_item['hidden'] == true) {
622
623 return false;
624 } else {
625
626 return $current_menu_item;
627 }
628 } else {
629
630 return $current_menu_item;
631 }
632 }
633
634
635
636 /**
637 * Menu Editor Menu
638 */
639 public function jltwp_adminify_menu_editor_submenu()
640 {
641 add_submenu_page(
642 'wp-adminify-settings',
643 esc_html__('Menu Editor by WP Adminify', 'adminify'),
644 esc_html__('Menu Editor', 'adminify'),
645 apply_filters('jltwp_adminify_capability', 'manage_options'),
646 'adminify-menu-editor', // Page slug, will be displayed in URL
647 [$this, 'jltwp_adminify_menu_editor_contents']
648 );
649 }
650
651 /**
652 * Render Menu Editor
653 */
654 public function render_menu_editor()
655 {
656 global $wp_roles;
657
658 $users = get_users();
659 $this->users = $users;
660 $this->roles = $wp_roles->roles;
661
662 if ($this->menu && is_array($this->menu)) {
663
664 foreach ($this->menu as $menu_item) {
665
666 if (strpos($menu_item[2], "separator") !== false && !$menu_item[0]) {
667
668 // Render Separator
669 $this->render_menu_separator($menu_item);
670 } else {
671
672 // Render Top Level menu
673 $this->render_top_level_menu_item($this->menu, $menu_item, $this->submenu);
674 }
675 }
676 ?>
677 <script>
678 jQuery(function($) {
679
680 $('.adminify-menu-settings').tokenize2({
681 placeholder: '<?php _e('Select roles or users', 'adminify') ?>'
682 });
683
684 $('.adminify-menu-settings').on('tokenize:select', function() {
685 $(this).tokenize2().trigger('tokenize:search', [$(this).tokenize2().input.val()]);
686 });
687
688 });
689 </script>
690 <?php
691
692 }
693 }
694
695
696 public function get_icon($value, $default)
697 {
698 if (empty($value)) return $default;
699 return $value;
700 }
701
702
703 /**
704 * Render Top Level menu Item
705 *
706 * @return void
707 */
708 public function render_top_level_menu_item($master_menu, $current_menu_item, $master_sub_menu)
709 {
710
711 $disabled_for = '';
712 $menu_id = preg_replace("/[^A-Za-z0-9 ]/", '', $current_menu_item[5]);
713 $name = '';
714 $link = '';
715 $icon = '';
716 $disabled_for = array();
717 $optiongroup = array();
718 $menu_options = $this->menu_settings;
719
720 if (is_array($menu_options)) {
721
722 if (isset($menu_options[$current_menu_item[2]])) {
723 $optiongroup = $menu_options[$current_menu_item[2]];
724
725 if (isset($optiongroup['name'])) {
726 $name = $optiongroup['name'];
727 }
728
729 if (isset($optiongroup['link'])) {
730 $link = $optiongroup['link'];
731 }
732 if (isset($optiongroup['icon'])) {
733 $icon = $optiongroup['icon'];
734 }
735 if (isset($optiongroup['hidden_for'])) {
736 $disabled_for = $optiongroup['hidden_for'];
737 }
738 }
739 }
740
741 if (!is_array($disabled_for)) {
742 $disabled_for = array();
743 }
744
745
746 /// LIST OF AVAILABLE MENU ICONS
747 $icons = array(
748 'dashicons-admin-multisite' => 'dashicons dashicons-admin-multisite',
749 'dashicons-dashboard' => 'dashicons dashicons-dashboard',
750 'dashicons-admin-post' => 'dashicons dashicons-admin-post',
751 'dashicons-database' => 'dashicons dashicons-database',
752 'dashicons-admin-media' => 'dashicons dashicons-admin-media',
753 'dashicons-admin-page' => 'dashicons dashicons-admin-page',
754 'dashicons-admin-comments' => 'dashicons dashicons-admin-comments',
755 'dashicons-admin-appearance' => 'dashicons dashicons-admin-appearance',
756 'dashicons-admin-plugins' => 'dashicons dashicons-admin-plugins',
757 'dashicons-admin-users' => 'dashicons dashicons-admin-users',
758 'dashicons-admin-tools' => 'dashicons dashicons-admin-tools',
759 'dashicons-chart-bar' => 'dashicons dashicons-chart-bar',
760 'dashicons-admin-settings' => 'dashicons dashicons-admin-settings',
761 WP_ADMINIFY_ASSETS_IMAGE . 'logos/menu-icon.svg' => WP_ADMINIFY_ASSETS_IMAGE . 'logos/menu-icon.svg'
762 );
763
764 $default_icons = (isset($current_menu_item)) ? $current_menu_item[6] : 'dashicons dashicons-external';
765
766 ?>
767 <div class="accordion adminify_menu_item" name="<?php echo $current_menu_item[2] ?>" id="wp-adminify-top-menu-<?php echo esc_attr($menu_id); ?>">
768 <input type="number" class="top_level_order" value="" style="display:none;">
769 <a class="menu-editor-title accordion-button p-4" href="#">
770 <svg class="drag-icon is-pulled-left mr-2" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
771 <path d="M12 14C13.1046 14 14 13.1046 14 12C14 10.8954 13.1046 10 12 10C10.8954 10 10 10.8954 10 12C10 13.1046 10.8954 14 12 14Z" fill="#4E4B66" fill-opacity="0.72" />
772 <path d="M12 7C13.1046 7 14 6.10457 14 5C14 3.89543 13.1046 3 12 3C10.8954 3 10 3.89543 10 5C10 6.10457 10.8954 7 12 7Z" fill="#4E4B66" fill-opacity="0.72" />
773 <path d="M12 21C13.1046 21 14 20.1046 14 19C14 17.8954 13.1046 17 12 17C10.8954 17 10 17.8954 10 19C10 20.1046 10.8954 21 12 21Z" fill="#4E4B66" fill-opacity="0.72" />
774 <path d="M5 14C6.10457 14 7 13.1046 7 12C7 10.8954 6.10457 10 5 10C3.89543 10 3 10.8954 3 12C3 13.1046 3.89543 14 5 14Z" fill="#4E4B66" fill-opacity="0.72" />
775 <path d="M5 7C6.10457 7 7 6.10457 7 5C7 3.89543 6.10457 3 5 3C3.89543 3 3 3.89543 3 5C3 6.10457 3.89543 7 5 7Z" fill="#4E4B66" fill-opacity="0.72" />
776 <path d="M5 21C6.10457 21 7 20.1046 7 19C7 17.8954 6.10457 17 5 17C3.89543 17 3 17.8954 3 19C3 20.1046 3.89543 21 5 21Z" fill="#4E4B66" fill-opacity="0.72" />
777 <path d="M19 14C20.1046 14 21 13.1046 21 12C21 10.8954 20.1046 10 19 10C17.8954 10 17 10.8954 17 12C17 13.1046 17.8954 14 19 14Z" fill="#4E4B66" fill-opacity="0.72" />
778 <path d="M19 7C20.1046 7 21 6.10457 21 5C21 3.89543 20.1046 3 19 3C17.8954 3 17 3.89543 17 5C17 6.10457 17.8954 7 19 7Z" fill="#4E4B66" fill-opacity="0.72" />
779 <path d="M19 21C20.1046 21 21 20.1046 21 19C21 17.8954 20.1046 17 19 17C17.8954 17 17 17.8954 17 19C17 20.1046 17.8954 21 19 21Z" fill="#4E4B66" fill-opacity="0.72" />
780 </svg>
781 <?php echo (preg_replace('/\<span.*?>.*?\<\/span><\/span>/s', '', $current_menu_item[0])); ?>
782 </a>
783
784 <div class="accordion-body adminify_top_level_settings">
785 <div class="tabs tabbable m-0">
786 <ul class="m-0 b-0 nav nav-tabs">
787 <li class="nav-item active">
788 <a class="nav-link is-clickable active" href="#tab-<?php echo esc_attr($menu_id); ?>-1">
789 <?php _e('Settings', 'adminify'); ?>
790 </a>
791 </li>
792 <li class="nav-item" role="presentation">
793 <a class="nav-link is-clickable" href="#tab-<?php echo esc_attr($menu_id); ?>-2">
794 <?php _e('Submenu', 'adminify'); ?>
795 </a>
796 </li>
797 </ul>
798 </div>
799
800 <div class="tab-content tab-panel panel p-4">
801 <div id="tab-<?php echo esc_attr($menu_id); ?>-1" class="tab-pane">
802 <div class="menu-editor-form">
803 <div class="columns">
804 <div class="column">
805 <label for="<?php echo $current_menu_item[2] ?>">
806 <?php _e('Rename as', 'adminify'); ?>
807 </label>
808 <input class="menu_setting" type="text" name="name" data-top-menu-id="<?php echo esc_attr($menu_id); ?>" placeholder="<?php echo $current_menu_item[0]; ?>" value='<?php echo $name ?>' />
809 </div>
810 <div class="column">
811 <label for="<?php echo $current_menu_item[2] ?>">
812 <?php _e('Hidden For Rules', 'adminify'); ?>
813 </label>
814
815 <div class="select is-small">
816 <select class="adminify-menu-settings menu_setting" name="hidden_for" id="<?php echo esc_attr($menu_id); ?>-user-role-types" multiple>
817 <?php
818 $sel = '';
819
820 if (in_array('Super Admin', $disabled_for)) {
821 $sel = 'selected';
822 }
823 ?>
824 <option value="Super Admin" <?php echo $sel ?>><?php _e('Super Admin', 'adminify') ?></option>
825 <?php
826 foreach ($this->roles as $role) {
827 $rolename = $role['name'];
828 $sel = '';
829
830 if (in_array($rolename, $disabled_for)) {
831 $sel = 'selected';
832 }
833 ?>
834 <option value="<?php echo $rolename ?>" <?php echo $sel ?>><?php echo $rolename ?></option>
835 <?php
836 }
837
838 foreach ($this->users as $user) {
839 $username = $user->display_name;
840 $sel = '';
841
842 if (in_array($username, $disabled_for)) {
843 $sel = 'selected';
844 }
845 ?>
846 <option value="<?php echo $username ?>" <?php echo $sel ?>><?php echo $username ?></option>
847 <?php
848 }
849 ?>
850 </select>
851
852 </div>
853 </div>
854 </div>
855 <div class="columns">
856 <div class="column">
857 <label for="">
858 <?php _e('Change Link', 'adminify'); ?>
859 </label>
860 <input class="menu_setting" name="link" type="url" placeholder="<?php _e('New link', 'adminify'); ?>" value="<?php echo esc_url($link); ?>">
861 </div>
862 <div class="column">
863 <label for="">
864 <?php _e('Set Custom Icon', 'adminify'); ?>
865 </label>
866 <div class="icon-picker-wrap wp-adminify-menu-icon-picker adminify-icon-picker-input icon-select-button is-clickable is-pulled-left">
867 <ul class="icon-picker">
868 <li class="icon-none" title="None"><i class="dashicons dashicons-dismiss"></i></li>
869 <li class="select-icon" title="Icon Library">
870 <?php
871 $adminify_icon = WP_ADMINIFY_ASSETS_IMAGE . 'logos/menu-icon.svg';
872 if (empty($icons[$default_icons])) {
873 echo '<i class=""><img src=' . $adminify_icon . ' ></i>';
874 } else { ?>
875 <i class="<?php echo $this->get_icon(esc_attr($icon), $icons[$default_icons]); ?>"></i>
876 <?php } ?>
877
878 </li>
879 <input type="hidden" class="menu_setting" name="icon" value="<?php echo esc_attr($icon); ?>">
880 </ul>
881 </div>
882 </div>
883 </div>
884 </div>
885 </div>
886 <div id="tab-<?php echo esc_attr($menu_id); ?>-2" class="tab-pane tab-pane--submenu">
887 <?php
888
889 // Sub Menu Items Check
890 $link = $current_menu_item[2];
891 if (isset($master_sub_menu[$link]) && is_array($master_sub_menu[$link])) {
892 foreach ($master_sub_menu[$link] as $sub_menu_item) {
893 $this->build_sub_menu_item($sub_menu_item, $optiongroup);
894 }
895 } else {
896 ?>
897 <span><?php _e('No sub menu items', 'adminify'); ?></span>
898 <?php
899 } ?>
900
901 </div>
902 </div>
903
904 </div>
905 </div>
906
907 <?php
908 }
909
910
911 public function render_menu_separator($current_menu_item)
912 {
913
914 $disabled_for = array();
915 $name = '';
916 $menu_id = preg_replace("/[^A-Za-z0-9 ]/", '', $current_menu_item[2]);
917 $menu_options = $this->menu_settings;
918
919 if (is_array($menu_options)) {
920
921 if (isset($menu_options[$current_menu_item[2]])) {
922 $optiongroup = $menu_options[$current_menu_item[2]];
923
924 if (isset($optiongroup['name'])) {
925 $name = $optiongroup['name'];
926 }
927 if (isset($optiongroup['hidden_for'])) {
928 $disabled_for = $optiongroup['hidden_for'];
929 }
930 }
931 }
932
933 if (!is_array($disabled_for)) {
934 $disabled_for = array();
935 }
936 ?>
937 <div class="accordion adminify_menu_item" name="<?php echo $current_menu_item[2] ?>" id="<?php echo esc_attr($menu_id); ?>">
938 <input type="number" class="top_level_order" value="" style="display:none;">
939 <a class="menu-editor-title accordion-button p-4" href="#">
940 <svg class="drag-icon is-pulled-left mr-2" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
941 <path d="M12 14C13.1046 14 14 13.1046 14 12C14 10.8954 13.1046 10 12 10C10.8954 10 10 10.8954 10 12C10 13.1046 10.8954 14 12 14Z" fill="#4E4B66" fill-opacity="0.72" />
942 <path d="M12 7C13.1046 7 14 6.10457 14 5C14 3.89543 13.1046 3 12 3C10.8954 3 10 3.89543 10 5C10 6.10457 10.8954 7 12 7Z" fill="#4E4B66" fill-opacity="0.72" />
943 <path d="M12 21C13.1046 21 14 20.1046 14 19C14 17.8954 13.1046 17 12 17C10.8954 17 10 17.8954 10 19C10 20.1046 10.8954 21 12 21Z" fill="#4E4B66" fill-opacity="0.72" />
944 <path d="M5 14C6.10457 14 7 13.1046 7 12C7 10.8954 6.10457 10 5 10C3.89543 10 3 10.8954 3 12C3 13.1046 3.89543 14 5 14Z" fill="#4E4B66" fill-opacity="0.72" />
945 <path d="M5 7C6.10457 7 7 6.10457 7 5C7 3.89543 6.10457 3 5 3C3.89543 3 3 3.89543 3 5C3 6.10457 3.89543 7 5 7Z" fill="#4E4B66" fill-opacity="0.72" />
946 <path d="M5 21C6.10457 21 7 20.1046 7 19C7 17.8954 6.10457 17 5 17C3.89543 17 3 17.8954 3 19C3 20.1046 3.89543 21 5 21Z" fill="#4E4B66" fill-opacity="0.72" />
947 <path d="M19 14C20.1046 14 21 13.1046 21 12C21 10.8954 20.1046 10 19 10C17.8954 10 17 10.8954 17 12C17 13.1046 17.8954 14 19 14Z" fill="#4E4B66" fill-opacity="0.72" />
948 <path d="M19 7C20.1046 7 21 6.10457 21 5C21 3.89543 20.1046 3 19 3C17.8954 3 17 3.89543 17 5C17 6.10457 17.8954 7 19 7Z" fill="#4E4B66" fill-opacity="0.72" />
949 <path d="M19 21C20.1046 21 21 20.1046 21 19C21 17.8954 20.1046 17 19 17C17.8954 17 17 17.8954 17 19C17 20.1046 17.8954 21 19 21Z" fill="#4E4B66" fill-opacity="0.72" />
950 </svg>
951 <?php _e('Separator', 'adminify') ?>
952 </a>
953
954 <div class="accordion-body adminify_top_level_settings">
955 <div class="tab-content tab-panel panel p-4">
956 <div class="menu-editor-form">
957 <div class="columns">
958 <div class="column">
959 <label for=""><?php _e('Rename as', 'adminify'); ?></label>
960 <input class="menu_setting" type="text" name="name" placeholder="<?php _e('New Name', 'adminify'); ?>" value="<?php echo $name ?>">
961 </div>
962 <div class="column">
963 <label for=""><?php _e('Hidden For Rules', 'adminify'); ?></label>
964
965 <div class="select is-small">
966 <select class="adminify-menu-settings menu_setting" name="hidden_for" id="<?php echo esc_attr($menu_id); ?>-user-role-types" multiple>
967 <?php
968 $sel = '';
969
970 if (in_array('Super Admin', $disabled_for)) {
971 $sel = 'selected';
972 }
973 ?>
974 <option value="Super Admin" <?php echo $sel ?>><?php _e('Super Admin', 'adminify') ?></option>
975 <?php
976 foreach ($this->roles as $role) {
977 $rolename = $role['name'];
978 $sel = '';
979
980 if (in_array($rolename, $disabled_for)) {
981 $sel = 'selected';
982 }
983 ?>
984 <option value="<?php echo $rolename ?>" <?php echo $sel ?>><?php echo $rolename ?></option>
985 <?php
986 }
987
988 foreach ($this->users as $user) {
989 $username = $user->display_name;
990 $sel = '';
991
992 if (in_array($username, $disabled_for)) {
993 $sel = 'selected';
994 }
995 ?>
996 <option value="<?php echo $username ?>" <?php echo $sel ?>><?php echo $username ?></option>
997 <?php
998 }
999 ?>
1000 </select>
1001
1002 <script>
1003 jQuery('#<?php echo esc_attr($menu_id); ?> #<?php echo esc_attr($menu_id); ?>-user-role-types').tokenize2({
1004 placeholder: '<?php _e('Select roles or users', 'adminify') ?>'
1005 });
1006 jQuery(document).ready(function($) {
1007 $('#<?php echo esc_attr($menu_id); ?> #<?php echo esc_attr($menu_id); ?>-user-role-types').on('tokenize:select', function(container) {
1008 $(this).tokenize2().trigger('tokenize:search', [$(this).tokenize2().input.val()]);
1009 });
1010 })
1011 </script>
1012 </div>
1013 </div>
1014 </div>
1015 </div>
1016
1017 </div>
1018 </div>
1019 </div>
1020
1021 <?php }
1022
1023
1024
1025 public function build_sub_menu_item($current_menu_item, $optiongroup)
1026 {
1027
1028 $name = '';
1029 $link = '';
1030 $icon = '';
1031 $disabled_for = array();
1032 $suboptiongroup = array();
1033 $menu_options = $this->menu_settings;
1034
1035 if (isset($optiongroup['submenu'])) {
1036 if (isset($optiongroup['submenu'][$current_menu_item[2]])) {
1037 $suboptiongroup = $optiongroup['submenu'][$current_menu_item[2]];
1038
1039 if (isset($suboptiongroup['name'])) {
1040 $name = $suboptiongroup['name'];
1041 }
1042
1043 if (isset($suboptiongroup['link'])) {
1044 $link = $suboptiongroup['link'];
1045 }
1046
1047 if (isset($suboptiongroup['icon'])) {
1048 $icon = $suboptiongroup['icon'];
1049 }
1050 if (isset($suboptiongroup['hidden_for'])) {
1051 $disabled_for = $suboptiongroup['hidden_for'];
1052 }
1053 }
1054 }
1055
1056
1057 if (!is_array($disabled_for)) {
1058 $disabled_for = array();
1059 }
1060
1061 $menu_id = preg_replace("/[^A-Za-z0-9 ]/", '', $current_menu_item[2]);
1062
1063 ?>
1064 <div class="accordion adminify_sub_menu_item" name="<?php echo $current_menu_item[2] ?>" id="wp-adminify-sub-menu-<?php echo esc_attr($menu_id); ?>">
1065 <input type="number" class="top_level_order" value="" style="display:none;">
1066 <a class="menu-editor-title accordion-button p-4" href="#">
1067 <svg class="drag-icon is-pulled-left mr-2" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1068 <path d="M12 14C13.1046 14 14 13.1046 14 12C14 10.8954 13.1046 10 12 10C10.8954 10 10 10.8954 10 12C10 13.1046 10.8954 14 12 14Z" fill="#4E4B66" fill-opacity="0.72" />
1069 <path d="M12 7C13.1046 7 14 6.10457 14 5C14 3.89543 13.1046 3 12 3C10.8954 3 10 3.89543 10 5C10 6.10457 10.8954 7 12 7Z" fill="#4E4B66" fill-opacity="0.72" />
1070 <path d="M12 21C13.1046 21 14 20.1046 14 19C14 17.8954 13.1046 17 12 17C10.8954 17 10 17.8954 10 19C10 20.1046 10.8954 21 12 21Z" fill="#4E4B66" fill-opacity="0.72" />
1071 <path d="M5 14C6.10457 14 7 13.1046 7 12C7 10.8954 6.10457 10 5 10C3.89543 10 3 10.8954 3 12C3 13.1046 3.89543 14 5 14Z" fill="#4E4B66" fill-opacity="0.72" />
1072 <path d="M5 7C6.10457 7 7 6.10457 7 5C7 3.89543 6.10457 3 5 3C3.89543 3 3 3.89543 3 5C3 6.10457 3.89543 7 5 7Z" fill="#4E4B66" fill-opacity="0.72" />
1073 <path d="M5 21C6.10457 21 7 20.1046 7 19C7 17.8954 6.10457 17 5 17C3.89543 17 3 17.8954 3 19C3 20.1046 3.89543 21 5 21Z" fill="#4E4B66" fill-opacity="0.72" />
1074 <path d="M19 14C20.1046 14 21 13.1046 21 12C21 10.8954 20.1046 10 19 10C17.8954 10 17 10.8954 17 12C17 13.1046 17.8954 14 19 14Z" fill="#4E4B66" fill-opacity="0.72" />
1075 <path d="M19 7C20.1046 7 21 6.10457 21 5C21 3.89543 20.1046 3 19 3C17.8954 3 17 3.89543 17 5C17 6.10457 17.8954 7 19 7Z" fill="#4E4B66" fill-opacity="0.72" />
1076 <path d="M19 21C20.1046 21 21 20.1046 21 19C21 17.8954 20.1046 17 19 17C17.8954 17 17 17.8954 17 19C17 20.1046 17.8954 21 19 21Z" fill="#4E4B66" fill-opacity="0.72" />
1077 </svg>
1078 <?php echo (preg_replace('/\<span.*?>.*?\<\/span><\/span>/s', '', $current_menu_item[0])); ?>
1079 </a>
1080
1081 <div class="accordion-body">
1082 <div class="tab-content tab-panel panel p-4">
1083 <div class="menu-editor-form">
1084 <div class="columns">
1085 <div class="column">
1086 <label for=""><?php _e('Rename as', 'adminify'); ?></label>
1087 <input class="sub_menu_setting" type="text" data-sub-menu-id="<?php echo esc_attr($menu_id); ?>" name="name" placeholder="<?php _e('New Menu name...', 'adminify') ?>" value="<?php echo $name ?>">
1088 </div>
1089 <div class="column">
1090 <label for=""><?php _e('Hidden For Rules', 'adminify'); ?></label>
1091
1092 <div class="select is-small">
1093 <select class="adminify-menu-settings sub_menu_setting" name="hidden_for" id="<?php echo esc_attr($menu_id); ?>-user-role-types" multiple>
1094 <?php
1095 $sel = '';
1096
1097 if (in_array('Super Admin', $disabled_for)) {
1098 $sel = 'selected';
1099 }
1100 ?>
1101 <option value="Super Admin" <?php echo $sel ?>><?php _e('Super Admin', 'adminify') ?></option>
1102 <?php
1103 foreach ($this->roles as $role) {
1104 $rolename = $role['name'];
1105 $sel = '';
1106
1107 if (in_array($rolename, $disabled_for)) {
1108 $sel = 'selected';
1109 }
1110 ?>
1111 <option value="<?php echo $rolename ?>" <?php echo $sel ?>><?php echo $rolename ?></option>
1112 <?php
1113 }
1114
1115 foreach ($this->users as $user) {
1116 $username = $user->display_name;
1117 $sel = '';
1118
1119 if (in_array($username, $disabled_for)) {
1120 $sel = 'selected';
1121 }
1122 ?>
1123 <option value="<?php echo $username ?>" <?php echo $sel ?>><?php echo $username ?></option>
1124 <?php
1125 }
1126 ?>
1127 </select>
1128
1129 <script>
1130 jQuery('#wp-adminify-sub-menu-<?php echo esc_attr($menu_id); ?> #<?php echo esc_attr($menu_id); ?>-user-role-types').tokenize2({
1131 placeholder: '<?php _e('Select roles or users', 'adminify') ?>'
1132 });
1133 jQuery(document).ready(function($) {
1134 $('#wp-adminify-sub-menu-<?php echo esc_attr($menu_id); ?> #<?php echo esc_attr($menu_id); ?>-user-role-types').on('tokenize:select', function(container) {
1135 $(this).tokenize2().trigger('tokenize:search', [$(this).tokenize2().input.val()]);
1136 });
1137 })
1138 </script>
1139
1140 </div>
1141 </div>
1142 </div>
1143 <div class="columns">
1144 <div class="column">
1145 <label for=""><?php _e('Change Link', 'adminify'); ?></label>
1146 <input class="sub_menu_setting" name="link" type="url" placeholder="New link" value="<?php echo $link ?>">
1147 </div>
1148 <div class="column">
1149 <label for=""><?php _e('Set Custom Icon', 'adminify'); ?></label>
1150
1151 <div class="icon-picker-wrap wp-adminify-menu-icon-picker adminify-icon-picker-input icon-select-button is-clickable is-pulled-left">
1152 <ul class="icon-picker">
1153 <li class="icon-none" title="None"><i class="dashicons dashicons-dismiss"></i></li>
1154 <li class="select-icon" title="Icon Library"><i class="<?php echo $this->get_icon(esc_attr($icon), 'dashicons dashicons-external'); ?>"></i></li>
1155 <input type="hidden" class="sub_menu_setting" name="icon" value="<?php echo esc_attr($icon); ?>">
1156 </ul>
1157 </div>
1158
1159 </div>
1160 </div>
1161 </div>
1162 </div>
1163 </div>
1164 </div>
1165
1166 <?php
1167 }
1168
1169
1170
1171
1172
1173 /**
1174 * Menu Editor Header
1175 *
1176 * @return void
1177 */
1178 public function render_menu_editor_header()
1179 {
1180 ?>
1181
1182 <div class="adminify-menu-editor-help-urls wp-heading-inline is-pulled-left is-flex is-align-items-center">
1183 <?php echo Utils::adminfiy_help_urls(
1184 'Menu Editor',
1185 'https://wpadminify.com/kb/wordpress-dashboard-menu-editor/',
1186 'https://www.youtube.com/playlist?list=PLqpMw0NsHXV-EKj9Xm1DMGa6FGniHHly8',
1187 'https://www.facebook.com/groups/jeweltheme',
1188 'https://wpadminify.com/support/'
1189 ); ?>
1190 </div>
1191
1192
1193 <div class="wp-adminify--page--title--actions mt-1 is-pulled-right">
1194
1195 <button class="page-title-action mr-3 adminify_menu_save_settings">
1196 <?php _e('Save', 'adminify'); ?>
1197 </button>
1198
1199 <div class="dropdown is-right is-hoverable is-pulled-right">
1200 <div class="dropdown-trigger">
1201 <button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
1202 <svg class="icon" width="16" height="12" viewBox="0 0 16 12" fill="none" xmlns="http://www.w3.org/2000/svg">
1203 <path d="M5 12C3.63144 12.0007 2.43589 11.0751 2.09375 9.75H0.5V8.25H2.0945C2.48423 6.74059 3.96509 5.78119 5.50196 6.04243C7.03883 6.30366 8.11953 7.69847 7.98865 9.25188C7.85776 10.8053 6.55892 11.9996 5 12ZM5 7.5C4.18055 7.50083 3.51342 8.15914 3.50167 8.97851C3.48993 9.79788 4.13792 10.475 4.95702 10.4993C5.77611 10.5237 6.46312 9.88613 6.5 9.0675V9.3675V9C6.5 8.17158 5.82843 7.5 5 7.5ZM15.5 9.75H8.75V8.25H15.5V9.75ZM8.75 6C7.38172 6.00035 6.18657 5.07483 5.8445 3.75H0.5V2.25H5.8445C6.23423 0.740588 7.71509 -0.218809 9.25196 0.0424253C10.7888 0.30366 11.8695 1.69847 11.7386 3.25188C11.6078 4.80529 10.3089 5.99961 8.75 6ZM8.75 1.5C7.93055 1.50083 7.26342 2.15914 7.25167 2.97851C7.23993 3.79788 7.88792 4.47503 8.70702 4.49934C9.52611 4.52365 10.2131 3.88613 10.25 3.0675V3.3675V3C10.25 2.17158 9.57843 1.5 8.75 1.5ZM15.5 3.75H12.5V2.25H15.5V3.75Z" fill="#0347FF" />
1204 </svg>
1205 </button>
1206 </div>
1207 <div class="dropdown-menu" id="dropdown-menu" role="menu">
1208 <div class="dropdown-content">
1209 <a href="#" class="dropdown-item adminify_export_menu_settings">
1210 <?php _e('Export menu', 'adminify'); ?>
1211 </a>
1212 <input accept=".json" type="file" single="" id="adminify_import_menu" class="hidden">
1213 <a href="#" class="dropdown-item adminify_import_menu_settings">
1214 <?php _e('Import menu', 'adminify'); ?>
1215 </a>
1216 <a href="#" class="dropdown-item adminify_reset_menu_settings">
1217 <?php _e('Reset menu', 'adminify'); ?>
1218 </a>
1219 </div>
1220 </div>
1221 </div>
1222 </div>
1223
1224 <div class="is-inline-block">
1225 <p><?php _e('Edit each menu item\'s name, link, icon and visibility. Drag and drop to rearange the menu. Changes will take effect after page refresh.', 'adminify'); ?></p>
1226 <p>
1227 <svg class="is-pulled-left mr-1 mt-1" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
1228 <path d="M7.33398 7.32002C7.33398 7.14321 7.40422 6.97364 7.52925 6.84861C7.65427 6.72359 7.82384 6.65335 8.00065 6.65335C8.17746 6.65335 8.34703 6.72359 8.47206 6.84861C8.59708 6.97364 8.66732 7.14321 8.66732 7.32002V11.32C8.66732 11.4968 8.59708 11.6664 8.47206 11.7914C8.34703 11.9164 8.17746 11.9867 8.00065 11.9867C7.82384 11.9867 7.65427 11.9164 7.52925 11.7914C7.40422 11.6664 7.33398 11.4968 7.33398 11.32V7.32002Z" fill="#4E4B66" />
1229 <path d="M8.00065 4.034C7.82384 4.034 7.65427 4.10423 7.52925 4.22926C7.40422 4.35428 7.33398 4.52385 7.33398 4.70066C7.33398 4.87747 7.40422 5.04704 7.52925 5.17207C7.65427 5.29709 7.82384 5.36733 8.00065 5.36733C8.17746 5.36733 8.34703 5.29709 8.47206 5.17207C8.59708 5.04704 8.66732 4.87747 8.66732 4.70066C8.66732 4.52385 8.59708 4.35428 8.47206 4.22926C8.34703 4.10423 8.17746 4.034 8.00065 4.034Z" fill="#4E4B66" />
1230 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.00065 1.33334C4.31865 1.33334 1.33398 4.31801 1.33398 8.00001C1.33398 11.682 4.31865 14.6667 8.00065 14.6667C11.6827 14.6667 14.6673 11.682 14.6673 8.00001C14.6673 4.31801 11.6827 1.33334 8.00065 1.33334ZM2.66732 8.00001C2.66732 9.4145 3.22922 10.7711 4.22942 11.7712C5.22961 12.7714 6.58616 13.3333 8.00065 13.3333C9.41514 13.3333 10.7717 12.7714 11.7719 11.7712C12.7721 10.7711 13.334 9.4145 13.334 8.00001C13.334 6.58552 12.7721 5.22897 11.7719 4.22877C10.7717 3.22858 9.41514 2.66668 8.00065 2.66668C6.58616 2.66668 5.22961 3.22858 4.22942 4.22877C3.22922 5.22897 2.66732 6.58552 2.66732 8.00001V8.00001Z" fill="#4E4B66" />
1231 </svg>
1232
1233 <?php _e('If you have WP Adminify Menu Module disabled, icons and label dividers won\'t change.', 'adminify'); ?>
1234
1235 </p>
1236 </div>
1237
1238
1239 <?php }
1240
1241
1242
1243 public function jltwp_adminify_menu_editor_contents()
1244 { ?>
1245
1246 <div class="wrap">
1247 <div class="wp-adminify--menu--editor--container mt-4">
1248
1249 <div id="adminify-data-saved-message"></div>
1250
1251 <?php $this->render_menu_editor_header(); ?>
1252
1253
1254 <div class="wp-adminify--menu--editor--settings mt-5 pt-3">
1255 <div class="wp-adminify-menu-editor-loader"></div>
1256 <?php $this->render_menu_editor(); ?>
1257 </div>
1258
1259 </div>
1260 </div>
1261 <a href="#" id="adminify_download_settings" style="display: none;" ?></a>
1262 <?php }
1263 }
1264 }
1265