| @@ -1,8 +1,10 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | -namespace PXLBSAdminify\Inc; | |
| 3 | +namespace WPAdminify\Inc; | |
| 4 | 4 | |
| 5 | +use ReturnTypeWillChange; | |
| 6 | +use WPAdminify\Inc\Classes\Helper; | |
| 5 | 7 | // no direct access allowed |
| 6 | 8 | if (!defined('ABSPATH')) { |
| 7 | 9 | exit; |
| 8 | 10 | } |
| @@ -53,15 +55,10 @@ | ||
| 53 | 55 | if (empty($disabled_for)) { |
| 54 | 56 | return false; |
| 55 | 57 | } |
| 56 | 58 | |
| 57 | - // wp_get_current_user() lives in wp-includes/pluggable.php and is | |
| 58 | - // always available in normal plugin execution. If it is somehow | |
| 59 | - // unavailable (e.g. very early bootstrap), bail out instead of | |
| 60 | - // manually loading core files, which is disallowed by the | |
| 61 | - // WordPress.org plugin guidelines. | |
| 62 | 59 | if (!function_exists('wp_get_current_user')) { |
| 63 | - return false; | |
| 60 | + include ABSPATH . 'wp-includes/pluggable.php'; | |
| 64 | 61 | } |
| 65 | 62 | |
| 66 | 63 | $restrict_for = array(); |
| 67 | 64 | |
| @@ -160,12 +157,10 @@ | ||
| 160 | 157 | if (!is_array($disabled_for)) { |
| 161 | 158 | return false; |
| 162 | 159 | } |
| 163 | 160 | |
| 164 | - // wp_get_current_user() is provided by wp-includes/pluggable.php and | |
| 165 | - // is loaded by core early in normal plugin execution. Manually | |
| 166 | - // loading core files is disallowed by the plugin guidelines, so we | |
| 167 | - // simply bail out if it is unavailable for any reason. | |
| 161 | + require_once ABSPATH . '/wp-includes/pluggable.php'; | |
| 162 | + | |
| 168 | 163 | if (!function_exists('wp_get_current_user')) { |
| 169 | 164 | return false; |
| 170 | 165 | } |
| 171 | 166 | |
| @@ -227,9 +222,9 @@ | ||
| 227 | 222 | } |
| 228 | 223 | |
| 229 | 224 | |
| 230 | 225 | // verfiy current page id |
| 231 | - public static function currentpage_id($id) | |
| 226 | + public static function jltwp_adminify_currentpage_id($id) | |
| 232 | 227 | { |
| 233 | 228 | if (!function_exists('get_current_screen')) { |
| 234 | 229 | return true; |
| 235 | 230 | } |
| @@ -246,14 +241,14 @@ | ||
| 246 | 241 | * @return void |
| 247 | 242 | */ |
| 248 | 243 | public static function admin_page_title($title = '') |
| 249 | 244 | { |
| 250 | - $title = isset($title) && !empty($title) ? $title : PXLBSADMINIFY; | |
| 245 | + $title = isset($title) && !empty($title) ? $title : WP_ADMINIFY; | |
| 251 | 246 | echo esc_html($title); |
| 252 | 247 | |
| 253 | 248 | if (is_multisite()) { |
| 254 | 249 | $text = ' | ' . esc_html__('Current Blog ID', 'adminify') . ': ' . get_current_blog_id(); ?> |
| 255 | - <?php echo self::kses_custom(self::admin_page_subtitle($text)); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- kses_custom() is a wp_kses() wrapper; output already escaped. ?> | |
| 250 | + <?php echo self::wp_kses_custom(self::admin_page_subtitle($text)); ?> | |
| 256 | 251 | <?php } ?> |
| 257 | 252 | <?php |
| 258 | 253 | } |
| 259 | 254 | |
| @@ -280,9 +275,9 @@ | ||
| 280 | 275 | $class = str_replace([' ', ',', '.', '"', "'", '/', '\\', '+', '=', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', '`', '<', '>', '?', '[', ']', '{', '}', '|', ':'], '', $name); |
| 281 | 276 | return $class; |
| 282 | 277 | } |
| 283 | 278 | |
| 284 | - public static function class_cleanup($string) | |
| 279 | + public static function jltwp_adminify_class_cleanup($string) | |
| 285 | 280 | { |
| 286 | 281 | // Lower case everything |
| 287 | 282 | $string = strtolower($string); |
| 288 | 283 | // Make alphanumeric (removes all other characters) |
| @@ -356,11 +351,9 @@ | ||
| 356 | 351 | * @return boolean |
| 357 | 352 | */ |
| 358 | 353 | public static function is_plugin_active( $plugin_path ) |
| 359 | 354 | { |
| 360 | - if (!function_exists('is_plugin_active')) { | |
| 361 | - require_once ABSPATH . 'wp-admin/includes/plugin.php'; | |
| 362 | - } | |
| 355 | + include_once ABSPATH . 'wp-admin/includes/plugin.php'; | |
| 363 | 356 | return is_plugin_active( $plugin_path ); |
| 364 | 357 | } |
| 365 | 358 | |
| 366 | 359 | /** |
| @@ -400,9 +393,9 @@ | ||
| 400 | 393 | $installed_plugins = get_plugins(); |
| 401 | 394 | return isset($installed_plugins[$plugin_file]); |
| 402 | 395 | } |
| 403 | 396 | |
| 404 | - public static function notification_bar() | |
| 397 | + public static function jltwp_adminify_notification_bar() | |
| 405 | 398 | { |
| 406 | 399 | $plugin_slug = 'adminify-notification-bar'; |
| 407 | 400 | $plugin_file = 'adminify-notification-bar/adminify-notification-bar.php'; |
| 408 | 401 | $addons_page_url = network_admin_url('admin.php?page=wp-adminify-settings-addons'); |
| @@ -447,9 +440,9 @@ | ||
| 447 | 440 | |
| 448 | 441 | public static function get_user_preference($key) |
| 449 | 442 | { |
| 450 | 443 | $userid = get_current_user_id(); |
| 451 | - $current = get_user_meta($userid, 'pxlbsadminify_preferences', true); | |
| 444 | + $current = get_user_meta($userid, '_wpadminify_preferences', true); | |
| 452 | 445 | $value = false; |
| 453 | 446 | |
| 454 | 447 | if (is_array($current)) { |
| 455 | 448 | if (isset($current[$key])) { |
| @@ -472,13 +465,13 @@ | ||
| 472 | 465 | foreach ($values as $index => $in) { |
| 473 | 466 | if (is_array($in)) { |
| 474 | 467 | $values[$index] = self::clean_ajax_input($in); |
| 475 | 468 | } else { |
| 476 | - $values[$index] = wp_strip_all_tags($in); | |
| 469 | + $values[$index] = strip_tags($in); | |
| 477 | 470 | } |
| 478 | 471 | } |
| 479 | 472 | } else { |
| 480 | - $values = wp_strip_all_tags($values); | |
| 473 | + $values = strip_tags($values); | |
| 481 | 474 | } |
| 482 | 475 | |
| 483 | 476 | return $values; |
| 484 | 477 | } |
| @@ -494,9 +487,9 @@ | ||
| 494 | 487 | { |
| 495 | 488 | $returndata = []; |
| 496 | 489 | $returndata['error'] = true; |
| 497 | 490 | $returndata['error_message'] = $message; |
| 498 | - return wp_json_encode($returndata); | |
| 491 | + return json_encode($returndata); | |
| 499 | 492 | } |
| 500 | 493 | |
| 501 | 494 | /** |
| 502 | 495 | * Get All Updates |
| @@ -551,11 +544,11 @@ | ||
| 551 | 544 | |
| 552 | 545 | /** |
| 553 | 546 | * Upgrade Pro Icon |
| 554 | 547 | * |
| 555 | - * @return string | |
| 548 | + * @return void | |
| 556 | 549 | */ |
| 557 | - public static function upgrade_pro_icon() | |
| 550 | + public static function jltwp_adminify_upgrade_pro_icon() | |
| 558 | 551 | { |
| 559 | 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"> |
| 560 | 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"/> |
| 561 | 554 | </svg>'; |
| @@ -562,29 +555,29 @@ | ||
| 562 | 555 | } |
| 563 | 556 | |
| 564 | 557 | |
| 565 | 558 | // Upgrade to Pro Notice |
| 566 | - public static function upgrade_pro_img_notice( $image ){ | |
| 559 | + public static function adminify_upgrade_pro_img_notice( $image ){ | |
| 567 | 560 | return '<div class="adminify-pro-notice"><img src="' . esc_url_raw($image ) . '" /></div>'; |
| 568 | 561 | } |
| 569 | 562 | |
| 570 | 563 | // Upgrade to Pro Notice Class |
| 571 | - public static function upgrade_pro_notice_class($notice = '') | |
| 564 | + public static function upgrade_pro_class($classname = '') | |
| 572 | 565 | { |
| 573 | - if(empty($notice)){ | |
| 566 | + if(empty($classname)){ | |
| 574 | 567 | // return ' adminify-depend-visible adminify-depend-on adminify-pro-notice '; |
| 575 | 568 | return ' adminify-pro-feature adminify-pro-notice'; |
| 576 | 569 | } else { |
| 577 | - echo esc_attr($notice); | |
| 570 | + echo esc_attr($classname); | |
| 578 | 571 | } |
| 579 | 572 | } |
| 580 | 573 | |
| 581 | 574 | // Upgrade to Pro Notice |
| 582 | - public static function upgrade_pro_notice($custom_message = '', $style='') | |
| 575 | + public static function adminify_upgrade_pro($custom_message = '', $style='') | |
| 583 | 576 | { |
| 584 | 577 | |
| 585 | 578 | if (empty($custom_message)) { |
| 586 | - $pro_content = '<strong>' . __('(Upgrade to Pro)', 'adminify') . '</strong>'; | |
| 579 | + $pro_content = sprintf(__('<strong>(Upgrade to Pro)</strong>', 'adminify')); | |
| 587 | 580 | } else { |
| 588 | 581 | $pro_content = $custom_message; |
| 589 | 582 | } |
| 590 | 583 | |
| @@ -592,13 +585,13 @@ | ||
| 592 | 585 | return '<strong style="font-size:16px;">' . $pro_content . '</strong>'; |
| 593 | 586 | } |
| 594 | 587 | |
| 595 | 588 | $upgrade_notice_msg = sprintf( |
| 596 | - '<div class="adminify-pro-notice adminify-missing-addons"> %1$s %2$s </div>', | |
| 597 | - self::upgrade_pro_icon(), | |
| 598 | - self::kses_custom($pro_content) | |
| 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) | |
| 599 | 592 | ); |
| 600 | - return self::kses_custom($upgrade_notice_msg); | |
| 593 | + return self::wp_kses_custom($upgrade_notice_msg); | |
| 601 | 594 | } |
| 602 | 595 | |
| 603 | 596 | |
| 604 | 597 | |
| @@ -641,22 +634,21 @@ | ||
| 641 | 634 | </svg>'; |
| 642 | 635 | } |
| 643 | 636 | |
| 644 | 637 | /* White Label Upgrade Pro */ |
| 645 | - public static function white_label_upgrade() | |
| 638 | + public static function jltwp_adminify_white_label_upgrade() | |
| 646 | 639 | { |
| 647 | 640 | ?> |
| 648 | 641 | <div class="wp-adminify-white-label-notice-content"> |
| 649 | 642 | <div class="wp-adminify-white-label-notice-logo"> |
| 650 | - <img src="<?php echo esc_url(PXLBSADMINIFY_ASSETS_IMAGE) . 'logos/logo-text-light.svg'; ?>" alt="<?php echo esc_attr(PXLBSADMINIFY); ?>"> | |
| 643 | + <img src="<?php echo esc_url(WP_ADMINIFY_ASSETS_IMAGE) . 'logos/logo-text-light.svg'; ?>" alt="<?php echo esc_attr(WP_ADMINIFY); ?>"> | |
| 651 | 644 | </div> |
| 652 | 645 | <h2> |
| 653 | - <?php echo wp_kses_post( sprintf(__('Upgrade <span>Pro</span> for White Labeling', 'adminify')) ); ?> | |
| 646 | + <?php echo sprintf(__('Upgrade <span>Pro</span> for White Labeling', 'adminify')); ?> | |
| 654 | 647 | </h2> |
| 655 | 648 | <p> |
| 656 | 649 | <?php |
| 657 | - /* translators: %s: Plugin name */ | |
| 658 | - echo wp_kses_post( 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(PXLBSADMINIFY)) ); | |
| 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)); | |
| 659 | 651 | ?> |
| 660 | 652 | <br> |
| 661 | 653 | <em><?php esc_html_e('Note: Agency or Higher Plans Only', 'adminify'); ?></em> |
| 662 | 654 | </p> |
| @@ -670,9 +662,9 @@ | ||
| 670 | 662 | |
| 671 | 663 | public static function get_widget_template_options() |
| 672 | 664 | { |
| 673 | 665 | $type = 'widget'; |
| 674 | - $page_templates = self::get_page_templates($type); | |
| 666 | + $page_templates = self::jltwp_adminify_get_page_templates($type); | |
| 675 | 667 | |
| 676 | 668 | $options[-1] = __('Select', 'adminify'); |
| 677 | 669 | |
| 678 | 670 | if (count($page_templates)) { |
| @@ -688,9 +680,9 @@ | ||
| 688 | 680 | |
| 689 | 681 | public static function get_section_template_options() |
| 690 | 682 | { |
| 691 | 683 | $type = 'section'; |
| 692 | - $page_templates = self::get_page_templates($type); | |
| 684 | + $page_templates = self::jltwp_adminify_get_page_templates($type); | |
| 693 | 685 | |
| 694 | 686 | $options[-1] = __('Select', 'adminify'); |
| 695 | 687 | |
| 696 | 688 | if (count($page_templates)) { |
| @@ -706,9 +698,9 @@ | ||
| 706 | 698 | |
| 707 | 699 | public static function get_page_template_options() |
| 708 | 700 | { |
| 709 | 701 | $type = 'page'; |
| 710 | - $page_templates = self::get_page_templates($type); | |
| 702 | + $page_templates = self::jltwp_adminify_get_page_templates($type); | |
| 711 | 703 | |
| 712 | 704 | $options[-1] = __('Select', 'adminify'); |
| 713 | 705 | |
| 714 | 706 | if (count($page_templates)) { |
| @@ -721,22 +713,14 @@ | ||
| 721 | 713 | |
| 722 | 714 | return $options; |
| 723 | 715 | } |
| 724 | 716 | |
| 725 | - /** | |
| 726 | - * Common preset CSS variables (padding / sizing / typography | |
| 727 | - * defaults) shared by every theme preset and by the Pro | |
| 728 | - * custom-color preset path. Extracted so the Pro filter | |
| 729 | - * (Pro/Classes/OutputCSS_Body_Pro::build_custom_color_preset()) | |
| 730 | - * can reuse the same defaults instead of re-declaring them. | |
| 731 | - * | |
| 732 | - * @return array<string,string> | |
| 733 | - */ | |
| 734 | - public static function get_common_preset_vars() | |
| 717 | + public static function get_theme_presets($theme = null) | |
| 735 | 718 | { |
| 736 | - return [ | |
| 719 | + | |
| 720 | + $common_var = [ | |
| 737 | 721 | '--adminify-menu-vertical-padding' => '10px', |
| 738 | - '--adminify-menu-horizontal-padding' => '8px', | |
| 722 | + '--adminify-menu-horizontal-padding' => '8px', | |
| 739 | 723 | '--adminify-menu-wrapper-padding-top' => '16px', |
| 740 | 724 | '--adminify-menu-wrapper-padding-right' => '8px', |
| 741 | 725 | '--adminify-menu-wrapper-padding-bottom' => '16px', |
| 742 | 726 | '--adminify-menu-wrapper-padding-left' => '8px', |
| @@ -744,20 +728,17 @@ | ||
| 744 | 728 | '--adminify-submenu-wrapper-padding-top' => '8px', |
| 745 | 729 | '--adminify-submenu-wrapper-padding-right' => '0px', |
| 746 | 730 | '--adminify-submenu-wrapper-padding-bottom' => '8px', |
| 747 | 731 | '--adminify-submenu-wrapper-padding-left' => '28px', |
| 748 | - '--adminify-menu-font-size' => '13px', | |
| 749 | - '--adminify-menu-line-height' => '20px', | |
| 750 | - '--adminify-menu-letter-spacing' => '', | |
| 751 | - '--adminify-menu-width' => '260px', | |
| 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' | |
| 752 | 739 | ]; |
| 753 | - } | |
| 754 | 740 | |
| 755 | - public static function get_theme_presets($theme = null) | |
| 756 | - { | |
| 757 | - | |
| 758 | - $common_var = self::get_common_preset_vars(); | |
| 759 | - | |
| 760 | 741 | $presets = [ |
| 761 | 742 | |
| 762 | 743 | // Base/ Default Preset |
| 763 | 744 | 'preset1' => [ |
| @@ -803,9 +784,9 @@ | ||
| 803 | 784 | '--adminify-notif-color' => '#ffffff', |
| 804 | 785 | ], |
| 805 | 786 | ]; |
| 806 | 787 | |
| 807 | - $pro_presets = apply_filters('pxlbsadminify_settings/color_presets', $common_var); | |
| 788 | + $pro_presets = apply_filters('adminify_settings/color_presets', $common_var); | |
| 808 | 789 | |
| 809 | 790 | if( !empty(array_key_exists('preset3', $pro_presets)) ) { |
| 810 | 791 | $presets = array_merge($presets, $pro_presets); |
| 811 | 792 | } |
| @@ -824,14 +805,13 @@ | ||
| 824 | 805 | if (array_key_exists($theme, $presets)) { |
| 825 | 806 | return $presets[$theme]; |
| 826 | 807 | } |
| 827 | 808 | |
| 828 | - // specific preset not found (Pro-only/custom theme saved while Pro add-on inactive). | |
| 829 | - // Fall back to base preset so core CSS vars (--adminify-menu-width) always emit. | |
| 830 | - return isset($presets['preset1']) ? $presets['preset1'] : $common_var; | |
| 809 | + // specific preset not found | |
| 810 | + return []; | |
| 831 | 811 | } |
| 832 | 812 | |
| 833 | - public static function get_page_templates($type = '') | |
| 813 | + public static function jltwp_adminify_get_page_templates($type = '') | |
| 834 | 814 | { |
| 835 | 815 | $args = [ |
| 836 | 816 | 'post_type' => 'elementor_library', |
| 837 | 817 | 'posts_per_page' => -1, |
| @@ -837,9 +817,9 @@ | ||
| 837 | 817 | 'posts_per_page' => -1, |
| 838 | 818 | ]; |
| 839 | 819 | |
| 840 | 820 | if ($type) { |
| 841 | - $args['tax_query'] = [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query -- intentional taxonomy filter on an admin-side query. | |
| 821 | + $args['tax_query'] = [ | |
| 842 | 822 | [ |
| 843 | 823 | 'taxonomy' => 'elementor_library_type', |
| 844 | 824 | 'field' => 'slug', |
| 845 | 825 | 'terms' => $type, |
| @@ -866,112 +846,70 @@ | ||
| 866 | 846 | } |
| 867 | 847 | return '.min' . $ext; |
| 868 | 848 | } |
| 869 | 849 | |
| 870 | - public static function kses_atts_map(array $attrs) | |
| 850 | + public static function wp_kses_atts_map(array $attrs) | |
| 871 | 851 | { |
| 872 | 852 | return array_fill_keys(array_values($attrs), true); |
| 873 | 853 | } |
| 874 | 854 | |
| 875 | - /** | |
| 876 | - * Whether the site is served over HTTPS well enough to run the Adminify UI. | |
| 877 | - * | |
| 878 | - * Mirrors the exact condition that gates the dashboard frame in | |
| 879 | - * Inc/Admin/Admin.php ( is_ssl() + an https:// site URL ), so the AJAX | |
| 880 | - * gate behaviour stays consistent with where the UI actually loads. | |
| 881 | - * | |
| 882 | - * @return array{ready:bool,message:string} | |
| 883 | - */ | |
| 884 | - public static function adminify_ui_https_status() | |
| 855 | + public static function wp_kses_custom($content) | |
| 885 | 856 | { |
| 886 | - $is_ssl = is_ssl(); | |
| 887 | - $site_https = ( 0 === stripos( (string) site_url(), 'https://' ) ); | |
| 888 | - | |
| 889 | - if ( $is_ssl && $site_https ) { | |
| 890 | - return [ | |
| 891 | - 'ready' => true, | |
| 892 | - 'message' => '', | |
| 893 | - ]; | |
| 894 | - } | |
| 895 | - | |
| 896 | - if ( ! $site_https ) { | |
| 897 | - $message = esc_html__( 'Site URL is not HTTPS. Switch to HTTPS first.', 'adminify' ); | |
| 898 | - } else { | |
| 899 | - $message = esc_html__( 'Open the dashboard over HTTPS first.', 'adminify' ); | |
| 900 | - } | |
| 901 | - | |
| 902 | - return [ | |
| 903 | - 'ready' => false, | |
| 904 | - 'message' => $message, | |
| 905 | - ]; | |
| 906 | - } | |
| 907 | - | |
| 908 | - public static function kses_allowed_html() | |
| 909 | - { | |
| 910 | 857 | /** |
| 911 | - * 'post' returns the tags allowed in post content (a, p, strong, em, etc.), | |
| 912 | - * which we then extend with the custom tags below (svg, form fields, style). | |
| 913 | - * https://developer.wordpress.org/reference/functions/wp_kses_allowed_html/ | |
| 914 | - */ | |
| 915 | - $allowed_tags = wp_kses_allowed_html('post'); | |
| 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/ | |
| 916 | 863 | if( !is_array($allowed_tags) ) $allowed_tags = []; |
| 917 | 864 | |
| 918 | 865 | $custom_tags = [ |
| 919 | - 'select' => self::kses_atts_map(['class', 'id', 'style', 'width', 'height', 'title', 'data', 'name', 'autofocus', 'disabled', 'multiple', 'required', 'size']), | |
| 920 | - 'input' => self::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']), | |
| 921 | - 'textarea' => self::kses_atts_map(['class', 'id', 'style', 'width', 'height', 'title', 'data', 'name', 'autofocus', 'disabled', 'required', 'rows', 'cols', 'wrap', 'maxlength']), | |
| 922 | - 'option' => self::kses_atts_map(['class', 'id', 'label', 'disabled', 'label', 'selected', 'value']), | |
| 923 | - 'optgroup' => self::kses_atts_map(['disabled', 'label', 'class', 'id']), | |
| 924 | - 'form' => self::kses_atts_map(['class', 'id', 'data', 'style', 'width', 'height', 'accept-charset', 'action', 'autocomplete', 'enctype', 'method', 'name', 'novalidate', 'rel', 'target']), | |
| 925 | - 'svg' => self::kses_atts_map(['class', 'xmlns', 'viewbox', 'width', 'height', 'fill', 'stroke', 'aria-hidden', 'aria-labelledby', 'role']), | |
| 926 | - 'rect' => self::kses_atts_map(['rx', 'width', 'height', 'fill']), | |
| 927 | - 'path' => self::kses_atts_map(['d', 'fill', 'fill-rule', 'clip-rule', 'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin']), | |
| 928 | - 'g' => self::kses_atts_map(['fill']), | |
| 929 | - 'defs' => self::kses_atts_map(['fill']), | |
| 930 | - 'linearGradient' => self::kses_atts_map(['id', 'x1', 'x2', 'y1', 'y2', 'gradientUnits']), | |
| 931 | - 'stop' => self::kses_atts_map(['stop-color', 'offset', 'stop-opacity']), | |
| 932 | - 'style' => self::kses_atts_map(['type']), | |
| 933 | - 'div' => self::kses_atts_map(['class', 'id', 'style']), | |
| 934 | - 'ul' => self::kses_atts_map(['class', 'id', 'style']), | |
| 935 | - 'li' => self::kses_atts_map(['class', 'id', 'style']), | |
| 936 | - 'label' => self::kses_atts_map(['class', 'for']), | |
| 937 | - 'span' => self::kses_atts_map(['class', 'id', 'style']), | |
| 938 | - 'h1' => self::kses_atts_map(['class', 'id', 'style']), | |
| 939 | - 'h2' => self::kses_atts_map(['class', 'id', 'style']), | |
| 940 | - 'h3' => self::kses_atts_map(['class', 'id', 'style']), | |
| 941 | - 'h4' => self::kses_atts_map(['class', 'id', 'style']), | |
| 942 | - 'h5' => self::kses_atts_map(['class', 'id', 'style']), | |
| 943 | - 'h6' => self::kses_atts_map(['class', 'id', 'style']), | |
| 944 | - 'a' => self::kses_atts_map(['class', 'href', 'target', 'rel']), | |
| 945 | - 'p' => self::kses_atts_map(['class', 'id', 'style', 'data']), | |
| 946 | - 'table' => self::kses_atts_map(['class', 'id', 'style']), | |
| 947 | - 'thead' => self::kses_atts_map(['class', 'id', 'style']), | |
| 948 | - 'tbody' => self::kses_atts_map(['class', 'id', 'style']), | |
| 949 | - 'tr' => self::kses_atts_map(['class', 'id', 'style']), | |
| 950 | - 'th' => self::kses_atts_map(['class', 'id', 'style']), | |
| 951 | - 'td' => self::kses_atts_map(['class', 'id', 'style']), | |
| 952 | - 'i' => self::kses_atts_map(['class', 'id', 'style']), | |
| 953 | - 'button' => self::kses_atts_map(['class', 'id']), | |
| 954 | - 'nav' => self::kses_atts_map(['class', 'id', 'style']), | |
| 955 | - 'time' => self::kses_atts_map(['datetime']), | |
| 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']), | |
| 956 | 903 | 'br' => [], |
| 957 | 904 | 'strong' => [], |
| 958 | 905 | 'style' => [], |
| 959 | - 'img' => self::kses_atts_map(['class', 'src', 'alt', 'height', 'width', 'srcset', 'id', 'loading']), | |
| 906 | + 'img' => self::wp_kses_atts_map(['class', 'src', 'alt', 'height', 'width', 'srcset', 'id', 'loading']), | |
| 960 | 907 | ]; |
| 961 | 908 | |
| 962 | - return array_merge_recursive($allowed_tags, $custom_tags); | |
| 963 | - } | |
| 909 | + $allowed_tags = array_merge_recursive($allowed_tags, $custom_tags); | |
| 964 | 910 | |
| 965 | - /** | |
| 966 | - * Sanitize a string with wp_kses() using the extended allowed-tags list. | |
| 967 | - * | |
| 968 | - * @param string $content | |
| 969 | - * @return string | |
| 970 | - */ | |
| 971 | - public static function kses_custom($content) | |
| 972 | - { | |
| 973 | - return wp_kses( stripslashes_deep($content), self::kses_allowed_html() ); | |
| 911 | + return wp_kses(stripslashes_deep($content), $allowed_tags); | |
| 974 | 912 | } |
| 975 | 913 | |
| 976 | 914 | |
| 977 | 915 | /** |
| @@ -982,16 +920,16 @@ | ||
| 982 | 920 | * @return void |
| 983 | 921 | */ |
| 984 | 922 | public static function missing_plugin_notice( $plugin_name = '' ) |
| 985 | 923 | { |
| 924 | + /* translators: %s: Plugin Name */ | |
| 986 | 925 | $missing_plugin_notice = sprintf( |
| 987 | - /* translators: 1: Plugin name, 2: Addons/plugins admin page URL, 3: "Install Now" link text */ | |
| 988 | 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'), |
| 989 | 927 | esc_html($plugin_name), |
| 990 | 928 | admin_url('admin.php?page=wp-adminify-addons-plugins'), |
| 991 | 929 | __('Install Now', 'adminify') |
| 992 | 930 | ); |
| 993 | - return '<div class="adminify-missing-addons">' . self::upgrade_pro_icon() . self::kses_custom( $missing_plugin_notice ) . '</div>'; | |
| 931 | + return '<div class="adminify-missing-addons">' . self::jltwp_adminify_upgrade_pro_icon() . self::wp_kses_custom( $missing_plugin_notice ) . '</div>'; | |
| 994 | 932 | } |
| 995 | 933 | |
| 996 | 934 | |
| 997 | 935 | /** |
| @@ -1195,62 +1133,21 @@ | ||
| 1195 | 1133 | |
| 1196 | 1134 | return array_merge_recursive($old_db, $result); |
| 1197 | 1135 | } |
| 1198 | 1136 | |
| 1199 | - /** | |
| 1200 | - * Inline "Upgrade to Pro" marker rendered next to a checkbox option | |
| 1201 | - * label in the free build. | |
| 1202 | - * | |
| 1203 | - * Returns the rocket-icon + (Upgrade to Pro) span the settings UI | |
| 1204 | - * has rendered historically. The | |
| 1205 | - * Inc/Admin/AdminSettings::render_pro_locked_field() handler | |
| 1206 | - * detects this span inside a checkbox <li> and strips name= + sets | |
| 1207 | - * disabled on the enclosed input so the locked option cannot submit | |
| 1208 | - * a value. | |
| 1209 | - * | |
| 1210 | - * Returns an empty string when the Pro plugin is active so the Pro | |
| 1211 | - * UI is unchanged. | |
| 1212 | - */ | |
| 1213 | - public static function upgrade_pro_class($inline_badge = false){ | |
| 1214 | - if (function_exists('jltwp_adminify') && jltwp_adminify()->can_use_premium_code__premium_only()) { | |
| 1215 | - return ''; | |
| 1216 | - } | |
| 1217 | - if (!empty($inline_badge)){ | |
| 1137 | + public static function adminify_upgrade_pro_class($inline_badge=false){ | |
| 1138 | + if(!empty($inline_badge)){ | |
| 1218 | 1139 | return '<span class="adminify-pro-checkbox adminify-pro-badge adminify-pro-notice">Pro</span>'; |
| 1219 | 1140 | } |
| 1220 | - return '<span class="adminify-pro-checkbox">' . self::upgrade_pro_icon() . ' <strong>(Upgrade to Pro)</strong>' . '</span>'; | |
| 1141 | + return '<span class="adminify-pro-checkbox">' . self::jltwp_adminify_upgrade_pro_icon() . ' <strong>(Upgrade to Pro)</strong>' . '</span>'; | |
| 1221 | 1142 | } |
| 1222 | 1143 | |
| 1223 | - /** | |
| 1224 | - * Inline "Pro" badge rendered next to a field title in the free | |
| 1225 | - * build. | |
| 1226 | - * | |
| 1227 | - * Returns the legacy <span class="adminify-pro-badge">Pro</span> | |
| 1228 | - * markup. The render handler detects fields whose class list | |
| 1229 | - * contains adminify-pro-fieldset / -feature / -notice (the | |
| 1230 | - * Pro-style classes used alongside this badge) and neutralises | |
| 1231 | - * the inputs at render time. | |
| 1232 | - * | |
| 1233 | - * Returns an empty string when the Pro plugin is active. | |
| 1234 | - */ | |
| 1235 | - public static function upgrade_pro_badge($badge_text = 'Pro'){ | |
| 1236 | - if (function_exists('jltwp_adminify') && jltwp_adminify()->can_use_premium_code__premium_only()) { | |
| 1237 | - return ''; | |
| 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>'; | |
| 1238 | 1147 | } |
| 1239 | - if (!empty($badge_text)){ | |
| 1240 | - return '<span class="adminify-pro-badge">' . esc_html($badge_text) . '</span>'; | |
| 1241 | - } | |
| 1242 | - return ''; | |
| 1243 | 1148 | } |
| 1244 | 1149 | |
| 1245 | - public static function new_badge($badge_text = 'New') { | |
| 1246 | - if( empty( $badge_text ) ) { | |
| 1247 | - return ''; | |
| 1248 | - } | |
| 1249 | - | |
| 1250 | - return '<span class="adminify-new-badge">' . esc_html($badge_text) . '</span>'; | |
| 1251 | - } | |
| 1252 | - | |
| 1253 | 1150 | /* |
| 1254 | 1151 | * Compares the version of WordPress running to the $version specified. |
| 1255 | 1152 | * Usage: Utils::check_wp_version('>=', '4.0') |
| 1256 | 1153 | version_compare( $wp_version, '4.3', '>=' ) |
| @@ -1262,17 +1159,18 @@ | ||
| 1262 | 1159 | global $wp_version; |
| 1263 | 1160 | return version_compare( $wp_version, $version, $operator ); |
| 1264 | 1161 | } |
| 1265 | 1162 | |
| 1266 | - public static function help_urls($module_name = '', $docs = '', $youtube = '', $facebook_grp = '', $support = '') | |
| 1163 | + public static function adminfiy_help_urls($module_name = '', $docs = '', $youtube = '', $facebook_grp = '', $support = '') | |
| 1267 | 1164 | { |
| 1268 | 1165 | $help_content = ''; |
| 1269 | 1166 | |
| 1270 | - // Modules ( sanitize the label so the returned template is safe to echo ). | |
| 1271 | - // Callers may pass benign markup (e.g. an empty <span></span> used for layout/icons), | |
| 1272 | - // so use wp_kses_post() — it keeps that markup while stripping scripts. esc_html() | |
| 1273 | - // would print the tags literally (e.g. "<span></span>" shown as text). | |
| 1274 | - $module_name = empty($module_name) ? '' : wp_kses_post($module_name); | |
| 1167 | + // Modules | |
| 1168 | + if (empty($module_name)) { | |
| 1169 | + $module_name = ''; | |
| 1170 | + } else { | |
| 1171 | + $module_name = $module_name; | |
| 1172 | + } | |
| 1275 | 1173 | |
| 1276 | 1174 | $help_content_urls = ''; |
| 1277 | 1175 | |
| 1278 | 1176 | // Docs |
| @@ -1296,59 +1194,7 @@ | ||
| 1296 | 1194 | } |
| 1297 | 1195 | |
| 1298 | 1196 | $help_content = sprintf( '%1$s <div class="adminify-helps">%2$s</div>', $module_name, $help_content_urls ); |
| 1299 | 1197 | return $help_content; |
| 1300 | - } | |
| 1301 | - | |
| 1302 | - /** | |
| 1303 | - * Check if the request is coming from an iframe. | |
| 1304 | - * | |
| 1305 | - * @param None | |
| 1306 | - * @throws None | |
| 1307 | - * @return bool | |
| 1308 | - */ | |
| 1309 | - public static function is_iframe() | |
| 1310 | - { | |
| 1311 | - return isset($_SERVER["HTTP_SEC_FETCH_DEST"]) && strtolower(sanitize_text_field(wp_unslash($_SERVER["HTTP_SEC_FETCH_DEST"]))) === "iframe"; | |
| 1312 | - // $isIframe = isset($_SERVER["HTTP_SEC_FETCH_DEST"]) && strtolower($_SERVER["HTTP_SEC_FETCH_DEST"]) === "iframe"; | |
| 1313 | - // if ( $isIframe ) return true; | |
| 1314 | - // if ( isset($_GET['adminify-iframe']) ) return true; | |
| 1315 | - // return false; | |
| 1316 | - } | |
| 1317 | - | |
| 1318 | - /** | |
| 1319 | - * Load a template file. | |
| 1320 | - * | |
| 1321 | - * @param string $template_name The name of the template file to load. | |
| 1322 | - * @throws None | |
| 1323 | - * @return void | |
| 1324 | - */ | |
| 1325 | - public static function load_template($template_name) | |
| 1326 | - { | |
| 1327 | - require_once PXLBSADMINIFY_PATH . 'Inc/Admin/Frames/Templates/' . $template_name; | |
| 1328 | - } | |
| 1329 | - | |
| 1330 | - /** | |
| 1331 | - * Multisite Check | |
| 1332 | - * @param URL | |
| 1333 | - * @return Admin_URL | |
| 1334 | - */ | |
| 1335 | - public static function maybe_network_admin_url($url) { | |
| 1336 | - if ( is_network_admin() ) { | |
| 1337 | - return network_admin_url($url); | |
| 1338 | - } | |
| 1339 | - return admin_url($url); | |
| 1340 | - } | |
| 1341 | - | |
| 1342 | - /** | |
| 1343 | - * Sluggify a string and replace hyphens with underscores. | |
| 1344 | - * @param string $string The string to sluggify. | |
| 1345 | - * @return string The sluggified string with underscores. | |
| 1346 | - */ | |
| 1347 | - public static function sluggify_with_underscores($string) { | |
| 1348 | - $slug = sanitize_title($string); | |
| 1349 | - $slug = str_replace('-', '_', $slug); | |
| 1350 | - | |
| 1351 | - return $slug; | |
| 1352 | 1198 | } |
| 1353 | 1199 | |
| 1354 | 1200 | } |