PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.0.5.2
Adminify – White Label, Admin Menu Editor, Login Customizer v4.0.5.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 / Admin / Frames / Admin.php

Admin.php in Adminify – White Label, Admin Menu Editor, Login Customizer 4.0.5.2, at Inc/Admin/Frames/Admin.php

721 lines 32.6 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\Admin\Frames;
4
5 use WPAdminify\Inc\Utils;
6 use WPAdminify\Inc\Modules\MenuEditor\MenuEditorOptions;
7 use WPAdminify\Inc\Admin\AdminSettings;
8
9 // no direct access allowed
10 if (!defined('ABSPATH')) {
11 exit;
12 }
13 /**
14 * WP Adminify
15 * Admin Class
16 *
17 * @author Jewel Theme <support@jeweltheme.com>
18 */
19
20 if (!class_exists('Admin')) {
21 class Admin
22 {
23
24 public $options;
25 public $menu_settings;
26
27 /**
28 * Constructor for the class.
29 *
30 * Initializes the hooks for the admin class.
31 *
32 * @return void
33 */
34 public function __construct()
35 {
36 $this->options = (array) AdminSettings::get_instance()->get();
37 $this->menu_settings = (new MenuEditorOptions())->get();
38 $this->init_hooks();
39 }
40
41 /**
42 * Initializes the hooks for the admin class.
43 *
44 * This function adds the `load_scripts` method of the current object as a callback
45 * to the `admin_enqueue_scripts` action hook. It also adds the `page_attribute`
46 * method of the current object as a callback to the `language_attributes` filter
47 * hook.
48 *
49 * @return void
50 */
51 private function init_hooks()
52 {
53 if ( wp_doing_ajax() ) return;
54 add_action('admin_init', [$this, 'load_template']);
55 add_action('admin_enqueue_scripts', [$this, 'load_scripts']);
56 add_filter("language_attributes", [$this, "page_attribute"]);
57 add_filter('parent_file', array($this, 'capture_wp_menu'), 999999999);
58
59 add_action('wp_before_admin_bar_render', [$this, 'get_admin_bar_menu_list'], 999999);
60 }
61
62 /**
63 * Enqueue the admin stylesheet and script.
64 *
65 * @return void
66 */
67 public function load_scripts()
68 {
69 wp_enqueue_style('frame-adminify--admin', WP_ADMINIFY_ASSETS . 'admin/css/admin' . Utils::assets_ext('.css'), [], WP_ADMINIFY_VER);
70 wp_enqueue_script('frame-adminify--admin', WP_ADMINIFY_ASSETS . 'admin/js/frame' . Utils::assets_ext('.js'), ['jquery', 'react'], WP_ADMINIFY_VER, true);
71
72 $localize_array_data = [
73 'ajax_url' => admin_url('admin-ajax.php'),
74 'security_nonce' => wp_create_nonce('adminify_nonce')
75 ];
76
77 wp_localize_script( 'frame-adminify--admin', 'WPAdminify', $localize_array_data );
78 wp_localize_script( 'frame-adminify--admin', 'WPAdminifyFrameNotAllowedURLs', self::get_not_allowed_urls() );
79 }
80
81 public static function get_not_allowed_urls() {
82
83 $not_allowed_urls = [
84 '/wp-admin/customize.php',
85 '/wp-admin/site-editor.php',
86 [
87 'url' => '*',
88 'query_params' => ['fl_builder', 'fl_builder_ui']
89 ],
90 [
91 'url' => '*',
92 'query_params' => ['action' => 'elementor']
93 ],
94 [
95 'url' => '*',
96 'query_params' => ['action' => 'architect'] // Added for thrive page builder
97 ],
98 [
99 'url' => '*',
100 'query_params' => ['bricks' => 'true']
101 ],
102 [
103 'url' => '*',
104 'query_params' => ['ct_builder' => 'true', 'oxygen_iframe!']
105 ],
106 [
107 'url' => '*',
108 'query_params' => ['page' => 'latepoint'] // added for latepoint
109 ],
110 [
111 'url' => '*',
112 'query_params' => ['page' => 'sbi-setup']
113 ],
114 [
115 'url' => '*',
116 'query_params' => ['page' => 'sbtt']
117 ],
118 [
119 'url' => '*',
120 'query_params' => ['page' => 'cff-setup']
121 ],
122 [
123 'url' => '*',
124 'query_params' => ['page' => 'rank-math-registration']
125 ],
126 [
127 'url' => '*',
128 'query_params' => ['page' => 'googlesitekit-splash']
129 ],
130 [
131 'url' => '*',
132 'query_params' => ['page' => 'cff-feed-builder']
133 ],
134 [
135 'url' => '*',
136 'query_params' => ['page' => 'sbi-feed-builder']
137 ],
138 [
139 'url' => '*',
140 'query_params' => ['page' => 'sbr']
141 ],
142 [
143 'url' => '*',
144 'query_params' => ['page' => 'ctf-feed-builder']
145 ],
146 [
147 'url' => '*',
148 'query_params' => ['page' => 'sby-feed-builder']
149 ],
150 [
151 'url' => '*',
152 'query_params' => ['page' => 'suretriggers']
153 ],
154 // [
155 // 'url' => '/wp-admin/post-new.php',
156 // 'post_type' => ['post', 'page']
157 // ],
158 // [
159 // 'url' => '/wp-admin/post.php',
160 // 'post_type' => ['post', 'page']
161 // ]
162 ];
163
164 return apply_filters( 'adminify_frame_not_allowed_urls', $not_allowed_urls );
165 }
166
167 /**
168 * Adds the 'frame-adminify-app="true"' attribute to the given attribute string.
169 *
170 * @param string $attr The original attribute string.
171 * @return string The modified attribute string.
172 */
173 public function page_attribute($attr)
174 {
175 $attrs = [$attr];
176 $attrs[] = 'frame-adminify-app="true"';
177 return implode(' ', $attrs);
178 }
179
180 /**
181 * Loads the admin template.
182 *
183 * @return void
184 */
185 public function load_template()
186 {
187 adminify_load_template('Templates.php');
188 }
189
190 public function capture_wp_menu($parent_file)
191 {
192 global $menu, $submenu;
193
194 $menu_build = jltwp_adminify_build_menu($menu, $submenu, $this->menu_settings);
195
196 $this->enqueue_menu($menu_build);
197
198 return $parent_file;
199 }
200
201 public function enqueue_menu($menu)
202 {
203 $outputter = function () use ($menu) {
204
205 $current_user = wp_get_current_user();
206 $light_dark_mode = $this->options['light_dark_mode'];
207 if( !isset($light_dark_mode['admin_ui_mode']) ) {
208 $default_light_dark_mode = [
209 'admin_ui_mode' => 'light',
210 'admin_ui_logo_type' => 'image_logo',
211 'admin_ui_light_mode' => [
212 'admin_ui_light_logo_text' => 'WP Adminify',
213 'admin_ui_light_logo_text_typo' => array_fill_keys(
214 ['font-family', 'font-weight', 'font-style', 'font-size', 'letter-spacing', 'color', 'type', 'unit'], ''
215 ) + ['unit' => 'px'],
216 'admin_ui_light_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
217 'light_logo_size' => ['width' => 120, 'height' => 32, 'unit' => 'px'],
218 'mini_admin_ui_light_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
219 ],
220 'admin_ui_dark_mode' => [
221 'admin_ui_dark_logo_text' => 'WP Adminify',
222 'admin_ui_dark_logo_text_typo' => array_fill_keys(
223 ['font-family', 'font-weight', 'font-style', 'font-size', 'letter-spacing', 'color', 'type', 'unit'], ''
224 ) + ['unit' => 'px'],
225 'admin_ui_dark_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
226 'dark_logo_size' => ['width' => 150, 'height' => 45, 'unit' => 'px'],
227 'mini_admin_ui_dark_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
228 'schedule_dark_mode' => array_fill_keys(['enable_schedule_dark_mode', 'schedule_dark_mode_type', 'schedule_dark_mode_start_time', 'schedule_dark_mode_end_time'], ''),
229 ],
230 ];
231 $light_dark_mode = array_merge($default_light_dark_mode, $light_dark_mode);
232 }else{
233 $light_dark_mode['admin_ui_mode'] = empty(get_user_meta(get_current_user_id(), 'color_mode', true)) ? $light_dark_mode['admin_ui_mode'] : get_user_meta(get_current_user_id(), 'color_mode', true);
234 }
235 $menu_settings = [
236 'menu' => $menu,
237 'admin_bar_dark_light_btn' => $this->options['admin_bar_dark_light_btn'],
238 'light_dark_mode' => $light_dark_mode ,
239 'menu_layout_settings' => $this->options['menu_layout_settings'],
240 'user_info' => [
241 'img' => get_avatar($current_user->user_email, 72, '', ''),
242 'display_name' => esc_html($current_user->display_name),
243 'profile_url' => esc_url(admin_url('profile.php')),
244 'username' => esc_html($current_user->user_login),
245 'email' => wp_kses_post(is_email($current_user->user_email)),
246 ],
247 'image_path' => WP_ADMINIFY_ASSETS_IMAGE,
248 'is_pro' => (class_exists('\\WPAdminify\\Pro\\Adminify_Pro') && !empty(\WPAdminify\Pro\Adminify_Pro::is_premium())) ? true : false
249 ];
250
251 $data = "var frame_adminify_menu=" . json_encode($menu_settings);
252 wp_print_inline_script_tag($data, ["id" => "frame_adminify_menu"]);
253 };
254
255 add_action("admin_footer", $outputter, 0);
256 add_action("wp_footer", $outputter, 0);
257 }
258
259
260 public function get_admin_bar_menu_list()
261 {
262 global $wp_admin_bar;
263 $admin_bar_data = $this->nodes_to_array($wp_admin_bar->get_nodes());
264 $admin_bar_data_nested = $this->format_to_nested($admin_bar_data);
265
266 $admin_bar_menu_data = [];
267
268 // Admin Bar Exits
269 if ( Utils::is_plugin_active('admin-bar/admin-bar.php') || Utils::is_plugin_active('admin-bar-pro/admin-bar-pro.php') ) {
270 $admin_bar_items = get_option('_jltadminbar_settings');
271 if( empty($admin_bar_items) ) return;
272
273 $existing_admin_bar = !empty($admin_bar_items['existing_admin_bar']) ? $admin_bar_items['existing_admin_bar'] : '';
274 $saved_admin_bar = !empty($admin_bar_items['saved_admin_bar']) ? $admin_bar_items['saved_admin_bar'] : [];
275
276 $parsed_admin_bar_backend = empty($saved_admin_bar) ? $existing_admin_bar : $this->parse_menu_items($saved_admin_bar, $existing_admin_bar, 'backend');
277 $nested_admin_bar = $this->format_to_nested($parsed_admin_bar_backend);
278 $formated_admin_menu = $this->associative_to_index_array($nested_admin_bar);
279
280 $remove_admin_menu = [];
281 foreach ($formated_admin_menu as $key => $value) {
282 if($value['id'] === 'wp-logo' || $value['id'] === 'site-name'|| $value['id'] === 'updates'|| $value['id'] === 'menu-toggle'|| $value['id'] === 'comments') {
283 continue;
284 }
285 $remove_admin_menu[$key] = $value;
286 }
287
288 $admin_bar_menu_data = $this->nodes_to_array_for_admin_bar($remove_admin_menu);
289 }
290
291 unset($admin_bar_data_nested['wp-logo']);
292 unset($admin_bar_data_nested['site-name']);
293 unset($admin_bar_data_nested['updates']);
294 unset($admin_bar_data_nested['menu-toggle']);
295 unset($admin_bar_data_nested['comments']);
296
297 $admin_bar_data_nested = jlt_adminify_replaceAmpersandInHref($admin_bar_data_nested);
298 $outputter = function () use ($admin_bar_data_nested, $admin_bar_menu_data) {
299 $extra_data = [
300 'data' => !empty($admin_bar_menu_data) ? $admin_bar_menu_data : array_values($admin_bar_data_nested),
301 'logout_url' => wp_logout_url(home_url('/')),
302 // 'site_url' => site_url('/'),
303 'site_url' => home_url(),
304 'admin_url' => admin_url(),
305 'search' => $this->options['admin_bar_search'],
306 'notification' => $this->options['admin_bar_notif'],
307 'light_dark_switcher' => $this->options['admin_bar_dark_light_btn'],
308 ];
309 $data = "var adminify_admin_bar_data=" . json_encode($extra_data);
310 wp_print_inline_script_tag($data, ["id" => "adminify_admin_bar_data"]);
311 };
312
313 add_action("admin_footer", $outputter, 0);
314 add_action("wp_footer", $outputter, 0);
315 return $admin_bar_data;
316 }
317
318 public function adminify_adminbar_localize_script(){
319 echo $this->get_admin_bar_menu_list();
320 }
321
322 /**
323 * Turn admin bar items object to array
324 *
325 * @param array $nodes The admin bar menu.
326 * @return array Array in expected format.
327 */
328 public function nodes_to_array($nodes)
329 {
330 $admin_bar_array = array();
331 foreach ($nodes as $node_id => $node) {
332 $admin_bar_array[$node_id] = array(
333 'icon' => $this->add_default_icon($node->id),
334 // 'icon_default' => $this->add_default_icon($node->id),
335 'id' => $node->id,
336 // 'id_default' => $node->id,
337 'title' => $node->title,
338 // 'title_default' => $node->title,
339 'parent' => $node->parent,
340 // 'parent_default' => $node->parent,
341 'href' => $node->href,
342 // 'href_default' => $node->href,
343 'group' => $node->group,
344 // 'group_default' => $node->group,
345 'meta' => $node->meta,
346 // 'meta_default' => $node->meta,
347 'submenu' => array(),
348 // 'hidden_for' => '',
349 // 'newly_created' => 0,
350 'menu_level' => 0,
351 'menu_status' => true,
352 );
353 }
354 return $admin_bar_array;
355 }
356
357 /**
358 * Turn admin bar items object to array
359 *
360 * @param array $nodes The admin bar menu.
361 * @return array Array in expected format.
362 */
363 public function nodes_to_array_for_admin_bar($nodes)
364 {
365 $admin_bar_array = [];
366 foreach ($nodes as $node_id => $node) {
367 $admin_bar_array[$node_id] = array(
368 'icon' => !empty($node['icon']) ? $node['icon'] : $node['icon_default'],
369 // 'icon_default' => $this->add_default_icon($node->id),
370 'id' => !empty($node['id']) ? $node['id'] : $node['id_default'],
371 // 'id_default' => $node->id,
372 'title' => !empty($node['title']) ? $node['title'] : $node['title_default'],
373 // 'title_default' => $node->title,
374 'parent' => !empty($node['parent']) ? $node['parent'] : $node['parent_default'],
375 // 'parent_default' => $node->parent,
376 'href' => !empty($node['href']) ? $node['href'] : $node['href_default'],
377 // 'href_default' => $node->href,
378 'group' => !empty($node['group']) ? $node['group'] : $node['group_default'],
379 // 'group_default' => $node->group,
380 'meta' => !empty($node['meta']) ? $node['meta'] : $node['meta_default'],
381 // 'meta_default' => $node->meta,
382 'submenu' => $this->nodes_to_array_for_admin_bar($node['submenu']),
383 // 'hidden_for' => '',
384 // 'newly_created' => 0,
385 'menu_level' => 0,
386 'menu_status' => !empty( $node['menu_status'] ) ? true : false,
387 );
388 }
389
390 return array_values($admin_bar_array);
391 }
392
393 /**
394 * Default Icon
395 */
396 public function add_default_icon($menu_id)
397 {
398 $icon_class = '';
399
400 if ('wp-logo' === $menu_id) {
401 $icon_class = 'dashicons dashicons-wordpress';
402 } else if ('my-sites' === $menu_id) {
403 $icon_class = 'dashicons dashicons-admin-multisite';
404 } else if ('site-name' === $menu_id) {
405 $icon_class = 'dashicons dashicons-admin-home';
406 } else if ('site-name-frontend' === $menu_id) {
407 $icon_class = 'dashicons dashicons-dashboard';
408 } else if ('customize' === $menu_id) {
409 $icon_class = 'dashicons dashicons-admin-customizer';
410 } else if ('updates' === $menu_id) {
411 $icon_class = 'dashicons dashicons-update';
412 } else if ('comments' === $menu_id) {
413 $icon_class = 'dashicons dashicons-admin-comments';
414 } else if ('new-content' === $menu_id) {
415 $icon_class = 'dashicons dashicons-plus';
416 } else if ('edit' === $menu_id) {
417 $icon_class = 'dashicons dashicons-edit';
418 } else if ('site-editor' === $menu_id) {
419 $icon_class = 'dashicons dashicons-admin-appearance';
420 }
421 return $icon_class;
422 }
423
424
425 public function format_to_nested($flat_array)
426 {
427
428 if (isset($flat_array['menu-toggle'])) {
429 unset($flat_array['menu-toggle']);
430 }
431
432 $nested_array = [];
433
434 // Third, get the parent menu items.
435 foreach ($flat_array as $menu_id => $menu) {
436
437 if( !empty($menu['hidden_for']) ) {
438 $disable_for = [];
439
440 foreach($menu['hidden_for'] as $hidden_key => $hidden_user){
441 $disable_for[$hidden_key] = strtolower($hidden_user['value']);
442
443 }
444
445 if (\WPAdminify\Inc\Utils::restrict_for($disable_for)) {
446 unset($flat_array[$menu_id]);
447 continue;
448 }
449 }
450
451 if ( isset($menu['parent']) && $menu['parent'] && !isset($flat_array[$menu['parent']]) ) {
452 unset($flat_array[$menu_id]);
453 continue;
454 }
455
456 if (!isset($menu['parent']) || !$menu['parent'] || !isset($flat_array[$menu['parent']])) {
457 $nested_array[$menu_id] = $menu;
458
459 $additional = array(
460 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
461 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
462 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
463 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
464 'submenu' => array(),
465 'menu_level' => 0
466 );
467
468 $nested_array[$menu_id] = array_merge($nested_array[$menu_id], $additional);
469 }
470 }
471
472 // Fourth, remove collected parent array from $flat_array.
473 foreach ($nested_array as $key => $value) {
474 if (isset($flat_array[$key])) {
475 unset($flat_array[$key]);
476 }
477 }
478
479 // Fifth, get the 1st level submenu items.
480 foreach ($flat_array as $menu_id => $menu) {
481 if (isset($nested_array[$menu['parent']])) {
482 $nested_array[$menu['parent']]['submenu'][$menu['id']] = $menu;
483
484 $additional = array(
485 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
486 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
487 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
488 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
489 'submenu' => array(),
490 'menu_level' => 1
491 );
492
493 $nested_array[$menu['parent']]['submenu'][$menu['id']] = array_merge(
494 $nested_array[$menu['parent']]['submenu'][$menu['id']],
495 $additional
496 );
497
498 unset($flat_array[$menu_id]);
499 }
500 }
501
502 // Sixth, get the 2nd level submenu items.
503 if (!empty($flat_array)) {
504 // Loop over flat_array.
505 foreach ($flat_array as $menu_id => $menu) {
506 // Loop over nested_array.
507 foreach ($nested_array as $parent_id => $parent_array) {
508 $submenu_lv2_found = false;
509
510 if (!empty($parent_array['submenu'])) {
511 // Loop over parent array's submenu.
512 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
513 if ($menu['parent'] === $submenu_lv1_id) {
514 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'])) {
515 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'] = array();
516 }
517
518 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = $menu;
519
520 $additional = array(
521 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
522 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
523 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
524 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
525 'submenu' => array(),
526 'menu_level' => 2
527 );
528
529 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = array_merge(
530 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id],
531 $additional
532 );
533
534 unset($flat_array[$menu_id]);
535 $submenu_lv2_found = true;
536 break;
537 }
538 }
539 }
540
541 if ($submenu_lv2_found) {
542 break;
543 }
544 }
545 }
546 }
547
548 // Seventh, get the 3rd level submenu items.
549 if (!empty($flat_array)) {
550 // Loop over flat_array.
551 foreach ($flat_array as $menu_id => $menu) {
552 // Loop over nested_array.
553 foreach ($nested_array as $parent_id => $parent_array) {
554 $submenu_lv3_found = false;
555
556 if (!empty($parent_array['submenu'])) {
557 // Loop over parent array's submenu.
558 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
559 if (!empty($submenu_lv1_array['submenu'])) {
560 // Loop over submenu level 1's submenu.
561 foreach ($submenu_lv1_array['submenu'] as $submenu_lv2_id => $submenu_lv2_array) {
562 if ($menu['parent'] === $submenu_lv2_id) {
563 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'])) {
564 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'] = array();
565 }
566
567 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = $menu;
568
569 $additional = array(
570 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
571 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
572 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
573 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
574 'submenu' => array(),
575 'menu_level' => 3
576 );
577
578 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = array_merge(
579 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id],
580 $additional
581 );
582
583 unset($flat_array[$menu_id]);
584 $submenu_lv3_found = true;
585 break;
586 }
587 }
588 }
589
590 if ($submenu_lv3_found) {
591 break;
592 }
593 }
594 }
595
596 if ($submenu_lv3_found) {
597 break;
598 }
599 }
600 }
601 }
602 return $nested_array;
603 }
604
605
606
607 public function is_network_active()
608 {
609 if (!function_exists('is_plugin_active_for_network') || !function_exists('is_plugin_active')) {
610 require_once ABSPATH . '/wp-admin/includes/plugin.php';
611 }
612
613 return (is_plugin_active_for_network('adminify/adminify.php') ? true : false);
614 }
615
616 public function parse_menu_items($args, $default, $request_from = 'backend')
617 {
618 // $instance = new self();
619 $parsed_array = [];
620 // $ms_helper = new Multisite_Helper();
621 $mulsite_site = $this->is_network_active();
622
623 // parse menu
624 if (true) {
625 if ($request_from == 'backend') {
626 $new_array = [];
627 foreach ($default as $key => $menu) {
628 if (array_search($key, array_keys($args)) && $key == $args[$key]['id']) {
629 // $new_array[$key] = $args[$key];
630 } else {
631 if (($mulsite_site) && ($key == 'my-sites')) {
632 $new_array[$key] = $args[$key];
633 unset($args[$key]);
634 } else {
635 $new_array[$key] = $menu;
636 }
637 }
638 }
639
640 $new_args = [];
641 foreach ($args as $key => $menu) {
642 if (str_contains($key, 'custom-menu-')) {
643 $new_args[$key] = $menu;
644 }
645 if (!array_key_exists($key, $default)) {
646 continue;
647 }
648 $new_args[$key] = $args[$key];
649 }
650
651 $pos = array_search('comments', array_keys($new_array), true);
652 // $pos += 1;
653
654 unset($new_array['top-secondary']);
655
656 // $new_array = array_slice($new_array, 0, $pos, true) + $new_args + array_slice($new_array, $pos, count($new_array) - 1, true);
657 $new_array = $new_args + array_slice($new_array, $pos, count($new_array), true);
658
659 return $new_array;
660 }
661 }
662 }
663
664 public static function associative_to_index_array($asoc_array)
665 {
666
667 $new_array = [];
668 $i = 0;
669
670 foreach ($asoc_array as $key => $value) {
671 if (isset($value['submenu']) && count($value['submenu']) > 0) {
672 $j = 0;
673 $sub_1 = [];
674 foreach ($value['submenu'] as $key1 => $value1) {
675
676 if (isset($value1['submenu']) && count($value1['submenu']) > 0) {
677 $k = 0;
678 $sub_2 = [];
679 foreach ($value1['submenu'] as $key2 => $value2) {
680 if (isset($value2['submenu']) && count($value2['submenu']) > 0) {
681 $l = 0;
682 $sub_3 = [];
683 foreach ($value2['submenu'] as $key => $value3) {
684 if (isset($value3['submenu']) && count($value3['submenu']) > 0) {
685 $sub_3[$l] = $value3;
686 $sub_3[$l]['submenu'] = array_values($value3['submenu']);
687 } else {
688 $sub_3[$l] = $value3;
689 }
690 $l++;
691 }
692 $sub_2[$k] = $value2;
693 $sub_2[$k]['submenu'] = $sub_3;
694 } else {
695 $sub_2[$k] = $value2;
696 }
697 $k++;
698 }
699
700 $sub_1[$j] = $value1;
701 $sub_1[$j]['submenu'] = $sub_2;
702 } else {
703 $sub_1[$j] = $value1;
704 }
705 // $new_array[$i]['submenu'][$j] = $value1;
706 $j++;
707 }
708 $new_array[$i] = $value;
709 $new_array[$i]['submenu'] = $sub_1;
710 } else {
711 $new_array[$i] = $value;
712 }
713 $i++;
714 }
715 return $new_array;
716 }
717
718
719 }
720 }
721