Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
unlimited-elements-for-elementor
/
provider
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php defined('UNLIMITED_ELEMENTS_INC') or die('restricted aceess'); class UniteCreatorWooIntegrate { const POST_TYPE_PRODUCT = "product"; const PRODUCT_TYPE_VARIABLE = "variable"; private $currency; private $currencySymbol; private $urlCheckout; private $urlCart; private $urlSite; private $urlCurrentPage; private $isInited = false; private static $instance; public function __construct() { $this->init(); } public static function onInsideEditorWooProduct($productID) { if (self::isWooActive() == false) { return false; } if (is_numeric($productID) == false) { return false; } if (empty($productID)) { return false; } if (class_exists("BeRocket_products_label")) { do_action('berocket_apl_set_label', true, $productID); } } public static function initActions() { add_action("ue_woocommerce_product_integrations", array("UniteCreatorWooIntegrate", "onInsideEditorWooProduct"), 10, 1); } private function init() { if (self::isWooActive() == false) { return false; } if ($this->isInited == true) { return false; } $this->currency = get_woocommerce_currency(); $this->currencySymbol = get_woocommerce_currency_symbol($this->currency); $this->urlCheckout = wc_get_checkout_url(); $this->urlCart = wc_get_cart_url(); $this->urlSite = home_url(); $this->urlCurrentPage = UniteFunctionsWPUC::getUrlCurrentPage(); $this->isInited = true; } public static function isWooActive() { if (class_exists('WooCommerce')) { return true; } return false; } public static function getInstance() { if (empty(self::$instance)) { self::$instance = new UniteCreatorWooIntegrate(); } return self::$instance; } private function addAddToCartData($arrProduct, $productID, $productSku) { $params = "add-to-cart={$productID}"; $urlAddCart = UniteFunctionsUC::addUrlParams($this->urlCurrentPage, $params); $type = UniteFunctionsUC::getVal($arrProduct, "woo_type"); $arrProduct["woo_link_addcart_cart"] = UniteFunctionsUC::addUrlParams($this->urlCart, $params); $arrProduct["woo_link_addcart_checkout"] = UniteFunctionsUC::addUrlParams($this->urlCheckout, $params); $addCartAttributes = "href=\"{$urlAddCart}\" data-quantity=\"1\" class=\"uc-button-addcart product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"{$productID}\" data-product_sku=\"{$productSku}\" rel=\"nofollow\""; if ($type == self::PRODUCT_TYPE_VARIABLE) { $urlProduct = get_permalink($productID); $addCartAttributes = "href=\"{$urlProduct}\" class=\"uc-button-addcart\" "; } $arrProduct["woo_addcart_ajax_attributes"] = $addCartAttributes; return $arrProduct; } public function getChildProducts($productID) { $productID = (int) $productID; if (empty($productID)) { return array(); } $objInfo = wc_get_product($productID); if (empty($objInfo)) { return array(); } $type = $objInfo->get_type(); if ($type !== "grouped") { return array(); } $arrChildren = $objInfo->get_children(); if (empty($arrChildren)) { return array(); } return $arrChildren; } private function addPricesFromTo($arrProduct, $arrPrices) { if (empty($arrPrices)) { return $arrProduct; } foreach ($arrPrices as $key => $arrPriceNumbers) { if (empty($arrPriceNumbers)) { $arrProduct["woo_" . $key . "_from"] = 0; $arrProduct["woo_" . $key . "_to"] = 0; continue; } $from = array_shift($arrPriceNumbers); if (empty($arrPriceNumbers)) { $to = $from; } else { $to = $arrPriceNumbers[count($arrPriceNumbers) - 1]; } $from = (float) $from; $to = (float) $to; $arrProduct["woo_" . $key . "_from"] = $from; $arrProduct["woo_" . $key . "_to"] = $to; } $regularPriceFrom = UniteFunctionsUC::getVal($arrProduct, "woo_regular_price_from"); $salePriceFrom = UniteFunctionsUC::getVal($arrProduct, "woo_sale_price_from"); if ($regularPriceFrom === $salePriceFrom) { $arrProduct["woo_sale_price_from"] = null; $arrProduct["woo_sale_price_to"] = null; } return $arrProduct; } private function getArrPropertyNames($prefix = "", $isAddVariableData = false) { $arrProperties = array($prefix . "sku", $prefix . "price", $prefix . "regular_price", $prefix . "sale_price", $prefix . "stock_quantity", $prefix . "stock_status", $prefix . "weight", $prefix . "length", $prefix . "width", $prefix . "height", $prefix . "average_rating", $prefix . "review_count"); if ($isAddVariableData == false) { return $arrProperties; } $arrVariable = array($prefix . "regular_price_from", $prefix . "regular_price_to", $prefix . "sale_price_from", $prefix . "sale_price_to", $prefix . "price_from", $prefix . "price_to"); array_splice($arrProperties, 4, 0, $arrVariable); return $arrProperties; } private function getProductData($productID) { if (function_exists("wc_get_product") == false) { return null; } $objInfo = wc_get_product($productID); if (empty($objInfo)) { return null; } $arrData = $objInfo->get_data(); $type = $objInfo->get_type(); $arrProperties = $this->getArrPropertyNames(); $productSku = UniteFunctionsUC::getVal($arrData, "sku"); $salePrice = UniteFunctionsUC::getVal($arrData, "sale_price"); $regularPrice = UniteFunctionsUC::getVal($arrData, "regular_price"); $price = UniteFunctionsUC::getVal($arrData, "price"); if (empty($regularPrice) && !empty($price)) { $regularPrice = $price; } $arrData["regular_price"] = $regularPrice; $arrProduct = array(); $arrProduct["woo_type"] = $type; foreach ($arrProperties as $propertyName) { $value = UniteFunctionsUC::getVal($arrData, $propertyName); if (is_array($value) == true) { continue; } $arrProduct["woo_" . $propertyName] = $value; } $arrWooStars = array(); $rating = UniteFunctionsUC::getVal($arrData, "average_rating"); $rating = floatval($rating); $arrWooStars = HelperHtmlUC::getRatingArray($rating); $arrProduct["woo_rating_stars"] = $arrWooStars; if ($type == self::PRODUCT_TYPE_VARIABLE) { $arrPrices = $objInfo->get_variation_prices(); $arrProduct = $this->addPricesFromTo($arrProduct, $arrPrices); $arrProduct["woo_price"] = $arrProduct["woo_price_from"]; $arrProduct["woo_regular_price"] = $arrProduct["woo_regular_price_from"]; $arrProduct["woo_sale_price"] = $arrProduct["woo_sale_price_from"]; } $regularPrice = UniteFunctionsUC::getVal($arrProduct, "woo_regular_price"); $salePrice = UniteFunctionsUC::getVal($arrProduct, "woo_sale_price"); $discountPercent = 0; if (!empty($salePrice) && !empty($regularPrice)) { $discountPercent = ($regularPrice - $salePrice) / $regularPrice * 100; $discountPercent = round($discountPercent); } $arrProduct["woo_discount_percent"] = $discountPercent; $arrProduct["woo_currency"] = $this->currency; $arrProduct["woo_currency_symbol"] = $this->currencySymbol; $arrProduct = $this->addAddToCartData($arrProduct, $productID, $productSku); return $arrProduct; } private function getWooProductKeysNoPost() { $arrProperties = $this->getArrPropertyNames("woo_", true); $arrKeys = array(); $arrKeys[] = "woo_type"; $arrKeys += $arrProperties; $arrKeys[] = "woo_rating_stars"; $arrKeys[] = "woo_discount_percent"; $arrKeys[] = "woo_currency"; $arrKeys[] = "woo_currency_symbol"; $arrKeys[] = "woo_link_addcart_cart"; $arrKeys[] = "woo_link_addcart_checkout"; $arrKeys[] = "woo_addcart_ajax_attributes"; return $arrKeys; } private function getWooData($postType, $postID) { if (self::isWooActive() == false) { return null; } switch ($postType) { case self::POST_TYPE_PRODUCT: $arrData = $this->getProductData($postID); return $arrData; break; default: return null; break; } } public static function getWooDataByType($postType, $postID) { $objInstance = self::getInstance(); $response = $objInstance->getWooData($postType, $postID); return $response; } private function getWooKeys($postID) { if (self::isWooActive() == false) { return null; } $post = get_post($postID); if (empty($post)) { return null; } $postType = $post->post_type; $arrData = self::getWooDataByType($postType, $postID); if (empty($arrData)) { return false; } $arrKeys = array_keys($arrData); return $arrKeys; } public static function getWooKeysByPostID($postID) { $instance = self::getInstance(); $response = $instance->getWooKeys($postID); return $response; } public static function getWooKeysNoPost() { $instance = self::getInstance(); $response = $instance->getWooProductKeysNoPost(); return $response; } private function putHtmlFiltersJS() { UniteProviderFunctionsUC::addjQueryInclude(); $urlScriptFile = GlobalsUC::$url_assets_internal . "js/uc_woocommerce.js"; HelperUC::addScriptAbsoluteUrl($urlScriptFile, "uc_woo_integrate"); } private function putHtmlFilter_order($params) { $arrOptions = array(); $arrOptions["name"] = __("Product Name", "unlimited-elements-for-elementor"); $arrOptions["price"] = __("Price", "unlimited-elements-for-elementor"); $name = "uc_order"; $value = UniteFunctionsUC::getPostGetVariable($name, "", UniteFunctionsUC::SANITIZE_KEY); $htmlSelect = HelperHtmlUC::getHTMLSelect($arrOptions, $value, "name='{$name}' class='uc-woo-filter uc-woo-filter-order'", true); ?> <form class="uc-woocommerce-ordering" method="get"> <?php echo $htmlSelect; ?> </form> <?php $this->putHtmlFiltersJS(); } public function putHtmlFilter($filterName, $params = null) { switch ($filterName) { case "order": $this->putHtmlFilter_order($params); break; default: UniteFunctionsUC::throwError("putWooFilter error: filter {$filterName} not exists"); break; } } }