- Модуль: timeman
- Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman_notify.php
- Класс: CTimeManNotify
- Вызов: CTimeManNotify::SendMessage
static function SendMessage($ENTRY_ID, $SEND_TYPE = false, $options = [])
{
global $DB, $APPLICATION, $USER;
$sendNotifications = true;
if (array_key_exists('SEND_NOTIFICATIONS', $options))
{
$sendNotifications = (bool)$options['SEND_NOTIFICATIONS'];
}
$ENTRY_ID = intval($ENTRY_ID);
if ($ENTRY_ID <= 0)
{
return false;
}
if(!CModule::IncludeModule("socialnetwork"))
{
return false;
}
$dbEntry = CTimeManEntry::GetList(
array(),
array(
"ID" => $ENTRY_ID
),
false,
false,
array("ID", "USER_ID", "DATE_START", "USER_GENDER", "INACTIVE_OR_ACTIVATED")
);
$arEntry = $dbEntry->Fetch();
if ($arEntry)
{
$arRights = self::GetRights($arEntry["USER_ID"]);
if (!$arRights)
{
return false;
}
$date = $DB->CurrentTimeFunction();
$arSoFields = Array(
"EVENT_ID" => "timeman_entry",
"=LOG_DATE" => $date,
"MODULE_ID" => "timeman",
"TITLE_TEMPLATE" => "#TITLE#",
"TITLE" => GetMessage("TIMEMAN_NOTIFY_TITLE"),
"MESSAGE" => '',
"TEXT_MESSAGE" => '',
"CALLBACK_FUNC" => false,
"SOURCE_ID" => $ENTRY_ID,
"SITE_ID" => SITE_ID,
"ENABLE_COMMENTS" => "Y", //!!!
"PARAMS" => serialize(array(
"FORUM_ID" => COption::GetOptionInt("timeman", "report_forum_id", "")
))
);
$sendFromUserId = null;
if (array_key_exists('SEND_FROM_USER_ID', $options) && $options['SEND_FROM_USER_ID'] > 0)
{
$sendFromUserId = (int)$options['SEND_FROM_USER_ID'];
}
$arSoFields["ENTITY_TYPE"] = SONET_TIMEMAN_ENTRY_ENTITY;
$arSoFields["ENTITY_ID"] = $arEntry["USER_ID"];
$arSoFields["USER_ID"] = $sendFromUserId === null ? $USER->GetID() : $sendFromUserId;
$dbRes = CSocNetLog::GetList(array(), array(
'ENTITY_TYPE' => $arSoFields['ENTITY_TYPE'],
'ENTITY_ID' => $arSoFields['ENTITY_ID'],
'EVENT_ID' => $arSoFields['EVENT_ID'],
'SOURCE_ID' => $arSoFields['SOURCE_ID'],
));
$arRes = $dbRes->Fetch();
$bSend = false;
if ($arRes)
{
$logID = $arRes['ID'];
if ($SEND_TYPE != 'A')
{
$arSoFields["=LOG_UPDATE"] = $date;
CSocNetLog::Update($logID, $arSoFields);
CSocNetLogFollow::DeleteByLogID($logID, "Y", true); // not only delete but update to NULL for existing records
$bSend = true;
if (IsModuleInstalled("im") && $sendNotifications)
{
$arEntry["LOG_ID"] = $logID;
$arEntry["DATE_TEXT"] = FormatDate("j F", MakeTimeStamp($arEntry["DATE_START"], FORMAT_DATETIME));
if ($SEND_TYPE == "U")
self::NotifyImApprove($arEntry);
else
self::NotifyImNew($arEntry);
}
}
}
else
{
if ($SEND_TYPE != 'U')
{
$logID = CSocNetLog::Add($arSoFields, false);
if (intval($logID) > 0)
{
CSocNetLog::Update($logID, array("TMP_ID" => $logID));
CSocNetLogRights::Add($logID, $arRights);
if (
$sendNotifications
&& $arEntry["INACTIVE_OR_ACTIVATED"] == "Y"
&& IsModuleInstalled("im")
)
{
$arEntry["LOG_ID"] = $logID;
$arEntry["DATE_TEXT"] = FormatDate("j F", MakeTimeStamp($arEntry["DATE_START"], FORMAT_DATETIME));
self::NotifyImNew($arEntry);
}
$bSend = true;
}
}
}
if ($bSend && intval($logID) > 0)
CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $logID);
return $logID;
}
}