check(ActionDictionary::ACTION_CATALOG_READ) || $accessController->check(ActionDictionary::ACTION_PRODUCT_DISCOUNT_SET))) { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } $readOnly = !$accessController->check(ActionDictionary::ACTION_PRODUCT_DISCOUNT_SET); $boolShowCoupons = true; if ($ex = $APPLICATION->GetException()) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError($ex->GetString()); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } IncludeModuleLangFile(__FILE__); $returnUrl = ''; if (!empty($_REQUEST['return_url'])) { $currentUrl = $APPLICATION->GetCurPage(); if (mb_strtolower(mb_substr($_REQUEST['return_url'], mb_strlen($currentUrl))) != mb_strtolower($currentUrl)) { $returnUrl = $_REQUEST['return_url']; } unset($currentUrl); } $aTabs = array( array("DIV" => "edit1", "TAB" => GetMessage("CDEN_TAB_DISCOUNT"), "ICON" => "catalog", "TITLE" => GetMessage("CDEN_TAB_DISCOUNT_DESCR")), array("DIV" => "edit4", "TAB" => GetMessage("BT_CAT_DISCOUNT_EDIT_TAB_NAME_CONDITIONS"), "ICON" => "catalog", "TITLE" => GetMessage("BT_CAT_DISCOUNT_EDIT_TAB_TITLE_CONDITIONS")), array("DIV" => "edit2", "TAB" => GetMessage("CDEN_TAB_DISCOUNT_PAR"), "ICON" => "catalog", "TITLE" => GetMessage("CDEN_TAB_DISCOUNT_PAR_DESCR")), array("DIV" => "edit3", "TAB" => GetMessage("BT_CAT_DISCOUNT_EDIT_TAB_NAME_COUPONS"), "ICON" => "catalog", "TITLE" => GetMessage("BT_CAT_DISCOUNT_EDIT_TAB_TITLE_COUPONS")), array("DIV" => "edit5", "TAB" => GetMessage("BT_CAT_DISCOUNT_EDIT_TAB_NAME_MISC"), "ICON" => "catalog", "TITLE" => GetMessage("BT_CAT_DISCOUNT_EDIT_TAB_TITLE_MISC")), ); $tabControl = new CAdminForm("fdiscount_edit", $aTabs); $arCouponTypeList = Catalog\DiscountCouponTable::getCouponTypes(true); $errorMessage = ""; $bVarsFromForm = false; $boolCondParseError = false; $boolCouponAdd = false; $ID = (isset($_REQUEST['ID']) ? (int)$_REQUEST['ID'] : 0); $boolCopy = false; if (0 < $ID) { $boolCopy = (isset($_REQUEST['action']) && $_REQUEST['action'] == 'copy'); } if ( check_bitrix_sessid() && !$readOnly && $_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['Update']) && (string)$_POST['Update'] == 'Y' ) { $CONDITIONS = ''; $obCond2 = new CCatalogCondTree(); $boolCond = $obCond2->Init(BT_COND_MODE_PARSE, BT_COND_BUILD_CATALOG, array()); if (!$boolCond) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString()."
"; else $errorMessage .= (0 < $ID ? str_replace('#ID#', $ID, GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_UPDATE')) : GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_ADD'))."
"; $bVarsFromForm = true; } else { $boolCond = false; if (array_key_exists('CONDITIONS', $_POST) && array_key_exists('CONDITIONS_CHECK', $_POST)) { if (is_string($_POST['CONDITIONS']) && is_string($_POST['CONDITIONS_CHECK']) && md5($_POST['CONDITIONS']) == $_POST['CONDITIONS_CHECK']) { $CONDITIONS = base64_decode($_POST['CONDITIONS']); if (CheckSerializedData($CONDITIONS)) { $CONDITIONS = unserialize($CONDITIONS, ['allowed_classes' => false]); $boolCond = true; } else { $boolCondParseError = true; } } } if (!$boolCond) $CONDITIONS = $obCond2->Parse(); if (empty($CONDITIONS)) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString()."
"; else $errorMessage .= (0 < $ID ? str_replace('#ID#', $ID, GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_UPDATE')) : GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_ADD'))."
"; $bVarsFromForm = true; $boolCondParseError = true; } } $arGroupID = array(); if (isset($_POST['GROUP_IDS']) && is_array($_POST['GROUP_IDS'])) { foreach ($_POST['GROUP_IDS'] as &$intValue) { $intValue = (int)$intValue; if ($intValue > 0) { $arGroupID[] = $intValue; } } if (isset($intValue)) unset($intValue); } $arCatalogGroupID = array(); if (isset($_POST['CAT_IDS']) && is_array($_POST['CAT_IDS'])) { foreach ($_POST['CAT_IDS'] as &$intValue) { $intValue = (int)$intValue; if ($intValue > 0) { $arCatalogGroupID[] = $intValue; } } if (isset($intValue)) unset($intValue); } $arFields = array( "SITE_ID" => (isset($_POST['SITE_ID']) ? $_POST['SITE_ID'] : ''), "ACTIVE" => (isset($_POST['ACTIVE']) && $_POST['ACTIVE'] == 'Y' ? 'Y' : 'N'), "XML_ID" => (isset($_POST['XML_ID']) ? $_POST['XML_ID'] : ''), "ACTIVE_FROM" => (isset($_POST['ACTIVE_FROM']) ? $_POST['ACTIVE_FROM'] : ''), "ACTIVE_TO" => (isset($_POST['ACTIVE_TO']) ? $_POST['ACTIVE_TO'] : ''), "RENEWAL" => (isset($_POST['RENEWAL']) && $_POST['RENEWAL'] == 'Y' ? 'Y' : 'N'), "NAME" => (isset($_POST['NAME']) ? $_POST['NAME'] : ''), "SORT" => (isset($_POST['SORT']) ? $_POST['SORT'] : 500), "MAX_DISCOUNT" => (isset($_POST['MAX_DISCOUNT']) ? $_POST['MAX_DISCOUNT'] : 0), "VALUE_TYPE" => (isset($_POST['VALUE_TYPE']) ? $_POST['VALUE_TYPE'] : ''), "VALUE" => (isset($_POST['VALUE']) ? $_POST['VALUE'] : 0), "CURRENCY" => (isset($_POST['CURRENCY']) ? $_POST['CURRENCY'] : ''), "NOTES" => (isset($_POST['NOTES']) ? $_POST['NOTES'] : ''), "PRIORITY" => (isset($_POST['PRIORITY']) ? $_POST['PRIORITY'] : ''), "LAST_DISCOUNT" => (isset($_POST['LAST_DISCOUNT']) && $_POST['LAST_DISCOUNT'] == 'N' ? 'N' : 'Y'), "GROUP_IDS" => $arGroupID, "CATALOG_GROUP_IDS" => $arCatalogGroupID, "CONDITIONS" => $CONDITIONS, ); if (!($ID > 0 && !$boolCopy)) { $arCouponFields = array( 'COUPON_ADD' => (isset($_POST['COUPON_ADD']) && $_POST['COUPON_ADD'] == 'Y' ? 'Y' : 'N'), 'COUPON_TYPE' => (isset($_POST['COUPON_TYPE']) ? $_POST['COUPON_TYPE'] : ''), 'COUPON_COUNT' => intval(isset($_POST['COUPON_COUNT']) ? $_POST['COUPON_COUNT'] : 0), ); $boolCouponAdd = true; if ($arCouponFields['COUPON_ADD'] == 'Y') { if (!isset($arCouponTypeList[$arCouponFields['COUPON_TYPE']])) { $bVarsFromForm = true; $errorMessage .= GetMessage('BT_CAT_DISCOUNT_EDIT_COUPON_TYPE')."
"; } if ($arCouponFields['COUPON_COUNT'] <= 0) { $bVarsFromForm = true; $errorMessage .= GetMessage('BT_CAT_DISCOUNT_EDIT_COUPON_COUNT')."
"; } } } if (!$bVarsFromForm) { $conn = Main\Application::getConnection(); $conn->startTransaction(); if ($ID > 0 && !$boolCopy) { $res = CCatalogDiscount::Update($ID, $arFields); } else { $ID = CCatalogDiscount::Add($arFields); $res = ($ID > 0); } if (!$res) { if ($ex = $APPLICATION->GetException()) $errorMessage .= $ex->GetString()."
"; else $errorMessage .= (0 < $ID ? str_replace('#ID#', $ID, GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_UPDATE')) : GetMessage('BT_CAT_DISCOUNT_EDIT_ERR_ADD'))."
"; $bVarsFromForm = true; $conn->rollbackTransaction(); } else { $conn->commitTransaction(); if ($boolCouponAdd) { $i = 0; while ($i < $arCouponFields['COUPON_COUNT']) { $CID = CCatalogDiscountCoupon::Add( array( "DISCOUNT_ID" => $ID, "ACTIVE" => "Y", "ONE_TIME" => $arCouponFields['COUPON_TYPE'], "COUPON" => CatalogGenerateCoupon(), "DATE_APPLY" => false ) ); $cRes = ($CID > 0); if ($cRes) { $i++; } } } if (!$bVarsFromForm) { if (empty($_POST['apply'])) { if (!empty($returnUrl)) LocalRedirect($returnUrl); else LocalRedirect('/bitrix/admin/cat_discount_admin.php?lang='.LANGUAGE_ID.GetFilterParams('filter_', false)); } else { LocalRedirect('/bitrix/admin/cat_discount_edit.php?lang='.LANGUAGE_ID.'&ID='.$ID.GetFilterParams('filter_', false).'&'.$tabControl->ActiveTabParam()); } } } } } $arDefaultValues = array( 'XML_ID' => '', 'SITE_ID' => '', 'NAME' => '', 'ACTIVE' => 'Y', 'SORT' => 100, 'ACTIVE_FROM' => '', 'ACTIVE_TO' => '', 'RENEWAL' => 'N', 'VALUE_TYPE' => 'P', 'VALUE' => '', 'MAX_DISCOUNT' => '', 'CURRENCY' => '', 'PRIORITY' => 1, 'LAST_DISCOUNT' => 'Y', 'NOTES' => '', 'CONDITIONS' => '', ); $arDefCoupons = array( 'COUPON_ADD' => 'N', 'COUPON_TYPE' => Catalog\DiscountCouponTable::TYPE_ONE_ORDER, 'COUPON_COUNT' => '', ); $arSelect = array_merge(array('ID', 'VERSION'), array_keys($arDefaultValues)); $arDiscount = $arDefaultValues; $arDiscountGroupList = array(); $arDiscountCatList = array(); $arCoupons = $arDefCoupons; if (0 < $ID) { $rsDiscounts = CCatalogDiscount::GetList(array(), array("ID" => $ID), false, false, $arSelect); if (!($arDiscount = $rsDiscounts->Fetch())) { $ID = 0; $arDiscount = $arDefaultValues; $arCoupons = $arDefCoupons; } else { $rsDiscountGroups = CCatalogDiscount::GetDiscountGroupsList( array(), array('DISCOUNT_ID' => $ID, '>USER_GROUP_ID' => 0), false, false, array('ID', 'DISCOUNT_ID', 'USER_GROUP_ID') ); while ($arDiscountGroup = $rsDiscountGroups->Fetch()) { $arDiscountGroupList[] = (int)$arDiscountGroup['USER_GROUP_ID']; } $rsDiscountCats = CCatalogDiscount::GetDiscountCatsList( array(), array('DISCOUNT_ID' => $ID, '>PRICE_TYPE_ID' => 0), false, false, array('ID', 'DISCOUNT_ID', 'PRICE_TYPE_ID') ); while ($arDiscountCat = $rsDiscountCats->Fetch()) { $arDiscountCatList[] = (int)$arDiscountCat['PRICE_TYPE_ID']; } if (!isset($arDiscount['VERSION']) || (int)$arDiscount['VERSION'] != CCatalogDiscount::CURRENT_FORMAT) { $readOnly = true; $boolShowCoupons = false; $rsAdminNotify = CAdminNotify::GetList(array(), array('MODULE_ID'=>'catalog', 'TAG' => 'CATALOG_DISC_CONVERT')); if (!($arAdminNotify = $rsAdminNotify->Fetch())) { $strLangPath = $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/catalog/lang/'; $strDefLang = false; $arLangList = array(); $rsLangs = CLanguage::GetList("def", "desc"); while ($arOneLang = $rsLangs->Fetch()) { if (empty($strDefLang)) $strDefLang = $arOneLang['LID']; $arLangList[] = $arOneLang['LID']; } $arMess = __GetCatLangMessages($strLangPath, '/admin/cat_discount_edit.php', array('BT_MOD_CAT_DSC_CONV_INVITE'), '', $arLangList); if (is_array($arMess) && !empty($arMess['BT_MOD_CAT_DSC_CONV_INVITE'][$strDefLang])) { $arFields = array( "MESSAGE" => str_replace("#LINK#", '/bitrix/admin/cat_discount_convert.php', $arMess['BT_MOD_CAT_DSC_CONV_INVITE'][$strDefLang]), "TAG" => "CATALOG_DISC_CONVERT", "MODULE_ID" => "catalog", "ENABLE_CLOSE" => "N" ); $arLangMess = array(); foreach ($arMess['BT_MOD_CAT_DSC_CONV_INVITE'] as $strLangID => $strMess) { if (empty($strMess)) continue; $arLangMess[$strLangID] = str_replace("#LINK#", '/bitrix/admin/cat_discount_convert.php', $strMess); } if (!empty($arLangMess)) $arFields['LANG'] = $arLangMess; CAdminNotify::Add($arFields); } } } } } if ($bVarsFromForm) { if ($boolCondParseError) { $mxTempo = $arDiscount['CONDITIONS']; $arDiscount = $arFields; $arDiscount['CONDITIONS'] = $mxTempo; unset($mxTempo); } else { $arDiscount = $arFields; } $arDiscountGroupList = $arFields['GROUP_IDS']; $arDiscountCatList = $arFields['CATALOG_GROUP_IDS']; if (isset($arCouponFields)) $arCoupons = $arCouponFields; } if ($ID > 0 && !$boolCopy) $APPLICATION->SetTitle(str_replace("#ID#", $ID, GetMessage("DSC_TITLE_UPDATE"))); else $APPLICATION->SetTitle(GetMessage("DSC_TITLE_ADD")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $aMenu = array( array( "TEXT" => GetMessage("CDEN_2FLIST"), "ICON" => "btn_list", "LINK" => "/bitrix/admin/cat_discount_admin.php?lang=".LANGUAGE_ID.GetFilterParams("filter_", false) ) ); if ($ID > 0) { $aMenu[] = array("SEPARATOR" => "Y"); $aMenu[] = array( "TEXT" => GetMessage("CDEN_DCPN_LIST"), "LINK" => "/bitrix/admin/cat_discount_coupon.php?lang=".LANGUAGE_ID."&set_filter=Y&filter_discount_id=".$ID ); if (!$readOnly) { $aMenu[] = array("SEPARATOR" => "Y"); $aMenu[] = array( "TEXT" => GetMessage("CDEN_NEW_DISCOUNT"), "ICON" => "btn_new", "LINK" => "/bitrix/admin/cat_discount_edit.php?lang=".LANGUAGE_ID.GetFilterParams("filter_", false) ); if (!$boolCopy) { $aMenu[] = array( "TEXT"=>GetMessage("BT_CAT_DISCOUNT_EDIT_CONT_NAME_COPY"), "LINK"=>"/bitrix/admin/cat_discount_edit.php?ID=".$ID."&action=copy&lang=".LANGUAGE_ID.GetFilterParams("filter_", false), "ICON"=>"btn_copy", ); $aMenu[] = array( "TEXT" => GetMessage("CDEN_DELETE_DISCOUNT"), "ICON" => "btn_delete", "LINK" => "javascript:if(confirm('".GetMessageJS("CDEN_DELETE_DISCOUNT_CONFIRM")."')) window.location='/bitrix/admin/cat_discount_admin.php?action=delete&ID[]=".$ID."&lang=".LANGUAGE_ID."&".bitrix_sessid_get()."#tb';", "WARNING" => "Y" ); } } } $context = new CAdminContextMenu($aMenu); $context->Show(); CAdminMessage::ShowMessage($errorMessage); $arSiteList = array(); $rsSites = CSite::GetList(); while ($arSite = $rsSites->Fetch()) { $arSiteList[$arSite['LID']] = '('.$arSite['LID'].') '.$arSite['NAME']; } $arCurrencyList = array(); $rsCurrencies = CCurrency::GetList('sort', 'asc'); while ($arCurrency = $rsCurrencies->Fetch()) { $arCurrencyList[$arCurrency['CURRENCY']] = $arCurrency['CURRENCY']; } $tabControl->BeginPrologContent(); CAdminCalendar::ShowScript(); $tabControl->EndPrologContent(); $tabControl->BeginEpilogContent(); ?>