function __wd_get_root_section($IBLOCK_ID, $object, $object_id) { $result = CIBlockWebdavSocnet::GetSectionID($IBLOCK_ID, $object, $object_id); if (intval($result) > 0) { return $result; } else { __wd_check_uf_use_bp_property($arParams["IBLOCK_ID"]); $arFields = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "SOCNET_GROUP_ID" => false, "IBLOCK_SECTION_ID" => 0, "UF_USE_BP" => "N"); if ($object == "user") { $dbUser = CUser::GetByID($object_id); $arUser = $dbUser->Fetch(); $arFields["NAME"] = trim($arUser['LAST_NAME'] . " " . $arUser['FIRST_NAME']); $arFields["NAME"] = trim(!empty($arFields["NAME"]) ? $arFields["NAME"] : $arUser['LOGIN']); $arFields['CREATED_BY'] = $arUser['ID']; $arFields['MODIFIED_BY'] = $arUser['ID']; if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E") { $arTasks = CWebDavIblock::GetTasks(); $arFields['RIGHTS'] = array('n0' => array('GROUP_CODE' => 'U' . $object_id, 'TASK_ID' => $arTasks['X'])); } } else { /* $res = CSocNetGroup::GetByID($arResult["VARIABLES"]["group_id"]); if (!$res) { $arParams["ERROR_MESSAGE"] = GetMessage("SONET_GROUP_NOT_EXISTS"); return 0; } */ $arFields["SOCNET_GROUP_ID"] = $object_id; //$arGroup = CSocNetGroup::GetByID($object_id); $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $object_id; $dbGroup = CSocNetGroup::GetList(array(), array("ID" => (int) $object_id), false, false, array("ID", "SITE_ID", "NAME")); if ($arGroup = $dbGroup->Fetch()) { $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $arGroup["NAME"]; } if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E") { $arTasks = CWebDavIblock::GetTasks(); $arFields['RIGHTS'] = array('n0' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_A', 'TASK_ID' => $arTasks['X']), 'n1' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_E', 'TASK_ID' => $arTasks['W']), 'n2' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_K', 'TASK_ID' => $arTasks['W'])); } } if (\Bitrix\Main\Config\Option::get('disk', 'successfully_converted', false) && CModule::includeModule('disk')) { \Bitrix\Disk\Driver::getInstance()->addGroupStorage($arFields["SOCNET_GROUP_ID"]); } $GLOBALS["UF_USE_BP"] = $arFields["UF_USE_BP"]; $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_" . $IBLOCK_ID . "_SECTION", $arFields); $bs = new CIBlockSection(); $sectionID = $bs->Add($arFields); if (!$sectionID) { $arParams["ERROR_MESSAGE"] = $bs->LAST_ERROR; return 0; } WDClearComponentCache(array("webdav.element.edit", "webdav.element.hist", "webdav.element.upload", "webdav.element.view", "webdav.menu", "webdav.section.edit", "webdav.section.list")); return true; /* if ($ob->workflow == 'bizproc') { __wd_create_default_bp_user_and_groups($arBizProcParameters); } */ } }
true; } $multi = isset($_REQUEST['MULTI']) && $_REQUEST['MULTI'] == 'Y' ? 'true' : 'false'; $userID = $GLOBALS['USER']->GetID(); $bFakemove = isset($_REQUEST['ACTION']) && $_REQUEST['ACTION'] == 'FAKEMOVE'; $mode = "{'onlyFiles' : true}"; if ($bFakemove) { $mode = "{'folder' : true}"; } $typeItems = "{\n"; if (isset($ob->attributes['user_id'])) { $typeItems .= str_replace(array("#GROUP_ID#", "#GROUP_NAME#", "#LINK#", "#IBLOCK_ID#", "#SECTION_ID#"), array($userID, CUtil::JSEscape(GetMessage('WD_MY_DOCUMENTS')), CUtil::JSEscape($ob->base_url), intval($ob->IBLOCK_ID), intval($ob->arRootSection['ID'])), "'U#GROUP_ID#' : {'id' : 'U#GROUP_ID#', 'name' : '#GROUP_NAME#', 'type' : 'user', 'link' : '#LINK#', 'iblock_id': '#IBLOCK_ID#', 'section_id': '#SECTION_ID#'},\n"); } else { $userLib = CWebDavIblock::LibOptions('user_files', false, SITE_ID); if ($userLib && isset($userLib['id']) && ($iblockID = intval($userLib['id']))) { $sectionID = CIBlockWebdavSocnet::GetSectionID($iblockID, 'user', $userID); $libPath = CWebDavIblock::LibOptions('lib_paths', true, $iblockID); if ($libPath) { $tplUser = '******'; if ($tplPos = strpos($libPath, $tplUser)) { $libPath = substr($libPath, 0, $tplPos + strlen($tplUser)) . '/files/lib/'; } $libPath = str_replace('#user_id#', $userID, $libPath); } } if ($sectionID && $libPath) { $typeItems .= str_replace(array("#GROUP_ID#", "#GROUP_NAME#", "#LINK#", "#IBLOCK_ID#", "#SECTION_ID#"), array($userID, CUtil::JSEscape(GetMessage('WD_MY_DOCUMENTS')), CUtil::JSEscape($libPath), $iblockID, $sectionID), "'U#GROUP_ID#' : {'id' : 'U#GROUP_ID#', 'name' : '#GROUP_NAME#', 'type' : 'user', 'link' : '#LINK#', 'iblock_id': '#IBLOCK_ID#', 'section_id': '#SECTION_ID#'},\n"); } } $sharedLibID = CWebDavIblock::LibOptions('shared_files', false, SITE_ID); if ($sharedLibID && isset($sharedLibID['id']) && intval($sharedLibID['id']) > 0 && isset($sharedLibID['base_url']) && strlen($sharedLibID['base_url']) > 0) {
$arResult["Urls"]["Search"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_SEARCH"], array()); $arResult["Urls"]["GroupsAdd"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_GROUPS_ADD"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["MessageForm"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MESSAGE_FORM"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["Log"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_LOG"], array()); $arResult["Urls"]["Main"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["MessagesInput"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_MESSAGES_INPUT"], array()); $arResult["Urls"]["Blog"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_BLOG"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["Microblog"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_MICROBLOG"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["Photo"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_PHOTO"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["Forum"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_FORUM"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["Calendar"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_CALENDAR"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["Tasks"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_TASKS"], array("user_id" => $arResult["User"]["ID"])); $arResult["Urls"]["Files"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_FILES"], array("user_id" => $arResult["User"]["ID"], "path" => "")); $arResult["Urls"]["content_search"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_CONTENT_SEARCH"], array("user_id" => $arResult["User"]["ID"])); $arResult["ActiveFeatures"] = CSocNetFeatures::GetActiveFeaturesNames(SONET_ENTITY_USER, $arResult["User"]["ID"]); $arResult["CanView"]["files"] = array_key_exists("files", $arResult["ActiveFeatures"]) && (CSocNetUser::IsCurrentUserModuleAdmin() || CModule::IncludeModule('webdav') && CIBlockWebdavSocnet::CanAccessFiles($arParams["FILES_USER_IBLOCK_ID"], 'user', $arResult["User"]["ID"])); $arResult["CanView"]["tasks"] = array_key_exists("tasks", $arResult["ActiveFeatures"]) && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_USER, $arResult["User"]["ID"], "tasks", "view", CSocNetUser::IsCurrentUserModuleAdmin()); $arResult["CanView"]["calendar"] = array_key_exists("calendar", $arResult["ActiveFeatures"]); $arResult["CanView"]["microblog"] = array_key_exists("microblog", $arResult["ActiveFeatures"]) && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_USER, $arResult["User"]["ID"], "blog", "view_post", CSocNetUser::IsCurrentUserModuleAdmin()); $arResult["CanView"]["blog"] = array_key_exists("blog", $arResult["ActiveFeatures"]) && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_USER, $arResult["User"]["ID"], "blog", "view_post", CSocNetUser::IsCurrentUserModuleAdmin()); $arResult["CanView"]["photo"] = array_key_exists("photo", $arResult["ActiveFeatures"]) && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_USER, $arResult["User"]["ID"], "photo", "view", CSocNetUser::IsCurrentUserModuleAdmin()); $arResult["CanView"]["forum"] = array_key_exists("forum", $arResult["ActiveFeatures"]) && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_USER, $arResult["User"]["ID"], "forum", "view", CSocNetUser::IsCurrentUserModuleAdmin()); $arResult["CanView"]["content_search"] = array_key_exists("search", $arResult["ActiveFeatures"]) && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_USER, $arResult["User"]["ID"], "search", "view", CSocNetUser::IsCurrentUserModuleAdmin()); $arResult["Title"]["blog"] = array_key_exists("blog", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["blog"]) > 0 ? $arResult["ActiveFeatures"]["blog"] : GetMessage("SONET_UM_BLOG"); $arResult["Title"]["microblog"] = array_key_exists("microblog", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["microblog"]) > 0 ? $arResult["ActiveFeatures"]["microblog"] : GetMessage("SONET_UM_MICROBLOG"); $arResult["Title"]["photo"] = array_key_exists("photo", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["photo"]) > 0 ? $arResult["ActiveFeatures"]["photo"] : GetMessage("SONET_UM_PHOTO"); $arResult["Title"]["forum"] = array_key_exists("forum", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["forum"]) > 0 ? $arResult["ActiveFeatures"]["forum"] : GetMessage("SONET_UM_FORUM"); $arResult["Title"]["calendar"] = array_key_exists("calendar", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["calendar"]) > 0 ? $arResult["ActiveFeatures"]["calendar"] : GetMessage("SONET_UM_CALENDAR"); $arResult["Title"]["tasks"] = array_key_exists("tasks", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["tasks"]) > 0 ? $arResult["ActiveFeatures"]["tasks"] : GetMessage("SONET_UM_TASKS"); $arResult["Title"]["files"] = array_key_exists("files", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["files"]) > 0 ? $arResult["ActiveFeatures"]["files"] : GetMessage("SONET_UM_FILES"); $arResult["Title"]["content_search"] = array_key_exists("search", $arResult["ActiveFeatures"]) && StrLen($arResult["ActiveFeatures"]["search"]) > 0 ? $arResult["ActiveFeatures"]["search"] : GetMessage("SONET_UM_SEARCH");
protected static function groupSectionCreate($groupId) { $groupLib = CWebDavIblock::LibOptions('group_files', false, SITE_ID); if (!$groupLib || !isset($groupLib['id']) || !($iblockId = intval($groupLib['id']))) { return false; } $result = CIBlockWebdavSocnet::GetSectionID($iblockId, 'group', $groupId); if (intval($result) > 0) { return $result; } $dbRes = CUserTypeEntity::GetList(array($by => $order), array("ENTITY_ID" => "IBLOCK_" . $iblockId . "_SECTION", "FIELD_NAME" => "UF_USE_BP")); if (!$dbRes || !($res = $dbRes->GetNext())) { $arFields = array("ENTITY_ID" => "IBLOCK_" . $iblockId . "_SECTION", "FIELD_NAME" => "UF_USE_BP", "USER_TYPE_ID" => "string", "MULTIPLE" => "N", "MANDATORY" => "N", "SETTINGS" => array("DEFAULT_VALUE" => "Y")); $arFieldName = array(); $rsLanguage = CLanguage::GetList($by, $order, array()); while ($arLanguage = $rsLanguage->Fetch()) { $dir = str_replace(array("\\", "//"), "/", dirname(__FILE__)); $dirs = explode("/", $dir); array_pop($dirs); $file = trim(implode("/", $dirs) . "/lang/" . $arLanguage["LID"] . "/include/webdav_settings.php"); $tmp_mess = __IncludeLang($file, true); $arFieldName[$arLanguage["LID"]] = empty($tmp_mess["SONET_UF_USE_BP"]) ? "Use Business Process" : $tmp_mess["SONET_UF_USE_BP"]; } $arFields["EDIT_FORM_LABEL"] = $arFieldName; $obUserField = new CUserTypeEntity(); $obUserField->Add($arFields); $GLOBALS["USER_FIELD_MANAGER"]->arFieldsCache = array(); } $arFields = array("IBLOCK_ID" => $iblockId, "ACTIVE" => "Y", "SOCNET_GROUP_ID" => false, "IBLOCK_SECTION_ID" => 0, "UF_USE_BP" => "N"); $arFields["SOCNET_GROUP_ID"] = $groupId; $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $groupId; $dbGroup = CSocNetGroup::GetList(array(), array("ID" => (int) $groupId), false, false, array("ID", "SITE_ID", "NAME")); if ($arGroup = $dbGroup->Fetch()) { $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $arGroup["NAME"]; } if (CIBlock::GetarrayByID($iblockId, "RIGHTS_MODE") === "E") { $arTasks = CWebDavIblock::GetTasks(); $arFields['RIGHTS'] = array('n0' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_A', 'TASK_ID' => $arTasks['X']), 'n1' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_E', 'TASK_ID' => $arTasks['W']), 'n2' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_K', 'TASK_ID' => $arTasks['W'])); } $GLOBALS["UF_USE_BP"] = $arFields["UF_USE_BP"]; $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_" . $iblockId . "_SECTION", $arFields); $bs = new CIBlockSection(); $sectionId = $bs->Add($arFields); if (!$sectionId) { return false; } return $sectionId; }
function _updateRights($files, $rights, $ufEntity = array()) { static $arIBlock = array(); static $op_X = 'element_rights_edit'; static $arTasks = null; if (!is_array($rights) || sizeof($rights) <= 0) { return false; } if ($files === null || $files === false) { return false; } if (!is_array($files)) { $files = array($files); } if (sizeof($files) <= 0) { return false; } if (!CModule::IncludeModule('iblock')) { return false; } $arFiles = array(); foreach ($files as $id) { $id = intval($id); if (intval($id) > 0) { $arFiles[] = $id; } } if (sizeof($arFiles) <= 0) { return false; } $arFiles = array_unique($arFiles); if ($arTasks == null) { $arTasks = CWebDavIblock::GetTasks(); } $i = 0; $arViewRights = $arEditRights = array(); $curUserID = 'U' . $GLOBALS['USER']->GetID(); foreach ($rights as $right) { if ($curUserID == $right) { // do not override owner's rights continue; } $key = 'n' . $i++; $arViewRights[$key] = array('GROUP_CODE' => $right, 'TASK_ID' => $arTasks['R']); $arEditRights[$key] = array('GROUP_CODE' => $right, 'TASK_ID' => $arTasks['W']); } $ibe = new CIBlockElement(); $dbWDFile = $ibe->GetList(array(), array('ID' => $arFiles, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW')); $iblockIds = array(); if ($dbWDFile) { if (!empty($ufEntity['ENTITY_VALUE_ID'])) { //hack you CIBlockWebdavSocnet::storeFileIdsByComment($ufEntity['ENTITY_VALUE_ID'], $arFiles); } while ($arWDFile = $dbWDFile->Fetch()) { $id = $arWDFile['ID']; if ($arWDFile['WF_NEW'] == 'Y') { $ibe->Update($id, array('BP_PUBLISHED' => 'Y')); } if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E") { $dropped = false; $ibRights = CWebDavIblock::_get_ib_rights_object('ELEMENT', $id, $arWDFile['IBLOCK_ID']); // change rights on comment files if they are 'attached to the post' $dropped = static::_isDropped($arWDFile['IBLOCK_ID'], $arWDFile['IBLOCK_SECTION_ID']); $canEditFiles = static::isAllowEditAttachedFiles($ufEntity); if ($dropped || $ibRights->UserHasRightTo($arWDFile['IBLOCK_ID'], $id, 'element_edit')) { $ibRights->SetRights(static::appendRights($ibRights, $canEditFiles ? $arEditRights : $arViewRights, $arTasks)); } else { $ibRights->SetRights(static::appendRights($ibRights, $arViewRights, $arTasks)); } if (empty($iblockIds[$arWDFile['IBLOCK_ID']])) { $iblockIds[$arWDFile['IBLOCK_ID']] = $arWDFile['IBLOCK_ID']; } } } global $CACHE_MANAGER; foreach ($iblockIds as $iblockId) { $CACHE_MANAGER->ClearByTag('iblock_id_' . $iblockId); } unset($iblockId); } }
$sBaseUrl = $APPLICATION->GetCurDir(); $arParsedUrl = parse_url($_SERVER['REQUEST_URI']); $page = $arParsedUrl ? $arParsedUrl['path'] : $_SERVER['REQUEST_URI']; /************** Initial object *************************************/ $arParams["DOCUMENT_TYPE"] = array("webdav", "CIBlockDocumentWebdavSocnet", "iblock_" . $arParams["IBLOCK_ID"] . "_" . $object . "_" . intVal($object == "user" ? $arResult["VARIABLES"]["user_id"] : $arResult["VARIABLES"]["group_id"])); $arBizProcParameters = array("object" => $object, "owner" => $object == "user" ? $arResult["VARIABLES"]["user_id"] : $arResult["GROUP"]["OWNER_ID"], "moderator" => strtolower($object == "user" ? SONET_RELATIONS_TYPE_NONE : SONET_ROLES_MODERATOR), "path" => $object == "user" ? $arResult["PATH_TO_USER_FILES_WEBDAV_BIZPROC_VIEW"] : $arResult["PATH_TO_GROUP_FILES_WEBDAV_BIZPROC_VIEW"], "document_type" => $ob->wfParams['DOCUMENT_TYPE'][2]); $user_id_str = intVal($arResult["VARIABLES"]["user_id"]) > 0 ? $arResult["VARIABLES"]["user_id"] : $GLOBALS["USER"]->GetId(); $arBizProcParameters["path"] = str_replace(array("#user_id#", "#group_id#", "#element_id#"), array($user_id_str, $arResult["VARIABLES"]["group_id"], "{=Document:ID}"), $arBizProcParameters["path"]); /************** Root Section ***************************************/ $arParams["ROOT_SECTION_ID"] = __wd_get_root_section($arParams["IBLOCK_ID"], $object, $object == 'user' ? $arResult["VARIABLES"]["user_id"] : $arResult["VARIABLES"]["group_id"]); if ($arParams["ROOT_SECTION_ID"] === true) { BXClearCache(true, $ob->CACHE_PATH); LocalRedirect($APPLICATION->GetCurPageParam("", array("create_lib", "sessid"))); } if ($object == "user") { CIBlockWebdavSocnet::CreateSharedFolder($arParams["IBLOCK_ID"], $arParams["ROOT_SECTION_ID"], $arResult["VARIABLES"]["user_id"]); } $arParams["OBJECT"] = $ob = new CWebDavIblock($arParams['IBLOCK_ID'], $arResult['BASE_URL'], $arParams + array("SHORT_PATH_TEMPLATE" => "/" . ($object == "user" ? $arDefaultUrlTemplates404["user_files_short"] : $arDefaultUrlTemplates404["group_files_short"]), "ATTRIBUTES" => $object == "user" ? array('user_id' => $arResult["VARIABLES"]["user_id"]) : array('group_id' => $arResult["VARIABLES"]["group_id"]))); if (!empty($ob->arError)) { $e = new CAdminException($ob->arError); $GLOBALS["APPLICATION"]->ThrowException($e); $res = $GLOBALS["APPLICATION"]->GetException(); if ($res) { ShowError($res->GetString()); return false; } } elseif ($ob->permission <= "D") { ShowError(GetMessage("WD_ACCESS_DENIED")); return false; } $ob->file_prop = $arParams["NAME_FILE_PROPERTY"];
/** * Метод проверяет права на выполнение операций над документами заданного типа. Проверяются операции 4 - право изменять шаблоны рабочий потоков для данного типа документа. * * @param int $operation - операция. * @param int $userId - код пользователя, для которого проверяется право на выполнение операции. * @param string $documentId - код типа документа, к которому применяется операция. * @param array $arParameters - ассициативный массив вспомогательных параметров. Используется для того, чтобы не рассчитывать заново те вычисляемые значения, которые уже известны на момент вызова метода. Стандартными являются ключи массива DocumentStates - массив состояний рабочих потоков данного документа, WorkflowId - код рабочего потока (если требуется проверить операцию на одном рабочем потоке). Массив может быть дополнен другими произвольными ключами. * @return bool */ function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array()) { $documentType = trim($documentType); if (strlen($documentType) <= 0) { return false; } if ($storage = self::needProxyToDiskByDocType($documentType)) { return self::proxyToDisk(__FUNCTION__, array($operation, $userId, \Bitrix\Disk\BizProcDocumentCompatible::generateDocumentType($storage->getId()), $arParameters)); } $userId = intval($userId); global $USER; // Если пользователь является администратором модуля соц. сети, то возвращаем true if ($USER->IsAuthorized() && $USER->GetID() == $userId && CSocNetUser::IsCurrentUserModuleAdmin()) { return true; } $res = explode("_", $documentType); if (count($res) != 4) { return false; } $arParameters["IBlockId"] = intval($res[1]); $arParameters["OwnerType"] = $res[2]; $arParameters["OwnerId"] = intval($res[3]); // Если нет необходимых параметров, то возвращаем false if (!in_array($arParameters["OwnerType"], array("user", "group")) || $arParameters["OwnerId"] <= 0 || $arParameters["IBlockId"] <= 0) { return false; } elseif ($arParameters["OwnerType"] == "user" && $arParameters["OwnerId"] == $userId) { return true; } // Если нам явно не сказали, то узнаем права пользователя на хранилище if (!array_key_exists("IBlockPermission", $arParameters)) { $res = CIBlockWebdavSocnet::GetUserMaxPermission($arParameters["OwnerType"], $arParameters["OwnerId"], $userId, $arParameters["IBlockId"]); $arParameters["IBlockPermission"] = $res["PERMISSION"]; } if ($arParameters["IBlockPermission"] < "R") { return false; } elseif ($arParameters["IBlockPermission"] >= "W") { return true; } // Если мы тут, то инфоблочные права равны U // Если нам явно не сказали, то узнаем группы пользователя if (!array_key_exists("AllUserGroups", $arParameters)) { $arParameters["AllUserGroups"] = CIBlockDocumentWebdavSocnet::GetUserGroups($documentType, null, $userId); } // Если нам явно не сказали, то узнаем текущие статусы документа if (!array_key_exists("DocumentStates", $arParameters)) { $arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("webdav", "CIBlockDocumentWebdavSocnet", "x"), null); } // Если нужно проверить только для одного рабочего потока if (array_key_exists("WorkflowId", $arParameters)) { if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) { $arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]); } else { return false; } } $arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]); // $arAllowableOperations == null - поток не является автоматом // $arAllowableOperations == array() - в автомате нет допустимых операций // $arAllowableOperations == array("read", ...) - допустимые операции if (!is_array($arAllowableOperations)) { return false; } $r = false; switch ($operation) { case CBPCanUserOperateOperation::ViewWorkflow: $r = false; break; case CBPCanUserOperateOperation::StartWorkflow: $r = false; break; case CBPCanUserOperateOperation::CreateWorkflow: $r = in_array("write", $arAllowableOperations); break; case CBPCanUserOperateOperation::WriteDocument: $r = in_array("write", $arAllowableOperations); break; case CBPCanUserOperateOperation::ReadDocument: $r = false; break; default: $r = false; } return $r; }
public static function getRootSectionIdForUser($iblockId, $userId) { global $USER_FIELD_MANAGER; global $UF_USE_BP; $result = CIBlockWebdavSocnet::getSectionId($iblockId, 'user', $userId); if (($result = intval($result)) > 0) { return $result; } $fields = array('IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', 'SOCNET_GROUP_ID' => false, 'IBLOCK_SECTION_ID' => 0, 'UF_USE_BP' => 'N', 'UF_USE_EXT_SERVICES' => CWebDavIblock::resolveDefaultUseExtServices()); $user = CUser::getById($userId)->fetch(); if (empty($user)) { return false; } $fields['NAME'] = trim($user['LAST_NAME'] . ' ' . $user['FIRST_NAME']); $fields['NAME'] = trim(!empty($fields["NAME"]) ? $fields['NAME'] : $user['LOGIN']); $fields['CREATED_BY'] = $user['ID']; $fields['MODIFIED_BY'] = $user['ID']; if (CIBlock::GetArrayByID($iblockId, "RIGHTS_MODE") === "E") { $tasks = CWebDavIblock::GetTasks(); $fields['RIGHTS'] = array('n0' => array('GROUP_CODE' => 'U' . $userId, 'TASK_ID' => $tasks['X'])); } $UF_USE_BP = $fields['UF_USE_BP']; $USER_FIELD_MANAGER->editFormAddFields('IBLOCK_' . $iblockId . '_SECTION', $fields); $section = new CIBlockSection(); $sectionId = $section->add($fields); if (!$sectionId) { return false; } WDClearComponentCache(array('webdav.element.edit', 'webdav.element.hist', 'webdav.element.upload', 'webdav.element.view', 'webdav.menu', 'webdav.section.edit', 'webdav.section.list')); return $sectionId; }
// user list $userTree = array(); $CACHE_ID = SITE_ID . '|' . $requestURL . '|' . $currentUserID . '|' . (CWebDavBase::IsDavHeaders('check_all') ? 'D' : 'W') . '|USERLIST'; $userCache = new CPHPCache(); if ($userCache->InitCache($arParams["CACHE_TIME"], $CACHE_ID, $cachePath)) { $vars = $userCache->GetVars(); $userTree = $vars['USER_TREE']; } else { $arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_USER_ID"], "SOCNET_GROUP_ID" => false, "CHECK_PERMISSIONS" => "N", "SECTION_ID" => 0); $dbSection = CIBlockSection::GetList(array(), $arFilter); while ($arSection = $dbSection->Fetch()) { $userID = $arSection['CREATED_BY']; if (!CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $userID, "files")) { continue; } $userPerms = CIBlockWebdavSocnet::GetUserMaxPermission('user', $userID, $currentUserID, $arParams['IBLOCK_USER_ID']); if ($userPerms["PERMISSION"] < "R") { continue; } $dbUser = CUser::GetByID($userID); if ($dbUser && ($arUser = $dbUser->Fetch())) { if ($arUser['ACTIVE'] != 'Y') { continue; } } if (empty($arUser)) { continue; } $iDocCount = $USER->IsAdmin() ? _getIBlockItemsCount($arParams["IBLOCK_USER_ID"], $arSection["ID"], 'user', $userID) : false; //if ($iDocCount <= 0) continue; $tpl = preg_replace(array("/#NOBR#/", "/#\\/NOBR#/"), array("", ""), $arParams['NAME_TEMPLATE']);
} $APPLICATION->RestartBuffer(); echo json_encode(array("data" => $arResFiles, "TABLE_SETTINGS" => GetTableSettings($foldersNum, 0))); die; } } elseif ($requestTupe == "user") { $user_files = COption::GetOptionString("webdav", "user_files", null); if ($user_files == null) { $APPLICATION->RestartBuffer(); exit(json_encode(array('status' => 'failed'))); } $user_files = unserialize($user_files); $arParams["IBLOCK_ID"] = $user_files[$sID]["id"]; $filesOwnerUserID = array_shift($arURL); $arParams["BASE_URL"] = $arParams["SEF_FOLDER"] . "/" . $requestTupe . "/" . $filesOwnerUserID . "/"; $rootSectionID = CIBlockWebdavSocnet::GetSectionID($arParams["IBLOCK_ID"], "user", $filesOwnerUserID); if (intval($rootSectionID) <= 0) { $APPLICATION->RestartBuffer(); echo json_encode(array("data" => array(), "TABLE_SETTINGS" => GetTableSettings(0, 0))); die; } $arParams["ROOT_SECTION_ID"] = $rootSectionID; } else { $APPLICATION->RestartBuffer(); exit(json_encode(array('status' => 'failed'))); } $action = array_key_exists("action", $_REQUEST) ? $_REQUEST['action'] : ""; $lng = isset($_REQUEST['lang']) ? trim($_REQUEST['lang']) : ''; $lng = substr(preg_replace('/[^a-z0-9_]/i', '', $lng), 0, 2); if (!defined('LANGUAGE_ID')) { $rsSite = CSite::GetByID(SITE_ID);
} if (!$ob->CheckWebRights('', array('action' => 'read', 'arElement' => $wdElement), false)) { CWebDavTools::sendJsonResponse(array('error' => 'access_denied', 'message' => GetMessage("WD_ACCESS_DENIED"))); } if (!empty($_POST['checkViewByGoogle'])) { CWebDavTools::sendJsonResponse(array('viewByGoogle' => CWebDavExtLinks::getDownloadCountForLink($_POST['extLink']) > 0)); } $hash = CWebDavExtLinks::getHashLink(array('IBLOCK_TYPE' => $ob->IBLOCK_TYPE, 'IBLOCK_ID' => $wdElement['element_array']['IBLOCK_ID'], 'ROOT_SECTION_ID' => $ob->arRootSection['ID']), array('PASSWORD' => '', 'LIFETIME_NUMBER' => CWebDavExtLinks::LIFETIME_TYPE_AUTO, 'LIFETIME_TYPE' => 'minute', 'URL' => $ob->_path, 'BASE_URL' => $ob->base_url, 'SINGLE_SESSION' => false, 'LINK_TYPE' => CWebDavExtLinks::LINK_TYPE_AUTO, 'VERSION_ID' => !empty($_GET['v']) ? $_GET['v'] : null, 'FILE_ID' => !empty($_GET['f']) ? $_GET['f'] : null, 'ELEMENT_ID' => $wdElement['item_id']), null); if (!empty($_POST['json'])) { CWebDavTools::sendJsonResponse(array('file' => $hash, 'viewerUrl' => CWebDavExtLinks::$urlGoogleViewer . urlencode($hash) . '&embedded=true')); } } elseif (!empty($_REQUEST['saveToDisk'])) { if ($USER->GetId() && check_bitrix_sessid()) { $data = CWebDavIblock::getRootSectionDataForUser($USER->GetID()); if ($data) { $savedFolderId = CIBlockWebdavSocnet::createSavedFolder($data['IBLOCK_ID'], $data['SECTION_ID'], $USER->GetID()); if ($savedFolderId) { $wdElement = $ob->GetObject(array('check_permissions' => false), false); //todo hack by load from url with historyget (example) if ($wdElement['not_found']) { $partUri = explode('element/historyget/', $ob->uri); if (!empty($partUri[1])) { $elementId = (int) $partUri[1]; $wdElement = $ob->GetObject(array('check_permissions' => false, 'element_id' => $elementId), false); } } if ($ob->CheckWebRights('', array('action' => 'read', 'arElement' => $wdElement), false)) { $storage = new CWebDavStorageCore(); $storage->setStorageId(array('IBLOCK_ID' => $data['IBLOCK_ID'], 'IBLOCK_SECTION_ID' => $data['SECTION_ID'])); $filename = $storage->regenerateNameIfNonUnique($wdElement['element_name'], $savedFolderId); $tmpFile = new CWebDavStubTmpFile();
} /******************************************************************** /Default params ********************************************************************/ if ($bDialog) { $obDavEventHandler = CWebDavSocNetEvent::GetRuntime(); if (isset($obDavEventHandler->arPath['PATH_TO_USER']) && isset($obDavEventHandler->arPath['PATH_TO_GROUP'])) { $userFileRoot = "files/lib/"; $groupFileRoot = "files/"; $fileListDefaultPath = "#path#"; $fileElementDefaultPath = "element/view/#element_id#/"; $fileEditDefaultPath = "element/edit/#element_id#/#action#/"; $fileGetDefaultPath = "element/historyget/#element_id#/#element_name#"; $userUrl = $obDavEventHandler->arPath['PATH_TO_USER']; $groupUrl = $obDavEventHandler->arPath['PATH_TO_GROUP']; $currentUserGroups = CIBlockWebdavSocnet::GetUserGroups($currentUserID); foreach ($currentUserGroups as $groupID => $arGroup) { $currentUserGroups[$groupID]["PATH_FILES"] = str_replace(array("#group_id#", "#path#"), array($groupID, ''), $groupUrl . $groupFileRoot . $fileListDefaultPath); } $arResult['USER_GROUPS'] =& $currentUserGroups; } $arJSParams = array(); $arJSParams['entity_name'] = false; $arJSParams['entity_type'] = false; $arJSParams['entity_id'] = false; if (isset($ob->attributes['user_id'])) { $arJSParams['entity_type'] = 'user'; $arJSParams['entity_id'] = $ob->attributes['user_id']; } elseif (isset($ob->attributes['group_id'])) { $arJSParams['entity_type'] = 'group'; $arJSParams['entity_id'] = $ob->attributes['group_id'];
function WDUFUserFieldEdit(&$arParams, &$arResult) { global $APPLICATION; static $userIblockID = false; static $groupIblockID = false; static $iblockOptionTypes = array("group_files", "shared_files", "user_files"); static $iblockOptions = array(); static $arIBlock = array(); static $DROPPED = null; $arResult['ELEMENTS'] = array(); $arResult['JSON'] = array(); if (!CModule::IncludeModule('webdav')) { return false; } if ($DROPPED === null) { $DROPPED = CWebDavIblock::getDroppedMetaData(); $DROPPED = $DROPPED['name']; } $arResult['controlName'] = $arParams['arUserField']['FIELD_NAME']; $arValue = $arParams['arUserField']['VALUE']; if (is_array($arValue) && sizeof($arValue) > 0) { if (empty($iblockOptions)) { foreach ($iblockOptionTypes as $type) { $arOpt = CWebDavIblock::LibOptions($type, false, SITE_ID); if (is_set($arOpt, 'id') && intval($arOpt['id']) > 0) { $iblockOptions[$type] = $arOpt['id']; } } } foreach ($arValue as $elementID) { $elementID = intval($elementID); if ($elementID <= 0) { continue; } $title = ''; $dropped = false; $dbElement = CIBlockElement::GetList(array(), array('ID' => $elementID), false, false, array('ID', 'NAME', 'IBLOCK_ID', 'IBLOCK_SECTION_ID', 'SOCNET_GROUP_ID', 'CREATED_BY')); if ($dbElement && ($arElement = $dbElement->Fetch())) { $arSectionTree = WDUGetNavChainSections($arElement['IBLOCK_ID'], $arElement['IBLOCK_SECTION_ID'], false); $dropped = false; if (sizeof($arSectionTree) > 0 && $arSectionTree[0]['NAME'] == $DROPPED) { $title = GetMessage('WD_LOCAL_COPY_ONLY'); $dropped = true; } else { $type = array_search($arElement['IBLOCK_ID'], $iblockOptions); if ($type == 'group_files') { if (sizeof($arSectionTree) > 0) { $title = $arSectionTree[0]['NAME']; } } elseif ($type == 'user_files') { if (sizeof($arSectionTree) > 1 && $arSectionTree[1]['NAME'] == $DROPPED) { $title = GetMessage('WD_LOCAL_COPY_ONLY'); $dropped = true; } elseif (sizeof($arSectionTree) > 0) { $title = GetMessage('WD_MY_LIBRARY'); /*$l = sizeof($arSectionTree); for($i = 1; $i < $l; $i++) { $title .= " / " . $arSectionTree[$i]['NAME']; }*/ } } else { if (!isset($arIBlock[$arElement['IBLOCK_ID']])) { $dbIB = CIBlock::GetList(array(), array('ID' => $arElement['IBLOCK_ID'])); if ($dbIB && ($arIB = $dbIB->Fetch())) { $arIBlock[$arElement['IBLOCK_ID']] = $arIB; } } if (isset($arIBlock[$arElement['IBLOCK_ID']])) { $title = $arIBlock[$arElement['IBLOCK_ID']]['NAME']; } } } $arElement['FILE_SIZE'] = ''; $dbSize = CIBlockElement::GetProperty($arElement['IBLOCK_ID'], $arElement['ID'], array(), array('CODE' => 'WEBDAV_SIZE')); if ($dbSize && ($arSize = $dbSize->Fetch())) { $arElement['FILE_SIZE'] = CFile::FormatSize(intval($arSize['VALUE']), 0); } $arElement['FILE'] = array(); $dbSize = CIBlockElement::GetProperty($arElement['IBLOCK_ID'], $arElement['ID'], array(), array('CODE' => 'FILE')); if ($dbSize && ($arSize = $dbSize->Fetch())) { $arElement['FILE'] = CFile::GetFileArray($arSize['VALUE']); } $arSection =& $arSectionTree[0]; $detailPath = CWebDavIblock::LibOptions('lib_paths', true, $arElement['IBLOCK_ID']); $arPaths = WDUFGetPathOptions($detailPath, $arElement['IBLOCK_ID'], $arSection, $arElement); $arElement["URL_VIEW"] = $arPaths["path"]; $arElement["URL_EDIT"] = $arPaths["edit"]; $arElement["URL_DELETE_DROPPED"] = $arPaths["delete_dropped"]; $arElement["URL_GET"] = $arPaths["history_get"]; $arElement['DROPPED'] = $dropped; $arElement['TITLE'] = $title; $arResult['ELEMENTS'][] = $arElement; } } } // need to load Options for ajax dialogs $extDir = WDUFGetExtranetDir(); if ($extDir !== '') { $groupIBlockID = CWebDavIblock::LibOptions('group_files', false, SITE_ID); if (!($groupIBlockID && isset($groupIBlockID['id']) && intval($groupIBlockID['id']) > 0)) { $arGroups = CIBlockWebdavSocnet::GetUserGroups(0, false); if (sizeof($arGroups) > 0) { $arGroup = array_pop($arGroups); $groupFilesUrl = str_replace(array("///", "//"), "/", "/" . $extDir . '/workgroups/group/' . $arGroup['GROUP_ID'] . '/files/'); $arResult['JSON'][] = $groupFilesUrl; } } } else { $sharedLibID = CWebDavIblock::LibOptions('shared_files', false, SITE_ID); if (!($sharedLibID && isset($sharedLibID['id']) && intval($sharedLibID['id']) > 0 && isset($sharedLibID['base_url']) && strlen($sharedLibID['base_url']) > 0)) { if (!(CModule::IncludeModule('extranet') && strlen(CExtranet::GetExtranetSiteID()) > 0 && SITE_ID == CExtranet::GetExtranetSiteID())) { $arResult['JSON'][] = '/docs/'; $arResult['JSON'][] = '/docs/shared/'; } } $userIBlockID = CWebDavIblock::LibOptions('user_files', false, SITE_ID); if (!($userIBlockID && isset($userIBlockID['id']) && intval($userIBlockID['id']) > 0)) { $arResult['JSON'][] = '/company/personal/user/' . $GLOBALS['USER']->GetID() . '/files/lib/'; } $groupIBlockID = CWebDavIblock::LibOptions('group_files', false, SITE_ID); if (!($groupIBlockID && isset($groupIBlockID['id']) && intval($groupIBlockID['id']) > 0)) { $arGroups = CIBlockWebdavSocnet::GetUserGroups(0, false); if (sizeof($arGroups) > 0) { $arGroup = array_pop($arGroups); $arResult['JSON'][] = '/workgroups/group/' . $arGroup['GROUP_ID'] . '/files/'; } } } }
if (!empty($arResult["NOTIFY_MESSAGE"])) { ShowNote($arResult["NOTIFY_MESSAGE"]); } if (empty($arResult['ERROR_MESSAGE'])) { $title = ''; $dropped = $createdFile = false; if ($ob->_isInMeta($arResult["ELEMENT"]["ID"], "DROPPED")) { $savedMetaData = CWebDavIblock::getDroppedMetaData(); $title = GetMessage('WD_MY_LIBRARY'); $title .= ' / ' . $savedMetaData['alias']; $dropped = true; } elseif (isset($ob->attributes['user_id']) && $ob->attributes['user_id'] == $GLOBALS['USER']->GetID()) { $title = GetMessage('WD_MY_LIBRARY'); if (CIBlockWebdavSocnet::isCreatedDocFolder($ob->IBLOCK_ID, $arResult['ELEMENT']['IBLOCK_SECTION_ID'], $GLOBALS['USER']->GetID())) { $createdFile = true; $title .= ' / ' . CIBlockWebdavSocnet::getNameCreatedDocFolder(); } } elseif (isset($ob->attributes['group_id'])) { $title = $ob->arRootSection['NAME']; if ($title == GetMessage("SONET_GROUP_PREFIX")) { $arGroup = CSocNetGroup::GetByID($ob->attributes['group_id']); $title = GetMessage("SONET_GROUP_PREFIX") . $arGroup['NAME']; } } else { $title = $arParams['STR_TITLE']; } ?> <table> <tr class="wd-inline-file" id="wd-doc<?php echo intval($arResult["ELEMENT"]['ID']); ?>
protected function saveNewFile(array $fileData) { $filename = CTempFile::GetFileName(uniqid('_wd')); CheckDirPath($filename); $doc = $this->getDocHandler()->downloadFile(array('id' => $this->getFileId(), 'mimeType' => $this->getWebdav()->get_mime_type('1.' . $fileData['createType']))); file_put_contents($filename, $doc['content']); global $USER; $dataUserSection = CWebDavIblock::getRootSectionDataForUser($USER->GetID()); if (!$dataUserSection) { return array('status' => 'error'); } $createdDocFolderId = CIBlockWebdavSocnet::createCreatedDocFolder($dataUserSection['IBLOCK_ID'], $dataUserSection['SECTION_ID'], $USER->GetID()); if (!$createdDocFolderId) { return array('status' => 'error'); } $storage = new CWebDavStorageCore(); $storage->setStorageId(array('IBLOCK_ID' => $dataUserSection['IBLOCK_ID'], 'IBLOCK_SECTION_ID' => $dataUserSection['SECTION_ID'])); $nameToSavedFile = $storage->regenerateNameIfNonUnique($doc['name'], $createdDocFolderId); $tmpFile = new CWebDavStubTmpFile(); $tmpFile->path = $filename; try { $fileData = $storage->addFile($nameToSavedFile, $createdDocFolderId, $tmpFile); $response = array('status' => 'success', 'elementId' => $fileData['extra']['id'], 'sectionId' => $fileData['extra']['sectionId'], 'name' => $nameToSavedFile, 'sizeInt' => $fileData['size'], 'type' => CWebDavBase::get_mime_type($nameToSavedFile), 'link' => str_replace('#element_id#', $fileData['extra']['id'], CWebDavSocNetEvent::getRuntime()->arPath['ELEMENT_EDIT_INLINE_URL']), 'nameWithoutExtension' => GetFileNameWithoutExtension($nameToSavedFile)); } catch (Exception $e) { $response = array('status' => 'error'); } return $response; }