Your IP : 3.145.72.233


Current Path : /home/bitrix/ext_www/dev.klimatlend.ua/gp_tunnel_2/cms_dist/
Upload File :
Current File : /home/bitrix/ext_www/dev.klimatlend.ua/gp_tunnel_2/cms_dist/bitrix_api.php

<?
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("&", "&amp;", $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();
?>