- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/factories/syncsectionfactory.php
- Класс: BitrixCalendarSyncFactoriesSyncSectionFactory
- Вызов: SyncSectionFactory::getExternalSyncSectionMapByUserId
public function getExternalSyncSectionMapByUserId(
int $userId,
int $connectionId,
SyncEntitiesSyncSectionMap $syncSectionMap,
array $externalType
): void
{
$sectionDb = SectionTable::query()
->where('OWNER_ID', $userId)
->whereIn('EXTERNAL_TYPE', $externalType)
->where('CAL_TYPE', CoreRoleUser::TYPE)
->registerRuntimeField('SECTION_CONNECTION',
new ReferenceField(
'SYNC_DATA',
SectionConnectionTable::getEntity(),
Join::on('ref.SECTION_ID', 'this.ID'),
['join_type' => Join::TYPE_LEFT]
)
)
->registerRuntimeField('CONNECTION',
new ReferenceField(
'CONNECTION',
DavConnectionTable::getEntity(),
Join::on('ref.ID', 'this.SECTION_CONNECTION.CONNECTION_ID'),
['join_type' => Join::TYPE_LEFT]
)
)
->setSelect([
'ID',
'NAME',
'XML_ID',
'ACTIVE',
'DESCRIPTION',
'COLOR',
'CAL_TYPE',
'OWNER_ID',
'EXTERNAL_TYPE',
'CONNECTION.ACCOUNT_TYPE',
'SECTION_CONNECTION.*',
'SECTION_CONNECTION.SECTION',
'SECTION_CONNECTION.CONNECTION',
])
->exec()
;
while ($sectionDM = $sectionDb->fetchObject())
{
$sectionId = null;
$syncSection = new SyncEntitiesSyncSection();
$section = (new SectionBuilderFromDataManager($sectionDM))->build();
$syncSection
->setSection($section)
->setAction('success')
;
/** @var EO_SectionConnection $sectionConnectionDM */
if ($sectionConnectionDM = $sectionDM->get('SECTION_CONNECTION'))
{
$sectionConnection = (new SyncBuildersBuilderSectionConnectionFromDM($sectionConnectionDM))->build();
if (
($sectionConnection->getConnection() !== null)
&& ($sectionConnection->getConnection()->getId() !== $connectionId)
)
{
continue;
}
$sectionConnection->setSection($section);
$syncSection->setSectionConnection($sectionConnection);
$sectionId = $sectionConnection->getVendorSectionId();
}
else
{
continue;
}
/** @var EO_DavConnection $connectionDM */
if ($sectionDM->getExternalType() !== Section::SECTION_TYPE_LOCAL && ($connectionDM = $sectionDM->get('CONNECTION')))
{
$syncSection->setVendorName($connectionDM->getAccountType());
}
else
{
$syncSection->setVendorName($sectionDM->getExternalType() ?? Section::SECTION_TYPE_LOCAL);
}
$sectionId = $sectionId ?? (string)$section->getId();
$syncSectionMap->add($syncSection, $sectionId);
}
}