- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/RelationCollection.php
- Класс: BitrixImV2RelationCollection
- Вызов: RelationCollection::processFilters
static function processFilters(Query $query, array $filter, array $order): void
{
$orderField = null;
$relationOrder = [];
if (isset($filter['CHAT_ID']))
{
$query->where('CHAT_ID', (int)$filter['CHAT_ID']);
}
if (isset($filter['MANAGER']))
{
$query->where('MANAGER', (string)$filter['MANAGER']);
}
if (isset($filter['USER_ID']))
{
if (is_array($filter['USER_ID']) && !empty($filter['USER_ID']))
{
$query->whereIn('USER_ID', $filter['USER_ID']);
}
else
{
$query->where('USER_ID', (int)$filter['USER_ID']);
}
}
if (isset($filter['!USER_ID']))
{
if (is_array($filter['!USER_ID']) && !empty($filter['!USER_ID']))
{
$query->whereNotIn('USER_ID', $filter['!USER_ID']);
}
else
{
$query->whereNot('USER_ID', (int)$filter['!USER_ID']);
}
}
if (isset($filter['MESSAGE_TYPE']))
{
$query->where('MESSAGE_TYPE', (string)$filter['MESSAGE_TYPE']);
}
if (isset($order['ID']))
{
$orderField = 'ID';
$relationOrder['ID'] = $order['ID'];
}
elseif (isset($order['USER_ID']))
{
$orderField = 'USER_ID';
$relationOrder['USER_ID'] = $order['USER_ID'];
}
if (isset($orderField))
{
$query->setOrder($orderField);
}
if (isset($filter['LAST_ID']))
{
$operator = '<';
if (isset($orderField) && $relationOrder[$orderField] === 'ASC')
{
$operator = '>';
}
$query->where($orderField, $operator, (int)$filter['LAST_ID']);
}
if (isset($filter['ACTIVE']))
{
$query->where('USER.ACTIVE', $filter['ACTIVE']);
}
if (isset($filter['ONLY_INTERNAL_TYPE']) && $filter['ONLY_INTERNAL_TYPE'])
{
$query->where(
Query::filter()
->logic('or')
->whereNotIn('USER.EXTERNAL_AUTH_ID', UserTable::getExternalUserTypes())
->whereNull('USER.EXTERNAL_AUTH_ID')
);
}
}