diff --git a/src/Foundation.hs b/src/Foundation.hs index ec9808928..8c527c9b1 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -709,7 +709,16 @@ tagAccessPredicate AuthTime = APDB $ \mAuthId route _ -> case route of E.where_ $ exam E.^. ExamCourse E.==. E.val cid return $ exam E.^. ExamDeregisterUntil forM_ exams $ \(E.Value deregUntil) -> - guard $ NTop (Just now) >= NTop deregUntil + guard $ NTop (Just now) <= NTop deregUntil + + tutorials <- lift . E.select . E.from $ \tutorial -> do + E.where_ . E.exists . E.from $ \tutorialParticipant -> + E.where_ $ tutorialParticipant E.^. TutorialParticipantTutorial E.==. tutorial E.^. TutorialId + E.&&. tutorialParticipant E.^. TutorialParticipantUser E.==. E.val uid + E.where_ $ tutorial E.^. TutorialCourse E.==. E.val cid + return $ (tutorial E.^. TutorialRegisterFrom, tutorial E.^. TutorialDeregisterUntil) + forM_ tutorials $ \(E.Value deregUntil) -> + guard $ NTop (Just now) <= NTop deregUntil return Authorized _other -> unauthorizedI MsgUnauthorizedCourseTime diff --git a/src/Handler/Course/Register.hs b/src/Handler/Course/Register.hs index bda498e20..2657455e3 100644 --- a/src/Handler/Course/Register.hs +++ b/src/Handler/Course/Register.hs @@ -258,16 +258,7 @@ deregisterParticipant uid cid = do forM_ examRegistrations $ \(Entity erId ExamRegistration{..}) -> do delete erId audit $ TransactionExamDeregister examRegistrationExam uid - - examResults <- E.select . E.from $ \(examResult `E.InnerJoin` exam) -> do - E.on $ examResult E.^. ExamResultExam E.==. exam E.^. ExamId - E.where_ $ exam E.^. ExamCourse E.==. E.val cid - E.&&. examResult E.^. ExamResultUser E.==. E.val uid - return examResult - forM_ examResults $ \(Entity erId ExamResult{..}) -> do - delete erId - audit $ TransactionExamResultDeleted examResultExam uid - + E.delete . E.from $ \tutorialParticipant -> do let tutorialCourse = E.subSelectForeign tutorialParticipant TutorialParticipantTutorial (E.^. TutorialCourse)