Esempio n. 1
0
             if (CBPDocument::CanUserOperateDocument(CBPWebDavCanUserOperateOperation::DeleteDocument, $GLOBALS["USER"]->GetID(), $arParams["DOCUMENT_ID"], array("UserGroups" => $GLOBALS["USER"]->GetUserGroupArray()))) {
                 CBPHistoryService::Delete($ID, $arParams["DOCUMENT_ID"]);
             } else {
                 $arError[] = array("id" => "access_denied", "text" => GetMessage("BPADH_NO_PERMS"));
             }
         } else {
             CBPHistoryService::Delete($ID, $arParams["DOCUMENT_ID"]);
         }
         break;
     case "recover":
         if ($arParams["MODULE_ID"] == "webdav" && isset($arParams["OBJECT"])) {
             $arParams['OBJECT']->IsDir(array('element_id' => $arParams["DOCUMENT_ID"][2]));
             if (($arParams["OBJECT"]->workflow == 'bizproc' || $arParams["OBJECT"]->workflow == 'bizproc_limited') && $arParams['OBJECT']->arParams['not_found'] == false) {
                 CBPDocument::AddDocumentToHistory($arParams['DOCUMENT_ID'], $arParams['OBJECT']->arParams["element_name"], $GLOBALS["USER"]->GetID());
                 if (method_exists('CIBlockDocumentWebdav', 'TruncateHistory')) {
                     CIBlockDocumentWebdav::TruncateHistory($arParams['OBJECT']->wfParams['DOCUMENT_TYPE'], $arParams["DOCUMENT_ID"][2]);
                 }
             }
         }
         try {
             if (!CBPHistoryService::RecoverDocumentFromHistory($ID)) {
                 $arError[] = array("id" => "not recover", "text" => GetMessage("BPADH_RECOVERY_ERROR"));
             }
         } catch (Exception $e) {
             $arError[] = array("id" => "not recover", "text" => $e->getMessage());
         }
         break;
 }
 if (!empty($arError)) {
     $e = new CAdminException($arError);
     $arResult["ERROR_MESSAGE"] = $e->GetString();
Esempio n. 2
0
    ShowError(GetMessage("WD_ERROR_ELEMENT_NOT_FOUND"));
    return 0;
} elseif ($arParams["CHECK_CREATOR"] == "Y" && $res["CREATED_BY"] != $GLOBALS['USER']->GetId()) {
    ShowError(GetMessage("WD_ACCESS_DENIED"));
    return 0;
}
$res["FILE_EXTENTION"] = strtolower(strrchr($res['NAME'], '.'));
$res["~WF_STATUS_TITLE"] = CIBlockElement::WF_GetStatusTitle($res["WF_STATUS_ID"]);
$res["WF_STATUS_TITLE"] = htmlspecialcharsEx($res["~WF_STATUS_TITLE"]);
/************** Paths **********************************************/
$res["URL"] = array("DOWNLOAD" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_HISTORY_GET_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "~DOWNLOAD" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_HISTORY_GET_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "VIEW" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "~VIEW" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "EDIT" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "EDIT")), "~EDIT" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "EDIT")), "DELETE" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "DELETE")), "~DELETE" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "DELETE")));
$res["URL"]["DELETE"] = WDAddPageParams($res["URL"]["DELETE"], array("edit" => "y", "sessid" => bitrix_sessid(), 'back_url' => urlencode($APPLICATION->GetCurPageParam())));
$res["URL"]["~DELETE"] = WDAddPageParams($res["URL"]["~DELETE"], array("edit" => "y", "sessid" => bitrix_sessid(), 'back_url' => urlencode($APPLICATION->GetCurPageParam())));
/************** Permission *****************************************/
$arResult["ELEMENT"] = $res;
$arResult["ELEMENT"]["PERMISSION"] = CIBlockDocumentWebdav::GetIBRights('ELEMENT', $arParams["IBLOCK_ID"], $arParams["ELEMENT_ID"]);
if (CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_read") < "R") {
    ShowError(GetMessage("WD_ACCESS_DENIED"));
    return 0;
}
$res = array("UNLOCK" => "N", "EDIT" => CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_edit") >= "W" ? "Y" : "N", "DELETE" => CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_edit") >= "W" ? "Y" : "N", "HISTORY" => "Y");
if ($arResult["ELEMENT"]["LOCK_STATUS"] == "yellow" || $arResult["ELEMENT"]["LOCK_STATUS"] == "red" && (CWorkflow::IsAdmin() || $USER->CanDoOperation('webdav_change_settings'))) {
    $res["UNLOCK"] = "Y";
}
if ($arResult["ELEMENT"]["LOCK_STATUS"] == "red") {
    $res["EDIT"] = "N";
} elseif (CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_bizproc_start") == "U") {
    $res["EDIT"] = $arResult["ELEMENT"]["WF_STATUS_ID"] > 1 && $arResult["WF_STATUSES_PERMISSION"][$arResult["ELEMENT"]["WF_STATUS_ID"]] < 2 ? "N" : "Y";
}
$arResult["ELEMENT"]["SHOW"] = $res;
/************** Last element ***************************************/
Esempio n. 3
0
 function _set_lock(&$options, $op)
 {
     $lock = $op == 'LOCK';
     $is_dir = false;
     $ID = 0;
     $bFirstElement = false;
     $arProps = $this->_get_lock($options);
     if (!$this->CheckWebRights("", array('action' => 'lock', 'arElement' => $this->arParams))) {
         return $this->ThrowAccessDenied(__LINE__);
     }
     if (!is_array($arProps)) {
         if ($lock && $this->arParams['not_found'] === true) {
             if (!$this->CheckName($this->arParams["basename"])) {
                 return "400 bad request";
             } elseif ($this->check_creator && $this->arParams["is_file"] === true && $this->arParams["element_array"]["CREATED_BY"] != $GLOBALS["USER"]->GetID()) {
                 return $this->ThrowAccessDenied(__LINE__);
             } elseif ($this->arParams["parent_id"] !== false) {
                 $options1 = array('path' => $options["path"], 'content_length' => 0, 'content_type' => "", 'WF_COMMENTS' => GetMessage("WD_FILE_IS_CREATED_BY_LOCK"));
                 $stat = $this->PUT($options1);
                 if ($stat === false) {
                     return $this->ThrowAccessDenied(__LINE__);
                 } elseif (is_string($stat)) {
                     return $stat;
                 } else {
                     if (is_resource($stat) && get_resource_type($stat) == 'stream') {
                         fclose($stat);
                     }
                     if (!$this->CheckWebRights("", array("action" => "create", "arElement" => $this->arParams))) {
                         return $this->ThrowAccessDenied(__LINE__);
                     }
                     $this->put_commit($options1);
                 }
                 $ID = intVal($options1["ELEMENT_ID"]);
                 if ($ID <= 0) {
                     return "409 Conflict";
                 } else {
                     return "200 OK";
                 }
             } else {
                 return $arProps;
                 // 404 not found
             }
         }
         return $arProps;
         // error in _get_lock
     }
     $ID = $this->arParams['item_id'];
     $is_dir = $this->arParams["is_dir"];
     if ($lock) {
         if ($is_dir && !empty($options["depth"])) {
             return "409 Conflict";
         } elseif (!$is_dir && CIBlockElement::WF_IsLocked($ID, $locked_by, $date_lock)) {
             return false;
         }
         $options["timeout"] = time() + 300;
         // 5min. hardcoded
         if (isset($options["update"])) {
             $token = $options["update"];
             $arProps["LOCK"] = is_array($arProps["LOCK"]) ? $arProps["LOCK"] : array();
             if (array_key_exists($token, $arProps["LOCK"]) && strlen($arProps["LOCK"][$token]["exclusivelock"]) > 0) {
                 $arProps["LOCK"][$token]["expires"] = $options["timeout"];
                 $arProps["LOCK"][$token]["modified"] = time();
                 if (array_key_exists("owner", $arProps["LOCK"][$token])) {
                     $options["owner"] = $arProps["LOCK"][$token]["owner"];
                 }
                 $options["scope"] = $arProps["LOCK"][$token]["exclusivelock"] ? "exclusive" : "shared";
                 $options["type"] = $arProps["LOCK"][$token]["exclusivelock"] ? "write" : "read";
                 if ($bFirstElement) {
                     $arProps["FIRST"] = "Y";
                 }
                 CIBlockElement::SetPropertyValues($ID, $this->IBLOCK_ID, serialize($arProps), "WEBDAV_INFO");
                 CIBlockElement::WF_Lock($ID);
                 $this->_onEvent('Lock', $ID);
                 return true;
             } else {
                 return false;
             }
         }
         $arProps["LOCK"][$options["locktoken"]] = array("created" => time(), "modified" => time(), "owner" => $options["owner"], "expires" => $options["timeout"], "locktoken" => $options["locktoken"], "exclusivelock" => $options["scope"] === "exclusive" ? 1 : 0);
     } else {
         if (!empty($options["token"])) {
             $token = $options["token"];
             unset($arProps["LOCK"][$token]);
         } else {
             unset($arProps["LOCK"]);
         }
         if ($this->workflow == 'bizproc' && $GLOBALS['USER']->CanDoOperation('webdav_change_settings')) {
             $arDocId = $this->wfParams["DOCUMENT_TYPE"];
             $arDocId[2] = $ID;
             $arStates = CBPDocument::GetDocumentStates($this->wfParams["DOCUMENT_TYPE"], $arDocId);
             foreach ($arStates as $workflowId => $arState) {
                 CIBlockDocumentWebdav::UnlockDocument($ID, $workflowId);
             }
         }
     }
     if ($is_dir) {
         $se = new CIBlockSection();
         $x = $se->Update($ID, array("DESCRIPTION" => serialize($arProps)));
     } else {
         if ($lock && $bFirstElement) {
             $arProps["FIRST"] = "Y";
         }
         CIBlockElement::SetPropertyValues($ID, $this->IBLOCK_ID, serialize($arProps), "WEBDAV_INFO");
         if ($lock) {
             CIBlockElement::WF_Lock($ID, $this->workflow == "workflow");
         } else {
             CIBlockElement::WF_UnLock($ID, $this->workflow == "workflow");
         }
         $this->_onEvent($lock ? 'Lock' : 'Unlock', $ID);
         $x = true;
     }
     return $x ? $lock ? "200 OK" : "204 No Content" : "409 Conflict";
 }
Esempio n. 4
0
 public static function OnAddToHistory($arParams)
 {
     $docType = $arParams['DOCUMENT_ID'];
     if (!($docType[0] === 'webdav' && strpos($docType[1], "Webdav") !== false)) {
         return;
     }
     CIBlockDocumentWebdav::TruncateHistory($docType, $docType[2]);
 }