$module_id = "sale";
/** @global CMain $APPLICATION */
/** @global string $RestoreDefaults */
/** @global string $Update */
use Bitrix\Main;
use Bitrix\Main\Loader;
use Bitrix\Main\SiteTable;
use Bitrix\Main\Config\Option;
use Bitrix\Sale\Cashbox;
use Bitrix\Sale\Registry;
use Bitrix\Sale\SalesZone;
use Bitrix\Sale;
use Bitrix\Main\Localization\Loc;
$SALE_RIGHT = $APPLICATION->GetGroupRight($module_id);
if ($SALE_RIGHT>="R") :
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");
Loader::includeModule('sale');
Loader::includeModule('currency');
$lpEnabled = CSaleLocation::isLocationProEnabled();
$lMigrated = CSaleLocation::isLocationProMigrated();
$siteList = array();
$siteIterator = SiteTable::getList(array(
'select' => array('LID', 'NAME'),
'order' => array('SORT' => 'ASC')
));
while ($oneSite = $siteIterator->fetch())
{
$siteList[] = array('ID' => $oneSite['LID'], 'NAME' => $oneSite['NAME']);
}
unset($oneSite, $siteIterator);
$siteCount = count($siteList);
$bWasUpdated = false;
if ($_SERVER['REQUEST_METHOD'] == "GET" && $RestoreDefaults <> '' && $SALE_RIGHT=="W" && check_bitrix_sessid())
{
$bWasUpdated = true;
COption::RemoveOption("sale");
$z = CGroup::GetList("id", "asc", array("ACTIVE" => "Y", "ADMIN" => "N"));
while($zr = $z->Fetch())
$APPLICATION->DelGroupRight($module_id, array($zr["ID"]));
}
$arAllOptions =
array(
Array("order_email", GetMessage("SALE_EMAIL_ORDER"), "order@".$SERVER_NAME, Array("text", 30)),
//Array("default_email", GetMessage("SALE_EMAIL_REGISTER"), "admin@".$SERVER_NAME, Array("text", 30)),
Array("delete_after", GetMessage("SALE_DELETE_AFTER"), "", Array("text", 10)),
Array("order_list_date", GetMessage("SALE_ORDER_LIST_DATE"), 30, Array("text", 10)),
Array("MAX_LOCK_TIME", GetMessage("SALE_MAX_LOCK_TIME"), 30, Array("text", 10)),
Array("GRAPH_WEIGHT", GetMessage("SALE_GRAPH_WEIGHT"), 800, Array("text", 10)),
Array("GRAPH_HEIGHT", GetMessage("SALE_GRAPH_HEIGHT"), 600, Array("text", 10)),
Array("path2user_ps_files", GetMessage("SALE_PATH2UPSF"), BX_PERSONAL_ROOT."/php_interface/include/sale_payment/", Array("text", 40)),
//Array("path2custom_view_order", GetMessage("SMO_SALE_PATH2ORDER"), "", Array("text", 40)),
Array("lock_catalog", GetMessage("SMO_LOCK_CATALOG"), "Y", Array("checkbox", 40)),
(CBXFeatures::IsFeatureEnabled('SaleAffiliate')) ? Array("affiliate_param_name", GetMessage("SMOS_AFFILIATE_PARAM"), "partner", Array("text", 40)) : array(),
(CBXFeatures::IsFeatureEnabled('SaleAffiliate')) ? Array("affiliate_life_time", GetMessage("SMO_AFFILIATE_LIFE_TIME"), "30", Array("text", 10)): array(),
Array("show_order_sum", GetMessage("SMO_SHOW_ORDER_SUM"), "N", Array("checkbox", 40)),
Array("show_order_product_xml_id", GetMessage("SMO_SHOW_ORDER_PRODUCT_XML_ID"), "N", Array("checkbox", 40)),
Array("show_paysystem_action_id", GetMessage("SMO_SHOW_PAYSYSTEM_ACTION_ID"), "N", Array("checkbox", 40)),
Array("measurement_path", GetMessage("SMO_MEASUREMENT_PATH"), "/bitrix/modules/sale/measurements.php", Array("text", 40)),
//Array("use_delivery_handlers", GetMessage("SMO_USE_DELIVERY_HANDLERS"), "N", Array("checkbox", 40)),
Array("delivery_handles_custom_path", GetMessage("SMO_DELIVERY_HANDLERS_CUSTOM_PATH"), BX_PERSONAL_ROOT."/php_interface/include/sale_delivery/", Array("text", 40)),
Array("use_secure_cookies", GetMessage("SMO_USE_SECURE_COOKIES"), "N", Array("checkbox", 40)),
Array("encode_fuser_id", GetMessage("SMO_ENCODE_FUSER_ID"), "N", Array("checkbox", 40)),
//Array("recalc_product_list", GetMessage("SALE_RECALC_PRODUCT_LIST"), "N", Array("checkbox", 40)),
//Array("recalc_product_list_period", GetMessage("SALE_RECALC_PRODUCT_LIST_PERIOD"), 7, Array("text", 10)),
Array("COUNT_DISCOUNT_4_ALL_QUANTITY", GetMessage("SALE_OPT_COUNT_DISCOUNT_4_ALL_QUANTITY"), "N", Array("checkbox", 40)),
Array("COUNT_DELIVERY_TAX", GetMessage("SALE_OPT_COUNT_DELIVERY_TAX"), "N", Array("checkbox", 40)),
Array("QUANTITY_FACTORIAL", GetMessage("SALE_OPT_QUANTITY_FACTORIAL"), "N", Array("checkbox", 40)),
Array("product_viewed_save", GetMessage("SALE_PRODUCT_VIEWED_SAVE"), "Y", Array("checkbox", 40)),
Array("viewed_capability", GetMessage("SALE_VIEWED_CAPABILITY"), "Y", Array("checkbox", 40)),
Array("viewed_time", GetMessage("SALE_VIEWED_TIME"), 90, Array("text", 10)),
Array("viewed_count", GetMessage("SALE_VIEWED_COUNT"), 100, Array("text", 10)),
Array("SALE_ADMIN_NEW_PRODUCT", GetMessage("SALE_ADMIN_NEW_PRODUCT"), "N", Array("checkbox", 40)),
Array("use_ccards", GetMessage("SALE_ADMIN_USE_CARDS"), "N", Array("checkbox", 40)),
Array("show_basket_props_in_order_list", GetMessage("SALE_SHOW_BASKET_PROPS_IN_ORDER_LIST"), "Y", Array("checkbox", 40)),
);
$arOrderFlags = array("P" => GetMessage("SMO_PAYMENT_FLAG"), "C" => GetMessage("SMO_CANCEL_FLAG"), "D" => 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') && COption::GetOptionString($module_id, "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)
{
$numeratorWarningsString = '';
foreach ($_numeratorResult->getErrors() as $error)
{
$numeratorWarningsString = $error->getMessage() . '
';
}
return $numeratorWarningsString;
}
if ($_SERVER['REQUEST_METHOD'] == "POST" && $Update <> '' && $SALE_RIGHT == "W" && check_bitrix_sessid())
{
if (isset($_POST['hideNumeratorSettings']) && $_POST['hideNumeratorSettings'] != "Y")
{
$numerator = Main\Numerator\Numerator::create();
$validationResult = $numerator->setConfig($_POST);
if (!$validationResult->isSuccess())
{
$strWarning .= addNumeratorErrorToWarningString($validationResult);
}
}
else
{
$bWasUpdated = true;
COption::RemoveOption($module_id, "weight_unit");
COption::RemoveOption($module_id, "weight_koef");
if (!empty($_REQUEST["WEIGHT_dif_settings"]))
{
for ($i = 0; $i < $siteCount; $i++)
{
COption::SetOptionString($module_id, "weight_unit", trim($_REQUEST["weight_unit"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
COption::SetOptionString($module_id, "weight_koef", floatval($_REQUEST["weight_koef"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
}
COption::SetOptionString($module_id, "WEIGHT_different_set", "Y");
}
else
{
$site_id = trim($_REQUEST["WEIGHT_current_site"]);
COption::SetOptionString($module_id, "weight_unit", trim($_REQUEST["weight_unit"][$site_id]));
COption::SetOptionString($module_id, "weight_koef", floatval($_REQUEST["weight_koef"][$site_id]));
COption::SetOptionString($module_id, "WEIGHT_different_set", "N");
}
COption::RemoveOption($module_id, "location_zip");
COption::RemoveOption($module_id, "location");
if (!empty($_REQUEST["ADDRESS_dif_settings"]))
{
for ($i = 0; $i < $siteCount; $i++)
{
COption::SetOptionString($module_id, "location_zip", $_REQUEST["location_zip"][$siteList[$i]["ID"]], false, $siteList[$i]["ID"]);
COption::SetOptionString($module_id, "location", $_REQUEST["location"][$siteList[$i]["ID"]], false, $siteList[$i]["ID"]);
}
COption::SetOptionString($module_id, "ADDRESS_different_set", "Y");
}
else
{
$site_id = trim($_REQUEST["ADDRESS_current_site"]);
COption::SetOptionString($module_id, "location_zip", $_REQUEST["location_zip"][$site_id]);
COption::SetOptionString($module_id, "location", $_REQUEST["location"][$site_id]);
COption::SetOptionString($module_id, "ADDRESS_different_set", "N");
}
if(!$lMigrated )
{
COption::RemoveOption($module_id, "sales_zone_countries");
COption::RemoveOption($module_id, "sales_zone_regions");
COption::RemoveOption($module_id, "sales_zone_cities");
}
if(!$lpEnabled)
{
if (!empty($_REQUEST["ADDRESS_dif_settings"]))
{
for ($i = 0; $i < $siteCount; $i++)
{
if($lMigrated)
{
try
{
\Bitrix\Sale\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($module_id, "sales_zone_countries", implode(":", $_REQUEST["sales_zone_countries"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
COption::SetOptionString($module_id, "sales_zone_regions", implode(":",$_REQUEST["sales_zone_regions"][$siteList[$i]["ID"]]), false, $siteList[$i]["ID"]);
COption::SetOptionString($module_id, "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
{
\Bitrix\Sale\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($module_id, "sales_zone_countries", implode(":",$_REQUEST["sales_zone_countries"][$site_id]));
COption::SetOptionString($module_id, "sales_zone_regions", implode(":",$_REQUEST["sales_zone_regions"][$site_id]));
COption::SetOptionString($module_id, "sales_zone_cities", implode(":",$_REQUEST["sales_zone_cities"][$site_id]));
}
}
}
for ($i = 0, $intCount = count($arAllOptions); $i < $intCount; $i++)
{
if(!empty($arAllOptions[$i]))
{
$name = $arAllOptions[$i][0];
$val = ${$name};
if ($arAllOptions[$i][3][0]=="checkbox" && $val!="Y")
$val = "N";
if ($name == "path2user_ps_files" && mb_substr($val, mb_strlen($val) - 1, 1) != "/")
{
$val .= "/";
}
COption::SetOptionString("sale", $name, $val, $arAllOptions[$i][1]);
}
}
$rsAgents = CAgent::GetList(array("ID"=>"DESC"), array(
"MODULE_ID" => "sale",
"NAME" => "\\Bitrix\\Sale\\Basket::deleteOldAgent(%",
));
while($arAgent = $rsAgents->Fetch())
{
CAgent::Delete($arAgent["ID"]);
}
$delete_after = (int)COption::GetOptionInt("sale", "delete_after");
if ($delete_after > 0)
CAgent::AddAgent("\\Bitrix\\Sale\\Basket::deleteOldAgent(".$delete_after.");", "sale", "N", 8*60*60, "", "Y");
/*$recalc_product_list_period = intval(COption::GetOptionInt("sale", "recalc_product_list_period", 7));
CAgent::RemoveAgent("CSaleProduct::RefreshProductList();", "sale");
if(
COption::GetOptionString("sale", "recalc_product_list", "N") == "Y"
&& $recalc_product_list_period > 0
)
{
CAgent::AddAgent("CSaleProduct::RefreshProductList();", "sale", "N", 60*60*24*$recalc_product_list_period, "", "Y");
}*/
if(CBXFeatures::IsFeatureEnabled('SaleAffiliate'))
{
COption::SetOptionString("sale", "affiliate_plan_type", $affiliate_plan_type);
}
$arAmountSer = Array();
foreach($amount_val as $key =>$val)
{
if((float)$val > 0)
$arAmountSer[$key] = array("AMOUNT" => (float)$val, "CURRENCY" => $amount_currency[$key]);
}
if(!empty($arAmountSer))
COption::SetOptionString("sale", "pay_amount", serialize($arAmountSer));
CAgent::RemoveAgent("CSaleOrder::RemindPayment();", "sale");
COption::RemoveOption("sale", "pay_reminder");
if (isset($_POST["reminder"]) && is_array($_POST["reminder"]) && !empty($_POST["reminder"]))
{
COption::SetOptionString("sale", "pay_reminder", serialize($_POST["reminder"]));
CAgent::AddAgent("CSaleOrder::RemindPayment();", "sale", "N", 86400, "", "Y");
}
//subscribe product
$rsAgents = CAgent::GetList(
array("ID"=>"DESC"),
array(
"MODULE_ID" => "sale",
"NAME" => "CSaleBasket::ClearProductSubscribe(%",
)
);
while($arAgent = $rsAgents->Fetch())
CAgent::Delete($arAgent["ID"]);
if(!empty($subscribProd))
{
foreach($siteList as $vv)
{
$lid = $vv["ID"];
$val = $subscribProd[$lid];
if ($val["use"] == "Y")
{
if (intval($val["del_after"]) <= 0)
$subscribProd[$lid]["del_after"] = 30;
CAgent::AddAgent("CSaleBasket::ClearProductSubscribe('".EscapePHPString($lid)."');", "sale", "N", intval($subscribProd[$lid]["del_after"])*24*60*60, "", "Y");
}
}
COption::SetOptionString("sale", "subscribe_prod", serialize($subscribProd));
}
//viewed product
if(!empty($viewed))
{
foreach ($viewed as $lid => $val)
{
if (intval($val["time"]) <= 0)
$viewed[$lid]["time"] = 90;
if (intval($val["count"]) <= 0)
$viewed[$lid]["count"] = 1000;
}
COption::SetOptionString("sale", "viewed_product", serialize($viewed));
}
if(isset($_POST['viewed_capability']) && $_POST['viewed_capability'] == "Y")
{
COption::SetOptionString("sale", "viewed_capability", "Y");
}
else
{
COption::SetOptionString("sale", "viewed_capability", "N");
}
$rsAgents = CAgent::GetList(array("ID"=>"DESC"), array(
"MODULE_ID" => "sale",
"NAME" => "CSaleViewedProduct::ClearViewed();",
));
if (!$arAgent = $rsAgents->Fetch())
{
CAgent::AddAgent("CSaleViewedProduct::ClearViewed();", "sale", "N", 86400, "", "Y");
}
COption::SetOptionString("sale", "default_currency", $CURRENCY_DEFAULT);
COption::SetOptionString("sale", "crypt_algorithm", $crypt_algorithm);
COption::SetOptionString("sale", "sale_data_file", $sale_data_file);
COption::SetOptionString("sale", "sale_data_file", $sale_data_file);
if ($sale_ps_success_path == "")
$sale_ps_success_path = "/";
COption::SetOptionString("sale", "sale_ps_success_path", $sale_ps_success_path);
if ($sale_ps_fail_path == "")
$sale_ps_fail_path = "/";
COption::SetOptionString("sale", "sale_ps_fail_path", $sale_ps_fail_path);
if ($sale_location_selector_appearance == "")
$sale_location_selector_appearance = "steps";
COption::SetOptionString("sale", "sale_location_selector_appearance", $sale_location_selector_appearance);
COption::SetOptionString("sale", "status_on_paid", $PAID_STATUS);
COption::SetOptionString("sale", "status_on_half_paid", $HALF_PAID_STATUS);
COption::SetOptionString("sale", "status_on_allow_delivery", $ALLOW_DELIVERY_STATUS);
COption::SetOptionString("sale", "status_on_allow_delivery_one_of", $ALLOW_DELIVERY_ONE_OF_STATUS);
COption::SetOptionString("sale", "status_on_shipped_shipment", $SHIPMENT_SHIPPED_STATUS);
COption::SetOptionString("sale", "status_on_shipped_shipment_one_of", $SHIPMENT_SHIPPED_ONE_OF_STATUS);
COption::SetOptionString("sale", "shipment_status_on_allow_delivery", $SHIPMENT_ALLOW_DELIVERY_TO_SHIPMENT_STATUS);
COption::SetOptionString("sale", "shipment_status_on_shipped", $SHIPMENT_SHIPPED_TO_SHIPMENT_STATUS);
COption::SetOptionString("sale", "status_on_payed_2_allow_delivery", $PAYED_2_ALLOW_DELIVERY);
COption::SetOptionString("sale", "status_on_change_allow_delivery_after_paid", $CHANGE_ALLOW_DELIVERY_AFTER_PAID);
COption::SetOptionString("sale", "allow_deduction_on_delivery", $ALLOW_DEDUCTION_ON_DELIVERY);
COption::SetOptionString("sale", "format_quantity", ($FORMAT_QUANTITY == 'AUTO' ? $FORMAT_QUANTITY: intval($FORMAT_QUANTITY)));
COption::SetOptionString("sale", "value_precision", (intval($VALUE_PRECISION) < 0 ? 2 : intval($VALUE_PRECISION)));
$oldExpirationProcessingEvents = Option::get('sale', 'expiration_processing_events');
COption::SetOptionString("sale", "expiration_processing_events", $EXPIRATION_PROCESSING_EVENTS);
if ($oldExpirationProcessingEvents != $EXPIRATION_PROCESSING_EVENTS)
{
$eventManager = Main\EventManager::getInstance();
if ($EXPIRATION_PROCESSING_EVENTS == "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');
}
}
$ORDER_HISTORY_LOG_LEVEL = intval($ORDER_HISTORY_LOG_LEVEL);
COption::SetOptionString("sale", "order_history_log_level", $ORDER_HISTORY_LOG_LEVEL);
$ORDER_HISTORY_ACTION_LOG_LEVEL = intval($ORDER_HISTORY_ACTION_LOG_LEVEL);
COption::SetOptionString("sale", "order_history_action_log_level", $ORDER_HISTORY_ACTION_LOG_LEVEL);
if (!empty($SELECTED_FIELDS) && is_array($SELECTED_FIELDS))
{
for ($i = 0, $intCount = count($SELECTED_FIELDS); $i < $intCount; $i++)
{
if ($saveValue <> '')
$saveValue .= ",";
$saveValue .= $SELECTED_FIELDS[$i];
}
}
else
{
$saveValue = "ID,USER,PAY_SYSTEM,PRICE,STATUS,PAYED,PS_STATUS,CANCELED,BASKET";
}
COption::SetOptionString("sale", "order_list_fields", $saveValue);
// account number generation - via numerator
if (isset($_POST['hideNumeratorSettings']) && $_POST['hideNumeratorSettings'] == "Y")
{
if ($numeratorForOrdersId)
{
Main\Numerator\Numerator::delete($numeratorForOrdersId);
}
}
else
{
if ($numeratorForOrdersId)
{
$numeratorUpdateResult = Main\Numerator\Numerator::update($numeratorForOrdersId, $_POST);
if (!$numeratorUpdateResult->isSuccess())
{
$strWarning .= addNumeratorErrorToWarningString($numeratorUpdateResult);
}
}
else
{
$numeratorOrder = Main\Numerator\Numerator::create();
$numeratorOrderValidationResult = $numeratorOrder->setConfig($_POST);
if ($numeratorOrderValidationResult->isSuccess())
{
$numeratorOrderSaveResult = $numeratorOrder->save();
if (!$numeratorOrderSaveResult->isSuccess())
{
$strWarning .= addNumeratorErrorToWarningString($numeratorOrderSaveResult);
}
}
else
{
$strWarning .= addNumeratorErrorToWarningString($numeratorOrderValidationResult);
}
}
}
//subscribe product
if (!empty($defaultDeductStore))
{
COption::RemoveOption("sale", "deduct_store_id");
foreach ($defaultDeductStore as $lid => $val)
{
if (isset($val["save"]) && $val["save"] == "Y")
COption::SetOptionString("sale", "deduct_store_id", intval($val["id"]), "", $lid);
}
}
//SAVE SHOP LIST SITE
foreach($siteList as $val)
{
COption::RemoveOption("sale", "SHOP_SITE_".$val["ID"]);
}
if (isset(${"SHOP_SITE"}) AND is_array(${"SHOP_SITE"}))
{
foreach (${"SHOP_SITE"} as $key => $val)
{
COption::SetOptionString("sale", "SHOP_SITE_".$val, $val);
}
}
$p2p_del_exp_old = COption::GetOptionString("sale", "p2p_del_exp", 10);
$agentData = CAgent::GetList(array("ID"=>"DESC"), array(
"MODULE_ID" => "sale",
"NAME" => "\\Bitrix\\Sale\\Product2ProductTable::addProductsByAgent(%",
));
$agent = $agentData->Fetch();
if ($SALE_P2P_ALLOW_COLLECT_DATA == "Y")
{
if (!$agent)
{
$limit = (int)Option::get("sale", "p2p_limit_collecting_per_hit", 100);
CAgent::AddAgent("Bitrix\\Sale\\Product2ProductTable::addProductsByAgent($limit);", "sale", "N", 60, "", "Y");
}
}
else
{
$SALE_P2P_ALLOW_COLLECT_DATA = "N";
if ($agent['ID'] > 0)
{
CAgent::Delete($agent['ID']);
}
}
COption::SetOptionString("sale", "p2p_allow_collect_data", $SALE_P2P_ALLOW_COLLECT_DATA);
COption::SetOptionString("sale", "p2p_status_list", serialize($SALE_P2P_STATUS_LIST));
if(intval($p2p_del_period) <= 0)
$p2p_del_period = 10;
COption::SetOptionString("sale", "p2p_del_period", $p2p_del_period);
if(intval($p2p_del_exp) <= 0)
$p2p_del_exp = 10;
COption::SetOptionString("sale", "p2p_del_exp", $p2p_del_exp);
$rsAgents = CAgent::GetList(array("ID"=>"DESC"), array(
"MODULE_ID" => "sale",
"NAME" => "\\Bitrix\\Sale\\Product2ProductTable::deleteOldProducts(%",
));
while($arAgent = $rsAgents->Fetch())
{
CAgent::Delete($arAgent["ID"]);
}
CAgent::AddAgent("Bitrix\\Sale\\Product2ProductTable::deleteOldProducts(".$p2p_del_exp.");", "sale", "N", 24 * 3600 * $p2p_del_period, "", "Y");
foreach ($siteList as &$oneSite)
{
$valCurrency = trim(${"CURRENCY_".$oneSite['ID']});
if ($valCurrency == '') $valCurrency = false;
$arFields = array(
'LID' => $oneSite['ID'],
'CURRENCY' => $valCurrency
);
if ($arRes = CSaleLang::GetByID($oneSite['ID']))
{
if ($valCurrency!==false)
{
CSaleLang::Update($oneSite['ID'], $arFields);
}
else
{
CSaleLang::Delete($oneSite['ID']);
}
}
else
{
if ($valCurrency!==false)
{
CSaleLang::Add($arFields);
}
}
CSaleGroupAccessToSite::DeleteBySite($oneSite['ID']);
if (isset(${"SITE_USER_GROUPS_".$oneSite['ID']})
&& is_array(${"SITE_USER_GROUPS_".$oneSite['ID']}))
{
for ($i = 0, $intCount = count(${"SITE_USER_GROUPS_".$oneSite['ID']}); $i < $intCount; $i++)
{
$groupID = intval(${"SITE_USER_GROUPS_".$oneSite['ID']}[$i]);
if ($groupID > 0)
{
CSaleGroupAccessToSite::Add(
array(
"SITE_ID" => $oneSite['ID'],
"GROUP_ID" => $groupID
)
);
}
}
}
}
if (isset($_POST['product_reserve_condition']))
{
$productReserveCondition = (string)$_POST['product_reserve_condition'];
if (in_array($productReserveCondition, Sale\Configuration::getReservationConditionList(false)))
Option::set('sale', 'product_reserve_condition', $productReserveCondition, '');
unset($productReserveCondition);
}
if (isset($_POST['product_reserve_clear_period']))
{
$clearPeriod = (int)$_POST['product_reserve_clear_period'];
if ($clearPeriod >= 0)
Option::set('sale', 'product_reserve_clear_period', $clearPeriod, '');
unset($clearPeriod);
}
if (isset($_POST['use_sale_discount_only']))
{
$useSaleDiscountOnly = (string)$_POST['use_sale_discount_only'];
if ($useSaleDiscountOnly == 'Y' || $useSaleDiscountOnly == 'N')
Option::set('sale', 'use_sale_discount_only', $useSaleDiscountOnly, '');
unset($useSaleDiscountOnly);
}
if (isset($_POST['get_discount_percent_from_base_price']))
{
$discountPercent = (string)$_REQUEST['get_discount_percent_from_base_price'];
if ($discountPercent == 'Y' || $discountPercent == 'N')
Option::set('sale', 'get_discount_percent_from_base_price', $discountPercent, '');
unset($discountPercent);
}
$useSaleDiscountOnly = (string)Option::get('sale', 'use_sale_discount_only');
if ($useSaleDiscountOnly == 'N')
{
if (isset($_POST['discount_apply_mode']))
{
$discountModeApply = (int)$_POST['discount_apply_mode'];
$modeList = Sale\Discount::getApplyModeList(false);
if (in_array($discountModeApply, $modeList))
Option::set('sale', 'discount_apply_mode', $discountModeApply, '');
unset($modeList, $discountModeApply);
}
}
unset($useSaleDiscountOnly);
Option::set("sale", "regular_archive_active", $_POST['archive_regular_accept']);
Option::set("sale", "archive_blocked_order", $_POST['archive_blocked_order_accept']);
if ((int)($_POST['archive_period']))
$filter['PERIOD'] = (int)($_POST['archive_period']);
else
$filter['PERIOD'] = 365;
if ($_POST['archive_blocked_order_accept'] !== 'Y')
{
$filterValues['LOCKED_BY'] = null;
$filterValues['DATE_LOCK'] = null;
}
if (isset($_POST['archive_status_id']))
$filter["STATUS_ID"] = $_POST['archive_status_id'];
if (isset($_POST['archive_site']))
$filter["LID"] = $_POST['archive_site'];
if($_POST['archive_payed'] <> '')
{
$filter["=PAYED"] = $_POST['archive_payed'];
}
if($_POST['archive_canceled'] <> '')
{
$filter["=CANCELED"] = $_POST['archive_canceled'];
}
if($_POST['archive_deducted'] <> '')
{
$filter["=DEDUCTED"] = $_POST['archive_deducted'];
}
if ((int)($_POST['archive_limit']))
$archiveLimit = (int)$_POST['archive_limit'];
else
$archiveLimit = 10;
Option::set('sale', 'archive_limit', $archiveLimit, '');
if ((int)($_POST['archive_time_limit']))
$archiveTimeLimit = (int)$_POST['archive_time_limit'];
else
$archiveTimeLimit = 5;
Option::set('sale', 'archive_time_limit', $archiveTimeLimit, '');
$filter = serialize($filter);
Option::set("sale", "archive_params", $filter);
$agentsList = CAgent::GetList(array("ID"=>"DESC"), array(
"MODULE_ID" => "sale",
"NAME" => "\\Bitrix\\Sale\\Archive\\Manager::archiveOnAgent(%",
));
while($agent = $agentsList->Fetch())
{
CAgent::Delete($agent["ID"]);
}
if (isset($_POST['archive_regular_accept']))
{
CAgent::AddAgent("\\Bitrix\\Sale\\Archive\\Manager::archiveOnAgent(".$archiveLimit.",".$archiveTimeLimit.");", "sale", "N", 24*60*60, "", "Y");
}
Option::set("sale", "order_changes_cleaner_active", $_POST['order_changes_cleaner_active']);
$orderChangesCleanerDays = (int)$_POST['order_changes_cleaner_days'];
Option::set("sale", "order_changes_cleaner_days", $orderChangesCleanerDays);
$orderChangesCleanerLimit = (int)$_POST['order_changes_cleaner_limit'];
Option::set("sale", "order_changes_cleaner_limit",$orderChangesCleanerLimit);
$agentsList = CAgent::GetList(array("ID"=>"DESC"), array(
"MODULE_ID" => "sale",
"NAME" => "\\Bitrix\\Sale\\OrderHistory::deleteOldAgent(%",
));
while($agent = $agentsList->Fetch())
{
CAgent::Delete($agent["ID"]);
}
if (isset($_POST['order_changes_cleaner_active']))
{
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();
if(isset($_POST['tracking_map_statuses']))
{
$mapStatuses = $_POST['tracking_map_statuses'];
foreach($mapStatuses as $tStatusId => $sStatusId)
if($sStatusId == '')
unset($mapStatuses[$tStatusId]);
Option::set('sale', 'tracking_map_statuses', serialize($mapStatuses));
unset($mapStatuses);
}
$tSwitch = 'N';
if(isset($_POST['tracking_check_switch']) && $_POST['tracking_check_switch'] == 'Y')
$tSwitch = 'Y';
Option::set('sale', 'tracking_check_switch', $tSwitch);
$tPeriod = 0;
if(isset($_POST['tracking_check_period']) && intval($_POST['tracking_check_period']) > 0)
$tPeriod = intval($_POST['tracking_check_period']);
Option::set('sale', 'tracking_check_period', $tPeriod);
$agentName = '\Bitrix\Sale\Delivery\Tracking\Manager::startRefreshingStatuses();';
if($tSwitch == 'Y' && $tPeriod > 0)
{
$res = \CAgent::GetList(array(), array('NAME' => $agentName));
if($agent = $res->Fetch())
{
\CAgent::Update($agent['ID'], array('AGENT_INTERVAL' => $tPeriod*60*60));
}
else
{
\CAgent::AddAgent(
$agentName,
'sale',
"Y",
$tPeriod*60*60,
"",
"Y"
);
}
}
else
{
\CAgent::RemoveAgent(
$agentName,
'sale'
);
}
COption::SetOptionString("sale", "check_type_on_pay", $CHECK_TYPE_ON_PAY ?: 'sell');
COption::SetOptionInt("sale", "basket_refresh_gap", $BASKET_REFRESH_GAP);
COption::SetOptionString("sale", "allow_pay_status", $ALLOW_PAY_STATUS);
COption::SetOptionString("sale", "allow_guest_order_view", $ALLOW_GUEST_ORDER_VIEW);
$ALLOW_GUEST_ORDER_VIEW_PATH = is_array($ALLOW_GUEST_ORDER_VIEW_PATH) ? $ALLOW_GUEST_ORDER_VIEW_PATH : array();
COption::SetOptionString("sale", "allow_guest_order_view_paths", serialize($ALLOW_GUEST_ORDER_VIEW_PATH));
$ALLOW_GUEST_ORDER_VIEW_STATUS = is_array($ALLOW_GUEST_ORDER_VIEW_STATUS) ? $ALLOW_GUEST_ORDER_VIEW_STATUS : array();
COption::SetOptionString("sale", "allow_guest_order_view_status", serialize($ALLOW_GUEST_ORDER_VIEW_STATUS));
}
}
$statusesWithoutNoChange = array();
$arStatuses = array("" => GetMessage("SMO_STATUS"));
$dbStatus = CSaleStatus::GetList(Array("SORT" => "ASC"), Array("LID" => LANGUAGE_ID), false, false, Array("ID", "NAME", "SORT"));
while ($arStatus = $dbStatus->GetNext())
{
$arStatuses[$arStatus["ID"]] = "[".$arStatus["ID"]."] ".$arStatus["NAME"];
$statusesWithoutNoChange[$arStatus["ID"]] = "[".$arStatus["ID"]."] ".$arStatus["NAME"];
}
$delieryStatuses = array("" => GetMessage("SMO_STATUS"));
$delieryStatusesList = Sale\DeliveryStatus::getAllStatusesNames();
if (!empty($delieryStatusesList) && is_array($delieryStatusesList))
{
foreach ($delieryStatusesList as $statusId => $statusName)
{
$delieryStatuses[$statusId] = "[".$statusId."] ".htmlspecialcharsbx($statusName);
}
}
if($strWarning != '')
CAdminMessage::ShowMessage($strWarning);
elseif ($bWasUpdated)
{
if($Update <> '' && $_REQUEST["back_url_settings"] <> '')
LocalRedirect($_REQUEST["back_url_settings"]);
else
LocalRedirect($APPLICATION->GetCurPage()."?mid=".$module_id."&lang=".LANGUAGE_ID."&back_url_settings=".urlencode($_REQUEST["back_url_settings"])."&".$tabControl->ActiveTabParam());
}
$currentSettings = array();
$currentSettings['use_sale_discount_only'] = Option::get('sale', 'use_sale_discount_only');
$currentSettings['get_discount_percent_from_base_price'] = Option::get('sale', 'get_discount_percent_from_base_price');
$currentSettings['discount_apply_mode'] = (int)Option::get('sale', 'discount_apply_mode');
$currentSettings['product_reserve_condition'] = (string)Option::get('sale', 'product_reserve_condition');
$currentSettings['product_reserve_clear_period'] = (int)Option::get('sale', 'product_reserve_clear_period');
$currentSettings['tracking_map_statuses'] = unserialize(Option::get('sale', 'tracking_map_statuses', ''), ['allowed_classes' => false]);
$currentSettings['tracking_check_switch'] = Option::get('sale', 'tracking_check_switch', 'N');
$currentSettings['tracking_check_period'] = (int)Option::get('sale', 'tracking_check_period', '24');
$tabControl->Begin();
?>