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

754 lines 34.5 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 $remove_admin_menu = [];
280 foreach ($formated_admin_menu as $key => $value) {
281 if($value['id'] === 'wp-logo' || $value['id'] === 'site-name'|| $value['id'] === 'updates'|| $value['id'] === 'menu-toggle'|| $value['id'] === 'comments') {
282 continue;
283 }
284 $remove_admin_menu[$key] = $value;
285 }
286
287 $admin_bar_menu_data = $this->nodes_to_array_for_admin_bar($remove_admin_menu);
288 foreach($admin_bar_menu_data as $key => $value){
289 if( array_key_exists($value['id'],$admin_bar_data_nested)){
290 $value['href'] = $admin_bar_data_nested[$value['id']]['href'];
291 $value = $this->return_original_admin_bar_item_url($value, $admin_bar_data_nested[$value['id']]);
292 }
293 $admin_bar_menu_data[$key] = $value;
294 }
295 }
296
297 unset($admin_bar_data_nested['wp-logo']);
298 unset($admin_bar_data_nested['site-name']);
299 unset($admin_bar_data_nested['updates']);
300 unset($admin_bar_data_nested['menu-toggle']);
301 unset($admin_bar_data_nested['comments']);
302
303 $admin_bar_data_nested = jlt_adminify_replaceAmpersandInHref($admin_bar_data_nested);
304
305 // WP Adminify Pricing/Upgrade - open in new tab
306 if (isset($admin_bar_data_nested['wp-adminify-settings']['submenu'])) {
307 foreach ($admin_bar_data_nested['wp-adminify-settings']['submenu'] as $key => &$bar_item) {
308 if (isset($bar_item['href']) && strpos($bar_item['href'], 'wp-adminify-settings-pricing') !== false) {
309 $bar_item['href'] = 'https://wpadminify.com/pricing';
310 $bar_item['meta']['target'] = '_blank';
311 break;
312 }
313 }
314 unset($bar_item);
315 }
316
317 $outputter = function () use ($admin_bar_data_nested, $admin_bar_menu_data) {
318 $extra_data = [
319 'data' => !empty($admin_bar_menu_data) ? $admin_bar_menu_data : array_values($admin_bar_data_nested),
320 'logout_url' => wp_logout_url(home_url('/')),
321 // 'site_url' => site_url('/'),
322 'site_url' => home_url(),
323 'admin_url' => admin_url(),
324 'search' => $this->options['admin_bar_search'],
325 'notification' => $this->options['admin_bar_notif'],
326 'light_dark_switcher' => $this->options['admin_bar_dark_light_btn'],
327 ];
328 $data = "var adminify_admin_bar_data=" . json_encode($extra_data);
329 wp_print_inline_script_tag($data, ["id" => "adminify_admin_bar_data"]);
330 };
331
332 add_action("admin_footer", $outputter, 0);
333 add_action("wp_footer", $outputter, 0);
334 return $admin_bar_data;
335 }
336
337 public function return_original_admin_bar_item_url( $value ,$admin_bar_data_nested ){
338 if( array_key_exists('submenu',$value) ){
339 foreach($value['submenu'] as $submenuKey => $submenuItem){
340 $submenuId = $submenuItem['id'] ?? null;
341 if( $submenuId && isset($admin_bar_data_nested['submenu'][$submenuId]) ){
342 $submenuItem = $this->return_original_admin_bar_item_url($submenuItem, $admin_bar_data_nested['submenu'][$submenuId]);
343 $submenuItem['href'] = $admin_bar_data_nested['submenu'][$submenuId]['href'] ?? $submenuItem['href'];
344 }
345 $value['submenu'][$submenuKey] = $submenuItem;
346 }
347 }
348 return $value;
349 }
350
351 public function adminify_adminbar_localize_script(){
352 echo $this->get_admin_bar_menu_list();
353 }
354
355 /**
356 * Turn admin bar items object to array
357 *
358 * @param array $nodes The admin bar menu.
359 * @return array Array in expected format.
360 */
361 public function nodes_to_array($nodes)
362 {
363 $admin_bar_array = array();
364 foreach ($nodes as $node_id => $node) {
365 $admin_bar_array[$node_id] = array(
366 'icon' => $this->add_default_icon($node->id),
367 // 'icon_default' => $this->add_default_icon($node->id),
368 'id' => $node->id,
369 // 'id_default' => $node->id,
370 'title' => $node->title,
371 // 'title_default' => $node->title,
372 'parent' => $node->parent,
373 // 'parent_default' => $node->parent,
374 'href' => $node->href,
375 // 'href_default' => $node->href,
376 'group' => $node->group,
377 // 'group_default' => $node->group,
378 'meta' => $node->meta,
379 // 'meta_default' => $node->meta,
380 'submenu' => array(),
381 // 'hidden_for' => '',
382 // 'newly_created' => 0,
383 'menu_level' => 0,
384 'menu_status' => true,
385 );
386 }
387 return $admin_bar_array;
388 }
389
390 /**
391 * Turn admin bar items object to array
392 *
393 * @param array $nodes The admin bar menu.
394 * @return array Array in expected format.
395 */
396 public function nodes_to_array_for_admin_bar($nodes)
397 {
398 $admin_bar_array = [];
399 foreach ($nodes as $node_id => $node) {
400 $admin_bar_array[$node_id] = array(
401 'icon' => !empty($node['icon']) ? $node['icon'] : $node['icon_default'],
402 // 'icon_default' => $this->add_default_icon($node->id),
403 'id' => !empty($node['id']) ? $node['id'] : $node['id_default'],
404 // 'id_default' => $node->id,
405 'title' => !empty($node['title']) ? $node['title'] : $node['title_default'],
406 // 'title_default' => $node->title,
407 'parent' => !empty($node['parent']) ? $node['parent'] : $node['parent_default'],
408 // 'parent_default' => $node->parent,
409 'href' => !empty($node['href']) ? $node['href'] : $node['href_default'],
410 // 'href_default' => $node->href,
411 'group' => !empty($node['group']) ? $node['group'] : $node['group_default'],
412 // 'group_default' => $node->group,
413 'meta' => !empty($node['meta']) ? $node['meta'] : $node['meta_default'],
414 // 'meta_default' => $node->meta,
415 'submenu' => $this->nodes_to_array_for_admin_bar($node['submenu']),
416 // 'hidden_for' => '',
417 // 'newly_created' => 0,
418 'menu_level' => 0,
419 'menu_status' => !empty( $node['menu_status'] ) ? true : false,
420 );
421 }
422
423 return array_values($admin_bar_array);
424 }
425
426 /**
427 * Default Icon
428 */
429 public function add_default_icon($menu_id)
430 {
431 $icon_class = '';
432
433 if ('wp-logo' === $menu_id) {
434 $icon_class = 'dashicons dashicons-wordpress';
435 } else if ('my-sites' === $menu_id) {
436 $icon_class = 'dashicons dashicons-admin-multisite';
437 } else if ('site-name' === $menu_id) {
438 $icon_class = 'dashicons dashicons-admin-home';
439 } else if ('site-name-frontend' === $menu_id) {
440 $icon_class = 'dashicons dashicons-dashboard';
441 } else if ('customize' === $menu_id) {
442 $icon_class = 'dashicons dashicons-admin-customizer';
443 } else if ('updates' === $menu_id) {
444 $icon_class = 'dashicons dashicons-update';
445 } else if ('comments' === $menu_id) {
446 $icon_class = 'dashicons dashicons-admin-comments';
447 } else if ('new-content' === $menu_id) {
448 $icon_class = 'dashicons dashicons-plus';
449 } else if ('edit' === $menu_id) {
450 $icon_class = 'dashicons dashicons-edit';
451 } else if ('site-editor' === $menu_id) {
452 $icon_class = 'dashicons dashicons-admin-appearance';
453 }
454 return $icon_class;
455 }
456
457
458 public function format_to_nested($flat_array)
459 {
460
461 if (isset($flat_array['menu-toggle'])) {
462 unset($flat_array['menu-toggle']);
463 }
464
465 $nested_array = [];
466
467 // Third, get the parent menu items.
468 foreach ($flat_array as $menu_id => $menu) {
469
470 if( !empty($menu['hidden_for']) ) {
471 $disable_for = [];
472
473 foreach($menu['hidden_for'] as $hidden_key => $hidden_user){
474 $disable_for[$hidden_key] = strtolower($hidden_user['value']);
475
476 }
477
478 if (\WPAdminify\Inc\Utils::restrict_for($disable_for)) {
479 unset($flat_array[$menu_id]);
480 continue;
481 }
482 }
483
484 if ( isset($menu['parent']) && $menu['parent'] && !isset($flat_array[$menu['parent']]) ) {
485 unset($flat_array[$menu_id]);
486 continue;
487 }
488
489 if (!isset($menu['parent']) || !$menu['parent'] || !isset($flat_array[$menu['parent']])) {
490 $nested_array[$menu_id] = $menu;
491
492 $additional = array(
493 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
494 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
495 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
496 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
497 'submenu' => array(),
498 'menu_level' => 0
499 );
500
501 $nested_array[$menu_id] = array_merge($nested_array[$menu_id], $additional);
502 }
503 }
504
505 // Fourth, remove collected parent array from $flat_array.
506 foreach ($nested_array as $key => $value) {
507 if (isset($flat_array[$key])) {
508 unset($flat_array[$key]);
509 }
510 }
511
512 // Fifth, get the 1st level submenu items.
513 foreach ($flat_array as $menu_id => $menu) {
514 if (isset($nested_array[$menu['parent']])) {
515 $nested_array[$menu['parent']]['submenu'][$menu['id']] = $menu;
516
517 $additional = array(
518 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
519 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
520 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
521 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
522 'submenu' => array(),
523 'menu_level' => 1
524 );
525
526 $nested_array[$menu['parent']]['submenu'][$menu['id']] = array_merge(
527 $nested_array[$menu['parent']]['submenu'][$menu['id']],
528 $additional
529 );
530
531 unset($flat_array[$menu_id]);
532 }
533 }
534
535 // Sixth, get the 2nd level submenu items.
536 if (!empty($flat_array)) {
537 // Loop over flat_array.
538 foreach ($flat_array as $menu_id => $menu) {
539 // Loop over nested_array.
540 foreach ($nested_array as $parent_id => $parent_array) {
541 $submenu_lv2_found = false;
542
543 if (!empty($parent_array['submenu'])) {
544 // Loop over parent array's submenu.
545 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
546 if ($menu['parent'] === $submenu_lv1_id) {
547 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'])) {
548 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'] = array();
549 }
550
551 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = $menu;
552
553 $additional = array(
554 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
555 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
556 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
557 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
558 'submenu' => array(),
559 'menu_level' => 2
560 );
561
562 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = array_merge(
563 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id],
564 $additional
565 );
566
567 unset($flat_array[$menu_id]);
568 $submenu_lv2_found = true;
569 break;
570 }
571 }
572 }
573
574 if ($submenu_lv2_found) {
575 break;
576 }
577 }
578 }
579 }
580
581 // Seventh, get the 3rd level submenu items.
582 if (!empty($flat_array)) {
583 // Loop over flat_array.
584 foreach ($flat_array as $menu_id => $menu) {
585 // Loop over nested_array.
586 foreach ($nested_array as $parent_id => $parent_array) {
587 $submenu_lv3_found = false;
588
589 if (!empty($parent_array['submenu'])) {
590 // Loop over parent array's submenu.
591 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
592 if (!empty($submenu_lv1_array['submenu'])) {
593 // Loop over submenu level 1's submenu.
594 foreach ($submenu_lv1_array['submenu'] as $submenu_lv2_id => $submenu_lv2_array) {
595 if ($menu['parent'] === $submenu_lv2_id) {
596 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'])) {
597 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'] = array();
598 }
599
600 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = $menu;
601
602 $additional = array(
603 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
604 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
605 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
606 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
607 'submenu' => array(),
608 'menu_level' => 3
609 );
610
611 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = array_merge(
612 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id],
613 $additional
614 );
615
616 unset($flat_array[$menu_id]);
617 $submenu_lv3_found = true;
618 break;
619 }
620 }
621 }
622
623 if ($submenu_lv3_found) {
624 break;
625 }
626 }
627 }
628
629 if ($submenu_lv3_found) {
630 break;
631 }
632 }
633 }
634 }
635 return $nested_array;
636 }
637
638
639
640 public function is_network_active()
641 {
642 if (!function_exists('is_plugin_active_for_network') || !function_exists('is_plugin_active')) {
643 require_once ABSPATH . '/wp-admin/includes/plugin.php';
644 }
645
646 return (is_plugin_active_for_network('adminify/adminify.php') ? true : false);
647 }
648
649 public function parse_menu_items($args, $default, $request_from = 'backend')
650 {
651 // $instance = new self();
652 $parsed_array = [];
653 // $ms_helper = new Multisite_Helper();
654 $mulsite_site = $this->is_network_active();
655
656 // parse menu
657 if (true) {
658 if ($request_from == 'backend') {
659 $new_array = [];
660 foreach ($default as $key => $menu) {
661 if (array_search($key, array_keys($args)) && $key == $args[$key]['id']) {
662 // $new_array[$key] = $args[$key];
663 } else {
664 if (($mulsite_site) && ($key == 'my-sites')) {
665 $new_array[$key] = $args[$key];
666 unset($args[$key]);
667 } else {
668 $new_array[$key] = $menu;
669 }
670 }
671 }
672
673 $new_args = [];
674 foreach ($args as $key => $menu) {
675 if (str_contains($key, 'custom-menu-')) {
676 $new_args[$key] = $menu;
677 }
678 if (!array_key_exists($key, $default)) {
679 continue;
680 }
681 $new_args[$key] = $args[$key];
682 }
683
684 $pos = array_search('comments', array_keys($new_array), true);
685 // $pos += 1;
686
687 unset($new_array['top-secondary']);
688
689 // $new_array = array_slice($new_array, 0, $pos, true) + $new_args + array_slice($new_array, $pos, count($new_array) - 1, true);
690 $new_array = $new_args + array_slice($new_array, $pos, count($new_array), true);
691
692 return $new_array;
693 }
694 }
695 }
696
697 public static function associative_to_index_array($asoc_array)
698 {
699
700 $new_array = [];
701 $i = 0;
702
703 foreach ($asoc_array as $key => $value) {
704 if (isset($value['submenu']) && count($value['submenu']) > 0) {
705 $j = 0;
706 $sub_1 = [];
707 foreach ($value['submenu'] as $key1 => $value1) {
708
709 if (isset($value1['submenu']) && count($value1['submenu']) > 0) {
710 $k = 0;
711 $sub_2 = [];
712 foreach ($value1['submenu'] as $key2 => $value2) {
713 if (isset($value2['submenu']) && count($value2['submenu']) > 0) {
714 $l = 0;
715 $sub_3 = [];
716 foreach ($value2['submenu'] as $key => $value3) {
717 if (isset($value3['submenu']) && count($value3['submenu']) > 0) {
718 $sub_3[$l] = $value3;
719 $sub_3[$l]['submenu'] = array_values($value3['submenu']);
720 } else {
721 $sub_3[$l] = $value3;
722 }
723 $l++;
724 }
725 $sub_2[$k] = $value2;
726 $sub_2[$k]['submenu'] = $sub_3;
727 } else {
728 $sub_2[$k] = $value2;
729 }
730 $k++;
731 }
732
733 $sub_1[$j] = $value1;
734 $sub_1[$j]['submenu'] = $sub_2;
735 } else {
736 $sub_1[$j] = $value1;
737 }
738 // $new_array[$i]['submenu'][$j] = $value1;
739 $j++;
740 }
741 $new_array[$i] = $value;
742 $new_array[$i]['submenu'] = $sub_1;
743 } else {
744 $new_array[$i] = $value;
745 }
746 $i++;
747 }
748 return $new_array;
749 }
750
751
752 }
753 }
754