• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/controller/product.php
  • Класс: BitrixCatalogControllerProduct
  • Вызов: Product::addAction
public function addAction(array $fields): ?array
{
	$r = $this->checkPermissionAdd($fields['IBLOCK_ID']);
	if($r->isSuccess())
	{
		if (isset($fields['IBLOCK_SECTION_ID']) && (int)$fields['IBLOCK_SECTION_ID'] > 0)
		{
			$r = $this->checkPermissionIBlockElementSectionBindUpdate($fields['IBLOCK_SECTION_ID']);
		}
	}

	if($r->isSuccess())
	{
		$id = 0;
		$element = new CIBlockElement();

		$r = $this->addValidate($fields);
		if($r->isSuccess())
		{
			$groupFields = $this->splitFieldsByEntity($fields);

			$productFields = $groupFields['productFields'];
			$propertyFields = $groupFields['propertyFields'];
			$elementFields = $groupFields['elementFields'];

			$productFields = $this->prepareProductFields($productFields);
			$propertyFields = $this->preparePropertyFields($propertyFields);
			$elementFieldsAdd = count($propertyFields)>0 ? array_merge($elementFields, ['PROPERTY_VALUES'=>$propertyFields]):$elementFields;

			$id = $element->Add($elementFieldsAdd);
			if($element->LAST_ERROR<>'')
			{
				$r->addError(new Error($element->LAST_ERROR));
			}
			else
			{
				$productFields['ID'] = $id;

				$r = BitrixCatalogModelProduct::add($productFields);
				if($r->isSuccess() === false)
				{
					$element::Delete($id);
				}
			}
		}
	}

	if(!$r->isSuccess())
	{
		$this->addErrors($r->getErrors());
		return null;
	}
	else
	{
		return ['ELEMENT'=>$this->get($id)];
	}
}