Ejemplo n.º 1
0
         if (!empty($arParams["PRODUCT_PROPERTIES"])) {
             if (isset($_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]]) && is_array($_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]])) {
                 $product_properties = CIBlockPriceTools::CheckProductProperties($arParams["IBLOCK_ID"], $productID, $arParams["PRODUCT_PROPERTIES"], $_REQUEST[$arParams["PRODUCT_PROPS_VARIABLE"]], $arParams['PARTIAL_PRODUCT_PROPERTIES'] == 'Y');
                 if (!is_array($product_properties)) {
                     $strError = GetMessage("CATALOG_PARTIAL_BASKET_PROPERTIES_ERROR");
                     $successfulAdd = false;
                 }
             } else {
                 $strError = GetMessage("CATALOG_EMPTY_BASKET_PROPERTIES_ERROR");
                 $successfulAdd = false;
             }
         }
     } else {
         $skuAddProps = isset($_REQUEST['basket_props']) && !empty($_REQUEST['basket_props']) ? $_REQUEST['basket_props'] : '';
         if (!empty($arParams["OFFERS_CART_PROPERTIES"]) || !empty($skuAddProps)) {
             $product_properties = CIBlockPriceTools::GetOfferProperties($productID, $arParams["IBLOCK_ID"], $arParams["OFFERS_CART_PROPERTIES"], $skuAddProps);
         }
     }
 }
 if ($arParams["USE_PRODUCT_QUANTITY"]) {
     if (isset($_REQUEST[$arParams["PRODUCT_QUANTITY_VARIABLE"]])) {
         $QUANTITY = doubleval($_REQUEST[$arParams["PRODUCT_QUANTITY_VARIABLE"]]);
     }
 }
 if (0 >= $QUANTITY) {
     $rsRatios = CCatalogMeasureRatio::getList(array(), array('PRODUCT_ID' => $productID), false, false, array('PRODUCT_ID', 'RATIO'));
     if ($arRatio = $rsRatios->Fetch()) {
         $intRatio = (int) $arRatio['RATIO'];
         $dblRatio = doubleval($arRatio['RATIO']);
         $QUANTITY = $dblRatio > $intRatio ? $dblRatio : $intRatio;
     }
Ejemplo n.º 2
0
<?php

define("NOT_CHECK_PERMISSIONS", true);
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";
if (!CModule::IncludeModule("catalog")) {
    return;
}
if ($_SERVER["REQUEST_METHOD"] == "POST" && strlen($_POST["action"]) > 0 && check_bitrix_sessid()) {
    $APPLICATION->RestartBuffer();
    switch ($_POST["action"]) {
        case "catalogSetAdd2Basket":
            if (is_array($_POST["set_ids"])) {
                foreach ($_POST["set_ids"] as $itemID) {
                    $product_properties = true;
                    if (!empty($_POST["setOffersCartProps"])) {
                        $product_properties = CIBlockPriceTools::GetOfferProperties($itemID, $_POST["iblockId"], $_POST["setOffersCartProps"]);
                    }
                    $ratio = 1;
                    if ($_POST["itemsRatio"][$itemID]) {
                        $ratio = $_POST["itemsRatio"][$itemID];
                    }
                    if (intval($itemID)) {
                        Add2BasketByProductID(intval($itemID), $ratio, array("LID" => $_POST["lid"]), $product_properties);
                    }
                }
            }
            break;
        case "ajax_recount_prices":
            if (strlen($_POST["currency"]) > 0) {
                $arPices = array("formatSum" => "", "formatOldSum" => "", "formatDiscDiffSum" => "");
                if ($_POST["sumPrice"]) {
Ejemplo n.º 3
0
 public static function GetSetItems($productID, $intType, $arProducInfo = array())
 {
     $arProductId = array();
     static $proxyCatalogProductSet = array();
     static $proxyCatalogSkuData = array();
     static $proxyCatalogProduct = array();
     static $proxyIblockProperty = array();
     static $proxyProductProperty = array();
     $proxyCatalogProductSetKey = $productID . "|" . $intType;
     if (!empty($proxyCatalogProductSet[$proxyCatalogProductSetKey]) && is_array($proxyCatalogProductSet[$proxyCatalogProductSetKey])) {
         $arSets = $proxyCatalogProductSet[$proxyCatalogProductSetKey];
     } else {
         $arSets = CCatalogProductSet::getAllSetsByProduct($productID, $intType);
         if (!empty($arSets) && is_array($arSets)) {
             $proxyCatalogProductSet[$proxyCatalogProductSetKey] = $arSets;
         }
     }
     if (is_array($arSets)) {
         foreach ($arSets as $k => $arSet) {
             foreach ($arSet["ITEMS"] as $k1 => $item) {
                 $arItem = self::GetProductData(array("PRODUCT_ID" => $item["ITEM_ID"], "QUANTITY" => $item["QUANTITY"], "CHECK_QUANTITY" => "N", "CHECK_PRICE" => "N"));
                 if (array_key_exists('QUANTITY_TRACE', $arItem)) {
                     unset($arItem['QUANTITY_TRACE']);
                 }
                 $arItem["PRODUCT_ID"] = $item["ITEM_ID"];
                 $arItem["MODULE"] = "catalog";
                 $arItem["PRODUCT_PROVIDER_CLASS"] = "CCatalogProductProvider";
                 if ($intType == CCatalogProductSet::TYPE_SET) {
                     $arItem['SET_DISCOUNT_PERCENT'] = $item['DISCOUNT_PERCENT'] == '' ? false : (double) $item['DISCOUNT_PERCENT'];
                 }
                 $arProductId[] = $item["ITEM_ID"];
                 $arItem["PROPS"] = array();
                 if (!empty($proxyCatalogSkuData[$item["ITEM_ID"]]) && is_array($proxyCatalogSkuData[$item["ITEM_ID"]])) {
                     $arParentSku = $proxyCatalogSkuData[$item["ITEM_ID"]];
                 } else {
                     if ($arParentSku = CCatalogSku::GetProductInfo($item["ITEM_ID"])) {
                         $proxyCatalogSkuData[$item["ITEM_ID"]] = $arParentSku;
                     }
                 }
                 if (!empty($arParentSku)) {
                     $arPropsSku = array();
                     if (!($arProduct = static::getHitCache('IBLOCK_ELEMENT', $item["ITEM_ID"]))) {
                         $dbProduct = CIBlockElement::GetList(array(), array("ID" => $item["ITEM_ID"]), false, false, array('ID', 'IBLOCK_ID', 'NAME', 'IBLOCK_SECTION_ID'));
                         if ($arProduct = $dbProduct->Fetch()) {
                             static::setHitCache('IBLOCK_ELEMENT', $item["ITEM_ID"], $arProduct);
                         }
                     }
                     if (!($arPropsSku = static::getHitCache('IBLOCK_PROPERTY', $arProduct["IBLOCK_ID"]))) {
                         $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK"));
                         while ($arOfferProperties = $dbOfferProperties->Fetch()) {
                             $arPropsSku[] = $arOfferProperties["CODE"];
                         }
                         static::setHitCache('IBLOCK_PROPERTY', $arProduct["IBLOCK_ID"], $arPropsSku);
                     }
                     $proxyProductPropertyKey = $item["ITEM_ID"] . "_" . $arParentSku["IBLOCK_ID"] . "_" . md5(join('|', $arPropsSku));
                     if (!($product_properties = static::getHitCache('PRODUCT_PROPERTY', $proxyProductPropertyKey))) {
                         $product_properties = CIBlockPriceTools::GetOfferProperties($item["ITEM_ID"], $arParentSku["IBLOCK_ID"], $arPropsSku);
                         static::setHitCache('PRODUCT_PROPERTY', $proxyProductPropertyKey, $product_properties);
                     }
                     foreach ($product_properties as $propData) {
                         $arItem["PROPS"][] = array("NAME" => $propData["NAME"], "CODE" => $propData["CODE"], "VALUE" => $propData["VALUE"], "SORT" => $propData["SORT"]);
                     }
                 }
                 $arSets[$k]["ITEMS"][$k1] = array_merge($item, $arItem);
             }
         }
         if (!($productList = static::getHitCache('IBLOCK_ELEMENT_LIST', $productID))) {
             $rsProducts = CIBlockElement::GetList(array(), array('ID' => $arProductId), false, false, array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "IBLOCK_TYPE_ID", "XML_ID"));
             while ($arProduct = $rsProducts->GetNext()) {
                 $productList[] = $arProduct;
             }
             if (!empty($productList) && is_array($productList)) {
                 static::setHitCache('IBLOCK_ELEMENT_LIST', $productID, $productList);
             }
         }
         if (!empty($productList) && is_array($productList)) {
             foreach ($productList as $arProduct) {
                 foreach ($arSets as $k => $arSet) {
                     foreach ($arSet["ITEMS"] as $k1 => $item) {
                         if ($item["ITEM_ID"] == $arProduct["ID"]) {
                             $arProps = array();
                             $strIBlockXmlID = strval(CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID'));
                             if ($strIBlockXmlID != "") {
                                 $arProps[] = array("NAME" => "Catalog XML_ID", "CODE" => "CATALOG.XML_ID", "VALUE" => $strIBlockXmlID);
                             }
                             $arProps[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $arProduct["XML_ID"]);
                             $arSets["{$k}"]["ITEMS"][$k1]["IBLOCK_ID"] = $arProduct["IBLOCK_ID"];
                             $arSets["{$k}"]["ITEMS"][$k1]["IBLOCK_SECTION_ID"] = $arProduct["IBLOCK_SECTION_ID"];
                             $arSets["{$k}"]["ITEMS"][$k1]["PREVIEW_PICTURE"] = $arProduct["PREVIEW_PICTURE"];
                             $arSets["{$k}"]["ITEMS"][$k1]["DETAIL_PICTURE"] = $arProduct["DETAIL_PICTURE"];
                             $arSets["{$k}"]["ITEMS"][$k1]["PROPS"] = array_merge($arSets["{$k}"]["ITEMS"][$k1]["PROPS"], $arProps);
                         }
                     }
                 }
             }
         }
     }
     foreach (GetModuleEvents("sale", "OnGetSetItems", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arSets));
     }
     return $arSets;
 }
Ejemplo n.º 4
0
    } else {
        $action = ToUpper($_REQUEST[$arParams["ACTION_VARIABLE"]]);
    }
    $productID = intval($_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]]);
    //get props sku
    $product_properties = array();
    $arPropsSku = array();
    $arParentSku = CCatalogSku::GetProductInfo($productID);
    if ($arParentSku && count($arParentSku) > 0) {
        $dbProduct = CIBlockElement::GetList(array(), array("ID" => $productID), false, false, array('IBLOCK_ID', 'IBLOCK_SECTION_ID'));
        $arProduct = $dbProduct->Fetch();
        $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK"));
        while ($arOfferProperties = $dbOfferProperties->Fetch()) {
            $arPropsSku[] = $arOfferProperties["CODE"];
        }
        $product_properties = CIBlockPriceTools::GetOfferProperties($productID, $arParentSku["IBLOCK_ID"], $arPropsSku);
    }
    if (($action == "ADD2BASKET" || $action == "BUY") && $productID > 0) {
        if (CModule::IncludeModule('catalog')) {
            Add2BasketByProductID($productID, 1, array(), $product_properties);
        }
        if ($action == "BUY") {
            LocalRedirect($arParams["BASKET_URL"]);
        } else {
            LocalRedirect($APPLICATION->GetCurPageParam("", array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"])));
        }
    }
}
//end add to basket
$arViewed = array();
$arViewedId = array();
Ejemplo n.º 5
0
 $arProps = array();
 if (strpos($newProductId['XML_ID'], '#') === false) {
     $parentIterator = \Bitrix\Iblock\ElementTable::getList(array('select' => array('ID', 'XML_ID'), 'filter' => array('ID' => $parentId)));
     if ($parentProduct = $parentIterator->fetch()) {
         $newProductId['XML_ID'] = $parentProduct['XML_ID'] . '#' . $newProductId['XML_ID'];
     }
     unset($parentProduct, $parentIterator);
 }
 $arFields["PRODUCT_XML_ID"] = $newProductId['XML_ID'];
 $propertyIterator = \Bitrix\Iblock\PropertyTable::getList(array('select' => array('ID', 'CODE'), 'filter' => array('IBLOCK_ID' => $newProductId['IBLOCK_ID'], '!ID' => $sku['SKU_PROPERTY_ID'])));
 while ($property = $propertyIterator->fetch()) {
     $property['CODE'] = (string) $property['CODE'];
     $arPropsSku[] = $property['CODE'] != '' ? $property['CODE'] : $property['ID'];
 }
 unset($property, $propertyIterator);
 $product_properties = CIBlockPriceTools::GetOfferProperties($newProductId['ID'], $sku['PRODUCT_IBLOCK_ID'], $arPropsSku);
 $newValues = array();
 foreach ($product_properties as $productSkuProp) {
     $bFieldExists = false;
     foreach ($strOffersProps as $existingSkuProp) {
         if ($existingSkuProp == $productSkuProp["CODE"]) {
             $bFieldExists = true;
             break;
         }
     }
     if ($bFieldExists === true) {
         $newValues[] = array("NAME" => $productSkuProp["NAME"], "CODE" => $productSkuProp["CODE"], "VALUE" => $productSkuProp["VALUE"], "SORT" => $productSkuProp["SORT"]);
     }
 }
 $newValues[] = array("NAME" => "Product XML_ID", "CODE" => "PRODUCT.XML_ID", "VALUE" => $newProductId["XML_ID"]);
 $arFields['PROPS'] = isset($arItem['PROPS']) ? updateBasketOffersProps($arItem['PROPS'], $newValues) : $newValues;
Ejemplo n.º 6
0
 /**
  * Process Puy Product.
  *
  * @param int $productID
  * @param float $quantity
  * @param array $values
  * @param array $arRewriteFields
  * @throws void|Bitrix\Main\SystemException
  */
 protected function addProductToBasket($productID, $quantity, $values = array(), $arRewriteFields = array())
 {
     $productProperties = array();
     $productID = (int) $productID;
     $intProductIBlockID = (int) CIBlockElement::GetIBlockByID($productID);
     if ($intProductIBlockID > 0) {
         $productCatalogInfo = CCatalogSKU::getInfoByIblock($intProductIBlockID);
         $isOffer = CCatalogSKU::TYPE_OFFERS == $productCatalogInfo['CATALOG_TYPE'];
         if ($this->arParams['ADD_PROPERTIES_TO_BASKET'] == 'Y') {
             // Is not offer
             if (!$isOffer) {
                 // Props not empty
                 if (!empty($this->arParams['CART_PROPERTIES'][$intProductIBlockID])) {
                     $productProperties = CIBlockPriceTools::CheckProductProperties($intProductIBlockID, $productID, $this->arParams['CART_PROPERTIES'][$intProductIBlockID], $values, $this->arParams['PARTIAL_PRODUCT_PROPERTIES'] == 'Y');
                     if (!is_array($productProperties)) {
                         throw new SystemException(Loc::getMessage("CVP_PARTIAL_BASKET_PROPERTIES_ERROR"));
                     }
                 }
             } else {
                 if (!empty($this->arParams['CART_PROPERTIES'][$intProductIBlockID])) {
                     $productProperties = CIBlockPriceTools::GetOfferProperties($productID, $productCatalogInfo['PRODUCT_IBLOCK_ID'], $this->arParams['CART_PROPERTIES'][$intProductIBlockID]);
                 }
             }
         }
         if (0 >= $quantity) {
             $rsRatios = CCatalogMeasureRatio::getList(array(), array('PRODUCT_ID' => $productID), false, false, array('PRODUCT_ID', 'RATIO'));
             if ($arRatio = $rsRatios->Fetch()) {
                 $intRatio = (int) $arRatio['RATIO'];
                 $dblRatio = (double) $arRatio['RATIO'];
                 $quantity = $dblRatio > $intRatio ? $dblRatio : $intRatio;
             }
         }
         if (0 >= $quantity) {
             $quantity = 1;
         }
     } else {
         throw new SystemException(Loc::getMessage('CVP_CATALOG_PRODUCT_NOT_FOUND') . ".");
     }
     if (!Add2BasketByProductID($productID, $quantity, $arRewriteFields, $productProperties)) {
         throw new SystemException(Loc::getMessage("CVP_CATALOG_ERROR2BASKET") . ".");
     }
 }
	public static function GetSetItems($productID, $intType, $arProducInfo = array())
	{
		$arProductId = array();
		$arSets = CCatalogProductSet::getAllSetsByProduct($productID, $intType);

		if (is_array($arSets))
		{
			foreach ($arSets as $k => $arSet)
			{
				foreach ($arSet["ITEMS"] as $k1 => $item)
				{
					$arItem = self::GetProductData(array("PRODUCT_ID" => $item["ITEM_ID"], "QUANTITY" => $item["QUANTITY"], "CHECK_QUANTITY" => "N", "CHECK_PRICE" => "N"));

					$arItem["PRODUCT_ID"] = $item["ITEM_ID"];
					$arItem["MODULE"] = "catalog";
					$arItem["PRODUCT_PROVIDER_CLASS"] = "CCatalogProductProvider";
					if ($intType == CCatalogProductSet::TYPE_SET)
					{
						$arItem['SET_DISCOUNT_PERCENT'] = ($item['DISCOUNT_PERCENT'] == '' ? false : (float)$item['DISCOUNT_PERCENT']);
					}

					$arProductId[] = $item["ITEM_ID"];

					$arItem["PROPS"] = array();
					$arParentSku = CCatalogSku::GetProductInfo($item["ITEM_ID"]);
					if (!empty($arParentSku))
					{
						$arPropsSku = array();

						$dbProduct = CIBlockElement::GetList(array(), array("ID" => $item["ITEM_ID"]), false, false, array('IBLOCK_ID', 'IBLOCK_SECTION_ID'));
						$arProduct = $dbProduct->Fetch();

						$dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK"));
						while($arOfferProperties = $dbOfferProperties->Fetch())
							$arPropsSku[] = $arOfferProperties["CODE"];

						$product_properties = CIBlockPriceTools::GetOfferProperties(
							$item["ITEM_ID"],
							$arParentSku["IBLOCK_ID"],
							$arPropsSku
						);

						foreach ($product_properties as $propData)
						{
							$arItem["PROPS"][] = array(
								"NAME" => $propData["NAME"],
								"CODE" => $propData["CODE"],
								"VALUE" => $propData["VALUE"],
								"SORT" => $propData["SORT"]
							);
						}
					}

					$arSets[$k]["ITEMS"][$k1] = array_merge($item, $arItem);
				}
			}

			$rsProducts = CIBlockElement::GetList(
				array(),
				array('ID' => $arProductId),
				false,
				false,
				array("ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "PREVIEW_PICTURE", "DETAIL_PICTURE", "IBLOCK_TYPE_ID", "XML_ID")
			);
			while ($arProduct = $rsProducts->GetNext())
			{
				foreach ($arSets as $k => $arSet)
				{
					foreach ($arSet["ITEMS"] as $k1 => $item)
					{
						if ($item["ITEM_ID"] == $arProduct["ID"])
						{
							$arProps = array();
							$strIBlockXmlID = strval(CIBlock::GetArrayByID($arProduct['IBLOCK_ID'], 'XML_ID'));
							if ($strIBlockXmlID != "")
							{
								$arProps[] = array(
									"NAME" => "Catalog XML_ID",
									"CODE" => "CATALOG.XML_ID",
									"VALUE" => $strIBlockXmlID
								);
							}

							$arProps[] = array(
								"NAME" => "Product XML_ID",
								"CODE" => "PRODUCT.XML_ID",
								"VALUE" => $arProduct["XML_ID"]
							);

							$arSets["$k"]["ITEMS"][$k1]["IBLOCK_ID"] = $arProduct["IBLOCK_ID"];
							$arSets["$k"]["ITEMS"][$k1]["IBLOCK_SECTION_ID"] = $arProduct["IBLOCK_SECTION_ID"];
							$arSets["$k"]["ITEMS"][$k1]["PREVIEW_PICTURE"] = $arProduct["PREVIEW_PICTURE"];
							$arSets["$k"]["ITEMS"][$k1]["DETAIL_PICTURE"] = $arProduct["DETAIL_PICTURE"];
							$arSets["$k"]["ITEMS"][$k1]["PROPS"] = array_merge($arSets["$k"]["ITEMS"][$k1]["PROPS"], $arProps);
						}
					}
				}
			}
		}

		foreach(GetModuleEvents("sale", "OnGetSetItems", true) as $arEvent)
			ExecuteModuleEventEx($arEvent, array(&$arSets));

		return $arSets;
	}
Ejemplo n.º 8
0
 } else {
     $dbViewsList = CSaleViewedProduct::GetList(array(), array("FUSER_ID" => $arFuserItems["ID"], "PRODUCT_ID" => $PRODUCT_ID), false, false);
     $arViews = $dbViewsList->Fetch();
 }
 if (strlen($viewedError) <= 0) {
     $arFields = array("PROPS" => array());
     $arParentSku = CCatalogSku::GetProductInfo($PRODUCT_ID);
     if ($arParentSku && count($arParentSku) > 0) {
         $arPropsSku = array();
         $dbProduct = CIBlockElement::GetList(array(), array("ID" => $PRODUCT_ID), false, false, array('IBLOCK_ID'));
         $arProduct = $dbProduct->Fetch();
         $dbOfferProperties = CIBlock::GetProperties($arProduct["IBLOCK_ID"], array(), array("!XML_ID" => "CML2_LINK"));
         while ($arOfferProperties = $dbOfferProperties->Fetch()) {
             $arPropsSku[] = $arOfferProperties["CODE"];
         }
         $arFields["PROPS"] = CIBlockPriceTools::GetOfferProperties($PRODUCT_ID, $arParentSku["IBLOCK_ID"], $arPropsSku);
     }
     $arFields["USER_ID"] = $ID;
     $arFields["PRODUCT_ID"] = $PRODUCT_ID;
     $arFields["PRICE"] = $arViews["PRICE"];
     $arFields["CURRENCY"] = $arViews["CURRENCY"];
     $arFields["QUANTITY"] = 1;
     $arFields["LID"] = $arViews["LID"];
     $arFields["DETAIL_PAGE_URL"] = $arViews["DETAIL_PAGE_URL"];
     $arFields["NAME"] = $arViews["NAME"];
     $arFields["CAN_BUY"] = "Y";
     $arFields["TYPE"] = $arViews["TYPE"];
     $arFields["MODULE"] = $arViews["MODULE"];
     if ($arViews["MODULE"] == "catalog") {
         $arFields["CALLBACK_FUNC"] = "CatalogBasketCallback";
         $arFields["ORDER_CALLBACK_FUNC"] = "CatalogBasketOrderCallback";