• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/search_reindex.php
  • Класс: CSocNetSearchReindex
  • Вызов: CSocNetSearchReindex::ReindexForum
function ReindexForum($entity_type, $last_id, $path_template)
{
	global $DB;

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

	$rsForumMessages = $DB->Query("
		SELECT ft.ID TOPIC_ID, ft.SOCNET_GROUP_ID, ft.OWNER_ID, fm.ID
		FROM
			b_forum_topic ft
			INNER JOIN b_forum_message fm ON fm.TOPIC_ID = ft.ID
		WHERE
			fm.ID > ".intval($last_id)."
			".($entity_type == "G"?
				"AND ft.SOCNET_GROUP_ID IS NOT NULL AND ft.SOCNET_GROUP_ID > 0":
				"AND (ft.SOCNET_GROUP_ID IS NULL OR ft.SOCNET_GROUP_ID = 0) AND ft.OWNER_ID IS NOT NULL"
			)."
		ORDER BY fm.ID
	");
	while($arMessage = $rsForumMessages->Fetch())
	{
		$url = str_replace(
			array(
				"#user_id#",
				"#group_id#",
				"#topic_id#",
				"#message_id#",
				"#action#",
			),
			array(
				$arMessage["OWNER_ID"],
				$arMessage["SOCNET_GROUP_ID"],
				$arMessage["TOPIC_ID"],
				$arMessage["ID"],
				"",
			),
			$path_template
		);

		CSearch::ChangeSite("forum", array(
			SITE_ID => $url,
		), $arMessage["ID"]);

		$arGroups = $this->GetSearchGroups(
			$entity_type,
			$entity_type=="G"? $arMessage["SOCNET_GROUP_ID"]: $arMessage["OWNER_ID"],
			'forum',
			'view'
		);

		$arParams = $this->GetSearchParams(
			$entity_type,
			$entity_type=="G"? $arMessage["SOCNET_GROUP_ID"]: $arMessage["OWNER_ID"],
			'forum',
			'view'
		);

		CSearch::ChangePermission('forum', $arGroups, $arMessage["ID"]);
		CSearch::ChangeIndex("forum", array("UPD" => $this->_sess_id, "PARAMS" => $arParams), $arMessage["ID"]);

		$this->_counter++;

		if($this->_end_time && $this->_end_time <= time())
			return $arMessage["ID"];
	}

	return false;
}