• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblocksection.php
  • Класс: CAllIBlockSection
  • Вызов: CAllIBlockSection::UpdateSearch
function UpdateSearch($ID, $bOverWrite=false)
{
	if(!CModule::IncludeModule("search")) return;

	global $DB;
	$ID = intval($ID);

	static $arGroups = array();
	static $arSITE = array();

	$strSql = "
		SELECT BS.ID, BS.NAME, BS.DESCRIPTION_TYPE, BS.DESCRIPTION, BS.XML_ID as EXTERNAL_ID,
			BS.CODE, BS.IBLOCK_ID, B.IBLOCK_TYPE_ID,
			".$DB->DateToCharFunction("BS.TIMESTAMP_X")." as LAST_MODIFIED,
			B.CODE as IBLOCK_CODE, B.XML_ID as IBLOCK_EXTERNAL_ID, B.SECTION_PAGE_URL,
			B.ACTIVE as ACTIVE1,
			BS.GLOBAL_ACTIVE as ACTIVE2,
			B.INDEX_SECTION, B.RIGHTS_MODE
		FROM b_iblock_section BS, b_iblock B
		WHERE BS.IBLOCK_ID=B.ID
			AND BS.ID=".$ID;

	$dbrIBlockSection = $DB->Query($strSql);

	if($arIBlockSection = $dbrIBlockSection->Fetch())
	{
		$IBLOCK_ID = $arIBlockSection["IBLOCK_ID"];
		$SECTION_URL =
				"=ID=".$arIBlockSection["ID"].
				"&EXTERNAL_ID=".$arIBlockSection["EXTERNAL_ID"].
				"&IBLOCK_TYPE_ID=".$arIBlockSection["IBLOCK_TYPE_ID"].
				"&IBLOCK_ID=".$arIBlockSection["IBLOCK_ID"].
				"&IBLOCK_CODE=".$arIBlockSection["IBLOCK_CODE"].
				"&IBLOCK_EXTERNAL_ID=".$arIBlockSection["IBLOCK_EXTERNAL_ID"].
				"&CODE=".$arIBlockSection["CODE"];

		if($arIBlockSection["ACTIVE1"]!="Y" || $arIBlockSection["ACTIVE2"]!="Y" || $arIBlockSection["INDEX_SECTION"]!="Y")
		{
			CSearch::DeleteIndex("iblock", "S".$arIBlockSection["ID"]);
			return;
		}

		if(!array_key_exists($IBLOCK_ID, $arGroups))
		{
			$arGroups[$IBLOCK_ID] = array();
			$strSql =
				"SELECT GROUP_ID ".
				"FROM b_iblock_group ".
				"WHERE IBLOCK_ID= ".$IBLOCK_ID." ".
				"	AND PERMISSION>='" . CIBlockRights::PUBLIC_READ . "' ".
				"ORDER BY GROUP_ID";

			$dbrIBlockGroup = $DB->Query($strSql);
			while($arIBlockGroup = $dbrIBlockGroup->Fetch())
			{
				$arGroups[$IBLOCK_ID][] = $arIBlockGroup["GROUP_ID"];
				if($arIBlockGroup["GROUP_ID"]==2) break;
			}
		}

		if(!array_key_exists($IBLOCK_ID, $arSITE))
		{
			$arSITE[$IBLOCK_ID] = array();
			$strSql =
				"SELECT SITE_ID ".
				"FROM b_iblock_site ".
				"WHERE IBLOCK_ID= ".$IBLOCK_ID;

			$dbrIBlockSite = $DB->Query($strSql);
			while($arIBlockSite = $dbrIBlockSite->Fetch())
				$arSITE[$IBLOCK_ID][] = $arIBlockSite["SITE_ID"];
		}

		$BODY =
			($arIBlockSection["DESCRIPTION_TYPE"]=="html" ?
				CSearch::KillTags($arIBlockSection["DESCRIPTION"])
			:
				$arIBlockSection["DESCRIPTION"]
			);

		$BODY .= $GLOBALS["USER_FIELD_MANAGER"]->OnSearchIndex("IBLOCK_".$arIBlockSection["IBLOCK_ID"]."_SECTION", $arIBlockSection["ID"]);

		if($arIBlockSection["RIGHTS_MODE"] !== "E")
			$arPermissions = $arGroups[$IBLOCK_ID];
		else
		{
			$obSectionRights = new CIBlockSectionRights($IBLOCK_ID, $arIBlockSection["ID"]);
			$arPermissions = $obSectionRights->GetGroups(array("section_read"));
		}

		CSearch::Index("iblock", "S".$ID, array(
			"LAST_MODIFIED" => $arIBlockSection["LAST_MODIFIED"],
			"TITLE" => $arIBlockSection["NAME"],
			"PARAM1" => $arIBlockSection["IBLOCK_TYPE_ID"],
			"PARAM2" => $IBLOCK_ID,
			"SITE_ID" => $arSITE[$IBLOCK_ID],
			"PERMISSIONS" => $arPermissions,
			"URL" => $SECTION_URL,
			"BODY" => $BODY,
		), $bOverWrite);
	}
}