• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/controller/syncajax.php
  • Класс: BitrixCalendarControllerSyncAjax
  • Вызов: SyncAjax::createOffice365ConnectionAction
public function createOffice365ConnectionAction(): array
{
	$response = [
		'status' => 'success',
		'message' => 'CONNECTION_CREATED'
	];
	try
	{
		if (!Loader::includeModule('dav'))
		{
			throw new LoaderException('Module dav is required');
		}
		if (!Loader::includeModule('socialservices'))
		{
			throw new LoaderException('Module socialservices is required');
		}

		$owner = Helper::getRole(CCalendar::GetUserId(), User::TYPE);
		$pusher = static function ($result) use ($owner)
		{
			Util::addPullEvent(
				'process_sync_connection',
				$owner->getId(),
				(array) $result
			);

			if ($result['stage'] === 'events_sync_finished')
			{
				NotificationManager::addFinishedSyncNotificationAgent(
					$owner->getId(),
					$result['vendorName']
				);
			}
		};

		$controller = new SyncOffice365StartSyncController($owner);
		FlagRegistry::getInstance()->setFlag(SyncDictionary::FIRST_SYNC_FLAG_NAME);

		// start process
		if ($connection = $controller->addStatusHandler($pusher)->start())
		{
			$response['connectionId'] = $connection->getId();
		}
		else
		{
			$response['connectionId'] = null;
		}
		FlagRegistry::getInstance()->resetFlag(SyncDictionary::FIRST_SYNC_FLAG_NAME);
	}
	catch (LoaderException $e)
	{
		$this->writeToLogException($e);
		$response = [
			'status' => 'error',
			'message' => $e->getMessage(),
		];
	}
	catch (Throwable $e)
	{
		$this->writeToLogException($e);
		$response = [
			'status' => 'error',
			'message' => 'Could not finish sync: '.$e->getMessage()
		];
	}

	return $response;
}