3namespace Bitrix\Im\V2\Controller\Chat;
5use Bitrix\Im\V2\Analytics\MessageAnalytics;
7use Bitrix\Im\V2\Controller\BaseController;
8use Bitrix\Im\V2\Controller\Filter\CheckActionAccess;
9use Bitrix\Im\V2\Controller\Filter\PlatformContext;
10use Bitrix\Im\V2\Controller\Filter\DiskQuickAccessGrantor;
11use Bitrix\Im\V2\Entity\View\ViewCollection;
12use Bitrix\Im\V2\Message\Delete\DeletionMode;
13use Bitrix\Im\V2\Message\Delete\DisappearService;
14use Bitrix\Im\V2\Message\Forward\ForwardService;
15use Bitrix\Im\V2\Message\MessageError;
16use Bitrix\Im\V2\Message\PushFormat;
17use Bitrix\Im\V2\Message\Send\SendingService;
18use Bitrix\Im\V2\Message\Update\UpdateService;
19use Bitrix\Im\V2\Message\Delete\DeleteService;
20use Bitrix\Im\V2\MessageCollection;
21use Bitrix\Im\V2\Message\MessageService;
22use Bitrix\Im\V2\Permission\Action;
23use Bitrix\Im\V2\Result;
24use Bitrix\Main\Engine\AutoWire\ExactParameter;
25use Bitrix\Main\Engine\CurrentUser;
31 private const ALLOWED_FIELDS_UPDATE = [
37 private const ALLOWED_FIELDS_SEND = [
57 function ($className,
int $id) {
58 return new \Bitrix\Im\V2\Message($id);
67 MessageCollection::class,
69 function($className,
array $ids) {
75 MessageCollection::class,
78 $forwardIds =
$fields[
'forwardIds'] ?? [];
80 if (empty($forwardIds))
85 if (
count($forwardIds) > self::MAX_MESSAGES_COUNT)
87 $this->addError(
new MessageError(MessageError::TOO_MANY_MESSAGES));
92 $forwardIds = array_map(
'intval', $forwardIds);
94 foreach ($messageCollection as
$message)
98 $uuid = array_search(
$messageId, $forwardIds,
true);
103 if (
$message->getForwardUuid() ===
null)
105 $this->addError(
new MessageError(MessageError::WRONG_UUID));
112 return $messageCollection;
115 ], parent::getAutoWiredParameters());
157 if (!$readResult->isSuccess())
159 $this->addErrors($readResult->getErrors());
164 return $this->convertKeysToCamelCase($readResult->getResult());
173 'LAST_ID' => isset(
$filter[
'lastId']) ? (int)
$filter[
'lastId'] :
null,
176 $viewOrder = [
'ID' =>
$order[
'id'] ??
'ASC'];
177 $viewLimit = $this->
getLimit($limit);
191 if (!$markResult->isSuccess())
193 $this->addErrors($markResult->getErrors());
204 public function listAction(
Chat $chat,
int $limit = self::MESSAGE_ON_PAGE_COUNT,
string $ignoreMark =
'N'): ?
array
206 $messageService =
new MessageService($chat->getLoadContextMessage($this->convertCharToBool($ignoreMark)));
207 $messages = $messageService->getMessageContext($limit, \
Bitrix\
Im\
V2\Message::REST_FIELDS)->getResult();
218 $messages = $messageService->getMessageContext($range, \
Bitrix\
Im\
V2\Message::REST_FIELDS)->getResult();
230 return $this->
getMessages($messageFilter, $messageOrder, $limit);
240 return $this->
getMessages($messageFilter, $messageOrder, $limit);
250 if (!$pinResult->isSuccess())
252 $this->addErrors($pinResult->getErrors());
267 if (!$unpinResult->isSuccess())
269 $this->addErrors($unpinResult->getErrors());
284 $this->addError(
new MessageError(MessageError::TOO_MANY_MESSAGES));
294 $this->addErrors(
$result->getErrors());
311 $this->addError(
new MessageError(MessageError::ACCESS_DENIED));
320 $this->addErrors(
$result->getErrors());
349 $this->addErrors(
$result->getErrors());
355 $fields[
'SKIP_USER_CHECK'] =
'Y';
356 $fields[
'WAIT_FULL_EXECUTION'] =
'N';
360 if (isset($forwardMessages) && $forwardMessages->count() > 0)
362 $forwardResult = $this->sendForwardMessages($chat, $forwardMessages);
363 if (!$forwardResult->isSuccess())
365 $this->addErrors($forwardResult->getErrors());
370 foreach ($forwardMessages as
$message)
376 if (
$messageId ===
false && !isset($forwardResult))
378 $this->addError(
new MessageError(MessageError::SENDING_FAILED));
385 'uuidMap' => isset($forwardResult) ? $forwardResult->getResult() : []
396 string $urlPreview =
'Y',
410 $this->addErrors(
$result->getErrors());
438 $this->addErrors(
$result->getErrors());
443 $pushService = new \Bitrix\Im\V2\Message\Inform\PushService();
444 $pushService->sendInformPushPrivateChat(
$message);
446 return [
'result' =>
true];
456 $this->addError(
new MessageError(MessageError::WRONG_SENDER));
461 (new \Bitrix\Im\V2\Message\Attach\AttachService())->deleteRichUrl(
$message);
463 return [
'result' =>
true];
473 $messageOrder[
'ID'] = strtoupper(
$order[
'id']);
478 $messageFilter[
'LAST_ID'] = (int)
$filter[
'lastId'];
481 $messageFilter[
'START_ID'] = $chat->getStartId();
482 $messageFilter[
'CHAT_ID'] = $chat->getChatId();
484 return [$messageFilter, $messageOrder];
491 if (isset(
$filter[
'searchMessage']) && is_string(
$filter[
'searchMessage']))
493 $messageFilter[
'SEARCH_MESSAGE'] = trim(
$filter[
'searchMessage']);
496 return [$messageFilter, $messageOrder];
510 $wasFilteredByTariffRestrictions = $rest[
'tariffRestrictions'][
'isHistoryLimitExceeded'] ??
false;
512 $rest[
'hasNextPage'] = !$wasFilteredByTariffRestrictions &&
$messages->count() >= $limit;
526 $service =
new ForwardService($chat);
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
toRestFormat(RestConvertible ... $entities)
convertCharToBool(string $char, bool $default=false)
prepareFields(array $fields, array $whiteList)
getMessagesByIds(array $ids)
informAction(\Bitrix\Im\V2\Message $message)
tailAction(Chat $chat, array $filter=[], array $order=[], int $limit=50)
getMessages(array $filter, array $order, int $limit)
updateAction(\Bitrix\Im\V2\Message $message, ?\CRestServer $restServer=null, array $fields=[], string $urlPreview='Y', int $botId=0)
getPrimaryAutoWiredParameter()
sendAction(Chat $chat, ?\CRestServer $restServer=null, array $fields=[], ?MessageCollection $forwardMessages=null)
readAction(MessageCollection $messages)
tailViewersAction(\Bitrix\Im\V2\Message $message, array $filter=[], array $order=[], int $limit=50)
getContextAction(\Bitrix\Im\V2\Message $message, int $range=self::MESSAGE_ON_PAGE_COUNT)
const MESSAGE_ON_PAGE_COUNT
prepareParamsForSearch(Chat $chat, array $filter, array $order)
markAction(\Bitrix\Im\V2\Message $message)
deleteAction(\Bitrix\Im\V2\MessageCollection $messages)
disappearAction(\Bitrix\Im\V2\Message $message, int $hours)
listAction(Chat $chat, int $limit=self::MESSAGE_ON_PAGE_COUNT, string $ignoreMark='N')
pinAction(\Bitrix\Im\V2\Message $message)
searchAction(Chat $chat, array $filter=[], array $order=[], int $limit=50)
deleteRichUrlAction(\Bitrix\Im\V2\Message $message, CurrentUser $user)
unpinAction(\Bitrix\Im\V2\Message $message)
prepareParamsForTail(Chat $chat, array $filter, array $order)
static find(array $filter, array $order=['ID'=> 'ASC'], ?int $limit=null, ?Context $context=null)
static getInstanceByMessage(Message $message)
static getMultipleActionMessageLimit()
static find(array $filter, array $order, ?int $limit=null, ?Context $context=null, array $select=[])
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
</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."%"