%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/calendar/classes/general/ |
Current File : //home/bitrix/www/bitrix/modules/calendar/classes/general/calendar_notify.php |
<? /** var CMain $APPLICATION */ IncludeModuleLangFile(__FILE__); use Bitrix\Main\Localization\Loc; class CCalendarNotify { const PUSH_MESSAGE_MAX_LENGTH = 255; public static function Send($params) { if (!\Bitrix\Main\Loader::includeModule("im")) return false; $params['rrule'] = CCalendarEvent::GetRRULEDescription($params['fields'], false, false); $params["eventId"] = intVal($params["eventId"]); $mode = $params['mode']; $fromUser = intVal($params["userId"]); $toUser = intVal($params["guestId"]); if (!$fromUser || !$toUser || ($toUser == $fromUser && $mode !== 'status_accept' && $mode !== 'status_decline')) return false; if ($params['fields']['DT_SKIP_TIME'] == 'Y') { $params["from"] = CCalendar::Date(CCalendar::Timestamp($params["from"]), false); } else { $params["from"] = CCalendar::Date(CCalendar::Timestamp($params["from"]), true, true, true); } $notifyFields = array( 'EMAIL_TEMPLATE' => "CALENDAR_INVITATION", 'NOTIFY_MODULE' => "calendar", ); if ($mode == 'accept' || $mode == 'decline') { $notifyFields['FROM_USER_ID'] = $toUser; $notifyFields['TO_USER_ID'] = $fromUser; } else { $notifyFields['FROM_USER_ID'] = $fromUser; $notifyFields['TO_USER_ID'] = $toUser; } $rs = CUser::GetList(($by="id"), ($order="asc"), ["ID_EQUAL_EXACT"=>$toUser, "ACTIVE" => "Y"]); if (!$rs->Fetch()) return false; $eventId = intVal($params["eventId"]); $params["pathToCalendar"] = CCalendar::GetPathForCalendarEx($notifyFields['TO_USER_ID']); if ($params["pathToCalendar"] && $eventId) { $params["pathToCalendar"] = CHTTP::urlDeleteParams($params["pathToCalendar"], ["action", "sessid", "bx_event_calendar_request", "EVENT_ID"]); $params["pathToEvent"] = CHTTP::urlAddParams($params["pathToCalendar"], ['EVENT_ID' => $eventId]); } $notifyFields = array( 'FROM_USER_ID' => $fromUser, 'TO_USER_ID' => $toUser, 'EMAIL_TEMPLATE' => "CALENDAR_INVITATION", 'NOTIFY_MODULE' => "calendar", ); switch($mode) { case 'invite': $notifyFields = self::Invite($notifyFields, $params); break; case 'change_notify': $notifyFields = self::ChangeNotify($notifyFields, $params); break; case 'cancel': $notifyFields = self::Cancel($notifyFields, $params); break; case 'cancel_this': $notifyFields = self::CancelInstance($notifyFields, $params); break; case 'cancel_all': $notifyFields = self::CancelAllReccurent($notifyFields, $params); break; case 'accept': case 'decline': $notifyFields = self::MeetingStatus($notifyFields, $params); break; case 'status_accept': case 'status_decline': $notifyFields = self::MeetingStatusInfo($notifyFields, $params); break; } $messageId = CIMNotify::Add($notifyFields); if ($params['markRead'] && $messageId > 0) { $CIMNotify = new CIMNotify(intVal($params["userId"])); $CIMNotify->MarkNotifyRead($messageId); } foreach(GetModuleEvents("calendar", "OnSendInvitationMessage", true) as $arEvent) { ExecuteModuleEventEx($arEvent, [$params]); } } public static function Invite($fields = [], $params) { $fields['NOTIFY_EVENT'] = "invite"; $fields['NOTIFY_TYPE'] = IM_NOTIFY_CONFIRM; $fields['NOTIFY_TAG'] = "CALENDAR|INVITE|".$params['eventId']."|".$fields['TO_USER_ID']; $fields['NOTIFY_SUB_TAG'] = "CALENDAR|INVITE|".$params['eventId']; if ($params['rrule']) { $fromTs = CCalendar::Timestamp($params['fields']['DATE_FROM']); $toTs = CCalendar::Timestamp($params['fields']['DATE_TO']); if ($params['fields']['DT_SKIP_TIME'] == "Y") { $toTs += CCalendar::DAY_LENGTH; } else { $fromTs = $fromTs - CCalendar::GetTimezoneOffset($params['fields']['TZ_FROM']) + CCalendar::GetCurrentOffsetUTC($fields['TO_USER_ID']); $toTs = $toTs - CCalendar::GetTimezoneOffset($params['fields']['TZ_TO']) + CCalendar::GetCurrentOffsetUTC($fields['TO_USER_ID']); } $params['from_to_html'] = CCalendar::GetFromToHtml( $fromTs, $toTs, $params['fields']['DT_SKIP_TIME'] == 'Y', $params['fields']['DT_LENGTH'], true ); $fields['MESSAGE'] = Loc::getMessage('EC_MESS_REC_INVITE_SITE', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params['from_to_html'], '#RRULE#' => $params["rrule"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_MESS_REC_INVITE', array( '#OWNER_NAME#' => CCalendar::GetUserName($params['userId']), '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params['from_to_html'], '#RRULE#' => $params["rrule"] )); } else { $fields['MESSAGE'] = Loc::getMessage('EC_MESS_INVITE_SITE', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_MESS_INVITE', array( '#OWNER_NAME#' => CCalendar::GetUserName($params['userId']), '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] )); } if ($params['location'] != "") { $fields['MESSAGE'] .= "\n\n".Loc::getMessage('EC_LOCATION').': '.$params['location']; $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_LOCATION').': '.$params['location']; } $fields['PUSH_MESSAGE'] = str_replace( ['[B]', '[/B]'], ['', ''], $fields['MESSAGE'] ); $fields['MESSAGE'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_DETAILS_SITE', ['#LINK#' => $params["pathToEvent"]]); $fields['NOTIFY_BUTTONS'] = Array( ['TITLE' => Loc::getMessage('EC_MESS_INVITE_CONF_Y_SITE'), 'VALUE' => 'Y', 'TYPE' => 'accept'], ['TITLE' => Loc::getMessage('EC_MESS_INVITE_CONF_N_SITE'), 'VALUE' => 'N', 'TYPE' => 'cancel'] ); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_CONF_Y', ['#LINK#' => $params["pathToEvent"].'&CONFIRM=Y']); $fields['MESSAGE_OUT'] .= "\n".Loc::getMessage('EC_MESS_INVITE_CONF_N', ['#LINK#' => $params["pathToEvent"].'&CONFIRM=N']); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_DETAILS', ['#LINK#' => $params["pathToEvent"]]); $fields['TITLE'] = Loc::getMessage('EC_MESS_INVITE_TITLE', array( '#OWNER_NAME#' => CCalendar::GetUserName($params['userId']), '#TITLE#' => $params["name"] ) ); return $fields; } public static function ChangeNotify($fields = [], $params) { $fields['NOTIFY_EVENT'] = "change"; $fields['NOTIFY_TAG'] = "CALENDAR|INVITE|".$params['eventId']."|".$fields['TO_USER_ID']; $fields['NOTIFY_SUB_TAG'] = "CALENDAR|INVITE|".$params['eventId']; // $fields['MESSAGE'] = Loc::getMessage('EC_MESS_INVITE_CHANGED_SITE', // array( // '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", // '#ACTIVE_FROM#' => $params["from"] // ) // ); // // $fields['MESSAGE_OUT'] = Loc::getMessage('EC_MESS_INVITE_CHANGED', // array( // '#OWNER_NAME#' => CCalendar::GetUserName($params['userId']), // '#TITLE#' => $params["name"], // '#ACTIVE_FROM#' => $params["from"] // ) // ); // Was changed only one field in this case we could be more specific if (count($params['entryChanges']) == 1) { $change = $params['entryChanges'][0]; switch($change['fieldKey']) { case 'NAME': $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_TITLE_CHANGED', array( '#OLD_TITLE#' => $change['oldValue'], '#NEW_TITLE#' => "[url=".$params["pathToEvent"]."]".$change['newValue']."[/url]", '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_TITLE_CHANGED', array( '#OLD_TITLE#' => $change['oldValue'], '#NEW_TITLE#' => $change['newValue'], '#ACTIVE_FROM#' => $params["from"] ) ); break; case 'DATE_FROM': $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_DATE_FROM_CHANGED', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#OLD_DATE_FROM#' => $change['oldValue'], '#NEW_DATE_FROM#' => $change['newValue'] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_DATE_FROM_CHANGED', array( '#TITLE#' => $params["name"], '#OLD_DATE_FROM#' => $change['oldValue'], '#NEW_DATE_FROM#' => $change['newValue'] ) ); break; case 'DATE_TO': $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_DATE_TO_CHANGED', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#OLD_DATE_TO#' => $change['oldValue'], '#NEW_DATE_TO#' => $change['newValue'] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_DATE_TO_CHANGED', array( '#TITLE#' => $params["name"], '#OLD_DATE_TO#' => $change['oldValue'], '#NEW_DATE_TO#' => $change['newValue'] ) ); break; case 'LOCATION': $locationMessageCode = empty($change['newValue']) ? 'EC_NOTIFY_LOCATION_CHANGED_NONE' : 'EC_NOTIFY_LOCATION_CHANGED'; $fields['MESSAGE'] = Loc::getMessage($locationMessageCode, array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"], '#NEW_VALUE#' => $change['newValue'] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage($locationMessageCode, array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"], '#NEW_VALUE#' => $change['newValue'] ) ); break; case 'ATTENDEES': $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_ATTENDEES_CHANGED', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_ATTENDEES_CHANGED', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); break; case 'DESCRIPTION': $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_DESCRIPTION_CHANGED', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_DESCRIPTION_CHANGED', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); break; case 'RRULE': case 'EXDATE': $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_RRULE_CHANGED', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]" ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_RRULE_CHANGED', array( '#TITLE#' => $params["name"] ) ); break; case 'IMPORTANCE': $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_IMPORTANCE_CHANGED', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_IMPORTANCE_CHANGED', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); break; } } else // Two or more changes { $changedFieldsList = []; foreach ($params['entryChanges'] as $change) { $key = $change['fieldKey']; if ($key == 'EXDATE') { $key = 'RRULE'; } $changedFieldsList[] = Loc::getMessage('EC_NOTIFY_FIELD_'.$key); } $changedFieldsListMessage = implode(', ', array_unique($changedFieldsList)); $fields['MESSAGE'] = Loc::getMessage('EC_NOTIFY_ENTRY_CHANGED', [ '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"], '#CHANGED_FIELDS_LIST#' => $changedFieldsListMessage ] ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_NOTIFY_ENTRY_CHANGED', [ '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"], '#CHANGED_FIELDS_LIST#' => $changedFieldsListMessage ] ); } $fields['MESSAGE'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_DETAILS_SITE', ['#LINK#' => $params["pathToEvent"]]); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_DETAILS', ['#LINK#' => $params["pathToEvent"]]); $fields['TITLE'] = Loc::getMessage('EC_MESS_INVITE_CHANGED_TITLE',['#TITLE#' => $params["name"]]); return $fields; } public static function Cancel($fields = [], $params) { $fields['NOTIFY_EVENT'] = "change"; $fields['NOTIFY_TAG'] = "CALENDAR|INVITE|".$params['eventId']."|".$fields['TO_USER_ID']."|cancel"; $fields['NOTIFY_SUB_TAG'] = "CALENDAR|INVITE|".$params['eventId']; $fields['MESSAGE'] = Loc::getMessage('EC_MESS_INVITE_CANCEL_SITE', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_MESS_INVITE_CANCEL', array( '#OWNER_NAME#' => CCalendar::GetUserName($params['userId']), '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE'] .= "\n\n".Loc::getMessage('EC_MESS_VIEW_OWN_CALENDAR', ['#LINK#' => $params["pathToCalendar"]]); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_VIEW_OWN_CALENDAR_OUT', ['#LINK#' => $params["pathToCalendar"]]); $fields['TITLE'] = Loc::getMessage('EC_MESS_INVITE_CANCEL_TITLE', ['#TITLE#' => $params["name"]]); return $fields; } public static function CancelInstance($fields = [], $params) { $fields['NOTIFY_EVENT'] = "change"; $fields['NOTIFY_TAG'] = "CALENDAR|INVITE|".$params['eventId']."|".$params["from"]."|".$fields['TO_USER_ID']."|cancel"; $fields['NOTIFY_SUB_TAG'] = "CALENDAR|INVITE|".$params['eventId']; $fields['MESSAGE'] = Loc::getMessage('EC_MESS_REC_THIS_CANCEL_SITE', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_MESS_REC_THIS_CANCEL', array( '#OWNER_NAME#' => CCalendar::GetUserName($params['userId']), '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE'] .= "\n\n".Loc::getMessage('EC_MESS_VIEW_OWN_CALENDAR', ['#LINK#' => $params["pathToCalendar"]]); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_VIEW_OWN_CALENDAR_OUT', ['#LINK#' => $params["pathToCalendar"]]); $fields['TITLE'] = Loc::getMessage('EC_MESS_INVITE_CANCEL_TITLE', ['#TITLE#' => $params["name"]]); return $fields; } public static function CancelAllReccurent($fields = [], $params) { $fields['NOTIFY_EVENT'] = "change"; $fields['NOTIFY_TAG'] = "CALENDAR|INVITE|".$params['eventId']."|".$fields['TO_USER_ID']."|cancel"; $fields['NOTIFY_SUB_TAG'] = "CALENDAR|INVITE|".$params['eventId']; $fields['MESSAGE'] = Loc::getMessage('EC_MESS_REC_ALL_CANCEL_SITE', array( '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage('EC_MESS_REC_ALL_CANCEL', array( '#OWNER_NAME#' => CCalendar::GetUserName($params['userId']), '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE'] .= "\n\n".Loc::getMessage('EC_MESS_VIEW_OWN_CALENDAR', ['#LINK#' => $params["pathToCalendar"]]); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_VIEW_OWN_CALENDAR_OUT', ['#LINK#' => $params["pathToCalendar"]]); $fields['TITLE'] = Loc::getMessage('EC_MESS_INVITE_CANCEL_TITLE', ['#TITLE#' => $params["name"]]); return $fields; } public static function MeetingStatus($fields = [], $params) { $fields['NOTIFY_EVENT'] = "info"; $fields['FROM_USER_ID'] = intVal($params["guestId"]); $fields['TO_USER_ID'] = intVal($params["userId"]); $fields['NOTIFY_TAG'] = "CALENDAR|INVITE|".$params['eventId']."|".$params['mode']; $fields['NOTIFY_SUB_TAG'] = "CALENDAR|INVITE|".$params['eventId']; $fields['MESSAGE'] = Loc::getMessage($params['mode'] == 'accept' ? 'EC_MESS_INVITE_ACCEPTED_SITE' : 'EC_MESS_INVITE_DECLINED_SITE', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage($params['mode']=='accept' ? 'EC_MESS_INVITE_ACCEPTED' : 'EC_MESS_INVITE_DECLINED', array( '#GUEST_NAME#' => CCalendar::GetUserName($params['guestId']), '#TITLE#' => $params["name"], '#ACTIVE_FROM#' => $params["from"] ) ); if ($params["comment"] != "") { $fields['MESSAGE'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_ACC_COMMENT', array( '#COMMENT#' => $params["comment"] )); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_ACC_COMMENT', array( '#COMMENT#' => $params["comment"] )); } $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_DETAILS', ['#LINK#' => $params["pathToEvent"]]); return $fields; } public static function MeetingStatusInfo($fields = [], $params) { $fields['NOTIFY_EVENT'] = "info"; $fields['FROM_USER_ID'] = intVal($params["guestId"]); $fields['TO_USER_ID'] = intVal($params["userId"]); $fields['NOTIFY_TAG'] = "CALENDAR|STATUS|".$params['eventId']."|".intVal($params["userId"]); $fields['NOTIFY_SUB_TAG'] = "CALENDAR|STATUS|".$params['eventId']; $fields['MESSAGE'] = Loc::getMessage($params['mode'] =='status_accept' ? 'EC_MESS_STATUS_NOTIFY_Y_SITE' : 'EC_MESS_STATUS_NOTIFY_N_SITE', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] = Loc::getMessage($params['mode'] == 'status_accept' ? 'EC_MESS_STATUS_NOTIFY_Y' : 'EC_MESS_STATUS_NOTIFY_N', array( '#TITLE#' => "[url=".$params["pathToEvent"]."]".$params["name"]."[/url]", '#ACTIVE_FROM#' => $params["from"] ) ); $fields['MESSAGE_OUT'] .= "\n\n".Loc::getMessage('EC_MESS_INVITE_DETAILS', ['#LINK#' => $params["pathToEvent"]]); return $fields; } public static function NotifyComment($eventId, $params) { if (!\Bitrix\Main\Loader::includeModule("im") || intval($eventId) <= 0) { return; } $userId = intval($params["USER_ID"]); if ($event = CCalendarEvent::GetById($eventId)) { $instanceDate = false; if ( !isset($params['LOG']) && \Bitrix\Main\Loader::includeModule('socialnetwork') ) { $dbResult = CSocNetLog::GetList( [], ["ID" => $params["LOG_ID"]], false, false, ["ID", "SOURCE_ID", "PARAMS"] ); $arLog = $dbResult->Fetch(); } else { $arLog = $params['LOG']; } if ($arLog) { if ($arLog['PARAMS'] != "") { $arLog['PARAMS'] = unserialize($arLog['PARAMS']); if (!is_array($arLog['PARAMS'])) $arLog['PARAMS'] = []; } if (isset($arLog['PARAMS']['COMMENT_XML_ID']) && $arLog['PARAMS']['COMMENT_XML_ID']) { $instanceDate = CCalendarEvent::ExtractDateFromCommentXmlId($arLog['PARAMS']['COMMENT_XML_ID']); } } $rsUser = CUser::GetList( $by = 'id', $order = 'asc', ['ID_EQUAL_EXACT' => $userId], ['FIELDS' => ['PERSONAL_GENDER']] ); $strMsgAddComment = Loc::getMessage('EC_LF_COMMENT_MESSAGE_ADD'); $strMsgAddComment_Q = Loc::getMessage('EC_LF_COMMENT_MESSAGE_ADD_Q'); if ($arUser = $rsUser->fetch()) { switch ($arUser['PERSONAL_GENDER']) { case "F": case "M": $strMsgAddComment = Loc::getMessage('EC_LF_COMMENT_MESSAGE_ADD_'.$arUser['PERSONAL_GENDER']); $strMsgAddComment_Q = Loc::getMessage('EC_LF_COMMENT_MESSAGE_ADD_Q_'.$arUser['PERSONAL_GENDER']); break; default: break; } } $imMessageFields = array( "FROM_USER_ID" => $userId, "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "calendar", "NOTIFY_EVENT" => "event_comment" ); $aId = isset($event['PARENT_ID']) ? $event['PARENT_ID'] : $event['ID']; $attendees = CCalendarEvent::GetAttendees($aId); if (is_array($attendees) && is_array($attendees[$aId])) { if (!$instanceDate) { $instanceDate = CCalendar::Date(CCalendar::Timestamp($event['DATE_FROM']), false); } $attendees = $attendees[$aId]; $excludeUserIdList = []; if ( $arLog && \Bitrix\Main\Loader::includeModule('socialnetwork') ) { $res = \Bitrix\Socialnetwork\LogFollowTable::getList(array( 'filter' => array( "=CODE" => "L".$arLog['ID'], "=TYPE" => "N" ), 'select' => ['USER_ID'] )); while ($unFollower = $res->fetch()) { $excludeUserIdList[] = $unFollower["USER_ID"]; } } foreach($attendees as $attendee) { if (in_array($attendee["USER_ID"], $excludeUserIdList)) { continue; } $url = CCalendar::GetPathForCalendarEx($attendee["USER_ID"]); $url = CHTTP::urlAddParams($url, ['EVENT_ID' => $eventId, 'EVENT_DATE' => $instanceDate]); if ($attendee["USER_ID"] != $userId && $attendee["STATUS"] != 'N') { $imMessageFields = array_merge($imMessageFields, ["TO_USER_ID" => $attendee["USER_ID"]]); if ($attendee["STATUS"] == 'Q') { $imMessageFields["NOTIFY_MESSAGE"] = str_replace( ["#EVENT_TITLE#"], [strlen($url) > 0 ? "<a href=\"".$url."\" class=\"bx-notifier-item-action\">".$event["NAME"]."</a>" : $event["NAME"]], $strMsgAddComment_Q ); $imMessageFields["NOTIFY_MESSAGE_OUT"] = str_replace( ["#EVENT_TITLE#"], [$event["NAME"]], $strMsgAddComment_Q ).(strlen($url) > 0 ? " (".$url.")" : "")."#BR##BR#".$params["MESSAGE"]; } else { $imMessageFields["NOTIFY_MESSAGE"] = str_replace( ["#EVENT_TITLE#"], [strlen($url) > 0 ? "<a href=\"".$url."\" class=\"bx-notifier-item-action\">".$event["NAME"]."</a>" : $event["NAME"]], $strMsgAddComment ); $imMessageFields["NOTIFY_MESSAGE_OUT"] = str_replace( ["#EVENT_TITLE#"], [$event["NAME"]], $strMsgAddComment ).(strlen($url) > 0 ? " (".$url.")" : "")."#BR##BR#".$params["MESSAGE"]; } $imMessageFields["NOTIFY_TAG"] = "CALENDAR|COMMENT|".$aId."|".$instanceDate; CIMNotify::Add($imMessageFields); } } } } } public static function ClearNotifications($eventId = false, $userId = false) { if (\Bitrix\Main\Loader::includeModule("im")) { if ($eventId && $eventId) { CIMNotify::DeleteByTag("CALENDAR|INVITE|".$eventId."|".$userId); CIMNotify::DeleteByTag("CALENDAR|STATUS|".$eventId."|".$userId); } elseif($eventId) { CIMNotify::DeleteBySubTag("CALENDAR|INVITE|".$eventId); CIMNotify::DeleteBySubTag("CALENDAR|STATUS|".$eventId); } } } } ?>