uawdijnntqw1x1x1
IP : 18.191.152.135
Hostname : axolotl
Kernel : Linux axolotl 4.9.0-13-amd64 #1 SMP Debian 4.9.228-1 (2020-07-05) 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
/
www
/
axolotl
/
data
/
www
/
yar.axolotls.ru
/
bitrix
/
modules
/
controller
/
..
/
im
/
lib
/
lastsearch.php
/
/
<?php /** * Bitrix Framework * @package bitrix * @subpackage im * @copyright 2001-2017 Bitrix */ namespace Bitrix\Im; use Bitrix\Main\Application; use Bitrix\Main\DB\Exception; class LastSearch { const LIMIT = 30; const CACHE_TTL = 31536000; const CACHE_PATH = '/bx/im/search/last/'; public static function add($dialogId, $userId = null) { $userId = \Bitrix\Im\Common::getUserId($userId); if (!$userId) { return false; } if (!$dialogId || $dialogId == 'chat0') { return false; } if (!\Bitrix\Im\Common::isDialogId($dialogId)) { return false; } if (\Bitrix\Im\Common::isChatId($dialogId)) { $chatId = substr($dialogId, 4); $relations = Chat::getRelation($chatId); if (!$relations[$userId]) { return false; } $relationId = $relations[$userId]['ID']; } else { $relations = \Bitrix\Im\Dialog::getRelation($userId, $dialogId); if (!$relations[$userId]) { return false; } $chatId = $relations[$userId]['CHAT_ID']; $relationId = $relations[$userId]['ID']; } $orm = \Bitrix\Im\Model\LastSearchTable::getList(Array( 'filter' => Array('USER_ID' => $userId, 'DIALOG_ID' => $dialogId), 'order' => Array('ID' => 'DESC') )); if ($orm->fetch()) { return true; } $result = \Bitrix\Im\Model\LastSearchTable::add(Array( 'USER_ID' => $userId, 'DIALOG_ID' => $dialogId, 'ITEM_CID' => $chatId, 'ITEM_RID' => $relationId, )); if (!$result->isSuccess()) return false; $count = 0; $delete = Array(); $orm = \Bitrix\Im\Model\LastSearchTable::getList(Array( 'filter' => Array('USER_ID' => $userId), 'order' => Array('ID' => 'DESC') )); while ($row = $orm->fetch()) { $count++; if ($count > self::LIMIT) { $delete[] = $row['ID']; } } foreach ($delete as $id) { \Bitrix\Im\Model\LastSearchTable::delete($id); } self::clearCache($userId); return $result->getId(); } public static function delete($dialogId, $userId = null) { $userId = \Bitrix\Im\Common::getUserId($userId); if (!$userId) { return false; } if (!$dialogId || $dialogId == 'chat0') { return false; } if (!\Bitrix\Im\Common::isDialogId($dialogId)) { return false; } $orm = \Bitrix\Im\Model\LastSearchTable::getList(Array( 'filter' => Array( 'USER_ID' => $userId, 'DIALOG_ID' => $dialogId ) )); $row = $orm->fetch(); if (!$row) { return false; } \Bitrix\Im\Model\LastSearchTable::delete($row['ID']); self::clearCache($userId); return true; } public static function get($userId = null, $options = array()) { $userId = \Bitrix\Im\Common::getUserId($userId); if (!$userId) { return false; } $result = array(); $cacheId = 'list_v2_'.$userId.'_'.Color::isEnabled(); $cachePath = self::CACHE_PATH.\Bitrix\Im\Common::getCacheUserPostfix($userId); $cache = \Bitrix\Main\Application::getInstance()->getCache(); $taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache(); if($cache->initCache(self::CACHE_TTL, $cacheId, $cachePath)) { $result = $cache->getVars(); } else { $generalChatId = \CIMChat::GetGeneralChatId(); $select = Array( '*', 'RELATION_USER_ID' => 'RELATION.USER_ID', 'RELATION_NOTIFY_BLOCK' => 'RELATION.NOTIFY_BLOCK', 'CHAT_TITLE' => 'CHAT.TITLE', 'CHAT_TYPE' => 'CHAT.TYPE', 'CHAT_AVATAR' => 'CHAT.AVATAR', 'CHAT_LAST_MESSAGE_STATUS' => 'CHAT.LAST_MESSAGE_STATUS', 'CHAT_AUTHOR_ID' => 'CHAT.AUTHOR_ID', 'CHAT_EXTRANET' => 'CHAT.EXTRANET', 'CHAT_COLOR' => 'CHAT.COLOR', 'CHAT_ENTITY_TYPE' => 'CHAT.ENTITY_TYPE', 'CHAT_ENTITY_ID' => 'CHAT.ENTITY_ID', 'CHAT_ENTITY_DATA_1' => 'CHAT.ENTITY_DATA_1', 'CHAT_ENTITY_DATA_2' => 'CHAT.ENTITY_DATA_2', 'CHAT_ENTITY_DATA_3' => 'CHAT.ENTITY_DATA_3', 'CHAT_DATE_CREATE' => 'CHAT.DATE_CREATE', ); $orm = \Bitrix\Im\Model\LastSearchTable::getList(Array( 'select' => $select, 'filter' => Array('=USER_ID' => $userId), 'order' => Array('ID' => 'DESC') )); while ($row = $orm->fetch()) { $isUser = strpos($row['DIALOG_ID'], 'chat') !== 0; $id = $row['DIALOG_ID']; $item = Array( 'ID' => $isUser? (int)$id: $id, 'TYPE' => $isUser? 'user': 'chat', 'AVATAR' => Array(), 'TITLE' => Array(), ); if ($isUser) { $item['USER'] = Array( 'ID' => (int)$row['DIALOG_ID'], ); } else { $avatar = \CIMChat::GetAvatarImage($row['CHAT_AVATAR'], 100, false); $color = strlen($row['CHAT_COLOR']) > 0? Color::getColor($row['CHAT_COLOR']): Color::getColorByNumber($row['ITEM_ID']); $chatType = \Bitrix\Im\Chat::getType($row); if ($generalChatId == $row['ITEM_ID']) { $row["CHAT_ENTITY_TYPE"] = 'GENERAL'; } $muteList = Array(); if ($row['RELATION_NOTIFY_BLOCK'] == 'Y') { $muteList = Array($row['RELATION_USER_ID'] => true); } $item['AVATAR'] = Array( 'URL' => $avatar, 'COLOR' => $color ); $item['TITLE'] = $row['CHAT_TITLE']; $item['CHAT'] = Array( 'ID' => (int)$row['ITEM_CID'], 'NAME' => $row['CHAT_TITLE'], 'OWNER' => (int)$row['CHAT_AUTHOR_ID'], 'EXTRANET' => $row['CHAT_EXTRANET'] == 'Y', 'AVATAR' => $avatar, 'COLOR' => $color, 'TYPE' => $chatType, 'ENTITY_TYPE' => (string)$row['CHAT_ENTITY_TYPE'], 'ENTITY_ID' => (string)$row['CHAT_ENTITY_ID'], 'ENTITY_DATA_1' => (string)$row['CHAT_ENTITY_DATA_1'], 'ENTITY_DATA_2' => (string)$row['CHAT_ENTITY_DATA_2'], 'ENTITY_DATA_3' => (string)$row['CHAT_ENTITY_DATA_3'], 'MUTE_LIST' => $muteList, 'DATE_CREATE' => $row['CHAT_DATE_CREATE'], 'MESSAGE_TYPE' => $row["CHAT_TYPE"], ); } $result[$id] = $item; } $taggedCache->startTagCache($cachePath); $taggedCache->registerTag("USER_NAME"); $taggedCache->endTagCache(); $cache->startDataCache(); $cache->endDataCache($result); } foreach ($result as $id => $item) { if ($options['SKIP_OPENLINES'] == 'Y') { if ($item['TYPE'] == 'chat' && $item['CHAT']['TYPE'] == 'lines') { unset($result[$id]); continue; } } if ($options['SKIP_CHAT'] == 'Y') { if ($item['TYPE'] == 'chat' && $item['CHAT']['TYPE'] != 'lines') { unset($result[$id]); continue; } } if ($options['SKIP_DIALOG'] == 'Y') { if ($item['TYPE'] == 'user') { unset($result[$id]); continue; } } if ($item['USER']['ID'] > 0) { $user = User::getInstance($item['USER']['ID'])->getArray(); if (!$user) { $user = Array('ID' => 0); } else if ($item['TYPE'] == 'user') { $item['AVATAR'] = Array( 'URL' => $user['AVATAR'], 'COLOR' => $user['COLOR'] ); $item['TITLE'] = $user['NAME']; } $item['USER'] = $user; $result[$id] = $item; } } $result = array_values($result); if ($options['JSON']) { foreach ($result as $index => $item) { foreach ($item as $key => $value) { if ($value instanceof \Bitrix\Main\Type\DateTime) { $item[$key] = date('c', $value->getTimestamp()); } else if (is_array($value)) { foreach ($value as $subKey => $subValue) { if ($subValue instanceof \Bitrix\Main\Type\DateTime) { $value[$subKey] = date('c', $subValue->getTimestamp()); } else if (is_string($subValue) && $subValue && in_array($subKey, Array('URL', 'AVATAR')) && strpos($subValue, 'http') !== 0) { $value[$subKey] = \Bitrix\Im\Common::getPublicDomain().$subValue; } else if (is_array($subValue)) { $value[$subKey] = array_change_key_case($subValue, CASE_LOWER); } } $item[$key] = array_change_key_case($value, CASE_LOWER); } } $result[$index] = array_change_key_case($item, CASE_LOWER); } } return $result; } public static function clearCache($userId = null) { $cache = Application::getInstance()->getCache(); $cache->cleanDir(self::CACHE_PATH.($userId? Common::getCacheUserPostfix($userId): '')); } }
/var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/controller/../im/lib/lastsearch.php