• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/google/importmanager.php
  • Класс: BitrixCalendarSyncGoogleImportManager
  • Вызов: ImportManager::getSections
public function getSections(): Result
{
	$result = new Result();
	//todo handle errors
	try
	{
		// TODO: Remake it: move this logic to parent::request().
		// Or, better, in separate class.
		$this->httpClient->query(
			HttpClient::HTTP_GET,
			$this->prepareCalendarListUrl()
		);

		try
		{
			$externalResult = $this->parseResponse($this->httpClient->getResult());
		}
		catch (Exception $e)
		{
			return $result->addError(new Error($e->getMessage()));
		}

		if ($this->isRequestSuccess())
		{
			$this->connection->setToken($externalResult['nextSyncToken']);
			$this->etag = $externalResult['etag'];
			$this->connection->setStatus('[200] OK')
				->setLastSyncTime(new Date())
			;

			$map = new SyncSectionMap();
			if (!empty($externalResult['items']) && is_array($externalResult['items']))
			{
				foreach ($externalResult['items'] as $item)
				{
					$map->add(
						(new BuilderSyncSectionFromExternalData($item, $this->connection))->build(),
						$item['id']
					);
				}
			}

			return $result->setData(['externalSyncSectionMap' => $map]);
		}

		$helper = new Helper();

		if ($helper->isNotValidSyncTokenError($this->prepareError($externalResult)))
		{
			$this->connection->setToken(null);

			return $this->getSections();
		}

		if ($helper->isMissingRequiredAuthCredential($this->prepareError($externalResult)))
		{
			$this->handleUnauthorize($this->connection);
			$result->addError(new Error('Auth error on getting sections', 401));

			return $result;
		}

		$result->addError(new Error('Do not sync sections'));
	}
	catch (Exception $e)
	{
		$result->addError(new Error('Failed to get sections'));
	}

	return $result;
}