• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools.php
  • Класс: CSocNetLogTools
  • Вызов: CSocNetLogTools::AddComment_Review_CreateRoot_Forum
static function AddComment_Review_CreateRoot_Forum($arElement, $forumID, $bPostFirstMessage = false, $strFirstMessage = "")
{
	global $DB;

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

	if ($bPostFirstMessage && $strFirstMessage == '')
		return false;

	// Add Topic
	$arUserStart = array(
		"ID" => intval($arElement["~CREATED_BY"]),
		"NAME" => $GLOBALS["FORUM_STATUS_NAME"]["guest"]
	);
	if ($arUserStart["ID"] > 0)
	{
		$res = array();
		$db_res = CForumUser::GetListEx(array(), array("USER_ID" => $arElement["~CREATED_BY"]));
		if ($db_res && $res = $db_res->Fetch()):
			$res["FORUM_USER_ID"] = intval($res["ID"]);
			$res["ID"] = $res["USER_ID"];
		else:
			$db_res = CUser::GetByID($arElement["~CREATED_BY"]);
			if ($db_res && $res = $db_res->Fetch()):
				$res["SHOW_NAME"] = COption::GetOptionString("forum", "USER_SHOW_NAME", "Y");
				$res["USER_PROFILE"] = "N";
			endif;
		endif;
		if (!empty($res)):
			$arUserStart = $res;
			$sName = ($res["SHOW_NAME"] == "Y" ? trim($res["NAME"]." ".$res["LAST_NAME"]) : "");
			$arUserStart["NAME"] = (empty($sName) ? trim($res["LOGIN"]) : $sName);
		endif;
	}
	$arUserStart["NAME"] = (empty($arUserStart["NAME"]) ? $GLOBALS["FORUM_STATUS_NAME"]["guest"] : $arUserStart["NAME"]);

	$DB->StartTransaction();
	$arFields = Array(
		"TITLE" => $arElement["~NAME"],
		"TAGS" => $arElement["~TAGS"],
		"FORUM_ID" => $forumID,
		"USER_START_ID" => $arUserStart["ID"],
		"USER_START_NAME" => $arUserStart["NAME"],
		"LAST_POSTER_NAME" => $arUserStart["NAME"],
		"APPROVED" => "Y",
		"XML_ID" => "IBLOCK_".$arElement["ID"]
	);

	if (
		isset($arElement["ENTITY_TYPE"])
		&& $arElement["ENTITY_TYPE"] == SONET_ENTITY_GROUP
		&& isset($arElement["ENTITY_ID"])
		&& intval($arElement["ENTITY_ID"]) > 0
	)
	{
		$arFields["SOCNET_GROUP_ID"] = intval($arElement["ENTITY_ID"]);
	}

	$TOPIC_ID = CForumTopic::Add($arFields);

	if ($bPostFirstMessage && intval($TOPIC_ID) > 0)
	{
		if (COption::GetOptionString("forum", "FILTER", "Y") == "Y")
			$strFirstMessage = CFilterUnquotableWords::Filter($strFirstMessage);

		// Add post as new message
		$arFields = Array(
			"POST_MESSAGE" => $strFirstMessage,
			"AUTHOR_ID" => $arUserStart["ID"],
			"AUTHOR_NAME" => $arUserStart["NAME"],
			"FORUM_ID" => $forumID,
			"TOPIC_ID" => $TOPIC_ID,
			"APPROVED" => "Y",
			"NEW_TOPIC" => "Y",
			"PARAM1" => "IB",
			"PARAM2" => intval($arElement["ID"])
		);
		$MID = CForumMessage::Add($arFields, false, array("SKIP_INDEXING" => "Y", "SKIP_STATISTIC" => "N"));

		if (intval($MID) <= 0)
		{
			$arError[] = array(
				"code" => "message is not added 1",
				"title" => GetMessage("F_ERR_ADD_MESSAGE"));
			CForumTopic::Delete($TOPIC_ID);
			$TOPIC_ID = 0;
		}
	}
	elseif (intval($TOPIC_ID) <= 0)
	{
		$DB->Rollback();
		return false;
	}

	$DB->Commit();

	return $TOPIC_ID;
}