CanDoOperation('fileman_admin_folders')) $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/include.php"); include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/fileman/classes/general/fileman_utils.php"); IncludeModuleLangFile(__FILE__); $site = CFileMan::__CheckSite($site); $documentRoot = CSite::GetSiteDocRoot($site); $io = CBXVirtualIo::GetInstance(); $path = $io->CombinePath("/", $path); $addUrl = 'lang='.LANGUAGE_ID.($logical == "Y"?'&logical=Y':''); $arPath = Array($site, $path); $strNotice = ""; $strWarning = ""; $abs_path = $documentRoot.$path; $arFiles = Array(); $bSearch = isset($_REQUEST['search']) && $_REQUEST['search'] == 'Y'; $searchSess = preg_replace("/[^a-z0-9]/i", "", $_REQUEST['ssess']); if (CFileMan::IsWindows()) $strWarning .= GetMessage("FILEMAN_SA_WINDOWS_WARN")."\n"; if (count($files) > 0) { for($i = 0; $i < count($files); $i++) { if(!$USER->CanDoFileOperation('fm_edit_permission', Array($site, $path."/".$files[$i]))) $strWarning .= GetMessage("FILEMAN_ACCESS_TO_DENIED")." \"".$files[$i]."\".\n"; elseif($files[$i] != '.') $arFiles[] = $files[$i]; } } else { if ($bSearch) { $searchRes = CFilemanSearch::GetSearchResult($searchSess); for($i = 0, $l = count($searchRes); $i < $l; $i++) $arFiles[] = $searchRes[$i]['path']; } else { $arD = array(); $arF = array(); CFileMan::GetDirList(Array($site, $path), $arD, $arF, array("MIN_PERMISSION" => "X"), array(), "DF"); foreach ($arD as $dir) if($USER->CanDoFileOperation('fm_edit_permission',Array($site, $dir['ABS_PATH']))) $arFiles[] = $dir["NAME"]; foreach ($arF as $file) if($USER->CanDoFileOperation('fm_edit_permission',Array($site, $file['ABS_PATH']))) $arFiles[] = $file["NAME"]; } } $filesCount = count($arFiles); $arFilesEx = array(); $bFolderInList = false; $currentValue = false; $bCurrentValueDiff = false; for($i = 0; $i < $filesCount; $i++) { $arFile = array("NAME" => $arFiles[$i]); $arFile["PATH"] = $bSearch ? $arFiles[$i] : $path."/".$arFiles[$i]; $arFile["ABS_PATH"] = $documentRoot.$arFile["PATH"]; if (!$bFolderInList && $io->DirectoryExists($arFile["ABS_PATH"])) $bFolderInList = true; $arFile["PERM"] = CFileMan::GetUnixFilePermissions($arFile["ABS_PATH"]); if ($currentValue === false) $currentValue = $arFile["PERM"][0]; if (!$bCurrentValueDiff && $currentValue != $arFile["PERM"][0]) $bCurrentValueDiff = true; $arFilesEx[] = $arFile; } if ($REQUEST_METHOD == "POST" && $USER->CanDoOperation('fileman_admin_folders') && $_GET["fu_action"] == 'change_perms' && check_bitrix_sessid()) { CUtil::JSPostUnescape(); $APPLICATION->RestartBuffer(); if (CFileMan::IsWindows()) $result_value = $_POST['readonly'] == "Y" ? '0' : '666'; else $result_value = intval($_POST['res_value']); $result_value = (int) "0".$result_value; $oChmod = new CFilemanChmod; $oChmod->Init(array( 'value' => $result_value, 'lastPath' => isset($_POST['last_path']) ? $_POST['last_path'] : false )); $bStoped = true; for($i = 0; $i < $filesCount; $i++) { $arFile = $arFilesEx[$i]; if ($io->DirectoryExists($arFile['ABS_PATH']) && $_POST['recurcive'] == "Y") { $oDir = new CFilemanUtilDir($arFile['ABS_PATH'], array( 'obj' => $oChmod, 'site' => $Params['site'], 'callBack' => "Chmod", 'checkBreak' => "CheckBreak", 'checkSubdirs' => true )); $bSuccess = $oDir->Start(); $bBreak = $oDir->bBreak; $nextPath = $oDir->nextPath; $bStoped = $oDir->bStoped; } else { $bBreak = $oChmod->CheckBreak(); $bStoped = $i == $filesCount - 1; // Last iterration if ($bBreak && !$bStoped) $nextPath = $arFilesEx[$i]['ABS_PATH']; } if ($bStoped) $bBreak = false; if ($bBreak) break; $oChmod->Chmod($arFile['ABS_PATH']); } clearstatcache(); ?>