PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 4.1.11
Adminify – White Label, Admin Menu Editor, Login Customizer v4.1.11
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 / utils.php

utils.php in Adminify – White Label, Admin Menu Editor, Login Customizer 4.1.11, at Inc/utils.php

1,201 lines 38.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;
4
5 use ReturnTypeWillChange;
6 use WPAdminify\Inc\Classes\Helper;
7 // no direct access allowed
8 if (!defined('ABSPATH')) {
9 exit;
10 }
11
12 class Utils
13 {
14 public $post_types = '';
15
16 /**
17 * Check if the Module is Enable/Disable
18 *
19 * @param [type] $value
20 *
21 * @return void
22 */
23 public static function check_modules($value)
24 {
25 if (empty($value)) {
26 return;
27 } else {
28 return true;
29 }
30 }
31
32 /**
33 * Check given value empty or not
34 *
35 * @param [type] $value
36 *
37 * @return void
38 */
39 public static function check_is_empty($value, $default = '')
40 {
41 $value = !empty(esc_attr($value)) ? $value : $default;
42 return $value;
43 }
44
45
46 /**
47 * Check hidden for roles or not
48 *
49 * @param [type] $value
50 *
51 * @return bool
52 */
53 public static function restricted_for($disabled_for)
54 {
55 if (empty($disabled_for)) {
56 return false;
57 }
58
59 if (!function_exists('wp_get_current_user')) {
60 include ABSPATH . 'wp-includes/pluggable.php';
61 }
62
63 $restrict_for = array();
64
65 if (!is_array($disabled_for)) {
66 $restrict_for[] = $disabled_for;
67 } else {
68 $restrict_for = $disabled_for;
69 }
70
71
72 $current_user = wp_get_current_user();
73 $current_name = $current_user->display_name;
74 $current_roles = $current_user->roles;
75 // $all_roles = wp_roles()->get_names();
76
77 if (in_array($current_name, $restrict_for)) {
78 return true;
79 }
80
81 // if (in_array('Super Admin', $restrict_for) || in_array('administrator', $restrict_for)) {
82 // return true;
83 // }
84
85 // Super Admin for Multisite
86 if (is_super_admin() && is_multisite()) {
87 if (in_array('Super Admin', $restrict_for) || in_array('administrator', $restrict_for)) {
88 return true;
89 } else {
90 return false;
91 }
92 }
93
94 $formattedroles = [];
95
96 foreach ($restrict_for as $item) {
97 $item = is_string($item) ? strtolower($item) : $item;
98 $item = is_string($item) ? str_replace(' ', '_', $item) : $item;
99 array_push($formattedroles, $item);
100 }
101
102 foreach ($current_roles as $role) {
103 // $role_name = $all_roles[$role];
104 if (in_array($role, $restrict_for)) {
105 return true;
106 }
107 }
108 }
109
110
111 /**
112 * Check Site wide plugin settings
113 */
114 public static function is_site_wide($plugin)
115 {
116 if (!is_multisite()) {
117 return false;
118 }
119
120 $plugins = get_site_option('active_sitewide_plugins');
121 if (isset($plugins[$plugin])) {
122 return true;
123 }
124
125 return false;
126 }
127
128 /**
129 * Get All Taxonomies
130 *
131 * @return void
132 */
133 public static function get_all_taxonomies()
134 {
135 $taxonomies = get_taxonomies(
136 [
137 'show_ui' => true,
138 ],
139 'objects'
140 );
141 $taxonomy_names = [];
142 foreach ($taxonomies as $taxonomy) {
143 if ($taxonomy->name == 'post_format') {
144 continue;
145 }
146 $taxonomy_names[$taxonomy->name] = $taxonomy->label;
147 }
148 return $taxonomy_names;
149 }
150
151 /**
152 * Restricts for role / user
153 */
154
155 public static function restrict_for($disabled_for)
156 {
157 if (!is_array($disabled_for)) {
158 return false;
159 }
160
161 require_once ABSPATH . '/wp-includes/pluggable.php';
162
163 if (!function_exists('wp_get_current_user')) {
164 return false;
165 }
166
167 $current_user = wp_get_current_user();
168 $current_name = $current_user->display_name;
169 $current_roles = $current_user->roles;
170
171 $formattedroles = [];
172
173 foreach ($disabled_for as $item) {
174 $item = strtolower($item);
175 $item = str_replace(' ', '_', $item);
176 array_push($formattedroles, $item);
177 }
178
179 if (in_array($current_name, $disabled_for)) {
180 return true;
181 }
182
183 foreach ($current_roles as $role) {
184 if (in_array($role, $formattedroles)) {
185 return true;
186 }
187 }
188 }
189
190
191 // Get Taxonomies
192 public static function get_taxonomies()
193 {
194 $args = [
195 'public' => true,
196 'show_ui' => true,
197 ];
198 $output = 'objects';
199 $taxonomies = get_taxonomies($args, $output);
200 $taxonomies = $taxonomies;
201 return $taxonomies;
202 }
203
204 // Get Post Types
205 public static function get_post_types()
206 {
207 $args = [
208 'public' => true,
209 'show_ui' => true,
210 ];
211 $output = 'objects';
212 $post_types = get_post_types($args, $output);
213 $post_types = $post_types;
214 return $post_types;
215 }
216
217 // Get Post Meta
218 public static function post_meta($meta_key)
219 {
220 $meta_key = get_post_meta(get_the_ID(), $meta_key, true);
221 return $meta_key;
222 }
223
224
225 // verfiy current page id
226 public static function jltwp_adminify_currentpage_id($id)
227 {
228 if (!function_exists('get_current_screen')) {
229 return true;
230 }
231
232 $screen = get_current_screen();
233 return is_object($screen) && $screen->id == $id;
234 }
235
236 /**
237 * Get Current Admin Page Title
238 *
239 * @param string $title
240 *
241 * @return void
242 */
243 public static function admin_page_title($title = '')
244 {
245 $title = isset($title) && !empty($title) ? $title : WP_ADMINIFY;
246 echo esc_html($title);
247
248 if (is_multisite()) {
249 $text = ' | ' . esc_html__('Current Blog ID', 'adminify') . ': ' . get_current_blog_id(); ?>
250 <?php echo self::wp_kses_custom(self::admin_page_subtitle($text)); ?>
251 <?php } ?>
252 <?php
253 }
254
255 /**
256 * Get Current Admin Subtitle
257 */
258
259 public static function admin_page_subtitle($text)
260 {
261 ?>
262 <span style="color:#8b959e;" <?php
263 if (is_rtl()) {
264 echo ' dir="rtl"';
265 }
266 ?>>
267 <?php echo esc_html($text); ?>
268 </span>
269
270 <?php
271 }
272
273 public static function convert_name_to_class($name)
274 {
275 $class = str_replace([' ', ',', '.', '"', "'", '/', '\\', '+', '=', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', '`', '<', '>', '?', '[', ']', '{', '}', '|', ':'], '', $name);
276 return $class;
277 }
278
279 public static function jltwp_adminify_class_cleanup($string)
280 {
281 // Lower case everything
282 $string = strtolower($string);
283 // Make alphanumeric (removes all other characters)
284 $string = preg_replace('/[^a-z0-9_\s-]/', '', $string);
285 // Clean up multiple dashes or whitespaces
286 $string = preg_replace('/[\s-]+/', ' ', $string);
287 // Convert whitespaces and underscore to dash
288 $string = preg_replace('/[\s_]/', '-', $string);
289 return $string;
290 }
291
292 public static function sanitize_id($url)
293 {
294 $url = preg_replace('/^customize.php\?return=.*$/', 'customize', $url);
295 $url = preg_replace('/(&|&amp;|&#038;)?_wpnonce=([^&]+)/', '', $url);
296 return str_replace(['.php', '.', '/', '?', '='], ['', '_', '_', '_', '_'], $url);
297 }
298
299 /**
300 * Strip tags and it's content from the given string.
301 *
302 * @link https://stackoverflow.com/questions/14684077/remove-all-html-tags-from-php-string/#answer-39320168
303 *
304 * @param string $text The string being stripped.
305 * @return string The stripped string.
306 */
307 public static function strip_tags_content($text)
308 {
309 $cleanup = preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
310 $cleanup = wp_strip_all_tags($cleanup);
311 $cleanup = trim($cleanup);
312
313 return $cleanup;
314 }
315
316 /**
317 * String to ID
318 * Remove Space replace with underscore and lowercase
319 *
320 * @param void
321 *
322 * @return string
323 */
324 public static function string_to_id($string)
325 {
326 $string_replace = str_replace(' ', '_', $string);
327 $formatted_string = strtolower($string_replace);
328 return $formatted_string;
329 }
330
331 /**
332 * ID to String
333 * Remove Space replace with underscore and lowercase
334 *
335 * @param void
336 *
337 * @return string
338 */
339 public static function id_to_string($string)
340 {
341 $string_replace = str_replace('_', ' ', $string);
342 $formatted_string = ucwords($string_replace);
343 return $formatted_string;
344 }
345
346 /**
347 * Check is Plugin Active
348 *
349 * @param [type] $plugin_path
350 *
351 * @return boolean
352 */
353 public static function is_plugin_active( $plugin_path )
354 {
355 include_once ABSPATH . 'wp-admin/includes/plugin.php';
356 return is_plugin_active( $plugin_path );
357 }
358
359 /**
360 * Check if Block Editor Page
361 *
362 * @return boolean
363 */
364 public static function is_block_editor_page() {
365 if (function_exists('get_current_screen')) {
366 $current_screen = get_current_screen();
367 if (!empty($current_screen->is_block_editor)) {
368 return true;
369 }
370 }
371 return false;
372 }
373
374 /**
375 * Check is Plugin Active
376 *
377 * @param [type] $plugin_path
378 *
379 * @return boolean
380 */
381 public static function is_plugin_installed_and_active($plugin_path)
382 {
383 // Check if the plugin is active
384 if (is_plugin_active($plugin_path)) {
385 return true; // Plugin is both installed and active
386 } else {
387 return false; // Plugin is either not installed or not active
388 }
389 }
390
391 public static function is_plugin_installed($plugin_slug, $plugin_file)
392 {
393 $installed_plugins = get_plugins();
394 return isset($installed_plugins[$plugin_file]);
395 }
396
397 public static function jltwp_adminify_notification_bar()
398 {
399 $plugin_slug = 'adminify-notification-bar';
400 $plugin_file = 'adminify-notification-bar/adminify-notification-bar.php';
401 $addons_page_url = network_admin_url('admin.php?page=wp-adminify-settings-addons');
402
403 // $addons_download_link = jltwp_adminify()->_get_latest_download_local_url(14434);
404
405 $html = '';
406 if (self::is_plugin_installed($plugin_slug, $plugin_file)) {
407 if (!current_user_can('install_plugins')) {
408 return;
409 }
410
411 if (!self::is_plugin_active($plugin_file)) {
412 $activation_url = wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $plugin_file . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin_file);
413 $html .= '<a class="wp-adminify-addons-download addon-active" href="' . $activation_url . '" ><span class="pr-1">' . esc_html__('Activate', 'adminify') . '</span><i class="dashicons dashicons-yes-alt"></i></a>';
414 }
415 } else {
416 // $install_url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $plugin_slug), 'install-plugin_' . $plugin_slug);
417 $html = '<a class="wp-adminify-addons-download addon-download" href="' . $addons_page_url . '"><span class="wp-adminify-addons-download-text">' . esc_html__('Download', 'adminify') . '</span><i class="dashicons dashicons-download"></i></a>';
418
419 activate_plugin($plugin_file);
420 }
421
422 $html_content = '<div class="adminify-title">
423 <h4>' . esc_html__('Notification Bar', 'adminify') . '</h4>
424 <div class="adminify-subtitle-text">' . esc_html__('Cookie Notice, Promotional Bar on frontend', 'adminify') . '</div>
425 </div>
426 <div class="adminify-fieldset">
427 <div class="adminify--addons" style="width: 100px;">
428 ' . wp_kses_post($html) . '
429 </div>
430 </div>
431 <div class="clear"></div>';
432
433 echo wp_kses_post($html_content);
434 }
435
436
437 /**
438 * User Defined Settings
439 */
440
441 public static function get_user_preference($key)
442 {
443 $userid = get_current_user_id();
444 $current = get_user_meta($userid, '_wpadminify_preferences', true);
445 $value = false;
446
447 if (is_array($current)) {
448 if (isset($current[$key])) {
449 $value = $current[$key];
450 }
451 }
452
453 return $value;
454 }
455
456 /**
457 * Sanitises and strips tags of input from ajax
458 *
459 * @since 1.0.0
460 * @variables $values = item to clean (array or string)
461 */
462 public static function clean_ajax_input($values)
463 {
464 if (is_array($values)) {
465 foreach ($values as $index => $in) {
466 if (is_array($in)) {
467 $values[$index] = self::clean_ajax_input($in);
468 } else {
469 $values[$index] = strip_tags($in);
470 }
471 }
472 } else {
473 $values = strip_tags($values);
474 }
475
476 return $values;
477 }
478
479 /**
480 * Check Ajax Error Messages
481 *
482 * @param [type] $message
483 *
484 * @return void
485 */
486 public static function ajax_error_message($message)
487 {
488 $returndata = [];
489 $returndata['error'] = true;
490 $returndata['error_message'] = $message;
491 return json_encode($returndata);
492 }
493
494 /**
495 * Get All Updates
496 * Themes, Plugins, Core etc
497 *
498 * @return void
499 */
500 public static function get_all_updates()
501 {
502 $allupdates = [];
503 $allupdates['total'] = 0;
504 $allupdates['wordpress'] = 0;
505 $allupdates['theme'] = 0;
506 $allupdates['plugin'] = 0;
507
508 if (!is_admin()) {
509 return $allupdates;
510 }
511
512 if (!current_user_can('install_plugins')) {
513 return $allupdates;
514 }
515 $updatesTotal = 0;
516 if (is_super_admin() && is_admin()) {
517 $pluginUpdates = get_plugin_updates();
518 $themeUpdates = get_theme_updates();
519 $wpUpdates = get_core_updates();
520
521 if (isset($wpUpdates[0])) {
522 $wpversion = $wpUpdates[0]->version;
523 global $wp_version;
524
525 if ($wpversion > $wp_version) {
526 $wpUpdates = 1;
527 } else {
528 $wpUpdates = 0;
529 }
530 } else {
531 $wpUpdates = 0;
532 }
533
534 $updatesTotal = count($pluginUpdates) + count($themeUpdates) + $wpUpdates;
535
536 $allupdates['total'] = $updatesTotal;
537 $allupdates['wordpress'] = $wpUpdates;
538 $allupdates['theme'] = $themeUpdates;
539 $allupdates['plugin'] = $pluginUpdates;
540 }
541 return $allupdates;
542 }
543
544
545 /**
546 * Upgrade Pro Icon
547 *
548 * @return void
549 */
550 public static function jltwp_adminify_upgrade_pro_icon()
551 {
552 return '<svg class="adminify-pro-notice-icon is-pulled-left mr-2" width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
553 <path fill-rule="evenodd" clip-rule="evenodd" d="M21.8233 0.18318C21.8541 0.215042 21.8753 0.255055 21.8843 0.298527C22.5767 3.32046 20.085 9.8239 16.4731 13.4209C15.8343 14.064 15.1407 14.6502 14.4002 15.1727C14.4955 16.2787 14.411 17.3846 13.9985 18.3318C12.8302 21.0043 9.75855 21.7824 8.44197 21.9937C8.36979 22.0059 8.29577 22.0012 8.22571 21.9799C8.15566 21.9587 8.09147 21.9215 8.03819 21.8713C7.9849 21.821 7.94397 21.7591 7.9186 21.6904C7.89323 21.6217 7.88411 21.548 7.89196 21.4751L8.36241 17.189C8.04096 17.1858 7.71987 17.1663 7.40039 17.1305C7.17735 17.1087 6.96893 17.0096 6.81109 16.8503L5.15076 15.1924C4.99146 15.0346 4.89242 14.8259 4.87084 14.6026C4.83497 14.281 4.81547 13.9578 4.8124 13.6343L0.524795 14.1076C0.451994 14.1156 0.378341 14.1065 0.309629 14.0811C0.240917 14.0558 0.17902 14.0148 0.128806 13.9615C0.0785915 13.9081 0.0414297 13.8438 0.0202432 13.7736C-0.000943262 13.7035 -0.0055768 13.6293 0.00670721 13.5571C0.223273 12.2368 1.00065 9.16771 3.67065 7.99148C4.61695 7.57859 5.72728 7.4965 6.83761 7.59481C7.35968 6.85546 7.94513 6.16306 8.58733 5.52547C12.1879 1.92304 18.8337 -0.585245 21.7099 0.118627C21.7531 0.128924 21.7924 0.151317 21.8233 0.18318ZM12.224 7.92186C12.3151 8.37957 12.5397 8.79996 12.8695 9.12986C13.0882 9.34908 13.348 9.52298 13.6339 9.64164C13.9198 9.7603 14.2263 9.82137 14.5358 9.82137C14.8453 9.82137 15.1517 9.7603 15.4377 9.64164C15.7236 9.52298 15.9833 9.34908 16.202 9.12986C16.5318 8.79996 16.7565 8.37957 16.8475 7.92186C16.9386 7.46415 16.892 6.98968 16.7137 6.55848C16.5353 6.12727 16.2332 5.7587 15.8455 5.49939C15.4578 5.24007 15.002 5.10166 14.5358 5.10166C14.0695 5.10166 13.6137 5.24007 13.226 5.49939C12.8384 5.7587 12.5362 6.12727 12.3579 6.55848C12.1795 6.98968 12.1329 7.46415 12.224 7.92186ZM5.47798 18.5161C5.99754 18.4262 6.4292 18.321 6.69831 18.0511C6.83974 17.9032 7.0897 18.0256 7.07153 18.2311C6.99299 18.8853 6.69667 19.4941 6.23032 19.9593C5.07579 21.1158 0.785726 21.225 0.785726 21.225C0.785726 21.225 0.894746 16.9334 2.04927 15.7768C2.51439 15.3115 3.12167 15.0153 3.77443 14.9353C3.81912 14.9292 3.86459 14.9374 3.90439 14.9586C3.94419 14.9799 3.97629 15.0131 3.99613 15.0537C4.01597 15.0942 4.02255 15.14 4.01493 15.1845C4.00731 15.229 3.98588 15.2699 3.95368 15.3015C3.80635 15.449 3.56965 16.0767 3.48961 16.5245C3.27991 17.7056 4.31069 18.7152 5.47798 18.5161Z" fill="#000"/>
554 </svg>';
555 }
556
557
558 // Upgrade to Pro Notice
559 public static function adminify_upgrade_pro_img_notice( $image ){
560 return '<div class="adminify-pro-notice"><img src="' . esc_url_raw($image ) . '" /></div>';
561 }
562
563 // Upgrade to Pro Notice Class
564 public static function upgrade_pro_class($classname = '')
565 {
566 if(empty($classname)){
567 // return ' adminify-depend-visible adminify-depend-on adminify-pro-notice ';
568 return ' adminify-pro-feature adminify-pro-notice';
569 } else {
570 echo esc_attr($classname);
571 }
572 }
573
574 // Upgrade to Pro Notice
575 public static function adminify_upgrade_pro($custom_message = '', $style='')
576 {
577
578 if (empty($custom_message)) {
579 $pro_content = sprintf(__('<strong>(Upgrade to Pro)</strong>', 'adminify'));
580 } else {
581 $pro_content = $custom_message;
582 }
583
584 if($style === 'inline'){
585 return '<strong style="font-size:16px;">' . $pro_content . '</strong>';
586 }
587
588 $upgrade_notice_msg = sprintf(
589 __('<div class="adminify-pro-notice adminify-missing-addons"> %1$s %2$s </div>', 'adminify'),
590 self::jltwp_adminify_upgrade_pro_icon(),
591 self::wp_kses_custom($pro_content)
592 );
593 return self::wp_kses_custom($upgrade_notice_msg);
594 }
595
596
597
598 /**
599 * Documentation SVG Icon
600 */
601 public static function docs_icon()
602 {
603 return '<svg class="is-pulled-left mr-1 width="9" height="12" viewBox="0 0 9 12" fill="none" xmlns="http://www.w3.org/2000/svg">
604 <path d="M5.25 3.1875V0H0.5625C0.250781 0 0 0.250781 0 0.5625V11.4375C0 11.7492 0.250781 12 0.5625 12H8.4375C8.74922 12 9 11.7492 9 11.4375V3.75H5.8125C5.50313 3.75 5.25 3.49687 5.25 3.1875ZM6.75 8.71875C6.75 8.87344 6.62344 9 6.46875 9H2.53125C2.37656 9 2.25 8.87344 2.25 8.71875V8.53125C2.25 8.37656 2.37656 8.25 2.53125 8.25H6.46875C6.62344 8.25 6.75 8.37656 6.75 8.53125V8.71875ZM6.75 7.21875C6.75 7.37344 6.62344 7.5 6.46875 7.5H2.53125C2.37656 7.5 2.25 7.37344 2.25 7.21875V7.03125C2.25 6.87656 2.37656 6.75 2.53125 6.75H6.46875C6.62344 6.75 6.75 6.87656 6.75 7.03125V7.21875ZM6.75 5.53125V5.71875C6.75 5.87344 6.62344 6 6.46875 6H2.53125C2.37656 6 2.25 5.87344 2.25 5.71875V5.53125C2.25 5.37656 2.37656 5.25 2.53125 5.25H6.46875C6.62344 5.25 6.75 5.37656 6.75 5.53125ZM9 2.85703V3H6V0H6.14297C6.29297 0 6.43594 0.0585938 6.54141 0.164062L8.83594 2.46094C8.94141 2.56641 9 2.70938 9 2.85703Z" fill="#0347FF"/>
605 </svg>';
606 }
607 /**
608 * Video Tutorials SVG Icon
609 */
610 public static function video_tutorials_icon()
611 {
612 return '<svg class="is-pulled-left mr-1 width="8" height="10" viewBox="0 0 8 10" fill="none" xmlns="http://www.w3.org/2000/svg">
613 <path d="M7.5 4.13399C8.16667 4.51889 8.16667 5.48114 7.5 5.86604L1.5 9.33014C0.833334 9.71504 0 9.23392 0 8.46412V1.53592C0 0.766115 0.833333 0.28499 1.5 0.66989L7.5 4.13399Z" fill="#C30052"/>
614 </svg>';
615 }
616
617 /**
618 * Facebook Group SVG Icon
619 */
620 public static function fbgroup_icon()
621 {
622 return '<svg class="is-pulled-left mr-1 width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
623 <path d="M1.82594 0C0.814448 0 0 0.814448 0 1.82594V8.17405C0 9.18554 0.814448 9.99999 1.82594 9.99999H5.26656V6.09062H4.23281V4.68312H5.26656V3.48062C5.26656 2.53587 5.87735 1.66844 7.28437 1.66844C7.85404 1.66844 8.2753 1.72313 8.2753 1.72313L8.24217 3.0375C8.24217 3.0375 7.81254 3.03344 7.34374 3.03344C6.83635 3.03344 6.75499 3.26722 6.75499 3.65532V4.68313H8.28248L8.21592 6.09063H6.75499V10H8.17404C9.18553 10 9.99998 9.18555 9.99998 8.17406V1.82595C9.99998 0.814458 9.18553 9.99998e-06 8.17404 9.99998e-06H1.82593L1.82594 0Z" fill="#3B5998"/>
624 </svg>';
625 }
626
627 /**
628 * Support SVG Icon
629 */
630 public static function support_icon()
631 {
632 return '<svg class="is-pulled-left mr-1 width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
633 <path fill-rule="evenodd" clip-rule="evenodd" d="M10 5C10 6.32608 9.47322 7.59785 8.53553 8.53553C7.59785 9.47322 6.32608 10 5 10C3.67392 10 2.40215 9.47322 1.46447 8.53553C0.526784 7.59785 0 6.32608 0 5C0 3.67392 0.526784 2.40215 1.46447 1.46447C2.40215 0.526784 3.67392 0 5 0C6.32608 0 7.59785 0.526784 8.53553 1.46447C9.47322 2.40215 10 3.67392 10 5ZM8.75 5C8.75 5.62063 8.59937 6.20563 8.3325 6.72125L7.38 5.76813C7.52262 5.32668 7.5395 4.85425 7.42875 4.40375L8.405 3.4275C8.62625 3.90563 8.75 4.4375 8.75 5ZM5.52187 7.44563L6.50938 8.43312C6.03375 8.64254 5.51968 8.75046 5 8.75C4.45699 8.75068 3.92036 8.63294 3.4275 8.405L4.40375 7.42875C4.77042 7.5186 5.15266 7.52437 5.52187 7.44563ZM2.59875 5.69812C2.47576 5.27463 2.46692 4.82614 2.57313 4.39812L2.52313 4.44812L1.56687 3.49C1.35738 3.96582 1.24945 4.48011 1.25 5C1.25 5.59625 1.38937 6.16 1.63687 6.66062L2.59938 5.69812H2.59875ZM3.27875 1.66687C3.81076 1.39189 4.40112 1.24891 5 1.25C5.59625 1.25 6.16 1.38937 6.66062 1.63687L5.69812 2.59938C5.21829 2.45961 4.70759 2.46679 4.23187 2.62L3.27875 1.6675V1.66687ZM6.25 5C6.25 5.33152 6.1183 5.64946 5.88388 5.88388C5.64946 6.1183 5.33152 6.25 5 6.25C4.66848 6.25 4.35054 6.1183 4.11612 5.88388C3.8817 5.64946 3.75 5.33152 3.75 5C3.75 4.66848 3.8817 4.35054 4.11612 4.11612C4.35054 3.8817 4.66848 3.75 5 3.75C5.33152 3.75 5.64946 3.8817 5.88388 4.11612C6.1183 4.35054 6.25 4.66848 6.25 5Z" fill="#4E4B66"/>
634 </svg>';
635 }
636
637 /* White Label Upgrade Pro */
638 public static function jltwp_adminify_white_label_upgrade()
639 {
640 ?>
641 <div class="wp-adminify-white-label-notice-content">
642 <div class="wp-adminify-white-label-notice-logo">
643 <img src="<?php echo esc_url(WP_ADMINIFY_ASSETS_IMAGE) . 'logos/logo-text-light.svg'; ?>" alt="<?php echo esc_attr(WP_ADMINIFY); ?>">
644 </div>
645 <h2>
646 <?php echo sprintf(__('Upgrade <span>Pro</span> for White Labeling', 'adminify')); ?>
647 </h2>
648 <p>
649 <?php
650 echo sprintf(__('<strong>%1$s</strong> can be completely re-branded with your own brand Logo, Name and Author Details. Your clients will never know what tools you are using to build their website and will think that this is your own tool set. White-labeling works as long as your license is active. ', 'adminify'), esc_html(WP_ADMINIFY));
651 ?>
652 <br>
653 <em><?php esc_html_e('Note: Agency or Higher Plans Only', 'adminify'); ?></em>
654 </p>
655 <a class="wp-adminify-btn wp-adminify-get-pro" href="<?php echo esc_url('https://wpadminify.com/pricing/'); ?>" target="_blank">
656 <?php esc_html_e('Upgrade Now', 'adminify'); ?>
657 </a>
658 </div>
659 <?php
660 }
661
662
663 public static function get_widget_template_options()
664 {
665 $type = 'widget';
666 $page_templates = self::jltwp_adminify_get_page_templates($type);
667
668 $options[-1] = __('Select', 'adminify');
669
670 if (count($page_templates)) {
671 foreach ($page_templates as $id => $name) {
672 $options[$id] = $name;
673 }
674 } else {
675 $options['no_template'] = __('No saved templates found!', 'adminify');
676 }
677
678 return $options;
679 }
680
681 public static function get_section_template_options()
682 {
683 $type = 'section';
684 $page_templates = self::jltwp_adminify_get_page_templates($type);
685
686 $options[-1] = __('Select', 'adminify');
687
688 if (count($page_templates)) {
689 foreach ($page_templates as $id => $name) {
690 $options[$id] = $name;
691 }
692 } else {
693 $options['no_template'] = __('No saved templates found!', 'adminify');
694 }
695
696 return $options;
697 }
698
699 public static function get_page_template_options()
700 {
701 $type = 'page';
702 $page_templates = self::jltwp_adminify_get_page_templates($type);
703
704 $options[-1] = __('Select', 'adminify');
705
706 if (count($page_templates)) {
707 foreach ($page_templates as $id => $name) {
708 $options[$id] = $name;
709 }
710 } else {
711 $options['no_template'] = __('No saved templates found!', 'adminify');
712 }
713
714 return $options;
715 }
716
717 public static function get_theme_presets($theme = null)
718 {
719
720 $common_var = [
721 '--adminify-menu-vertical-padding' => '10px',
722 '--adminify-menu-horizontal-padding' => '8px',
723 '--adminify-menu-wrapper-padding-top' => '16px',
724 '--adminify-menu-wrapper-padding-right' => '8px',
725 '--adminify-menu-wrapper-padding-bottom' => '16px',
726 '--adminify-menu-wrapper-padding-left' => '8px',
727 '--adminify-submenu-vertical-padding' => '4px',
728 '--adminify-submenu-wrapper-padding-top' => '8px',
729 '--adminify-submenu-wrapper-padding-right' => '0px',
730 '--adminify-submenu-wrapper-padding-bottom' => '8px',
731 '--adminify-submenu-wrapper-padding-left' => '28px',
732 // '--adminify-menu-text-align' => 'left',
733 // '--adminify-menu-text-transform' => '',
734 // '--adminify-menu-text-decoration' => 'none',
735 '--adminify-menu-font-size' => '13px',
736 '--adminify-menu-line-height' => '20px',
737 '--adminify-menu-letter-spacing' => '',
738 '--adminify-menu-width' => '260px'
739 ];
740
741 $presets = [
742
743 // Base/ Default Preset
744 'preset1' => [
745 '--adminify-preset-background' => '#F9F9F9',
746 '--adminify-primary' => '#3a3ae9',
747 // '--adminify-text-color' => '#ffffff',
748 '--adminify-menu-border' => '#dedee7',
749 '--adminify-menu-bg' => '#ffffff',
750 '--adminify-menu-hover-bg' => '#3a3ae9',
751 '--adminify-menu-text-color' => '#48455f',
752 '--adminify-menu-text-hover-color' => '#ffffff',
753 '--adminify-menu-active-bg' => '#3a3ae9',
754 '--adminify-menu-active-color' => '#ffffff',
755 '--adminify-submenu-wrapper-bg' => '#ffffff',
756 '--adminify-submenu-hover-bg' => 'transparent',
757 '--adminify-submenu-text-color' => '#48455f',
758 '--adminify-submenu-text-hover-color' => '#3a3ae9',
759 '--adminify-submenu-active-bg' => 'transparent',
760 '--adminify-submenu-active-color' => '#3a3ae9',
761 '--adminify-notif-bg-color' => '#3a3ae9',
762 '--adminify-notif-color' => '#ffffff',
763 ],
764
765 'preset2' => [
766 '--adminify-preset-background' => '#F9F9F9',
767 '--adminify-primary' => '#0347FF',
768 '--adminify-notif-bg-color' => '#FF1C69',
769 // '--adminify-text-color' => '#ffffff',
770 '--adminify-menu-border' => '#404052',
771 '--adminify-menu-bg' => '#14142B',
772 '--adminify-menu-hover-bg' => '#0347FF',
773 '--adminify-menu-text-color' => '#ffffff',
774 '--adminify-menu-text-hover-color' => '#ffffff',
775 '--adminify-menu-active-bg' => '#0347FF',
776 '--adminify-menu-active-color' => '#ffffff',
777 '--adminify-submenu-wrapper-bg' => '#14142B',
778 '--adminify-submenu-hover-bg' => 'transparent',
779 '--adminify-submenu-text-color' => '#ffffff',
780 '--adminify-submenu-text-hover-color' => '#0347FF',
781 '--adminify-submenu-active-bg' => 'transparent',
782 '--adminify-submenu-active-color' => '#0347FF',
783 '--adminify-notif-bg-color' => '#0347FF',
784 '--adminify-notif-color' => '#ffffff',
785 ],
786 ];
787
788 $pro_presets = apply_filters('adminify_settings/color_presets', $common_var);
789
790 if( !empty(array_key_exists('preset3', $pro_presets)) ) {
791 $presets = array_merge($presets, $pro_presets);
792 }
793
794 // Merge $common_var variable with every preset
795 foreach ($presets as $key => $value) {
796 $presets[$key] = array_merge($value, $common_var);
797 }
798
799 // return all presets
800 if (is_null($theme)) {
801 return $presets;
802 }
803
804 // return specific preset
805 if (array_key_exists($theme, $presets)) {
806 return $presets[$theme];
807 }
808
809 // specific preset not found
810 return [];
811 }
812
813 public static function jltwp_adminify_get_page_templates($type = '')
814 {
815 $args = [
816 'post_type' => 'elementor_library',
817 'posts_per_page' => -1,
818 ];
819
820 if ($type) {
821 $args['tax_query'] = [
822 [
823 'taxonomy' => 'elementor_library_type',
824 'field' => 'slug',
825 'terms' => $type,
826 ],
827 ];
828 }
829
830 $page_templates = get_posts($args);
831
832 $options = [];
833
834 if (!empty($page_templates) && !is_wp_error($page_templates)) {
835 foreach ($page_templates as $post) {
836 $options[$post->ID] = $post->post_title;
837 }
838 }
839 return $options;
840 }
841
842 public static function assets_ext($ext)
843 {
844 if (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) {
845 return $ext;
846 }
847 return '.min' . $ext;
848 }
849
850 public static function wp_kses_atts_map(array $attrs)
851 {
852 return array_fill_keys(array_values($attrs), true);
853 }
854
855 public static function wp_kses_custom($content)
856 {
857 /**
858 * the context can be different
859 * The context for which to retrieve tags. Allowed values are 'post', 'strip', 'data', 'entities', or the name of a field filter such as 'pre_user_description', or an array of allowed HTML elements and attributes.
860 * the post means here it will return all the tags that are allowed in post such as a, p, strong, em etc
861 */
862 $allowed_tags = wp_kses_allowed_html('post'); // Details : https://developer.wordpress.org/reference/functions/wp_kses_allowed_html/
863 if( !is_array($allowed_tags) ) $allowed_tags = [];
864
865 $custom_tags = [
866 'select' => self::wp_kses_atts_map(['class', 'id', 'style', 'width', 'height', 'title', 'data', 'name', 'autofocus', 'disabled', 'multiple', 'required', 'size']),
867 'input' => self::wp_kses_atts_map(['class', 'id', 'style', 'width', 'height', 'title', 'data', 'name', 'autofocus', 'disabled', 'required', 'size', 'type', 'checked', 'readonly', 'placeholder', 'value', 'maxlength', 'min', 'max', 'multiple', 'pattern', 'step', 'autocomplete']),
868 'textarea' => self::wp_kses_atts_map(['class', 'id', 'style', 'width', 'height', 'title', 'data', 'name', 'autofocus', 'disabled', 'required', 'rows', 'cols', 'wrap', 'maxlength']),
869 'option' => self::wp_kses_atts_map(['class', 'id', 'label', 'disabled', 'label', 'selected', 'value']),
870 'optgroup' => self::wp_kses_atts_map(['disabled', 'label', 'class', 'id']),
871 'form' => self::wp_kses_atts_map(['class', 'id', 'data', 'style', 'width', 'height', 'accept-charset', 'action', 'autocomplete', 'enctype', 'method', 'name', 'novalidate', 'rel', 'target']),
872 'svg' => self::wp_kses_atts_map(['class', 'xmlns', 'viewbox', 'width', 'height', 'fill', 'aria-hidden', 'aria-labelledby', 'role']),
873 'rect' => self::wp_kses_atts_map(['rx', 'width', 'height', 'fill']),
874 'path' => self::wp_kses_atts_map(['d', 'fill']),
875 'g' => self::wp_kses_atts_map(['fill']),
876 'defs' => self::wp_kses_atts_map(['fill']),
877 'linearGradient' => self::wp_kses_atts_map(['id', 'x1', 'x2', 'y1', 'y2', 'gradientUnits']),
878 'stop' => self::wp_kses_atts_map(['stop-color', 'offset', 'stop-opacity']),
879 'style' => self::wp_kses_atts_map(['type']),
880 'div' => self::wp_kses_atts_map(['class', 'id', 'style']),
881 'ul' => self::wp_kses_atts_map(['class', 'id', 'style']),
882 'li' => self::wp_kses_atts_map(['class', 'id', 'style']),
883 'label' => self::wp_kses_atts_map(['class', 'for']),
884 'span' => self::wp_kses_atts_map(['class', 'id', 'style']),
885 'h1' => self::wp_kses_atts_map(['class', 'id', 'style']),
886 'h2' => self::wp_kses_atts_map(['class', 'id', 'style']),
887 'h3' => self::wp_kses_atts_map(['class', 'id', 'style']),
888 'h4' => self::wp_kses_atts_map(['class', 'id', 'style']),
889 'h5' => self::wp_kses_atts_map(['class', 'id', 'style']),
890 'h6' => self::wp_kses_atts_map(['class', 'id', 'style']),
891 'a' => self::wp_kses_atts_map(['class', 'href', 'target', 'rel']),
892 'p' => self::wp_kses_atts_map(['class', 'id', 'style', 'data']),
893 'table' => self::wp_kses_atts_map(['class', 'id', 'style']),
894 'thead' => self::wp_kses_atts_map(['class', 'id', 'style']),
895 'tbody' => self::wp_kses_atts_map(['class', 'id', 'style']),
896 'tr' => self::wp_kses_atts_map(['class', 'id', 'style']),
897 'th' => self::wp_kses_atts_map(['class', 'id', 'style']),
898 'td' => self::wp_kses_atts_map(['class', 'id', 'style']),
899 'i' => self::wp_kses_atts_map(['class', 'id', 'style']),
900 'button' => self::wp_kses_atts_map(['class', 'id']),
901 'nav' => self::wp_kses_atts_map(['class', 'id', 'style']),
902 'time' => self::wp_kses_atts_map(['datetime']),
903 'br' => [],
904 'strong' => [],
905 'style' => [],
906 'img' => self::wp_kses_atts_map(['class', 'src', 'alt', 'height', 'width', 'srcset', 'id', 'loading']),
907 ];
908
909 $allowed_tags = array_merge_recursive($allowed_tags, $custom_tags);
910
911 return wp_kses(stripslashes_deep($content), $allowed_tags);
912 }
913
914
915 /**
916 * Missing Addon/Plugin Notice
917 *
918 * @param [type] $args
919 *
920 * @return void
921 */
922 public static function missing_plugin_notice( $plugin_name = '' )
923 {
924 /* translators: %s: Plugin Name */
925 $missing_plugin_notice = sprintf(
926 __('<strong>"%1$s"</strong> plugin is not Activated! Please install and activate <strong>%1$s</strong> Plugin <p> <a class="adminify-missing-addons" href="%2$s">%3$s</a></p>', 'adminify'),
927 esc_html($plugin_name),
928 admin_url('admin.php?page=wp-adminify-addons-plugins'),
929 __('Install Now', 'adminify')
930 );
931 return '<div class="adminify-missing-addons">' . self::jltwp_adminify_upgrade_pro_icon() . self::wp_kses_custom( $missing_plugin_notice ) . '</div>';
932 }
933
934
935 /**
936 * Update Existing Data to New Options data
937 *
938 * @param [type] $get_option_value
939 * @param [type] $update_option_value
940 * @param [type] $option_name
941 *
942 * @return void
943 */
944 public static function update_options($get_option_value, $option_name)
945 {
946
947 // Retrieve the current option value
948 $current_value = get_option($option_name);
949 // $current_value = self::$option_data;
950 // Initialize the current value if it's empty
951 if (empty($current_value)) {
952 $current_value = [];
953 }
954 // If $get_option_value is provided, use it to update the current value
955 if (!empty($get_option_value)) {
956 // Ensure current value is an array before merging
957 if (!is_array($current_value)) {
958 $current_value = [];
959 }
960 // Merge the provided value into the current value
961 $current_value = array_merge($current_value, $get_option_value);
962 }
963 // Update the specific key within the option with the new value
964 // $current_value[$option_key] = $update_option_value;
965
966 // Update the option with the new value
967 update_option($option_name, $current_value);
968 // Optionally, return the updated value
969 return get_option($option_name);
970 }
971
972
973 /**
974 * Replace Array Keys
975 *
976 * @return void
977 */
978 public static function replace_keys($sourceArray, $newArray){
979 $new_value = [];
980 if( ! is_array($sourceArray)) $sourceArray = [];
981 foreach ($newArray as $key => $value) {
982 if (!array_key_exists($key, $sourceArray)) {
983 return $sourceArray;
984 }
985 $new_value[$value] = $sourceArray[$key];
986 unset($sourceArray[$key]);
987 }
988 return array_merge($sourceArray, $new_value);
989 }
990
991
992 /**
993 * Move Array Keys
994 *
995 * @return void
996 */
997 public static function move_keys(&$sourceArray, $keysToMove)
998 {
999 $destinationArray = [];
1000 foreach ($keysToMove as $key) {
1001 if (array_key_exists($key, $sourceArray)) {
1002 $destinationArray[$key] = $sourceArray[$key];
1003 unset($sourceArray[$key]);
1004 }
1005 }
1006 return $destinationArray;
1007 }
1008
1009
1010 /**
1011 * Remove unnecessary keys.
1012 *
1013 * @param string $option_name The name of the option.
1014 * @param array $keys_to_remove An array of keys to remove.
1015 */
1016 public static function removeKeys($sourceArray, $keysToRemove)
1017 {
1018 foreach ($keysToRemove as $key) {
1019 if (array_key_exists($key, $sourceArray)) {
1020 unset($sourceArray[$key]);
1021 }
1022 }
1023 return $sourceArray;
1024 }
1025
1026
1027
1028 /**
1029 * Move Nested Keys
1030 *
1031 * @return void
1032 */
1033 public static function moveNestedKeys(&$sourceArray, $moveInstructions) {
1034 $destinationArray = [];
1035 foreach ($moveInstructions as $sourcePath => $destPath) {
1036 $sourcePathArray = explode('.', $sourcePath);
1037 $destPathArray = explode('.', $destPath);
1038 $sourceValue = self::getNestedValue($sourceArray, $sourcePathArray);
1039 if ($sourceValue !== null) {
1040 self::setNestedValue($destinationArray, $destPathArray, $sourceValue);
1041 self::unsetNestedValue($sourceArray, $sourcePathArray);
1042 }
1043 }
1044
1045 return array_merge_recursive($sourceArray, $destinationArray);
1046 }
1047
1048 public static function getNestedValue(&$array, $pathArray) {
1049 $value = &$array;
1050 foreach ($pathArray as $key) {
1051 if (is_array($value) && array_key_exists($key, $value)) {
1052 $value = &$value[$key];
1053 } else {
1054 return null;
1055 }
1056 }
1057 return $value;
1058 }
1059
1060 public static function setNestedValue(&$array, $pathArray, $value) {
1061 $temp = &$array;
1062 foreach ($pathArray as $key) {
1063 if (!isset($temp[$key])) {
1064 $temp[$key] = [];
1065 }
1066 $temp = &$temp[$key];
1067 }
1068 $temp = $value;
1069 }
1070
1071 public static function unsetNestedValue(&$array, $pathArray) {
1072 $temp = &$array;
1073 foreach ($pathArray as $key) {
1074 if (isset($temp[$key])) {
1075 if (count($pathArray) === 1) {
1076 unset($temp[$key]);
1077 } else {
1078 self::unsetNestedValue($temp[$key], array_slice($pathArray, 1));
1079 }
1080 return;
1081 }
1082 }
1083 }
1084
1085
1086
1087 /**
1088 *
1089 * Checkbox Method
1090 */
1091 public static function checkboxes(&$old_db, $checkbox_keys) {
1092 $result = [];
1093 $parentKey = "";
1094 $childKey = "";
1095
1096 $thirdStep = [];
1097
1098 foreach ($checkbox_keys as $key => $value) {
1099
1100 $sourceArray = explode(".", $value);
1101
1102 foreach ($sourceArray as $x => $element) {
1103 if (!array_key_exists($element, $result) && $x === 0) {
1104 $parentKey = $element;
1105 if (count($sourceArray) === 3) {
1106 $result[$element] = [];
1107 } else {
1108 $result[$element] = [];
1109 }
1110 }
1111
1112
1113 if ($x === 1 && !empty($old_db[$key])) {
1114 $childKey = $element;
1115 if (count($sourceArray) === 3) {
1116 $result[$parentKey][$element] = [];
1117 } else {
1118 $result[$parentKey][] = $element;
1119 }
1120 } elseif ($x === 1 && empty($old_db[$key]) && count($sourceArray) === 3) {
1121 $childKey = $element;
1122 if (!array_key_exists($element, $result[$parentKey])) {
1123 $result[$parentKey][$element] = [];
1124 }
1125 }
1126
1127 if ($x === 2 && !empty($old_db[$key]) && count($sourceArray) === 3) {
1128 $thirdStep[] = $element;
1129 $result[$parentKey][$childKey] = $thirdStep;
1130 }
1131 }
1132 }
1133
1134 return array_merge_recursive($old_db, $result);
1135 }
1136
1137 public static function adminify_upgrade_pro_class($inline_badge=false){
1138 if(!empty($inline_badge)){
1139 return '<span class="adminify-pro-checkbox adminify-pro-badge adminify-pro-notice">Pro</span>';
1140 }
1141 return '<span class="adminify-pro-checkbox">' . self::jltwp_adminify_upgrade_pro_icon() . ' <strong>(Upgrade to Pro)</strong>' . '</span>';
1142 }
1143
1144 public static function adminify_upgrade_pro_badge($badge_text = 'Pro'){
1145 if(!empty($badge_text)){
1146 return '<span class="adminify-pro-badge">' . $badge_text . '</span>';
1147 }
1148 }
1149
1150 /*
1151 * Compares the version of WordPress running to the $version specified.
1152 * Usage: Utils::check_wp_version('>=', '4.0')
1153 version_compare( $wp_version, '4.3', '>=' )
1154 * @param string $operator
1155 * @param string $version
1156 * @returns boolean
1157 */
1158 public static function check_wp_version( $operator = '>', $version = '6.6' ) {
1159 global $wp_version;
1160 return version_compare( $wp_version, $version, $operator );
1161 }
1162
1163 public static function adminfiy_help_urls($module_name = '', $docs = '', $youtube = '', $facebook_grp = '', $support = '')
1164 {
1165 $help_content = '';
1166
1167 // Modules
1168 if (empty($module_name)) {
1169 $module_name = '';
1170 } else {
1171 $module_name = $module_name;
1172 }
1173
1174 $help_content_urls = '';
1175
1176 // Docs
1177 if (!empty($docs)) {
1178 $help_content_urls .= '<a class="adminify-tag adminify-tag-purple adminify-docs-url" href="' . esc_url( $docs ) . '" target="_blank"> ' . self::docs_icon() . ' Docs</a>';
1179 }
1180
1181 // youtube
1182 if (!empty($youtube)) {
1183 $help_content_urls .= '<a class="adminify-tag adminify-tag-danger adminify-video-url" href="' . esc_url( $youtube ) . '" target="_blank">' . self::video_tutorials_icon() . ' Video Tutorial</a>';
1184 }
1185
1186 // facebook_grp
1187 if (!empty($facebook_grp)) {
1188 $help_content_urls .= '<a class="adminify-tag adminify-tag-primary adminify-fbgroup-url" href="' . esc_url($facebook_grp) . '" target="_blank">' . self::fbgroup_icon() . ' Facebook Group</a>';
1189 }
1190
1191 // Support
1192 if ( !empty($support)) {
1193 $help_content_urls .= '<a class="adminify-tag adminify-tag-secondary adminify-support-url" href="' . esc_url($support) . '" target="_blank">' . self::support_icon() . ' Support</a>';
1194 }
1195
1196 $help_content = sprintf( '%1$s <div class="adminify-helps">%2$s</div>', $module_name, $help_content_urls );
1197 return $help_content;
1198 }
1199
1200 }
1201