3namespace Bitrix\Im\V2\Link\Pin;
6use Bitrix\Im\Model\LinkPinTable;
7use Bitrix\Im\Services\MessageParam;
9use Bitrix\Im\V2\Common\ContextCustomer;
10use Bitrix\Im\V2\Error;
11use Bitrix\Im\V2\Link\Push;
12use Bitrix\Im\V2\Message;
13use Bitrix\Im\V2\MessageCollection;
14use Bitrix\Im\V2\Result;
15use Bitrix\Main\Localization\Loc;
16use Bitrix\Main\ORM\Query\Query;
31 $saveResult = $this->
savePin($pin);
33 if (!$saveResult->isSuccess())
35 return $result->addErrors($saveResult->getErrors());
40 if (!$saveParamResult->isSuccess())
42 return $result->addErrors($saveParamResult->getErrors());
47 new Sync\
Event(
Sync\Event::ADD_EVENT,
Sync\Event::PIN_MESSAGE_ENTITY, $pin->getId()),
48 fn () => $chat->getRelations()->getUserIds(),
55 ->setContext($this->context)
56 ->sendFull($pin, static::ADD_PIN_EVENT, [
'CHAT_ID' => $pin->getChatId()])
73 $deleteResult = $pin->delete();
75 if (!$deleteResult->isSuccess())
77 return $result->addErrors($deleteResult->getErrors());
82 if (!$deleteParamResult->isSuccess())
84 return $result->addErrors($deleteParamResult->getErrors());
89 new Sync\
Event(
Sync\Event::DELETE_EVENT,
Sync\Event::PIN_MESSAGE_ENTITY, $pin->getId()),
90 fn () => $chat->getRelations()->getUserIds(),
95 ->setContext($this->context)
96 ->sendIdOnly($pin, static::DELETE_PIN_EVENT, [
'CHAT_ID' => $pin->getChatId()])
108 if ($pinCollection->count() === 0)
113 $deleteResult = $pinCollection->delete();
115 if (!$deleteResult->isSuccess())
117 return $result->addErrors($deleteResult->getErrors());
124 if (!$deleteParamResult->isSuccess())
126 return $result->addErrors($deleteParamResult->getErrors());
134 foreach ($pinCollection as $pin)
136 Sync\Logger::getInstance()->add(
137 new Sync\Event(Sync\Event::DELETE_EVENT, Sync\Event::PIN_MESSAGE_ENTITY, $pin->getId()),
138 fn () => $chat->getRelations()->getUserIds(),
143 ->setContext($this->context)
144 ->sendIdOnly($pin, static::DELETE_PIN_EVENT, [
'CHAT_ID' => $pin->getChatId()])
151 public function getCount(
int $chatId, ?
int $startId =
null): int
153 $filter = Query::filter()->where(
'CHAT_ID', $chatId);
155 if (isset($startId) && $startId > 0)
157 $filter->where(
'MESSAGE_ID',
'>=', $startId);
160 return LinkPinTable::getCount(
$filter);
178 \CIMMessageParam::Set(
$message->getMessageId(), [
'IS_PINNED' =>
'Y']);
179 \CIMMessageParam::SendPull(
$message->getMessageId(), [
'IS_PINNED']);
187 \CIMMessageParam::Set(
$message->getMessageId(), [
'IS_PINNED' =>
'N']);
188 \CIMMessageParam::SendPull(
$message->getMessageId(), [
'IS_PINNED']);
199 $pushService->sendPull(
$message, [
'IS_PINNED']);
209 $authorId = $this->getContext()->getUserId();
212 'DIALOG_ID' => $dialogId,
215 'FROM_USER_ID' => $authorId,
217 'CLASS' =>
'bx-messenger-content-item-system',
220 'URL_PREVIEW' =>
'N',
221 'SKIP_CONNECTOR' =>
'Y',
222 'SKIP_COMMAND' =>
'Y',
223 'SILENT_CONNECTOR' =>
'Y',
241 $versionPostfix =
'';
246 $versionPostfix =
'_MSGVER_1';
249 $genderModifier = ($this->getContext()->getUser()->getGender() ===
'F') ?
'_F' :
'';
251 $text .= Loc::getMessage(
252 "IM_{$type}_PIN_ADD_NOTIFICATION" . $genderModifier . $versionPostfix,
255 '#USER_ID#' => $this->getContext()->getUserId(),
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
static getDialogId(int $chatId, $userId=null)
static getByMessages(MessageCollection $messages)
static createFromMessage(Message $message, ?Context $context=null)
static getByMessage(Message $message)
unpinMessage(Message $message)
deleteFromParams(MessageCollection $messages)
getCount(int $chatId, ?int $startId=null)
deleteFromParam(Message $message)
saveInParam(Message $message)
getMessageText(PinItem $pin)
sendMessageAboutPin(PinItem $pin)
pinMessage(Message $message)