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