Your IP : 172.28.240.42


Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/admin/
Upload File :
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;?>