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

680 lines 29.3 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' => ['bricks' => 'true']
97 ],
98 [
99 'url' => '*',
100 'query_params' => ['ct_builder' => 'true', 'oxygen_iframe!']
101 ],
102 [
103 'url' => '*',
104 'query_params' => ['page' => 'sbi-setup']
105 ],
106 [
107 'url' => '*',
108 'query_params' => ['page' => 'sbtt']
109 ],
110 [
111 'url' => '*',
112 'query_params' => ['page' => 'cff-setup']
113 ],
114 [
115 'url' => '*',
116 'query_params' => ['page' => 'rank-math-registration']
117 ],
118 [
119 'url' => '*',
120 'query_params' => ['page' => 'googlesitekit-splash']
121 ],
122 [
123 'url' => '*',
124 'query_params' => ['page' => 'cff-feed-builder']
125 ],
126 [
127 'url' => '*',
128 'query_params' => ['page' => 'sbi-feed-builder']
129 ],
130 [
131 'url' => '*',
132 'query_params' => ['page' => 'sbr']
133 ],
134 [
135 'url' => '*',
136 'query_params' => ['page' => 'ctf-feed-builder']
137 ],
138 [
139 'url' => '*',
140 'query_params' => ['page' => 'sby-feed-builder']
141 ],
142 [
143 'url' => '/wp-admin/post-new.php',
144 'post_type' => ['post', 'page']
145 ],
146 [
147 'url' => '/wp-admin/post.php',
148 'post_type' => ['post', 'page']
149 ]
150 ];
151
152 return apply_filters( 'adminify_frame_not_allowed_urls', $not_allowed_urls );
153 }
154
155 /**
156 * Adds the 'frame-adminify-app="true"' attribute to the given attribute string.
157 *
158 * @param string $attr The original attribute string.
159 * @return string The modified attribute string.
160 */
161 public function page_attribute($attr)
162 {
163 $attrs = [$attr];
164 $attrs[] = 'frame-adminify-app="true"';
165 return implode(' ', $attrs);
166 }
167
168 /**
169 * Loads the admin template.
170 *
171 * @return void
172 */
173 public function load_template()
174 {
175 adminify_load_template('Templates.php');
176 }
177
178 public function capture_wp_menu($parent_file)
179 {
180 global $menu, $submenu;
181
182 $menu_build = jltwp_adminify_build_menu($menu, $submenu, $this->menu_settings);
183
184 $this->enqueue_menu($menu_build);
185
186 return $parent_file;
187 }
188
189 public function enqueue_menu($menu)
190 {
191 $outputter = function () use ($menu) {
192
193 $current_user = wp_get_current_user();
194
195 $menu_settings = [
196 'menu' => $menu,
197 'admin_bar_dark_light_btn' => $this->options['admin_bar_dark_light_btn'],
198 'light_dark_mode' => $this->options['light_dark_mode'],
199 'menu_layout_settings' => $this->options['menu_layout_settings'],
200 'user_info' => [
201 'img' => get_avatar($current_user->user_email, 72, '', ''),
202 'display_name' => esc_html($current_user->display_name),
203 'profile_url' => esc_url(admin_url('profile.php')),
204 'username' => esc_html($current_user->user_login),
205 'email' => wp_kses_post(is_email($current_user->user_email)),
206 ],
207 'image_path' => WP_ADMINIFY_ASSETS_IMAGE,
208 'is_pro' => (class_exists('\\WPAdminify\\Pro\\Adminify_Pro') && !empty(\WPAdminify\Pro\Adminify_Pro::is_premium())) ? true : false
209 ];
210
211 $data = "var frame_adminify_menu=" . json_encode($menu_settings);
212 wp_print_inline_script_tag($data, ["id" => "frame_adminify_menu"]);
213 };
214
215 add_action("admin_footer", $outputter, 0);
216 add_action("wp_footer", $outputter, 0);
217 }
218
219
220 public function get_admin_bar_menu_list()
221 {
222 global $wp_admin_bar;
223
224 $admin_bar_data = $this->nodes_to_array($wp_admin_bar->get_nodes());
225 $admin_bar_data_nested = $this->format_to_nested($admin_bar_data);
226
227
228 $admin_bar_menu_data = [];
229
230 // Admin Bar Exits
231 if ( Utils::is_plugin_active('admin-bar/admin-bar.php') || Utils::is_plugin_active('admin-bar-pro/admin-bar-pro.php') ) {
232 $admin_bar_items = get_option('_jltadminbar_settings');
233
234 if( empty($admin_bar_items) ) return;
235
236 $existing_admin_bar = !empty($admin_bar_items['existing_admin_bar']) ? $admin_bar_items['existing_admin_bar'] : '';
237 $saved_admin_bar = !empty($admin_bar_items['saved_admin_bar']) ? $admin_bar_items['saved_admin_bar'] : [];
238
239 $parsed_admin_bar_backend = empty($saved_admin_bar) ? $existing_admin_bar : $this->parse_menu_items($saved_admin_bar, $existing_admin_bar, 'backend');
240
241 $nested_admin_bar = $this->format_to_nested($parsed_admin_bar_backend);
242 $formated_admin_menu = $this->associative_to_index_array($nested_admin_bar);
243
244 $remove_admin_menu = [];
245 foreach ($formated_admin_menu as $key => $value) {
246 if($value['id'] === 'wp-logo' || $value['id'] === 'site-name'|| $value['id'] === 'updates'|| $value['id'] === 'menu-toggle'|| $value['id'] === 'comments') {
247 continue;
248 }
249 $remove_admin_menu[$key] = $value;
250 }
251
252 $admin_bar_menu_data = $this->nodes_to_array_for_admin_bar($remove_admin_menu);
253 }
254
255 unset($admin_bar_data_nested['wp-logo']);
256 unset($admin_bar_data_nested['site-name']);
257 unset($admin_bar_data_nested['updates']);
258 unset($admin_bar_data_nested['menu-toggle']);
259 unset($admin_bar_data_nested['comments']);
260
261
262 $outputter = function () use ($admin_bar_data_nested, $admin_bar_menu_data) {
263 $extra_data = [
264 'data' => !empty($admin_bar_menu_data) ? $admin_bar_menu_data : array_values($admin_bar_data_nested),
265 'logout_url' => wp_logout_url(home_url('/')),
266 'site_url' => site_url(),
267 'admin_url' => admin_url(),
268 'search' => $this->options['admin_bar_search'],
269 'notification' => $this->options['admin_bar_notif'],
270 'light_dark_switcher' => $this->options['admin_bar_dark_light_btn'],
271 ];
272 $data = "var adminify_admin_bar_data=" . json_encode($extra_data);
273 wp_print_inline_script_tag($data, ["id" => "adminify_admin_bar_data"]);
274 };
275
276 add_action("admin_footer", $outputter, 0);
277 add_action("wp_footer", $outputter, 0);
278
279 return $admin_bar_data;
280 }
281
282 public function adminify_adminbar_localize_script(){
283 echo $this->get_admin_bar_menu_list();
284 }
285
286 /**
287 * Turn admin bar items object to array
288 *
289 * @param array $nodes The admin bar menu.
290 * @return array Array in expected format.
291 */
292 public function nodes_to_array($nodes)
293 {
294 $admin_bar_array = array();
295 foreach ($nodes as $node_id => $node) {
296 $admin_bar_array[$node_id] = array(
297 'icon' => $this->add_default_icon($node->id),
298 // 'icon_default' => $this->add_default_icon($node->id),
299 'id' => $node->id,
300 // 'id_default' => $node->id,
301 'title' => $node->title,
302 // 'title_default' => $node->title,
303 'parent' => $node->parent,
304 // 'parent_default' => $node->parent,
305 'href' => $node->href,
306 // 'href_default' => $node->href,
307 'group' => $node->group,
308 // 'group_default' => $node->group,
309 'meta' => $node->meta,
310 // 'meta_default' => $node->meta,
311 'submenu' => array(),
312 // 'hidden_for' => '',
313 // 'newly_created' => 0,
314 'menu_level' => 0,
315 'menu_status' => true,
316 );
317 }
318 return $admin_bar_array;
319 }
320
321 /**
322 * Turn admin bar items object to array
323 *
324 * @param array $nodes The admin bar menu.
325 * @return array Array in expected format.
326 */
327 public function nodes_to_array_for_admin_bar($nodes)
328 {
329 $admin_bar_array = [];
330 foreach ($nodes as $node_id => $node) {
331 $admin_bar_array[$node_id] = array(
332 'icon' => !empty($node['icon']) ? $node['icon'] : $node['icon_default'],
333 // 'icon_default' => $this->add_default_icon($node->id),
334 'id' => !empty($node['id']) ? $node['id'] : $node['id_default'],
335 // 'id_default' => $node->id,
336 'title' => !empty($node['title']) ? $node['title'] : $node['title_default'],
337 // 'title_default' => $node->title,
338 'parent' => !empty($node['parent']) ? $node['parent'] : $node['parent_default'],
339 // 'parent_default' => $node->parent,
340 'href' => !empty($node['href']) ? $node['href'] : $node['href_default'],
341 // 'href_default' => $node->href,
342 'group' => !empty($node['group']) ? $node['group'] : $node['group_default'],
343 // 'group_default' => $node->group,
344 'meta' => !empty($node['meta']) ? $node['meta'] : $node['meta_default'],
345 // 'meta_default' => $node->meta,
346 'submenu' => $this->nodes_to_array_for_admin_bar($node['submenu']),
347 // 'hidden_for' => '',
348 // 'newly_created' => 0,
349 'menu_level' => 0,
350 'menu_status' => !empty( $node['menu_status'] ) ? true : false,
351 );
352 }
353
354 return array_values($admin_bar_array);
355 }
356
357 /**
358 * Default Icon
359 */
360 public function add_default_icon($menu_id)
361 {
362 $icon_class = '';
363
364 if ('wp-logo' === $menu_id) {
365 $icon_class = 'dashicons dashicons-wordpress';
366 } else if ('my-sites' === $menu_id) {
367 $icon_class = 'dashicons dashicons-admin-multisite';
368 } else if ('site-name' === $menu_id) {
369 $icon_class = 'dashicons dashicons-admin-home';
370 } else if ('site-name-frontend' === $menu_id) {
371 $icon_class = 'dashicons dashicons-dashboard';
372 } else if ('customize' === $menu_id) {
373 $icon_class = 'dashicons dashicons-admin-customizer';
374 } else if ('updates' === $menu_id) {
375 $icon_class = 'dashicons dashicons-update';
376 } else if ('comments' === $menu_id) {
377 $icon_class = 'dashicons dashicons-admin-comments';
378 } else if ('new-content' === $menu_id) {
379 $icon_class = 'dashicons dashicons-plus';
380 } else if ('edit' === $menu_id) {
381 $icon_class = 'dashicons dashicons-edit';
382 } else if ('site-editor' === $menu_id) {
383 $icon_class = 'dashicons dashicons-admin-appearance';
384 }
385 return $icon_class;
386 }
387
388
389 public function format_to_nested($flat_array)
390 {
391
392 if (isset($flat_array['menu-toggle'])) {
393 unset($flat_array['menu-toggle']);
394 }
395
396 $nested_array = [];
397
398 // Third, get the parent menu items.
399 foreach ($flat_array as $menu_id => $menu) {
400
401 if( !empty($menu['hidden_for']) ) {
402 $disable_for = [];
403
404 foreach($menu['hidden_for'] as $hidden_key => $hidden_user){
405 $disable_for[$hidden_key] = strtolower($hidden_user['value']);
406
407 }
408
409 if (\WPAdminify\Inc\Utils::restricted_for($disable_for)) {
410 continue;
411 }
412 }
413
414
415 if (!isset($menu['parent']) || !$menu['parent'] || !isset($flat_array[$menu['parent']])) {
416 $nested_array[$menu_id] = $menu;
417
418 $additional = array(
419 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
420 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
421 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
422 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
423 'submenu' => array(),
424 'menu_level' => 0
425 );
426
427 $nested_array[$menu_id] = array_merge($nested_array[$menu_id], $additional);
428 }
429 }
430
431 // Fourth, remove collected parent array from $flat_array.
432 foreach ($nested_array as $key => $value) {
433 if (isset($flat_array[$key])) {
434 unset($flat_array[$key]);
435 }
436 }
437
438 // Fifth, get the 1st level submenu items.
439 foreach ($flat_array as $menu_id => $menu) {
440 if (isset($nested_array[$menu['parent']])) {
441 $nested_array[$menu['parent']]['submenu'][$menu['id']] = $menu;
442
443 $additional = array(
444 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
445 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
446 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
447 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
448 'submenu' => array(),
449 'menu_level' => 1
450 );
451
452 $nested_array[$menu['parent']]['submenu'][$menu['id']] = array_merge(
453 $nested_array[$menu['parent']]['submenu'][$menu['id']],
454 $additional
455 );
456
457 unset($flat_array[$menu_id]);
458 }
459 }
460
461 // Sixth, get the 2nd level submenu items.
462 if (!empty($flat_array)) {
463 // Loop over flat_array.
464 foreach ($flat_array as $menu_id => $menu) {
465 // Loop over nested_array.
466 foreach ($nested_array as $parent_id => $parent_array) {
467 $submenu_lv2_found = false;
468
469 if (!empty($parent_array['submenu'])) {
470 // Loop over parent array's submenu.
471 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
472 if ($menu['parent'] === $submenu_lv1_id) {
473 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'])) {
474 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'] = array();
475 }
476
477 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = $menu;
478
479 $additional = array(
480 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
481 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
482 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
483 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
484 'submenu' => array(),
485 'menu_level' => 2
486 );
487
488 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = array_merge(
489 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id],
490 $additional
491 );
492
493 unset($flat_array[$menu_id]);
494 $submenu_lv2_found = true;
495 break;
496 }
497 }
498 }
499
500 if ($submenu_lv2_found) {
501 break;
502 }
503 }
504 }
505 }
506
507 // Seventh, get the 3rd level submenu items.
508 if (!empty($flat_array)) {
509 // Loop over flat_array.
510 foreach ($flat_array as $menu_id => $menu) {
511 // Loop over nested_array.
512 foreach ($nested_array as $parent_id => $parent_array) {
513 $submenu_lv3_found = false;
514
515 if (!empty($parent_array['submenu'])) {
516 // Loop over parent array's submenu.
517 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
518 if (!empty($submenu_lv1_array['submenu'])) {
519 // Loop over submenu level 1's submenu.
520 foreach ($submenu_lv1_array['submenu'] as $submenu_lv2_id => $submenu_lv2_array) {
521 if ($menu['parent'] === $submenu_lv2_id) {
522 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'])) {
523 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'] = array();
524 }
525
526 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = $menu;
527
528 $additional = array(
529 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
530 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
531 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
532 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
533 'submenu' => array(),
534 'menu_level' => 3
535 );
536
537 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = array_merge(
538 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id],
539 $additional
540 );
541
542 unset($flat_array[$menu_id]);
543 $submenu_lv3_found = true;
544 break;
545 }
546 }
547 }
548
549 if ($submenu_lv3_found) {
550 break;
551 }
552 }
553 }
554
555 if ($submenu_lv3_found) {
556 break;
557 }
558 }
559 }
560 }
561 return $nested_array;
562 }
563
564
565
566 public function is_network_active()
567 {
568 if (!function_exists('is_plugin_active_for_network') || !function_exists('is_plugin_active')) {
569 require_once ABSPATH . '/wp-admin/includes/plugin.php';
570 }
571
572 return (is_plugin_active_for_network('adminify/adminify.php') ? true : false);
573 }
574
575 public function parse_menu_items($args, $default, $request_from = 'backend')
576 {
577 // $instance = new self();
578 $parsed_array = [];
579 // $ms_helper = new Multisite_Helper();
580 $mulsite_site = $this->is_network_active();
581
582 // parse menu
583 if (true) {
584 if ($request_from == 'backend') {
585 $new_array = [];
586 foreach ($default as $key => $menu) {
587 if (array_search($key, array_keys($args)) && $key == $args[$key]['id']) {
588 // $new_array[$key] = $args[$key];
589 } else {
590 if (($mulsite_site) && ($key == 'my-sites')) {
591 $new_array[$key] = $args[$key];
592 unset($args[$key]);
593 } else {
594 $new_array[$key] = $menu;
595 }
596 }
597 }
598
599 $new_args = [];
600 foreach ($args as $key => $menu) {
601 if (str_contains($key, 'custom-menu-')) {
602 $new_args[$key] = $menu;
603 }
604 if (!array_key_exists($key, $default)) {
605 continue;
606 }
607 $new_args[$key] = $args[$key];
608 }
609
610 $pos = array_search('comments', array_keys($new_array), true);
611 // $pos += 1;
612
613 unset($new_array['top-secondary']);
614
615 // $new_array = array_slice($new_array, 0, $pos, true) + $new_args + array_slice($new_array, $pos, count($new_array) - 1, true);
616 $new_array = $new_args + array_slice($new_array, $pos, count($new_array), true);
617
618 return $new_array;
619 }
620 }
621 }
622
623 public static function associative_to_index_array($asoc_array)
624 {
625
626 $new_array = [];
627 $i = 0;
628
629 foreach ($asoc_array as $key => $value) {
630 if (isset($value['submenu']) && count($value['submenu']) > 0) {
631 $j = 0;
632 $sub_1 = [];
633 foreach ($value['submenu'] as $key1 => $value1) {
634
635 if (isset($value1['submenu']) && count($value1['submenu']) > 0) {
636 $k = 0;
637 $sub_2 = [];
638 foreach ($value1['submenu'] as $key2 => $value2) {
639 if (isset($value2['submenu']) && count($value2['submenu']) > 0) {
640 $l = 0;
641 $sub_3 = [];
642 foreach ($value2['submenu'] as $key => $value3) {
643 if (isset($value3['submenu']) && count($value3['submenu']) > 0) {
644 $sub_3[$l] = $value3;
645 $sub_3[$l]['submenu'] = array_values($value3['submenu']);
646 } else {
647 $sub_3[$l] = $value3;
648 }
649 $l++;
650 }
651 $sub_2[$k] = $value2;
652 $sub_2[$k]['submenu'] = $sub_3;
653 } else {
654 $sub_2[$k] = $value2;
655 }
656 $k++;
657 }
658
659 $sub_1[$j] = $value1;
660 $sub_1[$j]['submenu'] = $sub_2;
661 } else {
662 $sub_1[$j] = $value1;
663 }
664 // $new_array[$i]['submenu'][$j] = $value1;
665 $j++;
666 }
667 $new_array[$i] = $value;
668 $new_array[$i]['submenu'] = $sub_1;
669 } else {
670 $new_array[$i] = $value;
671 }
672 $i++;
673 }
674 return $new_array;
675 }
676
677
678 }
679 }
680