- Модуль: 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;
}