- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/chat.php
- Класс: BitrixImChat
- Вызов: Chat::getListParams
static function getListParams($params)
{
if (!isset($params['CURRENT_USER']) && is_object($GLOBALS['USER']))
{
$params['CURRENT_USER'] = $GLOBALS['USER']->GetID();
}
$params['CURRENT_USER'] = intval($params['CURRENT_USER']);
$userId = $params['CURRENT_USER'];
if ($userId <= 0)
{
return null;
}
$filter = [];
$runtime = [];
if (isset($params['FILTER']['ID']))
{
$filter['=ID'] = $params['FILTER']['ID'];
}
else if (isset($params['FILTER']['SEARCH']))
{
$find = (string)$params['FILTER']['SEARCH'];
$helper = Application::getConnection()->getSqlHelper();
if (ModelChatIndexTable::getEntity()->fullTextIndexEnabled('SEARCH_CONTENT'))
{
$find = trim($find);
$find = BitrixMainSearchContent::prepareStringToken($find);
if (BitrixMainSearchContent::canUseFulltextSearch($find, BitrixMainSearchContent::TYPE_MIXED))
{
$filter['*INDEX.SEARCH_CONTENT'] = $find;
}
else
{
return null;
}
}
else
{
if (mb_strlen($find) < 3)
{
return null;
}
$filter['%=INDEX.SEARCH_TITLE'] = $helper->forSql($find).'%';
}
}
if ($params['SKIP_ACCESS_CHECK'] === 'Y')
{
// do nothing
}
else if (
User::getInstance($params['CURRENT_USER'])->isExtranet()
|| User::getInstance($params['CURRENT_USER'])->isBot()
)
{
$filter['=TYPE'] = [
self::TYPE_CHANNEL,
self::TYPE_GROUP,
self::TYPE_THREAD,
self::TYPE_PRIVATE
];
if (User::getInstance($params['CURRENT_USER'])->isBot())
{
$filter['=TYPE'][] = self::TYPE_OPEN_LINE;
}
$filter['=RELATION.USER_ID'] = $params['CURRENT_USER'];
}
else
{
$filter[] = [
'LOGIC' => 'OR',
[
'=TYPE' => self::TYPE_OPEN,
],
[
'=TYPE' => self::TYPE_GROUP,
'=RELATION.USER_ID' => $params['CURRENT_USER']
],
[
'=TYPE' => self::TYPE_THREAD,
'=RELATION.USER_ID' => $params['CURRENT_USER']
],
[
'=TYPE' => self::TYPE_PRIVATE,
'=RELATION.USER_ID' => $params['CURRENT_USER']
],
[
'=TYPE' => self::TYPE_OPEN_LINE,
'=RELATION.USER_ID' => $params['CURRENT_USER']
],
];
}
$runtime[] = new BitrixMainEntityReferenceField(
'RELATION',
'BitrixImModelRelationTable',
array(
"=ref.CHAT_ID" => "this.ID",
"=ref.USER_ID" => new BitrixMainDBSqlExpression('?', $params['CURRENT_USER']),
),
array("join_type"=>"LEFT")
);
return [
'select' => [
'*',
'RELATION_USER_ID' => 'RELATION.USER_ID',
'RELATION_MANAGER' => 'RELATION.MANAGER',
'RELATION_NOTIFY_BLOCK' => 'RELATION.NOTIFY_BLOCK',
//'RELATION_COUNTER' => 'RELATION.COUNTER',
'RELATION_START_COUNTER' => 'RELATION.START_COUNTER',
'RELATION_LAST_ID' => 'RELATION.LAST_ID',
//'RELATION_STATUS' => 'RELATION.STATUS',
//'RELATION_UNREAD_ID' => 'RELATION.UNREAD_ID',
'ALIAS_NAME' => 'ALIAS.ALIAS',
],
'filter' => $filter,
'runtime' => $runtime
];
}