refactor(messages): msgmenu only for navLabel, gender-neutral language navigation

This commit is contained in:
Winnie Ros 2021-03-16 11:43:00 +01:00
parent c796bd5934
commit 8d9d3c613f
40 changed files with 182 additions and 112 deletions

View File

@ -39,13 +39,47 @@ BtnSystemMessageUnhide: Nicht mehr verstecken
BtnCommunicationSend: Senden
BtnCommunicationTest: Test-Nachricht verschicken
EmailTable: Email
StudyTermTable: Studiengang
StudyFeatureAgeTable: Fachsemester
StudyFeatureDegreeTable: Abschluss
StudyFeatureTypeTable:
StudyFeatureValidTable: Aktiv
StudyFeatureUpdateTable: Abgeglichen
TableEmail: Email
TableStudyTerm: Studiengang
TableStudyFeatureAge: Fachsemester
TableStudyFeatureDegree: Abschluss
TableStudyFeatureType:
TableStudyFeatureValid: Aktiv
TableStudyFeatureUpdate: Abgeglichen
TableHeadingFilter: Filter
HeadingLegal: Rechtliche Informationen
SubmissionNew: Abgabe anlegen
ParticipantsList: Kursteilnehmerlisten
ParticipantsIntersect: Überschneidung von Kursteilnehmer:innen
HeadingProfileData: Persönliche Daten
HeadingSchoolList: Institute
HeadingAdminCrontab: Crontab
HeadingAdminTokens: Tokens ausstellen
HeadingAllocationAccept: Platzvergabe akzeptieren
HeadingAllocationCompute: Platzvergabe berechnen
HeadingAllocationInfo: Hinweise zum Ablauf einer Zentralanmeldung
AllocationPriorities: Zentrale Dringlichkeiten
AllocationUsers: Bewerber:innen
HeadingCourseMembers: Kursteilnehmer:innen
HeadingCourseExamOffice: Prüfungsbeauftragte
HeadingExamList: Prüfungen
HeadingExamOfficeFields: Fächer
HeadingExamOfficeUsers: Benutzer:innen
HeadingExternalExamList: Externe Prüfungen
HeadingExternalExamNew: Neue externe Prüfung
SheetPersonalisedFilesDownload: Personalisierte Dateien herunterladen
HeadingCorrectionsAssign: Zuteilung der Korrekturen
HeadingUserAdd: Benutzer:in anlegen
CorrectorsChange: Korrektoren ändern
MaterialList: Material
SheetListCourse: Übungsblätter
HeadingDataProt: Datenschutzerklärung
HeadingTermsUse: Nutzungsbedingungen
HeadingCopyright: Urheberrecht
HeadingImprint: Impressum
CourseApplications: Bewerbungen
CourseNew: Neuen Kurs anlegen
FormFieldWorkflowDatasetTip: Mindestens ein gekennzeichnetes Feld pro Datensatz muss ausgefüllt werden
@ -152,7 +186,6 @@ CourseEditDupShort tid@TermId ssh@SchoolId csh@CourseShorthand: Kurs #{tid}-#{ss
FFSheetName: Name
TermCourseListHeading tid@TermId: Kursübersicht #{tid}
TermSchoolCourseListHeading tid@TermId school@SchoolName: Kursübersicht #{tid} für #{school}
CourseListTitle: Alle Kurse
TermCourseListTitle tid@TermId: Kurse #{tid}
TermSchoolCourseListTitle tid@TermId school@SchoolName: Kurse #{tid} für #{school}
CourseNewHeading: Neuen Kurs anlegen
@ -1935,7 +1968,7 @@ CourseApplicationsTableCsvExceptionNoMatchingUser: Bewerber konnte nicht eindeut
CourseApplicationsTableCsvExceptionNoMatchingAllocation: Zentralanmeldung konnte nicht eindeutig identifiziert werden
CourseApplicationsTableCsvExceptionNoMatchingStudyFeatures: Das angegebene Studienfach konnte keinem Studienfach des Kursteilnehmers zugeordnet werden
TableHeadingFilter: Filter
TableHeadingCsvImport: CSV-Import
TableHeadingCsvExport: CSV-Export

View File

@ -39,13 +39,47 @@ BtnSystemMessageUnhide: Unhide
BtnCommunicationSend: Send
BtnCommunicationTest: Send test message
EmailTable: Email
StudyFeatureTypeTable:
StudyFeatureValidTable: Valid
StudyFeatureUpdateTable: Updated
StudyFeatureAgeTable: Semester
StudyFeatureDegreeTable: Degree
StudyTermTable: Field of study
TableEmail: Email
TableStudyFeatureType:
TableStudyFeatureValid: Valid
TableStudyFeatureUpdate: Updated
TableStudyFeatureAge: Semester
TableStudyFeatureDegree: Degree
TableStudyTerm: Field of study
TableHeadingFilter: Filter
HeadingLegal: Legal
SubmissionNew: Create submission
ParticipantsList: Lists of course participants
ParticipantsIntersect: Common course participants
HeadingProfileData: Personal information
HeadingSchoolList: Departments
HeadingAdminCrontab: Crontab
HeadingAdminTokens: Issue tokens
HeadingAllocationAccept: Accept allocation
HeadingAllocationCompute: Compute allocation
HeadingAllocationInfo: Information regarding central allocations
AllocationPriorities: Central priorities
AllocationUsers: Applicants
HeadingCourseMembers: Participants
HeadingCourseExamOffice: Exam offices
HeadingExamList: Exams
HeadingExamOfficeFields: Fields of study
HeadingExamOfficeUsers: Users
HeadingExternalExamList: External exams
HeadingExternalExamNew: New external exam
SheetPersonalisedFilesDownload: Download personalised sheet files
HeadingCorrectionsAssign: Assign corrections
HeadingUserAdd: Add user
CorrectorsChange: Adjust correctors
MaterialList: Material
SheetListCourse: Exercise sheets
HeadingDataProt: Data protection
HeadingTermsUse: Terms of use
HeadingCopyright: Copyright
HeadingImprint: Imprint
CourseApplications: Applications
CourseNew: Create new course
FormFieldWorkflowDatasetTip: At least one of the marked fields must be filled
@ -152,7 +186,7 @@ CourseEditDupShort tid ssh csh: Could not edit course #{tid}-#{ssh}-#{csh}. Anot
FFSheetName: Name
TermCourseListHeading tid: Courses #{tid}
TermSchoolCourseListHeading tid school: Courses #{tid}, #{school}
CourseListTitle: All courses
TermCourseListTitle tid: Courses #{tid}
TermSchoolCourseListTitle tid school: Courses #{tid}, #{school}
CourseNewHeading: Create new course
@ -1928,7 +1962,7 @@ CourseApplicationsTableCsvExceptionNoMatchingUser: Applicant could not be identi
CourseApplicationsTableCsvExceptionNoMatchingAllocation: Central allocation could not be identified uniquely
CourseApplicationsTableCsvExceptionNoMatchingStudyFeatures: The specified field did not match with any of the participant's fields of study
TableHeadingFilter: Filter
TableHeadingCsvImport: CSV import
TableHeadingCsvExport: CSV export

View File

@ -0,0 +1 @@
CourseListTitle: Alle Kurse

View File

@ -0,0 +1 @@
CourseListTitle: All courses

View File

@ -1,13 +1,13 @@
MenuAdminHeading: Administration
MenuAdminFeaturesHeading: Studiengänge
MenuInfoLecturerTitle: Hinweise für Veranstalter
MenuInfoLecturerTitle: Hinweise für Veranstalter:innen
MenuInfoLecturerCourses: Veranstaltungen
MenuInfoLecturerExercises: Übungsbetrieb
MenuInfoLecturerTutorials: Tutorien
MenuInfoLecturerExams: Prüfungen
MenuInfoLecturerAllocations: Zentralanmeldungen
MenuCsvOptions: CSV-Optionen
MenuCorrectorAssignTitle: Korrektor zuweisen
MenuCorrectorAssignTitle: Korrektor:in zuweisen
MenuOpenCourses: Kurse mit offener Registrierung
MenuOpenAllocations: Aktive Zentralanmeldungen
MenuNews: Aktuell
@ -26,15 +26,15 @@ MenuLogin: Login
MenuLogout: Logout
MenuAllocationList: Zentralanmeldungen
MenuCourseList: Kurse
MenuCourseMembers: Kursteilnehmer
MenuCourseAddMembers: Kursteilnehmer hinzufügen
MenuCourseMembers: Kursteilnehmer:innen
MenuCourseAddMembers: KursteilnehmerInnen hinzufügen
MenuCourseCommunication: Kursmitteilung (E-Mail)
MenuCourseApplications: Bewerbungen
MenuCourseExamOffice: Prüfungsbeauftragte
MenuTermShow: Semester
MenuSubmissionDelete: Abgabe löschen
MenuUsers: Benutzer
MenuUserAdd: Benutzer anlegen
MenuUsers: Benutzer:in
MenuUserAdd: Benutzer:in anlegen
MenuUserNotifications: Benachrichtigungs-Einstellungen
MenuUserPassword: Passwort
MenuAdminTest: Admin-Demo
@ -59,14 +59,13 @@ MenuTutorialList: Tutorien
MenuTutorialNew: Neues Tutorium anlegen
MenuSheetNew: Neues Übungsblatt anlegen
MenuSheetCurrent: Aktuelles Übungsblatt
MenuSheetOldUnassigned: Abgaben ohne Korrektor
MenuSheetOldUnassigned: Abgaben ohne Korrektor:in
MenuCourseEdit: Kurs editieren
MenuCourseClone: Als neuen Kurs klonen
MenuCourseDelete: Kurs löschen
MenuSubmissionNew: Abgabe anlegen
MenuSubmissionOwn: Abgabe
MenuCorrectors: Korrektoren
MenuCorrectorsChange: Korrektoren ändern
MenuCorrectors: Korrektor:innen
MenuSheetEdit: Übungsblatt editieren
MenuSheetDelete: Übungsblatt löschen
MenuSheetClone: Als neues Übungsblatt klonen
@ -79,35 +78,35 @@ MenuCorrectionsAssignSheet name@Text: Zuteilung der Korrekturen von #{name}
MenuAuthPreds: Authorisierungseinstellungen
MenuTutorialDelete: Tutorium löschen
MenuTutorialEdit: Tutorium editieren
MenuTutorialComm: Mitteilung an Teilnehmer
MenuTutorialComm: Mitteilung an Teilnehmer:innen
MenuExamList: Prüfungen
MenuExamNew: Neue Prüfung anlegen
MenuExamEdit: Prüfung bearbeiten
MenuExamUsers: Teilnehmer
MenuExamUsers: Teilnehmer:innen
MenuExamGrades: Prüfungsleistungen
MenuExamAddMembers: Prüfungsteilnehmer hinzufügen
MenuExamCorrect: Prüfungsergebnisse eintragen
MenuExamOfficeExams: Prüfungen
MenuExamOfficeFields: Fächer
MenuExamOfficeUsers: Benutzer
MenuExamOfficeUsers: Benutzer:innen
MenuLecturerInvite: Funktionäre hinzufügen
MenuAllocationInfo: Hinweise zum Ablauf einer Zentralanmeldung
MenuCourseApplicationsFiles: Dateien aller Bewerbungen
MenuSchoolList: Institute
MenuSchoolNew: Neues Institut anlegen
MenuExternalExamGrades: Prüfungsleistungen
MenuExternalExamUsers: Teilnehmer
MenuExternalExamUsers: Teilnehmer:innen
MenuExternalExamEdit: Bearbeiten
MenuExternalExamNew: Neue externe Prüfung
MenuExternalExamList: Externe Prüfungen
MenuExternalExamCorrect: Prüfungsleistungen eintragen
MenuParticipantsList: Kursteilnehmerlisten
MenuParticipantsIntersect: Überschneidung von Kursteilnehmern
MenuAllocationUsers: Bewerber
MenuParticipantsIntersect: Überschneidung von Kursteilnehmer:innen
MenuAllocationUsers: Bewerber:innen
MenuAllocationPriorities: Zentrale Dringlichkeiten
MenuAllocationCompute: Platzvergabe berechnen
MenuAllocationAccept: Platzvergabe akzeptieren
MenuAllocationAddUser: Bewerber hinzufügen
MenuAllocationAddUser: Bewerber:in hinzufügen
MenuFaq: FAQ
MenuSheetPersonalisedFiles: Personalisierte Dateien herunterladen
MenuCourseSheetPersonalisedFiles: Vorlage für personalisierte Übungsblatt-Dateien herunterladen

View File

@ -66,7 +66,7 @@ MenuCourseDelete: Delete course
MenuSubmissionNew: Create submission
MenuSubmissionOwn: Submission
MenuCorrectors: Correctors
MenuCorrectorsChange: Adjust correctors
MenuSheetEdit: Edit exercise sheet
MenuSheetDelete: Delete exercise sheet
MenuSheetClone: Clone exercise sheet
@ -106,7 +106,7 @@ MenuParticipantsIntersect: Common course participants
MenuAllocationUsers: Applicants
MenuAllocationPriorities: Central priorities
MenuAllocationCompute: Compute allocation
MenuAllocationAccept: Accept allocation
MenuAllocationAddUser: Add applicant
MenuFaq: FAQ
MenuSheetPersonalisedFiles: Download personalised sheet files

View File

@ -5,6 +5,7 @@ module Foundation.I18n
( appLanguages, appLanguagesOpts
, UniWorXMessage(..), UniWorXTestMessage(..), UniWorXSettingsMessage(..)
, UniWorXHelpMessage(..), UniWorXNavigationMessage(..), UniWorXWorkflowMessage(..)
, UniWorXCourseMessage(..)
, ShortTermIdentifier(..)
, MsgLanguage(..)
, ShortSex(..)
@ -138,6 +139,7 @@ mkMessageAddition ''UniWorX "Settings" "messages/uniworx/uniworx_new/settings" "
mkMessageAddition ''UniWorX "Help" "messages/uniworx/uniworx_new/help" "de-de-formal"
mkMessageAddition ''UniWorX "Navigation" "messages/uniworx/uniworx_new/navigation" "de-de-formal"
mkMessageAddition ''UniWorX "Workflow" "messages/uniworx/uniworx_new/workflows" "de-de-formal"
mkMessageAddition ''UniWorX "Course" "messages/uniworx/uniworx_new/courses" "de-de-formal"
mkMessageVariant ''UniWorX ''CampusMessage "messages/auth/campus" "de"
mkMessageVariant ''UniWorX ''DummyMessage "messages/auth/dummy" "de"
mkMessageVariant ''UniWorX ''PWHashMessage "messages/auth/pw-hash" "de"

View File

@ -46,8 +46,8 @@ getAdminCrontabR = do
encodeBearer =<< bearerToken (HashSet.singleton . Left $ toJSON UserGroupCrontab) Nothing (HashMap.singleton BearerTokenRouteEval $ HashSet.singleton AdminCrontabR) Nothing (Just Nothing) Nothing
siteLayoutMsg MsgMenuAdminCrontab $ do
setTitleI MsgMenuAdminCrontab
siteLayoutMsg MsgHeadingAdminCrontab $ do
setTitleI MsgHeadingAdminCrontab
[whamlet|
$newline never
$maybe t <- crontabBearer

View File

@ -88,8 +88,8 @@ postAdminTokensR = do
fmap Just . encodeBearer . set _bearerRestrictions btfRestrict =<< bearerToken btfAuthority' Nothing (maybe HashMap.empty (HashMap.singleton BearerTokenRouteEval) btfRoutes) btfAddAuth btfExpiresAt btfStartsAt
siteLayoutMsg MsgMenuAdminTokens $ do
setTitleI MsgMenuAdminTokens
siteLayoutMsg MsgHeadingAdminTokens $ do
setTitleI MsgHeadingAdminTokens
let bearerForm = wrapForm bearerView def
{ formMethod = POST

View File

@ -157,8 +157,8 @@ postAAcceptR tid ssh ash = do
addMessageI Success MsgAllocationAccepted
redirect $ AllocationR tid ssh ash AUsersR
siteLayoutMsg MsgMenuAllocationAccept $ do
setTitleI MsgMenuAllocationAccept
siteLayoutMsg MsgHeadingAllocationAccept $ do
setTitleI MsgHeadingAllocationAccept
wrapForm' BtnAllocationAccept acceptView def
{ formEncoding = acceptEnctype

View File

@ -142,8 +142,8 @@ postAComputeR tid ssh ash = do
return (aEnt, formRes)
siteLayoutMsg MsgMenuAllocationCompute $ do
setTitleI MsgMenuAllocationCompute
siteLayoutMsg MsgHeadingAllocationCompute $ do
setTitleI MsgHeadingAllocationCompute
wrapForm' BtnAllocationCompute computeFormView def
{ formEncoding = computeFormEnctype

View File

@ -8,6 +8,6 @@ import Handler.Utils
getInfoAllocationR :: Handler Html
getInfoAllocationR =
siteLayoutMsg MsgMenuAllocationInfo $ do
setTitleI MsgMenuAllocationInfo
siteLayoutMsg MsgHeadingAllocationInfo $ do
setTitleI MsgHeadingAllocationInfo
$(i18nWidgetFile "allocation-info")

View File

@ -83,7 +83,7 @@ postAPriosR tid ssh ash = do
addMessageI Error $ MsgAllocationPrioritiesMissing matrMissing
redirect $ AllocationR tid ssh ash AUsersR
siteLayoutMsg MsgMenuAllocationPriorities $ do
siteLayoutMsg MsgAllocationPriorities $ do
setTitleI $ MsgAllocationPrioritiesTitle tid ssh ash
let priosForm = wrapForm priosView def

View File

@ -198,7 +198,7 @@ postAShowR tid ssh ash = do
^{wdgt}
|]
let daysToRegistrationStart = assertM (>0) $ (`diffUTCTime` now) <$> allocationRegisterFrom
allocationInfoModal = modal [whamlet|_{MsgMenuAllocationInfo}|] $ Left $ SomeRoute InfoAllocationR
allocationInfoModal = modal [whamlet|_{MsgHeadingAllocationInfo}|] $ Left $ SomeRoute InfoAllocationR
numCourses = length courses
numAppliedCourses = lengthOf (folded . _2 . _Just) courses
$(widgetFile "allocation/show")

View File

@ -335,7 +335,7 @@ postAUsersR tid ssh ash = do
, formEncoding = acceptEnctype
}
siteLayoutMsg MsgMenuAllocationUsers $ do
siteLayoutMsg MsgAllocationUsers $ do
setTitleI $ MsgAllocationUsersTitle tid ssh ash
$(widgetFile "allocation/users")

View File

@ -684,7 +684,7 @@ postCUsersR tid ssh csh = do
sendResponse <=< serveZipArchive' archiveName $ sourcePersonalisedSheetFiles cid (Just shId) (Just selectedUsers) anonMode Set.empty
let headingLong = [whamlet|_{MsgMenuCourseMembers} #{courseName} #{tid}|]
let headingLong = [whamlet|_{MsgHeadingCourseMembers} #{courseName} #{tid}|]
headingShort = prependCourseTitle tid ssh csh MsgCourseMembers
siteLayout headingLong $ do
setTitleI headingShort

View File

@ -61,8 +61,8 @@ postCExamOfficeR tid ssh csh = do
, formAttrs = [ asyncSubmitAttr | isModal ]
}
siteLayoutMsg MsgMenuCourseExamOffice $ do
setTitleI MsgMenuCourseExamOffice
siteLayoutMsg MsgHeadingCourseExamOffice $ do
setTitleI MsgHeadingCourseExamOffice
let explanation = $(i18nWidgetFile "course-exam-office-explanation")

View File

@ -222,6 +222,6 @@ getEOExamsR = do
dbTableWidget' examsDBTableValidator examsDBTable
siteLayoutMsg MsgMenuExamList $ do
setTitleI MsgMenuExamList
siteLayoutMsg MsgHeadingExamList $ do
setTitleI MsgHeadingExamList
examsTable

View File

@ -104,8 +104,8 @@ postEOFieldsR = do
, formEncoding = fieldsEnc
}
siteLayoutMsg MsgMenuExamOfficeFields $ do
setTitleI MsgMenuExamOfficeFields
siteLayoutMsg MsgHeadingExamOfficeFields $ do
setTitleI MsgHeadingExamOfficeFields
[whamlet|
$newline never

View File

@ -174,8 +174,8 @@ postEOUsersR = do
, formEncoding = usersEnc
}
siteLayoutMsg MsgMenuExamOfficeUsers $ do
setTitleI MsgMenuExamOfficeUsers
siteLayoutMsg MsgHeadingExamOfficeUsers $ do
setTitleI MsgHeadingExamOfficeUsers
[whamlet|
$newline never

View File

@ -77,7 +77,7 @@ getEExamListR = do
examTable <- runDB $ dbTableWidget' examDBTableValidator examDBTable
let heading = MsgMenuExternalExamList
let heading = MsgHeadingExternalExamList
siteLayoutMsg heading $ do
setTitleI heading

View File

@ -62,7 +62,7 @@ postEExamNewR = do
addMessageI Success $ MsgExternalExamCreated eefCourseName eefExamName
redirect $ EExamR eefTerm eefSchool eefCourseName eefExamName EEShowR
let heading = MsgMenuExternalExamNew
let heading = MsgHeadingExternalExamNew
siteLayoutMsg heading $ do
setTitleI heading

View File

@ -27,7 +27,7 @@ getVersionR = selectRep $ do
-- | Datenschutzerklaerung und Aufbewahrungspflichten, Nutzungsbedingungen, Urheberrecht, Impressum
getLegalR :: Handler Html
getLegalR =
siteLayoutMsg MsgMenuLegal $ do
siteLayoutMsg MsgHeadingLegal $ do
setTitleI MsgLegalHeading
let dataProtection = $(i18nWidgetFile "data-protection")
termsUse = $(i18nWidgetFile "terms-of-use")

View File

@ -151,7 +151,7 @@ newsUpcomingSheets uid = do
Nothing -> cell $ do
let submitRoute = CSheetR tid ssh csh shn SubmissionNewR
whenM (hasWriteAccessTo submitRoute) $
modal [whamlet|_{MsgMenuSubmissionNew}|] . Left $ SomeRoute submitRoute
modal [whamlet|_{MsgSubmissionNew}|] . Left $ SomeRoute submitRoute
(Just sid) -> anchorCellM (CSubmissionR tid ssh csh shn <$> encrypt sid <*> pure SubShowR)
(hasTickmark True)
]

View File

@ -56,8 +56,8 @@ getParticipantsListR = do
let schoolTerms :: Set (SchoolId, TermId)
schoolTerms = setOf (folded . $(multifocusG 2) (_1 . _Value) (_2 . _Value)) schoolTerms'
siteLayoutMsg MsgMenuParticipantsList $ do
setTitleI MsgMenuParticipantsList
siteLayoutMsg MsgParticipantsList $ do
setTitleI MsgParticipantsList
let schools :: Set SchoolId
schools = Set.map (view _1) schoolTerms
@ -130,6 +130,6 @@ postParticipantsIntersectR = do
lIxed = zip [0..]
siteLayoutMsg MsgMenuParticipantsIntersect $ do
setTitleI MsgMenuParticipantsIntersect
siteLayoutMsg MsgParticipantsIntersect $ do
setTitleI MsgParticipantsIntersect
$(widgetFile "participants-intersect")

View File

@ -449,7 +449,7 @@ getProfileDataR = do
userEnt <- requireAuth
dataWidget <- runDB $ makeProfileData userEnt
defaultLayout $ do
setTitleI MsgMenuProfileData
setTitleI MsgHeadingProfileData
dataWidget
makeProfileData :: Entity User -> DB Widget

View File

@ -55,7 +55,7 @@ getSchoolListR = do
table <- runDB $ dbTableWidget' psValidator DBTable{..}
let title = MsgMenuSchoolList
let title = MsgHeadingSchoolList
siteLayoutMsg title $ do
setTitleI title
table

View File

@ -111,7 +111,7 @@ makeSheetForm cId msId template = identifyForm FIDsheet . validateForm validateS
= [whamlet|
$newline never
#{iconFileZip}
\ _{MsgMenuSheetPersonalisedFiles}
\ _{MsgSheetPersonalisedFilesDownload}
|]
listRoute <- for mbSheet $ \(sheetName -> shn) -> toTextUrl
( CourseR courseTerm courseSchool courseShorthand CUsersR

View File

@ -402,8 +402,8 @@ getPersonalFilesR cId mbsid = do
isModal <- hasCustomHeader HeaderIsModal
fmap toTypedContent . siteLayoutMsg MsgMenuSheetPersonalisedFiles $ do
setTitleI MsgMenuSheetPersonalisedFiles
fmap toTypedContent . siteLayoutMsg MsgSheetPersonalisedFiles $ do
setTitleI MsgSheetPersonalisedFiles
wrapForm psfWdgt def
{ formMethod = GET
, formAction = SomeRoute <$> cRoute

View File

@ -259,8 +259,8 @@ assignHandler tid ssh csh cid assignSids = do
showAvgsDays :: Maybe NominalDiffTime -> Integer -> Text
showAvgsDays Nothing _ = mempty
showAvgsDays (Just dt) n = formatDiffDays $ dt / fromIntegral n
let headingShort = MsgMenuCorrectionsAssign
headingLong = prependCourseTitle tid ssh csh MsgMenuCorrectionsAssign
let headingShort = MsgHeadingCorrectionsAssign
headingLong = prependCourseTitle tid ssh csh MsgHeadingCorrectionsAssign
unassignableSheets = filter (`Map.notMember` assignment) assignSheetNames
unless (null unassignableSheets) $ addMessageI Warning $ MsgSheetsUnassignable $ Text.intercalate ", " $ fmap CI.original unassignableSheets

View File

@ -110,8 +110,8 @@ postAdminUserAddR = do
Nothing ->
addMessageI Error MsgUserCollision
siteLayoutMsg MsgMenuUserAdd $ do
setTitleI MsgMenuUserAdd
siteLayoutMsg MsgHeadingUserAdd $ do
setTitleI MsgHeadingUserAdd
wrapForm userView def
{ formAction = Just $ SomeRoute AdminUserAddR
, formEncoding = userEnctype

View File

@ -89,7 +89,7 @@ studyFeaturesWidget featId = do
(StudyFeatures{studyFeaturesSemester}, (degree, terms)) <- liftHandler . runDB . ($ featId) . runKleisli $ Kleisli getJust >>> Kleisli return &&& Kleisli (getJust . studyFeaturesDegree) &&& Kleisli (getJust . studyFeaturesField)
[whamlet|
$newline never
_{StudyDegreeTerm degree terms}, _{MsgStudyFeatureAgeTable} #{studyFeaturesSemester}
_{StudyDegreeTerm degree terms}, _{MsgTableStudyFeatureAge} #{studyFeaturesSemester}
|]

View File

@ -590,7 +590,7 @@ fltrUserMatriclenrUI mPrev =
----------------
-- User E-Mail
colUserEmail :: (IsDBTable m c, HasUser a) => Colonnade Sortable a (DBCell m c)
colUserEmail = sortable (Just "user-email") (i18nCell MsgEmailTable) cellHasEMail
colUserEmail = sortable (Just "user-email") (i18nCell MsgTableEmail) cellHasEMail
sortUserEmail :: IsString d => (t -> E.SqlExpr (Entity User)) -> (d, SortColumn t r')
sortUserEmail queryUser = ( "user-email", SortColumn $ queryUser >>> (E.^. UserEmail))
@ -604,7 +604,7 @@ fltrUserEmail queryUser = ("user-email", FilterColumn . mkContainsFilter $ query
fltrUserEmailUI :: Maybe (Map FilterKey [Text]) -> AForm (YesodDB UniWorX) (Map FilterKey [Text])
fltrUserEmailUI mPrev =
prismAForm (singletonFilter "user-email") mPrev $ aopt textField (fslI MsgEmailTable)
prismAForm (singletonFilter "user-email") mPrev $ aopt textField (fslI MsgTableEmail)
--------------------
@ -614,7 +614,7 @@ fltrUserEmailUI mPrev =
colStudyDegree :: OpticColonnade StudyDegree
colStudyDegree resultDegree = Colonnade.singleton (fromSortable header) body
where
header = Sortable (Just "features-degree") (i18nCell MsgStudyFeatureDegreeTable)
header = Sortable (Just "features-degree") (i18nCell MsgTableStudyFeatureDegree)
body = views resultDegree $ \StudyDegree{..}
-> cell . maybe (toWidget $ toMarkup studyDegreeKey) toWidget $ studyDegreeShorthand <|> studyDegreeName
@ -648,13 +648,13 @@ fltrStudyDegree queryDegree = singletonMap "features-degree" . FilterColumn $ an
unSqlProject' = E.unSqlProject (Proxy @StudyDegree) (Proxy @studyDegree)
fltrStudyDegreeUI :: DBFilterUI
fltrStudyDegreeUI mPrev = prismAForm (singletonFilter "features-degree") mPrev $ aopt textField (fslI MsgStudyFeatureDegreeTable)
fltrStudyDegreeUI mPrev = prismAForm (singletonFilter "features-degree") mPrev $ aopt textField (fslI MsgTableStudyFeatureDegree)
colStudyTerms :: OpticColonnade StudyTerms
colStudyTerms resultTerms = Colonnade.singleton (fromSortable header) body
where
header = Sortable (Just "features-terms") (i18nCell MsgStudyTermTable)
header = Sortable (Just "features-terms") (i18nCell MsgTableStudyTerm)
body = views resultTerms $ \StudyTerms{..}
-> cell . maybe (toWidget $ toMarkup studyTermsKey) toWidget $ studyTermsShorthand <|> studyTermsName
@ -688,13 +688,13 @@ fltrStudyTerms queryTerms = singletonMap "features-terms" . FilterColumn $ anyFi
unSqlProject' = E.unSqlProject (Proxy @StudyTerms) (Proxy @studyTerms)
fltrStudyTermsUI :: DBFilterUI
fltrStudyTermsUI mPrev = prismAForm (singletonFilter "features-terms") mPrev $ aopt textField (fslI MsgStudyTermTable)
fltrStudyTermsUI mPrev = prismAForm (singletonFilter "features-terms") mPrev $ aopt textField (fslI MsgTableStudyTerm)
colStudyFeaturesSemester :: OpticColonnade Int
colStudyFeaturesSemester resultSemester = Colonnade.singleton (fromSortable header) body
where
header = Sortable (Just "features-semester") (i18nCell MsgStudyFeatureAgeTable)
header = Sortable (Just "features-semester") (i18nCell MsgTableStudyFeatureAge)
body = views resultSemester $ cell . toWidget . toMarkup
sortStudyFeaturesSemester :: forall semester. PersistField semester => OpticSortColumn semester
@ -711,11 +711,11 @@ fltrStudyFeaturesSemester querySemester = singletonMap "features-semester" . Fil
unSqlProject' = E.unSqlProject (Proxy @StudyFeatures) (Proxy @studyFeatures)
fltrStudyFeaturesSemesterUI :: DBFilterUI
fltrStudyFeaturesSemesterUI mPrev = prismAForm (singletonFilter "features-semester" . maybePrism _PathPiece) mPrev $ aopt (intField :: Field _ Int) (fslI MsgStudyFeatureAgeTable)
fltrStudyFeaturesSemesterUI mPrev = prismAForm (singletonFilter "features-semester" . maybePrism _PathPiece) mPrev $ aopt (intField :: Field _ Int) (fslI MsgTableStudyFeatureAge)
colFeaturesSemester :: (IsDBTable m c, HasStudyFeatures x) => Getting (Leftmost x) a x -> Colonnade Sortable a (DBCell m c)
colFeaturesSemester feature = sortable (Just "features-semester") (i18nCell MsgStudyFeatureAgeTable) $ maybe mempty cellHasSemester . firstOf feature
colFeaturesSemester feature = sortable (Just "features-semester") (i18nCell MsgTableStudyFeatureAge) $ maybe mempty cellHasSemester . firstOf feature
sortFeaturesSemester :: IsString d => (t -> E.SqlExpr (Maybe (Entity StudyFeatures))) -> (d, SortColumn t r')
sortFeaturesSemester queryFeatures = ("features-semester", SortColumn $ queryFeatures >>> (E.?. StudyFeaturesSemester))
@ -729,11 +729,11 @@ fltrFeaturesSemester queryFeatures = ("features-semester", FilterColumn . mkExac
fltrFeaturesSemesterUI :: Maybe (Map FilterKey [Text]) -> AForm (YesodDB UniWorX) (Map FilterKey [Text])
fltrFeaturesSemesterUI mPrev =
prismAForm (singletonFilter "features-semester" . maybePrism _PathPiece) mPrev $ aopt (intField :: Field (YesodDB UniWorX) Int) (fslI MsgStudyFeatureAgeTable)
prismAForm (singletonFilter "features-semester" . maybePrism _PathPiece) mPrev $ aopt (intField :: Field (YesodDB UniWorX) Int) (fslI MsgTableStudyFeatureAge)
colField :: (IsDBTable m c, HasStudyTerms x) => Getting (Leftmost x) a x -> Colonnade Sortable a (DBCell m c)
colField terms = sortable (Just "terms") (i18nCell MsgStudyTermTable) $ maybe mempty cellHasField . firstOf terms
colField terms = sortable (Just "terms") (i18nCell MsgTableStudyTerm) $ maybe mempty cellHasField . firstOf terms
sortField :: IsString d => (t -> E.SqlExpr (Maybe (Entity StudyTerms))) -> (d, SortColumn t r')
sortField queryTerms = ("terms", SortColumn $ queryTerms >>> (E.?. StudyTermsName))
@ -753,7 +753,7 @@ fltrField queryFeatures = ( "terms"
fltrFieldUI :: Maybe (Map FilterKey [Text]) -> AForm (YesodDB UniWorX) (Map FilterKey [Text])
fltrFieldUI mPrev =
prismAForm (singletonFilter "terms") mPrev $ aopt textField (fslI MsgStudyTermTable)
prismAForm (singletonFilter "terms") mPrev $ aopt textField (fslI MsgTableStudyTerm)
colDegreeShort :: (IsDBTable m c, HasStudyDegree x) => Getting (Leftmost x) a x -> Colonnade Sortable a (DBCell m c)

View File

@ -133,7 +133,7 @@ $newline never
$maybe CorrectionInfo{ciSubmissions} <- Map.lookup shn sheetMap
<td .table__th>#{getLoadSum shn}
<td .table__th>#{ciSubmissions}
<td .table__td colspan=3>^{simpleLinkI (SomeMessage MsgMenuCorrectorsChange) (CSheetR tid ssh csh shn SEditR)}
<td .table__td colspan=3>^{simpleLinkI (SomeMessage MsgCorrectorsChange) (CSheetR tid ssh csh shn SEditR)}
$if not (null assignment)
<tr .table__row>

View File

@ -237,7 +237,7 @@ $# $if NTop (Just 0) < NTop (courseCapacity course)
$if mayViewAnySheet
_{MsgCourseSheetsFoundHere}: #
<a href=@{CourseR tid ssh csh SheetListR}>
_{MsgMenuSheetList}
_{MsgSheetListCourse}
$else
_{MsgCourseSheetsNoneVisible}
$if mayViewMaterials
@ -245,7 +245,7 @@ $# $if NTop (Just 0) < NTop (courseCapacity course)
$if mayViewAnyMaterial
_{MsgCourseMaterialsFoundHere}: #
<a href=@{CourseR tid ssh csh MaterialListR}>
_{MsgMenuMaterialList}
_{MsgMaterialList}
$else
_{MsgCourseMaterialsNoneVisible}
<p .explanation>

View File

@ -24,6 +24,6 @@ $if mayAccept
^{acceptWgt}
<section>
<h2>_{MsgMenuCourseApplications}
<h2>_{MsgCourseApplications}
^{notification NotificationBroad =<< messageWidget Warning studyFeaturesWarning}
^{table}

View File

@ -18,7 +18,7 @@ $newline never
$maybe sex <- guardOn showSex =<< userSex
<dt .deflist__dt>_{MsgSex}
<dd .deflist__dd>_{sex}
<dt .deflist__dt>_{MsgEmailTable}
<dt .deflist__dt>_{MsgTableEmail}
<dd .deflist__dd>#{mailtoHtml userEmail}
$maybe date <- mRegAt
<dt .deflist__dt>_{MsgRegisteredSince}
@ -38,12 +38,12 @@ $newline never
<div .scrolltable>
<table .table.table--striped.table--hover.table--condensed>
<tr .table__row>
<th .table__th>_{MsgStudyTermTable}
<th .table__th>_{MsgStudyFeatureDegreeTable}
<th .table__th>_{MsgStudyFeatureTypeTable}
<th .table__th>_{MsgStudyFeatureAgeTable}
<th .table__th>_{MsgStudyFeatureValidTable}
<th .table__th>_{MsgStudyFeatureUpdateTable}
<th .table__th>_{MsgTableStudyTerm}
<th .table__th>_{MsgTableStudyFeatureDegree}
<th .table__th>_{MsgTableStudyFeatureType}
<th .table__th>_{MsgTableStudyFeatureAge}
<th .table__th>_{MsgTableStudyFeatureValid}
<th .table__th>_{MsgTableStudyFeatureUpdate}
$forall ((Entity _ StudyFeatures{studyFeaturesType, studyFeaturesSemester, studyFeaturesValid, studyFeaturesFirstObserved, studyFeaturesLastObserved}), (Entity _ degree), (Entity _ field)) <- studies
<tr .table__row>
<td .table__td>_{field}

View File

@ -2,20 +2,20 @@ $newline never
<div .two-columns>
<section>
<h2 id="data-protection">
_{MsgMenuDataProt}
_{MsgHeadingDataProt}
^{dataProtection}
<section>
<h2 id="terms-of-use">
_{MsgMenuTermsUse}
_{MsgHeadingTermsUse}
^{termsUse}
<section>
<h2 id="copyright">
_{MsgMenuCopyright}
_{MsgHeadingCopyright}
^{copyright}
<section>
<h2 id="imprint">
_{MsgMenuImprint}
_{MsgHeadingImprint}
^{imprint}

View File

@ -30,7 +30,7 @@ $newline never
_{SomeMessage MsgMailAllocationStaffRegisterNewCourse}
<br>
<a href=@{CourseNewR}>
_{SomeMessage MsgMenuCourseNew}
_{SomeMessage MsgCourseNew}
$if doRegisterDeadlines
$if singleRegisterDeadline

View File

@ -19,7 +19,7 @@ $newline never
<dd .deflist__dd>
#{matnr}
<dt .deflist__dt>
_{MsgEmailTable}
_{MsgTableEmail}
<dd .deflist__dd>
#{mailtoHtml userEmail}
$if userEmail /= userDisplayEmail
@ -78,12 +78,12 @@ $newline never
<div .scrolltable>
<table .table.table--striped.table--hover.table--condensed>
<tr .table__row>
<th .table__th>_{MsgStudyTermTable}
<th .table__th>_{MsgStudyFeatureDegreeTable}
<th .table__th>_{MsgStudyFeatureTypeTable}
<th .table__th>_{MsgStudyFeatureAgeTable}
<th .table__th>_{MsgStudyFeatureValidTable}
<th .table__th>_{MsgStudyFeatureUpdateTable}
<th .table__th>_{MsgTableStudyTerm}
<th .table__th>_{MsgTableStudyFeatureDegree}
<th .table__th>_{MsgTableStudyFeatureType}
<th .table__th>_{MsgTableStudyFeatureAge}
<th .table__th>_{MsgTableStudyFeatureValid}
<th .table__th>_{MsgTableStudyFeatureUpdate}
$forall ((Entity _ StudyFeatures{studyFeaturesType, studyFeaturesSemester, studyFeaturesValid, studyFeaturesFirstObserved, studyFeaturesLastObserved}), (Entity _ degree), (Entity _ field)) <- studies
<tr.table__row>