security->isGranted('ROLE_USER')) { throw new AccessDeniedException('Access denied: ROLE_USER required.'); } $recurrence = $this->taskRecurrenceRepository->find($recurrenceId); if (null === $recurrence) { throw new InvalidArgumentException(sprintf('TaskRecurrence with ID %d not found.', $recurrenceId)); } $tasks = $recurrence->getTasks()->toArray(); $eventUidToDelete = null; foreach ($tasks as $task) { if (null !== $task->getCalendarEventUid()) { $eventUidToDelete = $task->getCalendarEventUid(); break; } } foreach ($tasks as $task) { $task->setRecurrence(null); } $this->entityManager->remove($recurrence); $this->entityManager->flush(); if (null !== $eventUidToDelete) { $this->calDavService->deleteEvent($eventUidToDelete); } return json_encode([ 'success' => true, 'message' => sprintf('TaskRecurrence %d deleted.', $recurrenceId), 'tasksUpdated' => count($tasks), ]); } }