33 $helper = ServiceLocator::getInstance()->get(
'calendar.service.mappers.factory');
34 $this->eventMapper = $helper->getEvent();
35 $this->eventConnectionMapper = $helper->getEventConnection();
44 $this->eventMapper->delete($syncEvent->getEvent());
45 $this->eventConnectionMapper->delete($syncEvent->getEventConnection());
55 public function getSyncEventCollectionByVendorIdList(
56 array $vendorEventIdList,
62 if (empty($vendorEventIdList))
67 $query1 = EventConnectionTable::query()
69 ->where(
'CONNECTION_ID', $connectionId)
70 ->whereIn(
'VENDOR_EVENT_ID', $vendorEventIdList)
72 $query2 = EventConnectionTable::query()
74 ->where(
'CONNECTION_ID', $connectionId)
75 ->whereIn(
'RECURRENCE_ID', $vendorEventIdList)
78 $query1->unionAll($query2);
79 $result = $query1->exec()->fetchAll();
81 $idList = array_map(
static function($item) {
return (
int)$item[
'ID'];},
$result);
89 [
'ID',
'in', $idList],
92 $eventConnectionMap = $this->eventConnectionMapper->getMap(
$query);
94 $impatientExportSyncEventList = [];
97 foreach ($eventConnectionMap as $eventConnection)
99 $syncEvent =
new SyncEvent();
101 ->setEventConnection($eventConnection)
102 ->setEvent($eventConnection->getEvent())
103 ->setAction($eventConnection->getLastSyncStatus())
106 if ($syncEvent->isInstance())
109 if ($masterSyncEvent = $syncEventMap->getItem($syncEvent->getVendorRecurrenceId()))
111 $masterSyncEvent->addInstance($syncEvent);
115 $impatientExportSyncEventList[$syncEvent->getVendorRecurrenceId()][$eventConnection->getVendorEventId()] = $syncEvent;
120 $syncEvent->isRecurrence()
121 && $instanceList = ($impatientExportSyncEventList[$syncEvent->getVendorEventId()] ??
null)
124 $syncEvent->addInstanceList($instanceList);
129 $eventConnection->getVendorEventId()
133 if ($impatientExportSyncEventList)
135 foreach ($impatientExportSyncEventList as $syncEventList)
137 $syncEventMap->addItems($syncEventList);
141 return $syncEventMap;
156 public function getSyncEventMapBySyncSectionIdCollectionForExport(
157 array $sectionIdList,
160 ): ?Sync\Entities\SyncEventMap
162 Loader::includeModule(
'dav');
169 $timestamp = time() - self::TIME_SLICE;
170 $eventDb = EventTable::query()
173 'EVENT_CONNECTION.ID',
174 'EVENT_CONNECTION.EVENT_ID',
175 'EVENT_CONNECTION.CONNECTION_ID',
176 'EVENT_CONNECTION.VENDOR_EVENT_ID',
177 'EVENT_CONNECTION.SYNC_STATUS',
178 'EVENT_CONNECTION.RETRY_COUNT',
179 'EVENT_CONNECTION.ENTITY_TAG',
180 'EVENT_CONNECTION.VERSION',
181 'EVENT_CONNECTION.VENDOR_VERSION_ID',
182 'EVENT_CONNECTION.RECURRENCE_ID',
183 'EVENT_CONNECTION.CONNECTION',
184 'EVENT_CONNECTION.EVENT',
187 ->where(
'CAL_TYPE', Dictionary::CALENDAR_TYPE[
'user'])
188 ->where(
'DELETED',
'N')
189 ->where(
'DATE_TO_TS_UTC',
'>', $timestamp)
190 ->where(Query::filter()
192 ->whereNot(
'MEETING_STATUS',
'N')
193 ->whereNull(
'MEETING_STATUS')
195 ->whereIn(
'SECTION_ID', $sectionIdList)
196 ->registerRuntimeField(
'EVENT_CONNECTION',
199 EventConnectionTable::getEntity(),
200 Join::on(
'ref.EVENT_ID',
'this.ID')
201 ->where(
'ref.CONNECTION_ID', $connectionId)
203 [
'join_type' => Join::TYPE_LEFT]
210 $map =
new Sync\Entities\SyncEventMap();
211 $impatientSyncEventInstanceList = [];
213 while ($eventDM = $eventDb->fetchObject())
215 $action = Sync\Dictionary::SYNC_EVENT_ACTION[
'create'];
216 $syncEvent =
new Sync\Entities\SyncEvent();
218 $event = (
new EventBuilderFromEntityObject($eventDM))->build();
219 $syncEvent->setEvent(
$event);
222 if ($eventConnectionDM = $eventDM->get(
'EVENT_CONNECTION'))
224 $eventConnection = (
new Sync\Builders\BuilderEventConnectionFromDM($eventConnectionDM))->build();
225 $eventConnection->setEvent(
$event);
226 $syncEvent->setEventConnection($eventConnection);
233 $action = $eventConnection->getLastSyncStatus();
235 elseif (
$event->getVersion() > $eventConnection->getVersion())
237 $action = Sync\Dictionary::SYNC_EVENT_ACTION[
'update'];
241 $action = Sync\Dictionary::SYNC_EVENT_ACTION[
'success'];
245 if ($syncEvent->isInstance())
247 $syncEvent->setAction(
$action);
249 $masterEvent =
$map->getItem(
$event->getUid());
260 $masterEvent->addInstance($syncEvent);
265 $impatientSyncEventInstanceList[
$event->getUid()][] = $syncEvent;
269 if ($instanceList = ($impatientSyncEventInstanceList[
$event->getUid()] ??
null))
271 $syncEvent->addInstanceList($instanceList);
272 unset($impatientSyncEventInstanceList[
$event->getUid()]);
275 && $this->hasCandidatesForUpdate($instanceList)
278 $action = Sync\Dictionary::SYNC_EVENT_ACTION[
'update'];
281 $syncEvent->setAction(
$action);
294 private function hasCandidatesForUpdate(
array $list): bool
296 return (
bool)array_filter($list,
function (SyncEvent $syncEvent) {
297 return $syncEvent->getAction() !== Sync\Dictionary::SYNC_EVENT_ACTION[
'success'];
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)