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

399 lines 17.8 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\Admin\AdminSettingsModel;
8 use PXLBSAdminify\Inc\Classes\Addons_Plugins;
9
10
11
12 // no direct access allowed
13 if (!defined('ABSPATH')) {
14 exit;
15 }
16
17 class Assets extends AdminSettingsModel
18 {
19
20 public $classic_editor = true;
21 public $block_editor = true;
22 public $dark_mode = true;
23
24 public function __construct()
25 {
26 $this->options = (array) AdminSettings::get_instance()->get();
27 $global_dark_mode = !empty($this->options['light_dark_mode']['admin_ui_mode']) ? $this->options['light_dark_mode']['admin_ui_mode'] : 'light';
28 $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);
29 add_action('admin_enqueue_scripts', array($this, 'pxlbsadminify_admin_scripts'), 100);
30 add_action('wp_ajax_pxlbsadminify_addons_install_active', array( $this, 'pxlbsadminify_addons_install_active' ) );
31
32 if ($this->is_dark_mode() || $this->classic_editor || $this->block_editor) {
33 add_action('admin_head', array($this, 'header_scripts'));
34 }
35 }
36
37
38 /**
39 * Function: Ajax Call for Install and Activate WP Adminify Plugin
40 */
41 function pxlbsadminify_addons_install_active()
42 {
43
44 // Include necessary WordPress files
45 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
46 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
47 require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
48 require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
49
50 if (isset($_POST['plugin'])) {
51
52 $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
53
54 if (!wp_verify_nonce($nonce, 'pxlbsadminify_addons_nonce')) {
55 wp_send_json_error(array('mess' => esc_html__('Nonce is invalid', 'adminify')));
56 }
57
58 if ((is_multisite() && is_network_admin()) || !current_user_can('install_plugins')) {
59 wp_send_json_error(array('mess' => esc_html__('Invalid Access', 'adminify')));
60 }
61
62 $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
63
64 if (empty($plugin)) {
65 wp_send_json_error(array('mess' => esc_html__('Invalid plugin', 'adminify')));
66 }
67
68 // Validate the requested plugin against the trusted addons list
69 // and replace the user-supplied value with the canonical
70 // download URL from that list before passing it to the upgrader.
71 $addons = new Addons_Plugins();
72 $plugins_list = (array) $addons->get_adminify_plugins_lists();
73 $requested_slug = '';
74 $trusted_source = '';
75 foreach ( $plugins_list as $slug => $entry ) {
76 if ( ! empty( $entry['download_link'] ) && $entry['download_link'] === $plugin ) {
77 $requested_slug = $slug;
78 $trusted_source = $entry['download_link'];
79 break;
80 }
81 if ( $slug === $plugin ) {
82 $requested_slug = $slug;
83 $trusted_source = ! empty( $entry['download_link'] ) ? $entry['download_link'] : '';
84 break;
85 }
86 }
87 if ( empty( $requested_slug ) || empty( $trusted_source ) ) {
88 wp_send_json_error( array( 'mess' => esc_html__( 'Invalid plugin', 'adminify' ) ) );
89 }
90
91 $type = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : 'install';
92 $skin = new \WP_Ajax_Upgrader_Skin();
93 $upgrader = new \Plugin_Upgrader($skin);
94
95 if ('install' === $type) {
96 $result = $upgrader->install( $trusted_source );
97 if (is_wp_error($result)) {
98 wp_send_json_error(
99 array(
100 'mess' => $result->get_error_message(),
101 )
102 );
103 }
104 $args = array(
105 'slug' => $upgrader->result['destination_name'],
106 'fields' => array(
107 'short_description' => true,
108 'icons' => true,
109 'banners' => false,
110 'added' => false,
111 'reviews' => false,
112 'sections' => false,
113 'requires' => false,
114 'rating' => false,
115 'ratings' => false,
116 'downloaded' => false,
117 'last_updated' => false,
118 'added' => false,
119 'tags' => false,
120 'compatibility' => false,
121 'homepage' => false,
122 'donate_link' => false,
123 ),
124 );
125 $plugin_data = plugins_api('plugin_information', $args);
126
127 if ($plugin_data && !is_wp_error($plugin_data)) {
128 $install_status = \install_plugin_install_status($plugin_data);
129 activate_plugin($install_status['file']);
130 }
131 wp_die(); // die();
132 }
133 }
134 }
135
136
137 /*
138 * Function is_dark_mode()
139 *
140 */
141 public function is_dark_mode()
142 {
143
144 if (!empty($this->dark_mode) && $this->dark_mode == 'dark') {
145 $adminify_dark_mode = true;
146 } else {
147 $adminify_dark_mode = false;
148 }
149 return $adminify_dark_mode;
150 }
151
152 public function header_scripts()
153 {
154 // Skip on excluded pages
155 if ( $this->should_skip_adminify_scripts() ) {
156 return;
157 }
158
159 if (!empty($this->dark_mode) && $this->dark_mode == 'dark') { ?>
160
161 <script>
162 window.AdminifyDarkMode.enable({
163 brightness: 120
164 })
165
166 addEventListener("load", (event) => {
167 window.AdminifyDarkMode.enable({
168 brightness: 120
169 })
170 });
171 </script>
172 <?php }
173
174 if (!empty($this->dark_mode) && $this->dark_mode == 'system') { ?>
175 <script>
176 const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
177 if(!!isDark) {
178 window.AdminifyDarkMode.enable({
179 brightness: 120
180 })
181
182 addEventListener("load", (event) => {
183 window.AdminifyDarkMode.enable({
184 brightness: 120
185 })
186 });
187 } else {
188 window.AdminifyDarkMode.disable()
189
190 addEventListener("load", (event) => {
191 window.AdminifyDarkMode.disable()
192 });
193 }
194
195 </script>
196
197 <?php }
198
199 }
200
201
202
203 /**
204 * Check if current page should skip Adminify scripts
205 * Handles root, subdirectory, subdomain, and multisite installations
206 *
207 * @return bool True if scripts should be skipped
208 */
209 private function should_skip_adminify_scripts() {
210 global $pagenow;
211
212 // Pages where Adminify scripts should not load
213 $excluded_pages = [
214 'customize.php',
215 'wp-login.php',
216 'wp-register.php',
217 ];
218
219 // Check global $pagenow
220 if ( in_array( $pagenow, $excluded_pages, true ) ) {
221 return true;
222 }
223
224 // Fallback: Check PHP_SELF for subdirectory WordPress installs
225 // Normalize path by extracting just the filename
226 $php_self = isset( $_SERVER['PHP_SELF'] ) ? sanitize_text_field( wp_unslash( $_SERVER['PHP_SELF'] ) ) : '';
227 $current_file = basename( $php_self );
228
229 if ( in_array( $current_file, $excluded_pages, true ) ) {
230 return true;
231 }
232
233 // Additional check using REQUEST_URI for edge cases
234 $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
235 foreach ( $excluded_pages as $page ) {
236 if ( strpos( $request_uri, '/' . $page ) !== false ) {
237 return true;
238 }
239 }
240
241 return false;
242 }
243
244
245 public function pxlbsadminify_admin_scripts()
246 {
247 // Skip loading scripts on excluded pages (customize.php, login, etc.)
248 if ( $this->should_skip_adminify_scripts() ) {
249 return;
250 }
251
252 $screen = get_current_screen();
253
254
255 // Register Styles
256 wp_register_style('adminify-admin', PXLBSADMINIFY_ASSETS . 'css/wp-adminify' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
257 wp_register_style('adminify-default-ui', PXLBSADMINIFY_ASSETS . 'css/wp-adminify-default-ui' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
258 // wp_register_style('wp-adminify-admin-bar', PXLBSADMINIFY_ASSETS . 'css/admin-bar' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
259 wp_register_style('adminify-menu-editor', PXLBSADMINIFY_ASSETS . 'css/adminify-menu-editor' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
260 // wp_register_style('wp-adminify-dark-mode', PXLBSADMINIFY_ASSETS . 'css/dark-mode' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
261 // wp_register_style('wp-adminify-rtl', PXLBSADMINIFY_ASSETS . 'css/adminify-rtl' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
262 // wp_register_style('wp-adminify-responsive', PXLBSADMINIFY_ASSETS . 'css/adminify-responsive' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
263 // wp_register_style('wp-adminify-animate', PXLBSADMINIFY_ASSETS . 'vendors/animatecss/animate' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
264 wp_register_style('adminify-tokenize2', PXLBSADMINIFY_ASSETS . 'vendors/tokenize/tokenize2' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
265 wp_register_style('adminify-select2', PXLBSADMINIFY_ASSETS . 'vendors/select2/select2' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
266
267
268 // Register Scripts
269 wp_register_script('adminify-tokenize2', PXLBSADMINIFY_ASSETS . 'vendors/tokenize/tokenize2.min.js', array('jquery'), PXLBSADMINIFY_VER, false);
270 wp_register_script('adminify-select2', PXLBSADMINIFY_ASSETS . 'vendors/select2/select2.min.js', array('jquery'), PXLBSADMINIFY_VER, true);
271 wp_register_script('adminify-admin', PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify' . Utils::assets_ext('.js'), array('jquery'), PXLBSADMINIFY_VER, true);
272
273 // wp_register_script('wp-adminify-realtime-server', PXLBSADMINIFY_ASSETS . 'js/adminify-realtime-server.js', array('jquery'), PXLBSADMINIFY_VER, true);
274
275 // Adminify Icon Picker
276 wp_register_style('adminify-simple-line-icons', PXLBSADMINIFY_ASSETS . 'vendors/font-icons/simple-line-icons/css/simple-line-icons' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
277 wp_register_style('adminify-icon-picker', PXLBSADMINIFY_ASSETS . 'vendors/adminify-icon-picker/css/style' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
278 wp_register_script('adminify-icon-picker', PXLBSADMINIFY_ASSETS . 'vendors/adminify-icon-picker/js/adminify-icon-picker' . Utils::assets_ext('.js'), array('jquery'), PXLBSADMINIFY_VER, true);
279
280 // Dark Mode
281 wp_register_script('adminify--dark-mode', PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify-dark-mode' . Utils::assets_ext('.js'), array(), PXLBSADMINIFY_VER, false);
282
283 // Menu Editor
284 wp_register_script('adminify-menu-editor', PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify-menu-editor' . Utils::assets_ext('.js'), array('jquery', 'jquery-ui-sortable', 'adminify-icon-picker'), PXLBSADMINIFY_VER, true);
285
286 // Styles Enqueue
287 if (!empty($this->options['admin_ui'])) {
288 // wp_enqueue_style('wp-adminify-animate');
289 wp_enqueue_style('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('adminify-default-ui');
295 }
296
297
298 // RTL CSS
299 if ( is_rtl() ) {
300 wp_enqueue_style( 'adminify-rtl', PXLBSADMINIFY_URL . 'Libs/adminify-framework/assets/css/style-rtl'. Utils::assets_ext('.css'), array(), PXLBSADMINIFY_VER, 'all' );
301 }
302
303
304 // Dark Mode Style
305 // wp_enqueue_style('adminify-dark-mode');
306 wp_enqueue_script('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 light mode logo font
314 if (!empty($this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'])) {
315 $font_family = $this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'];
316 $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';
317
318 if (!$local_fonts->is_font_local($font_family)) {
319 $local_fonts->download_font($font_family, $font_weight);
320 }
321
322 $local_url = $local_fonts->get_local_font_url($font_family);
323 if ($local_url) {
324 $local_fonts_urls['light_logo'] = $local_url;
325 }
326 }
327
328 // Process dark mode logo font
329 if (!empty($this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'])) {
330 $font_family = $this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'];
331 $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';
332
333 if (!$local_fonts->is_font_local($font_family)) {
334 $local_fonts->download_font($font_family, $font_weight);
335 }
336
337 $local_url = $local_fonts->get_local_font_url($font_family);
338 if ($local_url) {
339 $local_fonts_urls['dark_logo'] = $local_url;
340 }
341 }
342
343 $local_fonts_data = [
344 'base_url' => $local_fonts->get_folder_url(),
345 'urls' => $local_fonts_urls,
346 ];
347
348 $localize_array_data = [
349 'admin_ajax' => admin_url('admin-ajax.php'),
350 'settings' => [
351 'adminify_ui' => !empty($this->options['admin_ui']) ? true : false,
352 ],
353 'admin_nonce' => wp_create_nonce('adminify_nonce'),
354 'is_pro' => (class_exists('\\PXLBSAdminify\\Pro\\Adminify_Pro') && !empty(\PXLBSAdminify\Pro\Adminify_Pro::is_premium())) ? true : false,
355 'local_fonts' => $local_fonts_data
356 ];
357
358 // Pro-only settings flags (e.g. menu_search) attach via this
359 // filter from Pro/Classes/Assets_Pro.php. Free leaves the
360 // localize array untouched.
361 $localize_array_data = (array) apply_filters( 'pxlbsadminify_admin_localize_data', $localize_array_data, $this->options );
362
363 // Scripts Enqueue
364 wp_enqueue_script('adminify-admin');
365 wp_localize_script( 'adminify-admin', 'PXLBSADMINIFY_ADMIN', $localize_array_data );
366
367 if (!wp_script_is('adminify-fa', 'enqueued') || !wp_script_is('adminify-fa5', 'enqueued')) {
368 if (apply_filters('adminify_fa4', false)) {
369 wp_enqueue_style('adminify-fa', PXLBSADMINIFY_ASSETS . 'vendors/fontawesome/fa4/css/font-awesome.min.css', array(), '4.7.0', 'all');
370 } else {
371 wp_enqueue_style('adminify-fa5', PXLBSADMINIFY_ASSETS . 'vendors/fontawesome/fa5/css/all.min.css', array(), '5.15.4', 'all');
372 wp_enqueue_style('adminify-fa5-v4-shims', PXLBSADMINIFY_ASSETS . 'vendors/fontawesome/fa5/css/v4-shims.min.css', array(), '5.15.4', 'all');
373 }
374 }
375 wp_enqueue_style('adminify-simple-line-icons');
376
377 if ($screen->id === 'adminify_page_wp-adminify-addons-plugins' || $screen->id === 'adminify-pro_page_wp-adminify-addons-plugins') {
378 // JS Files .
379 wp_enqueue_script('adminify-addons', PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify-addons' . Utils::assets_ext('.js'), array('jquery'), PXLBSADMINIFY_VER, true);
380 wp_localize_script(
381 'adminify-addons',
382 'PXLBSADMINIFY_CORE',
383 array(
384 'admin_ajax' => admin_url('admin-ajax.php'),
385 'addons_nonce' => wp_create_nonce('pxlbsadminify_addons_nonce'),
386 'plugin_key' => 'pxlbsadminify'
387 )
388 );
389 }
390 }
391
392 // WP Adminify Options Page Style
393 public function pxlbsadminify_admin_script()
394 {
395 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>';
396 }
397
398 }
399