• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/controller/syncajax.php
  • Класс: BitrixCalendarControllerSyncAjax
  • Вызов: SyncAjax::createGoogleConnectionAction
public function createGoogleConnectionAction(): array
{
	if (!CCalendar::isGoogleApiEnabled())
	{
		$this->addError(new Error(Loc::getMessage('EC_SYNCAJAX_GOOGLE_API_REQUIRED'), 'google_api_required'));
	}
	if (!Loader::includeModule('dav'))
	{
		$this->addError(new Error(Loc::getMessage('EC_SYNCAJAX_DAV_REQUIRED'), 'dav_required'));
	}

	$response = [
		'status' => 'error',
		'message' => 'Could not finish sync.'
	];

	$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'] === 'export_finished')
		{
			NotificationManager::addFinishedSyncNotificationAgent(
				$owner->getId(),
				$result['vendorName']
			);
		}
	};

	if(empty($this->getErrors()))
	{
		try
		{
			$manager = new GoogleStartSynchronizationManager($owner->getId());
			FlagRegistry::getInstance()->setFlag(SyncDictionary::FIRST_SYNC_FLAG_NAME);
			if ($connection = $manager->addStatusHandler($pusher)->start())
			{
				$response = [
					'status' => 'success',
					'message' => 'CONNECTION_CREATED',
					'connectionId' => $connection->getId(),
				];
			}
			FlagRegistry::getInstance()->resetFlag(SyncDictionary::FIRST_SYNC_FLAG_NAME);
		}
		catch (BaseException $e)
		{
		}
	}

	return $response;
}