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