AuthForm(GetMessage("ACCESS_DENIED")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $APPLICATION->SetTitle(GetMessage('YANDEX_DETAIL_TITLE')); CModule::IncludeModule('catalog'); if (!AccessController::getCurrent()->check(ActionDictionary::ACTION_CATALOG_EXPORT_EDIT)) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(GetMessage('YANDEX_ERR_NO_ACCESS_EXPORT')); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } if ((!isset($_REQUEST['IBLOCK_ID'])) || ($_REQUEST['IBLOCK_ID'] == '')) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(GetMessage("YANDEX_ERR_NO_IBLOCK_CHOSEN")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $intIBlockID = $_REQUEST['IBLOCK_ID']; $intIBlockIDCheck = intval($intIBlockID); if ($intIBlockIDCheck.'|' != $intIBlockID.'|' || $intIBlockIDCheck <= 0) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(GetMessage("YANDEX_ERR_NO_IBLOCK_CHOSEN")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } else { $intIBlockID = $intIBlockIDCheck; unset($intIBlockIDCheck); } $strPerm = 'D'; $rsIBlocks = CIBlock::GetByID($intIBlockID); if (($arIBlock = $rsIBlocks->Fetch())) { $bBadBlock = !CIBlockRights::UserHasRightTo($intIBlockID, $intIBlockID, "iblock_admin_display"); if ($bBadBlock) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(GetMessage('YANDEX_ERR_NO_ACCESS_IBLOCK')); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } } else { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(str_replace('#ID#',$intIBlockID,GetMessage("YANDEX_ERR_NO_IBLOCK_FOUND_EXT"))); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $boolOffers = false; $arOffers = false; $arOfferIBlock = false; $intOfferIBlockID = 0; $arSelectOfferProps = array(); $arSelectedPropTypes = array( Iblock\PropertyTable::TYPE_STRING, Iblock\PropertyTable::TYPE_NUMBER, Iblock\PropertyTable::TYPE_LIST, Iblock\PropertyTable::TYPE_ELEMENT, Iblock\PropertyTable::TYPE_SECTION ); $arOffersSelectKeys = array( YANDEX_SKU_EXPORT_ALL, YANDEX_SKU_EXPORT_MIN_PRICE, YANDEX_SKU_EXPORT_PROP, ); $arOffers = CCatalogSKU::GetInfoByProductIBlock($intIBlockID); if (!empty($arOffers['IBLOCK_ID'])) { $intOfferIBlockID = $arOffers['IBLOCK_ID']; $strPerm = 'D'; $rsOfferIBlocks = CIBlock::GetByID($intOfferIBlockID); if ($arOfferIBlock = $rsOfferIBlocks->Fetch()) { $bBadBlock = !CIBlockRights::UserHasRightTo($intOfferIBlockID, $intOfferIBlockID, "iblock_admin_display"); if ($bBadBlock) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(GetMessage('YANDEX_ERR_NO_ACCESS_IBLOCK_SKU')); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } } else { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(str_replace('#ID#',$intIBlockID,GetMessage("YANDEX_ERR_NO_IBLOCK_SKU_FOUND"))); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } $boolOffers = true; } $arCondSelectProp = array( 'ZERO' => GetMessage('YANDEX_SKU_EXPORT_PROP_SELECT_ZERO'), 'NONZERO' => GetMessage('YANDEX_SKU_EXPORT_PROP_SELECT_NONZERO'), 'EQUAL' => GetMessage('YANDEX_SKU_EXPORT_PROP_SELECT_EQUAL'), 'NONEQUAL' => GetMessage('YANDEX_SKU_EXPORT_PROP_SELECT_NONEQUAL'), ); $arTypesConfig = array( 'none' => array( 'vendor', 'vendorCode', 'sales_notes', 'manufacturer_warranty', 'country_of_origin', //'adult' ), 'vendor.model' => array( 'typePrefix', 'vendor', 'vendorCode', 'model', 'sales_notes', 'manufacturer_warranty', 'country_of_origin', //'adult' ), 'book' => array( 'author', 'publisher', 'series', 'year', 'ISBN', 'volume', 'part', 'language', 'binding', 'page_extent', 'table_of_contents', 'sales_notes' ), 'audiobook' => array( 'author', 'publisher', 'series', 'year', 'ISBN', 'performed_by', 'performance_type', 'language', 'volume', 'part', 'format', 'storage', 'recording_length', 'table_of_contents' ), 'artist.title' => array( 'title', 'artist', 'director', 'starring', 'originalName', 'country', 'year', 'media', //'adult' ) // a bit later /* 'tour' => array( 'worldRegion', 'country', 'region', 'days', 'dataTour', 'hotel_stars', 'room', 'meal', 'included', 'transport', ), 'event-ticket' => array( 'place', 'hall', 'date', 'is_premiere', 'is_kids', ), */ ); $arTypesConfigKeys = array_keys($arTypesConfig); $vatRates = array( '-' => GetMessage('YANDEX_BASE_VAT_EMPTY'), '0%' => '0%', '10%' => '10%', '18%' => '18%' ); $defaultVatExport = array( 'ENABLE' => 'N', 'BASE_VAT' => '' ); $dbRes = CIBlockProperty::GetList( array('SORT' => 'ASC'), array('IBLOCK_ID' => $intIBlockID, 'ACTIVE' => 'Y') ); $arIBlock['PROPERTY'] = array(); $arIBlock['OFFERS_PROPERTY'] = array(); while ($arRes = $dbRes->Fetch()) { $arIBlock['PROPERTY'][$arRes['ID']] = $arRes; } if ($boolOffers) { $rsProps = CIBlockProperty::GetList(array('SORT' => 'ASC'),array('IBLOCK_ID' => $intOfferIBlockID,'ACTIVE' => 'Y')); while ($arProp = $rsProps->Fetch()) { if ($arOffers['SKU_PROPERTY_ID'] != $arProp['ID']) { if ($arProp['PROPERTY_TYPE'] == 'L') { $arProp['VALUES'] = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arProp['ID'],array('sort' => 'asc'),array('IBLOCK_ID' => $intOfferIBlockID)); while ($arPropEnum = $rsPropEnums->Fetch()) { $arProp['VALUES'][$arPropEnum['ID']] = $arPropEnum['VALUE']; } } $arIBlock['OFFERS_PROPERTY'][$arProp['ID']] = $arProp; if (in_array($arProp['PROPERTY_TYPE'],$arSelectedPropTypes)) $arSelectOfferProps[] = $arProp['ID']; } } } if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!empty($_REQUEST['save'])) { $arErrors = array(); $arCurrency = array('RUB' => array('rate' => 1)); if (is_array($_POST['CURRENCY']) && count($_POST['CURRENCY']) > 0) { $arCurrency = array(); foreach ($_POST['CURRENCY'] as $CURRENCY) { $arCurrency[$CURRENCY] = array( 'rate' => $_POST['CURRENCY_RATE'][$CURRENCY], 'plus' => $_POST['CURRENCY_PLUS'][$CURRENCY] ); } } $type = trim($_POST['type']); if ($type == '' || ($type != 'none' && !isset($arTypesConfig[$type]))) $type = 'none'; $addParams = array( 'PARAMS' => array(), ); if (isset($_POST['PARAMS_COUNT']) && intval($_POST['PARAMS_COUNT']) > 0) { $intCount = intval($_POST['PARAMS_COUNT']); if (isset($_POST['XML_DATA']['PARAMS']) && is_array($_POST['XML_DATA']['PARAMS'])) { $arTempo = $_POST['XML_DATA']['PARAMS']; for ($i = 0; $i < $intCount; $i++) { if (empty($arTempo['ID_'.$i])) continue; $value = $arTempo['ID_'.$i]; if (array_key_exists($value,$arIBlock['PROPERTY']) || array_key_exists($value,$arIBlock['OFFERS_PROPERTY'])) { $addParams['PARAMS'][] = $value; } } } } $arTypeParams = array(); if (isset($_POST['XML_DATA'][$type]) && is_array($_POST['XML_DATA'][$type])) { $arTypeParams = $_POST['XML_DATA'][$type]; foreach ($arTypeParams as $key => $value) { if (!in_array($key,$arTypesConfig[$type])) { unset($arTypeParams[$key]); } elseif (!array_key_exists($value,$arIBlock['PROPERTY']) && !array_key_exists($value,$arIBlock['OFFERS_PROPERTY'])) { $arTypeParams[$key] = ''; } } } $XML_DATA = array_merge($arTypeParams, $addParams); foreach ($XML_DATA as $key => $value) { if (!$value) unset($XML_DATA[$key]); } $commonFields = []; if (!empty($_POST['COMMON_FIELDS']) && is_array($_POST['COMMON_FIELDS'])) { foreach ($_POST['COMMON_FIELDS'] as $index => $value) { if (empty($value)) continue; $commonFields[$index] = $value; } unset($index, $value); } $arSKUExport = false; if ($boolOffers) { $arSKUExport = array( 'SKU_EXPORT_COND' => YANDEX_SKU_EXPORT_ALL, 'SKU_PROP_COND' => array( 'PROP_ID' => 0, 'COND' => '', 'VALUES' => array(), ), ); if (!empty($_POST['SKU_EXPORT_COND']) && in_array($_POST['SKU_EXPORT_COND'],$arOffersSelectKeys)) { $arSKUExport['SKU_EXPORT_COND'] = $_POST['SKU_EXPORT_COND']; } else { $arErrors[] = GetMessage('YANDEX_SKU_EXPORT_ERR_CONDITION_ABSENT'); } if (YANDEX_SKU_EXPORT_PROP == $arSKUExport['SKU_EXPORT_COND']) { $boolCheck = true; $intPropID = 0; $strPropCond = ''; $arPropValues = array(); if (empty($_POST['SKU_PROP_COND']) || !in_array($_POST['SKU_PROP_COND'],$arSelectOfferProps)) { $arErrors[] = GetMessage('YANDEX_SKU_EXPORT_ERR_PROPERTY_ABSENT'); $boolCheck = false; } if ($boolCheck) { $intPropID = $_POST['SKU_PROP_COND']; if (empty($_POST['SKU_PROP_SELECT']) || empty($arCondSelectProp[$_POST['SKU_PROP_SELECT']])) { $arErrors[] = GetMessage('YANDEX_SKU_EXPORT_ERR_PROPERTY_COND_ABSENT'); $boolCheck = false; } } if ($boolCheck) { $strPropCond = $_POST['SKU_PROP_SELECT']; if ($strPropCond == 'EQUAL' || $strPropCond == 'NONEQUAL') { if (!isset($_POST['SKU_PROP_VALUE_'.$intPropID]) || !is_array($_POST['SKU_PROP_VALUE_'.$intPropID])) { $arErrors[] = GetMessage('YANDEX_SKU_EXPORT_ERR_PROPERTY_VALUES_ABSENT'); $boolCheck = false; } if ($boolCheck) { foreach($_POST['SKU_PROP_VALUE_'.$intPropID] as $strValue) if ($strValue <> '') $arPropValues[] = $strValue; } if (empty($arPropValues)) { $arErrors[] = GetMessage('YANDEX_SKU_EXPORT_ERR_PROPERTY_VALUES_ABSENT'); $boolCheck = false; } } } if ($boolCheck) { $arSKUExport['SKU_PROP_COND'] = array( 'PROP_ID' => $intPropID, 'COND' => $strPropCond, 'VALUES' => $arPropValues, ); } } } $vatExport = $defaultVatExport; if (isset($_POST['USE_VAT_EXPORT']) && is_string($_POST['USE_VAT_EXPORT'])) { if ($_POST['USE_VAT_EXPORT'] == 'Y') $vatExport['ENABLE'] = 'Y'; if ($vatExport['ENABLE'] == 'Y') { if (isset($_POST['BASE_VAT']) && is_string($_POST['BASE_VAT']) && $_POST['BASE_VAT'] !== '') { if (isset($vatRates[$_POST['BASE_VAT']])) $vatExport['BASE_VAT'] = $_POST['BASE_VAT']; } if ($vatExport['BASE_VAT'] === '') { $arErrors[] = GetMessage('YANDEX_VAT_ERR_BASE_VAT_ABSENT'); $boolCheck = false; } } } if (empty($arErrors)) { $arXMLData = array( 'TYPE' => $type, 'XML_DATA' => $XML_DATA, 'CURRENCY' => $arCurrency, 'PRICE' => intval($_POST['PRICE']), 'SKU_EXPORT' => $arSKUExport, 'VAT_EXPORT' => $vatExport, 'COMMON_FIELDS' => $commonFields ); ?>