• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/mysql/message.php
  • Класс: CForumMessage
  • Вызов: CForumMessage::Add
static function Add($arFields, $strUploadDir = false, $arParams = array())
{
	global $DB, $USER_FIELD_MANAGER;

	$strUploadDir = ($strUploadDir === false ? "forum/upload" : $strUploadDir);

	if (!CForumMessage::CheckFields("ADD", $arFields))
		return false;

	$arForum = CForumNew::GetByID($arFields["FORUM_ID"]);
	$arParams["SKIP_STATISTIC"] = (isset($arParams["SKIP_STATISTIC"]) && $arParams["SKIP_STATISTIC"] == "Y" ? "Y" : "N");
	$arParams["SKIP_INDEXING"] = $arParams["SKIP_INDEXING"] ?? 'N';
	$arParams["SKIP_INDEXING"] = ($arParams["SKIP_INDEXING"] == "Y" || $arForum["INDEXATION"] != "Y"     ? "Y" : "N");

	$POST_MESSAGE = $arFields["POST_MESSAGE"];
	$parser = new forumTextParser(LANGUAGE_ID);
	$allow = forumTextParser::GetFeatures($arForum);
	$allow['SMILES'] = (($arFields["USE_SMILES"] != "Y") ? 'N' : $allow['SMILES']);
	if (COption::GetOptionString("forum", "FILTER", "Y") == "Y")
	{
		$POST_MESSAGE = CFilterUnquotableWords::Filter($POST_MESSAGE);
		$arFields["POST_MESSAGE_FILTER"] = (empty($POST_MESSAGE) ? "*" : $POST_MESSAGE);
	}
/***************** Attach ******************************************/
	$arFiles = array();
	if (isset($arFields["ATTACH_IMG"]) && is_array($arFields["ATTACH_IMG"]))
		$arFields["FILES"] = array($arFields["ATTACH_IMG"]);
	unset($arFields["ATTACH_IMG"]);
	if (!empty($arFields["FILES"]) && is_array($arFields["FILES"]))
	{
		$res = array("FORUM_ID" => $arFields["FORUM_ID"], "USER_ID" => $arFields["AUTHOR_ID"], "upload_dir" => $strUploadDir);
		$arFiles = CForumFiles::Save($arFields["FILES"], $res, false);
		if (!empty($arFiles))
		{
			$arFiles = array_keys($arFiles);
			sort($arFiles);
			$arFields["ATTACH_IMG"] = $arFiles[0];
			$arFields["ATTACHED_FILES"] = $arFiles;
		}
		unset($arFields["FILES"]);
	}
/***************** Attach/******************************************/
	if (COption::GetOptionString("forum", "MESSAGE_HTML", "N") == "Y")
		$POST_MESSAGE = $parser->convert($POST_MESSAGE, $allow, "html", $arFiles);
	$arFields["POST_MESSAGE_HTML"] = $POST_MESSAGE;
/***************** Event onBeforeMessageAdd ************************/
	foreach(GetModuleEvents("forum", "onBeforeMessageAdd", true) as $arEvent)
	{
		if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$strUploadDir)) === false)
			return false;
	}
/***************** /Event ******************************************/
	if (empty($arFields))
		return false;
	$arInsert = $DB->PrepareInsert("b_forum_message", $arFields, $strUploadDir);

	$strDatePostField = "";
	$strDatePostValue = "";
	if (!is_set($arFields, "POST_DATE"))
	{
		$strDatePostField = ", POST_DATE";
		$strDatePostValue = ", ".$DB->GetNowFunction()."";
	}

	$strSql = "INSERT INTO b_forum_message(".$arInsert[0].$strDatePostField.") VALUES(".$arInsert[1].$strDatePostValue.")";
	$DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); $ID = intval($DB->LastID()); /***************** Attach ******************************************/ if (!empty($arFiles)) CForumFiles::UpdateByID($arFiles, array("FORUM_ID" => $arFields["FORUM_ID"], "TOPIC_ID" => $arFields["TOPIC_ID"], "MESSAGE_ID" => $ID)); /***************** Attach/******************************************/ $USER_FIELD_MANAGER->Update("FORUM_MESSAGE", $ID, $arFields, (array_key_exists("USER_ID", $arFields) ? $arFields["USER_ID"] : false)); $arMessage = CForumMessage::GetByIDEx($ID, array("GET_FORUM_INFO" => "N", "GET_TOPIC_INFO" => "Y", "FILTER" => "Y")); /***************** Events onAfterMessageAdd ************************/ foreach(GetModuleEvents("forum", "onAfterMessageAdd", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$ID, $arMessage, $arMessage["TOPIC_INFO"], $arMessage["FORUM_INFO"], $arFields)); /***************** /Events *****************************************/ if ($arParams["SKIP_STATISTIC"] == "Y" && $arParams["SKIP_INDEXING"] == "Y") return $ID; if ($arParams["SKIP_STATISTIC"] != "Y") { if (intval($arMessage["AUTHOR_ID"]) > 0) { CForumUser::SetStat($arMessage["AUTHOR_ID"], array("MESSAGE" => $arMessage)); } CForumTopic::SetStat($arMessage["TOPIC_ID"], array("MESSAGE" => $arMessage)); CForumNew::SetStat($arMessage["FORUM_ID"], array("MESSAGE" => $arMessage)); } if ($arMessage["APPROVED"] == "Y" && $arParams["SKIP_INDEXING"] != "Y" && CModule::IncludeModule("search")) { $arMessage["POST_MESSAGE"] = (COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]); $arParams = array( "PERMISSION" => array(), "SITE" => CForumNew::GetSites($arMessage["FORUM_ID"]), "DEFAULT_URL" => "/"); $arGroups = CForumNew::GetAccessPermissions($arMessage["FORUM_ID"]); foreach($arGroups as $arGroup) { if ($arGroup[1] >= "E") { $arParams["PERMISSION"][] = $arGroup[0]; if ($arGroup[0] == 2) break; } } $arSearchInd = array( "LID" => array(), "LAST_MODIFIED" => $arMessage["POST_DATE"], "PARAM1" => $arMessage["FORUM_ID"], "PARAM2" => $arMessage["TOPIC_ID"], "ENTITY_TYPE_ID" => ($arMessage["NEW_TOPIC"] == "Y"? "FORUM_TOPIC": "FORUM_POST"), "ENTITY_ID" => ($arMessage["NEW_TOPIC"] == "Y"? $arMessage["TOPIC_ID"]: $ID), "USER_ID" => $arMessage["AUTHOR_ID"], "PERMISSIONS" => $arParams["PERMISSION"], "TITLE" => $arMessage["TOPIC_INFO"]["TITLE"].($arMessage["NEW_TOPIC"] == "Y" && !empty($arMessage["TOPIC_INFO"]["DESCRIPTION"]) ? ", ".$arMessage["TOPIC_INFO"]["DESCRIPTION"] : ""), "TAGS" => ($arMessage["NEW_TOPIC"] == "Y" ? $arMessage["TOPIC_INFO"]["TAGS"] : ""), "BODY" => GetMessage("AVTOR_PREF")." ".$arMessage["AUTHOR_NAME"].". ".(CSearch::KillTags(forumTextParser::clearAllTags($arMessage["POST_MESSAGE"]))), "URL" => "", "INDEX_TITLE" => $arMessage["NEW_TOPIC"] == "Y", ); // get mentions $arMentionedUserID = CForumMessage::GetMentionedUserID($arMessage["POST_MESSAGE"]); if (!empty($arMentionedUserID)) { $arSearchInd["PARAMS"] = array( "mentioned_user_id" => $arMentionedUserID ); } $urlPatterns = array( "FORUM_ID" => $arMessage["FORUM_ID"], "TOPIC_ID" => $arMessage["TOPIC_ID"], "TITLE_SEO" => $arMessage["TOPIC_INFO"]["TITLE_SEO"], "MESSAGE_ID" => $arMessage["ID"], "SOCNET_GROUP_ID" => $arMessage["TOPIC_INFO"]["SOCNET_GROUP_ID"], "OWNER_ID" => $arMessage["TOPIC_INFO"]["OWNER_ID"], "PARAM1" => $arMessage["PARAM1"], "PARAM2" => $arMessage["PARAM2"]); foreach ($arParams["SITE"] as $key => $val) { $arSearchInd["LID"][$key] = CForumNew::PreparePath2Message($val, $urlPatterns); if (empty($arSearchInd["URL"]) && !empty($arSearchInd["LID"][$key])) $arSearchInd["URL"] = $arSearchInd["LID"][$key]; } if (empty($arSearchInd["URL"])) { foreach ($arParams["SITE"] as $key => $val): $db_lang = CLang::GetByID($key); if ($db_lang && $ar_lang = $db_lang->Fetch()): $arParams["DEFAULT_URL"] = $ar_lang["DIR"]; break; endif; endforeach; $arParams["DEFAULT_URL"] .= COption::GetOptionString("forum", "REL_FPATH", ""). "forum/read.php?FID=#FID#&TID=#TID#&MID=#MID##message#MID#"; $arSearchInd["URL"] = CForumNew::PreparePath2Message($arParams["DEFAULT_URL"], $urlPatterns); } /***************** Events onMessageIsIndexed ***********************/ $index = true; foreach(GetModuleEvents("forum", "onMessageIsIndexed", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, $arMessage, &$arSearchInd)) === false) { $index = false; break; } } /***************** /Events *****************************************/ if ($index == true) CSearch::Index("forum", $ID, $arSearchInd, true); } return $ID; }