static function CanAccessFiles($iblock_id, $entity_type, $entity_id) { $result = false; $iblock_id = intval($iblock_id); $entity_id = intval($entity_id); if ($iblock_id > 0 && $entity_id > 0 && ($entity_type == 'group' || $entity_type == 'user')) { //cache $value = false; static $data = array(); $CACHE_PATH = "/" . SITE_ID . "/webdav/can_access_files"; $CACHE_ID = $iblock_id; $CACHE_TIME = 3600 * 24 * 30; $docCache = new CPHPCache(); if (!isset($data[$iblock_id])) { if ($docCache->InitCache($CACHE_TIME, $CACHE_ID, $CACHE_PATH)) { $value = $docCache->GetVars(); } $data[$iblock_id] = $value; } if (isset($data[$iblock_id][$entity_type][$entity_id])) { return $data[$iblock_id][$entity_type][$entity_id]; } //end cache CModule::IncludeModule('iblock'); $rIB = CIBlock::GetList(array(), array('ID' => $iblock_id, "CHECK_PERMISSIONS" => "N")); if ($rIB && ($arIB = $rIB->Fetch()) && $arIB["RIGHTS_MODE"] === "E") { $rootSectionID = self::GetSectionID($iblock_id, $entity_type, $entity_id); if ($rootSectionID !== false) { $ibRights = new CIBlockSectionRights($iblock_id, $rootSectionID); $result = $ibRights->UserHasRightTo($iblock_id, $rootSectionID, 'section_read'); if (!$result) { $arParams = array("DOCUMENT_TYPE" => array("webdav", "CIBlockDocumentWebdavSocnet", implode("_", array("iblock", $iblock_id, $entity_type, $entity_id))), "ROOT_SECTION_ID" => $rootSectionID, "ATTRIBUTES" => $entity_type == "user" ? array('user_id' => $entity_id) : array('group_id' => $entity_id)); $ob = new CWebDavIblock($iblock_id, '', $arParams); if ($ob && empty($ob->arError) && $ob->permission > 'D') { $files = array(); $options = array("path" => '/', "depth" => 1); $res = $ob->PROPFIND($options, $files, array("return" => "array")); $result = is_array($res) && sizeof($res['RESULT']) > 0; // at least 1 item can be read } } } else { return true; } } else { $result = CIBlock::GetPermission($iblock_id) > "D"; } // cache if ($data[$iblock_id] === false) { $data[$iblock_id] = array(); } $data[$iblock_id][$entity_type][$entity_id] = $result; $docCache->Clean($CACHE_ID, $CACHE_PATH); $docCache->InitCache($CACHE_TIME, $CACHE_ID, $CACHE_PATH); if ($docCache->StartDataCache()) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($CACHE_PATH); $CACHE_MANAGER->RegisterTag("iblock_id_" . $iblock_id); $CACHE_MANAGER->RegisterTag('wd_socnet'); $CACHE_MANAGER->EndTagCache(); $docCache->EndDataCache($data[$iblock_id]); } // end cache } return $result; }
$arParams["NOT_SAVE_SUG_FILES"] = true; if ($arParams["RESOURCE_TYPE"] == "FOLDER") { $ob = new CWebDavFile($arParams, $baseURL); } else { $ob = new CWebDavIblock(intval($arParams['IBLOCK_ID']), $baseURL, $arParams); if ($requestTupe == "user" && !empty($filesOwnerUserID)) { $ob->attributes['user_id'] = $filesOwnerUserID; } } if ($ob->IsDir()) { $arResFiles = array(); $optionsQ = array('path' => $ob->_path, 'depth' => 1, 'check_permissions' => true); $arSelectedFieldsQ = array('NAME', 'FILE_TUPES'); $filesQ = null; $arFilterQ = array(); $resQ = $ob->PROPFIND($optionsQ, $filesQ, array("FILTER" => $arFilterQ, "COLUMNS" => $arSelectedFieldsQ, "return" => "nav_result", "get_clones" => "Y", 'NON_TRASH_SECTION' => true, 'NON_OLD_DROPPED_SECTION' => true)); $foldersNum = 0; $filesNum = 0; if (is_array($resQ) && array_key_exists("NAV_RESULT", $resQ)) { while ($arF = $resQ["NAV_RESULT"]->Fetch()) { $nameQ = CheckStrCharsetForJson($arF["NAME"]); $pathQ = CheckStrCharsetForJson($arF["PATH"]); if ($arF["TYPE"] == "S") { $arResFiles[] = array("NAME" => $nameQ, "TABLE_URL" => $ob->base_url . $pathQ, "IMAGE" => $compPath . "/images/folder.png", "TABLE_SETTINGS" => array("type" => "files", "useTagsInSearch" => "NO")); $foldersNum++; } else { $mime = ""; $fSize = ""; $fDateCreate = ""; if ($arParams["RESOURCE_TYPE"] == "IBLOCK") { $fSize = CFile::FormatSize($arF["PROPERTY_WEBDAV_SIZE_VALUE"]);
} if ($arParams["PARENT_SECTION"] > 0) { $arFilter["SECTION_ID"] = $arParams["PARENT_SECTION"]; $arPropParams["PARENT_ID"] = $arParams["PARENT_SECTION"]; if ($arParams["INCLUDE_SUBSECTIONS"]) { $arFilter["INCLUDE_SUBSECTIONS"] = "Y"; } } $arPropParams['FILTER'] = $arFilter; global $by, $order; $by = $arParams["SORT_BY1"]; $order = $arParams["SORT_ORDER1"]; if (isset($arParams["DOCS_COUNT_NEED_USE"]) && $arParams["DOCS_COUNT_NEED_USE"] == "Y") { $arPropParams["NAV_PARAMS"]["nTopCount"] = $arParams["DOCS_COUNT"]; } $arrsElements = $ob->PROPFIND($arOptions, $arFiles, $arPropParams); $rsElement = $arrsElements["NAV_RESULT"]; $rsElement->NavStart($arNavParams["nPageSize"], false, $arNavigation["PAGEN"]); while ($arItem = $rsElement->Fetch()) { $arItem["PREVIEW_TEXT"] = HTMLToTxt($arItem["PREVIEW_TEXT"]); if ($arParams["PREVIEW_TRUNCATE_LEN"] > 0) { $end_pos = $arParams["PREVIEW_TRUNCATE_LEN"]; while (substr($arItem["PREVIEW_TEXT"], $end_pos, 1) != " " && $end_pos < strlen($arItem["PREVIEW_TEXT"])) { $end_pos++; } if ($end_pos < strlen($arItem["PREVIEW_TEXT"])) { $arItem["PREVIEW_TEXT"] = substr($arItem["PREVIEW_TEXT"], 0, $end_pos) . "..."; } } if (strlen($arParams["DETAIL_URL"]) > 0) { $arItem["DETAIL_PAGE_URL"] = htmlspecialcharsbx(str_replace(array("#SERVER_NAME#", "#SITE_DIR#", "#IBLOCK_ID#", "#SECTION_ID#", "#ELEMENT_ID#"), array(SITE_SERVER_NAME, SITE_DIR, $arItem["IBLOCK_ID"], $arItem["IBLOCK_SECTION_ID"], $arItem["ID"]), $arParams["DETAIL_URL"]));
$arParams["DOCUMENT_TYPE"] = array("webdav", "CIBlockDocumentWebdavSocnet", "iblock_" . $arParams['IBLOCK_USER_ID'] . "_user_" . intVal($userID)); $obGroup = new CWebDavIblock($arParams['IBLOCK_USER_ID'], $localPath, $arParams); $obGroup->SetRootSection($sectionID); $cnt = count($arLocalPath); if ($cnt > 1) { $path = ""; foreach ($arLocalPath as $k => $v) { if ($k > 0) { $path .= "/" . $v; } } } else { $path = "/"; } $options = array("path" => $path, "depth" => 1); $res = $obGroup->PROPFIND($options, $files, array("return" => "array", "get_clones" => "Y", "FILTER" => array())); $obGroup->IsDir($options); if ($obGroup->arParams['is_file']) { $APPLICATION->RestartBuffer(); $obGroup->base_GET(); die; } foreach ($res["RESULT"] as $val) { if ($val["~NAME"] != ".Trash") { $tmp = array('NAME' => $val["NAME"], 'PATH' => $rootPath . "/" . $arLocalPath[0] . $val["PATH"], 'DEPTH_LEVEL' => $val["DEPTH_LEVEL"]); if ($val["TYPE"] == "E") { $tmp["TYPE"] = "file"; $tmp["FILE_EXTENTION"] = htmlspecialcharsbx(strtolower(strrchr($val['NAME'], '.'))); } else { $tmp = array('NAME' => $val["NAME"], 'PATH' => $rootPath . "/" . $arLocalPath[0] . $val["PATH"], 'DEPTH_LEVEL' => $val["DEPTH_LEVEL"]); $tmp["TYPE"] = "folder";