- Модуль: search
- Путь к файлу: ~/bitrix/modules/search/classes/general/search.php
- Класс: CAllSearch
- Вызов: CAllSearch::ChangePermission
static function ChangePermission($MODULE_ID, $arGroups, $ITEM_ID = false, $PARAM1 = false, $PARAM2 = false, $SITE_ID = false, $PARAMS = false)
{
$DB = CDatabase::GetModuleConnection('search');
$bIncSites = false;
$strSqlWhere = CSearch::__PrepareFilter(array(
"MODULE_ID" => $MODULE_ID,
"ITEM_ID" => $ITEM_ID,
"PARAM1" => $PARAM1,
"PARAM2" => $PARAM2,
"SITE_ID" => $SITE_ID,
"PARAMS" => $PARAMS,
), $bIncSites);
if ($strSqlWhere)
{
$strSqlJoin1 = "INNER JOIN b_search_content sc ON sc.ID = b_search_content_right.SEARCH_CONTENT_ID";
$match = array();
//Copy first exists into inner join in hopeless try to defeat MySQL optimizer
if (preg_match('#^\s*EXISTS (\(SELECT \* FROM b_search_content_param WHERE SEARCH_CONTENT_ID = sc.ID AND PARAM_NAME = '[^']+' AND PARAM_VALUE = '[^']+'\))#', $strSqlWhere, $match))
{
$subTable = str_replace("SEARCH_CONTENT_ID = sc.ID AND", "", $match[1]);
$strSqlJoin2 = "INNER JOIN ".$subTable." p1 ON p1.SEARCH_CONTENT_ID = sc.ID";
}
else
{
$strSqlJoin2 = "";
}
}
else
{
$strSqlJoin1 = "";
$strSqlJoin2 = "";
}
$rs = $DB->Query("
SELECT sc.ID
FROM b_search_content sc
".$strSqlJoin2."
".($strSqlWhere?
"WHERE ".$strSqlWhere:
""
)."
", false, "File: ".__FILE__."
Line: ".__LINE__);
while ($arR = $rs->fetch())
{
CSearch::Update($arR["ID"], array("PERMISSIONS" => $arGroups));
}
}