From 2634774eefff2e3d437f53a6cdd62cdb3b762619 Mon Sep 17 00:00:00 2001 From: SJost Date: Wed, 17 Oct 2018 10:53:53 +0200 Subject: [PATCH] =?UTF-8?q?L=C3=B6schen=20von=20festen=20Abgabegruppen=20i?= =?UTF-8?q?mplementiert.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Handler/Profile.hs | 18 +++++++++++++++--- templates/deletedUser.hamlet | 3 +++ 2 files changed, 18 insertions(+), 3 deletions(-) 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.