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

587 lines 26.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\Admin\AdminSettings;
7
8 // no direct access allowed
9 if (!defined('ABSPATH')) {
10 exit;
11 }
12 /**
13 * WP Adminify
14 * Admin Class
15 *
16 * @author Jewel Theme <support@jeweltheme.com>
17 */
18
19 if (!class_exists('Admin')) {
20 class Admin
21 {
22
23 public $options;
24
25 /**
26 * Constructor for the class.
27 *
28 * Initializes the hooks for the admin class.
29 *
30 * @return void
31 */
32 public function __construct()
33 {
34 $this->options = (array) AdminSettings::get_instance()->get();
35 $this->init_hooks();
36 }
37
38 /**
39 * Initializes the hooks for the admin class.
40 *
41 * This function adds the `load_scripts` method of the current object as a callback
42 * to the `admin_enqueue_scripts` action hook. It also adds the `page_attribute`
43 * method of the current object as a callback to the `language_attributes` filter
44 * hook.
45 *
46 * @return void
47 */
48 private function init_hooks()
49 {
50 if ( wp_doing_ajax() ) return;
51 add_action('admin_init', [$this, 'load_template']);
52 add_action('admin_enqueue_scripts', [$this, 'load_scripts']);
53 add_filter("language_attributes", [$this, "page_attribute"]);
54 add_filter('parent_file', array($this, 'capture_wp_menu'), 999999999);
55
56 add_action('wp_before_admin_bar_render', [$this, 'get_admin_bar_menu_list'], 999999);
57 }
58
59 /**
60 * Enqueue the admin stylesheet and script.
61 *
62 * @return void
63 */
64 public function load_scripts()
65 {
66 wp_enqueue_style('frame-adminify--admin', WP_ADMINIFY_ASSETS . 'admin/css/admin' . Utils::assets_ext('.css'), [], WP_ADMINIFY_VER);
67 wp_enqueue_script('frame-adminify--admin', WP_ADMINIFY_ASSETS . 'admin/js/frame' . Utils::assets_ext('.js'), ['jquery', 'react'], WP_ADMINIFY_VER, true);
68
69
70
71 $localize_array_data = [
72 'ajax_url' => admin_url('admin-ajax.php'),
73 'security_nonce' => wp_create_nonce('adminify_nonce'),
74 ];
75 wp_localize_script( 'frame-adminify--admin', 'WPAdminify', $localize_array_data );
76 }
77
78 /**
79 * Adds the 'frame-adminify-app="true"' attribute to the given attribute string.
80 *
81 * @param string $attr The original attribute string.
82 * @return string The modified attribute string.
83 */
84 public function page_attribute($attr)
85 {
86 $attrs = [$attr];
87 $attrs[] = 'frame-adminify-app="true"';
88 return implode(' ', $attrs);
89 }
90
91 /**
92 * Loads the admin template.
93 *
94 * @return void
95 */
96 public function load_template()
97 {
98 adminify_load_template('Templates.php');
99 }
100
101 public function capture_wp_menu($parent_file)
102 {
103 global $menu, $submenu;
104
105 $menu_build = build_menu($menu, $submenu);
106
107 $this->enqueue_menu($menu_build);
108
109 return $parent_file;
110 }
111
112 public function enqueue_menu($menu)
113 {
114 $outputter = function () use ($menu) {
115
116 $current_user = wp_get_current_user();
117
118 $menu_settings = [
119 'menu' => $menu,
120 'admin_bar_dark_light_btn' => $this->options['admin_bar_dark_light_btn'],
121 'light_dark_mode' => $this->options['light_dark_mode'],
122 'menu_layout_settings' => $this->options['menu_layout_settings'],
123 'user_info' => [
124 'img' => get_avatar($current_user->user_email, 72, '', ''),
125 'display_name' => esc_html($current_user->display_name),
126 'profile_url' => esc_url(admin_url('profile.php')),
127 'username' => esc_html($current_user->user_login),
128 'email' => wp_kses_post(is_email($current_user->user_email)),
129 ],
130 'image_path' => WP_ADMINIFY_ASSETS_IMAGE,
131 'is_pro' => (class_exists('\\WPAdminify\\Pro\\Adminify_Pro') && !empty(\WPAdminify\Pro\Adminify_Pro::is_premium())) ? true : false
132 ];
133
134 $data = "var frame_adminify_menu=" . json_encode($menu_settings);
135 wp_print_inline_script_tag($data, ["id" => "frame_adminify_menu"]);
136 };
137
138 add_action("admin_footer", $outputter, 0);
139 add_action("wp_footer", $outputter, 0);
140 }
141
142
143 public function get_admin_bar_menu_list()
144 {
145 global $wp_admin_bar;
146
147 $admin_bar_data = $this->nodes_to_array($wp_admin_bar->get_nodes());
148 $admin_bar_data_nested = $this->format_to_nested($admin_bar_data);
149
150
151 $admin_bar_menu_data = [];
152 // Admin Bar Exits
153 if(Utils::is_plugin_active('admin-bar/admin-bar.php')) {
154 $admin_bar_items = get_option('_jltadminbar_settings');
155
156 if( empty($admin_bar_items) ) return;
157
158 $existing_admin_bar = !empty($admin_bar_items['existing_admin_bar']) ? $admin_bar_items['existing_admin_bar'] : '';
159 $saved_admin_bar = !empty($admin_bar_items['saved_admin_bar']) ? $admin_bar_items['saved_admin_bar'] : [];
160
161 $parsed_admin_bar_backend = empty($saved_admin_bar) ? $existing_admin_bar : $this->parse_menu_items($saved_admin_bar, $existing_admin_bar, 'backend');
162
163 $nested_admin_bar = $this->format_to_nested($parsed_admin_bar_backend);
164 $formated_admin_menu = $this->associative_to_index_array($nested_admin_bar);
165
166 $remove_admin_menu = [];
167 foreach ($formated_admin_menu as $key => $value) {
168 if($value['id'] === 'wp-logo' || $value['id'] === 'site-name'|| $value['id'] === 'updates'|| $value['id'] === 'menu-toggle'|| $value['id'] === 'comments') {
169 continue;
170 }
171 $remove_admin_menu[$key] = $value;
172 }
173
174 $admin_bar_menu_data = $this->nodes_to_array_for_admin_bar($remove_admin_menu);
175 }
176
177 unset($admin_bar_data_nested['wp-logo']);
178 unset($admin_bar_data_nested['site-name']);
179 unset($admin_bar_data_nested['updates']);
180 unset($admin_bar_data_nested['menu-toggle']);
181 unset($admin_bar_data_nested['comments']);
182
183
184 $outputter = function () use ($admin_bar_data_nested, $admin_bar_menu_data) {
185 $extra_data = [
186 'data' => !empty($admin_bar_menu_data) ? $admin_bar_menu_data : array_values($admin_bar_data_nested),
187 'logout_url' => wp_logout_url(home_url('/')),
188 'site_url' => site_url(),
189 'admin_url' => admin_url(),
190 'search' => $this->options['admin_bar_search'],
191 'notification' => $this->options['admin_bar_notif'],
192 'light_dark_switcher' => $this->options['admin_bar_dark_light_btn'],
193 ];
194 $data = "var adminify_admin_bar_data=" . json_encode($extra_data);
195 wp_print_inline_script_tag($data, ["id" => "adminify_admin_bar_data"]);
196 };
197
198 add_action("admin_footer", $outputter, 0);
199 add_action("wp_footer", $outputter, 0);
200
201 return $admin_bar_data;
202 }
203
204 public function adminify_adminbar_localize_script(){
205 echo $this->get_admin_bar_menu_list();
206 }
207
208 /**
209 * Turn admin bar items object to array
210 *
211 * @param array $nodes The admin bar menu.
212 * @return array Array in expected format.
213 */
214 public function nodes_to_array($nodes)
215 {
216 $admin_bar_array = array();
217 foreach ($nodes as $node_id => $node) {
218 $admin_bar_array[$node_id] = array(
219 'icon' => $this->add_default_icon($node->id),
220 // 'icon_default' => $this->add_default_icon($node->id),
221 'id' => $node->id,
222 // 'id_default' => $node->id,
223 'title' => $node->title,
224 // 'title_default' => $node->title,
225 'parent' => $node->parent,
226 // 'parent_default' => $node->parent,
227 'href' => $node->href,
228 // 'href_default' => $node->href,
229 'group' => $node->group,
230 // 'group_default' => $node->group,
231 'meta' => $node->meta,
232 // 'meta_default' => $node->meta,
233 'submenu' => array(),
234 // 'hidden_for' => '',
235 // 'newly_created' => 0,
236 'menu_level' => 0,
237 'menu_status' => true,
238 );
239 }
240 return $admin_bar_array;
241 }
242
243 /**
244 * Turn admin bar items object to array
245 *
246 * @param array $nodes The admin bar menu.
247 * @return array Array in expected format.
248 */
249 public function nodes_to_array_for_admin_bar($nodes)
250 {
251 $admin_bar_array = [];
252 foreach ($nodes as $node_id => $node) {
253 $admin_bar_array[$node_id] = array(
254 'icon' => !empty($node['icon']) ? $node['icon'] : $node['icon_default'],
255 // 'icon_default' => $this->add_default_icon($node->id),
256 'id' => !empty($node['id']) ? $node['id'] : $node['id_default'],
257 // 'id_default' => $node->id,
258 'title' => !empty($node['title']) ? $node['title'] : $node['title_default'],
259 // 'title_default' => $node->title,
260 'parent' => !empty($node['parent']) ? $node['parent'] : $node['parent_default'],
261 // 'parent_default' => $node->parent,
262 'href' => !empty($node['href']) ? $node['href'] : $node['href_default'],
263 // 'href_default' => $node->href,
264 'group' => !empty($node['group']) ? $node['group'] : $node['group_default'],
265 // 'group_default' => $node->group,
266 'meta' => !empty($node['meta']) ? $node['meta'] : $node['meta_default'],
267 // 'meta_default' => $node->meta,
268 'submenu' => $this->nodes_to_array_for_admin_bar($node['submenu']),
269 // 'hidden_for' => '',
270 // 'newly_created' => 0,
271 'menu_level' => 0,
272 'menu_status' => true,
273 );
274 }
275
276 return array_values($admin_bar_array);
277 }
278
279 /**
280 * Default Icon
281 */
282 public function add_default_icon($menu_id)
283 {
284 $icon_class = '';
285
286 if ('wp-logo' === $menu_id) {
287 $icon_class = 'dashicons dashicons-wordpress';
288 } else if ('my-sites' === $menu_id) {
289 $icon_class = 'dashicons dashicons-admin-multisite';
290 } else if ('site-name' === $menu_id) {
291 $icon_class = 'dashicons dashicons-admin-home';
292 } else if ('site-name-frontend' === $menu_id) {
293 $icon_class = 'dashicons dashicons-dashboard';
294 } else if ('customize' === $menu_id) {
295 $icon_class = 'dashicons dashicons-admin-customizer';
296 } else if ('updates' === $menu_id) {
297 $icon_class = 'dashicons dashicons-update';
298 } else if ('comments' === $menu_id) {
299 $icon_class = 'dashicons dashicons-admin-comments';
300 } else if ('new-content' === $menu_id) {
301 $icon_class = 'dashicons dashicons-plus';
302 } else if ('edit' === $menu_id) {
303 $icon_class = 'dashicons dashicons-edit';
304 } else if ('site-editor' === $menu_id) {
305 $icon_class = 'dashicons dashicons-admin-appearance';
306 }
307 return $icon_class;
308 }
309
310
311 public function format_to_nested($flat_array)
312 {
313
314 if (isset($flat_array['menu-toggle'])) {
315 unset($flat_array['menu-toggle']);
316 }
317
318 $nested_array = [];
319
320 // Third, get the parent menu items.
321 foreach ($flat_array as $menu_id => $menu) {
322 if (!isset($menu['parent']) || !$menu['parent'] || !isset($flat_array[$menu['parent']])) {
323 $nested_array[$menu_id] = $menu;
324
325 $additional = array(
326 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
327 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
328 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
329 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
330 'submenu' => array(),
331 'menu_level' => 0
332 );
333
334 $nested_array[$menu_id] = array_merge($nested_array[$menu_id], $additional);
335 }
336 }
337
338 // Fourth, remove collected parent array from $flat_array.
339 foreach ($nested_array as $key => $value) {
340 if (isset($flat_array[$key])) {
341 unset($flat_array[$key]);
342 }
343 }
344
345 // Fifth, get the 1st level submenu items.
346 foreach ($flat_array as $menu_id => $menu) {
347 if (isset($nested_array[$menu['parent']])) {
348 $nested_array[$menu['parent']]['submenu'][$menu['id']] = $menu;
349
350 $additional = array(
351 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
352 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
353 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
354 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
355 'submenu' => array(),
356 'menu_level' => 1
357 );
358
359 $nested_array[$menu['parent']]['submenu'][$menu['id']] = array_merge(
360 $nested_array[$menu['parent']]['submenu'][$menu['id']],
361 $additional
362 );
363
364 unset($flat_array[$menu_id]);
365 }
366 }
367
368 // Sixth, get the 2nd level submenu items.
369 if (!empty($flat_array)) {
370 // Loop over flat_array.
371 foreach ($flat_array as $menu_id => $menu) {
372 // Loop over nested_array.
373 foreach ($nested_array as $parent_id => $parent_array) {
374 $submenu_lv2_found = false;
375
376 if (!empty($parent_array['submenu'])) {
377 // Loop over parent array's submenu.
378 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
379 if ($menu['parent'] === $submenu_lv1_id) {
380 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'])) {
381 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'] = array();
382 }
383
384 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = $menu;
385
386 $additional = array(
387 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
388 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
389 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
390 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
391 'submenu' => array(),
392 'menu_level' => 2
393 );
394
395 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id] = array_merge(
396 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$menu_id],
397 $additional
398 );
399
400 unset($flat_array[$menu_id]);
401 $submenu_lv2_found = true;
402 break;
403 }
404 }
405 }
406
407 if ($submenu_lv2_found) {
408 break;
409 }
410 }
411 }
412 }
413
414 // Seventh, get the 3rd level submenu items.
415 if (!empty($flat_array)) {
416 // Loop over flat_array.
417 foreach ($flat_array as $menu_id => $menu) {
418 // Loop over nested_array.
419 foreach ($nested_array as $parent_id => $parent_array) {
420 $submenu_lv3_found = false;
421
422 if (!empty($parent_array['submenu'])) {
423 // Loop over parent array's submenu.
424 foreach ($parent_array['submenu'] as $submenu_lv1_id => $submenu_lv1_array) {
425 if (!empty($submenu_lv1_array['submenu'])) {
426 // Loop over submenu level 1's submenu.
427 foreach ($submenu_lv1_array['submenu'] as $submenu_lv2_id => $submenu_lv2_array) {
428 if ($menu['parent'] === $submenu_lv2_id) {
429 if (!isset($nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'])) {
430 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'] = array();
431 }
432
433 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = $menu;
434
435 $additional = array(
436 'title_encoded' => isset($menu['title']) ? htmlentities2($menu['title']) : '',
437 'title_clean' => isset($menu['title']) ? wp_strip_all_tags($menu['title']) : '',
438 'title_encoded_default' => isset($menu['title_default']) ? htmlentities2($menu['title_default']) : '',
439 'title_clean_default' => isset($menu['title_default']) ? wp_strip_all_tags($menu['title_default']) : '',
440 'submenu' => array(),
441 'menu_level' => 3
442 );
443
444 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id] = array_merge(
445 $nested_array[$parent_id]['submenu'][$submenu_lv1_id]['submenu'][$submenu_lv2_id]['submenu'][$menu_id],
446 $additional
447 );
448
449 unset($flat_array[$menu_id]);
450 $submenu_lv3_found = true;
451 break;
452 }
453 }
454 }
455
456 if ($submenu_lv3_found) {
457 break;
458 }
459 }
460 }
461
462 if ($submenu_lv3_found) {
463 break;
464 }
465 }
466 }
467 }
468 return $nested_array;
469 }
470
471
472
473 public function is_network_active()
474 {
475 if (!function_exists('is_plugin_active_for_network') || !function_exists('is_plugin_active')) {
476 require_once ABSPATH . '/wp-admin/includes/plugin.php';
477 }
478
479 return (is_plugin_active_for_network('adminify/adminify.php') ? true : false);
480 }
481
482 public function parse_menu_items($args, $default, $request_from = 'backend')
483 {
484 // $instance = new self();
485 $parsed_array = [];
486 // $ms_helper = new Multisite_Helper();
487 $mulsite_site = $this->is_network_active();
488
489 // parse menu
490 if (true) {
491 if ($request_from == 'backend') {
492 $new_array = [];
493 foreach ($default as $key => $menu) {
494 if (array_search($key, array_keys($args)) && $key == $args[$key]['id']) {
495 // $new_array[$key] = $args[$key];
496 } else {
497 if (($mulsite_site) && ($key == 'my-sites')) {
498 $new_array[$key] = $args[$key];
499 unset($args[$key]);
500 } else {
501 $new_array[$key] = $menu;
502 }
503 }
504 }
505
506 $new_args = [];
507 foreach ($args as $key => $menu) {
508 if (str_contains($key, 'custom-menu-')) {
509 $new_args[$key] = $menu;
510 }
511 if (!array_key_exists($key, $default)) {
512 continue;
513 }
514 $new_args[$key] = $args[$key];
515 }
516
517 $pos = array_search('comments', array_keys($new_array), true);
518 // $pos += 1;
519
520 unset($new_array['top-secondary']);
521
522 // $new_array = array_slice($new_array, 0, $pos, true) + $new_args + array_slice($new_array, $pos, count($new_array) - 1, true);
523 $new_array = $new_args + array_slice($new_array, $pos, count($new_array), true);
524
525 return $new_array;
526 }
527 }
528 }
529
530 public static function associative_to_index_array($asoc_array)
531 {
532
533 $new_array = [];
534 $i = 0;
535
536 foreach ($asoc_array as $key => $value) {
537 if (isset($value['submenu']) && count($value['submenu']) > 0) {
538 $j = 0;
539 $sub_1 = [];
540 foreach ($value['submenu'] as $key1 => $value1) {
541
542 if (isset($value1['submenu']) && count($value1['submenu']) > 0) {
543 $k = 0;
544 $sub_2 = [];
545 foreach ($value1['submenu'] as $key2 => $value2) {
546 if (isset($value2['submenu']) && count($value2['submenu']) > 0) {
547 $l = 0;
548 $sub_3 = [];
549 foreach ($value2['submenu'] as $key => $value3) {
550 if (isset($value3['submenu']) && count($value3['submenu']) > 0) {
551 $sub_3[$l] = $value3;
552 $sub_3[$l]['submenu'] = array_values($value3['submenu']);
553 } else {
554 $sub_3[$l] = $value3;
555 }
556 $l++;
557 }
558 $sub_2[$k] = $value2;
559 $sub_2[$k]['submenu'] = $sub_3;
560 } else {
561 $sub_2[$k] = $value2;
562 }
563 $k++;
564 }
565
566 $sub_1[$j] = $value1;
567 $sub_1[$j]['submenu'] = $sub_2;
568 } else {
569 $sub_1[$j] = $value1;
570 }
571 // $new_array[$i]['submenu'][$j] = $value1;
572 $j++;
573 }
574 $new_array[$i] = $value;
575 $new_array[$i]['submenu'] = $sub_1;
576 } else {
577 $new_array[$i] = $value;
578 }
579 $i++;
580 }
581 return $new_array;
582 }
583
584
585 }
586 }
587