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

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