1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
RecentAiAssistant.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Recent;
4
5use Bitrix\Im\Model\EO_Recent_Collection;
6use Bitrix\Im\Model\RecentTable;
7use Bitrix\Im\V2\Chat;
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;
14
16{
17 protected const AVAILABLE_GROUP_TYPES = [Chat::IM_TYPE_AI_ASSISTANT, Chat::IM_TYPE_COPILOT];
18
19 public static function getAiAssistantChats(int $limit, ?DateTime $lastMessageDate = null): self
20 {
21 $recent = new static();
22 $userId = $recent->getContext()->getUserId();
23
24 $recentEntities = static::getOrmEntities($limit, $userId, $lastMessageDate);
25
26 $chatIds = $recentEntities->getItemCidList();
27 $counters = (new CounterService($userId))->getForEachChat($chatIds);
28
29 foreach ($recentEntities as $entity)
30 {
31 $recentItem =
33 ->setCounter($counters[$entity->getItemCid()] ?? 0)
34 ->setLastReadMessageId($entity->getRelation()?->getLastId() ?? 0)
35 ->setDateUpdate($entity->getDateUpdate())
36 ->setDateLastActivity($entity->getDateLastActivity())
37 ;
38
39 $recent[] = $recentItem;
40 }
41
42 return $recent;
43 }
44
45 protected static function getOrmEntities(int $limit, int $userId, ?DateTime $lastMessageDate = null): EO_Recent_Collection
46 {
47 $query = RecentTable::query()
48 ->setSelect([
49 'ITEM_CID',
50 'ITEM_MID',
51 'UNREAD',
52 'PINNED',
53 'DATE_LAST_ACTIVITY',
54 'DATE_UPDATE',
55 'RELATION.LAST_ID',
56 ])
57 ->setLimit($limit)
58 ->setOrder(self::getOrder($userId))
59 ;
60
61 self::processFilters($query, $userId, $lastMessageDate);
62
63 return $query->fetchCollection();
64 }
65
66 protected static function processFilters(Query $query, int $userId, ?DateTime $lastMessageDate = null): void
67 {
68 $aiAssistantId = ServiceLocator::getInstance()->get(AiAssistantService::class)->getBotId();
69
70 $personalAiChatFilter =
71 Query::filter()
72 ->logic('and')
73 ->where('ITEM_TYPE', Chat::IM_TYPE_PRIVATE)
74 ->where('ITEM_ID', $aiAssistantId)
75 ;
76
77 $chatAllowedTypesFilter =
78 Query::filter()
79 ->logic('or')
80 ->whereIn('ITEM_TYPE', self::AVAILABLE_GROUP_TYPES)
81 ->where($personalAiChatFilter)
82 ;
83
84 $query
85 ->where('USER_ID', $userId)
86 ->where($chatAllowedTypesFilter)
87 ;
88
89 if (isset($lastMessageDate))
90 {
91 $query->where('DATE_LAST_ACTIVITY', '<=', $lastMessageDate);
92 }
93 }
94}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static processFilters(Query $query, int $userId, ?DateTime $lastMessageDate=null)
Определения RecentAiAssistant.php:66
static getAiAssistantChats(int $limit, ?DateTime $lastMessageDate=null)
Определения RecentAiAssistant.php:19
static getOrmEntities(int $limit, int $userId, ?DateTime $lastMessageDate=null)
Определения RecentAiAssistant.php:45
static initByEntity(EO_Recent $entity)
Определения RecentItem.php:27
$query
Определения get_search.php:11
$entity
Определения chain.php:3
$counters
Определения options.php:100