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
)
);
}