6use Bitrix\Im\V2\Integration\AI\RoleManager;
7use Bitrix\Im\V2\Message\Delete\DeletionMode;
8use Bitrix\Im\V2\Message\MessageError;
9use Bitrix\Im\V2\Message\Reaction\ReactionMessage;
10use Bitrix\Im\V2\TariffLimit\DateFilterable;
11use Bitrix\Im\V2\TariffLimit\FilterResult;
12use Bitrix\Im\V2\TariffLimit\Limit;
13use Bitrix\Main\Localization\Loc;
14use Bitrix\Main\ORM\Data\DataManager;
15use Bitrix\Main\Type\DateTime;
16use Bitrix\Main\ObjectException;
17use Bitrix\Main\UrlPreview\UrlPreview;
22use Bitrix\Im\Model\EO_Message;
23use Bitrix\Im\Model\MessageTable;
24use Bitrix\Im\V2\Common\ContextCustomer;
25use Bitrix\Im\V2\Common\FieldAccessImplementation;
26use Bitrix\Im\V2\Common\ActiveRecordImplementation;
27use Bitrix\Im\V2\Common\RegistryEntryImplementation;
28use Bitrix\Im\V2\Entity\File\FileCollection;
29use Bitrix\Im\V2\Entity\Url\UrlItem;
30use Bitrix\Im\V2\Link\Pin\PinService;
31use Bitrix\Im\V2\Link\Favorite\FavoriteService;
32use Bitrix\Im\V2\Message\Param;
33use Bitrix\Im\V2\Message\Params;
34use Bitrix\Im\V2\Message\Param\Menu;
35use Bitrix\Im\V2\Message\Param\Keyboard;
36use Bitrix\Im\V2\Message\Param\AttachArray;
37use Bitrix\Im\V2\Message\ReadService;
38use Bitrix\Im\V2\Message\MessageParameter;
39use Bitrix\Im\V2\Rest\PopupData;
40use Bitrix\Im\V2\Rest\RestEntity;
41use Bitrix\Im\V2\Rest\PopupDataAggregatable;
48 use FieldAccessImplementation;
49 use ActiveRecordImplementation
53 use RegistryEntryImplementation;
57 public const REST_FIELDS = [
'ID',
'CHAT_ID',
'AUTHOR_ID',
'DATE_CREATE',
'MESSAGE',
'NOTIFY_EVENT',
'NOTIFY_READ'];
181 $this->params =
new Params;
183 $this->initByDefault();
187 $this->
load($source);
193 $checkParamsIsValid = $this->
getParams()->isValid();
195 if (!$checkParamsIsValid->isSuccess())
197 return $checkParamsIsValid;
200 $result = $this->defaultSave();
206 $paramsSaveResult = $this->params->save();
207 if (!$paramsSaveResult->isSuccess())
209 $result->addErrors($paramsSaveResult->getErrors());
212 $this->params =
new Params();
234 return $this->isSystem;
248 return $row[
'DATE_REMOVE'];
256 return $this->isImportant;
280 return $this->forwardUuid;
329 $disallowLazyLoad !=
true
330 && !$this->params->isLoaded()
331 && $this->getMessageId()
361 $this->
getParams()->get(Params::ATTACH)->setValue($attach);
370 return $this->
getParams()->get(Params::ATTACH);
376 $this->isUrlFilled =
true;
383 if (isset($this->url))
388 $urlId = $this->
getParams()->get(Params::URL_ID)->getValue()[0] ??
null;
389 if (isset($urlId) && !$this->isUrlFilled)
408 return $this->isUnread;
414 return $this->isUnread;
428 return $this->isViewed;
431 if ($this->authorId === $this->getContext()->getUserId())
435 return $this->isViewed;
441 return $this->isViewed;
462 if (is_array($keyboard))
465 if (!isset($keyboard[
'BUTTONS']))
467 $value[
'BUTTONS'] = $keyboard;
473 if (!isset($value[
'BOT_ID']))
475 $value[
'BOT_ID'] = $this->botId;
480 $this->
getParams()->get(Params::KEYBOARD)->setValue($keyboard);
489 return $this->
getParams()->get(Params::KEYBOARD);
500 if (!isset($menu[
'ITEMS']))
502 $value[
'ITEMS'] = $menu;
508 if (!isset($value[
'BOT_ID']))
510 $value[
'BOT_ID'] = $this->botId;
515 $this->
getParams()->get(Params::MENU)->setValue($menu);
524 return $this->
getParams()->get(Params::MENU);
535 $this->isUuidFilled =
true;
543 if ($this->isUuidFilled)
548 $this->isUuidFilled =
true;
553 $row = Im\Model\MessageUuidTable::query()
554 ->setSelect([
'UUID'])
558 $this->uuid = $row[
'UUID'] ??
null;
566 $this->fileUuid =
$uuid;
572 return $this->fileUuid;
584 if ($this->
getParams()->isSet(Params::FILE_ID))
586 return $this->
getParams()->get(Params::FILE_ID)->getValue();
598 $this->
getParams()->isSet(Params::FILE_ID)
599 && ($this->
getParams()->get(Params::FILE_ID)->count() > 0);
612 foreach ($this->files as $fileItem)
614 $fileIds[] = $fileItem->getDiskFileId();
619 $fileIds = array_filter(array_map(
'intval', array_values(
$files)));
622 $this->
getParams()->get(Params::FILE_ID)->setValue($fileIds);
637 $this->
getParams()->get(Params::FILE_ID)->addValue($file->getId());
650 if (!empty($fileIds))
665 if ($this->prevId !==
null)
667 return $this->prevId;
670 $result = \Bitrix\Im\Model\MessageTable::query()
672 ->where(
'CHAT_ID', $this->
getChatId() ?? 0)
673 ->where(
'ID',
'<', $this->
getId() ?? 0)
674 ->setOrder([
'DATE_CREATE' =>
'DESC',
'ID' =>
'DESC'])
678 $this->prevId = (int)(
$result[
'ID'] ?? 0);
680 return $this->prevId;
701 return $this->reactions;
722 foreach ($diskFileIds as $fileId)
734 if (!empty($diskFileIds))
766 if ($this->
getParams()->isSet(Params::REPLY_ID))
768 $ids[] = $this->
getParams()->get(Params::REPLY_ID)->getValue();
779 new Im\
V2\
Link\Reminder\ReminderPopupItem(),
783 if (!in_array(
Im\
V2\
Entity\
File\FilePopupItem::class, $excludedList,
true))
798 if (!$this->messageId)
837 return $this->authorId;
852 $this->chatId = $value;
864 return $this->chatId;
877 $this->
setRegistry($this->chat->getMessageRegistry());
893 $value = \trim(\str_replace([
'[BR]',
'[br]',
'#BR#'],
"\n", $value));
895 if (\mb_strlen($value) > self::MESSAGE_MAX_LENGTH + 6)
897 $value = \mb_substr($value, 0, self::MESSAGE_MAX_LENGTH).
' (...)';
901 $this->message = $value ??
'';
902 unset($this->parsedMessage, $this->formattedMessage, $this->url);
915 return $this->parsedMessage;
920 if (isset($this->formattedMessage))
922 return $this->formattedMessage;
925 $this->formattedMessage =
927 ? Loc::getMessage(
'IM_MESSAGE_DELETED')
931 return $this->formattedMessage;
940 $quoteDelimiter =
'------------------------------------------------------';
946 .
"{$userName} [{$date}] $contextTag\n"
952 return $quotedMessage;
958 $this->messageOut = $value ? trim($value) :
'';
964 if ($this->isMessageOutFilled)
966 return $this->messageOut;
971 return $this->messageOut;
976 if ($this->isMessageOutFilled)
978 return $this->messageOut;
983 $messageFiles = $this->
getFiles()->getMessageOut();
984 if (!empty($messageFiles))
993 $this->isMessageOutFilled =
true;
995 return $this->messageOut;
1006 if (!empty($value) && !($value instanceof
DateTime))
1015 $this->dateCreate = $value ?:
null;
1021 return $this->dateCreate;
1031 $this->emailTemplate = $value ?:
'';
1037 return $this->emailTemplate;
1044 $this->notifyType = $value;
1051 return $this->notifyType;
1056 return \IM_NOTIFY_MESSAGE;
1061 $this->notifyModule = $value;
1067 return $this->notifyModule;
1106 return $this->notifyEvent;
1116 $this->notifyTag = $value;
1122 return $this->notifyTag;
1127 $this->notifySubTag = $value;
1133 return $this->notifySubTag;
1138 $this->notifyTitle = $value ? mb_substr(trim($value), 0, 255) :
null;
1144 return $this->notifyTitle;
1149 $this->notifyLink = $value;
1155 return $this->notifyLink;
1160 if (is_string($value))
1164 $this->notifyButtons = $value;
1170 return $this->notifyButtons;
1175 return $value ? serialize($value) :
null;
1180 return $value ? unserialize($value, [
'allowed_classes' =>
false]) :
null;
1185 $this->notifyRead = $value ?:
false;
1191 return $this->notifyRead;
1201 $this->notifyAnswer = $value ?:
false;
1207 return $this->notifyAnswer;
1212 $this->notifyFlash = $value;
1218 return $this->notifyFlash;
1223 $this->importId = $value;
1229 return $this->importId;
1249 return $this->pushMessage;
1265 return $this->pushParams;
1281 return $this->pushAppId;
1297 'field' =>
'messageId',
1298 'set' =>
'setMessageId',
1299 'get' =>
'getMessageId',
1302 'field' =>
'chatId',
1303 'set' =>
'setChatId',
1304 'get' =>
'getChatId',
1307 'field' =>
'authorId',
1308 'set' =>
'setAuthorId',
1309 'get' =>
'getAuthorId',
1310 'loadFilter' =>
'processChangeAuthorId',
1313 'field' =>
'message',
1314 'set' =>
'setMessage',
1315 'get' =>
'getMessage',
1318 'field' =>
'messageOut',
1319 'set' =>
'setMessageOut',
1320 'get' =>
'getMessageOut',
1321 'saveFilter' =>
'fillMessageOut',
1324 'field' =>
'dateCreate',
1325 'set' =>
'setDateCreate',
1326 'get' =>
'getDateCreate',
1327 'default' =>
'getDefaultDateCreate',
1331 'alias' =>
'DATE_CREATE',
1333 'EMAIL_TEMPLATE' => [
1334 'field' =>
'emailTemplate',
1335 'set' =>
'setEmailTemplate',
1336 'get' =>
'getEmailTemplate',
1339 'field' =>
'notifyType',
1340 'set' =>
'setNotifyType',
1341 'get' =>
'getNotifyType',
1342 'default' =>
'getDefaultNotifyType',
1344 'NOTIFY_MODULE' => [
1345 'field' =>
'notifyModule',
1346 'set' =>
'setNotifyModule',
1347 'get' =>
'getNotifyModule',
1348 'default' =>
'getDefaultNotifyModule',
1351 'field' =>
'notifyEvent',
1352 'set' =>
'setNotifyEvent',
1353 'get' =>
'getNotifyEvent',
1354 'default' =>
'getDefaultNotifyEvent',
1355 'loadFilter' =>
'processChangeNotifyEvent',
1358 'field' =>
'notifyTag',
1359 'set' =>
'setNotifyTag',
1360 'get' =>
'getNotifyTag',
1362 'NOTIFY_SUB_TAG' => [
1363 'field' =>
'notifySubTag',
1364 'set' =>
'setNotifySubTag',
1365 'get' =>
'getNotifySubTag',
1368 'field' =>
'notifyTitle',
1369 'set' =>
'setNotifyTitle',
1370 'get' =>
'getNotifyTitle',
1373 'set' =>
'setNotifyLink',
1374 'get' =>
'getNotifyLink',
1377 'alias' =>
'NOTIFY_TITLE',
1379 'NOTIFY_MESSAGE' => [
1380 'alias' =>
'MESSAGE',
1382 'NOTIFY_MESSAGE_OUT' => [
1383 'alias' =>
'MESSAGE_OUT',
1385 'NOTIFY_BUTTONS' => [
1386 'field' =>
'notifyButtons',
1387 'set' =>
'setNotifyButtons',
1388 'get' =>
'getNotifyButtons',
1389 'saveFilter' =>
'serializeNotifyButtons',
1390 'loadFilter' =>
'unserializeNotifyButtons',
1393 'field' =>
'notifyRead',
1394 'set' =>
'markNotifyRead',
1395 'get' =>
'isNotifyRead',
1396 'default' =>
'getDefaultNotifyRead',
1398 'NOTIFY_ANSWER' => [
1399 'set' =>
'markNotifyAnswer',
1400 'get' =>
'allowNotifyAnswer',
1403 'set' =>
'markNotifyFlash',
1404 'get' =>
'isNotifyFlash',
1406 'NOTIFY_ONLY_FLASH' => [
1407 'alias' =>
'NOTIFY_FLASH',
1410 'field' =>
'importId',
1411 'set' =>
'setImportId',
1412 'get' =>
'getImportId',
1415 'set' =>
'markAsSystem',
1416 'get' =>
'isSystem',
1419 'set' =>
'setParams',
1420 'get' =>
'getParams',
1423 'set' =>
'setAttach',
1424 'get' =>
'getAttach',
1427 'set' =>
'setFiles',
1428 'get' =>
'getFiles',
1431 'set' =>
'setKeyboard',
1432 'get' =>
'getKeyboard',
1448 'FILE_TEMPLATE_ID' => [
1449 'set' =>
'setFileUuid',
1450 'get' =>
'getFileUuid',
1453 'set' =>
'setPushMessage',
1454 'get' =>
'getPushMessage',
1457 'alias' =>
'PUSH_MESSAGE'
1460 'set' =>
'setPushParams',
1461 'get' =>
'getPushParams',
1464 'alias' =>
'PUSH_PARAMS'
1467 'set' =>
'setPushAppId',
1468 'get' =>
'getPushAppId',
1471 'alias' =>
'CHAT_ID',
1481 return MessageTable::class;
1506 $favoriteMessageService->setContext($this->context);
1508 return $favoriteMessageService->markMessageAsFavorite($this);
1514 $favoriteMessageService->setContext($this->context);
1516 return $favoriteMessageService->unmarkMessageAsFavorite($this);
1522 $pinService->setContext($this->context);
1524 return $pinService->pinMessage($this);
1530 $pinService->setContext($this->context);
1532 return $pinService->unpinMessage($this);
1540 $this->
getChat()->getDialogId(),
1542 $this->getContext()->getUserId(),
1546 if (!$isSuccessMark)
1557 $reminderService->setContext($this->context);
1559 return $reminderService->addMessageToReminders($this, $dateRemind);
1566 $hasAttach = mb_strpos($previewMessage,
'[ATTACH=') !==
false;
1576 foreach (
$files as $file)
1579 $previewMessage .=
" [{$file->getDiskFile()->getName()}]";
1583 $previewMessage = preg_replace(
1584 "/\[ATTACH=([0-9]{1,})\]/i",
1585 " [".Loc::getMessage(
'IM_MESSAGE_ATTACH').
"] ",
1588 $previewMessage = preg_replace(
1589 '#\-{54}.+?\-{54}#s',
1590 " [".Loc::getMessage(
'IM_MESSAGE_QUOTE').
"] ",
1591 str_replace([
"#BR#"], [
" "], $previewMessage)
1593 $previewMessage = preg_replace(
1594 '/^(>>(.*)(\n)?)/mi',
1595 " [".Loc::getMessage(
'IM_MESSAGE_QUOTE').
"] ",
1596 str_replace([
"#BR#"], [
" "], $previewMessage)
1599 if (!$hasFiles && !$hasAttach)
1601 if ($this->
getParams()->isSet(Params::ATTACH))
1603 $previewMessage .=
" [".Loc::getMessage(
'IM_MESSAGE_ATTACH').
"]";
1607 if ($messageSize !==
null)
1609 $dots = mb_strlen($previewMessage) >= $messageSize ?
'...' :
'';
1610 $previewMessage = mb_substr($previewMessage, 0, $messageSize - 1) . $dots;
1613 return $previewMessage;
1625 foreach ($this->
getFiles() as $file)
1627 $files[] = [
'name' => $file->getDiskFile()->getName()];
1633 if ($messageSize !==
null)
1635 $dots = mb_strlen(
$text) >= $messageSize ?
'...' :
'';
1636 $text = mb_substr(
$text, 0, $messageSize - 1) . $dots;
1644 $userId ??= $this->getContext()->getUserId();
1648 if (!$this->
getId())
1654 if (!$chatAccess->isSuccess())
1666 return $result->addError(
new MessageError(MessageError::MESSAGE_ACCESS_DENIED_BY_TARIFF));
1686 if ($this->
getParams()->isSet(Params::FORWARD_USER_ID))
1688 $userId = (int)$this->
getParams()->get(Params::FORWARD_USER_ID)->getValue();
1697 if (isset($this->userIdsFromMention))
1699 return $this->userIdsFromMention;
1702 $this->userIdsFromMention = [];
1711 return $this->userIdsFromMention;
1718 return $this->
getChat()->filterUsersToMention($mentionedUsers);
1725 return $this->
getChat()->filterUsersToMentionAnchor($mentionedUsers);
1737 $params->get(Params::ATTACH)->addValue(
$url->getUrlAttach());
1743 $params->get(Params::IS_DELETED)->setValue(
true);
1753 && !$this->
getParams()->isSet(Params::FILE_ID)
1754 && !$this->
getParams()->isSet(Params::KEYBOARD)
1755 && !$this->
getParams()->isSet(Params::ATTACH)
1765 $userIds =
$chat->getRelations()->getUserIds();
1766 $implodeUserIds = implode(
':', $userIds);
1768 return "{$implodeUserIds}/{$this->getMessageId()}";
1771 return "{$chat->getDialogId()}/{$this->getMessageId()}";
1776 return "#{$this->getContextId()}";
1781 return $this->
getParams()->isSet(Params::FORWARD_ID)
1782 && $this->
getParams()->isSet(Params::FORWARD_CONTEXT_ID)
1793 $contextId = $this->
getParams()->get(Params::FORWARD_CONTEXT_ID)->getValue();
1797 'userId' => (int)$this->
getParams()->get(Params::FORWARD_USER_ID)->getValue(),
1798 'chatTitle' => $this->
getParams()->get(Params::FORWARD_CHAT_TITLE)->getValue() ??
null,
1811 $messageShortInfo =
$option[
'MESSAGE_SHORT_INFO'] ??
false;
1813 'id' => $this->
getId(),
1824 $rest = $onlyCommonRest;
1826 if (!isset(
$option[
'MESSAGE_ONLY_COMMON_FIELDS']) ||
$option[
'MESSAGE_ONLY_COMMON_FIELDS'] ===
false)
1828 $rest = array_merge($onlyCommonRest, [
1846 foreach ($urls as
$url)
1848 $metadata = UrlPreview::getMetadataByUrl(
$url,
true,
false);
1849 if ($metadata !==
false)
1852 if ($urlItem->getId())
1854 $this->
getParams()->get(Params::URL_ID)->addValue($urlItem->getId());
1855 $this->
getParams()->get(Params::ATTACH)->addValue($urlItem->getUrlAttach());
1858 if ($urlItem->isStaticUrl())
1860 $staticUrl = [
$url];
1861 if (mb_substr(
$url, -1) ==
'/')
1863 $staticUrl[] = mb_substr(
$url, 0, -1);
1865 $checkMessage = trim(str_replace($staticUrl,
'', $this->
getMessage()));
1867 if (empty($checkMessage))
1869 $this->
getParams()->get(Params::URL_ONLY)->setValue(
true);
1887 foreach ($dateConvertResult as $row)
1889 $this->
getParams()->get(Params::DATE_TEXT)->addValue($row->getText());
1890 $this->
getParams()->get(Params::DATE_TS)->addValue($row->getDate()->getTimestamp());
1907 $this->
getParams()->get(Params::LARGE_FONT)->setValue(
true);
1921 if (
$config->generateUrlPreview())
1926 $dateText[] =
$result->getText();
1927 $dateTs[] =
$result->getDate()->getTimestamp();
1933 if (
$url->getId() !==
null)
1935 $urlIds[] =
$url->getId();
1938 $isUrlOnly = $this->isUrlOnly(
$url);
1941 if (
$config->keepConnectorSilence())
1943 $this->
getParams()->get(Params::STYLE_CLASS)->setValue(
'bx-messenger-content-item-system');
1946 $this->
getParams()->get(Params::COMPONENT_ID)->setValue(
'HiddenMessage');
1949 $this->
getParams()->get(Params::DATE_TEXT)->setValue($dateText);
1950 $this->
getParams()->get(Params::DATE_TS)->setValue($dateTs);
1951 $this->
getParams()->get(Params::URL_ID)->setValue($urlIds);
1952 $this->
getParams()->get(Params::URL_ONLY)->setValue($isUrlOnly);
1969 $roles[] = $messageRole;
1976 $engineCode =
$chat->getEngineCode() ?:
null;
1977 $engineName = isset($engineCode) ? $engineManager->getEngineNameByCode($engineCode) :
null;
1979 $chatRole = $roleManager->getMainRole($this->
getChatId());
1980 $roles[] = $chatRole;
1982 'dialogId' => $this->
getChat()->getDialogId(),
1983 'role' => $chatRole,
1984 'engine' => $engineCode,
1988 isset($engineCode, $engineName)
1989 ? [[
'code' => $engineCode,
'name' => $engineName]]
1995 'chats' => $chatData,
1996 'messages' => $messageRole ? [[
'id' => $this->
getId(),
'role' => $messageRole]] :
null,
1997 'roles' => $roleManager->getRoles($roles),
1998 'engines' => $engineData,
2014 return $this->
getParams()->isSet(Params::COPILOT_ROLE);
2019 if (\
Bitrix\
Main\Loader::includeModule(
'imbot')
2023 return RoleManager::getDefaultRoleCode();
2036 if (!
$url->isStaticUrl())
2041 $messageWithoutUrl = str_replace(
$url->getUrl(),
'', $this->getMessage() ??
'');
2043 return trim($messageWithoutUrl) ===
'';
2064 Loc::loadMessages(__FILE__);
2070 $service->setMode(DeletionMode::Soft);
2077 $service->setMode(DeletionMode::Complete);
2087 return $result->setResult($this);
2090 return $result->setResult(
null)->setFiltered(
true);
2108 return $this->
getAuthorId() ?: $this->getContext()->getUserId();
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static validate(string $uuid)
const EVENT_PRIVATE_SYSTEM
static unread($dialogId, $unread, $userId=null, ?int $markedId=null, ?string $itemTypes=null)
static parse($text, $params=Array())
static filterUserBbCodes(string $text, int $currentUserId)
static getDateConverterParams($text)
static isOnlyEmoji($text)
static initByDiskFilesIds(array $diskFilesIds, ?int $chatId=null)
static removeDiskBbCodesFromText(string $text)
static getDiskFileIdsFromBbCodesInText(string $text)
static initByPreviewUrlId(int $previewUrlId, bool $withHtml=true)
static initByMetadata(array $metadata)
static getUrlsFromText(?string $text)
static getByMessage(Message $message)
static getInstance(?int $id)
static getByMessageAndUserId(Message $message, int $userId)
static getInstanceByMessage(Message $message)
static getChatTypeByContextId(string $contextId)
static getByMessageId(int $messageId)
markAsImportant(?bool $isImportant=true)
static getRestEntityName()
setEmailTemplate(?string $value)
setPrimaryId(int $primaryId)
markNotifyRead(?bool $value)
setNotifyType(?int $value)
addParam(string $name, mixed $value)
toRestFormat(array $option=[])
setMessage(?string $value)
setFileUuid(?string $uuid)
setNotifyModule(?string $value)
getUserIdsToSendMentions()
autocompleteParams(Im\V2\Message\Send\SendingConfig $config)
getQuotedMessage(?int $messageSize=null)
setPushAppId(?string $message)
setNotifyLink(?string $value)
setPushParams(?array $params)
checkAccess(?int $userId=null)
getPopupData(array $excludedList=[])
__construct($source=null)
getPreviewMessage(?int $messageSize=200)
processChangeAuthorId(int $authorId)
setUnread(bool $isUnread)
getParams(bool $disallowLazyLoad=false)
addToReminder(DateTime $dateRemind)
getAdditionalMessageIds()
getUserIdsToSendMentionAnchors()
setImportantFor(array $importantFor)
fillFiles(FileCollection $files)
setNotifyTag(?string $value)
getForPush(?int $messageSize=200)
setMessageId(int $messageId)
markNotifyAnswer(?bool $value)
Im V2 Message Reaction ReactionMessage $reactions
serializeNotifyButtons($value)
filterByDate(DateTime $date)
markNotifyFlash(?bool $value)
setNotifyEvent(?string $notifyEvent)
setNotifySubTag(?string $value)
setMessageOut(?string $value)
setViewed(bool $isViewed)
setForwardUuid(?string $forwardUuid)
setReactions(Im\V2\Message\Reaction\ReactionMessage $reactions)
setPushMessage(?string $message)
getEnrichedParams(bool $withUrl=true)
setNotifyTitle(?string $value)
array $userIdsFromMention
addFile(Im\V2\Entity\File\FileItem $file)
unserializeNotifyButtons($value)
setAuthorId(int $authorId)
static mirrorDataEntityFields()
processChangeNotifyEvent(?string $notifyEvent)
static getRowById($id, array $parameters=[])
static SaveFromLocalDisk($chatId, $fileId, bool $symlink=false, ?int $userId=null)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
setRegistry(Registry $registry)
FormatDate($format="", $timestamp=false, $now=false, ?string $languageId=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']