• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools.php
  • Класс: CSocNetLogTools
  • Вызов: CSocNetLogTools::AddComment_Forum
static function AddComment_Forum($arFields)
{
	global $USER_FIELD_MANAGER, $USER;

	if (!CModule::IncludeModule("forum"))
	{
		return false;
	}

	$ufFileID = array();
	$ufDocID = array();

	$sNote = '';

	$dbResult = CSocNetLog::GetList(
		array(),
		array("ID" => $arFields["LOG_ID"]),
		false,
		false,
		array("ID", "SOURCE_ID", "SITE_ID", "TITLE", "PARAMS")
	);

	if ($arLog = $dbResult->Fetch())
	{
		$arMessage = CForumMessage::GetByID($arLog["SOURCE_ID"]);
		if ($arMessage)
		{
			$userID = $USER->GetID();
			$notificationSiteId = false;

			$arLogSites = array();
			$rsLogSite = CSocNetLog::GetSite($arLog["ID"]);
			while ($arLogSite = $rsLogSite->Fetch())
			{
				$arLogSites[] = $arLogSite["LID"];
				if (
					!$notificationSiteId
					&& (
						!CModule::IncludeModule('extranet')
						|| $arLogSite["LID"] != CExtranet::GetExtranetSiteID()
					)
				)
				{
					$notificationSiteId = $arLogSite["LID"];
				}
			}

			$bCurrentUserIsAdmin = CSocNetUser::IsCurrentUserModuleAdmin($arLogSites);

			if ($arFields["ENTITY_TYPE"] == SONET_ENTITY_GROUP)
			{
				if (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_GROUP, $arFields["ENTITY_ID"], "forum", "full", $bCurrentUserIsAdmin))
					$strPermission = "Y";
				elseif (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_GROUP, $arFields["ENTITY_ID"], "forum", "newtopic", $bCurrentUserIsAdmin))
					$strPermission = "M";
				elseif (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_GROUP, $arFields["ENTITY_ID"], "forum", "answer", $bCurrentUserIsAdmin))
					$strPermission = "I";
				elseif (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_GROUP, $arFields["ENTITY_ID"], "forum", "view", $bCurrentUserIsAdmin))
					$strPermission = "E";
			}
			else
			{
				if (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_USER, $arFields["ENTITY_ID"], "forum", "full", $bCurrentUserIsAdmin))
					$strPermission = "Y";
				elseif (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_USER, $arFields["ENTITY_ID"], "forum", "newtopic", $bCurrentUserIsAdmin))
					$strPermission = "M";
				elseif (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_USER, $arFields["ENTITY_ID"], "forum", "answer", $bCurrentUserIsAdmin))
					$strPermission = "I";
				elseif (CSocNetFeaturesPerms::CanPerformOperation($userID, SONET_ENTITY_USER, $arFields["ENTITY_ID"], "forum", "view", $bCurrentUserIsAdmin))
					$strPermission = "E";
			}

			$arFieldsMessage = array(
				"POST_MESSAGE" => $arFields["TEXT_MESSAGE"],
				"USE_SMILES" => "Y",
				"PERMISSION_EXTERNAL" => "Q",
				"PERMISSION" => $strPermission,
				"APPROVED" => "Y"
			);

			$arTmp = array();
			$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))
				{
					$arFieldsMessage["FILES"] = array();
					foreach($arTmp["UF_SONET_COM_FILE"] as $file_id)
					{
						$arFieldsMessage["FILES"][$file_id] = array("FILE_ID" => $file_id);
					}

					if (!empty($arFieldsMessage["FILES"]))
					{
						$arFileParams = array("FORUM_ID" => $arMessage["FORUM_ID"], "TOPIC_ID" => $arMessage["TOPIC_ID"]);
						if (CForumFiles::CheckFields($arFieldsMessage["FILES"], $arFileParams, "NOT_CHECK_DB"))
						{
							CForumFiles::Add(array_keys($arFieldsMessage["FILES"]), $arFileParams);
						}
					}
				}
			}

			$messageID = ForumAddMessage("REPLY", $arMessage["FORUM_ID"], $arMessage["TOPIC_ID"], 0, $arFieldsMessage, $sError, $sNote);
			unset($GLOBALS["UF_FORUM_MESSAGE_DOC"]);

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

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

			if (
				$messageID > 0
				&& CModule::IncludeModule("im")
				&& intval($arMessage["AUTHOR_ID"]) > 0
				&& $arMessage["AUTHOR_ID"] != $userID
			)
			{
				$rsUnFollower = CSocNetLogFollow::GetList(
					array(
						"USER_ID" => $arMessage["AUTHOR_ID"],
						"CODE" => "L".$arLog["ID"],
						"TYPE" => "N"
					),
					array("USER_ID")
				);

				$arUnFollower = $rsUnFollower->Fetch();
				if (!$arUnFollower)
				{
					$arMessageFields = array(
						"MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
						"TO_USER_ID" => $arMessage["AUTHOR_ID"],
						"FROM_USER_ID" => $userID,
						"LOG_ID" => $arLog["ID"],
						"NOTIFY_TYPE" => IM_NOTIFY_FROM,
						"NOTIFY_MODULE" => "forum",
						"NOTIFY_EVENT" => "comment",
					);

					$arParams["TITLE"] = str_replace(Array("rn", "n"), " ", $arLog["TITLE"]);
					$arParams["TITLE"] = TruncateText($arParams["TITLE"], 100);
					$arParams["TITLE_OUT"] = TruncateText($arParams["TITLE"], 255);

					$arParams["URL"] = "";
					if ($arLog["PARAMS"] <> '')
					{
						$arTmp = unserialize(htmlspecialcharsback($arLog["PARAMS"]), [ 'allowed_classes' => false ]);
						if (
							$arTmp
							&& array_key_exists("PATH_TO_MESSAGE", $arTmp)
						)
							$arParams["URL"] = CComponentEngine::MakePathFromTemplate(
								$arTmp["PATH_TO_MESSAGE"],
								array("MID" => $messageID)
							);
					}

					$arTmp = CSocNetLogTools::ProcessPath(array("MESSAGE_URL" => $arParams["URL"]), $arMessage["AUTHOR_ID"], $notificationSiteId);
					$serverName = $arTmp["SERVER_NAME"];
					$url = $arTmp["URLS"]["MESSAGE_URL"];

					$arMessageFields["NOTIFY_TAG"] = "FORUM|COMMENT|".$messageID;
					$arMessageFields["NOTIFY_MESSAGE"] = GetMessage("SONET_FORUM_IM_COMMENT", Array(
						"#title#" => (
							$url <> ''
								? "".htmlspecialcharsbx($arParams["TITLE"]).""
								: htmlspecialcharsbx($arParams["TITLE"])
						)
					));

					$arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage("SONET_FORUM_IM_COMMENT", Array(
						"#title#" => htmlspecialcharsbx($arParams["TITLE"])
					)).($url <> ''
						? " (".$serverName.$url.")"
						: ""
					)."#BR##BR#".$arFields["TEXT_MESSAGE"];

					CIMNotify::Add($arMessageFields);
				}
			}
		}
		else
		{
			$sError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR");
		}
	}
	else
	{
		$sError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR");
	}

	return array(
		"SOURCE_ID" => $messageID,
		"RATING_TYPE_ID" => "FORUM_POST",
		"RATING_ENTITY_ID" => $messageID,
		"ERROR" => $sError,
		"NOTES" => $sNote,
		"UF" => array(
			"FILE" => $ufFileID,
			"DOC" => $ufDocID
		)
	);
}