function MakeDavRedirect($ob, $currentPageUrl, $baseURL, $path, $is_root = false) { global $APPLICATION, $USER; if ($ob->IsDavHeaders('check_all') || array_search($_SERVER['REQUEST_METHOD'], array('DELETE')) !== false) { if (!$USER->IsAuthorized()) { $APPLICATION->RestartBuffer(); CHTTP::SetStatus('401 Unauthorized'); header('WWW-Authenticate: Basic realm="BitrixWebDav"'); header('Content-length: 0'); die; } if (!$ob->CheckRights($_SERVER['REQUEST_METHOD'])) { $ob->SetStatus('403 Forbidden'); ShowError(GetMessage("WD_DAV_INSUFFICIENT_RIGHTS")); die; } elseif (!$ob->IsMethodAllow($_SERVER['REQUEST_METHOD'])) { CHTTP::SetStatus('405 Method not allowed'); header('Allow: ' . join(',', array_keys($ob->allow))); ShowError(GetMessage("WD_DAV_UNSUPORTED_METHOD")); die; } else { $APPLICATION->RestartBuffer(); if (isset($_SERVER['HTTP_DESTINATION'])) { $_SERVER['HTTP_DESTINATION'] = urldecode($_SERVER['HTTP_DESTINATION']); $pu = parse_url($_SERVER['HTTP_DESTINATION']); $ob->SetBaseURL($baseURL); if (strpos($pu['path'], $baseURL) === false) { CHTTP::SetStatus('405 Method not allowed'); header('Allow: ' . join(',', array_keys($ob->allow))); ShowError(GetMessage("WD_DAV_UNSUPORTED_METHOD")); die; } } else { $ob->SetBaseURL(_uencode($baseURL)); } $ob->SetPath($path); $fn = 'base_' . $_SERVER['REQUEST_METHOD']; call_user_func(array(&$ob, $fn)); die; } } else { $ob->SetBaseURL(_uencode($baseURL)); $ob->SetPath(_uencode(rtrim($path, '/'))); if ($is_root) { return; } $ob->IsDir(); if ($ob->arParams['is_file']) { $APPLICATION->RestartBuffer(); $ob->base_GET(); die; } else { LocalRedirect($currentPageUrl); } } }
$folderTree[] = array('NAME' => _getName($name), 'PATH' => _getPath($path, $arParams['SEF_FOLDER']), 'DEPTH_LEVEL' => $depth, 'MODE' => 'remote', 'DOCCOUNT' => $USER->IsAdmin() ? _getIBlockItemsCount($id) : false, 'IB_MODE' => _getIBlockMode($id)); } } } if (intval($mode) > 0) { // for copy/move methods if (isset($_SERVER['HTTP_DESTINATION'])) { $arDestPath = explode('/', trim($destPath, '/')); if (empty($arDestPath[0])) { unset($arDestPath[0]); } if (sizeof($arDestPath) > 0) { $destName = $arDestPath[0]; } } $obOther = new CWebDavIblock($mode, _uencode($localPath), $arParams); if (!empty($obOther->arError)) { ShowError($obOther->arError['text']); return false; } $obDavEventHandler = CWebDavSocNetEvent::GetRuntime(); $obDavEventHandler->SetParams(array('PATH_TO_USER' => $arResult["URL_TEMPLATES"]['user_view'], 'PATH_TO_FILES_ELEMENT' => CIBlock::GetArrayByID($mode, "DETAIL_PAGE_URL"), 'IBLOCK_ID' => $mode)); MakeDavRedirect($obOther, str_replace('#PATH#', '', $arUrlTemplates['i' . $mode]), $rootPath, $localPath, false); } // PERSONAL DOCS // **************************************************** if ($mode == 'private' || $mode == 'root') { if (CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $currentUserID, "files")) { $path = $arParams['SEF_FOLDER'] . $modes['private'] . ''; $folderTree[] = array('NAME' => _getName($path), 'PATH' => _getPath($path, $arParams['SEF_FOLDER']), 'DEPTH_LEVEL' => 0, 'MODE' => 'remote', 'DOCCOUNT' => $USER->IsAdmin() ? _getIBlockItemsCount($arParams["IBLOCK_USER_ID"], null, 'user', $currentUserID) : false, 'CLASS' => 'personal'); }