• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/iblock.php
  • Класс: CWebDavIblock
  • Вызов: CWebDavIblock::_get_file_info_arr
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;
}