• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/basketpropertiesbase.php
  • Класс: BitrixSaleBasketPropertiesCollectionBase
  • Вызов: BasketPropertiesCollectionBase::redefine
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();
					}
				}
			}
		}
	}
}