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/catalog/lib/component/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/catalog/lib/component/imageinput.php
<?php

namespace Bitrix\Catalog\Component;

use Bitrix\Catalog\v2\BaseIblockElementEntity;
use Bitrix\Catalog\v2\Image\MorePhotoImage;
use Bitrix\Main\Engine\Response;
use Bitrix\Main\Security\Sign\Signer;
use Bitrix\Main\UI\Viewer\ItemAttributes;

class ImageInput
{
	public const FILE_ID_SALT = 'catalog.image.input.file.id';

	/** @var BaseIblockElementEntity $entity */
	private $entity;

	private $autoSavingEnabled = true;
	private $morePhotoPropertyId;
	private $inputName;
	private $inputId;
	private $values;

	public function __construct(BaseIblockElementEntity $entity = null)
	{
		$this->entity = $entity;
	}

	public function setInputName($name)
	{
		$this->inputName = $name;
	}

	public function disableAutoSaving(): self
	{
		$this->autoSavingEnabled = false;

		return $this;
	}

	public function isEmpty(): bool
	{
		return count($this->getValues()) === 0;
	}

	public function getFormattedField(): array
	{
		$fileValues = $this->getValues();
		$signedFileValues = $this->getSignedValues();

		return [
			'id' => 'bx_file_'.$this->getInputId(),
			'values' => $signedFileValues,
			'isEmpty' => empty($fileValues),
			'preview' => $this->getPreview(),
			'input' => $this->getHtml($this->getImageParams(), $fileValues, [
				'disabled' => $this->entity === null,
			]),
			'emptyInput' => $this->getHtml($this->getImageParams(), [], [
				'disabled' => true,
			]),
		];
	}

	public function getComponentResponse(): ?Response\Component
	{
		return new Response\Component(
			'bitrix:catalog.image.input',
			'',
			[
				'FILE_SETTINGS' => $this->getImageParams(),
				'FILE_VALUES' => $this->getValues(),
				'FILE_SIGNED_VALUES' => $this->getSignedValues(),
				'LOADER_PREVIEW' => $this->getPreview(),
				'ENABLE_AUTO_SAVING' => $this->autoSavingEnabled,
				'PRODUCT_ENTITY' => $this->entity,
				'INPUT_ID' => 'bx_file_'.$this->getInputId(),
			]
		);
	}

	private function getImageParams(): array
	{
		return [
			'name' => $this->getInputName(),
			'id' => $this->getInputId(),
			'description' => 'Y',
			'allowUpload' => 'I',
			'allowUploadExt' => null,
			'maxCount' => !$this->isMorePhotoEnabled() ? 1 : null,
			'upload' => true,
			'medialib' => false,
			'fileDialog' => true,
			'cloud' => true,
		];
	}

	private function getInputName(): string
	{
		$defaultName = $this->isMorePhotoEnabled() ? 'PROPERTY_'.$this->getMorePhotoPropertyId().'_n#IND#' : 'DETAIL_PICTURE';
		return $this->inputName ?? $defaultName;
	}

	private function getInputId(): string
	{
		if (!$this->inputId)
		{
			$id = uniqid($this->getInputName().'_', false);
			$this->inputId = strtolower(preg_replace('/[^a-z0-9]/i', '_', $id));
		}

		return $this->inputId;
	}

	private function getEntityId(): int
	{
		return $this->entity ? (int)$this->entity->getId() : 0;
	}

	private function getIblockId(): int
	{
		return $this->entity ? (int)$this->entity->getIblockId() : 0;
	}

	private function getValues(): array
	{
		if (isset($this->values))
		{
			return $this->values;
		}

		if ($this->getEntityId() <= 0)
		{
			return [];
		}

		$this->values = [];
		$photoCollection = $this->entity->getFrontImageCollection();
		if ($this->isMorePhotoEnabled())
		{
			foreach ($photoCollection as $item)
			{
				if ($item instanceof MorePhotoImage)
				{
					$propName = str_replace('n#IND#', $item->getPropertyValueId(), $this->getInputName());
					$this->values[$propName] = $item->getId();
				}
				else
				{
					$this->values[$item::CODE] = $item->getId();
				}
			}
		}
		else
		{
			$item = $photoCollection->getFrontImage();
			if ($item)
			{
				$this->values[$item::CODE] = $item->getId();
			}
		}

		return $this->values;
	}

	private function getSignedValues(): array
	{
		$signedValues = [];

		foreach ($this->getValues() as $name => $fileId)
		{
			if ($fileId !== null && is_numeric($fileId))
			{
				static $signer = null;
				if ($signer === null)
				{
					$signer = new Signer;
				}

				$signedValues[$name] = $signer->sign((string)$fileId, self::FILE_ID_SALT);
			}
		}

		return $signedValues;
	}

	private function isMorePhotoEnabled(): bool
	{
		return (int)$this->getMorePhotoPropertyId() > 0;
	}

	private function getMorePhotoPropertyId(): ?int
	{
		if ($this->morePhotoPropertyId === null)
		{
			$this->morePhotoPropertyId = 0;
			$propertyRaw = \Bitrix\Iblock\PropertyTable::getList([
				'select' => ['ID'],
				'filter' => [
					'=IBLOCK_ID' => $this->getIblockId(),
					'=ACTIVE' => 'Y',
					'=CODE' => MorePhotoImage::CODE,
				],
				'limit' => 1,
				'cache' => [
					'ttl' => 86400,
				],
			]);

			if ($morePhotoProperty = $propertyRaw->fetch())
			{
				$this->morePhotoPropertyId = $morePhotoProperty['ID'];
			}
		}

		return $this->morePhotoPropertyId;
	}

	private function getHtml(array $settings = [], array $values = [], array $options = []): string
	{
		ob_start();

		$GLOBALS['APPLICATION']->includeComponent(
			'bitrix:catalog.image.input',
			'',
			[
				'FILE_SETTINGS' => $settings,
				'FILE_VALUES' => $values,
				'FILE_SIGNED_VALUES' => $this->getSignedValues(),
				'LOADER_PREVIEW' => (string)($options['preview'] ?? ''),
				'DISABLED' => (bool)($options['disabled'] ?? false),
				'ENABLE_AUTO_SAVING' => $this->autoSavingEnabled,
				'PRODUCT_ENTITY' => $this->entity,
				'INPUT_ID' => 'bx_file_'.$this->getInputId(),
			]
		);

		return ob_get_clean();
	}

	private function getPreview(): string
	{
		$imageData = [];

		if ($this->getEntityId() > 0)
		{
			$photoCollection = $this->entity->getFrontImageCollection();
			foreach ($photoCollection as $item)
			{
				if (!$item->getFileStructure())
				{
					continue;
				}

				$attributes = ItemAttributes::tryBuildByFileData($item->getFileStructure(), $item->getSource());
				$attributes->setAttribute('data-viewer-type', 'image');
				$attributes->setGroupBy("group-{$this->entity->getId()}");
				$imageData[] = [
					'SOURCE' => $item->getSource(),
					'ATTRIBUTES' => $attributes,
				];
			}
		}

		$fileCount = min(count($imageData), 3);

		switch ($fileCount)
		{
			case 3:
				$multipleClass = ' ui-image-input-img-block-multiple';
				break;

			case 2:
				$multipleClass = ' ui-image-input-img-block-double';
				break;

			case 0:
				$multipleClass = ' ui-image-input-img-block-empty';
				break;

			case 1:
			default:
				$multipleClass = '';
				break;
		}

		$imageString = '';
		foreach ($imageData as $key => $image)
		{
			$displayClass = '';
			if ($key !== 0)
			{
				$displayClass = 'main-ui-hide';
			}
			$imageString .= "
				<img class='ui-image-input-img {$displayClass}'	{$image['ATTRIBUTES']} src='{$image['SOURCE']}'>
			";
		}

		return "
			<div class='ui-image-input-img-block{$multipleClass}'>
				<div class='ui-image-input-img-block-inner'>
					<div class='ui-image-input-img-item'>
						{$imageString}
					</div>
				</div>
			</div>
		";
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit