• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/outgoingmanager.php
  • Класс: BitrixCalendarSyncManagersOutgoingManager
  • Вызов: OutgoingManager::subscribeSection
public function subscribeSection(SectionConnection $link): Result
{
	$mainResult = new Result();
	if ($this->syncManager->canSubscribeSection())
	{
		$pushManager = new SyncManagersPushManager();
		$subscription = $pushManager->getPush(
			PushManager::TYPE_SECTION_CONNECTION,
			$link->getId()
		);
		if ($subscription && !$subscription->isExpired())
		{
			$result = $this->syncManager->renewPush($subscription);
			if ($result->isSuccess())
			{
				$mainResult = $pushManager->renewPush($subscription, $result->getData());
			}
			else
			{
				$mainResult->addError(new Error('Error of renew subscription.'));
				$mainResult->addErrors($result->getErrors());
			}
		}
		else
		{
			$subscribeResult = $this->syncManager->subscribeSection($link);
			if ($subscribeResult->isSuccess())
			{
				if ($subscription)
				{
					$pushManager->renewPush($subscription, $subscribeResult->getData());
				}
				else
				{
					try
					{
						$pushManager->addPush(
							'SECTION_CONNECTION',
							$link->getId(),
							$subscribeResult->getData()
						);
					}
					catch(SqlQueryException $e)
					{
						if (
							$e->getCode() === 400
							&& substr($e->getDatabaseMessage(), 0, 6) === '(1062)')
						{
							// there's a race situation
						}
						else
						{
							throw $e;
						}
					}

				}
			}
			else
			{
				$mainResult->addError(new Error('Error of add subscription.'));
				$mainResult->addErrors($subscribeResult->getErrors());
			}
		}
	}

	return $mainResult;
}