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

769 lines 35.2 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('pxlbsadminify_frame_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 // async-upload.php & friends fire admin_init but answer with a raw payload,
188 // so the frame markup would be read as part of the response.
189 if ( ! Utils::is_admin_page_request() ) {
190 return;
191 }
192
193 Utils::load_template('Templates.php');
194 }
195
196 public function capture_wp_menu($parent_file)
197 {
198 global $menu, $submenu;
199
200 $menu_build = pxlbsadminify_build_menu($menu, $submenu, $this->menu_settings);
201
202 $this->enqueue_menu($menu_build);
203
204 return $parent_file;
205 }
206
207 public function enqueue_menu($menu)
208 {
209 $outputter = function () use ($menu) {
210
211 $current_user = wp_get_current_user();
212 $light_dark_mode = $this->options['light_dark_mode'];
213 if( !isset($light_dark_mode['admin_ui_mode']) ) {
214 $default_light_dark_mode = [
215 'admin_ui_mode' => 'light',
216 'admin_ui_logo_type' => 'image_logo',
217 'admin_ui_light_mode' => [
218 'admin_ui_light_logo_text' => 'Adminify',
219 'admin_ui_light_logo_text_typo' => array_fill_keys(
220 ['font-family', 'font-weight', 'font-style', 'font-size', 'letter-spacing', 'color', 'type', 'unit'], ''
221 ) + ['unit' => 'px'],
222 'admin_ui_light_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
223 'light_logo_size' => ['width' => 120, 'height' => 32, 'unit' => 'px'],
224 'mini_admin_ui_light_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
225 ],
226 'admin_ui_dark_mode' => [
227 'admin_ui_dark_logo_text' => 'Adminify',
228 'admin_ui_dark_logo_text_typo' => array_fill_keys(
229 ['font-family', 'font-weight', 'font-style', 'font-size', 'letter-spacing', 'color', 'type', 'unit'], ''
230 ) + ['unit' => 'px'],
231 'admin_ui_dark_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
232 'dark_logo_size' => ['width' => 150, 'height' => 45, 'unit' => 'px'],
233 'mini_admin_ui_dark_logo' => array_fill_keys(['url', 'id', 'width', 'height', 'thumbnail', 'alt', 'title', 'description'], ''),
234 'schedule_dark_mode' => array_fill_keys(['enable_schedule_dark_mode', 'schedule_dark_mode_type', 'schedule_dark_mode_start_time', 'schedule_dark_mode_end_time'], ''),
235 ],
236 ];
237 $light_dark_mode = array_merge($default_light_dark_mode, $light_dark_mode);
238 }else{
239 $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);
240 }
241 $menu_settings = [
242 'menu' => $menu,
243 'admin_bar_dark_light_btn' => $this->options['admin_bar_dark_light_btn'],
244 'light_dark_mode' => $light_dark_mode ,
245 'menu_layout_settings' => $this->options['menu_layout_settings'],
246 'user_info' => [
247 'img' => get_avatar($current_user->user_email, 72, '', ''),
248 'display_name' => esc_html($current_user->display_name),
249 'profile_url' => esc_url(admin_url('profile.php')),
250 'username' => esc_html($current_user->user_login),
251 'email' => wp_kses_post(is_email($current_user->user_email)),
252 ],
253 'image_path' => PXLBSADMINIFY_ASSETS_IMAGE,
254 'is_pro' => (class_exists('\\PXLBSAdminify\\Pro\\Adminify_Pro') && !empty(\PXLBSAdminify\Pro\Adminify_Pro::is_premium())) ? true : false
255 ];
256
257 $data = "var frame_adminify_menu=" . wp_json_encode($menu_settings);
258 wp_print_inline_script_tag($data, ["id" => "frame_adminify_menu"]);
259 };
260
261 add_action("admin_footer", $outputter, 0);
262 add_action("wp_footer", $outputter, 0);
263 }
264
265
266 public function get_admin_bar_menu_list()
267 {
268 global $wp_admin_bar;
269 $admin_bar_data = $this->nodes_to_array($wp_admin_bar->get_nodes());
270 $admin_bar_data_nested = $this->format_to_nested($admin_bar_data);
271
272 $admin_bar_menu_data = [];
273
274 // Admin Bar Exits
275 if ( Utils::is_plugin_active('admin-bar/admin-bar.php') ) {
276 $admin_bar_items = get_option('_jltadminbar_settings');
277
278 // Only build the customized admin bar when settings exist.
279 // Otherwise fall through so the default admin bar data is still
280 // printed and `adminify_admin_bar_data` is always defined.
281 if ( !empty($admin_bar_items) ) {
282
283 $existing_admin_bar = !empty($admin_bar_items['existing_admin_bar']) ? $admin_bar_items['existing_admin_bar'] : '';
284 $saved_admin_bar = !empty($admin_bar_items['saved_admin_bar']) ? $admin_bar_items['saved_admin_bar'] : [];
285
286 $parsed_admin_bar_backend = empty($saved_admin_bar) ? $existing_admin_bar : $this->parse_menu_items($saved_admin_bar, $existing_admin_bar, 'backend');
287 $nested_admin_bar = $this->format_to_nested($parsed_admin_bar_backend);
288 $formated_admin_menu = $this->associative_to_index_array($nested_admin_bar);
289 $remove_admin_menu = [];
290 foreach ($formated_admin_menu as $key => $value) {
291 if($value['id'] === 'wp-logo' || $value['id'] === 'site-name'|| $value['id'] === 'updates'|| $value['id'] === 'menu-toggle'|| $value['id'] === 'comments') {
292 continue;
293 }
294 $remove_admin_menu[$key] = $value;
295 }
296
297 $admin_bar_menu_data = $this->nodes_to_array_for_admin_bar($remove_admin_menu);
298 foreach($admin_bar_menu_data as $key => $value){
299 if( array_key_exists($value['id'],$admin_bar_data_nested)){
300 $value['href'] = $admin_bar_data_nested[$value['id']]['href'];
301 $value = $this->return_original_admin_bar_item_url($value, $admin_bar_data_nested[$value['id']]);
302 }
303 $admin_bar_menu_data[$key] = $value;
304 }
305
306 } // end if ( !empty($admin_bar_items) )
307 }
308
309 unset($admin_bar_data_nested['wp-logo']);
310 unset($admin_bar_data_nested['site-name']);
311 unset($admin_bar_data_nested['updates']);
312 unset($admin_bar_data_nested['menu-toggle']);
313 unset($admin_bar_data_nested['comments']);
314
315 $admin_bar_data_nested = pxlbsadminify_replaceAmpersandInHref($admin_bar_data_nested);
316
317 // WP Adminify Pricing/Upgrade - open in new tab
318 if (isset($admin_bar_data_nested['wp-adminify-settings']['submenu'])) {
319 foreach ($admin_bar_data_nested['wp-adminify-settings']['submenu'] as $key => &$bar_item) {
320 if (isset($bar_item['href']) && strpos($bar_item['href'], 'wp-adminify-settings-pricing') !== false) {
321 $bar_item['href'] = 'https://wpadminify.com/pricing';
322 $bar_item['meta']['target'] = '_blank';
323 break;
324 }
325 }
326 unset($bar_item);
327 }
328
329 $outputter = function () use ($admin_bar_data_nested, $admin_bar_menu_data) {
330 $extra_data = [
331 'data' => !empty($admin_bar_menu_data) ? $admin_bar_menu_data : array_values($admin_bar_data_nested),
332 'logout_url' => wp_logout_url(home_url('/')),
333 // 'site_url' => site_url('/'),
334 'site_url' => home_url(),
335 'admin_url' => admin_url(),
336 'search' => $this->options['admin_bar_search'],
337 'notification' => $this->options['admin_bar_notif'],
338 'light_dark_switcher' => $this->options['admin_bar_dark_light_btn'],
339 ];
340 $data = "var adminify_admin_bar_data=" . wp_json_encode($extra_data);
341 wp_print_inline_script_tag($data, ["id" => "adminify_admin_bar_data"]);
342 };
343
344 add_action("admin_footer", $outputter, 0);
345 add_action("wp_footer", $outputter, 0);
346 return $admin_bar_data;
347 }
348
349 public function return_original_admin_bar_item_url( $value ,$admin_bar_data_nested ){
350 if( array_key_exists('submenu',$value) ){
351 foreach($value['submenu'] as $submenuKey => $submenuItem){
352 $submenuId = $submenuItem['id'] ?? null;
353 if( $submenuId && isset($admin_bar_data_nested['submenu'][$submenuId]) ){
354 $submenuItem = $this->return_original_admin_bar_item_url($submenuItem, $admin_bar_data_nested['submenu'][$submenuId]);
355 $submenuItem['href'] = $admin_bar_data_nested['submenu'][$submenuId]['href'] ?? $submenuItem['href'];
356 }
357 $value['submenu'][$submenuKey] = $submenuItem;
358 }
359 }
360 return $value;
361 }
362
363 public function adminify_adminbar_localize_script(){
364 // get_admin_bar_menu_list() returns an array and prints its script via
365 // wp_print_inline_script_tag() on the footer hook, so call it for that side effect
366 // rather than echoing the return value.
367 $this->get_admin_bar_menu_list();
368 }
369
370 /**
371 * Turn admin bar items object to array
372 *
373 * @param array $nodes The admin bar menu.
374 * @return array Array in expected format.
375 */
376 public function nodes_to_array($nodes)
377 {
378 $admin_bar_array = array();
379 foreach ($nodes as $node_id => $node) {
380 $admin_bar_array[$node_id] = array(
381 'icon' => $this->add_default_icon($node->id),
382 // 'icon_default' => $this->add_default_icon($node->id),
383 'id' => $node->id,
384 // 'id_default' => $node->id,
385 'title' => $node->title,
386 // 'title_default' => $node->title,
387 'parent' => $node->parent,
388 // 'parent_default' => $node->parent,
389 'href' => $node->href,
390 // 'href_default' => $node->href,
391 'group' => $node->group,
392 // 'group_default' => $node->group,
393 'meta' => $node->meta,
394 // 'meta_default' => $node->meta,
395 'submenu' => array(),
396 // 'hidden_for' => '',
397 // 'newly_created' => 0,
398 'menu_level' => 0,
399 'menu_status' => true,
400 );
401 }
402 return $admin_bar_array;
403 }
404
405 /**
406 * Turn admin bar items object to array
407 *
408 * @param array $nodes The admin bar menu.
409 * @return array Array in expected format.
410 */
411 public function nodes_to_array_for_admin_bar($nodes)
412 {
413 $admin_bar_array = [];
414 foreach ($nodes as $node_id => $node) {
415 $admin_bar_array[$node_id] = array(
416 'icon' => !empty($node['icon']) ? $node['icon'] : $node['icon_default'],
417 // 'icon_default' => $this->add_default_icon($node->id),
418 'id' => !empty($node['id']) ? $node['id'] : $node['id_default'],
419 // 'id_default' => $node->id,
420 'title' => !empty($node['title']) ? $node['title'] : $node['title_default'],
421 // 'title_default' => $node->title,
422 'parent' => !empty($node['parent']) ? $node['parent'] : $node['parent_default'],
423 // 'parent_default' => $node->parent,
424 'href' => !empty($node['href']) ? $node['href'] : $node['href_default'],
425 // 'href_default' => $node->href,
426 'group' => !empty($node['group']) ? $node['group'] : $node['group_default'],
427 // 'group_default' => $node->group,
428 'meta' => !empty($node['meta']) ? $node['meta'] : $node['meta_default'],
429 // 'meta_default' => $node->meta,
430 'submenu' => $this->nodes_to_array_for_admin_bar($node['submenu']),
431 // 'hidden_for' => '',
432 // 'newly_created' => 0,
433 'menu_level' => 0,
434 'menu_status' => !empty( $node['menu_status'] ) ? true : false,
435 );
436 }
437
438 return array_values($admin_bar_array);
439 }
440
441 /**
442 * Default Icon
443 */
444 public function add_default_icon($menu_id)
445 {
446 $icon_class = '';
447
448 if ('wp-logo' === $menu_id) {
449 $icon_class = 'dashicons dashicons-wordpress';
450 } else if ('my-sites' === $menu_id) {
451 $icon_class = 'dashicons dashicons-admin-multisite';
452 } else if ('site-name' === $menu_id) {
453 $icon_class = 'dashicons dashicons-admin-home';
454 } else if ('site-name-frontend' === $menu_id) {
455 $icon_class = 'dashicons dashicons-dashboard';
456 } else if ('customize' === $menu_id) {
457 $icon_class = 'dashicons dashicons-admin-customizer';
458 } else if ('updates' === $menu_id) {
459 $icon_class = 'dashicons dashicons-update';
460 } else if ('comments' === $menu_id) {
461 $icon_class = 'dashicons dashicons-admin-comments';
462 } else if ('new-content' === $menu_id) {
463 $icon_class = 'dashicons dashicons-plus';
464 } else if ('edit' === $menu_id) {
465 $icon_class = 'dashicons dashicons-edit';
466 } else if ('site-editor' === $menu_id) {
467 $icon_class = 'dashicons dashicons-admin-appearance';
468 }
469 return $icon_class;
470 }
471
472
473 public function format_to_nested($flat_array)
474 {
475
476 if (isset($flat_array['menu-toggle'])) {
477 unset($flat_array['menu-toggle']);
478 }
479
480 $nested_array = [];
481
482 // Third, get the parent menu items.
483 foreach ($flat_array as $menu_id => $menu) {
484
485 if( !empty($menu['hidden_for']) ) {
486 $disable_for = [];
487
488 foreach($menu['hidden_for'] as $hidden_key => $hidden_user){
489 $disable_for[$hidden_key] = strtolower($hidden_user['value']);
490
491 }
492
493 if (\PXLBSAdminify\Inc\Utils::restrict_for($disable_for)) {
494 unset($flat_array[$menu_id]);
495 continue;
496 }
497 }
498
499 if ( isset($menu['parent']) && $menu['parent'] && !isset($flat_array[$menu['parent']]) ) {
500 unset($flat_array[$menu_id]);
501 continue;
502 }
503
504 if (!isset($menu['parent']) || !$menu['parent'] || !isset($flat_array[$menu['parent']])) {
505 $nested_array[$menu_id] = $menu;
506
507 $additional = array(
508 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
509 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
510 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
511 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
512 'submenu' => array(),
513 'menu_level' => 0
514 );
515
516 $nested_array[$menu_id] = array_merge($nested_array[$menu_id], $additional);
517 }
518 }
519
520 // Fourth, remove collected parent array from $flat_array.
521 foreach ($nested_array as $key => $value) {
522 if (isset($flat_array[$key])) {
523 unset($flat_array[$key]);
524 }
525 }
526
527 // Fifth, get the 1st level submenu items.
528 foreach ($flat_array as $menu_id => $menu) {
529 if (isset($nested_array[$menu['parent']])) {
530 $nested_array[$menu['parent']]['submenu'][$menu['id']] = $menu;
531
532 $additional = array(
533 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
534 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
535 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
536 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
537 'submenu' => array(),
538 'menu_level' => 1
539 );
540
541 $nested_array[$menu['parent']]['submenu'][$menu['id']] = array_merge(
542 $nested_array[$menu['parent']]['submenu'][$menu['id']],
543 $additional
544 );
545
546 unset($flat_array[$menu_id]);
547 }
548 }
549
550 // Sixth, get the 2nd level submenu items.
551 if (!empty($flat_array)) {
552 // Loop over flat_array.
553 foreach ($flat_array as $menu_id => $menu) {
554 // Loop over nested_array.
555 foreach ($nested_array as $parent_id => $parent_array) {
556 $submenu_lv2_found = false;
557
558 if (!empty($parent_array['submenu'])) {
559 // Loop over parent array's submenu.
560 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
561 if ($menu['parent'] === $submenu_lv1_id) {
562 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'])) {
563 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'] = array();
564 }
565
566 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = $menu;
567
568 $additional = array(
569 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
570 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
571 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
572 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
573 'submenu' => array(),
574 'menu_level' => 2
575 );
576
577 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = array_merge(
578 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id],
579 $additional
580 );
581
582 unset($flat_array[$menu_id]);
583 $submenu_lv2_found = true;
584 break;
585 }
586 }
587 }
588
589 if ($submenu_lv2_found) {
590 break;
591 }
592 }
593 }
594 }
595
596 // Seventh, get the 3rd level submenu items.
597 if (!empty($flat_array)) {
598 // Loop over flat_array.
599 foreach ($flat_array as $menu_id => $menu) {
600 // Loop over nested_array.
601 foreach ($nested_array as $parent_id => $parent_array) {
602 $submenu_lv3_found = false;
603
604 if (!empty($parent_array['submenu'])) {
605 // Loop over parent array's submenu.
606 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
607 if (!empty($submenu_lv1_array['submenu'])) {
608 // Loop over submenu level 1's submenu.
609 foreach ($submenu_lv1_array['submenu'] as $submenu_lv2_id => $submenu_lv2_array) {
610 if ($menu['parent'] === $submenu_lv2_id) {
611 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'])) {
612 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'] = array();
613 }
614
615 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = $menu;
616
617 $additional = array(
618 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
619 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
620 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
621 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
622 'submenu' => array(),
623 'menu_level' => 3
624 );
625
626 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = array_merge(
627 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id],
628 $additional
629 );
630
631 unset($flat_array[$menu_id]);
632 $submenu_lv3_found = true;
633 break;
634 }
635 }
636 }
637
638 if ($submenu_lv3_found) {
639 break;
640 }
641 }
642 }
643
644 if ($submenu_lv3_found) {
645 break;
646 }
647 }
648 }
649 }
650 return $nested_array;
651 }
652
653
654
655 public function is_network_active()
656 {
657 if (!function_exists('is_plugin_active_for_network') || !function_exists('is_plugin_active')) {
658 require_once ABSPATH . '/wp-admin/includes/plugin.php';
659 }
660
661 return (is_plugin_active_for_network('adminify/adminify.php') ? true : false);
662 }
663
664 public function parse_menu_items($args, $default, $request_from = 'backend')
665 {
666 // $instance = new self();
667 $parsed_array = [];
668 // $ms_helper = new Multisite_Helper();
669 $mulsite_site = $this->is_network_active();
670
671 // parse menu
672 if (true) {
673 if ($request_from == 'backend') {
674 $new_array = [];
675 foreach ($default as $key => $menu) {
676 if (array_search($key, array_keys($args)) && $key == $args[$key]['id']) {
677 // $new_array[$key] = $args[$key];
678 } else {
679 if (($mulsite_site) && ($key == 'my-sites')) {
680 $new_array[$key] = $args[$key];
681 unset($args[$key]);
682 } else {
683 $new_array[$key] = $menu;
684 }
685 }
686 }
687
688 $new_args = [];
689 foreach ($args as $key => $menu) {
690 if (str_contains($key, 'custom-menu-')) {
691 $new_args[$key] = $menu;
692 }
693 if (!array_key_exists($key, $default)) {
694 continue;
695 }
696 $new_args[$key] = $args[$key];
697 }
698
699 $pos = array_search('comments', array_keys($new_array), true);
700 // $pos += 1;
701
702 unset($new_array['top-secondary']);
703
704 // $new_array = array_slice($new_array, 0, $pos, true) + $new_args + array_slice($new_array, $pos, count($new_array) - 1, true);
705 $new_array = $new_args + array_slice($new_array, $pos, count($new_array), true);
706
707 return $new_array;
708 }
709 }
710 }
711
712 public static function associative_to_index_array($asoc_array)
713 {
714
715 $new_array = [];
716 $i = 0;
717
718 foreach ($asoc_array as $key => $value) {
719 if (isset($value['submenu']) && count($value['submenu']) > 0) {
720 $j = 0;
721 $sub_1 = [];
722 foreach ($value['submenu'] as $key1 => $value1) {
723
724 if (isset($value1['submenu']) && count($value1['submenu']) > 0) {
725 $k = 0;
726 $sub_2 = [];
727 foreach ($value1['submenu'] as $key2 => $value2) {
728 if (isset($value2['submenu']) && count($value2['submenu']) > 0) {
729 $l = 0;
730 $sub_3 = [];
731 foreach ($value2['submenu'] as $key => $value3) {
732 if (isset($value3['submenu']) && count($value3['submenu']) > 0) {
733 $sub_3[$l] = $value3;
734 $sub_3[$l]['submenu'] = array_values($value3['submenu']);
735 } else {
736 $sub_3[$l] = $value3;
737 }
738 $l++;
739 }
740 $sub_2[$k] = $value2;
741 $sub_2[$k]['submenu'] = $sub_3;
742 } else {
743 $sub_2[$k] = $value2;
744 }
745 $k++;
746 }
747
748 $sub_1[$j] = $value1;
749 $sub_1[$j]['submenu'] = $sub_2;
750 } else {
751 $sub_1[$j] = $value1;
752 }
753 // $new_array[$i]['submenu'][$j] = $value1;
754 $j++;
755 }
756 $new_array[$i] = $value;
757 $new_array[$i]['submenu'] = $sub_1;
758 } else {
759 $new_array[$i] = $value;
760 }
761 $i++;
762 }
763 return $new_array;
764 }
765
766
767 }
768 }
769