From 515eddc032a29ec7ab9b258841abe67a989473ca Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Mon, 24 Feb 2025 16:12:22 +0100 Subject: [PATCH] chore(exams): allow email for exam result entry as well --- src/Handler/Exam/Correct.hs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/Handler/Exam/Correct.hs b/src/Handler/Exam/Correct.hs index b9e5c52fb..a8f1e2494 100644 --- a/src/Handler/Exam/Correct.hs +++ b/src/Handler/Exam/Correct.hs @@ -1,4 +1,4 @@ --- SPDX-FileCopyrightText: 2022 Gregor Kleen ,Sarah Vaupel +-- SPDX-FileCopyrightText: 2022-25 Gregor Kleen ,Sarah Vaupel ,Steffen Jost -- -- SPDX-License-Identifier: AGPL-3.0-or-later @@ -20,6 +20,7 @@ import Handler.Utils.Exam (fetchExam) import Utils.Exam.Correct +{-# ANN module ("HLint: ignore Functor law" :: String) #-} -- | Minimum length of a participant identifier. Identifiers that are shorter would result in too many query results and are therefor rejected. minNeedleLength :: Int @@ -72,7 +73,7 @@ postECorrectR tid ssh csh examn = do Entity eId Exam{} <- lift $ fetchExam tid ssh csh examn euid <- traverse decrypt ciqUser - guardMExceptT (maybe True ((>= minNeedleLength) . length) $ euid ^? _Left) $ + guardMExceptT (maybe True ((>= minNeedleLength) . length) $ euid ^? _Left) $ CorrectInterfaceResponseFailure Nothing <$> (getMessageRender <*> pure MsgExamCorrectErrorNeedleTooShort) participantMatches <- lift . E.select . E.from $ \(examRegistration `E.InnerJoin` user) -> do @@ -84,14 +85,16 @@ postECorrectR tid ssh csh examn = do mUserIdent = euid ^? _Left E.where_ $ uidMatch E.||. (case mUserIdent of - Just userIdent -> user E.^. UserSurname E.==. E.val userIdent - E.||. user E.^. UserSurname `E.hasInfix` E.val userIdent - E.||. user E.^. UserFirstName E.==. E.val userIdent - E.||. user E.^. UserFirstName `E.hasInfix` E.val userIdent - E.||. user E.^. UserDisplayName E.==. E.val userIdent - E.||. user E.^. UserDisplayName `E.hasInfix` E.val userIdent - E.||. user E.^. UserMatrikelnummer E.==. E.val mUserIdent - E.||. user E.^. UserMatrikelnummer `E.hasInfix` E.val mUserIdent + Just userIdent -> user E.^. UserSurname E.==. E.val userIdent + E.||. user E.^. UserSurname `E.hasInfix` E.val userIdent + E.||. user E.^. UserFirstName E.==. E.val userIdent + E.||. user E.^. UserFirstName `E.hasInfix` E.val userIdent + E.||. user E.^. UserDisplayName E.==. E.val userIdent + E.||. user E.^. UserDisplayName `E.hasInfix` E.val userIdent + E.||. user E.^. UserMatrikelnummer E.==. E.val mUserIdent + E.||. user E.^. UserMatrikelnummer `E.hasInfix` E.val mUserIdent + E.||. user E.^. UserEmail E.==. E.val (userIdent & CI.mk) + E.||. user E.^. UserDisplayEmail E.==. E.val (userIdent & CI.mk) Nothing -> E.val False) E.limit $ succ maxCountUserMatches return user @@ -200,8 +203,8 @@ postECorrectR tid ssh csh examn = do , ciraHasMore = length participantMatches > maxCountUserMatches , ciraUsers = Set.fromList users } - + whenM acceptsJson $ sendResponseStatus (ciResponseStatus response) $ toJSON response - + redirect $ CExamR tid ssh csh examn EShowR