From d4b784afba450019d34a7c70eff7992dbad3b9bf Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Tue, 3 Mar 2020 15:44:09 +0100 Subject: [PATCH] feat(eeusersr): more on actions, TODO audit --- messages/uniworx/de-de-formal.msg | 8 +++-- messages/uniworx/en-eu.msg | 8 +++-- src/Handler/ExamOffice/ExternalExam.hs | 40 +++++++++++++++---------- src/Handler/Utils/ExternalExam/Users.hs | 34 +++++++++------------ 4 files changed, 49 insertions(+), 41 deletions(-) diff --git a/messages/uniworx/de-de-formal.msg b/messages/uniworx/de-de-formal.msg index 9992ad69a..a89735757 100644 --- a/messages/uniworx/de-de-formal.msg +++ b/messages/uniworx/de-de-formal.msg @@ -1737,11 +1737,13 @@ ExamUserMarkSynchronisedCsv: Prüfungsleistungen beim Export als synchronisiert ExamUserMarkSynchronisedCsvTip: Sollen beim CSV-Export automatisch alle heruntergeladenen Prüfungsleistungen als synchronisiert markiert werden? Diese Markierung dient als Hinweis an andere Prüfungsbeauftragte und die Kursverwalter, dass die Leistung an der korrekten Stelle vermerkt wurde und keiner weiteren Handlung bedarf. ExamUserMarkedSynchronised n@Int: #{n} #{pluralDE n "Prüfungsleistung" "Prüfungsleistungen"} als synchronisiert markiert +ExternalExamOccurrence: Termin + ExternalExamUserMarkSynchronisedCsv: Prüfungsleistungen beim Export als synchronisiert markieren ExternalExamUserMarkedSynchronised n@Int: #{n} #{pluralDE n "Prüfungsleistung" "Prüfungsleistungen"} als synchronisiert markiert -ExternalExamOccurrenceEdited n@Int: #{n} Termine editiert -ExternalExamResultEdited n@Int: #{n} Prüfungsergebnisse editiert -ExternalExamUserDeleted n@Int: #{n} Prüfungsteilnehmer entfernt +ExternalExamOccurrenceEdited count@Int64: #{count} #{pluralDE count "Termin" "Termine"} editiert +ExternalExamResultEdited count@Int64: #{count} #{pluralDE count "Prüfungsergebnis" "Prüfungsergebnisse"} editiert +ExternalExamUserDeleted count@Int64: #{count} Prüfungsteilnehmer entfernt ExamOfficeExamUsersHeading: Prüfungsleistungen diff --git a/messages/uniworx/en-eu.msg b/messages/uniworx/en-eu.msg index d11a41bf9..06ae2221f 100644 --- a/messages/uniworx/en-eu.msg +++ b/messages/uniworx/en-eu.msg @@ -1729,11 +1729,13 @@ ExamUserMarkSynchronisedCsv: Mark exam achievements as synchronised while export ExamUserMarkSynchronisedCsvTip: Should all exam achievements, that are included in the download, be marked as synchronised? Marking exam achievemnts as synchronised serves as a notice to other exam offices and course administrators, that the exam achievement has been dealt with properly such that no further action is required. ExamUserMarkedSynchronised n: Successfully marked #{n} #{pluralEN n "exam achievement" "exam achievements"} as synchronised +ExternalExamOccurrence: Occurrence + ExternalExamUserMarkSynchronisedCsv: Mark exam achievements as synchronised while exporting ExternalExamUserMarkedSynchronised n: Successfully marked #{n} #{pluralEN n "exam result" "exam results"} as synchronised -ExternalExamOccurrenceEdited n: Successfully edited #{n} #{pluralEN n "occurrence" "occurrences"} -ExternalExamResultEdited n: Successfully edited #{n} #{pluralEN n "exam result" "exam results"} -ExternalExamUserDeleted n: Successfully deleted #{n} #{pluralEN n "exam participant" "exam participants"} +ExternalExamOccurrenceEdited count: Successfully edited #{count} #{pluralEN count "occurrence" "occurrences"} +ExternalExamResultEdited count: Successfully edited #{count} #{pluralEN count "exam result" "exam results"} +ExternalExamUserDeleted count: Successfully deleted #{count} #{pluralEN count "exam participant" "exam participants"} ExamOfficeExamUsersHeading: Exam achievements diff --git a/src/Handler/ExamOffice/ExternalExam.hs b/src/Handler/ExamOffice/ExternalExam.hs index 28fa71e37..40a040fc8 100644 --- a/src/Handler/ExamOffice/ExternalExam.hs +++ b/src/Handler/ExamOffice/ExternalExam.hs @@ -4,6 +4,9 @@ module Handler.ExamOffice.ExternalExam import Import +import qualified Data.Set as Set +import Database.Persist.Sql (deleteWhereCount, updateWhereCount) + import Handler.Utils import Handler.Utils.ExternalExam.Users @@ -16,31 +19,38 @@ postEEGradesR tid ssh coursen examn = do (usersResult, examUsersTable) <- makeExternalExamUsersTable EEUMGrades eExam usersResult' <- formResultMaybe usersResult $ \case - (ExternalExamUserMarkSynchronisedData, selectedResults) -> do - forM_ selectedResults externalExamResultMarkSynchronised + (ExternalExamUserMarkSynchronisedData, selectedUsers) -> do + forM_ selectedUsers externalExamResultMarkSynchronised return . Just $ do - addMessageI Success $ MsgExamUserMarkedSynchronised (length selectedResults) + addMessageI Success $ MsgExamUserMarkedSynchronised $ length selectedUsers redirect $ EExamR tid ssh coursen examn EEGradesR - (ExternalExamUserEditOccurrenceData occ, selectedResults) -> do - -- TODO work in progress - forM_ selectedResults $ externalExamEditOccurrence occ + (ExternalExamUserEditOccurrenceData occ, selectedUsers) -> do + nrEdited <- do + now <- liftIO getCurrentTime + updateWhereCount [ ExternalExamResultId <-. Set.toList selectedUsers ] + [ ExternalExamResultTime =. occ + , ExternalExamResultLastChanged =. now + ] return . Just $ do - addMessageI Success $ MsgExternalExamOccurrenceEdited $ length selectedResults + addMessageI Success $ MsgExternalExamOccurrenceEdited nrEdited redirect $ EExamR tid ssh coursen examn EEGradesR - (ExternalExamUserEditResultData examResult, selectedResults) -> do - -- TODO work in progress - forM_ selectedResults $ externalExamEditResult examResult + (ExternalExamUserEditResultData examResult, selectedUsers) -> do + nrEdited <- do + now <- liftIO getCurrentTime + updateWhereCount [ ExternalExamResultId <-. Set.toList selectedUsers ] + [ ExternalExamResultResult =. examResult + , ExternalExamResultLastChanged =. now + ] return . Just $ do - addMessageI Success $ MsgExternalExamResultEdited $ length selectedResults + addMessageI Success $ MsgExternalExamResultEdited nrEdited redirect $ EExamR tid ssh coursen examn EEGradesR - (ExternalExamUserDeleteData, selectedResults) -> do - -- TODO work in progress - forM_ selectedResults externalExamDeleteUser + (ExternalExamUserDeleteData, selectedUsers) -> do + nrDeleted <- deleteWhereCount [ ExternalExamResultId <-. Set.toList selectedUsers ] return . Just $ do - addMessageI Success $ MsgExternalExamUserDeleted $ length selectedResults + addMessageI Success $ MsgExternalExamUserDeleted nrDeleted redirect $ EExamR tid ssh coursen examn EEGradesR return (usersResult', examUsersTable) diff --git a/src/Handler/Utils/ExternalExam/Users.hs b/src/Handler/Utils/ExternalExam/Users.hs index 84112e019..9f0a022ed 100644 --- a/src/Handler/Utils/ExternalExam/Users.hs +++ b/src/Handler/Utils/ExternalExam/Users.hs @@ -311,9 +311,21 @@ makeExternalExamUsersTable mode (Entity eeId ExternalExam{..}) = do return (formRes, formWgt) EEUMUsers -> \csrf -> do let + -- TODO work in progress actionMap :: Map ExternalExamUserAction (AForm Handler ExternalExamUserActionData) - actionMap = Map.fromList - [] + actionMap = mconcat + [ singletonMap ExternalExamUserMarkSynchronised $ + pure ExternalExamUserMarkSynchronisedData + --, singletonMap ExternalExamUserEditOccurrence $ + -- ExternalExamUserEditOccurrenceData + -- <$> mempty + -- <$> aopt () (fslI MsgExamOccurrence) (Just Nothing) + --, singletonMap ExternalExamUserEditResult $ + -- ExternalExamUserEditResultData + -- <$> mempty + , singletonMap ExternalExamUserDelete $ + pure ExternalExamUserDeleteData + ] (res, formWgt) <- multiActionM actionMap (fslI MsgAction) Nothing csrf let formRes = (, mempty) . First . Just <$> res return (formRes, formWgt) @@ -483,21 +495,3 @@ externalExamResultMarkSynchronised resId = do | Entity _ UserFunction{..} <- userFunctions ] -externalExamEditOccurrence :: UTCTime -> ExternalExamResultId -> DB () -externalExamEditOccurrence _ _ = do - --uid <- requireAuthId - --now <- liftIO getCurrentTime - -- TODO work in progress - return () - -externalExamEditResult :: ExamResultPassedGrade -> ExternalExamResultId -> DB () -externalExamEditResult _ _ = do - --uid <- requireAuthId - --now <- liftIO getCurrentTime - -- TODO work in progress - return () - -externalExamDeleteUser :: ExternalExamResultId -> DB () -externalExamDeleteUser _ = do - -- TODO work in progress - return ()