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

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