public function CheckFields($ACTION, &$arFields, $strCurrencyID = false) { global $APPLICATION, $DB, $USER; $arMsg = array(); $ACTION = strtoupper($ACTION); if ($ACTION != 'UPDATE' && $ACTION != 'ADD') { return false; } if (!is_array($arFields)) { return false; } $defaultValues = array('SORT' => 100, 'BASE' => 'N'); $clearFields = array('~CURRENCY', '~NUMCODE', '~AMOUNT_CNT', '~AMOUNT', '~BASE', 'DATE_UPDATE', 'DATE_CREATE', '~DATE_CREATE', '~MODIFIED_BY', '~CREATED_BY', 'CURRENT_BASE_RATE', '~CURRENT_BASE_RATE'); if ($ACTION == 'UPDATE') { $clearFields[] = 'CREATED_BY'; $clearFields[] = '~CURRENCY'; } $arFields = array_filter($arFields, 'CCurrency::clearFields'); foreach ($clearFields as &$fieldName) { if (array_key_exists($fieldName, $arFields)) { unset($arFields[$fieldName]); } } unset($fieldName, $clearFields); if ($ACTION == 'ADD') { if (!isset($arFields['CURRENCY'])) { $arMsg[] = array('id' => 'CURRENCY', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_CUR_ID_ABSENT')); } elseif (!preg_match("~^[a-z]{3}\$~i", $arFields['CURRENCY'])) { $arMsg[] = array('id' => 'CURRENCY', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_CUR_ID_LAT_EXT')); } else { $arFields['CURRENCY'] = strtoupper($arFields['CURRENCY']); $currencyExist = Currency\CurrencyTable::getList(array('select' => array('CURRENCY'), 'filter' => array('=CURRENCY' => $arFields['CURRENCY'])))->fetch(); if (!empty($currencyExist)) { $arMsg[] = array('id' => 'CURRENCY', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_CUR_ID_EXISTS')); } unset($currencyExist); } $arFields = array_merge($defaultValues, $arFields); if (!isset($arFields['AMOUNT_CNT'])) { $arMsg[] = array('id' => 'AMOUNT_CNT', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_AMOUNT_CNT_ABSENT')); } if (!isset($arFields['AMOUNT'])) { $arMsg[] = array('id' => 'AMOUNT', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_AMOUNT_ABSENT')); } } if ($ACTION == 'UPDATE') { $strCurrencyID = Currency\CurrencyManager::checkCurrencyID($strCurrencyID); if ($strCurrencyID === false) { $arMsg[] = array('id' => 'CURRENCY', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_CUR_ID_BAD')); } } if (empty($arMsg)) { if (isset($arFields['AMOUNT_CNT'])) { $arFields['AMOUNT_CNT'] = (int) $arFields['AMOUNT_CNT']; if ($arFields['AMOUNT_CNT'] <= 0) { $arMsg[] = array('id' => 'AMOUNT_CNT', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_AMOUNT_CNT_BAD')); } } if (isset($arFields['AMOUNT'])) { $arFields['AMOUNT'] = (double) $arFields['AMOUNT']; if ($arFields['AMOUNT'] <= 0) { $arMsg[] = array('id' => 'AMOUNT', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_AMOUNT_BAD')); } } if (isset($arFields['SORT'])) { $arFields['SORT'] = (int) $arFields['SORT']; if ($arFields['SORT'] <= 0) { $arFields['SORT'] = 100; } } if (isset($arFields['BASE'])) { $arFields['BASE'] = (string) $arFields['BASE'] === 'Y' ? 'Y' : 'N'; } if (isset($arFields['NUMCODE'])) { $arFields['NUMCODE'] = (string) $arFields['NUMCODE']; if ($arFields['NUMCODE'] === '') { unset($arFields['NUMCODE']); } elseif (!preg_match("~^[0-9]{3}\$~", $arFields['NUMCODE'])) { $arMsg[] = array('id' => 'NUMCODE', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_NUMCODE_IS_BAD')); } } } $boolUserExist = self::isUserExists(); $intUserID = $boolUserExist ? (int) $USER->GetID() : 0; $strDateFunction = $DB->GetNowFunction(); $arFields['~DATE_UPDATE'] = $strDateFunction; if ($boolUserExist) { if (!isset($arFields['MODIFIED_BY'])) { $arFields['MODIFIED_BY'] = $intUserID; } $arFields['MODIFIED_BY'] = (int) $arFields['MODIFIED_BY']; if ($arFields['MODIFIED_BY'] <= 0) { $arFields['MODIFIED_BY'] = $intUserID; } } if ($ACTION == 'ADD') { $arFields['~DATE_CREATE'] = $strDateFunction; if ($boolUserExist) { if (!isset($arFields['CREATED_BY'])) { $arFields['CREATED_BY'] = $intUserID; } $arFields['CREATED_BY'] = (int) $arFields['CREATED_BY']; if ($arFields['CREATED_BY'] <= 0) { $arFields['CREATED_BY'] = $intUserID; } } } if (isset($arFields['LANG'])) { if (empty($arFields['LANG']) || !is_array($arFields['LANG'])) { $arMsg[] = array('id' => 'LANG', 'text' => Loc::getMessage('BT_MOD_CURR_ERR_CURR_LANG_BAD')); } else { $langSettings = array(); $currency = $ACTION == 'ADD' ? $arFields['CURRENCY'] : $strCurrencyID; foreach ($arFields['LANG'] as $lang => $settings) { if (empty($settings) || !is_array($settings)) { continue; } $langAction = 'ADD'; if ($ACTION == 'UPDATE') { $langAction = CCurrencyLang::isExistCurrencyLanguage($currency, $lang) ? 'UPDATE' : 'ADD'; } $checkLang = CCurrencyLang::checkFields($langAction, $settings, $currency, $lang, true); $settings['CURRENCY'] = $currency; $settings['LID'] = $lang; $settings['IS_EXIST'] = $langAction == 'ADD' ? 'N' : 'Y'; $langSettings[$lang] = $settings; if (is_array($checkLang)) { $arMsg = array_merge($arMsg, $checkLang); } } $arFields['LANG'] = $langSettings; unset($settings, $lang, $currency, $langSettings); } } if (!empty($arMsg)) { $obError = new CAdminException($arMsg); $APPLICATION->ResetException(); $APPLICATION->ThrowException($obError); return false; } return true; }