37 use HandleStatusTrait;
39 private static array $outgoingManagersCache = [];
66 $this->isFullSync = !$this->factory->getConnection()->getToken();
69 $mapperHelper = ServiceLocator::getInstance()->get(
'calendar.service.mappers.factory');
70 $this->sectionConnectionMapper = $mapperHelper->getSectionConnection();
71 $this->sectionMapper = $mapperHelper->getSection();
72 $this->eventConnectionMapper = $mapperHelper->getEventConnection();
73 $this->eventMapper = $mapperHelper->getEvent();
78 $this->handlerMerge =
new $handlerMergeClass();
94 $pushManager->setBlockPush($push);
97 $this->exchangeSections();
99 $this->sendResult(MasterPushHandler::MASTER_STAGE[1]);
101 $this->blockSectionPush($this->syncSectionMap);
104 $this->exchangeEvents();
110 $this->unblockSectionPush($this->syncSectionMap);
113 $this->sendResult(MasterPushHandler::MASTER_STAGE[2]);
114 $this->sendResult(MasterPushHandler::MASTER_STAGE[3]);
117 ->updateConnection($this->factory->getConnection())
126 $pushManager->setUnblockPush($push);
132 private function sendResult(
string $stage): void
135 'vendorName' => $this->factory->getConnection()->getVendor()->getCode(),
136 'accountName' => $this->factory->getConnection()->getName(),
143 CCalendar::ClearCache();
159 $importEventManager = (
new ImportEventManager($this->factory, $this->syncSectionMap));
163 $this->prepareLocalSyncEventMapWithVendorEventId(
$syncEventMap);
165 $this->handleSectionsToLocalStorage($this->syncSectionMap);
205 PushCommand::RefreshSyncStatus,
210 'status' => $this->getSyncStatus(
$connection->getStatus()),
211 'type' => $accountType,
224 private function getSyncStatus(?
string $status): bool
226 return $status && preg_match(
"/^\[(2\d\d|0)\][a-z0-9 _]*/i",
$status);
239 $this->mergeSyncedSyncSectionsWithSavedSections($externalSyncSectionMap);
240 $this->handleSectionsToLocalStorage($externalSyncSectionMap);
241 $this->removeDeletedExternalSections($externalSyncSectionMap);
260 if ($syncEvent->getEventConnection() ===
null)
265 if ($masterSyncEvent !==
null)
267 $syncEvent->getEvent()->setRecurrenceId($masterSyncEvent->getId());
270 $this->mergeExternalEventWithLocalParams($syncEvent);
275 if ($syncEvent->getEvent()->getId() ===
null)
277 if ($syncEvent->isInstance())
279 if ($masterSyncEvent ===
null)
281 $masterSyncEvent = $this->getMasterSyncEvent($syncEvent);
283 if (!$masterSyncEvent)
293 if ($masterSyncEvent->getId() ===
null)
315 && $masterSyncEvent->getId()
316 && $syncEvent->isInstance()
328 public function filterUnchangedSections(
335 ($externalSyncSection = $externalSyncSectionMap->getItem($syncSection->getSectionConnection()
336 ->getVendorSectionId()))
337 && $syncSection->getSectionConnection()->getVersionId() !== $externalSyncSection->getSectionConnection()
341 $syncSection->getSectionConnection()->setVersionId($externalSyncSection->getSectionConnection()->getVersionId());
359 $masterSyncEvent = $this->getMasterSyncEvent($syncEvent);
360 if (!$masterSyncEvent)
365 $this->prepareExcludedDatesMasterEvent(
367 $syncEvent->getEvent()->getOriginalDateFrom()
370 if ($masterSyncEvent->getId() ===
null)
375 $this->updateMasterExdate($masterSyncEvent->getEvent());
376 $masterSyncEvent->setEvent($masterSyncEvent->getEvent());
378 $this->syncEventMap->updateItem($masterSyncEvent, $masterSyncEvent->getVendorEventId());
387 return (
new Core\
Event\Properties\MeetingDescription())
388 ->setHostName($owner->getFullName())
389 ->setMeetingCreator($owner->getId())
391 ->setLanguageId(($owner->getRoleEntity() instanceof
Core\
Role\
User)
392 ? $owner->getRoleEntity()->getLanguageId()
396 ->setAllowInvite(
true)
410 $event = $syncEvent->getEvent();
418 if (
$event->isRecurrence())
420 $this->handleDeleteRecurrenceEvent($syncEvent);
425 $this->handleDeleteSingleEvent($syncEvent);
428 $this->eventMapper->delete(
$event, [
429 'softDelete' =>
true,
430 'originalFrom' => $syncEvent->getEventConnection()->getConnection()->getVendor()->getCode(),
433 $this->eventConnectionMapper->delete($syncEvent->getEventConnection());
446 $event = $syncEvent->getEvent();
448 ? $this->eventMapper->create(
$event, [
449 'originalFrom' => $this->factory->getServiceName(),
451 : $this->eventMapper->update(
$event, [
452 'originalFrom' => $this->factory->getServiceName(),
458 $syncEvent->setEvent(
$event);
459 $eventConnection = $syncEvent->getEventConnection();
460 if ($eventConnection)
464 ->setVersion(
$event->getVersion())
467 $eventConnection->getId()
468 ? $this->eventConnectionMapper->update($eventConnection)
469 : $this->eventConnectionMapper->create($eventConnection)
487 $this->prepareLocalSyncEventMapWithVendorEventId($externalEventMap);
488 $this->handleEventsToLocalStorage($externalEventMap);
497 CCalendarSect::SavePermissions(
498 $syncSection->getSection()->getId(),
499 CCalendarSect::GetDefaultAccess(
500 $syncSection->getSection()->getType(),
501 $syncSection->getSection()->getOwner()->getId()
513 private function exchangeSections(): void
520 $this->prepareSyncSectionBeforeExport(
521 $this->getFilteredSectionMapForExport($sectionImporter->getSyncSectionMap())
526 $this->handleExportedSections($sectionExporter->getSyncSectionMap());
528 $this->filterBrokenSyncSections();
552 private function exchangeEvents(): void
554 $eventImporter = (
new ImportEventManager($this->factory, $this->syncSectionMap))->
import();
557 $savedSyncEventMap = $this->getLocalEventsForExport();
559 if ($savedSyncEventMap)
561 (
new ExportEventManager($this->factory, $this->syncSectionMap))->export($savedSyncEventMap);
562 $this->updateExportedEvents($savedSyncEventMap);
565 $this->handleSectionsToLocalStorage($this->syncSectionMap);
574 private function handleExportedInstances(Sync\Entities\SyncEvent $syncEvent): void
577 foreach ($syncEvent->getInstanceMap() as
$instance)
581 $this->handleExportedFailedSyncEvent($syncEvent);
585 if ($instanceEventConnection =
$instance->getEventConnection())
587 $instanceEventConnection
589 ->setConnection($syncEvent->getEventConnection()->getConnection())
592 if ($instanceEventConnection->getId())
594 $this->eventConnectionMapper->update($instanceEventConnection);
598 $this->eventConnectionMapper->create($instanceEventConnection);
614 public function validateSyncEventChange(
615 Sync\Entities\SyncEvent $syncEvent,
616 Sync\Entities\SyncEvent $existsSyncEvent =
null
619 if (!$existsSyncEvent)
625 $syncEvent->getEventConnection() !==
null
627 ($syncEvent->getEventConnection()->getVendorVersionId() === $existsSyncEvent->getEventConnection()->getVendorVersionId())
628 || ($syncEvent->getEventConnection()->getEntityTag() === $existsSyncEvent->getEventConnection()->getEntityTag())
634 $syncEvent->getEventConnection()->getConnection()->getVendor()->getCode()
635 !== Sync\Google\Helper::GOOGLE_ACCOUNT_TYPE_API
637 || !$this->hasDifferentEventFields($syncEvent, $existsSyncEvent))
645 if ($existsSyncEvent->getEventId() !== $existsSyncEvent->getParentId())
661 if ($existsSyncEvent->getEvent()->getSpecialLabel() === ResourceBooking::EVENT_LABEL)
694 if ($syncEvent->isSingle() && $syncEvent->getEntityTag() !== $existsSyncEvent->getEntityTag())
699 if ($syncEvent->isRecurrence())
701 if ($syncEvent->getEntityTag() !== $existsSyncEvent->getEntityTag())
706 if ($syncEvent->hasInstances())
711 $existsInstanceMap = $existsSyncEvent->getInstanceMap();
713 if (!$existsInstanceMap)
719 $existsInstance = $existsInstanceMap->getItem(
$key);
721 if (!$existsInstance)
726 if ($existsInstance->getEntityTag() !==
$instance->getEntityTag())
734 if ($syncEvent->isInstance())
742 private function hasDifferentEventFields(
743 Sync\Entities\SyncEvent $syncEvent,
744 Sync\Entities\SyncEvent $existSyncEvent
747 if (!$syncEvent->getEvent() && !$existSyncEvent->getEvent())
753 && !$existSyncEvent->getEvent()->isDeleted()
759 $comparator =
new EventCompareManager($syncEvent->getEvent(), $existSyncEvent->getEvent());
761 $diff = $comparator->getDiff();
762 $significantFields = [
768 'excludedDates' =>
true,
770 $significantDiff = array_intersect_key($diff, $significantFields);
772 return !empty($significantDiff);
782 $masterEvent = $masterSyncEvent->getEvent();
783 $exdateCollection = $masterEvent->getExcludedDateCollection();
784 if ($exdateCollection ===
null)
787 $masterEvent->setExcludedDateCollection($exdateCollection);
792 $exdateCollection->add(
793 (clone
$instance->getEvent()->getOriginalDateFrom())
794 ->setDateTimeFormat(
Core\
Event\Properties\ExcludedDatesCollection::EXCLUDED_DATE_FORMAT)
811 private function rollbackEvent(
817 $muteNotice = $this->isNoticesMuted();
818 if ($existsExternalSyncEvent->getEvent()->isDeleted())
825 $syncStatus = ($existsExternalSyncEvent->getEvent()->isRecurrence() || $syncEvent->getEvent()->isRecurrence())
830 $existsExternalSyncEvent->getEventConnection()
831 ->setLastSyncStatus($syncStatus)
832 ->setVersion($existsExternalSyncEvent->getEvent()->getVersion() - 1);
833 $this->eventConnectionMapper->update($existsExternalSyncEvent->getEventConnection());
837 $this->noticeUser($existsExternalSyncEvent, $messageCode);
844 private function isNoticesMuted(): bool
852 private function createPusher(): Sync\Handlers\MasterPushHandler
854 return new Sync\Handlers\MasterPushHandler(
855 $this->factory->getConnection()->getOwner(),
857 $this->factory->getConnection()->getName()
865 private function mergeSyncedSyncSectionsWithSavedSections(Sync\Entities\SyncSectionMap $externalSyncSectionMap): void
868 foreach ($externalSyncSectionMap as
$key => $externalSyncSection)
870 if ($externalSyncSection->getSectionConnection() ===
null)
872 $externalSyncSectionMap->remove(
$key);
878 if ($savedSyncSection = $this->syncSectionMap->has(
879 $externalSyncSection->getSectionConnection()->getVendorSectionId()
882 $savedSyncSection = $this->syncSectionMap->getItem(
883 $externalSyncSection->getSectionConnection()->getVendorSectionId()
886 ->getSectionConnection()
887 ->setId($savedSyncSection->getSectionConnection()->getId())
888 ->setSyncToken($savedSyncSection->getSectionConnection()->getSyncToken())
889 ->setPageToken($savedSyncSection->getSectionConnection()->getPageToken())
892 $savedSection = $savedSyncSection->getSection();
895 ->setId($savedSection->getId())
896 ->setXmlId($savedSection->getXmlId())
897 ->setCreator($savedSection->getCreator())
898 ->setExternalType($savedSection->getExternalType())
899 ->setIsActive($savedSection->isActive())
900 ->setType($savedSection->getType())
902 if (empty($externalSyncSection->getSection()->getColor()))
904 $externalSyncSection->getSection()->setColor(
905 $savedSection->getColor()
906 ?: Core\Property\ColorHelper::getOurColorRandom()
909 if ($savedSection->isLocal())
911 $externalSyncSection->getSection()->setName($savedSection->getName());
921 private function handleSectionsToLocalStorage(Sync\Entities\SyncSectionMap
$syncSectionMap): void
926 if (!$this->validateSyncSectionBeforeSave($syncSection))
928 $this->updateFailedSyncSection($syncSection);
935 if ($syncSection->getSection()->isLocal())
937 $this->createLocalDeletedSection($syncSection);
941 $this->deleteSyncSectionFromLocalStorage($syncSection);
946 if ($syncSection->getSection()->isNew())
950 $this->sectionMapper->create($syncSection->getSection());
953 $this->sectionConnectionMapper->create(
954 $syncSection->getSectionConnection()->setSection($syncSection->getSection())
959 $this->sectionMapper->update($syncSection->getSection());
960 $sectionConnection = $syncSection->getSectionConnection();
961 $sectionConnection->setSection($syncSection->getSection());
963 $sectionConnection->isNew()
964 ? $this->sectionConnectionMapper->create($sectionConnection)
965 : $this->sectionConnectionMapper->update($sectionConnection)
971 $this->syncSectionMap->add($syncSection,
$key);
979 private function removeDeletedExternalSections(Sync\Entities\SyncSectionMap $externalSectionMap): void
981 if (!$this->isFullSync)
986 $deleteCandidates = (
new Sync\Entities\SyncSectionMap(
987 array_diff_key($this->syncSectionMap->getCollection(), $externalSectionMap->getCollection()),
988 ))->getNonLocalSections();
991 foreach ($deleteCandidates as $syncSection)
994 ($syncSection->getSection() ===
null)
995 || ($syncSection->getSectionConnection() ===
null)
1000 $this->deleteSyncSectionFromLocalStorage($syncSection);
1004 private function createLocalDeletedSection(Sync\Entities\SyncSection $syncSection)
1013 private function deleteSyncSectionFromLocalStorage(Sync\Entities\SyncSection $syncSection): void
1015 if ($syncSection->getSectionConnection()->getId() !==
null)
1017 $this->sectionConnectionMapper->delete($syncSection->getSectionConnection());
1018 $this->syncSectionMap->remove($syncSection->getSectionConnection()->getVendorSectionId());
1021 if ($syncSection->getSection()->getId() !==
null)
1023 $this->sectionMapper->delete($syncSection->getSection(), [
'softDelete' =>
false]);
1024 $this->syncSectionMap->remove($syncSection->getSection()->getId());
1032 private function getFilteredSectionMapForExport(
1033 Sync\Entities\SyncSectionMap $externalSectionMap
1034 ): Sync\Entities\SyncSectionMap
1036 return (
new Sync\Entities\SyncSectionMap(
1039 ? $this->syncSectionMap->getCollection()
1040 : $this->syncSectionMap
1041 ->getItemsByKeys(array_keys($externalSectionMap->getCollection()))
1043 $externalSectionMap->getCollection()
1045 ))->getLocalSections();
1056 $syncSectionList = $this->isFullSync
1057 ? $this->syncSectionMap->getCollection()
1058 : $this->syncSectionMap
1075 $sectionIdCollection = [];
1077 foreach ($this->syncSectionMap as $syncSection)
1079 $sectionIdCollection[] = $syncSection->getSection()->getId();
1087 return $this->syncEventFactory->getSyncEventMapBySyncSectionIdCollectionForExport(
1088 $sectionIdCollection,
1089 $this->factory->getConnection()->getOwner()->getId(),
1090 $this->factory->getConnection()->getId()
1102 private function handleEventsToLocalStorage(
Sync\Entities\SyncEventMap $externalSyncEventMap): void
1105 foreach ($externalSyncEventMap as
$key => $syncEvent)
1108 $existsExternalSyncEvent = $this->syncEventMap->getItem(
$key);
1110 if (!$this->validateSyncEventChange($syncEvent, $existsExternalSyncEvent))
1115 $masterSyncEvent = $this->getMasterSyncEvent($syncEvent);
1118 && ($syncEvent->isInstance() || $syncEvent->getVendorRecurrenceId())
1119 && $masterSyncEvent->getId() !== $masterSyncEvent->getParentId()
1125 $this->
handleSyncEvent($syncEvent, $syncEvent->getVendorEventId(), $masterSyncEvent);
1128 $existsExternalSyncEvent
1130 $syncEvent->isRecurrence()
1135 $this->removeDeprecatedInstances($existsExternalSyncEvent, $syncEvent);
1138 if ($syncEvent->hasInstances())
1140 $collection = $syncEvent->getInstanceMap()->getCollection();
1141 array_walk($collection, [$this,
'handleSyncEvent'], $syncEvent);
1144 $this->syncEventMap->updateItem($syncEvent, $syncEvent->getVendorEventId());
1156 private function getMasterSyncEvent(Sync\Entities\SyncEvent $syncEvent): ?Sync\Entities\SyncEvent
1159 $eventConnection = $syncEvent->getEventConnection();
1161 if ($eventConnection ===
null)
1163 throw new BaseException(
'you should set EventConnection in SyncEvent');
1166 if ($masterSyncEvent = $this->syncEventMap->getItem($eventConnection->getRecurrenceId()))
1168 return $masterSyncEvent;
1171 if ($eventConnection->getRecurrenceId())
1173 $recurrenceId[] = $eventConnection->getRecurrenceId();
1176 return $this->syncEventFactory->getSyncEventCollectionByVendorIdList(
1178 $this->factory->getConnection()->getId()
1187 private function prepareExcludedDatesMasterEvent(Sync\Entities\SyncEvent $masterSyncEvent, Core\Base\Date $excludedDate): void
1189 $masterEvent = $masterSyncEvent->getEvent();
1191 $date = clone $excludedDate;
1192 $date->format(Core\Event\Properties\ExcludedDatesCollection::EXCLUDED_DATE_FORMAT);
1194 if ($masterEvent->getExcludedDateCollection())
1196 $masterEvent->getExcludedDateCollection()->add($date);
1200 $masterEvent->setExcludedDateCollection(
new Core\Event\Properties\ExcludedDatesCollection([$date]));
1212 private function prepareNewEvent(Event
$event, Sync\Entities\SyncSection $syncSection): void
1214 $section = $syncSection->getSection();
1215 $owner = $section->getOwner();
1216 if ($owner ===
null)
1218 throw new BaseException(
'section has not owner');
1222 ->setSection($syncSection->getSection())
1224 ->setCreator($owner)
1225 ->setEventHost($owner)
1228 ->setIsDeleted(
false)
1229 ->setCalendarType($owner->getType())
1244 public function handleMerge(
1245 Sync\Entities\SyncEventMap $localEventCollection,
1248 Sync\Entities\SyncEvent $syncEvent,
1249 ?Sync\Connection\EventConnection $eventConnection,
1251 Sync\Entities\SyncSection $syncSection
1254 $mergedSyncEvent =
null;
1255 if ($localEventCollection->has($vendorId))
1258 $localEventCollection->getItem($vendorId),
1260 $localEventCollection->getItem($vendorId)->getEvent()->getId()
1262 $eventConnection->setId($localEventCollection->getItem($vendorId)->getEventConnection()->getId());
1265 $syncEvent->getEventConnection()
1266 && $localEventCollection->has($syncEvent->getEventConnection()
1267 ->getRecurrenceId())
1271 $masterSyncEvent = $localEventCollection->getItem($syncEvent->getEventConnection()->getRecurrenceId());
1277 $mergedSyncEvent->getEvent()->setRecurrenceId($masterSyncEvent->getEvent()->getId())
1280 if ($mergedSyncEvent !==
null)
1282 $event = $mergedSyncEvent->getEvent();
1286 $this->prepareNewEvent(
$event, $syncSection);
1296 private function mergeExternalEventWithLocalParams(Sync\Entities\SyncEvent $syncEvent): void
1299 if ($existsSyncEvent = $this->syncEventMap->getItem($syncEvent->getEventConnection()->getVendorEventId()))
1301 $this->mergeSyncEvent(
1304 $existsSyncEvent->getEventId(),
1305 $existsSyncEvent->getEventConnection()->getId()
1309 $syncEvent->isRecurrence()
1310 && $syncEvent->hasInstances()
1313 foreach ($syncEvent->getInstanceMap() as $instanceSyncEvent)
1316 $existsSyncEvent->hasInstances()
1317 && $instanceSyncEvent->getEvent()->getOriginalDateFrom()
1318 && $existsInstanceSyncEvent = $existsSyncEvent->getInstanceMap()->getItem(
1319 Sync\Entities\InstanceMap::getKeyByDate(
1320 $instanceSyncEvent->getEvent()->getOriginalDateFrom()
1325 $this->mergeSyncEvent(
1326 $existsInstanceSyncEvent,
1328 $existsInstanceSyncEvent->getEventId(),
1329 $existsInstanceSyncEvent->getEventConnection()->getId()
1334 $this->prepareNewSyncEvent($syncEvent);
1343 if ($existsMasterSyncEvent = $this->syncEventMap->getItem($syncEvent->getEventConnection()->getRecurrenceId()))
1346 $existsMasterSyncEvent->hasInstances()
1347 && $syncEvent->getEvent()->getOriginalDateFrom()
1348 && $existsInstanceSyncEvent = $existsMasterSyncEvent->getInstanceMap()->getItem(
1349 Sync\Entities\InstanceMap::getKeyByDate(
1350 $syncEvent->getEvent()->getOriginalDateFrom()
1355 $this->mergeSyncEvent(
1356 $existsInstanceSyncEvent,
1358 $existsInstanceSyncEvent->getEventId(),
1359 $existsInstanceSyncEvent->getEventConnection()->getId()
1365 $this->mergeSyncEvent($existsMasterSyncEvent, $syncEvent);
1372 $this->prepareNewSyncEvent($syncEvent);
1384 private function mergeSyncEvent(
1385 Sync\Entities\SyncEvent $existsSyncEvent,
1386 Sync\Entities\SyncEvent $externalSyncEvent,
1388 int $eventConnectionId =
null
1391 $handler =
new SyncEventMergeHandler();
1392 $handler($existsSyncEvent, $externalSyncEvent, $id, $eventConnectionId);
1399 private function prepareLocalSyncEventMapWithVendorEventId(Sync\Entities\SyncEventMap $externalSyncEventMap): void
1401 $vendorEventIdList = [];
1403 foreach ($externalSyncEventMap->getCollection() as $item)
1405 $vendorEventIdList[] = $item->getVendorEventId();
1406 if ($item->isInstance())
1408 $vendorEventIdList[] = $item->getVendorRecurrenceId();
1410 $this->importedLocalEventUidList[] = $item->getUid();
1413 $this->syncEventMap = $this->syncEventFactory->getSyncEventCollectionByVendorIdList(
1414 array_unique($vendorEventIdList),
1415 $this->factory->getConnection()->getId()
1423 private function prepareNewSyncEvent(Sync\Entities\SyncEvent $syncEvent): void
1432 private function updateExportedEvents(Sync\Entities\SyncEventMap $localEventMap): void
1435 foreach ($localEventMap as $syncEvent)
1439 $this->handleExportedFailedSyncEvent($syncEvent);
1443 if ($eventConnection = $syncEvent->getEventConnection())
1445 if ($eventConnection->getId())
1447 $this->eventConnectionMapper->update($eventConnection);
1451 $this->eventConnectionMapper->create($eventConnection);
1454 if ($syncEvent->hasInstances())
1456 $this->handleExportedInstances($syncEvent);
1466 private function updateMasterExdate(Event $masterEvent): void
1468 $handler =
new UpdateMasterExdateHandler();
1469 $handler($masterEvent);
1476 private function validateSyncSectionBeforeSave(Sync\Entities\SyncSection $syncSection): bool
1478 return $syncSection->getSection() && $syncSection->getSectionConnection();
1485 private function updateFailedSyncSection(Sync\Entities\SyncSection $syncSection): void
1493 private function filterBrokenSyncSections(): void
1499 foreach ($this->syncSectionMap as
$key => $item)
1501 if ($item->getSectionConnection() ===
null)
1503 $this->syncSectionMap->remove(
$key);
1511 private function handleDeleteRecurrenceEvent(SyncEvent $syncEvent)
1519 private function handleDeleteSingleEvent(SyncEvent $syncEvent)
1531 private function handleExportedFailedSyncEvent(Sync\Entities\SyncEvent $syncEvent): void
1534 ($syncEvent->getEventConnection() ===
null)
1535 || ($syncEvent->getEventConnection()->getId() ===
null)
1541 $eventConnection = $syncEvent->getEventConnection();
1543 switch ($syncEvent->getAction())
1545 case Sync\Dictionary::SYNC_EVENT_ACTION[
'delete']:
1553 $this->eventConnectionMapper->update($eventConnection);
1566 private function blockSectionPush(Sync\Entities\SyncSectionMap
$syncSectionMap): void
1568 $pushManager =
new PushManager();
1572 $pushManager->setBlockPush(
1577 ($syncSection->getSectionConnection() !==
null)
1578 && ($syncSection->getSectionConnection()->getId() !==
null)
1581 $pushManager->setBlockPush(
1582 $pushManager->getPush(
1584 $syncSection->getSectionConnection()->getId()
1603 private function unblockSectionPush(Sync\Entities\SyncSectionMap
$syncSectionMap): void
1605 $pushManager =
new PushManager();
1609 $pushManager->setUnblockPush(
1613 if ($syncSection->getSectionConnection() !==
null
1614 && $syncSection->getSectionConnection()->getId() !==
null
1617 $pushManager->setUnblockPush(
1618 $pushManager->getPush(
1620 $syncSection->getSectionConnection()->getId()
1633 private function removeDeprecatedInstances(
1634 Sync\Entities\SyncEvent $existsExternalSyncEvent,
1635 Sync\Entities\SyncEvent $syncEvent
1638 if ($existsExternalSyncEvent->hasInstances())
1641 foreach ($existsExternalSyncEvent->getInstanceMap() as
$key => $oldInstance)
1643 if (!$syncEvent->hasInstances() || empty($syncEvent->getInstanceMap()->getItem(
$key)))
1645 $this->eventConnectionMapper->delete($oldInstance->getEventConnection(), [
'softDelete' =>
false]);
1646 $this->eventMapper->delete($oldInstance->getEvent(), [
1647 'softDelete' =>
false,
1648 'originalFrom' => $syncEvent->getEventConnection()?->getConnection()->getVendor()->getCode(),
1649 'recursionMode' =>
'this',
1664 private function prepareSyncSectionBeforeExport(Sync\Entities\SyncSectionMap
$syncSectionMap): Sync\Entities\SyncSectionMap
1666 $syncSectionKeyIdList = [];
1670 if ($syncSection->getSectionConnection() ===
null)
1675 if (in_array($syncSection->getSection()->getId(), $syncSectionKeyIdList,
true))
1681 $syncSectionKeyIdList[$syncSection->getSectionConnection()->getVendorSectionId()] = $syncSection->getSection()->getId();
1684 $this->sectionConnectionMapper->delete($syncSection->getSectionConnection(), [
'softDelete' =>
false]);
1685 $this->syncSectionMap->remove(
$key);
1686 $syncSection->setSectionConnection(
null);
1690 if ($syncSectionKeyIdList)
1692 $syncEventMap = $this->syncEventFactory->getSyncEventMapBySyncSectionIdCollectionForExport(
1693 $syncSectionKeyIdList,
1694 $this->factory->getConnection()->getOwner()->getId(),
1695 $this->factory->getConnection()->getId()
1702 if ($syncEvent->getEventConnection() ===
null)
1707 $this->eventConnectionMapper->delete($syncEvent->getEventConnection(), [
'softDelete' =>
false]);
1723 private function noticeUser(Sync\Entities\SyncEvent $syncEvent,
string $messageCode =
'')
1725 if (Loader::includeModule(
'im') && Loader::includeModule(
'pull'))
1728 $syncEvent->getEvent()->getOwner()->getType(),
1729 $syncEvent->getEvent()->getOwner()->getId(),
1732 ->deleteParams([
"action",
"sessid",
"bx_event_calendar_request",
"EVENT_ID",
"EVENT_DATE"])
1734 'EVENT_ID' => $syncEvent->getEvent()->getId()])
1738 $syncEvent->getEventConnection()->getConnection()->getOwner()->getId(),
1741 '#EVENT_URL#' =>
$uri->getUri(),
1742 '#EVENT_TITLE#' => $syncEvent->getEvent()->getName(),
1743 'EVENT_ID' => $syncEvent->getEvent()->getId(),
1761 $mapperFactory = ServiceLocator::getInstance()->get(
'calendar.service.mappers.factory');
1762 $links = $mapperFactory->getSectionConnection()->getMap([
1768 foreach ($links as $link)
1785 if (empty(static::$outgoingManagersCache[
$connection->getId()]))
1790 return static::$outgoingManagersCache[
$connection->getId()];