- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/SendingService.php
- Класс: BitrixImV2MessageSendSendingService
- Вызов: SendingService::fireEventBeforeSend
public function fireEventBeforeSend(Chat $chat, Message $message): Result
{
$result = new Result;
$event = new Event('im', static::EVENT_BEFORE_MESSAGE_ADD, [
'message' => $message->toArray(),
'parameters' => $this->sendingConfig->toArray(),
]);
$event->send();
foreach ($event->getResults() as $eventResult)
{
$eventParams = $eventResult->getParameters();
if ($eventResult->getType() === EventResult::SUCCESS)
{
if ($eventParams)
{
if (isset($eventParams['message']) && is_array($eventParams['message']))
{
unset(
$eventParams['message']['MESSAGE_ID'],
$eventParams['message']['CHAT_ID'],
$eventParams['message']['AUTHOR_ID'],
$eventParams['message']['FROM_USER_ID']
);
$message->fill($eventParams['message']);
}
if (isset($eventParams['parameters']) && is_array($eventParams['parameters']))
{
$this->sendingConfig->fill($eventParams['parameters']);
}
}
}
elseif ($eventResult->getType() === EventResult::ERROR)
{
if ($eventParams && isset($eventParams['error']))
{
if ($eventParams['error'] instanceof MainError)
{
$result->addError($eventParams['error']);
}
elseif (is_string($eventParams['error']))
{
$result->addError(new ChatError(ChatError::BEFORE_SEND_EVENT, $eventParams['error']));
}
}
else
{
$result->addError(new ChatError(ChatError::BEFORE_SEND_EVENT));
}
}
}
return $result;
}