chore(lms): WIP V2 Learners
This commit is contained in:
parent
00d8d684f4
commit
b84577984a
@ -61,6 +61,7 @@ TableLmsStatusTooltip mbMonth@(Maybe Int): Zeigt #{maybeToMessage "bis zu " (fma
|
|||||||
TableLmsStatusDay: Datum letzte Statusänderung E‑Learning
|
TableLmsStatusDay: Datum letzte Statusänderung E‑Learning
|
||||||
TableLmsSuccess: Bestanden
|
TableLmsSuccess: Bestanden
|
||||||
TableLmsLock: Gesperrt
|
TableLmsLock: Gesperrt
|
||||||
|
TableLmsResetTries: E‑Learning Versuche zurücksetzen
|
||||||
LmsStatusBlocked: Durchgefallen wegen zu vieler Fehlversuche
|
LmsStatusBlocked: Durchgefallen wegen zu vieler Fehlversuche
|
||||||
LmsStatusExpired: Durchgefallen nach Fristablauf
|
LmsStatusExpired: Durchgefallen nach Fristablauf
|
||||||
LmsStatusSuccess: E#{nonBreakableDash}Learning bestanden
|
LmsStatusSuccess: E#{nonBreakableDash}Learning bestanden
|
||||||
@ -76,7 +77,8 @@ CsvColumnLmsResetPin: Wird das E-Learning Passwort bei der nächsten Synchronisa
|
|||||||
CsvColumnLmsDelete: Wird der Identifikator in der E‑Learning Plattform bei der nächsten Synchronisation gelöscht?
|
CsvColumnLmsDelete: Wird der Identifikator in der E‑Learning Plattform bei der nächsten Synchronisation gelöscht?
|
||||||
CsvColumnLmsStaff: Handelt es sich um einen internen Mitarbeiter? (Aus historischen Gründen, wird momentan ignoriert.)
|
CsvColumnLmsStaff: Handelt es sich um einen internen Mitarbeiter? (Aus historischen Gründen, wird momentan ignoriert.)
|
||||||
CsvColumnLmsSuccess: Zeitstempel der erfolgreichen Teilnahme (UTC)
|
CsvColumnLmsSuccess: Zeitstempel der erfolgreichen Teilnahme (UTC)
|
||||||
CsvColumnLmsLock: User was locked by LMS, usually due to too many attempts
|
CsvColumnLmsResetTries: Anzahl der bisher verbrauchten E‑Learning Prüfungsversuche zurücksetzen
|
||||||
|
CsvColumnLmsLock: E‑Learning Login gesperrt
|
||||||
LmsUserlistInsert: Neuer LMS User
|
LmsUserlistInsert: Neuer LMS User
|
||||||
LmsUserlistUpdate: LMS User aktualisierung
|
LmsUserlistUpdate: LMS User aktualisierung
|
||||||
LmsResultInsert: Neues LMS Ergebnis
|
LmsResultInsert: Neues LMS Ergebnis
|
||||||
|
|||||||
@ -61,6 +61,7 @@ TableLmsStatusTooltip mbMonth: Shows #{maybeToMessage "for up to " (fmap (flip p
|
|||||||
TableLmsStatusDay: Date of last e‑learning status change
|
TableLmsStatusDay: Date of last e‑learning status change
|
||||||
TableLmsSuccess: Completed
|
TableLmsSuccess: Completed
|
||||||
TableLmsLock: Locked
|
TableLmsLock: Locked
|
||||||
|
TableLmsResetTries: Reset e‑learning attempts
|
||||||
LmsStatusBlocked: Failed after too many attempts
|
LmsStatusBlocked: Failed after too many attempts
|
||||||
LmsStatusExpired: Failed due to expiry
|
LmsStatusExpired: Failed due to expiry
|
||||||
LmsStatusSuccess: Passed
|
LmsStatusSuccess: Passed
|
||||||
@ -76,7 +77,8 @@ CsvColumnLmsResetPin: Will the e#{nonBreakableDash}learning password be reset up
|
|||||||
CsvColumnLmsDelete: Will the identifier be deleted from the E‑learning platfrom upon next synchronisation?
|
CsvColumnLmsDelete: Will the identifier be deleted from the E‑learning platfrom upon next synchronisation?
|
||||||
CsvColumnLmsStaff: Is the user an internal staff member? (Legacy, currently ignored)
|
CsvColumnLmsStaff: Is the user an internal staff member? (Legacy, currently ignored)
|
||||||
CsvColumnLmsSuccess: Timestamp of successful completion (UTC)
|
CsvColumnLmsSuccess: Timestamp of successful completion (UTC)
|
||||||
CsvColumnLmsLock: Blockiert durch LMS, üblicherweise wegen zu vieler Fehlversuche
|
CsvColumnLmsResetTries: Reset number of used up e‑learning exam attempts
|
||||||
|
CsvColumnLmsLock: E‑learning login is not permitted
|
||||||
LmsUserlistInsert: New LMS user
|
LmsUserlistInsert: New LMS user
|
||||||
LmsUserlistUpdate: Update of LMS user
|
LmsUserlistUpdate: Update of LMS user
|
||||||
LmsResultInsert: New LMS result
|
LmsResultInsert: New LMS result
|
||||||
|
|||||||
@ -27,19 +27,22 @@ import qualified Database.Esqueleto.Utils as E
|
|||||||
data LmsUserTableCsv = LmsUserTableCsv -- for csv export only
|
data LmsUserTableCsv = LmsUserTableCsv -- for csv export only
|
||||||
{ csvLUTident :: LmsIdent
|
{ csvLUTident :: LmsIdent
|
||||||
, csvLUTpin :: Text
|
, csvLUTpin :: Text
|
||||||
, csvLUTresetPin, csvLUTdelete, csvLUTstaff :: LmsBool
|
, csvLUTresetPin, csvLUTdelete, csvLUTstaff -- V1
|
||||||
|
, csvLUTresetTries, csvLUTlock :: LmsBool -- V2
|
||||||
}
|
}
|
||||||
deriving Generic
|
deriving Generic
|
||||||
makeLenses_ ''LmsUserTableCsv
|
makeLenses_ ''LmsUserTableCsv
|
||||||
|
|
||||||
-- | Mundane conversion needed for direct download without dbTable onlu
|
-- | Mundane conversion needed for direct download without dbTable only
|
||||||
lmsUser2csv :: Day -> LmsUser -> LmsUserTableCsv
|
lmsUser2csv :: Day -> LmsUser -> LmsUserTableCsv
|
||||||
lmsUser2csv cutoff lu@LmsUser{..} = LmsUserTableCsv
|
lmsUser2csv cutoff lu@LmsUser{..} = LmsUserTableCsv
|
||||||
{ csvLUTident = lmsUserIdent
|
{ csvLUTident = lmsUserIdent
|
||||||
, csvLUTpin = lmsUserPin
|
, csvLUTpin = lmsUserPin
|
||||||
, csvLUTresetPin = lmsUserResetPin & LmsBool
|
, csvLUTresetPin = LmsBool lmsUserResetPin
|
||||||
, csvLUTdelete = lmsUserToDelete cutoff lu & LmsBool
|
, csvLUTdelete = LmsBool (lmsUserToDelete cutoff lu)
|
||||||
, csvLUTstaff = False & LmsBool
|
, csvLUTstaff = LmsBool False
|
||||||
|
, csvLUTresetTries= LmsBool False -- TODO -- wie wird das festgelegt? Als Attribut in der DB?
|
||||||
|
, csvLUTlock = LmsBool False -- TODO -- kann dies rein aus der Zeit berechnet werden?
|
||||||
}
|
}
|
||||||
|
|
||||||
-- csv without headers
|
-- csv without headers
|
||||||
@ -48,15 +51,17 @@ instance Csv.FromRecord LmsUserTableCsv
|
|||||||
|
|
||||||
-- csv with headers
|
-- csv with headers
|
||||||
lmsUserTableCsvHeader :: Csv.Header
|
lmsUserTableCsvHeader :: Csv.Header
|
||||||
lmsUserTableCsvHeader = Csv.header [ csvLmsIdent, csvLmsPin, csvLmsResetPin, csvLmsDelete, csvLmsStaff ]
|
lmsUserTableCsvHeader = Csv.header [ csvLmsIdent, csvLmsPin, csvLmsResetPin, csvLmsDelete, csvLmsStaff, csvLmsResetTries, csvLmsLock ]
|
||||||
|
|
||||||
instance ToNamedRecord LmsUserTableCsv where
|
instance ToNamedRecord LmsUserTableCsv where
|
||||||
toNamedRecord LmsUserTableCsv{..} = Csv.namedRecord
|
toNamedRecord LmsUserTableCsv{..} = Csv.namedRecord
|
||||||
[ csvLmsIdent Csv..= csvLUTident
|
[ csvLmsIdent Csv..= csvLUTident
|
||||||
, csvLmsPin Csv..= csvLUTpin
|
, csvLmsPin Csv..= csvLUTpin
|
||||||
, csvLmsResetPin Csv..= csvLUTresetPin
|
, csvLmsResetPin Csv..= csvLUTresetPin
|
||||||
, csvLmsDelete Csv..= csvLUTdelete
|
, csvLmsDelete Csv..= csvLUTdelete
|
||||||
, csvLmsStaff Csv..= csvLUTstaff
|
, csvLmsStaff Csv..= csvLUTstaff
|
||||||
|
, csvLmsResetTries Csv..= csvLUTresetTries
|
||||||
|
, csvLmsLock Csv..= csvLUTlock
|
||||||
]
|
]
|
||||||
instance FromNamedRecord LmsUserTableCsv where
|
instance FromNamedRecord LmsUserTableCsv where
|
||||||
parseNamedRecord (lsfHeaderTranslate -> csv)
|
parseNamedRecord (lsfHeaderTranslate -> csv)
|
||||||
@ -66,14 +71,18 @@ instance FromNamedRecord LmsUserTableCsv where
|
|||||||
<*> csv Csv..: csvLmsResetPin
|
<*> csv Csv..: csvLmsResetPin
|
||||||
<*> csv Csv..: csvLmsDelete
|
<*> csv Csv..: csvLmsDelete
|
||||||
<*> csv Csv..: csvLmsStaff
|
<*> csv Csv..: csvLmsStaff
|
||||||
|
<*> csv Csv..: csvLmsResetTries
|
||||||
|
<*> csv Csv..: csvLmsLock
|
||||||
|
|
||||||
instance CsvColumnsExplained LmsUserTableCsv where
|
instance CsvColumnsExplained LmsUserTableCsv where
|
||||||
csvColumnsExplanations _ = mconcat
|
csvColumnsExplanations _ = mconcat
|
||||||
[ single csvLmsIdent MsgCsvColumnLmsIdent
|
[ single csvLmsIdent MsgCsvColumnLmsIdent
|
||||||
, single csvLmsPin MsgCsvColumnLmsPin
|
, single csvLmsPin MsgCsvColumnLmsPin
|
||||||
, single csvLmsResetPin MsgCsvColumnLmsResetPin
|
, single csvLmsResetPin MsgCsvColumnLmsResetPin
|
||||||
, single csvLmsDelete MsgCsvColumnLmsDelete
|
, single csvLmsDelete MsgCsvColumnLmsDelete
|
||||||
, single csvLmsStaff MsgCsvColumnLmsStaff
|
, single csvLmsStaff MsgCsvColumnLmsStaff
|
||||||
|
, single csvLmsResetTries MsgCsvColumnLmsResetTries
|
||||||
|
, single csvLmsLock MsgCsvColumnLmsLock
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
single :: RenderMessage UniWorX msg => Csv.Name -> msg -> Map Csv.Name Widget
|
single :: RenderMessage UniWorX msg => Csv.Name -> msg -> Map Csv.Name Widget
|
||||||
@ -101,7 +110,9 @@ mkUserTable _sid qsh qid = do
|
|||||||
) $ \(view $ _dbrOutput . _entityVal . _lmsUserPin -> pin ) -> textCell pin
|
) $ \(view $ _dbrOutput . _entityVal . _lmsUserPin -> pin ) -> textCell pin
|
||||||
, sortable (Just csvLmsResetPin) (i18nCell MsgTableLmsResetPin) $ \(view $ _dbrOutput . _entityVal . _lmsUserResetPin -> reset) -> ifIconCell reset IconReset
|
, sortable (Just csvLmsResetPin) (i18nCell MsgTableLmsResetPin) $ \(view $ _dbrOutput . _entityVal . _lmsUserResetPin -> reset) -> ifIconCell reset IconReset
|
||||||
, sortable (Just csvLmsDelete) (i18nCell MsgTableLmsDelete) $ \(view $ _dbrOutput . _entityVal . _lmsUserToDelete cutoff -> del ) -> ifIconCell del IconRemoveUser
|
, sortable (Just csvLmsDelete) (i18nCell MsgTableLmsDelete) $ \(view $ _dbrOutput . _entityVal . _lmsUserToDelete cutoff -> del ) -> ifIconCell del IconRemoveUser
|
||||||
, sortable Nothing (i18nCell MsgTableLmsStaff) $ const mempty
|
, sortable Nothing (i18nCell MsgTableLmsStaff) $ const mempty
|
||||||
|
, sortable Nothing (i18nCell MsgTableLmsResetTries) $ const mempty -- TODO
|
||||||
|
, sortable Nothing (i18nCell MsgTableLmsLock) $ const mempty -- TODO
|
||||||
]
|
]
|
||||||
dbtSorting = Map.fromList
|
dbtSorting = Map.fromList
|
||||||
[ (csvLmsIdent , SortColumn (E.^. LmsUserIdent))
|
[ (csvLmsIdent , SortColumn (E.^. LmsUserIdent))
|
||||||
@ -134,6 +145,8 @@ mkUserTable _sid qsh qid = do
|
|||||||
<*> view (_dbrOutput . _entityVal . _lmsUserResetPin . _lmsBool)
|
<*> view (_dbrOutput . _entityVal . _lmsUserResetPin . _lmsBool)
|
||||||
<*> view (_dbrOutput . _entityVal . _lmsUserToDelete cutoff . _lmsBool)
|
<*> view (_dbrOutput . _entityVal . _lmsUserToDelete cutoff . _lmsBool)
|
||||||
<*> const (LmsBool False)
|
<*> const (LmsBool False)
|
||||||
|
<*> const (LmsBool False) -- TODO
|
||||||
|
<*> const (LmsBool False) -- TODO
|
||||||
|
|
||||||
dbtCsvDecode = Nothing
|
dbtCsvDecode = Nothing
|
||||||
dbtExtraReps = []
|
dbtExtraReps = []
|
||||||
|
|||||||
@ -32,7 +32,7 @@ data LmsUserTableCsv = LmsUserTableCsv -- for csv export only
|
|||||||
deriving Generic
|
deriving Generic
|
||||||
makeLenses_ ''LmsUserTableCsv
|
makeLenses_ ''LmsUserTableCsv
|
||||||
|
|
||||||
-- | Mundane conversion needed for direct download without dbTable onlu
|
-- | Mundane conversion needed for direct download without dbTable only
|
||||||
lmsUser2csv :: Day -> LmsUser -> LmsUserTableCsv
|
lmsUser2csv :: Day -> LmsUser -> LmsUserTableCsv
|
||||||
lmsUser2csv cutoff lu@LmsUser{..} = LmsUserTableCsv
|
lmsUser2csv cutoff lu@LmsUser{..} = LmsUserTableCsv
|
||||||
{ csvLUTident = lmsUserIdent
|
{ csvLUTident = lmsUserIdent
|
||||||
|
|||||||
Reference in New Issue
Block a user