Your IP : 18.117.132.37


Current Path : /var/www/admin_ftp_12/data/www/httpdocs/bitrix/modules/ui/lib/FileUploader/
Upload File :
Current File : /var/www/admin_ftp_12/data/www/httpdocs/bitrix/modules/ui/lib/FileUploader/UploaderError.php

<?php

namespace Bitrix\UI\FileUploader;

use Bitrix\Main\Localization\Loc;

Loc::loadLanguageFile(__DIR__ . '/UserErrors.php');

class UploaderError extends \Bitrix\Main\Error
{
	protected string $description = '';
	protected bool $system = false;

	public const MAX_FILE_SIZE_EXCEEDED = 'MAX_FILE_SIZE_EXCEEDED';
	public const MIN_FILE_SIZE_EXCEEDED = 'MIN_FILE_SIZE_EXCEEDED';
	public const FILE_TYPE_NOT_ALLOWED = 'FILE_TYPE_NOT_ALLOWED';
	public const FILE_NAME_NOT_ALLOWED = 'FILE_NAME_NOT_ALLOWED';
	public const IMAGE_MAX_FILE_SIZE_EXCEEDED = 'IMAGE_MAX_FILE_SIZE_EXCEEDED';
	public const IMAGE_MIN_FILE_SIZE_EXCEEDED = 'IMAGE_MIN_FILE_SIZE_EXCEEDED';
	public const IMAGE_TYPE_NOT_SUPPORTED = 'IMAGE_TYPE_NOT_SUPPORTED';
	public const IMAGE_IS_TOO_SMALL = 'IMAGE_IS_TOO_SMALL';
	public const IMAGE_IS_TOO_BIG = 'IMAGE_IS_TOO_BIG';

	public const SAVE_FILE_FAILED = 'SAVE_FILE_FAILED';
	public const FILE_LOAD_FAILED = 'FILE_LOAD_FAILED';
	public const FILE_UPLOAD_ACCESS_DENIED = 'FILE_UPLOAD_ACCESS_DENIED';
	public const FILE_LOAD_ACCESS_DENIED = 'FILE_LOAD_ACCESS_DENIED';
	public const FILE_REMOVE_ACCESS_DENIED = 'FILE_REMOVE_ACCESS_DENIED';

	public const INVALID_CONTENT_RANGE = 'INVALID_CONTENT_RANGE';
	public const INVALID_CONTENT_TYPE = 'INVALID_CONTENT_TYPE';
	public const INVALID_CONTENT_LENGTH = 'INVALID_CONTENT_LENGTH';
	public const INVALID_CONTENT_NAME = 'INVALID_CONTENT_NAME';
	public const INVALID_FILENAME = 'INVALID_FILENAME';
	public const INVALID_RANGE_SIZE = 'INVALID_RANGE_SIZE';
	public const INVALID_CHUNK_SIZE = 'INVALID_CHUNK_SIZE';
	public const INVALID_CHUNK_OFFSET = 'INVALID_CHUNK_OFFSET';
	public const TOO_BIG_REQUEST = 'TOO_BIG_REQUEST';
	public const FILE_FIND_FAILED = 'FILE_FIND_FAILED';
	public const FILE_MOVE_FAILED = 'FILE_MOVE_FAILED';
	public const FILE_APPEND_NOT_FOUND = 'FILE_APPEND_NOT_FOUND';
	public const CHUNK_NOT_FOUND = 'CHUNK_NOT_FOUND';
	public const CHUNK_COPY_FAILED = 'CHUNK_COPY_FAILED';
	public const CHUNK_TOO_BIG = 'CHUNK_TOO_BIG';
	public const CHUNK_APPEND_NOT_FOUND = 'CHUNK_APPEND_NOT_FOUND';
	public const CHUNK_APPEND_FAILED = 'CHUNK_APPEND_FAILED';
	public const CLOUD_EMPTY_BUCKET = 'CLOUD_EMPTY_BUCKET';
	public const CLOUD_INVALID_CHUNK_SIZE = 'CLOUD_INVALID_CHUNK_SIZE';
	public const CLOUD_GET_CONTENTS_FAILED = 'CLOUD_GET_CONTENTS_FAILED';
	public const CLOUD_START_UPLOAD_FAILED = 'CLOUD_START_UPLOAD_FAILED';
	public const CLOUD_FINISH_UPLOAD_FAILED = 'CLOUD_FINISH_UPLOAD_FAILED';
	public const CLOUD_UPLOAD_FAILED = 'CLOUD_UPLOAD_FAILED';
	public const EMPTY_TOKEN = 'EMPTY_TOKEN';
	public const UNKNOWN_TOKEN = 'UNKNOWN_TOKEN';
	public const INVALID_SIGNATURE = 'INVALID_SIGNATURE';

	private static array $systemErrors = [
		self::INVALID_CONTENT_RANGE => 'Content-Range header is invalid',
		self::INVALID_CONTENT_TYPE => 'Content-Type header is required.',
		self::INVALID_CONTENT_LENGTH => 'Content-Length header is required.',
		self::INVALID_CONTENT_NAME => 'X-Upload-Content-Name header is required.',
		self::INVALID_FILENAME => 'Filename is invalid.',
		self::INVALID_RANGE_SIZE => 'Range chunk file size (#rangeChunkSize#) is not equal Content-Length (#contentLength#).',
		self::INVALID_CHUNK_SIZE => 'Chunk file size (#chunkSize#) is not equal Content-Length (#contentLength#).',
		self::INVALID_CHUNK_OFFSET => 'Chunk offset is invalid.',
		self::TOO_BIG_REQUEST => 'The content length is too big to process the request.',
		self::FILE_FIND_FAILED => 'Could not find a file.',
		self::FILE_MOVE_FAILED => 'Could not move file.',
		self::FILE_APPEND_NOT_FOUND => 'File not found.',
		self::CHUNK_NOT_FOUND => 'Could not find chunk file.',
		self::CHUNK_COPY_FAILED => 'Could not copy chunk file.',
		self::CHUNK_TOO_BIG => 'You cannot upload a chunk more than the file size.',
		self::CHUNK_APPEND_NOT_FOUND => 'Could not find chunk.',
		self::CHUNK_APPEND_FAILED => 'Could not put contents to file.',
		self::CLOUD_EMPTY_BUCKET => 'Could not get the cloud bucket.',
		self::CLOUD_INVALID_CHUNK_SIZE => 'Cannot upload file to cloud. The size of the chunk (#chunkSize#) must be more than #minUploadSize#. Check "post_max_size" (#postMaxSize#) and "upload_max_filesize" (#uploadMaxFileSize#) options in php.ini.',
		self::CLOUD_GET_CONTENTS_FAILED => 'Could not get file contents.',
		self::CLOUD_START_UPLOAD_FAILED => 'Could not start cloud upload.',
		self::CLOUD_FINISH_UPLOAD_FAILED => 'Could not finish cloud upload.',
		self::CLOUD_UPLOAD_FAILED => 'Could not upload file for #fails# times.',
		self::EMPTY_TOKEN => 'Could not append content to file. Have to set token parameter.',
		self::UNKNOWN_TOKEN => 'Could not find file by token.',
		self::INVALID_SIGNATURE => 'Token signature is invalid.',
	];

	public function __construct(string $code, ...$args)
	{
		$message = isset($args[0]) && is_string($args[0]) ? $args[0] : null;
		$description = isset($args[1]) && is_string($args[1]) ? $args[1] : null;
		$lastIndex = count($args) - 1;
		$customData = isset($args[$lastIndex]) && is_array($args[$lastIndex]) ? $args[$lastIndex] : [];

		$replacements = [];
		foreach ($customData as $key => $value)
		{
			$replacements["#{$key}#"] = $value;
		}

		if (isset(self::$systemErrors[$code]))
		{
			$message = self::$systemErrors[$code];
			foreach ($replacements as $search => $repl)
			{
				$message = str_replace($search, $repl, $message);
			}

			$this->setSystem(true);
			$description = '';
		}

		if (!is_string($message))
		{
			$message = Loc::getMessage("UPLOADER_{$code}", $replacements);
		}

		if (is_string($message) && mb_strlen($message) > 0 && !is_string($description))
		{
			$description = Loc::getMessage("UPLOADER_{$code}_DESC", $replacements);
		}

		if (!is_string($message) || mb_strlen($message) === 0)
		{
			$message = $code;
		}

		parent::__construct($message, $code, $customData);

		if (is_string($description))
		{
			$this->setDescription($description);
		}
	}

	public function getDescription(): string
	{
		return $this->description;
	}

	public function setDescription(string $description): void
	{
		$this->description = $description;
	}

	public function isSystem(): bool
	{
		return $this->system;
	}

	public function setSystem(bool $system): void
	{
		$this->system = $system;
	}

	public function jsonSerialize()
	{
		return [
			'message' => $this->getMessage(),
			'code' => $this->getCode(),
			'type' => 'file-uploader',
			'system' => $this->isSystem(),
			'description' => $this->getDescription(),
			'customData' => $this->getCustomData(),
		];
	}
}