PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.0.2.5
Adminify – White Label, Admin Menu Editor, Login Customizer v4.0.2.5
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
← All changes | Inc/functions.php +97 -175 4.2.194.0.2.5 View file →
@@ -1,23 +1,85 @@
1 1 <?php
2 2
3 -// no direct access allowed
4 -if (!defined('ABSPATH')) {
5 - exit;
3 +/**
4 + * Check given value empty or not
5 + *
6 + * @param [type] $value
7 + *
8 + * @return void
9 + */
10 +function check_is_empty($value, $default = '')
11 +{
12 + $value = !empty(esc_attr($value)) ? $value : $default;
13 + return $value;
6 14 }
7 15
8 16
9 17 // WP Adminify function for get an option
10 -function pxlbsadminify_get_option($option = '', $default = null) {
11 - $options = [];
12 - // if (is_multisite() && is_site_wide('wp-adminify/wp-adminify.php')) {
13 - $options = (array) \PXLBSAdminify\Inc\Admin\AdminSettings::get_instance()->get();
14 - // }
15 - return (isset($options[$option])) ? $options[$option] : $default;
18 +if (!function_exists('jltwp_adminify_get_option')) {
19 + function jltwp_adminify_get_option($option = '', $default = null)
20 + {
21 + $options = [];
22 + // if (is_multisite() && is_site_wide('wp-adminify/wp-adminify.php')) {
23 + $options = (array) \WPAdminify\Inc\Admin\AdminSettings::get_instance()->get();
24 + // }
25 + return (isset($options[$option])) ? $options[$option] : $default;
26 + }
16 27 }
17 28
29 +function is_site_wide($plugin)
30 +{
31 + if (!is_multisite()) {
32 + return false;
33 + }
18 34
35 + $plugins = get_site_option('active_sitewide_plugins');
36 + if (isset($plugins[$plugin])) {
37 + return true;
38 + }
39 +
40 + return false;
41 +}
42 +
43 +
44 +
45 +
19 46 /**
47 + * Check if the request is coming from an iframe.
48 + *
49 + * @param None
50 + * @throws None
51 + * @return bool
52 + */
53 +function is_iframe()
54 +{
55 + return isset($_SERVER["HTTP_SEC_FETCH_DEST"]) && strtolower($_SERVER["HTTP_SEC_FETCH_DEST"]) === "iframe";
56 + // $isIframe = isset($_SERVER["HTTP_SEC_FETCH_DEST"]) && strtolower($_SERVER["HTTP_SEC_FETCH_DEST"]) === "iframe";
57 + // if ( $isIframe ) return true;
58 + // if ( isset($_GET['adminify-iframe']) ) return true;
59 + // return false;
60 +}
61 +
62 +/**
63 + * Load a template file.
64 + *
65 + * @param string $template_name The name of the template file to load.
66 + * @throws None
67 + * @return void
68 + */
69 +function adminify_load_template($template_name)
70 +{
71 + require_once WP_ADMINIFY_PATH . 'Inc/Admin/Frames/Templates/' . $template_name;
72 +}
73 +
74 +function maybe_network_admin_url($url) {
75 + if ( is_network_admin() ) {
76 + return network_admin_url($url);
77 + }
78 + return admin_url($url);
79 +}
80 +
81 +/**
20 82 * User Roles Slug from Names
21 83 *
22 84 * @param [type] $user_roles
23 85 *
@@ -22,9 +84,9 @@
22 84 * @param [type] $user_roles
23 85 *
24 86 * @return void
25 87 */
26 -function pxlbsadminify_menu_roles($user_roles = [])
88 +function jltwp_adminify_menu_roles($user_roles = [])
27 89 {
28 90 $disabled_for_roles = [];
29 91 if (!empty( $user_roles)) {
30 92 foreach ($user_roles as $usr_key) {
@@ -34,28 +96,23 @@
34 96 return $disabled_for_roles;
35 97 }
36 98
37 99
38 -/**
39 - * Build admin menu array.
40 - *
41 - * @param array $menu Menu array.
42 - * @param array $submenu Submenu array.
43 - * @param array $menu_options Menu options array.
44 - *
45 - * @return array Admin menu array.
46 - */
47 -function pxlbsadminify_build_menu($menu, $submenu, $menu_options) {
100 +function jltwp_adminify_build_menu($menu, $submenu, $menu_options) {
101 +
48 102 $admin_menu = [];
49 - $menu_options = apply_filters('pxlbsadminify_menu_option_compatibility_filter', $menu_options, $menu);
50 103
51 - foreach ($menu as $key => $item) {
104 + foreach ($menu as $key => $item) {
105 +
52 106 if (is_array($menu_options)) {
53 107 if (isset($menu_options[$item[2]])) {
54 108 $optiongroup = $menu_options[$item[2]];
109 +
55 110 if (!empty($optiongroup['hidden_for'])) {
56 - $disabled_for = pxlbsadminify_menu_roles($optiongroup['hidden_for']);
57 - if (\PXLBSAdminify\Inc\Utils::restrict_for($disabled_for)) {
111 +
112 + $disabled_for = jltwp_adminify_menu_roles($optiongroup['hidden_for']);
113 +
114 + if (\WPAdminify\Inc\Utils::restricted_for($disabled_for)) {
58 115 continue;
59 116 }
60 117 }
61 118 }
@@ -60,15 +117,13 @@
60 117 }
61 118 }
62 119 }
63 120
121 +
64 122 $menu_slug = $item[2];
65 123 $menu_title = $item[0];
66 124 $menu_name = isset($item[5]) ? $item[5] : '';
67 - // Use unique key for custom menu items instead of link URL
68 - $menu_key_id = (!empty($menu_name) && strpos($menu_name, 'adminify-custom-menu-') !== false) ? $menu_name : $menu_slug;
69 125 $menu_icon = isset($item[6]) ? $item[6] : '';
70 - $external_link = (isset($item['external_link']) && $item['external_link'] == 1 ) ? true: false;
71 126
72 127 $menu_hook = get_plugin_page_hook($menu_slug, 'admin.php');
73 128 $menu_file = $menu_slug;
74 129 $pos = strpos($menu_file, '?');
@@ -78,9 +133,9 @@
78 133 }
79 134
80 135 $url = '';
81 136
82 - $arrParsedUrl = wp_parse_url($menu_slug);
137 + $arrParsedUrl = parse_url($menu_slug);
83 138 if (!empty($arrParsedUrl['scheme'])) {
84 139 if ($arrParsedUrl['scheme'] === "http" || $arrParsedUrl['scheme'] === "https") {
85 140 $url = $menu_slug;
86 141 }
@@ -85,35 +140,25 @@
85 140 $url = $menu_slug;
86 141 }
87 142 } else {
88 143 $url = ( ! empty($menu_hook) || ( ( 'index.php' !== $menu_slug ) && file_exists(WP_PLUGIN_DIR . "/$menu_file") && ! file_exists(ABSPATH . "/wp-admin/$menu_file") ) )
89 - ? \PXLBSAdminify\Inc\Utils::maybe_network_admin_url('admin.php?page=' . $menu_slug)
90 - : \PXLBSAdminify\Inc\Utils::maybe_network_admin_url($menu_slug);
144 + ? maybe_network_admin_url('admin.php?page=' . $menu_slug)
145 + : maybe_network_admin_url($menu_slug);
91 146 }
92 147
93 - $admin_menu[$menu_key_id] = [
94 - 'key' => $menu_key_id,
148 + $admin_menu[$menu_slug] = [
149 + 'key' => $menu_slug,
95 150 'title' => $menu_title,
96 151 'url' => $url,
97 152 'name' => $menu_name,
98 153 'icon' => $menu_icon,
99 154 'children' => [],
100 - 'separator' => !empty( $item['separator'] ) ? $item['separator'] : '',
101 - 'external_link' => $external_link ,
155 + 'separator' => !empty( $item['separator'] ) ? $item['separator'] : ''
102 156 ];
103 157
104 158 if (!empty($submenu[$menu_slug])) {
105 159 foreach ($submenu[$menu_slug] as $sub_key => $sub_item) {
106 160 $sub_slug = $sub_item[2];
107 - // Use unique key for custom submenu items instead of link URL
108 - $sub_key_id = isset($sub_item['key']) ? $sub_item['key'] : $sub_slug;
109 - $external_link = false;
110 - // Look up external_link setting using unique key first, then fall back to slug
111 - if( isset($optiongroup['submenu'][$sub_key_id]) && is_array($optiongroup['submenu'][$sub_key_id])){
112 - $external_link = (!empty($optiongroup['submenu'][$sub_key_id]['external_link']) && $optiongroup['submenu'][$sub_key_id]['external_link'] == 1) ? true : false;
113 - } elseif( isset($optiongroup['submenu'][$sub_slug]) && is_array($optiongroup['submenu'][$sub_slug])){
114 - $external_link = (!empty($optiongroup['submenu'][$sub_slug]['external_link']) && $optiongroup['submenu'][$sub_slug]['external_link'] == 1) ? true : false;
115 - }
116 161 $sub_title = $sub_item[0];
117 162 $sub_name = isset($sub_item[5]) ? $sub_item[5] : '';
118 163 $sub_icon = isset($sub_item[6]) ? $sub_item[6] : '';
119 164
@@ -127,9 +172,9 @@
127 172
128 173
129 174 $sub_url = '';
130 175
131 - $arrParsedUrl = wp_parse_url($sub_slug);
176 + $arrParsedUrl = parse_url($sub_slug);
132 177 if (!empty($arrParsedUrl['scheme'])) {
133 178 if ($arrParsedUrl['scheme'] === "http" || $arrParsedUrl['scheme'] === "https") {
134 179 $sub_url = $sub_slug;
135 180 }
@@ -134,149 +179,26 @@
134 179 $sub_url = $sub_slug;
135 180 }
136 181 } else {
137 182 $sub_url = ( ! empty($sub_menu_hook) || ( ( 'index.php' !== $sub_slug ) && file_exists(WP_PLUGIN_DIR . "/$sub_file") && ! file_exists(ABSPATH . "/wp-admin/$sub_file") ) )
138 - ? \PXLBSAdminify\Inc\Utils::maybe_network_admin_url('admin.php?page=' . $sub_slug)
139 - : \PXLBSAdminify\Inc\Utils::maybe_network_admin_url($sub_slug);
183 + ? maybe_network_admin_url('admin.php?page=' . $sub_slug)
184 + : maybe_network_admin_url($sub_slug);
140 185 }
141 186
142 187 // Wrong Menu/Submenu Links
143 -
144 188 // Support for White Label Plugin Url
145 189 if ('white-label' === $sub_slug) {
146 190 $sub_url = admin_url('options-general.php?page=white-label');
147 191 }
148 192
149 - // JetFormBuilder
150 - if ('jet-form-builder' === $sub_slug) { $sub_url = admin_url('edit.php?post_type=jet-form-builder'); }
151 - if ('jet-form-builder' === $sub_slug) { $sub_url = admin_url('post-new.php?post_type=jet-form-builder'); }
152 - if ('jfb-settings' === $sub_slug) { $sub_url = admin_url('edit.php?post_type=jet-form-builder&page=jfb-settings'); }
153 - if ('jfb-addons' === $sub_slug) { $sub_url = admin_url('edit.php?post_type=jet-form-builder&page=jfb-addons'); }
154 - if ('jfb-payments' === $sub_slug) { $sub_url = admin_url('edit.php?post_type=jet-form-builder&page=jfb-payments'); }
155 - if ('jfb-records' === $sub_slug) { $sub_url = admin_url('edit.php?post_type=jet-form-builder&page=jfb-records'); }
156 -
157 - // WP Adminify Support - open in new tab
158 - if ('adminify-support' === $sub_slug) {
159 - $sub_url = \PXLBSAdminify\Inc\Admin\AdminSettings::support_url();
160 - $external_link = true;
161 - }
162 -
163 - // WP Adminify Pricing/Upgrade - open in new tab
164 - if ('wp-adminify-settings-pricing' === $sub_slug) {
165 - $sub_url = 'https://wpadminify.com/pricing';
166 - $external_link = true;
167 - }
168 -
169 - $admin_menu[$menu_key_id]['children'][$sub_key_id] = [
170 - 'key' => $sub_key_id,
171 - 'title' => $sub_title,
172 - 'url' => $sub_url,
173 - 'name' => $sub_name,
174 - 'icon' => $sub_icon,
175 - 'external_link' => $external_link,
193 + $admin_menu[$menu_slug]['children'][$sub_slug] = [
194 + 'key' => $sub_slug,
195 + 'title' => $sub_title,
196 + 'url' => $sub_url,
197 + 'name' => $sub_name,
198 + 'icon' => $sub_icon,
176 199 ];
177 200 }
178 201 }
179 202 }
180 -
181 - // Elementor 3rd-level flyout menu integration
182 - // Grabs Quick Start, Settings, Tools, Role Manager, etc. from Elementor's sidebar navigation
183 - // Wrapped in Throwable catch so any Elementor API change degrades gracefully
184 - try {
185 - $elementor_flyout_class = '\Elementor\Modules\EditorOne\Classes\Menu_Data_Provider';
186 -
187 - if (class_exists($elementor_flyout_class)) {
188 - $elementor_menu_key = isset($admin_menu['elementor-home']) ? 'elementor-home' :
189 - (isset($admin_menu['elementor']) ? 'elementor' : null);
190 -
191 - if ($elementor_menu_key && isset($admin_menu[$elementor_menu_key]['children']['elementor'])
192 - && method_exists($elementor_flyout_class, 'instance')
193 - ) {
194 - $menu_data_provider = $elementor_flyout_class::instance();
195 -
196 - // Try known method names in order: current API → known alternates
197 - $flyout_items = [];
198 - $method_candidates = [
199 - 'get_third_level_data' => ['editor_flyout'], // Current Elementor API
200 - 'get_editor_flyout_data' => [], // Legacy / alternate
201 - 'get_level3_items' => [], // Fallback
202 - ];
203 -
204 - foreach ($method_candidates as $method => $args) {
205 - if (!method_exists($menu_data_provider, $method)) {
206 - continue;
207 - }
208 -
209 - $result = call_user_func_array([$menu_data_provider, $method], $args);
210 -
211 - if (is_array($result)) {
212 - // Normalize: result might wrap items under an 'items' key or be the array itself
213 - $flyout_items = isset($result['items']) && is_array($result['items'])
214 - ? $result['items']
215 - : $result;
216 - }
217 - break;
218 - }
219 -
220 - if (!empty($flyout_items)) {
221 - $flyout_children = [];
222 -
223 - foreach ($flyout_items as $item) {
224 - if (!is_array($item)) {
225 - continue;
226 - }
227 -
228 - // Flexible key mapping — tolerate renamed fields
229 - $slug = $item['slug'] ?? ($item['id'] ?? '');
230 - $label = $item['label'] ?? ($item['title'] ?? '');
231 - $url = $item['url'] ?? ($item['link'] ?? '');
232 -
233 - if (empty($slug) || empty($label)) {
234 - continue;
235 - }
236 -
237 - $flyout_children[$slug] = [
238 - 'key' => $slug,
239 - 'title' => $label,
240 - 'url' => $url,
241 - 'icon' => $item['icon'] ?? '',
242 - 'name' => '',
243 - 'is_flyout_child' => true,
244 - 'external_link' => false,
245 - ];
246 - }
247 -
248 - if (!empty($flyout_children)) {
249 - $admin_menu[$elementor_menu_key]['children']['elementor']['children'] = $flyout_children;
250 - $admin_menu[$elementor_menu_key]['children']['elementor']['has_flyout_children'] = true;
251 - }
252 - }
253 - }
254 - }
255 - } catch (\Throwable $e) {
256 - // Silently degrade — menu renders without flyout items
257 - }
258 -
259 - $admin_menu = pxlbsadminify_replaceAmpersandInHref($admin_menu, 'url');
260 203 return $admin_menu;
261 -}
262 -
263 -/**
264 -* Recursively replace all occurrences of &amp; with & in an array.
265 -*
266 -* @see https://wordpress.org/support/topic/automatically-adding-amp-in-url/
267 -* @param array $array The input array to process.
268 -* @return array The updated array with replacements.
269 -*/
270 -function pxlbsadminify_replaceAmpersandInHref($array, $indicator='href') {
271 -
272 - foreach ($array as $key => $value) {
273 - if (is_array($value)) {
274 - // Recursively process child arrays
275 - $array[$key] = pxlbsadminify_replaceAmpersandInHref($value, $indicator);
276 - } elseif ($key === $indicator && is_string($value)) {
277 - // Replace &amp; with & in $indicator keys
278 - $array[$key] = str_replace('&amp;', '&', $value);
279 - }
280 - }
281 - return $array;
282 204 }