Пример #1
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;
 }
Пример #2
0
			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