| Current Path : /var/www/homesaver/www/bitrix/modules/webdebug.excel/admin/ |
| Current File : /var/www/homesaver/www/bitrix/modules/webdebug.excel/admin/_wd_excel2_do.php.back |
<?
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("PUBLIC_AJAX_MODE", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
CModule::IncludeModule('webdebug.excel');
IncludeModuleLangFile(__FILE__);
ignore_user_abort(false);
if (COption::GetOptionString('webdebug.excel','use_version')==1) {
CWebdebugExcel2::ShowError(GetMessage('WEBDEBUG_EXCEL_ERROR_VERSION'));
die();
}
define('WD_EXCEL2_NEXT', '<input type="hidden" name="wd_excel2_next" />');
$IsFirstStep = false;
if ($_POST['begin']=='Y') {
$IsFirstStep = true;
}
// Check fields valid (and save data to session) on FIRST step
if ($IsFirstStep) {
$IsProfileValid = false;
$IsFileValid = false;
$IsFileSiteValid = false;
$IsFileCompValid = false;
$ProfileID = false;
$LoadType = false;
// Check profile
if (is_numeric($_POST['profile']) && $_POST['profile']>0) {
$IsProfileValid = true;
$ProfileID = $_POST['profile'];
}
$FileName = false;
$LocalFileName = false;
// Check file from site
if ($_POST['wd_excel2_file_site']!='' && is_file($_SERVER['DOCUMENT_ROOT'].$_POST['wd_excel2_file_site']) && filesize($_SERVER['DOCUMENT_ROOT'].$_POST['wd_excel2_file_site'])>0) {
$FileName = ToLower($_POST['wd_excel2_file_site']);
// ToDo: CWebdebugExcel2::IsFileValid($FileName);
if (substr($FileName,-4)=='.xls' || substr($FileName,-5)=='.xlsx' || substr($FileName,-7)=='.tar.gz') {
$IsFileSiteValid = true;
}
}
// Check file from computer
if (is_array($_FILES['wd_excel2_file_comp']) && $_FILES['wd_excel2_file_comp']['error']==0 && $_FILES['wd_excel2_file_comp']['size']>0 && is_file($_FILES['wd_excel2_file_comp']['tmp_name'])) {
$FileName = ToLower($_FILES['wd_excel2_file_comp']['name']);
// ToDo: CWebdebugExcel2::IsFileValid($FileName);
if (substr($FileName,-4)=='.xls' || substr($FileName,-5)=='.xlsx' || substr($FileName,-7)=='.tar.gz') {
$IsFileCompValid = true;
}
}
// General params
$UploadDir = COption::GetOptionString('main','upload_dir','/upload/');
$DataFileExt = COption::GetOptionString('webdebug.excel','data_file_ext');
$Date = date('Y-m-d');
$Uniq = ToLower(RandString(32));
$FilePath = '/'.$UploadDir.'/webdebug.excel/'.$Date.'/';
if (!is_dir($_SERVER['DOCUMENT_ROOT'].$FilePath)) {
mkdir($_SERVER['DOCUMENT_ROOT'].$FilePath, BX_DIR_PERMISSIONS, true);
}
// Check which file will be used
if ($IsFileCompValid) {
$UploadedFileName = ToLower($_FILES['wd_excel2_file_comp']['name']);
if (substr($UploadedFileName,-7)=='.tar.gz') {
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/tar_gz.php');
$Archiver = new CArchiver($_FILES['wd_excel2_file_comp']['tmp_name']);
$Archiver->extractFiles($_SERVER['DOCUMENT_ROOT'].$FilePath);
$FileName = $FilePath.substr($UploadedFileName,0,-7).'.'.$DataFileExt;
#die($FileName);
$LoadType = 'EXCEL';
} else {
$FileExt = '';
if (substr($UploadedFileName,-4)=='.xls') {
$FileExt = '.xls';
} elseif (substr($UploadedFileName,-5)=='.xlsx') {
$FileExt = '.xlsx';
}
$FileName = $FilePath.$Uniq.$FileExt;
if (!move_uploaded_file($_FILES['wd_excel2_file_comp']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].$FileName)) {
die('Error');
}
$LoadType = 'EXCEL';
}
$IsFileValid = true;
} elseif ($IsFileSiteValid) {
$FileName = $_POST['wd_excel2_file_site'];
$IsFileValid = true;
$LoadType = 'EXCEL';
}
/*
elseif (CWebdebugExcel2::IsFileValid($_POST['wd_excel2_file_site'],$LocalFileName,false)) {
$FileName = $LocalFileName;
$IsFileValid = true;
$LoadType = 'EXCEL';
}
*/
if ($FileName==false && !is_file($_SERVER['DOCUMENT_ROOT'].$FileName) || filesize($_SERVER['DOCUMENT_ROOT'].$FileName)==0) {
print sprintf(GetMessage('WEBDEBUG_EXCEL_OPEN_FILE_ERROR'),$FileName);
die();
}
$arFile = CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'].$FileName);
$_SESSION['WEBDEBUG_EXCEL']['STATUS'][$ProfileID] = array(
'ID' => ToUpper($Uniq),
'LOAD_TYPE' => $LoadType,
'FILE_NAME' => $FileName,
'FILE_SIZE' => CFile::FormatSize($arFile['size']),
'FILE_PATH' => $FilePath,
'FILE_EXT' => $DataFileExt,
'TIME_START' => CWebdebugExcel2::GetMicroTime(),
'DATE' => $Date,
'STEP' => $LoadType=='EXCEL' ? 'EXCEL' : 'ARRAY',
'EXPORT' => $_POST['export']=='Y' ? true : false,
'ERRORS_COUNT' => '0',
'COUNT' => false,
);
print GetMessage('WEBDEBUG_EXCEL_FILE_LOADED').'<br/><br/>';
print GetMessage('WEBDEBUG_EXCEL_FILE_SIZE').' <b>'.$_SESSION['WEBDEBUG_EXCEL']['STATUS'][$ProfileID]['FILE_SIZE'].'</b><br/>';
print WD_EXCEL2_NEXT;
die();
} else {
CWebdebugExcel2::StartTimeCounter();
$ProfileID = $_POST['profile'];
if (is_numeric($ProfileID) && $ProfileID>0) {
$resProfile = CWebdebugExcel2Profile::GetByID($ProfileID);
if ($arFields = $resProfile->GetNext()) {
$arFields['PARAMS'] = trim($arFields['~PARAMS'])!='' ? unserialize($arFields['~PARAMS']) : array();
$arFields['MATCHES'] = trim($arFields['~MATCHES'])!='' ? unserialize($arFields['~MATCHES']) : array();
}
$arStatus = &$_SESSION['WEBDEBUG_EXCEL']['STATUS'][$ProfileID];
$bJustArray = ToLower(CWebdebugExcel2::substr($arStatus['FILE_NAME'],-7))=='.tar.gz' && $arStatus['STEP']=='EXCEL';
$bJustData = ToLower(CWebdebugExcel2::substr($arStatus['FILE_NAME'],-4))=='.dat' && $arStatus['STEP']=='EXCEL';
switch($arStatus['STEP']) {
// Step of transform Excel -> tar.gz
case 'EXCEL':
if ($bJustArray) {
$arStepResult['FILE'] = CWebdebugExcel2::ExtractTagGz($arStatus['FILE_NAME']);
$arStepResult['STATUS'] = 'DONE';
} elseif ($bJustData) {
$arStepResult['FILE'] = $arStatus['FILE_NAME'];
$arStepResult['STATUS'] = 'DONE';
} else {
$arStepResult = CWebdebugExcel2::NextStep_Excel($arStatus, $arFields['STEPTIME']);
}
if ($arStepResult['STATUS']=='DONE') {
$arStatus['STEP'] = 'ARRAY';
$arStatus['ARRAY_FILE'] = $arStepResult['FILE'];
if ($_POST['export']=='Y') {
// exporting:
$RelPath = CWebdebugExcel2::LoadingFilesRelPath($arStatus['DATE']);
$ArcFileName = $RelPath.$arStatus['ID'].'.tar';
$UseCompression = true;
if(!extension_loaded('zlib') || !function_exists('gzcompress')) $UseCompression = false;
if ($UseCompression) $ArcFileName .= '.gz';
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/tar_gz.php');
$Archiver = new CArchiver($_SERVER['DOCUMENT_ROOT'].$ArcFileName, $UseCompression);
$Archiver->Add('"'.$_SERVER['DOCUMENT_ROOT'].$arStepResult['FILE'].'"', false, $_SERVER['DOCUMENT_ROOT'].$RelPath);
$arStatus['DOWNLOAD_ARC_FILE'] = $ArcFileName;
$arStatus['CURR_SHEET'] = false;
$arStatus['LAST_ROW'] = false;
print GetMessage('WEBDEBUG_EXCEL_TRANSFORM_COMPLETE');
print '<div class="download_excel_to_tar_gz"><a href="'.$ArcFileName.'" target="_blank">'.GetMessage('WEBDEBUG_EXCEL_DOWNLOAD_TAR_GZ').' ('.CFile::FormatSize(filesize($_SERVER['DOCUMENT_ROOT'].$ArcFileName)).')</a></div>';
if ($_POST['colors']=='Y') {
$arFileData = unserialize(file_get_contents($_SERVER['DOCUMENT_ROOT'].$arStepResult['FILE']));
if (is_array($arFileData) && is_array($arFileData['SHEETS'])) {
foreach($arFileData['SHEETS'] as $SheetIndex => $arSheet) {
if (is_array($arSheet['COLORS'])) {
if (count($arSheet['COLORS'])==1 && $arSheet['COLORS']['000000']==='000000') unset($arSheet['COLORS']['000000']);
if (!empty($arSheet['COLORS'])) {
print('<div class="sheet_colors_title">'.GetMessage('WEBDEBUG_EXCEL_SHEET_COLORS_TITLE').' #'.$SheetIndex.' ('.$arSheet['NAME'].'):</div>');
foreach($arSheet['COLORS'] as $ColorKey => $strColor) {
if (in_array($strColor,array('FFFFFF','000000'))) {
unset($arSheet['COLORS'][$ColorKey]);
}
}
if (!empty($arSheet['COLORS'])) {
print '<ul class="sheet_colors">';
foreach($arSheet['COLORS'] as $strColor) {
print '<li>#<code>'.$strColor.'</code><span style="background:#'.$strColor.'; font-size:0; line-height:18px; vertical-align:middle;"> </span></li>';
}
print '</ul> <br/>';
}
}
}
}
}
}
@unlink($_SERVER['DOCUMENT_ROOT'].$arStepResult['FILE']);
unset($arStepResult['FILE']);
} else {
print GetMessage('WEBDEBUG_EXCEL_FILE_TRANSFORMED');
CWebdebugExcel2::ShowProgress($arStatus['COUNT']);
$arStatus['COUNT'] = false;
print WD_EXCEL2_NEXT;
}
foreach(GetModuleEvents("webdebug.excel", "OnEndFileTransformationStep", true) as $arEvent) {
if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$arStatus))===false) $Cancel = true;
}
} else {
print GetMessage('WEBDEBUG_EXCEL_STEP1_CONTINUE');
CWebdebugExcel2::ShowProgress($arStatus['COUNT']);
print WD_EXCEL2_NEXT;
}
die();
break;
// Step of load items from transformed files
case 'ARRAY':
$arModesList = CWebdebugExcel2::GetModesList();
if (is_array($arModesList[$arFields['MODE']]) && trim($arModesList[$arFields['MODE']]['PATH'])!='' && is_file($_SERVER['DOCUMENT_ROOT'].$arModesList[$arFields['MODE']]['PATH'])) {
$Action = 'next_step';
$Next = false;
$File = $arStatus['ARRAY_FILE'];
$File = file_get_contents($_SERVER['DOCUMENT_ROOT'].$File);
$File = unserialize($File);
// Подсчет кол-ва
if (!is_array($arStatus['COUNT']) || empty($arStatus['COUNT'])) {
foreach($File['SHEETS'] as $SheetIndex => $arSheet) {
$arStatus['COUNT'][$SheetIndex] = array(
'NAME' => $arSheet['NAME'],
'ROWS' => count($arSheet['ITEMS']),
'CURR' => 0,
'DONE' => false,
);
}
}
// Create IBlock session property
$SheetIndex = 0;
while (isset($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE'])) {
if ($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE']=='Y') {
$IBlockID = IntVal($arFields['MATCHES']['IBLOCK_ID_FOR_SHEET_'.$SheetIndex]);
if ($IBlockID>0) {
CWebdebugExcel2::CreateImportIdProperty($IBlockID);
}
}
$SheetIndex++;
}
//
$ShowPropertyType = COption::GetOptionString('webdebug.excel','show_property_type')=='Y';
// Connect mode handler
require_once($_SERVER['DOCUMENT_ROOT'].$arModesList[$arFields['MODE']]['PATH']);
if ($Next) {
print GetMessage('WEBDEBUG_EXCEL_STEP2_CONTINUE');
CWebdebugExcel2::ShowProgress($arStatus['COUNT']);
} else {
print GetMessage('WEBDEBUG_EXCEL_ACTIVATING');
$arStatus['STEP'] = 'ACTIVATE';
foreach(GetModuleEvents("webdebug.excel", "OnEndFileLoadingStep", true) as $arEvent) {
if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$arStatus))===false) $Cancel = true;
}
}
print WD_EXCEL2_NEXT;
} else {
print GetMessage('WEBDEBUG_EXCEL_ERROR_MODE_FILE_NOT_FOUND');
}
die();
break;
// Step of activate products
case 'ACTIVATE':
CWebdebugExcel2::StartTimeCounter();
if (CModule::IncludeModule('iblock')) {
// Определяем соответствие инфоблоков и разделов листам в Excel
$SheetIndex = 0;
while (isset($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE'])) {
if ($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE']=='Y') {
$intIBlockID = IntVal($arFields['MATCHES']['IBLOCK_ID_FOR_SHEET_'.$SheetIndex]);
if ($intIBlockID>0) {
$intSectionID = IntVal($arFields['MATCHES']['SECTION_ID_FOR_SHEET_'.$SheetIndex]);
// Устанавливаем флаг активности товаров
if ($arFields['PARAMS']['ACTIVATE_LOADED_ELEMENTS']=='Y') {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intIBlockID,
'PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
'ACTIVE' => 'N',
);
if ($intSectionID>0) {
$arFilter['SECTION_ID'] = $intSectionID;
$arFilter['INCLUDE_SUBSECTIONS'] = 'Y';
}
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
$IBlockElement = new CIBlockElement;
while ($arItem = $resItems->GetNext(false,false)) {
$IBlockElement->Update($arItem['ID'], array('ACTIVE'=>'Y'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_ACTIVATING');
print WD_EXCEL2_NEXT;
die();
}
}
}
// Устанавливаем флаг активности торговых предложений
if ($arFields['PARAMS']['ACTIVATE_LOADED_ELEMENTS']=='Y') {
$intOffersIBlockID = IntVal(CWebdebugExcel2::GetOffersIBlockID($intIBlockID));
if ($intOffersIBlockID>0) {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intOffersIBlockID,
'PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
'ACTIVE' => 'N',
);
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
while ($arItem = $resItems->GetNext(false,false)) {
$IBlockElement->Update($arItem['ID'], array('ACTIVE'=>'Y'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_ACTIVATING');
print WD_EXCEL2_NEXT;
die();
}
}
}
}
// Устанавливаем флаг активности разделов
if ($arFields['PARAMS']['ACTIVATE_LOADED_SECTIONS']=='Y') {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intIBlockID,
'UF_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
'ACTIVE' => 'N',
);
$resSections = CIBlockSection::GetList($arSort,$arFilter,false,array('ID'));
$IBlockSection = new CIBlockSection;
while ($arSection = $resSections->GetNext(false,false)) {
$IBlockSection->Update($arSection['ID'], array('ACTIVE'=>'Y'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_ACTIVATING');
print WD_EXCEL2_NEXT;
die();
}
}
}
}
}
$SheetIndex++;
}
}
print GetMessage('WEBDEBUG_EXCEL_DEACTIVATING');
$arStatus['STEP'] = 'DEACTIVATE';
print WD_EXCEL2_NEXT;
foreach(GetModuleEvents("webdebug.excel", "OnEndActivateStep", true) as $arEvent) {
if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$arStatus))===false) $Cancel = true;
}
die();
break;
// Step of deactivate products
case 'DEACTIVATE':
CWebdebugExcel2::StartTimeCounter();
if (CModule::IncludeModule('iblock')) {
// Определяем соответствие инфоблоков и разделов листам в Excel
$SheetIndex = 0;
while (isset($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE'])) {
if ($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE']=='Y') {
$intIBlockID = IntVal($arFields['MATCHES']['IBLOCK_ID_FOR_SHEET_'.$SheetIndex]);
if ($intIBlockID>0) {
$intSectionID = IntVal($arFields['MATCHES']['SECTION_ID_FOR_SHEET_'.$SheetIndex]);
// Снимаем флаг активности товаров
if ($arFields['PARAMS']['DEACTIVATE_MISSING_ELEMENTS']=='Y') {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intIBlockID,
'!PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
'ACTIVE' => 'Y',
);
if ($intSectionID>0) {
$arFilter['SECTION_ID'] = $intSectionID;
$arFilter['INCLUDE_SUBSECTIONS'] = 'Y';
}
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
$IBlockElement = new CIBlockElement;
while ($arItem = $resItems->GetNext(false,false)) {
$IBlockElement->Update($arItem['ID'], array('ACTIVE'=>'N'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_DEACTIVATING');
print WD_EXCEL2_NEXT;
die();
}
}
}
// Снимаем флаг активности торговых предложений
if ($arFields['PARAMS']['DEACTIVATE_MISSING_ELEMENTS']=='Y') {
$intOffersIBlockID = IntVal(CWebdebugExcel2::GetOffersIBlockID($intIBlockID));
if ($intOffersIBlockID>0) {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intOffersIBlockID,
'!PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
'ACTIVE' => 'Y',
);
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
while ($arItem = $resItems->GetNext(false,false)) {
$IBlockElement->Update($arItem['ID'], array('ACTIVE'=>'N'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_DEACTIVATING');
print WD_EXCEL2_NEXT;
die();
}
}
}
}
// Снимаем флаг активности разделов
if ($arFields['PARAMS']['DEACTIVATE_MISSING_SECTIONS']=='Y') {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID'=>$intIBlockID,
'ACTIVE'=>'Y',
array( // Bitrix bug
'LOGIC' => 'OR',
array('!UF_'.CWebdebugExcel2::ImportIDPropCode=>$arStatus['ID']),
array('UF_'.CWebdebugExcel2::ImportIDPropCode=>false),
)
);
$resSections = CIBlockSection::GetList($arSort,$arFilter,false,array('ID','NAME','UF_'.CWebdebugExcel2::ImportIDPropCode));
$IBlockSection = new CIBlockSection;
while ($arSection = $resSections->GetNext(false,false)) {
$IBlockSection->Update($arSection['ID'], array('ACTIVE'=>'N'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_DEACTIVATING');
print WD_EXCEL2_NEXT;
die();
}
}
}
}
}
$SheetIndex++;
}
}
$arStatus['STEP'] = 'STORES';
print GetMessage('WEBDEBUG_EXCEL_STORESPROCESS');
print WD_EXCEL2_NEXT;
foreach(GetModuleEvents("webdebug.excel", "OnEndDeactivateStep", true) as $arEvent) {
if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$arStatus))===false) $Cancel = true;
}
die();
break;
// Step of process stores settings
case 'STORES':
CWebdebugExcel2::StartTimeCounter();
if ($arFields['PARAMS']['LINK_TO_STORE']=='Y' && $arFields['PARAMS']['CATALOG_STORE']>0) {
if (CModule::IncludeModule('iblock')) {
// Определяем соответствие инфоблоков и разделов листам в Excel
$SheetIndex = 0;
while (isset($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE'])) {
if ($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE']=='Y') {
$intIBlockID = IntVal($arFields['MATCHES']['IBLOCK_ID_FOR_SHEET_'.$SheetIndex]);
if ($intIBlockID>0) {
// Создаем служебное свойство
$resEnum = CIBlockPropertyEnum::GetList(array(),array('IBLOCK_ID'=>$intIBlockID,'PROPERTY_ID'=>$arProp['ID'],'XML_ID'=>'Y'));
if ($arEnum = $resEnum->GetNext(false,false)) {
$PropEnumID = $arEnum['ID'];
}
if ($PropEnumID>0) {
$PropCode = CWebdebugExcel2::StoresProcessedPropCode;
// Выбираем нужный раздел
$intSectionID = IntVal($arFields['MATCHES']['SECTION_ID_FOR_SHEET_'.$SheetIndex]);
// Обработка складов для товаров
$arSort = array('ID'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intIBlockID,
'!PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
'PROPERTY_'.$PropCode => false,
'>ID' => IntVal($arStatus['STORES_LAST_ID']),
);
if ($intSectionID>0) {
$arFilter['SECTION_ID'] = $intSectionID;
$arFilter['INCLUDE_SUBSECTIONS'] = 'Y';
}
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
$IBlockElement = new CIBlockElement;
while ($arItem = $resItems->GetNext(false,false)) {
CWebdebugExcel2::Log('Item: '.$arItem['ID'].' - '.$arItem['IBLOCK_ID']);
if (CWebdebugExcel2::SetProductStoreQuantity($arItem['ID'],$arFields['PARAMS']['CATALOG_STORE'],0)) {
CIBlockElement::SetPropertyValuesEx($arItem['ID'], $intIBlockID, array($PropCode=>$PropEnumID));
// Calculate whole qunatity
if ($arFields['PARAMS']['CALCULATE_QUANTITY']=='Y') {
CWebdebugExcel2::ProductRecalculateQuantity($arItem['ID']);
}
}
$arStatus['STORES_LAST_ID'] = $arItem['ID'];
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_STORESPROCESS');
print WD_EXCEL2_NEXT;
die();
}
}
// Обработка складов для торговых предложений
$intOffersIBlockID = IntVal(CWebdebugExcel2::GetOffersIBlockID($intIBlockID));
if ($intOffersIBlockID>0) {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intOffersIBlockID,
'!PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
'PROPERTY_'.$PropCode => false,
'>ID' => IntVal($arStatus['STORES_OFFERS_LAST_ID']),
);
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
while ($arItem = $resItems->GetNext(false,false)) {
if (CWebdebugExcel2::SetProductStoreQuantity($arItem['ID'],$arFields['PARAMS']['CATALOG_STORE'],0)) {
CIBlockElement::SetPropertyValuesEx($arItem['ID'], $intOffersIBlockID, array($PropCode=>$PropEnumID));
// Calculate whole qunatity
if ($arFields['PARAMS']['CALCULATE_QUANTITY']=='Y') {
CWebdebugExcel2::ProductRecalculateQuantity($arItem['ID']);
}
}
$arStatus['STORES_OFFERS_LAST_ID'] = $arItem['ID'];
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_STORESPROCESS');
print WD_EXCEL2_NEXT;
die();
}
}
}
}
}
}
$SheetIndex++;
}
foreach(GetModuleEvents("webdebug.excel", "OnEndStoresStep", true) as $arEvent) {
if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$arStatus))===false) $Cancel = true;
}
}
}
print GetMessage('WEBDEBUG_EXCEL_CLEARQUANTITY');
$arStatus['STEP'] = 'CLEARQUANTITY';
print WD_EXCEL2_NEXT;
die();
break;
// Step of clear quantity
case 'CLEARQUANTITY':
CWebdebugExcel2::StartTimeCounter();
if ($arFields['PARAMS']['CLEAR_QUANTITY_MISSING']=='Y' && CModule::IncludeModule('iblock') && CModule::IncludeModule('catalog')) {
// Определяем соответствие инфоблоков и разделов листам в Excel
$SheetIndex = 0;
while (isset($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE'])) {
if ($arFields['MATCHES']['SHEET_'.$SheetIndex.'_ACTIVE']=='Y') {
$intIBlockID = IntVal($arFields['MATCHES']['IBLOCK_ID_FOR_SHEET_'.$SheetIndex]);
if ($intIBlockID>0) {
$intSectionID = IntVal($arFields['MATCHES']['SECTION_ID_FOR_SHEET_'.$SheetIndex]);
// Обнуляем остаток для товаров
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intIBlockID,
'!PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
);
if ($intSectionID>0) {
$arFilter['SECTION_ID'] = $intSectionID;
$arFilter['INCLUDE_SUBSECTIONS'] = 'Y';
}
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
while ($arItem = $resItems->GetNext(false,false)) {
CCatalogProduct::Update($arItem['ID'],array('QUANTITY'=>'0'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_CLEARQUANTITY');
print WD_EXCEL2_NEXT;
die();
}
}
// Обнуляем остаток для торговых предложений
$intOffersIBlockID = IntVal(CWebdebugExcel2::GetOffersIBlockID($intIBlockID));
if ($intOffersIBlockID>0) {
$arSort = array('TIMESTAMP_X'=>'ASC');
$arFilter = array(
'IBLOCK_ID' => $intOffersIBlockID,
'!PROPERTY_'.CWebdebugExcel2::ImportIDPropCode => $arStatus['ID'],
);
$resItems = CIBlockElement::GetList($arSort,$arFilter,false,false,array('ID'));
while ($arItem = $resItems->GetNext(false,false)) {
CCatalogProduct::Update($arItem['ID'],array('QUANTITY'=>'0'));
if (CWebdebugExcel2::CheckTimeIsOver($arFields['STEPTIME'])) {
print GetMessage('WEBDEBUG_EXCEL_CLEARQUANTITY');
print WD_EXCEL2_NEXT;
die();
}
}
}
}
}
$SheetIndex++;
}
}
print GetMessage('WEBDEBUG_EXCEL_COMPLETING');
$arStatus['STEP'] = 'DONE';
print WD_EXCEL2_NEXT;
die();
break;
case 'DONE':
unset($_SESSION['WEBDEBUG_EXCEL']['STATUS'][$ProfileID]); // ???
print GetMessage('WEBDEBUG_EXCEL_COMPLETE');
print sprintf(GetMessage('WEBDEBUG_EXCEL_ERRORS_COUNT'),IntVal($arStatus['ERRORS_COUNT']));
$WebdebugExcel2Profile = new CWebdebugExcel2Profile;
$WebdebugExcel2Profile->Update($ProfileID, array('DATE_SUCCESS'=>date(CDatabase::DateFormatToPHP(FORMAT_DATETIME))));
foreach(GetModuleEvents('webdebug.excel', 'OnImportDone', true) as $arEvent) {
ExecuteModuleEventEx($arEvent, array($arFields));
}
die();
break;
}
}
}
?>