Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/admin/ |
Current File : /var/www/html/clients/amz.e-nk.ru/bitrix/admin/iblock_csv_export.php |
<? require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/iblock.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/include.php"); set_time_limit(600); /* $res = CIblockElement::GetList(); while($res_arr = $res->Fetch()) CIBLockElement::RecalcSections($res_arr["ID"]); die(); */ $max_execution_time = 160; class CCSVFile { var $f, $content, $l, $i=0; function Read($filename) { $this->fd = fopen ($filename, "rb"); $this->content = fread($this->fd, filesize($filename)); $this->l = strlen($this->content); fclose ($this->fd); } function Fetch() { $bInString = false; $str = ""; $res_r = Array(); while($this->i < $this->l) { $ch = $this->content[$this->i]; if($ch == "\r" || $ch == "\n") { if(!$bInString) { while($this->i<$this->l) { $this->i++; $ch = $this->content[$this->i]; if($ch != "\r" && $ch != "\n") break; } return $res_r; } } elseif($ch == "\"") { if(!$bInString) { $bInString = true; $this->i++; continue; } else { if($this->content[$this->i+1]=="\"") $this->i++; else { $bInString = false; $this->i++; continue; } } } elseif($ch == ";") { if(!$bInString) { $res_r[] = $str; $str = ""; $this->i++; continue; } } $this->i++; $str .= $ch; } return false; } } function ReadCSV($filename) { $c = new CCSVFile; $c->Read($filename); return $c; } $strWarning = ""; function _AddSection($IBLOCK_ID, $NAME, $PARENT=false) { global $strWarning; $res = CIBlockSection::GetList(Array(), Array("SECTION_ID"=>$PARENT, "NAME"=>$NAME, "IBLOCK_ID"=>$IBLOCK_ID)); if($arr = $res->Fetch()) return $arr["ID"]; $bs = new CIBlockSection; $arFields = Array( "ACTIVE"=>"Y", "IBLOCK_SECTION_ID"=>$PARENT, "IBLOCK_ID"=>$IBLOCK_ID, "NAME"=>$NAME, "XML_ID"=>"DBF" ); $ID = 0; if($ID>0) $res = $bs->Update($ID, $arFields); else { $ID = $bs->Add($arFields); $res = ($ID>0); } if(!$res) { $strWarning .= $bs->LAST_ERROR."<br>"; return false; } //CIBlockSection::ReSort($IBLOCK_ID); return $ID; } $DEALER_ID = 2; $ROZN_ID = 1; $IBLOCK_ID = 0; $arPDFSuff = Array("", "_", "_1", "_2", "_3", "a", "_01", "_02", "_03", "_04", "_05", "_06", "_07", "_08", "_09", "_10", "_11", "_12", "_13", "_14", "_15"); $cnt=0; $TOTAL_TIME = IntVal($TOTAL_TIME); $bBreak = false; $strWarning = ""; ////////////////////////////////////////////// $res = CIBlock::GetList(Array(), Array("CODE"=>"EQUIPMENT")); if($res_arr = $res->Fetch()) { $IBLOCK_ID = $res_arr["ID"]; } else { $ib = new CIBlock; $arFields = Array( "ACTIVE"=>"Y", "NAME"=>"Îáîðóäîâàíèå Wav.ru", "CODE"=>"EQUIPMENT", "IBLOCK_TYPE_ID"=>"catalog_tech", "LID"=>"ru" ); $IBLOCK_ID = $ib->Add($arFields); $res = ($IBLOCK_ID>0); if(!$res) $strWarning .= $ib->LAST_ERROR."<br>"; } if($IBLOCK_ID>0) { if(!CCatalog::GetByID($IBLOCK_ID)) CCatalog::Add(Array("IBLOCK_ID"=>$IBLOCK_ID)); $ibp = new CIBlockProperty; $res = CIBlock::GetProperties($IBLOCK_ID, Array(), Array("CODE"=>"SRC")); if($res_arr = $res->Fetch()) $SrcPropID = $res_arr["ID"]; else { $arFields = Array( "NAME" => "Èñòî÷íèê èìïîðòà", "ACTIVE" => "Y", "SORT" => "1000", "DEFAULT_VALUE" => "", "CODE" => "SRC", "ROW_COUNT" => "1", "COL_COUNT" => "10", "MULTIPLE" => "N", "MULTIPLE_CNT" => "", "PROPERTY_TYPE" => "S", "LIST_TYPE" => "L", "IBLOCK_ID" => $IBLOCK_ID ); $SrcPropID = $ibp->Add($arFields); if(IntVal($SrcPropID)<=0) $strWarning .= $ibp->LAST_ERROR."<br>"; } $res = CIBlock::GetProperties($IBLOCK_ID, Array(), Array("CODE"=>"BRAND")); if($res_arr = $res->Fetch()) $BrandPropID = $res_arr["ID"]; else { $arFields = Array( "NAME" => "Brand", "ACTIVE" => "Y", "SORT" => "100", "DEFAULT_VALUE" => "", "CODE" => "BRAND", "ROW_COUNT" => "1", "COL_COUNT" => "1", "MULTIPLE" => "N", "MULTIPLE_CNT" => "", "PROPERTY_TYPE" => "L", "LIST_TYPE" => "L", "IBLOCK_ID" => $IBLOCK_ID ); $BrandPropID = $ibp->Add($arFields); if(IntVal($BrandPropID)<=0) $strWarning .= $ibp->LAST_ERROR."<br>"; } $res = CIBlock::GetProperties($IBLOCK_ID, Array(), Array("CODE"=>"PDF")); if($res_arr = $res->Fetch()) $PDFPropID = $res_arr["ID"]; else { $arFields = Array( "NAME" => "PDF", "ACTIVE" => "Y", "SORT" => "200", "DEFAULT_VALUE" => "", "CODE" => "PDF", "ROW_COUNT" => "1", "COL_COUNT" => "40", "MULTIPLE" => "Y", "MULTIPLE_CNT" => "1", "PROPERTY_TYPE" => "S", "IBLOCK_ID" => $IBLOCK_ID ); $PDFPropID = $ibp->Add($arFields); if(IntVal($PDFPropID)<=0) $strWarning .= $ibp->LAST_ERROR."<br>"; } $res = CIBlock::GetProperties($IBLOCK_ID, Array(), Array("CODE"=>"VOLUMEWEIG")); if($res_arr = $res->Fetch()) $VOLUMEPropID = $res_arr["ID"]; else { $arFields = Array( "NAME" => "Îáúåì", "ACTIVE" => "Y", "SORT" => "300", "DEFAULT_VALUE" => "", "CODE" => "VOLUMEWEIG", "ROW_COUNT" => "1", "COL_COUNT" => "40", "MULTIPLE" => "N", "MULTIPLE_CNT" => "1", "PROPERTY_TYPE" => "S", "IBLOCK_ID" => $IBLOCK_ID ); $VOLUMEPropID = $ibp->Add($arFields); if(IntVal($VOLUMEPropID)<=0) $strWarning .= $ibp->LAST_ERROR."<br>"; } $res = CIBlock::GetProperties($IBLOCK_ID, Array(), Array("CODE"=>"ON_SKLAD")); if($res_arr = $res->Fetch()) $ON_SKLADPropID = $res_arr["ID"]; else { $arFields = Array( "NAME" => "Äîñòóïíî íà ñêëàäå", "ACTIVE" => "Y", "SORT" => "400", "DEFAULT_VALUE" => "", "CODE" => "ON_SKLAD", "ROW_COUNT" => "1", "COL_COUNT" => "40", "MULTIPLE" => "N", "MULTIPLE_CNT" => "1", "PROPERTY_TYPE" => "L", "IBLOCK_ID" => $IBLOCK_ID ); $ON_SKLADPropID = $ibp->Add($arFields); if(IntVal($ON_SKLADPropID)<=0) $strWarning .= $ibp->LAST_ERROR."<br>"; } $res = CIBlock::GetProperties($IBLOCK_ID, Array(), Array("CODE"=>"ERFREE")); if($res_arr = $res->Fetch()) $ERFREEPropID = $res_arr["ID"]; else { $arFields = Array( "NAME" => "Çàêàçàíî â ïóòè", "ACTIVE" => "Y", "SORT" => "500", "DEFAULT_VALUE" => "", "CODE" => "ERFREE", "ROW_COUNT" => "1", "COL_COUNT" => "40", "MULTIPLE" => "N", "MULTIPLE_CNT" => "1", "PROPERTY_TYPE" => "L", "IBLOCK_ID" => $IBLOCK_ID ); $ERFREEPropID = $ibp->Add($arFields); if(IntVal($ERFREEPropID)<=0) $strWarning .= $ibp->LAST_ERROR."<br>"; } $res = CIBlock::GetProperties($IBLOCK_ID, Array(), Array("CODE"=>"DEST_DATE")); if($res_arr = $res->Fetch()) $DEST_DATEPropID = $res_arr["ID"]; else { $arFields = Array( "NAME" => "Äàòà ïðèáûòèÿ çàêàçà íà ñêëàä", "ACTIVE" => "Y", "SORT" => "600", "DEFAULT_VALUE" => "", "CODE" => "DEST_DATE", "ROW_COUNT" => "1", "COL_COUNT" => "20", "MULTIPLE" => "N", "MULTIPLE_CNT" => "1", "PROPERTY_TYPE" => "S", "IBLOCK_ID" => $IBLOCK_ID ); $DEST_DATEPropID = $ibp->Add($arFields); if(IntVal($DEST_DATEPropID)<=0) $strWarning .= $ibp->LAST_ERROR."<br>"; } if(strlen($strWarning)<=0) { $arERFREE = Array(); $arON_SKLAD = Array(); $arGroups = Array(); $arBrands = Array(); $CSV = ReadCSV("D:\\temp\\atprice.txt"); while($res = $CSV->Fetch()) { $cnt++; if($NEXT_TIME>0 && $NEXT_TIME > $cnt) continue; if($max_execution_time>0 && (getmicrotime() - START_EXEC_TIME > $max_execution_time)) { $NEXT_TIME = $cnt; $bBreak = true; break; } $XML_ID = IntVal($res[0]); $NAME = Trim($res[1]); $GROUP1 = Trim($res[3]); if(!isset($arGroups[$GROUP1])) { $id = _AddSection($IBLOCK_ID, $GROUP1); if($id==false) continue; $arGroups[$GROUP1]["ID"] = $id; } $GROUP2 = Trim($res[5]); if(!isset($arGroups[$GROUP1][$GROUP2])) { $id = _AddSection($IBLOCK_ID, $GROUP2, $arGroups[$GROUP1]["ID"]); if($id==false) continue; $arGroups[$GROUP1][$GROUP2]["ID"] = $id; } $GROUP3 = Trim($res[2]); if(!isset($arGroups[$GROUP1][$GROUP2][$GROUP3])) { $id = _AddSection($IBLOCK_ID, $GROUP3, $arGroups[$GROUP1][$GROUP2]["ID"]); if($id==false) continue; $arGroups[$GROUP1][$GROUP2][$GROUP3]["ID"] = $id; } $GROUP_ID = IntVal($arGroups[$GROUP1][$GROUP2][$GROUP3]["ID"]); if($GROUP_ID<=0) continue; $DETAIL_TEXT = ""; $filename = "D:\\Projects\\!_Docs\\WAV.RU\\catalog\\".$XML_ID.".html"; if(file_exists($filename)) { $fd = fopen($filename, "rb"); $content = fread($fd, filesize ($filename)); fclose($fd); $DETAIL_TEXT = ""; $pEnd = 0; $pBeg = 0; while(($pBeg=strpos($content, "<!-- BODY -->", $pEnd))>0 && ($pEnd=strpos($content, "<!-- /BODY -->", $pBeg+13))>0) $DETAIL_TEXT .= substr($content, $pBeg+13, $pEnd-$pBeg-13); $DETAIL_TEXT = str_replace('img src="', 'img src="/images/tech/', $DETAIL_TEXT); } $PROP = Array($SrcPropID=>"DBF"); $BRAND = Trim($res[6]); if(strlen($BRAND)>0) { if(!isset($arBrands[$BRAND])) { $strSql ="SELECT ID FROM b_iblock_property_enum WHERE PROPERTY_ID=".$BrandPropID." AND VALUE='".$DB->ForSQL($BRAND, 255)."'"; $res = $DB->Query($strSql); if($res_arr = $res->Fetch()) $arBrands[$BRAND] = $res_arr["ID"]; else { $strSql = "INSERT INTO b_iblock_property_enum(PROPERTY_ID, DEF, VALUE) ". "VALUES(".$BrandPropID.", 'N', '".$DB->ForSQL($BRAND, 255)."') "; $DB->Query($strSql); $arBrands[$BRAND] = $DB->LastID(); } } $BRAND_ID = $arBrands[$BRAND]; $PROP[$BrandPropID]=Array($BRAND_ID); } $VOLUME = DoubleVal(str_replace(",", ".", Trim($res[10]))); if($VOLUME>0) $PROP[$VOLUMEPropID]=$VOLUME; $ON_SKLAD = Trim($res[11]); if(strlen($ON_SKLAD)>0) { if(!isset($arON_SKLAD[$ON_SKLAD])) { $strSql ="SELECT ID FROM b_iblock_property_enum WHERE PROPERTY_ID=".$ON_SKLADPropID." AND VALUE='".$DB->ForSQL($ON_SKLAD, 255)."'"; $res = $DB->Query($strSql); if($res_arr = $res->Fetch()) $arON_SKLAD[$ON_SKLAD] = $res_arr["ID"]; else { $strSql = "INSERT INTO b_iblock_property_enum(PROPERTY_ID, DEF, VALUE) ". "VALUES(".$ON_SKLADPropID.", 'N', '".$DB->ForSQL($ON_SKLAD, 255)."') "; $DB->Query($strSql); $arON_SKLAD[$ON_SKLAD] = $DB->LastID(); } } $ON_SKLAD_ID = $arON_SKLAD[$ON_SKLAD]; $PROP[$ON_SKLADPropID]=Array($ON_SKLAD_ID); } $ERFREE = Trim($res[12]); if(strlen($ERFREE)>0) { if(!isset($arERFREE[$ERFREE])) { $strSql ="SELECT ID FROM b_iblock_property_enum WHERE PROPERTY_ID=".$ERFREEPropID." AND VALUE='".$DB->ForSQL($ERFREE, 255)."'"; $res = $DB->Query($strSql); if($res_arr = $res->Fetch()) $arERFREE[$ERFREE] = $res_arr["ID"]; else { $strSql = "INSERT INTO b_iblock_property_enum(PROPERTY_ID, DEF, VALUE) ". "VALUES(".$ERFREEPropID.", 'N', '".$DB->ForSQL($ERFREE, 255)."') "; $DB->Query($strSql); $arERFREE[$ERFREE] = $DB->LastID(); } } $ERFREE_ID = $arERFREE[$ERFREE]; $PROP[$ERFREEPropID]=Array($ERFREE_ID); } $DEST_DATE = Trim($res[13]); if(strlen($DEST_DATE)>0) $PROP[$DEST_DATEPropID]=$DEST_DATE; $arPDFs = Array(); for($i=0; $i<count($arPDFSuff); $i++) { $filename = "D:\\Projects\\!_Docs\\WAV.RU\\catalog\\pdf\\".$XML_ID.$arPDFSuff[$i].".pdf"; if(file_exists($filename)) $arPDFs[] = $XML_ID.$arPDFSuff[$i].".pdf"; } $PROP[$PDFPropID] = $arPDFs; $el = new CIBlockElement; $arFields = Array( "ACTIVE" => "Y", "MODIFIED_BY" => $USER->GetID(), "IBLOCK_SECTION" => Array($GROUP_ID), "IBLOCK_ID" => $IBLOCK_ID, "NAME" => $NAME, "DETAIL_TEXT" => $DETAIL_TEXT, "DETAIL_TEXT_TYPE" => "html", "XML_ID" => $XML_ID, "PROPERTY_VALUES" => $PROP ); //print_r($arFields); $ID = $el->Add($arFields); if($ID<=0) $strWarning .= $el->LAST_ERROR."<br>"; else { $WEIGHT = DoubleVal(str_replace(",", ".", $res[10])); CCatalogProduct::Add(Array("ID"=>$ID, "WEIGHT"=>$WEIGHT)); $ROZN_PRICE = DoubleVal(str_replace(",", ".", $res[7])); if($ROZN_PRICE>0) { $arFields = Array( "PRODUCT_ID"=>$ID, "CATALOG_GROUP_ID"=>$ROZN_ID, "PRICE"=>$ROZN_PRICE, "CURRENCY"=>"USD" ); CPrice::Add($arFields); } $DEALER_PRICE = DoubleVal(str_replace(",", ".", $res[8])); if($DEALER_PRICE>0) { $arFields = Array( "PRODUCT_ID"=>$ID, "CATALOG_GROUP_ID"=>$DEALER_ID, "PRICE"=>$DEALER_PRICE, "CURRENCY"=>"USD" ); CPrice::Add($arFields); } } //if($cnt>50) break; } } } CIBlockSection::ReSort($IBLOCK_ID); echo $strWarning; ShowError($strWarning); //////////////////////////////////// $TOTAL_TIME = $TOTAL_TIME + (getmicrotime() - START_EXEC_TIME); if($bBreak): ?> <head> <meta http-equiv="REFRESH" content="0;URL=<?echo $APPLICATION->GetCurPage()?>?NEXT_TIME=<?echo $NEXT_TIME?>&TOTAL_TIME=<?echo $TOTAL_TIME?>"> </head> <?else:?> OK - <?echo $TOTAL_TIME?>sec. <?endif;?>