• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman_notify.php
  • Класс: CTimeManNotify
  • Вызов: CTimeManNotify::AddCommentMessage
static function AddCommentMessage($arFields, $FORUM_ID, $arLog)
{
	global $USER, $DB, $USER_FIELD_MANAGER;

	$dbRes = CTimeManEntry::GetList([], ['ID' => $arLog['SOURCE_ID']]);
	$arEntry = $dbRes->Fetch();

	if ($arEntry && CModule::IncludeModule("forum"))
	{
		$ufFileID = [];
		$ufDocID = [];
		if (isset($arFields['FORUM_COMMENT_ADDED']) && $arFields['FORUM_COMMENT_ADDED'] === true && $arFields['MESSAGE_ID'])
		{
			$mess_id = $arFields['MESSAGE_ID'];
		}
		else
		{
			if (!$userName = trim($USER->GetFormattedName(false)))
			{
				$userName = $USER->GetLogin();
			}

			if (intval($arEntry["FORUM_TOPIC_ID"]) > 0)
			{
				if (!CForumTopic::GetByID($arEntry["FORUM_TOPIC_ID"]))
				{
					$arEntry["FORUM_TOPIC_ID"] = false;
				}
			}

			if (intval($arEntry["FORUM_TOPIC_ID"]) <= 0)
			{
				$t = ConvertTimeStamp(time(), "FULL");
				$arTopicFields = [
					"TITLE" => $arEntry["DATE_START"],
					"USER_START_ID" => $arFields["USER_ID"],
					"STATE" => "Y",
					"FORUM_ID" => $FORUM_ID,
					"USER_START_NAME" => $userName,
					"START_DATE" => $t,
					"POSTS" => 0,
					"VIEWS" => 0,
					"APPROVED" => "Y",
					"LAST_POSTER_NAME" => $userName,
					"LAST_POST_DATE" => $t,
					"LAST_MESSAGE_ID" => 0,
					"XML_ID" => "TIMEMAN_ENTRY_" . $arLog["SOURCE_ID"],
				];
				$TOPIC_ID = CForumTopic::Add($arTopicFields);
				if ($TOPIC_ID > 0)
				{
					CTimeManEntry::Update($arLog['SOURCE_ID'], ["FORUM_TOPIC_ID" => $TOPIC_ID]);
				}
			}
			else
			{
				$TOPIC_ID = $arEntry["FORUM_TOPIC_ID"];
			}

			if ($TOPIC_ID)
			{
				$arFieldsP = [
					"AUTHOR_ID" => $arFields["USER_ID"],
					"AUTHOR_NAME" => $userName,
					"POST_MESSAGE" => $arFields["TEXT_MESSAGE"],
					"POST_DATE" => date($DB->DateFormatToPHP(FORMAT_DATETIME), time() - 1),
					"FORUM_ID" => $FORUM_ID,
					"TOPIC_ID" => $TOPIC_ID,
					"APPROVED" => "Y",
					"PARAM2" => $arLog["SOURCE_ID"],
				];

				$USER_FIELD_MANAGER->EditFormAddFields("SONET_COMMENT", $arTmp);
				if (is_array($arTmp))
				{
					if (array_key_exists("UF_SONET_COM_DOC", $arTmp))
					{
						$GLOBALS["UF_FORUM_MESSAGE_DOC"] = $arTmp["UF_SONET_COM_DOC"];
					}
					elseif (array_key_exists("UF_SONET_COM_FILE", $arTmp))
					{
						$arFieldsP["FILES"] = [];
						foreach ($arTmp["UF_SONET_COM_FILE"] as $file_id)
						{
							$arFieldsP["FILES"][] = ["FILE_ID" => $file_id];
						}
					}
				}

				$USER_FIELD_MANAGER->EditFormAddFields("FORUM_MESSAGE", $arFieldsP);

				$mess_id = CForumMessage::Add($arFieldsP);

			}
		}
		// get UF DOC value and FILE_ID there
		if ($mess_id > 0)
		{
			$dbAddedMessageFiles = CForumFiles::GetList(["ID" => "ASC"], ["MESSAGE_ID" => $mess_id]);
			while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch())
			{
				$ufFileID[] = $arAddedMessageFiles["FILE_ID"];
			}

			$ufDocID = $USER_FIELD_MANAGER->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $mess_id, LANGUAGE_ID);
		}

		if (IsModuleInstalled("im"))
		{
			CTimeManNotify::AddCommentToIM([
				"USER_ID" => $arFields["USER_ID"],
				"ENTRY_ID" => $arEntry["ID"],
				"LOG_ID" => $arLog["ID"],
				"MESSAGE" => $arFields["TEXT_MESSAGE"],
			]);
		}

		return [
			"RATING_TYPE_ID" => "FORUM_POST",
			"RATING_ENTITY_ID" => $mess_id,
			"SOURCE_ID" => $mess_id,
			"UF" => [
				"FILE" => $ufFileID,
				"DOC" => $ufDocID,
			],
		];
	}

	return false;
}