PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.1.3
Adminify – White Label, Admin Menu Editor, Login Customizer v4.1.3
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.1.3, at Inc/Classes/Assets.php

412 lines 18.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\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 wp_register_style('wp-adminify-select2', WP_ADMINIFY_ASSETS . 'vendors/select2/select2' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
264
265
266 // Register Scripts
267 wp_register_script('wp-adminify-tokenize2', WP_ADMINIFY_ASSETS . 'vendors/tokenize/tokenize2.min.js', array('jquery'), WP_ADMINIFY_VER, false);
268 wp_register_script('wp-adminify-select2', WP_ADMINIFY_ASSETS . 'vendors/select2/select2.min.js', array('jquery'), WP_ADMINIFY_VER, true);
269 wp_register_script('wp-adminify-admin', WP_ADMINIFY_ASSETS . 'admin/js/wp-adminify' . Utils::assets_ext('.js'), array('jquery'), WP_ADMINIFY_VER, true);
270
271 // wp_register_script('wp-adminify-realtime-server', WP_ADMINIFY_ASSETS . 'js/adminify-realtime-server.js', array('jquery'), WP_ADMINIFY_VER, true);
272
273 // Adminify Icon Picker
274 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);
275 wp_register_style('wp-adminify-icon-picker', WP_ADMINIFY_ASSETS . 'vendors/adminify-icon-picker/css/style' . Utils::assets_ext('.css'), false, WP_ADMINIFY_VER);
276 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);
277
278 // Dark Mode
279 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);
280
281 // Menu Editor
282 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);
283
284 // Styles Enqueue
285 if ( !empty($this->options['admin_general_google_font']['font-family'])) {
286 wp_enqueue_style('wp-adminify-google-fonts', $this->jltwp_adminify_google_fonts_url());
287 }
288
289 if (!empty($this->options['admin_ui'])) {
290 // wp_enqueue_style('wp-adminify-animate');
291 wp_enqueue_style('wp-adminify-admin');
292 // Commented on: 9-6-24
293 // wp_enqueue_style('wp-adminify-admin-bar');
294 // wp_enqueue_style('wp-adminify-responsive');
295 } else {
296 wp_enqueue_style('wp-adminify-default-ui');
297 }
298
299
300 // RTL CSS
301 if ( is_rtl() ) {
302 wp_enqueue_style( 'adminify-rtl', WP_ADMINIFY_URL . 'Libs/adminify-framework/assets/css/style-rtl'. Utils::assets_ext('.css'), array(), WP_ADMINIFY_VER, 'all' );
303 }
304
305
306 // Dark Mode Style
307 // wp_enqueue_style('wp-adminify-dark-mode');
308 wp_enqueue_script('wp-adminify--dark-mode');
309
310
311 // Get local fonts data for frontend - download if not exists
312 $local_fonts = GoogleFontsLocal::get_instance();
313 $local_fonts_urls = [];
314
315 // Process body font
316 if (!empty($this->options['admin_general_google_font']['font-family'])) {
317 $font_family = $this->options['admin_general_google_font']['font-family'];
318 $font_weight = !empty($this->options['admin_general_google_font']['font-weight']) ? $this->options['admin_general_google_font']['font-weight'] : '400';
319
320 // Check if local font exists, if not download it
321 if (!$local_fonts->is_font_local($font_family)) {
322 $local_fonts->download_font($font_family, $font_weight);
323 }
324
325 $local_url = $local_fonts->get_local_font_url($font_family);
326 if ($local_url) {
327 $local_fonts_urls['body'] = $local_url;
328 }
329 }
330
331 // Process light mode logo font
332 if (!empty($this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'])) {
333 $font_family = $this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'];
334 $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';
335
336 if (!$local_fonts->is_font_local($font_family)) {
337 $local_fonts->download_font($font_family, $font_weight);
338 }
339
340 $local_url = $local_fonts->get_local_font_url($font_family);
341 if ($local_url) {
342 $local_fonts_urls['light_logo'] = $local_url;
343 }
344 }
345
346 // Process dark mode logo font
347 if (!empty($this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'])) {
348 $font_family = $this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'];
349 $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';
350
351 if (!$local_fonts->is_font_local($font_family)) {
352 $local_fonts->download_font($font_family, $font_weight);
353 }
354
355 $local_url = $local_fonts->get_local_font_url($font_family);
356 if ($local_url) {
357 $local_fonts_urls['dark_logo'] = $local_url;
358 }
359 }
360
361 $local_fonts_data = [
362 'base_url' => $local_fonts->get_folder_url(),
363 'urls' => $local_fonts_urls,
364 ];
365
366 $localize_array_data = [
367 'admin_ajax' => admin_url('admin-ajax.php'),
368 'settings' => [
369 'adminify_ui' => !empty($this->options['admin_ui']) ? true : false
370 ],
371 'admin_nonce' => wp_create_nonce('adminify_nonce'),
372 'is_pro' => (class_exists('\\WPAdminify\\Pro\\Adminify_Pro') && !empty(\WPAdminify\Pro\Adminify_Pro::is_premium())) ? true : false,
373 'local_fonts' => $local_fonts_data
374 ];
375
376 // Scripts Enqueue
377 wp_enqueue_script('wp-adminify-admin');
378 wp_localize_script( 'wp-adminify-admin', 'WP_ADMINIFY_ADMIN', $localize_array_data );
379
380 if (!wp_script_is('adminify-fa', 'enqueued') || !wp_script_is('adminify-fa5', 'enqueued')) {
381 if (apply_filters('adminify_fa4', false)) {
382 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');
383 } else {
384 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');
385 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');
386 }
387 }
388 wp_enqueue_style('wp-adminify-simple-line-icons');
389
390 if ($screen->id === 'wp-adminify_page_wp-adminify-addons-plugins' || $screen->id === 'wp-adminify-pro_page_wp-adminify-addons-plugins') {
391 // JS Files .
392 wp_enqueue_script('wp-adminify-addons', WP_ADMINIFY_ASSETS . 'admin/js/wp-adminify-addons' . Utils::assets_ext('.js'), array('jquery'), WP_ADMINIFY_VER, true);
393 wp_localize_script(
394 'wp-adminify-addons',
395 'WP_ADMINIFYCORE',
396 array(
397 'admin_ajax' => admin_url('admin-ajax.php'),
398 'addons_nonce' => wp_create_nonce('jltwp_adminify_addons_nonce'),
399 'plugin_key' => 'jltwp_adminify'
400 )
401 );
402 }
403 }
404
405 // WP Adminify Options Page Style
406 public function jltwp_adminify_admin_script()
407 {
408 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>';
409 }
410
411 }
412