• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/mysql/user_counter.php
  • Класс: CUserCounter
  • Вызов: CUserCounter::Increment
static function Increment($user_id, $code, $site_id = SITE_ID, $sendPull = true, $increment = 1)
{
	global $CACHE_MANAGER;
	$connection = BitrixMainApplication::getConnection();
	$helper = $connection->getSqlHelper();

	$user_id = (int)$user_id;
	if ($user_id < 0 || $code == '')
	{
		return false;
	}

	$increment = (int)$increment;

	$merge = $helper->prepareMerge('b_user_counter', ['USER_ID', 'SITE_ID', 'CODE'], [
		'USER_ID' => $user_id,
		'SITE_ID' => $site_id,
		'CODE' => $code,
		'CNT' => $increment,
	], [
		'CNT' => new BitrixMainDBSqlExpression('b_user_counter.CNT + ' . $increment),
	]);
	if ($merge[0])
	{
		$connection->query($merge[0]);
	}

	if (isset(self::$counters[$user_id]) && is_array(self::$counters[$user_id]))
	{
		if ($site_id === self::ALL_SITES)
		{
			foreach(self::$counters[$user_id] as $key => $tmp)
			{
				if (isset(self::$counters[$user_id][$key][$code]))
				{
					self::$counters[$user_id][$key][$code] += $increment;
				}
				else
				{
					self::$counters[$user_id][$key][$code] = $increment;
				}
			}
		}
		else
		{
			if (!isset(self::$counters[$user_id][$site_id]))
			{
				self::$counters[$user_id][$site_id] = [];
			}

			if (isset(self::$counters[$user_id][$site_id][$code]))
			{
				self::$counters[$user_id][$site_id][$code] += $increment;
			}
			else
			{
				self::$counters[$user_id][$site_id][$code] = $increment;
			}
		}
	}
	$CACHE_MANAGER->Clean("user_counter".$user_id, "user_counter");

	if ($sendPull)
	{
		self::SendPullEvent($user_id, $code);
	}

	return true;
}