HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpamazingsecret/wp-content/plugins_/woo-discount-rules/v2/App/Helpers/Helper.php
<?php

namespace Wdr\App\Helpers;
use Wdr\App\Controllers\Configuration;
use Wdr\App\Controllers\ManageDiscount;

if (!defined('ABSPATH')) exit; // Exit if accessed directly
class Helper
{
    public static $available_coupon_names = null;
    /**
     * Combine two array with unique values
     *
     * @param $products array
     * @param $additional_products array
     * @return array
     * */
    public static function combineProductArrays($products, $additional_products)
    {
        $products = array_merge($products, $additional_products);
        $products = array_unique($products);
        return $products;
    }

    /**
     * Check has pro version
     *
     * @return boolean
     * */
    public static function hasPro()
    {
        if (defined('WDR_PRO'))
            if (WDR_PRO === true) return true;
        return false;
    }

    /**
     * Format price
     *
     * @param $data mixed
     * @return mixed
     * */
    public static function formatAllPrices($data)
    {
        if (is_array($data)) {
            if (isset($data['initial_price']) && !isset($data['initial_price_html'])) {
                $data['initial_price_html'] = Woocommerce::formatPrice($data['initial_price']);
            }
            if (isset($data['discounted_price']) && !isset($data['discounted_price_html'])) {
                $data['discounted_price_html'] = Woocommerce::formatPrice($data['discounted_price']);
            }
            if (isset($data['initial_price_with_tax']) && !isset($data['initial_price_with_tax_html'])) {
                $data['initial_price_with_tax_html'] = Woocommerce::formatPrice($data['initial_price_with_tax']);
            }
            if (isset($data['discounted_price_with_tax']) && !isset($data['discounted_price_with_tax_html'])) {
                $data['discounted_price_with_tax_html'] = Woocommerce::formatPrice($data['discounted_price_with_tax']);
            }
            if (!isset($data['currency_symbol'])) {
                $data['currency_symbol'] = Woocommerce::get_currency_symbol();
            }
        }
        return $data;
    }

    /**
     * Get template override
     * @param string $template_name
     * @param string $folder
     * @return string
     * */
    public static function getTemplateOverride($template_name, $folder = '')
    {
        if (!empty($folder)) {
            $path = trailingslashit('woo-discount-rules') . $folder . "/" . $template_name;
        } else {
            $path = trailingslashit('woo-discount-rules') . $template_name;
        }
        $template = locate_template(
            array(
                $path,
                $template_name,
            )
        );
        return $template;
    }

    /**
     * Get template path
     *
     * @param $template_name string
     * @param $default_path string
     * @param $folder string
     * @return string
     * */
    public static function getTemplatePath($template_name, $default_path, $folder = '')
    {
        $path_from_template = self::getTemplateOverride($template_name, $folder);
        if ($path_from_template) $default_path = $path_from_template;
        return $default_path;
    }

    /**
     * Is Cart item is consider for discount calculation
     *
     * @param $status bool
     * @param $cart_item array
     * @param $type string
     * @return bool
     * */
    public static function isCartItemConsideredForCalculation($status, $cart_item, $type)
    {
        return apply_filters('advanced_woo_discount_rules_include_cart_item_to_count_quantity', $status, $cart_item, $type);
    }

    /**
     * Set promotion messages
     * @param $message
     * @param string $rule_id
     * @param $promotion_type
     */
    public static function setPromotionMessage($message, $rule_id = '')
    {
        $messages = Woocommerce::getSession('awdr_promotion_messages', array());
        if (!is_array($messages)) $messages = array();
        if (!empty($messages) && in_array($message, $messages)) {
        } else {
            if (empty($rule_id)) {
                $messages[] = $message;
            } else {
                $messages[$rule_id] = $message;
            }
        }
        Woocommerce::setSession('awdr_promotion_messages', $messages);
    }

    /**
     * Get promotion messages
     * */
    public static function getPromotionMessages()
    {
        return Woocommerce::getSession('awdr_promotion_messages', array());
    }

    /**
     * Clear promotion messages
     * */
    public static function clearPromotionMessages()
    {
        Woocommerce::setSession('awdr_promotion_messages', array());
    }

    /**
     * ruleConditionDescription
     */
    public static function ruleConditionDescription()
    {
        return $content = "<p>" . __('Include additional conditions (if necessary)', 'woo-discount-rules') . "</p>
        <b>" . __('Popular conditions:', 'woo-discount-rules') . "</b>
        <span style='width: 100%; display: flex;'>
            <span style='width: 45%; padding-right: 5px;'>
                <ul  class='awdr-bullet-style'>
                    <li ><a href='https://docs.flycart.org/en/articles/3977542-subtotal-based-free-product-2-0?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=subtotal_documentation' target='_blank'>" . __('Subtotal', 'woo-discount-rules') . "</a></li>
                    <li ><a href='https://docs.flycart.org/en/articles/4203313-user-role-based-discount-rules-discount-rules-2-0?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=user_role_documentation' target='_blank'>" . __('User role', 'woo-discount-rules') . "</a></li>
                    <li >" . __('Days & Time', 'woo-discount-rules') . "</li>
                    <li ><a href='https://docs.flycart.org/en/articles/4206683-how-to-provide-first-order-discount-2-0?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=purchase_history' target='_blank'>" . __('Purchase History', 'woo-discount-rules') . "</a></li>
                    <li ><a href='https://docs.flycart.org/en/articles/5207088-discount-based-on-the-payment-method?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=payment_menthod' target='_blank'>" . __('Payment Method', 'woo-discount-rules') . "</a></li>
                </ul>
            </span>
            <span style='width: 45%;'>
                <ul  class='awdr-bullet-style'>
                    <li ><a href='https://docs.flycart.org/en/articles/4268595-activate-discount-rule-using-a-coupon-code-in-woocommerce-2-0?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=coupon_documentation' target='_blank'>" . __('Coupon', 'woo-discount-rules') . "</a></li>
                    <li ><a href='https://docs.flycart.org/en/articles/4214869-customer-shipping-address-based-discount-2-0?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=shipping_address_documentation' target='_blank'>" . __('Shipping Address', 'woo-discount-rules') . "</a></li>
                    <li><a href='https://docs.flycart.org/en/articles/4279899-category-combination-get-discount-only-when-category-a-b-c-are-in-the-cart-2-0?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=category_combination' target='_blank'>" . __('Category Combination', 'woo-discount-rules') . "</a></li>
                    <li><a href='https://docs.flycart.org/en/articles/4164153-buy-product-a-b-and-get-discount-in-product-c-discount-rules-2-0?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=product_combination' target='_blank'>" . __('Product Combination', 'woo-discount-rules') . "</a></li>
                    <li ><a href='https://docs.flycart.org/en/articles/4280177-discounts-based-on-cart-line-items?utm_source=woo-discount-rules-v2&utm_campaign=doc&utm_medium=text-click&utm_content=quantity_or_line_items' target='_blank'>" . __('Quantities/Line items', 'woo-discount-rules') . "</a></li>
                    
                    
                </ul>
            </span>
        </span>";
    }

    /**
     * bogoToolTipDescriptionForIndividualProduct
     * @return mixed
     */
    public static function bogoToolTipDescriptionForIndividualProduct()
    {
        return $content = __("Individual Product : 
            This counts the total quantity of each product / line item separately.
            Example:
             If a customer wanted to buy 2 quantities of Product A,  3 quantities of Product B, then count will be maintained at the product level.
            2 - count of Product A
            3 - Count of Product B
            In case of variable products, the count will be based on each variant because WooCommerce considers a variant as a product itself.", 'woo-discount-rules');
    }

    /**
     * bogoToolTipDescriptionForFilterTogether
     * @return mixed
     */
    public static function bogoToolTipDescriptionForFilterTogether()
    {
        return $content = __("Filter set above :
             This will count the quantities of products set in the 'Filter' section.
             Example: If you selected a few categories there, it will count the quantities of products in those categories added in cart. If you selected a few products in the filters section, then it will count the quantities together.
            Example: Let’s say, you wanted to offer a Bulk Quantity discount for Category A and chosen Category A in the filters. So when a customer adds 1 quantity each of X, Y and Z from Category A, then the count here is 3.", 'woo-discount-rules');
    }

    /**
     * bogoToolTipDescriptionForvariants
     * @return mixed
     */
    public static function bogoToolTipDescriptionForvariants()
    {
        return $content = __('All variants in each product together :
            Useful when applying discounts based on variable products and you want the quantity to be counted based on the parent product.
            Example:
            Say, you have Product A - Small, Medium, Large.
            If a customer buys  2 of Product A - Small,  4 of Product A - Medium,  6 of Product A - Large, then the count will be: 6+4+2 = 12
', 'woo-discount-rules');
    }

    /**
     * Get available coupon names
     * */
    public static function getAvailableCouponNameFromRules(){
        if(self::$available_coupon_names === null){
            $available_rules = ManageDiscount::$available_rules;
            $coupon_names = array();
            if(!empty($available_rules)){
                foreach ($available_rules as $available_rule){
                    $discount_type = $available_rule->getRuleDiscountType();
                    if($discount_type == 'wdr_bulk_discount'){
                        $adjustment = $available_rule->getBulkAdjustments();
                        if(isset($adjustment->apply_as_cart_rule) && $adjustment->apply_as_cart_rule == 1){
                            if(!empty($adjustment->cart_label)){
                                $coupon_names[] = $adjustment->cart_label;
                            } else {
                                $coupon_names[] = $available_rule->getTitle();
                            }
                        }
                    } else if($discount_type == 'wdr_simple_discount'){
                        $adjustment = $available_rule->getProductAdjustments();
                        if(isset($adjustment->apply_as_cart_rule) && $adjustment->apply_as_cart_rule == 1){
                            if(!empty($adjustment->cart_label)){
                                $coupon_names[] = $adjustment->cart_label;
                            } else {
                                $coupon_names[] = $available_rule->getTitle();
                            }
                        }
                    } else if($discount_type == 'wdr_cart_discount'){
                        $adjustment = $available_rule->getCartAdjustments();
                        if(!empty($adjustment->label)){
                            $coupon_names[] = $adjustment->label;
                        } else {
                            $coupon_names[] = $available_rule->getTitle();
                        }
                    } else if($discount_type == 'wdr_set_discount'){
                        $adjustment = json_decode($available_rule->rule->set_adjustments);
                        if(isset($adjustment->apply_as_cart_rule) && $adjustment->apply_as_cart_rule == 1){
                            if(!empty($adjustment->cart_label)){
                                $coupon_names[] = $adjustment->cart_label;
                            } else {
                                $coupon_names[] = $available_rule->getTitle();
                            }
                        }
                    }
                }
            }
            $coupon_name_from_config = Configuration::getInstance()->getConfig('discount_label_for_combined_discounts', __('Cart discount', 'woo-discount-rules'));
            $coupon_names[] = (empty($coupon_name_from_config))? __('Cart discount', 'woo-discount-rules'): $coupon_name_from_config;
            foreach ($coupon_names as $key => $coupon_name){
                $coupon_names[$key] = apply_filters('woocommerce_coupon_code', $coupon_name);
            }
            self::$available_coupon_names = $coupon_names;
        }

        return self::$available_coupon_names;
    }

    /**
     * Remove error message for our coupons as sometime the coupon doesn't validate because of event calls before calculate totals
     * */
    public static function removeErrorMessageForOurCoupons($err, $err_code, $coupon){
        if($err_code == 101){
            if(!empty($coupon)){
                $coupon_code = Woocommerce::getCouponCode($coupon);
                if(in_array($coupon_code, self::getAvailableCouponNameFromRules())){
                    $err = '';
                }
            }
        }

        return $err;
    }

    public static function create_nonce($action = -1)
    {
        return wp_create_nonce($action);
    }

    protected static function verify_nonce($nonce, $action = -1)
    {
        if (wp_verify_nonce($nonce, $action)) {
            return true;
        } else {
            return false;
        }
    }

    public static function validateRequest($method, $awdr_nonce = null)
    {
        if ($awdr_nonce === null) {
            if (isset($_REQUEST['awdr_nonce']) && !empty($_REQUEST['awdr_nonce'])) {
                if (self::verify_nonce(wp_unslash($_REQUEST['awdr_nonce']), $method)) {
                    return true;
                }
            }
        } else {
            if (self::verify_nonce(wp_unslash($awdr_nonce), $method)) {
                return true;
            }
        }
        die(__('Invalid token', 'woo-discount-rules'));
    }

    public static function filterSelect2SearchQuery($query)
    {
        return esc_sql(stripslashes($query));
    }

    public static function displayCompatibleCheckMessages()
    {
        if (version_compare(WDR_VERSION, '2.5.0', '>=')) {
            if (defined('WDR_PRO_VERSION')) {
                if (version_compare(WDR_PRO_VERSION, '2.5.0', '<')) {
                    $url = esc_url(admin_url() . "plugins.php");
                    $plugin_page = '<a target="_blank" href="' . $url . '">' . __('Update now', 'woo-discount-rules') . '</a>';
                    ?>
                    <br>
                    <div class="notice inline notice notice-warning notice-alt awdr-rule-limit-disabled">
                        <p class="rule_limit_msg_future">
                            <?php echo sprintf(__('You are using a lower version of our <b>Woo Discount Rules PRO 2.0</b> plugin. Please update the plugin to latest version to run smoothly. %s', 'woo-discount-rules'), $plugin_page); ?>
                        </p>
                    </div>
                    <?php
                }
            }
        }
    }

    public static function hasAdminPrivilege()
    {
        if (current_user_can('manage_woocommerce')) {
            return true;
        } else {
            return false;
        }
    }

    public static function getCleanHtml($html)
    {
        try {
            $html = html_entity_decode($html);
            $html = preg_replace('/(<(script|style|iframe)\b[^>]*>).*?(<\/\2>)/is', "$1$3", $html);
            $allowed_html = array(
                'br' => array(),
                'strong' => array(),
                'span' => array('class' => array()),
                'div' => array('class' => array()),
                'p' => array('class' => array()),
            );
            return wp_kses($html, $allowed_html);
        } catch (\Exception $e) {
            return '';
        }
    }

    /**
     * check the given content is json or not
     * @param $string
     * @return bool
     */
    static function isJson($string)
    {
        json_decode($string);
        return (json_last_error() == JSON_ERROR_NONE);
    }

    /**
     * sanitize the json data
     * @param $data
     * @return bool|false|mixed|string
     */
    static function sanitizeJson($data)
    {
        $arr = array();
        if (is_array($data)) {
            $arr = $data;
        } elseif (is_object($data)) {
            $encoded = wp_json_encode($data);
            $arr = json_decode($encoded, true);
        } elseif (self::isJson($data)) {
            $arr = json_decode($data, true);
        }
        $result = array();
        if (is_array($arr) && !empty($arr)) {
            foreach ($arr as $key => $value) {
                if (is_array($value) || is_object($value)) {
                    $value = self::sanitizeJson($value);
                    $result[sanitize_key($key)] = $value;
                } else {
                    if (is_string($value)) {
                        $value = sanitize_text_field($value);
                    } elseif (is_int($value)) {
                        $value = intval($value);
                    } elseif (is_float($value)) {
                        $value = floatval($value);
                    } else {
                        $value = sanitize_text_field($value);
                    }
                    $result[sanitize_key($key)] = $value;
                }
            }
        }
        return $result;
    }
}