static function AddComment_News($arFields)
{
global $USER, $USER_FIELD_MANAGER;
if (
!CModule::IncludeModule("forum")
|| !CModule::IncludeModule("iblock")
|| !CModule::IncludeModule("socialnetwork")
)
{
return false;
}
$ufFileID = array();
$ufDocID = array();
$dbResult = CSocNetLog::GetList(
array("ID" => "DESC"),
array("TMP_ID" => $arFields["LOG_ID"]),
false,
false,
array("ID", "SOURCE_ID", "PARAMS")
);
$bFound = false;
if ($arLog = $dbResult->Fetch())
{
if (intval($arLog["SOURCE_ID"]) > 0)
{
$arFilter = array("ID" => $arLog["SOURCE_ID"]);
$arSelectedFields = array("IBLOCK_ID", "ID", "CREATED_BY", "NAME", "PROPERTY_FORUM_TOPIC_ID", "PROPERTY_FORUM_MESSAGE_CNT");
$db_res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelectedFields);
if ($db_res && $res = $db_res->GetNext())
{
$arElement = $res;
$val = COption::GetOptionString("intranet", "sonet_log_news_iblock_forum");
$arIBlockForum = (
$val <> ''
? unserialize($val, ["allowed_classes" => false])
: array()
);
if (array_key_exists($arElement["IBLOCK_ID"], $arIBlockForum))
{
$FORUM_ID = $arIBlockForum[$arElement["IBLOCK_ID"]];
}
if (intval($FORUM_ID) > 0)
{
CSocNetLogTools::AddComment_Review_CheckIBlock($arElement);
$dbMessage = CForumMessage::GetList(
array(),
array("PARAM2" => $arElement["ID"])
);
if (!$arMessage = $dbMessage->Fetch())
{
// Add Topic
$TOPIC_ID = CSocNetLogTools::AddComment_Review_CreateRoot($arElement, $FORUM_ID);
$bNewTopic = true;
}
else
{
$TOPIC_ID = $arMessage["TOPIC_ID"];
}
if(intval($TOPIC_ID) > 0)
{
// Add comment
$messageID = false;
$bError = false;
if (CForumMessage::CanUserAddMessage($TOPIC_ID, $USER->GetUserGroupArray(), $USER->GetID(), false))
{
$bSHOW_NAME = true;
if ($res = CForumUser::GetByUSER_ID($USER->GetID()))
{
$bSHOW_NAME = ($res["SHOW_NAME"] == "Y");
}
if ($bSHOW_NAME)
{
$AUTHOR_NAME = $USER->GetFullName();
}
if (Trim($AUTHOR_NAME) == '')
{
$AUTHOR_NAME = $USER->GetLogin();
}
if ($AUTHOR_NAME == '')
{
$bError = true;
}
}
if (!$bError)
{
$arFieldsMessage = Array(
"POST_MESSAGE" => $arFields["TEXT_MESSAGE"],
"USE_SMILES" => "Y",
"APPROVED" => "Y",
"PARAM2" => $arElement["ID"],
"AUTHOR_NAME" => $AUTHOR_NAME,
"AUTHOR_ID" => intval($USER->GetParam("USER_ID")),
"FORUM_ID" => $FORUM_ID,
"TOPIC_ID" => $TOPIC_ID,
"NEW_TOPIC" => "N",
"GUEST_ID" => $_SESSION["SESS_GUEST_ID"],
"ADD_TO_LOG" => "N"
);
$AUTHOR_IP = ForumGetRealIP();
$AUTHOR_IP_tmp = $AUTHOR_IP;
$AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR'];
if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y")
{
$AUTHOR_IP = @gethostbyaddr($AUTHOR_IP);
$AUTHOR_REAL_IP = (
$AUTHOR_IP_tmp == $AUTHOR_REAL_IP
? $AUTHOR_IP
: @gethostbyaddr($AUTHOR_REAL_IP)
);
}
$arFieldsMessage["AUTHOR_IP"] = ($AUTHOR_IP!==False) ? $AUTHOR_IP : "";
$arFieldsMessage["AUTHOR_REAL_IP"] = ($AUTHOR_REAL_IP!==False) ? $AUTHOR_REAL_IP : "";
$USER_FIELD_MANAGER->EditFormAddFields("SONET_COMMENT", $arTmp);
if (is_array($arTmp))
{
if (array_key_exists("UF_SONET_COM_DOC", $arTmp))
{
$arFieldsMessage["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 = CForumMessage::Add($arFieldsMessage, false);
if (intval($messageID) <= 0)
{
$bError = true;
}
else
{
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 (CModule::IncludeModule("statistic"))
{
$arForum = CForumNew::GetByID($FORUM_ID);
$F_EVENT1 = $arForum["EVENT1"];
$F_EVENT2 = $arForum["EVENT2"];
$F_EVENT3 = $arForum["EVENT3"];
if ($F_EVENT3 == '')
{
$arForumSite_tmp = CForumNew::GetSites($FORUM_ID);
$F_EVENT3 = CForumNew::PreparePath2Message($arForumSite_tmp[SITE_ID], array("FORUM_ID"=>$FORUM_ID, "TOPIC_ID"=>$TOPIC_ID, "MESSAGE_ID"=>$messageID));
}
CStatistic::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3);
}
CForumMessage::SendMailMessage($messageID, array(), false, "NEW_FORUM_MESSAGE");
CSocNetLogTools::AddComment_Review_UpdateElement($arElement, $TOPIC_ID, $bNewTopic);
}
}
}
}
}
}
}
if (intval($messageID) <= 0)
{
$strError = GetMessage("SONET_ADD_COMMENT_SOURCE_ERROR");
}
return array(
"SOURCE_ID" => $messageID,
"RATING_TYPE_ID" => "FORUM_POST",
"RATING_ENTITY_ID" => $messageID,
"ERROR" => $strError,
"NOTES" => "",
"UF" => array(
"FILE" => $ufFileID,
"DOC" => $ufDocID
)
);
}