- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/pushwatchingmanager.php
- Класс: BitrixCalendarSyncManagersPushWatchingManager
- Вызов: PushWatchingManager::doFixWatchSectionChannels
private function doFixWatchSectionChannels(): void
{
$query = SectionConnectionTable::query()
->setSelect(['ID', 'CONNECTION_ID', 'SECTION_ID'])
->registerRuntimeField('CONNECTION',
new ReferenceField(
'CONNECTION',
DavConnectionTable::getEntity(),
[
'=this.CONNECTION_ID' => 'ref.ID',
],
['join_type' => Join::TYPE_INNER]
)
)
->registerRuntimeField('PUSH',
new ReferenceField(
'PUSH',
PushTable::getEntity(),
[
'=this.ID' => 'ref.ENTITY_ID',
'ref.ENTITY_TYPE' => ['?', self::TYPE_LINK]
],
['join_type' => Join::TYPE_LEFT]
)
)
->where('ACTIVE', 'Y')
->where('LAST_SYNC_STATUS', 'success')
->where('CONNECTION.IS_DELETED', 'N')
->whereIn('CONNECTION.ACCOUNT_TYPE', [self::GOOGLE_CONNECTION, self::OFFICE365_CONNECTION])
->whereNull('PUSH.ENTITY_TYPE')
->setLimit(self::FIX_LIMIT)
->exec()
;
while ($row = $query->Fetch())
{
$manager = $this->getOutgoingManager($row['CONNECTION_ID']);
/** @var SectionConnection $link */
$link = $this->mapperFactory->getSectionConnection()->getById($row['ID']);
try
{
$manager->subscribeSection($link);
}
catch (Exception $e)
{
$link->setLastSyncStatus(Dictionary::SYNC_STATUS['failed']);
$this->mapperFactory->getSectionConnection()->update($link);
}
}
}