• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman_report_full.php
  • Класс: CReportNotifications
  • Вызов: CReportNotifications::MessageUpdate
static function MessageUpdate($REPORT_ID, $arReport = array(), $arFields = array())
{
	global $DB,$USER;
	$curUser = $USER->GetID();
	if(CModule::IncludeModule("socialnetwork"))
	{
		$dbLog = CSocNetLog::GetList(Array(), Array("SOURCE_ID" => $REPORT_ID, "EVENT_ID" => "report"));
		if (!$arLog = $dbLog->Fetch())
			$LOG_ID = CReportNotifications::SendMessage($REPORT_ID, false);
		else
		{
			$LOG_ID = $arLog["ID"];
			CSocNetLog::Update($LOG_ID, Array(
				"USER_ID" => $curUser,
				"=LOG_DATE" => $DB->CurrentTimeFunction(),
				"=LOG_UPDATE" => $DB->CurrentTimeFunction()
			));

			CSocNetLogFollow::DeleteByLogID($LOG_ID, "Y", true); // not only delete but update to NULL for existing records

			CUserCounter::IncrementWithSelect(
				CSocNetLogCounter::GetSubSelect(
					$LOG_ID,
					$arLog["ENTITY_TYPE"],
					$arLog["ENTITY_ID"],
					$arLog["EVENT_ID"],
					$arLog["USER_ID"]
				)
			);
		}

		if (
			CModule::IncludeModule("im")
			&& is_array($arFields)
			&& is_array($arReport)
			&& intval($arReport["USER_ID"] ?? null) > 0
			&& $arReport["USER_ID"] != $curUser
		)
		{
			$date_from = FormatDate("j F", MakeTimeStamp($arReport["DATE_FROM"], CSite::GetDateFormat("FULL", SITE_ID)));
			$date_to = FormatDate("j F", MakeTimeStamp($arReport["DATE_TO"], CSite::GetDateFormat("FULL", SITE_ID)));
			if ($date_from == $date_to)
				$date_text = $date_to;
			else
				$date_text = $date_from." - ".$date_to;

			$arMessageFields = array(
				"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
				"TO_USER_ID" => $arReport["USER_ID"],
				"FROM_USER_ID" => $curUser,
				"NOTIFY_TYPE" => IM_NOTIFY_FROM,
				"NOTIFY_MODULE" => "timeman",
				"NOTIFY_EVENT" => "report_approve",
				"NOTIFY_TAG" => "TIMEMAN|REPORT|".$arReport["ID"]."_".$arFields["MARK"],
			);

			$gender_suffix = "";
			$dbUser = CUser::GetByID($curUser);
			if ($arUser = $dbUser->Fetch())
			{
				switch ($arUser["PERSONAL_GENDER"])
				{
					case "M":
						$gender_suffix = "_M";
						break;
					case "F":
						$gender_suffix = "_F";
						break;
					default:
						$gender_suffix = "";
				}
			}

			$reports_page = COption::GetOptionString("timeman", "WORK_REPORT_PATH", "/timeman/work_report.php");

			$arTmp = CSocNetLogTools::ProcessPath(array("REPORTS_PAGE" => $reports_page), $arReport["USER_ID"]);

			switch ($arFields["MARK"])
			{
				case "G":
					$mark = "G";
					break;
				case "B":
					$mark = "B";
					break;
				case "X":
					$mark = "X";
					break;
				default:
					$mark = "N";
			}
			$arMessageFields["NOTIFY_MESSAGE"] = GetMessage("REPORT_FULL_IM_APPROVE".$gender_suffix."_".$mark, Array(
				"#period#" => "".htmlspecialcharsbx($date_text)."",
			));

			$arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage("REPORT_FULL_IM_APPROVE".$gender_suffix."_".$mark, Array(
				"#period#" => htmlspecialcharsbx($date_text),
			))." ( ".$arTmp["SERVER_NAME"].$arTmp["URLS"]["REPORTS_PAGE"]."#user_id=".$arReport["USER_ID"]."&report=".$REPORT_ID." )";

			CIMNotify::Add($arMessageFields);
		}

		$dbLogRights = CSocNetLogRights::GetList(Array(),Array("LOG_ID"=>$LOG_ID));
		while($arRight = $dbLogRights->Fetch())
			$arRights[] = $arRight["GROUP_CODE"];

		if(!in_array("U".$curUser,$arRights))
			CSocNetLogRights::Add($LOG_ID,"U".$curUser);

		return $LOG_ID;
	}
	else
		return false;
}