From 030fd7abf1bdcd700d45bfa14cc192ac98dee24e Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 6 Dec 2019 12:09:14 +0100 Subject: [PATCH] fix(submission): allow not modifying submissionUsers --- src/Handler/Submission.hs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Handler/Submission.hs b/src/Handler/Submission.hs index f0754e210..9167d417a 100644 --- a/src/Handler/Submission.hs +++ b/src/Handler/Submission.hs @@ -265,6 +265,9 @@ makeSubmissionForm cid msmid uploadMode grouping isLecturer prefillUsers = ident postProcess :: Map ListPosition (Either UserEmail UserId, ()) -> Set (Either UserEmail UserId) postProcess valMap + | is _Just msmid + , resultUsers == prefillUsers + = resultUsers | Just maxSize' <- maxSize , fromIntegral maxSize' >= Set.size resultUsers = resultUsers @@ -399,11 +402,19 @@ submissionHelper tid ssh csh shn mcid = do } mCID <- fmap join . msgSubmissionErrors . runDBJobs $ do + -- Determine old submission users + subUsersOld <- if + | Just smid <- msmid -> Set.union + <$> (setOf (folded . _entityVal . _submissionUserUser . to Right) <$> selectList [SubmissionUserSubmission ==. smid] []) + <*> (sourceInvitationsF smid <&> Set.fromList . map (\(email, InvDBDataSubmissionUser) -> Left email)) + | otherwise -> return Set.empty + res' <- case res of FormMissing -> return FormMissing (FormFailure failmsgs) -> return $ FormFailure failmsgs -- #227 Part II: no longer ignore submitter, if the user is lecturer or admin (allow lecturers to submit for their students) (FormSuccess res'@(_, groupMembers)) + | groupMembers == subUsersOld -> return $ FormSuccess res' | Arbitrary{..} <- sheetGrouping -> do -- Validate AdHoc Group Members -- , length gEMails < maxParticipants -> do -- < since submitting user is already accounted for let (gEMails, gIds) = partitionEithers $ Set.toList groupMembers @@ -479,13 +490,6 @@ submissionHelper tid ssh csh shn mcid = do -- SubmissionUser for all group members (pre-registered & ad-hoc) return $ groupUids `Set.union` adhocMembers - -- Determine old submission users - subUsersOld <- if - | isJust msmid -> Set.union - <$> (setOf (folded . _entityVal . _submissionUserUser . to Right) <$> selectList [SubmissionUserSubmission ==. smid] []) - <*> (sourceInvitationsF smid <&> Set.fromList . map (\(email, InvDBDataSubmissionUser) -> Left email)) - | otherwise -> return Set.empty -- optimization (do not perform selection if submission was freshly created) - -- Since invitations carry no data we only need to consider changes to -- the set of users/invited emails -- Otherwise we would have to update old invitations (via