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/v2/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

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

namespace Bitrix\Catalog\v2;

use Bitrix\Catalog\ProductTable;
use Bitrix\Catalog\v2\Event\Event;
use Bitrix\Catalog\v2\Fields\TypeCasters\MapTypeCaster;
use Bitrix\Catalog\v2\Iblock\IblockInfo;
use Bitrix\Catalog\v2\Image\HasImageCollection;
use Bitrix\Catalog\v2\Image\ImageCollection;
use Bitrix\Catalog\v2\Image\ImageRepositoryContract;
use Bitrix\Catalog\v2\Property\HasPropertyCollection;
use Bitrix\Catalog\v2\Property\PropertyCollection;
use Bitrix\Catalog\v2\Property\PropertyRepositoryContract;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\NotSupportedException;
use Bitrix\Main\Result;

/**
 * Class BaseIblockElementEntity
 *
 * @package Bitrix\Catalog\v2
 *
 * !!! This API is in alpha stage and is not stable. This is subject to change at any time without notice.
 * @internal
 */
abstract class BaseIblockElementEntity extends BaseEntity implements HasPropertyCollection, HasImageCollection
{
	/** @var \Bitrix\Catalog\v2\Iblock\IblockInfo */
	protected $iblockInfo;
	/** @var \Bitrix\Catalog\v2\Property\PropertyRepositoryContract */
	protected $propertyRepository;
	/** @var \Bitrix\Catalog\v2\Property\PropertyCollection|\Bitrix\Catalog\v2\Property\Property[] */
	protected $propertyCollection;
	/** @var \Bitrix\Catalog\v2\Image\ImageRepositoryContract */
	protected $imageRepository;
	/** @var \Bitrix\Catalog\v2\Image\ImageCollection|\Bitrix\Catalog\v2\Image\BaseImage[] */
	protected $imageCollection;

	public function __construct(
		IblockInfo $iblockInfo,
		RepositoryContract $repository,
		PropertyRepositoryContract $propertyRepository,
		ImageRepositoryContract $imageRepository
	)
	{
		parent::__construct($repository);
		$this->iblockInfo = $iblockInfo;
		$this->propertyRepository = $propertyRepository;
		$this->imageRepository = $imageRepository;
	}

	/**
	 * @return \Bitrix\Catalog\v2\Iblock\IblockInfo
	 */
	public function getIblockInfo(): IblockInfo
	{
		return $this->iblockInfo;
	}

	/**
	 * @return \Bitrix\Catalog\v2\Property\PropertyCollection|\Bitrix\Catalog\v2\Property\Property[]
	 */
	public function getPropertyCollection(): PropertyCollection
	{
		if ($this->propertyCollection === null)
		{
			$this->setPropertyCollection($this->loadPropertyCollection());
		}

		return $this->propertyCollection;
	}

	/**
	 * @return \Bitrix\Catalog\v2\Property\PropertyCollection|\Bitrix\Catalog\v2\Property\Property[]
	 */
	protected function loadPropertyCollection(): PropertyCollection
	{
		return $this->propertyRepository->getCollectionByParent($this);
	}

	/**
	 * @param \Bitrix\Catalog\v2\Property\PropertyCollection $propertyCollection
	 * @return $this
	 *
	 * @internal
	 */
	public function setPropertyCollection(PropertyCollection $propertyCollection): self
	{
		$propertyCollection->setParent($this);

		$this->propertyCollection = $propertyCollection;

		return $this;
	}

	/**
	 * @return $this
	 *
	 * @internal
	 */
	protected function unsetPropertyCollection(): self
	{
		if ($this->propertyCollection !== null)
		{
			$this->propertyCollection->setParent(null);
			$this->propertyCollection = null;
		}

		return $this;
	}

	/**
	 * @return ImageCollection|\Bitrix\Catalog\v2\Image\BaseImage[]
	 */
	public function getImageCollection(): ImageCollection
	{
		if ($this->imageCollection === null)
		{
			$this->setImageCollection($this->loadImageCollection());
		}

		return $this->imageCollection;
	}

	/**
	 * @return ImageCollection|\Bitrix\Catalog\v2\Image\BaseImage[]
	 */
	public function getFrontImageCollection(): ImageCollection
	{
		return $this->getImageCollection();
	}

	/**
	 * @return ImageCollection|\Bitrix\Catalog\v2\Image\BaseImage[]
	 */
	protected function loadImageCollection(): ImageCollection
	{
		return $this->imageRepository->getCollectionByParent($this);
	}

	/**
	 * @param ImageCollection $imageCollection
	 * @return $this
	 *
	 * @internal
	 */
	public function setImageCollection(ImageCollection $imageCollection): self
	{
		$imageCollection->setParent($this);

		$this->imageCollection = $imageCollection;

		return $this;
	}

	/**
	 * @return $this
	 *
	 * @internal
	 */
	protected function unsetImageCollection(): self
	{
		if ($this->imageCollection !== null)
		{
			$this->imageCollection->setParent(null);
			$this->imageCollection = null;
		}

		return $this;
	}

	public function getIblockId(): ?int
	{
		return (int)$this->getField('IBLOCK_ID') ?: null;
	}

	public function setIblockId(int $iblockId): BaseEntity
	{
		return $this->setField('IBLOCK_ID', $iblockId);
	}

	public function setField(string $name, $value): BaseEntity
	{
		if ($name === 'IBLOCK_ID')
		{
			$iblockId = $this->getIblockId();

			// ToDo make immutable field type in type caster
			if ($iblockId !== null && $iblockId != $value)
			{
				throw new NotSupportedException('Iblock id field has been already initialized.');
			}
		}
		elseif ($name === 'DETAIL_PICTURE' || $name === 'PREVIEW_PICTURE')
		{
			$imageCollection = $this->getImageCollection();
			$image =
				$name === 'DETAIL_PICTURE'
					? $imageCollection->getDetailImage()
					: $imageCollection->getPreviewImage();

			if (is_numeric($value))
			{
				$value = \CFile::MakeFileArray($value);
			}

			if (is_array($value))
			{
				$image->setFileStructure($value);
			}

			return $this;
		}

		return parent::setField($name, $value);
	}

	// ToDo make tests coverage for TYPEs
	public function setType(int $type): BaseEntity
	{
		return $this->setField('TYPE', $type);
	}

	public function getType(): int
	{
		return (int)$this->getField('TYPE');
	}

	public function isSimple(): bool
	{
		$type = $this->getType();

		return (
			$type === ProductTable::TYPE_PRODUCT
			|| $type === ProductTable::TYPE_SERVICE
			|| $type === ProductTable::TYPE_EMPTY_SKU
		);
	}

	public function allowConvertToSku(): bool
	{
		$type = $this->getType();

		return (
			$type === ProductTable::TYPE_PRODUCT
			|| $type === ProductTable::TYPE_EMPTY_SKU
		);
	}

	public function setActive(bool $active): BaseEntity
	{
		return $this->setField('ACTIVE', $active ? 'Y' : 'N');
	}

	public function isActive(): bool
	{
		return $this->getField('ACTIVE') === 'Y';
	}

	public function setName($name): BaseEntity
	{
		return $this->setField('NAME', $name);
	}

	public function getName()
	{
		return $this->getField('NAME');
	}

	public function hasName(): bool
	{
		return $this->getName() !== null && $this->getName() !== '';
	}

	public function getDetailUrl(): string
	{
		return (string)$this->getField('DETAIL_PAGE_URL');
	}

	public function saveInternal(): Result
	{
		$entityChanged = $this->isChanged();
		if ($entityChanged && !$this->hasChangedFields())
		{
			$this->setField('MODIFIED_BY', CurrentUser::get()->getId());
		}

		$propertyCollectionChanged = $this->propertyCollection && $this->propertyCollection->isChanged();
		$imageCollectionChanged = $this->imageCollection && $this->imageCollection->isChanged();

		$result = parent::saveInternal();

		if ($result->isSuccess())
		{
			if ($entityChanged)
			{
				\CIBlock::clearIblockTagCache($this->getIblockId());
			}

			// ToDo reload if at least one file property changed?
			if ($propertyCollectionChanged)
			{
				// hack to re-initialize saved ids from database after files saving
				$this->unsetPropertyCollection();
			}

			if ($imageCollectionChanged)
			{
				// hack to re-initialize saved ids from database after files saving
				$this->unsetImageCollection();
			}
		}

		if (!$this->isNew() && $entityChanged)
		{
			Event::send(
				Event::ENTITY_PRODUCT,
				Event::METHOD_UPDATE,
				Event::STAGE_AFTER,
				[
					'id' => $this->getId(),
				],
			);
		}

		return $result;
	}

	protected function getFieldsMap(): array
	{
		return [
			'ID' => MapTypeCaster::NULLABLE_INT,
			'IBLOCK_ID' => MapTypeCaster::INT,
			'NAME' => MapTypeCaster::NULLABLE_STRING,
			'CODE' => MapTypeCaster::NULLABLE_STRING,
			'XML_ID' => MapTypeCaster::NULLABLE_STRING,
			'TIMESTAMP_X' => MapTypeCaster::DATETIME,
			'MODIFIED_BY' => MapTypeCaster::NULLABLE_INT,
			'DATE_CREATE' => MapTypeCaster::DATETIME,
			'CREATED_BY' => MapTypeCaster::NULLABLE_INT,
			'IBLOCK_SECTION_ID' => MapTypeCaster::NULLABLE_INT,
			'ACTIVE' => MapTypeCaster::Y_OR_N,
			'ACTIVE_FROM' => MapTypeCaster::DATETIME,
			'ACTIVE_TO' => MapTypeCaster::DATETIME,
			'SORT' => MapTypeCaster::NULLABLE_INT,
			'PREVIEW_TEXT' => MapTypeCaster::NULLABLE_STRING,
			'PREVIEW_TEXT_TYPE' => MapTypeCaster::NULLABLE_STRING,
			'DETAIL_TEXT' => MapTypeCaster::NULLABLE_STRING,
			'DETAIL_TEXT_TYPE' => MapTypeCaster::NULLABLE_STRING,

			'PREVIEW_PICTURE' => static function ($value) {
				return is_numeric($value) ? (int)$value : $value;
			},
			'DETAIL_PICTURE' => static function ($value) {
				return is_numeric($value) ? (int)$value : $value;
			},

			// ToDo make immutable
			'DETAIL_PAGE_URL' => MapTypeCaster::NOTHING,

			'QUANTITY' => MapTypeCaster::NULLABLE_FLOAT,
			'WEIGHT' => MapTypeCaster::NULLABLE_FLOAT,
			'VAT_ID' => MapTypeCaster::NULLABLE_INT,
			'VAT_INCLUDED' => MapTypeCaster::Y_OR_N,
			'PURCHASING_PRICE' => MapTypeCaster::NULLABLE_FLOAT,
			'PURCHASING_CURRENCY' => MapTypeCaster::NULLABLE_STRING,
			'BARCODE_MULTI' => MapTypeCaster::Y_OR_N,
			'QUANTITY_RESERVED' => MapTypeCaster::NULLABLE_FLOAT,
			'WIDTH' => MapTypeCaster::NULLABLE_FLOAT,
			'LENGTH' => MapTypeCaster::NULLABLE_FLOAT,
			'HEIGHT' => MapTypeCaster::NULLABLE_FLOAT,
			'MEASURE' => MapTypeCaster::NULLABLE_INT,
			'TYPE' => MapTypeCaster::NULLABLE_INT,
			'AVAILABLE' => MapTypeCaster::Y_OR_N,
			'BUNDLE' => MapTypeCaster::Y_OR_N,

			'QUANTITY_TRACE' => MapTypeCaster::Y_OR_N_OR_D,
			'CAN_BUY_ZERO' => MapTypeCaster::Y_OR_N_OR_D,
			'SUBSCRIBE' => MapTypeCaster::Y_OR_N_OR_D,

			// TODO: change this horror
			'UF_PRODUCT_GROUP' => MapTypeCaster::NULLABLE_INT,
			'UF_PRODUCT_MAPPING' => MapTypeCaster::NULLABLE_MULTI_INT,
		];
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit