18 $default = self::GetDefault();
20 $arToDelete =
array();
27 "=PARAM_NAME" =>
$key,
32 $arToInsert =
array();
35 $name = mb_substr(trim($k1), 0, 100);
38 if(is_object($v1) && $v1 instanceof \
Bitrix\Im\Bot\Keyboard)
44 if(is_object($v1) && $v1 instanceof \
Bitrix\Im\Bot\ContextMenu)
56 if(is_object($v1) && $v1 instanceof \
Bitrix\Main\Type\DateTime)
58 $v1 =
array($v1->getTimestamp());
62 if(is_array($v1) && \
Bitrix\Main\Type\Collection::isAssociative($v1))
82 "=PARAM_NAME" =>
$name,
92 if($value <>
'' && mb_strlen($value) < 60000)
97 "PARAM_NAME" =>
$name,
98 "PARAM_VALUE" => isset($v2[
'ID'])? $v2[
'ID'] : time(),
99 "PARAM_JSON" => $value,
105 if(is_object($v2) && ($v2 instanceof \
Bitrix\Im\Bot\Keyboard || $v2 instanceof \
Bitrix\Im\Bot\ContextMenu))
107 $value = $v2->getJson();
113 "PARAM_NAME" =>
$name,
115 "PARAM_JSON" => $value,
123 $value = $v2->GetJSON();
124 $valueArray = $v2->GetArray();
135 "PARAM_NAME" =>
$name,
137 "PARAM_JSON" => $value,
143 $value = mb_substr(trim($v2), 0, 100);
149 "PARAM_NAME" =>
$name,
150 "PARAM_VALUE" => $value,
161 if(!empty($arToInsert))
163 $messageParameters = IM\Model\MessageParamTable::getList(
array(
164 'select' =>
array(
'ID',
'PARAM_NAME',
'PARAM_VALUE',
'PARAM_JSON'),
169 while(
$ar = $messageParameters->fetch())
171 if (
$ar[
'PARAM_JSON'] <>
'')
173 $key = md5(
$ar[
"PARAM_NAME"].
$ar[
"PARAM_JSON"]);
177 $key = md5(
$ar[
"PARAM_NAME"].
$ar[
"PARAM_VALUE"]);
179 if(array_key_exists(
$key, $arToInsert))
181 unset($arToInsert[
$key]);
185 IM\Model\MessageParamTable::delete(
$ar[
'ID']);
190 foreach($arToInsert as $parameterInfo)
192 if (in_array($parameterInfo[
"PARAM_NAME"], Array(
'KEYBOARD',
'MENU',
'ATTACH',
'NAME',
'IMOL_VOTE_TEXT',
'IMOL_VOTE_LIKE',
'IMOL_VOTE_DISLIKE')))
197 if (isset($parameterInfo[
'PARAM_VALUE']) && mb_strlen($parameterInfo[
'PARAM_VALUE']) > 100)
199 $parameterInfo[
'PARAM_VALUE'] = mb_substr($parameterInfo[
'PARAM_VALUE'], 0, 97) .
'...';
202 IM\Model\MessageParamTable::add($parameterInfo);
205 foreach($arToDelete as
$filter)
207 $messageParameters = IM\Model\MessageParamTable::getList(
array(
208 'select' =>
array(
'ID'),
211 while ($parameterInfo = $messageParameters->fetch())
213 IM\Model\MessageParamTable::delete($parameterInfo[
'ID']);
224 if (!CModule::IncludeModule(
'pull'))
232 C.PARENT_ID as CHAT_PARENT_ID,
233 C.TYPE as MESSAGE_TYPE,
235 C.ENTITY_TYPE as CHAT_ENTITY_TYPE,
236 C.ENTITY_ID as CHAT_ENTITY_ID,
237 C.LAST_MESSAGE_ID as CHAT_LAST_MESSAGE_ID
238 FROM b_im_message M INNER JOIN b_im_chat C ON M.CHAT_ID = C.ID
239 WHERE M.ID = ".$messageId.
"
241 $messageData =
$DB->Query($sql)->Fetch();
245 $arPullMessage = Array(
250 $relations = CIMMessenger::GetRelationById(
$messageId);
254 $arFields[
'FROM_USER_ID'] = $messageData[
'AUTHOR_ID'];
255 foreach ($relations as $rel)
257 if ($rel[
'USER_ID'] != $messageData[
'AUTHOR_ID'])
258 $arFields[
'TO_USER_ID'] = $rel[
'USER_ID'];
261 $arPullMessage[
'fromUserId'] = (int)
$arFields[
'FROM_USER_ID'];
262 $arPullMessage[
'toUserId'] = (int)
$arFields[
'TO_USER_ID'];
263 $arPullMessage[
'chatId'] = (int)$messageData[
'CHAT_ID'];
267 $arPullMessage[
'chatId'] = (int)$messageData[
'CHAT_ID'];
268 $arPullMessage[
'senderId'] = (int)$messageData[
'AUTHOR_ID'];
270 if ($messageData[
'CHAT_ENTITY_TYPE'] ==
'LINES')
272 foreach ($relations as $rel)
274 if ($rel[
"EXTERNAL_AUTH_ID"] ==
'imconnector')
276 unset($relations[$rel[
"USER_ID"]]);
286 if (is_array($sendExtraParams) && !empty($sendExtraParams))
289 foreach($sendExtraParams as
$key)
299 $arPullMessage[
'params'] = CIMMessenger::PrepareParamsForPull($arMessages[
$messageId][
'params']);
302 'command' =>
'messageParamsUpdate',
303 'params' => $arPullMessage,
307 if ($messageData[
'MESSAGE_TYPE'] === IM\V2\Chat::IM_TYPE_COMMENT)
309 CPullWatch::AddToStack(
'IM_PUBLIC_COMMENT_'.$messageData[
'CHAT_PARENT_ID'], $pull);
316 if (CIMMessenger::needToSendPublicPull($messageData[
'MESSAGE_TYPE']))
318 CPullWatch::AddToStack(
'IM_PUBLIC_'.$messageData[
'CHAT_ID'], $pull);
320 if ($messageData[
'MESSAGE_TYPE'] === IM\V2\Chat::IM_TYPE_OPEN_CHANNEL && (
int)
$messageId === (
int)$messageData[
'CHAT_LAST_MESSAGE_ID'])
322 IM\V2\Chat\OpenChannelChat::sendSharedPull($pull);
334 $messageParameters = IM\Model\MessageParamTable::getList(
array(
335 'select' =>
array(
'ID',
'PARAM_NAME'),
340 while ($parameterInfo = $messageParameters->fetch())
342 IM\Model\MessageParamTable::delete($parameterInfo[
'ID']);
350 if ($paramName ==
'' || $paramValue ==
'')
355 $messageParameters = IM\Model\MessageParamTable::getList(
array(
356 'select' =>
array(
'ID',
'MESSAGE_ID'),
358 '=PARAM_NAME' => $paramName,
359 '=PARAM_VALUE' => $paramValue,
362 while ($parameterInfo = $messageParameters->fetch())
364 IM\Model\MessageParamTable::delete($parameterInfo[
'ID']);
370 public static function Get(
$messageId, $paramName =
false, $withDefault =
false)
401 if ($paramName && $paramName <>
'')
403 $filter[
'=PARAM_NAME'] = $paramName;
405 $messageParameters = IM\Model\MessageParamTable::getList(
array(
406 'select' =>
array(
'ID',
'MESSAGE_ID',
'PARAM_NAME',
'PARAM_VALUE',
'PARAM_JSON'),
409 while(
$ar = $messageParameters->fetch())
411 if (in_array(
$ar[
"PARAM_NAME"], Array(
'KEYBOARD',
'MENU',
'ATTACH',
'NAME',
'IMOL_VOTE_TEXT',
'IMOL_VOTE_LIKE',
'IMOL_VOTE_DISLIKE',
'IMOL_COMMENT_HEAD')))
416 if (
$ar[
"PARAM_JSON"] <>
'')
422 catch (\
Bitrix\Main\SystemException $e)
428 $value =
$ar[
"PARAM_VALUE"];
430 if (in_array(
$ar[
"PARAM_NAME"], Array(
'KEYBOARD',
'MENU',
'COMPONENT_PARAMS')))
463 if ($paramName ==
'' || $paramValue ==
'')
468 '=PARAM_NAME' => $paramName,
469 '=PARAM_VALUE' => $paramValue,
473 $filter[
'=MESSAGE.CHAT_ID'] = $chatId;
476 $messageParameters = IM\Model\MessageParamTable::getList(
array(
477 'select' =>
array(
'MESSAGE_ID'),
480 while(
$ar = $messageParameters->fetch())
492 $arDefault = self::GetDefault();
493 foreach($values as
$key => $value)
495 if (in_array(
$key, Array(
'IS_ERROR',
'IS_DELIVERED',
'IS_DELETED',
'BETA',
'IS_EDITED',
'CAN_ANSWER',
'IMOL_QUOTE_MSG',
'SENDING',
'URL_ONLY',
'LARGE_FONT',
'CRM_FORM_FILLED')))
497 $arValues[
$key] = in_array($value[0], Array(
'Y',
'N'))? $value[0]: $arDefault[
$key];
499 else if (in_array(
$key, Array(
'KEYBOARD_UID')))
503 else if (in_array(
$key, Array(
'CALL_ID',
'CHAT_ID',
'CHAT_MESSAGE',
'IMOL_VOTE_SID',
'IMOL_VOTE_USER',
'IMOL_VOTE_HEAD',
'SENDING_TS',
'IMOL_SID')))
507 else if (in_array(
$key, Array(
'CHAT_LAST_DATE')))
509 if (is_object($value) && $value instanceof \
Bitrix\Main\Type\DateTime)
513 else if (is_object($value[0]) && $value[0] instanceof \
Bitrix\Main\Type\DateTime)
522 else if (
$key ==
'DATE_TEXT')
524 if (is_array($value) && !empty($value))
526 foreach ($value as
$k => $v)
531 else if (!is_array($value))
540 else if (
$key ==
'CHAT_USER' ||
$key ==
'DATE_TS' ||
$key ==
'FILE_ID' ||
$key ==
'LIKE' ||
$key ==
'FAVORITE' ||
$key ==
'KEYBOARD_ACTION' ||
$key ==
'URL_ID' ||
$key ==
'LINK_ACTIVE' ||
$key ==
'USERS')
542 if (is_array($value) && !empty($value))
544 foreach ($value as
$k => $v)
549 else if (!is_array($value) && intval($value) > 0)
558 else if (
$key ==
'CONNECTOR_MID')
560 if (is_array($value) && !empty($value))
562 foreach ($value as
$k => $v)
567 else if (!is_array($value) && $value <>
'')
576 else if (
$key ==
'NOTIFY')
582 else if (is_array($value))
584 if (empty($value) ||
count($value) === 1 && $value[0] ===
'N')
590 foreach ($value as
$k => $v)
601 else if (
$key ==
'ATTACH')
605 $arValues[
$key] = CIMMessageParamAttach::PrepareAttach($value);
614 $key ==
'COMPONENT_ID' ||
616 $key ==
'IMOL_VOTE' ||
617 $key ==
'IMOL_VOTE_TEXT' ||
618 $key ==
'IMOL_VOTE_LIKE' ||
619 $key ==
'IMOL_VOTE_DISLIKE' ||
620 $key ==
'IMOL_FORM' ||
621 $key ==
'IMOL_COMMENT_HEAD' ||
622 $key ==
'IMOL_DATE_CLOSE_VOTE' ||
623 $key ==
'IMOL_TIME_LIMIT_VOTE' ||
624 $key ==
'CRM_FORM_ID' ||
625 $key ==
'CRM_FORM_SEC'
630 else if (
$key ==
'CONNECTOR_MID')
634 else if (
$key ==
'NAME')
638 else if (
$key ==
'USER_ID')
642 else if (
$key ==
'AVATAR')
646 $arValues[
$key] = CIMChat::GetAvatarImage($value[0], 200,
false);
653 else if (isset($arDefault[
$key]))
661 foreach($arDefault as
$key => $value)
671 foreach($arDefault as
$key => $value)
687 'COMPONENT_ID' =>
'',
688 'COMPONENT_PARAMS' => [],
702 'CONNECTOR_MID' => [],
704 'IS_DELIVERED' =>
'Y',
720 'CHAT_LAST_DATE' =>
'',
725 'IMOL_VOTE_TEXT' =>
'',
726 'IMOL_VOTE_LIKE' =>
'',
727 'IMOL_VOTE_DISLIKE' =>
'',
728 'IMOL_VOTE_SID' =>
'',
729 'IMOL_VOTE_USER' =>
'',
730 'IMOL_VOTE_HEAD' =>
'',
731 'IMOL_COMMENT_HEAD' =>
'',
732 'IMOL_QUOTE_MSG' =>
'N',
735 'IMOL_DATE_CLOSE_VOTE' =>
'',
736 'IMOL_TIME_LIMIT_VOTE' =>
'',
739 'CRM_FORM_SEC' =>
'',
740 'CRM_FORM_FILLED' =>
'N',
741 'COPILOT_PROMPT_CODE' =>
null,
760 private $result = Array();
764 $this->result[
'ID'] = $id? $id: time();
765 $this->result[
'BLOCKS'] = Array();
766 $this->result[
'DESCRIPTION'] =
'';
775 $this->result[
'DESCRIPTION'] = trim(
$text);
780 if ($color == self::TRANSPARENT)
782 $this->result[
'COLOR'] =
'transparent';
784 else if ($color != self::CHAT)
786 if (!$color || !preg_match(
'/^#([a-fA-F0-9]){3}(([a-fA-F0-9]){3})?\b$/D', $color))
790 $this->result[
'COLOR'] = $color;
796 $this->result[
'COLOR_TOKEN'] = IM\V2\Message\Color\Color::validateColor($color);
805 $add[
'NAME'] = self::removeNewLine(
$params[
'NAME']);
806 $add[
'AVATAR_TYPE'] =
'USER';
808 if (isset(
$params[
'NETWORK_ID']))
812 else if (isset(
$params[
'USER_ID']) && intval(
$params[
'USER_ID']) > 0)
814 $add[
'USER_ID'] = intval(
$params[
'USER_ID']);
816 else if (isset(
$params[
'CHAT_ID']) && intval(
$params[
'CHAT_ID']) > 0)
818 $add[
'CHAT_ID'] = intval(
$params[
'CHAT_ID']);
819 $add[
'AVATAR_TYPE'] =
'CHAT';
821 else if (isset(
$params[
'BOT_ID']) && intval(
$params[
'BOT_ID']) > 0)
823 $add[
'BOT_ID'] = intval(
$params[
'BOT_ID']);
824 $add[
'AVATAR_TYPE'] =
'BOT';
826 else if (isset(
$params[
'LINK']) && preg_match(
'#^(?:/|https?://)#',
$params[
'LINK']))
828 $add[
'LINK'] =
$params[
'LINK'];
831 if (isset(
$params[
'AVATAR']) && preg_match(
'#^(?:/|https?://)#',
$params[
'AVATAR']))
833 $add[
'AVATAR'] =
$params[
'AVATAR'];
836 if (isset(
$params[
'AVATAR_TYPE']) && in_array(
$params[
'AVATAR_TYPE'], Array(
'CHAT',
'USER',
'BOT')))
838 $add[
'AVATAR_TYPE'] =
$params[
'AVATAR_TYPE'];
841 $this->result[
'BLOCKS'][][
'USER'] = Array($add);
848 $params[
'AVATAR_TYPE'] =
'CHAT';
854 $params[
'AVATAR_TYPE'] =
'BOT';
868 $result[
'USER_ID'] = intval(
$params[
'USER_ID']);
872 $result[
'CHAT_ID'] = intval(
$params[
'CHAT_ID']);
874 else if (!isset(
$params[
'LINK']) || isset(
$params[
'LINK']) && !preg_match(
'#^(?:/|https?://)#',
$params[
'LINK']))
881 $result[
'NAME'] = self::removeNewLine(trim(
$params[
'NAME']));
885 $result[
'LINK'] =
$params[
'LINK'];
890 $result[
'DESC'] =
$params[
'DESC'];
895 $result[
'HTML'] =
$params[
'HTML'];
897 else if (isset(
$params[
'PREVIEW']) && preg_match(
'#^(?:/|https?://)#',
$params[
'PREVIEW']))
899 $result[
'PREVIEW'] =
$params[
'PREVIEW'];
902 $result[
'WIDTH'] = intval(
$params[
'WIDTH']);
906 $result[
'HEIGHT'] = intval(
$params[
'HEIGHT']);
910 $this->result[
'BLOCKS'][][
'LINK'] = Array($result);
925 $add[
'USER_ID'] = intval(
$params[
'USER_ID']);
929 $add[
'CHAT_ID'] = intval(
$params[
'CHAT_ID']);
931 else if (!isset(
$params[
'LINK']) || isset(
$params[
'LINK']) && !preg_match(
'#^(?:/|https?://)#',
$params[
'LINK']))
938 $add[
'NAME'] = self::removeNewLine(trim(
$params[
'NAME']));
942 $add[
'LINK'] =
$params[
'LINK'];
947 $add[
'DESC'] = self::removeNewLine(trim(
$params[
'DESC']));
952 $add[
'HTML'] = self::removeNewLine(trim(
$params[
'HTML']));
955 if (isset(
$params[
'PREVIEW']) && preg_match(
'#^(?:/|https?://)#',
$params[
'PREVIEW']))
957 $add[
'PREVIEW'] =
$params[
'PREVIEW'];
958 $add[
'PREVIEW_SIZE'] = [
959 'HEIGHT' =>
$params[
'PREVIEW_SIZE'][
'HEIGHT'] ?? 0,
960 'WIDTH' =>
$params[
'PREVIEW_SIZE'][
'WIDTH'] ?? 0,
963 else if (isset(
$params[
'EXTRA_IMAGE']) && preg_match(
'#^(?:/|https?://)#',
$params[
'EXTRA_IMAGE']))
965 $add[
'EXTRA_IMAGE'] =
$params[
'EXTRA_IMAGE'];
968 $this->result[
'BLOCKS'][][
'RICH_LINK'] = Array($add);
979 $this->result[
'BLOCKS'][][
'HTML'] = trim($html);
994 $this->result[
'DESCRIPTION'] =
$message;
996 $this->result[
'BLOCKS'][][
'MESSAGE'] =
$message;
1009 if ($grid[
'DISPLAY'] !=
'LINE')
1012 !isset($grid[
'NAME']) && !isset($grid[
'VALUE'])
1013 || trim($grid[
'NAME']) ==
'' && trim($grid[
'VALUE']) ==
''
1020 if (isset($grid[
'DISPLAY']) && in_array($grid[
'DISPLAY'], Array(
'BLOCK',
'LINE',
'CARD',
'ROW',
'COLUMN',
'TABLE')))
1022 if ($grid[
'DISPLAY'] ==
'COLUMN')
1024 $grid[
'DISPLAY'] =
'ROW';
1026 if ($grid[
'DISPLAY'] ==
'CARD')
1028 $grid[
'DISPLAY'] =
'LINE';
1030 $result[
'DISPLAY'] = $grid[
'DISPLAY'];
1034 $result[
'DISPLAY'] =
'BLOCK';
1037 $result[
'NAME'] = self::removeNewLine(trim($grid[
'NAME']));
1039 $result[
'VALUE'] = str_replace([
'#BR#'],
'[BR]', trim($grid[
'VALUE']));
1041 if (isset($grid[
'COLOR']) && preg_match(
'/^#([a-fA-F0-9]){3}(([a-fA-F0-9]){3})?\b$/D', $grid[
'COLOR']))
1043 $result[
'COLOR'] = $grid[
'COLOR'];
1045 if (isset($grid[
'WIDTH']) && intval($grid[
'WIDTH']) > 0)
1047 $result[
'WIDTH'] = intval($grid[
'WIDTH']);
1049 if (isset($grid[
'HEIGHT']) && intval($grid[
'HEIGHT']) > 0)
1051 $result[
'HEIGHT'] = intval($grid[
'HEIGHT']);
1053 if (isset($grid[
'USER_ID']) && intval($grid[
'USER_ID']) > 0)
1055 $result[
'USER_ID'] = intval($grid[
'USER_ID']);
1057 if (isset($grid[
'CHAT_ID']) && intval($grid[
'CHAT_ID']) > 0)
1059 $result[
'CHAT_ID'] = intval($grid[
'CHAT_ID']);
1061 if (isset($grid[
'LINK']) && preg_match(
'#^(?:/|https?://)#', $grid[
'LINK']))
1063 $result[
'LINK'] = $grid[
'LINK'];
1066 $result[
'COLOR_TOKEN'] = IM\V2\Message\Color\Color::validateColor($grid[
'COLOR_TOKEN'] ??
null);
1073 $this->result[
'BLOCKS'][][
'GRID'] = $add;
1086 if (!isset($images[
'LINK']) || isset($images[
'LINK']) && !preg_match(
'#^(?:/|https?://)#', $images[
'LINK']))
1089 if (isset($images[
'NAME']) && trim($images[
'NAME']) <>
'')
1091 $result[
'NAME'] = (trim($images[
'NAME']));
1094 $result[
'LINK'] = $images[
'LINK'];
1096 if (isset($images[
'WIDTH']) && intval($images[
'WIDTH']) > 0)
1098 $result[
'WIDTH'] = intval($images[
'WIDTH']);
1100 if (isset($images[
'HEIGHT']) && intval($images[
'HEIGHT']) > 0)
1102 $result[
'HEIGHT'] = intval($images[
'HEIGHT']);
1105 if (isset($images[
'PREVIEW']) && preg_match(
'#^(?:/|https?://)#', $images[
'PREVIEW']))
1107 $result[
'PREVIEW'] = $images[
'PREVIEW'];
1116 $this->result[
'BLOCKS'][][
'IMAGE'] = $add;
1129 if (!isset($files[
'LINK']) || isset($files[
'LINK']) && !preg_match(
'#^(?:/|https?://)#', $files[
'LINK']))
1132 $result[
'LINK'] = $files[
'LINK'];
1134 if (isset($files[
'NAME']) && trim($files[
'NAME']) <>
'')
1136 $result[
'NAME'] = self::removeNewLine(trim($files[
'NAME']));
1139 if (isset($files[
'SIZE']) && intval($files[
'SIZE']) > 0)
1141 $result[
'SIZE'] = intval($files[
'SIZE']);
1150 $this->result[
'BLOCKS'][][
'FILE'] = $add;
1159 $add[
'SIZE'] = isset(
$params[
'SIZE'])? intval(
$params[
'SIZE']): 0;
1160 if ($add[
'SIZE'] <= 0)
1165 if (isset(
$params[
'COLOR']) && preg_match(
'/^#([a-fA-F0-9]){3}(([a-fA-F0-9]){3})?\b$/D',
$params[
'COLOR']))
1167 $add[
'COLOR'] =
$params[
'COLOR'];
1170 $this->result[
'BLOCKS'][][
'DELIMITER'] = $add;
1173 private static function decodeBbCode(
$message)
1175 return \Bitrix\Im\Text::parse(
$message, Array(
'SAFE' =>
'N'));
1178 private static function removeNewLine(
$text)
1186 if (is_string($array))
1188 $array = \CUtil::JsObjectToPhp($array,
true);
1190 if (!is_array($array))
1195 $array = IM\Text::convertSymbolsAfterJsonDecode($array);
1202 if (isset($array[
'BLOCKS']))
1204 $blocks = $array[
'BLOCKS'];
1206 if (isset($array[
'COLOR']))
1208 $color = $array[
'COLOR'];
1210 if (isset($array[
'DESCRIPTION']))
1214 if (isset($array[
'COLOR_TOKEN']))
1216 $colorToken = $array[
'COLOR_TOKEN'];
1225 $attach->SetColor($color);
1226 $attach->setColorToken($colorToken);
1228 foreach ($blocks as
$data)
1230 if (isset(
$data[
'USER']))
1232 if (is_array(
$data[
'USER']) && !\
Bitrix\Main\Type\Collection::isAssociative(
$data[
'USER']))
1234 foreach (
$data[
'USER'] as $dataItem)
1236 $attach->AddUser($dataItem);
1241 $attach->AddUser(
$data[
'USER']);
1244 else if (isset(
$data[
'LINK']))
1246 if (is_array(
$data[
'LINK']) && !\
Bitrix\Main\Type\Collection::isAssociative(
$data[
'LINK']))
1248 foreach (
$data[
'LINK'] as $dataItem)
1250 $attach->AddLink($dataItem);
1255 $attach->AddLink(
$data[
'LINK']);
1258 else if (isset(
$data[
'RICH_LINK']))
1260 if (is_array(
$data[
'RICH_LINK']) && !\
Bitrix\Main\Type\Collection::isAssociative(
$data[
'RICH_LINK']))
1262 foreach (
$data[
'RICH_LINK'] as $dataItem)
1264 $attach->AddRichLink($dataItem);
1269 $attach->AddRichLink(
$data[
'RICH_LINK']);
1272 else if (isset(
$data[
'MESSAGE']))
1274 if (is_array(
$data[
'MESSAGE']) && isset(
$data[
'MESSAGE'][
'TEXT']))
1276 $attach->AddMessage(
$data[
'MESSAGE'][
'TEXT'],
$data[
'MESSAGE'][
'AS_DESCRIPTION'] ===
'Y');
1280 $attach->AddMessage(
$data[
'MESSAGE']);
1283 else if (isset(
$data[
'GRID']))
1285 $attach->AddGrid(
$data[
'GRID']);
1287 else if (isset(
$data[
'IMAGE']))
1289 if (is_array(
$data[
'IMAGE']) && \
Bitrix\Main\Type\Collection::isAssociative(
$data[
'IMAGE']))
1293 $attach->AddImages(
$data[
'IMAGE']);
1295 else if (isset(
$data[
'FILE']))
1297 if (is_array(
$data[
'FILE']) && \
Bitrix\Main\Type\Collection::isAssociative(
$data[
'FILE']))
1301 $attach->AddFiles(
$data[
'FILE']);
1303 else if (isset(
$data[
'DELIMITER']))
1305 $attach->AddDelimiter(
$data[
'DELIMITER']);
1309 return $attach->IsEmpty()?
null: $attach;
1314 if (!is_array($attach))
1319 $isCollection =
true;
1320 if(\
Bitrix\Main\Type\Collection::isAssociative($attach))
1322 $isCollection =
false;
1323 $attach =
array($attach);
1326 foreach ($attach as $attachKey => &$attachBody)
1328 if (!is_array($attachBody))
1333 $findFirstMessage =
false;
1334 $attachBody[
'DESCRIPTION'] ??=
null;
1335 if ($attachBody[
'DESCRIPTION'] === self::FIRST_MESSAGE)
1337 $attachBody[
'DESCRIPTION'] =
'';
1338 $findFirstMessage =
true;
1341 if (isset($attachBody[
'BLOCKS']) && is_array($attachBody[
'BLOCKS']))
1343 foreach ($attachBody[
'BLOCKS'] as &$block)
1345 if (isset($block[
'HTML']))
1349 else if (isset($block[
'MESSAGE']))
1351 if ($findFirstMessage)
1353 $attachBody[
'DESCRIPTION'] = $block[
'MESSAGE'];
1354 $findFirstMessage =
false;
1361 return $isCollection? $attach: $attach[0];
1366 return empty($this->result[
'BLOCKS']);
1371 return $this->
GetJSON()?
true:
false;
1376 $this->result[
'ID'] = $id;
1382 return $this->result[
'ID'];
1393 return mb_strlen($result) < 60000? $result:
"";
1406 $attach = $attach->GetArray();
1409 array_walk_recursive($attach,
function($item,
$key) use(&$textNodes){
1410 if(in_array(
$key, self::TEXT_NODES_NAMES))
1412 $textNodes[] = $item;
1422 private $result =
false;
1423 private $message =
"";
1424 private $attach = Array();
1425 private $urlId = Array();
1426 private $staticUrl = Array();
1430 $this->message =
$text;
1433 foreach ($urls as
$url)
1435 $this->prepareUrlObjects(
$url);
1442 private function prepareUrlObjects(
$url)
1445 $linkParam = (
new IM\V2\Entity\Url\UrlItem(
$url))->getMetadata();
1446 if (empty($linkParam))
1456 $attach->SetDescription(\CIMMessageParamAttach::SKIP_MESSAGE);
1458 $this->attach[$linkParam[
'ID']] = $attach;
1459 $this->urlId[$linkParam[
'ID']] = $linkParam[
'ID'];
1461 if ($linkParam[
'TYPE'] == UrlPreview\UrlMetadataTable::TYPE_STATIC)
1463 $this->staticUrl[] =
$url;
1465 if (mb_substr(
$url, -1) ==
'/')
1467 $this->staticUrl[] = mb_substr(
$url, 0, -1);
1481 if (isset($param[
'URL_ID']))
1483 foreach ($param[
'URL_ID'] as $urlId)
1485 $urlId = intval($urlId);
1488 $arUrl[$urlId] = $urlId;
1497 if (!empty($arAttachUrl))
1501 if (isset($param[
'URL_ID']))
1503 foreach ($param[
'URL_ID'] as $urlId)
1505 if (isset($arAttachUrl[$urlId]))
1507 if (isset($arMessages[
$messageId][
'params']))
1509 $arMessages[
$messageId][
'params'][
'ATTACH'][] = $arAttachUrl[$urlId];
1513 $arMessages[
$messageId][
'PARAMS'][
'ATTACH'][] = $arAttachUrl[$urlId];
1527 $attachArray = Array();
1531 foreach ($id as
$key => $value)
1533 $id[
$key] = intval($value);
1538 $id =
array(intval($id));
1541 if (
$params = UrlPreview\UrlPreview::getMetadataAndHtmlByIds($id))
1543 foreach (
$params as $id => $linkParam)
1545 if ($attach = self::formatAttach($linkParam))
1547 $attachArray[$id] = $typeArray? $attach->GetArray(): $attach;
1552 return $attachArray;
1558 $typeLinkParam = $linkParam[
'TYPE'] ??
null;
1559 $extraImageLinkParam = $linkParam[
'EXTRA_IMAGE'] ??
null;
1561 if ($typeLinkParam == UrlPreview\UrlMetadataTable::TYPE_STATIC)
1563 if ($linkParam[
'EXTRA'][
'PEER_IP_PRIVATE'] && IM\User::getInstance()->isExtranet())
1567 if (intval($linkParam[
'IMAGE_ID']) > 0)
1569 $image = CFile::ResizeImageGet(
1570 $linkParam[
'IMAGE_ID'],
1571 array(
'width' => 450,
'height' => 120),
1577 $linkParam[
'IMAGE_ID'] = empty($image[
'src'])?
'': $image[
'src'];
1578 $linkParam[
'IMAGE_SIZE'][
'HEIGHT'] = $image[
'height'] ?? 0;
1579 $linkParam[
'IMAGE_SIZE'][
'WIDTH'] = $image[
'width'] ?? 0;
1581 else if ($linkParam[
'IMAGE'] <>
'')
1583 $linkParam[
'IMAGE_ID'] = $linkParam[
'IMAGE'];
1584 $linkParam[
'IMAGE_SIZE'][
'HEIGHT'] = $linkParam[
'EXTRA'][
'IMAGE_INFO'][
'HEIGHT'] ?? 0;
1585 $linkParam[
'IMAGE_SIZE'][
'WIDTH'] = $linkParam[
'EXTRA'][
'IMAGE_INFO'][
'WIDTH'] ?? 0;
1587 else if (!empty($linkParam[
'EXTRA'][
'IMAGES']))
1590 $linkParam[
'EXTRA_IMAGE'] = $linkParam[
'EXTRA'][
'IMAGES'][0];
1594 $linkParam[
'IMAGE_ID'] =
'';
1598 $attach->AddRichLink(Array(
1599 "NAME" => $linkParam[
'TITLE'],
1600 "DESC" => $linkParam[
'DESCRIPTION'],
1601 "LINK" => $linkParam[
'URL'],
1602 "PREVIEW" => $linkParam[
'IMAGE_ID'],
1603 "PREVIEW_SIZE" => $linkParam[
'IMAGE_SIZE'],
1604 "EXTRA_IMAGE" => $extraImageLinkParam,
1607 else if ($linkParam[
'TYPE'] == UrlPreview\UrlMetadataTable::TYPE_DYNAMIC)
1609 $attach = UrlPreview\UrlPreview::getImAttach($linkParam[
'URL'],
true);
1612 $attach->SetId($linkParam[
'ID']);
1618 private function isLinkOnly()
1621 foreach ($this->staticUrl as
$url)
1625 $message = trim($message);
1627 return empty($message);
1633 'RESULT' => $this->
result,
1634 'MESSAGE' => $this->message,
1635 'MESSAGE_IS_LINK' => $this->isLinkOnly(),
1636 'URL_ID' => array_values($this->urlId),
1637 'ATTACH' => array_values($this->attach),
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
static jsonEncode($array=[])
static encodeEmoji($text)
static convertHtmlToBbCode($html)
static decodeEmoji($text)
static getUrlsFromText(?string $text)
static createFromTimestamp($timestamp)
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
static formatAttach($linkParam)
static prepareShow($arMessages, $params)
static getAttachments($id, $typeArray=false)
__construct($id=null, $color=null)
static GetTextForIndex($attach)
AddMessage($message, $asDescription=false)
AddDelimiter($params=Array())
static PrepareAttach($attach)
static GetAttachByJson($array)
static DeleteAll($messageId)
static DeleteByParam($paramName, $paramValue)
static Get($messageId, $paramName=false, $withDefault=false)
static SendPull($messageId, $sendExtraParams=true)
static Set($messageId, $params=Array())
static GetMessageIdByParam($paramName, $paramValue, $chatId=null)
static PrepareValues($values, $withDefault=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
const BX_RESIZE_IMAGE_PROPORTIONAL
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
if(empty($signedUserToken)) $key
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']