Exemplo n.º 1
0
 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;
 }