Esempio n. 1
0
 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;
 }
Esempio n. 2
0
$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"]);
Esempio n. 3
0
 }
 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"]));
Esempio n. 4
0
 $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";