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

455 lines 19.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 add_action('wp_ajax_pxlbsadminify_ssl_check', array( $this, 'pxlbsadminify_ssl_check' ) );
32
33 if ($this->is_dark_mode() || $this->classic_editor || $this->block_editor) {
34 add_action('admin_head', array($this, 'header_scripts'));
35 }
36 }
37
38
39 /**
40 * Function: Ajax Call for Install and Activate WP Adminify Plugin
41 */
42 function pxlbsadminify_addons_install_active()
43 {
44
45 // Include necessary WordPress files
46 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
47 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
48 require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
49 require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
50
51 if (isset($_POST['plugin'])) {
52
53 $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
54
55 if (!wp_verify_nonce($nonce, 'pxlbsadminify_addons_nonce')) {
56 wp_send_json_error(array('mess' => esc_html__('Nonce is invalid', 'adminify')));
57 }
58
59 if ((is_multisite() && is_network_admin()) || !current_user_can('install_plugins')) {
60 wp_send_json_error(array('mess' => esc_html__('Invalid Access', 'adminify')));
61 }
62
63 $plugin = sanitize_text_field(wp_unslash($_POST['plugin']));
64
65 if (empty($plugin)) {
66 wp_send_json_error(array('mess' => esc_html__('Invalid plugin', 'adminify')));
67 }
68
69 // Validate the requested plugin against the trusted addons list
70 // and replace the user-supplied value with the canonical
71 // download URL from that list before passing it to the upgrader.
72 $addons = new Addons_Plugins();
73 $plugins_list = (array) $addons->get_adminify_plugins_lists();
74 $requested_slug = '';
75 $trusted_source = '';
76 foreach ( $plugins_list as $slug => $entry ) {
77 if ( ! empty( $entry['download_link'] ) && $entry['download_link'] === $plugin ) {
78 $requested_slug = $slug;
79 $trusted_source = $entry['download_link'];
80 break;
81 }
82 if ( $slug === $plugin ) {
83 $requested_slug = $slug;
84 $trusted_source = ! empty( $entry['download_link'] ) ? $entry['download_link'] : '';
85 break;
86 }
87 }
88 if ( empty( $requested_slug ) || empty( $trusted_source ) ) {
89 wp_send_json_error( array( 'mess' => esc_html__( 'Invalid plugin', 'adminify' ) ) );
90 }
91
92 $type = isset($_POST['type']) ? sanitize_text_field(wp_unslash($_POST['type'])) : 'install';
93 $skin = new \WP_Ajax_Upgrader_Skin();
94 $upgrader = new \Plugin_Upgrader($skin);
95
96 if ('install' === $type) {
97 $result = $upgrader->install( $trusted_source );
98 if (is_wp_error($result)) {
99 wp_send_json_error(
100 array(
101 'mess' => $result->get_error_message(),
102 )
103 );
104 }
105 $args = array(
106 'slug' => $upgrader->result['destination_name'],
107 'fields' => array(
108 'short_description' => true,
109 'icons' => true,
110 'banners' => false,
111 'added' => false,
112 'reviews' => false,
113 'sections' => false,
114 'requires' => false,
115 'rating' => false,
116 'ratings' => false,
117 'downloaded' => false,
118 'last_updated' => false,
119 'added' => false,
120 'tags' => false,
121 'compatibility' => false,
122 'homepage' => false,
123 'donate_link' => false,
124 ),
125 );
126 $plugin_data = plugins_api('plugin_information', $args);
127
128 if ($plugin_data && !is_wp_error($plugin_data)) {
129 $install_status = \install_plugin_install_status($plugin_data);
130 activate_plugin($install_status['file']);
131 }
132 wp_die(); // die();
133 }
134 }
135 }
136
137
138 /*
139 * Function is_dark_mode()
140 *
141 */
142 public function is_dark_mode()
143 {
144
145 if (!empty($this->dark_mode) && $this->dark_mode == 'dark') {
146 $adminify_dark_mode = true;
147 } else {
148 $adminify_dark_mode = false;
149 }
150 return $adminify_dark_mode;
151 }
152
153 public function header_scripts()
154 {
155 // Skip on excluded pages
156 if ( $this->should_skip_adminify_scripts() ) {
157 return;
158 }
159
160 if (!empty($this->dark_mode) && $this->dark_mode == 'dark') { ?>
161
162 <script>
163 window.AdminifyDarkMode.enable({
164 brightness: 120
165 })
166
167 addEventListener("load", (event) => {
168 window.AdminifyDarkMode.enable({
169 brightness: 120
170 })
171 });
172 </script>
173 <?php }
174
175 if (!empty($this->dark_mode) && $this->dark_mode == 'system') { ?>
176 <script>
177 const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
178 if(!!isDark) {
179 window.AdminifyDarkMode.enable({
180 brightness: 120
181 })
182
183 addEventListener("load", (event) => {
184 window.AdminifyDarkMode.enable({
185 brightness: 120
186 })
187 });
188 } else {
189 window.AdminifyDarkMode.disable()
190
191 addEventListener("load", (event) => {
192 window.AdminifyDarkMode.disable()
193 });
194 }
195
196 </script>
197
198 <?php }
199
200 }
201
202
203
204 /**
205 * Check if current page should skip Adminify scripts
206 * Handles root, subdirectory, subdomain, and multisite installations
207 *
208 * @return bool True if scripts should be skipped
209 */
210 private function should_skip_adminify_scripts() {
211 global $pagenow;
212
213 // Pages where Adminify scripts should not load
214 $excluded_pages = [
215 'customize.php',
216 'wp-login.php',
217 'wp-register.php',
218 ];
219
220 // Check global $pagenow
221 if ( in_array( $pagenow, $excluded_pages, true ) ) {
222 return true;
223 }
224
225 // Fallback: Check PHP_SELF for subdirectory WordPress installs
226 // Normalize path by extracting just the filename
227 $php_self = isset( $_SERVER['PHP_SELF'] ) ? sanitize_text_field( wp_unslash( $_SERVER['PHP_SELF'] ) ) : '';
228 $current_file = basename( $php_self );
229
230 if ( in_array( $current_file, $excluded_pages, true ) ) {
231 return true;
232 }
233
234 // Additional check using REQUEST_URI for edge cases
235 $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
236 foreach ( $excluded_pages as $page ) {
237 if ( strpos( $request_uri, '/' . $page ) !== false ) {
238 return true;
239 }
240 }
241
242 return false;
243 }
244
245
246 public function pxlbsadminify_admin_scripts()
247 {
248 // Skip loading scripts on excluded pages (customize.php, login, etc.)
249 if ( $this->should_skip_adminify_scripts() ) {
250 return;
251 }
252
253 $screen = get_current_screen();
254
255
256 // Register Styles
257 wp_register_style('adminify-admin', PXLBSADMINIFY_ASSETS . 'css/wp-adminify' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
258 wp_register_style('adminify-default-ui', PXLBSADMINIFY_ASSETS . 'css/wp-adminify-default-ui' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
259 // wp_register_style('wp-adminify-admin-bar', PXLBSADMINIFY_ASSETS . 'css/admin-bar' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
260 wp_register_style('adminify-menu-editor', PXLBSADMINIFY_ASSETS . 'css/adminify-menu-editor' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
261 // wp_register_style('wp-adminify-dark-mode', PXLBSADMINIFY_ASSETS . 'css/dark-mode' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
262 // wp_register_style('wp-adminify-rtl', PXLBSADMINIFY_ASSETS . 'css/adminify-rtl' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
263 // wp_register_style('wp-adminify-responsive', PXLBSADMINIFY_ASSETS . 'css/adminify-responsive' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
264 // wp_register_style('wp-adminify-animate', PXLBSADMINIFY_ASSETS . 'vendors/animatecss/animate' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
265 wp_register_style('adminify-tokenize2', PXLBSADMINIFY_ASSETS . 'vendors/tokenize/tokenize2' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
266 wp_register_style('adminify-select2', PXLBSADMINIFY_ASSETS . 'vendors/select2/select2' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
267
268
269 // Register Scripts
270 wp_register_script('adminify-tokenize2', PXLBSADMINIFY_ASSETS . 'vendors/tokenize/tokenize2.min.js', array('jquery'), PXLBSADMINIFY_VER, false);
271 wp_register_script('adminify-select2', PXLBSADMINIFY_ASSETS . 'vendors/select2/select2.min.js', array('jquery'), PXLBSADMINIFY_VER, true);
272 wp_register_script('adminify-admin', PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify' . Utils::assets_ext('.js'), array('jquery'), PXLBSADMINIFY_VER, true);
273
274 // wp_register_script('wp-adminify-realtime-server', PXLBSADMINIFY_ASSETS . 'js/adminify-realtime-server.js', array('jquery'), PXLBSADMINIFY_VER, true);
275
276 // Adminify Icon Picker
277 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);
278 wp_register_style('adminify-icon-picker', PXLBSADMINIFY_ASSETS . 'vendors/adminify-icon-picker/css/style' . Utils::assets_ext('.css'), false, PXLBSADMINIFY_VER);
279 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);
280
281 // Dark Mode
282 wp_register_script('adminify--dark-mode', PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify-dark-mode' . Utils::assets_ext('.js'), array(), PXLBSADMINIFY_VER, false);
283
284 // Menu Editor
285 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);
286
287 // Styles Enqueue
288 if (!empty($this->options['admin_ui'])) {
289 // wp_enqueue_style('wp-adminify-animate');
290 wp_enqueue_style('adminify-admin');
291 // Commented on: 9-6-24
292 // wp_enqueue_style('wp-adminify-admin-bar');
293 // wp_enqueue_style('wp-adminify-responsive');
294 } else {
295 wp_enqueue_style('adminify-default-ui');
296 }
297
298
299 // RTL CSS
300 if ( is_rtl() ) {
301 wp_enqueue_style( 'adminify-rtl', PXLBSADMINIFY_URL . 'Libs/adminify-framework/assets/css/style-rtl'. Utils::assets_ext('.css'), array(), PXLBSADMINIFY_VER, 'all' );
302 }
303
304
305 // Dark Mode Style
306 // wp_enqueue_style('adminify-dark-mode');
307 wp_enqueue_script('adminify--dark-mode');
308
309
310 // Get local fonts data for frontend - download if not exists
311 $local_fonts = GoogleFontsLocal::get_instance();
312 $local_fonts_urls = [];
313
314 // Process light mode logo font
315 if (!empty($this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'])) {
316 $font_family = $this->options['light_dark_mode']['admin_ui_light_mode']['admin_ui_light_logo_text_typo']['font-family'];
317 $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';
318
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['light_logo'] = $local_url;
326 }
327 }
328
329 // Process dark mode logo font
330 if (!empty($this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'])) {
331 $font_family = $this->options['light_dark_mode']['admin_ui_dark_mode']['admin_ui_dark_logo_text_typo']['font-family'];
332 $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';
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['dark_logo'] = $local_url;
341 }
342 }
343
344 $local_fonts_data = [
345 'base_url' => $local_fonts->get_folder_url(),
346 'urls' => $local_fonts_urls,
347 ];
348
349 $localize_array_data = [
350 'admin_ajax' => admin_url('admin-ajax.php'),
351 'settings' => [
352 'adminify_ui' => !empty($this->options['admin_ui']) ? true : false,
353 ],
354 'admin_nonce' => wp_create_nonce('adminify_nonce'),
355 'is_pro' => (class_exists('\\PXLBSAdminify\\Pro\\Adminify_Pro') && !empty(\PXLBSAdminify\Pro\Adminify_Pro::is_premium())) ? true : false,
356 'local_fonts' => $local_fonts_data
357 ];
358
359 // Pro-only settings flags (e.g. menu_search) attach via this
360 // filter from Pro/Classes/Assets_Pro.php. Free leaves the
361 // localize array untouched.
362 $localize_array_data = (array) apply_filters( 'pxlbsadminify_admin_localize_data', $localize_array_data, $this->options );
363
364 // Scripts Enqueue
365 wp_enqueue_script('adminify-admin');
366 wp_localize_script( 'adminify-admin', 'PXLBSADMINIFY_ADMIN', $localize_array_data );
367
368 if (!wp_script_is('adminify-fa', 'enqueued') || !wp_script_is('adminify-fa5', 'enqueued')) {
369 if (apply_filters('adminify_fa4', false)) {
370 wp_enqueue_style('adminify-fa', PXLBSADMINIFY_ASSETS . 'vendors/fontawesome/fa4/css/font-awesome.min.css', array(), '4.7.0', 'all');
371 } else {
372 wp_enqueue_style('adminify-fa5', PXLBSADMINIFY_ASSETS . 'vendors/fontawesome/fa5/css/all.min.css', array(), '5.15.4', 'all');
373 wp_enqueue_style('adminify-fa5-v4-shims', PXLBSADMINIFY_ASSETS . 'vendors/fontawesome/fa5/css/v4-shims.min.css', array(), '5.15.4', 'all');
374 }
375 }
376 wp_enqueue_style('adminify-simple-line-icons');
377
378 // Adminify UI HTTPS gate — only on the main settings screen where the switcher lives.
379 if (isset($screen->id) && false !== strpos($screen->id, 'wp-adminify-settings')) {
380 wp_enqueue_script('adminify-ui-ssl-check', PXLBSADMINIFY_ASSETS . 'admin/js/adminify-ui-ssl-check.js', array('jquery'), PXLBSADMINIFY_VER, true);
381 wp_localize_script(
382 'adminify-ui-ssl-check',
383 'PXLBSADMINIFY_SSL',
384 array(
385 'ajax_url' => admin_url('admin-ajax.php'),
386 'nonce' => wp_create_nonce('adminify_nonce'),
387 'field_id' => 'admin_ui',
388 'i18n' => array(
389 'label' => esc_html__('Adminify UI needs HTTPS:', 'adminify'),
390 'generic_error' => esc_html__('Could not verify HTTPS right now. Please try again.', 'adminify'),
391 ),
392 )
393 );
394 }
395
396 if ($screen->id === 'adminify_page_wp-adminify-addons-plugins' || $screen->id === 'adminify-pro_page_wp-adminify-addons-plugins') {
397 // JS Files .
398 wp_enqueue_script('adminify-addons', PXLBSADMINIFY_ASSETS . 'admin/js/wp-adminify-addons' . Utils::assets_ext('.js'), array('jquery'), PXLBSADMINIFY_VER, true);
399 wp_localize_script(
400 'adminify-addons',
401 'PXLBSADMINIFY_CORE',
402 array(
403 'admin_ajax' => admin_url('admin-ajax.php'),
404 'addons_nonce' => wp_create_nonce('pxlbsadminify_addons_nonce'),
405 'plugin_key' => 'pxlbsadminify'
406 )
407 );
408 }
409 }
410
411 /**
412 * AJAX: verify the site is HTTPS-ready before enabling the Adminify UI.
413 *
414 * Called from assets/admin/js/adminify-ui-ssl-check.js when the user flips
415 * the "Adminify UI" switcher on. Returns success only when the dashboard
416 * frame would actually load (see Utils::adminify_ui_https_status()).
417 */
418 public function pxlbsadminify_ssl_check()
419 {
420 $nonce = isset($_POST['nonce']) ? sanitize_text_field(wp_unslash($_POST['nonce'])) : '';
421
422 if (!wp_verify_nonce($nonce, 'adminify_nonce')) {
423 wp_send_json_error(array(
424 'https_ready' => false,
425 'message' => esc_html__('Security check failed. Please reload the page and try again.', 'adminify'),
426 ));
427 }
428
429 if (!current_user_can('manage_options')) {
430 wp_send_json_error(array(
431 'https_ready' => false,
432 'message' => esc_html__('You do not have permission to change this setting.', 'adminify'),
433 ));
434 }
435
436 $status = Utils::adminify_ui_https_status();
437
438 if (!empty($status['ready'])) {
439 wp_send_json_success(array('https_ready' => true));
440 }
441
442 wp_send_json_error(array(
443 'https_ready' => false,
444 'message' => $status['message'],
445 ));
446 }
447
448 // WP Adminify Options Page Style
449 public function pxlbsadminify_admin_script()
450 {
451 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>';
452 }
453
454 }
455