diff --git a/routes b/routes index 152afe2b8..92cbcacc8 100644 --- a/routes +++ b/routes @@ -252,4 +252,7 @@ !/#UUID CryptoUUIDDispatchR GET !free -- just redirect -- !/*{CI FilePath} CryptoFileNameDispatchR GET !free -- Disabled until preliminary check for valid cID exists -!/*WellKnownFileName WellKnownR GET !free \ No newline at end of file +!/*WellKnownFileName WellKnownR GET !free + +-- OSIS CSV Export Demo +/lms LmsR GET \ No newline at end of file diff --git a/src/Handler/LMS.hs b/src/Handler/LMS.hs new file mode 100644 index 000000000..795dd6a10 --- /dev/null +++ b/src/Handler/LMS.hs @@ -0,0 +1,65 @@ +module Handler.LMS + ( getLmsR + ) + where + +import Import + +import Handler.Utils + +getLmsR :: Handler Html +getLmsR = do + let dbtIdent = "lmsUsers" :: Text + dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout } + dbtSQLQuery q = error "TODO" + dbtRowKey = error "TODO" + dbtProj = dbtProjSimple $ \(userIdent, userPin, doUserPinReset, doDeleteUser, isUserIntern) -> do + return ("abcdefgh", "12345678", 0, 0, 0) + dbtColonnade = colChoices + dbtSorting = mempty + dbtFilter = mempty + dbtFilterUI = mempty + dbtParams = def + dbtCsvName = "lms.csv" + -- TODO: wip, for reference, see e.g. Handler.Course.Users or Handler.Exam. + dbtCsvEncode = do + return $ DBTCsvEncode + { dbtCsvExportForm = def + , dbtCsvDoEncode = \UserCsvExportData{} -> C.mapM $ \(_, row) -> flip runReaderT row $ + LmsTableCsv -- <- for each desired column one view + <$> view (hasUser . _userSurname) + <*> view (hasUser . _userFirstName) + <*> view (hasUser . _userDisplayName) + <*> view (hasUser . _userSex) + <*> view (hasUser . _userMatrikelnummer) + <*> view (hasUser . _userEmail) + <*> view _userStudyFeatures + <*> preview (_userSubmissionGroup . _entityVal . _submissionGroupName) + <*> view _userTableRegistration + <*> userNote + <*> (over (_2.traverse._Just) (tutorialName . entityVal) . over (_1.traverse) (tutorialName . entityVal) <$> view _userTutorials) + -- <*> (over (_2.traverse._Just) (examName . entityVal) . over (_1.traverse) (examName . entityVal) <$> view _userExams) + <*> (over traverse (examName . entityVal) <$> view _userExams) + <*> views _userSheets (set (mapped . _1 . mapped) ()) + , dbtCsvName, dbtCsvSheetName + , dbtCsvNoExportData = Nothing + , dbtCsvHeader = return . Vector.filter csvColumns' . userTableCsvHeader showSex tutorials sheets . fromMaybe def + , dbtCsvExampleData = Nothing + } + -- TODO wip, for reference see e.g. Handler.Exam.Users + dbtCsvDecode = Just DBTCsvDecode + { dbtCsvRowKey = + , dbtCsvComputeActions = + , dbtCsvClassifyAction = + , dbtCsvCoarsenActionClass = + , dbtCsvValidateActions = + , dbtCsvExecuteActions = -- <- actions based on sent data here + , dbtCsvRenderKey = + , dbtCsvRenderActionClass = + , dbtCsvRenderException = + } + dbTable psValidator DBTable{..} + let heading = [whamlet|LMS|] + siteLayout heading $ do + setTitleI heading + $(widgetFile "lms")