• Модуль: 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;
	}
}