Ejemplo n.º 1
0
 public function CheckFields($ACTION, &$arFields, $ID = 0)
 {
     global $APPLICATION;
     global $DB;
     if ((is_set($arFields, "SITE_ID") || $ACTION == "ADD") && empty($arFields["SITE_ID"])) {
         $APPLICATION->ThrowException(GetMessage("KGD_EMPTY_SITE"), "SITE_ID");
         return false;
     }
     if ((is_set($arFields, "CURRENCY") || $ACTION == "ADD") && empty($arFields["CURRENCY"])) {
         $APPLICATION->ThrowException(GetMessage("KGD_EMPTY_CURRENCY"), "CURRENCY");
         return false;
     }
     if ((is_set($arFields, "NAME") || $ACTION == "ADD") && empty($arFields["NAME"])) {
         $APPLICATION->ThrowException(GetMessage("KGD_EMPTY_NAME"), "NAME");
         return false;
     }
     if ((is_set($arFields, "ACTIVE") || $ACTION == "ADD") && $arFields["ACTIVE"] != "N") {
         $arFields["ACTIVE"] = "Y";
     }
     if ((is_set($arFields, "ACTIVE_FROM") || $ACTION == "ADD") && !$DB->IsDate($arFields["ACTIVE_FROM"], false, LANG, "FULL")) {
         $arFields["ACTIVE_FROM"] = false;
     }
     if ((is_set($arFields, "ACTIVE_TO") || $ACTION == "ADD") && !$DB->IsDate($arFields["ACTIVE_TO"], false, LANG, "FULL")) {
         $arFields["ACTIVE_TO"] = false;
     }
     if ((is_set($arFields, "RENEWAL") || $ACTION == "ADD") && $arFields["RENEWAL"] != "Y") {
         $arFields["RENEWAL"] = "N";
     }
     if ((is_set($arFields, "MAX_USES") || $ACTION == "ADD") && intval($arFields["MAX_USES"]) <= 0) {
         $arFields["MAX_USES"] = 0;
     }
     if ((is_set($arFields, "COUNT_USES") || $ACTION == "ADD") && intval($arFields["COUNT_USES"]) <= 0) {
         $arFields["COUNT_USES"] = 0;
     }
     if ((is_set($arFields, "CATALOG_COUPONS") || $ACTION == "ADD") && !is_array($arFields['CATALOG_COUPONS']) && empty($arFields["CATALOG_COUPONS"])) {
         $arFields["CATALOG_COUPONS"] = false;
     }
     if ((is_set($arFields, "SORT") || $ACTION == "ADD") && intval($arFields["SORT"]) <= 0) {
         $arFields["SORT"] = 100;
     }
     if (is_set($arFields, "MAX_DISCOUNT") || $ACTION == "ADD") {
         $arFields["MAX_DISCOUNT"] = str_replace(",", ".", $arFields["MAX_DISCOUNT"]);
         $arFields["MAX_DISCOUNT"] = doubleval($arFields["MAX_DISCOUNT"]);
     }
     if ((is_set($arFields, "VALUE_TYPE") || $ACTION == "ADD") && !in_array($arFields["VALUE_TYPE"], array("F", "P", "S"))) {
         $arFields["VALUE_TYPE"] = "P";
     }
     if (is_set($arFields, "VALUE") || $ACTION == "ADD") {
         $arFields["VALUE"] = str_replace(",", ".", $arFields["VALUE"]);
         $arFields["VALUE"] = doubleval($arFields["VALUE"]);
         if (!(0 < $arFields["VALUE"])) {
             $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_DISC_ERR_BAD_VALUE"), "VALUE");
             return false;
         }
     }
     if (isset($arFields["VALUE_TYPE"]) && isset($arFields["VALUE"])) {
         if ('P' == $arFields["VALUE_TYPE"] && 100 < $arFields["VALUE"]) {
             $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_DISC_ERR_BAD_VALUE"), "VALUE");
             return false;
         }
     }
     if (is_set($arFields, "MIN_ORDER_SUM") || $ACTION == "ADD") {
         $arFields["MIN_ORDER_SUM"] = str_replace(",", ".", $arFields["MIN_ORDER_SUM"]);
         $arFields["MIN_ORDER_SUM"] = doubleval($arFields["MIN_ORDER_SUM"]);
     }
     if ((is_set($arFields, 'PRIORITY') || $ACTION == 'ADD') && intval($arFields['PRIORITY']) <= 0) {
         $arFields['PRIORITY'] = 1;
     }
     if ((is_set($arFields, 'LAST_DISCOUNT') || $ACTION == 'ADD') && $arFields["LAST_DISCOUNT"] != "N") {
         $arFields["LAST_DISCOUNT"] = 'Y';
     }
     $arFields['TYPE'] = DISCOUNT_TYPE_STANDART;
     $arFields['VERSION'] = CATALOG_DISCOUNT_NEW_VERSION;
     if (is_set($arFields, 'UNPACK')) {
         unset($arFields['UNPACK']);
     }
     if (is_set($arFields, 'CONDITIONS') || $ACTION == 'ADD') {
         if (empty($arFields['CONDITIONS'])) {
             $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_DISC_ERR_EMPTY_CONDITIONS"), "CONDITIONS");
             return false;
         } else {
             if (!is_array($arFields['CONDITIONS'])) {
                 if (!CheckSerializedData($arFields['CONDITIONS'])) {
                     $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_DISC_ERR_BAD_CONDITIONS"), "CONDITIONS");
                     return false;
                 }
                 $arFields['CONDITIONS'] = unserialize($arFields['CONDITIONS']);
                 if (!is_array($arFields['CONDITIONS']) || empty($arFields['CONDITIONS'])) {
                     $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_DISC_ERR_BAD_CONDITIONS"), "CONDITIONS");
                     return false;
                 }
             }
             $obCond = new CCatalogCondTree();
             $boolCond = $obCond->Init(BT_COND_MODE_GENERATE, BT_COND_BUILD_CATALOG, array());
             if (!$boolCond) {
                 return false;
             }
             $strEval = $obCond->Generate($arFields['CONDITIONS'], array('FIELD' => '$arProduct'));
             if (empty($strEval) || 'false' == $strEval) {
                 $APPLICATION->ThrowException(GetMessage("BT_MOD_CATALOG_DISC_ERR_BAD_CONDITIONS"), "CONDITIONS");
                 return false;
             }
             $arFields['UNPACK'] = $strEval;
             $arFields['CONDITIONS'] = serialize($arFields['CONDITIONS']);
         }
     }
     return true;
 }
Ejemplo n.º 2
0
 public function CheckFields($strAction, &$arFields, $intID = 0)
 {
     global $APPLICATION;
     global $DB;
     global $USER;
     $strAction = strtoupper($strAction);
     if ('UPDATE' != $strAction && 'ADD' != $strAction) {
         return false;
     }
     $intID = (int) $intID;
     $arCurrencyList = Currency\CurrencyManager::getCurrencyList();
     $boolResult = true;
     $arMsg = array();
     $clearFields = array('ID', '~ID', 'UNPACK', '~UNPACK', '~CONDITIONS', 'CONDITIONS', 'USE_COUPONS', '~USE_COUPONS', 'HANDLERS', '~HANDLERS', '~TYPE', '~RENEWAL', '~PRIORITY', '~LAST_DISCOUNT', '~VERSION', 'TIMESTAMP_X', 'DATE_CREATE', '~DATE_CREATE', '~MODIFIED_BY', '~CREATED_BY');
     if ($strAction == 'UPDATE') {
         $clearFields[] = 'CREATED_BY';
     }
     $arFields = array_filter($arFields, 'CCatalogDiscountSave::clearFields');
     foreach ($clearFields as &$fieldName) {
         if (isset($arFields[$fieldName])) {
             unset($arFields[$fieldName]);
         }
     }
     unset($fieldName, $clearFields);
     $arFields['TYPE'] = self::ENTITY_ID;
     $arFields["RENEWAL"] = 'N';
     $arFields['PRIORITY'] = 1;
     $arFields['LAST_DISCOUNT'] = 'Y';
     $arFields['VERSION'] = Catalog\DiscountTable::ACTUAL_VERSION;
     if ((is_set($arFields, "SITE_ID") || $strAction == "ADD") && empty($arFields["SITE_ID"])) {
         $arMsg[] = array('id' => 'SITE_ID', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_EMPTY_SITE'));
         $boolResult = false;
     } else {
         $rsSites = CSite::GetByID($arFields['SITE_ID']);
         if (!($arSite = $rsSites->Fetch())) {
             $arMsg[] = array('id' => 'SITE_ID', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_BAD_SITE'));
             $boolResult = false;
         }
     }
     if ((is_set($arFields, "NAME") || $strAction == "ADD") && strlen(trim($arFields["NAME"])) <= 0) {
         $arMsg[] = array('id' => 'NAME', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_EMPTY_NAME'));
         $boolResult = false;
     }
     if ((is_set($arFields, "ACTIVE") || $strAction == "ADD") && $arFields["ACTIVE"] != "N") {
         $arFields["ACTIVE"] = "Y";
     }
     if ((is_set($arFields, 'SORT') || $strAction == 'ADD') && intval($arFields['SORT']) <= 0) {
         $arFields['SORT'] = 500;
     }
     if ((is_set($arFields, "CURRENCY") || $strAction == "ADD") && empty($arFields["CURRENCY"])) {
         $arMsg[] = array('id' => 'CURRENCY', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_EMPTY_CURRENCY'));
         $boolResult = false;
     }
     if ((is_set($arFields, "ACTIVE_FROM") || $strAction == "ADD") && !$DB->IsDate($arFields["ACTIVE_FROM"], false, LANGUAGE_ID, "FULL")) {
         $arFields["ACTIVE_FROM"] = false;
     }
     if ((is_set($arFields, "ACTIVE_TO") || $strAction == "ADD") && !$DB->IsDate($arFields["ACTIVE_TO"], false, LANGUAGE_ID, "FULL")) {
         $arFields["ACTIVE_TO"] = false;
     }
     if ((is_set($arFields, 'COUNT_SIZE') || $strAction == 'ADD') && intval($arFields['COUNT_SIZE']) < 0) {
         $arFields['COUNT_SIZE'] = 0;
     }
     if ((is_set($arFields, 'COUNT_TYPE') || $strAction == 'ADD') && !in_array($arFields['COUNT_TYPE'], array('D', 'M', 'Y'))) {
         $arFields['COUNT_TYPE'] = 'Y';
     }
     if ((is_set($arFields, "COUNT_FROM") || $strAction == "ADD") && !$DB->IsDate($arFields["COUNT_FROM"], false, LANGUAGE_ID, "FULL")) {
         $arFields["COUNT_FROM"] = false;
     }
     if ((is_set($arFields, "COUNT_TO") || $strAction == "ADD") && !$DB->IsDate($arFields["COUNT_TO"], false, LANGUAGE_ID, "FULL")) {
         $arFields["COUNT_TO"] = false;
     }
     if (is_set($arFields, 'COUNT_PERIOD')) {
         unset($arFields['COUNT_PERIOD']);
     }
     $strCountPeriod = self::COUNT_TIME_ALL;
     if (is_set($arFields, 'COUNT_SIZE') && intval($arFields['COUNT_SIZE']) > 0) {
         $strCountPeriod = self::COUNT_TIME_PERIOD;
     }
     if (!empty($arFields["COUNT_FROM"]) || !empty($arFields["COUNT_TO"])) {
         $strCountPeriod = self::COUNT_TIME_INTERVAL;
     }
     $arFields['COUNT_PERIOD'] = $strCountPeriod;
     if ((is_set($arFields, 'ACTION_SIZE') || $strAction == 'ADD') && intval($arFields['ACTION_SIZE']) < 0) {
         $arFields['ACTION_SIZE'] = 0;
     }
     if ((is_set($arFields, 'ACTION_TYPE') || $strAction == 'ADD') && !in_array($arFields['ACTION_TYPE'], array('D', 'M', 'Y'))) {
         $arFields['ACTION_TYPE'] = 'Y';
     }
     $intUserID = 0;
     $boolUserExist = CCatalog::IsUserExists();
     if ($boolUserExist) {
         $intUserID = (int) $USER->GetID();
     }
     $strDateFunction = $DB->GetNowFunction();
     $arFields['~TIMESTAMP_X'] = $strDateFunction;
     if ($boolUserExist) {
         if (!array_key_exists('MODIFIED_BY', $arFields) || (int) $arFields["MODIFIED_BY"] <= 0) {
             $arFields["MODIFIED_BY"] = $intUserID;
         }
     }
     if ('ADD' == $strAction) {
         $arFields['~DATE_CREATE'] = $strDateFunction;
         if ($boolUserExist) {
             if (!array_key_exists('CREATED_BY', $arFields) || (int) $arFields["CREATED_BY"] <= 0) {
                 $arFields["CREATED_BY"] = $intUserID;
             }
         }
     }
     if (is_set($arFields, 'RANGES') || $strAction == 'ADD') {
         if (!is_array($arFields['RANGES']) || empty($arFields['RANGES'])) {
             $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_EMPTY_RANGES'));
             $boolResult = false;
         } else {
             $boolRepeat = false;
             $arRangeList = array();
             foreach ($arFields['RANGES'] as &$arRange) {
                 if (!is_array($arRange) || empty($arRange)) {
                     $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_BAD_RANGE'));
                     $boolResult = false;
                 } else {
                     if (empty($arRange['TYPE']) || $arRange['TYPE'] != self::TYPE_FIX) {
                         $arRange['TYPE'] = self::TYPE_PERCENT;
                     }
                     if (isset($arRange['VALUE'])) {
                         $arRange["VALUE"] = str_replace(",", ".", $arRange["VALUE"]);
                         $arRange["VALUE"] = doubleval($arRange["VALUE"]);
                         if (!(0 < $arRange["VALUE"])) {
                             $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_BAD_RANGE_VALUE'));
                             $boolResult = false;
                         } elseif (self::TYPE_PERCENT == $arRange['TYPE'] && 100 < $arRange["VALUE"]) {
                             $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_BAD_RANGE_VALUE'));
                             $boolResult = false;
                         }
                     } else {
                         $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_BAD_RANGE_VALUE'));
                         $boolResult = false;
                     }
                     if (isset($arRange['RANGE_FROM'])) {
                         $arRange["RANGE_FROM"] = str_replace(",", ".", $arRange["RANGE_FROM"]);
                         $arRange["RANGE_FROM"] = doubleval($arRange["RANGE_FROM"]);
                         if (0 > $arRange["RANGE_FROM"]) {
                             $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_BAD_RANGE_FROM'));
                             $boolResult = false;
                         } else {
                             if (in_array($arRange["RANGE_FROM"], $arRangeList)) {
                                 $boolRepeat = true;
                             } else {
                                 $arRangeList[] = $arRange["RANGE_FROM"];
                             }
                         }
                     } else {
                         $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_BAD_RANGE_FROM'));
                         $boolResult = false;
                     }
                 }
             }
             if (isset($arRange)) {
                 unset($arRange);
             }
             if ($boolRepeat) {
                 $arMsg[] = array('id' => 'RANGES', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_DUP_RANGE_FROM'));
                 $boolResult = false;
             }
         }
     }
     if (isset($arFields['GROUP_IDS']) || $strAction == 'ADD') {
         if (!empty($arFields['GROUP_IDS'])) {
             if (!is_array($arFields['GROUP_IDS'])) {
                 $arFields['GROUP_IDS'] = array($arFields['GROUP_IDS']);
             }
             $arValid = array();
             foreach ($arFields['GROUP_IDS'] as &$intGroupID) {
                 $intGroupID = (int) $intGroupID;
                 if (0 < $intGroupID && 2 != $intGroupID) {
                     $arValid[] = $intGroupID;
                 }
             }
             if (isset($intGroupID)) {
                 unset($intGroupID);
             }
             $arFields['GROUP_IDS'] = array_unique($arValid);
         }
         if (empty($arFields['GROUP_IDS'])) {
             $arMsg[] = array('id' => 'GROUP_IDS', 'text' => Loc::getMessage('BT_MOD_CAT_DSC_SV_ERR_EMPTY_GROUP_IDS'));
             $boolResult = false;
         }
     }
     if ($boolResult) {
         $cond = new CCatalogCondTree();
         $boolCond = $cond->Init(BT_COND_MODE_GENERATE, BT_COND_BUILD_CATALOG, array());
         if (!$boolCond) {
             $boolResult = false;
         } else {
             $arFields['CONDITIONS'] = $cond->GetDefaultConditions();
             $arFields['UNPACK'] = $cond->Generate($arFields['CONDITIONS'], array());
             $arFields['CONDITIONS'] = serialize($arFields['CONDITIONS']);
         }
     }
     if (!$boolResult) {
         $obError = new CAdminException($arMsg);
         $APPLICATION->ResetException();
         $APPLICATION->ThrowException($obError);
     }
     return $boolResult;
 }
Ejemplo n.º 3
0
 public function CheckFields($ACTION, &$arFields, $ID = 0)
 {
     global $APPLICATION, $DB, $USER;
     $boolResult = true;
     $arMsg = array();
     $ACTION = strtoupper($ACTION);
     if ($ACTION != 'UPDATE' && $ACTION != 'ADD') {
         return false;
     }
     if (!is_array($arFields)) {
         return false;
     }
     $boolValueType = false;
     $boolValue = false;
     $arCurrent = array('VALUE' => 0, 'VALUE_TYPE' => '');
     $clearFields = array('ID', '~ID', 'UNPACK', '~UNPACK', '~CONDITIONS', 'USE_COUPONS', '~USE_COUPONS', 'HANDLERS', '~HANDLERS', '~TYPE', '~VERSION', 'TIMESTAMP_X', 'DATE_CREATE', '~DATE_CREATE', '~MODIFIED_BY', '~CREATED_BY');
     if ($ACTION == 'UPDATE') {
         $clearFields[] = 'CREATED_BY';
     }
     $arFields = array_filter($arFields, 'CCatalogDiscount::clearFields');
     foreach ($clearFields as &$fieldName) {
         if (isset($arFields[$fieldName])) {
             unset($arFields[$fieldName]);
         }
     }
     unset($fieldName, $clearFields);
     $arFields['TYPE'] = self::ENTITY_ID;
     $arFields['VERSION'] = self::CURRENT_FORMAT;
     if ($ACTION == 'ADD') {
         $boolValueType = true;
         $boolValue = true;
         $defaultValues = array('ACTIVE' => 'Y', 'RENEWAL' => 'N', 'MAX_USES' => 0, 'COUNT_USES' => 0, 'SORT' => 100, 'MAX_DISCOUNT' => 0, 'VALUE_TYPE' => self::TYPE_PERCENT, 'MIN_ORDER_SUM' => 0, 'PRIORITY' => 1, 'LAST_DISCOUNT' => 'Y');
         $arFields = array_merge($defaultValues, $arFields);
         unset($defaultValues);
         if (!isset($arFields['SITE_ID'])) {
             $boolResult = false;
             $arMsg[] = array('id' => 'SITE_ID', 'text' => Loc::getMessage("KGD_EMPTY_SITE"));
         }
         if (!isset($arFields['CURRENCY'])) {
             $boolResult = false;
             $arMsg[] = array('id' => 'CURRENCY', 'text' => Loc::getMessage('KGD_EMPTY_CURRENCY'));
         }
         if (!isset($arFields['NAME'])) {
             $boolResult = false;
             $arMsg[] = array('id' => 'NAME', 'text' => Loc::getMessage('KGD_EMPTY_NAME'));
         }
         if (!isset($arFields['VALUE'])) {
             $boolResult = false;
             $arMsg[] = array('id' => 'VALUE', 'text' => Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_BAD_VALUE'));
         }
         if (!isset($arFields['CONDITIONS'])) {
             $boolResult = false;
             $arMsg[] = array('id' => 'CONDITIONS', 'text' => Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_EMPTY_CONDITIONS'));
         }
         $arFields['USE_COUPONS'] = 'N';
     }
     if ($ACTION == 'UPDATE') {
         $ID = (int) $ID;
         if ($ID <= 0) {
             $boolResult = false;
             $arMsg[] = array('id' => 'ID', 'text' => Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_BAD_ID', array('#ID#', $ID)));
         } else {
             $boolValueType = isset($arFields['VALUE_TYPE']);
             $boolValue = isset($arFields['VALUE']);
             if ($boolValueType != $boolValue) {
                 $rsDiscounts = CCatalogDiscount::GetList(array(), array('ID' => $ID), false, false, array('ID', 'VALUE_TYPE', 'VALUE'));
                 if ($arCurrent = $rsDiscounts->Fetch()) {
                     $arCurrent['VALUE'] = doubleval($arCurrent['VALUE']);
                 } else {
                     $boolResult = false;
                     $arMsg[] = array('id' => 'ID', 'text' => Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_BAD_ID', array('#ID#', $ID)));
                 }
             }
         }
     }
     if ($boolResult) {
         if (isset($arFields['SITE_ID'])) {
             if (empty($arFields['SITE_ID'])) {
                 $boolResult = false;
                 $arMsg[] = array('id' => 'SITE_ID', 'text' => Loc::getMessage('KGD_EMPTY_SITE'));
             }
         }
         if (isset($arFields['CURRENCY'])) {
             if (empty($arFields['CURRENCY'])) {
                 $boolResult = false;
                 $arMsg[] = array('id' => 'CURRENCY', 'text' => Loc::getMessage('KGD_EMPTY_CURRENCY'));
             }
         }
         if (isset($arFields['NAME'])) {
             $arFields['NAME'] = trim($arFields['NAME']);
             if ($arFields['NAME'] === '') {
                 $boolResult = false;
                 $arMsg[] = array('id' => 'NAME', 'text' => Loc::getMessage('KGD_EMPTY_NAME'));
             }
         }
         if (isset($arFields['ACTIVE'])) {
             $arFields['ACTIVE'] = $arFields['ACTIVE'] != 'N' ? 'Y' : 'N';
         }
         if (isset($arFields['ACTIVE_FROM'])) {
             if (!$DB->IsDate($arFields['ACTIVE_FROM'], false, LANGUAGE_ID, 'FULL')) {
                 $arFields['ACTIVE_FROM'] = false;
             }
         }
         if (isset($arFields['ACTIVE_TO'])) {
             if (!$DB->IsDate($arFields['ACTIVE_TO'], false, LANGUAGE_ID, 'FULL')) {
                 $arFields['ACTIVE_TO'] = false;
             }
         }
         if (isset($arFields['RENEWAL'])) {
             $arFields['RENEWAL'] = $arFields['RENEWAL'] == 'Y' ? 'Y' : 'N';
         }
         if (isset($arFields['MAX_USES'])) {
             $arFields['MAX_USES'] = (int) $arFields['MAX_USES'];
             if ($arFields['MAX_USES'] < 0) {
                 $arFields['MAX_USES'] = 0;
             }
         }
         if (isset($arFields['COUNT_USES'])) {
             $arFields['COUNT_USES'] = (int) $arFields['COUNT_USES'];
             if ($arFields['COUNT_USES'] < 0) {
                 $arFields['COUNT_USES'] = 0;
             }
         }
         if (isset($arFields['CATALOG_COUPONS'])) {
             if (empty($arFields['CATALOG_COUPONS']) && !is_array($arFields['CATALOG_COUPONS'])) {
                 unset($arFields['CATALOG_COUPONS']);
             }
         }
         if (isset($arFields['SORT'])) {
             $arFields['SORT'] = (int) $arFields['SORT'];
             if ($arFields['SORT'] <= 0) {
                 $arFields['SORT'] = 100;
             }
         }
         if (isset($arFields['MAX_DISCOUNT'])) {
             $arFields['MAX_DISCOUNT'] = str_replace(',', '.', $arFields['MAX_DISCOUNT']);
             $arFields['MAX_DISCOUNT'] = doubleval($arFields['MAX_DISCOUNT']);
             if ($arFields['MAX_DISCOUNT'] < 0) {
                 $arFields['MAX_DISCOUNT'] = 0;
             }
         }
         if ($boolValueType) {
             if (!in_array($arFields['VALUE_TYPE'], CCatalogDiscount::GetDiscountTypes())) {
                 $arFields['VALUE_TYPE'] = self::TYPE_PERCENT;
             }
         }
         if ($boolValue) {
             $arFields['VALUE'] = str_replace(',', '.', $arFields['VALUE']);
             $arFields['VALUE'] = doubleval($arFields['VALUE']);
             if ($arFields['VALUE'] <= 0) {
                 $boolResult = false;
                 $arMsg[] = array('id' => 'VALUE', 'text' => Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_BAD_VALUE'));
             }
         }
         if ($ACTION == 'UPDATE') {
             if ($boolValue != $boolValueType) {
                 if (!$boolValue) {
                     $arFields['VALUE'] = $arCurrent['VALUE'];
                     $boolValue = true;
                 }
                 if (!$boolValueType) {
                     $arFields['VALUE_TYPE'] = $arCurrent['VALUE_TYPE'];
                     $boolValueType = true;
                 }
             }
         }
         if ($boolValue && $boolValueType) {
             if ($arFields['VALUE_TYPE'] == self::TYPE_PERCENT && $arFields['VALUE'] > 100) {
                 $boolResult = false;
                 $arMsg[] = array('id' => 'VALUE', 'text' => Loc::getMessage("BT_MOD_CATALOG_DISC_ERR_BAD_VALUE"));
             }
         }
         if (isset($arFields['MIN_ORDER_SUM'])) {
             $arFields['MIN_ORDER_SUM'] = str_replace(',', '.', $arFields['MIN_ORDER_SUM']);
             $arFields['MIN_ORDER_SUM'] = doubleval($arFields['MIN_ORDER_SUM']);
         }
         if (isset($arFields['PRIORITY'])) {
             $arFields['PRIORITY'] = (int) $arFields['PRIORITY'];
             if (0 >= $arFields['PRIORITY']) {
                 $arFields['PRIORITY'] = 1;
             }
         }
         if (isset($arFields['LAST_DISCOUNT'])) {
             $arFields['LAST_DISCOUNT'] = $arFields['LAST_DISCOUNT'] != 'N' ? 'Y' : 'N';
         }
     }
     if ($boolResult) {
         if (isset($arFields['CONDITIONS'])) {
             if (empty($arFields['CONDITIONS'])) {
                 $boolResult = false;
                 $arMsg[] = array('id' => 'CONDITIONS', 'text' => Loc::getMessage("BT_MOD_CATALOG_DISC_ERR_EMPTY_CONDITIONS"));
             } else {
                 $usedHandlers = array();
                 $boolCond = true;
                 $strEval = '';
                 if (!is_array($arFields['CONDITIONS'])) {
                     if (!CheckSerializedData($arFields['CONDITIONS'])) {
                         $boolCond = false;
                         $boolResult = false;
                         $arMsg[] = array('id' => 'CONDITIONS', 'text' => Loc::getMessage("BT_MOD_CATALOG_DISC_ERR_BAD_CONDITIONS"));
                     } else {
                         $arFields['CONDITIONS'] = unserialize($arFields['CONDITIONS']);
                         if (empty($arFields['CONDITIONS']) || !is_array($arFields['CONDITIONS'])) {
                             $boolCond = false;
                             $boolResult = false;
                             $arMsg[] = array('id' => 'CONDITIONS', 'text' => Loc::getMessage("BT_MOD_CATALOG_DISC_ERR_BAD_CONDITIONS"));
                         }
                     }
                 }
                 if ($boolCond) {
                     $obCond = new CCatalogCondTree();
                     $boolCond = $obCond->Init(BT_COND_MODE_GENERATE, BT_COND_BUILD_CATALOG, array());
                     if (!$boolCond) {
                         return false;
                     }
                     $strEval = $obCond->Generate($arFields['CONDITIONS'], array('FIELD' => '$arProduct'));
                     if (empty($strEval) || 'false' == $strEval) {
                         $boolCond = false;
                         $boolResult = false;
                         $arMsg[] = array('id' => 'CONDITIONS', 'text' => Loc::getMessage("BT_MOD_CATALOG_DISC_ERR_BAD_CONDITIONS"));
                     } else {
                         $usedHandlers = $obCond->GetConditionHandlers();
                     }
                 }
                 if ($boolCond) {
                     $arFields['UNPACK'] = $strEval;
                     $arFields['CONDITIONS'] = serialize($arFields['CONDITIONS']);
                     if (!empty($usedHandlers)) {
                         $arFields['HANDLERS'] = $usedHandlers;
                     }
                     if (strtolower($DB->type) == 'mysql') {
                         if (64000 < CUtil::BinStrlen($arFields['UNPACK']) || 64000 < CUtil::BinStrlen($arFields['CONDITIONS'])) {
                             $boolResult = false;
                             $arMsg[] = array('id' => 'CONDITIONS', 'text' => Loc::getMessage('BT_MOD_CATALOG_DISC_ERR_CONDITIONS_TOO_LONG'));
                             unset($arFields['UNPACK']);
                             $arFields['CONDITIONS'] = unserialize($arFields['CONDITIONS']);
                         }
                     }
                 }
             }
         }
     }
     $intUserID = 0;
     $boolUserExist = CCatalog::IsUserExists();
     if ($boolUserExist) {
         $intUserID = (int) $USER->GetID();
     }
     $strDateFunction = $DB->GetNowFunction();
     $arFields['~TIMESTAMP_X'] = $strDateFunction;
     if ($boolUserExist) {
         if (!isset($arFields['MODIFIED_BY']) || (int) $arFields["MODIFIED_BY"] <= 0) {
             $arFields["MODIFIED_BY"] = $intUserID;
         }
     }
     if ($ACTION == 'ADD') {
         $arFields['~DATE_CREATE'] = $strDateFunction;
         if ($boolUserExist) {
             if (!isset($arFields['CREATED_BY']) || (int) $arFields["CREATED_BY"] <= 0) {
                 $arFields["CREATED_BY"] = $intUserID;
             }
         }
     }
     if (!$boolResult) {
         $obError = new CAdminException($arMsg);
         $APPLICATION->ResetException();
         $APPLICATION->ThrowException($obError);
     }
     return $boolResult;
 }