Your IP : 3.145.72.233
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
set_time_limit(360);
$arBitrixConf = unserialize(file_get_contents('bitrix_conf.bin'));
CModule::IncludeModule("iblock");
CModule::IncludeModule("sale");
CModule::IncludeModule("catalog");
if($_GET["action"] == "getAllProducts"){
$data = array();
$ind = 0;
$ind_offset = 0;
$db_res = CCatalogProduct::GetList(
array("*"),
array("ELEMENT_IBLOCK_ID"=>$arBitrixConf["IblockID"]),
false,
array()
);
while ($ar_res = $db_res->Fetch())
{
$ind_offset++;
if($_GET["offset"])
if($ind_offset <=$_GET["offset"]) continue;
$ind++;
if($_GET["limit"] )
if($ind >=$_GET["limit"]) break;
$product = CCatalogProduct::GetByIDEx($ar_res["ID"]);
if($product["ACTIVE"]=="N" || $product["ID"]=="" || $product["ID"]=="null")
continue;
$category = CIBlockSection::GetByID($product["IBLOCK_SECTION_ID"]);
if($category_res = $category->GetNext()){
$category = array(
"ID" => $category_res['ID'],
"NAME" => $category_res['NAME'],
"CODE" => $category_res['CODE'],
);
}
$props = array();
foreach ($product["PROPERTIES"] as $key => $val){
if(($key != $arBitrixConf["BRAND_CODE"] || $key != $arBitrixConf["MODEL_CODE"] ) && $val["VALUE"] != "" ){
$value = $val["VALUE"];
if($val["VALUE_ENUM"]!="")
$value = $val["VALUE_ENUM"];
$props [] = array(
"NAME"=> $val["NAME"],
"CODE"=> $key,
"VALUE"=> $value,
);
}
}
// pre0($product);
// pre0($props);
$pic = $product["DETAIL_PICTURE"]>0?CFile::GetPath($product["DETAIL_PICTURE"]):"";
$pic = $product["PREVIEW_PICTURE"]>0?CFile::GetPath($product["PREVIEW_PICTURE"]):"";
if($rres = $product["DETAIL_PICTURE"]>0){
$pic = "https://".$_SERVER['SERVER_NAME'].CFile::GetPath($product["DETAIL_PICTURE"]);
}else{
if($rres = $product["DETAIL_PICTURE"]>0){
$pic = "https://".$_SERVER['SERVER_NAME'].CFile::GetPath($product["PREVIEW_PICTURE"]);
}else{
$pic = "";
}
}
// BREND
$brand = "";
$db_props = CIBlockElement::GetProperty($arBitrixConf["IblockID"], $ar_res["ID"], array("sort" => "asc"), Array("CODE"=>$arBitrixConf["BRAND_CODE"]));
$ar_props = $db_props->Fetch();
if($ar_props["VALUE"] > 0)
$brand = $ar_props["VALUE_ENUM"];
else
$brand = $ar_props["VALUE"];
if($product["PROPERTIES"][$arBitrixConf["ART_CODE"]]["VALUE"]=="")
continue;
$description = $product["PROPERTIES"]["DESCRIPTION"]["VALUE"]["TEXT"];
if($description == ""){
$description = $product["DETAIL_TEXT_TYPE"];
}
if($pic == ""){
$pic = "https://".$_SERVER['SERVER_NAME'].CFile::GetPath($product["PROPERTIES"]["MORE_PHOTO"]["VALUE"]);
}
$data [] = array(
"ID"=>$product["ID"],
"NAME"=>$product["NAME"],
"ART"=>$product["PROPERTIES"][$arBitrixConf["ART_CODE"]]["VALUE"],
"URL"=>"https://".$_SERVER['SERVER_NAME'].$product["DETAIL_PAGE_URL"],
"IMG" =>$pic,
"BRAND"=>$brand,
"MODEL"=>$product["PROPERTIES"][$arBitrixConf["MODEL_CODE"]]["VALUE"],
"PRICE"=>$product["PRICES"][1]["PRICE"],
"CATEGORY"=>$category,
"QUANTITY"=>$product["PRODUCT"]["QUANTITY"],
"PROPERTIES"=>$props,
"DESCRIPTION"=>$description,
);
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
exit();
}
if($_GET["action"] == "updateProducts"){
CModule::IncludeModule("catalog");
CModule::IncludeModule("sale");
$api_key = $_GET["apikey"];
$updateCount = $_GET["exportStock"];
$updateRRP = $_GET["exportRRP"];
$api_feed_link = "http://b2b.klimatlend.ua/pub/api/v1/products/feed/?token=" . $api_key."&anyLinked=true";
// echo $api_feed_link;
$response_xml_data = file_get_contents($api_feed_link);
if($response_xml_data){
$data = simplexml_load_string($response_xml_data);
$dataArr = object_to_array($data);
unlinkProducts($arBitrixConf["IblockID"]);
$limit=10000;
$updateResultArr = array();
foreach ($dataArr["shop"]["offers"]["offer"] as $offer){
$limit--;
if($limit == 0 ) break;
$arts = array();
$arts[$offer["vendorCode"]] = $offer["vendorCode"];
foreach ($offer["param"] as $par){
$pos = strpos($par, "НС-");
if( $pos !== false ){
$arts[$par] = $par;
$other = explode(",", $par);
foreach ($other as $alterArticle){
$arts[$alterArticle] = $alterArticle;
}
}
}
// pre0($arts);
foreach ($arts as $product_artice){
$arOrder = array();
$arFilter = array("IBLOCK_ID" => $arBitrixConf["IblockID"], "ACTIVE" => "Y", "ACTIVE_DATE"=>"Y", "PROPERTY_".$arBitrixConf["ART_CODE"] => "%".$product_artice."%");
$arSelectFields = array("*", "PROPERTY_".$arBitrixConf["ART_CODE"], "PROPERTY_B2BLINKED");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelectFields);
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
if($updateRRP){
changePrice($arFields["ID"], $offer["price"]);
}
if($updateCount){
if($offer["@attributes"]["available"] === true || $offer["@attributes"]["available"] == "true"){
if($offer["price"] != 0){
changeQuantity($arFields["ID"], 100);
}else{
changeQuantity($arFields["ID"], 0);
}
}else{
changeQuantity($arFields["ID"], 0);
}
}
if($updateRRP || $updateCount){
$updateResultArr["UPDATED"] [] = $arFields["PROPERTY_".strtoupper($arBitrixConf["ART_CODE"])."_VALUE"];
}
setProductProperty($arFields["ID"], "B2BLINKED", "TRUE");
setProductProperty($arFields["ID"],"OLD_PRICE", $offer["oldprice"] );
break;
}
}
}
$updateResultArr["LINKED"] = getArrListOfLinkedProducts($arBitrixConf["IblockID"],$arBitrixConf["ART_CODE"]);
$updateResultArr["UNLINKED"] = getArrListOfUnLinkedProducts($arBitrixConf["IblockID"],$arBitrixConf["ART_CODE"] ,$arBitrixConf["MODEL_CODE"]);
createHotlineExportFile($arBitrixConf["IblockID"],"",$arBitrixConf["ART_CODE"]);
header('Content-Type: application/json; charset=utf-8');
echo json_encode($updateResultArr);
exit();
}
exit();
}
echo "ERROR";
?>
<?
function unlinkProducts($IBLOCK_ID){
$result = array();
$countOfUnlinked = 0;
$arSelectFields = array("*", "PROPERTY_B2BLINKED");
$arOrder = array();
$arFilter = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "ACTIVE_DATE"=>"Y", "PROPERTY_B2BLINKED" => "TRUE");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelectFields);
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
setProductProperty($arFields["ID"],"B2BLINKED", "" );
setProductProperty($arFields["ID"],"OLD_PRICE", "" );
}
return $result;
}
function setProductProperty($ELEMENT_ID, $PROPERTY_CODE, $PROPERTY_VALUE) {
$dbr = CIBlockElement::GetList(array(), array("=ID"=>$ELEMENT_ID), false, false, array("ID", "IBLOCK_ID"));
if ($dbr_arr = $dbr->Fetch())
{
$IBLOCK_ID = $dbr_arr["IBLOCK_ID"];
CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, $PROPERTY_CODE);
}
}
function changeQuantity($PRODUCT_ID, $count){
Cmodule::IncludeModule('catalog');
$arFields = array('QUANTITY' => $count, 'QUANTITY_RESERVED' => 0);
CCatalogProduct::Update($PRODUCT_ID, $arFields);
}
function changePrice($PRODUCT_ID, $price){
$PRICE_TYPE_ID = 1;
$arFields = Array(
"PRODUCT_ID" => $PRODUCT_ID,
"CATALOG_GROUP_ID" => $PRICE_TYPE_ID,
"PRICE" => $price,
"CURRENCY" => "UAH",
"QUANTITY_FROM" => false,
"QUANTITY_TO" => false
);
$res = CPrice::GetList(
array(),
array(
"PRODUCT_ID" => $PRODUCT_ID,
"CATALOG_GROUP_ID" => $PRICE_TYPE_ID
)
);
if ($arr = $res->Fetch())
{
CPrice::Update($arr["ID"], $arFields);
}
else
{
CPrice::Add($arFields);
}
}
function getArrListOfLinkedProducts($IBLOCK_ID, $ARTCODE){
$result = array();
$countOfUnlinked = 0;
$arSelectFields = array("*", "PROPERTY_B2BLINKED", "PROPERTY_".$ARTCODE);
$arOrder = array();
$arFilter = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "ACTIVE_DATE"=>"Y", "PROPERTY_B2BLINKED" => "TRUE");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelectFields);
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$countOfUnlinked++;
$result [] = $arFields["PROPERTY_".strtoupper($ARTCODE)."_VALUE"];
}
return $result;
}
function getArrListOfUnLinkedProducts($IBLOCK_ID, $ARTCODE, $MODELCODE){
$result = array();
$countOfUnlinked = 0;
$arSelectFields = array("*", "PROPERTY_B2BLINKED", "PROPERTY_".strtoupper($ARTCODE), "PROPERTY_".strtoupper($MODELCODE));
$arOrder = array();
$arFilter = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "ACTIVE_DATE"=>"Y", "PROPERTY_B2BLINKED" => "");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelectFields);
while($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$countOfUnlinked++;
$result [] = array("NAME"=>$arFields["NAME"], "ART"=>$arFields["PROPERTY_".strtoupper($ARTCODE)."_VALUE"]);
}
return $result;
}
function createHotlineExportFile($IBLOCK_ID, $vendor = "" , $modelCode){
CModule::IncludeModule("iblock");
CModule::IncludeModule("price");
CModule::IncludeModule("catalog");
$fileName = "hotline_b2b_export_2aaa3aaa.xml";
$xmlFile = fopen($_SERVER["DOCUMENT_ROOT"] . "/" . $fileName, "w");
$lastMod = date("Y-m-s H:i");//2015-09-10 17:00
$log ="";
fwrite($xmlFile, '<?xml version="1.0" encoding="UTF-8" ?>');
fwrite($xmlFile, "\n"."<price>");
fwrite($xmlFile, '
<date>'.$lastMod.'</date>
<firmName>http://klimatlend.ua</firmName>
<firmId>0</firmId>
<delivery id="1" type="address" carrier="slf" cost="150" freeFrom="2000" time="1" region="01*-06*" />
<delivery id="2" type="warehouse" cost="60" time="2" carrier="NP" freeFrom="3000" region="01*-94*" />
');
$arFilter = array('IBLOCK_ID' => array($IBLOCK_ID), "ACTIVE"=>"Y");
$rsSect = CIBlockSection::GetList(array('left_margin' => 'asc'),$arFilter);
$categories = "\n<categories>";
while ($arSect = $rsSect->GetNext())
{
$categories .="\n <category>\n <id>".$arSect["ID"]."</id>\n <name>".$arSect["NAME"]."</name>\n </category>";
}
$categories .= "\n</categories>";
fwrite($xmlFile, $categories);
$categories = "";
fwrite($xmlFile, "\n<items>");
$arFilter = array('IBLOCK_ID' => array(22), "ACTIVE"=>"Y", "PROPERTY_B2BLINKED" => "TRUE");
$arSelect = array("*","PROPERTY_*");
$rsSect = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$rsQuantities = CCatalogProduct::GetList(Array(), $arFilter, false, false, $arSelect);
while ($qua = $rsQuantities->GetNext())
{
$arrQuantities [$qua["ID"]] = $qua["QUANTITY"];
}
$item_limit = 100000;
$item_count = 0;
$addedItems = 0;
while ($arSect = $rsSect->GetNext())
{
$item_count++;
if( $item_count > $item_limit) break;
$price = CPrice::GetBasePrice($arSect["ID"]);
if( $price["PRICE"] == "" ||
$price["PRICE"] == "1.00"||
$price["PRICE"] == "0.00"||
$price["PRICE"] == "25.00") {
$log .= "<h4>".$arSect["NAME"]." - price 0, 1 or 25 do not add in the list!</h4>";
continue;
}
$quantity = $arrQuantities[$arSect["ID"]];
$urlLink = "https://" . $_SERVER['SERVER_NAME'].$arSect["DETAIL_PAGE_URL"]."";
$urlImage = $arSect['DETAIL_PICTURE'] ? $GLOBALS['SERVER_PROTOCOL_PATH'] . $_SERVER['SERVER_NAME'] . CFile::GetFileArray($arSect['DETAIL_PICTURE'])["SRC"] : "";
$warranty = "";
$countryFabric = "";
$props = CIBlockElement::GetProperty($arSect["IBLOCK_ID"],$arSect["ID"]);
while ($prop = $props->GetNext())
{
$arrProps [$prop["CODE"]] = $prop;
}
if($arSect["PREVIEW_PICTURE"] == "")
$imageUrl = CFile::GetPath($arSect["DETAIL_PICTURE"]);
else
$imageUrl = CFile::GetPath($arSect["PREVIEW_PICTURE"]);
if($imageUrl == ""){
if ($arrProps["MORE_PHOTO"]["VALUE"] !=""){
$imageUrl = CFile::GetPath($arrProps["MORE_PHOTO"]["VALUE"]);
}
}
$urlImage = "https://" . $_SERVER['SERVER_NAME'] .$imageUrl;
// BREND
if($vendor == ""){
$brand = "";
$db_props = CIBlockElement::GetProperty(22, $arSect["ID"], array("sort" => "asc"), Array("CODE"=>"MANUFACTURER"));
$ar_props = $db_props->Fetch();
if($ar_props["VALUE"] > 0)
$brand = $ar_props["VALUE_ENUM"];
else
$brand = $ar_props["VALUE"];
}else{
$brand = $vendor;
}
$article = $arrProps[$modelCode]["VALUE"];
$warranty = $arrProps["WARRANTY"]["VALUE_ENUM"];
if($warranty == ""){
$warranty = "2";
}
$item = "";
$item .= "\n <item>";
$item .= "\n <id>".$arSect["ID"]."</id>";
$item .= "\n <categoryId>".$arSect["IBLOCK_SECTION_ID"]."</categoryId>";
if($arrProps["MANUFACTURER"]["VALUE"] != "")
$item .= "\n <vendor>".$brand."</vendor>";//
$item .= "\n <name>".$arSect["NAME"]. " (" . $article.") "."</name>";
$item .= "\n <model>".$arrProps["model"]["VALUE"]. " (" . $article.") "."</model>";
$item .= "\n <description> Полная комплектация товара: ".$arSect["NAME"]." со всеми документами, гарантийным талоном от производителя, сертификаты для Госучреждений - по запросу </description>";
$item .= "\n <url>".$urlLink."</url>";
$item .= "\n <code>".$article."</code>";
$item .= "\n <vendorCode>".$article."</vendorCode>";
$item .= "\n <image>".$urlImage."</image>";
$item .= "\n <priceRUAH>".$price["PRICE"]."</priceRUAH>";
//stock section
$item .= "\n <stock";
$item .= intval($quantity)>0 ?" ":" days=\"3\"";
$item .= ">";
$item .= intval($quantity)>0 ?"В наличии":"Под заказ";
$item .= "</stock>";
//stock section end
$item .= "\n <guarantee type=\"manufacturer\">".$warranty."</guarantee>";
$item .= "\n <param name=\"Оригинальность\">Оригинал</param>";
// $item .=" <delivery id=\"1\" cost=\"150\" freeFrom=\"2000\" />";
// $item .="<delivery id=\"2\" cost=\"60\" freeFrom=\"3000\" />";
$item .= "\n <condition>0</condition>";
$item = str_replace("&", "&", $item);
$item .= "\n </item>";
fwrite($xmlFile,$item);
$addedItems++;
}
fwrite($xmlFile, "\n</items>");
fwrite($xmlFile, "\n".'</price>');
}
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
exit();
?>