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

1,188 lines 38.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;
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 rules 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 // Super Admin for Multisite
82 if (is_super_admin() && is_multisite()) {
83 if (in_array('Super Admin', $restrict_for) || in_array('administrator', $restrict_for)) {
84 return true;
85 } else {
86 return false;
87 }
88 }
89
90 $formattedroles = [];
91
92 foreach ($restrict_for as $item) {
93 $item = is_string($item) ? strtolower($item) : $item;
94 $item = is_string($item) ? str_replace(' ', '_', $item) : $item;
95 array_push($formattedroles, $item);
96 }
97
98 foreach ($current_roles as $role) {
99 // $role_name = $all_roles[$role];
100 if (in_array($role, $restrict_for)) {
101 return true;
102 }
103 }
104 }
105
106
107 /**
108 * Check Site wide plugin settings
109 */
110 public static function is_site_wide($plugin)
111 {
112 if (!is_multisite()) {
113 return false;
114 }
115
116 $plugins = get_site_option('active_sitewide_plugins');
117 if (isset($plugins[$plugin])) {
118 return true;
119 }
120
121 return false;
122 }
123
124 /**
125 * Get All Taxonomies
126 *
127 * @return void
128 */
129 public static function get_all_taxonomies()
130 {
131 $taxonomies = get_taxonomies(
132 [
133 'show_ui' => true,
134 ],
135 'objects'
136 );
137 $taxonomy_names = [];
138 foreach ($taxonomies as $taxonomy) {
139 if ($taxonomy->name == 'post_format') {
140 continue;
141 }
142 $taxonomy_names[$taxonomy->name] = $taxonomy->label;
143 }
144 return $taxonomy_names;
145 }
146
147 /**
148 * Restricts for role / user
149 */
150
151 public static function restrict_for($disabled_for)
152 {
153 if (!is_array($disabled_for)) {
154 return false;
155 }
156
157 require_once ABSPATH . '/wp-includes/pluggable.php';
158
159 if (!function_exists('wp_get_current_user')) {
160 return false;
161 }
162 $current_user = wp_get_current_user();
163 $current_name = $current_user->display_name;
164 $current_roles = $current_user->roles;
165
166 $formattedroles = [];
167
168 foreach ($disabled_for as $item) {
169 $item = strtolower($item);
170 $item = str_replace(' ', '_', $item);
171 array_push($formattedroles, $item);
172 }
173
174 if (in_array($current_name, $disabled_for)) {
175 return true;
176 }
177
178 foreach ($current_roles as $role) {
179 if (in_array($role, $formattedroles)) {
180 return true;
181 }
182 }
183 }
184
185
186 // Get Taxonomies
187 public static function get_taxonomies()
188 {
189 $args = [
190 'public' => true,
191 'show_ui' => true,
192 ];
193 $output = 'objects';
194 $taxonomies = get_taxonomies($args, $output);
195 $taxonomies = $taxonomies;
196 return $taxonomies;
197 }
198
199 // Get Post Types
200 public static function get_post_types()
201 {
202 $args = [
203 'public' => true,
204 'show_ui' => true,
205 ];
206 $output = 'objects';
207 $post_types = get_post_types($args, $output);
208 $post_types = $post_types;
209 return $post_types;
210 }
211
212 // Get Post Meta
213 public static function post_meta($meta_key)
214 {
215 $meta_key = get_post_meta(get_the_ID(), $meta_key, true);
216 return $meta_key;
217 }
218
219
220 // verfiy current page id
221 public static function jltwp_adminify_currentpage_id($id)
222 {
223 if (!function_exists('get_current_screen')) {
224 return true;
225 }
226
227 $screen = get_current_screen();
228 return is_object($screen) && $screen->id == $id;
229 }
230
231 /**
232 * Get Current Admin Page Title
233 *
234 * @param string $title
235 *
236 * @return void
237 */
238 public static function admin_page_title($title = '')
239 {
240 $title = isset($title) && !empty($title) ? $title : WP_ADMINIFY;
241 echo esc_html($title);
242
243 if (is_multisite()) {
244 $text = ' | ' . esc_html__('Current Blog ID', 'adminify') . ': ' . get_current_blog_id(); ?>
245 <?php echo self::wp_kses_custom(self::admin_page_subtitle($text)); ?>
246 <?php } ?>
247 <?php
248 }
249
250 /**
251 * Get Current Admin Subtitle
252 */
253
254 public static function admin_page_subtitle($text)
255 {
256 ?>
257 <span style="color:#8b959e;" <?php
258 if (is_rtl()) {
259 echo ' dir="rtl"';
260 }
261 ?>>
262 <?php echo esc_html($text); ?>
263 </span>
264
265 <?php
266 }
267
268 public static function convert_name_to_class($name)
269 {
270 $class = str_replace([' ', ',', '.', '"', "'", '/', '\\', '+', '=', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', '`', '<', '>', '?', '[', ']', '{', '}', '|', ':'], '', $name);
271 return $class;
272 }
273
274 public static function jltwp_adminify_class_cleanup($string)
275 {
276 // Lower case everything
277 $string = strtolower($string);
278 // Make alphanumeric (removes all other characters)
279 $string = preg_replace('/[^a-z0-9_\s-]/', '', $string);
280 // Clean up multiple dashes or whitespaces
281 $string = preg_replace('/[\s-]+/', ' ', $string);
282 // Convert whitespaces and underscore to dash
283 $string = preg_replace('/[\s_]/', '-', $string);
284 return $string;
285 }
286
287 public static function sanitize_id($url)
288 {
289 $url = preg_replace('/^customize.php\?return=.*$/', 'customize', $url);
290 $url = preg_replace('/(&|&amp;|&#038;)?_wpnonce=([^&]+)/', '', $url);
291 return str_replace(['.php', '.', '/', '?', '='], ['', '_', '_', '_', '_'], $url);
292 }
293
294 /**
295 * Strip tags and it's content from the given string.
296 *
297 * @link https://stackoverflow.com/questions/14684077/remove-all-html-tags-from-php-string/#answer-39320168
298 *
299 * @param string $text The string being stripped.
300 * @return string The stripped string.
301 */
302 public static function strip_tags_content($text)
303 {
304 $cleanup = preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
305 $cleanup = wp_strip_all_tags($cleanup);
306 $cleanup = trim($cleanup);
307
308 return $cleanup;
309 }
310
311 /**
312 * String to ID
313 * Remove Space replace with underscore and lowercase
314 *
315 * @param void
316 *
317 * @return string
318 */
319 public static function string_to_id($string)
320 {
321 $string_replace = str_replace(' ', '_', $string);
322 $formatted_string = strtolower($string_replace);
323 return $formatted_string;
324 }
325
326 /**
327 * ID to String
328 * Remove Space replace with underscore and lowercase
329 *
330 * @param void
331 *
332 * @return string
333 */
334 public static function id_to_string($string)
335 {
336 $string_replace = str_replace('_', ' ', $string);
337 $formatted_string = ucwords($string_replace);
338 return $formatted_string;
339 }
340
341 /**
342 * Check is Plugin Active
343 *
344 * @param [type] $plugin_path
345 *
346 * @return boolean
347 */
348 public static function is_plugin_active( $plugin_path )
349 {
350 include_once ABSPATH . 'wp-admin/includes/plugin.php';
351 return is_plugin_active( $plugin_path );
352 }
353
354 /**
355 * Check if Block Editor Page
356 *
357 * @return boolean
358 */
359 public static function is_block_editor_page() {
360 if (function_exists('get_current_screen')) {
361 $current_screen = get_current_screen();
362 if (!empty($current_screen->is_block_editor)) {
363 return true;
364 }
365 }
366 return false;
367 }
368
369 /**
370 * Check is Plugin Active
371 *
372 * @param [type] $plugin_path
373 *
374 * @return boolean
375 */
376 public static function is_plugin_installed_and_active($plugin_path)
377 {
378 // Check if the plugin is active
379 if (is_plugin_active($plugin_path)) {
380 return true; // Plugin is both installed and active
381 } else {
382 return false; // Plugin is either not installed or not active
383 }
384 }
385
386 public static function is_plugin_installed($plugin_slug, $plugin_file)
387 {
388 $installed_plugins = get_plugins();
389 return isset($installed_plugins[$plugin_file]);
390 }
391
392 public static function jltwp_adminify_notification_bar()
393 {
394 $plugin_slug = 'adminify-notification-bar';
395 $plugin_file = 'adminify-notification-bar/adminify-notification-bar.php';
396 $addons_page_url = network_admin_url('admin.php?page=wp-adminify-settings-addons');
397
398 // $addons_download_link = jltwp_adminify()->_get_latest_download_local_url(14434);
399
400 $html = '';
401 if (self::is_plugin_installed($plugin_slug, $plugin_file)) {
402 if (!current_user_can('install_plugins')) {
403 return;
404 }
405
406 if (!self::is_plugin_active($plugin_file)) {
407 $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);
408 $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>';
409 }
410 } else {
411 // $install_url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $plugin_slug), 'install-plugin_' . $plugin_slug);
412 $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>';
413
414 activate_plugin($plugin_file);
415 }
416
417 $html_content = '<div class="adminify-title">
418 <h4>' . esc_html__('Notification Bar', 'adminify') . '</h4>
419 <div class="adminify-subtitle-text">' . esc_html__('Cookie Notice, Promotional Bar on frontend', 'adminify') . '</div>
420 </div>
421 <div class="adminify-fieldset">
422 <div class="adminify--addons" style="width: 100px;">
423 ' . wp_kses_post($html) . '
424 </div>
425 </div>
426 <div class="clear"></div>';
427
428 echo wp_kses_post($html_content);
429 }
430
431
432 /**
433 * User Defined Settings
434 */
435
436 public static function get_user_preference($key)
437 {
438 $userid = get_current_user_id();
439 $current = get_user_meta($userid, '_wpadminify_preferences', true);
440 $value = false;
441
442 if (is_array($current)) {
443 if (isset($current[$key])) {
444 $value = $current[$key];
445 }
446 }
447
448 return $value;
449 }
450
451 /**
452 * Sanitises and strips tags of input from ajax
453 *
454 * @since 1.0.0
455 * @variables $values = item to clean (array or string)
456 */
457 public static function clean_ajax_input($values)
458 {
459 if (is_array($values)) {
460 foreach ($values as $index => $in) {
461 if (is_array($in)) {
462 $values[$index] = self::clean_ajax_input($in);
463 } else {
464 $values[$index] = strip_tags($in);
465 }
466 }
467 } else {
468 $values = strip_tags($values);
469 }
470
471 return $values;
472 }
473
474 /**
475 * Check Ajax Error Messages
476 *
477 * @param [type] $message
478 *
479 * @return void
480 */
481 public static function ajax_error_message($message)
482 {
483 $returndata = [];
484 $returndata['error'] = true;
485 $returndata['error_message'] = $message;
486 return json_encode($returndata);
487 }
488
489 /**
490 * Get All Updates
491 * Themes, Plugins, Core etc
492 *
493 * @return void
494 */
495 public static function get_all_updates()
496 {
497 $allupdates = [];
498 $allupdates['total'] = 0;
499 $allupdates['wordpress'] = 0;
500 $allupdates['theme'] = 0;
501 $allupdates['plugin'] = 0;
502
503 if (!is_admin()) {
504 return $allupdates;
505 }
506
507 if (!current_user_can('install_plugins')) {
508 return $allupdates;
509 }
510 $updatesTotal = 0;
511 if (is_super_admin() && is_admin()) {
512 $pluginUpdates = get_plugin_updates();
513 $themeUpdates = get_theme_updates();
514 $wpUpdates = get_core_updates();
515
516 if (isset($wpUpdates[0])) {
517 $wpversion = $wpUpdates[0]->version;
518 global $wp_version;
519
520 if ($wpversion > $wp_version) {
521 $wpUpdates = 1;
522 } else {
523 $wpUpdates = 0;
524 }
525 } else {
526 $wpUpdates = 0;
527 }
528
529 $updatesTotal = count($pluginUpdates) + count($themeUpdates) + $wpUpdates;
530
531 $allupdates['total'] = $updatesTotal;
532 $allupdates['wordpress'] = $wpUpdates;
533 $allupdates['theme'] = $themeUpdates;
534 $allupdates['plugin'] = $pluginUpdates;
535 }
536 return $allupdates;
537 }
538
539 public static function adminfiy_help_urls($module_name = '', $docs = '', $youtube = '', $facebook_grp = '', $support = '')
540 {
541 $help_content = '';
542
543 // Modules
544 if (empty($module_name)) {
545 $module_name = '';
546 } else {
547 $module_name = $module_name;
548 }
549
550 $help_content_urls = '';
551
552 // Docs
553 if (!empty($docs)) {
554 $help_content_urls .= '<a class="adminify-tag adminify-tag-purple adminify-docs-url" href="' . esc_url( $docs ) . '" target="_blank"> ' . self::docs_icon() . ' Docs</a>';
555 }
556
557 // youtube
558 if (!empty($youtube)) {
559 $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>';
560 }
561
562 // facebook_grp
563 if (!empty($facebook_grp)) {
564 $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>';
565 }
566
567 // Support
568 if ( !empty($support)) {
569 $help_content_urls .= '<a class="adminify-tag adminify-tag-secondary adminify-support-url" href="' . esc_url($support) . '" target="_blank">' . self::support_icon() . ' Support</a>';
570 }
571
572 $help_content = sprintf( __('%1$s <div class="adminify-helps">%2$s</div>', 'adminify' ), $module_name, $help_content_urls );
573 return $help_content;
574 }
575
576 /**
577 * Upgrade Pro Icon
578 *
579 * @return void
580 */
581 public static function jltwp_adminify_upgrade_pro_icon()
582 {
583 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">
584 <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"/>
585 </svg>';
586 }
587
588
589 // Upgrade to Pro Notice
590 public static function adminify_upgrade_pro_img_notice( $image ){
591 return '<div class="adminify-pro-notice"><img src="' . esc_url_raw($image ) . '" /></div>';
592 }
593
594 // Upgrade to Pro Notice Class
595 public static function upgrade_pro_class($classname = '')
596 {
597 if(empty($classname)){
598 // return ' adminify-depend-visible adminify-depend-on adminify-pro-notice ';
599 return ' adminify-pro-feature adminify-pro-notice';
600 } else {
601 echo esc_attr($classname);
602 }
603 }
604
605 // Upgrade to Pro Notice
606 public static function adminify_upgrade_pro($custom_message = '', $style='')
607 {
608
609 if (empty($custom_message)) {
610 $pro_content = sprintf(__('<strong>(Upgrade to Pro)</strong>', 'adminify'));
611 } else {
612 $pro_content = $custom_message;
613 }
614
615 if($style === 'inline'){
616 return '<strong style="font-size:16px;">' . $pro_content . '</strong>';
617 }
618
619 $upgrade_notice_msg = sprintf(
620 __('<div class="adminify-pro-notice"> %1$s %2$s </div>', 'adminify'),
621 self::jltwp_adminify_upgrade_pro_icon(),
622 self::wp_kses_custom($pro_content)
623 );
624 return self::wp_kses_custom($upgrade_notice_msg);
625 }
626
627
628
629 /**
630 * Documentation SVG Icon
631 */
632 public static function docs_icon()
633 {
634 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">
635 <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"/>
636 </svg>';
637 }
638 /**
639 * Video Tutorials SVG Icon
640 */
641 public static function video_tutorials_icon()
642 {
643 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">
644 <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"/>
645 </svg>';
646 }
647
648 /**
649 * Facebook Group SVG Icon
650 */
651 public static function fbgroup_icon()
652 {
653 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">
654 <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"/>
655 </svg>';
656 }
657
658 /**
659 * Support SVG Icon
660 */
661 public static function support_icon()
662 {
663 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">
664 <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"/>
665 </svg>';
666 }
667
668 /* White Label Upgrade Pro */
669 public static function jltwp_adminify_white_label_upgrade()
670 {
671 ?>
672 <div class="wp-adminify-white-label-notice-content">
673 <div class="wp-adminify-white-label-notice-logo">
674 <img src="<?php echo esc_url(WP_ADMINIFY_ASSETS_IMAGE) . 'logos/logo-text-light.svg'; ?>" alt="<?php echo esc_attr(WP_ADMINIFY); ?>">
675 </div>
676 <h2>
677 <?php echo sprintf(__('Upgrade <span>Pro</span> for White Labeling', 'adminify')); ?>
678 </h2>
679 <p>
680 <?php
681 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));
682 ?>
683 <br>
684 <em><?php esc_html_e('Note: Agency or Higher Plans Only', 'adminify'); ?></em>
685 </p>
686 <a class="wp-adminify-btn wp-adminify-get-pro" href="<?php echo esc_url('https://wpadminify.com/pricing/'); ?>" target="_blank">
687 <?php esc_html_e('Upgrade Now', 'adminify'); ?>
688 </a>
689 </div>
690 <?php
691 }
692
693
694 public static function get_widget_template_options()
695 {
696 $type = 'widget';
697 $page_templates = self::jltwp_adminify_get_page_templates($type);
698
699 $options[-1] = __('Select', 'adminify');
700
701 if (count($page_templates)) {
702 foreach ($page_templates as $id => $name) {
703 $options[$id] = $name;
704 }
705 } else {
706 $options['no_template'] = __('No saved templates found!', 'adminify');
707 }
708
709 return $options;
710 }
711
712 public static function get_section_template_options()
713 {
714 $type = 'section';
715 $page_templates = self::jltwp_adminify_get_page_templates($type);
716
717 $options[-1] = __('Select', 'adminify');
718
719 if (count($page_templates)) {
720 foreach ($page_templates as $id => $name) {
721 $options[$id] = $name;
722 }
723 } else {
724 $options['no_template'] = __('No saved templates found!', 'adminify');
725 }
726
727 return $options;
728 }
729
730 public static function get_page_template_options()
731 {
732 $type = 'page';
733 $page_templates = self::jltwp_adminify_get_page_templates($type);
734
735 $options[-1] = __('Select', 'adminify');
736
737 if (count($page_templates)) {
738 foreach ($page_templates as $id => $name) {
739 $options[$id] = $name;
740 }
741 } else {
742 $options['no_template'] = __('No saved templates found!', 'adminify');
743 }
744
745 return $options;
746 }
747
748 public static function get_theme_presets($theme = null)
749 {
750
751 $common_var = [
752 '--adminify-menu-vertical-padding' => '10px',
753 '--adminify-menu-horizontal-padding' => '8px',
754 '--adminify-menu-wrapper-padding-top' => '16px',
755 '--adminify-menu-wrapper-padding-right' => '8px',
756 '--adminify-menu-wrapper-padding-bottom' => '16px',
757 '--adminify-menu-wrapper-padding-left' => '8px',
758 '--adminify-submenu-vertical-padding' => '4px',
759 '--adminify-submenu-wrapper-padding-top' => '8px',
760 '--adminify-submenu-wrapper-padding-right' => '0px',
761 '--adminify-submenu-wrapper-padding-bottom' => '8px',
762 '--adminify-submenu-wrapper-padding-left' => '28px',
763 // '--adminify-menu-text-align' => 'left',
764 // '--adminify-menu-text-transform' => '',
765 // '--adminify-menu-text-decoration' => 'none',
766 '--adminify-menu-font-size' => '13px',
767 '--adminify-menu-line-height' => '20px',
768 '--adminify-menu-letter-spacing' => '',
769 '--adminify-menu-width' => '260px'
770 ];
771
772 $presets = [
773
774 // Base/ Default Preset
775 'preset1' => [
776 '--adminify-preset-background' => '#F9F9F9',
777 '--adminify-primary' => '#3a3ae9',
778 // '--adminify-text-color' => '#ffffff',
779 '--adminify-menu-border' => '#dedee7',
780 '--adminify-menu-bg' => '#ffffff',
781 '--adminify-menu-hover-bg' => '#3a3ae9',
782 '--adminify-menu-text-color' => '#48455f',
783 '--adminify-menu-text-hover-color' => '#ffffff',
784 '--adminify-menu-active-bg' => '#3a3ae9',
785 '--adminify-menu-active-color' => '#ffffff',
786 '--adminify-submenu-wrapper-bg' => '#ffffff',
787 '--adminify-submenu-hover-bg' => 'transparent',
788 '--adminify-submenu-text-color' => '#48455f',
789 '--adminify-submenu-text-hover-color' => '#3a3ae9',
790 '--adminify-submenu-active-bg' => 'transparent',
791 '--adminify-submenu-active-color' => '#3a3ae9',
792 '--adminify-notif-bg-color' => '#3a3ae9',
793 '--adminify-notif-color' => '#ffffff',
794 ],
795
796 'preset2' => [
797 '--adminify-preset-background' => '#F9F9F9',
798 '--adminify-primary' => '#0347FF',
799 '--adminify-notif-bg-color' => '#FF1C69',
800 // '--adminify-text-color' => '#ffffff',
801 '--adminify-menu-border' => '#404052',
802 '--adminify-menu-bg' => '#14142B',
803 '--adminify-menu-hover-bg' => '#0347FF',
804 '--adminify-menu-text-color' => '#ffffff',
805 '--adminify-menu-text-hover-color' => '#ffffff',
806 '--adminify-menu-active-bg' => '#0347FF',
807 '--adminify-menu-active-color' => '#ffffff',
808 '--adminify-submenu-wrapper-bg' => '#14142B',
809 '--adminify-submenu-hover-bg' => 'transparent',
810 '--adminify-submenu-text-color' => '#ffffff',
811 '--adminify-submenu-text-hover-color' => '#0347FF',
812 '--adminify-submenu-active-bg' => 'transparent',
813 '--adminify-submenu-active-color' => '#0347FF',
814 '--adminify-notif-bg-color' => '#0347FF',
815 '--adminify-notif-color' => '#ffffff',
816 ],
817 ];
818
819 $pro_presets = apply_filters('adminify_settings/color_presets', $common_var);
820
821 if( !empty(array_key_exists('preset3', $pro_presets)) ) {
822 $presets = array_merge($presets, $pro_presets);
823 }
824
825 // Merge $common_var variable with every preset
826 foreach ($presets as $key => $value) {
827 $presets[$key] = array_merge($value, $common_var);
828 }
829
830 // return all presets
831 if (is_null($theme)) {
832 return $presets;
833 }
834
835 // return specific preset
836 if (array_key_exists($theme, $presets)) {
837 return $presets[$theme];
838 }
839
840 // specific preset not found
841 return [];
842 }
843
844 public static function jltwp_adminify_get_page_templates($type = '')
845 {
846 $args = [
847 'post_type' => 'elementor_library',
848 'posts_per_page' => -1,
849 ];
850
851 if ($type) {
852 $args['tax_query'] = [
853 [
854 'taxonomy' => 'elementor_library_type',
855 'field' => 'slug',
856 'terms' => $type,
857 ],
858 ];
859 }
860
861 $page_templates = get_posts($args);
862
863 $options = [];
864
865 if (!empty($page_templates) && !is_wp_error($page_templates)) {
866 foreach ($page_templates as $post) {
867 $options[$post->ID] = $post->post_title;
868 }
869 }
870 return $options;
871 }
872
873 public static function assets_ext($ext)
874 {
875 if (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) {
876 return $ext;
877 }
878 return '.min' . $ext;
879 }
880
881 public static function wp_kses_atts_map(array $attrs)
882 {
883 return array_fill_keys(array_values($attrs), true);
884 }
885
886 public static function wp_kses_custom($content)
887 {
888 $allowed_tags = wp_kses_allowed_html('post');
889
890 $custom_tags = [
891 'select' => self::wp_kses_atts_map(['class', 'id', 'style', 'width', 'height', 'title', 'data', 'name', 'autofocus', 'disabled', 'multiple', 'required', 'size']),
892 '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']),
893 'textarea' => self::wp_kses_atts_map(['class', 'id', 'style', 'width', 'height', 'title', 'data', 'name', 'autofocus', 'disabled', 'required', 'rows', 'cols', 'wrap', 'maxlength']),
894 'option' => self::wp_kses_atts_map(['class', 'id', 'label', 'disabled', 'label', 'selected', 'value']),
895 'optgroup' => self::wp_kses_atts_map(['disabled', 'label', 'class', 'id']),
896 'form' => self::wp_kses_atts_map(['class', 'id', 'data', 'style', 'width', 'height', 'accept-charset', 'action', 'autocomplete', 'enctype', 'method', 'name', 'novalidate', 'rel', 'target']),
897 'svg' => self::wp_kses_atts_map(['class', 'xmlns', 'viewbox', 'width', 'height', 'fill', 'aria-hidden', 'aria-labelledby', 'role']),
898 'rect' => self::wp_kses_atts_map(['rx', 'width', 'height', 'fill']),
899 'path' => self::wp_kses_atts_map(['d', 'fill']),
900 'g' => self::wp_kses_atts_map(['fill']),
901 'defs' => self::wp_kses_atts_map(['fill']),
902 'linearGradient' => self::wp_kses_atts_map(['id', 'x1', 'x2', 'y1', 'y2', 'gradientUnits']),
903 'stop' => self::wp_kses_atts_map(['stop-color', 'offset', 'stop-opacity']),
904 'style' => self::wp_kses_atts_map(['type']),
905 'div' => self::wp_kses_atts_map(['class', 'id', 'style']),
906 'ul' => self::wp_kses_atts_map(['class', 'id', 'style']),
907 'li' => self::wp_kses_atts_map(['class', 'id', 'style']),
908 'label' => self::wp_kses_atts_map(['class', 'for']),
909 'span' => self::wp_kses_atts_map(['class', 'id', 'style']),
910 'h1' => self::wp_kses_atts_map(['class', 'id', 'style']),
911 'h2' => self::wp_kses_atts_map(['class', 'id', 'style']),
912 'h3' => self::wp_kses_atts_map(['class', 'id', 'style']),
913 'h4' => self::wp_kses_atts_map(['class', 'id', 'style']),
914 'h5' => self::wp_kses_atts_map(['class', 'id', 'style']),
915 'h6' => self::wp_kses_atts_map(['class', 'id', 'style']),
916 'a' => self::wp_kses_atts_map(['class', 'href', 'target', 'rel']),
917 'p' => self::wp_kses_atts_map(['class', 'id', 'style', 'data']),
918 'table' => self::wp_kses_atts_map(['class', 'id', 'style']),
919 'thead' => self::wp_kses_atts_map(['class', 'id', 'style']),
920 'tbody' => self::wp_kses_atts_map(['class', 'id', 'style']),
921 'tr' => self::wp_kses_atts_map(['class', 'id', 'style']),
922 'th' => self::wp_kses_atts_map(['class', 'id', 'style']),
923 'td' => self::wp_kses_atts_map(['class', 'id', 'style']),
924 'i' => self::wp_kses_atts_map(['class', 'id', 'style']),
925 'button' => self::wp_kses_atts_map(['class', 'id']),
926 'nav' => self::wp_kses_atts_map(['class', 'id', 'style']),
927 'time' => self::wp_kses_atts_map(['datetime']),
928 'br' => [],
929 'strong' => [],
930 'style' => [],
931 'img' => self::wp_kses_atts_map(['class', 'src', 'alt', 'height', 'width', 'srcset', 'id', 'loading']),
932 ];
933
934 $allowed_tags = array_merge_recursive($allowed_tags, $custom_tags);
935
936 return wp_kses(stripslashes_deep($content), $allowed_tags);
937 }
938
939
940 /**
941 * Missing Addon/Plugin Notice
942 *
943 * @param [type] $args
944 *
945 * @return void
946 */
947 public static function missing_plugin_notice( $plugin_name = '' )
948 {
949 /* translators: %s: Plugin Name */
950 $missing_plugin_notice = sprintf(
951 __('<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'),
952 esc_html($plugin_name),
953 admin_url('admin.php?page=wp-adminify-addons-plugins'),
954 __('Install Now', 'adminify')
955 );
956 return '<div class="adminify-missing-addons">' . self::jltwp_adminify_upgrade_pro_icon() . self::wp_kses_custom( $missing_plugin_notice ) . '</div>';
957 }
958
959
960 /**
961 * Update Existing Data to New Options data
962 *
963 * @param [type] $get_option_value
964 * @param [type] $update_option_value
965 * @param [type] $option_name
966 *
967 * @return void
968 */
969 public static function update_options($get_option_value, $option_name)
970 {
971
972 // Retrieve the current option value
973 $current_value = get_option($option_name);
974 // $current_value = self::$option_data;
975 // Initialize the current value if it's empty
976 if (empty($current_value)) {
977 $current_value = [];
978 }
979 // If $get_option_value is provided, use it to update the current value
980 if (!empty($get_option_value)) {
981 // Ensure current value is an array before merging
982 if (!is_array($current_value)) {
983 $current_value = [];
984 }
985 // Merge the provided value into the current value
986 $current_value = array_merge($current_value, $get_option_value);
987 }
988 // Update the specific key within the option with the new value
989 // $current_value[$option_key] = $update_option_value;
990
991 // Update the option with the new value
992 update_option($option_name, $current_value);
993 // Optionally, return the updated value
994 return get_option($option_name);
995 }
996
997
998 /**
999 * Replace Array Keys
1000 *
1001 * @return void
1002 */
1003 public static function replace_keys($sourceArray, $newArray){
1004 $new_value = [];
1005 foreach ($newArray as $key => $value) {
1006 if (!array_key_exists($key, $sourceArray)) {
1007 return $sourceArray;
1008 }
1009 $new_value[$value] = $sourceArray[$key];
1010 unset($sourceArray[$key]);
1011 }
1012 return array_merge($sourceArray, $new_value);
1013 }
1014
1015
1016 /**
1017 * Move Array Keys
1018 *
1019 * @return void
1020 */
1021 public static function move_keys(&$sourceArray, $keysToMove)
1022 {
1023 $destinationArray = [];
1024 foreach ($keysToMove as $key) {
1025 if (array_key_exists($key, $sourceArray)) {
1026 $destinationArray[$key] = $sourceArray[$key];
1027 unset($sourceArray[$key]);
1028 }
1029 }
1030 return $destinationArray;
1031 }
1032
1033
1034 /**
1035 * Remove unnecessary keys.
1036 *
1037 * @param string $option_name The name of the option.
1038 * @param array $keys_to_remove An array of keys to remove.
1039 */
1040 public static function removeKeys($sourceArray, $keysToRemove)
1041 {
1042 foreach ($keysToRemove as $key) {
1043 if (array_key_exists($key, $sourceArray)) {
1044 unset($sourceArray[$key]);
1045 }
1046 }
1047 return $sourceArray;
1048 }
1049
1050
1051
1052 /**
1053 * Move Nested Keys
1054 *
1055 * @return void
1056 */
1057 public static function moveNestedKeys(&$sourceArray, $moveInstructions) {
1058 $destinationArray = [];
1059 foreach ($moveInstructions as $sourcePath => $destPath) {
1060 $sourcePathArray = explode('.', $sourcePath);
1061 $destPathArray = explode('.', $destPath);
1062 $sourceValue = self::getNestedValue($sourceArray, $sourcePathArray);
1063 if ($sourceValue !== null) {
1064 self::setNestedValue($destinationArray, $destPathArray, $sourceValue);
1065 self::unsetNestedValue($sourceArray, $sourcePathArray);
1066 }
1067 }
1068
1069 return array_merge_recursive($sourceArray, $destinationArray);
1070 }
1071
1072 public static function getNestedValue(&$array, $pathArray) {
1073 $value = &$array;
1074 foreach ($pathArray as $key) {
1075 if (is_array($value) && array_key_exists($key, $value)) {
1076 $value = &$value[$key];
1077 } else {
1078 return null;
1079 }
1080 }
1081 return $value;
1082 }
1083
1084 public static function setNestedValue(&$array, $pathArray, $value) {
1085 $temp = &$array;
1086 foreach ($pathArray as $key) {
1087 if (!isset($temp[$key])) {
1088 $temp[$key] = [];
1089 }
1090 $temp = &$temp[$key];
1091 }
1092 $temp = $value;
1093 }
1094
1095 public static function unsetNestedValue(&$array, $pathArray) {
1096 $temp = &$array;
1097 foreach ($pathArray as $key) {
1098 if (isset($temp[$key])) {
1099 if (count($pathArray) === 1) {
1100 unset($temp[$key]);
1101 } else {
1102 self::unsetNestedValue($temp[$key], array_slice($pathArray, 1));
1103 }
1104 return;
1105 }
1106 }
1107 }
1108
1109
1110
1111 /**
1112 *
1113 * Checkbox Method
1114 */
1115 public static function checkboxes(&$old_db, $checkbox_keys) {
1116 $result = [];
1117 $parentKey = "";
1118 $childKey = "";
1119
1120 $thirdStep = [];
1121
1122 foreach ($checkbox_keys as $key => $value) {
1123
1124 $sourceArray = explode(".", $value);
1125
1126 foreach ($sourceArray as $x => $element) {
1127 if (!array_key_exists($element, $result) && $x === 0) {
1128 $parentKey = $element;
1129 if (count($sourceArray) === 3) {
1130 $result[$element] = [];
1131 } else {
1132 $result[$element] = [];
1133 }
1134 }
1135
1136
1137 if ($x === 1 && !empty($old_db[$key])) {
1138 $childKey = $element;
1139 if (count($sourceArray) === 3) {
1140 $result[$parentKey][$element] = [];
1141 } else {
1142 $result[$parentKey][] = $element;
1143 }
1144 } elseif ($x === 1 && empty($old_db[$key]) && count($sourceArray) === 3) {
1145 $childKey = $element;
1146 if (!array_key_exists($element, $result[$parentKey])) {
1147 $result[$parentKey][$element] = [];
1148 }
1149 }
1150
1151 if ($x === 2 && !empty($old_db[$key]) && count($sourceArray) === 3) {
1152 $thirdStep[] = $element;
1153 $result[$parentKey][$childKey] = $thirdStep;
1154 }
1155 }
1156 }
1157
1158 return array_merge_recursive($old_db, $result);
1159 }
1160
1161 public static function adminify_upgrade_pro_class($inline_badge=false){
1162 if(!empty($inline_badge)){
1163 return '<span class="adminify-pro-checkbox adminify-pro-badge adminify-pro-notice">Pro</span>';
1164 }
1165 return '<span class="adminify-pro-checkbox">' . self::jltwp_adminify_upgrade_pro_icon() . ' <strong>(Upgrade to Pro)</strong>' . '</span>';
1166 }
1167
1168 public static function adminify_upgrade_pro_badge($badge_text = 'Pro'){
1169 if(!empty($badge_text)){
1170 return '<span class="adminify-pro-badge">' . $badge_text . '</span>';
1171 }
1172 }
1173
1174 /*
1175 * Compares the version of WordPress running to the $version specified.
1176 * Usage: Utils::check_wp_version('>=', '4.0')
1177 version_compare( $wp_version, '4.3', '>=' )
1178 * @param string $operator
1179 * @param string $version
1180 * @returns boolean
1181 */
1182 public static function check_wp_version( $operator = '>', $version = '6.6' ) {
1183 global $wp_version;
1184 return version_compare( $wp_version, $version, $operator );
1185 }
1186
1187 }
1188