Your IP : 172.71.120.3


Current Path : /var/www/element/data/www/greenpr.ru/bitrix/modules/iblock/admin/
Upload File :
Current File : /var/www/element/data/www/greenpr.ru/bitrix/modules/iblock/admin/iblock_xml_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/iblock/prolog.php");
IncludeModuleLangFile(__FILE__);

$rsIBlocks = CIBlock::GetList(array("IBLOCK_TYPE" => "ASC", "NAME" => "ASC"), array("MIN_PERMISSION" => "W"));
if(!$rsIBlocks->Fetch())
	$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));

if(!isset($INTERVAL))
	$INTERVAL = 30;
else
	$INTERVAL = intval($INTERVAL);
if($INTERVAL <= 0)
	@set_time_limit(0);

$start_time = time();

$arErrors = array();
$arMessages = array();

if($_REQUEST["Export"]=="Y" && (array_key_exists("NS", $_REQUEST) || array_key_exists("INTERVAL", $_REQUEST)))
{
	require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
	if(array_key_exists("NS", $_REQUEST))
		$NS = unserialize($_REQUEST["NS"]);
	else
		$NS = array(
			"STEP" => 0,
			"IBLOCK_ID" => $_REQUEST["IBLOCK_ID"],
			"URL_DATA_FILE" => $_REQUEST["URL_DATA_FILE"],
			"next_step" => array(),
		);

	$NS["catalog"] = CModule::IncludeModule('catalog');

	//We have to strongly check all about file names at server side
	$ABS_FILE_NAME = false;
	$WORK_DIR_NAME = false;
	if(isset($NS["URL_DATA_FILE"]) && (strlen($NS["URL_DATA_FILE"])>0))
	{
		$filename = trim(str_replace("\\", "/", trim($NS["URL_DATA_FILE"])), "/");
		if (preg_match('/[^a-zA-Z0-9\s!#\$%&\(\)\[\]\{\}+\.;=@\^_\~\/\\\\\-]/i', $filename))
		{
			$arErrors[] = GetMessage("IBLOCK_CML2_FILE_NAME_ERROR");
		}
		else
		{
			$FILE_NAME = rel2abs($_SERVER["DOCUMENT_ROOT"], "/".$filename);
			if((strlen($FILE_NAME) > 1) && ($FILE_NAME === "/".$filename))
			{
				$ABS_FILE_NAME = $_SERVER["DOCUMENT_ROOT"].$FILE_NAME;
				if (strtolower(substr($ABS_FILE_NAME, -4)) != ".xml")
					$ABS_FILE_NAME .= ".xml";
				$WORK_DIR_NAME = substr($ABS_FILE_NAME, 0, strrpos($ABS_FILE_NAME, "/")+1);
			}
		}
	}

	$fp = false;
	if(!check_bitrix_sessid())
	{
		$arErrors[] = GetMessage("IBLOCK_CML2_ACCESS_DENIED");
	}
	elseif($ABS_FILE_NAME && (count($arErrors) == 0))
	{
		if($NS["STEP"] < 1)
		{
			$_SESSION["BX_CML2_EXPORT"] = array(
				"PROPERTY_MAP" => false,
				"SECTION_MAP" => false,
				"PRICES_MAP" => false,
				"work_dir" => false,
				"file_dir" => false,
			);
			if($fp = fopen($ABS_FILE_NAME, "wb"))
			{
				if(strtolower(substr($ABS_FILE_NAME, -4)) == ".xml")
				{
					if(@mkdir($DIR_NAME = substr($ABS_FILE_NAME, 0, -4)."_files", BX_DIR_PERMISSIONS));
					{
						$_SESSION["BX_CML2_EXPORT"]["work_dir"] = $WORK_DIR_NAME;
						$_SESSION["BX_CML2_EXPORT"]["file_dir"] = substr($DIR_NAME."/", strlen($WORK_DIR_NAME));
					}
				}
			}
			else
			{
				$arErrors[] = GetMessage("IBLOCK_CML2_FILE_ERROR");
			}
			$NS["STEP"]++;
		}
		elseif($NS["STEP"] < 4)
		{
			if($fp = fopen($ABS_FILE_NAME, "ab"))
			{
				$obExport = new CIBlockCMLExport;
				if($obExport->Init($fp, $NS["IBLOCK_ID"], $NS["next_step"], true, $_SESSION["BX_CML2_EXPORT"]["work_dir"], $_SESSION["BX_CML2_EXPORT"]["file_dir"]))
				{
					if($NS["STEP"]==1)
					{
						$obExport->StartExport();
						$obExport->StartExportMetadata();
						$obExport->ExportProperties($_SESSION["BX_CML2_EXPORT"]["PROPERTY_MAP"]);
						$NS["STEP"]++;
					}
					elseif($NS["STEP"]==2)
					{
						$result = $obExport->ExportSections($_SESSION["BX_CML2_EXPORT"]["SECTION_MAP"], $start_time, $INTERVAL);
						if($result)
						{
							$NS["SECTIONS"] += $result;
						}
						else
						{
							$obExport->EndExportMetadata();
							$obExport->StartExportCatalog();
							$NS["STEP"]++;
						}
					}
					elseif($NS["STEP"]==3)
					{
						$result = $obExport->ExportElements($_SESSION["BX_CML2_EXPORT"]["PROPERTY_MAP"], $_SESSION["BX_CML2_EXPORT"]["SECTION_MAP"], $start_time, $INTERVAL);
						if($result)
						{
							$NS["ELEMENTS"] += $result;
						}
						else
						{
							$obExport->EndExportCatalog();
							$obExport->EndExport();
							$NS["STEP"]++;
						}
					}
					else
						$NS["STEP"]++;
					$NS["next_step"] = $obExport->next_step;
				}
				else
				{
					$arErrors[] = GetMessage("IBLOCK_CML2_IBLOCK_ERROR");
				}
			}
			else
			{
				$arErrors[] = GetMessage("IBLOCK_CML2_FILE_ERROR")."(1)";
			}
		}
	}
	else
	{
		$arErrors[] = GetMessage("IBLOCK_CML2_FILE_ERROR")."(2)";
	}

	if($fp)
		fclose($fp);

	foreach($arErrors as $strError)
		CAdminMessage::ShowMessage($strError);
	foreach($arMessages as $strMessage)
		CAdminMessage::ShowMessage(array("MESSAGE"=>$strMessage,"TYPE"=>"OK"));

	if(count($arErrors)==0):?>
		<?if($NS["STEP"] < 4):?>
			<p><ul>
			<li><?
				echo GetMessage("IBLOCK_CML2_METADATA_DONE");
			?></li>
			<li><?
				if($NS["STEP"] < 2)
					echo GetMessage("IBLOCK_CML2_SECTIONS");
				elseif($NS["STEP"] < 3)
					echo "<b>".GetMessage("IBLOCK_CML2_SECTIONS_PROGRESS", array("#COUNT#"=>intval($NS["SECTIONS"])))."</b>";
				else
					echo GetMessage("IBLOCK_CML2_SECTIONS_PROGRESS", array("#COUNT#"=>intval($NS["SECTIONS"])));
			?></li>
			<li><?
				if($NS["STEP"] < 3)
					echo GetMessage("IBLOCK_CML2_ELEMENTS");
				elseif($NS["STEP"] < 4)
					echo "<b>".GetMessage("IBLOCK_CML2_ELEMENTS_PROGRESS", array("#COUNT#"=>intval($NS["ELEMENTS"])))."</b>";
				else
					echo GetMessage("IBLOCK_CML2_ELEMENTS_PROGRESS", array("#COUNT#"=>intval($NS["ELEMENTS"])));
			?></li>
			</ul></p>
			<?if($NS["STEP"]>0):?>
				<input type="hidden" id="NS" name="NS" value="<?=htmlspecialchars(serialize($NS))?>">
			<?endif?>
		<?else:?>
			<p><b><?echo GetMessage("IBLOCK_CML2_DONE")?></b><br>
			<?echo GetMessage("IBLOCK_CML2_DONE_SECTIONS", array("#COUNT#"=>intval($NS["SECTIONS"])))?><br>
			<?echo GetMessage("IBLOCK_CML2_DONE_ELEMENTS", array("#COUNT#"=>intval($NS["ELEMENTS"])))?><br>
		<?endif;?>
	<?endif;
	require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin_js.php");
}

$APPLICATION->SetTitle(GetMessage("IBLOCK_CML2_TITLE"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
?>
<div id="tbl_iblock_export_result_div"></div>
<?
$aTabs = array(
	array(
		"DIV" => "edit1",
		"TAB" => GetMessage("IBLOCK_CML2_TAB"),
		"ICON" => "main_user_edit",
		"TITLE" => GetMessage("IBLOCK_CML2_TAB_TITLE"),
	),
);
$tabControl = new CAdminTabControl("tabControl", $aTabs);
?>
<script language="JavaScript" type="text/javascript">
<!--
var running = false;
function DoNext(bFirst)
{
	var queryString='Export=Y&lang=<?=LANG?>&<?echo bitrix_sessid_get()?>';
	if(bFirst)
	{
		queryString+='&URL_DATA_FILE='+jsUtils.urlencode(document.getElementById('URL_DATA_FILE').value);
		queryString+='&IBLOCK_ID='+jsUtils.urlencode(document.getElementById('IBLOCK_ID').value);
		queryString+='&INTERVAL='+jsUtils.urlencode(document.getElementById('INTERVAL').value);
	}
	else
	{
		queryString+='&INTERVAL='+jsUtils.urlencode(document.getElementById('INTERVAL').value);
		queryString+='&NS='+jsUtils.urlencode(document.getElementById('NS').value);
	}

	CHttpRequest.Action = function(result)
	{
		CloseWaitWindow();
		document.getElementById('tbl_iblock_export_result_div').innerHTML = result;
		//Check if stop button was pressed
		if(running)
		{
			//Check if next step is needed
			if(document.getElementById('NS'))
				DoNext(false);
			else
				EndExport();
		}
	}
	ShowWaitWindow();
	CHttpRequest.Send('iblock_xml_export.php?'+queryString);
}
function StartExport()
{
	running = true;
	document.getElementById('start_button').disabled=true;
	DoNext(true);
}
function EndExport()
{
	running = false;
	document.getElementById('start_button').disabled=false;
}
//-->
</script>
<form method="POST" action="<?echo $APPLICATION->GetCurPage()?>?lang=<?echo htmlspecialchars(LANG)?>" name="form1" id="form1">
<?
$tabControl->Begin();
$tabControl->BeginNextTab();
?>
	<tr valign="top">
		<td width="40%"><?echo GetMessage("IBLOCK_CML2_URL_DATA_FILE")?>:</td>
		<td width="60%">
			<input type="text" id="URL_DATA_FILE" name="URL_DATA_FILE" size="30" value="<?=htmlspecialchars($URL_DATA_FILE)?>">
			<input type="button" value="<?echo GetMessage("IBLOCK_CML2_OPEN")?>" OnClick="BtnClick()">
			<?
			CAdminFileDialog::ShowScript
			(
				Array(
					"event" => "BtnClick",
					"arResultDest" => array("FORM_NAME" => "form1", "FORM_ELEMENT_NAME" => "URL_DATA_FILE"),
					"arPath" => array("SITE" => SITE_ID, "PATH" =>"/upload"),
					"select" => 'F',// F - file only, D - folder only
					"operation" => 'S',// O - open, S - save
					"showUploadTab" => true,
					"showAddToMenuTab" => false,
					"fileFilter" => 'xml',
					"allowAllFiles" => true,
					"SaveConfig" => true,
				)
			);
			?>
		</td>
	</tr>
	<tr valign="top">
		<td><?echo GetMessage("IBLOCK_CML2_IBLOCK_ID")?>:</td>
		<td>
			<?echo GetIBlockDropDownList($IBLOCK_ID, 'IBLOCK_TYPE_ID', 'IBLOCK_ID');?>
		</td>
	</tr>
	<tr valign="top">
		<td><?echo GetMessage("IBLOCK_CML2_INTERVAL")?>:</td>
		<td>
			<input type="text" id="INTERVAL" name="INTERVAL" size="5" value="<?echo intval($INTERVAL)?>">
		</td>
	</tr>
<?$tabControl->Buttons();?>
	<input type="button" id="start_button" value="<?echo GetMessage("IBLOCK_CML2_START_EXPORT")?>" OnClick="StartExport();">
	<input type="button" id="stop_button" value="<?echo GetMessage("IBLOCK_CML2_STOP_EXPORT")?>" OnClick="EndExport();">
<?$tabControl->End();?>
</form>

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>