• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/exchangecalendar2.php
  • Класс: CDavExchangeCalendar
  • Вызов: CDavExchangeCalendar::FindInstance
public function FindInstance($params)
	{
		$id = null;
		$changekey = null;

		$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/UpdateItem");
		$request->AddHeader("Connection", "Keep-Alive");


		$arParentFolderId = [
			'id' => 'calendar',
			'changekey' => $params['changekey']
		];

		$startDate = CCalendar::GetOriginalDate($params['parentDateFrom'], $params['dateFrom'], $params['parentTz'], 'Y-m-dTH:i:sZ');
		$endDate = CCalendar::GetOriginalDate($params['parentDateTo'], $params['dateTo'], $params['parentTz'], 'Y-m-dTH:i:sZ');
		$utcTz = new DateTimeZone("UTC");

		$arItem = array(
			"type" => "CalendarView",
			"properties" => array(
				"StartDate" => $startDate,
				"EndDate" => $endDate,
				"MaxEntriesReturned" => 1
			)
		);

		$request->CreateFindItemBody($arParentFolderId, $arItem);

		$this->Connect();
		$response = $this->Send($request);

		$this->Disconnect();

		if (is_null($response))
		{
			return null;
		}

		if ($this->ParseError($response))
		{
			return null;
		}

		$arResultItemsList = [];
		$xmlDoc = $response->GetBodyXml();

		$arResponseMessage = $xmlDoc->GetPath("/Envelope/Body/FindItemResponse/ResponseMessages/FindItemResponseMessage");
		foreach ($arResponseMessage as $responseMessage)
		{
			$arResponseCode = $responseMessage->GetPath("FindItemResponseMessage/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("FindItemResponseMessage/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;
			}

			$rootFolder = $responseMessage->GetPath("FindItemResponseMessage/RootFolder");

			if ((int)$rootFolder[0]->GetAttribute("TotalItemsInView") === 1)
			{
				$itemId = $rootFolder[0]->GetPath("Items/CalendarItem/ItemId");
				$id = $itemId[0]->GetAttribute("Id");
				$changekey = $itemId[0]->GetAttribute("ChangeKey");
				$arCalendarItem = $responseMessage->GetPath("FindItemResponseMessage/RootFolder/Items/CalendarItem");

				foreach ($arCalendarItem as $calendarItem)
				{
					$arResultItemsList = $this->ConvertCalendarToArray($calendarItem);
				}
			}
		}

		return [$id, $changekey];
	}