diff --git a/db.hs b/db.hs index 3aa4fded0..adf008619 100755 --- a/db.hs +++ b/db.hs @@ -83,6 +83,7 @@ fillDb = do , userDateFormat = userDefaultDateFormat , userTimeFormat = userDefaultTimeFormat , userDownloadFiles = userDefaultDownloadFiles + , userMailLanguages = MailLanguages ["en"] , userNotificationSettings = def } fhamann <- insert User @@ -98,6 +99,7 @@ fillDb = do , userDateFormat = userDefaultDateFormat , userTimeFormat = userDefaultTimeFormat , userDownloadFiles = userDefaultDownloadFiles + , userMailLanguages = MailLanguages ["de"] , userNotificationSettings = def } jost <- insert User @@ -113,6 +115,7 @@ fillDb = do , userDateFormat = userDefaultDateFormat , userTimeFormat = userDefaultTimeFormat , userDownloadFiles = userDefaultDownloadFiles + , userMailLanguages = MailLanguages ["de"] , userNotificationSettings = def } void . insert $ User @@ -128,6 +131,7 @@ fillDb = do , userDateFormat = userDefaultDateFormat , userTimeFormat = userDefaultTimeFormat , userDownloadFiles = userDefaultDownloadFiles + , userMailLanguages = MailLanguages ["de"] , userNotificationSettings = def } void . insert $ User @@ -143,6 +147,7 @@ fillDb = do , userDateFormat = userDefaultDateFormat , userTimeFormat = userDefaultTimeFormat , userDownloadFiles = userDefaultDownloadFiles + , userMailLanguages = MailLanguages ["de"] , userNotificationSettings = def } void . repsert (TermKey summer2017) $ Term diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index 5cb71f00b..b2527d71f 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -314,9 +314,23 @@ MailTestFormLanguages: Spracheinstellungen MailTestSubject: Uni2Work Test-Email MailTestContent: Dies ist eine Test-Email versandt von Uni2Work. Von Ihrer Seite ist keine Handlung notwendig. +MailTestDateTime: Test der Datumsformattierung: German: Deutsch GermanGermany: Deutsch (Deutschland) MailSubjectSubmissionRated csh@CourseShorthand: Ihre #{csh}-Abgabe wurde bewertet -MailSubmissionRatedIntro courseName@Text termDesc@Text: Ihre Abgabe im Kurs #{courseName} (#{termDesc}) wurde bewertet. \ No newline at end of file +MailSubmissionRatedIntro courseName@Text termDesc@Text: Ihre Abgabe im Kurs #{courseName} (#{termDesc}) wurde bewertet. + +SheetTypeBonus: Bonus +SheetTypeNormal: Normal +SheetTypePass: Bestehen +SheetTypeNotGraded: Keine Wertung + +SheetTypeMaxPoints: Maximalpunktzahl +SheetTypePassingPoints: Notwendig zum Bestehen + +SheetGroupArbitrary: Arbiträre Gruppen +SheetGroupRegisteredGroups: Registrierte Gruppen +SheetGroupNoGroups: Keine Gruppenabgabe +SheetGroupMaxGroupsize: Maximale Gruppengröße \ No newline at end of file diff --git a/src/Data/Universe/Instances/Reverse/Hashable.hs b/src/Data/Universe/Instances/Reverse/Hashable.hs new file mode 100644 index 000000000..e7459f613 --- /dev/null +++ b/src/Data/Universe/Instances/Reverse/Hashable.hs @@ -0,0 +1,16 @@ +{-# LANGUAGE NoImplicitPrelude + , ScopedTypeVariables + #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Data.Universe.Instances.Reverse.Hashable + ( + ) where + +import ClassyPrelude + +import Data.Universe + + +instance (Hashable a, Hashable b, Finite a) => Hashable (a -> b) where + hashWithSalt s f = s `hashWithSalt` [ (k, f k) | k <- universeF ] diff --git a/src/Data/Universe/Instances/Reverse/JSON.hs b/src/Data/Universe/Instances/Reverse/JSON.hs new file mode 100644 index 000000000..60b7ba6ae --- /dev/null +++ b/src/Data/Universe/Instances/Reverse/JSON.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE NoImplicitPrelude + , ScopedTypeVariables + #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Data.Universe.Instances.Reverse.JSON + ( + ) where + +import ClassyPrelude + +import Data.Aeson +import Data.Aeson.Types (Parser) + +import qualified Data.HashSet as HashSet +import qualified Data.HashMap.Strict as HashMap +import Data.HashMap.Strict ((!)) + +import Data.Universe + + +instance (Eq a, Hashable a, Finite a, ToJSON b, ToJSONKey a) => ToJSON (a -> b) where + toJSON f = toJSON $ HashMap.fromList [(k, f k) | k <- universeF] + +instance (Eq a, Hashable a, Finite a, FromJSON b, FromJSONKey a) => FromJSON (a -> b) where + parseJSON val = do + vMap <- parseJSON val :: Parser (HashMap a b) + unless (HashSet.fromMap (HashMap.map (const ()) vMap) == HashSet.fromList universeF) $ + fail "Not all required keys found" + return $ (vMap !) diff --git a/src/Foundation.hs b/src/Foundation.hs index fe678c169..e5bf9302b 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -1325,7 +1325,7 @@ instance YesodMail UniWorX where mailSmtp act = do pool <- maybe (throwM MailNotAvailable) return =<< getsYesod appSmtpPool withResource pool act - mailT ls mail = defMailT ls $ do + mailT ctx mail = defMailT ctx $ do setMailObjectId setDateCurrent replaceMailHeader "Auto-Submitted" $ Just "auto-generated" diff --git a/src/Handler/Admin.hs b/src/Handler/Admin.hs index bb21c60d0..6de79e526 100644 --- a/src/Handler/Admin.hs +++ b/src/Handler/Admin.hs @@ -7,6 +7,7 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE LambdaCase #-} module Handler.Admin where @@ -44,11 +45,23 @@ instance Button UniWorX CreateButton where cssClass CreateInf = BCPrimary -- END Button needed here -emailTestForm :: AForm (HandlerT UniWorX IO) (Email, MailLanguages) +emailTestForm :: AForm (HandlerT UniWorX IO) (Email, MailContext) emailTestForm = (,) <$> areq emailField (fslI MsgMailTestFormEmail) Nothing - <*> (MailLanguages <$> areq (reorderField appLanguages) (fslI MsgMailTestFormLanguages) Nothing) + <*> ( MailContext + <$> (MailLanguages <$> areq (reorderField appLanguages) (fslI MsgMailTestFormLanguages) Nothing) + <*> (toMailDateTimeFormat + <$> areq (selectField $ dateTimeFormatOptions SelFormatDateTime) (fslI MsgDateTimeFormat) Nothing + <*> areq (selectField $ dateTimeFormatOptions SelFormatDate) (fslI MsgDateFormat) Nothing + <*> areq (selectField $ dateTimeFormatOptions SelFormatTime) (fslI MsgTimeFormat) Nothing + ) + ) <* submitButton + where + toMailDateTimeFormat dt d t = \case + SelFormatDateTime -> dt + SelFormatDate -> d + SelFormatTime -> t getAdminTestR, postAdminTestR :: Handler Html -- Demo Page. Referenzimplementierungen sollte hier gezeigt werden! @@ -71,6 +84,11 @@ postAdminTestR = do writeJobCtl $ JobCtlPerform jId FormMissing -> return () (FormFailure errs) -> forM_ errs $ addMessage Error . toHtml + + let emailWidget' = [whamlet| +