diff --git a/src/Handler/Profile.hs b/src/Handler/Profile.hs index de1b22a7c..701248d42 100644 --- a/src/Handler/Profile.hs +++ b/src/Handler/Profile.hs @@ -163,7 +163,7 @@ postProfileDataR = do case btnResult of (FormSuccess BtnDelete) -> do (uid, User{..}) <- requireAuthPair - (deletedSubmissions,groupSubmissions) <- runDB $ deleteUser uid + ((deletedSubmissions,groupSubmissions),deletedSubmissionGroups) <- runDB $ deleteUser uid -- addMessageI Success $ MsgDeleteUser deletedSubmissions -- when (groupSubmissions > 0) $ addMessageI Info $ MsgDeleteUserGroupSubmissions groupSubmissions --TODO: LogOut user @@ -177,7 +177,7 @@ postProfileDataR = do -deleteUser :: UserId -> DB (Int,Int) -- TODO: Restrict deletions for lecturers, tutors and students in course that won't allow deregistration +deleteUser :: UserId -> DB ((Int,Int),Int64) -- TODO: Restrict deletions for lecturers, tutors and students in course that won't allow deregistration deleteUser duid = do -- E.deleteCount for submissions is not cascading, hence we first select and then delete manually -- Submissions / SubmissionUser @@ -187,7 +187,8 @@ deleteUser duid = do singleSubmissions <- selectSubmissionsWhere (\numBuddies -> numBuddies E.==. E.val (0::Int64)) deleteCascade duid forM_ singleSubmissions $ \(E.Value submissionId) -> deleteCascade submissionId - return (length singleSubmissions, length groupSubmissions) + deletedSubmissionGroups <- deleteSingleSubmissionGroups + return ((length singleSubmissions, length groupSubmissions),deletedSubmissionGroups) where selectSubmissionsWhere :: (E.SqlExpr (E.Value Int64) -> E.SqlExpr (E.Value Bool)) -> ReaderT SqlBackend (HandlerT UniWorX IO) [E.Value (Key Submission)] @@ -202,6 +203,17 @@ deleteUser duid = do E.&&. (whereBuddies numBuddies) return $ submission E.^. SubmissionId + deleteSingleSubmissionGroups = E.deleteCount $ E.from $ \submissionGroup -> do + E.where_ $ E.exists $ E.from $ \subGroupUser -> do + E.where_ $ subGroupUser E.^. SubmissionGroupUserSubmissionGroup E.==. submissionGroup E.^. SubmissionGroupId + E.&&. subGroupUser E.^. SubmissionGroupUserUser E.==. E.val duid + E.where_ $ E.notExists $ E.from $ \subGroupUser -> do + E.where_ $ subGroupUser E.^. SubmissionGroupUserSubmissionGroup E.==. submissionGroup E.^. SubmissionGroupId + E.&&. subGroupUser E.^. SubmissionGroupUserUser E.!=. E.val duid + + + + getProfileDataR :: Handler Html diff --git a/templates/deletedUser.hamlet b/templates/deletedUser.hamlet index 04336132f..142d317f1 100644 --- a/templates/deletedUser.hamlet +++ b/templates/deletedUser.hamlet @@ -8,4 +8,7 @@ aber die Zuordnung zum Benutzer wurden gelöscht. Gruppenabgaben können dadurch zu Einzelabgaben werden, welche dann vom letzten Benutzer gelöscht werden können. + $if deletedSubmissionGroups > 0 +
+ #{display deletedSubmissionGroups} benannte Abgabengruppen wurden gelöscht, da diese dadurch leer wurden.