- Модуль: dav
- Путь к файлу: ~/bitrix/modules/dav/classes/general/exchangemail.php
- Класс: CDavExchangeMail
- Вызов: CDavExchangeMail::GetFoldersList
public function GetFoldersList($arFilter)
{
$this->ClearErrors();
$request = $this->CreateSOAPRequest("POST", $this->GetPath());
$request->AddHeader("Content-Type", "text/xml; charset=utf-8");
$request->AddHeader("SOAPAction", "http://schemas.microsoft.com/exchange/services/2006/messages/FindFolder");
$request->AddHeader("Connection", "Keep-Alive");
$arMapTmp = array("mailbox" => "Mailbox", "id" => "Id", "xml_id" => "Id");
CDavExchangeClient::NormalizeArray($arFilter, $arMapTmp);
$arParentFolderId = array();
if (array_key_exists("Id", $arFilter))
{
$arParentFolderId["id"] = $arFilter["Id"];
}
else
{
$arParentFolderId["id"] = "inbox";
}
if (array_key_exists("Mailbox", $arFilter))
{
$arParentFolderId["mailbox"] = $arFilter["Mailbox"];
}
$request->CreateFindFolderBody($arParentFolderId, "AllProperties");
$this->Connect();
$response = $this->Send($request);
$this->Disconnect();
if (is_null($response))
{
return null;
}
if ($this->ParseError($response))
{
return null;
}
$arResultFoldersList = [];
$xmlDoc = $response->GetBodyXml();
$arResponseMessage = $xmlDoc->GetPath("/Envelope/Body/FindFolderResponse/ResponseMessages/FindFolderResponseMessage");
foreach ($arResponseMessage as $responseMessage)
{
$arResponseCode = $responseMessage->GetPath("/FindFolderResponseMessage/ResponseCode");
$responseCode = null;
if (!empty($arResponseCode))
{
$responseCode = $arResponseCode[0]->GetContent();
}
$responseClass = $responseMessage->GetAttribute("ResponseClass");
if (
(!is_null($responseClass) && ($responseClass !== "Success"))
|| (!is_null($responseCode) && ($responseCode !== "NoError"))
)
{
$arMessageText = $responseMessage->GetPath("/FindFolderResponseMessage/MessageText");
$messageText = "Error";
if (!empty($arMessageText))
{
$messageText = $arMessageText[0]->GetContent();
}
$this->AddError(!is_null($responseCode) ? $this->Encode($responseCode) : $this->Encode($responseClass), $this->Encode($messageText));
continue;
}
$arMailFolder = $responseMessage->GetPath("/FindFolderResponseMessage/RootFolder/Folders/Folder");
foreach ($arMailFolder as $mailFolder)
{
$arResultFoldersList[] = $this->ConvertMailFolderToArray($mailFolder);
}
}
return $arResultFoldersList;
}