1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
im_event.php
См. документацию.
1<?
3
4use Bitrix\Im as IM;
8
10{
11 public static function OnFileDelete($params)
12 {
13 if (!in_array($params['MODULE_ID'], ['im', 'imopenlines']))
14 {
15 return true;
16 }
17
18 $result = IM\Model\ChatTable::getList([
19 'select' => ['ID', 'AUTHOR_ID'],
20 'filter' => ['=AVATAR' => $params['ID']]
21 ]);
22 while ($row = $result->fetch())
23 {
24 IM\Model\ChatTable::update($row['ID'], ['AVATAR' => null]);
25 }
26 }
27
28 public static function OnBeforeUserSendPassword($params)
29 {
30 $bots = IM\Bot::getListCache();
31 if (empty($bots))
32 return true;
33
34 if (isset($params['LOGIN']) && !empty($params['LOGIN']))
35 {
36 if (mb_substr($params['LOGIN'], 0, mb_strlen(IM\Bot::LOGIN_START)) == IM\Bot::LOGIN_START)
37 {
39 'filter' => [
40 '=LOGIN' => $params['LOGIN'],
41 '=EXTERNAL_AUTH_ID' => IM\Bot::EXTERNAL_AUTH_ID
42 ]
43 ]);
44 if ($orm->fetch())
45 {
46 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_EVENT_ERROR_CHANGE_PASSWORD_FOR_BOT"), "ERROR_CHANGE_PASSWORD_FOR_BOT");
47 return false;
48 }
49 }
50 }
51
52 if (isset($params['EMAIL']) && !empty($params['EMAIL']))
53 {
55 'filter' => [
56 '=EMAIL' => $params['EMAIL'],
57 '=EXTERNAL_AUTH_ID' => IM\Bot::EXTERNAL_AUTH_ID
58 ]
59 ]);
60 if ($orm->fetch())
61 {
62 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_EVENT_ERROR_CHANGE_PASSWORD_FOR_BOT"), "ERROR_CHANGE_PASSWORD_FOR_BOT");
63 return false;
64 }
65 }
66
67 return true;
68 }
69
70 public static function OnAddRatingVote($id, $arParams)
71 {
72 if (!Loader::includeModule("socialnetwork"))
73 {
74 return true;
75 }
76
77 $ratingNotifyTag = "RATING|".($arParams['VALUE'] >= 0 ? "" : "DL|").$arParams['ENTITY_TYPE_ID']."|".$arParams['ENTITY_ID'];
78 if (!empty($arParams['REACTION']))
79 {
80 $ratingNotifyTag .= "|".$arParams['REACTION'];
81 }
82 $ratingMentionNotifyTag = 'RATING_MENTION|' . ($arParams['VALUE'] >= 0 ? '' : 'DL|') . $arParams['ENTITY_TYPE_ID'] . '|' . $arParams['ENTITY_ID'];
83
84 $contentId = Livefeed\Provider::getContentId([
85 "RATING_TYPE_ID" => $arParams['ENTITY_TYPE_ID'],
86 "RATING_ENTITY_ID" => $arParams['ENTITY_ID']
87 ]);
88
89 if (!empty($contentId['ENTITY_TYPE']))
90 {
91 $liveFeedEntity = Livefeed\Provider::init([
92 'ENTITY_TYPE' => $contentId['ENTITY_TYPE'],
93 'ENTITY_ID' => $contentId['ENTITY_ID']
94 ]);
95
96 if (!$liveFeedEntity)
97 {
98 return false;
99 }
100
101 if ($arParams['OWNER_ID'] != $arParams['USER_ID']) // AUX
102 {
103 $originalText = $liveFeedEntity->getSourceOriginalText();
104 $auxData = $liveFeedEntity->getSourceAuxData();
105
106 if (
107 $originalText <> ''
108 && !empty($auxData)
109 )
110 {
111 $handlerManager = new Bitrix\Socialnetwork\CommentAux\HandlerManager();
113 if($handler = $handlerManager->getHandlerByPostText($originalText))
114 {
115 $suffix = '';
116 if ($provider = Livefeed\Provider::getProvider($contentId['ENTITY_TYPE']))
117 {
118 $suffix = $provider->getSuffix();
119 }
120
121 $handler->setOptions([
122 'im' => true,
123 'suffix' => $suffix
124 ]);
125 $handler->sendRatingNotification($auxData, $arParams);
126 return true;
127 }
128 }
129 }
130
131 $title = $liveFeedEntity->getSourceTitle();
132 $description = $liveFeedEntity->getSourceDescription();
133 $url = $liveFeedEntity->getLiveFeedUrl();
134
135 $arMentionedUserID = [];
136 if (!empty($description))
137 {
138 preg_match_all("/\[user\s*=\s*([^\]]*)\](.+?)\[\/user\]/isu", $description, $mention);
139 if (!empty($mention))
140 {
141 $arMentionedUserID = array_merge($arMentionedUserID, $mention[1]);
142 }
143 }
144 $arMentionedUserID = array_unique($arMentionedUserID);
145
146 $title = CTextParser::clearAllTags(\Bitrix\Im\Text::removeBbCodes($title));
147 $description = CTextParser::clearAllTags(\Bitrix\Im\Text::removeBbCodes($description));
148
149 if (
150 $arParams['OWNER_ID'] != $arParams['USER_ID']
151 || !empty($arMentionedUserID)
152 )
153 {
154 $arParams["ENTITY_LINK"] = $url;
155 $arParams["ENTITY_PARAM"] = '';
156
157 if (
158 in_array('photo_photo', $liveFeedEntity->getEventId())
159 || in_array('photo', $liveFeedEntity->getEventId())
160 )
161 {
162 $arParams["ENTITY_PARAM"] = 'photos'; // it was also 'library' value
163 }
164 elseif (in_array('wiki', $liveFeedEntity->getEventId()))
165 {
166 $arParams["ENTITY_PARAM"] = 'wiki';
167 }
168
169 $arParams["ENTITY_TITLE"] = trim(strip_tags(str_replace(["\r\n","\n","\r"], ' ', $title)));
170 $arParams["ENTITY_MESSAGE"] = trim(strip_tags(str_replace(["\r\n","\n","\r"], ' ', $description)));
171 $arParams["ENTITY_BODY"] = preg_replace('/(.+?)(\r|\n)+.*/isu','\\1', $description);
172
173 if (
174 (
175 $arParams["ENTITY_TITLE"] <> ''
176 || $arParams["ENTITY_MESSAGE"] <> ''
177 )
178 && $arParams["ENTITY_LINK"] <> ''
179 )
180 {
181 $originalLink = $arParams["ENTITY_LINK"];
182
183 $bExtranetInstalled = CModule::IncludeModule("extranet");
184 if ($bExtranetInstalled)
185 {
186 $arSites = [];
187 $extranet_site_id = CExtranet::GetExtranetSiteID();
188 $intranet_site_id = CSite::GetDefSite();
189 $dbSite = CSite::GetList("sort", "desc", ["ACTIVE" => "Y"]);
190 while($arSite = $dbSite->Fetch())
191 {
192 $arSites[$arSite["ID"]] = [
193 "DIR" => (trim($arSite["DIR"]) <> '' ? $arSite["DIR"] : "/"),
194 "SERVER_NAME" => (trim($arSite["SERVER_NAME"]) <> '' ? $arSite["SERVER_NAME"] : COption::GetOptionString("main", "server_name", $_SERVER["HTTP_HOST"]))
195 ];
196 }
197 }
198 $bSentToOwner = false;
199 if ($arParams['OWNER_ID'] != $arParams['USER_ID'])
200 {
202 intval($arParams['OWNER_ID']),
203 trim($arParams["ENTITY_TYPE_ID"]),
204 intval($arParams["ENTITY_ID"])
205 );
206
207 if ($followValue != "N")
208 {
210 $originalLink,
211 intval($arParams['OWNER_ID']),
212 $arSites,
213 $intranet_site_id,
214 $extranet_site_id
215 );
216
217 $arMessageFields = [
218 "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
219 "TO_USER_ID" => intval($arParams['OWNER_ID']),
220 "FROM_USER_ID" => intval($arParams['USER_ID']),
221 "NOTIFY_TYPE" => IM_NOTIFY_FROM,
222 "NOTIFY_MODULE" => "main",
223 "NOTIFY_EVENT" => "rating_vote",
224 "NOTIFY_TAG" => $ratingNotifyTag,
225 "NOTIFY_SUB_TAG" => $ratingNotifyTag.'|'.intval($arParams['OWNER_ID']),
226 "NOTIFY_MESSAGE" => fn (?string $languageId = null) => self::GetMessageRatingVote($arParams, false, $languageId),
227 "NOTIFY_MESSAGE_OUT" => fn (?string $languageId = null) => self::GetMessageRatingVote($arParams, true, $languageId)
228 ];
229 $bSentToOwner = CIMNotify::Add($arMessageFields);
230 }
231 }
232
233 if (is_array($arMentionedUserID))
234 {
235 if (in_array($arParams['ENTITY_TYPE_ID'], ["BLOG_COMMENT", "FORUM_POST"]))
236 {
237 $rsLogComment = CSocNetLogComments::GetList(
238 [],
239 [
240 "RATING_TYPE_ID" => $arParams['ENTITY_TYPE_ID'],
241 "RATING_ENTITY_ID" => $arParams['ENTITY_ID']
242 ],
243 false,
244 false,
245 ["LOG_ID"]
246 );
247 if ($arLogComment = $rsLogComment->Fetch())
248 {
249 $logId = $arLogComment["LOG_ID"];
250 }
251 }
252 elseif (in_array($arParams['ENTITY_TYPE_ID'], ["BLOG_POST"]))
253 {
254 $rsLog = CSocNetLog::GetList(
255 [],
256 [
257 "RATING_TYPE_ID" => $arParams['ENTITY_TYPE_ID'],
258 "RATING_ENTITY_ID" => $arParams['ENTITY_ID']
259 ],
260 false,
261 false,
262 ["ID"]
263 );
264 if ($arLog = $rsLog->Fetch())
265 {
266 $logId = $arLog["ID"];
267 }
268 }
269
270 if (intval($logId) > 0)
271 {
272 $arParams["MENTION"] = true; // for self::GetMessageRatingVote()
273
274 foreach ($arMentionedUserID as $mentioned_user_id)
275 {
276 if (
277 $mentioned_user_id != $arParams['USER_ID']
278 && ($mentioned_user_id != $arParams['OWNER_ID'] || !$bSentToOwner)
279 && CSocNetLogRights::CheckForUserOnly($logId, $mentioned_user_id)
280 )
281 {
283 intval($mentioned_user_id),
284 trim($arParams["ENTITY_TYPE_ID"]),
285 intval($arParams["ENTITY_ID"])
286 );
287
288 if ($followValue != "N")
289 {
291 $originalLink,
292 intval($mentioned_user_id),
293 $arSites,
294 $intranet_site_id,
295 $extranet_site_id
296 );
297
298 $arMessageFields = [
299 "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
300 "TO_USER_ID" => intval($mentioned_user_id),
301 "FROM_USER_ID" => intval($arParams['USER_ID']),
302 "NOTIFY_TYPE" => IM_NOTIFY_FROM,
303 "NOTIFY_MODULE" => "main",
304 "NOTIFY_EVENT" => "rating_vote_mentioned",
305 "NOTIFY_TAG" => $ratingMentionNotifyTag,
306 "NOTIFY_SUB_TAG" => $ratingMentionNotifyTag.'|'.intval($mentioned_user_id),
307 "NOTIFY_MESSAGE" => fn (?string $languageId = null) => self::GetMessageRatingVote($arParams, false, $languageId),
308 "NOTIFY_MESSAGE_OUT" => fn (?string $languageId = null) => self::GetMessageRatingVote($arParams, true, $languageId),
309 ];
310
311 CIMNotify::Add($arMessageFields);
312 }
313 }
314 }
315 }
316 }
317 }
318 }
319 }
320
321 return true;
322 }
323
324 public static function OnCancelRatingVote($id, $arParams)
325 {
326 CIMNotify::DeleteByTag("RATING|".$arParams['ENTITY_TYPE_ID']."|".$arParams['ENTITY_ID'], $arParams['USER_ID']);
327 }
328
329 public static function GetMessageRatingVote($arParams, $bForMail = false, ?string $languageId = null)
330 {
331 static $intranetInstalled = null;
332
333 if ($intranetInstalled === null)
334 {
335 $intranetInstalled = \Bitrix\Main\ModuleManager::isModuleInstalled('intranet');
336 }
337
338 $like = (
339 $arParams['VALUE'] >= 0
340 ? ($intranetInstalled ? '_REACT' : '_LIKE')
341 : '_DISLIKE'
342 );
343
344 foreach(\Bitrix\Main\EventManager::getInstance()->findEventHandlers("im", "OnGetMessageRatingVote") as $event)
345 {
346 ExecuteModuleEventEx($event, [&$arParams, &$bForMail]);
347 }
348
349 if(isset($arParams['MESSAGE'])) // message was generated manually inside OnGetMessageRatingVote
350 {
351 return $arParams['MESSAGE'];
352 }
353
354 $genderSuffix = '';
355 if (
356 $like == '_REACT'
357 && !empty($arParams['USER_ID'])
358 && intval($arParams['USER_ID']) > 0
359 )
360 {
362 'filter' => [
363 'ID' => intval($arParams['USER_ID'])
364 ],
365 'select' => ['PERSONAL_GENDER']
366 ]);
367 if ($userFields = $res->fetch())
368 {
369 switch ($userFields['PERSONAL_GENDER'])
370 {
371 case "M":
372 case "F":
373 $genderSuffix = '_'.$userFields['PERSONAL_GENDER'];
374 break;
375 default:
376 $genderSuffix = '';
377 }
378 }
379 $like .= $genderSuffix;
380 }
381
382 if (!isset($CCTP))
383 {
384 $CCTP = new CTextParser();
385 }
386
387 if (
388 $arParams['ENTITY_TYPE_ID'] == 'FORUM_POST'
389 || $arParams['ENTITY_TYPE_ID'] == 'BLOG_COMMENT'
390 )
391 {
392 $stripped = $CCTP->strip_words($arParams["ENTITY_MESSAGE"], 199);
393 $arParams["ENTITY_MESSAGE"] = $stripped.(mb_strlen($stripped) != mb_strlen($arParams["ENTITY_MESSAGE"]) ? '...' : '');
394 }
395 else
396 {
397 $stripped = $CCTP->strip_words($arParams["ENTITY_TITLE"], 199);
398 $arParams["ENTITY_TITLE"] = $stripped.(mb_strlen($stripped) != mb_strlen($arParams["ENTITY_TITLE"]) ? '...' : '');
399 }
400
401 if ($bForMail)
402 {
403 if ($arParams['ENTITY_TYPE_ID'] == 'BLOG_POST')
404 {
405 $message = str_replace('#LINK#', $arParams["ENTITY_TITLE"], Loc::getMessage('IM_EVENT_RATING_BLOG_POST'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
406 }
407 elseif ($arParams['ENTITY_TYPE_ID'] == 'BLOG_COMMENT')
408 {
409 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_MESSAGE"], '', ''], Loc::getMessage('IM_EVENT_RATING_COMMENT'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
410 }
411 elseif ($arParams['ENTITY_TYPE_ID'] == 'FORUM_TOPIC')
412 {
413 $message = str_replace('#LINK#', $arParams["ENTITY_TITLE"], Loc::getMessage('IM_EVENT_RATING_FORUM_TOPIC'.$like, null, $languageId));
414 }
415 elseif ($arParams['ENTITY_TYPE_ID'] == 'FORUM_POST')
416 {
417 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_MESSAGE"], '', ''], Loc::getMessage('IM_EVENT_RATING_COMMENT'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
418 }
419 elseif (
420 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_SECTION'
421 && $arParams['ENTITY_PARAM'] == 'photos'
422 )
423 {
424 if (isset($arParams["ENTITY_BODY"]))
425 {
426 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_BODY"], '', ''], Loc::getMessage('IM_EVENT_RATING_PHOTO_ALBUM'.$like, null, $languageId));
427 }
428 elseif (is_numeric($arParams["ENTITY_TITLE"]))
429 {
430 $message = str_replace(['#A_START#', '#A_END#'], ['', ''], Loc::getMessage('IM_EVENT_RATING_PHOTO_ALBUM1'.$like, null, $languageId));
431 }
432 else
433 {
434 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '', ''], Loc::getMessage('IM_EVENT_RATING_PHOTO_ALBUM'.$like, null, $languageId));
435 }
436 }
437 elseif (
438 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_ELEMENT'
439 && $arParams['ENTITY_PARAM'] == 'library'
440 )
441 {
442 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '', ''], Loc::getMessage('IM_EVENT_RATING_FILE'.$like, null, $languageId));
443 }
444 elseif (
445 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_ELEMENT'
446 && $arParams['ENTITY_PARAM'] == 'wiki'
447 )
448 {
449 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '', ''], Loc::getMessage('IM_EVENT_RATING_WIKI'.$like, null, $languageId));
450 }
451 elseif (
452 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_ELEMENT'
453 && $arParams['ENTITY_PARAM'] == 'photos'
454 )
455 {
456 if (isset($arParams["ENTITY_BODY"]))
457 {
458 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_BODY"], '', ''], Loc::getMessage('IM_EVENT_RATING_PHOTO'.$like, null, $languageId));
459 }
460 elseif (is_numeric($arParams["ENTITY_TITLE"]))
461 {
462 $message = str_replace(['#A_START#', '#A_END#'], ['', ''], Loc::getMessage('IM_EVENT_RATING_PHOTO1'.$like, null, $languageId));
463 }
464 else
465 {
466 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '', ''], Loc::getMessage('IM_EVENT_RATING_PHOTO'.$like, null, $languageId));
467 }
468 }
469 elseif ($arParams['ENTITY_TYPE_ID'] == 'LOG_COMMENT')
470 {
471 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '', ''], Loc::getMessage('IM_EVENT_RATING_COMMENT'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
472 }
473 elseif ($arParams['ENTITY_TYPE_ID'] == 'LISTS_NEW_ELEMENT')
474 {
475 $message = str_replace(
476 [
477 '#TITLE#',
478 '#A_START#',
479 '#A_END#'
480 ],
481 [
482 $arParams["ENTITY_TITLE"],
483 '',
484 ''
485 ],
486 Loc::getMessage('IM_EVENT_RATING_LISTS_NEW_ELEMENT_LIKE'.$like, null, $languageId)
487 );
488 }
489 else
490 {
491 $message = str_replace('#LINK#', $arParams["ENTITY_TITLE"], Loc::getMessage('IM_EVENT_RATING_ELSE'.$like, null, $languageId));
492 }
493
494 if ($arParams['ENTITY_LINK'] <> '')
495 {
496 $message .= ' ('.$arParams['ENTITY_LINK'].')';
497 }
498 }
499 else
500 {
501 if ($arParams['ENTITY_TYPE_ID'] == 'BLOG_POST')
502 {
503 $message = str_replace('#LINK#', '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">'.$arParams["ENTITY_TITLE"].'</a>', Loc::getMessage('IM_EVENT_RATING_BLOG_POST'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
504 }
505 elseif ($arParams['ENTITY_TYPE_ID'] == 'BLOG_COMMENT')
506 {
507 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_MESSAGE"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_COMMENT'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
508 }
509 elseif ($arParams['ENTITY_TYPE_ID'] == 'FORUM_TOPIC')
510 {
511 $message = str_replace('#LINK#', '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">'.$arParams["ENTITY_TITLE"].'</a>', Loc::getMessage('IM_EVENT_RATING_FORUM_TOPIC'.$like, null, $languageId));
512 }
513 elseif ($arParams['ENTITY_TYPE_ID'] == 'FORUM_POST')
514 {
515 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_MESSAGE"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_COMMENT'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
516 }
517 elseif (
518 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_ELEMENT'
519 && $arParams['ENTITY_PARAM'] == 'library'
520 )
521 {
522 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_FILE'.$like, null, $languageId));
523 }
524 elseif (
525 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_ELEMENT'
526 && $arParams['ENTITY_PARAM'] == 'wiki'
527 )
528 {
529 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_WIKI'.$like, null, $languageId));
530 }
531 elseif (
532 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_SECTION'
533 && $arParams['ENTITY_PARAM'] == 'photos'
534 )
535 {
536 if (isset($arParams["ENTITY_BODY"]))
537 {
538 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_BODY"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_PHOTO_ALBUM'.$like, null, $languageId));
539 }
540 elseif (is_numeric($arParams["ENTITY_TITLE"]))
541 {
542 $message = str_replace(['#A_START#', '#A_END#'], ['<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_PHOTO_ALBUM1'.$like, null, $languageId));
543 }
544 else
545 {
546 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_PHOTO_ALBUM'.$like, null, $languageId));
547 }
548 }
549 elseif (
550 $arParams['ENTITY_TYPE_ID'] == 'IBLOCK_ELEMENT'
551 && $arParams['ENTITY_PARAM'] == 'photos'
552 )
553 {
554 if (isset($arParams["ENTITY_BODY"]))
555 {
556 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_BODY"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_PHOTO'.$like, null, $languageId));
557 }
558 elseif (is_numeric($arParams["ENTITY_TITLE"]))
559 {
560 $message = str_replace(['#A_START#', '#A_END#'], ['<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_PHOTO1'.$like));
561 }
562 else
563 {
564 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_PHOTO'.$like, null, $languageId));
565 }
566 }
567 elseif ($arParams['ENTITY_TYPE_ID'] == 'LOG_COMMENT')
568 {
569 $message = str_replace(['#TITLE#', '#A_START#', '#A_END#'], [$arParams["ENTITY_TITLE"], '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">', '</a>'], Loc::getMessage('IM_EVENT_RATING_COMMENT'.($arParams['MENTION'] ? '_MENTION' : '').$like, null, $languageId));
570 }
571 elseif ($arParams['ENTITY_TYPE_ID'] == 'LISTS_NEW_ELEMENT')
572 {
573 $message = str_replace(
574 [
575 '#TITLE#',
576 '#A_START#',
577 '#A_END#'
578 ],
579 [
580 $arParams["ENTITY_TITLE"],
581 '<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">',
582 '</a>'
583 ],
584 Loc::getMessage('IM_EVENT_RATING_LISTS_NEW_ELEMENT'.$like, null, $languageId)
585 );
586 }
587 else
588 {
589 $message = str_replace('#LINK#', $arParams['ENTITY_LINK'] <> ''?'<a href="'.$arParams['ENTITY_LINK'].'" class="bx-notifier-item-action">'.$arParams["ENTITY_TITLE"].'</a>': '<i>'.$arParams["ENTITY_TITLE"].'</i>', Loc::getMessage('IM_EVENT_RATING_ELSE'.$like, null, $languageId));
590 }
591
592 if ($intranetInstalled)
593 {
594 $message .= "\n".str_replace("#REACTION#", \CRatingsComponentsMain::getRatingLikeMessage(!empty($arParams['REACTION']) ? $arParams['REACTION'] : ''), Bitrix\Main\Localization\Loc::getMessage("IM_EVENT_RATING_REACTION", null, $languageId));
595 }
596 }
597
598 return $message;
599 }
600
601 public static function GetMessageRatingEntityURL($url, $user_id = false, $arSites = false, $intranet_site_id = false, $extranet_site_id = false)
602 {
603 static $arSiteData = false;
604
605 if (
606 !$arSiteData
607 && IsModuleInstalled('intranet')
608 && CModule::IncludeModule('socialnetwork')
609 )
610 {
611 $arSiteData = CSocNetLogTools::GetSiteData();
612 }
613
614 if (
615 $arSiteData
616 && count($arSiteData) > 1
617 )
618 {
619 foreach($arSiteData as $siteId => $arUrl)
620 {
621 $url = str_replace($arUrl["USER_PATH"], "#USER_PATH#", $url);
622 }
623
625 [
626 "URL" => $url
627 ],
628 $user_id
629 );
630
631 $url = $arTmp["URLS"]["URL"];
632 $url = (
633 mb_strpos($url, "http://") === 0
634 || mb_strpos($url, "https://") === 0
635 ? ""
636 : (
637 isset($arTmp["SERVER_NAME"])
638 && !empty($arTmp["SERVER_NAME"])
639 ? $arTmp["SERVER_NAME"]
640 : ""
641 )
642 ).$arTmp["URLS"]["URL"];
643 }
644 else
645 {
646 if (
647 is_array($arSites)
648 && intval($user_id) > 0
649 && $extranet_site_id <> ''
650 && $intranet_site_id <> ''
651 )
652 {
653 $bExtranetUser = false;
654 if ($arSites[$extranet_site_id])
655 {
656 $bExtranetUser = true;
657 $rsUser = CUser::GetByID(intval($user_id));
658 if ($arUser = $rsUser->Fetch())
659 {
660 if (intval($arUser["UF_DEPARTMENT"][0]) > 0)
661 {
662 $bExtranetUser = false;
663 }
664 }
665 }
666
667 if ($bExtranetUser)
668 {
669 $link = $url;
670 if (mb_substr($link, 0, mb_strlen($arSites[$extranet_site_id]['DIR'])) == $arSites[$extranet_site_id]['DIR'])
671 {
672 $link = mb_substr($link, mb_strlen($arSites[$extranet_site_id]['DIR']));
673 }
674
675 $SiteServerName = $arSites[$extranet_site_id]['SERVER_NAME'].$arSites[$extranet_site_id]['DIR'].ltrim($link, "/");
676 }
677 else
678 {
679 $link = $url;
680 if (mb_substr($link, 0, mb_strlen($arSites[$intranet_site_id]['DIR'])) == $arSites[$intranet_site_id]['DIR'])
681 {
682 $link = mb_substr($link, mb_strlen($arSites[$intranet_site_id]['DIR']));
683 }
684
685 $SiteServerName = $arSites[$intranet_site_id]['SERVER_NAME'].$arSites[$intranet_site_id]['DIR'].ltrim($link, "/");
686 }
687
688 $url = (CMain::IsHTTPS() ? "https" : "http")."://".$SiteServerName;
689 }
690 else
691 {
692 $SiteServerName = (defined('SITE_SERVER_NAME') && SITE_SERVER_NAME <> '' ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", $_SERVER['SERVER_NAME']));
693 if ($SiteServerName <> '')
694 {
695 $url = (CMain::IsHTTPS() ? "https" : "http")."://".$SiteServerName.$url;
696 }
697 }
698 }
699
700 return $url;
701 }
702
703 private static function GetMessageRatingLogCommentURL($arComment, $user_id = false, $arSites = false, $intranet_site_id = false, $extranet_site_id = false)
704 {
705 $url = false;
706
707 if (
708 !is_array($arComment)
709 || !isset($arComment["ENTITY_TYPE"]) || $arComment["ENTITY_TYPE"] == ''
710 || !isset($arComment["ID"]) || intval($arComment["ID"]) <= 0
711 || !isset($arComment["LOG_ID"]) || intval($arComment["LOG_ID"]) <= 0
712 )
713 {
714 return false;
715 }
716
717 if (
718 is_array($arSites)
719 && intval($user_id) > 0
720 && $extranet_site_id <> ''
721 && $intranet_site_id <> ''
722 )
723 {
724 $bExtranetUser = false;
725 if ($arSites[$extranet_site_id])
726 {
727 $bExtranetUser = true;
728 $rsUser = CUser::GetByID($user_id);
729 if ($arUser = $rsUser->Fetch())
730 {
731 if (intval($arUser["UF_DEPARTMENT"][0]) > 0)
732 {
733 $bExtranetUser = false;
734 }
735 }
736 }
737
738 $user_site_id = ($bExtranetUser ? $extranet_site_id : $intranet_site_id);
739
740 $url = (in_array($arComment["ENTITY_TYPE"], ["CRMLEAD", "CRMCONTACT", "CRMCOMPANY", "CRMDEAL", "CRMACTIVITY"]) ? $arSites[$user_site_id]["DIR"]."crm/stream?log_id=#log_id#" : COption::GetOptionString("socialnetwork", "log_entry_page", $arSites[$user_site_id]["DIR"]."company/personal/log/#log_id#/", $user_site_id));
741 $url = str_replace("#log_id#", $arComment["LOG_ID"], $url);
742 $url .= (mb_strpos($url, "?") !== false ? "&" : "?")."commentId=".$arComment["ID"]."#com".$arComment["ID"];
743 $url = (CMain::IsHTTPS() ? "https" : "http")."://".$arSites[$user_site_id]['SERVER_NAME'].$url;
744 }
745 else
746 {
747 $url = (in_array($arComment["ENTITY_TYPE"], ["CRMLEAD", "CRMCONTACT", "CRMCOMPANY", "CRMDEAL", "CRMACTIVITY"]) ? SITE_DIR."crm/stream?log_id=#log_id#" : COption::GetOptionString("socialnetwork", "log_entry_page", SITE_DIR."company/personal/log/#log_id#/", SITE_ID));
748 $url = str_replace("#log_id#", $arComment["LOG_ID"], $url);
749 $url .= (mb_strpos($url, "?") !== false ? "&" : "?")."commentId=".$arComment["ID"]."#com".$arComment["ID"];
750
751 $SiteServerName = (defined('SITE_SERVER_NAME') && SITE_SERVER_NAME <> '' ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name", $_SERVER['SERVER_NAME']));
752 if ($SiteServerName <> '')
753 {
754 $url = (CMain::IsHTTPS() ? "https" : "http")."://".$SiteServerName.$url;
755 }
756 }
757
758 return $url;
759 }
760
761 public static function OnAfterUserAdd($arParams)
762 {
763 return true;
764 }
765
766 public static function OnAfterUserUpdate($arParams)
767 {
768 $chat = new CIMChat(0);
769 $user = IM\V2\Entity\User\User::getInstance((int)$arParams["ID"]);
770 IM\V2\Entity\User\UserFactory::getInstance()->clearCache((int)$arParams["ID"]);
771
772 IM\V2\Message\CounterService::onAfterUserUpdate($arParams);
773 IM\V2\Chat\User\OwnerService::onAfterUserUpdate($arParams);
774
775 $commonChatId = CIMChat::GetGeneralChatId();
776 if ($commonChatId > 0 && (isset($arParams['ACTIVE']) || isset($arParams['UF_DEPARTMENT'])))
777 {
778 if ($arParams['ACTIVE'] == 'N')
779 {
780 //CIMMessage::SetReadMessageAll($arParams['ID']);
781
782 if ($commonChatId && CIMChat::GetRelationById($commonChatId, $arParams["ID"], true, false))
783 {
784 $chat->DeleteUser($commonChatId, $arParams["ID"], false);
785 }
786 }
787 else
788 {
789 $commonChatId = CIMChat::GetGeneralChatId();
790 if ($commonChatId)
791 {
792 if ($user->isBot())
793 {
794 return true;
795 }
796
797 if ($arParams['ACTIVE'] != 'Y' && !$user->isActive())
798 {
799 return true;
800 }
801
802 $userInChat = CIMChat::GetRelationById($commonChatId, $arParams["ID"], true, false);
803 $userCanJoin = CIMChat::CanJoinGeneralChatId($arParams["ID"]);
804
805 if ($userInChat && !$userCanJoin)
806 {
807 $chat->DeleteUser($commonChatId, $arParams["ID"], false);
808 }
809 else if (!$userInChat && $userCanJoin)
810 {
811 $chat->AddUser($commonChatId, [$arParams["ID"]], false, true, true);
812 }
813 }
814 }
815 }
816
817 if (isset($arParams['ACTIVE']))
818 {
819 self::updateChatUserCounter($arParams["ID"]);
820 }
821 }
822
823 private static function updateChatUserCounter($userId): void
824 {
825 global $DB;
826 $sql = "
827 UPDATE b_im_chat C
828 INNER JOIN b_im_relation R ON C.ID = R.CHAT_ID
829 SET C.USER_COUNT = (
830 SELECT COUNT(1)
831 FROM b_im_relation R1
832 INNER JOIN b_user U ON R1.USER_ID = U.ID
833 WHERE R1.CHAT_ID = C.ID AND U.ACTIVE = 'Y'
834 )
835 WHERE R.MESSAGE_TYPE NOT IN ('".IM_MESSAGE_SYSTEM."','".IM_MESSAGE_PRIVATE."')
836 AND R.USER_ID = ".$userId."
837 ";
838 $DB->Query($sql, true);
839 }
840
841 public static function OnUserDelete($ID)
842 {
843 $ID = intval($ID);
844 if ($ID <= 0)
845 {
846 return false;
847 }
848
849 global $DB;
850
851 $isRecentExists = \Bitrix\Im\Model\RecentTable::getList([
852 'filter' => [
853 '=ITEM_TYPE' => IM_MESSAGE_PRIVATE,
854 '=ITEM_ID' => $ID,
855 ]
856 ])->fetch();
857
858 $arChat = [];
859 $strSQL = "
860 SELECT R.CHAT_ID
861 FROM b_im_chat C, b_im_relation R
862 WHERE R.USER_ID = ".$ID." and R.MESSAGE_TYPE IN ('".IM_MESSAGE_PRIVATE."', '".IM_MESSAGE_SYSTEM."') and R.CHAT_ID = C.ID
863 ";
864 $dbRes = $DB->Query($strSQL, true);
865 while ($arRes = $dbRes->Fetch())
866 {
867 $arChat[$arRes['CHAT_ID']] = $arRes['CHAT_ID'];
868 }
869
870 $accessProvider = new \Bitrix\Im\Access\ChatAuthProvider;
871 $accessProvider->deleteByUser($ID);
872
873 if (count($arChat) > 0)
874 {
875 $strSQL = "DELETE FROM b_im_chat WHERE ID IN (".implode(',', $arChat).")";
876 $DB->Query($strSQL, true);
877
878 $strSQL = "DELETE FROM b_im_message WHERE CHAT_ID IN (".implode(',', $arChat).")";
879 $DB->Query($strSQL, true);
880
881 $strSQL = "DELETE FROM b_im_relation WHERE CHAT_ID IN (".implode(',', $arChat).")";
882 $DB->Query($strSQL, true);
883
884 IM\V2\Link\Url\UrlCollection::deleteByChatsIds($arChat);
885 foreach ($arChat as $id)
886 {
887 IM\V2\Chat::cleanCache((int)$id);
888 }
889 }
890 else
891 {
892 $strSQL = "DELETE FROM b_im_message WHERE AUTHOR_ID = ".$ID;
893 $DB->Query($strSQL, true);
894
895 $strSQL = "DELETE FROM b_im_relation WHERE USER_ID =".$ID;
896 $DB->Query($strSQL, true);
897
898 IM\V2\Link\Url\UrlCollection::deleteByAuthorsIds([$ID]);
899 }
900
901 \Bitrix\Im\Bot::unRegister(['BOT_ID' => $ID]);
902
903 $strSQL = "DELETE FROM b_im_recent WHERE USER_ID = ".$ID;
904 $DB->Query($strSQL, true);
905
906 $strSQL = "DELETE FROM b_im_recent WHERE ITEM_TYPE = '".IM_MESSAGE_PRIVATE."' AND ITEM_ID = ".$ID;
907 $DB->Query($strSQL, true);
908
909 $strSQL = "DELETE FROM b_im_status WHERE USER_ID = ".$ID;
910 $DB->Query($strSQL, true);
911
912 $strSQL = "DELETE FROM b_im_recent WHERE ITEM_TYPE = '".IM_MESSAGE_PRIVATE."' and ITEM_ID = ".$ID;
913 $DB->Query($strSQL, true);
914
915 if ($isRecentExists && CModule::IncludeModule('pull'))
916 {
918
920 'module_id' => 'im',
921 'command' => 'chatHide',
922 'expiry' => 3600,
923 'params' => [
924 'dialogId' => $ID,
925 'chatId' => null,
926 'lines' => false,
927 ],
928 'extra' => \Bitrix\Im\Common::getPullExtra()
929 ]);
930 }
931
932 return true;
933 }
934
935 public static function OnGetDependentModule()
936 {
937 return [
938 'MODULE_ID' => "im",
939 'USE' => ["PUBLIC_SECTION"]
940 ];
941 }
942}
943
945{
946 protected $validUrls = [
947 "/",
948 ];
949
950 public static function OnApplicationsBuildList()
951 {
952 return [
953 "ID" => "desktop",
954 "NAME" => GetMessage('DESKTOP_APPLICATION_NAME'),
955 "DESCRIPTION" => GetMessage("DESKTOP_APPLICATION_DESC"),
956 "SORT" => 80,
957 "CLASS" => "DesktopApplication",
958 ];
959 }
960}
961?>
$arParams
Определения access_dialog.php:21
$arSites
Определения options.php:15
if(!Loader::includeModule('messageservice')) $provider
Определения callback_ednaruimhpx.php:21
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static getOnlineIntranetUsers()
Определения helper.php:6
static getInstance()
Определения eventmanager.php:31
Определения loader.php:13
static isModuleInstalled($moduleName)
Определения modulemanager.php:125
static getList(array $parameters=array())
Определения datamanager.php:431
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
Определения event.php:22
static IsHTTPS()
Определения main.php:479
static GetOptionString($module_id, $name, $def="", $site=false, $bExactSite=false)
Определения option.php:8
static GetDefSite($LID=false)
Определения site.php:760
static GetList($by="sort", $order="asc", $arFilter=[])
Определения site.php:605
static GetByID($ID)
Определения user.php:3820
Определения im_chat.php:15
Определения im_event.php:10
static OnBeforeUserSendPassword($params)
Определения im_event.php:28
static GetMessageRatingEntityURL($url, $user_id=false, $arSites=false, $intranet_site_id=false, $extranet_site_id=false)
Определения im_event.php:601
static OnGetDependentModule()
Определения im_event.php:935
static OnUserDelete($ID)
Определения im_event.php:841
static OnFileDelete($params)
Определения im_event.php:11
static GetMessageRatingVote($arParams, $bForMail=false, ?string $languageId=null)
Определения im_event.php:329
static OnCancelRatingVote($id, $arParams)
Определения im_event.php:324
static OnAfterUserAdd($arParams)
Определения im_event.php:761
static OnAfterUserUpdate($arParams)
Определения im_event.php:766
static Add($arFields)
Определения im_notify.php:28
static IncludeModule($module_name)
Определения module.php:151
static getRatingLikeMessage($emotion, $safe=true)
Определения ratings_components.php:149
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(), $arParams=array())
Определения log_comments.php:519
static GetExactValueByRating($user_id, $rating_type_id, $rating_entity_id)
Определения log_follow.php:380
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(), $arParams=array())
Определения log.php:338
static CheckForUserOnly($logID, $userID)
Определения log_rights.php:488
static GetSiteData()
Определения log_tools.php:5346
static ProcessPath($arUrl, $user_id, $explicit_site_id=false)
Определения log_tools.php:5283
Определения textparser.php:21
static clearAllTags($text)
Определения textparser.php:2358
Определения im_event.php:945
static OnApplicationsBuildList()
Определения im_event.php:950
$validUrls
Определения im_event.php:946
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
if($ajaxMode) $ID
Определения get_user.php:27
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
Определения .description.php:24
const IM_MESSAGE_SYSTEM
Определения include.php:21
const IM_NOTIFY_FROM
Определения include.php:37
const IM_MESSAGE_PRIVATE
Определения include.php:22
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
const SITE_DIR(!defined('LANG'))
Определения include.php:72
$siteId
Определения ajax.php:8
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
IsModuleInstalled($module_id)
Определения tools.php:5301
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$user
Определения mysql_to_pgsql.php:33
$GLOBALS['____1690880296']
Определения license.php:1
$message
Определения payment.php:8
if(intval($iTestTransaction) > 0) $arTmp
Определения payment.php:22
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
</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."%"
Определения waybill.php:936
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$title
Определения pdf.php:123
$arRes
Определения options.php:104
$contentId
Определения sonet_set_content_view.php:27
const SITE_ID
Определения sonet_set_content_view.php:12
$url
Определения iframe.php:7
$dbRes
Определения yandex_detail.php:168