1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
FavoriteService.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Link\Favorite;
4
5use Bitrix\Im\V2\MessageCollection;
6use Bitrix\Main\ORM\Query\Query;
7use Bitrix\Im\Model\LinkFavoriteTable;
8use Bitrix\Im\V2\Common\ContextCustomer;
9use Bitrix\Im\V2\Error;
10use Bitrix\Im\V2\Link\Push;
11use Bitrix\Im\V2\Message;
12use Bitrix\Im\V2\Result;
13use Bitrix\Im\V2\Message\Params;
14use Bitrix\Im\V2\Message\MessageError;
15
17{
18 use ContextCustomer;
19
20 public const ADD_FAVORITE_MESSAGE_EVENT = 'messageFavoriteAdd';
21 public const DELETE_FAVORITE_MESSAGE_EVENT = 'messageFavoriteDelete';
22
23 public function getCount(int $chatId): int
24 {
25 $filter = Query::filter()
26 ->where('CHAT_ID', $chatId)
27 ->where('AUTHOR_ID', $this->getContext()->getUserId())
28 ;
29
30 return LinkFavoriteTable::getCount($filter);
31 }
32
34 {
35 $result = new Result();
36
37 $favoriteMessage = FavoriteItem::createFromMessage($message, $this->getContext());
38 $saveResult = $this->saveFavoriteMessage($favoriteMessage);
39
40 if (!$saveResult->isSuccess())
41 {
42 return $result->addErrors($saveResult->getErrors());
43 }
44
45 $this->saveInParam($message);
46
47 $pushRecipient = ['RECIPIENT' => [$this->getContext()->getUserId()]];
48
50 ->setContext($this->context)
51 ->sendFull($favoriteMessage, static::ADD_FAVORITE_MESSAGE_EVENT, $pushRecipient)
52 ;
53
54 return $result;
55 }
56
58 {
59 $result = new Result();
60
61 $favoriteMessage = FavoriteItem::getByMessageAndUserId($message, $this->getContext()->getUserId());
62
63 if ($favoriteMessage === null)
64 {
65 return $result;
66 }
67
68 $deleteResult = $favoriteMessage->delete();
69
70 if (!$deleteResult->isSuccess())
71 {
72 return $result->addErrors($deleteResult->getErrors());
73 }
74
75 $deleteParamResult = $this->deleteFromParam($message);
76
77 if (!$deleteParamResult->isSuccess())
78 {
79 return $result->addErrors($deleteParamResult->getErrors());
80 }
81
82 $pushRecipient = ['RECIPIENT' => [$this->getContext()->getUserId()]];
83
85 ->setContext($this->context)
86 ->sendIdOnly($favoriteMessage, static::DELETE_FAVORITE_MESSAGE_EVENT, $pushRecipient)
87 ;
88
89 return $result;
90 }
91
92 public function unmarkMessageAsFavoriteForAll(Message $message): Result
93 {
94 $result = new Result();
95
96 $favoriteMessages = FavoriteCollection::getByMessage($message);
97
98 if ($favoriteMessages === null || $favoriteMessages->count() === 0)
99 {
100 return $result;
101 }
102
103 $deleteResult = $favoriteMessages->delete();
104
105 if (!$deleteResult->isSuccess())
106 {
107 return $result->addErrors($deleteResult->getErrors());
108 }
109
111 foreach ($favoriteMessages as $favoriteMessage)
112 {
113 $pushRecipient = ['RECIPIENT' => [$favoriteMessage->getAuthorId()]];
115 ->setContext($this->context)
116 ->sendIdOnly($favoriteMessage,static::DELETE_FAVORITE_MESSAGE_EVENT, $pushRecipient)
117 ;
118 }
119
120 return $result;
121 }
122
123 public function unmarkMessagesAsFavoriteForAll(MessageCollection $messages): Result
124 {
125 $result = new Result();
126
127 $favoriteMessages = FavoriteCollection::getByMessages($messages);
128
129 if ($favoriteMessages === null || $favoriteMessages->count() === 0)
130 {
131 return $result;
132 }
133
134 $deleteResult = $favoriteMessages->delete();
135
136 if (!$deleteResult->isSuccess())
137 {
138 return $result->addErrors($deleteResult->getErrors());
139 }
140
142 foreach ($favoriteMessages as $favoriteMessage)
143 {
144 $pushRecipient = ['RECIPIENT' => [$favoriteMessage->getAuthorId()]];
146 ->setContext($this->context)
147 ->sendIdOnly($favoriteMessage,static::DELETE_FAVORITE_MESSAGE_EVENT, $pushRecipient)
148 ;
149 }
150
151 return $result;
152 }
153
154 protected function saveFavoriteMessage(FavoriteItem $favoriteMessage): Result
155 {
156 try
157 {
158 return $favoriteMessage->save();
159 }
160 catch (\Bitrix\Main\SystemException $exception)
161 {
162 return (new Result())->addError(new MessageError(MessageError::MESSAGE_IS_ALREADY_FAVORITE));
163 }
164 }
165
166 protected function saveInParam(Message $message): Result
167 {
168 $favoriteListParam = $message->getParams()->get(Params::FAVORITE)->getValue() ?: [];
169 $userId = $this->getContext()->getUserId();
170 if (!in_array($userId, $favoriteListParam, true))
171 {
172 $message->getParams()->get(Params::FAVORITE)->addValue($userId);
173 $message->getParams()->save();
174 \CIMMessageParam::SendPull($message->getMessageId(), [Params::FAVORITE]);
175 }
176
177 return new Result();
178 }
179
181 {
182 $favoriteListParam = $message->getParams()->get(Params::FAVORITE)->getValue() ?: [];
183 $userId = $this->getContext()->getUserId();
184 if (in_array($userId, $favoriteListParam, true))
185 {
186 $message->getParams()->get(Params::FAVORITE)->unsetValue($userId);
187 $message->getParams()->save();
188 \CIMMessageParam::SendPull($message->getMessageId(), [Params::FAVORITE]);
189 }
190
191 return new Result();
192 }
193}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
Определения result.php:20
$result
Определения get_property_values.php:14
$filter
Определения iblock_catalog_list.php:54
Определения Uuid.php:3
$message
Определения payment.php:8
$messages
Определения template.php:8