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 @@ +
+ 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. + + +
+ Die Ludwig-Maximilians-Universität München ist eine Körperschaft des Öffentlichen Rechts. + Sie wird durch den Präsidenten Prof. Dr. Bernd Huber gesetzlich vertreten. + +
+ Der IT Betrieb und Organisation am Institut für Informatik wird nach dem Stand + der Technik und allgm. Empfehlungen für Sicherheitsfragen und IT Betrieb geführt. + Damit werden der Schutz persönlicher Daten, als auch der nachhaltige + Betrieb der Dienste im Rahmen der Möglichkeiten gewährleistet. + +
+ Im Falle einer Störung oder eines Sicherheitsvorfalles wird für die Dauer des Vorfalles + die Anonymisierung der IP-Adresse aufgehoben. + +
+ Die erhobenen Daten werden nur für statistische Zwecke(anonymisiert), zur Verbesserung des Angebots, + zur Analyse, Beseitigung und Abwehr von Störungen und bei Sicherheitsvorfällen verwendet. + Nur die für den Betrieb zuständigen IT Administratoren des Instituts für Informatik + haben Zugriff auf die Daten. + +
Erster Ansprechspartner ist der oben aufgeführte verantwortliche Fachbereich. + +
+ Nach sieben Tagen werden Einträge des Webserverprotokolls automatisch gelöscht. Daten die wegen einer + Störung oder eines Sicherheitsvorfalles verarbeitet werden, werden nach Ende des Vorfalls gelöscht. + +
+ Eine Zustimmung zur Datenverarbeitung ist auf Grund der Art der erhobenen Daten, des Verwendungszwecks, + der automatischen Löschung und der Erhebungsgrundlagen nicht nötig (DSGVO Art.6 Abs.1 e+f). + Ein Wiederrufsrecht zur Verarbeitung, Antragsrecht auf Löschung, Antragsrecht auf Berichtigung, + Antragsrecht auf Übertragung ist wegen nicht nötiger Zustimmung zur Verarbeitung bzw. Art und Nutzung der erhobenen Daten nicht gegeben. + +
+ Nutzer können sich generell bzgl. jeder Verarbeitung oder Weitergabe von + persönlichen Daten bei der Aufsichtbehörde beschweren. + Im Fall der LMU ist dies der oben genannte bayerische Datenschutzbeauftragte. + Ansonsten können auch alle anderen oben genannten Ansprechpartner + bzgl. Beschwerden und Nachfragen kontaktiert werden. + +
+ Der Nutzer ist bei Nutzung dieses Dienstes verpflichtet die Daten bereitzustellen und + verarbeiten zu lassen. Wir behalten uns das Recht vor, + Nutzer, die die Daten nicht bereitstellen, von der Nutzung des Dienstes auszuschließen. + + +$# +$#
+$# Im Falle einer Störung oder eines Sicherheitsvorfalles wird für die Dauer des Vorfalles +$# die Anonymisierung der IP-Adresse aufgehoben. +$# +$#
+$# Die erhobenen Daten werden nur für statistische Zwecke(anonymisiert), zur Verbesserung des Angebots, +$# zur Analyse, Beseitigung und Abwehr von Störungen und bei Sicherheitsvorfällen verwendet. +$# Nur die für den Betrieb zuständigen IT Administratoren des Instituts für Informatik +$# haben Zugriff auf die Daten. +$# +$#
Erster Ansprechspartner ist der oben aufgeführte verantwortliche Fachbereich. +$# +$#
+$# Nach sieben Tagen werden Einträge des Webserverprotokolls automatisch gelöscht. Daten die wegen einer +$# Störung oder eines Sicherheitsvorfalles verarbeitet werden, werden nach Ende des Vorfalls gelöscht. +$# +$#
+$# Eine Zustimmung zur Datenverarbeitung ist auf Grund der Art der erhobenen Daten, des Verwendungszwecks, +$# der automatischen Löschung und der Erhebungsgrundlagen nicht nötig (DSGVO Art.6 Abs.1 e+f). +$# Ein Wiederrufsrecht zur Verarbeitung, Antragsrecht auf Löschung, Antragsrecht auf Berichtigung, +$# Antragsrecht auf Übertragung ist wegen nicht nötiger Zustimmung zur Verarbeitung bzw. Art und Nutzung der erhobenen Daten nicht gegeben. +$# +$#
+$# Nutzer können sich generell bzgl. jeder Verarbeitung oder Weitergabe von +$# persönlichen Daten bei der Aufsichtbehörde beschweren. +$# Im Fall der LMU ist dies der oben genannte bayerische Datenschutzbeauftragte. +$# Ansonsten können auch alle anderen oben genannten Ansprechpartner +$# bzgl. Beschwerden und Nachfragen kontaktiert werden. +$# +$#
+$# Der Nutzer ist bei Nutzung dieses Dienstes verpflichtet die Daten bereitzustellen und +$# verarbeiten zu lassen. Wir behalten uns das Recht vor, +$# Nutzer, die die Daten nicht bereitstellen, von der Nutzung des Dienstes auszuschließen. +$# \ No newline at end of file diff --git a/templates/impressum.hamlet b/templates/impressum.hamlet new file mode 100644 index 000000000..661514223 --- /dev/null +++ b/templates/impressum.hamlet @@ -0,0 +1,96 @@ +$newline never +
+ Die Rechnerbetriebgruppe ist eine Organisation des Department "Institut für Informatik", + welches ein Teil der Ludwig-Maximilians-Universität München ist. + Die Rechnerbetriebsgruppe wird vertreten durch ihren Leiter und unterliegt + der Aufsicht des IT Beauftragen des Vorstands des Departments. + + +
+ Das Department "Institut für Informatik" ist Teil der Ludwig-Maximilians-Universität + München. Das Department wird durch die Direktorin bzw. den Direktor des Departments vertreten. + + +
+ Die Ludwig-Maximilians-Universität München ist eine Körperschaft des + Öffentlichen Rechts. Sie wird durch den Präsidenten der LMU gesetzlich vertreten. + + +
+ Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz: DE 811205325 + + +
+ Bayerisches Staatsministerium für
+ Bildung und Kultus, Wissenschaft und Kunst
+
+ 80327 München
diff --git a/templates/mail/sheetInactive.hamlet b/templates/mail/sheetInactive.hamlet
index 756736f42..0a5721845 100644
--- a/templates/mail/sheetInactive.hamlet
+++ b/templates/mail/sheetInactive.hamlet
@@ -11,7 +11,7 @@ $newline never
}
#{sheetName}
diff --git a/templates/versionHistory.hamlet b/templates/versionHistory.hamlet
index bee7bee3e..d2548ccab 100644
--- a/templates/versionHistory.hamlet
+++ b/templates/versionHistory.hamlet
@@ -22,26 +22,6 @@
#{changeLog}
-
#{gitInfo}
diff --git a/templates/widgets/footer.hamlet b/templates/widgets/footer.hamlet
index e133ec47b..97560ad94 100644
--- a/templates/widgets/footer.hamlet
+++ b/templates/widgets/footer.hamlet
@@ -8,5 +8,5 @@
$# menuItemModal :: Bool -- ^ Should this menu item open a modal instead of being a normal link
$# menuItemIcon :: Maybe Text -- ^ Should this menu item have an icon, if yes, then the name of the icon
- _{SomeMessage menuItemLabel}
+ _{SomeMessage menuItemLabel} #
$of _
- Impressum
-
-
-