312 public static function SendEvent(
$ID, $mailTemplate =
"SONET_NEW_EVENT", $bTransport =
false)
316 $arSocNetAllowedSubscribeEntityTypesDesc = CSocNetAllowed::GetAllowedEntityTypesDesc();
331 array(
"ID",
"LOG_ID",
"ENTITY_TYPE",
"ENTITY_ID",
"USER_ID",
"USER_NAME",
"USER_LAST_NAME",
"USER_SECOND_NAME",
"USER_LOGIN",
"EVENT_ID",
"LOG_DATE",
"MESSAGE",
"TEXT_MESSAGE",
"URL",
"MODULE_ID",
"GROUP_NAME",
"CREATED_BY_NAME",
"CREATED_BY_SECOND_NAME",
"CREATED_BY_LAST_NAME",
"CREATED_BY_LOGIN",
"LOG_SITE_ID",
"SOURCE_ID",
"LOG_SOURCE_ID")
333 $arLogComment = $dbLogComments->Fetch();
338 if (intval($arLogComment[
"LOG_ID"]) > 0)
342 array(
"ID" => $arLogComment[
"LOG_ID"])
353 && array_key_exists(
"CLASS_FORMAT", $arEvent)
354 && array_key_exists(
"METHOD_FORMAT", $arEvent)
355 && $arEvent[
"CLASS_FORMAT"] <>
''
356 && $arEvent[
"METHOD_FORMAT"] <>
''
359 $dbSiteCurrent = CSite::GetByID(
SITE_ID);
360 if ($arSiteCurrent = $dbSiteCurrent->Fetch())
361 if ($arSiteCurrent[
"LANGUAGE_ID"] != LANGUAGE_ID)
362 $arLogComment[
"MAIL_LANGUAGE_ID"] = $arSiteCurrent[
"LANGUAGE_ID"];
364 $arLogComment[
"FIELDS_FORMATTED"] = call_user_func(
array($arEvent[
"CLASS_FORMAT"], $arEvent[
"METHOD_FORMAT"]), $arLogComment,
array(),
true, $arLog);
368 array_key_exists($arLogComment[
"ENTITY_TYPE"], $arSocNetAllowedSubscribeEntityTypesDesc)
369 && array_key_exists(
"HAS_MY", $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]])
370 && $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]][
"HAS_MY"] ==
"Y"
371 && array_key_exists(
"CLASS_OF", $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]])
372 && array_key_exists(
"METHOD_OF", $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]])
373 && $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]][
"CLASS_OF"] <>
''
374 && $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]][
"METHOD_OF"] <>
''
375 && method_exists($arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]][
"CLASS_OF"], $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]][
"METHOD_OF"])
378 $arOfEntities = call_user_func(
array($arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]][
"CLASS_OF"], $arSocNetAllowedSubscribeEntityTypesDesc[$arLogComment[
"ENTITY_TYPE"]][
"METHOD_OF"]), $arLogComment[
"ENTITY_ID"]);
383 $arListParams =
array(
384 "USE_SUBSCRIBE" =>
"Y",
385 "ENTITY_TYPE" => $arLogComment[
"ENTITY_TYPE"],
386 "ENTITY_ID" => $arLogComment[
"ENTITY_ID"],
387 "EVENT_ID" => $arLogComment[
"EVENT_ID"],
388 "USER_ID" => $arLogComment[
"USER_ID"],
389 "OF_ENTITIES" => $arOfEntities,
390 "TRANSPORT" =>
array(
"M",
"X")
393 $arLogSites =
array();
395 while($arLogSite = $rsLogSite->Fetch())
397 $arLogSites[] = $arLogSite[
"LID"];
400 if (CModule::IncludeModule(
"extranet"))
405 $dbSite = CSite::GetList(
"sort",
"desc",
array(
"ACTIVE" =>
"Y"));
406 while($arSite = $dbSite->Fetch())
409 "DIR" => (trim($arSite[
"DIR"]) <>
'' ? $arSite[
"DIR"] :
"/"),
410 "SERVER_NAME" => (trim($arSite[
"SERVER_NAME"]) <>
'' ? $arSite[
"SERVER_NAME"] : COption::GetOptionString(
"main",
"server_name",
$_SERVER[
"HTTP_HOST"]))
414 $intranet_site_id = CSite::GetDefSite();
416 $arIntranetUsers = CExtranet::GetIntranetUsers();
417 $extranet_site_id = CExtranet::GetExtranetSiteID();
422 "TRANSPORT" =>
"DESC"
425 "USER_ACTIVE" =>
"Y",
426 "SITE_ID" => array_merge($arLogSites,
array(
false))
430 array(
"USER_ID",
"ENTITY_TYPE",
"ENTITY_ID",
"ENTITY_CB",
"ENTITY_MY",
"USER_NAME",
"USER_LAST_NAME",
"USER_LOGIN",
"USER_LID",
"USER_EMAIL",
"TRANSPORT"),
434 $arListParams =
array(
435 "USE_SUBSCRIBE" =>
"Y",
436 "ENTITY_TYPE" => $arLogComment[
"ENTITY_TYPE"],
437 "ENTITY_ID" => $arLogComment[
"ENTITY_ID"],
438 "EVENT_ID" => $arLogComment[
"EVENT_ID"],
439 "USER_ID" => $arLogComment[
"USER_ID"],
440 "OF_ENTITIES" => $arOfEntities,
446 "TRANSPORT" =>
"DESC"
449 "USER_ACTIVE" =>
"Y",
450 "SITE_ID" => array_merge($arLogSites,
array(
false))
454 array(
"USER_ID",
"SITE_ID",
"ENTITY_TYPE",
"ENTITY_ID",
"ENTITY_CB",
"ENTITY_MY",
"TRANSPORT",
"EVENT_ID"),
458 $arUnSubscribers =
array();
459 while ($arUnSubscriber = $dbUnSubscribers->Fetch())
461 $arUnSubscribers[] = $arUnSubscriber[
"USER_ID"].
"_".$arUnSubscriber[
"ENTITY_TYPE"].
"_".$arUnSubscriber[
"ENTITY_ID"].
"_".$arUnSubscriber[
"ENTITY_MY"].
"_".$arUnSubscriber[
"ENTITY_CB"].
"_".$arUnSubscriber[
"EVENT_ID"];
467 while ($arSubscriber = $dbSubscribers->Fetch())
470 is_array($arIntranetUsers)
471 && !in_array($arSubscriber[
"USER_ID"], $arIntranetUsers)
472 && !in_array($extranet_site_id, $arLogSites)
479 array_key_exists($arSubscriber[
"TRANSPORT"], $arSentUserID)
480 && in_array($arSubscriber[
"USER_ID"], $arSentUserID[$arSubscriber[
"TRANSPORT"]])
487 intval($arSubscriber[
"ENTITY_ID"]) != 0
488 && $arSubscriber[
"EVENT_ID"] ==
"all"
491 in_array($arSubscriber[
"USER_ID"].
"_".$arSubscriber[
"ENTITY_TYPE"].
"_".$arSubscriber[
"ENTITY_ID"].
"_N_".$arSubscriber[
"ENTITY_CB"].
"_".$arLogComment[
"EVENT_ID"], $arUnSubscribers)
492 || in_array($arSubscriber[
"USER_ID"].
"_".$arSubscriber[
"ENTITY_TYPE"].
"_".$arSubscriber[
"ENTITY_ID"].
"_Y_".$arSubscriber[
"ENTITY_CB"].
"_".$arLogComment[
"EVENT_ID"], $arUnSubscribers)
499 intval($arSubscriber[
"ENTITY_ID"]) == 0
500 && $arSubscriber[
"ENTITY_CB"] ==
"N"
501 && $arSubscriber[
"EVENT_ID"] !=
"all"
504 in_array($arSubscriber[
"USER_ID"].
"_".$arSubscriber[
"ENTITY_TYPE"].
"_".$arLogComment[
"ENTITY_ID"].
"_Y_N_all", $arUnSubscribers)
505 || in_array($arSubscriber[
"USER_ID"].
"_".$arSubscriber[
"ENTITY_TYPE"].
"_".$arLogComment[
"ENTITY_ID"].
"_N_N_all", $arUnSubscribers)
506 || in_array($arSubscriber[
"USER_ID"].
"_".$arSubscriber[
"ENTITY_TYPE"].
"_".$arLogComment[
"ENTITY_ID"].
"_Y_N_".$arLogComment[
"EVENT_ID"], $arUnSubscribers)
507 || in_array($arSubscriber[
"USER_ID"].
"_".$arSubscriber[
"ENTITY_TYPE"].
"_".$arLogComment[
"ENTITY_ID"].
"_N_N_".$arLogComment[
"EVENT_ID"], $arUnSubscribers)
514 $arSentUserID[$arSubscriber[
"TRANSPORT"]][] = $arSubscriber[
"USER_ID"];
527 && is_array($arIntranetUsers)
528 && CModule::IncludeModule(
"extranet")
531 $server_name =
$arSites[((!in_array($arSubscriber[
"USER_ID"], $arIntranetUsers) && $extranet_site_id) ? $extranet_site_id : $intranet_site_id)][
"SERVER_NAME"];
532 $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL_TO_SEND"] = str_replace(
533 array(
"#SERVER_NAME#",
"#GROUPS_PATH#"),
536 COption::GetOptionString(
"socialnetwork",
"workgroups_page",
false, ((!in_array($arSubscriber[
"USER_ID"], $arIntranetUsers) && $extranet_site_id) ? $extranet_site_id : $intranet_site_id))
538 $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL"]
543 $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL_TO_SEND"] = $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL"];
546 switch ($arSubscriber[
"TRANSPORT"])
550 array_key_exists(
"URL_TO_SEND", $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"])
551 && $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL_TO_SEND"] <>
''
552 ?
GetMessage(
"SONET_GLC_SEND_EVENT_LINK").$arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL_TO_SEND"]
556 $arMessageFields =
array(
557 "FROM_USER_ID" => ((
int)$arLogComment[
"USER_ID"] > 0 ? $arLogComment[
"USER_ID"] : 1),
558 "TO_USER_ID" => $arSubscriber[
"USER_ID"],
559 "MESSAGE" => $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"TITLE"].
" #BR# ".$arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"MESSAGE"].($link <>
'' ?
"#BR# ".$link :
""),
560 "=DATE_CREATE" =>
$DB->CurrentTimeFunction(),
567 $arFields[
"SUBSCRIBER_ID"] = $arSubscriber[
"USER_ID"];
568 $arFields[
"SUBSCRIBER_NAME"] = $arSubscriber[
"USER_NAME"];
569 $arFields[
"SUBSCRIBER_LAST_NAME"] = $arSubscriber[
"USER_LAST_NAME"];
570 $arFields[
"SUBSCRIBER_LOGIN"] = $arSubscriber[
"USER_LOGIN"];
571 $arFields[
"SUBSCRIBER_EMAIL"] = $arSubscriber[
"USER_EMAIL"];
572 $arFields[
"EMAIL_TO"] = $arSubscriber[
"USER_EMAIL"];
573 $arFields[
"TITLE"] = str_replace(
"#BR#",
"\n", $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"TITLE"]);
574 $arFields[
"MESSAGE"] = str_replace(
"#BR#",
"\n", $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"MESSAGE"]);
575 $arFields[
"ENTITY"] = $arLogComment[
"FIELDS_FORMATTED"][
"ENTITY"][
"FORMATTED"];
576 $arFields[
"ENTITY_TYPE"] = $arLogComment[
"FIELDS_FORMATTED"][
"ENTITY"][
"TYPE_MAIL"];
579 array_key_exists(
"URL_TO_SEND", $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"])
580 && $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL_TO_SEND"] <>
''
581 ? $arLogComment[
"FIELDS_FORMATTED"][
"EVENT_FORMATTED"][
"URL_TO_SEND"]
582 : $arLogComment[
"URL"]
585 if (CModule::IncludeModule(
"extranet"))
587 $arUserGroup = CUser::GetUserGroup($arSubscriber[
"USER_ID"]);
590 foreach ($arLogSites as $site_id_tmp)
596 CExtranet::IsExtranetSite($site_id_tmp)
597 && in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup)
601 !CExtranet::IsExtranetSite($site_id_tmp)
602 && !in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup)
622 $siteID = (defined(
"SITE_ID") ?
SITE_ID : $arSubscriber[
"SITE_ID"]);
625 $siteID = $arSubscriber[
"USER_LID"];
638 $arLogComment[
"EVENT_ID"] ===
"tasks_comment"
639 && !\
Bitrix\Socialnetwork\ComponentHelper::checkLivefeedTasksAllowed()
644 CUserCounter::IncrementWithSelect(
649 "FOR_ALL_ACCESS" => $bHasAccessAll
662 CUserCounter::IncrementWithSelect(
667 "FOR_ALL_ACCESS_ONLY" =>
true,
679 CUserCounter::IncrementWithSelect(
684 "FOR_ALL_ACCESS_ONLY" =>
false
777 if (!CModule::IncludeModule(
"im"))
782 if ($arCommentFields[
"EVENT_ID"] ===
'forum')
788 $db_events =
GetModuleEvents(
"socialnetwork",
"OnSendMentionGetEntityFields");
789 while ($arEvent = $db_events->Fetch())
801 && is_array($arTitleRes)
802 && !empty($arTitleRes[
"NOTIFY_MESSAGE"])
805 $arMessageFields =
array(
807 "FROM_USER_ID" => $arCommentFields[
"USER_ID"],
809 "NOTIFY_MODULE" => (!empty($arTitleRes[
"NOTIFY_MODULE"]) ? $arTitleRes[
"NOTIFY_MODULE"] :
"socialnetwork"),
810 "NOTIFY_EVENT" =>
"mention",
811 "NOTIFY_TAG" => (!empty($arTitleRes[
"NOTIFY_TAG"]) ? $arTitleRes[
"NOTIFY_TAG"] :
"LOG_COMMENT|COMMENT_MENTION|".$arCommentFields[
"ID"])
816 if(!empty($arMention))
818 $arExcludeUsers =
array($arCommentFields[
"USER_ID"]);
819 $collaberIds = array_filter($arMention,
static function (
$userId) {
822 return (
new \
Bitrix\Socialnetwork\Collab\User\User(
$userId))->isCollaber();
825 $arExcludeUsers = array_merge($arExcludeUsers, $collaberIds);
827 if (!empty($arCommentFields[
"LOG_ID"]))
829 $rsUnFollower = CSocNetLogFollow::GetList(
831 "CODE" =>
"L".$arCommentFields[
"LOG_ID"],
837 while ($arUnFollower = $rsUnFollower->Fetch())
839 $arExcludeUsers[] = $arUnFollower[
"USER_ID"];
843 $arSourceURL =
array(
844 "URL" => $arTitleRes[
"URL"]
846 if (!empty($arTitleRes[
"CRM_URL"]))
848 $arSourceURL[
"CRM_URL"] = $arTitleRes[
"CRM_URL"];
851 foreach ($arMention as $mentionUserID)
854 ($arTitleRes[
"IS_CRM"] ??
null) !==
"Y"
855 || COption::GetOptionString(
"crm",
"enable_livefeed_merge",
"N") ===
"Y"
862 && $arTitleRes[
"IS_CRM"] ===
"Y"
865 $dbLog = CSocNetLog::getList(
868 "ID" => $arCommentFields[
"LOG_ID"],
872 array(
"ID",
"MODULE_ID")
875 !($arLog =
$dbLog->fetch())
876 || $arLog[
"MODULE_ID"] !==
"crm_shared"
879 $bHaveRights =
false;
883 $bHaveCrmRights =
false;
887 && ($arTitleRes[
"IS_CRM"] ??
null) ===
"Y"
893 "ID" => $arCommentFields[
"LOG_ID"],
894 "ENTITY_TYPE" => $arCommentFields[
"ENTITY_TYPE"],
901 "CHECK_CRM_RIGHTS" =>
"Y",
902 "USER_ID" => $mentionUserID,
903 "USE_SUBSCRIBE" =>
"N"
906 if ($arLog =
$dbLog->fetch())
908 $bHaveCrmRights =
true;
913 in_array($mentionUserID, $arExcludeUsers)
914 || (!$bHaveRights && !$bHaveCrmRights)
924 !empty($arSourceURL[
"URL"])
925 || !empty($arSourceURL[
"CRM_URL"])
934 $arTitleRes[
"IS_CRM"] ===
"Y"
936 && !empty(
$arTmp[
"URLS"][
"CRM_URL"])
945 $serverName = (str_starts_with(
$url,
"http://") || str_starts_with(
$url,
"https://") ?
"" :
$arTmp[
"SERVER_NAME"]);
948 $arMessageFields[
"TO_USER_ID"] = $mentionUserID;
950 if (is_callable($arTitleRes[
'NOTIFY_MESSAGE']))
952 $messageClosure = $arTitleRes[
'NOTIFY_MESSAGE'];
953 $arMessageFields[
"NOTIFY_MESSAGE"] = fn (?
string $languageId =
null) => str_replace(
954 array(
"#url#",
"#server_name#"),
956 $messageClosure($languageId)
961 $arMessageFields[
"NOTIFY_MESSAGE"] = str_replace(
962 array(
"#url#",
"#server_name#"),
964 $arTitleRes[
"NOTIFY_MESSAGE"]
968 if (!empty($arTitleRes[
"NOTIFY_MESSAGE_OUT"]))
970 if (is_callable($arTitleRes[
"NOTIFY_MESSAGE_OUT"]))
972 $messageOutClosure = $arTitleRes[
"NOTIFY_MESSAGE_OUT"];
973 $arMessageFields[
"NOTIFY_MESSAGE_OUT"] = fn (?
string $languageId =
null) => str_replace(
974 array(
"#url#",
"#server_name#"),
976 $messageOutClosure($languageId)
981 $arMessageFields[
"NOTIFY_MESSAGE_OUT"] = str_replace(
982 array(
"#url#",
"#server_name#"),
984 $arTitleRes[
"NOTIFY_MESSAGE_OUT"]
990 $arMessageFields[
"NOTIFY_MESSAGE_OUT"] =
'';
993 CIMNotify::Add($arMessageFields);
996 $arMentionedDestCode =
array();
997 foreach($arMention as
$val)
999 $arMentionedDestCode[] =
"U".$val;
1003 "CONTEXT" =>
"mention",
1004 "CODE" => array_unique($arMentionedDestCode)