- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/mysql/user_counter.php
- Класс: CUserCounter
- Вызов: CUserCounter::DeleteByCode
static function DeleteByCode($code)
{
global $DB, $CACHE_MANAGER;
if ($code == '')
{
return false;
}
$pullMessage = Array();
$bPullEnabled = false;
$connection = BitrixMainApplication::getConnection();
$isLiveFeed = (
mb_strpos($code, self::LIVEFEED_CODE) === 0
&& $code !== self::LIVEFEED_CODE
);
if ($isLiveFeed)
{
$DB->Query(
"DELETE FROM b_user_counter WHERE CODE = '".$code."'",
false,
"FILE: " . __FILE__ . "
LINE: " . __LINE__
);
self::$counters = [];
$CACHE_MANAGER->CleanDir("user_counter");
if (self::$isLiveFeedJobOn === false && self::CheckLiveMode())
{
$application = BitrixMainApplication::getInstance();
$application && $application->addBackgroundJob([__CLASS__, 'sendLiveFeedPull']);
self::$isLiveFeedJobOn = true;
}
return true;
}
if (
self::CheckLiveMode()
&& $connection->lock('pull')
)
{
$bPullEnabled = true;
$arSites = [];
$by = '';
$order = '';
$res = CSite::GetList($by, $order, array("ACTIVE" => "Y"));
while($row = $res->Fetch())
{
$arSites[] = $row['ID'];
}
$helper = $connection->getSqlHelper();
$strSQL = "
SELECT uc.USER_ID as CHANNEL_ID, uc.USER_ID, uc.SITE_ID, uc.CODE, uc.CNT
FROM b_user_counter uc
INNER JOIN b_user u ON u.ID = uc.USER_ID AND (CASE WHEN u.EXTERNAL_AUTH_ID IN ('" . implode("', '", BitrixMainUserTable::getExternalUserTypes()) . "') THEN 'Y' ELSE 'N' END) = 'N' AND u.LAST_ACTIVITY_DATE > ".$helper->addSecondsToDateTime('(-3600)')."
WHERE uc.CODE = '" . $code . "'";
$res = $DB->Query($strSQL, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
while($row = $res->Fetch())
{
self::addValueToPullMessage($row, $arSites, $pullMessage);
}
}
$DB->Query("DELETE FROM b_user_counter WHERE CODE = '".$code."'", false, "FILE: ".__FILE__."
LINE: ".__LINE__);
self::$counters = [];
$CACHE_MANAGER->CleanDir("user_counter");
if ($bPullEnabled)
{
$connection->unlock('pull');
}
if (self::CheckLiveMode())
{
foreach ($pullMessage as $channelId => $arMessage)
{
BitrixPullEvent::add($channelId, Array(
'module_id' => 'main',
'command' => 'user_counter',
'expiry' => 3600,
'params' => $arMessage,
));
}
}
return null;
}