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 : |
<?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; } }