• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/handlers.php
  • Класс: CIntranetEventHandlers
  • Вызов: CIntranetEventHandlers::AddComment_News
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
			)
	);
}