AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 18.190.239.40
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/modules/sale/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/modules/sale/lib/basketitemcollection.php
<?php

namespace Bitrix\Sale;

use Bitrix\Currency;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\NotImplementedException;
use Bitrix\Sale\Internals;

Loc::loadMessages(__FILE__);

/**
 * Class BasketItemCollection
 * @package Bitrix\Sale
 */
abstract class BasketItemCollection extends Internals\EntityCollection
{
	/**
	 * @param $moduleId
	 * @param $productId
	 * @param null $basketCode
	 * @return BasketItemBase
	 * @throws NotImplementedException
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ArgumentTypeException
	 */
	public function createItem($moduleId, $productId, $basketCode = null)
	{
		$basketItem = static::createItemInternal($this, $moduleId, $productId, $basketCode);

		$basketItem->setCollection($this);
		$this->addItem($basketItem);

		return $basketItem;
	}

	/**
	 * @param BasketItemCollection $basket
	 * @param $moduleId
	 * @param $productId
	 * @param null $basketCode
	 * @return BasketItemBase
	 * @throws NotImplementedException
	 * @throws \Bitrix\Main\ArgumentException
	 */
	protected static function createItemInternal(BasketItemCollection $basket, $moduleId, $productId, $basketCode = null)
	{
		/** @var BasketItem $basketItemClassName */
		$basketItemClassName = static::getItemCollectionClassName();
		return $basketItemClassName::create($basket, $moduleId, $productId, $basketCode);
	}

	/**
	 * @return OrderBase
	 */
	public function getOrder()
	{
		$basket = $this->getBasket();
		if ($basket)
			return $basket->getOrder();

		return null;
	}

	/**
	 * @return BasketBase
	 */
	abstract public function getBasket();

	/**
	 * @param array $itemList
	 * @throws NotImplementedException
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ArgumentTypeException
	 */
	public function loadFromArray(array $itemList)
	{
		/** @var BasketItemBase $itemClassName */
		$itemClassName = static::getItemCollectionClassName();

		foreach ($itemList as $item)
		{
			$basketItem = $itemClassName::load($this, $item);
			$this->addItem($basketItem);
		}

		$controller = Internals\CustomFieldsController::getInstance();
		$controller->initializeCollection($this);
	}

	/**
	 * @return string
	 * @throws NotImplementedException
	 * @throws \Bitrix\Main\ArgumentException
	 */
	protected static function getItemCollectionClassName()
	{
		$registry  = Registry::getInstance(static::getRegistryType());
		return $registry->getBasketItemClassName();
	}

	/**
	 * @param $code
	 * @return BasketItemBase|null
	 * @throws \Bitrix\Main\ArgumentNullException
	 */
	public function getItemByBasketCode($code)
	{
		/** @var BasketItemBase $basketItem */
		foreach ($this->collection as $basketItem)
		{
			$basketItem = $basketItem->findItemByBasketCode($code);
			if ($basketItem != null)
			{
				return $basketItem;
			}
		}

		return null;
	}

	/**
	 * @param $xmlId
	 * @return BasketItemBase|null
	 * @throws \Bitrix\Main\ArgumentNullException
	 * @throws \Bitrix\Main\ArgumentOutOfRangeException
	 */
	public function getItemByXmlId($xmlId)
	{
		/** @var BasketItemBase $basketItem */
		foreach ($this->collection as $basketItem)
		{
			$basketItem = $basketItem->findItemByXmlId($xmlId);
			if ($basketItem != null)
			{
				return $basketItem;
			}
		}

		return null;
	}

	/**
	 * @param $id
	 * @return BasketItemBase|null
	 * @throws \Bitrix\Main\ArgumentNullException
	 */
	public function getItemById($id)
	{
		$id = (int)$id;

		if ($id <= 0)
		{
			return null;
		}

		/** @var BasketItemBase $basketItem */
		foreach ($this->collection as $basketItem)
		{
			$item = $basketItem->findItemById($id);
			if ($item !== null)
			{
				return $item;
			}
		}

		return null;
	}

	/**
	 * @return array
	 */
	public function getBasketItems()
	{
		return $this->collection;
	}

	/**
	 * Get all basket items for need moduleId, productId and properties.
	 *
	 * @param string $moduleId
	 * @param int $productId
	 * @param array|null $properties if NULL - skips checking properties,
	 * even if they are setted in the parameters and/or the basket item.
	 *
	 * @return BasketItem[]
	 */
	public function getExistsItems(string $moduleId, int $productId, ?array $properties = [])
	{
		$result = [];

		foreach ($this->getBasketItems() as $basketItem)
		{
			if ((int)$basketItem->getField('PRODUCT_ID') === $productId && $basketItem->getField('MODULE') === $moduleId)
			{
				// skip check properties
				if (is_null($properties))
				{
					$result[] = $basketItem;
					continue;
				}

				/** @var BasketPropertiesCollection $basketPropertyCollection */
				$basketPropertyCollection = $basketItem->getPropertyCollection();
				if ($properties)
				{
					if ($basketPropertyCollection->isPropertyAlreadyExists($properties))
					{
						$result[] = $basketItem;
					}
				}
				elseif (count($basketPropertyCollection) === 0)
				{
					$result[] = $basketItem;
				}
			}
		}

		return $result;
	}

	/**
	 * @return int
	 */
	public function getOrderId()
	{
		$order = $this->getOrder();
		if ($order)
			return $order->getId();

		return 0;
	}

	/**
	 * @return array
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\LoaderException
	 */
	public function getContext()
	{
		global $USER;
		$context = array();

		/** @var BasketItem $basketItem */
		$basketItem = $this->rewind();
		if ($basketItem)
		{
			$siteId = $basketItem->getField('LID');
			$fuserId = $basketItem->getFUserId();

			$userId = Fuser::getUserIdById($fuserId);

			if (empty($context['SITE_ID']))
			{
				$context['SITE_ID'] = $siteId;
			}

			if (empty($context['USER_ID']) && $userId > 0)
			{
				$context['USER_ID'] = $userId;
			}
		}

		if (empty($context['SITE_ID']))
		{
			$context['SITE_ID'] = SITE_ID;
		}

		if (empty($context['USER_ID']))
		{
			$context['USER_ID'] = isset($USER) && $USER instanceof \CUser ? (int)$USER->GetID() : 0;
		}

		if (Loader::includeModule('currency'))
		{
			if (!empty($context['SITE_ID']))
			{
				$currency = Internals\SiteCurrencyTable::getSiteCurrency($context['SITE_ID']);
			}

			if (empty($currency))
			{
				$currency = Currency\CurrencyManager::getBaseCurrency();
			}

			if (!empty($currency) && Currency\CurrencyManager::checkCurrencyID($currency))
			{
				$context['CURRENCY'] = $currency;
			}
		}

		return $context;
	}

	/**
	 * @deprecated the basket can contain duplicate items. Use method `getExistsItems`
	 *
	 * Get first basket item for need moduleId, productId and properties
	 *
	 * @param $moduleId
	 * @param $productId
	 * @param array $properties
	 * @return BasketItem|null
	 * @throws NotImplementedException
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ArgumentNullException
	 */
	public function getExistsItem($moduleId, $productId, array $properties = array())
	{
		return current($this->getExistsItems($moduleId, $productId, $properties)) ?: null;
	}
}

Anon7 - 2022
AnonSec Team