• Модуль: search
  • Путь к файлу: ~/bitrix/modules/search/classes/general/search.php
  • Класс: CAllSearch
  • Вызов: CAllSearch::OnChangeFilePermissions
static function OnChangeFilePermissions($path, $permission = array(), $old_permission = array(), $arGroups = false)
{

	global $APPLICATION;
	$DB = CDatabase::GetModuleConnection('search');

	$site = false;
	CMain::InitPathVars($site, $path);
	$DOC_ROOT = CSite::GetSiteDocRoot($site);
	$path = rtrim($path, "/");

	if (!is_array($arGroups))
	{
		$arGroups = CSearch::GetGroupCached();
		//Check if anonymous permission was changed
		if (!array_key_exists(2, $permission) && array_key_exists("*", $permission))
			$permission[2] = $permission["*"];
		if (!is_array($old_permission))
			$old_permission = array();
		if (!array_key_exists(2, $old_permission) && array_key_exists("*", $old_permission))
			$old_permission[2] = $old_permission["*"];
		//And if not when will do nothing
		if (
			(array_key_exists(2, $permission)
				&& $permission[2] >= "R")
			&& array_key_exists(2, $old_permission)
			&& $old_permission[2] >= "R"
		)
		{
			return;
		}
	}

	if (file_exists($DOC_ROOT.$path))
	{
		@set_time_limit(300);
		if (is_dir($DOC_ROOT.$path))
		{
			$handle = @opendir($DOC_ROOT.$path);
			while (false !== ($file = @readdir($handle)))
			{
				if ($file == "." || $file == "..")
					continue;

				$full_file = $path."/".$file;
				if ($full_file == "/bitrix")
					continue;

				if (is_dir($DOC_ROOT.$full_file) || CSearch::CheckPath($full_file))
					CSearch::OnChangeFilePermissions(array($site, $full_file), array(), array(), $arGroups);
			}
		}
		else//if(is_dir($DOC_ROOT.$path))
		{
			$rs = $DB->Query("
				SELECT SC.ID
				FROM b_search_content SC
				WHERE MODULE_ID='main'
				AND ITEM_ID='".$DB->ForSql($site."|".$path)."'
			", false, "File: ".__FILE__."
Line: ".__LINE__); if ($ar = $rs->Fetch()) { $arNewGroups = array(); foreach ($arGroups as $group_id) { $p = $APPLICATION->GetFileAccessPermission(array($site, $path), array($group_id)); if ($p >= "R") { $arNewGroups[$group_id] = 'G'.$group_id; if ($group_id == 2) break; } } CAllSearch::SetContentItemGroups($ar["ID"], $arNewGroups); } } //if(is_dir($DOC_ROOT.$path)) }//if(file_exists($DOC_ROOT.$path)) }