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

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

	$decrement = (int)$decrement;

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

	if (self::$counters && 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] -= $decrement;
				}
				else
				{
					self::$counters[$user_id][$key][$code] = -$decrement;
				}
			}
		}
		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] -= $decrement;
			}
			else
			{
				self::$counters[$user_id][$site_id][$code] = -$decrement;
			}
		}
	}

	$CACHE_MANAGER->Clean("user_counter".$user_id, "user_counter");

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

	return true;
}