3namespace Bitrix\Im\V2\Message\Send\Push;
7use Bitrix\Im\V2\Chat\CommentChat;
8use Bitrix\Im\V2\Message;
9use Bitrix\Main\Localization\Loc;
10use Bitrix\Main\Type\DateTime;
11use Bitrix\Main\Web\Uri;
23 $this->importantPush = $this->message->getChat()->getEntityType() ===
'ANNOUNCEMENT';
29 $userList = array_intersect($pushUserSend, $group[
'users']);
35 $pushParams = $group[
'event'];
38 if ($this->importantPush)
40 $pushParams[
'push'][
'important'] =
'Y';
43 $pushParams[
'skip_users'] = $pushUserSkip;
45 if ($this->message->getPushMessage())
47 $pushParams[
'push'][
'message'] = $this->message->getPushMessage();
48 $pushParams[
'push'][
'advanced_params'][
'senderMessage'] = $this->message->getPushMessage();
50 $pushParams[
'push'][
'advanced_params'][
'counter'] = $group[
'event'][
'params'][
'counter'];
52 \Bitrix\Pull\Push::add(
$userList, $pushParams);
57 if (!$this->config->sendPush())
63 if ($this->message->getPushMessage())
65 $preparedPush[
'push'][
'message'] = $this->message->getPushMessage();
66 $preparedPush[
'push'][
'advanced_params'][
'senderMessage'] = $this->message->getPushMessage();
69 $preparedPush[
'push'][
'advanced_params'][
'counter'] = $push[
'params'][
'counter'];
70 if (
$userId === $this->message->getAuthorId())
72 $preparedPush = array_merge_recursive($preparedPush, [
75 'advanced_params' => [
76 "notificationsToCancel" => [
'IM_MESS'],
78 'send_immediately' =>
'Y',
84 \Bitrix\Pull\Push::add(
$userId, $preparedPush);
89 $chat = $this->message->getChat();
102 $activeUserRelations = $this->message->getChat()->getRelationsForSendMessage();
104 foreach ($activeUserRelations as $relation)
106 if ($relation->getUserId() === $this->message->getAuthorId())
110 if ($relation->getNotifyBlock() && !$this->importantPush)
112 $pushUserSkip[] = $relation->getUserId();
113 $pushUserSend[] = $relation->getUserId();
115 elseif ($this->config->sendPush())
117 $pushUserSend[] = $relation->getUserId();
121 return [$pushUserSend, $pushUserSkip];
127 $pushText = $this->prepareMessageForPush(
$params[
'params']);
128 unset(
$params[
'params'][
'message'][
'text_push']);
131 $chatType =
$params[
'params'][
'chat'][
$params[
'params'][
'chatId']][
'type'];
132 $chatAvatar =
$params[
'params'][
'chat'][
$params[
'params'][
'chatId']][
'avatar'];
133 $chatTypeLetter =
$params[
'params'][
'chat'][
$params[
'params'][
'chatId']][
'message_type'];
136 if ((
$params[
'params'][
'system'] ??
null) ===
'Y' ||
$params[
'params'][
'message'][
'senderId'] <= 0)
145 if ($avatarUser && mb_strpos($avatarUser,
'http') !== 0)
153 $params[
'params'][
'message'][
'senderId'],
154 $params[
'params'][
'users'][
$params[
'params'][
'message'][
'senderId']]
156 &&
$params[
'params'][
'users'][
$params[
'params'][
'message'][
'senderId']]
160 $params[
'params'][
'message'][
'senderId'] =>
$params[
'params'][
'users'][
$params[
'params'][
'message'][
'senderId']]
165 $params[
'params'][
'users'] = [];
168 if ($chatAvatar ==
'/bitrix/js/im/images/blank.gif')
172 else if ($chatAvatar && mb_strpos($chatAvatar,
'http') !== 0)
179 array_walk_recursive(
$params,
function(&$item,
$key)
187 $item = date(
'c', $item->getTimestamp());
193 $result[
'push'][
'type'] = ($chatType ===
'open'?
'openChat': $chatType);
194 $result[
'push'][
'tag'] =
'IM_CHAT_'.intval(
$params[
'params'][
'chatId']);
195 $result[
'push'][
'sub_tag'] =
'IM_MESS';
196 $result[
'push'][
'app_id'] =
'Bitrix24';
198 $result[
'push'][
'advanced_params'] = [
199 'group' => $chatType ==
'lines'?
'im_lines_message':
'im_message',
200 'avatarUrl' => $chatAvatar? $chatAvatar: $avatarUser,
201 'senderName' => $chatTitle,
203 'attachmentSuffix' => $attachmentSuffix,
205 'data' => $this->prepareEventForPush(
$params[
'command'],
$params[
'params']),
208 'TAG' =>
'IM_CHAT_'.$params[
'params'][
'chatId'],
209 'CHAT_TYPE' => $chatTypeLetter? $chatTypeLetter:
'C',
210 'CATEGORY' =>
'ANSWER',
211 'URL' =>
SITE_DIR.
'mobile/ajax.php?mobile_action=im_answer',
213 'RECIPIENT_ID' =>
'chat'.$params[
'params'][
'chatId'],
214 'MESSAGE_ID' =>
$params[
'params'][
'message'][
'id']
224 $pushText = $this->prepareMessageForPush(
$params[
'params']);
225 unset(
$params[
'params'][
'message'][
'text_push']);
227 if (isset(
$params[
'params'][
'system']) &&
$params[
'params'][
'system'] ==
'Y')
236 if ($avatarUser && mb_strpos($avatarUser,
'http') !== 0)
242 if (
$params[
'params'][
'users'][
$params[
'params'][
'message'][
'senderId']])
245 $params[
'params'][
'message'][
'senderId'] =>
$params[
'params'][
'users'][
$params[
'params'][
'message'][
'senderId']]
250 $params[
'params'][
'users'] = [];
255 array_walk_recursive(
$params,
function(&$item,
$key)
263 $item = date(
'c', $item->getTimestamp());
270 $result[
'push'][
'type'] =
'message';
271 $result[
'push'][
'tag'] =
'IM_MESS_'.(int)
$params[
'params'][
'message'][
'senderId'];
272 $result[
'push'][
'sub_tag'] =
'IM_MESS';
273 $result[
'push'][
'app_id'] =
'Bitrix24';
274 $result[
'push'][
'message'] = $pushText;
275 $result[
'push'][
'advanced_params'] = [
276 'group' =>
'im_message',
277 'avatarUrl' => $avatarUser,
279 'senderMessage' => $pushText,
280 'attachmentSuffix' => $attachmentSuffix,
281 'data' => $this->prepareEventForPush(
$params[
'command'],
$params[
'params']),
284 'TAG' =>
'IM_MESS_'.$params[
'params'][
'message'][
'senderId'],
285 'CATEGORY' =>
'ANSWER',
286 'URL' =>
SITE_DIR.
'mobile/ajax.php?mobile_action=im_answer',
288 'RECIPIENT_ID' => (int)
$params[
'params'][
'message'][
'senderId'],
289 'MESSAGE_ID' =>
$params[
'params'][
'message'][
'id']
296 private function prepareMessageForPush(
array $message): string
298 Message::loadPhrases();
300 $messageText =
$message[
'message'][
'text'];
301 if (isset(
$message[
'message'][
'text_push']) &&
$message[
'message'][
'text_push'])
303 $messageText =
$message[
'message'][
'text_push'];
310 $codeIcon =
Text::getEmoji(
'code',
'['.Loc::getMessage(
'IM_MESSAGE_CODE').
']');
311 $quoteIcon =
Text::getEmoji(
'quote',
'['.Loc::getMessage(
'IM_MESSAGE_QUOTE').
']');
313 $messageText = str_replace(
"\n",
' ', $messageText);
314 $messageText = preg_replace(
"/\[CODE\](.*?)\[\/CODE\]/si",
' '.$codeIcon.
' ', $messageText);
315 $messageText = preg_replace(
"/\[s\].*?\[\/s\]/i",
'-', $messageText);
316 $messageText = preg_replace(
"/\[[bui]\](.*?)\[\/[bui]\]/i",
"$1", $messageText);
317 $messageText = preg_replace(
"/\\[url\\](.*?)\\[\\/url\\]/iu",
"$1", $messageText);
318 $messageText = preg_replace(
"/\\[url\\s*=\\s*((?:[^\\[\\]]++|\\[ (?: (?>[^\\[\\]]+) | (?:\\1) )* \\])+)\\s*\\](.*?)\\[\\/url\\]/ixsu",
"$2", $messageText);
319 $messageText = preg_replace_callback(
"/\[USER=([0-9]{1,})\]\[\/USER\]/i", [
'\Bitrix\Im\Text',
'modifyShortUserTag'], $messageText);
320 $messageText = preg_replace(
"/\[USER=([0-9]+)( REPLACE)?](.+?)\[\/USER]/i",
"$3", $messageText);
321 $messageText = preg_replace(
"/\[CHAT=([0-9]{1,})\](.*?)\[\/CHAT\]/i",
"$2", $messageText);
322 $messageText = preg_replace(
"/\[context=(chat\d+|\d+:\d+)\/(\d+)](.*?)\[\/context]/i",
"$3", $messageText);
323 $messageText = preg_replace_callback(
"/\[SEND(?:=(?:.+?))?\](?:.+?)?\[\/SEND]/i", [
'\Bitrix\Im\Text',
"modifySendPut"], $messageText);
324 $messageText = preg_replace_callback(
"/\[PUT(?:=(?:.+?))?\](?:.+?)?\[\/PUT]/i", [
'\Bitrix\Im\Text',
"modifySendPut"], $messageText);
325 $messageText = preg_replace(
"/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/i",
"$2", $messageText);
326 $messageText = preg_replace(
"/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/i",
"$2", $messageText);
327 $messageText = preg_replace_callback(
"/\[ICON\=([^\]]*)\]/i", [
'\Bitrix\Im\Text',
'modifyIcon'], $messageText);
328 $messageText = preg_replace_callback(
'/\[TIMESTAMP=(\d+) FORMAT=([^\]]*)\]/i', [Text::class,
'modifyTimestampCode'], $messageText);
329 $messageText = preg_replace(
'#\-{54}.+?\-{54}#s',
' '.$quoteIcon.
' ', str_replace(
'#BR#',
' ', $messageText));
330 $messageText = preg_replace(
'/^(>>(.*)(\n)?)/mi',
' '.$quoteIcon.
' ', str_replace(
'#BR#',
' ', $messageText));
331 $messageText = preg_replace(
"/\\[color\\s*=\\s*([^\\]]+)\\](.*?)\\[\\/color\\]/isu",
"$2", $messageText);
332 $messageText = preg_replace(
"/\\[size\\s*=\\s*([^\\]]+)\\](.*?)\\[\\/size\\]/isu",
"$2", $messageText);
334 return trim($messageText);
339 Message::loadPhrases();
341 $attachmentSuffix =
'';
342 $attach =
$message[
'message'][
'params'][
'ATTACH'] ??
null;
346 if (!empty($attach) && is_array($attach))
350 if (!$attachmentSuffix)
352 $attachmentSuffix =
Text::getEmoji(
'attach') .
' ' . Loc::getMessage(
'IM_MESSAGE_ATTACH');
354 if ($attachmentSuffix === \CIMMessageParamAttach::SKIP_MESSAGE)
356 $attachmentSuffix =
'';
360 $attachmentSuffix =
' ' . $attachmentSuffix;
368 $attachmentSuffix = match ($file[
'type'] ??
'')
370 'image' =>
Text::getEmoji(
'image') .
' '. Loc::getMessage(
'IM_MESSAGE_IMAGE'),
371 'audio' =>
Text::getEmoji(
'audio') .
' '. Loc::getMessage(
'IM_MESSAGE_AUDIO'),
372 'video' =>
Text::getEmoji(
'video') .
' '. Loc::getMessage(
'IM_MESSAGE_VIDEO'),
373 default =>
Text::getEmoji(
'file', Loc::getMessage(
'IM_MESSAGE_FILE') .
':') .
' ' . $file[
'name'],
377 return $attachmentSuffix;
382 $attachItem = reset($attach);
383 if (is_array($attachItem))
385 return (
string)($attachItem[
'DESCRIPTION'] ??
'');
395 'chatId' => (int)
$event[
'chatId'],
396 'dialogId' => (
string)
$event[
'dialogId'],
397 'counter' => (int)
$event[
'counter'],
400 if (
$event[
'notify'] !==
true)
410 'id' => (int)$eventChat[
'id'],
411 'name' => (
string)$eventChat[
'name'],
412 'owner' => (int)$eventChat[
'owner'],
413 'color' => (
string)$eventChat[
'color'],
414 'type' => (string)$eventChat[
'type'],
415 'date_create' => (
string)$eventChat[
'date_create'],
419 !empty($eventChat[
'avatar'])
420 && $eventChat[
'avatar'] !==
'/bitrix/js/im/images/blank.gif'
423 $chat[
'avatar'] = $eventChat[
'avatar'];
425 if ($eventChat[
'call'])
427 $chat[
'call'] = (string)$eventChat[
'call'];
429 if ($eventChat[
'call_number'])
431 $chat[
'call_number'] = (string)$eventChat[
'call_number'];
433 if ($eventChat[
'entity_data_1'])
435 $chat[
'entity_data_1'] = (string)$eventChat[
'entity_data_1'];
437 if ($eventChat[
'entity_data_2'])
439 $chat[
'entity_data_2'] = (string)$eventChat[
'entity_data_2'];
441 if ($eventChat[
'entity_data_3'])
443 $chat[
'entity_data_3'] = (string)$eventChat[
'entity_data_3'];
445 if ($eventChat[
'entity_id'])
447 $chat[
'entity_id'] = (string)$eventChat[
'entity_id'];
449 if ($eventChat[
'entity_type'])
451 $chat[
'entity_type'] = (string)$eventChat[
'entity_type'];
453 if ($eventChat[
'extranet'])
455 $chat[
'extranet'] =
true;
461 if (!empty(
$event[
'lines']))
466 if (!empty(
$event[
'users'][
$event[
'message'][
'senderId']]))
468 $eventUser =
$event[
'users'][
$event[
'message'][
'senderId']];
471 'id' => (int)$eventUser[
'id'],
472 'name' => (
string)$eventUser[
'name'],
473 'first_name' => (string)$eventUser[
'first_name'],
474 'last_name' => (
string)$eventUser[
'last_name'],
475 'color' => (string)$eventUser[
'color'],
479 !empty($eventUser[
'avatar'])
480 && $eventUser[
'avatar'] !==
'/bitrix/js/im/images/blank.gif'
483 $user[
'avatar'] = (string)$eventUser[
'avatar'];
486 if ($eventUser[
'absent'])
488 $user[
'absent'] =
true;
490 if (!$eventUser[
'active'])
492 $user[
'active'] = $eventUser[
'active'];
494 if ($eventUser[
'bot'])
498 if ($eventUser[
'extranet'])
500 $user[
'extranet'] =
true;
502 if ($eventUser[
'network'])
504 $user[
'network'] =
true;
506 if ($eventUser[
'birthday'])
508 $user[
'birthday'] = $eventUser[
'birthday'];
510 if ($eventUser[
'connector'])
512 $user[
'connector'] =
true;
514 if ($eventUser[
'external_auth_id'] !==
'default')
516 $user[
'external_auth_id'] = $eventUser[
'external_auth_id'];
518 if ($eventUser[
'gender'] ===
'F')
520 $user[
'gender'] =
'F';
522 if ($eventUser[
'work_position'])
524 $user[
'work_position'] = (string)$eventUser[
'work_position'];
530 if (!empty(
$event[
'files']))
535 'id' => (int)$value[
'id'],
536 'extension' => (
string)
$value[
'extension'],
537 'name' => (string)$value[
'name'],
538 'size' => (
int)
$value[
'size'],
539 'type' => (string)$value[
'type'],
540 'image' => $value[
'image'],
542 'urlPreview' => (
new Uri($value[
'urlPreview']))->deleteParams([
'fileName'])->getUri(),
543 'urlShow' => (
new Uri($value[
'urlShow']))->deleteParams([
'fileName'])->getUri(),
547 $file[
'image'] =
$value[
'image'];
549 if ($value[
'progress'] !== 100)
551 $file[
'progress'] = (int)$value[
'progress'];
553 if ($value[
'status'] !==
'done')
555 $file[
'status'] =
$value[
'status'];
562 if (!empty(
$event[
'message']))
564 $eventMessage =
$event[
'message'];
567 'id' => (int)$eventMessage[
'id'],
568 'date' => (
string)$eventMessage[
'date'],
569 'params' => $eventMessage[
'params'],
570 'prevId' => (int)$eventMessage[
'prevId'],
571 'senderId' => (
int)$eventMessage[
'senderId'],
574 if (isset(
$message[
'params'][
'ATTACH']))
576 unset(
$message[
'params'][
'ATTACH']);
579 if ($eventMessage[
'system'] ===
'Y')
606 'entity_data_1' => 203,
607 'entity_data_2' => 204,
608 'entity_data_3' => 205,
610 'call_number' => 202,
611 'manager_list' => 209,
617 'work_position' => 43,
622 'external_auth_id' => 404,
645 return $this->changeKeysPushEvent(
$result, $indexToNameMap);
652 foreach($object as
$key => $value)
659 if (is_array($value))
661 $result[$index] = $this->changeKeysPushEvent($value,
$map);
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getEmoji($code, $fallbackText='')
static getInstance($userId=null)
static getAttachmentSuffixForPush(array $message)
Message Send SendingConfig $config
sendForPrivateMessage(int $userId, array $push)
sendForGroupMessage(array $group)
preparePushForPrivate(array $params)
__construct(Message $message, Message\Send\SendingConfig $config)
static getAttachDescription(array $attach)
preparePushForChat(array $params)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
const SITE_DIR(!defined('LANG'))
htmlspecialcharsback($str)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']