is_type($type); } return false; } static function getConvertedFixedPrice($value, $type = '') { return apply_filters('advanced_woo_discount_rules_converted_currency_value', $value, $type); } /** * Check the order has particular shipping method * @param $order * @param $method * @return bool */ static function orderHasShippingMethod($order, $method) { if (is_object($order) && method_exists($order, 'has_shipping_method')) { return $order->has_shipping_method($method); } return false; } /** * Check the order has particular shipping method * @param $order * @return bool */ static function getOrderTotal($order) { if (is_object($order) && method_exists($order, 'get_total')) { return $order->get_total(); } return 0; } /** * get order object from order id * @param $order_id * @return array|bool|WC_Order|WC_Order_Refund */ static function getOrder($order_id) { if (empty($order_id)) { return array(); } if (function_exists('wc_get_order')) { return wc_get_order($order_id); } return array(); } /** * get order object from order item * @param $order_item * @return null|WC_Order|WC_Order_Refund */ static function getOrderByItem($order_item) { if (is_object($order_item) && method_exists($order_item, 'get_order')) { return $order_item->get_order(); } return NULL; } /** * get order item * @param int $id * @return \WC_Order_Item|false */ static function getOrderItem($id) { if (function_exists('WC') && isset(WC()->order_factory)) { if (method_exists(WC()->order_factory, 'get_order_item')) { return WC()->order_factory->get_order_item($id); } } return false; } /** * get the product ID * @param $product - woocommerce product object * @return null */ static function getProductId($product) { if(!empty($product)){ if (is_object($product) && method_exists($product, 'get_id')) { return $product->get_id(); } elseif (isset($product->id)) { $product_id = $product->id; if (isset($product->variation_id)) { $product_id = $product->variation_id; } return $product_id; } else { return NULL; } } return NULL; } /** * get product id from cart item id * */ public static function getProductIdFromCartItem($cart_item){ $product_id = null; if(isset($cart_item['product_id'])){ $product_id = $cart_item['product_id']; if(isset($cart_item['variation_id']) && !empty($cart_item['variation_id'])){ $product_id = $cart_item['variation_id']; } } else if(isset($cart_item['data'])){ $product_id = self::getProductId($cart_item['data']); } return $product_id; } /** * Get the product from product id * @param $product_id * @return bool|false|WC_Product|null */ static function getProduct($product_id) { if(isset(self::$products[$product_id])){ return self::$products[$product_id]; } else if (function_exists('wc_get_product')) { self::$products[$product_id] = apply_filters('advanced_woo_discount_rules_get_wc_product', wc_get_product($product_id), $product_id); return self::$products[$product_id]; } return false; } static function is_ajax() { if (function_exists('wp_doing_ajax')) { return wp_doing_ajax(); } else if (function_exists('is_ajax')) { return is_ajax(); } return false; } /** * Get the product from Cart item data/product id * @param $cart_item array * @param $product_id int * @return mixed */ static function getProductFromCartItem($cart_item, $product_id = 0) { $product = isset($cart_item['data']) ? $cart_item['data'] : $cart_item; if (!is_a($product, 'WC_Product')) { $product = self::getProduct($product_id); } if (is_a($product, 'WC_Product')) { return apply_filters('advanced_woo_discount_rules_get_product_from_cart_item', $product, $cart_item); } return false; } /** * Get the sale price of the product * @param $product * @return bool */ static function getProductSalePrice($product) { if(!empty($product)) if (self::isProductInSale($product)) { if (is_object($product) && method_exists($product, 'get_sale_price')) { $price = $product->get_sale_price(); return apply_filters('advanced_woo_discount_rules_get_sale_price', $price, $product); } return false; } return false; } /** * Check the produt in sale * @param $product * @return bool */ static function isProductInSale($product) { if(!empty($product)) if (is_object($product) && method_exists($product, 'is_on_sale') && method_exists($product, 'get_sale_price')) { if($product->is_on_sale('')){ if($product->get_sale_price()){ return apply_filters('advanced_woo_discount_rules_is_on_sale', true, $product); }else{ return apply_filters('advanced_woo_discount_rules_is_on_sale', false, $product); } } } return false; } /** * Check the product has stock * @param $product * @return bool */ static function isProductHasStock($product) { if(!empty($product) && is_object($product) && method_exists($product, 'is_in_stock')) { return $product->is_in_stock(); } return false; } /** * Get the regular price of the product * @param $product * @return bool */ static function getProductRegularPrice($product) { if(!empty($product)) if (is_object($product) && method_exists($product, 'get_regular_price')) { $price = $product->get_regular_price(); return apply_filters('advanced_woo_discount_rules_get_regular_price', $price, $product); } return false; } /** * Get the actual price of the product * @param $product * @return bool */ static function getProductPrice($product) { if(!empty($product)) if (is_object($product) && method_exists($product, 'get_price')) { $price = $product->get_price(); return apply_filters('advanced_woo_discount_rules_get_price', $price, $product); } return false; } /** * Get the categories of the product * @param $product * @return array */ static function getProductCategories($product) { $categories = $variant = array(); if(!empty($product)) if (is_object($product) && method_exists($product, 'get_category_ids')) { if (self::productTypeIs($product, 'variation')) { $variant = $product; $parent_id = self::getProductParentId($product); $product = self::getProduct($parent_id); } $categories = $product->get_category_ids(); } return apply_filters('advanced_woo_discount_rules_get_product_categories', $categories, $product, $variant); } /** * Get product tags * @param $product * @return array */ static function getProductTags($product) { if(!empty($product)) if (is_object($product) && method_exists($product, 'get_tag_ids')) { return $product->get_tag_ids(); } return array(); } /** * Get product attributes * @param $product * @return array */ static function getProductAttributes($product) { if(!empty($product)) if (is_object($product) && method_exists($product, 'get_attributes')) { return $product->get_attributes(); } return array(); } /** * Get product attributes * @param $product * @return array */ static function getProductChildren($product) { if(!empty($product)) if (is_object($product) && method_exists($product, 'get_children')) { return $product->get_children(); } return array(); } /** * Get product SKU * @param $product * @return bool */ static function getProductSku($product) { if(!empty($product)) if (is_object($product) && method_exists($product, 'get_sku')) { return $product->get_sku(); } return NULL; } /** * Get product price suffix * @param $product * @param $price * @param $discount_prices * @return bool */ static function getProductPriceSuffix($product, $price = '', $discount_prices = array()) { if(!empty($product)) if (is_object($product) && method_exists($product, 'get_price_suffix')) { return apply_filters('advanced_woo_discount_rules_price_suffix', $product->get_price_suffix($price), $product, $price, $discount_prices); } return NULL; } /** * Get attribute Name * @param $attribute * @return array */ static function getAttributeName($attribute) { if (is_object($attribute) && method_exists($attribute, 'get_name')) { return $attribute->get_name(); } return NULL; } /** * Get attribute Option * @param $attribute * @return array */ static function getAttributeOption($attribute) { if (is_object($attribute) && method_exists($attribute, 'get_options')) { return $attribute->get_options(); } return array(); } /** * Get attribute Option * @param $attribute * @return array */ static function getAttributeVariation($attribute) { if (is_object($attribute) && method_exists($attribute, 'get_variation')) { return $attribute->get_variation(); } return true; } /** * Get variation prices for variable product * @param \WC_Product_Variable $product * @param bool $for_display * @return array|false */ static function getVariationPrices($product, $for_display = false) { if (is_object($product) && method_exists($product, 'get_variation_prices')) { return $product->get_variation_prices($for_display); } return false; } /** * Get first visible child variation product of variable product * @param object|\WC_Product_Variable $product * @return false|\WC_Product_Variation */ static function getFirstChildOfVariableProduct($product) { $variation_product = false; $variations = self::getProductChildren($product); if (!empty($variations)) { foreach ($variations as $variation_id) { if (empty($variation_id)) { continue; } $variation_product = self::getProduct($variation_id); $visible_variation = self::variationIsVisible($product); if($visible_variation){ break; } } } return $variation_product; } /** * Get product custom taxonomy * @return array|null */ static function getCustomProductTaxonomies() { if (!empty(self::$custom_taxonomies)) { return self::$custom_taxonomies; } if (function_exists('get_taxonomies')) { self::$custom_taxonomies = array_filter(get_taxonomies(array( 'show_ui' => true, 'show_in_menu' => true, 'object_type' => array('product'), ), 'objects'), function ($tax) { return !in_array($tax->name, array('product_cat', 'product_tag')); }); self::$custom_taxonomies = apply_filters('advanced_woo_discount_rules_get_custom_taxonomies', self::$custom_taxonomies); } return self::$custom_taxonomies; } /** * Format the sale price * @param $price1 * @param $price2 * @return string|null */ static function formatSalePrice($price1, $price2) { if (function_exists('wc_format_sale_price')) { return apply_filters('advanced_woo_discount_rules_format_sale_price', wc_format_sale_price($price1, $price2), $price1, $price2); } return NULL; } /** * format the price //range * @param $min_price * @param $max_price * @param $original_html * @return string */ static function formatPriceRange($min_price, $max_price, $original_html = false) { if (function_exists('wc_format_price_range')) { $html = wc_format_price_range($min_price, $max_price); } else { $html = self::formatPrice($min_price) . ' - ' . self::formatPrice($max_price); } return apply_filters('advanced_woo_discount_rules_format_sale_price_range', $html, $min_price, $max_price, $original_html); } /** * format the price * @param $price * @param $args * @return string */ static function formatPrice($price, $args = array()) { if (function_exists('wc_price')) { return wc_price($price, $args); } return $price; } /** * format currency code * @return string */ static function get_currency_symbol($code = '') { if (function_exists('get_woocommerce_currency_symbol')) { return get_woocommerce_currency_symbol($code); } return $code; } /** * format given string to upper * @param string $string String to format. * @return string */ static function formatStringToUpper($string) { if (function_exists('wc_strtoupper')) { return wc_strtoupper($string); } else{ return strtoupper($string); } } /** * format given string to lower case * @param string $string String to format. * @return string */ static function formatStringToLower($string) { if (function_exists('wc_strtolower')) { return wc_strtolower($string); } else { return strtolower($string); } } /** * get cart items * @return array */ static function getCart($recalculate_total = false) { if($recalculate_total){ if(apply_filters('advanced_woo_discount_rules_do_recalculate_total', $recalculate_total)){ self::reCalculateCartTotal(); } } $cart = array(); if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null){ if (is_object(WC()->cart) && method_exists(WC()->cart, 'get_cart')) { if (did_action('wp_loaded')) { $cart = WC()->cart->get_cart(); } } } } return apply_filters('advanced_woo_discount_rules_get_cart', $cart); } /** * calculate totals * @return array */ static function calculateCartTotals() { if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null){ if (is_object(WC()->cart) && method_exists(WC()->cart, 'calculate_totals')) { WC()->cart->calculate_totals(); } } } } static function reCalculateCartTotal(){ remove_action('woocommerce_before_calculate_totals', array(Router::$manage_discount, 'applyCartProductDiscount'), 1000); self::calculateCartTotals(); add_action('woocommerce_before_calculate_totals', array(Router::$manage_discount, 'applyCartProductDiscount'), 1000); } /** * get shipping packages * @return array */ static function get_shipping_packages() { if (apply_filters('advanced_woo_discount_rules_recalculate_shipping_package',true) && function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'get_shipping_packages')) { return WC()->cart->get_shipping_packages(); } } } return null; } static function round($value){ if(function_exists('wc_get_price_decimals')){ return round( $value, wc_get_price_decimals() ); } else { return round( $value, get_option( 'woocommerce_price_num_decimals', 2 ) ); } } /** * Add cart item * * @access public * @param int $product_id * @param int $quantity * @param int $variation_id * @param array $variation * @param array $cart_item_data * @return boolean */ public static function add_to_cart($product_id = 0, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data = array()) { if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'add_to_cart')) { return WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $variation, $cart_item_data); } } } return false; } /** * set quantity * * @access public * @param string $cart_item_key * @param int $quantity * @param boolean $refresh_totals * @return boolean */ public static function set_quantity( $cart_item_key, $quantity = 1, $refresh_totals = true ){ if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'set_quantity')) { return WC()->cart->set_quantity($cart_item_key, $quantity, $refresh_totals); } } } return false; } /** * Remove cart item * * @access public * @return boolean */ public static function remove_cart_item($_cart_item_key) { if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'remove_cart_item')) { return WC()->cart->remove_cart_item($_cart_item_key); } } } return false; } /** * Remove coupon from cart * * @access public * @param string $code * @return boolean */ public static function remove_coupon($code) { if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'remove_coupon')) { return WC()->cart->remove_coupon($code); } } } return false; } /** * Add notice * * @access public * @param $message string * @param $type string * @param $data array */ public static function wc_add_notice($message, $type = 'success', $data = array()) { if (function_exists('wc_add_notice')) { wc_add_notice( $message, $type, $data); } } /** * Remove specific notice * * @access public * @param $remove_message string * @param $type string */ public static function removeSpecificNoticeFromSession($remove_message, $type = 'success') { $all_notices = self::getSession('wc_notices', array()); if(!empty($all_notices)){ foreach ($all_notices as $key => $messages){ if($key == $type){ if(!empty($messages)){ foreach ($messages as $msg_key => $message){ if(isset($message['notice'])){ if($message['notice'] == $remove_message){ unset($all_notices[$key][$msg_key]); break; } } } } } } } self::setSession('wc_notices', $all_notices); } /** * get the parent id of the particular product * @param $product * @return int */ static function getProductParentId($product) { $parent_id = 0; if (is_int($product)) { $product = self::getProduct($product); } if(!empty($product)) if (is_object($product) && method_exists($product, 'get_parent_id')) { $parent_id = $product->get_parent_id(); } return apply_filters('advanced_woo_discount_rules_get_product_parent_id', $parent_id, $product); } /** * get cart items * @param $cart * @return array */ static function getCartItems($cart) { $cart_items = array(); if (is_object($cart) && method_exists($cart, 'get_cart_contents')) { $cart_items = $cart->get_cart_contents(); } return apply_filters('advanced_woo_discount_rules_get_cart_items', $cart_items, $cart); } /** * get cart item * @param string $key * @return array|false */ static function getCartItem($key) { if (function_exists('WC') && isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'get_cart_item')) { return WC()->cart->get_cart_item($key); } } return false; } /** * get cart items * @return array */ static function getCartSubtotal() { if (function_exists('WC')) { $subtotal = 0; if(isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'get_subtotal')) { $tax_display_type = get_option('woocommerce_tax_display_cart'); if ($tax_display_type === 'excl') { $subtotal = WC()->cart->get_subtotal(); } else { $subtotal = WC()->cart->get_subtotal(); if (is_object(WC()->cart) && method_exists(WC()->cart, 'get_subtotal_tax')) { $subtotal_tax = WC()->cart->get_subtotal_tax(); $subtotal = $subtotal+$subtotal_tax; } } } elseif (isset(WC()->cart->subtotal)) { $subtotal = WC()->cart->subtotal; } } return apply_filters('advanced_woo_discount_rules_get_cart_subtotal', $subtotal); } return 0; } /** * get line item subtotal * @return array */ static function getCartLineItemSubtotal($cart_item) { $tax_display_type = get_option('woocommerce_tax_display_cart'); if ($tax_display_type === 'excl') { $line_subtotal = (isset($cart_item['line_subtotal'])) ? $cart_item['line_subtotal'] : 0; } else { $line_subtotal = (isset($cart_item['line_subtotal'])) ? $cart_item['line_subtotal'] : 0; $line_subtotal_tax = (isset($cart_item['line_subtotal_tax'])) ? $cart_item['line_subtotal_tax'] : 0; $line_subtotal = $line_subtotal+$line_subtotal_tax; } return apply_filters('advanced_woo_discount_rules_line_item_subtotal', $line_subtotal, $cart_item, $tax_display_type); } /** * Add cart fee * @param $cart * @param $name * @param $fee * @return array */ static function addCartFee($cart, $name, $fee) { if (is_object($cart) && method_exists($cart, 'add_fee')) { if(apply_filters('advanced_discount_rules_do_add_fee', true, $cart)){ if(!apply_filters('advanced_discount_rules_calculate_tax_with_fee', true, $name, $cart)){ add_filter('woocommerce_cart_totals_get_fees_from_cart_taxes', function ($fee_taxes, $fee, $cart) use ($name) { if(isset($fee->object->name)){ if($fee->object->name == $name) { $fee_taxes = array(); } } return $fee_taxes; }, 10, 3); } $fee = apply_filters('advanced_discount_rules_discount_fee_amount', $fee, $name, $cart); $name = __($name, 'woo-discount-rules'); return $cart->add_fee($name, $fee); } } return array(); } static function isTaxEnabled(){ if(get_option( 'woocommerce_calc_taxes' ) === 'yes'){ return true; } else { return false; } } static function isEnteredPriceIncludeTax(){ if(get_option('woocommerce_prices_include_tax', 'no') == 'no'){ return false; } else { return true; } } /** * get coupon code from coupon object * @param $coupon * @return null */ static function getCouponCode($coupon) { if (is_object($coupon) && method_exists($coupon, 'get_code')) { return $coupon->get_code(); } return NULL; } /** * get coupon code from coupon object * @return null */ static function getAppliedCoupons() { if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null) { if (is_object(WC()->cart) && method_exists(WC()->cart, 'get_applied_coupons')) { return WC()->cart->get_applied_coupons(); } } } return NULL; } /** * Add cart fee * @param $cart * @param $code * @return array */ static function addCouponDiscount($cart, $code) { if (is_object($cart) && method_exists($cart, 'add_discount')) { return $cart->add_discount($code); } return array(); } /** * Check the coupon already found in cart * @param $cart * @param $code * @return array */ static function hasCouponInCart($cart, $code) { if (is_object($cart) && method_exists($cart, 'has_discount')) { return $cart->has_discount($code); } return array(); } /** * Set the cart item price * @param $cart_item_object * @param $price * @return mixed */ static function setCartProductPrice($cart_item_object, $price) { if (is_object($cart_item_object) && method_exists($cart_item_object, 'set_price')) { return $cart_item_object->set_price($price); } return false; } /** * print the notice * @param $message * @param $type */ static function printNotice($message, $type) { if (function_exists('wc_print_notice')) { wc_print_notice(wp_unslash($message), $type); } } /** * Calculate including tax for product of price * @param $product * @param $original_price * @param $quantity * @return float */ static function getIncludingTaxPrice($product, $original_price, $quantity) { if(!empty($product)){ if (function_exists('wc_get_price_including_tax')) { $price = wc_get_price_including_tax($product, array('qty' => $quantity, 'price' => $original_price)); } else if (is_object($product) && method_exists($product, 'get_price_including_tax')) { $price = $product->get_price_including_tax($quantity, $original_price); } else { $price = $original_price; } } else { $price = $original_price; } return apply_filters('advanced_woo_discount_rules_get_price_including_tax', $price, $product, $original_price); } /** * Calculate including tax for product of price * @param $product * @param $original_price * @param $quantity * @return float */ static function getExcludingTaxPrice($product, $original_price, $quantity) { if(!empty($product)){ if (function_exists('wc_get_price_excluding_tax')) { $price = wc_get_price_excluding_tax($product, array('qty' => $quantity, 'price' => $original_price)); } else if (is_object($product) && method_exists($product, 'get_price_excluding_tax')) { $price = $product->get_price_excluding_tax($quantity, $original_price); } else { $price = $original_price; } } else { $price = $original_price; } return apply_filters('advanced_woo_discount_rules_get_price_excluding_tax', $price, $product, $original_price); } /** * get user roles * @return array */ static function getUserRolesList() { global $wp_roles; if (isset($wp_roles->roles)) { return $wp_roles->roles; } return array(); } /** * get countries from WC * @return array */ static function getCountriesList() { if (function_exists('WC')) { if (isset(WC()->countries) && is_object(WC()->countries) && method_exists(WC()->countries, 'get_countries')) { return WC()->countries->get_countries(); } } return array(); } /** * get States from WC * @return array */ static function getStatesList() { if (function_exists('WC')) { if (isset(WC()->countries) && is_object(WC()->countries) && method_exists(WC()->countries, 'get_states')) { return WC()->countries->get_states(); } } return array(); } /** * Get Payment Gateway Methods from WC * @return array */ static function getPaymentMethodList() { if (function_exists('WC')) { if (is_object(WC()->payment_gateways) && method_exists(WC()->payment_gateways, 'payment_gateways')) { return WC()->payment_gateways->payment_gateways(); } } return array(); } /** * Build week days * @return array */ static function getWeekDaysList() { return array( 'sunday' => __('Sunday', 'woo-discount-rules'), 'monday' => __('Monday', 'woo-discount-rules'), 'tuesday' => __('Tuesday', 'woo-discount-rules'), 'wednesday' => __('Wednesday', 'woo-discount-rules'), 'thursday' => __('Thursday', 'woo-discount-rules'), 'friday' => __('Friday', 'woo-discount-rules'), 'saturday' => __('Saturday', 'woo-discount-rules'), ); } /** * Build Banner position * @return array */ static function getBannerPositionList() { $banner_hooks = array( 'woocommerce_before_main_content' => __('Woocommerce before main content(Archive / Shop / Cat Pages / single product)', 'woo-discount-rules'), 'woocommerce_archive_description' => __('Woocommerce archive description(Archive / Shop / Cat Pages)', 'woo-discount-rules'), 'woocommerce_before_shop_loop' => __('Woocommerce before shop loop(Archive / Shop / Cat Pages)', 'woo-discount-rules'), 'woocommerce_after_shop_loop' => __('Woocommerce after shop loop(Archive / Shop / Cat Pages)', 'woo-discount-rules'), 'woocommerce_after_main_content' => __('Woocommerce after main content(Archive / Shop / Cat Pages / single product)', 'woo-discount-rules'), 'woocommerce_before_single_product' => __('Woocommerce before single product', 'woo-discount-rules'), 'woocommerce_before_single_product_summary' => __('Woocommerce before single product summary', 'woo-discount-rules'), 'woocommerce_after_single_product_summary' => __('Woocommerce after single product summary', 'woo-discount-rules'), 'woocommerce_after_single_product' => __('Woocommerce after single product', 'woo-discount-rules'), 'woocommerce_before_cart' => __('Woocommerce before cart', 'woo-discount-rules'), 'woocommerce_before_cart_table' => __('Woocommerce before cart table', 'woo-discount-rules'), 'woocommerce_before_cart_contents' => __('Woocommerce before cart contents', 'woo-discount-rules'), 'woocommerce_cart_contents' => __('Woocommerce cart contents', 'woo-discount-rules'), 'woocommerce_after_cart_contents' => __('Woocommerce after cart contents', 'woo-discount-rules'), 'woocommerce_after_cart_table' => __('Woocommerce after cart table', 'woo-discount-rules'), 'woocommerce_after_cart' => __('Woocommerce after cart', 'woo-discount-rules'), 'woocommerce_before_checkout_form' => __('Woocommerce before checkout form', 'woo-discount-rules'), //'woocommerce_checkout_before_customer_details' => __('Woocommerce checkout before customer details', 'woo-discount-rules'), 'woocommerce_before_checkout_billing_form' => __('Woocommerce before checkout billing form', 'woo-discount-rules'), 'woocommerce_after_checkout_billing_form' => __('Woocommerce after checkout billing form', 'woo-discount-rules'), 'woocommerce_before_checkout_shipping_form' => __('Woocommerce before checkout shipping form', 'woo-discount-rules'), 'woocommerce_after_checkout_shipping_form' => __('Woocommerce after checkout shipping form', 'woo-discount-rules'), 'woocommerce_before_order_notes' => __('Woocommerce before order notes', 'woo-discount-rules'), 'woocommerce_after_order_notes' => __('Woocommerce after order notes', 'woo-discount-rules'), //'woocommerce_checkout_after_customer_details' => __('Woocommerce checkout after customer details', 'woo-discount-rules'), //'woocommerce_checkout_before_order_review' => __('Woocommerce checkout before order review', 'woo-discount-rules'), //'woocommerce_checkout_after_order_review' => __('Woocommerce checkout after order review', 'woo-discount-rules'), ); return apply_filters('advanced_woo_discount_rules_get_banner_position_events', $banner_hooks); } /** * get weight of the item * @param $item * @return int */ static function getWeight($item) { if (!empty($item)) { if (is_object($item) && method_exists($item, 'get_weight')) { return $item->get_weight(); } } return 0; } /** * get woocommerce plugin url */ static function getWooPluginUrl() { if (function_exists('WC')) { return WC()->plugin_url(); } return NULL; } /** * get the user selected payment method * @return array|string|null */ static function getUserSelectedPaymentMethod() { return self::getSession('chosen_payment_method', NULL); } /** * get the session value by key * @param $key * @param null $default * @return array|string|null */ static function getSession($key, $default = NULL) { if (function_exists('WC')) { if(isset(WC()->session) && WC()->session != null) { if (is_object(WC()->session) && method_exists(WC()->session, 'get')) { return WC()->session->get($key); } } } return $default; } /** * set the session value by key * @param $key * @param $value mixed */ static function setSession($key, $value) { if (function_exists('WC')) { if(isset(WC()->session) && WC()->session != null) { if (is_object(WC()->session) && method_exists(WC()->session, 'set')) { WC()->session->set($key, $value); } } } } /** * get the user role from user obj * @param $user * @return array */ static function getRole($user) { if (!empty($user) && isset($user->user_login)) { return $user->roles; } return array(); } /** * get the shipping country of customer * @return string|null */ static function getShippingCountry() { if (function_exists('WC') && WC()->customer) { if (is_object(WC()->customer) && method_exists(WC()->customer, 'get_shipping_country')) { return WC()->customer->get_shipping_country(); } } return NULL; } /** * get the shipping state of customer * @return string|null */ static function getShippingState() { if (function_exists('WC') && WC()->customer) { if (is_object(WC()->customer) && method_exists(WC()->customer, 'get_shipping_state')) { return WC()->customer->get_shipping_state(); } } return NULL; } /** * get the shipping city of customer * @return string|null */ static function getShippingCity() { if (function_exists('WC') && WC()->customer) { if (is_object(WC()->customer) && method_exists(WC()->customer, 'get_shipping_city')) { return WC()->customer->get_shipping_city(); } } return NULL; } /** * get the Billing city of customer * @return string|null */ static function getBillingCity() { if (function_exists('WC') && WC()->customer) { if (is_object(WC()->customer) && method_exists(WC()->customer, 'get_billing_city')) { return WC()->customer->get_billing_city(); } } return NULL; } /** * get the shipping city of customer * @return string|null */ static function getShippingZipCode() { if (function_exists('WC') && WC()->customer) { if (is_object(WC()->customer) && method_exists(WC()->customer, 'get_shipping_postcode')) { return WC()->customer->get_shipping_postcode(); } } return NULL; } /** * get orders list by condition * @param array $conditions * @return int[]|WP_Post[] */ static function getOrdersByConditions($conditions = array()) { $default_conditions = array( 'numberposts' => -1, 'post_type' => self::getOrderPostType(), 'post_status' => array_keys(self::getOrderStatusList()), 'orderby' => 'ID', 'order' => 'DESC' ); if (is_object($conditions)) { $conditions = (array)$conditions; } elseif (!is_array($conditions)) { $conditions = array(); } $final_conditions = array_merge($default_conditions, $conditions); return get_posts($final_conditions); } /** * Get all order status lists * @param bool $key_only * @return array */ static function getOrderPostType($key_only = false) { if (function_exists('wc_get_order_types')) { if ($key_only) { return array_keys(wc_get_order_types()); } return wc_get_order_types(); } return NULL; } /** * get woocommerce order status * @return array */ static function getOrderStatusList() { if (function_exists('wc_get_order_statuses')) { return wc_get_order_statuses(); } return array(); } /** * get item ids of the particular order * @param $order * @return array */ static function getOrderItemsId($order) { $order_items = self::getOrderItems($order); $order_items_id = array(); if (!empty($order_items)) { foreach ($order_items as $item) { $order_items_id[] = self::getItemId($item); } } return array_filter($order_items_id); } /** * get quantities of the particular order * @param $order * @return array */ static function getOrderItemsQty($order) { $order_items = self::getOrderItems($order); $productIds = array(); if (!empty($order_items)) { foreach ($order_items as $item) { $product_id = $item->get_product_id(); $variant_id = $item->get_variation_id(); $quantity = $item->get_quantity(); if($variant_id){ $productId = $variant_id; } else { $productId = $product_id; } if(isset($productIds[$productId])){ $productIds[$productId] = $productIds[$productId]+$quantity; } else { $productIds[$productId] = $quantity; } } } return $productIds; } /** * get all items of the order * @param $order * @return array */ static function getOrderItems($order) { if (is_object($order) && method_exists($order, 'get_items')) { return $order->get_items(); } return array(); } /** * get the order currency * @param $order * @return array */ static function getOrderCurrency($order) { if (is_object($order) && method_exists($order, 'get_currency')) { return $order->get_currency(); } return NULL; } /** * Set order meta * @param $order * @param $key * @param $value * @return array */ static function setOrderMeta($order, $key, $value) { if (is_object($order) && method_exists($order, 'add_meta_data')) { $status = $order->add_meta_data($key, $value, true); if (self::customOrdersTableIsEnabled() && method_exists($order, 'save')) { $order->save(); } elseif (method_exists($order, 'save_meta_data')) { $order->save_meta_data(); } return $status; } return NULL; } /** * Set order item meta * @param $item * @param $key * @param $value * @return array */ static function setOrderItemMeta($item, $key, $value) { if (is_object($item) && method_exists($item, 'add_meta_data')) { return $item->add_meta_data($key, $value, true); } return NULL; } /** * Get order item data * @param $item * @return array */ static function getOrderItemData($item) { if (is_object($item) && method_exists($item, 'get_data')) { return $item->get_data(); } return NULL; } /** * Set order item meta * @param $item * @param $key * @return array */ static function getOrderItemMeta($item, $key) { if (is_object($item) && method_exists($item, 'get_meta')) { return $item->get_meta($key); } return NULL; } /** * get item id from the item object * @param $item * @return null */ static function getItemId($item) { if (is_object($item) && method_exists($item, 'get_product_id') && method_exists($item, 'get_variation_id')) { if ($product_id = $item->get_variation_id()) { return $product_id; } else { return $item->get_product_id(); } } return NULL; } /** * get term slug from category id * @param $id * @return bool */ static function getCategorySlugByID($id) { if (function_exists('get_term_by')) { $term = get_term_by('id', $id, 'product_cat', 'ARRAY_A'); return isset($term['slug']) ? $term['slug'] : NULL; } return NULL; } /** * get term slug from tag id * @param $id * @return bool */ static function getTagSlugByID($id) { $slug = false; if (function_exists('get_term_by')) { $term = get_term_by('id', $id, 'product_tag', 'ARRAY_A'); $slug = $term['slug']; } return $slug; } /** * get custom term slug from custom tag id * @param $id * @param $term_name * @return boo */ static function getTermSlugByID($id, $term_name) { $slug = false; if (function_exists('get_term_by')) { $term = get_term_by('id', $id, $term_name, 'ARRAY_A'); $slug = $term['slug']; } return $slug; } /** * get product id by using sku * @param $sku * @return bool|int */ static function getProductsBySku($sku) { if (empty($sku)) { return false; } if (function_exists('wc_get_product_id_by_sku')) { $id = wc_get_product_id_by_sku($sku); if (!empty($id)) { $product_id = Woocommerce::getProductParentId($id); if (empty($product_id)) { return $id; } else { return $product_id; } } } return false; } /** * get on sale products ids * @return array|bool */ static function getOnSaleProductsIds() { if (function_exists('wc_get_product_ids_on_sale')) { $on_sale_product_ids = wc_get_product_ids_on_sale(); return apply_filters('advanced_woo_discount_rules_get_on_sale_product_ids', $on_sale_product_ids); } return false; } /** * get all available attributes details * @return array */ static function getAllAvailableAttributeDetails() { global $wc_product_attributes; $attributes = array(); $available_attr = array(); if (function_exists('get_terms') && isset($wc_product_attributes) && is_array($wc_product_attributes) && !empty($wc_product_attributes)) { foreach ($wc_product_attributes as $attr_tax => $attr_value) { $terms = get_terms(array( 'taxonomy' => $attr_tax, 'hide_empty' => false, )); $attributes[$attr_tax] = $terms; if (is_array($terms) && !empty($terms)) { foreach ($terms as $term_detail) { if (is_object($term_detail)) { $term_id = isset($term_detail->term_id) ? $term_detail->term_id : ''; if (!empty($term_id)) { $available_attr[$attr_tax]['id'][] = $term_id; $available_attr[$attr_tax]['slug'][$term_id] = $term_detail->slug; } } } } } } return array('terms' => $attributes, 'attr' => $available_attr); } /** * get current cart quantities * @return int|mixed */ static function getCartTotalQuantities() { $cart_items = self::getCart(); $quantity = 0; if (!empty($cart_items)) { foreach ($cart_items as $cart_item) { $quantity += $cart_item['quantity']; } } return apply_filters('advanced_woo_discount_rules_get_cart_total_quantities', $quantity, $cart_items); } /** * define product loop has started * @param bool $echo * @return string|null */ static function productLoopStart($echo = true) { if (function_exists('woocommerce_product_loop_start')) { return woocommerce_product_loop_start($echo); } return NULL; } /** * Set product loop as end * @param bool $echo * @return string|null */ static function productLoopEnd($echo = true) { if (function_exists('woocommerce_product_loop_end')) { return woocommerce_product_loop_end($echo); } return NULL; } /** * set product loop properties * @param $option * @param $value * @return void|null */ static function setLoopProperties($option, $value) { if (function_exists('wc_set_loop_prop')) { return wc_set_loop_prop($option, $value); } return NULL; } /** * Validate coupon * * @param string $coupon_name * @return boolean * */ static function checkCouponAlreadyExistsInWooCommerce($coupon_name) { $coupon_args = array( 'name' => $coupon_name, 'post_type' => 'shop_coupon' ); $posts = get_posts($coupon_args); if (!empty($posts) && count($posts) > 0) { return true; } return false; } /** * Validate coupon * * @param string $coupon_name * @return array * */ static function validateDynamicCoupon($coupon_name) { $result['status'] = false; if (!empty($coupon_name)) { $coupon_exists = self::checkCouponAlreadyExistsInWooCommerce($coupon_name); if ($coupon_exists) { $result['status'] = false; $result['message'] = esc_html__('Coupon already exists in WooCommerce. Please select another name', 'woo-discount-rules'); } else { $result['status'] = true; } } $result['coupon'] = $coupon_name; return $result; } /** * get current product price html * @param $product * @return bool */ static function getPriceHtml($product){ $html = false; if(!empty($product)) if (is_object($product) && method_exists($product, 'get_price_html')) { $html = $product->get_price_html(); } return apply_filters('advanced_woo_discount_rules_get_price_html', $html, $product); } /** * get parent product of current product * @param $product * @return bool|false|WC_Product|null */ static function getParentProduct($product){ if (self::productTypeIs($product, 'variation')) { $parent_id = self::getProductParentId($product); $product = self::getProduct($parent_id); } return $product; } public static function getCheckOutPostData(){ if(self::$checkout_post === null){ $input = new Input(); $postData = $input->post('post_data', null, 'raw'); $postDataArray = array(); if($postData != ''){ parse_str($postData, $postDataArray); } self::$checkout_post = $postDataArray; } return self::$checkout_post; } /** * Get billing email from post data * * @return string * */ public static function getBillingEmailFromPost(){ $user_email = ''; $postData = self::getCheckOutPostData(); if(isset($postData['billing_email']) && !empty($postData['billing_email'])){ $user_email = $postData['billing_email']; } if(empty($user_email)){ if(function_exists('WC')){ $session = WC()->session; if(!empty($session)){ if(is_object($session) && method_exists($session, 'get')){ $customer = $session->get('customer'); if(isset($customer['email']) && !empty($customer['email'])){ $user_email = $customer['email']; } } } } } return $user_email; } /** * remove Html Tags * * @param $html * @return string */ public static function removeHtmlTags($html){ if (function_exists('wp_strip_all_tags')) { $html = wp_strip_all_tags($html); }else{ $html = strip_tags($html); } return $html; } /** * check is rtl function * @return bool */ public static function isRTLEnable(){ if(function_exists('is_rtl') && is_rtl()){ return true; } return false; } /** * Get the min or max variation regular price. * * @param object $product * @param string $min_or_max Min or max price. * @param boolean $for_display If true, prices will be adapted for display based on the `woocommerce_tax_display_shop` setting (including or excluding taxes). * @return string */ public static function get_variation_regular_price($product, $min_or_max = 'min', $for_display = false){ if(!empty($product)) if(is_object($product) && method_exists($product, 'get_variation_regular_price')){ return $product->get_variation_regular_price($min_or_max, $for_display); } return 0; } /** * Load discount table if any one variant has discount * */ public static function displayTableIfAnyOneVariantHasDiscount(){ return apply_filters('advanced_woo_discount_rules_display_bulk_table_if_any_one_variant_has_discount', false); } /** * get available product variations * @param $product * @return array */ public static function availableProductVariations($product){ $product_id = self::getProductId($product); if(isset(self::$product_variations[$product_id])){ return self::$product_variations[$product_id]; } $available_variations = array(); $is_variable_product = self::productTypeIs($product, 'variable'); if(!empty($product)) if ($is_variable_product && is_object($product) && method_exists($product, 'get_available_variations')){ $available_variations = $product->get_available_variations(); } self::$product_variations[$product_id] = $available_variations; return $available_variations; } /** * WC format price * */ public static function wc_format_decimal($price, $dp = false, $trim_zeros = false ){ if (function_exists('wc_format_decimal')) { $price = wc_format_decimal($price, $dp, $trim_zeros); } return $price; } /** * get the product visibility * @param $product - woocommerce product object * @return bool */ static function variationIsVisible($product) { if(!empty($product)){ if (is_object($product) && method_exists($product, 'variation_is_visible')) { return $product->variation_is_visible(); } } return false; } /** * @param array|WC_Product_Variation $variation Variation object. * @param bool $flat Should this be a flat list or HTML list? (default: false). * @param bool $include_names include attribute names/labels in the list. * @param bool $skip_attributes_in_name Do not list attributes already part of the variation name. * @return string */ static function wc_get_formatted_variation( $variation, $flat = false, $include_names = true, $skip_attributes_in_name = false ) { if (function_exists('wc_get_formatted_variation')) { return wc_get_formatted_variation($variation, $flat, $include_names, $skip_attributes_in_name); } else { return ''; } } /** * Get title of product * @param $product - woocommerce product object * @return string */ static function getTitleOfProduct($product){ if (is_numeric($product)) $product = self::getProduct($product); $product_id = self::getProductId($product); if(self::productTypeIs($product, 'variation')){ $attributes = (array) self::getProductAttributes($product); $modify_count = apply_filters('advanced_woo_discount_rules_variation_title_modify_count', 2); if (count($attributes) > $modify_count) { $variation_parent_id = self::getProductParentId($product); $variation_parent_title = get_the_title($variation_parent_id); $variation_separator = apply_filters('woocommerce_product_variation_title_attributes_separator', ' - ', $product); $variation_attributes = self::wc_get_formatted_variation($product, true, false); $product_title = $variation_parent_title . $variation_separator . $variation_attributes; } else { $product_title = get_the_title($product_id); } } else { $product_title = get_the_title($product_id); } return $product_title; } /** * Check cart needs shipping * * @return bool */ static function isCartNeedsShipping() { if (function_exists('WC')) { if(isset(WC()->cart) && WC()->cart != null){ if (is_object(WC()->cart) && method_exists(WC()->cart, 'needs_shipping')) { return WC()->cart->needs_shipping(); } } } return false; } /** * Check the product is purchasable or not * @param $product * @return bool */ static function checkProductIsPurchasable($product) { if(is_object($product) && method_exists($product, 'is_purchasable')) { return $product->is_purchasable(); } return false; } /** * Check custom order table feature (HPOS) is enabled or not * * @since 2.6.0 * * @return bool */ static function customOrdersTableIsEnabled() { if (class_exists('Automattic\WooCommerce\Utilities\OrderUtil') && method_exists('Automattic\WooCommerce\Utilities\OrderUtil', 'custom_orders_table_usage_is_enabled')) { return \Automattic\WooCommerce\Utilities\OrderUtil::custom_orders_table_usage_is_enabled(); } return false; } }