• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/model/entity.php
  • Класс: BitrixCatalogModelEntity
  • Вызов: Entity::add
static function add(array $data): ORMDataAddResult
{
	$result = new ORMDataAddResult();

	$entity = static::getEntity();

	static::normalize($data);

	if (Event::existEventHandlers($entity, ORMDataDataManager::EVENT_ON_BEFORE_ADD))
	{
		$event = new Event(
			$entity,
			ORMDataDataManager::EVENT_ON_BEFORE_ADD,
			$data
		);
		$event->send();

		$event->mergeData($data);
		if ($event->getErrors($result))
			return $result;
	}

	static::prepareForAdd($result, null, $data);
	if (!$result->isSuccess())
		return $result;
	unset($result);

	if (Event::existEventHandlers($entity, ORMDataDataManager::EVENT_ON_ADD))
	{
		$event = new Event(
			$entity,
			ORMDataDataManager::EVENT_ON_ADD,
			$data
		);
		$event->send();
		unset($event);
	}

	$result = $entity->getTablet()->add($data['fields']);
	$success = $result->isSuccess();
	if ($success)
	{
		$data['fields'] = $result->getData();
		if ($entity->fieldsCount > 0)
			$entity->setEntityCacheItem((int)$result->getId(), $result->getData(), false);
	}

	if (Event::existEventHandlers($entity, ORMDataDataManager::EVENT_ON_AFTER_ADD))
	{
		$event = new Event(
			$entity,
			ORMDataDataManager::EVENT_ON_AFTER_ADD,
			[
				'id' => $result->getId(),
				'fields' => $data['fields'],
				'external_fields' => $data['external_fields'],
				'actions' => $data['actions'],
				'success' => $success
			]
		);
		$event->send();
		unset($event);
	}

	if ($success && !empty($data['actions']))
		static::runAddExternalActions($result->getId(), $data);

	unset($success, $entity);

	return $result;
}