- Модуль: 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);
}
}