AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 3.149.213.43
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/modules/sale/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/modules/sale/options.php
<?php

$module_id = 'sale';
/** @global CMain $APPLICATION */
/** @global CUser $USER */

use Bitrix\Main;
use Bitrix\Main\Config\Option;
use Bitrix\Main\HttpRequest;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\SiteTable;
use Bitrix\Sale;
use Bitrix\Sale\Cashbox;
use Bitrix\Sale\Registry;
use Bitrix\Sale\SalesZone;

$SALE_RIGHT = $APPLICATION->GetGroupRight('sale');
if ($SALE_RIGHT < 'R')
{
	return;
}
if (
	!Loader::includeModule('sale')
	|| !Loader::includeModule('currency')
)
{
	return;
}

$allowEditPhp = $USER->CanDoOperation('edit_php');
$defaultValues = Option::getDefaults('sale');
$showMeasurePathOption = Option::get('sale', 'measurement_path') !== $defaultValues['measurement_path'];

$request = Main\Context::getCurrent()->getRequest();

IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/options.php');
IncludeModuleLangFile(__FILE__);

Main\Page\Asset::getInstance()->addJs('/bitrix/js/sale/options.js');
$APPLICATION->SetAdditionalCSS("/bitrix/themes/.default/sale.css");

$lpEnabled = CSaleLocation::isLocationProEnabled();
$lMigrated = CSaleLocation::isLocationProMigrated();

$siteIdList = [];
$siteList = [];
$siteIterator = SiteTable::getList([
	'select' => [
		'LID',
		'NAME',
		'SORT',
	],
	'order' => [
		'SORT' => 'ASC',
	],
]);
while ($oneSite = $siteIterator->fetch())
{
	$siteList[] = [
		'ID' => $oneSite['LID'],
		'SAFE_ID' => htmlspecialcharsbx($oneSite['LID']),
		'NAME' => $oneSite['NAME'],
		'SAFE_NAME' => htmlspecialcharsbx($oneSite['NAME']),
	];
	$siteIdList[] = $oneSite['LID'];
}
unset($oneSite, $siteIterator);
$siteCount = count($siteList);

$bWasUpdated = false;

$currentAction = null;
if ($request->getPost('Update') === 'Y')
{
	if ($request->getPost('Save') !== null)
	{
		$currentAction = 'save';
	}
	elseif ($request->getPost('Apply') !== null)
	{
		$currentAction = 'apply';
	}
	elseif ($request->getPost('RestoreDefaults') !== null)
	{
		$currentAction = 'reset';
	}
}

$backUrl = (string)$request->get('back_url_settings');

if (
	$request->isPost()
	&& $currentAction === 'reset'
	&& $SALE_RIGHT === 'W'
	&& check_bitrix_sessid()
)
{
	$bWasUpdated = true;

	$valueList = [];
	$savedOptions = [
		'sale_locationpro_migrated',
		'sale_locationpro_enabled',
	];

	foreach ($savedOptions as $optionId)
	{
		$valueList[$optionId] = Option::get('sale', $optionId, '-');
	}
	Option::delete('sale');
	foreach ($valueList as $optionId => $value)
	{
		if ($value !== '-')
		{
			Option::set('sale', $optionId, $value);
		}
	}
	unset($savedOptions, $valueList);

	$z = CGroup::GetList(
		'id',
		'asc',
		[
			'ACTIVE' => 'Y',
			'ADMIN' => 'N',
		]
	);
	while ($zr = $z->Fetch())
	{
		$APPLICATION->DelGroupRight('sale', [$zr["ID"]]);
	}
	unset($z);
}

// region basis options
$optionMainList = [];
$optionMainList[] = [
	'ID' => 'order_email',
	'TITLE' => Loc::getMessage('SALE_EMAIL_ORDER'),
	'DEFAULT_VALUE' => 'order@' . $_SERVER['SERVER_NAME'],
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 30,
	],
];
$optionMainList[] = [
	'ID' => 'delete_after',
	'TITLE' => Loc::getMessage('SALE_DELETE_AFTER'),
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 10,
	],
];
$optionMainList[] = [
	'ID' => 'order_list_date',
	'TITLE' => Loc::getMessage('SALE_ORDER_LIST_DATE'),
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 10,
	],
];
$optionMainList[] = [
	'ID' => 'MAX_LOCK_TIME',
	'TITLE' => Loc::getMessage('SALE_MAX_LOCK_TIME'),
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 10,
	],
];
$optionMainList[] = [
	'ID' => 'GRAPH_WEIGHT',
	'TITLE' => Loc::getMessage('SALE_GRAPH_WEIGHT'),
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 10,
	],
];
$optionMainList[] = [
	'ID' => 'GRAPH_HEIGHT',
	'TITLE' => Loc::getMessage('SALE_GRAPH_HEIGHT'),
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 10,
	],
];
$optionMainList[] = [
	'ID' => 'path2user_ps_files',
	'TITLE' => Loc::getMessage('SALE_PATH2UPSF'),
	'TYPE' => 'path',
	'SETTINGS' => [
		'LENGTH' => 40,
	],
	'HINT' => Loc::getMessage('SALE_HINT_NEED_ADMIN_RIGHTS_FOR_CHANGE'),
	'VALIDATE' => [
		'TYPE' => 'dir',
	],
];
$optionMainList[] = [
	'ID' => 'lock_catalog',
	'TITLE' => Loc::getMessage('SMO_LOCK_CATALOG'),
	'TYPE' => 'checkbox',
];
if (CBXFeatures::IsFeatureEnabled('SaleAffiliate'))
{
	$optionMainList[] = [
		'ID' => 'affiliate_param_name',
		'TITLE' => Loc::getMessage('SMOS_AFFILIATE_PARAM'),
		'TYPE' => 'text',
		'SETTINGS' => [
			'LENGTH' => 40,
		],
	];
	$optionMainList[] = [
		'ID' => 'affiliate_life_time',
		'TITLE' => Loc::getMessage('SMO_AFFILIATE_LIFE_TIME'),
		'TYPE' => 'text',
		'SETTINGS' => [
			'LENGTH' => 10,
		],
	];
}
$optionMainList[] = [
	'ID' => 'show_order_sum',
	'TITLE' => Loc::getMessage('SMO_SHOW_ORDER_SUM'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'show_order_product_xml_id',
	'TITLE' => Loc::getMessage('SMO_SHOW_ORDER_PRODUCT_XML_ID'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'show_paysystem_action_id',
	'TITLE' => Loc::getMessage('SMO_SHOW_PAYSYSTEM_ACTION_ID'),
	'TYPE' => 'checkbox',
];
if ($showMeasurePathOption)
{
	$optionMainList[] = [
		'ID' => 'measurement_path',
		'TITLE' => Loc::getMessage('SMO_MEASUREMENT_PATH'),
		'TYPE' => 'path',
		'SETTINGS' => [
			'LENGTH' => '40',
		],
		'HINT' => Loc::getMessage('SALE_HINT_NEED_ADMIN_RIGHTS_FOR_CHANGE'),
		'VALIDATE' => [
			'TYPE' => 'file',
		],
	];
}
$optionMainList[] = [
	'ID' => 'delivery_handles_custom_path',
	'TITLE' => Loc::getMessage('SMO_DELIVERY_HANDLERS_CUSTOM_PATH'),
	'TYPE' => 'path',
	'SETTINGS' => [
		'LENGTH' => 40,
	],
	'HINT' => Loc::getMessage('SALE_HINT_NEED_ADMIN_RIGHTS_FOR_CHANGE'),
	'VALIDATE' => [
		'TYPE' => 'dir',
	],
];
$optionMainList[] = [
	'ID' => 'use_secure_cookies',
	'TITLE' => Loc::getMessage('SMO_USE_SECURE_COOKIES'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'encode_fuser_id',
	'TITLE' => Loc::getMessage('SMO_ENCODE_FUSER_ID'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'save_anonymous_fuser_cookie',
	'TITLE' => Loc::getMessage('SALE_SAVE_ANONYMOUS_FUSER_COOKIE'),
	'TYPE' => 'checkbox',
	'HINT' => Loc::getMessage('SALE_HINT_SAVE_ANONYMOUS_FUSER_COOKIE'),
];
$optionMainList[] = [
	'ID' => 'COUNT_DISCOUNT_4_ALL_QUANTITY',
	'TITLE' => Loc::getMessage('SALE_OPT_COUNT_DISCOUNT_4_ALL_QUANTITY'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'COUNT_DELIVERY_TAX',
	'TITLE' => Loc::getMessage('SALE_OPT_COUNT_DELIVERY_TAX'),
	'TYPE' => 'checkbox',
];
if (Option::get('sale', 'QUANTITY_FACTORIAL') === 'Y')
{
	$optionMainList[] = [
		'ID' => 'QUANTITY_FACTORIAL',
		'TITLE' => Loc::getMessage('SALE_OPT_QUANTITY_FACTORIAL'),
		'TYPE' => 'checkbox',
	];
}
$optionMainList[] = [
	'ID' => 'product_viewed_save',
	'TITLE' => Loc::getMessage('SALE_PRODUCT_VIEWED_SAVE'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'viewed_capability',
	'TITLE' => Loc::getMessage('SALE_VIEWED_CAPABILITY'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'viewed_time',
	'TITLE' => Loc::getMessage('SALE_VIEWED_TIME'),
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 10,
	],
];
$optionMainList[] = [
	'ID' => 'viewed_count',
	'TITLE' => Loc::getMessage('SALE_VIEWED_COUNT'),
	'TYPE' => 'text',
	'SETTINGS' => [
		'LENGTH' => 10,
	],
];
$optionMainList[] = [
	'ID' => 'SALE_ADMIN_NEW_PRODUCT',
	'TITLE' => Loc::getMessage('SALE_ADMIN_NEW_PRODUCT'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'use_ccards',
	'TITLE' => Loc::getMessage('SALE_ADMIN_USE_CARDS'),
	'TYPE' => 'checkbox',
];
$optionMainList[] = [
	'ID' => 'show_basket_props_in_order_list',
	'TITLE' => Loc::getMessage('SALE_SHOW_BASKET_PROPS_IN_ORDER_LIST'),
	'TYPE' => 'checkbox',
];
// endregion basis options

$arOrderFlags = [
	'P' => Loc::getMessage('SMO_PAYMENT_FLAG'),
	'C' => Loc::getMessage('SMO_CANCEL_FLAG'),
	'D' => Loc::getMessage('SMO_DELIVERY_FLAG'),
];
$numeratorForOrdersId = '';
$numeratorsOrderType = Main\Numerator\Numerator::getOneByType(Registry::REGISTRY_TYPE_ORDER);
if ($numeratorsOrderType)
{
	$numeratorForOrdersId = $numeratorsOrderType['id'];
}
$aTabs = array(
	array("DIV" => "edit1", "TAB" => GetMessage("MAIN_TAB_SET"), "ICON" => "sale_settings", "TITLE" => GetMessage("MAIN_TAB_TITLE_SET")),
	array("DIV" => "edit7", "TAB" => GetMessage("SALE_TAB_WEIGHT"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_WEIGHT_TITLE")),
	array("DIV" => "edit5", "TAB" => GetMessage("SALE_TAB_ADDRESS"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_ADDRESS_TITLE"))
);

if (CBXFeatures::IsFeatureEnabled('SaleCCards') && Option::get('sale', "use_ccards", "N") == "Y")
	$aTabs[] = array("DIV" => "edit2", "TAB" => GetMessage("SALE_TAB_2"), "ICON" => "sale_settings", "TITLE" => GetMessage("SMO_CRYPT_TITLE"));

$aTabs[] = array("DIV" => "edit3", "TAB" => GetMessage("SALE_TAB_3"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_3_TITLE"));
$aTabs[] = array("DIV" => "edit4", "TAB" => GetMessage("MAIN_TAB_RIGHTS"), "ICON" => "sale_settings", "TITLE" => GetMessage("MAIN_TAB_TITLE_RIGHTS"));
$aTabs[] = array("DIV" => "edit8", "TAB" => GetMessage("SALE_TAB_AUTO"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_AUTO_TITLE"));
$aTabs[] = array("DIV" => "edit9", "TAB" => GetMessage("SALE_TAB_ARCHIVE"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_ARCHIVE_TITLE"));
$aTabs[] = array("DIV" => "edit10", "TAB" => GetMessage("SALE_TAB_ORDER_NUMERATOR_TEMPLATE"), "ICON" => "sale_settings", "TITLE" => GetMessage("SALE_TAB_ORDER_NUMERATOR_TEMPLATE_TITLE"));
$tabControl = new CAdminTabControl("tabControl", $aTabs);

$strWarning = "";
function addNumeratorErrorToWarningString($_numeratorResult): string
{
	$numeratorWarningsString = '';
	foreach ($_numeratorResult->getErrors() as $error)
	{
		$numeratorWarningsString = $error->getMessage() . '<br>';
	}
	return $numeratorWarningsString;
}

/**
 * @param array $list
 * @param string|int $index
 * @return string
 */
function getSaleArrayOptionValue(array $list, $index): string
{
	$result = $list[$index] ?? '';
	if (is_array($result))
	{
		$result = '';
	}

	return trim($result);
}

function getSaleStringOptionFromRequest(HttpRequest $request, string $index): string
{
	$result = $request->getPost($index) ?? '';
	if (is_array($result))
	{
		$result = '';
	}

	return trim($result);
}

function getSaleBooleanOptionFromRequest(HttpRequest $request, string $index): ?string
{
	$result = $request->getPost($index);
	if ($result === 'Y' || $result === 'N')
	{
		return $result;
	}

	return null;
}

if (
	$request->isPost()
	&& ($currentAction === 'save' || $currentAction === 'apply')
	&& $SALE_RIGHT === 'W'
	&& check_bitrix_sessid()
)
{
	$bWasUpdated = true;

	$separateSettings = getSaleBooleanOptionFromRequest($request, 'WEIGHT_dif_settings');
	if ($separateSettings !== null)
	{
		$weightUnit = $request->getPost('weight_unit');
		$weightKoef = $request->getPost('weight_koef');
		if (!empty($weightUnit) && is_array($weightUnit) && !empty($weightKoef) && is_array($weightKoef))
		{
			Option::delete('sale', ['name' => 'weight_unit']);
			Option::delete('sale', ['name' => 'weight_koef']);

			if ($separateSettings === 'Y')
			{
				$weightUnit = $request->getPost('weight_unit');
				$weightKoef = $request->getPost('weight_koef');

				foreach ($siteIdList as $siteId)
				{
					Option::set(
						'sale',
						'weight_unit',
						getSaleArrayOptionValue($weightUnit, $siteId),
						$siteId
					);
					Option::set(
						'sale',
						'weight_koef',
						(float)getSaleArrayOptionValue($weightKoef, $siteId),
						$siteId
					);
				}
			}
			else
			{
				$siteId = getSaleStringOptionFromRequest($request, 'WEIGHT_current_site');
				Option::set(
					'sale',
					'weight_unit',
					getSaleArrayOptionValue($weightUnit, $siteId),
				);
				Option::set(
					'sale',
					'weight_koef',
					(float)getSaleArrayOptionValue($weightKoef, $siteId),
				);
			}

			Option::set('sale', 'WEIGHT_different_set', $separateSettings);
		}
		unset($weightKoef, $weightUnit);
	}

	$separateSettings = getSaleBooleanOptionFromRequest($request, 'ADDRESS_dif_settings');
	if ($separateSettings !== null)
	{
		$locationZip = $request->getPost('location_zip');
		$location = $request->getPost('location');
		if (!empty($locationZip) && is_array($locationZip) && !empty($location) && is_array($location))
		{
			Option::delete('sale', ['name' => 'location_zip']);
			Option::delete('sale', ['name' => 'location']);

			if ($separateSettings === 'Y')
			{
				foreach ($siteIdList as $siteId)
				{
					Option::set(
						'sale',
						'location_zip',
						getSaleArrayOptionValue($locationZip, $siteId),
						$siteId
					);
					Option::set(
						'sale',
						'location',
						getSaleArrayOptionValue($location, $siteId),
						$siteId
					);
				}
			}
			else
			{
				$siteId = getSaleStringOptionFromRequest($request, 'ADDRESS_current_site');
				Option::set(
					'sale',
					'location_zip',
					getSaleArrayOptionValue($locationZip, $siteId)
				);
				Option::set(
					'sale',
					'location',
					getSaleArrayOptionValue($location, $siteId)
				);
			}
			Option::set('sale', 'ADDRESS_different_set', $separateSettings);
		}
		unset($location, $locationZip);
	}

		if(!$lMigrated )
		{
			COption::RemoveOption('sale', "sales_zone_countries");
			COption::RemoveOption('sale', "sales_zone_regions");
			COption::RemoveOption('sale', "sales_zone_cities");
		}

		if(!$lpEnabled)
		{
			if (!empty($_REQUEST["ADDRESS_dif_settings"]))
			{
				for ($i = 0; $i < $siteCount; $i++)
				{
					if($lMigrated)
					{
						try
						{
							SalesZone::saveSelectedTypes(array(
								'COUNTRY' => $_REQUEST["sales_zone_countries"][$siteList[$i]["ID"]],
								'REGION' => $_REQUEST["sales_zone_regions"][$siteList[$i]["ID"]],
								'CITY' => $_REQUEST["sales_zone_cities"][$siteList[$i]["ID"]]
							), $siteList[$i]["ID"]);
						}
						catch(Exception $e)
						{
						}
					}
					else
					{
						COption::SetOptionString('sale', "sales_zone_countries", implode(":", $_REQUEST["sales_zone_countries"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
						COption::SetOptionString('sale', "sales_zone_regions", implode(":",$_REQUEST["sales_zone_regions"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
						COption::SetOptionString('sale', "sales_zone_cities", implode(":",$_REQUEST["sales_zone_cities"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
					}
				}
			}
			else
			{
				$site_id = trim($_REQUEST["ADDRESS_current_site"]);

				if($lMigrated)
				{
					try
					{
						SalesZone::saveSelectedTypes(array(
							'COUNTRY' => $_REQUEST["sales_zone_countries"][$site_id],
							'REGION' => $_REQUEST["sales_zone_regions"][$site_id],
							'CITY' => $_REQUEST["sales_zone_cities"][$site_id]
						), $site_id);
					}
					catch(Exception $e)
					{
					}
				}
				else
				{
					COption::SetOptionString('sale', "sales_zone_countries", implode(":",$_REQUEST["sales_zone_countries"][$site_id]));
					COption::SetOptionString('sale', "sales_zone_regions", implode(":",$_REQUEST["sales_zone_regions"][$site_id]));
					COption::SetOptionString('sale', "sales_zone_cities", implode(":",$_REQUEST["sales_zone_cities"][$site_id]));
				}
			}
		}

	foreach ($optionMainList as $option)
	{
		$name = $option['ID'];
		switch ($option['TYPE'])
		{
			case 'checkbox':
				$value = getSaleBooleanOptionFromRequest($request, $name);
				if ($value !== null)
				{
					Option::set('sale', $name, $value);
				}
				break;
			case 'text':
				$value = getSaleStringOptionFromRequest($request, $name);
				Option::set('sale', $name, $value);
				break;
			case 'path':
				if ($allowEditPhp)
				{
					$value = getSaleStringOptionFromRequest($request, $name);
					try
					{
						$value = Main\IO\Path::normalize($value);
					}
					catch (Main\IO\InvalidPathException $e)
					{
						$value = $defaultValues[$name] ?? '';
					}
					if ($value !== '')
					{
						if (($option['VALIDATE']['TYPE'] ?? '') === 'dir')
						{
							if (mb_substr($value, - 1, 1) !== '/')
							{
								$value .= '/';
							}
						}
						Option::set('sale', $name, $value);
					}
				}
				break;
		}
	}

	$rsAgents = CAgent::GetList(
		[
			'ID' => 'DESC',
		],
		[
			'MODULE_ID' => 'sale',
			'NAME' => "\\Bitrix\\Sale\\Basket::deleteOldAgent(%",
		]
	);
	while ($arAgent = $rsAgents->Fetch())
	{
		CAgent::Delete($arAgent['ID']);
	}
	unset($arAgent, $rsAgents);

	$delete_after = (int)Option::get('sale', 'delete_after');
	if ($delete_after > 0)
	{
		CAgent::AddAgent(
			"\\Bitrix\\Sale\\Basket::deleteOldAgent(" . $delete_after . ");",
			"sale",
			"N",
			8 * 60 * 60,
			"",
			"Y"
		);
	}

	if (CBXFeatures::IsFeatureEnabled('SaleAffiliate'))
	{
		Option::set(
			'sale',
			'affiliate_plan_type',
			getSaleStringOptionFromRequest($request, 'affiliate_plan_type')
		);
	}

	$amountValues = $request->getPost('amount_val');
	$amountCurrencies = $request->getPost('amount_currency');
	if (!empty($amountValues) && is_array($amountValues) && !empty($amountCurrencies) && is_array($amountCurrencies))
	{
		$amountList = [];
		foreach (array_keys($amountValues) as $amountIndex)
		{
			$amount = (float)getSaleArrayOptionValue($amountValues, $amountIndex);
			$currency = getSaleArrayOptionValue($amountCurrencies, $amountIndex);
			if ($amount > 0 && $currency !== '')
			{
				$amountList[] = [
					'AMOUNT' => $amount,
					'CURRENCY' => $currency,
				];
			}
		}
		if (!empty($amountList))
		{
			Option::set('sale', 'pay_amount', serialize($amountList));
		}
		unset($amountList);
	}
	unset($amountCurrencies, $amountValues);

	CAgent::RemoveAgent('CSaleOrder::RemindPayment();', 'sale');
	Option::delete('sale', ['name' => 'pay_reminder']);
	$rawPayReminder = $request->getPost('reminder');
	if (!empty($rawPayReminder) && is_array($rawPayReminder))
	{
		$payReminder = [];
		foreach ($siteIdList as $siteId)
		{
			if (!empty($rawPayReminder[$siteId]) && is_array($rawPayReminder[$siteId]))
			{
				$payReminder[$siteId] = [
					'use' => ($rawPayReminder[$siteId]['use'] ?? 'N') === 'Y' ? 'Y' : 'N',
					'after' => (int)($rawPayReminder[$siteId]['after'] ?? 0),
					'frequency' => (int)($rawPayReminder[$siteId]['frequency'] ?? 0),
					'period' => (int)($rawPayReminder[$siteId]['period'] ?? 0),
				];
			}
		}
		if (!empty($payReminder))
		{
			Option::set('sale', 'pay_reminder', serialize($payReminder));
			CAgent::AddAgent('CSaleOrder::RemindPayment();', 'sale', 'N', 86400, '', 'Y');
		}
		unset($payReminder);
	}
	unset($rawPayReminder);

	//subscribe product
	$rsAgents = CAgent::GetList(
		[
			'ID' => 'DESC',
		],
		[
			'MODULE_ID' => 'sale',
			'NAME' => 'CSaleBasket::ClearProductSubscribe(%',
		]
	);
	while ($arAgent = $rsAgents->Fetch())
	{
		CAgent::Delete($arAgent["ID"]);
	}
	unset($arAgent, $rsAgents);
	Option::delete('sale', ['name' => 'subscribe_prod']);
	$rawProductSubscribe = $request->getPost('subscribProd');
	if (!empty($rawProductSubscribe) && is_array($rawProductSubscribe))
	{
		$productSubscribe = [];
		foreach ($siteIdList as $siteId)
		{
			$useSubscribe = ($rawProductSubscribe[$siteId]['use'] ?? 'N') === 'Y' ? 'Y' : 'N';
			$period = (int)($rawProductSubscribe[$siteId]['del_after'] ?? 0);
			if ($period <= 0)
			{
				$period = 30;
			}
			$productSubscribe[$siteId] = [
				'use' => $useSubscribe,
				'del_after' => $period,
			];
			if ($useSubscribe === 'Y')
			{
				CAgent::AddAgent(
					"CSaleBasket::ClearProductSubscribe('" . $siteId . "');",
					'sale',
					'N',
					$period * 86400,
					'',
					'Y'
				);
			}
		}
		Option::set('sale', 'subscribe_prod', serialize($productSubscribe));
		unset($productSubscribe);
	}
	unset($rawProductSubscribe);

	//viewed product
	Option::delete('sale', ['name' => 'viewed_product']);
	$rawViewed = $request->getPost('viewed');
	if (!empty($rawViewed) && is_array($rawViewed))
	{
		$viewed = [];
		foreach ($siteIdList as $siteId)
		{
			$viewedTime = (int)($rawViewed[$siteId]['time'] ?? 0);
			if ($viewedTime <= 0)
			{
				$viewedTime = 90;
			}
			$viewedCount = (int)($rawViewed[$siteId]['count'] ?? 0);
			if ($viewedCount <= 0)
			{
				$viewedCount = 1000;
			}
			$viewed[$siteId] = [
				'time' => $viewedTime,
				'count' => $viewedCount,
			];
		}
		Option::set('sale', 'viewed_product', serialize($viewed));
		unset($viewed);
	}

	Option::set(
		'sale',
		'viewed_capability',
		($request->getPost('viewed_capability') ?? 'N') === 'Y' ? 'Y' : 'N'
	);

	$rsAgents = CAgent::GetList(
		[
			'ID' => 'DESC',
		],
		[
			'MODULE_ID' => 'sale',
			'NAME' => 'CSaleViewedProduct::ClearViewed();',
		]
	);
	$arAgent = $rsAgents->Fetch();
	unset($rsAgents);
	if (!$arAgent)
	{
		CAgent::AddAgent(
			'CSaleViewedProduct::ClearViewed();',
			'sale',
			'N',
			86400,
			'',
			'Y'
		);
	}

	Option::set('sale', 'default_currency', getSaleStringOptionFromRequest($request, 'CURRENCY_DEFAULT'));
	Option::set('sale', 'crypt_algorithm', getSaleStringOptionFromRequest($request, 'crypt_algorithm'));
	Option::set('sale', 'sale_data_file', getSaleStringOptionFromRequest($request, 'sale_data_file'));

	$sale_ps_success_path = getSaleStringOptionFromRequest($request, 'sale_ps_success_path');
	if ($sale_ps_success_path === '')
	{
		$sale_ps_success_path = '/';
	}
	Option::set('sale', 'sale_ps_success_path', $sale_ps_success_path);

	$sale_ps_fail_path = getSaleStringOptionFromRequest($request, 'sale_ps_fail_path');
	if ($sale_ps_fail_path === '')
	{
		$sale_ps_fail_path = '/';
	}
	Option::set('sale', 'sale_ps_fail_path', $sale_ps_fail_path);

	$sale_location_selector_appearance = getSaleStringOptionFromRequest($request, 'sale_location_selector_appearance');
	if ($sale_location_selector_appearance === '')
	{
		$sale_location_selector_appearance = 'steps';
	}
	Option::set('sale', 'sale_location_selector_appearance', $sale_location_selector_appearance);

	$optionList = [
		'status_on_paid' => 'PAID_STATUS',
		'status_on_half_paid' => 'HALF_PAID_STATUS',
		'status_on_allow_delivery' => 'ALLOW_DELIVERY_STATUS',
		'status_on_allow_delivery_one_of' => 'ALLOW_DELIVERY_ONE_OF_STATUS',
		'status_on_shipped_shipment' => 'SHIPMENT_SHIPPED_STATUS',
		'status_on_shipped_shipment_one_of' => 'SHIPMENT_SHIPPED_ONE_OF_STATUS',
		'shipment_status_on_allow_delivery' => 'SHIPMENT_ALLOW_DELIVERY_TO_SHIPMENT_STATUS',
		'shipment_status_on_shipped' => 'SHIPMENT_SHIPPED_TO_SHIPMENT_STATUS',
		'status_on_payed_2_allow_delivery' => 'PAYED_2_ALLOW_DELIVERY',
		'status_on_change_allow_delivery_after_paid' => 'CHANGE_ALLOW_DELIVERY_AFTER_PAID',
	];
	foreach ($optionList as $optionName => $requestKey)
	{
		Option::set('sale', $optionName, getSaleStringOptionFromRequest($request, $requestKey));
	}
	unset($optionName, $requestKey, $optionList);

	$alloDeductionOnDelivery = getSaleBooleanOptionFromRequest($request, 'ALLOW_DEDUCTION_ON_DELIVERY');
	if ($alloDeductionOnDelivery !== null)
	{
		Option::set('sale', 'allow_deduction_on_delivery', $alloDeductionOnDelivery);
	}
	unset($alloDeductionOnDelivery);

	$formatQuantity = getSaleStringOptionFromRequest($request, 'FORMAT_QUANTITY');
	if ($formatQuantity !== 'AUTO')
	{
		$formatQuantity = (int)$formatQuantity;
	}
	Option::set('sale', 'format_quantity', $formatQuantity);
	unset($formatQuantity);

	$valuePrecision = (int)getSaleStringOptionFromRequest($request, 'VALUE_PRECISION');
	if ($valuePrecision < 0)
	{
		$valuePrecision = 2;
	}
	Option::set('sale', 'value_precision', $valuePrecision);

	$oldExpirationProcessingEvents = Option::get('sale', 'expiration_processing_events');
	$newExpirationProcessingEvents = getSaleBooleanOptionFromRequest($request, 'EXPIRATION_PROCESSING_EVENTS');
	if ($newExpirationProcessingEvents !== null)
	{
		Option::set('sale', 'expiration_processing_events', $newExpirationProcessingEvents);
		if ($oldExpirationProcessingEvents !== $newExpirationProcessingEvents)
		{
			$eventManager = Main\EventManager::getInstance();
			if ($newExpirationProcessingEvents === 'Y')
			{
				Sale\Compatible\EventCompatibility::registerEvents();

				$eventManager->registerEventHandlerCompatible(
					'sale',
					'OnBeforeBasketAdd',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onBeforeBasketAdd'
				);
				$eventManager->registerEventHandlerCompatible(
					'sale',
					'OnBasketAdd',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onBasketAdd'
				);
				$eventManager->registerEventHandlerCompatible(
					'sale',
					'OnOrderAdd',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onOrderAdd'
				);
				$eventManager->registerEventHandlerCompatible(
					'sale',
					'OnSalePayOrder',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSalePayOrder'
				);

				$eventManager->unRegisterEventHandler(
					'sale',
					'OnSaleBasketItemSaved',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSaleBasketItemSaved'
				);
				$eventManager->unRegisterEventHandler(
					'sale',
					'OnSaleOrderSaved',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSaleOrderSaved'
				);
				$eventManager->unRegisterEventHandler(
					'sale',
					'OnSaleOrderPaid',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSaleOrderPaid'
				);
			}
			else
			{
				Sale\Compatible\EventCompatibility::unRegisterEvents();

				$eventManager->unRegisterEventHandler(
					'sale',
					'OnBeforeBasketAdd',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onBeforeBasketAdd'
				);
				$eventManager->unRegisterEventHandler(
					'sale',
					'OnBasketAdd',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onBasketAdd'
				);
				$eventManager->unRegisterEventHandler(
					'sale',
					'OnOrderAdd',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onOrderAdd'
				);
				$eventManager->unRegisterEventHandler(
					'sale',
					'OnSalePayOrder',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSalePayOrder'
				);

				$eventManager->registerEventHandler(
					'sale',
					'OnSaleBasketItemSaved',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSaleBasketItemSaved'
				);
				$eventManager->registerEventHandler(
					'sale',
					'OnSaleOrderSaved',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSaleOrderSaved'
				);
				$eventManager->registerEventHandler(
					'sale',
					'OnSaleOrderPaid',
					'sale',
					'\Bitrix\Sale\Internals\ConversionHandlers',
					'onSaleOrderPaid'
				);
			}
		}
	}

	$optionList = [
		'order_history_log_level' => 'ORDER_HISTORY_LOG_LEVEL',
		'order_history_action_log_level' => 'ORDER_HISTORY_ACTION_LOG_LEVEL',
	];
	foreach ($optionList as $optionName => $requestKey)
	{
		$value = (int)getSaleStringOptionFromRequest($request, $requestKey);
		if ($value !== 1)
		{
			$value = 0;
		}
		Option::set('sale', $optionName, $value);
	}
	unset($value, $optionName, $requestKey, $optionList);

	$orderListFields = '';
	$rawOrderListields = $request->getPost('SELECTED_FIELDS');
	if (!is_array($rawOrderListields))
	{
		$rawOrderListields = [];
	}
	$rawOrderListields = array_filter($rawOrderListields);
	if (!empty($rawOrderListields))
	{
		$orderListFields = implode(',', $rawOrderListields);
	}
	if ($orderListFields === '')
	{
		$orderListFields = 'ID,USER,PAY_SYSTEM,PRICE,STATUS,PAYED,PS_STATUS,CANCELED,BASKET';
	}
	Option::set('sale', 'order_list_fields', $orderListFields);

	// account number generation - via numerator
	$hideNumeratorSettings = getSaleBooleanOptionFromRequest($request, 'hideNumeratorSettings');
	if ($hideNumeratorSettings !== null)
	{
		if ($hideNumeratorSettings === 'Y')
		{
			if ($numeratorForOrdersId)
			{
				Main\Numerator\Numerator::delete($numeratorForOrdersId);
			}
		}
		else
		{
			$postValues = $request->getPostList()->toArray();
			if ($numeratorForOrdersId)
			{
				$numeratorUpdateResult = Main\Numerator\Numerator::update($numeratorForOrdersId, $postValues);
				if (!$numeratorUpdateResult->isSuccess())
				{
					$strWarning .= addNumeratorErrorToWarningString($numeratorUpdateResult);
				}
			}
			else
			{
				$numeratorOrder = Main\Numerator\Numerator::create();
				$numeratorOrderValidationResult = $numeratorOrder->setConfig($postValues);
				if ($numeratorOrderValidationResult->isSuccess())
				{
					$numeratorOrderSaveResult = $numeratorOrder->save();
					if (!$numeratorOrderSaveResult->isSuccess())
					{
						$strWarning .= addNumeratorErrorToWarningString($numeratorOrderSaveResult);
					}
				}
				else
				{
					$strWarning .= addNumeratorErrorToWarningString($numeratorOrderValidationResult);
				}
			}
			unset($postValues);
		}
	}

	//subscribe product
	$rawDefaultDeductStore = $request->getPost('defaultDeductStore');
	if (!empty($rawDefaultDeductStore) && is_array($rawDefaultDeductStore))
	{
		Option::delete('sale', ['name' => 'deduct_store_id']);
		foreach ($siteIdList as $siteId)
		{
			if (($rawDefaultDeductStore[$siteId]['save'] ?? 'N') === 'Y')
			{
				$defaultStoreId = (int)($rawDefaultDeductStore[$siteId]['id'] ?? 0);
				if ($defaultStoreId > 0)
				{
					Option::set('sale', 'deduct_store_id', $defaultStoreId, $siteId);
				}
			}
		}
	}
	unset($rawDefaultDeductStore);

	//SAVE SHOP LIST SITE
	foreach ($siteIdList as $siteId)
	{
		Option::delete('sale', ['name' => 'SHOP_SITE_' . $siteId]);
	}
	$rawShopSites = $request->getPost('SHOP_SITE');
	if (!empty($rawShopSites) && is_array($rawShopSites))
	{
		foreach ($rawShopSites as $siteId)
		{
			if (!is_string($siteId))
			{
				continue;
			}
			if (!in_array($siteId, $siteIdList))
			{
				continue;
			}
			Option::set('sale', 'SHOP_SITE_' . $siteId, $siteId);
		}
	}
	unset($rawShopSites);

	$SALE_P2P_ALLOW_COLLECT_DATA = getSaleBooleanOptionFromRequest($request, 'SALE_P2P_ALLOW_COLLECT_DATA');
	if ($SALE_P2P_ALLOW_COLLECT_DATA !== null)
	{
		$p2p_del_exp_old = (int)Option::get('sale', 'p2p_del_exp');
		$agentData = CAgent::GetList(
			[
				'ID' => 'DESC',
			],
			[
				'MODULE_ID' => 'sale',
				'NAME' => "\\Bitrix\\Sale\\Product2ProductTable::addProductsByAgent(%",
			]
		);
		$agent = $agentData->Fetch();
		unset($agentData);

		if ($SALE_P2P_ALLOW_COLLECT_DATA === 'Y')
		{
			if (!$agent)
			{
				$limit = (int)Option::get('sale', 'p2p_limit_collecting_per_hit');
				CAgent::AddAgent(
					"Bitrix\\Sale\\Product2ProductTable::addProductsByAgent($limit);",
					'sale',
					'N',
					60,
					'',
					'Y'
				);
			}
		}
		else
		{
			$agentId = (int)($agent['ID'] ?? 0);
			if ($agentId > 0)
			{
				CAgent::Delete($agentId);
			}
			unset($agentId);
		}
		unset($agent);

		Option::set('sale', 'p2p_allow_collect_data', $SALE_P2P_ALLOW_COLLECT_DATA);
	}
	$SALE_P2P_STATUS_LIST = $request->getPost('SALE_P2P_STATUS_LIST');
	if (is_array($SALE_P2P_STATUS_LIST))
	{
		$SALE_P2P_STATUS_LIST = array_filter($SALE_P2P_STATUS_LIST);
		Option::set('sale', 'p2p_status_list', serialize($SALE_P2P_STATUS_LIST));
	}
	unset($SALE_P2P_STATUS_LIST);

	$p2p_del_period = (int)getSaleStringOptionFromRequest($request, 'p2p_del_period');
	if ($p2p_del_period <= 0)
	{
		$p2p_del_period = 10;
	}
	Option::set('sale', 'p2p_del_period', $p2p_del_period);

	$p2p_del_exp = (int)getSaleStringOptionFromRequest($request, 'p2p_del_exp');
	if ($p2p_del_exp <= 0)
	{
		$p2p_del_exp = 10;
	}
	Option::set('sale', 'p2p_del_exp', $p2p_del_exp);
	$rsAgents = CAgent::GetList(
		['ID'=>'DESC'],
		[
			'MODULE_ID' => 'sale',
			'NAME' => "\\Bitrix\\Sale\\Product2ProductTable::deleteOldProducts(%",
		]
	);
	while($arAgent = $rsAgents->Fetch())
	{
		CAgent::Delete($arAgent["ID"]);
	}
	unset($arAgent, $rsAgents);
	CAgent::AddAgent(
		"Bitrix\\Sale\\Product2ProductTable::deleteOldProducts(" . $p2p_del_exp . ");",
		'sale',
		'N',
		86400 * $p2p_del_period,
		'',
		'Y'
	);
	unset($p2p_del_exp, $p2p_del_period);

	$siteCurrencies = [];
	$iterator = Sale\Internals\SiteCurrencyTable::getList([
		'select' => [
			'LID',
		],
	]);
	while ($row = $iterator->fetch())
	{
		$siteCurrencies[$row['LID']] = $row['LID'];
	}
	unset($row, $iterator);
	foreach ($siteIdList as $siteId)
	{
		$valCurrency = getSaleStringOptionFromRequest($request, 'CURRENCY_' . $siteId);
		if (isset($siteCurrencies[$siteId]))
		{
			if ($valCurrency === '')
			{
				Sale\Internals\SiteCurrencyTable::delete($siteId);
			}
			else
			{
				Sale\Internals\SiteCurrencyTable::update(
					$siteId,
					[
						'CURRENCY' => $valCurrency,
					]
				);
			}
			unset($siteCurrencies[$siteId]);
		}
		else
		{
			Sale\Internals\SiteCurrencyTable::add([
				'LID' => $siteId,
				'CURRENCY' => $valCurrency,
			]);
		}

		CSaleGroupAccessToSite::DeleteBySite($siteId);
		$userGroupList = $request->getPost('SITE_USER_GROUPS_' . $siteId);
		if (!empty($userGroupList) && is_array($userGroupList))
		{
			Main\Type\Collection::normalizeArrayValuesByInt($userGroupList);
			foreach ($userGroupList as $groupId)
			{
				CSaleGroupAccessToSite::Add([
					'SITE_ID' => $siteId,
					'GROUP_ID' => $groupId,
				]);
			}
		}
		unset($userGroupList);
	}
/*	if (!empty($siteCurrencies))
	{
		foreach ($siteCurrencies as $siteId)
		{
			Sale\Internals\SiteCurrencyTable::delete($siteId);
		}
	} */
	unset($siteCurrencies);

	$productReserveCondition = getSaleStringOptionFromRequest($request, 'product_reserve_condition');
	if (in_array($productReserveCondition, Sale\Configuration::getReservationConditionList(false)))
	{
		Option::set('sale', 'product_reserve_condition', $productReserveCondition);
	}
	unset($productReserveCondition);

	$clearPeriod = (int)getSaleStringOptionFromRequest($request, 'product_reserve_clear_period');
	if ($clearPeriod >= 0)
	{
		Option::set('sale', 'product_reserve_clear_period', $clearPeriod);
	}
	unset($clearPeriod);

	$useSaleDiscountOnly = getSaleBooleanOptionFromRequest($request, 'use_sale_discount_only');
	if ($useSaleDiscountOnly !== null)
	{
		Option::set('sale', 'use_sale_discount_only', $useSaleDiscountOnly);
	}
	unset($useSaleDiscountOnly);

	$discountPercent = getSaleBooleanOptionFromRequest($request, 'get_discount_percent_from_base_price');
	if ($discountPercent !== null)
	{
		Option::set('sale', 'get_discount_percent_from_base_price', $discountPercent);
	}
	unset($discountPercent);

	if (Option::get('sale', 'use_sale_discount_only') === 'N')
	{
		$discountModeApply = (int)getSaleStringOptionFromRequest($request, 'discount_apply_mode');
		if (in_array($discountModeApply, Sale\Discount::getApplyModeList(false)))
		{
			Option::set('sale', 'discount_apply_mode', $discountModeApply);
		}
		unset($discountModeApply);
	}

	$optionList = [
		'regular_archive_active' => 'archive_regular_accept',
		'archive_blocked_order' => 'archive_blocked_order_accept',
	];
	foreach ($optionList as $optionName => $requestKey)
	{
		$value = getSaleBooleanOptionFromRequest($request, $requestKey);
		if ($value !== null)
		{
			Option::set('sale', $optionName, $value);
		}
	}
	unset($value, $optionName, $requestKey, $optionList);

	$enableRegularArchive = Option::get('sale', 'regular_archive_active') === 'Y';
	$archiveBlockedOrder = Option::get('sale', 'archive_blocked_order') === 'Y';

	$filter = [];
	$archivePeriod = (int)getSaleStringOptionFromRequest($request, 'archive_period');
	$filter['PERIOD'] = ($archivePeriod > 0 ? $archivePeriod : 365);
	unset($archivePeriod);

	if (!$archiveBlockedOrder)
	{
		$filter['LOCKED_BY'] = null;
		$filter['DATE_LOCK'] = null;
	}

	$rawStatusList = $request->getPost('archive_status_id');
	if (!empty($rawStatusList) && is_array($rawStatusList))
	{
		$allStatusNames = Sale\OrderStatus::getAllStatusesNames();
		$statusList = [];
		foreach ($rawStatusList as $statusId)
		{
			if (isset($allStatusNames[$statusId]))
			{
				$statusList[] = $statusId;
			}
		}
		if (!empty($statusList))
		{
			$filter['@STATUS_ID'] = $statusList;
		}
		unset($statusList, $allStatusNames);
	}
	unset($rawStatusList);

	$rawArchiveSiteList = $request->getPost('archive_site');
	if (!empty($rawArchiveSiteList) && is_array($rawArchiveSiteList))
	{
		$archiveSiteList = [];
		foreach ($rawArchiveSiteList as $siteId)
		{
			if (isset($siteList[$siteId]))
			{
				$archiveSiteList[] = $siteId;
			}
		}
		if (!empty($archiveSiteList))
		{
			$filter['@LID'] = $archiveSiteList;
		}
		unset($archiveSiteList);
	}
	unset($rawArchiveSiteList);

	$archiveFlagOptionList = [
		'=PAYED' => 'archive_payed',
		'=CANCELED' => 'archive_canceled',
		'=DEDUCTED' => 'archive_deducted',
	];
	foreach ($archiveFlagOptionList as $filterKey => $requestKey)
	{
		$value = getSaleBooleanOptionFromRequest($request, $requestKey);
		if ($value !== null)
		{
			$filter[$filterKey] = $value;
		}
	}
	unset($archiveFlagOptionList);

	$archiveLimit = (int)getSaleStringOptionFromRequest($request, 'archive_limit');
	if ($archiveLimit <= 0)
	{
		$archiveLimit = 10;
	}
	Option::set('sale', 'archive_limit', $archiveLimit);

	$archiveTimeLimit = (int)getSaleStringOptionFromRequest($request, 'archive_time_limit');
	if ($archiveTimeLimit <= 0)
	{
		$archiveTimeLimit = 5;
	}
	Option::set('sale', 'archive_time_limit', $archiveTimeLimit);

	$filter = serialize($filter);
	Option::set('sale', 'archive_params', $filter);

	$agentsList = CAgent::GetList(
		[
			'ID' => 'DESC',
		],
		[
			'MODULE_ID' => 'sale',
			'NAME' => "\\Bitrix\\Sale\\Archive\\Manager::archiveOnAgent(%",
		]
	);
	while ($agent = $agentsList->Fetch())
	{
		CAgent::Delete($agent["ID"]);
	}
	unset($agent, $agentList);

	if ($enableRegularArchive)
	{
		CAgent::AddAgent(
			"\\Bitrix\\Sale\\Archive\\Manager::archiveOnAgent(" . $archiveLimit . "," . $archiveTimeLimit . ");",
			"sale",
			"N",
			86400,
			"",
			"Y"
		);
	}

	$orderChangesCleanerActive = getSaleBooleanOptionFromRequest($request, 'order_changes_cleaner_active');
	if ($orderChangesCleanerActive !== null)
	{
		Option::set('sale', 'order_changes_cleaner_active', $orderChangesCleanerActive);
	}
	$orderChangesCleanerActive = Option::get('sale', 'order_changes_cleaner_active') === 'Y';

	$orderChangesCleanerDays = (int)getSaleStringOptionFromRequest($request, 'order_changes_cleaner_days');
	if ($orderChangesCleanerDays <= 0)
	{
		$orderChangesCleanerDays = 365;
	}
	Option::set('sale', 'order_changes_cleaner_days', $orderChangesCleanerDays);

	$orderChangesCleanerLimit = (int)getSaleStringOptionFromRequest($request, 'order_changes_cleaner_limit');
	if ($orderChangesCleanerLimit <= 0)
	{
		$orderChangesCleanerLimit = 10000;
	}
	Option::set('sale', 'order_changes_cleaner_limit',$orderChangesCleanerLimit);

	$agentsList = CAgent::GetList(
		[
			'ID' => 'DESC',
		],
		[
			'MODULE_ID' => 'sale',
			'NAME' => "\\Bitrix\\Sale\\OrderHistory::deleteOldAgent(%",
		]
	);
	while($agent = $agentsList->Fetch())
	{
		CAgent::Delete($agent["ID"]);
	}
	unset($agent, $agentList);

	if ($orderChangesCleanerActive)
	{
		CAgent::AddAgent(
			"\\Bitrix\\Sale\\OrderHistory::deleteOldAgent(" . $orderChangesCleanerDays ."," . $orderChangesCleanerLimit . ");",
			'sale',
			'N',
			60,
			'',
			'Y'
		);
	}

	ob_start();
	require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/admin/group_rights.php';
	ob_end_clean();

	$rawTrackingMapStatuses = $request->getPost('tracking_map_statuses');
	if (!empty($rawTrackingMapStatuses) && is_array($rawTrackingMapStatuses))
	{
		$trackingStatuses = Sale\Delivery\Tracking\Manager::getStatusesList();
		$shipmentStatuses = [];
		$iterator = Sale\Internals\StatusTable::getList([
			'select' => [
				'ID',
			],
			'filter' => [
				'=TYPE' => Sale\Internals\StatusTable::TYPE_SHIPMENT,
			],
		]);
		while ($row = $iterator->fetch())
		{
			$shipmentStatuses[$row['ID']] = $row['ID'];
		}
		unset($row, $iterator);
		$trackingMapStatuses = [];
		foreach ($rawTrackingMapStatuses as $trackStatusId => $shipmentStatusId)
		{
			if (!is_string($shipmentStatusId) || $shipmentStatusId === '')
			{
				continue;
			}
			if (!isset($trackingStatuses[$trackStatusId]) || !isset($shipmentStatuses[$shipmentStatusId]))
			{
				continue;
			}
			$trackingMapStatuses[$trackStatusId] = $shipmentStatusId;
		}
		Option::set('sale', 'tracking_map_statuses', serialize($trackingMapStatuses));
		unset($trackingMapStatuses);
		unset($shipmentStatuses, $trackingStatuses);
	}
	unset($rawTrackingMapStatuses);

	$trackingCheck = getSaleBooleanOptionFromRequest($request, 'tracking_check_switch');
	if ($trackingCheck !== null)
	{
		Option::set('sale', 'tracking_check_switch', $trackingCheck);
	}
	$trackingCheck = Option::get('sale', 'tracking_check_switch') === 'Y';

	$trackingPeriod = (int)getSaleStringOptionFromRequest($request, 'tracking_check_period');
	if ($trackingPeriod > 0)
	{
		Option::set('sale', 'tracking_check_period', $trackingPeriod);
	}
	$trackingPeriod = (int)Option::get('sale', 'tracking_check_period');

	$agentName = '\Bitrix\Sale\Delivery\Tracking\Manager::startRefreshingStatuses();';

	if ($trackingCheck && $trackingPeriod > 0)
	{
		$res = CAgent::GetList([], ['NAME' => $agentName]);
		$agent = $res->Fetch();
		unset($res);
		if ($agent)
		{
			CAgent::Update($agent['ID'], ['AGENT_INTERVAL' => $trackingPeriod * 3600]);
		}
		else
		{
			CAgent::AddAgent(
				$agentName,
				'sale',
				'Y',
				$trackingPeriod * 3600,
				'',
				'Y'
			);
		}
	}
	else
	{
		CAgent::RemoveAgent(
			$agentName,
			'sale'
		);
	}

	$checkTypeOnPay = getSaleStringOptionFromRequest($request, 'CHECK_TYPE_ON_PAY');
	if ($checkTypeOnPay === '')
	{
		$checkTypeOnPay = 'sell';
	}
	Option::set('sale', 'check_type_on_pay', $checkTypeOnPay);
	unset($checkTypeOnPay);

	$basketRefreshGap = (int)getSaleStringOptionFromRequest($request, 'BASKET_REFRESH_GAP');
	if ($basketRefreshGap < 0)
	{
		$basketRefreshGap = 0;
	}
	Option::set('sale', 'basket_refresh_gap', $basketRefreshGap);
	unset($basketRefreshGap);

	$orderStatuses = [];
	$iterator = Sale\Internals\StatusTable::getList([
		'select' => [
			'ID',
		],
		'filter' => [
			'=TYPE' => Sale\Internals\StatusTable::TYPE_ORDER,
		],
	]);
	while ($row = $iterator->fetch())
	{
		$orderStatuses[$row['ID']] = $row['ID'];
	}
	unset($row, $iterator);
	$allowPayStatus = getSaleStringOptionFromRequest($request, 'ALLOW_PAY_STATUS');
	if ($allowPayStatus === '' || !isset($orderStatuses[$allowPayStatus]))
	{
		$allowPayStatus = Sale\OrderStatus::getInitialStatus();
	}
	unset($orderStatuses);
	Option::set('sale', 'allow_pay_status', $allowPayStatus);
	unset($allowPayStatus);

	$allowGuestOrderView = getSaleBooleanOptionFromRequest($request, 'ALLOW_GUEST_ORDER_VIEW');
	if ($allowGuestOrderView !== null)
	{
		Option::set('sale', 'allow_guest_order_view', $allowGuestOrderView);
	}
	unset($allowGuestOrderView);

	$allowGuestOrderViewPath = $request->getPost('ALLOW_GUEST_ORDER_VIEW_PATH');
	if (!is_array($allowGuestOrderViewPath))
	{
		$allowGuestOrderViewPath = [];
	}
	//TODO: check values
	Option::set('sale', 'allow_guest_order_view_paths', serialize($allowGuestOrderViewPath));
	unset($allowGuestOrderViewPath);

	$allowGuestOrderViewStatus = $request->getPost('ALLOW_GUEST_ORDER_VIEW_STATUS');
	if (!is_array($allowGuestOrderViewStatus))
	{
		$allowGuestOrderViewStatus = [];
	}
	//TODO: check values
	Option::set('sale', 'allow_guest_order_view_status', serialize($allowGuestOrderViewStatus));
	unset($allowGuestOrderViewStatus);
}

$statusesWithoutNoChange = [];
$arStatuses = [
	'' => Loc::getMessage('SMO_STATUS'),
];
$iterator = Sale\Internals\StatusTable::getList([
	'select' => [
		'ID',
		'SORT',
		'NAME' => 'STATUS_LANG.NAME',
	],
	'filter' => [
		'=STATUS_LANG.LID' => LANGUAGE_ID,
		'=TYPE' => Sale\Internals\StatusTable::TYPE_ORDER,
	],
	'order' => [
		'SORT' => 'ASC',
		'ID' => 'ASC',
	],
]);
while ($arStatus = $iterator->fetch())
{
	$title = htmlspecialcharsbx('['  .$arStatus['ID'].'] '. $arStatus['NAME']);
	$arStatuses[$arStatus['ID']] = $title;
	$statusesWithoutNoChange[$arStatus['ID']] = $title;
}
unset($iterator);

$delieryStatuses = [
	'' => Loc::getMessage('SMO_STATUS'),
];
$delieryStatusesList = Sale\DeliveryStatus::getAllStatusesNames();
if (!empty($delieryStatusesList) && is_array($delieryStatusesList))
{
	foreach ($delieryStatusesList as $statusId => $statusName)
	{
		$delieryStatuses[$statusId] = htmlspecialcharsbx('[' . $statusId .'] ' . $statusName);
	}
}


if ($strWarning !== '')
{
	CAdminMessage::ShowMessage($strWarning);
}
elseif ($bWasUpdated)
{
	if ($currentAction === 'save' && $backUrl !== '')
	{
		LocalRedirect($backUrl);
	}
	else
	{
		LocalRedirect(
			$APPLICATION->GetCurPage()
			. '?lang=' . LANGUAGE_ID
			. '&mid=' . urlencode('sale')
			. '&mid_menu=1'
			. ($backUrl !== '' ? '&back_url_settings=' . urlencode($backUrl) : '')
			. '&' . $tabControl->ActiveTabParam()
		);
	}
}

$settings = [];
$settings['use_sale_discount_only'] = Option::get('sale', 'use_sale_discount_only');
$settings['get_discount_percent_from_base_price'] = Option::get('sale', 'get_discount_percent_from_base_price');
$settings['discount_apply_mode'] = (int)Option::get('sale', 'discount_apply_mode');
$settings['product_reserve_condition'] = Option::get('sale', 'product_reserve_condition');
$settings['product_reserve_clear_period'] = (int)Option::get('sale', 'product_reserve_clear_period');
$settings['tracking_map_statuses'] = [];
$option = Option::get('sale', 'tracking_map_statuses');
if ($option !== '')
{
	$settings['tracking_map_statuses'] = unserialize($option, ['allowed_classes' => false]);
}
if (!is_array($settings['tracking_map_statuses']))
{
	$settings['tracking_map_statuses'] = [];
}
$settings['tracking_check_switch'] = Option::get('sale', 'tracking_check_switch');
$settings['tracking_check_period'] = (int)Option::get('sale', 'tracking_check_period');

$tabControl->Begin();
?><form method="POST" action="<?= $APPLICATION->GetCurPage()?>?lang=<?= LANGUAGE_ID; ?>&mid=<?= $module_id; ?>&mid_menu=1" name="opt_form">
<?=bitrix_sessid_post();
$tabControl->BeginNextTab();
?>
<tr class="heading">
	<td colspan="2"><?= Loc::getMessage('SALE_SERVICE_AREA'); ?></td>
</tr>
<?php
foreach ($optionMainList as $option):
	$value = Option::get('sale', $option['ID'], $option['DEFAULT_VALUE'] ?? '');

	$optionName = htmlspecialcharsbx($option['ID']);

	?>
	<tr>
		<td style="width: 40%;">
			<?php
			if (isset($option['HINT']))
			{
				?><span id="hint_<?= $optionName; ?>"></span>
				<script type="text/javascript">BX.hint_replace(BX('hint_<?= $optionName; ?>'), '<?= CUtil::JSEscape($option['HINT']); ?>');</script>&nbsp;<?php
			}
			if ($option['TYPE'] === 'checkbox')
			{
				echo '<label for="' . $optionName . '">' . $option['TITLE'] . '</label>';
			}
			else
			{
				echo $option['TITLE'];
			}
			?>
		</td>
		<td>
			<?php
			switch ($option['TYPE'])
			{
				case 'checkbox':
					?>
					<input type="hidden" name="<?= $optionName; ?>" id="<?= $optionName; ?>_hidden" value="N">
					<input type="checkbox" name="<?= $optionName; ?>" id="<?= $optionName; ?>" value="Y"<?= ($value === 'Y' ? ' checked' : ''); ?>>
					<?php
					break;
				case 'text':
					?>
					<input type="text" size="<?= (int)$option['SETTINGS']['LENGTH']; ?>" value="<?= htmlspecialcharsbx($value); ?>" name="<?= $optionName; ?>">
					<?php
					break;
				case 'path':
					$disabled = $allowEditPhp ? '' : ' disabled';
					?>
					<input type="text"<?= $disabled; ?> size="<?= (int)$option['SETTINGS']['LENGTH']; ?>" value="<?= htmlspecialcharsbx($value); ?>" name="<?= $optionName; ?>">
					<?php

					break;
			}
			?>
		</td>
	</tr>
	<?php
endforeach;

	$valDeductOnDelivery = Option::get('sale', 'allow_deduction_on_delivery');
	?>
	<tr>
		<td>
			<?= Loc::getMessage('SMO_FORMAT_QUANTITY_TITLE'); ?>:
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'format_quantity');
			$selectList = [
				'AUTO',
				'2',
				'3',
				'4',
			];
			?>
			<select name="FORMAT_QUANTITY">
			<?php
			foreach ($selectList as $option):
				?>
				<option value="<?= $option; ?>"<?= ($val === $option ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_FORMAT_QUANTITY_' . $option); ?></option>
				<?php
			endforeach;
			unset($option, $selectList);
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SMO_VALUE_PRECISION_TITLE'); ?>:
		</td>
		<td>
			<?php
			$val = (int)Option::get('sale', 'value_precision');
			?>
			<select name="VALUE_PRECISION">
			<?php
			for ($i = 0; $i <= 4; $i++):
				?>
				<option value="<?= $i; ?>>"<?= ($i === $val ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_VALUE_PRECISION_' . $i); ?></option>
				<?php
			endfor;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_DEF_CURR'); ?>
		</td>
		<td>
			<?php
			echo CCurrency::SelectBox(
				'CURRENCY_DEFAULT',
				Option::get('sale', 'default_currency'),
				'',
				true,
				''
			);
			?>
		</td>
	</tr>
	<?php
	if (CBXFeatures::IsFeatureEnabled('SaleAffiliate'))
	{
		?>
	<tr>
		<td>
			<?= Loc::getMessage('SMO_AFFILIATE_PLAN_TYPE'); ?>:
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'affiliate_plan_type');
			?>
			<select name="affiliate_plan_type">
				<option value="N"<?= ($val === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_AFFILIATE_PLAN_TYPE_N'); ?></option>
				<option value="S"<?= ($val === 'S' ? ' selected' : ''); ?>><?= Loc::getMessage('SMO_AFFILIATE_PLAN_TYPE_S'); ?></option>
			</select>
		</td>
	</tr>
		<?php
	}
	?>
	<tr>
		<td>
			<label for="EXPIRATION_PROCESSING_EVENTS"><?= Loc::getMessage('SALE_EXPIRATION_PROCESSING_EVENTS'); ?></label>
		</td>
		<td>
			<?php
			$valExpirationProcessingEvents = Option::get('sale', 'expiration_processing_events');
			?>
			<input type="hidden" name="EXPIRATION_PROCESSING_EVENTS" id="EXPIRATION_PROCESSING_EVENTS_hidden" value="N">
			<input type="checkbox" name="EXPIRATION_PROCESSING_EVENTS" id="EXPIRATION_PROCESSING_EVENTS" value="Y"<?= ($valExpirationProcessingEvents === 'Y' ? ' checked' : ''); ?>>
		</td>
	</tr>

	<tr>
		<td>
			<label for='ORDER_HISTORY_LOG_LEVEL'><?= Loc::getMessage('SALE_ORDER_HISTORY_LOG_LEVEL'); ?></label>
		</td>
		<td>
			<?php
			$valOrderHistoryLogLevel = (int)Option::get('sale', 'order_history_log_level');
			?>
			<input type="hidden" name="ORDER_HISTORY_LOG_LEVEL" id="ORDER_HISTORY_LOG_LEVEL_hidden" value="0">
			<input type="checkbox" name="ORDER_HISTORY_LOG_LEVEL" id="ORDER_HISTORY_LOG_LEVEL" value="1"<?= ($valOrderHistoryLogLevel === 1 ? ' checked' : ''); ?>>
		</td>
	</tr>
	<tr>
		<td>
			<label for="ORDER_HISTORY_ACTION_LOG_LEVEL"><?= Loc::getMessage('SALE_ORDER_HISTORY_ACTION_LOG_LEVEL'); ?></label>
		</td>
		<td>
			<?php
			$valOrderHistoryActionLogLevel = (int)Option::get('sale', 'order_history_action_log_level');
			?>
			<input type="hidden" name="ORDER_HISTORY_ACTION_LOG_LEVEL" id="ORDER_HISTORY_ACTION_LOG_LEVEL_hidden" value="0">
			<input type="checkbox" name="ORDER_HISTORY_ACTION_LOG_LEVEL" id="ORDER_HISTORY_ACTION_LOG_LEVEL" value="1"<?= ($valOrderHistoryActionLogLevel === 1 ? ' checked' : ''); ?>>
		</td>
	</tr>

	<tr>
		<td valign="top">
			<?= Loc::getMessage('SALE_IS_SHOP'); ?>
		</td>
		<td>
			<select name="SHOP_SITE[]" multiple size="5">
			<?php
			foreach ($siteList as $val)
			{
				$site = Option::get('sale', 'SHOP_SITE_' . $val['ID'], '');
				?>
				<option value="<?= $val['SAFE_ID']; ?>"<?= ($site === $val['ID'] ? ' selected' : ''); ?>><?= $val['SAFE_NAME'] .' (' . $val['SAFE_ID'] . ')'; ?></option>
				<?php
			}
			unset($site, $val);
			?>
			</select>
		</td>
	</tr>

	<!-- ps success and fail paths -->
	<tr>
		<td>
			<?= Loc::getMessage('SALE_PS_SUCCESS_PATH'); ?>
		</td>
		<td>
			<input type="text" name="sale_ps_success_path" size="40" value="<?= htmlspecialcharsbx(Option::get('sale', 'sale_ps_success_path')); ?>">
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_PS_FAIL_PATH'); ?>
		</td>
		<td>
			<input type="text" name="sale_ps_fail_path" size="40" value="<?=htmlspecialcharsbx(Option::get('sale', 'sale_ps_fail_path')); ?>">
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage("SALE_ALLOW_PAY_STATUS"); ?>:
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'allow_pay_status');
			?>
			<select name="ALLOW_PAY_STATUS">
				<?php
				foreach($statusesWithoutNoChange as $statusId => $safeName)
				{
					?><option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option><?php
				}
				?>
			</select>
		</td>
	</tr>
	<!-- start of check default type -->
	<?php
	if (Cashbox\Manager::isSupportedFFD105()):
		?>
		<tr class="heading" id="check_default_type_block">
			<td colspan="2"><?= Loc::getMessage('SALE_BLOCK_CHECK_TITLE'); ?></td>
		</tr>
		<tr>
			<td><?= Loc::getMessage('SALE_CHECK_TYPE_ON_PAY'); ?>:</td>
			<td>
				<?php
				$val = Option::get('sale', 'check_type_on_pay');
				$selectList = [
					'sell' => 'SALE_CHECK_TYPE_ON_PAY_SELL',
					'prepayment' => 'SALE_CHECK_TYPE_ON_PAY_PREPAYMENT',
					'advance' => 'SALE_CHECK_TYPE_ON_PAY_ADVANCE',
				];
				?>
				<select name="CHECK_TYPE_ON_PAY">
				<?php
				foreach ($selectList as $option => $messageId):
					?>
					<option value="<?= $option; ?>" <?=($val === $option ? 'selected': ''); ?>><?= Loc::getMessage($messageId); ?></option>
					<?php
				endforeach;
				?>
				</select>
			</td>
		</tr>
	<?php
	endif;
	?>
	<!-- start of basket behavior in public -->
	<tr class="heading" id="basket_public_behavior_block">
		<td colspan="2"><?= Loc::getMessage('SALE_BASKET_PUBLIC_BEHAVIOR_TITLE'); ?></td>
	</tr>
	<tr>
		<td><?= Loc::getMessage('SALE_BASKET_REFRESH_GAP'); ?>:</td>
		<td>
			<?php
			$refreshGapVal = (int)Option::get('sale', 'basket_refresh_gap');
			?>
			<input type="text" size="10" value="<?= $refreshGapVal; ?>" name="BASKET_REFRESH_GAP" id="basket_refresh_gap">
		</td>
	</tr>
	<?php
	if ($settings['use_sale_discount_only'] !== 'Y'):
		?>
		<tr id="basket_refresh_gap_warning" <?= ($refreshGapVal === 0 ? 'style="display: none;"' : ''); ?>>
			<td colspan="2" align="center">
				<div class="adm-info-message-wrap">
					<div class="adm-info-message">
						<div><?= Loc::getMessage('SALE_BASKET_REFRESH_GAP_WARNING'); ?></div>
					</div>
				</div>
			</td>
		</tr>
		<script>
			BX.bind(BX('basket_refresh_gap'), 'change', function(event){
				var target = BX.getEventTarget(event);
				var warning = BX('basket_refresh_gap_warning');

				if (BX.type.isDomNode(target) && BX.type.isDomNode(warning))
				{
					warning.style.display = parseInt(target.value) === 0 ? 'none' : '';
				}
			});
		</script>
	<?php
	endif;
	?>
	<!-- start of order guest view -->
	<tr class="heading" id="guest_order_view_block">
		<td colspan="2"><a name="section_guest_order_view"></a><?= Loc::getMessage('SALE_ALLOW_GUEST_ORDER_VIEW_TITLE'); ?></td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_ALLOW_GUEST_ORDER_VIEW'); ?>:
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'allow_guest_order_view');
			$rowStyle = ($val === 'Y' ? '' : 'style="display:none;"');
			?>
			<input type="hidden" value="N" name="ALLOW_GUEST_ORDER_VIEW">
			<input type="checkbox" value="Y" name="ALLOW_GUEST_ORDER_VIEW"<?= ($val === 'Y' ? ' checked' : ''); ?> onchange="showAllowGuestOrderViewPaths(this);">
		</td>
	</tr>
	<tr class="sale_allow_guest_order_view"<?= $rowStyle; ?>>
		<td valign='top'>
			<?= Loc::getMessage('SALE_ORDER_GUEST_VIEW_STATUS'); ?>
		</td>
		<td>
			<?php
			$guestStatuses = Option::get('sale', 'allow_guest_order_view_status');
			if ($guestStatuses !== '')
			{
				$guestStatuses = unserialize($guestStatuses, ['allowed_classes' => false]);
			}
			if (!is_array($guestStatuses))
			{
				$guestStatuses = [];
			}
			$statusList = array_slice($arStatuses,1);
			?>
			<select name="ALLOW_GUEST_ORDER_VIEW_STATUS[]" multiple size="3">
				<?php
				foreach($statusList as $id => $safeName):
					?>
					<option value="<?=$id?>" <?=(in_array($id, $guestStatuses) ? "selected" : "")?>><?= $safeName; ?>
					</option>
					<?php
				endforeach;
				?>
			</select>
		</td>
	</tr>
	<?php
	$paths = [];
	$serializedPass = Option::get('sale', 'allow_guest_order_view_paths');
	if ($serializedPass !== '')
	{
		$paths = unserialize($serializedPass, ['allowed_classes' => false]);
	}
	if (!is_array($paths))
	{
		$paths = [];
	}
	foreach($siteList as $site)
	{
		?>
		<tr class="sale_allow_guest_order_view" <?= $rowStyle; ?>>
			<td>
				<?= Loc::getMessage(
					'SALE_ALLOW_GUEST_ORDER_VIEW_PATH',
					[
						'#SITE_ID#' => $site['ID']
					]
				); ?>:
			</td>
			<td>
				<input type="text" size="40" value="<?= htmlspecialcharsbx($paths[$site["ID"]] ?? ''); ?>" name="ALLOW_GUEST_ORDER_VIEW_PATH[<?= $site['SAFE_ID']; ?>]">
			</td>
		</tr>
		<?php
	}
	unset($site);
	?>
	<tr class="sale_allow_guest_order_view" <?= $rowStyle; ?>>
		<td>
			<?= Loc::getMessage('SALE_ALLOW_GUEST_ORDER_VIEW_EXAMPLE'); ?>:
		</td>
		<td>
			/personal/orders/#order_id#
		</td>
	</tr>
	<!-- end of order guest view -->
	<?php
	unset($rowStyle);

	if (!(Loader::includeModule('crm') && !CCrmSaleHelper::isWithOrdersMode())):
		?>
		<tr class="heading">
			<td colspan="2"><a name="section_reservation"></a><?= Loc::getMessage('BX_SALE_SETTINGS_SECTION_RESERVATION'); ?></td>
		</tr>
		<tr>
			<td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_PRODUCT_RESERVE_CONDITION'); ?></td>
			<td width="60%"><select name="product_reserve_condition">
				<?php
				foreach (Sale\Configuration::getReservationConditionList(true) as $reserveId => $reserveTitle)
				{
					?><option value="<?= $reserveId; ?>"<?php
						echo ($reserveId == $settings['product_reserve_condition'] ? ' selected' : '')
					?>><?= htmlspecialcharsbx($reserveTitle); ?></option>
					<?php
				}
				unset($reserveId, $reserveTitle);
				?>
			</select></td>
		</tr>
		<tr>
			<td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_PRODUCT_RESERVE_CLEAR_PERIOD'); ?></td>
			<td width="60%">
				<input type="text" name="product_reserve_clear_period" value="<?= $settings['product_reserve_clear_period']; ?>">
			</td>
		</tr>
	<?php
	endif;
	?>
	<tr class="heading">
		<td colspan="2"><?= Loc::getMessage('BX_SALE_SETTINGS_SECTION_LOCATIONS'); ?></td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_LOCATION_WIDGET_APPEARANCE'); ?>:
		</td>
		<td>
			<?php
			$widgetType = Option::get('sale', 'sale_location_selector_appearance');
			$selectList = [
				'steps' => 'SALE_LOCATION_SELECTOR_APPEARANCE_STEPS',
				'search' => 'SALE_LOCATION_SELECTOR_APPEARANCE_SEARCH',
			];
			?>
			<select name="sale_location_selector_appearance">
			<?php
			foreach ($selectList as $option => $messageId):
				?>
				<option value="<?= $option; ?>"<?= ($option === $widgetType ? ' selected' : ''); ?>><?= Loc::getMessage($messageId); ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr class="heading">
		<td colspan="2"><a name="section_discount"></a><?= Loc::getMessage('BX_SALE_SETTINGS_SECTION_DISCOUNT'); ?></td>
	</tr>
	<tr>
		<td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_USE_SALE_DISCOUNT_ONLY'); ?></td>
		<td width="60%">
			<input type="hidden" name="use_sale_discount_only" id="use_sale_discount_only_N" value="N">
			<input type="checkbox" name="use_sale_discount_only" id="use_sale_discount_only_Y" value="Y"<?= ($settings['use_sale_discount_only'] == 'Y' ? ' checked' : ''); ?>>
		</td>
	</tr>
	<script>
		BX.bind(BX('use_sale_discount_only_Y'), 'change', function(event){
			var target = BX.getEventTarget(event);
			var warning = BX('use_sale_discount_only_warning');

			if (BX.type.isDomNode(target) && BX.type.isDomNode(warning))
			{
				warning.style.display = target.checked ? 'none' : '';
			}
		});
	</script>
	<tr id="use_sale_discount_only_warning" <?= ($settings['use_sale_discount_only'] === 'Y' || $refreshGapVal === 0 ? 'style="display: none;"' : ''); ?>>
		<td colspan="2" align="center">
			<div class="adm-info-message-wrap">
				<div class="adm-info-message">
					<div><?= Loc::getMessage('SALE_USE_SALE_DISCOUNT_ONLY_WARNING'); ?></div>
				</div>
			</div>
		</td>
	</tr>
	<tr>
		<td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_PERCENT_FROM_BASE_PRICE'); ?></td>
		<td width="60%">
			<input type="hidden" name="get_discount_percent_from_base_price" id="get_discount_percent_from_base_price_N" value="N">
			<input type="checkbox" name="get_discount_percent_from_base_price" id="get_discount_percent_from_base_price_Y" value="Y"<?= ($settings['get_discount_percent_from_base_price'] == 'Y' ? ' checked' : ''); ?>>
		</td>
	</tr>
	<tr id="tr_discount_apply_mode" style="display: <?=($settings['use_sale_discount_only'] == 'Y' ? 'none' : 'table-row'); ?>">
		<td width="40%"><?= Loc::getMessage('BX_SALE_SETTINGS_OPTION_DISCOUNT_APPLY_MODE'); ?></td>
		<td width="60%">
			<select name="discount_apply_mode" style="max-width: 300px;">
			<?php
			$modeList = Sale\Discount::getApplyModeList(true);
			foreach ($modeList as $modeId => $modeTitle)
			{
				?><option value="<?=$modeId; ?>"<?=($modeId == $settings['discount_apply_mode'] ? ' selected' : ''); ?>><?= htmlspecialcharsbx($modeTitle); ?></option><?php
			}
			unset($modeTitle, $modeId, $modeList);
			?>
			</select>
		</td>
	</tr>

	<!-- Recommended products -->
	<tr class="heading">
		<td colspan="2"><?= Loc::getMessage('SALE_P2P'); ?></td>
	</tr>
	<tr>
		<td align="right" width="40%">
			<label for="p2p_allow_collect_data"><?= Loc::getMessage('SALE_P2P_COLLECT_DATA'); ?></label>
		</td>
		<td width="60%">
			<input type="hidden" name="SALE_P2P_ALLOW_COLLECT_DATA" value="N" id="p2p_allow_collect_data_hidden">
			<input type="checkbox" name="SALE_P2P_ALLOW_COLLECT_DATA" value="Y" id="p2p_allow_collect_data"<?= (Option::get('sale', 'p2p_allow_collect_data') === 'Y' ? ' checked' : ''); ?>>
		</td>
	</tr>
	<tr>
		<td valign="top">
			<?= Loc::getMessage('SALE_P2P_STATUS_LIST'); ?>
		</td>
		<td>
			<?php
			$recStatuses = Option::get('sale', 'p2p_status_list');
			if ($recStatuses !== '')
			{
				$recStatuses = unserialize($recStatuses, ['allowed_classes' => false]);
			}
			if (!is_array($recStatuses))
			{
				$recStatuses = [];
			}

			$p2pStatusesList = array_slice($arStatuses, 1);
			$p2pStatusesList = array_merge(
				$p2pStatusesList,
				[
					'F_CANCELED' => htmlspecialcharsbx(Loc::getMessage('F_CANCELED')),
					'F_DELIVERY' => htmlspecialcharsbx(Loc::getMessage('F_DELIVERY')),
					'F_PAY' => htmlspecialcharsbx(Loc::getMessage('F_PAY')),
					'F_OUT' => htmlspecialcharsbx(Loc::getMessage('F_OUT')),
				]
			);
			?>
			<select name="SALE_P2P_STATUS_LIST[]" multiple size="5">
				<?php
				foreach($p2pStatusesList as $id => $safeName):
					?>
					<option value="<?=$id?>"<?= (in_array($id, $recStatuses) ? ' selected' : '')?>><?= $safeName; ?>
					</option>
					<?php
				endforeach;
				?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_P2P_STATUS_PERIOD'); ?>
		</td>
		<td>
			<input type="text" size="5" value="<?= (int)Option::get('sale', 'p2p_del_period'); ?>" name="p2p_del_period">
		</td>
	</tr>

	<tr>
		<td>
			<?= Loc::getMessage('SALE_P2P_EXP_DATE'); ?>
		</td>
		<td>
			<input type="text" size="5" value="<?= (int)Option::get('sale', 'p2p_del_exp'); ?>" name="p2p_del_exp">
		</td>
	</tr>

	<!-- Order history cleaner -->
	<tr class="heading">
		<td colspan="2"><?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_TITLE'); ?></td>
	</tr>
	<tr>
		<td align="right" width="40%">
			<label for="order_changes_cleaner_active"><?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_SWITCHER'); ?></label>
		</td>
		<td width="60%">
			<input type="hidden" name="order_changes_cleaner_active" value="N" id="order_changes_cleaner_active_hidden">
			<input type="checkbox" name="order_changes_cleaner_active" value="Y" id="order_changes_cleaner_active"<?= (Option::get('sale', 'order_changes_cleaner_active') === 'Y' ? ' checked' : ''); ?>>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_DAYS'); ?>
		</td>
		<td>
			<input type="text" size="5" value="<?= (int)Option::get('sale', 'order_changes_cleaner_days'); ?>" name="order_changes_cleaner_days">
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_ORDER_HISTORY_CLEANER_BY_HIT'); ?>
		</td>
		<td>
			<input type="text" size="5" value="<?= (int)Option::get('sale', 'order_changes_cleaner_limit'); ?>" name="order_changes_cleaner_limit">
		</td>
	</tr>
	<!-- /Recommended products -->
	<?php
	if (CBXFeatures::IsFeatureEnabled('SaleAccounts'))
	{
		?>
	<tr class="heading">
		<td colspan="2"><?= Loc::getMessage('SALE_AMOUNT_NAME'); ?></td>
	</tr>
	<tr>
		<td colspan="2" align="center">
			<table cellspacing="0" cellpadding="0" border="0" class="internal">
				<tr class="heading">
					<td valign="top">
						<?= Loc::getMessage('SALE_AMOUNT_VAL'); ?>
					</td>
					<td valign="top">
						<?= Loc::getMessage('SALE_AMOUNT_CURRENCY'); ?>
					</td>
				</tr>
				<?php
				$lastCurrency = '';
				$val = Option::get('sale', 'pay_amount');
				if ($val !== '')
				{
					$amountList = unserialize($val, ['allowed_classes' => false]);
					if (!is_array($amountList))
					{
						$amountList = [];
					}
					foreach($amountList as $amount)
					{
						?>
						<tr>
							<td><input type="text" name="amount_val[]" value="<?= (float)($amount['AMOUNT'] ?? 0); ?>"></td>
							<td><?= CCurrency::SelectBox(
								'amount_currency[]',
								$amount['CURRENCY'] ?? '',
								'',
								true,
								''
								);
							?></td>
						</tr>
						<?php
						$lastCurrency = $amount['CURRENCY'] ?? '';
					}
					unset($amountList);
				}
				?>
				<tr>
					<td><input type="text" name="amount_val[]" value=""></td>
					<td><?= CCurrency::SelectBox(
							'amount_currency[]',
							$lastCurrency
						);
						?>
					</td>
				</tr>
				<tr>
					<td><input type="text" name="amount_val[]" value=""></td>
					<td><?= CCurrency::SelectBox(
							'amount_currency[]',
							$lastCurrency
						);
						?>
					</td>
				</tr>
				<tr>
					<td><input type="text" name="amount_val[]" value=""></td>
					<td><?= CCurrency::SelectBox(
							'amount_currency[]',
							$lastCurrency
						);
						?>
					</td>
				</tr>
			</table>
		</td>
	</tr>
		<?php
	}
	?>
	<tr>
		<td colspan="2">
			<?php
			$arReminder = [];
			$reminder = Option::get('sale', 'pay_reminder');
			if ($reminder !== '')
			{
				$arReminder = unserialize($reminder, ['allowed_classes' => false]);
			}
			if (!is_array($arReminder))
			{
				$arReminder = [];
			}

			$arSubscribeProd = [];
			$subscribeProd = Option::get('sale', 'subscribe_prod');
			if ($subscribeProd !== '')
			{
				$arSubscribeProd = unserialize($subscribeProd, ['allowed_classes' => false]);
			}
			if (!is_array($arSubscribeProd))
			{
				$arSubscribeProd = [];
			}

			$aTabs2 = [];
			foreach($siteList as $val)
			{
				$aTabs2[] = [
					'DIV' => 'reminder' . $val['SAFE_ID'],
					'TAB' => '['.$val['SAFE_ID'].'] ' . $val['SAFE_NAME'],
					'TITLE' => '[' . $val['SAFE_ID'] . '] ' . $val['SAFE_NAME'],
				];
			}
			$tabControl2 = new CAdminViewTabControl('tabControl2', $aTabs2);
			$tabControl2->Begin();
			foreach($siteIdList as $siteId)
			{
				$arStores = [];
				if (Loader::includeModule('catalog'))
				{
					$dbStore = CCatalogStore::GetList(
						[
							'SORT' => 'DESC',
							'ID' => 'ASC',
						],
						[
							'ACTIVE' => 'Y',
							'SHIPPING_CENTER' => 'Y',
							'+SITE_ID' => $siteId,
						]
					);
					while ($arStore = $dbStore->GetNext())
					{
						$arStore['ID'] = (int)$arStore['ID'];
						$arStores[] = $arStore;
					}
					unset($arStore, $dbStore);
				}
				$tabControl2->BeginNextTab();
				?>
				<table cellspacing="5" cellpadding="0" border="0" width="100%" align="center">
					<!-- default store -->
					<?php
					$deductStore = (int)Option::get('sale', 'deduct_store_id', '', $siteId);

					$showRow = (count($arStores) > 1 && $valDeductOnDelivery === 'Y');
					$display = $showRow ? 'table-row' : 'none';
					?>
					<tr class="default_deduct_store_control" style="display:<?= $display; ?>" id="default_deduct_store_control_<?= $siteId; ?>">
						<td align="right" width="40%"><?= Loc::getMessage('SALE_DEDUCT_STORE'); ?></td>
						<td width="60%">
							<select name="defaultDeductStore[<?= $siteId; ?>][id]" id="default_store_select_<?= $siteId; ?>">
								<?php
								foreach ($arStores as $storeId => $arStore):
								?>
									<option value="<?=$arStore["ID"]?>"<?= ($deductStore === $arStore['ID'] ? ' selected' : '');  ?>><?= $arStore['TITLE'] . ' ['. $arStore['ID'] . ']'; ?></option>
								<?php
								endforeach;
								?>
							</select>
							<input type="hidden" id="default_store_select_save_<?= $siteId; ?>" name="defaultDeductStore[<?= $siteId; ?>][save]" value="<?= ($showRow ? 'Y' : 'N'); ?>">
						</td>
					</tr>
					<!-- end of default store -->

					<tr class="heading">
						<td colspan="2"><?= Loc::getMessage('SMO_PRODUCT_SUBSCRIBE'); ?></td>
					</tr>
					<tr>
						<td align="right" width="40%"><label for="notify-<?=$siteId?>"><?= Loc::getMessage('SALE_NOTIFY_PRODUCT_USE'); ?></label></td>
						<td width="60%"><input type="checkbox" name="subscribProd[<?=$siteId?>][use]" value="Y" id="notify-<?=$siteId?>"<?= (($arSubscribeProd[$siteId]['use'] ?? 'N') === 'Y' ? ' checked' : ''); ?>></td>
					</tr>
					<tr>
						<td align="right"><?= Loc::getMessage("SALE_NOTIFY_PRODUCT")?></td>
						<td><input type="text" name="subscribProd[<?=$siteId?>][del_after]" value="<?= (int)($arSubscribeProd[$siteId]["del_after"] ?? 0); ?>" size="5" id="del-after-<?=$siteId?>"></td>
					</tr>
					<tr class="heading">
						<td colspan="2"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER")?></td>
					</tr>
					<tr>
						<td align="right" width="40%"><label for="use-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_USE")?>:</label></td>
						<td width="60%"><input type="checkbox" name="reminder[<?=$siteId?>][use]" value="Y" id="use-<?=$siteId?>"<?= (($arReminder[$siteId]["use"] ?? 'N') === "Y" ? ' checked' : ''); ?>></td>
					</tr>
					<tr>
						<td align="right"><label for="after-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_AFTER")?>:</label></td>
						<td><input type="text" name="reminder[<?=$siteId?>][after]" value="<?= (int)($arReminder[$siteId]["after"] ?? 0); ?>" size="5" id="after-<?=$siteId?>"></td>
					</tr>
					<tr>
						<td align="right"><label for="frequency-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_FREQUENCY")?>:</label></td>
						<td><input type="text" name="reminder[<?=$siteId?>][frequency]" value="<?= (int)($arReminder[$siteId]["frequency"] ?? 0); ?>" size="5" id="frequency-<?=$siteId?>"></td>
					</tr>
					<tr>
						<td align="right"><label for="period-<?=$siteId?>"><?= Loc::getMessage("SMO_ORDER_PAY_REMINDER_PERIOD")?>:</label></td>
						<td><input type="text" name="reminder[<?=$siteId?>][period]" value="<?= (int)($arReminder[$siteId]["period"] ?? 0); ?>" size="5" id="period-<?=$siteId?>"></td>
					</tr>
				</table>
				<?php
			}
			$tabControl2->End();
			?>
		</td>
	</tr>
	<?php
	$tabControl->BeginNextTab();
	?>
<script type="text/javascript">
var cur_site = {WEIGHT:'<?=CUtil::JSEscape($siteList[0]["ID"])?>',ADDRESS:'<?=CUtil::JSEscape($siteList[0]["ID"])?>'};
function changeSiteList(value, add_id)
{
	var SLHandler = document.getElementById(add_id + '_site_id');
	SLHandler.disabled = value;
}

function changeStoreDeductCondition(value, control_id)
{
	var SLDeductCondition = document.getElementById(control_id);
	SLDeductCondition.disabled = value;
}

function selectSite(current, add_id)
{
	if (current == cur_site[add_id]) return;

	var last_handler = document.getElementById('par_' + add_id + '_' +cur_site[add_id]);
	var current_handler = document.getElementById('par_' + add_id + '_' + current);
	var CSHandler = document.getElementById(add_id + '_current_site');

	last_handler.style.display = 'none';
	current_handler.style.display = 'inline';

	cur_site[add_id] = current;
	CSHandler.value = current;

	return;
}

function setWeightValue(obj)
{
	if (!obj.value) return;

	var selectorUnit = document.forms.opt_form['weight_unit[' + cur_site['WEIGHT'] + ']'];
	var selectorKoef = document.forms.opt_form['weight_koef[' + cur_site['WEIGHT'] + ']'];

	if (selectorKoef && selectorUnit)
	{
		selectorKoef.value = obj.value;
		selectorUnit.value = obj.options[obj.selectedIndex].text;
	}
}

function showAllowGuestOrderViewPaths(target)
{
	var allowPaths = document.getElementsByClassName('sale_allow_guest_order_view');
	for (id in allowPaths)
	{
		if (allowPaths[id] instanceof Node)
		{
			if (target.checked)
			{
				allowPaths[id].style.display = 'table-row';
			}
			else
			{
				allowPaths[id].style.display = 'none';
			}
		}
	}
}

function allowAutoDelivery(value)
{
	var allowDeliveryCheckbox = document.getElementById('PAYED_2_ALLOW_DELIVERY');

	if (value === false) {
		allowDeliveryCheckbox.disabled = true;
		allowDeliveryCheckbox.checked = false;
	} else {
		allowDeliveryCheckbox.disabled = false;
	}
}
</script>
	<?php
	$differentWeight = Option::get('sale', 'WEIGHT_different_set') === 'Y';
	?>
	<tr>
		<td valign="top" width="40%"><?= Loc::getMessage('SMO_PAR_DIF_SETTINGS'); ?></td>
		<td valign="top" width="60%">
			<input type="hidden" name="WEIGHT_dif_settings" value="N" id="dif_settings_hidden">
			<input type="checkbox" name="WEIGHT_dif_settings" value="Y" id="dif_settings" <?= ($differentWeight ? ' checked' : ''); ?> onclick="changeSiteList(!this.checked, 'WEIGHT')">
		</td>
	</tr>
	<tr>
		<td><?= Loc::getMessage('SMO_PAR_SITE_LIST'); ?></td>
		<td>
			<select name="site" id="WEIGHT_site_id"<?= ($differentWeight ? '' : ' disabled'); ?> onchange="selectSite(this.value, 'WEIGHT')">
			<?php
			foreach ($siteList as $site)
			{
				?>
				<option value="<?= $site['SAFE_ID']; ?>"><?= $site['SAFE_NAME']; ?></option>
				<?php
			}
			unset($site);
			?></select>
			<input type="hidden" name="WEIGHT_current_site" id="WEIGHT_current_site" value="<?=$siteList[0]['SAFE_ID']; ?>">
		</td>
	</tr>
	<tr>
		<td valign="top" colspan="2">
		<?php
		$arUnitList = CSaleMeasure::GetList('W');
		if (!is_array($arUnitList))
		{
			$arUnitList = [];
		}
		$firstSite = true;
		foreach ($siteList as $site):
			?>
			<div id="par_WEIGHT_<?= $site['SAFE_ID']; ?>" style="display: <?= ($firstSite ? 'inline' : 'none'); ?>;">
			<table cellpadding="0" cellspacing="2" class="adm-detail-content-table edit-table">
			<tr class="heading">
				<td align="center" colspan="2"><?= Loc::getMessage('SMO_PAR_SITE_PARAMETERS'); ?></td>
			</tr>
			<tr>
				<td width="40%" class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_PAR_SITE_WEIGHT_UNIT_SALE'); ?></td>
				<td width="60%" class="adm-detail-content-cell-r">
					<select name="weight_unit_tmp[<?= $site['SAFE_ID']; ?>]" onchange="setWeightValue(this)">
					<?php
					$selectedWeightUnit = Option::get(
						'sale',
						'weight_unit',
						Loc::getMessage('SMO_PAR_WEIGHT_UNIT_GRAMM'),
						$site['ID']
					);
					foreach ($arUnitList as $key => $arM)
					{
						?>
						<option value="<?= (float)$arM['KOEF']; ?>"<?= ($selectedWeightUnit === $arM['NAME'] ? ' selected' : ''); ?>><?= htmlspecialcharsbx($arM['NAME']); ?></option>
						<?php
					}
					?></select>
				</td>
			</tr>
			<tr>
				<td class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_PAR_WEIGHT_UNIT'); ?></td>
				<td class="adm-detail-content-cell-r">
					<input type="text" name="weight_unit[<?= $site['SAFE_ID']; ?>]" size="5" value="<?= htmlspecialcharsbx($selectedWeightUnit); ?>">
				</td>
			</tr>
			<tr>
				<td class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_PAR_WEIGHT_KOEF'); ?></td>
				<td class="adm-detail-content-cell-r">
					<input type="text" name="weight_koef[<?= $site['SAFE_ID']; ?>]" size="5" value="<?=htmlspecialcharsbx(Option::get('sale', 'weight_koef', 1, $site['ID'])); ?>">
				</td>
			</tr>
			</table>
			</div>
		<?php
			$firstSite = false;
		endforeach;
		unset($site, $firstSite);
		?>
		</td>
	</tr>
<?php
$tabControl->BeginNextTab();
	$differentAddress = Option::get('sale', 'ADDRESS_different_set') === 'Y';
?>
	<tr>
		<td width="40%"><?= Loc::getMessage('SMO_DIF_SETTINGS'); ?></td>
		<td width="60%">
			<input type="hidden" name="ADDRESS_dif_settings" value="N" id="ADDRESS_dif_settings_hidden">
			<input type="checkbox" name="ADDRESS_dif_settings" value="Y" id="ADDRESS_dif_settings"<?= ($differentAddress ? ' checked' : ''); ?> onclick="changeSiteList(!this.checked, 'ADDRESS')">
		</td>
	</tr>
	<tr>
		<td><?= Loc::getMessage('SMO_SITE_LIST'); ?></td>
		<td>
			<select name="site" id="ADDRESS_site_id"<?= ($differentAddress ? '' : ' disabled'); ?> onchange="selectSite(this.value, 'ADDRESS')">
			<?php
			foreach ($siteList as $site):
				?>
				<option value="<?= $site['SAFE_ID']; ?>"><?= $site['SAFE_NAME']; ?></option>
				<?php
			endforeach;
			unset($site);
			?>
			</select>
			<input type="hidden" name="ADDRESS_current_site" id="ADDRESS_current_site" value="<?= $siteList[0]['SAFE_ID']; ?>">
		</td>
	</tr>
	<tr>
		<td colspan="2" valign="top">
<?php
$firstSite = true;
foreach ($siteList as $site):
	$location_zip = Option::get('sale', 'location_zip', '', $site['ID']);
	$location = Option::get('sale', 'location', '', $site['ID']);

	if (!$lpEnabled)
	{
		$location = (int)$location;
	}

	if (!$lMigrated)
	{
		$sales_zone_countries = SalesZone::getCountriesIds($site['ID']);
		$sales_zone_regions = SalesZone::getRegionsIds($site['ID']);
		$sales_zone_cities = SalesZone::getCitiesIds($site['ID']);
	}

	if ($location_zip === '0')
	{
		$location_zip = '';
	}
?>
		<div id="par_ADDRESS_<?= $site['SAFE_ID']; ?>" style="display: <?= ($firstSite ? 'inline' : 'none'); ?>">
		<table cellpadding="0" cellspacing="2" border="0" width="60%" align="center">
			<tr class="heading">
				<td align="center" colspan="2"><?= Loc::getMessage('SMO_PAR_SITE_ADRES'); ?></td>
			</tr>
			<tr>
				<td width="40%" class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_LOCATION_ZIP'); ?></td>
				<td width="60%" class="adm-detail-content-cell-r">
					<input type="text" name="location_zip[<?= $site['SAFE_ID']; ?>]" value="<?= htmlspecialcharsbx($location_zip); ?>" size="5">
				</td>
			</tr>
			<tr>
				<td class="adm-detail-content-cell-l"><?= Loc::getMessage('SMO_LOCATION_SHOP_CITY'); ?>:</td>
				<td class="adm-detail-content-cell-r">
					<?php
					if($lpEnabled):
						$APPLICATION->IncludeComponent(
							'bitrix:sale.location.selector.' . $widgetType,
							'',
							[
								'ID' => '',
								'CODE' => $location,
								'INPUT_NAME' => 'location['.$site['SAFE_ID'].']',
								'PROVIDE_LINK_BY' => 'code',
								'SHOW_ADMIN_CONTROLS' => 'N',
								'SELECT_WHEN_SINGLE' => 'N',
								'FILTER_BY_SITE' => 'N',
								'SHOW_DEFAULT_LOCATIONS' => 'N',
								'SEARCH_BY_PRIMARY' => 'Y',
							],
							false,
							[
								'HIDE_ICONS' => 'Y',
							]
						);
					else:
						?>
						<select name="location[<?= $site['SAFE_ID']; ?>]">
							<option value=""></option>
							<?php
							$dbLocationList = CSaleLocation::GetList(
								[
									'COUNTRY_NAME_LANG' => 'ASC',
									'REGION_NAME_LANG' => 'ASC',
									'CITY_NAME_LANG' => 'ASC',
								],
								[],
								LANGUAGE_ID
							);
							while ($arLocation = $dbLocationList->GetNext()):
								$arLocation['ID'] = (int)$arLocation['ID'];
								$locationName = (string)$arLocation['COUNTRY_NAME'];
								$arLocation['REGION_NAME'] = (string)$arLocation['REGION_NAME'];
								$arLocation['CITY_NAME'] = (string)$arLocation['CITY_NAME'];

								if ($arLocation['REGION_NAME'] !== '')
								{
									if ($locationName !== '')
									{
										$locationName .= ' - ';
									}
									$locationName .= $arLocation['REGION_NAME'];
								}
								if ($arLocation['CITY_NAME'] !== '')
								{
									if ($locationName !== '')
										$locationName .= ' - ';
									$locationName .= $arLocation['CITY_NAME'];
								}
								if ($locationName === '')
								{
									$locationName = $arLocation['ID'];
								}
								?>
								<option value="<?= $arLocation['ID']; ?>"<?= ($location === $arLocation['ID'] ? ' selected' : ''); ?>><?= htmlspecialcharsbx($locationName); ?></option>
								<?php
							endwhile;
							?>
						</select>
						<?php
					endif;
					?>
				</td>
			</tr>
			<?php
			if(!$lpEnabled):
				?>
			<tr>
				<td class="adm-detail-content-cell-l" valign="top">
					<?= Loc::getMessage('SMO_LOCATION_SALES_ZONE'); ?>:
					<script>
						BX.ready( function(){
							BX.bind(BX("sales_zone_countries_<?=$site['SAFE_ID']; ?>"), 'change', BX.Sale.Options.onCountrySelect);
							BX.bind(BX("sales_zone_regions_<?= $site['SAFE_ID']; ?>"), 'change', BX.Sale.Options.onRegionSelect);
						});
					</script>
				</td>
				<td class="adm-detail-content-cell-r">
					<?php
						$sales_zone_countries = SalesZone::getCountriesIds($site['ID']);
						$sales_zone_regions = SalesZone::getRegionsIds($site['ID']);
						$sales_zone_cities = SalesZone::getCitiesIds($site['ID']);
						?>
						<table><tr>
							<th><?= Loc::getMessage('SMO_LOCATION_COUNTRIES'); ?></th>
							<th><?= Loc::getMessage('SMO_LOCATION_REGIONS'); ?></th>
							<th><?= Loc::getMessage('SMO_LOCATION_CITIES'); ?></th>
						</tr><tr>
							<td>
								<select id="sales_zone_countries_<?= $site['SAFE_ID']; ?>" name="sales_zone_countries[<?= $site['SAFE_ID']; ?>][]" multiple size="10" class="sale-options-location-mselect">
									<option value=""<?= in_array('', $sales_zone_countries) ? ' selected' : ''; ?>><?= Loc::getMessage('SMO_LOCATION_ALL'); ?></option>
									<option value="NULL"<?=in_array('NULL', $sales_zone_countries) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_NO_COUNTRY'); ?></option>
									<?php
									$dbCountryList = CSaleLocation::GetCountryList(['NAME_LANG' => 'ASC']);
									while ($arCountry = $dbCountryList->fetch()):
										?>
										<option value="<?=(int)$arCountry['ID']?>"<?=in_array($arCountry['ID'], $sales_zone_countries) ? ' selected' : ''?>><?= htmlspecialcharsbx($arCountry['NAME_LANG']); ?></option>
										<?php
									endwhile;
									unset($dbCountryList);
									?>
								</select>
							</td><td>
								<select id="sales_zone_regions_<?= $site['SAFE_ID']; ?>" name="sales_zone_regions[<?= $site['SAFE_ID']; ?>][]" multiple size="10" class="sale-options-location-mselect">
									<option value=""<?= in_array('', $sales_zone_regions) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_ALL'); ?></option>
									<option value="NULL"<?= in_array('NULL', $sales_zone_regions) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_NO_REGION'); ?></option>
									<?php
									if (!in_array('', $sales_zone_countries)):
										$arRegions = SalesZone::getRegions($sales_zone_countries, LANGUAGE_ID);
										foreach ($arRegions as $regionId => $arRegionName):
											?>
											<option value="<?= $regionId; ?>"<?= in_array($regionId, $sales_zone_regions) ? ' selected' : ''; ?>><?= htmlspecialcharsbx($arRegionName); ?></option>
											<?php
										endforeach;
									endif;
									?>
								</select>
							</td><td>
							<select id="sales_zone_cities_<?= $site['SAFE_ID']; ?>" name="sales_zone_cities[<?= $site['SAFE_ID']; ?>][]" multiple size="10" class="sale-options-location-mselect">
								<option value=""<?= in_array('', $sales_zone_cities) ? ' selected' : ''?>><?= Loc::getMessage('SMO_LOCATION_ALL'); ?></option>
								<?php
								if (!in_array('', $sales_zone_regions)):
									$arCities = SalesZone::getCities($sales_zone_countries, $sales_zone_regions, LANGUAGE_ID);
									foreach($arCities as $cityId => $cityName):
										?>
										<option value="<?= $cityId; ?>"<?= in_array($cityId, $sales_zone_cities) ? ' selected' : ''?>><?= htmlspecialcharsbx($cityName); ?></option>
										<?php
									endforeach;
								endif;
								?>
							</select>
						</td>
						</tr></table>
				</td>
			</tr>
			<?php
			endif;
			?>
		</table>
		</div>
<?php
	$firstSite = false;
endforeach;
unset($site);
?>
		</td>
	</tr>
<?php
if (CBXFeatures::IsFeatureEnabled('SaleCCards') && Option::get('sale', 'use_ccards') === 'Y')
{
	$tabControl->BeginNextTab();

	if (!CSaleUserCards::CheckPassword())
	{
		?><tr>
			<td colspan="2"><?php
				CAdminMessage::ShowMessage(
					Loc::getMessage(
						'SMO_NO_VALID_PASSWORD',
						[
							'#ROOT#' => $_SERVER['DOCUMENT_ROOT'],
						]
					)
				);
			?></td>
		</tr><?php
	}
	?>
	<tr>
		<td valign="top" width="50%">
			<?= Loc::getMessage('SMO_PATH2CRYPT_FILE'); ?>
		</td>
		<td valign="middle" width="50%">
			<input type="text" size="40" value="<?= htmlspecialcharsbx(Option::get('sale', 'sale_data_file')); ?>" name="sale_data_file">
		</td>
	</tr>
	<tr>
		<td valign="top">
		<?= Loc::getMessage('SMO_CRYPT_ALGORITHM'); ?>
		</td>
		<td valign="middle">
				<?php
				$val = Option::get('sale', 'crypt_algorithm');
				$selectList = [
					'RC4' => 'RC4',
					'AES' => 'AES (Rijndael) - ' . Loc::getMessage('SMO_NEED_MCRYPT'),
					'3DES' => '3DES (Triple-DES) - ' . Loc::getMessage('SMO_NEED_MCRYPT'),
				];
				?>
				<select name="crypt_algorithm">
				<?php
				foreach ($selectList as $option => $message):
					?>
					<option value="<?= $option; ?>>"<?= ($val === $option ? ' selected' : ''); ?>><?= $message; ?>></option>
					<?php
				endforeach;
				unset($selectList);
				?>
				</select>
		</td>
	</tr>
	<?php
}

$tabControl->BeginNextTab();
?>
	<tr class="heading">
		<td colspan="2"><?= Loc::getMessage("SMO_ADDITIONAL_SITE_PARAMS")?></td>
	</tr>
	<tr>
		<td colspan="2" align="center">
		<table cellspacing="0" cellpadding="0" border="0" class="internal">
		<tr class="heading">
			<td valign="top">
				<?= Loc::getMessage('SALE_LANG'); ?>
			</td>
			<td valign="top">
				<?= Loc::getMessage('SALE_CURRENCY'); ?>
			</td>
			<td valign="top">
				<?= Loc::getMessage('SMO_GROUPS2SITE'); ?>
			</td>
		</tr>
		<?php
		$userGroupList = [];
		$dbGroups = CGroup::GetList('c_sort', 'asc', ['ANONYMOUS' => 'N']);
		while ($arGroup = $dbGroups->Fetch())
		{
			$arGroup['ID'] = (int)$arGroup['ID'];

			if ($arGroup['ID'] === 1 || $arGroup['ID'] === 2)
				continue;

			$userGroupList[] = [
				'ID' => $arGroup['ID'],
				'SAFE_NAME' => htmlspecialcharsbx($arGroup['NAME']),
			];
		}

		foreach($siteList as $site)
		{
			?>
			<tr>
				<td valign="top">
					[<a href="site_edit.php?LID=<?= $site['SAFE_ID']; ?>&lang=<?= LANGUAGE_ID; ?>" title="<?= htmlspecialcharsbx(Loc::getMessage('SALE_SITE_ALT')); ?>"><?= $site['SAFE_ID']; ?></a>] <?= $site['SAFE_NAME']; ?>
				</td>
				<td valign="top">
					<?php
					$arCurr = CSaleLang::GetByID($site['ID']);
					echo CCurrency::SelectBox(
						'CURRENCY_' . $site['SAFE_ID'],
						$arCurr['CURRENCY'] ?? '',
						Loc::getMessage('SALE_NOT_SET')
					);
					?>
				</td>
				<td valign="top">
					<?php
					$arCurrentGroups = [];
					$dbSiteGroupsList = CSaleGroupAccessToSite::GetList(
						[],
						[
							'SITE_ID' => $site['ID'],
						],
						false,
						false,
						[
							'GROUP_ID',
						]
					);
					while ($arSiteGroup = $dbSiteGroupsList->Fetch())
					{
						$arCurrentGroups[] = (int)$arSiteGroup['GROUP_ID'];
					}
					unset($arSiteGroup, $dbSiteGroupsList);

					unset($arGroup, $dbGroups);
					?>
					<select name="SITE_USER_GROUPS_<?= $site['SAFE_ID']; ?>[]" multiple size="5">
					<?php
					foreach ($userGroupList as $userGroup):
						?>
						<option value="<?= $userGroup['ID'] ?>"<?= (in_array($userGroup['ID'], $arCurrentGroups) ? ' selected' : ''); ?>><?= $userGroup['SAFE_NAME']; ?></option>
						<?php
					endforeach;
					?>
					</select>
				</td>
			</tr>
			<?php
		}
		?>
		</table>
		</td>
	</tr>
<?php
$tabControl->BeginNextTab();

require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/admin/group_rights.php';

$tabControl->BeginNextTab();
?>
	<tr class="heading">
		<td colspan='2'><?= Loc::getMessage('SALE_AUTO_ORDER_STATUS_TITLE'); ?></td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_PAY_TO_STATUS'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'status_on_paid');
			?>
			<select name="PAID_STATUS">
			<?php
			foreach($arStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage("SALE_HALF_PAY_TO_STATUS"); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'status_on_half_paid');
			?>
			<select name="HALF_PAID_STATUS">
			<?php
			foreach($arStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
			<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_CHANGE_ALLOW_DELIVERY_AFTER_PAID'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'status_on_change_allow_delivery_after_paid');
			$isPayed2AllowDelivery = Option::get('sale', 'status_on_payed_2_allow_delivery');

			if ($val === '')
			{
				$val = ($isPayed2AllowDelivery == 'Y') ? Sale\Configuration::ALLOW_DELIVERY_ON_FULL_PAY : 'N';
			}
			?>
			<select name="CHANGE_ALLOW_DELIVERY_AFTER_PAID">
				<option value="N"<?= ($val === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage('SALE_DENY_STATUS'); ?></option>
				<?php
				foreach (Sale\Configuration::getAllowDeliveryAfterPaidConditionList(true) as $payTypeId => $payTitle):
					?>
					<option value="<?= $payTypeId; ?>"<?= ($payTypeId === $val ? ' selected' : ''); ?>><?= htmlspecialcharsbx($payTitle); ?></option>
					<?php
				endforeach;
				?>
			</select>
		</td>
	</tr>
	<tr>
		<td colspan="2">
			&nbsp;
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_ALLOW_DELIVERY_TO_STATUS'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'status_on_allow_delivery');
			?>
			<select name="ALLOW_DELIVERY_STATUS">
			<?php
			foreach($arStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_ALLOW_DELIVERY_ONE_OF_TO_STATUS'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'status_on_allow_delivery_one_of');
			?>
			<select name="ALLOW_DELIVERY_ONE_OF_STATUS">
			<?php
			foreach($arStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_SHIPMENT_SHIPPED_TO_STATUS'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'status_on_shipped_shipment');
			?>
			<select name="SHIPMENT_SHIPPED_STATUS">
			<?php
			foreach($arStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_SHIPMENT_SHIPPED_ONE_OF_TO_STATUS'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'status_on_shipped_shipment_one_of');
			?>
			<select name="SHIPMENT_SHIPPED_ONE_OF_STATUS">
			<?php
			foreach($arStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr class='heading'>
		<td colspan='2'><?= Loc::getMessage('SALE_AUTO_SHIPMENT_STATUS_TITLE'); ?></td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_SHIPMENT_ALLOW_DELIVERY_TO_SHIPMENT_STATUS'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'shipment_status_on_allow_delivery');
			?>
			<select name="SHIPMENT_ALLOW_DELIVERY_TO_SHIPMENT_STATUS">
			<?php
			foreach ($delieryStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<?= Loc::getMessage('SALE_SHIPMENT_SHIPPED_TO_SHIPMENT_STATUS'); ?>
		</td>
		<td>
			<?php
			$val = Option::get('sale', 'shipment_status_on_shipped');
			?>
			<select name="SHIPMENT_SHIPPED_TO_SHIPMENT_STATUS">
			<?php
			foreach ($delieryStatuses as $statusId => $safeName):
				?>
				<option value="<?= $statusId; ?>"<?= ($val === $statusId ? ' selected' : ''); ?>><?= $safeName; ?></option>
				<?php
			endforeach;
			?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<label for="ALLOW_DEDUCTION_ON_DELIVERY"><?= Loc::getMessage('SALE_ALLOW_DEDUCTION_ON_DELIVERY'); ?></label>
		</td>
		<td>
			<?php
			//$valDeductOnDelivery = Option::get("sale", "allow_deduction_on_delivery", "");
			?>
			<input type="hidden" name="ALLOW_DEDUCTION_ON_DELIVERY" id="ALLOW_DEDUCTION_ON_DELIVERY_hidden" value="N">
			<input type="checkbox" name="ALLOW_DEDUCTION_ON_DELIVERY" id="ALLOW_DEDUCTION_ON_DELIVERY" value="Y"<?= ($valDeductOnDelivery === 'Y' ? ' checked' : ''); ?> onclick="javascript:toggleDefaultStores(this);">
			<script type="text/javascript">
				function toggleDefaultStores(el)
				{
					var elements = document.getElementsByClassName('default_deduct_store_control');
					for (var i = 0; i < elements.length; ++i)
					{
						var site_id = elements[i].id.replace('default_deduct_store_control_', ''),
							selector = BX("default_store_select_" + site_id);

						elements[i].style.display = (el.checked && selector.length > 0) ? 'table-row' : 'none';
						BX("default_store_select_save_" + site_id).value = (el.checked && selector.length > 0) ? "Y" : "N";
					}

				}
			</script>
		</td>
	</tr>
	<tr class="heading">
		<td colspan="2"><?= Loc::getMessage('SALE_AUTO_SHP_TR_STATUS_ON'); ?></td>
	</tr>
	<tr>
		<td><?= Loc::getMessage('SALE_TRACKING_CHECK_SWITCH'); ?>:</td>
		<td>
			<input id="sale-option-tracking-auto-switch_hidden" type="hidden" value="N" name="tracking_check_switch">
			<input id="sale-option-tracking-auto-switch" type="checkbox" value="Y" onClick="toggleTrackingAuto();" name="tracking_check_switch"<?= ($settings["tracking_check_switch"] === 'Y' ? ' checked' : ''); ?>>
		</td>
	</tr>
	<tr class="sale-option-tracking-auto">
		<td><?= Loc::getMessage('SALE_TRACKING_CHECK_PERIOD'); ?>:</td>
		<td><input type="text" name="tracking_check_period" value="<?= ($settings['tracking_check_period'] ?: '0'); ?>"></td>
	</tr>

	<tr class="heading sale-option-tracking-auto">
		<td colspan="2"><?= Loc::getMessage('SALE_AUTO_SHP_TR_STATUS_MAP'); ?></td>
	</tr>
	<?php
	$shipmentStatuses = [];
	$dbRes = Sale\Internals\StatusTable::getList([
		'select' => [
			'ID',
			'SORT',
			'NAME' => 'STATUS_LANG.NAME',
		],
		'filter' => [
			'=STATUS_LANG.LID' => LANGUAGE_ID,
			'=TYPE' => Sale\Internals\StatusTable::TYPE_SHIPMENT,
		],
		'order' => [
			'SORT' => 'ASC',
			'ID' => 'ASC',
		],
	]);
	while ($shipmentStatus = $dbRes->fetch())
	{
		$shipmentStatuses[$shipmentStatus['ID']] = htmlspecialcharsbx($shipmentStatus['NAME'] . ' [' . $shipmentStatus['ID'] . ']');
	}
	unset($dbRes);

	$trackingStatuses = Sale\Delivery\Tracking\Manager::getStatusesList();
	?><tr class="sale-option-tracking-auto"><td><b><?= Loc::getMessage("SALE_TRACKING_TSTATUSES")?></b></td><td><b><?= Loc::getMessage("SALE_TRACKING_SSTATUSES")?></b></td></tr><?php
	foreach($trackingStatuses as $trackingStatusId => $trackingStatusName):?>
		<tr class="sale-option-tracking-auto">
			<td><?=$trackingStatusName?>:</td>
			<td>
				<select name="tracking_map_statuses[<?=$trackingStatusId?>]">
					<option value=""><?= Loc::getMessage("SALE_TRACKING_NOT_USE")?></option>
					<?php
					foreach($shipmentStatuses as $statusId => $safeName):
						?>
						<option value="<?= $statusId; ?>"<?= (($settings['tracking_map_statuses'][$trackingStatusId] ?? '') === $statusId ? " selected" : ""); ?>><?= $safeName; ?></option>
						<?php
					endforeach;
					?>
				</select>
			</td>
		</tr>
	<?php
	endforeach;
	$tabControl->BeginNextTab();

	$filterValues = [];
	$serializedFilterValue = Option::get('sale', 'archive_params');
	if ($serializedFilterValue !== '')
	{
		$filterValues = unserialize($serializedFilterValue, ['allowed_classes' => false]);
	}
	if (!is_array($filterValues))
	{
		$filterValues = [];
	}
	if (isset($filterValues['LID']) && !isset($filterValues['@LID']))
	{
		$filterValues['@LID'] = $filterValues['LID'];
		unset($filterValues['LID']);
	}
	if (isset($filterValues['STATUS_ID']) && !isset($filterValues['@STATUS_ID']))
	{
		$filterValues['@STATUS_ID'] = $filterValues['STATUS_ID'];
		unset($filterValues['STATUS_ID']);
	}
	$enableRegularArchive = Option::get('sale', 'regular_archive_active') === 'Y';
	$archiveLimit = (int)Option::get('sale', 'archive_limit');
	$archiveTimeLimit = (int)Option::get('sale', 'archive_time_limit');
	?>
	<tr>
		<td>
			<label for="ORDER_ARCHIVE_REGULAR_ACCEPT"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_ACCEPT'); ?>:</label>
		</td>
		<td>
			<input type="hidden" name="archive_regular_accept" id="ORDER_ARCHIVE_REGULAR_ACCEPT_hidden" value="N">
			<input type="checkbox" name="archive_regular_accept" id="ORDER_ARCHIVE_REGULAR_ACCEPT" value="Y"<?= ($enableRegularArchive ? ' checked' : ''); ?>>
		</td>
	</tr>
	<tr>
		<td>
			<label for="archive_limit"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_LIMIT_BY_HIT'); ?>:</label>
		</td>
		<td>
			<input type="text" name="archive_limit" value="<?= $archiveLimit ?: 10; ?>" size="5" id="archive_limit">
		</td>
	</tr>
	<tr>
		<td><label for="archive_time_limit"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_MAX_TIME_BY_HIT'); ?>:</label></td>
		<td>
			<input type="text" name="archive_time_limit" value="<?= $archiveTimeLimit ?: 5; ?>" size="5" id="archive_time_limit">
			<?= Loc::getMessage("SALE_ORDER_ARCHIVE_SEC"); ?>
		</td>
	</tr>
	<?php
	if (!$enableRegularArchive)
	{
		?>
		<tr>
			<td align="center" colspan="2">
				<a href="sale_archive.php"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_FIRST_START_NOTE'); ?></a>
			</td>
		</tr>
		<?php
	}
	?>
	<tr class="heading">
		<td colspan="2"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_TITLE'); ?></td>
	</tr>
	<tr>
		<td><label for="archive_period"><?= Loc::getMessage('SALE_ORDER_ARCHIVE_PERIOD'); ?>:</label></td>
		<td><?php
		$filterValuePeriod = (int)($filterValues['PERIOD'] ?? 0);
		if ($filterValuePeriod <= 0)
		{
			$filterValuePeriod = 365;
		}
		?><input type="text" name="archive_period" value="<?= $filterValuePeriod; ?>" size="5" id="archive_period"></td>
	</tr>
	<tr>
		<td valign="top"><label for="archive_blocked_order_accept"><?= Loc::getMessage('ARCHIVE_BLOCKED_ORDER_ACCEPT'); ?>:</label></td>
		<td>
			<input type="hidden" name="archive_blocked_order_accept" id="archive_blocked_order_accept_hidden" value="N">
			<input type="checkbox" name="archive_blocked_order_accept" id="archive_blocked_order_accept" value="Y"<?= (Option::get('sale', 'archive_blocked_order') === 'Y' ? ' checked' : ''); ?>>
		</td>
	</tr>
	<?php
	if ($siteCount > 1)
	{
		$nonEmptyArchiveSites = !empty($filterValues['@LID']) && is_array($filterValues['@LID']);
	?>
		<tr valign="top">
			<td><label for="archive_site"><?=Loc::getMessage('SALE_LANG'); ?>:</label></td>
			<td>
				<select name="archive_site[]" id="archive_site" multiple size="<?=($siteCount < 5) ? $siteCount : 5; ?>">
					<?php
						foreach ($siteList as $site)
						{
							?>
							<option
								value="<?= $site['SAFE_ID']; ?>"
								<?php
									$checkedSite = true;
									if ($nonEmptyArchiveSites)
									{
										$checkedSite = in_array($site['ID'], $filterValues['@LID']);
									}
									if ($checkedSite)
									{
										echo ' selected';
									}
								?>
							>
								<?= $site['SAFE_NAME']; ?>
							</option>
							<?php
						}
					?>
				</select>
			</td>
		</tr>
	<?php
		unset($nonEmptyArchiveSites);
	}
	?>
	<tr>
		<td valign="top"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_STATUS")?>:</td>
		<td>
			<select name="archive_status_id[]" multiple size="3">
				<?php
				$statusesList = Sale\OrderStatus::getStatusesUserCanDoOperations(
					$USER->GetID(),
					array('view')
				);
				$allStatusNames = Sale\OrderStatus::getAllStatusesNames();
				$nonEmptyStatuses = !empty($filterValues['@STATUS_ID']) && is_array($filterValues['@STATUS_ID']);
				foreach($statusesList as  $statusCode)
				{
					if (!$statusName = $allStatusNames[$statusCode])
						continue;
					?>
					<option
						value="<?= htmlspecialcharsbx($statusCode) ?>"
						<?php
							$checkedStatus = true;
							if ($nonEmptyStatuses)
							{
								$checkedStatus = in_array($statusCode, $filterValues['@STATUS_ID']);
							}
							if ($checkedStatus)
							{
								echo " selected";
							}
						?>
					>
						[<?= htmlspecialcharsbx($statusCode) ?>] <?= htmlspecialcharsbx($statusName) ?>
					</option>
					<?php
				}
				unset($nonEmptyStatuses);
				?>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<label for="ORDER_ARCHIVE_PAYED"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_PAYED"); ?>:</label>
		</td>
		<td><?php
			$optionValue = $filterValues['=PAYED'] ?? '';
			if ($optionValue !== 'Y' && $optionValue !== 'N')
			{
				$optionValue = '';
			}
			?>
			<select name="archive_payed" id="ORDER_ARCHIVE_PAYED">
				<option value=""<?= ($optionValue === '' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_ALL"); ?></option>
				<option value="Y"<?= ($optionValue === 'Y' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_YES"); ?></option>
				<option value="N"<?= ($optionValue === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_NO")?></option>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<label for="ORDER_ARCHIVE_CANCELED"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_CANCELED"); ?>:</label>
		</td>
		<td><?php
			$optionValue = $filterValues['=CANCELED'] ?? '';
			if ($optionValue !== 'Y' && $optionValue !== 'N')
			{
				$optionValue = '';
			}
			?>
			<select name="archive_canceled" id="ORDER_ARCHIVE_CANCELED">
				<option value=""<?= ($optionValue === '' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_ALL"); ?></option>
				<option value="Y"<?= ($optionValue === 'Y' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_YES"); ?></option>
				<option value="N"<?= ($optionValue === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_NO"); ?></option>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			<label for="ORDER_ARCHIVE_DEDUCTED"><?= Loc::getMessage("SALE_ORDER_ARCHIVE_DEDUCTED"); ?>:</label>
		</td>
		<td><?php
			$optionValue = $filterValues['=DEDUCTED'] ?? '';
			if ($optionValue !== 'Y' && $optionValue !== 'N')
			{
				$optionValue = '';
			}
			?>
			<select name="archive_deducted" id="ORDER_ARCHIVE_DEDUCTED">
				<option value=""<?= ($optionValue === '' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_ALL"); ?></option>
				<option value="Y"<?= ($optionValue === 'Y' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_YES"); ?></option>
				<option value="N"<?= ($optionValue === 'N' ? ' selected' : ''); ?>><?= Loc::getMessage("SALE_ORDER_ARCHIVE_NO"); ?></option>
			</select>
		</td>
	</tr>
	<?php
	$tabControl->BeginNextTab();
	?>
	<div class="adm-numerator-use-template-checkbox-outer">
		<span class="adm-numerator-use-template-checkbox-title"><?= Loc::getMessage('NUMERATOR_NOT_USE_CHECKBOX_TITLE'); ?></span>
		<div class="adm-numerator-use-template-checkbox-inner">
			<input type="hidden" name="hideNumeratorSettings" id="hideNumeratorSettings_hidden" value="N">
			<input type="checkbox" class="adm-designed-checkbox" name="hideNumeratorSettings" id="hideNumeratorSettings"
				value="Y"
				<?php
				if ($numeratorForOrdersId==''):
					?>
					checked=""
					<?php
				endif;
				?>>
			<label class="adm-designed-checkbox-label" for="hideNumeratorSettings" title=""></label>
		</div>
	</div>
	<?php
	$APPLICATION->IncludeComponent(
		'bitrix:main.numerator.edit',
		'admin',
		[
			'NUMERATOR_TYPE' => 'ORDER',
			'CSS_WRAP_CLASS' => 'js-numerator-form',
			'NUMERATOR_ID' => $numeratorForOrdersId,
			'IS_HIDE_NUMERATOR_NAME' => true,
			'IS_HIDE_IS_DIRECT_NUMERATION' => true,
		]
	);
	?>
<?php
$tabControl->Buttons();
$buttonDisable = ($SALE_RIGHT < 'W' ? ' disabled' : '');
?>
<input type="hidden" name="Update" value="Y">
<input type="submit"<?= $buttonDisable; ?> name="Save" value="<?= Loc::getMessage("MAIN_SAVE"); ?>" title="<?= Loc::getMessage("MAIN_OPT_SAVE_TITLE")?>" class="adm-btn-save">
<input type="submit"<?= $buttonDisable; ?> name="Apply" value="<?= Loc::getMessage("MAIN_OPT_APPLY"); ?>" title="<?= Loc::getMessage("MAIN_OPT_APPLY_TITLE")?>">
<?php
if ($backUrl !== ''):
	?>
	<input type="button" name="Cancel" value="<?=htmlspecialcharsbx(GetMessage("MAIN_OPT_CANCEL")); ?>" onclick="window.location='<?= htmlspecialcharsbx(CUtil::addslashes($backUrl)); ?>'">
	<input type="hidden" name="back_url_settings" value="<?=htmlspecialcharsbx($backUrl)?>">
	<?php
endif;
?>
<input type="submit"<?= $buttonDisable; ?> name="RestoreDefaults" title="<?= htmlspecialcharsbx(GetMessage("MAIN_HINT_RESTORE_DEFAULTS")); ?>" onclick="return confirm('<?= AddSlashes(GetMessage("MAIN_HINT_RESTORE_DEFAULTS_WARNING"))?>')" value="<?= htmlspecialcharsbx(GetMessage("MAIN_RESTORE_DEFAULTS")); ?>">
<?php
$tabControl->End();
?>
</form>
<h2><?= Loc::getMessage('SALE_SYSTEM_PROCEDURES'); ?></h2>
	<?php
	$showbasketDiscountConvert = Option::get('sale', 'basket_discount_converted') !== 'Y' && Main\ModuleManager::isModuleInstalled('catalog');
	if ($showbasketDiscountConvert)
	{
		if (CSaleBasketDiscountConvert::getAllCounter() === 0)
		{
			$adminNotifyIterator = CAdminNotify::GetList(
				[],
				[
					'MODULE_ID' => 'sale',
					'TAG' => 'BASKET_DISCOUNT_CONVERTED',
				]
			);
			if ($adminNotifyIterator)
			{
				if ($adminNotify = $adminNotifyIterator->Fetch())
					CAdminNotify::Delete($adminNotify['ID']);
				unset($adminNotify);
			}
			unset($adminNotifyIterator);
			$showbasketDiscountConvert = false;
		}
	}
	$systemTabs[] = [
		'DIV' => 'saleSysTabReindex',
		'TAB' => Loc::getMessage('SALE_SYSTEM_TAB_REINDEX'),
		'ICON' => 'sale_settings',
		'TITLE' => Loc::getMessage('SALE_SYSTEM_TAB_REINDEX_TITLE'),
	];
	if ($showbasketDiscountConvert)
	{
		$systemTabs[] = [
			'DIV' => 'saleSysTabConvert',
			'TAB' => Loc::getMessage('SALE_SYSTEM_TAB_CONVERT'),
			'ICON' => 'sale_settings',
			'TITLE' => Loc::getMessage('SALE_SYSTEM_TAB_CONVERT_TITLE'),
		];
	}

$systemTabControl = new CAdminTabControl('saleSysTabControl', $systemTabs, true, true);

	$systemTabControl->Begin();
	$systemTabControl->BeginNextTab();
	?><tr><td align="left"><?php
	$firstTop = ' style="margin-top: 0;"';
	?><h4<?= $firstTop; ?>><?= Loc::getMessage('SALE_SYS_PROC_REINDEX_DISCOUNT'); ?></h4>
	<input class="adm-btn-save" type="button" id="sale_discount_reindex" value="<?= htmlspecialcharsbx(Loc::getMessage('SALE_SYS_PROC_REINDEX_DISCOUNT_BTN')); ?>">
	<p><?= Loc::getMessage('SALE_SYS_PROC_REINDEX_DISCOUNT_ALERT'); ?></p><?php
	$firstTop = '';
	?></td></tr><?php
	if ($showbasketDiscountConvert)
	{
		$systemTabControl->BeginNextTab();
		?>
		<tr>
		<td align="left"><?php
		$firstTop = ' style="margin-top: 0;"';
		?><h4<?= $firstTop; ?>><?= Loc::getMessage('SALE_SYS_PROC_CONVERT_BASKET_DISCOUNT'); ?></h4>
		<input class="adm-btn-save" type="button" id="sale_basket_discount" value="<?= htmlspecialcharsbx(Loc::getMessage('SALE_SYS_PROC_CONVERT_BASKET_DISCOUNT_BTN')); ?>">
		<p><?= Loc::getMessage('SALE_SYS_PROC_CONVERT_BASKET_DISCOUNT_ALERT'); ?></p><?php
		$firstTop = '';
		?></td></tr><?php
	}
	$systemTabControl->End();
	?>
<script type="text/javascript">
	BX.ready(function(){
		var numeratorSettingsToggle = BX('hideNumeratorSettings');

		if (BX('hideNumeratorSettings').checked)
		{
			hideNumeratorSettings();
		}
		if (!!numeratorSettingsToggle)
		{
			BX.bind(numeratorSettingsToggle, 'click', hideNumeratorSettings);
		}
	});

	function hideNumeratorSettings()
	{
		var numForm = document.querySelector('.js-numerator-form');
		if (numForm)
		{
			if (numForm.style.display === 'none')
			{
				numForm.style.display = 'block'
			}
			else
			{
				numForm.style.display = 'none'
			}
		}
	}

	function toggleTrackingAuto()
	{
		var nodes = BX.findChildren(document, {className:"sale-option-tracking-auto"}, true),
			switchStateOn = BX("sale-option-tracking-auto-switch").checked;

		for(var i in nodes)
			nodes[i].style.display = switchStateOn ? '' : 'none';
	}

	function showDiscountReindex()
	{
		var obDiscount, params;

		params = {
			bxpublic: 'Y',
			sessid: BX.bitrix_sessid()
		};

		var obBtn = {
			title: '<?= CUtil::JSEscape(Loc::getMessage('SALE_OPTIONS_POPUP_WINDOW_CLOSE_BTN')); ?>',
			id: 'close',
			name: 'close',
			action: function () {
				this.parentWindow.Close();
			}
		};

		obDiscount = new BX.CAdminDialog({
			'content_url': '/bitrix/tools/sale/discount_reindex.php?lang=<?= LANGUAGE_ID; ?>',
			'content_post': params,
			'draggable': true,
			'resizable': true,
			'buttons': [obBtn]
		});
		obDiscount.Show();
		return false;
	}
	function showBasketDiscountConvert()
	{
		var obDiscount, params;

		params = {
			bxpublic: 'Y',
			sessid: BX.bitrix_sessid()
		};

		var obBtn = {
			title: '<?= CUtil::JSEscape(Loc::getMessage('SALE_OPTIONS_POPUP_WINDOW_CLOSE_BTN')); ?>',
			id: 'close',
			name: 'close',
			action: function () {
				this.parentWindow.Close();
			}
		};

		obDiscount = new BX.CAdminDialog({
			'content_url': '/bitrix/tools/sale/basket_discount_convert.php?lang=<?= LANGUAGE_ID; ?>',
			'content_post': params,
			'draggable': true,
			'resizable': true,
			'buttons': [obBtn]
		});
		obDiscount.Show();
		return false;
	}
	function showApplyDiscountMode()
	{
		var modeList = BX('tr_discount_apply_mode'),
			showMode = BX('use_sale_discount_only_Y');
		if (!BX.type.isElementNode(modeList) || !BX.type.isElementNode(showMode))
			return;
		BX.style(modeList, 'display', (showMode.checked ? 'none' : 'table-row'));
	}
	BX.ready( function(){
		BX.message['SMO_LOCATION_JS_GET_DATA_ERROR'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_JS_GET_DATA_ERROR')); ?>';
		BX.message['SMO_LOCATION_ALL'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_ALL')); ?>';
		BX.message['SMO_LOCATION_NO_COUNTRY'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_NO_COUNTRY')); ?>';
		BX.message['SMO_LOCATION_NO_REGION'] = '<?= CUtil::JSEscape(Loc::getMessage('SMO_LOCATION_NO_REGION')); ?>';

		var discountReindex = BX('sale_discount_reindex'),
			basketDiscount = BX('sale_basket_discount'),
			showMode = BX('use_sale_discount_only_Y');

		if (!!discountReindex)
			BX.bind(discountReindex, 'click', showDiscountReindex);
		if (!!basketDiscount)
			BX.bind(basketDiscount, 'click', showBasketDiscountConvert);
		if (BX.type.isElementNode(showMode))
			BX.bind(showMode, 'click', showApplyDiscountMode);

		toggleTrackingAuto();
	});
</script>
<?php

Anon7 - 2022
AnonSec Team