PluginProbe ʕ •ᴥ•ʔ
Nested Pages / trunk
Nested Pages vtrunk
3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 trunk 1.0 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.3.0 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.2 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.3.1 1.6.3.2 1.6.4 1.6.5 1.6.5.1 1.6.5.2 1.6.6 1.6.7 1.6.8 1.7.0 1.7.1 2.0.1 2.0.2 2.0.3 2.0.4 3.0.1 3.0.10 3.0.11 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.20 3.1.21 3.1.22 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7
wp-nested-pages / app / Config / AdminMenuSettings.php
wp-nested-pages / app / Config Last commit date
AdminMenuSettings.php 4 years ago Settings.php 2 years ago SettingsRepository.php 3 years ago
AdminMenuSettings.php
137 lines
1 <?php
2 namespace NestedPages\Config;
3
4 use NestedPages\Entities\User\UserRepository;
5 use NestedPages\Config\SettingsRepository;
6
7 /**
8 * Displays the admin menu settings
9 */
10 class AdminMenuSettings
11 {
12 private $user_repo;
13
14 private $settings;
15
16 public $roles;
17
18 public $nav_menu_options;
19
20 public $np_menu_original;
21
22 public $np_submenu_original;
23
24 public $menu;
25
26 public function __construct()
27 {
28 $this->user_repo = new UserRepository;
29 $this->settings = new SettingsRepository;
30 $this->roles = $this->user_repo->allRoles(null, true);
31 $this->nav_menu_options = $this->settings->adminCustomEnabled('nav_menu_options');
32
33 global $np_menu_original;
34 $this->np_menu_original = $np_menu_original;
35 global $np_submenu_original;
36 $this->np_submenu_original = $np_submenu_original;
37 global $menu;
38 $this->menu = $menu;
39 }
40
41 /**
42 * Data for an individual menu item
43 */
44 public function menuItemData($menu_item, $role)
45 {
46 $data = [];
47 $id = $menu_item[2];
48 $data['id'] = $id;
49
50 // Separator/WooCommerce Separator
51 $data['separator'] = ( $menu_item[0] == '' && isset($menu_item[4]) && $menu_item[4] == 'wp-menu-separator' ) ? true : false;
52 if ( isset($menu_item[4]) && $menu_item[4] == 'wp-menu-separator woocommerce' ) $data['separator'] = true;
53
54 // Set the Label
55 $text = strip_tags(preg_replace('#<span[^>]*>(.*)</span>#isU','', $menu_item[0]));
56 $original_text = $text;
57 $data['custom_label'] = null;
58 if ( isset($this->nav_menu_options[$role['name']][$id]['label']) && $this->nav_menu_options[$role['name']][$id]['label'] !== '' )
59 $data['custom_label'] = $this->nav_menu_options[$role['name']][$id]['label'];
60 if ( $data['separator'] ) $custom_label = __('Separator', 'wp-nested-pages');
61 if ( $data['custom_label'] ) $text = $data['custom_label'];
62 $data['text'] = $text;
63 $data['original_text'] = $original_text;
64
65 // Set the Icon
66 $icon = ( isset($menu_item[6]) && $menu_item[6] !== '' ) ? $menu_item[6] : 'dashicons-admin-post';
67 $data['original_icon'] = $icon;
68 $data['custom_icon'] = null;
69 if ( isset($this->nav_menu_options[$role['name']][$id]['icon']) && $this->nav_menu_options[$role['name']][$id]['icon'] !== '' )
70 $data['custom_icon'] = $this->nav_menu_options[$role['name']][$id]['icon'];
71 if ( $data['custom_icon'] ) $icon = $data['custom_icon'];
72 $data['icon'] = $icon;
73
74 // Set the original link
75 $data['original_link'] = $menu_item[2];
76
77 // Set the submenu
78 $data['submenu'] = ( isset($menu_item['submenu']) ) ? $menu_item['submenu'] : null;
79 $data['has_custom_submenu'] = ( isset($this->nav_menu_options[$role['name']][$id]['submenu']) ) ? true : false;
80 $data['submenu_items'] = $this->submenuItems($data, $role);
81
82 return $data;
83 }
84
85 /**
86 * Submenu Items
87 */
88 public function submenuItems($menu_item, $role)
89 {
90 // Get all submenus
91 if ( !array_key_exists($role['name'], $this->np_menu_original) ) return $menu_item;
92 $unordered_menu = $this->np_menu_original[$role['name']];
93 $unordered_submenus = [];
94 foreach ( $unordered_menu as $unordered_menu_item ){
95 if ( isset($unordered_menu_item['submenu']) ) {
96 $unordered_submenus[$unordered_menu_item[2]] = $unordered_menu_item['submenu'];
97 }
98 }
99
100 $id = $menu_item['id'];
101
102 // Use the custom menu if available, otherwise use default
103 $submenu_items = ( $menu_item['has_custom_submenu'] )
104 ? $this->nav_menu_options[$role['name']][$id]['submenu']
105 : $menu_item['submenu'];
106
107 if ( !$menu_item['has_custom_submenu'] ) return $submenu_items;
108
109 // Remove submenu items not active (removed by plugin deactivation since last save)
110 foreach ( $submenu_items as $submenu_key => $submenu_item ) :
111 $exists = false;
112 foreach ( $unordered_submenus[$id] as $unordered_item ) :
113 if ( $unordered_item[2] == $submenu_item['link'] ) $exists = true;
114 endforeach;
115 if ( !$exists ) unset($submenu_items[$submenu_key]);
116 endforeach;
117
118 // Add any missing submenu items (added by plugins since last save)
119 $missing_items = [];
120 foreach ( $unordered_submenus[$id] as $unordered_item ) :
121 $missing = true;
122 foreach ( $submenu_items as $submenu_key => $submenu_item ) :
123 if ( $submenu_item['link'] == $unordered_item[2] ) $missing = false;
124 endforeach;
125 if ( $missing ){
126 $submenu_items[] = [
127 'label' => $unordered_item[0],
128 'role' => $unordered_item[1],
129 'link' => $unordered_item[2],
130 'order' => count($submenu_items) + 1
131 ];
132 }
133 endforeach;
134 return $submenu_items;
135 }
136
137 }