403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/currency/lib/userfield/types/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/currency/lib/userfield/types/moneytype.php
<?php

namespace Bitrix\Currency\UserField\Types;

use Bitrix\Currency\CurrencyManager;
use Bitrix\Currency\Helpers\Editor;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Text\HtmlFilter;
use Bitrix\Main\UserField\Types\BaseType;
use CUserTypeManager;

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 '';
	}

	/**
	 * Returns normalized user field parameters.
	 *
	 * @param array $userField User field parameters.
	 * @return array
	 */
	public static function prepareSettings(array $userField): array
	{
		[$value, $currency] = static::unFormatFromDb($userField['SETTINGS']['DEFAULT_VALUE'] ?? null);
		if ($value !== '')
		{
			if($currency === '')
			{
				$currency = CurrencyManager::getBaseCurrency();
			}
			$value = static::formatToDB($value, $currency);
		}

		return [
			'DEFAULT_VALUE' => $value,
		];
	}

	/**
	 * Returns assembled value for database.
	 *
	 * @param string $value Property value.
	 * @param string|null $currency Property currency.
	 * @return string
	 */
	public static function formatToDb(string $value, ?string $currency): string
	{
		$value = trim($value);
		if ($value === '')
		{
			return '';
		}

		$value = (string)Editor::prepareValue($value);

		$currency = trim((string)$currency);

		return $value . static::DB_SEPARATOR . $currency;
	}

	/**
	 * Returns parsed money value.
	 *
	 * @param string|null $value Raw value from database.
	 * @return array
	 */
	public static function unFormatFromDb(?string $value): array
	{
		if ($value === null || $value === '')
		{
			return [
				'',
				'',
			];
		}

		$result = explode(static::DB_SEPARATOR, $value);
		if (count($result) === 1)
		{
			$result[] = '';
		}

		return $result;
	}

	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';
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit