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; }
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; }
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; }