diff --git a/messages/uniworx/categories/user/de-de-formal.msg b/messages/uniworx/categories/user/de-de-formal.msg index 9d084bc57..0a7682d01 100644 --- a/messages/uniworx/categories/user/de-de-formal.msg +++ b/messages/uniworx/categories/user/de-de-formal.msg @@ -36,7 +36,7 @@ AuthLDAPLookupFailed: Nutzer:in konnte aufgrund eines LDAP-Fehlers nicht nachges AuthLDAPInvalidLookup: Bestehender Nutzer/Bestehende Nutzerin konnte nicht eindeutig einem LDAP-Eintrag zugeordnet werden AuthLDAPAlreadyConfigured: Nutzer:in meldet sich bereits per Fraport AG Kennung in FRADrive an AuthLDAPConfigured: Nutzer:in meldet sich nun per Fraport AG Kennung in FRADrive an -AuthLDAP !ident-ok: LMU-Account +AuthLDAP !ident-ok: Fraport AG Kennung PasswordResetQueued: Link zum Passwort-Zurücksetzen versandt UserAssimilateUser: Benutzer:in AssimilateUserNotFound: E-Mail Adresse konnte keinem Benutzer/keiner Benutzerin zugeordnet werden diff --git a/messages/uniworx/categories/user/en-eu.msg b/messages/uniworx/categories/user/en-eu.msg index dcb6cb65e..8e1a5c7bc 100644 --- a/messages/uniworx/categories/user/en-eu.msg +++ b/messages/uniworx/categories/user/en-eu.msg @@ -36,7 +36,7 @@ AuthLDAPLookupFailed: User could not be looked up due to a LDAP error AuthLDAPInvalidLookup: Existing user could not be uniquely matched with a LDAP entry AuthLDAPAlreadyConfigured: User already logs in using their Fraport AG account AuthLDAPConfigured: User now logs in using their Fraport AG account -AuthLDAP: LMU-Account +AuthLDAP: Fraport AG account PasswordResetQueued: Sent link to reset password UserAssimilateUser: User AssimilateUserNotFound: Email could not be resolved to an user diff --git a/messages/uniworx/utils/navigation/menu/de-de-formal.msg b/messages/uniworx/utils/navigation/menu/de-de-formal.msg index c0ceceb83..b16981ad4 100644 --- a/messages/uniworx/utils/navigation/menu/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/menu/de-de-formal.msg @@ -122,3 +122,5 @@ MenuCourseNewsEdit: Kursnachricht bearbeiten MenuCourseEventNew: Neuer Kurstermin MenuCourseEventEdit: Kurstermin bearbeiten MenuLanguage: Sprache + +MenuLms: Schnittstelle E-Lernen \ No newline at end of file diff --git a/messages/uniworx/utils/navigation/menu/en-eu.msg b/messages/uniworx/utils/navigation/menu/en-eu.msg index 82cedef44..91fd11d74 100644 --- a/messages/uniworx/utils/navigation/menu/en-eu.msg +++ b/messages/uniworx/utils/navigation/menu/en-eu.msg @@ -123,3 +123,5 @@ MenuCourseNewsEdit: Edit course news MenuCourseEventNew: New course occurrence MenuCourseEventEdit: Edit course occurrence MenuLanguage: Language + +MenuLms: Interface E-Learning \ No newline at end of file diff --git a/src/Foundation/Navigation.hs b/src/Foundation/Navigation.hs index d23cc21f7..1341194de 100644 --- a/src/Foundation/Navigation.hs +++ b/src/Foundation/Navigation.hs @@ -133,6 +133,8 @@ breadcrumb HealthR = i18nCrumb MsgMenuHealth Nothing breadcrumb InstanceR = i18nCrumb MsgMenuInstance Nothing breadcrumb StatusR = i18nCrumb MsgMenuHealth Nothing -- never displayed +breadcrumb LmsR = i18nCrumb MsgMenuLms Nothing + breadcrumb ProfileR = i18nCrumb MsgBreadcrumbProfile Nothing breadcrumb SetDisplayEmailR = i18nCrumb MsgUserDisplayEmail $ Just ProfileR breadcrumb ProfileDataR = i18nCrumb MsgMenuProfileData $ Just ProfileR diff --git a/src/Handler/LMS.hs b/src/Handler/LMS.hs index 795dd6a10..298b6959d 100644 --- a/src/Handler/LMS.hs +++ b/src/Handler/LMS.hs @@ -7,6 +7,49 @@ import Import import Handler.Utils +import qualified Data.Csv as Csv +import qualified Data.Conduit.List as C + +type LmsUserIdent = Text -- Unique random use-once identifier for each individual e-learning course; i.e. users may have several active LmsUserIdents at once! + +data LmsUserTableCsv = LmsUserTableCsv -- Export only + { csvLmsUserIdent :: LmsUserIdent + , csvLmsUserPin :: Text + , csvLmsUserReset, cvsLmsUserRemove, cvsLmsUserIntern :: Bool + } + +data LmsUserlistTableCsv = LmsUserlistTableCsv -- Import only, all users that are currently enlisted at the e-learning plattform + { csvLmsUserlistIdent :: LmsUserIdent + , csvLmsUserlistFailed :: Bool + } + +data LmsResultTableCsv = LmsResultTableCsv -- Import only, all users that succeeded are returned ONCE only; must then be deleted via LmsUserTableCsv Export! + { csvLmsResultIdent :: LmsUserIdent + , csvLmsResultSuccess :: UTCTime -- datestamp user succeeded (might be local time, unclear) + } + +csvLmsUserFilename :: IO Text +csvLmsUserFilename = makeLmsFilename "user" + +csvLmsUserlistFilename :: IO Text +csvLmsUserlistFilename = makeLmsFilename "userliste" + +csvLmsResultFilename :: IO Text +csvLmsResultFilename = makeLmsFilename "ergebnisse" + +--| create filenames as specified by LMS +makeLmsFilename :: Text -> IO Text +makeLmsFilename ftag = do + ymth <- get_ymth + return $ "fradrive_f_" <> ftag <> "_" <> ymth <> ".csv" + +--| returns current datetime in YYYYMMDDHH format +get_ymth :: IO Text +get_ymth = do + now <- getCurrentTime + return $ formatTime "%Y%m%d%h" + + getLmsR :: Handler Html getLmsR = do let dbtIdent = "lmsUsers" :: Text @@ -14,7 +57,7 @@ getLmsR = do dbtSQLQuery q = error "TODO" dbtRowKey = error "TODO" dbtProj = dbtProjSimple $ \(userIdent, userPin, doUserPinReset, doDeleteUser, isUserIntern) -> do - return ("abcdefgh", "12345678", 0, 0, 0) + return ("abcdefgh", "12345678", False, False, True) -- Warum keine Liste? dbtColonnade = colChoices dbtSorting = mempty dbtFilter = mempty @@ -41,8 +84,9 @@ getLmsR = do -- <*> (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 + , dbtCsvName + , dbtCsvSheetName + , dbtCsvNoExportData = Nothing -- ? , dbtCsvHeader = return . Vector.filter csvColumns' . userTableCsvHeader showSex tutorials sheets . fromMaybe def , dbtCsvExampleData = Nothing }