uawdijnntqw1x1x1
IP : 216.73.217.104
Hostname : xhost1.intravision.ru
Kernel : Linux xhost1.intravision.ru 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10-03) x86_64
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
OS : Linux
PATH:
/
var
/
files
/
.
/
need-2-delete
/
mini-borishof.ru1
/
bitrix
/
modules
/
main
/
classes
/
general
/
.
/
user_counter.php
/
/
<? class CAllUserCounter { const ALL_SITES = '**'; const SYSTEM_USER_ID = 0; protected static $counters = false; public static function GetValue($user_id, $code, $site_id = SITE_ID) { $user_id = intval($user_id); if ($user_id < 0) return false; $arCodes = self::GetValues($user_id, $site_id); if (isset($arCodes[$code])) return intval($arCodes[$code]); else return 0; } public static function GetValues($user_id, $site_id = SITE_ID, &$arLastDate = array()) { global $DB, $CACHE_MANAGER; static $diff; $user_id = intval($user_id); if ($user_id < 0) { return array(); } if (!is_array($arLastDate)) { $arLastDate = array(); } if ($diff === false) { $diff = CTimeZone::GetOffset(); } if(!isset(self::$counters[$user_id][$site_id])) { if ( CACHED_b_user_counter !== false && $CACHE_MANAGER->Read(CACHED_b_user_counter, "user_counter".$user_id, "user_counter") ) { $arAll = $CACHE_MANAGER->Get("user_counter".$user_id); if(is_array($arAll)) { foreach($arAll as $arItem) { if ( $arItem["SITE_ID"] == $site_id || $arItem["SITE_ID"] == self::ALL_SITES ) { if (!isset(self::$counters[$user_id][$site_id][$arItem["CODE"]])) { self::$counters[$user_id][$site_id][$arItem["CODE"]] = 0; } self::$counters[$user_id][$site_id][$arItem["CODE"]] += $arItem["CNT"]; if (isset($arItem["LAST_DATE_TS"])) { if (!isset($arLastDate[$user_id])) { $arLastDate[$user_id] = array(); } if (!isset($arLastDate[$user_id][$site_id])) { $arLastDate[$user_id][$site_id] = array(); } $arLastDate[$user_id][$site_id][$arItem["CODE"]] = $arItem["LAST_DATE_TS"] - $diff; } } } } } else { $strSQL = " SELECT CODE, SITE_ID, CNT, ".$DB->DatetimeToTimestampFunction("LAST_DATE")." LAST_DATE_TS FROM b_user_counter WHERE USER_ID = ".$user_id; $dbRes = $DB->Query($strSQL, false, "File: ".__FILE__."<br>Line: ".__LINE__); $arAll = array(); while ($arRes = $dbRes->Fetch()) { $code = (strpos($arRes["CODE"], "**") === 0 ? "**" : $arRes["CODE"]); $arRes["CODE"] = $code; $arAll[] = $arRes; if ($arRes["SITE_ID"] == $site_id || $arRes["SITE_ID"] == self::ALL_SITES) { if (!isset(self::$counters[$user_id][$site_id][$arRes["CODE"]])) { self::$counters[$user_id][$site_id][$arRes["CODE"]] = 0; } self::$counters[$user_id][$site_id][$arRes["CODE"]] += $arRes["CNT"]; if (!isset($arLastDate[$user_id])) { $arLastDate[$user_id] = array(); } if (!isset($arLastDate[$user_id][$site_id])) { $arLastDate[$user_id][$site_id] = array(); } $arLastDate[$user_id][$site_id][$arRes["CODE"]] = $arRes["LAST_DATE_TS"] - $diff; } } if (CACHED_b_user_counter !== false) { $CACHE_MANAGER->Set("user_counter".$user_id, $arAll); } } } return self::$counters[$user_id][$site_id]; } public static function GetAllValues($user_id) { global $DB, $CACHE_MANAGER; $arCounters = Array(); $user_id = intval($user_id); if ($user_id < 0) return $arCounters; $arSites = Array(); $res = CSite::GetList(($b = ""), ($o = ""), Array("ACTIVE" => "Y")); while ($row = $res->Fetch()) $arSites[] = $row['ID']; if (CACHED_b_user_counter !== false && $CACHE_MANAGER->Read(CACHED_b_user_counter, "user_counter".$user_id, "user_counter")) { $arAll = $CACHE_MANAGER->Get("user_counter".$user_id); } else { $strSQL = " SELECT CODE, SITE_ID, CNT FROM b_user_counter WHERE USER_ID = ".$user_id; $dbRes = $DB->Query($strSQL, false, "File: ".__FILE__."<br>Line: ".__LINE__); $arAll = array(); while ($arRes = $dbRes->Fetch()) $arAll[] = $arRes; if (CACHED_b_user_counter !== false) $CACHE_MANAGER->Set("user_counter".$user_id, $arAll); } foreach($arAll as $arItem) { if ($arItem['SITE_ID'] == self::ALL_SITES) { foreach ($arSites as $siteId) { if (isset($arCounters[$siteId][$arItem['CODE']])) $arCounters[$siteId][$arItem['CODE']] += intval($arItem['CNT']); else $arCounters[$siteId][$arItem['CODE']] = intval($arItem['CNT']); } } else { if (isset($arCounters[$arItem['SITE_ID']][$arItem['CODE']])) $arCounters[$arItem['SITE_ID']][$arItem['CODE']] += intval($arItem['CNT']); else $arCounters[$arItem['SITE_ID']][$arItem['CODE']] = intval($arItem['CNT']); } } return $arCounters; } public static function GetLastDate($user_id, $code, $site_id = SITE_ID) { global $DB; $user_id = intval($user_id); if ($user_id < 0 || strlen($code) <= 0) return 0; $strSQL = " SELECT ".$DB->DateToCharFunction("LAST_DATE", "FULL")." LAST_DATE FROM b_user_counter WHERE USER_ID = ".$user_id." AND (SITE_ID = '".$site_id."' OR SITE_ID = '".self::ALL_SITES."') AND CODE = '".$DB->ForSql($code)."' "; $result = 0; $dbRes = $DB->Query($strSQL, false, "File: ".__FILE__."<br>Line: ".__LINE__); if ($arRes = $dbRes->Fetch()) $result = MakeTimeStamp($arRes["LAST_DATE"]); return $result; } public static function ClearAll($user_id, $site_id = SITE_ID, $sendPull = true) { global $DB, $CACHE_MANAGER; $user_id = intval($user_id); if ($user_id < 0) return false; $strSQL = " UPDATE b_user_counter SET CNT = 0 WHERE USER_ID = ".$user_id." AND (SITE_ID = '".$site_id."' OR SITE_ID = '".self::ALL_SITES."')"; $DB->Query($strSQL, false, "File: ".__FILE__."<br>Line: ".__LINE__); if ($site_id == self::ALL_SITES) { if (self::$counters) unset(self::$counters[$user_id]); } else { if (self::$counters) unset(self::$counters[$user_id][$site_id]); } $CACHE_MANAGER->Clean("user_counter".$user_id, "user_counter"); if ($sendPull) self::SendPullEvent($user_id); return true; } public static function ClearByTag($tag, $code, $site_id = SITE_ID, $sendPull = true) { global $DB, $CACHE_MANAGER; if (strlen($tag) <= 0 || strlen($code) <= 0) return false; $strSQL = " UPDATE b_user_counter SET CNT = 0 WHERE TAG = '".$DB->ForSQL($tag)."' AND CODE = '".$DB->ForSQL($code)."' AND (SITE_ID = '".$site_id."' OR SITE_ID = '".self::ALL_SITES."')"; $DB->Query($strSQL, false, "File: ".__FILE__."<br>Line: ".__LINE__); self::$counters = false; $CACHE_MANAGER->CleanDir("user_counter"); if ($sendPull && self::CheckLiveMode()) { global $DB; $arSites = Array(); $res = CSite::GetList(($b = ""), ($o = ""), Array("ACTIVE" => "Y")); while ($row = $res->Fetch()) $arSites[] = $row['ID']; $strSQL = " SELECT pc.CHANNEL_ID, pc.CHANNEL_TYPE, uc.USER_ID, uc.SITE_ID, uc.CODE, uc.CNT FROM b_user_counter uc INNER JOIN b_pull_channel pc ON pc.USER_ID = uc.USER_ID WHERE TAG = '".$DB->ForSQL($tag)."' AND CODE = '".$DB->ForSQL($code)."' AND (SITE_ID = '".$site_id."' OR SITE_ID = '".self::ALL_SITES."')"; $res = $DB->Query($strSQL, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); $pullMessage = Array(); while ($row = $res->Fetch()) { if (!($row['CHANNEL_TYPE'] == 'private' || $row['CHANNEL_TYPE'] == 'shared' && $row['USER_ID'] == 0)) { continue; } if ($row['SITE_ID'] == self::ALL_SITES) { foreach ($arSites as $siteId) { if (isset($pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']])) $pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']] += intval($row['CNT']); else $pullMessage[$row['CHANNEL_ID']][$siteId][$row['CODE']] = intval($row['CNT']); } } else { if (isset($pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']])) $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']] += intval($row['CNT']); else $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$row['CODE']] = intval($row['CNT']); } } foreach ($pullMessage as $channelId => $arMessage) { CPullStack::AddByChannel($channelId, Array( 'module_id' => 'main', 'command' => 'user_counter', 'expiry' => 3600, 'params' => $arMessage, )); } } return true; } public static function CheckLiveMode() { return CModule::IncludeModule('pull') && CPullOptions::GetNginxStatus(); } protected static function SendPullEvent($user_id, $code = "", $bMultiple = false) { $user_id = intval($user_id); if ($user_id < 0) return false; if (self::CheckLiveMode()) { global $DB; $arSites = Array(); $res = CSite::GetList(($b = ""), ($o = ""), Array("ACTIVE" => "Y")); while ($row = $res->Fetch()) $arSites[] = $row['ID']; $strSQL = " SELECT pc.CHANNEL_ID, pc.CHANNEL_TYPE, uc.USER_ID, uc.SITE_ID, uc.CODE, uc.CNT FROM b_user_counter uc INNER JOIN b_pull_channel pc ON pc.USER_ID = uc.USER_ID WHERE uc.USER_ID = ".intval($user_id).( strlen($code) > 0 ? ( $bMultiple ? " AND uc.CODE LIKE '".$DB->ForSQL($code)."%'" : " AND uc.CODE = '".$DB->ForSQL($code)."'" ) : "" )." "; $res = $DB->Query($strSQL, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); $pullMessage = Array(); while ($row = $res->Fetch()) { $key = (strlen($code) > 0 ? $code : $row['CODE']); if (!($row['CHANNEL_TYPE'] == 'private' || $row['CHANNEL_TYPE'] == 'shared' && $row['USER_ID'] == 0)) { continue; } if ($row['SITE_ID'] == self::ALL_SITES) { foreach ($arSites as $siteId) { if (isset($pullMessage[$row['CHANNEL_ID']][$siteId][$key])) $pullMessage[$row['CHANNEL_ID']][$siteId][$key] += intval($row['CNT']); else $pullMessage[$row['CHANNEL_ID']][$siteId][$key] = intval($row['CNT']); } } else { if (isset($pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$key])) $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$key] += intval($row['CNT']); else $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$key] = intval($row['CNT']); } } foreach ($pullMessage as $channelId => $arMessage) { CPullStack::AddByChannel($channelId, Array( 'module_id' => 'main', 'command' => 'user_counter', 'expiry' => 3600, 'params' => $arMessage, )); } } } public static function addValueToPullMessage($row, $arSites = array(), &$pullMessage = array()) { $code = (strpos($row["CODE"], "**") === 0 ? "**" : $row["CODE"]); if ($row['SITE_ID'] == self::ALL_SITES) { foreach($arSites as $siteId) { if (isset($pullMessage[$row['CHANNEL_ID']][$siteId][$code])) { $pullMessage[$row['CHANNEL_ID']][$siteId][$code] += intval($row['CNT']); } else { $pullMessage[$row['CHANNEL_ID']][$siteId][$code] = intval($row['CNT']); } } } else { if (isset($pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$code])) { $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$code] += intval($row['CNT']); } else { $pullMessage[$row['CHANNEL_ID']][$row['SITE_ID']][$code] = intval($row['CNT']); } } } public static function OnSocNetLogCommentDelete($commentId) { CUserCounter::DeleteByCode("**LC".intval($commentId)); } public static function OnSocNetLogDelete($logId) { CUserCounter::DeleteByCode("**L".intval($logId)); } // legacy function public static function GetValueByUserID($user_id, $site_id = SITE_ID, $code = self::ALL_SITES) { return self::GetValue($user_id, $code, $site_id); } public static function GetCodeValuesByUserID($user_id, $site_id = SITE_ID) { return self::GetValues($user_id, $site_id); } public static function GetLastDateByUserAndCode($user_id, $site_id = SITE_ID, $code = self::ALL_SITES) { return self::GetLastDate($user_id, $code, $site_id); } public static function DeleteOld() { global $DB; $days = intval(\Bitrix\Main\Config\Option::get('main', 'user_counter_days', 20)); $time = $DB->CharToDateFunction(GetTime(time()- $days*60*60*24, "FULL")); $DB->Query("DELETE FROM b_user_counter WHERE TIMESTAMP_X <= ".$time); return "CUserCounter::DeleteOld();"; } } class CAllUserCounterPage { protected static function setUserIdOption($value = false) { // \Bitrix\Main\Config\Option::set('main', 'user_counter_pull_page_start', $value); } protected static function getUserIdOption() { // return \Bitrix\Main\Config\Option::get('main', 'user_counter_pull_page_start', false); } public static function getPageSizeOption($defaultValue = 100) { $value = intval(\Bitrix\Main\Config\Option::get('main', 'user_counter_pull_page_size', $defaultValue)); if ($value <= 0) { $value = $defaultValue; } return $value; } public static function setNewEvent() { self::setUserIdOption(0); } protected static function getMinMax($prevMax = 0) { global $DB; $pageSize = self::getPageSizeOption(100); $strSQL = " SELECT USER_ID FROM b_user_counter uc WHERE SENT = '0' AND USER_ID > ".intval($prevMax)." GROUP BY USER_ID ORDER BY USER_ID ASC LIMIT ".$pageSize." "; $res = $DB->query($strSQL, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); $i = 0; while($row = $res->fetch()) { if (!$i) { $minValue = $row["USER_ID"]; } else { $maxValue = $row["USER_ID"]; } $i++; } if ($i) { return array( "MIN" => intval($minValue), "MAX" => intval($maxValue) ); } else { return false; } } } ?>
/var/files/./need-2-delete/mini-borishof.ru1/bitrix/modules/main/classes/general/./user_counter.php