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