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