PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.0.7
Adminify – White Label, Admin Menu Editor, Login Customizer v4.0.7
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 / Assets.php

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

434 lines 18.6 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\Classes;
4
5 use WPAdminify\Inc\Utils;
6 use WPAdminify\Inc\Admin\AdminSettings;
7 use WPAdminify\Inc\Admin\AdminSettingsModel;
8
9
10
11 // no direct access allowed
12 if (!defined('ABSPATH')) {
13 exit;
14 }
15
16 class Assets extends AdminSettingsModel
17 {
18
19 public $classic_editor = true;
20 public $block_editor = true;
21 public $dark_mode = true;
22
23 public function __construct()
24 {
25 $this->options = (array) AdminSettings::get_instance()->get();
26 $global_dark_mode = !empty($this->options['light_dark_mode']['admin_ui_mode']) ? $this->options['light_dark_mode']['admin_ui_mode'] : 'light';
27 $this->dark_mode = empty(get_user_meta(get_current_user_id(), 'color_mode', true)) ? $global_dark_mode : get_user_meta(get_current_user_id(), 'color_mode', true);
28 add_action('admin_enqueue_scripts', array($this, 'jltwp_adminify_admin_scripts'), 100);
29 add_action('wp_ajax_jltwp_adminify_addons_install_active', 'jltwp_adminify_addons_install_active');
30
31 if ($this->is_dark_mode() || $this->classic_editor || $this->block_editor) {
32 add_action('admin_head', array($this, 'header_scripts'));
33 }
34 }
35
36
37 /**
38 * Function: Ajax Call for Install and Activate WP Adminify Plugin
39 */
40 function jltwp_adminify_addons_install_active()
41 {
42
43 // Include necessary WordPress files
44 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
45 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
46 require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
47 require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
48
49 if (isset($_POST['plugin'])) {
50
51 $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
52
53 if (!wp_verify_nonce($nonce, 'jltwp_adminify_addons_nonce')) {
54 wp_send_json_error(array('mess' => esc_html__('Nonce is invalid', 'adminify')));
55 }
56
57 if ((is_multisite() && is_network_admin()) || !current_user_can('install_plugins')) {
58 wp_send_json_error(array('mess' => esc_html__('Invalid Access', 'adminify')));
59 }
60
61 $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
62
63 if (empty($plugin)) {
64 wp_send_json_error(array('mess' => esc_html__('Invalid plugin', 'adminify')));
65 }
66
67 $type = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : 'install';
68 $skin = new \WP_Ajax_Upgrader_Skin();
69 $upgrader = new \Plugin_Upgrader($skin);
70
71 if ('install' === $type) {
72 $result = $upgrader->install($plugin);
73 if (is_wp_error($result)) {
74 wp_send_json_error(
75 array(
76 'mess' => $result->get_error_message(),
77 )
78 );
79 }
80 $args = array(
81 'slug' => $upgrader->result['destination_name'],
82 'fields' => array(
83 'short_description' => true,
84 'icons' => true,
85 'banners' => false,
86 'added' => false,
87 'reviews' => false,
88 'sections' => false,
89 'requires' => false,
90 'rating' => false,
91 'ratings' => false,
92 'downloaded' => false,
93 'last_updated' => false,
94 'added' => false,
95 'tags' => false,
96 'compatibility' => false,
97 'homepage' => false,
98 'donate_link' => false,
99 ),
100 );
101 $plugin_data = plugins_api('plugin_information', $args);
102
103 if ($plugin_data && !is_wp_error($plugin_data)) {
104 $install_status = \install_plugin_install_status($plugin_data);
105 activate_plugin($install_status['file']);
106 }
107 wp_die(); // die();
108 }
109 }
110 }
111
112
113 /*
114 * Function is_dark_mode()
115 *
116 */
117 public function is_dark_mode()
118 {
119
120 if (!empty($this->dark_mode) && $this->dark_mode == 'dark') {
121 $adminify_dark_mode = true;
122 } else {
123 $adminify_dark_mode = false;
124 }
125 return $adminify_dark_mode;
126 }
127
128 public function header_scripts()
129 {
130 // Skip on excluded pages
131 if ( $this->should_skip_adminify_scripts() ) {
132 return;
133 }
134
135 if (!empty($this->dark_mode) && $this->dark_mode == 'dark') { ?>
136
137 <script>
138 window.AdminifyDarkMode.enable({
139 brightness: 120
140 })
141
142 addEventListener("load", (event) => {
143 window.AdminifyDarkMode.enable({
144 brightness: 120
145 })
146 });
147 </script>
148 <?php }
149
150 if (!empty($this->dark_mode) && $this->dark_mode == 'system') { ?>
151 <script>
152 const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
153 if(!!isDark) {
154 window.AdminifyDarkMode.enable({
155 brightness: 120
156 })
157
158 addEventListener("load", (event) => {
159 window.AdminifyDarkMode.enable({
160 brightness: 120
161 })
162 });
163 } else {
164 window.AdminifyDarkMode.disable()
165
166 addEventListener("load", (event) => {
167 window.AdminifyDarkMode.disable()
168 });
169 }
170
171 </script>
172
173 <?php }
174
175 }
176
177
178
179 // Google Fonts
180 function jltwp_adminify_google_fonts_url()
181 {
182 $font_family = !empty($this->options['admin_general_google_font']['font-family']) ? ($this->options['admin_general_google_font']['font-family']) : '';
183
184 if (empty($font_family)) {
185 return '';
186 }
187
188 // Get local font instance
189 $local_fonts = GoogleFontsLocal::get_instance();
190
191 // Check if local font exists, if not download it
192 if (!$local_fonts->is_font_local($font_family)) {
193 $font_weights = !empty($this->options['admin_general_google_font']['font-weight']) ? $this->options['admin_general_google_font']['font-weight'] : '400';
194 $local_fonts->download_font($font_family, $font_weights);
195 }
196
197 // Return local font URL
198 return $local_fonts->get_local_font_url($font_family);
199 }
200
201 /**
202 * Check if current page should skip Adminify scripts
203 * Handles root, subdirectory, subdomain, and multisite installations
204 *
205 * @return bool True if scripts should be skipped
206 */
207 private function should_skip_adminify_scripts() {
208 global $pagenow;
209
210 // Pages where Adminify scripts should not load
211 $excluded_pages = [
212 'customize.php',
213 'wp-login.php',
214 'wp-register.php',
215 ];
216
217 // Check global $pagenow
218 if ( in_array( $pagenow, $excluded_pages, true ) ) {
219 return true;
220 }
221
222 // Fallback: Check PHP_SELF for subdirectory WordPress installs
223 // Normalize path by extracting just the filename
224 $php_self = $_SERVER['PHP_SELF'] ?? '';
225 $current_file = basename( $php_self );
226
227 if ( in_array( $current_file, $excluded_pages, true ) ) {
228 return true;
229 }
230
231 // Additional check using REQUEST_URI for edge cases
232 $request_uri = $_SERVER['REQUEST_URI'] ?? '';
233 foreach ( $excluded_pages as $page ) {
234 if ( strpos( $request_uri, '/' . $page ) !== false ) {
235 return true;
236 }
237 }
238
239 return false;
240 }
241
242
243 public function jltwp_adminify_admin_scripts()
244 {
245 // Skip loading scripts on excluded pages (customize.php, login, etc.)
246 if ( $this->should_skip_adminify_scripts() ) {
247 return;
248 }
249
250 $screen = get_current_screen();
251
252
253 // Register Styles
254 wp_register_style('wp-adminify-admin', WP_ADMINIFY_ASSETS . 'css/wp-adminify' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
255 wp_register_style('wp-adminify-default-ui', WP_ADMINIFY_ASSETS . 'css/wp-adminify-default-ui' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
256 // wp_register_style('wp-adminify-admin-bar', WP_ADMINIFY_ASSETS . 'css/admin-bar' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
257 wp_register_style('wp-adminify-menu-editor', WP_ADMINIFY_ASSETS . 'css/adminify-menu-editor' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
258 // wp_register_style('wp-adminify-dark-mode', WP_ADMINIFY_ASSETS . 'css/dark-mode' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
259 // wp_register_style('wp-adminify-rtl', WP_ADMINIFY_ASSETS . 'css/adminify-rtl' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
260 // wp_register_style('wp-adminify-responsive', WP_ADMINIFY_ASSETS . 'css/adminify-responsive' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
261 // wp_register_style('wp-adminify-animate', WP_ADMINIFY_ASSETS . 'vendors/animatecss/animate' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
262 wp_register_style('wp-adminify-tokenize2', WP_ADMINIFY_ASSETS . 'vendors/tokenize/tokenize2' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
263
264
265 // Register Scripts
266 wp_register_script('wp-adminify-tokenize2', WP_ADMINIFY_ASSETS . 'vendors/tokenize/tokenize2.min.js', array('jquery'), WP_ADMINIFY_VER, false);
267 wp_register_script('wp-adminify-admin', WP_ADMINIFY_ASSETS . 'admin/js/wp-adminify' . Utils::assets_ext('.js'), array('jquery'), WP_ADMINIFY_VER, true);
268
269 // wp_register_script('wp-adminify-realtime-server', WP_ADMINIFY_ASSETS . 'js/adminify-realtime-server.js', array('jquery'), WP_ADMINIFY_VER, true);
270
271 // Adminify Icon Picker
272 wp_register_style('wp-adminify-simple-line-icons', WP_ADMINIFY_ASSETS . 'vendors/font-icons/simple-line-icons/css/simple-line-icons' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
273 wp_register_style('wp-adminify-icon-picker', WP_ADMINIFY_ASSETS . 'vendors/adminify-icon-picker/css/style' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
274 wp_register_script('wp-adminify-icon-picker', WP_ADMINIFY_ASSETS . 'vendors/adminify-icon-picker/js/adminify-icon-picker' . Utils::assets_ext('.js'), array('jquery'), WP_ADMINIFY_VER, true);
275
276 // Dark Mode
277 wp_register_script('wp-adminify--dark-mode', WP_ADMINIFY_ASSETS . 'admin/js/wp-adminify-dark-mode' . Utils::assets_ext('.js'), array(), WP_ADMINIFY_VER, false);
278
279 // Menu Editor
280 wp_register_script('wp-adminify-menu-editor', WP_ADMINIFY_ASSETS . 'admin/js/wp-adminify-menu-editor' . Utils::assets_ext('.js'), array('jquery', 'jquery-ui-sortable', 'wp-adminify-icon-picker'), WP_ADMINIFY_VER, true);
281
282 // Styles Enqueue
283 if ( !empty($this->options['admin_general_google_font']['font-family'])) {
284 wp_enqueue_style('wp-adminify-google-fonts', $this->jltwp_adminify_google_fonts_url());
285 }
286
287 if (!empty($this->options['admin_ui'])) {
288 // wp_enqueue_style('wp-adminify-animate');
289 wp_enqueue_style('wp-adminify-admin');
290 // Commented on: 9-6-24
291 // wp_enqueue_style('wp-adminify-admin-bar');
292 // wp_enqueue_style('wp-adminify-responsive');
293 } else {
294 wp_enqueue_style('wp-adminify-default-ui');
295 }
296
297
298 // RTL CSS
299 if ( is_rtl() ) {
300 wp_enqueue_style( 'adminify-rtl', WP_ADMINIFY_URL . 'Libs/adminify-framework/assets/css/style-rtl'. Utils::assets_ext('.css'), array(), WP_ADMINIFY_VER, 'all' );
301 }
302
303
304 // Dark Mode Style
305 // wp_enqueue_style('wp-adminify-dark-mode');
306 wp_enqueue_script('wp-adminify--dark-mode');
307
308
309 // Get local fonts data for frontend - download if not exists
310 $local_fonts = GoogleFontsLocal::get_instance();
311 $local_fonts_urls = [];
312
313 // Process body font
314 if (!empty($this->options['admin_general_google_font']['font-family'])) {
315 $font_family = $this->options['admin_general_google_font']['font-family'];
316 $font_weight = !empty($this->options['admin_general_google_font']['font-weight']) ? $this->options['admin_general_google_font']['font-weight'] : '400';
317
318 // Check if local font exists, if not download it
319 if (!$local_fonts->is_font_local($font_family)) {
320 $local_fonts->download_font($font_family, $font_weight);
321 }
322
323 $local_url = $local_fonts->get_local_font_url($font_family);
324 if ($local_url) {
325 $local_fonts_urls['body'] = $local_url;
326 }
327 }
328
329 // Process light mode logo font
330 if (!empty($this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'])) {
331 $font_family = $this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'];
332 $font_weight = !empty($this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-weight']) ? $this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-weight'] : '400';
333
334 if (!$local_fonts->is_font_local($font_family)) {
335 $local_fonts->download_font($font_family, $font_weight);
336 }
337
338 $local_url = $local_fonts->get_local_font_url($font_family);
339 if ($local_url) {
340 $local_fonts_urls['light_logo'] = $local_url;
341 }
342 }
343
344 // Process dark mode logo font
345 if (!empty($this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'])) {
346 $font_family = $this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'];
347 $font_weight = !empty($this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-weight']) ? $this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-weight'] : '400';
348
349 if (!$local_fonts->is_font_local($font_family)) {
350 $local_fonts->download_font($font_family, $font_weight);
351 }
352
353 $local_url = $local_fonts->get_local_font_url($font_family);
354 if ($local_url) {
355 $local_fonts_urls['dark_logo'] = $local_url;
356 }
357 }
358
359 $local_fonts_data = [
360 'base_url' => $local_fonts->get_folder_url(),
361 'urls' => $local_fonts_urls,
362 ];
363
364 $localize_array_data = [
365 'admin_ajax' => admin_url('admin-ajax.php'),
366 'settings' => [
367 'adminify_ui' => !empty($this->options['admin_ui']) ? true : false
368 ],
369 'admin_nonce' => wp_create_nonce('adminify_nonce'),
370 'is_pro' => (class_exists('\\WPAdminify\\Pro\\Adminify_Pro') && !empty(\WPAdminify\Pro\Adminify_Pro::is_premium())) ? true : false,
371 'local_fonts' => $local_fonts_data
372 ];
373
374 // Scripts Enqueue
375 wp_enqueue_script('wp-adminify-admin');
376 wp_localize_script( 'wp-adminify-admin', 'WP_ADMINIFY_ADMIN', $localize_array_data );
377
378 if (!wp_script_is('adminify-fa', 'enqueued') || !wp_script_is('adminify-fa5', 'enqueued')) {
379 if (apply_filters('adminify_fa4', false)) {
380 wp_enqueue_style('adminify-fa', 'https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome' . Utils::assets_ext('.css'), array(), '4.7.0', 'all');
381 } else {
382 wp_enqueue_style('adminify-fa5', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/css/all' . Utils::assets_ext('.css'), array(), '5.15.5', 'all');
383 wp_enqueue_style('adminify-fa5-v4-shims', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/css/v4-shims' . Utils::assets_ext('.css'), array(), '5.15.5', 'all');
384 }
385 }
386 wp_enqueue_style('wp-adminify-simple-line-icons');
387
388 // Load Scripts/Styles only WP Adminify Admin Page
389 if ($screen->id === 'toplevel_page_wp-adminify-settings') {
390 // Admin Notice Dismiss
391 // $this->jltwp_adminify_admin_script();
392
393 global $menu, $submenu;
394 $set_menu = new \WPAdminify\Inc\Modules\MenuEditor\MenuEditor();
395 $main_menus = $set_menu->sort_menu_settings($menu);
396 $sub_menus = $set_menu->sort_sub_menu_settings( $main_menus, $submenu );
397
398 // Menu Editor
399 wp_enqueue_script('wp-adminify-menu-editor-script');
400 wp_localize_script(
401 'wp-adminify-menu-editor-script',
402 'WPAdminifyIconPicker',
403 [
404 'main_menu' => $main_menus,
405 'sub_menu' => $sub_menus,
406 // 'is_elementor_active' => Utils::is_plugin_active('elementor/elementor.php'),
407 ]
408 );
409
410 }
411
412 if ($screen->id === 'wp-adminify_page_wp-adminify-addons-plugins' || $screen->id === 'wp-adminify-pro_page_wp-adminify-addons-plugins') {
413 // JS Files .
414 wp_enqueue_script('wp-adminify-addons', WP_ADMINIFY_ASSETS . 'admin/js/wp-adminify-addons' . Utils::assets_ext('.js'), array('jquery'), WP_ADMINIFY_VER, true);
415 wp_localize_script(
416 'wp-adminify-addons',
417 'WP_ADMINIFYCORE',
418 array(
419 'admin_ajax' => admin_url('admin-ajax.php'),
420 'addons_nonce' => wp_create_nonce('jltwp_adminify_addons_nonce'),
421 'plugin_key' => 'jltwp_adminify'
422 )
423 );
424 }
425 }
426
427 // WP Adminify Options Page Style
428 public function jltwp_adminify_admin_script()
429 {
430 echo '<style>.wp-adminify-two-columns{ display: flex; flex-wrap: wrap; padding: 15px; } .wp-adminify .adminify-hightlight-field{ border: 2px solid #0347FF !important; font-weight: 600 !important;} .wp-adminify-two-columns .adminify-full-width-field{ width: 100% !important; flex-basis: 100% !important; } .wp-adminify-two-columns > .adminify-field{ width: 49%; flex-basis: 49%; margin-right: 1%; margin-top: -1px; border: 1px solid #eee; box-sizing: border-box; } .wp-adminify-two-columns.aminify-title-width-40 .adminify-title, .aminify-title-width-40 .adminify-title{ width: 40% !important;} .wp-adminify-two-columns.aminify-title-width-40 .adminify-fieldset, .aminify-title-width-40 .adminify-fieldset{ width: calc(60% - 20px) !important;} .wp-adminify-two-columns.aminify-title-width-65 .adminify-title{ width: 65%;} .wp-adminify-two-columns.aminify-title-width-65 .adminify-fieldset{ width: calc(35% - 20px);} .wp-adminify-two-columns .adminify-field-subheading{height:25px;box-sizing: content-box; width: 100%; flex-basis: 100%;} .wp-adminify-white-label-notice-content { background-color: #fff; box-shadow: 0px 0px 50px rgb(0 0 0 / 13%); position: absolute; top: 150px; left: 400px; width: 530px; padding: 32px; padding-bottom: 50px; -webkit-border-radius: 20px; border-radius: 20px; text-align: center; z-index: 2; } .wp-adminify-white-label-notice-logo img { height: 100px; width: 250px; padding: 10px; padding-top: 10px; } .wp-adminify-white-label-notice-content h2 span{ color: #6814cd; text-transform: uppercase; } .wp-adminify-white-label-notice-content em{ font-size: 13px; color: red; } .wp-adminify-white-label-notice .wp-adminify-get-pro{ background-image: -moz-linear-gradient( 0deg, rgb(223,29,198) 0%, rgb(106,20,209) 100%); background-image: -webkit-linear-gradient( 0deg , rgb(223,29,198) 0%, rgb(106,20,209) 100%); background-image: -ms-linear-gradient( 0deg, rgb(223,29,198) 0%, rgb(106,20,209) 100%); border: none; box-shadow: none; color: #fff; cursor: pointer; font-weight: 700; line-height: 35px; padding: 0 15px; text-transform: uppercase; text-decoration: none; display: inline-block; width: 180px; padding: 5px 15px !important; border-radius: 10px; font-size: 15px; font-weight: 800; -webkit-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } .wp-adminify-white-label-notice{ position: absolute !important; top: 0; left: 0; width: 100% !important; height: 100%; background: rgba(200, 200, 200, 0.5); -js-display: flex; display: -webkit-box; display: -webkit-flex; display: -moz-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -webkit-justify-content: center; -moz-box-pack: center; -ms-flex-pack: center; justify-content: center;z-index: 1; } .wp-adminify-white-label-notice .wp-adminify-get-pro:hover { color:#fff; background-image: -moz-linear-gradient(0deg, rgb(106, 20, 209) 0%, rgb(223, 29, 198) 100%); background-image: -webkit-linear-gradient( 0deg, rgb(106, 20, 209) 0%, rgb(223, 29, 198) 100%); background-image: -ms-linear-gradient(0deg, rgb(106, 20, 209) 0%, rgb(223, 29, 198) 100%);} .adminify-field-callback a.wp-adminify-rollback-button{font-family:inherit !important;} .wp-adminify-rollback-button.dashicons, .wp-adminify-rollback-button.dashicons-before:before{ width: inherit !important;}</style>';
431 }
432
433 }
434