diff --git a/messages/de.msg b/messages/de.msg index 331efef79..4f13532d5 100644 --- a/messages/de.msg +++ b/messages/de.msg @@ -54,6 +54,7 @@ SubmissionArchive: Zip-Archiv der Abgabedatei(en) SubmissionFile: Datei zur Abgabe SubmissionAlreadyExistsFor user@Text: #{user} hat bereits eine Abgabe zu diesem Übungsblatt. +EMail: E-Mail EMailUnknown email@Text: E-Mail #{email} gehört zu keinem bekannten Benutzer. NotAParticipant user@Text tid@TermIdentifier csh@Text: #{user} ist nicht im Kurs #{termToText tid}-#{csh} angemeldet. @@ -63,3 +64,8 @@ TermsHeading: Semesterübersicht NumCourses n@Int64: #{tshow n} Kurse CloseAlert: Schliessen +Name: Name +MatrikelNr: Matrikelnummer +Theme: Oberflächen Design +Favoriten: Anzahl gespeicherter Favoriten + diff --git a/src/Foundation.hs b/src/Foundation.hs index b3a007a47..939d1e0b1 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -427,18 +427,16 @@ instance Yesod UniWorX where -- Lookup Favourites & Theme if possible -- TODO: cache this info in a cookie?! (favourites',show -> currentTheme) <- do - muid <- maybeAuthId + muid <- maybeAuthPair case muid of - Nothing -> return ([],Default) - (Just uid) -> runDB $ do - cs <- E.select . E.from $ \(course `E.InnerJoin` courseFavourite) -> do - E.on (course E.^. CourseId E.==. courseFavourite E.^. CourseFavouriteCourse) - E.where_ (courseFavourite E.^. CourseFavouriteUser E.==. E.val uid) - E.orderBy [ E.asc $ course E.^. CourseShorthand ] - return course - mt <- get uid - return (cs, fromMaybe Default (userTheme <$> mt)) - + Nothing -> return ([],Default) + (Just (uid,user)) -> do + favs <- runDB $ E.select . E.from $ \(course `E.InnerJoin` courseFavourite) -> do + E.on (course E.^. CourseId E.==. courseFavourite E.^. CourseFavouriteCourse) + E.where_ (courseFavourite E.^. CourseFavouriteUser E.==. E.val uid) + E.orderBy [ E.asc $ course E.^. CourseShorthand ] + return course + return (favs, userTheme user) favourites <- forM favourites' $ \(Entity _ c@Course{..}) -> let courseRoute = CourseR courseTerm courseShorthand CShowR diff --git a/src/Handler/Profile.hs b/src/Handler/Profile.hs index 5d962cbe9..38f2f15dc 100644 --- a/src/Handler/Profile.hs +++ b/src/Handler/Profile.hs @@ -1,5 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} @@ -7,12 +8,18 @@ module Handler.Profile where import Import +import Handler.Utils + +import Colonnade hiding (fromMaybe, singleton) +import Yesod.Colonnade + import qualified Database.Esqueleto as E import Database.Esqueleto ((^.)) getProfileR :: Handler Html getProfileR = do - (uid, user) <- requireAuthPair + (uid, User{..}) <- requireAuthPair + mr <- getMessageRender (admin_rights,lecturer_rights) <- runDB $ (,) <$> (E.select $ E.from $ \(adright `E.InnerJoin` school) -> do E.where_ $ adright ^. UserAdminUser E.==. E.val uid @@ -25,6 +32,18 @@ getProfileR = do E.on $ lecright ^. UserLecturerSchool E.==. school ^. SchoolId return (school ^. SchoolName) ) + let userData = + [ (MsgName , userDisplayName ) + , (MsgMatrikelNr , fromMaybe "" userMatrikelnummer) + , (MsgEMail , userEmail ) + , (MsgFavoriten , pack $ show userMaxFavourites) + , (MsgTheme , pack $ show userTheme ) + ] + userDisplay = mconcat + [ headless $ toWgt . mr . fst + , headless $ toWgt . snd + ] --TODO Continue here!!! + userTable = encodeWidgetTable tableDefault userDisplay userData defaultLayout $ do - setTitle . toHtml $ userIdent user <> "'s User page" + setTitle . toHtml $ userIdent <> "'s User page" $(widgetFile "profile") diff --git a/templates/profile.hamlet b/templates/profile.hamlet index 0d8a020dd..16a4f7160 100644 --- a/templates/profile.hamlet +++ b/templates/profile.hamlet @@ -7,17 +7,39 @@ This page is protected and access is allowed only for authenticated users.
- Your data is protected with us #{userIdent user}! + Your data is protected with us #{userIdent}! $if not $ null admin_rights
+
+ TODO: Alle Abgaben, Klausurnoten finden und verlinken
+
+
+ TODO: Knopf zum Löschen der Daten erstellen
+
Hinweise:
+
+