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

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