- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/SendingService.php
- Класс: BitrixImV2MessageSendSendingService
- Вызов: SendingService::fireEventBeforeMessageSend
public function fireEventBeforeMessageSend(Chat $chat, Message $message): Result
{
$result = new Result;
$compatibleFields = array_merge(
$message->toArray(),
$this->sendingConfig->toArray(),
);
$compatibleChatFields = $chat->toArray();
foreach (GetModuleEvents('im', self::EVENT_BEFORE_CHAT_MESSAGE_ADD, true) as $event)
{
$eventResult = ExecuteModuleEventEx($event, [$compatibleFields, $compatibleChatFields]);
if ($eventResult === false || isset($eventResult['result']) && $eventResult['result'] === false)
{
$reason = $this->detectReasonSendError($chat->getType(), $eventResult['reason'] ?? '');
return $result->addError(new ChatError(ChatError::FROM_OTHER_MODULE, $reason));
}
if (isset($eventResult['fields']) && is_array($eventResult['fields']))
{
unset(
$eventResult['fields']['MESSAGE_ID'],
$eventResult['fields']['CHAT_ID'],
$eventResult['fields']['AUTHOR_ID'],
$eventResult['fields']['FROM_USER_ID']
);
$message->fill($eventResult['fields']);
$this->sendingConfig->fill($eventResult['fields']);
}
}
return $result;
}