PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 1.0.7
Adminify – White Label, Admin Menu Editor, Login Customizer v1.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 / Modules / MenuEditor / MenuEditor.php

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

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