PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 2.0.2
Adminify – White Label, Admin Menu Editor, Login Customizer v2.0.2
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.2, at Inc/Modules/MenuEditor/MenuEditor.php

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