feat(eeusersr): more on actions, TODO audit

This commit is contained in:
Sarah Vaupel 2020-03-03 15:44:09 +01:00
parent 4d48730abd
commit d4b784afba
4 changed files with 49 additions and 41 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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 ()