- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/mysql/user_counter.php
- Класс: CUserCounter
- Вызов: CUserCounter::Set
static function Set($user_id, $code, $value, $site_id = SITE_ID, $tag = '', $sendPull = true)
{
global $DB, $CACHE_MANAGER;
$value = (int)$value;
$user_id = (int)$user_id;
if ($user_id < 0 || $code == '')
{
return false;
}
$rs = $DB->Query("
SELECT CNT FROM b_user_counter
WHERE USER_ID = ".$user_id."
AND SITE_ID = '".$DB->ForSQL($site_id)."'
AND CODE = '".$DB->ForSQL($code)."'
");
if ($cntVal = $rs->Fetch())
{
$ssql = "";
if ($tag != "")
{
$ssql = ", TAG = '".$DB->ForSQL($tag)."'";
}
if($cntVal['CNT'] != $value)
{
$DB->Query("
UPDATE b_user_counter SET
CNT = " . $value . " " . $ssql . ",
SENT = 0
WHERE USER_ID = " . $user_id . "
AND SITE_ID = '" . $DB->ForSQL($site_id) . "'
AND CODE = '" . $DB->ForSQL($code) . "'
");
}
else
{
$sendPull = false;
}
}
else
{
$DB->Query("
INSERT INTO b_user_counter
(CNT, USER_ID, SITE_ID, CODE, TAG)
VALUES
(".$value.", ".$user_id.", '".$DB->ForSQL($site_id)."', '".$DB->ForSQL($code)."', '".$DB->ForSQL($tag)."')
", true);
}
if (self::$counters && isset(self::$counters[$user_id]))
{
if ($site_id === self::ALL_SITES)
{
foreach(self::$counters[$user_id] as $key => $tmp)
{
self::$counters[$user_id][$key][$code] = $value;
}
}
else
{
if (!isset(self::$counters[$user_id][$site_id]))
{
self::$counters[$user_id][$site_id] = [];
}
self::$counters[$user_id][$site_id][$code] = $value;
}
}
$CACHE_MANAGER->Clean("user_counter" . $user_id, "user_counter");
if ($sendPull)
{
self::SendPullEvent($user_id, $code);
}
return true;
}