3namespace Bitrix\Im\V2\Recent;
5use Bitrix\Im\Model\EO_Recent_Collection;
6use Bitrix\Im\Model\RecentTable;
8use Bitrix\Im\V2\Integration\AiAssistant\AiAssistantService;
9use Bitrix\Im\V2\Message\CounterService;
10use Bitrix\Im\V2\Rest\PopupData;
11use Bitrix\Main\DI\ServiceLocator;
12use Bitrix\Main\ORM\Query\Query;
13use Bitrix\Main\Type\DateTime;
21 $recent =
new static();
22 $userId = $recent->getContext()->getUserId();
24 $recentEntities = static::getOrmEntities($limit,
$userId, $lastMessageDate);
26 $chatIds = $recentEntities->getItemCidList();
29 foreach ($recentEntities as
$entity)
34 ->setLastReadMessageId(
$entity->getRelation()?->getLastId() ?? 0)
35 ->setDateUpdate(
$entity->getDateUpdate())
36 ->setDateLastActivity(
$entity->getDateLastActivity())
39 $recent[] = $recentItem;
47 $query = RecentTable::query()
58 ->setOrder(self::getOrder(
$userId))
63 return $query->fetchCollection();
68 $aiAssistantId = ServiceLocator::getInstance()->get(AiAssistantService::class)->getBotId();
70 $personalAiChatFilter =
73 ->where(
'ITEM_TYPE', Chat::IM_TYPE_PRIVATE)
74 ->where(
'ITEM_ID', $aiAssistantId)
77 $chatAllowedTypesFilter =
80 ->whereIn(
'ITEM_TYPE', self::AVAILABLE_GROUP_TYPES)
81 ->where($personalAiChatFilter)
86 ->where($chatAllowedTypesFilter)
89 if (isset($lastMessageDate))
91 $query->where(
'DATE_LAST_ACTIVITY',
'<=', $lastMessageDate);
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static processFilters(Query $query, int $userId, ?DateTime $lastMessageDate=null)
const AVAILABLE_GROUP_TYPES
static getAiAssistantChats(int $limit, ?DateTime $lastMessageDate=null)
static getOrmEntities(int $limit, int $userId, ?DateTime $lastMessageDate=null)
static initByEntity(EO_Recent $entity)