%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);
}
}
}
}
?>