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; }
echo CAdminCalendar::CalendarPeriodCustom("ACTIVE_FROM", "ACTIVE_TO", $arDiscount['ACTIVE_FROM'], $arDiscount['ACTIVE_TO'], true, 19, true, array( CAdminCalendar::PERIOD_EMPTY => GetMessage('BT_CAT_DISCOUNT_EDIT_CALENDARE_PERIOD_EMPTY'), CAdminCalendar::PERIOD_INTERVAL => GetMessage('BT_CAT_DISCOUNT_EDIT_CALENDARE_PERIOD_INTERVAL') )); ?></td> </tr><? $tabControl->EndCustomField("PERIOD", '<input type="hidden" name="ACTIVE_FROM" value="'.htmlspecialcharsbx($arDiscount['ACTIVE_FROM']).'">'. '<input type="hidden" name="ACTIVE_TO" value="'.htmlspecialcharsbx($arDiscount['ACTIVE_FROM']).'">' ); $tabControl->BeginCustomField("VALUE_TYPE", GetMessage('DSC_TYPE').":",true); ?><tr id="tr_VALUE_TYPE" class="adm-detail-required-field"> <td width="40%"><? echo $tabControl->GetCustomLabelHTML(); ?></td> <td width="60%"> <select name="VALUE_TYPE" id="ob_value_type"><? foreach (CCatalogDiscount::GetDiscountTypes(true) as $key => $value) { ?><option value="<? echo htmlspecialcharsbx($key); ?>"<?if ($arDiscount['VALUE_TYPE'] == $key) echo " selected";?>><? echo htmlspecialcharsex($value); ?></option><? } ?></select> </td> </tr><? $tabControl->EndCustomField("VALUE_TYPE", '<input type="hidden" name="VALUE_TYPE" value="'.htmlspecialcharsbx($arDiscount['VALUE_TYPE']).'">' ); $tabControl->AddEditField("VALUE", GetMessage("DSC_VALUE").":", true, array('size' => 20, 'maxlength' => 20), roundEx($arDiscount['VALUE'], CATALOG_VALUE_PRECISION)); $tabControl->AddDropDownField("CURRENCY", GetMessage('DSC_CURRENCY').':', true, $arCurrencyList, $arDiscount['CURRENCY']); $tabControl->BeginCustomField("MAX_DISCOUNT", GetMessage('DSC_MAX_SUM').":",false); ?><tr id="tr_MAX_DISCOUNT" style="display: <? echo 'P' == $arDiscount['VALUE_TYPE'] ? 'table-row' : 'none'; ?>;"> <td width="40%"><? echo $tabControl->GetCustomLabelHTML(); ?></td> <td width="60%"><input id="ob_max_discount" type="text" name="MAX_DISCOUNT" size="20" maxlength="20" value="<?php