1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
LastMessages.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Message;
4
5use Bitrix\Im\Model\LastMessageTable;
6use Bitrix\Im\V2\Message;
7
9{
10 protected const COUNT_OF_LAST_USERS = 3;
11 protected const LIMIT_DELETE_BATCH = 20;
12
13 private array $chatIds;
14 private ?array $lastMessages = null;
15
16 public function __construct(array $chatIds)
17 {
18 $this->chatIds = $chatIds;
19 }
20
21 public static function insert(Message $message): void
22 {
23 if ($message->getAuthorId() === 0)
24 {
25 return;
26 }
27
28 LastMessageTable::merge(
29 [
30 'USER_ID' => $message->getAuthorId(),
31 'CHAT_ID' => $message->getChatId(),
32 'MESSAGE_ID' => $message->getId(),
33 'DATE_CREATE' => $message->getDateCreate(),
34 ],
35 [
36 'MESSAGE_ID' => $message->getId(),
37 'DATE_CREATE' => $message->getDateCreate(),
38 ],
39 ['CHAT_ID', 'USER_ID']
40 );
41
42 static::deleteExtra($message->getChatId());
43 }
44
45 public function getUsersByChatId(int $chatId): array
46 {
47 $this->fill();
48
49 return $this->lastMessages[$chatId]['USERS'] ?? [];
50 }
51
52 protected function fill(): void
53 {
54 if (isset($this->lastMessages))
55 {
56 return;
57 }
58
59 $this->lastMessages = [];
60
61 if (empty($this->chatIds))
62 {
63 return;
64 }
65
66 $raw = LastMessageTable::query()
67 ->setSelect(['USER_ID', 'CHAT_ID', 'MESSAGE_ID', 'DATE_CREATE'])
68 ->whereIn('CHAT_ID', $this->chatIds)
69 ->setOrder(['DATE_CREATE' => 'DESC'])
70 ->fetchAll()
71 ;
72
73 foreach ($raw as $row)
74 {
75 $chatId = (int)$row['CHAT_ID'];
76 if (count($this->lastMessages[$chatId]['USERS'] ?? []) < self::COUNT_OF_LAST_USERS)
77 {
78 $this->lastMessages[$chatId]['USERS'][] = (int)$row['USER_ID'];
79 }
80 }
81 }
82
83 protected static function deleteExtra(int $chatId): void
84 {
85 $extraIds = LastMessageTable::query()
86 ->setSelect(['ID'])
87 ->where('CHAT_ID', $chatId)
88 ->setOrder(['DATE_CREATE' => 'DESC'])
89 ->setLimit(self::LIMIT_DELETE_BATCH)
90 ->setOffset(self::COUNT_OF_LAST_USERS)
91 ->fetchCollection()
92 ->getIdList()
93 ;
94
95 if (empty($extraIds))
96 {
97 return;
98 }
99
100 LastMessageTable::deleteByFilter(['=ID' => $extraIds]);
101 }
102}
getUsersByChatId(int $chatId)
Определения LastMessages.php:45
__construct(array $chatIds)
Определения LastMessages.php:16
static deleteExtra(int $chatId)
Определения LastMessages.php:83
static insert(Message $message)
Определения LastMessages.php:21
const COUNT_OF_LAST_USERS
Определения LastMessages.php:10
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
Определения Uuid.php:3
$message
Определения payment.php:8
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936