2020use App \Entity \Principal ;
2121use Doctrine \Persistence \ManagerRegistry ;
2222use Sabre \DAV \Sharing \Plugin as SharingPlugin ;
23+ use Sabre \CalDAV \Backend \PDO as CalendarBackend ;
2324use Sabre \VObject \Component \VCalendar ;
2425use Sabre \VObject \Component \VCard ;
2526use Sabre \VObject \DateTimeParser ;
@@ -33,6 +34,7 @@ class BirthdayService
3334 public function __construct (
3435 private ManagerRegistry $ doctrine ,
3536 private string $ birthdayReminderOffset ,
37+ private CalendarBackend $ calendarBackend ,
3638 ) {
3739 }
3840
@@ -62,11 +64,11 @@ public function onCardDeleted(int $addressBookId, string $cardUri): void
6264 $ calendar = $ this ->ensureBirthdayCalendarExists ($ principalUri );
6365
6466 $ objectUri = $ book ->getUri ().'- ' .$ cardUri .'.ics ' ;
65- $ calendarObject = $ this ->doctrine ->getRepository (CalendarObject::class)->findOneBy (['calendar ' => $ calendar , 'uri ' => $ objectUri ]);
6667
67- $ em = $ this ->doctrine ->getManager ();
68- $ em ->remove ($ calendarObject );
69- $ em ->flush ();
68+ $ this ->calendarBackend ->deleteCalendarObject (
69+ $ calendar ->getCalendar ()->getId (),
70+ $ objectUri
71+ );
7072 }
7173
7274 public function shouldBirthdayCalendarExist (string $ principalUri ): bool
@@ -290,7 +292,7 @@ public function syncPrincipal(string $principal): void
290292 }
291293 }
292294
293- public function birthdayEvenChanged (string $ existingCalendarData , VCalendar $ newCalendarData ): bool
295+ public function birthdayEventChanged (string $ existingCalendarData , VCalendar $ newCalendarData ): bool
294296 {
295297 try {
296298 $ existingBirthday = Reader::read ($ existingCalendarData );
@@ -315,44 +317,29 @@ private function updateCalendar(string $cardUri, string $cardData, AddressBook $
315317
316318 $ existing = $ this ->doctrine ->getRepository (CalendarObject::class)->findOneBy (['calendar ' => $ calendar , 'uri ' => $ objectUri ]);
317319
318- $ em = $ this ->doctrine ->getManager ();
319-
320320 if (null === $ calendarData ) {
321321 if (null !== $ existing ) {
322- $ em ->remove ($ existing );
322+ $ this ->calendarBackend ->deleteCalendarObject (
323+ $ calendar ->getId (),
324+ $ objectUri
325+ );
323326 }
324327 } else {
325- $ serializedCalendarData = $ calendarData ->serialize ();
326- $ vEvent = $ calendarData ->getComponents ()[0 ];
327- $ maxDate = new \DateTime (Constants::MAX_DATE );
328-
329328 if (null === $ existing ) {
330- $ calendarObject = (new CalendarObject ())
331- ->setCalendar ($ calendar )
332- ->setUri ($ objectUri )
333- ->setComponentType ('VEVENT ' )
334- ->setUid ($ objectUid )
335- ->setLastModified ((new \DateTime ())->getTimestamp ())
336- ->setFirstOccurence ($ vEvent ->DTSTART ->getDateTime ()->getTimeStamp ())
337- ->setLastOccurence ($ maxDate ->getTimestamp ())
338- ->setEtag (md5 ($ serializedCalendarData ))
339- ->setSize (strlen ($ serializedCalendarData ))
340- ->setCalendarData ($ serializedCalendarData );
341-
342- $ em ->persist ($ calendarObject );
329+ $ this ->calendarBackend ->createCalendarObject (
330+ $ calendar ->getId (),
331+ $ objectUri ,
332+ $ calendarData
333+ );
343334 } else {
344- if ($ this ->birthdayEvenChanged ($ existing ->getCalendarData (), $ calendarData )) {
345- $ existing
346- ->setLastModified ((new \DateTime ())->getTimestamp ())
347- ->setFirstOccurence ($ vEvent ->DTSTART ->getDateTime ()->getTimeStamp ())
348- ->setLastOccurence ($ maxDate ->getTimestamp ())
349- ->setEtag (md5 ($ serializedCalendarData ))
350- ->setSize (strlen ($ serializedCalendarData ))
351- ->setCalendarData ($ serializedCalendarData );
335+ if ($ this ->birthdayEventChanged ($ existing ->getCalendarData (), $ calendarData )) {
336+ $ this ->calendarBackend ->updateCalendarObject (
337+ $ calendar ->getId (),
338+ $ objectUri ,
339+ $ calendarData
340+ );
352341 }
353342 }
354343 }
355-
356- $ em ->flush ();
357344 }
358345}
0 commit comments