- Модуль: 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;
}