1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
UrlService.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Link\Url;
4
5use Bitrix\Im\Model\LinkUrlTable;
6use Bitrix\Im\V2\Common\ContextCustomer;
7use Bitrix\Im\V2\Link\Push;
8use Bitrix\Im\V2\Message;
9use Bitrix\Im\V2\MessageCollection;
10use Bitrix\Im\V2\Result;
11use Bitrix\Main\Application;
12use Bitrix\Main\ORM\Query\Query;
13
15{
16 use ContextCustomer;
17
18 protected const ADD_URL_EVENT = 'urlAdd';
19 protected const DELETE_URL_EVENT = 'urlDelete';
20
21 private bool $isBackgroundMode = true;
22 private int $quotaOfFetchMetadata = 5;
23
24 public function getCount(int $chatId, ?int $startId = null): int
25 {
26 $filter = Query::filter()->where('CHAT_ID', $chatId);
27
28 if (isset($startId) && $startId > 0)
29 {
30 $filter->where('MESSAGE_ID', '>=', $startId);
31 }
32
33 return LinkUrlTable::getCount($filter);
34 }
35
41 {
42 if ($this->isBackgroundMode)
43 {
44 Application::getInstance()->addBackgroundJob(fn () => $this->saveUrlsFromMessageInternal($message));
45
46 return new Result();
47 }
48
49 return $this->saveUrlsFromMessageInternal($message);
50 }
51
57 {
58 $result = new Result();
59
60 $deleteResult = $this->deleteUrlsByMessage($message);
61
62 if (!$deleteResult->isSuccess())
63 {
64 return $result->addErrors($deleteResult->getErrors());
65 }
66
67 $saveResult = $this->saveUrlsFromMessage($message);
68
69 if (!$saveResult->isSuccess())
70 {
71 return $result->addErrors($saveResult->getErrors());
72 }
73
74 return $result;
75 }
76
78 {
79 $result = new Result();
80
81 $urls = $this->getUrlsByMessage($message);
82
83 if (count($urls) === 0)
84 {
85 return $result;
86 }
87
88 return $this->deleteUrls($urls);
89 }
90
92 {
93 $result = new Result();
94
95 $urls = $this->getUrlsByMessages($messages);
96
97 if (count($urls) === 0)
98 {
99 return $result;
100 }
101
102 return $this->deleteUrls($urls);
103 }
104
105 public function deleteUrls(UrlCollection $urls): Result
106 {
107 $deleteResult = $urls->delete();
108
109 if (!$deleteResult->isSuccess())
110 {
111 return $deleteResult;
112 }
113
114 foreach ($urls as $url)
115 {
117 ->setContext($this->context)
118 ->sendIdOnly($url, UrlService::DELETE_URL_EVENT, ['CHAT_ID' => $url->getChatId()])
119 ;
120 }
121
122 return $deleteResult;
123 }
124
125 public function setBackgroundMode(bool $isBackgroundMode): self
126 {
127 $this->isBackgroundMode = $isBackgroundMode;
128
129 return $this;
130 }
131
132 public function setQuotaOfFetchMetadata(int $quota): self
133 {
134 $this->quotaOfFetchMetadata = $quota;
135
136 return $this;
137 }
138
140 {
141 $result = new Result();
142 $urlCollection = $this->initUrlsByMessage($message);
143
144 if ($urlCollection->hasUnsaved())
145 {
146 $saveResult = $this->saveUrls($urlCollection);
147 if ($saveResult->isSuccess())
148 {
149 $this->sendAddPush($urlCollection);
150 }
151 else
152 {
153 $result->addErrors($saveResult->getErrors());
154 }
155 }
156
157 return $result;
158 }
159
160 protected function saveUrls(UrlCollection $urls): Result
161 {
162 return $urls->save();
163 }
164
166 {
167 $urlEntities = LinkUrlTable::query()
168 ->setSelect(['*'])
169 ->where('MESSAGE_ID', $message->getMessageId())
170 ->fetchCollection();
171
172 return (new UrlCollection($urlEntities))->fillMetadata();
173 }
174
176 {
177 $urlEntities = LinkUrlTable::query()
178 ->setSelect(['*'])
179 ->whereIn('MESSAGE_ID', $messages->getIds())
180 ->fetchCollection();
181 return (new UrlCollection($urlEntities));
182 }
183
185 {
187 $urlCollection = new \Bitrix\Im\V2\Entity\Url\UrlCollection();
188 $countUrlsWithMetadata = 0;
189
190 foreach ($urls as $url)
191 {
192 $withFetchMetadata = $countUrlsWithMetadata < $this->quotaOfFetchMetadata;
193 $urlCollection[] = new \Bitrix\Im\V2\Entity\Url\UrlItem($url, $withFetchMetadata);
194 $countUrlsWithMetadata++;
195 }
196
197 return UrlCollection::linkEntityToMessage($urlCollection, $message);
198 }
199
200 protected function sendAddPush(UrlCollection $urls): void
201 {
202 foreach ($urls as $url)
203 {
204 $recipient = $url->getEntity()->getRichData()->getAllowedUsers();
205 if ($recipient === null)
206 {
208 ->setContext($this->context)
209 ->sendFull($url, self::ADD_URL_EVENT, ['CHAT_ID' => $url->getChatId()])
210 ;
211 }
212 else
213 {
215 ->setContext($this->context)
216 ->sendFull($url, self::ADD_URL_EVENT, ['RECIPIENT' => $recipient])
217 ;
218 }
219 }
220 }
221}
static getUrlsFromText(?string $text)
Определения UrlItem.php:82
Определения result.php:20
static getInstance()
Определения servicelocator.php:33
$result
Определения get_property_values.php:14
$filter
Определения iblock_catalog_list.php:54
Определения 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
$messages
Определения template.php:8
$url
Определения iframe.php:7