• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/message.php
  • Класс: CAllForumMessage
  • Вызов: CAllForumMessage::Reindex
static function Reindex($ID, &$arMessage = [])
{
	if (!($ID > 0) || !CModule::IncludeModule("search"))
		return array("FORUM_ID", "TOPIC_ID", "TITLE_SEO", "MESSAGE_ID", "SOCNET_GROUP_ID", "OWNER_ID", "PARAM1", "PARAM2");
	if (!is_array($arMessage) || !array_key_exists("FORUM_INFO", $arMessage) || !array_key_exists("TOPIC_INFO", $arMessage))
		$arMessage = CForumMessage::GetByIDEx($ID, array("GET_TOPIC_INFO" => "Y", "GET_FORUM_INFO" => "Y", "FILTER" => "Y"));

	$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"]);
	for ($i = 0; $i < count($arGroups); $i++)
	{
		if ($arGroups[$i][1] >= "E")
		{
			$arParams["PERMISSION"][] = $arGroups[$i][0];
			if ($arGroups[$i][0] == 2)
				break;
		}
	}

	$arSearchInd = array(
		"LID" => array(),
		"LAST_MODIFIED" => $arMessage["POST_DATE"],
		"PARAM1" => $arMessage["FORUM_ID"],
		"PARAM2" => $arMessage["TOPIC_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"]))),
		"ENTITY_TYPE_ID"  => $arMessage["NEW_TOPIC"] == "Y"? "FORUM_TOPIC": "FORUM_POST",
		"ENTITY_ID"  => $arMessage["NEW_TOPIC"] == "Y"? $arMessage["TOPIC_ID"]: $arMessage["ID"],
		"USER_ID" => $arMessage["AUTHOR_ID"],
		"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;
			}
		}
		$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);
	}
	CSearch::DeleteIndex("forum", $ID);
	/***************** 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);
}