PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.3.1
Adminify – White Label, Admin Menu Editor, Login Customizer v4.3.1
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 / Classes / AdminBar.php

AdminBar.php in Adminify – White Label, Admin Menu Editor, Login Customizer 4.3.1, at Inc/Classes/AdminBar.php

1,069 lines 41.4 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\Classes;
4
5 use PXLBSAdminify\Inc\Utils;
6 use PXLBSAdminify\Inc\Admin\AdminSettings;
7 use PXLBSAdminify\Inc\Classes\DarkModeConflicts;
8 use PXLBSAdminify\Inc\Admin\AdminSettingsModel;
9
10 // no direct access allowed
11 if (!defined('ABSPATH')) {
12 exit;
13 }
14 class AdminBar extends AdminSettingsModel
15 {
16
17 public $options;
18 public $post_types;
19 public $adminify_ui;
20
21 public function __construct()
22 {
23 $this->options = (array) AdminSettings::get_instance()->get();
24 $this->adminify_ui = $this->options['admin_ui'];
25 $global_ui_mode = empty($this->options['light_dark_mode']['admin_ui_mode']) ? 'light' : $this->options['light_dark_mode']['admin_ui_mode'];
26 $current_ui_mode = empty(get_user_meta(get_current_user_id(), 'color_mode', true)) ? $global_ui_mode : get_user_meta(get_current_user_id(), 'color_mode', true);
27
28 if ( $current_ui_mode === 'dark' || $current_ui_mode === 'system' ) {
29 new DarkModeConflicts();
30 }
31
32 // $admin_bar_user_roles = !empty($this->options['admin_bar_user_roles']) ? $this->options['admin_bar_user_roles'] : '';
33 // if (Utils::restricted_for($admin_bar_user_roles)) {
34 // return;
35 // }
36
37 // Disable the default admin bar
38 // add_filter('show_admin_bar', '__return_false');
39
40 // Add admin-bar support if not already activated
41 // add_theme_support('admin-bar', ['callback' => '__return_false']);
42
43
44
45 // 05-06-2024
46 // Check Adminify Setup Wizard Page
47 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only check, no state change.
48 if (!empty($_GET['page']) && 'wp-adminify-setup-wizard' == sanitize_key(wp_unslash($_GET['page']))) {
49 return;
50 }
51
52 $this->initialize();
53
54 // if (!empty($this->adminify_ui) && !empty($this->options['admin_bar_search'] )) {
55 // add_action('wp_admin_bar_class', [$this, 'load_wp_admin_bar_class']);
56 // add_action('pxlbsadminify/before/secondary_menu', [$this, 'before_secondary_menu']);
57 // }
58
59 if (is_admin()) {
60 // Light/Dark Mode switcher add
61 if (!empty($this->options['admin_bar_dark_light_btn'])) {
62 add_action('admin_bar_menu', [$this, 'dark_mode_switcher_icon']);
63 // customize.php never fires `admin_enqueue_scripts` - it does not
64 // load admin-header.php - so the switcher's assets have to come in
65 // on the Customizer's own hook. See enqueue_standalone_switcher().
66 add_action('customize_controls_enqueue_scripts', [$this, 'enqueue_standalone_switcher']);
67 }
68 // Add Frontend Site Preview Icon for UI.
69 // Priority 10000: nodes render in the order they are added, and core fills
70 // top-secondary late - my-account at 9991, recovery mode at 9992, search at
71 // 9999 - so anything lower than this lands before them instead of last.
72 if (!empty($this->adminify_ui)) {
73 add_action('admin_bar_menu', [$this, 'preview_icon'], 10000);
74 }
75 }
76 }
77
78 public function preview_icon($wp_admin_bar) {
79 $args = [
80 'parent' => 'top-secondary',
81 'id' => 'adminify-frontend-site-preview',
82 // Icon only. ab-icon is what WordPress uses to size and align admin bar
83 // glyphs; the label stays for screen readers.
84 'title' => '<span class="ab-icon dashicons dashicons-visibility" aria-hidden="true"></span><span class="screen-reader-text">' . esc_html__('Preview', 'adminify') . '</span>',
85 'href' => home_url('/'),
86 'meta' => [
87 // Opens the site in a new tab so the admin screen stays put.
88 // noopener keeps the new tab from reaching back via window.opener.
89 'target' => '_blank',
90 'rel' => 'noopener',
91 'title' => esc_attr__('Preview site in a new tab', 'adminify'),
92 ],
93 ];
94
95 $wp_admin_bar->add_node($args);
96 }
97
98
99 // Add Switcher Icon on Admin Bar Secondary
100 public function dark_mode_switcher_icon($wp_admin_bar)
101 {
102 $args = [
103 'parent' => 'top-secondary',
104 'id' => 'wp-adminify-admin-bar-switcher',
105 'title' => $this->dark_mode_switcher_dom(),
106 'meta' => false
107 ];
108
109 $wp_admin_bar->add_node($args);
110 }
111
112 public function dark_mode_switcher_dom()
113 {
114 $global_color_mode = !empty($this->options['light_dark_mode']['admin_ui_mode']) ? $this->options['light_dark_mode']['admin_ui_mode'] : 'light';
115 $color_mode = empty(get_user_meta(get_current_user_id(), 'color_mode', true))? $global_color_mode : get_user_meta(get_current_user_id(), 'color_mode', true);
116
117 // currentColor, so the glyphs take the colour of whatever bar they land in:
118 // #f0f0f1 from core's `#wpadminbar .ab-empty-item` in the stock admin bar,
119 // and the surrounding text colour inside the dropdown or anywhere Adminify
120 // styles the bar itself. --adminify-menu-text-color was the SIDEBAR's
121 // colour - near-black in light mode, so the icon all but vanished against
122 // the dark admin bar - and it is not even defined on screens where
123 // OutputCSS does not run, customize.php among them.
124 $color_var = 'currentColor';
125
126 $adminbar_switcher_icon = '<div id="wp-adminify-color-mode-wrapper">
127 <div class="mode-icon adminify-color-mode-' . esc_attr($color_mode) . '-active">
128 <svg viewBox="0 0 24 24" width="24" height="24" class="darkIcon" ><path fill="' . $color_var . '" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg>
129 <svg viewBox="0 0 24 24" width="24" height="24" class="lightIcon"><path fill="' . $color_var . '" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg>
130 <svg width="16" height="16" viewBox="0 0 22 18" fill="none" xmlns="http://www.w3.org/2000/svg" class="systemIcon">
131 <path d="M20 13V4.2C20 3.0799 20 2.51984 19.782 2.09202C19.5903 1.71569 19.2843 1.40973 18.908 1.21799C18.4802 1 17.9201 1 16.8 1H5.2C4.07989 1 3.51984 1 3.09202 1.21799C2.71569 1.40973 2.40973 1.71569 2.21799 2.09202C2 2.51984 2 3.0799 2 4.2V13M3.66667 17H18.3333C18.9533 17 19.2633 17 19.5176 16.9319C20.2078 16.7469 20.7469 16.2078 20.9319 15.5176C21 15.2633 21 14.9533 21 14.3333C21 14.0233 21 13.8683 20.9659 13.7412C20.8735 13.3961 20.6039 13.1265 20.2588 13.0341C20.1317 13 19.9767 13 19.6667 13H2.33333C2.02334 13 1.86835 13 1.74118 13.0341C1.39609 13.1265 1.12654 13.3961 1.03407 13.7412C1 13.8683 1 14.0233 1 14.3333C1 14.9533 1 15.2633 1.06815 15.5176C1.25308 16.2078 1.79218 16.7469 2.48236 16.9319C2.73669 17 3.04669 17 3.66667 17Z" stroke="' . $color_var . '" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
132 </svg>
133 </div>
134 <div class="light-dark-dropdown">
135 <div class="light">
136 <svg viewBox="0 0 24 24" width="24" height="24" class="lightIcon"><path fill="' . $color_var . '" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg>
137 <span>Light</span>
138 </div>
139 <div class="dark">
140 <svg viewBox="0 0 24 24" width="24" height="24" class="darkIcon"><path fill="' . $color_var . '" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg>
141 <span>Dark</span>
142 </div>
143 <div class="system">
144 <svg width="16" height="16" viewBox="0 0 22 18" fill="none" xmlns="http://www.w3.org/2000/svg" class="systemIcon">
145 <path d="M20 13V4.2C20 3.0799 20 2.51984 19.782 2.09202C19.5903 1.71569 19.2843 1.40973 18.908 1.21799C18.4802 1 17.9201 1 16.8 1H5.2C4.07989 1 3.51984 1 3.09202 1.21799C2.71569 1.40973 2.40973 1.71569 2.21799 2.09202C2 2.51984 2 3.0799 2 4.2V13M3.66667 17H18.3333C18.9533 17 19.2633 17 19.5176 16.9319C20.2078 16.7469 20.7469 16.2078 20.9319 15.5176C21 15.2633 21 14.9533 21 14.3333C21 14.0233 21 13.8683 20.9659 13.7412C20.8735 13.3961 20.6039 13.1265 20.2588 13.0341C20.1317 13 19.9767 13 19.6667 13H2.33333C2.02334 13 1.86835 13 1.74118 13.0341C1.39609 13.1265 1.12654 13.3961 1.03407 13.7412C1 13.8683 1 14.0233 1 14.3333C1 14.9533 1 15.2633 1.06815 15.5176C1.25308 16.2078 1.79218 16.7469 2.48236 16.9319C2.73669 17 3.04669 17 3.66667 17Z" stroke="' . $color_var . '" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
146 </svg>
147 <span>System</span>
148 </div>
149 </div>
150 </div>';
151
152 return $adminbar_switcher_icon;
153 }
154
155
156
157 public function initialize()
158 {
159 $admin_bar_position = (!empty($this->options['admin_bar_position'])) ? $this->options['admin_bar_position'] : 'top';
160
161 if (is_admin()) {
162 if ($admin_bar_position == 'top' || $admin_bar_position == 'bottom') {
163 if (!empty($this->adminify_ui)) {
164 //TODO: not need to adminify ui. alternative use iframe topbar
165 // add_action('admin_init', [$this, 'add_admin_bar']);
166 // } else {
167 add_action('admin_head', [$this, 'legacy_admin_bar_positon']);
168 }
169 }
170 add_action('admin_enqueue_scripts', [$this, 'admin_scripts'], 100);
171
172 // Remove Unnecessary Menus from Admin bar
173 // add_action('wp_before_admin_bar_render', [$this, 'remove_admin_bar_menus'], 0);
174
175 // add_filter('admin_body_class', [$this, 'admin_bar_body_class']);
176 // add_action('admin_head', [$this, 'admin_bar_css'], 999);
177
178 add_action('wp_ajax_pxlbsadminify_all_search', [$this, 'all_search']);
179 add_action('wp_ajax_pxlbsadminify_color_mode', [$this, 'color_mode']);
180
181
182 // Screen Option and Help Tab
183 add_action('admin_head', [$this, 'remove_screen_options'], 10, 3);
184 add_action('admin_head', [$this, 'remove_help_tab']);
185 } else {
186 // Admin bar Frontend settings
187 $frontend_admin = (!empty($this->options['admin_bar_hide_frontend'])) ? $this->options['admin_bar_hide_frontend'] : 'show';
188
189 // if (jltwp_adminify()->can_use_premium_code__premium_only()) {
190 // if ($frontend_admin == 'show') {
191 // $frontend_admin_roles = (!empty($this->options['admin_bar_hide_frontend_user_roles'])) ? $this->options['admin_bar_hide_frontend_user_roles'] : [];
192 // if (Utils::restricted_for($frontend_admin_roles)) {
193 // $frontend_admin = 'hide';
194 // }
195 // }
196 // }
197 $this->front_bar();
198
199 if ($admin_bar_position == 'bottom') {
200 add_action('init', [$this, 'admin_bar_front_style_init']);
201 }
202
203 if ($frontend_admin == 'hide') {
204 add_filter('show_admin_bar', '__return_false');
205 }
206 }
207 }
208
209 public function before_secondary_menu()
210 {
211 ?>
212 <div class="wp-adminify-top-header--search--form">
213 <form class="top-header--search--form" action="$">
214 <span class="adminify-search-expand"><i class="icon-magnifier icons"></i></span>
215 <input id="top-header-search-input" class="top-header-search-input" type="search" placeholder="Search here">
216 </form>
217
218 <div id="top-header-search-results" class=" top-header-search-results" style="display: none;">
219 <div class="top-header-results-wrapper">
220 </div>
221 </div>
222 </div>
223 <?php
224 }
225
226 public function load_wp_admin_bar_class()
227 {
228 return 'PXLBSAdminify\Inc\Classes\Adminify_Admin_Bar';
229 }
230
231 public function front_bar()
232 {
233 add_action('admin_init', [$this, 'add_admin_bar']);
234 add_filter('body_class', [$this, 'admin_bar_body_class']);
235 }
236
237 public function admin_bar_front_style_init()
238 {
239 add_filter('wp_enqueue_scripts', [$this, 'admin_bar_front_style']);
240 }
241
242 // Frontend Admin bar style
243 public function admin_bar_front_style()
244 {
245 $admin_bar_css = '';
246 $admin_bar_css .= '.admin-bar-position-bottom #wpadminbar{
247 top:auto;
248 bottom: 0;
249 }
250 .admin-bar-position-bottom #wpadminbar .menupop .ab-sub-wrapper{
251 bottom: 32px;
252 }
253 @media all and (max-width:600px){
254 body.logged-in.admin-bar-position-bottom {
255 position: relative;
256 }
257 }';
258 wp_add_inline_style('admin-bar', $admin_bar_css);
259 }
260
261 // Remove Screen Options
262 public function remove_screen_options()
263 {
264 $enable_screen_tab = Utils::get_user_preference('screen_options_tab');
265 if ($enable_screen_tab) {
266 add_filter('screen_options_show_screen', '__return_false');
267 }
268 }
269
270 // Contextual Help Tab Remove
271 public function remove_help_tab()
272 {
273 $enable_screen_tab = Utils::get_user_preference('adminify_help_tab');
274 if ($enable_screen_tab) {
275 $screen = get_current_screen();
276 $screen->remove_help_tabs();
277 }
278 }
279
280 // Get All registered WP Admin Menus
281 public static function get_wp_admin_menus($thismenu, $thissubmenu)
282 {
283 $options = [];
284
285 if (!empty($thismenu) && is_array($thismenu)) {
286 foreach ($thismenu as $item) {
287 if (!empty($item[0])) {
288 // the preg_replace removes "Comments" & "Plugins" menu spans.
289 $options[$item[2]] = (preg_replace('/\<span.*?>.*?\<\/span><\/span>/s', '', $item[0]));
290 }
291 }
292 }
293
294 if (!empty($thissubmenu) && is_array($thissubmenu)) {
295 foreach ($thissubmenu as $items) {
296 foreach ($items as $item) {
297 if (!empty($item[0])) {
298 $options[$item[1]] = (preg_replace('/\<span.*?>.*?\<\/span><\/span>/s', '', $item[0]));
299 }
300 }
301 }
302 }
303
304 return $options;
305 }
306
307 public function admin_scripts()
308 {
309 global $pagenow;
310 if ($pagenow == 'wp-login.php' || $pagenow == 'wp-register.php' || $pagenow == 'customize.php') {
311 // Adminify's main bundle is skipped on these screens by design, but
312 // WordPress 7.1 prints the admin bar on customize.php - switcher node
313 // and all. Hand it the standalone assets so it is not left inert.
314 $this->enqueue_standalone_switcher();
315 return;
316 }
317
318 // Commented on: 9-6-24
319 if (!empty($this->adminify_ui)) {
320 wp_enqueue_style('wp-adminify-admin-bar');
321 $this->admin_topbar_loader_css();
322 }
323 wp_localize_script('adminify-admin', 'PXLBSADMINIFY_ADMINBAR', $this->create_admin_bar_js_object());
324 }
325
326 /**
327 * Self-contained Light/Dark/System switcher for screens the main bundle skips.
328 *
329 * `wp-adminify.css` scopes the switcher rules under `.adminify-ui` and
330 * `wp-adminify.js` carries the behaviour, and neither loads on customize.php
331 * (Assets::should_skip_adminify_scripts). WordPress 7.1 renders the admin bar
332 * there, so without this the node paints as bare unstyled SVGs and clicking it
333 * does nothing. Same approach DarkModeConflicts already takes for dark mode.
334 *
335 * Safe to call more than once: wp_enqueue_*() is a no-op on a handle that is
336 * already queued.
337 *
338 * @return void
339 */
340 public function enqueue_standalone_switcher()
341 {
342 if (empty($this->options['admin_bar_dark_light_btn'])) {
343 return;
344 }
345
346 wp_enqueue_style(
347 'adminify-admin-bar-switcher',
348 PXLBSADMINIFY_ASSETS . 'css/wp-adminify-admin-bar-switcher' . Utils::assets_ext('.css'),
349 array(),
350 PXLBSADMINIFY_VER
351 );
352
353 wp_enqueue_script(
354 'adminify-admin-bar-switcher',
355 PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify-admin-bar-switcher' . Utils::assets_ext('.js'),
356 array(),
357 PXLBSADMINIFY_VER,
358 true
359 );
360
361 wp_localize_script('adminify-admin-bar-switcher', 'PXLBSADMINIFY_ADMINBAR', $this->create_admin_bar_js_object());
362 }
363
364
365 public function create_admin_bar_js_object()
366 {
367 return [
368 'ajax_url' => admin_url('admin-ajax.php'),
369 'security_nonce' => wp_create_nonce('pxlbsadminify_frame_nonce'),
370 'notice_nonce' => wp_create_nonce('pxlbsadminify-notice-nonce'),
371 ];
372 }
373
374 /**
375 * Preloader
376 *
377 * @return void
378 */
379 public function admin_topbar_loader_css()
380 {
381 $output_css = '';
382 $topbar_wireframe_img = PXLBSADMINIFY_ASSETS_IMAGE . 'topbar-wireframe.svg';
383 $output_css .= '.js .wp-adminify-topbar-loader{background: url(' . esc_url($topbar_wireframe_img) . '); }';
384
385 // Use wp_add_inline_style instead of echo to prevent "headers already sent" errors
386 wp_add_inline_style( 'wp-adminify-admin-bar', wp_strip_all_tags($output_css) );
387
388 $screen = get_current_screen(); // Get current screen details
389
390 if (isset($screen->base) && $screen->base === 'post') {
391 $inline_script = "window.addEventListener('load', function() {
392 const isFullscreenMode = wp.data.select('core/edit-post').isFeatureActive('fullscreenMode');
393 if (isFullscreenMode) {
394 jQuery('.adminify-top_bar').css({
395 'display': 'none !important'
396 });
397 }
398 });";
399 wp_add_inline_script( 'adminify-admin', $inline_script );
400 }
401 }
402
403 /**
404 * Save Color Mode by Ajax
405 *
406 * @return void
407 */
408 public function color_mode()
409 {
410 if (defined('DOING_AJAX') && DOING_AJAX) {
411 // Both callers (classic admin bar wp-adminify.js and the React frame
412 // dropdown dev/admin/frame/utils/uitls.js) post the
413 // pxlbsadminify_frame_nonce nonce.
414 if ( check_ajax_referer('pxlbsadminify_frame_nonce', 'security', false) <= 0 ) {
415 wp_send_json_error( array( 'mess' => __( 'Invalid request.', 'adminify' ) ), 403 );
416 }
417 // Color mode is per-user preference; require the caller to be
418 // a logged-in user with admin-bar access.
419 if ( ! is_user_logged_in() || ! current_user_can( 'read' ) ) {
420 wp_send_json_error( array( 'mess' => __( 'You are not allowed to perform this action.', 'adminify' ) ), 403 );
421 }
422 $admin_bar_mode = AdminSettings::get_instance()->get();
423
424 if (!empty($_POST['key'])) {
425 $key = sanitize_key($_POST['key']);
426 $value = isset($_POST['value']) ? Utils::clean_ajax_input(wp_unslash($_POST['value'])) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- sanitized via Utils::clean_ajax_input().
427
428 if ($key == '') {
429 $message = __('No Color Mode supplied to save', 'adminify');
430 echo wp_json_encode( array( 'error' => true, 'error_message' => $message ) );
431 die();
432 }
433 }
434
435 // Light/Dark Mode
436 if ($key === 'color_mode') {
437 // For User preference
438 $userid = get_current_user_id();
439 $current = get_user_meta($userid, $key, true);
440 if($current !== $value) {
441 $state = update_user_meta($userid, $key, $value);
442 }
443 die();
444 }
445
446 // Screen Options, Help Tabs and WP Hide Links
447 if ($key === 'screen_options_tab' || $key === 'hide_wp_links' || $key === 'adminify_help_tab') {
448 $userid = get_current_user_id();
449 $current = get_user_meta($userid, 'pxlbsadminify_preferences', true);
450
451 if (is_array($current)) {
452 $current[$key] = $value;
453 } else {
454 $current = [];
455 $current[$key] = $value;
456 }
457
458 $state = update_user_meta($userid, 'pxlbsadminify_preferences', $current);
459
460 if ($state) {
461 $returndata = [];
462 $returndata['success'] = true;
463 $returndata['message'] = __('Preferences saved', 'adminify');
464 echo wp_json_encode($returndata);
465 } else {
466 $message = __('Unable to save user preferences', 'adminify');
467 echo wp_json_encode( array( 'error' => true, 'error_message' => $message ) );
468 die();
469 }
470 }
471 }
472 }
473
474 /**
475 * Search Everything
476 *
477 * @return void
478 */
479 public function all_search()
480 {
481 if (defined('DOING_AJAX') && DOING_AJAX) {
482 // Both the classic admin bar and the React frame search (SearchForm.jsx)
483 // post the pxlbsadminify_frame_nonce nonce.
484 if ( check_ajax_referer('pxlbsadminify_frame_nonce', 'security', false) <= 0 ) {
485 wp_send_json_error( array( 'message' => __( 'Invalid request.', 'adminify' ) ), 403 );
486 }
487 // Security check - only users who can edit posts should access admin search
488 if (!current_user_can('edit_posts')) {
489 wp_send_json_error(array('message' => __('You do not have permission to perform this action.', 'adminify')));
490 }
491
492 $search_text = '';
493 if (!empty($_POST['search'])) {
494 $search_text = sanitize_text_field(wp_unslash($_POST['search']));
495 }
496
497 // Error Handling For Minimum 3 Char
498 if (strlen($search_text) < 3) {
499 wp_send_json_success(
500 [
501 'message' => 'Please Enter Minimum 3 Characters'
502 ]
503 );
504 }
505
506
507 // Search Arguments
508 $args = [
509 'numberposts' => -1,
510 's' => $search_text,
511 'post_status' => ['publish', 'pending', 'draft', 'future', 'private', 'inherit'],
512 // Restrict non-public statuses (private/draft/pending/future) to posts the
513 // current user is allowed to read. Without this, any role holding edit_posts
514 // (e.g. Contributor) could read other authors' unpublished post titles.
515 'perm' => 'readable',
516 ];
517
518 // All Post Types
519 $post_types = $this->get_post_types();
520 foreach ($post_types as $type) {
521 $args['post_type'][] = $type->name;
522 }
523
524 // All Categories/Taxonomies
525 $all_taxonomies = get_taxonomies();
526
527 // Get Comments — only for users who can moderate them. Otherwise the search
528 // would expose unapproved/pending comment content to roles that cannot see it
529 // in the WordPress admin (e.g. Contributor).
530 $all_comments = current_user_can('moderate_comments') ? get_comments() : [];
531
532 // Get All Users — only for users who can list users. Prevents leaking user
533 // logins/display names to roles without the list_users capability.
534 $all_users = current_user_can('list_users') ? get_users() : [];
535
536 // All Users
537 // $blogusers = get_users();
538 // foreach ($blogusers as $type) {
539 // $name = $type->user_login;
540 // $id = $type->ID;
541 // $args['author__in'][] = $type->ID;
542 // }
543
544 // // All Menus
545 // $all_admin_menus = self::get_wp_admin_menus();
546
547 // All Plugins — only for users who can manage plugins. Prevents leaking the
548 // site's plugin inventory to roles without the activate_plugins capability.
549 $all_plugins = [];
550 if (current_user_can('activate_plugins')) {
551 if (!function_exists('get_plugins')) {
552 require_once ABSPATH . 'wp-admin/includes/plugin.php';
553 }
554 $all_plugins = get_plugins();
555 }
556
557 $foundposts = get_posts($args);
558
559 // $count_items = '';
560 // if (count($foundposts) > 0) {
561 // $count_items .= count($foundposts);
562 // } elseif (count($all_plugins)) {
563 // $count_items .= count($all_plugins);
564 // }
565
566
567
568
569
570 $output_data = [
571 'foundposts' => $this->set_edit_url_foundposts($foundposts),
572 'all_taxonomies' => $this->filter_all_taxonomies($all_taxonomies, $search_text),
573 'all_comments' => $this->filter_all_comments($all_comments, $search_text),
574 'all_users' => $this->filter_all_users($all_users, $search_text),
575 'all_plugins' => $this->filter_all_plugins($all_plugins, $search_text),
576 ];
577
578 wp_send_json_success(
579 [
580 'data' => wp_json_encode($output_data),
581 ]
582 );
583 }
584
585 die();
586 }
587
588 /**
589 * Set URL to All Post
590 */
591 public function set_edit_url_foundposts($foundposts)
592 {
593 $all_posts = [];
594 foreach ($foundposts as $key => $post) {
595 // Defense in depth alongside the query's perm=readable: never surface a post
596 // the current user cannot read (e.g. another author's unpublished content).
597 if (!current_user_can('read_post', $post->ID)) {
598 continue;
599 }
600 $edit_url = get_edit_post_link($post);
601 $all_posts[$key]['title'] = get_the_title($post->ID);
602 $all_posts[$key]['link'] = $edit_url;
603 }
604
605 return $all_posts;
606 }
607
608 /**
609 * Search Taxonomies
610 */
611 public function filter_all_taxonomies($all_taxonomies, $search_text)
612 {
613 $find_taxonomies = [];
614
615 foreach ($all_taxonomies as $tax_name) {
616 $terms = get_terms(
617 [
618 'taxonomy' => $tax_name,
619 'hide_empty' => 1,
620 ]
621 );
622
623 foreach ($terms as $key => $cat) {
624 if (strpos(strtolower($cat->name), strtolower($search_text)) === false) {
625 continue;
626 }
627 $find_taxonomies[$key]['name'] = $cat->name;
628 $find_taxonomies[$key]['link'] = get_edit_term_link($cat);
629 }
630 }
631
632 return $find_taxonomies;
633 }
634
635 /**
636 * Search Comments
637 */
638 public function filter_all_comments($all_comments, $search_text)
639 {
640 $find_comments = [];
641
642 foreach ($all_comments as $key => $comment) {
643 if (strpos(strtolower($comment->comment_content), strtolower($search_text)) === false) {
644 continue;
645 }
646 $find_comments[$key]['content'] = $comment->comment_content;
647 $find_comments[$key]['link'] = admin_url('comment.php?action=editcomment&c=' . esc_attr($comment->comment_ID));
648 }
649
650 return $find_comments;
651 }
652
653 /**
654 * Search Users
655 */
656 public function filter_all_users($all_users, $search_text)
657 {
658 $find_users = [];
659
660 foreach ($all_users as $key => $user) {
661 if (str_contains(strtolower($user->data->user_login), strtolower($search_text)) || str_contains(strtolower($user->data->display_name), strtolower($search_text))) {
662 $find_users[$key]['name'] = $user->data->user_login;
663 $find_users[$key]['display_name'] = $user->data->display_name;
664 $find_users[$key]['link'] = admin_url('user-edit.php?user_id=' . $user->ID);
665 }
666 }
667
668 return $find_users;
669 }
670
671 /**
672 * Search Plugins
673 */
674 public function filter_all_plugins($all_plugins, $search_text)
675 {
676 $find_plugins = [];
677
678 foreach ($all_plugins as $key => $plugin) {
679 if (strpos(strtolower($plugin['Name']), strtolower($search_text)) === false) {
680 continue;
681 }
682
683 $find_plugins[] = [
684 'name' => $plugin['Name'],
685 'link' => admin_url('plugins.php')
686 ];
687 }
688
689 return $find_plugins;
690 }
691
692 // Admin Bar Body Class
693 public function admin_bar_body_class($classes)
694 {
695 if (is_admin()) {
696 $classes .= ' wp-adminify-admin-bar';
697
698 $admin_bar_position = !empty($this->options['admin_bar_position']) ? $this->options['admin_bar_position'] : 'top';
699 if ($admin_bar_position === 'top') {
700 $classes .= ' position-top';
701 } elseif ($admin_bar_position === 'bottom') {
702 $classes .= ' position-bottom';
703 }
704
705 if (!empty($this->options['enable_admin_bar'])) {
706 $classes .= ' topbar-disabled';
707 }
708 } else {
709 global $pagenow;
710
711 if (!is_user_logged_in() && $pagenow != 'wp-login.php') {
712 return $classes;
713 }
714
715 $classes[] = 'wp-adminify-admin-bar';
716
717 $admin_bar_position = !empty($this->options['admin_bar_position']) ? $this->options['admin_bar_position'] : 'top';
718 if ($admin_bar_position === 'top') {
719 $classes[] = 'admin-bar-position-top';
720 } elseif ($admin_bar_position === 'bottom') {
721 $classes[] = 'admin-bar-position-bottom';
722 }
723
724 if (!empty($this->options['enable_admin_bar'])) {
725 $classes[] = 'topbar-disabled';
726 }
727 }
728
729 return $classes;
730 }
731
732 public function get_post_types()
733 {
734 if (is_array($this->post_types)) {
735 return $this->post_types;
736 } else {
737 $args = ['public' => true];
738 $output = 'objects';
739 $post_types = get_post_types($args, $output);
740 $this->post_types = $post_types;
741 return $post_types;
742 }
743 }
744
745 public function legacy_admin_bar_positon()
746 {
747 if (!empty($this->options['admin_bar_position']) && $this->options['admin_bar_position'] == 'bottom') {
748
749 $pxlbsadminify_thirdparty_css = '';
750 $pxlbsadminify_thirdparty_css .= 'body.wp-adminify.position-bottom {
751 margin-top: -28px;
752 padding-bottom: 28px;
753 }
754
755 body.wp-adminify.position-bottom.admin-bar #wphead {
756 padding-top: 0;
757 }
758
759 body.wp-adminify.position-bottom.admin-bar #footer {
760 padding-bottom: 28px;
761 }
762
763 body.wp-adminify.position-bottom #wpadminbar {
764 top: auto !important;
765 bottom: 0;
766 }
767
768 body.wp-adminify.position-bottom #wpadminbar .quicklinks .ab-top-menu .menupop .ab-sub-wrapper {
769 bottom: 32px;
770 }
771
772 body.wp-adminify.position-bottom #wpadminbar .quicklinks .ab-top-menu .menupop .ab-sub-wrapper .ab-submenu .menupop .ab-sub-wrapper {
773 bottom: -9px;
774 }';
775 echo '<style>' . esc_html(wp_strip_all_tags($pxlbsadminify_thirdparty_css)) . '</style>';
776 }
777 }
778
779 public function add_admin_bar()
780 {
781 // For Testing Admin Bar on Setup Wizard
782 // add_action('admin_head', [$this, 'render_admin_bar']);
783
784 add_action('in_admin_header', [$this, 'render_admin_bar'], -999999999);
785 // on frontend area
786 add_action('wp_head', [$this, 'render_admin_bar']);
787 }
788
789
790 public function render_admin_bar()
791 {
792
793 global $pagenow;
794 if (!is_user_logged_in() && $pagenow != 'wp-login.php') {
795 return;
796 }
797
798 // Check Gutenberg Editor Page
799 // if (Utils::is_block_editor_page()) {
800 // return;
801 // }
802
803 // if (!is_admin_bar_showing()) {
804 // return false;
805 // }
806
807 // Remove Adminbar from Gutenberg Block Editor Page
808 // if (function_exists('is_gutenberg_page') && is_gutenberg_page()) {
809 // // The Gutenberg plugin is on.
810 // return;
811 // }
812 // if (function_exists('get_current_screen')) {
813 // $current_screen = get_current_screen();
814 // if (!empty($current_screen->is_block_editor)) {
815 // return;
816 // }
817 // }
818
819 global $wp_admin_bar;
820
821 if (empty($wp_admin_bar)) {
822 return false;
823 }
824
825 $admin_bar_mode = empty($admin_bar_mode['light_dark_mode']['admin_ui_mode']) ? 'light' : $admin_bar_mode['light_dark_mode']['admin_ui_mode'];
826
827 // Light/Dark Mode
828 $enable_dark_mode = $admin_bar_mode != 'light';
829
830 // Screen Option && Hide WP Links
831 $enable_screen_tab = Utils::get_user_preference('screen_options_tab');
832 $enable_help_tab = Utils::get_user_preference('adminify_help_tab');
833 // $enable_hide_wp_links = Utils::get_user_preference( 'hide_wp_links' );
834
835 // Admin Bar Position
836 if (!empty($this->options['admin_bar_position']) && $this->options['admin_bar_position'] === 'top') {
837 $admin_bar_position = 'top_bar';
838 } elseif (!empty($this->options['admin_bar_position']) && $this->options['admin_bar_position'] === 'bottom') {
839 $admin_bar_position = 'bottom_bar is-fixed-bottom';
840 } else {
841 $admin_bar_position = 'top_bar';
842 }
843
844 $current_user = wp_get_current_user();
845
846 ob_start();
847
848 // Temporarily removing Topbar
849 // <div class="wp-adminify-topbar-loader"></div>
850
851 // 17-7-23, removed opacity for Conflicting Opacity Issue
852 // <div class="wp-adminify adminify-top_bar" style="opacity: 0;">
853 ?>
854
855
856
857 <div class="wp-adminify adminify-top_bar">
858 <nav class="navbar adminify-top-navbar <?php echo esc_attr($admin_bar_position); ?>">
859
860 <?php $this->logo(); ?>
861 <div class="adminify-admin-wrapper">
862 <div class="adminify-legacy-admin">
863 <div class="adminify-hamburger navbar-burger" data-target="wp-adminify-top-adminbar">
864 <svg width="11" height="8" viewBox="0 0 11 8" fill="none" xmlns="http://www.w3.org/2000/svg">
865 <path d="M7 0H0V1H7V0Z" fill="#48455F" />
866 <path d="M7 7H0V8H7V7Z" fill="#48455F" />
867 <path d="M4.67 3.5H0V4.5H4.67V3.5Z" fill="#48455F" />
868 <path d="M9.65 7.35L6.29 4L9.65 0.65L10.35 1.35L7.71 4L10.35 6.65L9.65 7.35Z" fill="#48455F" />
869 </svg>
870 </div>
871 <?php wp_admin_bar_render(); ?>
872 </div>
873
874 <div id="wp-adminify-top-adminbar" class="navbar-menu">
875
876 <div class="navbar-end">
877 <div class="field is-grouped">
878
879 <?php echo wp_kses_post($this->dark_mode_switcher_dom()) ?>
880
881 <?php if (!empty($this->options['admin_bar_notif'])) { ?>
882 <div class="wp-adminify--top--comment">
883 <button class="comment-trigger is-clickable">
884 <div class="topbar-icon">
885 <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
886 <path d="M0.25 13.75V1.75C0.25 0.921573 0.921572 0.25 1.75 0.25H12.25C13.0784 0.25 13.75 0.921573 13.75 1.75V9.25C13.75 10.0784 13.0784 10.75 12.25 10.75H4.75C4.42535 10.7494 4.10936 10.8547 3.85 11.05L0.25 13.75ZM1.75 1.75V10.75L3.3505 9.55C3.60973 9.35448 3.9258 9.24913 4.2505 9.25H12.25V1.75H1.75Z" fill="var(--adminify-menu-text-color)" />
887 </svg>
888 </div>
889 <span class="comment-counter">
890 <?php
891 $comments_count = wp_count_comments();
892 echo esc_html($comments_count->moderated);
893 ?>
894 </span>
895 </button>
896 </div>
897
898 <?php
899 }
900 ?>
901
902 <div class="wp-adminify--preview">
903 <a class="preview-trigger is-clickable" href="<?php echo esc_url(get_home_url()); ?>" target="_blank">
904 <i class="dashicons dashicons-visibility"></i>
905 </a>
906 </div>
907
908 <div class="wp-adminify--user--account">
909 <button class="user-avatar is-clickable">
910 <div class="image is-45x45">
911 <?php echo get_avatar($current_user->user_email, 45, '', '', ['class' => 'is-rounded']); ?>
912 </div>
913 <span class="user-status tag p-0 is-rounded"></span>
914 </button>
915
916 <?php if (!empty($this->adminify_ui)) { ?>
917 <div class="wp-adminify--user--wrapper">
918 <div class="wp-adminify-user-info">
919 <h3 class="wp-adminify-user-name">
920 <?php echo esc_html($current_user->display_name); ?>
921 </h3>
922 <span><?php echo wp_kses_post(is_email($current_user->user_email)); ?></span>
923
924 <ul>
925 <hr>
926 <li>
927 <a href="<?php echo esc_url(admin_url('profile.php')); ?>">
928 <svg class="wp-adminify-profile-icon" width="16" height="18" viewBox="0 0 16 18" fill="none" xmlns="http://www.w3.org/2000/svg">
929 <path d="M14.6654 16.5C14.6654 15.337 14.6654 14.7555 14.5218 14.2824C14.1987 13.217 13.365 12.3834 12.2996 12.0602C11.8265 11.9167 11.245 11.9167 10.082 11.9167H5.91537C4.7524 11.9167 4.17091 11.9167 3.69775 12.0602C2.63241 12.3834 1.79873 13.217 1.47556 14.2824C1.33203 14.7555 1.33203 15.337 1.33203 16.5M11.7487 5.25C11.7487 7.32107 10.0698 9 7.9987 9C5.92763 9 4.2487 7.32107 4.2487 5.25C4.2487 3.17893 5.92763 1.5 7.9987 1.5C10.0698 1.5 11.7487 3.17893 11.7487 5.25Z" stroke="var(--adminify-primary)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
930 </svg>
931 <span><?php esc_html_e('View Profile', 'adminify'); ?></span>
932 </a>
933 </li>
934 <hr>
935 <li>
936 <a href="<?php echo esc_url(wp_logout_url(home_url())); ?>" class="wp-adminify-logout">
937 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
938 <path fill-rule="evenodd" clip-rule="evenodd" d="M5.7587 4.31292e-07L7 9.08129e-07C7.55229 9.08129e-07 8 0.447716 8 1C8 1.55229 7.55229 2 7 2H5.8C4.94342 2 4.36113 2.00078 3.91104 2.03755C3.47262 2.07337 3.24842 2.1383 3.09202 2.21799C2.7157 2.40973 2.40974 2.7157 2.21799 3.09202C2.1383 3.24842 2.07337 3.47262 2.03755 3.91104C2.00078 4.36113 2 4.94342 2 5.8V14.2C2 15.0566 2.00078 15.6389 2.03755 16.089C2.07337 16.5274 2.1383 16.7516 2.21799 16.908C2.40973 17.2843 2.7157 17.5903 3.09202 17.782C3.24842 17.8617 3.47262 17.9266 3.91104 17.9624C4.36113 17.9992 4.94342 18 5.8 18H7C7.55229 18 8 18.4477 8 19C8 19.5523 7.55229 20 7 20H5.75868C4.95372 20 4.28937 20 3.74818 19.9558C3.18608 19.9099 2.66937 19.8113 2.18404 19.564C1.43139 19.1805 0.819468 18.5686 0.435975 17.816C0.188684 17.3306 0.0901197 16.8139 0.0441946 16.2518C-2.28137e-05 15.7106 -1.23241e-05 15.0463 4.31291e-07 14.2413V5.7587C-1.23241e-05 4.95373 -2.28137e-05 4.28937 0.0441947 3.74817C0.09012 3.18608 0.188685 2.66937 0.435976 2.18404C0.81947 1.43139 1.43139 0.819468 2.18404 0.435975C2.66938 0.188684 3.18608 0.0901197 3.74818 0.0441945C4.28937 -2.28137e-05 4.95373 -1.23241e-05 5.7587 4.31292e-07ZM13.2929 4.29289C13.6834 3.90237 14.3166 3.90237 14.7071 4.29289L19.7071 9.29289C20.0976 9.68342 20.0976 10.3166 19.7071 10.7071L14.7071 15.7071C14.3166 16.0976 13.6834 16.0976 13.2929 15.7071C12.9024 15.3166 12.9024 14.6834 13.2929 14.2929L16.5858 11H7C6.44772 11 6 10.5523 6 10C6 9.44772 6.44772 9 7 9H16.5858L13.2929 5.70711C12.9024 5.31658 12.9024 4.68342 13.2929 4.29289Z" fill="var(--adminify-primary)"></path>
939 </svg>
940 <span><?php echo esc_html__('Log Out', 'adminify'); ?></span>
941 </a>
942 </li>
943 </ul>
944 </div>
945 </div>
946 <?php } ?>
947 </div>
948 </div>
949 </div>
950 </div>
951 </div>
952 </nav>
953 </div>
954
955 <?php
956 $output_wp_admin_bar = ob_get_clean();
957 echo wp_kses( $output_wp_admin_bar, Utils::kses_allowed_html() );
958 }
959
960 public function logo()
961 {
962 global $wp_admin_bar;
963 $adminurl = get_admin_url();
964 $homeurl = $adminurl;
965
966 // Light Logo
967 // menu_layout_settings.layout_type / .menu_mode were read here
968 // previously but the resulting locals were never used
969 // downstream. Removed because layout_type === 'horizontal' is
970 // a Pro-only feature whose handler now lives in
971 // Pro/Classes/OutputCSS_Body_Pro.php.
972 $admin_ui_logo_type = !empty($this->options['light_dark_mode']['admin_ui_logo_type']) ? $this->options['light_dark_mode']['admin_ui_logo_type'] : 'image_logo';
973
974 $light_mode = !empty($this->options['light_dark_mode']['admin_ui_light_mode']) ? $this->options['light_dark_mode']['admin_ui_light_mode'] : '';
975
976 $light_logo = '';
977 $light_mini_logo = '';
978 if ($admin_ui_logo_type == 'image_logo') {
979 if (isset($light_mode['mini_admin_ui_light_logo']['url']) && $light_mode['mini_admin_ui_light_logo']['url']) {
980 $light_mini_logo = $light_mode['mini_admin_ui_light_logo']['url'];
981 } else {
982 $light_mini_logo = PXLBSADMINIFY_ASSETS_IMAGE . 'logos/mini-logo-light.svg';
983 }
984
985 // Logo Image
986 if (!empty($light_mode['admin_ui_light_logo']['url'])) {
987 $light_logo = $light_mode['admin_ui_light_logo']['url'];
988 } else {
989 $light_logo = PXLBSADMINIFY_ASSETS_IMAGE . 'logos/logo-text-light.svg';
990 }
991 } elseif ($admin_ui_logo_type == 'text_logo') {
992 // Text Logo
993 if ($this->options['light_dark_mode']['admin_ui_mode'] == 'light') {
994 $text_logo = $light_mode['admin_ui_light_logo_text'];
995 }
996 }
997
998 // Logo Size
999 $light_width = !empty($light_mode['light_logo_size']['width']) ? $light_mode['light_logo_size']['width'] : '120';
1000 $light_height = !empty($light_mode['light_logo_size']['height']) ? $light_mode['light_logo_size']['height'] : '32';
1001
1002 // Dark Logo
1003 $dark_mode = !empty($this->options['light_dark_mode']['admin_ui_dark_mode']) ? $this->options['light_dark_mode']['admin_ui_dark_mode'] : '';
1004
1005 $dark_logo = '';
1006 $dark_mini_logo = '';
1007 if ($admin_ui_logo_type == 'image_logo') {
1008 if (isset($dark_mode['mini_admin_ui_dark_logo']['url']) && $dark_mode['mini_admin_ui_dark_logo']['url']) {
1009 $dark_mini_logo = $dark_mode['mini_admin_ui_dark_logo']['url'];
1010 } else {
1011 $dark_mini_logo = PXLBSADMINIFY_ASSETS_IMAGE . 'logos/mini-logo-dark.svg';
1012 }
1013 // Dark Logo Image
1014 if (isset($dark_mode['admin_ui_dark_logo']['url']) && $dark_mode['admin_ui_dark_logo']['url']) {
1015 $dark_logo = $dark_mode['admin_ui_dark_logo']['url'];
1016 } else {
1017 $dark_logo = PXLBSADMINIFY_ASSETS_IMAGE . 'logos/logo-text-dark.svg';
1018 }
1019 } elseif ($admin_ui_logo_type == 'text_logo') {
1020 // Text Logo
1021 if ($this->options['light_dark_mode']['admin_ui_mode'] == 'dark') {
1022 $text_logo = $dark_mode['admin_ui_dark_logo_text'];
1023 }
1024 }
1025
1026 // Dark Logo Size
1027 $dark_width = !empty($dark_mode['dark_logo_size']['width']) ? $dark_mode['dark_logo_size']['width'] : '120';
1028 $dark_height = !empty($dark_mode['dark_logo_size']['height']) ? $dark_mode['dark_logo_size']['height'] : '32';
1029
1030 ?>
1031
1032 <div class="navbar-brand">
1033 <a class="navbar-item p-0" href="<?php echo esc_url($homeurl); ?>">
1034 <?php if ($admin_ui_logo_type == 'image_logo') { ?>
1035 <!-- Light Logo -->
1036 <img alt="<?php echo esc_attr(get_bloginfo('name')); ?>" class="logo-light" src="<?php echo esc_url($light_logo); ?>" width="<?php echo esc_attr($light_width); ?>" height="<?php echo esc_attr($light_height); ?>">
1037 <img alt="<?php echo esc_attr(get_bloginfo('name')); ?>" class="mini-logo-light" src="<?php echo esc_url($light_mini_logo); ?>" width="36" height="36">
1038 <!-- Dark Logo -->
1039 <img alt="<?php echo esc_attr(get_bloginfo('name')); ?>" class="logo-dark" src="<?php echo esc_url($dark_logo); ?>" width="<?php echo esc_attr($dark_width); ?>" height="<?php echo esc_attr($dark_height); ?>">
1040 <img alt="<?php echo esc_attr(get_bloginfo('name')); ?>" class="mini-logo-dark" src="<?php echo esc_url($dark_mini_logo); ?>" width="36" height="36">
1041 <?php } elseif ($admin_ui_logo_type == 'text_logo') { ?>
1042 <span class="wp-adminify-site-name">
1043 <?php echo esc_html($text_logo); ?>
1044 </span>
1045 <?php } ?>
1046 </a>
1047
1048 <!-- <div class="navbar-burger" data-target="wp-adminify-top-adminbar">
1049 <img src="<?php // echo PXLBSADMINIFY_ASSETS_IMAGE . 'icons/toggol.svg';
1050 ?>" alt="Toggol icon"/>
1051 </div> -->
1052
1053 </div>
1054
1055 <?php
1056 }
1057
1058
1059 /* Remove from the administration bar */
1060 public function remove_admin_bar_menus()
1061 {
1062 global $wp_admin_bar;
1063 $wp_admin_bar->remove_menu('wp-logo');
1064 $wp_admin_bar->remove_menu('site-name');
1065 $wp_admin_bar->remove_menu('updates');
1066 $wp_admin_bar->remove_menu('menu-toggle');
1067 }
1068 }
1069