Esempio n. 1
0
$documentType = explode("_", $_REQUEST["DOCUMENT_ID"]);
$arParams = array();
$arParams["IBLOCK_ID"] = $IBLOCK_ID = intval($documentType[1]);
$object = trim($documentType[2]);
$object_id = intval($documentType[3]);
$popupWindow = new CJSPopup('', '');
if (!CModule::IncludeModule("iblock")) {
    $popupWindow->ShowError(GetMessage("SONET_IB_MODULE_IS_NOT_INSTALLED"));
} elseif (!CModule::IncludeModule("webdav")) {
    $popupWindow->ShowError(GetMessage("SONET_WD_MODULE_IS_NOT_INSTALLED"));
} elseif ($IBLOCK_ID <= 0) {
    $popupWindow->ShowError(GetMessage("SONET_IBLOCK_ID_EMPTY"));
} elseif ($object_id <= 0 && ($object != "user" && $object != "group")) {
    $popupWindow->ShowError(GetMessage("SONET_GROUP_NOT_EXISTS"));
}
$res = CIBlockWebdavSocnet::GetUserMaxPermission($object, $object_id, $USER->GetID(), $IBLOCK_ID);
$arParams["PERMISSION"] = $res["PERMISSION"];
$arParams["CHECK_CREATOR"] = $res["CHECK_CREATOR"];
if ($arParams["PERMISSION"] < "W" || $arParams["CHECK_CREATOR"] == "Y") {
    $popupWindow->ShowError($object == "user" ? GetMessage("SONET_USER_FILES_ACCESS_DENIED") : GetMessage("SONET_GROUP_FILES_ACCESS_DENIED"));
}
$arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "SOCNET_GROUP_ID" => false, "CHECK_PERMISSIONS" => "N", "SECTION_ID" => 0);
if ($object == "user") {
    $arFilter["CREATED_BY"] = $object_id;
} else {
    $arFilter["SOCNET_GROUP_ID"] = $object_id;
}
$arLibrary = array();
$db_res = CIBlockSection::GetList(array(), $arFilter, false, array("ID", "UF_USE_BP", 'UF_USE_EXT_SERVICES'));
if (!($db_res && ($arLibrary = $db_res->GetNext()))) {
    $popupWindow->ShowError(GetMessage("SONET_WEBDAV_NOT_EXISTS"));
 /**
  * Метод проверяет права на выполнение операций над документами заданного типа. Проверяются операции 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;
 }
Esempio n. 3
0
$arParams['USE_AUTH'] = $arParams['FILES_USE_AUTH'] == "Y" ? "Y" : "N";
$arParams["NAME_FILE_PROPERTY"] = strToupper(trim(empty($arParams["FILE_NAME_FILE_PROPERTY"]) ? "FILE" : $arParams["FILE_NAME_FILE_PROPERTY"]));
$arParams["FILES_PATH_TO_SMILE"] = !empty($arParams["PATH_TO_FORUM_SMILE"]) ? $arParams["PATH_TO_FORUM_SMILE"] : "/bitrix/images/forum/smile/";
$arResult['BASE_URL'] = $object == "user" ? $arParams["FILES_USER_BASE_URL"] : $arParams["FILES_GROUP_BASE_URL"];
if ($arParams["SEF_MODE"] == "Y") {
    $arResult['BASE_URL'] = $object == "user" ? $arResult["PATH_TO_USER_FILES"] : $arResult["PATH_TO_GROUP_FILES"];
}
$arResult['BASE_URL'] = rtrim(str_replace(array("#user_id#", "#group_id#", "#path#"), array($arResult["VARIABLES"]["user_id"], $arResult["VARIABLES"]["group_id"], ""), $arResult['BASE_URL']), '/');
/***************** ADDITIONAL **************************************/
$arParams["SET_NAV_CHAIN"] = $arParams["SET_NAV_CHAIN"] == "N" ? "N" : "Y";
if ($object == 'user') {
    CIBlockWebdavSocnet::UserERights($arParams['IBLOCK_ID']);
} elseif ($object == 'group') {
    CIBlockWebdavSocnet::GroupERights($arParams['IBLOCK_ID']);
}
$res = CIBlockWebdavSocnet::GetUserMaxPermission($object, $object == "user" ? $arResult["VARIABLES"]["user_id"] : $arResult["VARIABLES"]["group_id"], $USER->GetID(), $arParams['IBLOCK_ID']);
$arParams["PERMISSION"] = $res["PERMISSION"];
$arParams["CHECK_CREATOR"] = $res["CHECK_CREATOR"];
$arParams["STR_TITLE"] = GetMessage("SONET_FILES");
$arParams["SHOW_WEBDAV"] = "Y";
/********************************************************************
				/Input params
********************************************************************/
$arError = array();
/********************************************************************
				Check Socnet Permission and Main Data
********************************************************************/
/************** Can View *******************************************/
if ($arParams["PERMISSION"] < "R") {
    $arError[] = array("id" => "access_denied", "text" => GetMessage("SONET_ACCESS_DENIED"));
    /************** Active Feature *************************************/
Esempio n. 4
0
 // 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']);