diff --git a/src/Handler/Submission/Helper.hs b/src/Handler/Submission/Helper.hs index 3b6521f1b..9dab33ccb 100644 --- a/src/Handler/Submission/Helper.hs +++ b/src/Handler/Submission/Helper.hs @@ -417,9 +417,16 @@ submissionHelper tid ssh csh shn mcid = do E.where_ $ (user E.^. UserId) `E.in_` E.valList gIds let isParticipant = E.exists . E.from $ \courseParticipant -> do - E.where_ $ user E.^. UserId E.==. courseParticipant E.^. CourseParticipantUser + E.where_ $ (user E.^. UserId E.==. courseParticipant E.^. CourseParticipantUser E.&&. courseParticipant E.^. CourseParticipantCourse E.==. E.val sheetCourse - E.&&. courseParticipant E.^. CourseParticipantState E.==. E.val CourseParticipantActive + E.&&. courseParticipant E.^. CourseParticipantState E.==. E.val CourseParticipantActive) + isOldUser = E.exists . E.from $ \(submissionUser `E.InnerJoin` submission) -> do + E.on $ submissionUser E.^. SubmissionUserSubmission E.==. submission E.^. SubmissionId + E.where_ $ submissionUser E.^. SubmissionUserUser E.==. user E.^. UserId + E.&&. submission E.^. SubmissionSheet E.==. E.val shid + case msmid of + Nothing -> return () + Just smid -> E.where_ $ submission E.^. SubmissionId E.==. E.val smid hasSubmitted = E.exists . E.from $ \(submissionUser `E.InnerJoin` submission) -> do E.on $ submissionUser E.^. SubmissionUserSubmission E.==. submission E.^. SubmissionId E.where_ $ submissionUser E.^. SubmissionUserUser E.==. user E.^. UserId @@ -427,7 +434,7 @@ submissionHelper tid ssh csh shn mcid = do case msmid of -- Multiple `E.where_`-Statements are merged with `&&` in esqueleto 2.5.3 Nothing -> return () Just smid -> E.where_ $ submission E.^. SubmissionId E.!=. E.val smid - return (user E.^. UserEmail, (user E.^. UserId, isParticipant, hasSubmitted)) + return (user E.^. UserEmail, (user E.^. UserId, isParticipant E.||. isOldUser, hasSubmitted)) $logDebugS "SUBMISSION.AdHocGroupValidation" $ tshow participants