File manager - Edit - /home/c14075/dragmet-ural.ru/www/bitrix/modules/currency/lib/userfield/types/moneytype.php
Back
<?php namespace Bitrix\Currency\UserField\Types; use Bitrix\Currency\CurrencyManager; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Text\HtmlFilter; use Bitrix\Main\UserField\Types\BaseType; use CUserTypeManager; Loc::loadLanguageFile(__FILE__); class MoneyType extends BaseType { public const USER_TYPE_ID = 'money', DB_SEPARATOR = '|', RENDER_COMPONENT = 'bitrix:currency.field.money'; private const STRICT_FIELD_FORMAT = '/^\-?[0-9]+\.?[0-9]*\|[A-Z]{3}$/'; private const LIGHT_FIELD_FORMAT = '/^\-?[0-9]+\.?[0-9]*(\|[A-Z]{3})?$/'; public static function getDescription(): array { return [ 'DESCRIPTION' => Loc::getMessage('USER_TYPE_MONEY_DESCRIPTION'), 'BASE_TYPE' => CUserTypeManager::BASE_TYPE_STRING, ]; } /** * @return string */ public static function getDbColumnType(): string { return 'varchar(200)'; } public static function checkFields(array $userField, $value): array { $fieldName = HtmlFilter::encode( $userField['EDIT_FORM_LABEL'] ?: $userField['FIELD_NAME'] ); $result = []; if ($userField['MULTIPLE'] === 'N') { if (!self::checkValueFormat($userField, $value)) { $result[] = [ 'id' => $userField['FIELD_NAME'], 'text' => Loc::getMessage('USER_TYPE_MONEY_ERR_BAD_SINGLE_FORMAT', [ '#FIELD_NAME#' => $fieldName, ] ), ]; } } else { if (is_array($value)) { foreach ($value as $row) { if ( !is_string($row) || !self::checkValueFormat($userField, $row) ) { $result[] = [ 'id' => $userField['FIELD_NAME'], 'text' => Loc::getMessage('USER_TYPE_MONEY_ERR_BAD_ROW_FORMAT', [ '#FIELD_NAME#' => $fieldName, ] ), ]; break; } } } else { if (!self::checkValueFormat($userField, $value)) { $result[] = [ 'id' => $userField['FIELD_NAME'], 'text' => Loc::getMessage('USER_TYPE_MONEY_ERR_BAD_SINGLE_FORMAT', [ '#FIELD_NAME#' => $fieldName, ] ), ]; } } } return $result; } /** * @param array $userField * @param $value * @return string */ public static function onBeforeSave(array $userField, $value): string { if ($value === '' || $value === null) { return ''; } if (!self::checkValueFormat($userField, $value)) { return ''; } [$value, $currency] = static::unFormatFromDb($value); if ($value !== '') { if (!$currency) { if (self::isStrictFormat($userField)) { return ''; } $currency = CurrencyManager::getBaseCurrency(); } return static::formatToDB($value, $currency); } return ''; } /** * @param array $userField * @return array */ public static function prepareSettings(array $userField): array { [$value, $currency] = static::unFormatFromDb($userField['SETTINGS']['DEFAULT_VALUE']); if ($value !== '') { if($currency === '') { $currency = CurrencyManager::getBaseCurrency(); } $value = static::formatToDB($value, $currency); } return [ 'DEFAULT_VALUE' => $value, ]; } /** * @param string $value * @param string|null $currency * @return string */ public static function formatToDb(string $value, ?string $currency): string { if($value === '') { return ''; } $value = (string)((float)$value); return $value . static::DB_SEPARATOR . trim($currency); } /** * @param string|null $value * @return array */ public static function unFormatFromDb(?string $value): array { if ($value === null) { return [ '', '', ]; } return explode(static::DB_SEPARATOR, $value); } private static function checkValueFormat(array $userField, $value): bool { if ($value === '' || $value === null) { return true; } $isStrictFormat = self::isStrictFormat($userField); if (!$isStrictFormat) { if ( is_int($value) || is_float($value) ) { $value = (string)$value; } } if (!is_string($value)) { return false; } $format = $isStrictFormat ? self::STRICT_FIELD_FORMAT : self::LIGHT_FIELD_FORMAT ; $prepared = []; if (!preg_match($format, $value, $prepared)) { return false; } return true; } private static function isStrictFormat(array $userField): bool { return ($userField['SETTINGS']['STRICT_FORMAT'] ?? 'N') === 'Y'; } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.25 |
proxy
|
phpinfo
|
Settings