From edc23630a78a5e041343617be29a055ce0ae66c6 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Mon, 5 Jun 2023 16:59:33 +0000 Subject: [PATCH 01/13] chore(tutorial): template pre-selection fixed --- src/Handler/Course/ParticipantInvite.hs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/Handler/Course/ParticipantInvite.hs b/src/Handler/Course/ParticipantInvite.hs index 2c079fdbd..7b2eb8157 100644 --- a/src/Handler/Course/ParticipantInvite.hs +++ b/src/Handler/Course/ParticipantInvite.hs @@ -41,17 +41,18 @@ type TutorialType = CI Text defaultTutorialType :: TutorialType defaultTutorialType = "Schulung" -tutorialTypeSeparator :: Text +tutorialTypeSeparator :: TutorialType tutorialTypeSeparator = "___" tutorialTemplateNames :: Maybe TutorialType -> [TutorialType] tutorialTemplateNames Nothing = ["Vorlage", "Template"] -tutorialTemplateNames (Just name) = [prefixes <> suffixes | prefixes <- tutorialTemplateNames Nothing, suffixes <- [mempty, CI.mk tutorialTypeSeparator <> name]] +tutorialTemplateNames (Just name) = [prefixes <> suffixes | prefixes <- tutorialTemplateNames Nothing, suffixes <- [mempty, tutorialTypeSeparator <> name]] tutorialDefaultName :: Maybe TutorialType -> Day -> TutorialName --- tutorialDefaultName Nothing = tutorialDefaultName $ Just defaultTutorialType -tutorialDefaultName _ = CI.mk . tshow -- Don't use user date display setting, so that tutorial default names conform to all users - +tutorialDefaultName Nothing = CI.mk . tshow -- Don't use user date display setting, so that tutorial default names conform to all users +tutorialDefaultName (Just ttyp) = + let prefix = CI.mk $ snd $ Text.breakOnEnd (CI.original tutorialTypeSeparator) $ CI.original ttyp + in ((prefix <> "_") <>) . tutorialDefaultName Nothing data ButtonCourseRegisterMode = BtnCourseRegisterConfirm | BtnCourseRegisterAbort deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic) @@ -164,8 +165,13 @@ handleAddUserR tid ssh csh tdesc ttyp = do E.&&. E.not_ (E.any (E.hasPrefix_ tuTyp . E.val) (tutorialTemplateNames Nothing)) -- ((\pfx -> E.val pfx `E.isPrefixOf_` tutorial E.^. TutorialType) (tutorialTemplateNames Nothing)) E.orderBy [E.asc tuTyp] - return tuTyp - return (cid, E.unValue <$> tutTypes) + return tuTyp + let typeSet = Set.fromList [ maybe t CI.mk $ Text.stripPrefix temp_sep $ CI.original t + | temp <- tutorialTemplateNames Nothing + , let temp_sep = CI.original (temp <> tutorialTypeSeparator) + , E.Value t <- tutTypes + ] + return (cid, Set.toAscList typeSet) -- Set in order to remove duplicates and sort ascending at once currentRoute <- fromMaybe (error "postCAddUserR called from 404-handler") <$> getCurrentRoute @@ -186,7 +192,7 @@ handleAddUserR tid ssh csh tdesc ttyp = do redirect $ CourseR tid ssh csh CUsersR ((usersToAdd :: FormResult AddUserRequest, formWgt), formEncoding) <- runFormPost . renderWForm FormStandard $ do - let tutTypesMsg = [(SomeMessage tt,tt)| tt <- tutTypes] + let tutTypesMsg = [(SomeMessage tt,tt) | tt <- tutTypes] tutDefType = ttyp >>= (\ty -> if ty `elem` tutTypes then Just ty else Nothing) auReqUsers <- wreq (textField & cfAnySeparatedSet) (fslI MsgCourseParticipantsRegisterUsersField & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) mempty auReqTutorial <- optionalActionW @@ -320,7 +326,7 @@ upsertNewTutorial cid newTutorialName newTutorialType newFirstDay = runDB $ do newTime = normalizeOccurrences $ occurrencesAddBusinessDays term (oldFirstDay, moveDay) tutorialTime dayDiff = maybe 0 (diffDays moveDay) tutorialFirstDay mvTime = fmap $ addLocalDays dayDiff - newType0 = CI.mk . snd . Text.breakOnEnd tutorialTypeSeparator $ CI.original tutorialType + newType0 = CI.map (snd . Text.breakOnEnd (CI.original tutorialTypeSeparator)) tutorialType newType = if newType0 `elem` tutorialTemplateNames Nothing then fromMaybe defaultTutorialType newTutorialType else newType0 From e1093701ca671f078d8a33f376590c6a8a0a827f Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Wed, 7 Jun 2023 09:01:00 +0000 Subject: [PATCH 02/13] chore(tutorial): add mass register button --- .../uniworx/utils/buttons/de-de-formal.msg | 1 + messages/uniworx/utils/buttons/en-eu.msg | 1 + src/Handler/Course/Show.hs | 50 +++++++++++-------- test/Database/Fill.hs | 40 +++++++++++++++ 4 files changed, 71 insertions(+), 21 deletions(-) diff --git a/messages/uniworx/utils/buttons/de-de-formal.msg b/messages/uniworx/utils/buttons/de-de-formal.msg index adf9d75ab..63aa1c547 100644 --- a/messages/uniworx/utils/buttons/de-de-formal.msg +++ b/messages/uniworx/utils/buttons/de-de-formal.msg @@ -7,6 +7,7 @@ BtnAbort: Abbrechen BtnDelete: Löschen BtnRegister: Anmelden BtnDeregister: Abmelden +MassRegister: Andere anmelden BtnCourseRegister: Zum Kurs anmelden BtnCourseDeregister: Vom Kurs abmelden BtnExamRegister: Anmelden zur Prüfung diff --git a/messages/uniworx/utils/buttons/en-eu.msg b/messages/uniworx/utils/buttons/en-eu.msg index 5b3a7aadc..a83a7b3aa 100644 --- a/messages/uniworx/utils/buttons/en-eu.msg +++ b/messages/uniworx/utils/buttons/en-eu.msg @@ -7,6 +7,7 @@ BtnAbort: Abort BtnDelete: Delete BtnRegister: Register BtnDeregister: Deregister +MassRegister: Register others BtnCourseRegister: Enrol for course BtnCourseDeregister: Leave course BtnExamRegister: Enrol for exam diff --git a/src/Handler/Course/Show.hs b/src/Handler/Course/Show.hs index ee3807fc3..85be88849 100644 --- a/src/Handler/Course/Show.hs +++ b/src/Handler/Course/Show.hs @@ -29,7 +29,7 @@ import Handler.Exam.List (mkExamTable) getCShowR :: TermId -> SchoolId -> CourseShorthand -> Handler Html getCShowR tid ssh csh = do - mbAid <- maybeAuthId + mbAid <- maybeAuthId now <- liftIO getCurrentTime (cid,course,courseVisible,schoolName,participants,registration,lecturers,assistants,administrators,correctors,tutors,news,events,submissionGroup,_mayReRegister,(mayViewSheets, mayViewAnySheet), (mayViewMaterials, mayViewAnyMaterial),courseQualifications) <- runDB . maybeT notFound $ do [(E.Entity cid course, E.Value courseVisible, E.Value schoolName, E.Value participants, fmap entityVal -> registration)] @@ -145,7 +145,9 @@ getCShowR tid ssh csh = do } | otherwise -> return . modal $(widgetFile "course/login-to-register") . Left . SomeRoute $ AuthR LoginR - registrationOpen <- hasWriteAccessTo $ CourseR tid ssh csh CRegisterR + registrationOpen <- hasWriteAccessTo $ CourseR tid ssh csh CRegisterR + mayMassRegister <- hasWriteAccessTo $ CourseR tid ssh csh CAddUserR + isRegistered <- MsgRenderer mr <- getMsgRenderer @@ -164,9 +166,10 @@ getCShowR tid ssh csh = do dbtRowKey = (E.^. TutorialId) dbtProj = over (_dbrOutput . _2) E.unValue <$> dbtProjId dbtColonnade = dbColonnade $ mconcat - [ sortable (Just "type") (i18nCell MsgTableTutorialType) $ \(view $ resultTutorial . _entityVal -> Tutorial{..}) -> textCell $ CI.original tutorialType - , sortable (Just "name") (i18nCell MsgTableTutorialName) $ \(view $ resultTutorial . _entityVal -> Tutorial{..}) -> indicatorCell <> anchorCell (CTutorialR tid ssh csh tutorialName TUsersR) [whamlet|#{tutorialName}|] - , sortable (Just "tutors") (i18nCell MsgTableTutorialTutors) $ \(view $ resultTutorial . _entityKey -> tutid) -> sqlCell $ do + [ sortable (Just "type") (i18nCell MsgTableTutorialType) $ \(view $ resultTutorial . _entityVal -> Tutorial{..}) -> textCell $ CI.original tutorialType + , sortable (Just "first-day") (i18nCell MsgTableTutorialFirstDay) $ \(view $ resultTutorial . _entityVal -> Tutorial{..}) -> cellMaybe dayCell tutorialFirstDay + , sortable (Just "name") (i18nCell MsgTableTutorialName) $ \(view $ resultTutorial . _entityVal -> Tutorial{..}) -> indicatorCell <> anchorCell (CTutorialR tid ssh csh tutorialName TUsersR) [whamlet|#{tutorialName}|] + , sortable (Just "tutors") (i18nCell MsgTableTutorialTutors) $ \(view $ resultTutorial . _entityKey -> tutid) -> sqlCell $ do tutTutors <- fmap (map $(unValueN 3)) . E.select . E.from $ \(tutor `E.InnerJoin` user) -> do E.on $ tutor E.^. TutorUser E.==. user E.^. UserId E.where_ $ tutor E.^. TutorTutorial E.==. E.val tutid @@ -194,25 +197,30 @@ getCShowR tid ssh csh = do E.where_ $ participant E.^. TutorialParticipantTutorial E.==. E.val tutid in return $ E.val tutorialCapacity' E.-. numParticipants return . toWidget $ tshow freeCapacity - , sortable Nothing (mempty & cellAttrs <>~ pure ("uw-hide-columns--hider-label", mr MsgTableActionsHead)) $ \(view resultTutorial -> Entity tutId Tutorial{..}) -> sqlCell $ do - mayRegister <- (== Authorized) <$> evalAccessDB (CTutorialR tid ssh csh tutorialName TRegisterR) True - isRegistered <- case mbAid of - Nothing -> return False - Just uid -> existsBy $ UniqueTutorialParticipant tutId uid - if - | mayRegister -> do - (tutRegisterForm, tutRegisterEnctype) <- liftHandler . generateFormPost . buttonForm' $ bool [BtnRegister] [BtnDeregister] isRegistered - return $ wrapForm tutRegisterForm def - { formAction = Just . SomeRoute $ CTutorialR tid ssh csh tutorialName TRegisterR - , formEncoding = tutRegisterEnctype - , formSubmit = FormNoSubmit - } - | isRegistered -> return [whamlet|_{MsgTutorialRegistered}|] - | otherwise -> return mempty + , guardMonoid (not mayMassRegister || isJust registration) $ + sortable Nothing (mempty & cellAttrs <>~ pure ("uw-hide-columns--hider-label", mr MsgTableActionsHead)) $ \(view resultTutorial -> Entity tutId Tutorial{..}) -> sqlCell $ do + mayRegister <- (== Authorized) <$> evalAccessDB (CTutorialR tid ssh csh tutorialName TRegisterR) True + isRegistered <- case mbAid of + Nothing -> return False + Just uid -> existsBy $ UniqueTutorialParticipant tutId uid + if + | mayRegister -> do + (tutRegisterForm, tutRegisterEnctype) <- liftHandler . generateFormPost . buttonForm' $ bool [BtnRegister] [BtnDeregister] isRegistered + return $ wrapForm tutRegisterForm def + { formAction = Just . SomeRoute $ CTutorialR tid ssh csh tutorialName TRegisterR + , formEncoding = tutRegisterEnctype + , formSubmit = FormNoSubmit + } + | isRegistered -> return [whamlet|_{MsgTutorialRegistered}|] + | otherwise -> return mempty + , guardMonoid mayMassRegister $ + sortable Nothing (mempty & cellAttrs <>~ pure ("uw-hide-columns--hider-label", mr MsgTableActionsHead)) $ \(view $ resultTutorial . _entityVal -> Tutorial{..}) -> + cell $ linkButton mempty (msg2widget MsgMassRegister) [BCIsButton, BCPrimary] (SomeRoute $ CTutorialR tid ssh csh tutorialName TAddUserR) ] dbtSorting = Map.fromList [ ("type", SortColumn $ \tutorial -> tutorial E.^. TutorialType ) , ("name", SortColumn $ \tutorial -> tutorial E.^. TutorialName ) + , ("first-day", SortColumnNullsInv $ \tutorial -> tutorial E.^. TutorialFirstDay ) , ("room", SortColumn $ \tutorial -> tutorial E.^. TutorialRoom ) , ("register-from", SortColumn $ \tutorial -> tutorial E.^. TutorialRegisterFrom ) , ("register-to", SortColumn $ \tutorial -> tutorial E.^. TutorialRegisterTo ) @@ -235,7 +243,7 @@ getCShowR tid ssh csh = do dbtExtraReps = [] tutorialDBTableValidator = def - & defaultSorting [SortAscBy "type", SortDescBy "name"] + & defaultSorting [SortAscBy "type", SortDescBy "first-day", SortAscBy "name"] (Any hasTutorials, tutorialTable) <- runDB $ dbTable tutorialDBTableValidator tutorialDBTable (Any hasExams, examTable) <- runDB . mkExamTable $ Entity cid course diff --git a/test/Database/Fill.hs b/test/Database/Fill.hs index 67780ec37..55b5c32e3 100644 --- a/test/Database/Fill.hs +++ b/test/Database/Fill.hs @@ -1064,6 +1064,46 @@ fillDb = do , tutorialTutorControlled = True , tutorialFirstDay = Just firstDay } + insert_ Tutorial + { tutorialName = mkName "Sondertutoriumsvorlage" + , tutorialCourse = c + , tutorialType = "Vorlage_Sondertutorium" + , tutorialCapacity = capacity + , tutorialRoom = Just $ case weekDay of + Monday -> "A380" + Tuesday -> "B747" + Wednesday -> "MD11" + Thursday -> "A380" + _ -> "B777" + , tutorialRoomHidden = False + , tutorialTime = Occurrences + { occurrencesScheduled = Set.empty + , occurrencesExceptions = Set.fromList + [ ExceptOccur + { exceptDay = succ $ succ firstDay + , exceptStart = TimeOfDay 8 25 0 + , exceptEnd = TimeOfDay 16 25 0 + } + , ExceptOccur + { exceptDay = succ $ succ $ succ $ succ firstDay + , exceptStart = TimeOfDay 9 20 0 + , exceptEnd = TimeOfDay 16 20 0 + } + , ExceptOccur + { exceptDay = succ $ succ $ secondDay + , exceptStart = TimeOfDay 10 12 0 + , exceptEnd = TimeOfDay 12 13 0 + } + ] + } + , tutorialRegGroup = Just "sondertutorium" + , tutorialRegisterFrom = jtt TermDayStart 0 Nothing toMidnight + , tutorialRegisterTo = jtt TermDayLectureStart (-1) Nothing toMidnight + , tutorialDeregisterUntil = jtt TermDayLectureStart (-5) (Just Monday) toMidnight + , tutorialLastChanged = now + , tutorialTutorControlled = True + , tutorialFirstDay = Just $ succ $ succ $ firstDay + } void . insert' $ Exam { examCourse = c , examName = mkName "Theorieprüfung" From fa36cb4de1af158c4c72f8c4553b712c154276ad Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Wed, 7 Jun 2023 10:06:23 +0000 Subject: [PATCH 03/13] chore(tutorial): add name suggestions for mass registering --- src/Handler/Course/ParticipantInvite.hs | 38 ++++++++++++++++--------- src/Handler/Course/Show.hs | 3 +- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/Handler/Course/ParticipantInvite.hs b/src/Handler/Course/ParticipantInvite.hs index 7b2eb8157..e617e77dd 100644 --- a/src/Handler/Course/ParticipantInvite.hs +++ b/src/Handler/Course/ParticipantInvite.hs @@ -156,27 +156,36 @@ postTAddUserR tid ssh csh tutn = handleAddUserR tid ssh csh (Left tutn) Nothing handleAddUserR :: TermId -> SchoolId -> CourseShorthand -> Either TutorialName Day -> Maybe TutorialType -> Handler Html handleAddUserR tid ssh csh tdesc ttyp = do - (cid, tutTypes) <- runDB $ do + (cid, tutTypes, tutNameSuggestions) <- runDB $ do + let plainTemplates = tutorialTemplateNames Nothing cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh tutTypes <- E.select $ E.distinct $ do tutorial <- E.from $ E.table @Tutorial let tuTyp = tutorial E.^. TutorialType E.where_ $ tutorial E.^. TutorialCourse E.==. E.val cid - E.&&. E.not_ (E.any (E.hasPrefix_ tuTyp . E.val) (tutorialTemplateNames Nothing)) - -- ((\pfx -> E.val pfx `E.isPrefixOf_` tutorial E.^. TutorialType) (tutorialTemplateNames Nothing)) E.orderBy [E.asc tuTyp] return tuTyp let typeSet = Set.fromList [ maybe t CI.mk $ Text.stripPrefix temp_sep $ CI.original t - | temp <- tutorialTemplateNames Nothing + | temp <- plainTemplates , let temp_sep = CI.original (temp <> tutorialTypeSeparator) , E.Value t <- tutTypes ] - return (cid, Set.toAscList typeSet) -- Set in order to remove duplicates and sort ascending at once + tutNames <- E.select $ do + tutorial <- E.from $ E.table @Tutorial + let tuName = tutorial E.^. TutorialName + E.where_ $ tutorial E.^. TutorialCourse E.==. E.val cid + E.&&. E.isJust (tutorial E.^. TutorialFirstDay) + E.&&. E.not_ (E.any (E.hasPrefix_ (tutorial E.^. TutorialType) . E.val) plainTemplates) + E.orderBy [E.desc $ tutorial E.^. TutorialFirstDay, E.asc tuName] + E.limit 7 + return tuName + let tutNameSuggestions = return $ mkOptionList [Option tno tn tno | etn <- tutNames, let tn = E.unValue etn, let tno = CI.original tn] + return (cid, Set.toAscList typeSet, tutNameSuggestions) -- Set in order to remove duplicates and sort ascending at once currentRoute <- fromMaybe (error "postCAddUserR called from 404-handler") <$> getCurrentRoute confirmedActs :: Set CourseRegisterActionData <- fmap Set.fromList . throwExceptT . mapMM encodedSecretBoxOpen . lookupPostParams $ toPathPiece PostCourseUserAddConfirmAction - $logDebugS "CAddUserR confirmedActs" . tshow $ Set.map Aeson.encode confirmedActs + -- $logDebugS "CAddUserR confirmedActs" . tshow $ Set.map Aeson.encode confirmedActs unless (Set.null confirmedActs) $ do -- TODO: check that all acts are member of availableActs let users = Map.fromList . fmap (\act -> (crActIdent act, Just . view _1 $ crActUser act)) $ Set.toList confirmedActs @@ -197,13 +206,16 @@ handleAddUserR tid ssh csh tdesc ttyp = do auReqUsers <- wreq (textField & cfAnySeparatedSet) (fslI MsgCourseParticipantsRegisterUsersField & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) mempty auReqTutorial <- optionalActionW ( (,,) - <$> aopt (textField & cfCI) (fslI MsgCourseParticipantsRegisterTutorialField & setTooltip MsgCourseParticipantsRegisterTutorialFieldTip) - (Just $ maybeLeft tdesc) - <*> aopt (selectFieldList tutTypesMsg) (fslI MsgTableTutorialType) - (Just tutDefType) - <*> aopt dayField (fslI MsgTableTutorialFirstDay & setTooltip MsgCourseParticipantsRegisterTutorialFirstDayTip) - (Just $ maybeRight tdesc) - ) + <$> aopt (textField & cfStrip & cfCI & addDatalist tutNameSuggestions) + (fslI MsgCourseParticipantsRegisterTutorialField & setTooltip MsgCourseParticipantsRegisterTutorialFieldTip) + (Just $ maybeLeft tdesc) + <*> aopt (selectFieldList tutTypesMsg) + (fslI MsgTableTutorialType) + (Just tutDefType) + <*> aopt dayField + (fslI MsgTableTutorialFirstDay & setTooltip MsgCourseParticipantsRegisterTutorialFirstDayTip) + (Just $ maybeRight tdesc) + ) ( fslI MsgCourseParticipantsRegisterTutorialOption ) ( Just True ) return $ AddUserRequest <$> auReqUsers <*> auReqTutorial diff --git a/src/Handler/Course/Show.hs b/src/Handler/Course/Show.hs index 85be88849..78ddeecd5 100644 --- a/src/Handler/Course/Show.hs +++ b/src/Handler/Course/Show.hs @@ -146,8 +146,7 @@ getCShowR tid ssh csh = do | otherwise -> return . modal $(widgetFile "course/login-to-register") . Left . SomeRoute $ AuthR LoginR registrationOpen <- hasWriteAccessTo $ CourseR tid ssh csh CRegisterR - mayMassRegister <- hasWriteAccessTo $ CourseR tid ssh csh CAddUserR - isRegistered <- + mayMassRegister <- hasWriteAccessTo $ CourseR tid ssh csh CAddUserR MsgRenderer mr <- getMsgRenderer From db65816ef03172dae4cba6f4626c09c428527e38 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Wed, 7 Jun 2023 10:24:14 +0000 Subject: [PATCH 04/13] chore(tutorial): change tutorial template separator to single underscore --- src/Handler/Course/ParticipantInvite.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Handler/Course/ParticipantInvite.hs b/src/Handler/Course/ParticipantInvite.hs index e617e77dd..475c501eb 100644 --- a/src/Handler/Course/ParticipantInvite.hs +++ b/src/Handler/Course/ParticipantInvite.hs @@ -42,7 +42,7 @@ defaultTutorialType :: TutorialType defaultTutorialType = "Schulung" tutorialTypeSeparator :: TutorialType -tutorialTypeSeparator = "___" +tutorialTypeSeparator = "_" tutorialTemplateNames :: Maybe TutorialType -> [TutorialType] tutorialTemplateNames Nothing = ["Vorlage", "Template"] @@ -52,7 +52,7 @@ tutorialDefaultName :: Maybe TutorialType -> Day -> TutorialName tutorialDefaultName Nothing = CI.mk . tshow -- Don't use user date display setting, so that tutorial default names conform to all users tutorialDefaultName (Just ttyp) = let prefix = CI.mk $ snd $ Text.breakOnEnd (CI.original tutorialTypeSeparator) $ CI.original ttyp - in ((prefix <> "_") <>) . tutorialDefaultName Nothing + in ((prefix <> tutorialTypeSeparator) <>) . tutorialDefaultName Nothing data ButtonCourseRegisterMode = BtnCourseRegisterConfirm | BtnCourseRegisterAbort deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic) @@ -74,7 +74,7 @@ instance Button UniWorX ButtonCourseRegisterMode where data CourseRegisterAction = CourseRegisterActionAddParticipant | CourseRegisterActionAddTutorialMember --- | CourseRegisterActionUnknownPerson +-- | CourseRegisterActionUnknownPerson deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic) instance Universe CourseRegisterAction instance Finite CourseRegisterAction @@ -89,7 +89,7 @@ data CourseRegisterActionData , crActUser :: (UserId, User) , crActTutorial :: (Maybe TutorialName, Maybe TutorialType, Maybe Day) } --- | CourseRegisterActionUnknownPersonData -- pseudo-action; just for display +-- | CourseRegisterActionUnknownPersonData -- pseudo-action; just for display -- { crActUnknownPersonIdent :: Text -- } deriving (Eq, Ord, Show, Generic) From e41f08cffbbae2deb02185aa84928107a0730417 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Wed, 7 Jun 2023 10:51:44 +0000 Subject: [PATCH 05/13] chore(rename): semester to year --- .../courses/courses/de-de-formal.msg | 12 +++++------ .../categories/courses/courses/en-eu.msg | 14 ++++++------- .../exam/external_exam/de-de-formal.msg | 4 ++-- .../courses/exam/external_exam/en-eu.msg | 4 ++-- .../courses/submission/de-de-formal.msg | 2 +- .../categories/settings/de-de-formal.msg | 6 +++--- .../uniworx/categories/settings/en-eu.msg | 6 +++--- .../uniworx/categories/term/de-de-formal.msg | 20 +++++++++---------- messages/uniworx/categories/term/en-eu.msg | 18 ++++++++--------- .../navigation/breadcrumbs/de-de-formal.msg | 10 +++++----- .../utils/navigation/breadcrumbs/en-eu.msg | 10 +++++----- .../utils/navigation/menu/de-de-formal.msg | 8 ++++---- .../uniworx/utils/navigation/menu/en-eu.msg | 6 +++--- .../utils/site_layout/de-de-formal.msg | 8 ++++---- messages/uniworx/utils/site_layout/en-eu.msg | 8 ++++---- .../utils/table_column/de-de-formal.msg | 2 +- messages/uniworx/utils/table_column/en-eu.msg | 4 ++-- messages/uniworx/utils/utils/de-de-formal.msg | 2 +- .../i18n/info-lecturer/de-de-formal.hamlet | 8 ++++---- templates/i18n/info-lecturer/en-eu.hamlet | 8 ++++---- .../de-de-formal.hamlet | 2 +- 21 files changed, 81 insertions(+), 81 deletions(-) diff --git a/messages/uniworx/categories/courses/courses/de-de-formal.msg b/messages/uniworx/categories/courses/courses/de-de-formal.msg index e93ead7ba..e17a8ec51 100644 --- a/messages/uniworx/categories/courses/courses/de-de-formal.msg +++ b/messages/uniworx/categories/courses/courses/de-de-formal.msg @@ -4,7 +4,7 @@ FilterCourse: Kurs FilterCourseShort: Kürzel -FilterTerm !ident-ok: Semester +FilterTerm !ident-ok: Jahr FilterCourseSchoolShort: Institut FilterRegistered: Angemeldet FilterCourseSearch: Volltext-Suche @@ -31,10 +31,10 @@ CourseSchoolMultipleTip: Es stehen für Sie mehrere Institute zur Auswahl. Stell CourseName: Kurstitel CourseShorthand: Kürzel CourseShorthandUnique: Muss nur innerhalb Institut und Semester eindeutig sein. Wird verbatim in die Url der Kursseite übernommen. -CourseSemester !ident-ok: Semester +CourseSemester !ident-ok: Jahr CourseDescriptionPlaceholder: Bitte mindestens die Modulbeschreibung angeben CourseHomepageExternal: Externe Homepage -CourseSemesterMultipleTip: Es stehen für Sie aktuell mehrere Semester zur Auswahl. Stellen Sie bitte sicher, dass Sie das für den Kurs korrekte Semester wählen. +CourseSemesterMultipleTip: Es stehen für Sie aktuell mehrere Jahre zur Auswahl. Stellen Sie bitte sicher, dass Sie das für den Kurs korrekte Jahr wählen. CourseHomepageExternalPlaceholder: Optionale externe URL CourseVisibleFrom: Sichtbar ab CourseVisibleTo: Sichtbar bis @@ -61,15 +61,15 @@ CourseDeregistrationEndMustBeAfterStart: Ende des Abmeldezeitraums muss nach dem CourseUserMustBeLecturer: Aktuelle:r Benutzer:in muss als Kursverwalter:in eingetragen sein CourseShorthandTooLong: Lange Kurskürzel können zu Problemen bei der Darstellung und der Kommunikation mit den Studierenden führen. Bitte wählen Sie ein weniger langes Kürzel, falls möglich. CourseNotAlwaysVisibleDuringRegistration: Um Studierenden über den gesamten Anmeldezeitraum hinweg die Anmeldung zum Kurs zu ermöglichen, sollte der Kurs auch über den gesamten Anmeldezeitraum hinweg sichtbar sein (dies ist aktuell nicht gegeben). -NoSuchTerm tid@TermId: Semester #{tid} gibt es nicht. +NoSuchTerm tid@TermId: Jahr #{tid} gibt es nicht. NoSuchSchool ssh@SchoolId: Institut #{ssh} gibt es nicht. NoSuchCourseShorthand csh@CourseShorthand: Kein Kurs mit Kürzel #{csh} bekannt. NoSuchCourse: Keinen passenden Kurs gefunden. -CourseNewDupShort tid@TermId ssh@SchoolId csh@CourseShorthand: Kurs #{tid}-#{ssh}-#{csh} konnte nicht erstellt werden: Es gibt bereits einen anderen Kurs mit dem selben Kürzel oder Titel in diesem Semester und Institut. +CourseNewDupShort tid@TermId ssh@SchoolId csh@CourseShorthand: Kurs #{tid}-#{ssh}-#{csh} konnte nicht erstellt werden: Es gibt bereits einen anderen Kurs mit dem selben Kürzel oder Titel in diesem Jahr und Institut. CourseInvalidInput: Eingaben bitte korrigieren. CourseEditTitle: Kurs editieren/anlegen CourseEditOk tid@TermId ssh@SchoolId csh@CourseShorthand: Kurs #{tid}-#{ssh}-#{csh} wurde erfolgreich geändert. -CourseEditDupShort tid@TermId ssh@SchoolId csh@CourseShorthand: Kurs #{tid}-#{ssh}-#{csh} konnte nicht geändert werden: Es gibt bereits einen anderen Kurs mit dem selben Kürzel oder Titel in diesem Semester und Institut. +CourseEditDupShort tid@TermId ssh@SchoolId csh@CourseShorthand: Kurs #{tid}-#{ssh}-#{csh} konnte nicht geändert werden: Es gibt bereits einen anderen Kurs mit dem selben Kürzel oder Titel in diesem Jahr und Institut. CourseLecturer: Dozent:in MailSubjectParticipantInvitation tid@TermId ssh@SchoolId csh@CourseShorthand: [#{tid}-#{ssh}-#{csh}] Einladung zur Kursteilnahme CourseParticipantInviteHeading courseName@Text: Einladung zum Kursteilnahmer für #{courseName} diff --git a/messages/uniworx/categories/courses/courses/en-eu.msg b/messages/uniworx/categories/courses/courses/en-eu.msg index 087463a3c..ce488a8d1 100644 --- a/messages/uniworx/categories/courses/courses/en-eu.msg +++ b/messages/uniworx/categories/courses/courses/en-eu.msg @@ -4,7 +4,7 @@ FilterCourse: Course FilterCourseShort: Shorthand -FilterTerm: Semester +FilterTerm: Year FilterCourseSchoolShort: Department FilterRegistered: Enrolled FilterCourseSearch: Text search @@ -30,12 +30,12 @@ CourseSchool: Department CourseSchoolMultipleTip: You may select from among multiple departments. Please ensure that you select the appropriate department for your course. CourseName: Title CourseShorthand: Shorthand -CourseShorthandUnique: Needs to be unique within school and semester. Will be used verbatim within the url of the course page. -CourseSemester: Semester +CourseShorthandUnique: Needs to be unique within school and year. Will be used verbatim within the url of the course page. +CourseSemester: Year CourseDescriptionPlaceholder: Please include the module description CourseHomepageExternalPlaceholder: Optional external URL CourseHomepageExternal: External homepage -CourseSemesterMultipleTip: You are currently allowed to select from among multiple semesters. Please ensure that you select the appropriate semester for your course. +CourseSemesterMultipleTip: You are currently allowed to select from among multiple years. Please ensure that you select the appropriate year for your course. CourseVisibleFrom: Visible from CourseVisibleTo: Visible to CourseVisibleFromTip: The course will be visible to others from this date onward. When left empty the course will never be visible to other users. This does not affect lecturers, assistants, tutors, correctors, enrolled participants and applicants of/to this course. If the course participates in a central allocation, the course visibility will be forced during the application phase. @@ -61,15 +61,15 @@ CourseDeregistrationEndMustBeAfterStart: The end of the deregistration period mu CourseUserMustBeLecturer: The current user needs to be a course administrator CourseShorthandTooLong: Long course shorthands may lead to display issues and might complicate communication with students. Please choose a more concise shorthand if possible. CourseNotAlwaysVisibleDuringRegistration: To allow for students to register, the course should also be visible during the entire registration period (which is currently not the case). -NoSuchTerm tid: Semester #{tid} does not exist. +NoSuchTerm tid: Year #{tid} does not exist. NoSuchSchool ssh: Department #{ssh} does not exist. NoSuchCourseShorthand csh: There is no course with shorthand #{csh}. NoSuchCourse: No such course found. -CourseNewDupShort tid ssh csh: Could not create course #{tid}-#{ssh}-#{csh}. Another course with the same shorthand or title already exists for the given semester and school. +CourseNewDupShort tid ssh csh: Could not create course #{tid}-#{ssh}-#{csh}. Another course with the same shorthand or title already exists for the given year and school. CourseInvalidInput: Invalid input CourseEditTitle: Edit/Create course CourseEditOk tid ssh csh: Successfully edited course #{tid}-#{ssh}-#{csh} -CourseEditDupShort tid ssh csh: Could not edit course #{tid}-#{ssh}-#{csh}. Another course with the same shorthand or title already exists for the given semester and school. +CourseEditDupShort tid ssh csh: Could not edit course #{tid}-#{ssh}-#{csh}. Another course with the same shorthand or title already exists for the given year and school. CourseLecturer: Lecturer MailSubjectParticipantInvitation tid@TermId ssh@SchoolId csh@CourseShorthand: [#{tid}-#{ssh}-#{csh}] Invitaion to join the course CourseParticipantInviteHeading courseName: Invitation to enrol for #{courseName} diff --git a/messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg b/messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg index f53348ecb..cfb349891 100644 --- a/messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg +++ b/messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg @@ -18,10 +18,10 @@ ExternalExamCorrectErrorNoMatchingUsers: Dem Identifikator konnte kein Studieren ExternalExamEdited coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ erfolgreich bearbeitet. ExternalExamExists coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ existiert bereits. ExternalExamEdit coursen@CourseName examn@ExamName: Bearbeiten: #{coursen}, #{examn} -ExternalExamSemester !ident-ok: Semester +ExternalExamSemester !ident-ok: Jahr ExternalExamSchool: Institut ExternalExamCourseName: Veranstaltung -ExternalExamCourseNameTip: Muss nur innerhalb von Semester und Institut eindeutig sein. +ExternalExamCourseNameTip: Muss nur innerhalb von Jahr und Institut eindeutig sein. ExternalExamCourseNamePlaceholder: Analysis I, Programmierung und Modellierung, ... ExternalExamExamName: Prüfung ExternalExamExamNameTip: Muss innerhalb der Veranstaltung eindeutig sein. diff --git a/messages/uniworx/categories/courses/exam/external_exam/en-eu.msg b/messages/uniworx/categories/courses/exam/external_exam/en-eu.msg index a496ae8f6..c651cdf4d 100644 --- a/messages/uniworx/categories/courses/exam/external_exam/en-eu.msg +++ b/messages/uniworx/categories/courses/exam/external_exam/en-eu.msg @@ -18,10 +18,10 @@ ExternalExamCorrectErrorNoMatchingUsers: This identifier does not match any stud ExternalExamEdited coursen@CourseName examn@ExamName: Succesfully edited exam “#{examn}” for course “#{coursen}”. ExternalExamExists coursen@CourseName examn@ExamName: Exam “#{examn}” already exists for course “#{coursen}”. ExternalExamEdit coursen examn: Edit: #{coursen}, #{examn} -ExternalExamSemester: Semester +ExternalExamSemester: Year ExternalExamSchool: Department ExternalExamCourseName: Course -ExternalExamCourseNameTip: Needs only be unique among within semester and department. +ExternalExamCourseNameTip: Needs only be unique among within year and department. ExternalExamCourseNamePlaceholder: Analysis I, Programming and Modelling, ... ExternalExamExamName: Exam title ExternalExamExamNameTip: Needs only be unique within the course. diff --git a/messages/uniworx/categories/courses/submission/de-de-formal.msg b/messages/uniworx/categories/courses/submission/de-de-formal.msg index a981a7f75..dac52e695 100644 --- a/messages/uniworx/categories/courses/submission/de-de-formal.msg +++ b/messages/uniworx/categories/courses/submission/de-de-formal.msg @@ -237,7 +237,7 @@ SubmissionFilterAuthorshipStatementCurrent: Aktueller Wortlaut SubmissionNoUsers: Diese Abgabe hat keine assoziierten Benutzer! -CsvColumnCorrectionTerm: Semester des Kurses der Abgabe +CsvColumnCorrectionTerm: Jahr des Kurses der Abgabe CsvColumnCorrectionSchool: Institut des Kurses der Abgabe CsvColumnCorrectionCourse: Kürzel des Kurses der Abgabe CsvColumnCorrectionSheet: Name des Übungsblatts der Abgabe diff --git a/messages/uniworx/categories/settings/de-de-formal.msg b/messages/uniworx/categories/settings/de-de-formal.msg index 189f226e5..3bf18270c 100644 --- a/messages/uniworx/categories/settings/de-de-formal.msg +++ b/messages/uniworx/categories/settings/de-de-formal.msg @@ -19,7 +19,7 @@ FormCosmetics: Oberfläche Theme: Oberflächen Design Favourites: Anzahl gespeicherter Favoriten FavouritesTip: Betrifft nur automatisch angelegte Favoriten („Kürzlich besucht“) -FavouriteSemesters: Maximale Anzahl an Semestern in Seitenleiste +FavouriteSemesters: Maximale Anzahl an Jahren in Seitenleiste DateTimeFormat: Datums- und Uhrzeitformat DateFormat: Datumsformat TimeFormat: Uhrzeitformat @@ -102,8 +102,8 @@ FavouriteManual: Favoriten FavouriteCurrent: Aktueller Kurs FavouritesPlaceholder: Anzahl Favoriten FavouritesNotNatural: Anzahl der Favoriten muss eine natürliche Zahl sein! -FavouritesSemestersPlaceholder: Anzahl Semester -FavouritesSemestersNotNatural: Anzahl der Favoriten-Semester muss eine natürliche Zahl sein! +FavouritesSemestersPlaceholder: Anzahl Jahre +FavouritesSemestersNotNatural: Anzahl der Favoriten-Jahre muss eine natürliche Zahl sein! SettingsUpdate: Einstellungen erfolgreich gespeichert TokensResetSuccess: Authorisierungs-Tokens invalidiert ProfileTitle: Benutzereinstellungen diff --git a/messages/uniworx/categories/settings/en-eu.msg b/messages/uniworx/categories/settings/en-eu.msg index 6dbf5dd95..a29c63955 100644 --- a/messages/uniworx/categories/settings/en-eu.msg +++ b/messages/uniworx/categories/settings/en-eu.msg @@ -19,7 +19,7 @@ FormCosmetics: Interface Theme: Theme Favourites: Number of saved favourites FavouritesTip: Only relevant for automatically generated favourites (“visited recently”) -FavouriteSemesters: Maximum number of semesters in favourites bar +FavouriteSemesters: Maximum number of years in favourites bar DateTimeFormat: Date and time format DateFormat: Date format TimeFormat: Time format @@ -102,8 +102,8 @@ FavouriteManual: Favourites FavouriteCurrent: Current course FavouritesPlaceholder: Number of favourites FavouritesNotNatural: Number of favourites must be a natural number! -FavouritesSemestersPlaceholder: Number of semesters -FavouritesSemestersNotNatural: Maximum number of semesters in favourites bar must be a natural number! +FavouritesSemestersPlaceholder: Number of years +FavouritesSemestersNotNatural: Maximum number of years in favourites bar must be a natural number! SettingsUpdate: Successfully updated settings TokensResetSuccess: Successfully invalidated all authorisation tokens ProfileTitle: Settings diff --git a/messages/uniworx/categories/term/de-de-formal.msg b/messages/uniworx/categories/term/de-de-formal.msg index 80555c631..5a743b01d 100644 --- a/messages/uniworx/categories/term/de-de-formal.msg +++ b/messages/uniworx/categories/term/de-de-formal.msg @@ -2,20 +2,20 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later -TermStartMustMatchName: Jahreszahl im Namenskürzel stimmt nicht mit Semesterbeginn überein. -TermEndMustBeAfterStart: Semester darf nicht enden, bevor es beginnt. +TermStartMustMatchName: Jahreszahl im Namenskürzel stimmt nicht mit Beginn des gewählten Jahres überein. +TermEndMustBeAfterStart: Jahr darf nicht enden, bevor es beginnt. TermLectureEndMustBeAfterStart: Vorlesungszeit muss vor ihrem Ende anfgangen. -TermStartMustBeBeforeLectureStart: Semester muss vor der Vorlesungszeit beginnen. -TermEndMustBeAfterLectureEnd: Vorlesungszeit muss vor dem Semester enden. +TermStartMustBeBeforeLectureStart: Jahr muss vor der Vorlesungszeit beginnen. +TermEndMustBeAfterLectureEnd: Vorlesungszeit muss vor dem Jahr enden. TermShort: Kürzel TermCourseCount: Kurse TermStart: Anfang Kursperiode TermEnd: Ende Kursperiode LectureStart: Beginn Kurse -TermEdited tid@TermId: Semester #{tid} erfolgreich editiert. -TermNewTitle: Semester editieren/anlegen. +TermEdited tid@TermId: Jahr #{tid} erfolgreich editiert. +TermNewTitle: Jahr editieren/anlegen. InvalidInput: Ungültige Eingabe, bitte korrigieren. -Term !ident-ok: Semester +Term !ident-ok: Jahr TermPlaceholder: JJJJ TermStartDay: Erster Tag TermEndDay: Letzter Tag @@ -30,13 +30,13 @@ TermActive: Aktiv TermActiveTooltip: Zeitraum in dem Lehrende Kurse anlegen dürfen; kann auf angegebene Lehrende eingeschränkt werden TermActiveForPlaceholder: E-Mail (optional) NumCourses num@Int64: #{num} #{pluralDE num "Kurs" "Kurse"} -TermsHeading: Semesterübersicht -TermEditHeading: Semester editieren/anlegen +TermsHeading: Jahresübersicht +TermEditHeading: Jahr editieren/anlegen TermFormHolidaysAlreadyAdded: Alle neuen Feiertage sind bereits eingetragen TermFormHolidaysFrom: Von TermFormHolidaysTo: Bis -TermExists: Semester existiert bereits +TermExists: Jahr existiert bereits TermFormActiveFrom: Von TermFormActiveTo: Bis diff --git a/messages/uniworx/categories/term/en-eu.msg b/messages/uniworx/categories/term/en-eu.msg index 7880cc072..d7478ada7 100644 --- a/messages/uniworx/categories/term/en-eu.msg +++ b/messages/uniworx/categories/term/en-eu.msg @@ -2,20 +2,20 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later -TermStartMustMatchName: Shorthand number does not match semester start. -TermEndMustBeAfterStart: Semester end may not be before semester start. +TermStartMustMatchName: Shorthand number does not match start of year. +TermEndMustBeAfterStart: Year end may not be before start of year. TermLectureEndMustBeAfterStart: Lecture start may not be after lecture end. -TermStartMustBeBeforeLectureStart: Semester start must be before lecture start. -TermEndMustBeAfterLectureEnd: Lecture end must be before semester end. +TermStartMustBeBeforeLectureStart: Year start must be before lecture start. +TermEndMustBeAfterLectureEnd: Lecture end must be before end of year. TermShort: Shorthand TermCourseCount: Courses TermStart: Start of teaching period TermEnd: End of teaching perios LectureStart: Courses start -TermEdited tid: Successfully edited semester #{tid} -TermNewTitle: Edit/create semester +TermEdited tid: Successfully edited year #{tid} +TermNewTitle: Edit/create year InvalidInput: Invalid input -Term: Semester +Term: Year TermPlaceholder: YYYY TermStartDay: Starting day TermEndDay: Last day @@ -30,8 +30,8 @@ TermActive: Active TermActiveTooltip: Timeframe when lecturers may add courses; maybe restricted for specified lecturers TermActiveForPlaceholder: Email (optional) NumCourses num: #{num} #{pluralEN num "course" "courses"} -TermsHeading: Semesters -TermEditHeading: Edit semester +TermsHeading: Years +TermEditHeading: Edit year TermFormHolidaysAlreadyAdded: All new holidays were already entered TermFormHolidaysFrom: From diff --git a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg index 6e49ab72d..3003b8fd9 100644 --- a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg @@ -15,7 +15,7 @@ BreadcrumbExam: Prüfung BreadcrumbCourseRegister: Anmelden BreadcrumbCourseFavourite: Favorisieren BreadcrumbCourse: Kurs -BreadcrumbTerm !ident-ok: Semester +BreadcrumbTerm !ident-ok: Jahr BreadcrumbSchool: Institut BreadcrumbUser: Benutzer:in BreadcrumbStatic: Statische Resource @@ -91,10 +91,10 @@ BreadcrumbInstance: Instanz-Identifikation BreadcrumbUserDisplayEmail: E‑Mail-Adresse BreadcrumbProfileData: Persönliche Daten BreadcrumbAuthPreds: Authorisierungseinstellungen -BreadcrumbTermShow: Semester -BreadcrumbTermCreate: Neues Semester anlegen -BreadcrumbTermEdit: Semester editieren -BreadcrumbTermCurrent: Aktuelles Semester +BreadcrumbTermShow: Jahr +BreadcrumbTermCreate: Neues Jahr anlegen +BreadcrumbTermEdit: Jahr editieren +BreadcrumbTermCurrent: Aktuelles Jahr BreadcrumbParticipantsIntersect: Überschneidung von Kursteilnehmer:innen BreadcrumbCourseList: Kurse BreadcrumbCourseNew: Neuen Kurs anlegen diff --git a/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg b/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg index 705ec1d6c..c493724f5 100644 --- a/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg +++ b/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg @@ -15,7 +15,7 @@ BreadcrumbExam: Exam BreadcrumbCourseRegister: Register BreadcrumbCourseFavourite: Favourite BreadcrumbCourse: Course -BreadcrumbTerm: Semester +BreadcrumbTerm: Year BreadcrumbSchool: Department BreadcrumbUser: User BreadcrumbStatic: Static resource @@ -91,10 +91,10 @@ BreadcrumbInstance: Instance identification BreadcrumbUserDisplayEmail: Email address BreadcrumbProfileData: Personal information BreadcrumbAuthPreds: Authorisation settings -BreadcrumbTermShow: Semesters -BreadcrumbTermCreate: Create new semester -BreadcrumbTermEdit: Edit semester -BreadcrumbTermCurrent: Current semester +BreadcrumbTermShow: Years +BreadcrumbTermCreate: Create new year +BreadcrumbTermEdit: Edit year +BreadcrumbTermCurrent: Current year BreadcrumbParticipantsIntersect: Common course participants BreadcrumbCourseList: Courses BreadcrumbCourseNew: Create new course diff --git a/messages/uniworx/utils/navigation/menu/de-de-formal.msg b/messages/uniworx/utils/navigation/menu/de-de-formal.msg index 196b16786..c093b1f52 100644 --- a/messages/uniworx/utils/navigation/menu/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/menu/de-de-formal.msg @@ -33,7 +33,7 @@ MenuCourseAddMembers: Kursteilnehmer:innen hinzufügen MenuTutorialAddMembers: Tutorium Teilnehmer:innen hinzufügen MenuCourseCommunication: Kursmitteilung (E‑Mail) MenuCourseExamOffice: Prüfungsbeauftragte -MenuTermShow: Semester +MenuTermShow: Jahr MenuSubmissionDelete: Abgabe löschen MenuUsers: Benutzer:in MenuUserAdd: Benutzer:in anlegen @@ -44,10 +44,10 @@ MenuMessageList: Systemnachrichten MenuAdminErrMsg: Fehlermeldung entschlüsseln MenuAdminTokens: Tokens ausstellen MenuProfileData: Persönliche Daten -MenuTermCreate: Neues Semester anlegen +MenuTermCreate: Neues Jahr anlegen MenuCourseNew: Neuen Kurs anlegen -MenuTermEdit: Semester editieren -MenuTermCurrent: Aktuelles Semester +MenuTermEdit: Jahr editieren +MenuTermCurrent: Aktuelles Jahr MenuCorrection: Korrektur MenuCorrections: Korrekturen MenuCorrectionsOwn: Meine Korrekturen diff --git a/messages/uniworx/utils/navigation/menu/en-eu.msg b/messages/uniworx/utils/navigation/menu/en-eu.msg index 85130a2e9..a223269cd 100644 --- a/messages/uniworx/utils/navigation/menu/en-eu.msg +++ b/messages/uniworx/utils/navigation/menu/en-eu.msg @@ -44,10 +44,10 @@ MenuMessageList: System messages MenuAdminErrMsg: Decrypt error message MenuAdminTokens: Issue tokens MenuProfileData: Personal information -MenuTermCreate: Create new semester +MenuTermCreate: Create new year MenuCourseNew: Create new course -MenuTermEdit: Edit semester -MenuTermCurrent: Current semester +MenuTermEdit: Edit year +MenuTermCurrent: Current year MenuCorrection: Correction MenuCorrections: Corrections MenuCorrectionsOwn: My corrections diff --git a/messages/uniworx/utils/site_layout/de-de-formal.msg b/messages/uniworx/utils/site_layout/de-de-formal.msg index 61b10dd1a..53fb0666e 100644 --- a/messages/uniworx/utils/site_layout/de-de-formal.msg +++ b/messages/uniworx/utils/site_layout/de-de-formal.msg @@ -22,10 +22,10 @@ HeadingDataProt: Datenschutzerklärung HeadingTermsUse: Nutzungsbedingungen HeadingCopyright: Urheberrecht HeadingImprint: Impressum -HeadingTermsHeading: Semesterübersicht -HeadingTermEditHeading: Semester editieren/anlegen -HeadingTermCurrent: Aktuelles Semester -HeadingTermEditTid tid@TermId: Semester #{tid} editieren +HeadingTermsHeading: Jahresübersicht +HeadingTermEditHeading: Jahr editieren/anlegen +HeadingTermCurrent: Aktuelles Jahr +HeadingTermEditTid tid@TermId: Jahr #{tid} editieren TermCourseListHeading tid@TermId: Kursübersicht #{tid} TermSchoolCourseListHeading tid@TermId school@SchoolName: Kursübersicht #{tid} für #{school} CourseListTitle: Alle Kurse diff --git a/messages/uniworx/utils/site_layout/en-eu.msg b/messages/uniworx/utils/site_layout/en-eu.msg index 50358068d..687408f6e 100644 --- a/messages/uniworx/utils/site_layout/en-eu.msg +++ b/messages/uniworx/utils/site_layout/en-eu.msg @@ -22,10 +22,10 @@ HeadingDataProt: Data protection HeadingTermsUse: Terms of use HeadingCopyright: Copyright HeadingImprint: Imprint -HeadingTermsHeading: Semesters -HeadingTermEditHeading: Edit semester -HeadingTermCurrent: Current semester -HeadingTermEditTid tid: Edit semester #{tid} +HeadingTermsHeading: Years +HeadingTermEditHeading: Edit year +HeadingTermCurrent: Current year +HeadingTermEditTid tid: Edit year #{tid} TermCourseListHeading tid: Courses #{tid} TermSchoolCourseListHeading tid school: Courses #{tid}, #{school} CourseListTitle: All courses diff --git a/messages/uniworx/utils/table_column/de-de-formal.msg b/messages/uniworx/utils/table_column/de-de-formal.msg index bee0fc158..24749aa6b 100644 --- a/messages/uniworx/utils/table_column/de-de-formal.msg +++ b/messages/uniworx/utils/table_column/de-de-formal.msg @@ -12,7 +12,7 @@ TableStudyFeatureType !empty-ok: TableStudyFeatureValid: Aktiv TableStudyFeatureUpdate: Abgeglichen TableHeadingFilter !ident-ok: Filter -TableTerm !ident-ok: Semester +TableTerm !ident-ok: Jahr TableCourseSchool: Institut TableSubmissionGroup: Feste Abgabegruppe TableNoSubmissionGroup: Keine feste Abgabegruppe diff --git a/messages/uniworx/utils/table_column/en-eu.msg b/messages/uniworx/utils/table_column/en-eu.msg index af505c942..7876f3dc5 100644 --- a/messages/uniworx/utils/table_column/en-eu.msg +++ b/messages/uniworx/utils/table_column/en-eu.msg @@ -8,11 +8,11 @@ TableEmail: Email TableStudyFeatureType: TableStudyFeatureValid: Valid TableStudyFeatureUpdate: Updated -TableStudyFeatureAge: Semester +TableStudyFeatureAge: Semesters TableStudyFeatureDegree: Degree TableStudyTerm: Field of study TableHeadingFilter: Filter -TableTerm: Semester +TableTerm: Year TableCourseSchool: Department TableSubmissionGroup: Registered submission group TableNoSubmissionGroup: No registered submission group diff --git a/messages/uniworx/utils/utils/de-de-formal.msg b/messages/uniworx/utils/utils/de-de-formal.msg index 1d5b9d184..aadde6ded 100644 --- a/messages/uniworx/utils/utils/de-de-formal.msg +++ b/messages/uniworx/utils/utils/de-de-formal.msg @@ -117,7 +117,7 @@ SheetGradingPassing': Bestehen #utils.hs DayIsAHoliday tid@TermId name@Text date@Text: "#{name}" (#{date}) ist ein Feiertag DayIsOutOfLecture tid@TermId name@Text date@Text: "#{name}" (#{date}) ist außerhalb der Vorlesungszeit des #{tid} -DayIsOutOfTerm tid@TermId name@Text date@Text: "#{name}" (#{date}) liegt nicht im Semester #{tid} +DayIsOutOfTerm tid@TermId name@Text date@Text: "#{name}" (#{date}) liegt nicht im Jahr #{tid} UnauthorizedRedirect: Die angeforderte Seite existiert nicht oder Sie haben keine Berechtigung, die angeforderte Seite zu sehen. EncodedSecretBoxCiphertextTooShort: Verschlüsselte Daten zu kurz um valide zu sein diff --git a/templates/i18n/info-lecturer/de-de-formal.hamlet b/templates/i18n/info-lecturer/de-de-formal.hamlet index 4d2746f49..2f1903877 100644 --- a/templates/i18n/info-lecturer/de-de-formal.hamlet +++ b/templates/i18n/info-lecturer/de-de-formal.hamlet @@ -14,15 +14,15 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later ^{newU2WFeat} Alle Veranstaltungen müssen ein Kürzel zur Identifikation besitzen, z.B. EiP, ProMo, SysPrak, etc.

- Die Kombination aus Kürzel, Institut und Semester muss eindeutig sein.
- Ein Kurs, dessen ausgewähltes Kürzel innerhalb des gewähltes Instituts und Semesters nicht eindeutig ist wird beim Versuch des Erstellens mit einer entsprechenden Fehlermeldung abgelehnt. + Die Kombination aus Kürzel, Institut und Jahr muss eindeutig sein.
+ Ein Kurs, dessen ausgewähltes Kürzel innerhalb des gewähltes Instituts und Jahres nicht eindeutig ist wird beim Versuch des Erstellens mit einer entsprechenden Fehlermeldung abgelehnt.

Empfehlungen für die Wahl eines Kurskürzels: