From 8024a9d9f09494937fe6c379474a5c29d54b88b4 Mon Sep 17 00:00:00 2001 From: SJost Date: Wed, 20 Feb 2019 18:53:21 +0100 Subject: [PATCH] Impressum and DSGV-Stub updated --- messages/uniworx/de.msg | 4 +- routes | 8 +- src/Foundation.hs | 42 +++- src/Handler/Home.hs | 20 +- .../Handler/SendNotification/SheetInactive.hs | 14 +- templates/data-protection-de.hamlet | 194 ++++++++++++++++++ templates/impressum.hamlet | 96 +++++++++ templates/mail/sheetInactive.hamlet | 2 +- templates/versionHistory.hamlet | 20 -- templates/widgets/footer.hamlet | 2 +- 10 files changed, 363 insertions(+), 39 deletions(-) create mode 100644 templates/data-protection-de.hamlet create mode 100644 templates/impressum.hamlet diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index 0e902650f..e747132b0 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -236,6 +236,7 @@ ProfileHeading: Benutzereinstellungen ProfileFor: Benutzereinstellungen für ProfileDataHeading: Gespeicherte Benutzerdaten ImpressumHeading: Impressum +DataProtHeading: Datenschutzerklärung SystemMessageHeading: Uni2work Statusmeldung SystemMessageListHeading: Uni2work Statusmeldungen @@ -418,7 +419,7 @@ MailSubmissionsUnassignedIntro n@Int courseName@Text termDesc@Text sheetName@She MailSubjectSheetSoonInactive csh@CourseShorthand sheetName@SheetName: #{sheetName} in #{csh} kann nur noch kurze Zeit abgegeben werden MailSheetSoonInactiveIntro courseName@Text termDesc@Text sheetName@SheetName: Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) endet in Kürze. MailSubjectSheetInactive csh@CourseShorthand sheetName@SheetName: Abgabfrist für #{sheetName} in #{csh} abgelaufen -MailSheetInactiveIntro courseName@Text termDesc@Text sheetName@SheetName: Die Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) beendet. +MailSheetInactiveIntro courseName@Text termDesc@Text sheetName@SheetName n@Int num@Int64: Die Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) beendet. Es gab #{noneOneMoreDE n "Keine Abgaben" "Nur eine Abgabe von " (display n <> " Abgaben von ")}#{noneOneMoreDE num "" "einem Teilnehmer" (display num <> " Teilnehmern")}. MailSubjectCorrectionsAssigned csh@CourseShorthand sheetName@SheetName: Ihnen wurden Korrekturen zu #{sheetName} in #{csh} zugeteilt MailCorrectionsAssignedIntro courseName@Text termDesc@Text sheetName@SheetName n@Int: #{display n} #{pluralDE n "Abgabe wurde" "Abgaben wurden"} Ihnen zur Korrektur für #{sheetName} im Kurs #{courseName} (#{termDesc}) zugeteilt. @@ -569,6 +570,7 @@ InvalidRoute: Konnte URL nicht interpretieren MenuHome: Aktuell MenuImpressum: Impressum +MenuDataProt: Datenschutz MenuVersion: Versionsgeschichte MenuHelp: Hilfe MenuProfile: Anpassen diff --git a/routes b/routes index 2720c7259..be9016096 100644 --- a/routes +++ b/routes @@ -40,9 +40,13 @@ /users/#CryptoUUIDUser/hijack AdminHijackUserR POST !adminANDno-escalation /admin/test AdminTestR GET POST /admin/errMsg AdminErrMsgR GET POST -/impressum ImpressumR GET !free -/version VersionR GET !free + + /info InfoR GET !free +/impressum ImpressumR GET !free +/info/data DataProtR GET !free +/version VersionR GET !free + /help HelpR GET POST !free /help/lecturer InfoLecturerR GET !lecturer diff --git a/src/Foundation.hs b/src/Foundation.hs index b328221be..9653564e0 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -157,6 +157,19 @@ pluralDE num singularForm pluralForm | num == 1 = singularForm | otherwise = pluralForm +noneOneMoreDE :: (Eq a, Num a) + => a -- ^ Count + -> Text -- ^ None + -> Text -- ^ Singular + -> Text -- ^ Plural + -> Text +noneOneMoreDE num noneText singularForm pluralForm + | num == 0 = noneText + | num == 1 = singularForm + | otherwise = pluralForm + + + -- Messages creates type UniWorXMessage and RenderMessage UniWorX instance mkMessage "UniWorX" "messages/uniworx" "de" mkMessageVariant "UniWorX" "Campus" "messages/campus" "de" @@ -1038,13 +1051,18 @@ applySystemMessages = liftHandlerT . runDB . runConduit $ selectSource [] [] .| -- Define breadcrumbs. instance YesodBreadcrumbs UniWorX where - breadcrumb (AuthR _) = return ("Login" , Just HomeR) - breadcrumb HomeR = return ("Uni2work" , Nothing) - breadcrumb UsersR = return ("Benutzer" , Just HomeR) - breadcrumb AdminTestR = return ("Test" , Just HomeR) - breadcrumb (AdminUserR _) = return ("Users" , Just UsersR) - breadcrumb VersionR = return ("Impressum" , Just HomeR) - breadcrumb HelpR = return ("Hilfe" , Just HomeR) + breadcrumb (AuthR _) = return ("Login" , Just HomeR) + breadcrumb HomeR = return ("Uni2work" , Nothing) + breadcrumb UsersR = return ("Benutzer" , Just HomeR) + breadcrumb AdminTestR = return ("Test" , Just HomeR) + breadcrumb (AdminUserR _) = return ("Users" , Just UsersR) + + breadcrumb InfoR = return ("Information" , Nothing) + breadcrumb ImpressumR = return ("Impressum" , Just InfoR) + breadcrumb DataProtR = return ("Datenschutz" , Just InfoR) + breadcrumb VersionR = return ("Impressum" , Just InfoR) + + breadcrumb HelpR = return ("Hilfe" , Just HomeR) breadcrumb InfoLecturerR = return ("Veranstalter" , Just HelpR) breadcrumb ProfileR = return ("User" , Just HomeR) @@ -1116,10 +1134,18 @@ defaultLinks = fmap catMaybes . mapM runMaybeT $ -- Define the menu items of the , menuItemModal = False , menuItemAccessCallback' = return True } + , return MenuItem + { menuItemType = Footer + , menuItemLabel = MsgMenuDataProt + , menuItemIcon = Just "shield" + , menuItemRoute = SomeRoute DataProtR + , menuItemModal = False + , menuItemAccessCallback' = return True + } , return MenuItem { menuItemType = Footer , menuItemLabel = MsgMenuImpressum - , menuItemIcon = Just "book" + , menuItemIcon = Just "file-signature" , menuItemRoute = SomeRoute ImpressumR , menuItemModal = False , menuItemAccessCallback' = return True diff --git a/src/Handler/Home.hs b/src/Handler/Home.hs index 24fd36b6e..90e343143 100644 --- a/src/Handler/Home.hs +++ b/src/Handler/Home.hs @@ -183,13 +183,27 @@ homeUser uid = do $(widgetFile "homeUser") -- (widgetFile "dsgvDisclaimer") - +-- | Versionsgeschichte getVersionR :: Handler TypedContent getVersionR = getInfoR -- TODO -getImpressumR :: Handler TypedContent -getImpressumR = getInfoR -- TODO +-- | Impressum +getImpressumR :: Handler Html +getImpressumR = -- do + siteLayoutMsg' MsgMenuImpressum $ do + setTitleI MsgImpressumHeading + $(widgetFile "impressum") + +-- | Hinweise zu Datenschutz und Aufbewahrungspflichten +getDataProtR :: Handler Html +getDataProtR = -- do + siteLayoutMsg' MsgMenuDataProt $ do + setTitleI MsgDataProtHeading + $(widgetFile "data-protection-de") + + +-- | Allgemeine Informationen getInfoR :: Handler TypedContent getInfoR = selectRep $ do provideRep . defaultLayout $ do diff --git a/src/Jobs/Handler/SendNotification/SheetInactive.hs b/src/Jobs/Handler/SendNotification/SheetInactive.hs index f318539f4..7112e5c39 100644 --- a/src/Jobs/Handler/SendNotification/SheetInactive.hs +++ b/src/Jobs/Handler/SendNotification/SheetInactive.hs @@ -12,6 +12,8 @@ import Handler.Utils.Mail import Text.Hamlet import qualified Data.CaseInsensitive as CI +import qualified Database.Esqueleto as E + dispatchNotificationSheetSoonInactive :: SheetId -> UserId -> Handler () dispatchNotificationSheetSoonInactive nSheet jRecipient = userMailT jRecipient $ do (Course{..}, Sheet{..}) <- liftHandlerT . runDB $ do @@ -33,10 +35,16 @@ dispatchNotificationSheetSoonInactive nSheet jRecipient = userMailT jRecipient $ dispatchNotificationSheetInactive :: SheetId -> UserId -> Handler () dispatchNotificationSheetInactive nSheet jRecipient = userMailT jRecipient $ do - (Course{..}, Sheet{..}) <- liftHandlerT . runDB $ do + (Course{..}, Sheet{..}, nrSubs, nrSubmitters) <- liftHandlerT . runDB $ do sheet <- getJust nSheet course <- belongsToJust sheetCourse sheet - return (course, sheet) + nrSubs <- count [SubmissionSheet ==. nSheet] + (E.Value nrSubmitters:_) <- E.select . E.from $ \(subUser `E.InnerJoin` submission) -> do + E.on $ subUser E.^. SubmissionUserSubmission E.==. submission E.^. SubmissionId + E.where_ $ submission E.^. SubmissionSheet E.==. E.val nSheet + -- E.distinctOn [E.don (subUser E.^. SubmissionUserUser)] -- Not necessary due to UniqueSubmisionUser + return (E.countRows :: E.SqlExpr (E.Value Int64)) + return (course, sheet, nrSubs, nrSubmitters) setSubjectI $ MsgMailSubjectSheetInactive courseShorthand sheetName MsgRenderer mr <- getMailMsgRenderer @@ -49,4 +57,4 @@ dispatchNotificationSheetInactive nSheet jRecipient = userMailT jRecipient $ do addAlternatives $ do let editNotifications = $(ihamletFile "templates/mail/editNotifications.hamlet") providePreferredAlternative ($(ihamletFile "templates/mail/sheetInactive.hamlet") :: HtmlUrlI18n UniWorXMessage (Route UniWorX)) - + diff --git a/templates/data-protection-de.hamlet b/templates/data-protection-de.hamlet new file mode 100644 index 000000000..04e775a99 --- /dev/null +++ b/templates/data-protection-de.hamlet @@ -0,0 +1,194 @@ +
+
+

Stand +

Version 0.91 vom 22.5.2018 +

+ Die LMU unterliegt als Körperschaft des öffentlichen Rechts dem + bayerischen Datenschutzgesetz, in einigen Bereichen dem Bundesdatenschutzgesetz, + der europäischen Datenschutzgrundverordnung und den entsprechenden Datenschutz-relevanten Artikeln einzelner Fachgesetze (Telemedien, Telekomunnikation, Arbeitsrecht, usw.). + Diese Datenschutzerklärung erfüllt gegenüber den Nutzern die Informationspflichten aus den obigen Regularien. + + +

+
+

Ansprechpartner +

Datenschutzbeauftragter der Ludwig-Maximilians-Universität München +