function _get_file_info_arr(&$res, $arParams = array())
{
global $USER;
static $arFiles = array();
static $arBPTemplateStates = array();
static $arBPParamRequired = array();
$trashID = $this->GetMetaID('TRASH');
if ($this->workflow == 'bizproc')
{
if (!isset($arBPParamRequired[$this->IBLOCK_ID]))
{
$arBPParamRequired[$this->IBLOCK_ID] = $this->IsBpParamRequired();
}
}
$info = array();
if (!in_array($res["ID"], $arFiles))
{
$res["SHOW"] = array();
$res["PERMISSION"] = $this->permission;
$res['SHOW']['SHARED'] = $res['SHARED'];
$res["~NAME"] = $res["NAME"];
$res['USER_FIELDS'] = $this->GetUfFields($res['ID']);
if ($this->permission >= "U") // 'X' if e_rights
{
$res["SHOW"]["RIGHTS"] =
(($this->e_rights &&
(isset($res['E_RIGHTS']['element_rights_edit']) || $GLOBALS['USER']->CanDoOperation('webdav_change_settings')))
? "Y" : "N");
if ($this->workflow == 'workflow')
{
$original = $res;
$LAST_ID = CIBlockElement::WF_GetLast($res['ID']);
if($LAST_ID != $res['ID'])
{
$db_res = CIBlockElement::GetList(
array(),
array("ID" => $LAST_ID, "SHOW_HISTORY" => "Y"),
false,
array("nTopCount" => 1),
$this->wfParams["selected_fields"]);
$res = $db_res->GetNext();
$res["FILE"]["FILE_SIZE"] = $this->GetFileSize($res);
if ($this->e_rights)
{
$res['E_RIGHTS'] = $this->GetPermission('ELEMENT', $res['ID']);
}
}
$res["ORIGINAL"] = $original;
$res["PERMISSION"] = $original["PERMISSION"];
$res["REAL_ID"] = $res["ID"];
$res["ID"] = $original["ID"];
$res["PROPERTY_WEBDAV_INFO_VALUE"] = $original["PROPERTY_WEBDAV_INFO_VALUE"];
$res["PROPERTY_WEBDAV_INFO_VALUE_ID"] = $original["PROPERTY_WEBDAV_INFO_VALUE_ID"];
$res["TAGS"] = $original["TAGS"];
$res["~TAGS"] = $original["~TAGS"];
$res["PREVIEW_TEXT"] = $original["PREVIEW_TEXT"];
$res["~PREVIEW_TEXT"] = $original["~PREVIEW_TEXT"];
$res["NAME"] = $original["NAME"];
$res["~NAME"] = $original["~NAME"];
$res["LOCK_STATUS"] = $original["LOCK_STATUS"];
$res["LOCKED_USER_NAME"] = $original["LOCKED_USER_NAME"];
$res["WF_LOCKED_BY"] = $original["WF_LOCKED_BY"];
$res["WF_DATE_LOCK"] = $original["WF_DATE_LOCK"];
$res["LAST_ID"] = $LAST_ID;
$res["TYPE"] = "E";
$res["SHOW"]["COPY"] = "Y";
$res["STATUS_ID"] = CIBlockElement::WF_GetCurrentStatus($LAST_ID, $res["STATUS_TITLE"]);
$res["STATUS_PERMISSION"] = CIBlockElement::WF_GetStatusPermission($res["STATUS_ID"]);
if ($res["STATUS_PERMISSION"] >= 2 || ($this->e_rights ? isset($res['E_RIGHTS']['element_edit_any_wf_status']) : ($this->permission >= "W"))) // permissions enouph to edit, draft is shown if any
{
$res["SHOW"]["UNLOCK"] = ($res['LOCK_STATUS'] == "yellow" || ($res['LOCK_STATUS'] == "red" && CWorkflow::IsAdmin()) ? "Y" : "N");
$res["SHOW"]["LOCK"] = (($res['LOCK_STATUS'] == "green") ? "Y" : "N");
$res["PERMISSION"] = ($res['LOCK_STATUS'] == "red" && !CWorkflow::IsAdmin() ? "R" : $res["PERMISSION"]);
// Edit History Delete
if ($res['ORIGINAL']['WF_NEW'] == "Y" || $res["WF_STATUS_ID"] <= 1) // Unpublished || Published and has no changes
{
$res["SHOW"]["HISTORY"] = $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] =
($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y");
}
elseif ($res["WF_STATUS_ID"] > 1) // Published element has unpublished changes
{
$res["SHOW"]["HISTORY"] = $res["SHOW"]["EDIT"] =
($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y");
$res["SHOW"]["DELETE"] = ($res["SHOW"]["EDIT"] == "Y" && $res["PERMISSION"] > "U" ? "Y" : "N");
}
if ($res["LOCK_STATUS"] == "red")
{
$res["SHOW"]["UNLOCK"] = (CWorkflow::IsAdmin() ? "Y" : "N");
$res["SHOW"]["EDIT"] = "N";
$res["SHOW"]["DELETE"] = "N";
}
elseif ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId())
{
$res["SHOW"]["UNLOCK"] = "N";
$res["SHOW"]["LOCK"] = "N";
$res["SHOW"]["DELETE"] = "N";
$res["SHOW"]["EDIT"] = "N";
}
}
if ($res["STATUS_PERMISSION"] >= 2 || ($this->e_rights ? isset($res['E_RIGHTS']['element_delete']) : ($this->permission >= "W")))
{
$res["PERMISSION"] = ($res['LOCK_STATUS'] == "red" && !CWorkflow::IsAdmin() ? "R" : $res["PERMISSION"]);
if ($res['ORIGINAL']['WF_NEW'] == "Y" || $res["WF_STATUS_ID"] <= 1) // Unpublished || Published and has no changes
{
$res["SHOW"]["DELETE"] = ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y");
}
elseif ($res["WF_STATUS_ID"] > 1) // Published element has unpublished changes
{
$res["SHOW"]["DELETE"] = ($this->check_creator && ($res["CREATED_BY"] != $GLOBALS["USER"]->GetId()) && ($res["PERMISSION"] > "U") ? "N" : "Y");
}
}
} // $this->workflow == "workflow"
elseif($this->workflow == "bizproc")
{
if ($this->e_rights)
$res["PERMISSION"] = $res["E_RIGHTS"];
if($res['LOCK_STATUS'] != "red"):
$res['LOCK_STATUS_BP'] = (call_user_func(array(
$this->wfParams["DOCUMENT_TYPE"][1],
"IsDocumentLocked"
), $res["ID"] | $res["item_id"], "") ? "red" : "green");
$res['LOCK_STATUS'] = ($res['LOCK_STATUS_BP'] == "red" ? "red" : $res['LOCK_STATUS']);
endif;
$res["PERMISSION"] = ($res['LOCK_STATUS'] == "red" ? "R" : $res["PERMISSION"]);
$res["USER_GROUPS"] = $this->USER["GROUPS"];
if ($res["CREATED_BY"] == $GLOBALS["USER"]->GetID())
$res["USER_GROUPS"][] = "Author";
$res["DOCUMENT_ID"] = $this->wfParams["DOCUMENT_TYPE"];
$res["DOCUMENT_ID"][2] = $res["ID"] | $res["item_id"];
$res["~arDocumentStates"] = CBPDocument::GetDocumentStates(
$this->wfParams["DOCUMENT_TYPE"],
$res["DOCUMENT_ID"]);
$res["arDocumentStates"] = array();
foreach ($res["~arDocumentStates"] as $key => $arDocumentState)
{
$res["~arDocumentStates"][$key]["ViewWorkflow"] = CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::ViewWorkflow,
$GLOBALS["USER"]->GetID(),
$res["DOCUMENT_ID"],
array(
"DocumentType" => $this->wfParams["DOCUMENT_TYPE"],
"AllUserGroups" => $res["USER_GROUPS"],
"DocumentStates" => $res["~arDocumentStates"],
"WorkflowId" => $key));
if ($arDocumentState["ID"] <> '' && $res["~arDocumentStates"][$key]["ViewWorkflow"])
{
$res["arDocumentStates"][$key] = $arDocumentState;
$res["PERMISSION"] = "U";
}
}
if ($res['LOCK_STATUS'] != "red")
{
if (CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::WriteDocument,
$GLOBALS["USER"]->GetID(),
$res["DOCUMENT_ID"],
array(
"DocumentType" => $this->wfParams["DOCUMENT_TYPE"],
"IBlockId" => $this->IBLOCK_ID,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $res["USER_GROUPS"],
"DocumentStates" => $res["~arDocumentStates"])))
{
$res["PERMISSION"] = "W";
}
elseif (!CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::ReadDocument,
$GLOBALS["USER"]->GetID(),
$res["DOCUMENT_ID"],
array(
"DocumentType" => $this->wfParams["DOCUMENT_TYPE"],
"IBlockId" => $this->IBLOCK_ID,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $res["USER_GROUPS"],
"DocumentStates" => $res["~arDocumentStates"])))
{
$res["PERMISSION"] = "D";
}
}
if ($this->CheckRight($res["PERMISSION"], 'element_read') > "D")
{
if ($arParams["get_clones"] == "Y" && intval($res["WF_PARENT_ELEMENT_ID"]) <= 0)
{
$arFilter = array(
"WF_PARENT_ELEMENT_ID" => $res["ID"],
"SHOW_HISTORY" => "Y",
);
$db_rs = CIBlockElement::GetList(
array("ID" => "ASC"),
$arFilter);
if ($db_rs && $rs = $db_rs->Fetch())
{
$res["CHILDREN"] = array();
do
{
if ($rs["IBLOCK_SECTION_ID"] == $trashID)
continue;
$rs["SHOW"] = array();
$rs["PERMISSION"] = "R";
$rs["DOCUMENT_ID"] = $res["DOCUMENT_ID"];
$rs["DOCUMENT_ID"][2] = $rs["ID"];
$rs["~arDocumentStates"] = CBPDocument::GetDocumentStates(
$this->wfParams["DOCUMENT_TYPE"],
$rs["DOCUMENT_ID"]);
$USER_GROUPS = $this->USER["GROUPS"];
if ($rs["CREATED_BY"] == $GLOBALS["USER"]->GetID())
$USER_GROUPS[] = "Author";
if (!CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::ReadDocument,
$GLOBALS["USER"]->GetID(),
$rs["DOCUMENT_ID"],
array(
"DocumentType" => $this->wfParams["DOCUMENT_TYPE"],
"IBlockId" => $this->IBLOCK_ID,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $USER_GROUPS,
"DocumentStates" => $rs["~arDocumentStates"]
)
)
)
continue;
if (CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::WriteDocument,
$GLOBALS["USER"]->GetID(),
$rs["DOCUMENT_ID"],
array(
"DocumentType" => $this->wfParams["DOCUMENT_TYPE"],
"IBlockId" => $this->IBLOCK_ID,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $USER_GROUPS,
"DocumentStates" => $rs["~arDocumentStates"])))
{
$rs["PERMISSION"] = "W";
}
$rs["arDocumentStates"] = array();
foreach ($rs["~arDocumentStates"] as $key => $arDocumentState)
{
if (CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::ViewWorkflow,
$GLOBALS["USER"]->GetID(),
$rs["DOCUMENT_ID"],
array(
"DocumentType" => $this->wfParams["DOCUMENT_TYPE"],
"IBlockId" => $this->IBLOCK_ID,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $USER_GROUPS,
"DocumentStates" => $rs["~arDocumentStates"],
"WorkflowId" => $key)))
{
$rs["arDocumentStates"][$key] = $arDocumentState;
$rs["PERMISSION"] = (empty($rs["PERMISSION"]) ? "U" : $rs["PERMISSION"]);
}
}
if ($rs["PERMISSION"] >= "U")
{
if (CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::StartWorkflow,
$USER->GetID(),
$rs["DOCUMENT_ID"],
array(
"IBlockId" => $this->IBLOCK_ID,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $USER_GROUPS,
"DocumentStates" => $rs["~arDocumentStates"])))
{
$rs["SHOW"]["BP_START"] = "Y";
}
$rs["SHOW"]["BP_VIEW"] = (!empty($rs["arDocumentStates"]) ? "Y" : "N");
$rs["SHOW"]["EDIT"] = ($rs["PERMISSION"] >= "W" ? "Y" : "N");
$rs["SHOW"]["BP"] = ($rs["SHOW"]["BP_VIEW"] == "Y" || $rs["SHOW"]["BP_START"] == "Y" ? "Y" : "N");
$rs["SHOW"]["EDIT"] = (($rs["PERMISSION"] >= "W" && intval($rs["WF_PARENT_ELEMENT_ID"]) > 0) || $this->permission >= "W" ? "Y" : "N");
if ($rs["BP_LOCK_STATUS"] == "red")
{
$rs["SHOW"]["UNLOCK"] = (CBPDocument::IsAdmin() ? "Y" : "N");
$rs["SHOW"]["EDIT"] = "N";
}
elseif ($rs["LOCK_STATUS"] == "red" && $this->permission > "U") // TODO!
{
$rs["SHOW"]["UNLOCK"] = "Y";
$rs["SHOW"]["EDIT"] = "N";
}
elseif ($this->check_creator && $rs["CREATED_BY"] != $GLOBALS["USER"]->GetId())
{
$rs["SHOW"]["UNLOCK"] = "N";
$rs["SHOW"]["LOCK"] = "N";
$rs["SHOW"]["DELETE"] = "N";
$rs["SHOW"]["EDIT"] = "N";
}
else
{
$rs["SHOW"]["UNLOCK"] = ($rs['LOCK_STATUS'] == "yellow" ? "Y" : "N");
$rs["SHOW"]["LOCK"] = ($rs['LOCK_STATUS'] == "green" ? "Y" : "N");
$rs["SHOW"]["DELETE"] = $rs["SHOW"]["HISTORY"] = ($rs["PERMISSION"] > "U" ? "Y" : "N");
}
}
$res["CHILDREN"][$rs["ID"]] = $rs;
} while ($rs = $db_rs->Fetch());
}
}
if (CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::StartWorkflow,
$USER->GetID(),
$res["DOCUMENT_ID"],
array(
"IBlockId" => $this->IBLOCK_ID,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $res["USER_GROUPS"],
"DocumentStates" => $res["~arDocumentStates"])))
{
$res["SHOW"]["BP_START"] = "Y";
}
$res["SHOW"]["BP_VIEW"] = (!empty($res["arDocumentStates"]) ? "Y" : "N");
if($this->workflow == 'bizproc')
{
$res["SHOW"]["BP_VERSIONS"] = (intval($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N");
$res["SHOW"]["BP_CLONE"] = (intval($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N");
$res["SHOW"]["COPY"] = (intval($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N");
}
else
{
$res["SHOW"]["BP_VERSIONS"] = $res["SHOW"]["BP_CLONE"] = $res["SHOW"]["COPY"] = 'N';
}
if ($this->CheckRight($res['PERMISSION'], 'element_edit_any_wf_status') < "W" && (intval($res["WF_PARENT_ELEMENT_ID"]) <= 0) || $res["WF_PARENT_ELEMENT_ID"] == $res["ID"])
{
$arDocumentStates = CBPDocument::GetDocumentStates(
$this->wfParams["DOCUMENT_TYPE"],
null);
if (!empty($arDocumentStates))
{
CBPDocument::CanUserOperateDocumentType(
CBPCanUserOperateOperation::WriteDocument,
$GLOBALS["USER"]->GetID(),
$this->wfParams["DOCUMENT_TYPE"],
array(
"IBlockId" => $this->IBLOCK_ID,
"IBlockPermission" => $this->permission,
"UserGroups" => $this->USER["GROUPS"],
"AllUserGroups" => $res["USER_GROUPS"],
"DocumentStates" => $arDocumentStates));
}
else
{
$res["SHOW"]["BP_CLONE"] = "N";
}
}
$res["SHOW"]["BP"] = ($res["SHOW"]["BP_VIEW"] == "Y" || $res["SHOW"]["BP_START"] == "Y" ? "Y" : "N");
$res["SHOW"]["EDIT"] = ($this->CheckRight($res["PERMISSION"], "element_edit_any_wf_status") >= "W" ? "Y" : "N");
if ($res["LOCK_STATUS"] == "red")
{
$res["SHOW"]["UNLOCK"] = ((CBPDocument::IsAdmin() || $this->CheckRight($res['PERMISSION'], "element_edit") > "W") ? "Y" : "N");
$res["SHOW"]["LOCK"] = "N";
$res["SHOW"]["HISTORY"] = ($this->CheckRight($res['PERMISSION'], 'element_edit') > "U" ? "Y" : "N");
$res["SHOW"]["DELETE"] = "N";
$res["SHOW"]["EDIT"] = "N";
}
elseif ($this->InTrash($res))
{
$bRightsEdit_gt_W = ($this->CheckRight($res['PERMISSION'], 'element_rights_edit') > "W");
$res["SHOW"]["EDIT"] = ($bRightsEdit_gt_W ? "Y" : "N");
$res["SHOW"]["HISTORY"] = ($bRightsEdit_gt_W ? "Y" : "N");
$res["SHOW"]["DELETE"] = ($bRightsEdit_gt_W ? "Y" : "N");
$res["SHOW"]["UNLOCK"] = "N";
$res["SHOW"]["LOCK"] = "N";
$res["SHOW"]["BP_START"] = "N";
$res["SHOW"]["BP_VIEW"] = ($bRightsEdit_gt_W ? "Y" : "N");
$res["SHOW"]["BP_VERSIONS"] = ($bRightsEdit_gt_W ? "Y" : "N");
$res["SHOW"]["BP_CLONE"] = ($bRightsEdit_gt_W ? "Y" : "N");
$res["SHOW"]["COPY"] = (intval($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N");
}
elseif ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId())
{
$res["SHOW"]["UNLOCK"] = "N";
$res["SHOW"]["LOCK"] = "N";
$res["SHOW"]["DELETE"] = "N";
$res["SHOW"]["EDIT"] = "N";
}
else
{
$bElementEdit_gt_U = ($this->CheckRight($res['PERMISSION'], 'element_rights_edit') > 'U');
$res["SHOW"]["HISTORY"] = ($bElementEdit_gt_U ? "Y" : "N");
$res["SHOW"]["DELETE"] = ($bElementEdit_gt_U ? "Y" : "N");
$res["SHOW"]["UNLOCK"] = (($bElementEdit_gt_U && ($res["LOCK_STATUS"] == "yellow")) ? "Y" : "N");
$res["SHOW"]["LOCK"] = (($bElementEdit_gt_U && ($res["LOCK_STATUS"] == "green")) ? "Y" : "N");
}
if ($arBPParamRequired[$this->IBLOCK_ID])
$res["SHOW"]["COPY"] = "N";
}
} // $this->workflow == "bizproc"
else
{
$res["SHOW"]["UNLOCK"] = (($res['LOCK_STATUS'] == "yellow" || (($res['LOCK_STATUS'] == "red" ) && ($res["PERMISSION"] > 'W'))) ? "Y" : "N");
$res["SHOW"]["LOCK"] = ($res['LOCK_STATUS'] == "green" ? "Y" : "N");
$res["SHOW"]["COPY"] = "Y";
$res["SHOW"]["HISTORY"] = $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] =
($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y");
$res["SHOW"]["HISTORY"] = (($res["SHOW"]["HISTORY"] == "Y" && $this->workflow == "bizproc_limited") ? "Y" : "N");
if ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId())
{
$res["SHOW"]["UNLOCK"] = "N";
$res["SHOW"]["LOCK"] = "N";
$res["SHOW"]["DELETE"] = "N";
$res["SHOW"]["EDIT"] = "N";
}
elseif ($res["LOCK_STATUS"] == "red" && $res["PERMISSION"] < 'X')
{
$res["SHOW"]["DELETE"] = "N";
$res["SHOW"]["EDIT"] = "N";
}
if ($this->e_rights)
{
$arShow = array(
"COPY" => "element_edit",
"DELETE" => "element_delete",
"UNDELETE" => "element_no_prems",
"EDIT" => "element_edit",
"HISTORY" => "element_edit",
"LOCK" => "element_edit",
"UNLOCK" => "element_edit",
"RIGHTS" => "element_rights_edit"
);
$bInTrash = ($this->InTrash($res));
foreach($arShow as $action => $right)
{
if (
($res['LOCK_STATUS'] == 'red')
|| $bInTrash
)
$right = "element_rights_edit";
if (!isset($res['E_RIGHTS'][$right]))
$res['SHOW'][$action] = 'N';
}
}
}
}
else
{
$res["PERMISSION"] = ($res["WF_NEW"] == "Y" || (intval($res["WF_PARENT_ELEMENT_ID"]) > 0 && ($res["WF_PARENT_ELEMENT_ID"] != $res['ID'])) ? "D" : $this->permission);
if ($res["PERMISSION"] > "D" && $this->workflow == "bizproc")
{
$res["PERMISSION"] = ($res["BP_PUBLISHED"] == "Y" ? $this->permission : "D");
}
}
$res["SHOW"]["UNDELETE"] = "N";
$secPath = "/".implode("/", $this->GetNavChain(array("section_id" => $res["IBLOCK_SECTION_ID"]), false));
$res["SECTION_PATH"] = str_replace("//", "/", $secPath);
$res["PATH"] = str_replace("//", "/", $secPath . "/" . $res["~NAME"]);
$arFiles[$res["ID"]] = $res;
}
else
{
$res = array_merge($res, $arFiles[$res["ID"]]);
}
if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND')
{
$info["path"] = $res['PATH'];
$info["path"] = (SITE_CHARSET != "UTF-8" ? $GLOBALS["APPLICATION"]->ConvertCharset($info["path"], SITE_CHARSET, "UTF-8") : $info["path"]);
$info["props"] = array();
$info["props"][] = array('ns'=>'DAV:', 'name'=>"creationdate", 'val'=>
(isset($res["DATE_CREATE_UNIX"]) ? $res["DATE_CREATE_UNIX"] : MakeTimeStamp($res["DATE_CREATE"])));
$info["props"][] = array('ns'=>'DAV:', 'name'=>"getlastmodified", 'val'=>
(isset($res["TIMESTAMP_X_UNIX"]) ? $res["TIMESTAMP_X_UNIX"] : MakeTimeStamp($res["TIMESTAMP_X"])));
$info["props"][] = array('ns'=>'DAV:', 'name'=>"creationdate", 'val'=>MakeTimeStamp($res["DATE_CREATE"]));
$info["props"][] = array('ns'=>'DAV:', 'name'=>"getlastmodified", 'val'=>MakeTimeStamp($res["TIMESTAMP_X"]));
$info["props"][] = array('ns'=>'DAV:', 'name'=>"getcontenttype", 'val'=>$res["FILE"]["CONTENT_TYPE"]);
$info["props"][] = array('ns'=>'DAV:', 'name'=>"getcontentlength", 'val'=>$res["FILE"]["FILE_SIZE"]);
$info["props"][] = array('ns'=>'DAV:', 'name'=>"isreadonly", 'val'=>($res["PERMISSION"] >= "W" ? "false" : "true"));
$info["props"][] = array('ns'=>'DAV:', 'name'=>"ishidden", 'val'=>($res["ACTIVE"] == "Y" ? "false" : "true"));
$info["props"][] = array('ns'=>'DAV:', 'name'=>"iscollection", 'val'=>0);
$info["props"][] = array('ns'=>'DAV:', 'name'=>"resourcetype", 'val'=>''); // required by RFC && LibreOffice
$info["props"][] = $this->_get_lock_prop();
}
if ($this->InTrash($res))
{
if ($this->workflow != "bizproc")
{
$res["SHOW"]["EDIT"] = "N";
$res["SHOW"]["LOCK"] = "N";
$res["SHOW"]["UNLOCK"] = "N";
$bAdmin = false;
if ($GLOBALS['USER']->CanDoOperation('webdav_change_settings'))
$bAdmin = true;
elseif ($this->e_rights
&& isset($res['E_RIGHTS']['element_rights_edit']))
$bAdmin = true;
elseif (!$this->e_rights
&& $this->permission > "W")
$bAdmin = true;
$res["SHOW"]["DELETE"] = $bAdmin ? "Y" : "N";
$res["SHOW"]["UNDELETE"] = $bAdmin ? "Y" : "N";
}
}
if ($this->_parse_webdav_info($res))
{
if (is_array($res["PROPS"]))
{
foreach ($res["PROPS"] as $ns_name => $ns_props)
{
foreach ($ns_props as $prop_name => $prop_val)
{
if(is_scalar($prop_val))
{
if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND')
$info["props"][] = CWebDavBase::_mkprop($ns_name, $prop_name, $prop_val);
}
}
}
}
}
return $info;
}