function executeComponent() { $arFilter = array('IBLOCK_ID' => $this->arParams['IBLOCK_ID'], 'ACTIVE' => 'Y'); if (true || $this->StartResultCache()) { $CIBlockElement = new CIBlockElement(); $CFile = new \CFile(); $aElts = array(); $eltsSelectFields = array_merge(array('ID', 'NAME', 'CODE', 'PREVIEW_PICTURE', 'DETAIL_PICTURE', 'DETAIL_PAGE_URL'), $this->getIBlockProperties($this->arParams['IBLOCK_ID'])); $rsElts = $CIBlockElement->GetList(array('SORT' => 'asc', 'date_active_from' => 'DESC'), $arFilter, false, false, array('ID', 'NAME')); if (intval($rsElts->SelectedRowsCount())) { while ($arElt = $rsElts->Fetch()) { $aElts[] = array('ID' => $arElt['ID'], 'NAME' => $arElt['NAME']); } $arElt = $CIBlockElement->GetList(array('SORT' => 'asc', 'ID' => 'DESC'), array_merge($arFilter, array('ID' => $aElts[0]['ID'])), false, false, $eltsSelectFields)->GetNext(); if ($arElt['DETAIL_PICTURE']) { $arElt['DETAIL_PICTURE'] = $CFile->GetPath($arElt['DETAIL_PICTURE']); } elseif ($arElt['PREVIEW_PICTURE']) { $arElt['DETAIL_PICTURE'] = $CFile->GetPath($arElt['PREVIEW_PICTURE']); } $arPrice = CPrice::GetList(array(), array("PRODUCT_ID" => $arElt['ID']))->Fetch(); $arElt['PRICE'] = $arPrice['PRICE']; $this->arResult['ITEMS'] = $aElts; $this->arResult['ITEM'] = $arElt; $this->IncludeComponentTemplate(); } } }
function Add($arFields, $boolRecalc = false) { global $DB; $boolBase = false; $arFields['RECALC'] = $boolRecalc === true; foreach (GetModuleEvents("catalog", "OnBeforePriceAdd", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } if (!CPrice::CheckFields("ADD", $arFields, 0)) { return false; } if (isset($arFields['RECALC']) && $arFields['RECALC'] === true) { CPrice::ReCountFromBase($arFields, $boolBase); if (!$boolBase && $arFields['EXTRA_ID'] <= 0) { return false; } } $arInsert = $DB->PrepareInsert("b_catalog_price", $arFields); $strSql = "INSERT INTO b_catalog_price(" . $arInsert[0] . ") VALUES(" . $arInsert[1] . ")"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $ID = (int) $DB->LastID(); if ($ID > 0 && $boolBase) { CPrice::ReCountForBase($arFields); } foreach (GetModuleEvents("catalog", "OnPriceAdd", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } // strange copy-paste bug foreach (GetModuleEvents("sale", "OnPriceAdd", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } return $ID; }
function Add($arFields, $boolRecalc = false) { global $DB; if (!CPrice::CheckFields("ADD", $arFields, 0)) { return false; } $boolBase = false; $arFields['RECALC'] = $boolRecalc === true ? true : false; $events = GetModuleEvents("catalog", "OnBeforePriceAdd"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array(&$arFields)); } if (!empty($arFields['RECALC']) && $arFields['RECALC'] === true) { CPrice::ReCountFromBase($arFields, $boolBase); } $arInsert = $DB->PrepareInsert("b_catalog_price", $arFields); $strSql = "INSERT INTO b_catalog_price(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $ID = IntVal($DB->LastID()); if ($ID > 0 && $boolBase == true) { CPrice::ReCountForBase($arFields); } $events = GetModuleEvents("catalog", "OnPriceAdd"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } // strange copy-paste bug $events = GetModuleEvents("sale", "OnPriceAdd"); while ($arEvent = $events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } return $ID; }
protected function loadFromDatabase() { if (!isset($this->fields)) { $pricesList = \CPrice::getListEx(array(), array("=PRODUCT_ID" => $this->id, "+<=QUANTITY_FROM" => 1, "+>=QUANTITY_TO" => 1), false, false, array("PRICE", "CURRENCY", "CATALOG_GROUP_ID", "CATALOG_GROUP_CODE")); $this->fields = array(); while ($priceInfo = $pricesList->fetch()) { $price_id = $priceInfo["CATALOG_GROUP_ID"]; $price = \FormatCurrency($priceInfo["PRICE"], $priceInfo["CURRENCY"]); $this->addField($price_id, $price_id, $price); $this->addField($priceInfo["CATALOG_GROUP_CODE"], $price_id, $price); } } return is_array($this->fields); }
private function setExtra($productId, $priceTypeId, $extraId) { $list = CPrice::GetList(array(), array('PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => $priceTypeId), false, false, array('ID', 'EXTRA_ID')); $arFields = array('PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => $priceTypeId, 'EXTRA_ID' => $extraId, 'CURRENCY' => 'USD'); if ($res = $list->Fetch()) { if ($res['EXTRA_ID'] != $extraId) { CPrice::Update($res['ID'], $arFields, true); } } else { CPrice::Add($arFields, true); } unset($list); unset($res); unset($resultUp); }
function Update($ID, $arFields) { global $DB; $ID = intval($ID); if (!CExtra::CheckFields('UPDATE', $arFields, $ID)) { return false; } $strUpdate = $DB->PrepareUpdate("b_catalog_extra", $arFields); $strSql = "UPDATE b_catalog_extra SET " . $strUpdate . " WHERE ID = '" . intval($ID) . "'"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if (!empty($arFields["RECALCULATE"]) && $arFields["RECALCULATE"] == "Y") { CPrice::ReCalculate("EXTRA", $ID, $arFields["PERCENTAGE"]); } unset($GLOBALS["MAIN_EXTRA_LIST_CACHE"]); return true; }
function add_element($iblock_id, $section_id, $NAME, $PRICE_EUR, $P, $DETAIL_PICTURE) { $el = new CIBlockElement(); //test_dump($P); $arFields = array("IBLOCK_ID" => $iblock_id, "NAME" => $NAME, "CODE" => $P["ARTNUMBER"], "ACTIVE" => "Y", "IBLOCK_SECTION_ID" => $section_id, "DETAIL_TEXT" => $P["DESCRIPTION_TEXT"], "DETAIL_TEXT_TYPE" => "html", "PROPERTY_VALUES" => $P, "DETAIL_PICTURE" => $DETAIL_PICTURE); if ($last_el_id = $el->Add($arFields)) { echo "New ID: " . $last_el_id . "<br>"; $arFields = array("ID" => $last_el_id, "VAT_INCLUDED" => "Y"); if (CCatalogProduct::Add($arFields)) { echo "Добавили параметры товара к элементу каталога " . $last_el_id . "<br>"; $arFields = array("PRODUCT_ID" => $last_el_id, "CATALOG_GROUP_ID" => 1, "PRICE" => $PRICE_EUR, "CURRENCY" => "EUR"); CPrice::Add($arFields); } else { echo "Ошибка добавления параметров товаров"; } } else { echo "Error: " . $el->LAST_ERROR . "<br>"; } }
function Update($ID, $arFields) { global $DB; $ID = intval($ID); if (0 >= $ID) { return false; } if (!CExtra::CheckFields('UPDATE', $arFields, $ID)) { return false; } $strUpdate = $DB->PrepareUpdate("b_catalog_extra", $arFields); if (!empty($strUpdate)) { $strSql = "UPDATE b_catalog_extra SET " . $strUpdate . " WHERE ID = " . $ID; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if (isset($arFields['RECALCULATE']) && 'Y' == $arFields['RECALCULATE']) { CPrice::ReCalculate('EXTRA', $ID, $arFields['PERCENTAGE']); } CExtra::ClearCache(); } return true; }
/** * [getFavoriteProducts description] * @param array $arFavorites * @return array products */ function getFavoriteProducts($arFavorites) { global $USER; foreach ($arFavorites as $key => $id) { $arSelect = array(); $arFilter = array("IBLOCK_ID" => 17, "ACTIVE" => "Y", "ID" => $id); $res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect); if ($ob = $res->GetNextElement()) { $arItems = $ob->GetFields(); $arItems["PROPERTIES"] = $ob->GetProperties(); $dbPrice = CPrice::GetList(array("QUANTITY_FROM" => "ASC", "QUANTITY_TO" => "ASC", "SORT" => "ASC"), array("PRODUCT_ID" => $arItems["ID"]), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "QUANTITY_FROM", "QUANTITY_TO")); if ($arPrice = $dbPrice->Fetch()) { $arDiscounts = CCatalogDiscount::GetDiscountByPrice($arPrice["ID"], $USER->GetUserGroupArray(), "N", SITE_ID); $discountPrice = CCatalogProduct::CountPriceWithDiscount($arPrice["PRICE"], $arPrice["CURRENCY"], $arDiscounts); $arPrice["DISCOUNT_VALUE"] = $discountPrice; $arItems["PRICES"] = $arPrice; } } if ($arItems) { $arFav[] = $arItems; } } return $arFav; }
echo GetMessage("C2IT_PRICE"); ?> </td> <td align="center"><?php echo GetMessage("C2IT_CURRENCY"); ?> </td> </tr> </thead> <tbody id="container3_<?php echo $arCatalogGroup["ID"]; ?> "> <?php $ind = -1; $dbPriceList = CPrice::GetList(array("QUANTITY_FROM" => "ASC", "QUANTITY_TO" => "ASC"), array("PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $arCatalogGroup["ID"])); $arPrice = $dbPriceList->Fetch(); for ($i = 0, $intCount = count($arPriceBoundaries); $i < $intCount; $i++) { $boolExistPrice = false; $ind++; $str_CAT_QUANTITY_FROM = $arPriceBoundaries[$i]["FROM"]; $str_CAT_QUANTITY_TO = $arPriceBoundaries[$i]["TO"]; if ($arPrice && intval($arPrice["QUANTITY_FROM"]) == $arPriceBoundaries[$i]["FROM"]) { $str_CAT_ID = $arPrice["ID"]; $str_CAT_EXTRA = $arPrice["EXTRA_ID"]; $str_CAT_PRICE = $arPrice["PRICE"]; $str_CAT_CURRENCY = $arPrice["CURRENCY"]; $arPrice = $dbPriceList->Fetch(); } else { $str_CAT_ID = 0; $str_CAT_EXTRA = 0;
$killed_lines++; } else { $bDeactivationStarted = true; $el->Update($arr["ID"], array("ACTIVE" => "N", "TMP_ID" => $tmpid)); $killed_lines++; } if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) { break; } } } // delete 'not-in-file' element prices if ($bAllLinesLoaded && $bIBlockIsCatalog && 'Y' == $bUpdatePrice && $outFileAction == "D") { $res = CPrice::GetList(array(), array("ELEMENT_IBLOCK_ID" => $IBLOCK_ID, "!TMP_ID" => $tmpid), false, false, array("ID")); while ($arr = $res->Fetch()) { CPrice::Delete($arr["ID"]); if (!($bAllLinesLoaded = CSVCheckTimeout($max_execution_time))) { break; } } } if (!$bAllLinesLoaded) { $bAllDataLoaded = false; $INTERNAL_VARS_LIST = "tmpid,line_num,correct_lines,error_lines,killed_lines,arIBlockProperty,bThereIsGroups,arProductGroups,arIBlockPropertyValue,bDeactivationStarted,bUpdatePrice"; $SETUP_VARS_LIST = "IBLOCK_ID,URL_DATA_FILE,fields_type,first_names_r,delimiter_r,delimiter_other_r,first_names_f,metki_f,PATH2IMAGE_FILES,outFileAction,inFileAction,max_execution_time,IMAGE_RESIZE,USE_TRANSLIT,TRANSLIT_LANG,CLEAR_EMPTY_PRICE,CML2_LINK_IS_XML"; for ($i = 0; $i < $NUM_FIELDS; $i++) { $SETUP_VARS_LIST .= ",field_" . $i; } $CUR_FILE_POS = $csvFile->GetPos(); } }
elseif(!isset($CATALOG_EXTRA[$elID][$arCatalogGroup["ID"]])) { $arFields = array( "PRODUCT_ID" => $elID, "CATALOG_GROUP_ID" => $arCatalogGroup["ID"], "PRICE" => $arPrice[$arCatalogGroup["ID"]], "CURRENCY" => $arCurrency[$arCatalogGroup["ID"]], "QUANTITY_FROM" => $CATALOG_QUANTITY_FROM[$elID][$arCatalogGroup["ID"]], "QUANTITY_TO" => $CATALOG_QUANTITY_TO[$elID][$arCatalogGroup["ID"]] ); if($arFields["PRICE"] < 0 || trim($arFields["PRICE"]) === '') CPrice::Delete($CATALOG_PRICE_ID[$elID][$arCatalogGroup["ID"]]); elseif(intval($CATALOG_PRICE_ID[$elID][$arCatalogGroup["ID"]])>0) CPrice::Update(intval($CATALOG_PRICE_ID[$elID][$arCatalogGroup["ID"]]), $arFields); elseif($arFields["PRICE"] >= 0) CPrice::Add($arFields); } } } unset($arCatalogGroup); } } } } } // Handle actions here if(($arID = $lAdmin->GroupAction())) { if($_REQUEST['action_target']=='selected')
{ $img = CFile::GetFileArray($viewed[$fields['ID']]['DETAIL_PICTURE']); if($img) $viewed[$fields['ID']]['DETAIL_PICTURE'] = $img['SRC']; else $viewed[$fields['ID']]['DETAIL_PICTURE'] = false; } else { $viewed[$fields['ID']]['DETAIL_PICTURE'] = false; } } // Prices $priceIterator = CPrice::getList(array(), array("PRODUCT_ID" => $filter['ID']), false, false, array("PRODUCT_ID", "PRICE", "CURRENCY")); while($price = $priceIterator->fetch()) { if(!isset($viewed[$price['PRODUCT_ID']]['PRICE'])) { $viewed[$price['PRODUCT_ID']]['PRICE'] = $price['PRICE']; $viewed[$price['PRODUCT_ID']]['CURRENCY'] = $price['CURRENCY']; } } } // $arViewedResult = fDeleteDoubleProduct($viewed, $arFilterRecommended, 'N'); if (empty($arViewedResult["ITEMS"])) $displayNoneViewed = "none"; $tabBasket = "tabs";
protected function getPrices($productId, $siteId) { $minPrice = 0; $minPriceRUR = 0; $minPriceGroup = 0; $minPriceCurrency = ""; $baseCurrency = \CCurrency::GetBaseCurrency(); $RUR = $this->getRub(); if ($this->xmlData['PRICE'] > 0) { $rsPrices = \CPrice::GetListEx(array(), array('PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => $this->xmlData['PRICE'], 'CAN_BUY' => 'Y', 'GROUP_GROUP_ID' => array(2), '+<=QUANTITY_FROM' => 1, '+>=QUANTITY_TO' => 1)); if ($arPrice = $rsPrices->Fetch()) { if ($arOptimalPrice = \CCatalogProduct::GetOptimalPrice($productId, 1, array(2), 'N', array($arPrice), $siteId)) { $minPrice = $arOptimalPrice['DISCOUNT_PRICE']; $minPriceCurrency = $baseCurrency; $minPriceRUR = \CCurrencyRates::ConvertCurrency($minPrice, $baseCurrency, $RUR); $minPriceGroup = $arOptimalPrice['PRICE']['CATALOG_GROUP_ID']; } } } else { if ($arPrice = \CCatalogProduct::GetOptimalPrice($productId, 1, array(2), 'N', array(), $siteId)) { $minPrice = $arPrice['DISCOUNT_PRICE']; $minPriceCurrency = $baseCurrency; $minPriceRUR = \CCurrencyRates::ConvertCurrency($minPrice, $baseCurrency, $RUR); $minPriceGroup = $arPrice['PRICE']['CATALOG_GROUP_ID']; } } $result = array("MIN" => $minPrice, "MIN_RUB" => $minPriceRUR, "MIN_GROUP" => $minPriceGroup, "MIN_CURRENCY" => $minPriceCurrency); return $result; }
protected function getSkuPrices() { $result = array(); if ($this->offers) { $ids = array(); foreach ($this->offers as $id => $offers) { foreach ($offers as $offer) { $ids[] = $offer['ID']; } } if ($ids) { $priceIds = $this->getVisiblePrices(); foreach ($priceIds as $id) { $dbPrice = \CPrice::getList(array(), array('PRODUCT_ID' => $ids, 'CATALOG_GROUP_ID' => $id), false, false, array('PRODUCT_ID', 'PRICE', 'CURRENCY')); while ($arPrice = $dbPrice->fetch()) { $result[$id][$arPrice["PRODUCT_ID"]] = array('PRICE' => $arPrice['PRICE'], 'CURRENCY' => $arPrice['CURRENCY']); } } } } return $result; }
function exportElement($arElement, $SECTION_MAP, $PROPERTY_MAP) { if (strlen($arElement["XML_ID"]) > 0) { $xml_id = $arElement["XML_ID"]; } else { $xml_id = $arElement["ID"]; } if ($this->PRODUCT_IBLOCK_ID > 0) { $arPropOrder = array("sort" => "asc", "id" => "asc", "enum_sort" => "asc", "value_id" => "asc"); $rsLink = CIBlockElement::GetProperty($this->arIBlock["ID"], $arElement["ID"], $arPropOrder, array("ACTIVE" => "Y", "CODE" => "CML2_LINK")); $arLink = $rsLink->Fetch(); if (is_array($arLink) && !is_array($arLink["VALUE"]) && $arLink["VALUE"] > 0) { $xml_id = $this->GetElementXML_ID($this->PRODUCT_IBLOCK_ID, $arLink["VALUE"]) . "#" . $xml_id; } } fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_ID") . ">" . htmlspecialcharsbx($xml_id) . "</" . GetMessage("IBLOCK_XML2_ID") . ">\n"); if (!$this->only_price) { $this->exportElementFields($arElement, $SECTION_MAP); if ($this->next_step["catalog"] && !$this->bExtended) { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_ITEM_ATTRIBUTES") . ">\n"); } else { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_PROPERTIES_VALUES") . ">\n"); } $this->exportElementProperties($arElement, $PROPERTY_MAP); if ($this->next_step["catalog"] && !$this->bExtended) { fwrite($this->fp, "\t\t\t\t</" . GetMessage("IBLOCK_XML2_ITEM_ATTRIBUTES") . ">\n"); } else { fwrite($this->fp, "\t\t\t\t</" . GetMessage("IBLOCK_XML2_PROPERTIES_VALUES") . ">\n"); } if ($this->bExtended) { $elementTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($this->arIBlock["ID"], $arElement["ID"]); $this->exportInheritedTemplates(4, $elementTemplates); } } if ($this->next_step["catalog"]) { $rsProduct = CCatalogProduct::GetList(array(), array("ID" => $arElement["ID"])); $arProduct = $rsProduct->Fetch(); static $measure = null; if (!isset($measure)) { $measure = array(); $rsBaseUnit = CCatalogMeasure::GetList(array(), array()); while ($arIDUnit = $rsBaseUnit->Fetch()) { $measure[$arIDUnit["ID"]] = $arIDUnit["CODE"]; } } $xmlMeasure = GetMessage("IBLOCK_XML2_PCS"); if ($arProduct["MEASURE"] > 0 && isset($measure[$arProduct["MEASURE"]])) { $xmlMeasure = $measure[$arProduct["MEASURE"]]; } $arPrices = array(); $rsPrices = CPrice::GetList(array(), array("PRODUCT_ID" => $arElement["ID"])); while ($arPrice = $rsPrices->Fetch()) { if (!$arPrice["QUANTITY_FROM"] && !$arPrice["QUANTITY_TO"]) { $arPrices[] = array(GetMessage("IBLOCK_XML2_PRICE_TYPE_ID") => $this->prices[$arPrice["CATALOG_GROUP_ID"]], GetMessage("IBLOCK_XML2_PRICE_FOR_ONE") => $arPrice["PRICE"], GetMessage("IBLOCK_XML2_CURRENCY") => $arPrice["CURRENCY"], GetMessage("IBLOCK_XML2_MEASURE") => $xmlMeasure); } } if (count($arPrices) > 0) { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_PRICES") . ">\n"); foreach ($arPrices as $arPrice) { fwrite($this->fp, "\t\t\t\t\t<" . GetMessage("IBLOCK_XML2_PRICE") . ">\n"); foreach ($arPrice as $key => $value) { fwrite($this->fp, "\t\t\t\t\t\t<" . $key . ">" . htmlspecialcharsbx($value) . "</" . $key . ">\n"); } fwrite($this->fp, "\t\t\t\t\t</" . GetMessage("IBLOCK_XML2_PRICE") . ">\n"); } fwrite($this->fp, "\t\t\t\t</" . GetMessage("IBLOCK_XML2_PRICES") . ">\n"); $arCatalogProduct = CCatalogProduct::GetByID($arElement["ID"]); if ($arCatalogProduct) { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_AMOUNT") . ">" . htmlspecialcharsbx($arCatalogProduct["QUANTITY"]) . "</" . GetMessage("IBLOCK_XML2_AMOUNT") . ">\n"); } } } }
/** * <p>Метод возвращает параметры наименьшей цены товара productID в количестве quantity для посетителя, входящего в группы пользователей arUserGroups.</p> * * * * * @param int $productID Код товара. * * * * @param $int Приобретаемое количество. * * * * @param quantit $y = 1[ массив групп, которым принадлежит пользователь. Для текущего * пользователя он возвращается методом $USER->GetUserGroupArray() * * * * @param array $arUserGroups = array()[ "Y", если вычисляется для продления товара (продажа контента), "N" в * остальных случаях. * * * * @param string $renewal = "N"[ Массив цен. Если он установлен, то пересчет идет не по ценам из * базы данных, а по ценам из этого массива. Представляет собой * массив ассоциативных массивов с ключами: <ul> <li> <b>ID</b> - код цены;</li> * <li> <b>PRICE</b> - цена;</li> <li> <b>CURRENCY</b> - валюта;</li> <li> <b>CATALOG_GROUP_ID</b> - код * типа цен.</li> </ul> * * * * @param array $arPrices = array()[ Сайт, для которого производится вычисление. Если парамерт равен * <i>false</i>, то берется текущий сайт. * * * * @param string $siteID = false]]]]] * * * * @return array <p>Массив вида:</p><pre class="syntax">array( "PRICE" => * массив_параметров_минимальной_цены, "DISCOUNT_PRICE" => * минимальная_цена_в_базовой_валюте, "DISCOUNT" => * массив_параметров_максимальной_доступной_скидки )</pre><p><b>Обратите * внимание, что</b> <i>DISCOUNT_PRICE</i> это минимальная цена в <b>базовой * валюте</b>. Чтобы перевести эту цену в валюту товара, * необходимо:</p><pre class="syntax">array( $baseCurrency = CCurrency::GetBaseCurrency(); * $arPrice["DISCOUNT_PRICE"] = CCurrencyRates::ConvertCurrency($arPrice['DISCOUNT_PRICE'], $baseCurrency, * $arPrice["PRICE"]["CURRENCY"]); )</pre><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * if (!$arPrice || count($arPrice) <= 0) * { * if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray())) * { * $quantity = $nearestQuantity; * $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); * } * } * echo "<pre>"; * print_r($arPrice); * echo "</pre>"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/catalog/classes/ccatalogproduct/ccatalogproduct__getoptimalprice.7c16046d.php * @author Bitrix */ public static function GetOptimalPrice($intProductID, $quantity = 1, $arUserGroups = array(), $renewal = "N", $arPrices = array(), $siteID = false, $arDiscountCoupons = false) { global $APPLICATION; $mxResult = true; foreach (GetModuleEvents("catalog", "OnGetOptimalPrice", true) as $arEvent) { $mxResult = ExecuteModuleEventEx($arEvent, array($intProductID, $quantity, $arUserGroups, $renewal, $arPrices, $siteID, $arDiscountCoupons)); if (true !== $mxResult) return $mxResult; } $intProductID = intval($intProductID); if (0 >= $intProductID) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_PRODUCT_ID_ABSENT"), "NO_PRODUCT_ID"); return false; } $quantity = doubleval($quantity); if (0 >= $quantity) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_QUANTITY_ABSENT"), "NO_QUANTITY"); return false; } if (!is_array($arUserGroups) && intval($arUserGroups)."|" == $arUserGroups."|") $arUserGroups = array(intval($arUserGroups)); if (!is_array($arUserGroups)) $arUserGroups = array(); if (!in_array(2, $arUserGroups)) $arUserGroups[] = 2; $rsVAT = CCatalogProduct::GetVATInfo($intProductID); if ($arVAT = $rsVAT->Fetch()) { $arVAT['RATE'] = doubleval($arVAT['RATE'] * 0.01); } else { $arVAT = array('RATE' => 0.0, 'VAT_INCLUDED' => 'N'); } $renewal = (($renewal == "N") ? "N" : "Y"); if (false === $siteID) $siteID = SITE_ID; if (false === $arDiscountCoupons) $arDiscountCoupons = CCatalogDiscountCoupon::GetCoupons(); $strBaseCurrency = CCurrency::GetBaseCurrency(); if (empty($strBaseCurrency)) { $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_PROD_ERR_NO_BASE_CURRENCY"), "NO_BASE_CURRENCY"); return false; } $intIBlockID = intval(CIBlockElement::GetIBlockByID($intProductID)); if (0 >= $intIBlockID) { $APPLICATION->ThrowException(str_replace("#ID#", $intProductID, GetMessage('BT_MOD_CATALOG_PROD_ERR_ELEMENT_ID_NOT_FOUND')), "NO_ELEMENT"); return false; } if (!isset($arPrices) || !is_array($arPrices)) $arPrices = array(); if (empty($arPrices)) { $arPrices = array(); $dbPriceList = CPrice::GetListEx( array(), array( "PRODUCT_ID" => $intProductID, "GROUP_GROUP_ID" => $arUserGroups, "GROUP_BUY" => "Y", "+<=QUANTITY_FROM" => $quantity, "+>=QUANTITY_TO" => $quantity ), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY") ); while ($arPriceList = $dbPriceList->Fetch()) { $arPriceList['ELEMENT_IBLOCK_ID'] = $intIBlockID; $arPrices[] = $arPriceList; } } else { foreach ($arPrices as &$arOnePrice) { $arOnePrice['ELEMENT_IBLOCK_ID'] = $intIBlockID; } if (isset($arOnePrice)) unset($arOnePrice); } if (empty($arPrices)) return false; // $boolDiscountVat = ('N' != COption::GetOptionString('catalog', 'discount_vat', 'Y')); $boolDiscountVat = true; $strDiscSaveApply = COption::GetOptionString('catalog', 'discsave_apply', 'R'); $dblMinPrice = -1; $arMinPrice = array(); $arMinDiscounts = array(); foreach ($arPrices as &$arPriceList) { $arPriceList['VAT_RATE'] = $arVAT['RATE']; $arPriceList['VAT_INCLUDED'] = $arVAT['VAT_INCLUDED']; $arPriceList['ORIG_VAT_INCLUDED'] = $arPriceList['VAT_INCLUDED']; if ($boolDiscountVat) { if ('N' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] *= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'Y'; } } else { if ('Y' == $arPriceList['VAT_INCLUDED']) { $arPriceList['PRICE'] /= (1 + $arPriceList['VAT_RATE']); $arPriceList['VAT_INCLUDED'] = 'N'; } } if ($arPriceList["CURRENCY"] == $strBaseCurrency) $dblCurrentPrice = $arPriceList["PRICE"]; else $dblCurrentPrice = CCurrencyRates::ConvertCurrency($arPriceList["PRICE"], $arPriceList["CURRENCY"], $strBaseCurrency); $arDiscounts = CCatalogDiscount::GetDiscount($intProductID, $intIBlockID, $arPriceList["CATALOG_GROUP_ID"], $arUserGroups, $renewal, $siteID, $arDiscountCoupons); $arDiscSave = array(); $arPriceDiscount = array(); $arResultPrice = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscountApply = array(); if (!empty($arDiscounts)) { CCatalogProduct::__PrimaryDiscountFilter($arDiscounts, $arPriceDiscount, $arDiscSave, $arResultPrice); if (!empty($arPriceDiscount)) { foreach ($arPriceDiscount as &$arOnePriority) { $boolResultPriority = CCatalogProduct::__CalcOnePriority($arOnePriority, $arDiscountApply, $arResultPrice); if (!$boolResultPriority) { return false; } else { if (isset($arResultPrice['LAST_DISCOUNT']) && 'Y' == $arResultPrice['LAST_DISCOUNT']) break; } } if (isset($arOnePriority)) unset($arOnePriority); } if (!empty($arDiscSave)) { switch($strDiscSaveApply) { case 'R': $arDiscSaveResult = array( 'PRICE' => $dblCurrentPrice, 'CURRENCY' => $strBaseCurrency, ); $arDiscSaveApply = array(); $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscSaveApply, $arDiscSaveResult); if (!$boolResultDiscSave) { return false; } else { if ($arDiscSaveResult['PRICE'] < $arResultPrice['PRICE']) { $arResultPrice = $arDiscSaveResult; $arDiscountApply = $arDiscSaveApply; } } break; case 'A': $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } break; case 'D': if (empty($arDiscountApply)) { $boolResultDiscSave = CCatalogProduct::__CalcDiscSave($arDiscSave, $arDiscountApply, $arResultPrice); if (!$boolResultDiscSave) { return false; } } break; } } } if (-1 == $dblMinPrice || $dblMinPrice > $arResultPrice['PRICE']) { $dblMinPrice = $arResultPrice['PRICE']; $arMinPrice = $arPriceList; $arMinDiscounts = $arDiscountApply; } } if (isset($arPriceList)) unset($arPriceList); if ($boolDiscountVat) { if ('N' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] /= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } else { if ('Y' == $arMinPrice['ORIG_VAT_INCLUDED']) { $arMinPrice['PRICE'] *= (1 + $arMinPrice['VAT_RATE']); $arMinPrice['VAT_INCLUDED'] = $arMinPrice['ORIG_VAT_INCLUDED']; } } unset($arMinPrice['ORIG_VAT_INCLUDED']); $dblMinPrice = roundEx($dblMinPrice, CATALOG_VALUE_PRECISION); $arResult = array( 'PRICE' => $arMinPrice, 'DISCOUNT_PRICE' => $dblMinPrice, 'DISCOUNT' => array(), 'DISCOUNT_LIST' => array(), ); if (!empty($arMinDiscounts)) { reset($arMinDiscounts); $arResult['DISCOUNT'] = current($arMinDiscounts); $arResult['DISCOUNT_LIST'] = $arMinDiscounts; } foreach (GetModuleEvents("catalog", "OnGetOptimalPriceResult", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$arResult))===false) return false; } return $arResult; }
/** * [addPriceProducts description] * @param array $arParams * @return bool */ protected function addPriceProducts($arParams){ if (!CModule::IncludeModule("iblock") && !CModule::IncludeModule("catalog") && !CModule::IncludeModule("sale")): return false; endif; $PRICE_TYPE_ID = 1; // идентификатор типы базовой цены $arFields = Array( "PRODUCT_ID" => $arParams["PRODUCT_ID"], "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" => $arParams["OLD_PRICE"], "CURRENCY" => "RUB", "QUANTITY_FROM" => 1, ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $arParams["PRODUCT_ID"], "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ($arr = $res->Fetch()): if (!CPrice::Update($arr["ID"], $arFields)): return false; endif; else: if (!CPrice::Add($arFields)): return false; endif; endif; if (!$this->addCatalogProducts($arParams)): return false; endif; return true; }
break; } } } $arPropertySaveValues["CML2_LINK"] = $parentElement; $arIBlockElementAdd['PROPERTY_VALUES'] = $arPropertySaveValues; $sku = new \Bitrix\Iblock\Template\Entity\Element(0); $sku->setFields($arIBlockElementAdd); $arIBlockElementAdd["NAME"] = htmlspecialcharsback(\Bitrix\Iblock\Template\Engine::process($sku, $title)); unset($arIBlockElementAdd['PROPERTY_VALUES']["CML2_LINK"]); $idNewElement = $obIBlockElement->Add($arIBlockElementAdd, false, true, true); if ($idNewElement) { $productData['ID'] = $idNewElement; CCatalogProduct::Add($productData, false); foreach ($arPriceGroup as $price) { CPrice::Add(array("PRODUCT_ID" => $idNewElement, "CURRENCY" => $price["CURRENCY"], "PRICE" => $price["PRICE"], "CATALOG_GROUP_ID" => $price["TYPE"])); } $element = new \Bitrix\Iblock\InheritedProperty\ElementValues($subIBlockId, $idNewElement); $template = new \Bitrix\Iblock\InheritedProperty\BaseTemplate($element); $template->set(array("MY_TEMPLATE" => $title)); } else { $errorMessage .= $obIBlockElement->LAST_ERROR; break; } } unset($productData); if ($idNewElement) { ?> <script type="text/javascript"> top.BX.closeWait(); if (!!top.BX.WindowManager.Get())
"IBLOCK_ID" => "3", "PROPERTY_CML2_LINK" => $arItem["ID"] ), false, array( "nTopCount" => 1 ), array() ); if ($arQuery = $dbQuery->Fetch()) { $arPrice = CPrice::GetBasePrice($arQuery["ID"]); $arItem["PRICE"] = $arPrice["PRICE"]; } else { $arPrice = CPrice::GetList( array(), array( "PRODUCT_ID" => $arItem["ID"] ), false, array( "nTopCount" => 1 ), array() )->Fetch(); $arItem["PRICE"] = $arPrice["PRICE"]; } }
?> <div class="container intro"> <?php $el = new CIBlockElement(); $arSelect_serv = array("ID", "PROPERTY_PRICE"); $arFilter_serv = array("IBLOCK_ID" => IBLOCK_SERVICE_ID); $obj_serv = $el->GetList(array("id" => "ASC"), $arFilter_serv, false, false, $arSelect_serv); $i = 0; while ($arItem_serv = $obj_serv->GetNext()) { $PRODUCT_ID = $arItem_serv["ID"]; $PRICE_TYPE_ID = 1; // CCatalogProduct::Add(array("ID" => $PRODUCT_ID)); $arFields = array("PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" => $arItem_serv["PROPERTY_PRICE_VALUE"], "CURRENCY" => "RUB", "QUANTITY_FROM" => 1, "QUANTITY_TO" => ""); $res = CPrice::GetList(array(), array("PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID)); // // if ($arr = $res->Fetch()) // { // $result = CPrice::Update($arr["ID"], $arFields); // } // else // { // $result = CPrice::Add($arFields); // } } ?> </div> <?php
$arPath = $arCacheResultSections[$arSection['ID']]; } $arResSections[$i] = $arPath; $i++; } if (empty($arResSections)) { $arResSections[] = array(); } } else { $arResSections[] = array(); } $arResPrices = array(); if ($boolCatalog && $bNeedPrices) { $arResPricesMap = array(); $mapIndex = -1; $dbProductPrice = CPrice::GetList(array(), array("PRODUCT_ID" => $arIBlockElement["ID"], 'CATALOG_GROUP_ID' => $arCatalogGroups), false, false, array("ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "QUANTITY_FROM", "QUANTITY_TO", "EXTRA_ID")); while ($arProductPrice = $dbProductPrice->Fetch()) { if (!isset($arResPricesMap[$arProductPrice["QUANTITY_FROM"] . "-" . $arProductPrice["QUANTITY_TO"]])) { $mapIndex++; $arResPricesMap[$arProductPrice["QUANTITY_FROM"] . "-" . $arProductPrice["QUANTITY_TO"]] = $mapIndex; } $intDiap = $arResPricesMap[$arProductPrice["QUANTITY_FROM"] . "-" . $arProductPrice["QUANTITY_TO"]]; foreach ($arAvailValueFields_names as $key => $value) { $arResPrices[$intDiap][$value['field'] . '_' . $arProductPrice["CATALOG_GROUP_ID"]] = $arProductPrice[$value['field']]; } $arResPrices[$intDiap]['QUANTITY_FROM'] = $arProductPrice["QUANTITY_FROM"]; $arResPrices[$intDiap]['QUANTITY_TO'] = $arProductPrice["QUANTITY_TO"]; } if (empty($arResPrices)) { $arResPrices[] = array(); }
public static function OnBeforePrologHandler() { global $USER_FIELD_MANAGER; if (isset($_REQUEST['action_button']) && !isset($_REQUEST['action'])) { $_REQUEST['action'] = $_REQUEST['action_button']; } if (!isset($_REQUEST['action'])) { return; } $BID = isset($_REQUEST['ID']) ? (int) $_REQUEST['ID'] : 0; if ($_REQUEST['action'] == 'asd_prop_export' && $BID > 0 && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($BID)) { $strPath = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/tmp/asd.iblock/'; $strName = 'asd_props_export_' . $BID . '_' . md5(LICENSE_KEY) . '.xml'; CheckDirPath($strPath); if ($hdlOutput = fopen($strPath . $strName, 'wb')) { fwrite($hdlOutput, '<?xml version="1.0" encoding="' . SITE_CHARSET . '"?>' . "\n"); fwrite($hdlOutput, '<asd_iblock_props>' . "\n"); fwrite($hdlOutput, CASDiblockTools::ExportPropsToXML($BID, $_REQUEST['p'])); if ($_REQUEST['forms'] == 'Y') { fwrite($hdlOutput, CASDiblockTools::ExportSettingsToXML($BID, array('forms'))); } fwrite($hdlOutput, '</asd_iblock_props>' . "\n"); fclose($hdlOutput); } ?> <script type="text/javascript"> top.BX.closeWait(); top.BX.WindowManager.Get().AllowClose(); top.BX.WindowManager.Get().Close(); window.location.href = '/bitrix/tools/asd.iblock/props_export.php?ID=<?php echo $BID; ?> '; </script><?php die; } if ($_REQUEST['action'] == 'asd_prop_import' && $BID > 0 && !$_FILES['xml_file']['error'] && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($BID)) { CASDiblockTools::ImportPropsFromXML($BID, $_FILES['xml_file']['tmp_name'], $arOldNewID); CASDiblockTools::ImportFormsFromXML($BID, $_FILES['xml_file']['tmp_name'], $arOldNewID); LocalRedirect('/bitrix/admin/iblock_edit.php?type=' . $_REQUEST['type'] . '&tabControl_active_tab=edit2&lang=' . LANGUAGE_ID . '&ID=' . $BID . '&admin=Y'); } $IBLOCK_ID = 0; if (isset($_REQUEST['IBLOCK_ID'])) { $IBLOCK_ID = (int) $_REQUEST['IBLOCK_ID']; if ($IBLOCK_ID < 0) { $IBLOCK_ID = 0; } } if ($_REQUEST['action'] == 'asd_reverse' && $IBLOCK_ID > 0 && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($IBLOCK_ID)) { $LIST_MODE = CIBlock::GetArrayByID($IBLOCK_ID, 'LIST_MODE'); if (!strlen($LIST_MODE)) { $LIST_MODE = COption::GetOptionString('iblock', 'combined_list_mode', 'N') == 'Y' ? 'C' : 'S'; } $LIST_MODE = $LIST_MODE == 'C' ? 'S' : 'C'; $ib = new CIBlock(); $ib->Update($IBLOCK_ID, array('LIST_MODE' => $LIST_MODE)); LocalRedirect('/bitrix/admin/' . ($LIST_MODE == 'S' ? 'iblock_element_admin' : 'iblock_list_admin') . '.php?IBLOCK_ID=' . $IBLOCK_ID . '&type=' . htmlspecialcharsbx($_REQUEST['type']) . '&find_section_section=' . intval($_REQUEST['find_section_section']) . '&lang=' . LANGUAGE_ID); } $strCurPage = $GLOBALS['APPLICATION']->GetCurPage(); $bElemPage = $strCurPage == '/bitrix/admin/iblock_element_admin.php' || $strCurPage == '/bitrix/admin/cat_product_admin.php'; $bSectPage = $strCurPage == '/bitrix/admin/iblock_section_admin.php' || $strCurPage == '/bitrix/admin/cat_section_admin.php'; $bMixPage = $strCurPage == '/bitrix/admin/iblock_list_admin.php'; $bRightPage = $bElemPage || $bSectPage || $bMixPage; $successRedirect = false; if ($bRightPage && $_REQUEST['action'] == 'asd_copy_in_list' && strlen($_REQUEST['ID']) > 0) { $bDoAction = true; $_REQUEST['action'] = 'asd_copy'; $_REQUEST['asd_ib_dest'] = $IBLOCK_ID; $_REQUEST['ID'] = array($_REQUEST['ID']); } else { $bDoAction = false; } if ($bRightPage && check_bitrix_sessid() && !empty($_REQUEST['ID']) && ($_SERVER['REQUEST_METHOD'] == 'POST' || $bDoAction) && CModule::IncludeModule('iblock') && ($_REQUEST['action'] == 'asd_copy' || $_REQUEST['action'] == 'asd_move') && isset($_REQUEST['asd_ib_dest']) && (int) $_REQUEST['asd_ib_dest'] > 0 && CASDIblockRights::IsIBlockDisplay($_REQUEST['asd_ib_dest'])) { $intSrcIBlockID = $IBLOCK_ID; $intDestIBlockID = (int) $_REQUEST['asd_ib_dest']; $intSetSectID = 0; if (isset($_REQUEST['asd_sect_dest'])) { $intSetSectID = (int) $_REQUEST['asd_sect_dest']; if ($intSetSectID < 0) { $intSetSectID = 0; } } $boolCreateElement = false; $boolCreateSection = false; if ($bElemPage || $bMixPage) { $boolCreateElement = CASDIblockRights::IsSectionElementCreate($intDestIBlockID, $intSetSectID); } if ($bSectPage || $bMixPage) { $boolCreateSection = CASDIblockRights::IsSectionSectionCreate($intDestIBlockID, $intSetSectID); } if ($boolCreateElement || $boolCreateSection) { $arPropListCache = array(); $arOldPropListCache = array(); $arNamePropListCache = array(); $arOldNamePropListCache = array(); $boolUFListCache = false; $arUFListCache = array(); $arOldUFListCache = array(); $arUFEnumCache = array(); $arOldUFEnumCache = array(); $arUFNameEnumCache = array(); $arOldUFNameEnumCache = array(); $arDestIBlock = CIBlock::GetArrayByID($intDestIBlockID); $arDestIBFields = $arDestIBlock['FIELDS']; $boolCodeUnique = false; if ($arDestIBFields['CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolCodeUnique = $intSrcIBlockID == $intDestIBlockID; } $boolSectCodeUnique = false; if ($arDestIBFields['SECTION_CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolSectCodeUnique = $intSrcIBlockID == $intDestIBlockID; } $boolCatalog = CModule::IncludeModule('catalog'); $boolCopyCatalog = false; $boolNewCatalog = false; if ($boolCatalog) { $boolCopyCatalog = is_array(CCatalog::GetByID($intDestIBlockID)); $boolNewCatalog = $boolCopyCatalog; if ($boolCopyCatalog) { $boolCopyCatalog = is_array(CCatalog::GetByID($intSrcIBlockID)); } } $el = new CIBlockElement(); $sc = new CIBlockSection(); $obEnum = new CUserFieldEnum(); foreach ($_REQUEST['ID'] as $eID) { $boolCopyElem = false; $boolCopySect = false; if ($bMixPage) { if (substr($eID, 0, 1) != 'E') { $boolCopySect = true; } else { $boolCopyElem = true; } $ID = (int) substr($eID, 1); } else { $boolCopyElem = $bElemPage; $boolCopySect = $bSectPage; $ID = (int) $eID; } if ($boolCreateElement && $boolCopyElem) { if ($obSrc = CIBlockElement::GetByID($ID)->GetNextElement()) { $arSrc = $obSrc->GetFields(); $arSrcPr = $obSrc->GetProperties(false, array('EMPTY' => 'N')); $arSrc['PREVIEW_PICTURE'] = (int) $arSrc['PREVIEW_PICTURE']; if ($arSrc['PREVIEW_PICTURE'] > 0) { $arSrc['PREVIEW_PICTURE'] = CFile::MakeFileArray($arSrc['PREVIEW_PICTURE']); if (empty($arSrc['PREVIEW_PICTURE'])) { $arSrc['PREVIEW_PICTURE'] = false; } else { $arSrc['PREVIEW_PICTURE']['COPY_FILE'] = 'Y'; } } else { $arSrc['PREVIEW_PICTURE'] = false; } $arSrc['DETAIL_PICTURE'] = (int) $arSrc['DETAIL_PICTURE']; if ($arSrc['DETAIL_PICTURE'] > 0) { $arSrc['DETAIL_PICTURE'] = CFile::MakeFileArray($arSrc['DETAIL_PICTURE']); if (empty($arSrc['DETAIL_PICTURE'])) { $arSrc['DETAIL_PICTURE'] = false; } else { $arSrc['DETAIL_PICTURE']['COPY_FILE'] = 'Y'; } } else { $arSrc['DETAIL_PICTURE'] = false; } $arSrc = array('IBLOCK_ID' => $intDestIBlockID, 'ACTIVE' => $arSrc['ACTIVE'], 'ACTIVE_FROM' => $arSrc['ACTIVE_FROM'], 'ACTIVE_TO' => $arSrc['ACTIVE_TO'], 'SORT' => $arSrc['SORT'], 'NAME' => $arSrc['~NAME'], 'PREVIEW_PICTURE' => $arSrc['PREVIEW_PICTURE'], 'PREVIEW_TEXT' => $arSrc['~PREVIEW_TEXT'], 'PREVIEW_TEXT_TYPE' => $arSrc['PREVIEW_TEXT_TYPE'], 'DETAIL_TEXT' => $arSrc['~DETAIL_TEXT'], 'DETAIL_TEXT_TYPE' => $arSrc['DETAIL_TEXT_TYPE'], 'DETAIL_PICTURE' => $arSrc['DETAIL_PICTURE'], 'WF_STATUS_ID' => $arSrc['WF_STATUS_ID'], 'CODE' => $arSrc['~CODE'], 'TAGS' => $arSrc['~TAGS'], 'XML_ID' => $arSrc['~XML_ID'], 'PROPERTY_VALUES' => array()); if ($arDestIBFields['CODE']['IS_REQUIRED'] == 'Y') { if (!strlen($arSrc['CODE'])) { $arSrc['CODE'] = mt_rand(100000, 1000000); } } if ($arDestIBFields['CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolElCodeUnique = $boolCodeUnique; if (!$boolCodeUnique) { $rsCheckItems = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, '=CODE' => $arSrc['CODE'], 'CHECK_PERMISSIONS' => 'N'), false, array('nTopCount' => 1), array('ID', 'IBLOCK_ID')); if ($arCheck = $rsCheckItems->Fetch()) { $boolElCodeUnique = true; } } if ($boolElCodeUnique) { $arSrc['CODE'] .= mt_rand(100, 10000); } } if ($intSetSectID > 0) { $arSrc['IBLOCK_SECTION_ID'] = $intSetSectID; } elseif ($intSrcIBlockID == $intDestIBlockID) { $arSectionList = array(); $rsSections = CIBlockElement::GetElementGroups($ID, true); while ($arSection = $rsSections->Fetch()) { $arSectionList[] = $arSection['ID']; } $arSrc['IBLOCK_SECTION'] = $arSectionList; } if ($intSrcIBlockID != $intDestIBlockID) { if (empty($arPropListCache)) { $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, 'PROPERTY_TYPE' => 'L', 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N')); while ($arProp = $rsProps->Fetch()) { $arValueList = array(); $arNameList = array(); $rsValues = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arValue = $rsValues->Fetch()) { $arValueList[$arValue['XML_ID']] = $arValue['ID']; $arNameList[$arValue['ID']] = trim($arValue['VALUE']); } if (!empty($arValueList)) { $arPropListCache[$arProp['CODE']] = $arValueList; } if (!empty($arNameList)) { $arNamePropListCache[$arProp['CODE']] = $arNameList; } } } if (empty($arOldPropListCache)) { $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $intSrcIBlockID, 'PROPERTY_TYPE' => 'L', 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N')); while ($arProp = $rsProps->Fetch()) { $arValueList = array(); $arNameList = array(); $rsValues = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arValue = $rsValues->Fetch()) { $arValueList[$arValue['ID']] = $arValue['XML_ID']; $arNameList[$arValue['ID']] = trim($arValue['VALUE']); } if (!empty($arValueList)) { $arOldPropListCache[$arProp['CODE']] = $arValueList; } if (!empty($arNameList)) { $arOldNamePropListCache[$arProp['CODE']] = $arNameList; } } } } foreach ($arSrcPr as &$arProp) { if ($arProp['USER_TYPE'] == 'HTML') { if (is_array($arProp['~VALUE'])) { if ($arProp['MULTIPLE'] == 'N') { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array('VALUE' => array('TEXT' => $arProp['~VALUE']['TEXT'], 'TYPE' => $arProp['~VALUE']['TYPE'])); if ($arProp['WITH_DESCRIPTION'] == 'Y') { $arSrc['PROPERTY_VALUES'][$arProp['CODE']]['DESCRIPTION'] = $arProp['~DESCRIPTION']; } } else { if (!empty($arProp['~VALUE'])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['~VALUE'] as $propValueKey => $propValue) { $oneNewValue = array('VALUE' => array('TEXT' => $propValue['TEXT'], 'TYPE' => $propValue['TYPE'])); if ($arProp['WITH_DESCRIPTION'] == 'Y') { $oneNewValue['DESCRIPTION'] = $arProp['~DESCRIPTION'][$propValueKey]; } $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $oneNewValue; unset($oneNewValue); } unset($propValue, $propValueKey); } } } } elseif ($arProp['PROPERTY_TYPE'] == 'F') { if (is_array($arProp['VALUE'])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['VALUE'] as $propValueKey => $file) { if ($file > 0) { $tmpValue = CFile::MakeFileArray($file); if (!is_array($tmpValue)) { continue; } if ($arProp['WITH_DESCRIPTION'] == 'Y') { $tmpValue = array('VALUE' => $tmpValue, 'DESCRIPTION' => $arProp['~DESCRIPTION'][$propValueKey]); } $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $tmpValue; } } } elseif ($arProp['VALUE'] > 0) { $tmpValue = CFile::MakeFileArray($arProp['VALUE']); if (is_array($tmpValue)) { if ($arProp['WITH_DESCRIPTION'] == 'Y') { $tmpValue = array('VALUE' => $tmpValue, 'DESCRIPTION' => $arProp['~DESCRIPTION']); } $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $tmpValue; } } } elseif ($arProp['PROPERTY_TYPE'] == 'L') { if (!empty($arProp['VALUE_ENUM_ID'])) { if ($intSrcIBlockID == $arSrc['IBLOCK_ID']) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['VALUE_ENUM_ID']; } else { if (isset($arPropListCache[$arProp['CODE']]) && isset($arOldPropListCache[$arProp['CODE']])) { if (is_array($arProp['VALUE_ENUM_ID'])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['VALUE_ENUM_ID'] as &$intValueID) { $strValueXmlID = $arOldPropListCache[$arProp['CODE']][$intValueID]; if (isset($arPropListCache[$arProp['CODE']][$strValueXmlID])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $arPropListCache[$arProp['CODE']][$strValueXmlID]; } else { $strValueName = $arOldNamePropListCache[$arProp['CODE']][$intValueID]; $intValueKey = array_search($strValueName, $arNamePropListCache[$arProp['CODE']]); if ($intValueKey !== false) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $intValueKey; } } } if (isset($intValueID)) { unset($intValueID); } if (empty($arSrc['PROPERTY_VALUES'][$arProp['CODE']])) { unset($arSrc['PROPERTY_VALUES'][$arProp['CODE']]); } } else { $strValueXmlID = $arOldPropListCache[$arProp['CODE']][$arProp['VALUE_ENUM_ID']]; if (isset($arPropListCache[$arProp['CODE']][$strValueXmlID])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arPropListCache[$arProp['CODE']][$strValueXmlID]; } else { $strValueName = $arOldNamePropListCache[$arProp['CODE']][$arProp['VALUE_ENUM_ID']]; $intValueKey = array_search($strValueName, $arNamePropListCache[$arProp['CODE']]); if ($intValueKey !== false) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $intValueKey; } } } } } } } elseif ($arProp['PROPERTY_TYPE'] == 'S' || $arProp['PROPERTY_TYPE'] == 'N') { if ($arProp['MULTIPLE'] == 'Y') { if (is_array($arProp['~VALUE'])) { if ($arProp['WITH_DESCRIPTION'] == 'Y') { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['~VALUE'] as $propValueKey => $propValue) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = array('VALUE' => $propValue, 'DESCRIPTION' => $arProp['~DESCRIPTION'][$propValueKey]); } unset($propValue, $propValueKey); } else { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['~VALUE']; } } } else { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['WITH_DESCRIPTION'] == 'Y' ? array('VALUE' => $arProp['~VALUE'], 'DESCRIPTION' => $arProp['~DESCRIPTION']) : $arProp['~VALUE']; } } else { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['~VALUE']; } } if (isset($arProp)) { unset($arProp); } AddMessage2Log($arSrc['PROPERTY_VALUES']); $intNewID = $el->Add($arSrc, true, true, true); if ($intNewID) { if ($boolCatalog && $boolCopyCatalog) { $priceRes = CPrice::GetListEx(array(), array('PRODUCT_ID' => $ID), false, false, array('PRODUCT_ID', 'EXTRA_ID', 'CATALOG_GROUP_ID', 'PRICE', 'CURRENCY', 'QUANTITY_FROM', 'QUANTITY_TO')); while ($arPrice = $priceRes->Fetch()) { $arPrice['PRODUCT_ID'] = $intNewID; CPrice::Add($arPrice); } } if ($boolCatalog && $boolNewCatalog) { $arProduct = array('ID' => $intNewID); if ($boolCopyCatalog) { $productRes = CCatalogProduct::GetList(array(), array('ID' => $ID), false, false, array('QUANTITY', 'QUANTITY_TRACE_ORIG', 'CAN_BUY_ZERO_ORIG', 'NEGATIVE_AMOUNT_TRACE_ORIG', 'SUBSCRIBE_ORIG', 'WEIGHT', 'PRICE_TYPE', 'RECUR_SCHEME_TYPE', 'RECUR_SCHEME_LENGTH', 'TRIAL_PRICE_ID', 'WITHOUT_ORDER', 'SELECT_BEST_PRICE', 'VAT_ID', 'VAT_INCLUDED', 'WIDTH', 'LENGTH', 'HEIGHT', 'PURCHASING_PRICE', 'PURCHASING_CURRENCY', 'MEASURE')); if ($arCurProduct = $productRes->Fetch()) { $arProduct = $arCurProduct; $arProduct['ID'] = $intNewID; $arProduct['QUANTITY_TRACE'] = $arProduct['QUANTITY_TRACE_ORIG']; $arProduct['CAN_BUY_ZERO'] = $arProduct['CAN_BUY_ZERO_ORIG']; $arProduct['NEGATIVE_AMOUNT_TRACE'] = $arProduct['NEGATIVE_AMOUNT_TRACE_ORIG']; if (isset($arProduct['SUBSCRIBE_ORIG'])) { $arProduct['SUBSCRIBE'] = $arProduct['SUBSCRIBE_ORIG']; } foreach ($arProduct as $productKey => $productValue) { if ($productValue === null) { unset($arProduct[$productKey]); } } } } CCatalogProduct::Add($arProduct, false); } if ($_REQUEST['action'] == 'asd_move') { if (CASDIblockRights::IsElementDelete($intSrcIBlockID, $ID)) { $el->Delete($ID); } else { CASDiblock::$error .= '[' . $ID . '] ' . GetMessage('ASD_ACTION_ERR_DELETE_ELEMENT_RIGHTS') . "\n"; } } } else { CASDiblock::$error .= '[' . $ID . '] ' . $el->LAST_ERROR . "\n"; } } } if ($boolCreateSection && $boolCopySect) { if ($_REQUEST['action'] == 'asd_move') { continue; } $rsSections = CIBlockSection::GetList(array(), array('ID' => $ID, 'IBLOCK_ID' => $intSrcIBlockID), false, array('ID', 'NAME', 'XML_ID', 'CODE', 'IBLOCK_SECTION_ID', 'IBLOCK_ID', 'ACTIVE', 'SORT', 'PICTURE', 'DESCRIPTION', 'DESCRIPTION_TYPE', 'DETAIL_PICTURE', 'SOCNET_GROUP_ID', 'UF_*')); if ($arSrcSect = $rsSections->Fetch()) { $arDestSect = $arSrcSect; unset($arDestSect['ID']); $arDestSect['IBLOCK_ID'] = $intDestIBlockID; if ($arDestIBFields['SECTION_CODE']['IS_REQUIRED'] == 'Y') { if (!strlen($arDestSect['CODE'])) { $arDestSect['CODE'] = mt_rand(100000, 1000000); } } if ($arDestIBFields['SECTION_CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolScCodeUnique = $boolSectCodeUnique; if (!$boolSectCodeUnique) { $rsCheckItems = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, '=CODE' => $arSrc['CODE'], 'CHECK_PERMISSIONS' => 'N'), false, array('nTopCount' => 1), array('ID', 'IBLOCK_ID')); if ($arCheck = $rsCheckItems->Fetch()) { $boolScCodeUnique = true; } } if ($boolScCodeUnique) { $arDestSect['CODE'] .= mt_rand(100, 10000); } } if ($intSetSectID > 0) { $arDestSect['IBLOCK_SECTION_ID'] = $intSetSectID; } elseif ($intSrcIBlockID != $intDestIBlockID) { $arDestSect['IBLOCK_SECTION_ID'] = 0; } $arDestSect['PICTURE'] = (int) $arDestSect['PICTURE']; if ($arDestSect['PICTURE'] > 0) { $arDestSect['PICTURE'] = CFile::MakeFileArray($arDestSect['PICTURE']); if (empty($arDestSect['PICTURE'])) { $arDestSect['PICTURE'] = false; } else { $arDestSect['PICTURE']['COPY_FILE'] = 'Y'; } } else { $arDestSect['PICTURE'] = false; } $arDestSect['DETAIL_PICTURE'] = (int) $arDestSect['DETAIL_PICTURE']; if ($arDestSect['DETAIL_PICTURE'] > 0) { $arDestSect['DETAIL_PICTURE'] = CFile::MakeFileArray($arDestSect['DETAIL_PICTURE']); if (empty($arDestSect['DETAIL_PICTURE'])) { $arDestSect['DETAIL_PICTURE'] = false; } else { $arDestSect['DETAIL_PICTURE']['COPY_FILE'] = 'Y'; } } else { $arDestSect['DETAIL_PICTURE'] = false; } if (!$boolUFListCache) { $boolUFListCache = true; $arUFListCache = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $intDestIBlockID . '_SECTION'); if (!empty($arUFListCache)) { if ($intSrcIBlockID != $intDestIBlockID) { $arOldUFListCache = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $intSrcIBlockID . '_SECTION'); if (empty($arOldUFListCache)) { $arUFListCache = array(); } } else { $arOldUFListCache = $arUFListCache; } } if (!empty($arUFListCache)) { if ($intSrcIBlockID != $intDestIBlockID) { foreach ($arUFListCache as &$arOneUserField) { if ('enum' == $arOneUserField['USER_TYPE']['BASE_TYPE']) { $arUFEnumCache[$arOneUserField['FIELD_NAME']] = array(); $arUFNameEnumCache[$arOneUserField['FIELD_NAME']] = array(); $rsEnum = $obEnum->GetList(array(), array('USER_FIELD_ID' => $arOneUserField['ID'])); while ($arEnum = $rsEnum->Fetch()) { $arUFEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['XML_ID']] = $arEnum['ID']; $arUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = trim($arEnum['VALUE']); } } } if (isset($arOneUserField)) { unset($arOneUserField); } foreach ($arOldUFListCache as &$arOneUserField) { if ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'enum') { $arOldUFEnumCache[$arOneUserField['FIELD_NAME']] = array(); $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']] = array(); $rsEnum = $obEnum->GetList(array(), array('USER_FIELD_ID' => $arOneUserField['ID'])); while ($arEnum = $rsEnum->Fetch()) { $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = $arEnum['XML_ID']; $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = trim($arEnum['VALUE']); } } } if (isset($arOneUserField)) { unset($arOneUserField); } } } } if (!empty($arUFListCache)) { foreach ($arUFListCache as &$arOneUserField) { if (!isset($arDestSect[$arOneUserField['FIELD_NAME']])) { continue; } if ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'file') { if (!empty($arDestSect[$arOneUserField['FIELD_NAME']])) { if (is_array($arDestSect[$arOneUserField['FIELD_NAME']])) { $arNewFileList = array(); foreach ($arDestSect[$arOneUserField['FIELD_NAME']] as &$intFileID) { $arNewFile = false; $intFileID = (int) $intFileID; if ($intFileID > 0) { $arNewFile = CFile::MakeFileArray($intFileID); } if (!empty($arNewFile)) { $arNewFileList[] = $arNewFile; } } if (isset($intFileID)) { unset($intFileID); } $arDestSect[$arOneUserField['FIELD_NAME']] = !empty($arNewFileList) ? $arNewFileList : false; } else { $arNewFile = false; $intFileID = (int) $arDestSect[$arOneUserField['FIELD_NAME']]; if ($intFileID > 0) { $arNewFile = CFile::MakeFileArray($intFileID); } $arDestSect[$arOneUserField['FIELD_NAME']] = !empty($arNewFile) ? $arNewFile : false; } } else { $arDestSect[$arOneUserField['FIELD_NAME']] = false; } } elseif ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'enum') { if (!empty($arDestSect[$arOneUserField['FIELD_NAME']])) { if ($intSrcIBlockID != $intDestIBlockID) { if (array_key_exists($arOneUserField['FIELD_NAME'], $arUFEnumCache) && array_key_exists($arOneUserField['FIELD_NAME'], $arOldUFEnumCache)) { if (is_array($arDestSect[$arOneUserField['FIELD_NAME']])) { $arNewEnumList = array(); foreach ($arDestSect[$arOneUserField['FIELD_NAME']] as &$intValueID) { $strValueXmlID = $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$intValueID]; if (array_key_exists($strValueXmlID, $arUFEnumCache[$arOneUserField['FIELD_NAME']])) { $arNewEnumList[] = $arUFEnumCache[$arOneUserField['FIELD_NAME']][$strValueXmlID]; } else { $strValueName = $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$intValueID]; $intValueKey = array_search($strValueName, $arUFNameEnumCache[$arOneUserField['FIELD_NAME']]); if ($intValueKey !== false) { $arNewEnumList[] = $intValueKey; } } } if (isset($intValueID)) { unset($intValueID); } if (!empty($arNewEnumList)) { $arDestSect[$arOneUserField['FIELD_NAME']] = $arNewEnumList; } } else { $strValueXmlID = $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$arDestSect[$arOneUserField['FIELD_NAME']]]; if (array_key_exists($strValueXmlID, $arUFEnumCache[$arOneUserField['FIELD_NAME']])) { $arDestSect[$arOneUserField['FIELD_NAME']] = $arUFEnumCache[$arOneUserField['FIELD_NAME']][$strValueXmlID]; } else { $strValueName = $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arDestSect[$arOneUserField['FIELD_NAME']]]; $intValueKey = array_search($strValueName, $arUFNameEnumCache[$arOneUserField['FIELD_NAME']]); if ($intValueKey !== false) { $arDestSect[$arOneUserField['FIELD_NAME']] = $intValueKey; } } } } } } else { $arDestSect[$arOneUserField['FIELD_NAME']] = false; } } } if (isset($arOneUserField)) { unset($arOneUserField); } } $intNewID = $sc->Add($arDestSect); if (!$intNewID) { CASDiblock::$error .= '[' . $ID . '] ' . $sc->LAST_ERROR . "\n"; } } } } $successRedirect = true; } unset($_REQUEST['action']); if (isset($_REQUEST['action_button'])) { unset($_REQUEST['action_button']); } if ($successRedirect) { LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam('', array('action', 'action_button', 'asd_ib_dest', 'asd_sect_dest', 'ID'))); } } if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'asd_remove' && $IBLOCK_ID > 0 && isset($_REQUEST['find_section_section']) && check_bitrix_sessid() && CASDIblockRights::IsIBlockDisplay($IBLOCK_ID)) { $intSectionID = (int) $_REQUEST['find_section_section']; if ($intSectionID > 0) { $strCurPage = $GLOBALS['APPLICATION']->GetCurPage(); $bElemPage = $strCurPage == '/bitrix/admin/iblock_element_admin.php' || $strCurPage == '/bitrix/admin/cat_product_admin.php'; $bMixPage = $strCurPage == '/bitrix/admin/iblock_list_admin.php'; if ($bElemPage || $bMixPage) { foreach ($_REQUEST['ID'] as $eID) { if ($bMixPage) { if (substr($eID, 0, 1) != 'E') { continue; } $ID = (int) substr($eID, 1); } else { $ID = (int) $eID; } if ($ID <= 0) { continue; } if (CASDIblockRights::IsElementEdit($IBLOCK_ID, $ID)) { $arSectionList = array(); $rsSections = CIBlockElement::GetElementGroups($ID, true); while ($arSection = $rsSections->Fetch()) { $arSection['ID'] = (int) $arSection['ID']; if ($arSection['ID'] != $intSectionID) { $arSectionList[] = $arSection['ID']; } } CIBlockElement::SetElementSection($ID, $arSectionList, false); $successRedirect = true; } } } } unset($_REQUEST['action']); if (isset($_REQUEST['action_button'])) { unset($_REQUEST['action_button']); } if ($successRedirect) { LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam('', array('action', 'action_button'))); } } }
$row =& $lAdmin->AddRow($arItems["ID"], $arItems); $isProductExistSKU = false; if (!$boolSubscribe) { $isProductExistSKU = $arCatalogProduct['EXIST_SKU']; } $arResult = array(); if ($isProductExistSKU) { $arResult = GetProductSku($buyerId, $lid, $arItems["ID"], $arItems["NAME"], '', $arItems); $arSKUId = $arSKUPricesResult = array(); if (isset($arResult["SKU_ELEMENTS"]) && !empty($arResult["SKU_ELEMENTS"]) && is_array($arResult["SKU_ELEMENTS"])) { foreach ($arResult["SKU_ELEMENTS"] as $sku) { $arSKUId[] = $sku["ID"]; } } foreach ($arPrices as $price) { $dbPrice = CPrice::getList(array(), array('PRODUCT_ID' => $arSKUId, 'CATALOG_GROUP_ID' => $price['ID']), false, false, array('PRODUCT_ID', 'PRICE')); while ($arPrice = $dbPrice->fetch()) { $arSKUPricesResult[$price['ID']][$arPrice["PRODUCT_ID"]] = $arPrice["PRICE"]; } } $active = $arItems["ACTIVE"] == 'Y' ? GetMEssage('SPS_PRODUCT_ACTIVE') : GetMEssage('SPS_PRODUCT_NO_ACTIVE'); if (!empty($arResult["SKU_ELEMENTS"])) { $OfferIblockId = $arResult["OFFERS_IBLOCK_ID"]; $row->AddField("ACTIVE", $active); $row->AddField("ACT", '<input type="button" onclick="fShowSku(this, ' . CUtil::PhpToJSObject($arResult["SKU_ELEMENTS"]) . ');" name="btn_show_sku_' . $arItems["ID"] . '" value="' . GetMessage("SPS_SKU_SHOW") . '">'); $row->AddViewField("PREVIEW_PICTURE", CFileInput::Show('NO_FIELDS[' . $arItems['ID'] . '][PREVIEW_PICTURE]', $arItems['PREVIEW_PICTURE'], array("IMAGE" => "Y", "PATH" => "Y", "FILE_SIZE" => "Y", "DIMENSIONS" => "Y", "IMAGE_POPUP" => "Y", "MAX_SIZE" => $maxImageSize, "MIN_SIZE" => $minImageSize), array('upload' => false, 'medialib' => false, 'file_dialog' => false, 'cloud' => false, 'del' => false, 'description' => false))); $row->AddViewField("DETAIL_PICTURE", CFileInput::Show('NO_FIELDS[' . $arItems['ID'] . '][DETAIL_PICTURE]', $arItems['DETAIL_PICTURE'], array("IMAGE" => "Y", "PATH" => "Y", "FILE_SIZE" => "Y", "DIMENSIONS" => "Y", "IMAGE_POPUP" => "Y", "MAX_SIZE" => $maxImageSize, "MIN_SIZE" => $minImageSize), array('upload' => false, 'medialib' => false, 'file_dialog' => false, 'cloud' => false, 'del' => false, 'description' => false))); $arProperties = array(); if (!empty($arSelectedProps)) { $rsProperties = CIBlockElement::GetProperty($iblockId, $arItems["ID"]); while ($ar = $rsProperties->Fetch()) {
function ReCountFromBase(&$arFields, &$boolBase) { $arBaseGroup = CCatalogGroup::GetBaseGroup(); if (!empty($arBaseGroup)) { if ($arFields['CATALOG_GROUP_ID'] == $arBaseGroup['ID']) { $boolBase = true; } else { if (!empty($arFields['EXTRA_ID']) && intval($arFields['EXTRA_ID']) > 0) { $arExtra = CExtra::GetByID($arFields['EXTRA_ID']); if (!empty($arExtra)) { $arFilter = array('PRODUCT_ID' => $arFields['PRODUCT_ID'],'CATALOG_GROUP_ID' => $arBaseGroup['ID']); if (isset($arFields['QUANTITY_FROM'])) $arFilter['QUANTITY_FROM'] = $arFields['QUANTITY_FROM']; if (isset($arFields['QUANTITY_TO'])) $arFilter['QUANTITY_TO'] = $arFields['QUANTITY_TO']; $rsBasePrices = CPrice::GetListEx( array("QUANTITY_FROM" => "ASC", "QUANTITY_TO" => "ASC"), $arFilter, false, array('nTopCount' => 1), array('PRICE','CURRENCY') ); if ($arBasePrice = $rsBasePrices->Fetch()) { $arFields['CURRENCY'] = $arBasePrice['CURRENCY']; $arFields['PRICE'] = RoundEx($arBasePrice["PRICE"] * (1 + DoubleVal($arExtra["PERCENTAGE"])/100), CATALOG_VALUE_PRECISION); } else { $arFields['EXTRA_ID'] = 0; } } else { $arFields['EXTRA_ID'] = 0; } } } } }
)); while($viewed = $viewedIterator->fetch()) { $viewed['MODULE'] = 'catalog'; $arViewed[$viewedCount] = $viewed; $arViewedIds[] = $viewed['PRODUCT_ID']; $mapViewed[$viewed['PRODUCT_ID']] = $viewedCount; $viewedCount++; } unset($viewedCount); $baseGroup = CCatalogGroup::getBaseGroup(); if (!empty($arViewedIds)) { $priceIterator = CPrice::getList( array(), array("PRODUCT_ID" => $arViewedIds, 'CATALOG_GROUP_ID' => $baseGroup['ID']), false, false, array("PRODUCT_ID", "PRICE", "CURRENCY")); while($productPrice = $priceIterator->fetch() ) { if (isset($mapViewed[$productPrice['PRODUCT_ID']])) { $key = $mapViewed[$productPrice['PRODUCT_ID']]; $arViewed[$key]["PRICE"] = $productPrice["PRICE"]; $arViewed[$key]["CURRENCY"] = $productPrice["CURRENCY"]; } } } $viewedCnt = count($arViewed); $arViewed = array_slice($arViewed, 0, 2); if (count($arViewed) <= 0) $displayNoneViewed = "none";
$arUpdatedIDs[] = $ID_tmp; if (!$ID_tmp) { $strWarning .= str_replace("#PRICE#", $arCatalogFields["PRICE"], GetMessage("C2IT_ERROR_SAVEPRICE")) . "<br>"; } } } else { $ID_tmp = CPrice::Add($arCatalogFields); $arUpdatedIDs[] = $ID_tmp; if (!$ID_tmp) { $strWarning .= str_replace("#PRICE#", $arCatalogFields["PRICE"], GetMessage("C2IT_ERROR_SAVEPRICE")) . "<br>"; } } } } } CPrice::DeleteByProduct($PRODUCT_ID, $arUpdatedIDs); \Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID, $PRODUCT_ID); if ($arCatalog["SUBSCRIPTION"] == "Y") { $arCurProductGroups = array(); $dbProductGroups = CCatalogProductGroups::GetList(array(), array("PRODUCT_ID" => $ID), false, false, array("ID", "GROUP_ID", "ACCESS_LENGTH", "ACCESS_LENGTH_TYPE")); while ($arProductGroup = $dbProductGroups->Fetch()) { $arCurProductGroups[IntVal($arProductGroup["GROUP_ID"])] = $arProductGroup; } $arAvailContentGroups = array(); $availContentGroups = COption::GetOptionString("catalog", "avail_content_groups"); if (strlen($availContentGroups) > 0) { $arAvailContentGroups = explode(",", $availContentGroups); } $dbGroups = CGroup::GetList($b = "c_sort", $o = "asc", array("ANONYMOUS" => "N")); while ($arGroup = $dbGroups->Fetch()) { $arGroup["ID"] = intval($arGroup["ID"]);
<?php $arCountPricesCanAccess = 0; foreach ($arItem["PRICES"] as $key => $arPrice) { if ($arPrice["CAN_ACCESS"]) { $arCountPricesCanAccess++; } } ?> <?php foreach ($arItem["PRICES"] as $key => $arPrice) { ?> <?php if ($arPrice["CAN_ACCESS"]) { ?> <?php $price = CPrice::GetByID($arPrice["ID"]); ?> <?php if ($arCountPricesCanAccess > 1) { ?> <div class="price_name"><?php echo $price["CATALOG_GROUP_NAME"]; ?> </div><?php } ?> <span class="price"> <?php if ($arPrice["VALUE"] > $arPrice["DISCOUNT_VALUE"]) { ?>
CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"], $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]); $arItems = CSaleBasket::GetByID($arItems["ID"]); } $arBasketItems[] = $arItems; } $arResult['WIDGET_ITEMS'] = array(); $ESTIMATED_PRICE_TYPE_ID = 4; foreach($arBasketItems as $index=>$item) { $widgetItem = array(); $widgetItem['price'] = $item['PRICE']; $widgetItem['shop_good_code'] = $item['PRODUCT_ID']; $widgetItem['count'] = $item['QUANTITY']; $widgetItem['weight'] = $item['WEIGHT']; $widgetItem['name'] = $item['NAME']; $rsPrices = CPrice::GetList(array(), array('PRODUCT_ID' => $item['PRODUCT_ID'], 'CATALOG_GROUP_ID' => $ESTIMATED_PRICE_TYPE_ID)); if ($arPrice = $rsPrices->Fetch()) { $widgetItem['estimated_price'] = $arPrice["PRICE"]; } array_push($arResult['WIDGET_ITEMS'], $widgetItem); } $arResult['WIDGET_GOODS_JSON'] = json_encode($arResult['WIDGET_ITEMS']); if (!($person_type_id = COption::GetOptionString($module_id, "person_type_id"))) { throw new Exception(GetMessage("EXCEPTION_NOT_SET_PERSON_TYPE_OPTION")); } $gp_prop_list = array( 'customer_name', 'customer_email', 'customer_phone', //'index', //'location', //'location_city_name',
/** * функция после добавлением элемента в инфоблока * @param $arFields поля элемента ифоблока * для страницы Объявления * eсли VIP объявление то добавляет корзину * привязывает по ID созданное объявления к товару в корзине * редирект на необходимы url */ function AuthtorizeAfterAds(&$arFields){ unset($_SESSION['user777999authorize']); if($arFields['PROPERTY_VALUES']['114']){ foreach($arFields['PROPERTY_VALUES']['114'] as $key114 => $item114){ if($item114['VALUE']){ foreach($arFields['PROPERTY_VALUES']['113'] as $key113 => $item113){ if($item113['VALUE']){ $arFields['PROPERTY_VALUES']['113'][$key113]=ConvertDateTime($item114['VALUE'], "YYYY-MM-DD HH:MI:SS"); }else{ $arFields['PROPERTY_VALUES']['113'][n0]=ConvertDateTime($item114['VALUE'], "YYYY-MM-DD HH:MI:SS"); } } } } } if(($arFields["IBLOCK_ID"] == 16)&&(!CUser::IsAuthorized())){ global $USER; $rsUser = CUser::GetByID($_SESSION['NEW_USER_ID']); $arUser = $rsUser->Fetch(); $_SESSION['$arUser']=$arUser; $USER = new CUser; $arAuthResult = $USER->Login($arUser['LOGIN'], $arUser['PASSWORD'], "Y","N"); } //$_SESSION['user777authorize']=$arFields; if(($arFields["IBLOCK_ID"] == 16)&&(CModule::IncludeModule("catalog"))&&(CModule::IncludeModule("sale"))){ $price_product=floatval($arFields["PROPERTY_VALUES"][86]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][87]); if($price_product){ $PRODUCT_ID = $arFields['ID']; $PRICE_TYPE_ID = 1; $arFieldsprice = Array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" =>$price_product, "CURRENCY" => "RUB", "QUANTITY_FROM" => 1, ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ($arr = $res->Fetch()) { CPrice::Update($arr["ID"], $arFieldsprice); } else { CPrice::Add($arFieldsprice,true); } } } if ( ( (($arFields["IBLOCK_ID"] == 2)&& (is_numeric($arFields["PROPERTY_VALUES"][73]))) || (($arFields["IBLOCK_ID"] == 15)&& (is_numeric($arFields["PROPERTY_VALUES"][76]))) || (($arFields["IBLOCK_ID"] == 14)&& (is_numeric($arFields["PROPERTY_VALUES"][78]))) ) && CModule::IncludeModule("catalog") && CModule::IncludeModule("sale") && ((strstr($_SERVER['REQUEST_URI'],'/personal/moy-magazin/'))||(strstr($_SERVER['REQUEST_URI'],'/obyavleniya/add-ads/'))) ) { switch($arFields["IBLOCK_ID"]){ case 2: $price_product=floatval($arFields["PROPERTY_VALUES"][73]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][75]); break; case 14: $price_product=floatval($arFields["PROPERTY_VALUES"][78]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][79]); break; case 15: $price_product=floatval($arFields["PROPERTY_VALUES"][76]); $quantity_product=floatval($arFields["PROPERTY_VALUES"][77]); break; } if($price_product){ $PRODUCT_ID = $arFields['ID']; $PRICE_TYPE_ID = 1; if($quantity_product){ $ar_res_product=CCatalogProduct::GetByID($PRODUCT_ID); if($ar_res_product['QUANTITY']!=""){ $arFields_quant = array( 'QUANTITY' => $quantity_product ); CCatalogProduct::Update($PRODUCT_ID, $arFields_quant); }else{ $arFields_quant = array( 'ID'=>$PRODUCT_ID, 'QUANTITY' => $quantity_product ); CCatalogProduct::Add($arFields_quant); } } $arFieldsprice = Array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID, "PRICE" =>$price_product, "CURRENCY" => "RUB", ); $res = CPrice::GetList( array(), array( "PRODUCT_ID" => $PRODUCT_ID, "CATALOG_GROUP_ID" => $PRICE_TYPE_ID ) ); if ($arr = $res->Fetch()) { CPrice::Update($arr["ID"], $arFieldsprice,true); $_SESSION['price_add']=$arr; } else { CPrice::Add($arFieldsprice,true); } } } // добавление в корзину vip и поднять if(($arFields["IBLOCK_ID"] == 16)&&(($arFields["PROPERTY_VALUES"][81][0]==40)||($arFields["PROPERTY_VALUES"][81][0]==46))){ unset($_SESSION['ELEMENT_ADS_ID']); if(($_REQUEST['CODE'])&&(CModule::IncludeModule("iblock"))){ if((CModule::IncludeModule("catalog"))&&(CModule::IncludeModule("sale"))){ $dbBasketItems = CSaleBasket::GetList( array(), array( "FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL" ), false, false, array("ID", "NAME") ); if($arFields["PROPERTY_VALUES"][81][0]==46){ $test_ads="TEST_ADSUP"; } if($arFields["PROPERTY_VALUES"][81][0]==40){ $test_ads="TEST_VIP"; } while ($arBasketItems = $dbBasketItems->Fetch()) { $dbProp = CSaleBasket::GetPropsList(array("SORT" => "ASC", "ID" => "ASC"), array("BASKET_ID" => $arBasketItems["ID"])); if($arProp = $dbProp -> GetNext()) { $props[] = $arProp; $dbProp = CSaleBasket::GetPropsList(array("SORT" => "ASC", "ID" => "ASC"), array("BASKET_ID" => $arBasketItems["ID"])); if($arProp = $dbProp -> GetNext()) { if($arProp['CODE']==$test_ads){ $ELEMENT_ID = intval($arProp['VALUE']); if($ELEMENT_ID==$_REQUEST['CODE']){ $vip=true; } } } } } } } //var_dump($vip);die(); if(!$vip){ $arPropsBasket = array(); if($arFields["PROPERTY_VALUES"][81][0]==46){ $code_price="up-ads"; $arPropsBasket[] = array( "NAME" => "Название: ".$arFields['NAME'], "CODE" => "TEST_ADSUP", "VALUE" => $arFields['ID'] ); } if($arFields["PROPERTY_VALUES"][81][0]==40){ $code_price="vip-ads"; $arPropsBasket[] = array( "NAME" => "Название: ".$arFields['NAME'], "CODE" => "TEST_VIP", "VALUE" => $arFields['ID'] ); } $arSelect2 = Array("ID", "IBLOCK_ID", "NAME","PROPERTY_*"); $arFilter2 = Array("IBLOCK_ID"=>17, "CODE"=>$code_price, "ACTIVE"=>"Y"); $res2 = CIBlockElement::GetList(Array(), $arFilter2, false, Array("nPageSize"=>1), $arSelect2); while($ob2 = $res2->GetNextElement()){ $arFieldIdAds = $ob2->GetFields(); if (CModule::IncludeModule("sale")) { $base_price=CPrice::GetBasePrice($arFieldIdAds['ID']); $arFieldsB = array( "PRODUCT_ID" => $arFieldIdAds['ID'], "PRICE" => $base_price['PRICE'], "CURRENCY" => "RUB", "QUANTITY" => 1, "LID" => LANG, "NAME" => $arFieldIdAds['NAME'], ); $arFieldsB["PROPS"] = $arPropsBasket; $id_basket = CSaleBasket::Add($arFieldsB); $db_res = CSaleBasket::GetPropsList( array( "SORT" => "ASC", "NAME" => "ASC" ), array("BASKET_ID" => $id_basket) ); while ($ar_res = $db_res->Fetch()) { $_SESSION['order_fields_after'][]= $ar_res["NAME"]."=".$ar_res["VALUE"]."<br>"; } } } } unset($_SESSION['NEW_USER_ID']); LocalRedirect('/personal/cart/'); } if(($arFields["IBLOCK_ID"] == 16)&&($arFields["PROPERTY_VALUES"][81][0]==47)){ $_SESSION['ELEMENT_ADS_ID']=$arFields['ID']; } }