• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/analytics/catalog.php
  • Класс: BitrixMainAnalyticsCatalog
  • Вызов: Catalog::catchCatalogOrder
static function catchCatalogOrder(Event $event)
{
	if (!static::isOn())
	{
		return;
	}

	$isNew = $event->getParameter("IS_NEW");

	if (!$isNew)
	{
		// only new orders
		return;
	}

	/** @var Order $orderItem */
	$orderItem = $event->getParameter("ENTITY");

	$data = static::getOrderInfo($orderItem->getId());

	if (empty($data['products']))
	{
		return;
	}

	// add bxuid
	$data['bx_user_id'] = static::getBxUserId();

	if (empty($data['bx_user_id']) && !empty($data['user_id']))
	{
		$orderUser = UserTable::getRow(array(
			'select' => array('BX_USER_ID'),
			'filter' => array('=ID' => $data['user_id'])
		));

		if (!empty($orderUser) && !empty($orderUser['BX_USER_ID']))
		{
			$data['bx_user_id'] = $orderUser['BX_USER_ID'];
		}
	}

	// add general info
	$data['paid'] = '0';
	$data['domain'] = Context::getCurrent()->getServer()->getHttpHost();
	$data['date'] = date(DATE_ISO8601);

	// add debug info
	global $USER;

	$data['real_user_id'] = $USER->getId() ?: 0;
	$data['cookie_size'] = count($_COOKIE);
	$data['is_admin'] = (int) $USER->IsAdmin();
	$data['admin_section'] = (int) (defined('ADMIN_SECTION') && ADMIN_SECTION);
	$data['admin_panel'] = (int) CTopPanel::shouldShowPanel();

	// try to guess unnatural orders
	$data['artificial_order'] = (int) (
		($data['user_id'] != $data['real_user_id']) || !$data['cookie_size']
		||  $data['is_admin'] || $data['admin_section'] || $data['admin_panel']
	);

	CounterDataTable::add(array(
		'TYPE' => 'order',
		'DATA' => $data
	));

	// set bxuid to the order
	if (!empty($data['bx_user_id']))
	{
		// if sale version is fresh enough
		if (OrderTable::getEntity()->hasField('BX_USER_ID'))
		{
			OrderTable::update($data['order_id'], array('BX_USER_ID' => $data['bx_user_id']));
		}
	}
}