%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.145.162.235
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib//basketpropertiesbase.php
<?php
namespace Bitrix\Sale;

use Bitrix\Main;
use Bitrix\Main\Entity\DeleteResult;
use Bitrix\Main\NotImplementedException;
use Bitrix\Main\ObjectNotFoundException;
use Bitrix\Sale;
use Bitrix\Main\Localization\Loc;

Loc::loadMessages(__FILE__);

/**
 * Class BasketPropertiesCollectionBase
 * @package Bitrix\Sale
 */
abstract class BasketPropertiesCollectionBase extends Internals\EntityCollection
{
	/** @var BasketItemBase */
	protected $basketItem;

	/**
	 * @return BasketItemBase
	 */
	protected function getEntityParent()
	{
		return $this->getBasketItem();
	}

	/**
	 * @param BasketItemBase $basketItem
	 */
	public function setBasketItem(BasketItemBase $basketItem)
	{
		$this->basketItem = $basketItem;
	}

	/**
	 * @return BasketItemBase
	 */
	public function getBasketItem()
	{
		return $this->basketItem;
	}

	/**
	 * @return BasketPropertiesCollection
	 * @throws Main\ArgumentException
	 * @throws NotImplementedException
	 */
	private static function createBasketPropertiesCollectionObject()
	{
		$registry = Registry::getInstance(static::getRegistryType());
		$basketPropertiesCollectionClassName = $registry->getBasketPropertiesCollectionClassName();

		return new $basketPropertiesCollectionClassName();
	}

	/**
	 * @param BasketItemBase $basketItem
	 * @return BasketPropertiesCollectionBase|null
	 * @throws Main\ArgumentException
	 * @throws Main\ArgumentNullException
	 * @throws Main\ArgumentTypeException
	 * @throws NotImplementedException
	 * @throws ObjectNotFoundException
	 */
	public static function load(BasketItemBase $basketItem)
	{
		$basketPropertyCollection = static::createBasketPropertiesCollectionObject();
		$basketPropertyCollection->setBasketItem($basketItem);
		$basketItem->setPropertyCollection($basketPropertyCollection);

		if ($basketItem->getId() > 0)
		{
			$registry = Registry::getInstance(static::getRegistryType());

			/** @var BasketPropertyItemBase $basketPropertyItemClass */
			$basketPropertyItemClass = $registry->getBasketPropertyItemClassName();

			$propertyList = $basketPropertyItemClass::loadForBasketItem($basketItem->getId());
			/** @var BasketPropertyItemBase $property */
			foreach ($propertyList as $property)
			{
				$property->setCollection($basketPropertyCollection);
				$basketPropertyCollection->addItem($property);
			}
		}

		return $basketItem->getPropertyCollection();
	}

	/**
	 * @param BasketItemCollection $basket
	 * @return array
	 * @throws Main\ArgumentNullException
	 */
	protected static function getBasketIdList(BasketItemCollection $basket)
	{
		$resultList = array();

		/** @var BasketItemBase $basketItem */
		foreach ($basket as $basketItem)
		{
			if ($basketItem->getId() > 0)
			{
				$resultList[] = $basketItem->getId();
			}
		}

		return $resultList;
	}

	/**
	 * @param BasketItemCollection $collection
	 * @throws Main\ArgumentException
	 * @throws Main\ArgumentNullException
	 * @throws Main\ArgumentOutOfRangeException
	 * @throws Main\ArgumentTypeException
	 * @throws NotImplementedException
	 */
	public static function loadByCollection(BasketItemCollection $collection)
	{
		$propertyList = [];

		$basketIdList = static::getBasketIdList($collection);

		if (!empty($basketIdList))
		{
			$registry = Registry::getInstance(static::getRegistryType());

			/** @var BasketPropertyItemBase $basketPropertyItemClass */
			$basketPropertyItemClass = $registry->getBasketPropertyItemClassName();

			$propertyList = $basketPropertyItemClass::loadForBasket($basketIdList);
		}

		/** @var BasketItemBase $basketItem */
		foreach ($collection as $basketItem)
		{
			if ($basketItem->isExistPropertyCollection())
			{
				continue;
			}

			$basketPropertyCollection = static::createBasketPropertiesCollectionObject();
			$basketPropertyCollection->setBasketItem($basketItem);

			if (isset($propertyList[$basketItem->getId()]))
			{
				/** @var BasketPropertyItemBase $property */
				foreach ($propertyList[$basketItem->getId()] as $property)
				{
					$property->setCollection($basketPropertyCollection);
					$basketPropertyCollection->addItem($property);
				}
			}

			$basketItem->setPropertyCollection($basketPropertyCollection);
		}
	}

	/**
	 * @return BasketPropertyItem
	 * @throws Main\ArgumentException
	 * @throws Main\ArgumentOutOfRangeException
	 * @throws Main\ArgumentTypeException
	 * @throws NotImplementedException
	 */
	public function createItem()
	{
		$registry  = Registry::getInstance(static::getRegistryType());

		/** @var BasketPropertyItemBase $basketPropertyItemClassName */
		$basketPropertyItemClassName = $registry->getBasketPropertyItemClassName();

		$basketPropertyItem = $basketPropertyItemClassName::create($this);
		$this->addItem($basketPropertyItem);

		return $basketPropertyItem;
	}

	/**
	 * @param BasketPropertyItemBase $property
	 * @return string
	 */
	private function getPropertyCode(BasketPropertyItemBase $property)
	{
		return $property->getField('NAME')."|".$property->getField("CODE");
	}

	/**
	 * @param array $properties
	 * @throws Main\ArgumentException
	 * @throws Main\ArgumentNullException
	 * @throws Main\ArgumentOutOfRangeException
	 * @throws Main\ArgumentTypeException
	 * @throws Main\NotSupportedException
	 * @throws NotImplementedException
	 * @throws ObjectNotFoundException
	 */
	public function redefine(array $properties)
	{
		$indexList = array();

		/** @var BasketPropertyItemBase $propertyItem */
		foreach($this->collection as $propertyItem)
		{
			$code = $this->getPropertyCode($propertyItem);
			$indexList[$code] = $propertyItem->getId();
		}

		foreach ($properties as $value)
		{
			if (!is_array($value) || empty($value))
			{
				continue;
			}

			if (isset($value['ID']) && intval($value['ID']) > 0)
			{
				$propertyItem = $this->getItemById($value['ID']);
			}
			else
			{
				$propertyItem = $this->getPropertyItemByValue($value);
			}

			if (!$propertyItem)
			{
				$propertyItem = $this->createItem();
			}
			else
			{
				$code = $this->getPropertyCode($propertyItem);
				if (isset($indexList[$code]))
				{
					unset($indexList[$code]);
				}
			}

			$availableFields = $propertyItem::getAvailableFields();

			$fields = array();
			foreach ($value as $k => $v)
			{
				if (isset($availableFields[$k]))
				{
					$fields[$k] = $v;
				}
			}

			$propertyItem->setFields($fields);
		}

		if (!empty($indexList))
		{
			foreach($indexList as $code => $id)
			{
				if ($id > 0)
				{
					/** @var BasketPropertyItemBase $propertyItem */
					if ($propertyItem = $this->getItemById($id))
					{
						if ($propertyItem->getField('CODE') == "CATALOG.XML_ID"
							|| $propertyItem->getField('CODE') == "PRODUCT.XML_ID"
						)
						{
							continue;
						}

						$propertyItem->delete();
					}
				}
				else
				{
					/** @var BasketPropertyItemBase $propertyItem */
					foreach ($this->collection as $propertyItem)
					{
						if ($propertyItem->getField('CODE') == "CATALOG.XML_ID"
							|| $propertyItem->getField('CODE') == "PRODUCT.XML_ID"
						)
						{
							continue;
						}

						$propertyCode = $this->getPropertyCode($propertyItem);
						if ($propertyCode == $code)
						{
							$propertyItem->delete();
						}
					}
				}
			}
		}
	}

	/**
	 * @return Result
	 * @throws Main\ArgumentNullException
	 * @throws Main\ArgumentOutOfRangeException
	 * @throws NotImplementedException
	 */
	public function save()
	{
		$result = new Sale\Result();

		$itemsFromDb = [];

		$isItemDeleted = $this->isAnyItemDeleted();
		if ($isItemDeleted)
		{
			$basketItem = $this->getBasketItem();
			$itemsFromDbList = static::getList(
				[
					"select" => ["ID"],
					"filter" => ["BASKET_ID" => ($basketItem) ? $basketItem->getId() : 0]
				]
			);

			while ($itemsFromDbItem = $itemsFromDbList->fetch())
			{
				$itemsFromDb[$itemsFromDbItem["ID"]] = true;
			}
		}

		/** @var BasketPropertyItemBase $basketProperty */
		foreach ($this->collection as $basketProperty)
		{
			$r = $basketProperty->save();
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
			}

			unset($itemsFromDb[$basketProperty->getId()]);
		}

		foreach ($itemsFromDb as $basketPropertyId => $value)
		{
			static::delete($basketPropertyId);
		}

		if ($isItemDeleted)
		{
			$this->setAnyItemDeleted(false);
		}

		return $result;
	}

	/**
	 * @param array $values
	 * @return bool
	 */
	public function isPropertyAlreadyExists(array $values)
	{
		if (!($propertyValues = $this->getPropertyValues()))
		{
			return false;
		}

		$requestValues = array();
		foreach ($values as $value)
		{
			if (!($propertyValue = static::bringingPropertyValue($value)))
			{
				continue;
			}

			$requestValues[$propertyValue['CODE']] = $propertyValue["VALUE"];
		}

		if (count($requestValues) !== count($propertyValues))
		{
			return false;
		}
		else
		{
			foreach($requestValues as $key => $val)
			{
				if (!array_key_exists($key, $propertyValues) || (array_key_exists($key, $propertyValues) && $propertyValues[$key]['VALUE'] != $val))
				{
					return false;
				}
			}
		}

		return true;
	}

	/**
	 * @param array $value
	 * @return BasketPropertyItemBase|bool
	 */
	public function getPropertyItemByValue(array $value)
	{
		if (!($propertyValue = static::bringingPropertyValue($value)))
		{
			return false;
		}

		/** @var BasketPropertyItemBase $propertyItem */
		foreach ($this->collection as $propertyItem)
		{
			$propertyItemValues = $propertyItem->getFieldValues();

			if (!($propertyItemValue = static::bringingPropertyValue($propertyItemValues)))
			{
				continue;
			}


			if ($propertyItemValue['CODE'] == $propertyValue['CODE'])
			{
				return $propertyItem;
			}
		}

		return false;
	}

	/**
	 * @return array
	 */
	public function getPropertyValues()
	{
		$result = array();

		/** @var BasketPropertyItemBase $property */
		foreach($this->collection as $property)
		{
			$value = $property->getFieldValues();
			$propertyValue = static::bringingPropertyValue($value);
			if (!$propertyValue)
			{
				continue;
			}

			$result[$propertyValue['CODE']] = $propertyValue;
		}

		return $result;
	}


	/**
	 * @param array $value
	 * @return array
	 */
	private static function bringingPropertyValue(array $value)
	{
		$result = array();
		if (array_key_exists('VALUE', $value))
		{
			$propID = '';
			if (array_key_exists('CODE', $value) && strval($value["CODE"]) != '')
			{
				$propID = $value["CODE"];
			}
			elseif (array_key_exists('NAME', $value) && strval($value["NAME"]) != '')
			{
				$propID = $value["NAME"];
			}

			if (strval($propID) != '')
			{
				$result = array(
					'CODE' => $propID,
					'ID' => $value["ID"],
					'VALUE' => $value["VALUE"],
					'SORT' => $value["SORT"],
					'NAME' => $value["NAME"],
				);
			}
		}

		return $result;
	}

	/**
	 * @internal
	 *
	 * @param \SplObjectStorage $cloneEntity
	 * @return BasketPropertiesCollectionBase|Internals\EntityCollection
	 * @throws Main\ArgumentException
	 * @throws Main\ArgumentNullException
	 * @throws Main\ArgumentOutOfRangeException
	 * @throws Main\ArgumentTypeException
	 * @throws Main\ObjectException
	 * @throws NotImplementedException
	 * @throws ObjectNotFoundException
	 */
	public function createClone(\SplObjectStorage $cloneEntity)
	{
		/** @var BasketPropertiesCollectionBase $basketPropertiesCollectionClone */
		$basketPropertiesCollectionClone = parent::createClone($cloneEntity);

		/** @var BasketItem $basketItem */
		if ($basketItem = $this->basketItem)
		{
			if (!$cloneEntity->contains($basketItem))
			{
				$cloneEntity[$basketItem] = $basketItem->createClone($cloneEntity);
			}

			if ($cloneEntity->contains($basketItem))
			{
				$basketPropertiesCollectionClone->basketItem = $cloneEntity[$basketItem];
			}
		}

		return $basketPropertiesCollectionClone;
	}

	/**
	 * @return Result
	 * @throws NotImplementedException
	 */
	public function verify()
	{
		$result = new Result();

		/** @var BasketPropertyItemBase $basketPropertyItem */
		foreach ($this->collection as $basketPropertyItem)
		{
			$r = $basketPropertyItem->verify();
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
			}
		}
		return $result;
	}

	/**
	 * Load basket item properties.
	 *
	 * @param array $parameters
	 * @throws NotImplementedException
	 */
	public static function getList(array $parameters = array())
	{
		throw new NotImplementedException();
	}

	/**
	 * Delete basket item properties.
	 *
	 * @param $primary
	 * @throws NotImplementedException
	 */
	protected static function delete($primary)
	{
		throw new NotImplementedException();
	}

	/**
	 * @deprecated Use \Bitrix\Sale\BasketPropertiesCollectionBase::redefine instead
	 *
	 * @param array $values
	 * @throws Main\ArgumentException
	 * @throws Main\ArgumentNullException
	 * @throws Main\ArgumentOutOfRangeException
	 * @throws Main\ArgumentTypeException
	 * @throws Main\NotSupportedException
	 * @throws NotImplementedException
	 * @throws ObjectNotFoundException
	 */
	public function setProperty(array $values)
	{
		$this->redefine($values);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit