diff --git a/messages/uniworx/categories/courses/allocation/de-de-formal.msg b/messages/uniworx/categories/courses/allocation/de-de-formal.msg index e72a79a8f..26761ce6c 100644 --- a/messages/uniworx/categories/courses/allocation/de-de-formal.msg +++ b/messages/uniworx/categories/courses/allocation/de-de-formal.msg @@ -84,7 +84,7 @@ CsvColumnAllocationUserMatriculation: Matrikelnummer des/der Bewerbers/Bewerberi CsvColumnAllocationUserStudyFeatures: Studiendaten CsvColumnAllocationUserRequested: Maximale Anzahl von Plätzen, die der Bewerber bereit ist, zu akzeptieren CsvColumnAllocationUserApplied: Anzahl von Bewerbungen, die der/die Bewerber/Bewerberin eingereicht hat -CsvColumnAllocationUserVetos: Anzahl von Bewerbungen, die von Kursverwaltern ein Veto oder eine Note erhalten haben, die äquivalent ist zu "Nicht Bestanden" (5.0) +CsvColumnAllocationUserVetos: Anzahl von Bewerbungen, die von Kursverwalter:innen ein Veto oder eine Note erhalten haben, die äquivalent ist zu "Nicht Bestanden" (5.0) CsvColumnAllocationUserAssigned: Anzahl von Plätzen, die der/die Bewerber/Bewerberin durch diese Zentralanmeldung bereits erhalten hat CsvColumnAllocationUserNewAssigned: Anzahl von Plätzen, die der/die Bewerber/Bewerberin, nach Akzeptieren der berechneten Verteilung, zusätzlich erhalten würde CsvColumnAllocationUserPriority: Zentrale Dringlichkeit des/der Bewerbers/Bewerberin; entweder einzelne Zahl für Sortierungsbasierte Dringlichkeiten (höhere Dringlichkeit entspricht größerer Zahl) oder Komma-separierte Liste von numerischen Dringlichkeiten in eckigen Klammern (z.B. [1, 2, 3]) @@ -127,11 +127,12 @@ AllocationRegisterFrom: Bewerbung ab AllocationRegister: Bewerbung AllocationRegisterClosed: Die Zentralanmeldung ist aktuell geschlossen. AllocationRegisterOpensIn difftime@Text: Die Zentralanmeldung öffnet voraussichtlich in #{difftime} -AllocationRegisterByStaff: An- und Abmeldung durch Kursverwalter:in -AllocationRegisterByStaffFrom: An- und Abmeldung durch Kursverwalter:in ab -AllocationRegisterByStaffTo: An- und Abmeldung durch Kursverwalter:in bis +AllocationRegisterByStaff: An- und Abmeldung durch Kursverwalter:innen +AllocationRegisterByStaffFrom: An- und Abmeldung durch Kursverwalter:innen ab +AllocationRegisterByStaffTo: An- und Abmeldung durch Kursverwalter:innen bis AllocationRegisterByStaffTip: In diesem Zeitraum können Kursverwalter:innen Teilnehmer:innen zu und von ihren Kursen an- und abmelden. AllocationRegisterByStaffFromTip: Ab diesem Zeitpunkt können Kursverwalter:innen Teilnehmer:innen zu und von ihren Kursen an- und abmelden. +AllocationRegisterByCourse: Direkte An- und Abmeldung AllocationRegisterByCourseFrom: Direkte An- und Abmeldung ab AllocationRegisterByCourseFromTip: Frühestens ab diesem Zeitpunkt ist die eigentständige An- und Abmeldung zu und von den Kursen, die an der Zentralanmeldung teilnehmen, möglich. Kontrolle über die genauen Fristen haben die Kursverwalter:innen. AllocationRegisterTo: Anmeldungen bis @@ -175,6 +176,7 @@ AllocationPrioritiesOrdinal: Dringlichkeiten durch Sortierung AllocationUsersCsvSheetName tid@TermId ssh@SchoolId ash@AllocationShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase ash} Bewerber AllocationApplication: Bewerbung AllocationProcess: Platzvergabe +AllocationSubstitutesProcess: Platzvergabe an Nachrücker:innen AllocationFormTerm: Semester AllocationFormSchool: Institut @@ -189,7 +191,7 @@ AllocationFormStaffDescription: Beschreibung für Dozierende AllocationFormStaffDescriptionTip: Wird nur (potentiellen) Dozierenden angezeigt; sowohl beim Anlegen eines Kurses, wie auch auf der Seite der Zentralanmeldung AllocationFormDeadlines: Fristen AllocationFormStaffRegisterFrom: Eintragung der Kurse ab -AllocationFormStaffRegisterFromTip: Ab diesem Zeitpunkt können Kursverwalter ihre Kurse selbstständig zur Zentralanmeldung eintragen. Falls kein Zeitpunkt angegeben wird, ist dies nie gestattet. +AllocationFormStaffRegisterFromTip: Ab diesem Zeitpunkt können Kursverwalter:innen ihre Kurse selbstständig zur Zentralanmeldung eintragen. Falls kein Zeitpunkt angegeben wird, ist dies nie gestattet. AllocationFormStaffRegisterTo: Eintragung der Kurse bis AllocationFormStaffRegisterToTip: Falls kein Zeitpunkt angegeben wird, ist die Eintragung zunächst für immer möglich. AllocationFormStaffAllocationFrom: Bewertung der Bewerbungen ab diff --git a/messages/uniworx/categories/courses/allocation/en-eu.msg b/messages/uniworx/categories/courses/allocation/en-eu.msg index 14d9809bb..6a400ef11 100644 --- a/messages/uniworx/categories/courses/allocation/en-eu.msg +++ b/messages/uniworx/categories/courses/allocation/en-eu.msg @@ -132,6 +132,7 @@ AllocationRegisterByStaffFrom: Enrollment by course administrators starts AllocationRegisterByStaffTo: Enrollment by course administrators ends AllocationRegisterByStaffTip: In this periods course administrators may enroll participants in their courses. AllocationRegisterByStaffFromTip: Starting at this time course administrators may enroll participants in their courses. +AllocationRegisterByCourse: Direct enrollment AllocationRegisterByCourseFrom: Direct enrollment starts AllocationRegisterByCourseFromTip: Starting at this time course administrators participating in this central allocation may open their courses for participants to manage their participation themselves. AllocationRegisterTo: Registration until @@ -174,6 +175,7 @@ AllocationPrioritiesOrdinal: Priorities based on sorted list AllocationUsersCsvSheetName tid ssh ash: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase ash} Applicants AllocationApplication: Application AllocationProcess: Allocation process +AllocationSubstitutesProcess: Allocation of substitutes AllocationFormTerm: Term AllocationFormSchool: Department diff --git a/messages/uniworx/categories/courses/courses/de-de-formal.msg b/messages/uniworx/categories/courses/courses/de-de-formal.msg index ad7163be6..fb33d8c9f 100644 --- a/messages/uniworx/categories/courses/courses/de-de-formal.msg +++ b/messages/uniworx/categories/courses/courses/de-de-formal.msg @@ -21,7 +21,6 @@ LecturerType: Rolle CourseLecturerRightsIdentical: Alle Sorten von Kursverwalter:innen haben identische Rechte. CourseAllocationOption term@Text name@Text !ident-ok: #{name} (#{term}) CourseAllocationParticipate: Teilnahme an Zentralanmeldung -CourseAllocationParticipateTip: Wird an einer Zentralanmeldung teilgenommen, kann es sein, dass Sie bestimmte Rechte, die Sie normalerweise bzgl. Ihres Kurses hätten, nicht ausüben können (z.B. Studierende direkt zum Kurs anmelden, Studierende abmelden, ...). CourseNoAllocationsAvailable: Es sind aktuell keine Zentralanmeldungen verfügbar CourseAllocation: Zentralanmeldung CourseAllocationMinCapacity: Minimale Teilnehmeranzahl diff --git a/messages/uniworx/categories/courses/courses/en-eu.msg b/messages/uniworx/categories/courses/courses/en-eu.msg index 031c397d8..d3e3d709f 100644 --- a/messages/uniworx/categories/courses/courses/en-eu.msg +++ b/messages/uniworx/categories/courses/courses/en-eu.msg @@ -21,7 +21,6 @@ LecturerType: Role CourseLecturerRightsIdentical: All sorts of course administrators have the same permissions. CourseAllocationOption term name: #{name} (#{term}) CourseAllocationParticipate: Participate in central allocation -CourseAllocationParticipateTip: If a course participates in a central allocation, you might lose some permissions that you would normally have (e.g. registering students for the course directly, deregistering students, ...) CourseNoAllocationsAvailable: There are no ongoing central allocations CourseAllocation: Central allocation CourseAllocationMinCapacity: Minimum number of participants diff --git a/src/Handler/Allocation/Info.hs b/src/Handler/Allocation/Info.hs index ddabf2e75..5dcf3aa26 100644 --- a/src/Handler/Allocation/Info.hs +++ b/src/Handler/Allocation/Info.hs @@ -5,9 +5,12 @@ module Handler.Allocation.Info import Import import Handler.Utils +import Handler.Info (FAQItem(..)) + getInfoAllocationR :: Handler Html getInfoAllocationR = siteLayoutMsg MsgHeadingAllocationInfo $ do setTitleI MsgHeadingAllocationInfo + faqItemUrlAllocationNoPlaces <- toTextUrl $ FaqR :#: FAQAllocationNoPlaces $(i18nWidgetFile "allocation-info") diff --git a/src/Handler/Course/Edit.hs b/src/Handler/Course/Edit.hs index 344a1140f..3ebbd2c73 100644 --- a/src/Handler/Course/Edit.hs +++ b/src/Handler/Course/Edit.hs @@ -274,7 +274,12 @@ makeCourseForm miButtonAction template = identifyForm FIDcourse . validateFormDB <*> aopt utcTimeField (fslI MsgCourseAcceptSubstitutesUntil & setTooltip MsgCourseAcceptSubstitutesUntilTip) (fmap acfAcceptSubstitutes $ template >>= cfAllocation) <*> apopt checkBoxField (fslI MsgCourseDeregisterNoShow & setTooltip MsgCourseDeregisterNoShowTip) ((<|> Just True) . fmap acfDeregisterNoShow $ template >>= cfAllocation) - optionalActionW' (bool mforcedJust mpopt mayChange) allocationForm' (fslI MsgCourseAllocationParticipate & setTooltip MsgCourseAllocationParticipateTip) (is _Just . cfAllocation <$> template) + let + addTip :: (MonadHandler m, HandlerSite m ~ UniWorX) + => FieldView UniWorX -> m (FieldView UniWorX) + addTip = addFieldViewTooltipWidget $(i18nWidgetFile "allocation-participate-tip") + + hoist (censorM $ traverseOf _head addTip) $ optionalActionW' (bool mforcedJust mpopt mayChange) allocationForm' (fslI MsgCourseAllocationParticipate) (is _Just . cfAllocation <$> template) -- let autoUnzipInfo = [|Entpackt hochgeladene Zip-Dateien (*.zip) automatisch und fügt den Inhalt dem Stamm-Verzeichnis der Abgabe hinzu. TODO|] diff --git a/src/Handler/Info.hs b/src/Handler/Info.hs index 8dbd009b9..095eadb52 100644 --- a/src/Handler/Info.hs +++ b/src/Handler/Info.hs @@ -62,34 +62,6 @@ getInfoR = do changelogItems = $(i18nWidgetFiles "changelog") -getInfoLecturerR :: Handler Html -getInfoLecturerR = - siteLayoutMsg MsgInfoLecturerTitle $ do - setTitleI MsgInfoLecturerTitle - $(i18nWidgetFile "info-lecturer") - where - allocationInfo = $(i18nWidgetFile "allocation-info") - - tooltipNew, tooltipProblem, tooltipPlanned, tooltipNewU2W :: WidgetFor UniWorX () - tooltipNew = [whamlet| _{MsgLecturerInfoTooltipNew} |] - tooltipProblem = [whamlet| _{MsgLecturerInfoTooltipProblem} |] - tooltipPlanned = [whamlet| _{MsgLecturerInfoTooltipPlanned} |] - tooltipNewU2W = [whamlet| _{MsgLecturerInfoTooltipNewU2W} |] - newU2WFeat, probFeatInline, plannedFeat, plannedFeatInline :: WidgetFor UniWorX () - newU2WFeat = [whamlet| ^{iconTooltip tooltipNewU2W (Just IconAnnounce) True} |] -- to be used inside text blocks - probFeatInline = [whamlet| ^{iconTooltip tooltipProblem (Just IconProblem) True} |] -- to be used inside text blocks - plannedFeat = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) False} |] - plannedFeatInline = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) True} |] -- to be used inside text blocks - - -- new feature with given introduction date - newFeat :: Integer -> Int -> Int -> WidgetFor UniWorX () - newFeat y m d = do - currentTime <- liftIO getCurrentTime - let expiryTime = UTCTime (addGregorianMonthsRollOver 1 $ fromGregorian y m d) 0 - if currentTime > expiryTime - then mempty - else toWidget [whamlet| ^{iconTooltip tooltipNew (Just IconNew) False} |] - getGlossaryR :: Handler Html getGlossaryR = siteLayoutMsg MsgGlossaryTitle $ do @@ -218,3 +190,34 @@ prioFAQ _ FAQCourseCorrectorsTutors = return 1 prioFAQ _ FAQExamPoints = return 2 prioFAQ _ FAQAllocationNoPlaces = return 2 prioFAQ _ FAQInvalidCredentialsAdAccountDisabled = return 3 + + +getInfoLecturerR :: Handler Html +getInfoLecturerR = + siteLayoutMsg MsgInfoLecturerTitle $ do + setTitleI MsgInfoLecturerTitle + $(i18nWidgetFile "info-lecturer") + where + allocationInfo = do + faqItemUrlAllocationNoPlaces <- toTextUrl $ FaqR :#: FAQAllocationNoPlaces + $(i18nWidgetFile "allocation-info") + + tooltipNew, tooltipProblem, tooltipPlanned, tooltipNewU2W :: WidgetFor UniWorX () + tooltipNew = [whamlet| _{MsgLecturerInfoTooltipNew} |] + tooltipProblem = [whamlet| _{MsgLecturerInfoTooltipProblem} |] + tooltipPlanned = [whamlet| _{MsgLecturerInfoTooltipPlanned} |] + tooltipNewU2W = [whamlet| _{MsgLecturerInfoTooltipNewU2W} |] + newU2WFeat, probFeatInline, plannedFeat, plannedFeatInline :: WidgetFor UniWorX () + newU2WFeat = [whamlet| ^{iconTooltip tooltipNewU2W (Just IconAnnounce) True} |] -- to be used inside text blocks + probFeatInline = [whamlet| ^{iconTooltip tooltipProblem (Just IconProblem) True} |] -- to be used inside text blocks + plannedFeat = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) False} |] + plannedFeatInline = [whamlet| ^{iconTooltip tooltipPlanned (Just IconPlanned) True} |] -- to be used inside text blocks + + -- new feature with given introduction date + newFeat :: Integer -> Int -> Int -> WidgetFor UniWorX () + newFeat y m d = do + currentTime <- liftIO getCurrentTime + let expiryTime = UTCTime (addGregorianMonthsRollOver 1 $ fromGregorian y m d) 0 + if currentTime > expiryTime + then mempty + else toWidget [whamlet| ^{iconTooltip tooltipNew (Just IconNew) False} |] diff --git a/src/Handler/Utils/I18n.hs b/src/Handler/Utils/I18n.hs index 37772304c..f6c2d39b4 100644 --- a/src/Handler/Utils/I18n.hs +++ b/src/Handler/Utils/I18n.hs @@ -1,5 +1,5 @@ module Handler.Utils.I18n - ( i18nWidgetFile + ( i18nWidgetFile, i18nHamletFile , i18nWidgetFiles , i18nMessage , authorizedI18n, authenticationRequiredI18n, unauthorizedI18n @@ -22,8 +22,25 @@ import qualified Data.List.NonEmpty as NonEmpty import qualified Data.Map as Map import System.Directory (listDirectory) +import Text.Hamlet (hamletFile) +i18nFile :: (FilePath -> Q Exp) -> FilePath -> Q Exp +i18nFile includeFile basename = do + -- Construct list of available translations (@de@, @en@, ...) at compile time + let i18nDirectory = "templates" "i18n" basename + availableFiles <- qRunIO $ listDirectory i18nDirectory + let availableTranslations = sortWith (NTop . flip List.elemIndex (NonEmpty.toList appLanguages)) . List.nub $ pack . takeBaseName <$> availableFiles + availableTranslations' <- maybe (fail $ "‘" <> i18nDirectory <> "’ is empty") return $ NonEmpty.nonEmpty availableTranslations + + -- Dispatch to correct language (depending on user settings via `selectLanguage`) at run time + ws <- newName "ws" -- Name for dispatch function + letE + [ funD ws $ [ clause [litP $ stringL l] (normalB . includeFile $ "i18n" basename l) [] + | l <- unpack <$> NonEmpty.toList availableTranslations' -- One function definition for every available language + ] ++ [ clause [wildP] (normalB [e| error "selectLanguage returned an invalid translation" |]) [] ] -- Fallback mostly there so compiler does not complain about non-exhaustive pattern match + ] [e|selectLanguage availableTranslations' >>= $(varE ws)|] + -- | Add language dependent template files -- -- For large files which are translated as a whole. @@ -38,20 +55,10 @@ import System.Directory (listDirectory) -- for directories) -- @$ stack clean@ is required so new translations show up i18nWidgetFile :: FilePath -> Q Exp -i18nWidgetFile basename = do - -- Construct list of available translations (@de@, @en@, ...) at compile time - let i18nDirectory = "templates" "i18n" basename - availableFiles <- qRunIO $ listDirectory i18nDirectory - let availableTranslations = sortWith (NTop . flip List.elemIndex (NonEmpty.toList appLanguages)) . List.nub $ pack . takeBaseName <$> availableFiles - availableTranslations' <- maybe (fail $ "‘" <> i18nDirectory <> "’ is empty") return $ NonEmpty.nonEmpty availableTranslations +i18nWidgetFile = i18nFile widgetFile - -- Dispatch to correct language (depending on user settings via `selectLanguage`) at run time - ws <- newName "ws" -- Name for dispatch function - letE - [ funD ws $ [ clause [litP $ stringL l] (normalB . widgetFile $ "i18n" basename l) [] - | l <- unpack <$> NonEmpty.toList availableTranslations' -- One function definition for every available language - ] ++ [ clause [wildP] (normalB [e| error "selectLanguage returned an invalid translation" |]) [] ] -- Fallback mostly there so compiler does not complain about non-exhaustive pattern match - ] [e|selectLanguage availableTranslations' >>= $(varE ws)|] +i18nHamletFile :: FilePath -> Q Exp +i18nHamletFile basename = [e|$(i18nFile (hamletFile . (<.> "hamlet")) basename) <$> getUrlRenderParams|] i18nWidgetFiles :: FilePath -> Q Exp i18nWidgetFiles basename = do diff --git a/src/Utils.hs b/src/Utils.hs index 7f4201d54..16a716cc6 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -1011,14 +1011,22 @@ tellMPoint = tellM . fmap opoint class IsWriterT t where runWriterT' :: (Monad m, Monoid w) => t w m a -> m (a, w) + mapWriterT' :: (m (a, w) -> n (b, w')) -> t w m a -> t w' n b instance IsWriterT Strict.WriterT where runWriterT' = Strict.runWriterT + mapWriterT' = Strict.mapWriterT instance IsWriterT Lazy.WriterT where runWriterT' = Lazy.runWriterT + mapWriterT' = Lazy.mapWriterT evalWriterT :: (IsWriterT t, Monoid w, Monad m) => t w m a -> m a evalWriterT = fmap fst . runWriterT' +censorM :: (IsWriterT t, Monad m) + => (w -> m w) + -> t w m a -> t w m a +censorM f = mapWriterT' (>>= \(x, w) -> (x, ) <$> f w) + ------------- -- Conduit -- ------------- diff --git a/src/Utils/Form.hs b/src/Utils/Form.hs index c331528d5..40ea928bf 100644 --- a/src/Utils/Form.hs +++ b/src/Utils/Form.hs @@ -188,6 +188,23 @@ addAutosubmit = addAttr "uw-auto-submit-input" "" asyncSubmitAttr :: (Text,Text) asyncSubmitAttr = ("uw-async-form", "") +--------------- +-- FieldView -- +--------------- + +addFieldViewTooltipWidget :: (MonadHandler m, Yesod (HandlerSite m)) + => WidgetFor (HandlerSite m) () + -> FieldView (HandlerSite m) -> m (FieldView (HandlerSite m)) +addFieldViewTooltipWidget wgt fv = do + renderUrl <- getUrlRenderParams + PageContent{..} <- liftHandler $ widgetToPageContent wgt + let addPC = do + when (pageTitle /= mempty) $ + setTitle pageTitle + toWidgetHead $ pageHead renderUrl + return $ fv + & _fvTooltip ?~ pageBody renderUrl + & _fvInput <>~ addPC ------------------------------------------------ -- Unique Form Identifiers to avoid accidents -- diff --git a/templates/i18n/allocation-info/de-de-formal.hamlet b/templates/i18n/allocation-info/de-de-formal.hamlet index a7f0756e2..994c3812e 100644 --- a/templates/i18n/allocation-info/de-de-formal.hamlet +++ b/templates/i18n/allocation-info/de-de-formal.hamlet @@ -1,84 +1,150 @@ $newline text

- Jede Zentralanmeldung durchläuft - der Reihe nach folgende Phasen: + Jede Zentralanmeldung durchläuft die folgenden Phasen, idR. auch in + dieser Reihenfolge:

_{MsgAllocationStaffRegister}

- Veranstalter:innen können nur in diesem Zeitraum ihre Veranstaltungen - zur Zentralanmeldung hinzufügen oder entfernen. + Veranstalter:innen können nur in diesem Zeitraum ihre + Veranstaltungen zur Zentralanmeldung hinzufügen oder entfernen.

- Pro Veranstaltung wird einzeln festgelegt, - ob Studierende einen Bewerbungstext und/oder Bewerbungsdateien - einreichen sollen. + Pro Veranstaltung wird einzeln festgelegt, ob Studierende einen + Bewerbungstext und/oder Bewerbungsdateien einreichen sollen. Veranstalter:innen stellen auch Anweisungen zur Bewerbung ein, - z.B. welchen Inhalt abzugebende Bewerbungsdateien enthalten sollen. + z.B. welchen Inhalt abzugebende Bewerbungsdateien enthalten + sollen.

- Zur Zentralanmeldung eingetragene Kurse - erlauben während dem gesamten Ablauf - der Zentralanmeldung keine anderweitigen Kursanmeldung mehr, - auch nicht durch den Veranstalter selbst. + Zur Zentralanmeldung eingetragene Kurse erlauben während dem + gesamten Ablauf der Zentralanmeldung keine anderweitige + Kursanmeldung mehr, auch nicht durch den Veranstalter selbst.

_{MsgAllocationRegister}

- Studierende können sich nur in diesem Zeitraum - auf Plätze in Kursen einer Zentralanmeldung bewerben. + Studierende können sich nur in diesem Zeitraum auf Plätze in + Kursen einer Zentralanmeldung bewerben.

- Bewerber:innen können jedem Kurs der Zentralanmeldung eine Priorität zuweisen, - zwischen "dieser Kurs wäre meine erste Wahl" und "diesen Kurs besuche - ich nur, wenn ich keinen anderen Platz kriege". + Bewerber:innen können jedem Kurs der Zentralanmeldung eine + Priorität zuweisen, zwischen „dieser Kurs wäre meine erste Wahl“ + und “diesen Kurs besuche ich nur, wenn ich keinen anderen Platz + kriege“. Es kann auch mehreren Kursen die gleiche Priorität eingeräumt werden.

- Bewerbungen für und Prioritisierung der Kurse können innerhalb des - Bewerbungszeitraums beliebig angepasst und zurückgezogen werden. + Bewerbungen für und Prioritisierung der Kurse können innerhalb + des Bewerbungszeitraums beliebig angepasst und zurückgezogen + werden.

- Studierende können auch mehr als einen Platz - in verschiedenen Kursen einer Zentralanmeldung anfordern, - falls die Kurskapazitäten und/oder Dringlichkeit ausreichend sind. + Studierende können auch mehr als einen Platz in verschiedenen + Kursen einer Zentralanmeldung anfordern, falls die + Kurskapazitäten und/oder Dringlichkeit ausreichend sind.

- Bewerbungstexte und/oder Bewerbungsdateien - sind pro Kurs anzugeben, falls vom Veranstalter gefordert. + Bewerbungstexte und/oder Bewerbungsdateien sind pro Kurs + anzugeben, falls vom Veranstalter gefordert. +

+ Während der Bewerbungsphase wird die Sichtbarkeit aller + teilnehmenden Kurse forciert. + „_{MsgCourseVisibleFrom}“ und „_{MsgCourseVisibleTo}“ werden + dementsprechend während dieser Phase ignoriert.

_{MsgAllocationStaffAllocation}

- Veranstalter:innen können nur in diesem Zeitraum die - Bewerbungen einsehen und bewerten. + Veranstalter:innen können nur in diesem Zeitraum die Bewerbungen + einsehen und (optional) bewerten. $#

$# Nur in manchen Zentralanmeldungen dürfen Veranstalter:innen $# Bewerber:innen jetzt direkt ablehnen und/oder übernehmen. - $#

- $# Veranstalter:innen haben noch eine letzte Möglichkeit, - $# die Kurskapazität anzupassen. +

+ Veranstalter:innen haben noch eine letzte Möglichkeit, + die Kurskapazität anzupassen.

_{MsgAllocationProcess}

- Die Plätze werden gemäß Studienfortschritt, Dringlichkeit - und der Bewertung durch den Veranstalter/die Veranstalterin auf die Bewerber:innen verteilt. + Die Plätze werden gemäß Studienfortschritt, Dringlichkeit und + der Bewertung durch die Veranstalter:innen auf die + Bewerber:innen verteilt. + Näheres zum Vergabeverfahren finden Sie auch # + + im FAQ + .

- Die Bewerber:innen werden diekt in den jeweiligen Kursen angemeldet. - Übernommene Bewerber:innen, welche einen zugeteilten Platz - ohne Angabe eines triftigen Grundes nicht antreten, - werden in zukünftigen Zentralanmeldungen - unter Umständen benachteiligt. + Die Bewerber:innen werden diekt zu den jeweiligen Kursen + angemeldet. + Übernommene Bewerber:innen, welche einen zugeteilten Platz ohne + Angabe eines triftigen Grundes nicht antreten, werden in + zukünftigen Zentralanmeldungen unter Umständen benachteiligt. + $#

+ $# Veranstalter:innen können frühestens nach der erfolgten + $# Zuteilung Teilnehmer:innen selbst an-/abmelden und + $# ggf. Nachrücker für freigewordene Plätze anfordern. + +

+ _{MsgAllocationSubstitutesProcess} +

- Veranstalter:innen können frühestens nach der erfolgten Zuteilung - Teilnehmer:innen selbst an-/abmelden - und ggf. Nachrücker für freigewordene Plätze anfordern. + Systemadministratoren lösen nach der Platzvergabe gelegentlich + manuell das Verteilen von Nachrücker:innen aus. +

+ Veranstalter:innen haben hierfür die Möglichkeit eine Frist zu + hinterlegen bis zu der sie bereit sind Nachrücker:innen in ihren + Kursen zu akzeptieren. +

+ + Achtung: # + Hinterlegen die Veranstalter:innen eines Kurses keine + Nachrückerfrist, so werden # + + i.A. ohne weitere Nachfrage # + diesem Kurs keine Nachrücker:innen zugeteilt. + +

+ _{MsgAllocationRegisterByStaff} +
+

+ Die direkte Anmeldung zu Kursen, die an der Zentralanmeldung + teilnehmen, wird ab Eintragung des jeweiligen Kurses zunächst + unterbunden. +

+ Ab einem für die Zentralanmeldung eingestellten Zeitpunkt + („_{MsgAllocationRegisterByStaffFrom}“) ist es Kursverwaltenden + wieder möglich Teilnehmer direkt zu ihren Kursen anzumelden + bzw. von ihren Kursen abzumelden. + +

+ _{MsgAllocationRegisterByCourse} +
+

+ Studierende können sich ab dem Zeitpunkt + „_{MsgAllocationRegisterByCourseFrom}“ direkt zu den Kursen + anmelden. + Hierbei finden natürlich die von den Kursverwaltenden + eingestellten Regeln Anwendung. +

+ Insbesondere sollten Veranstalter:innen daher darauf achten, + dass für ihre Kurse, trotz Teilnahme an einer Zentralanmeldung, + sinnvolle Anmeldungsfristen eingestellt sind. +

+ In aller Regel werden alle zur Verfügung stehenden Plätze + bereits durch die zentrale Platzvergabe gefüllt. + Es ist also für Studierende nicht ratsam sich darauf zu + verlassen sich direkt anmelden zu können und daher nicht an der + Zentralvergabe teilzunehmen.

- Der Ablauf einer Zentralanmeldung kann unter Umständen noch variieren. + Der Ablauf einer Zentralanmeldung kann unter Umständen noch + variieren. +
Insbesondere: # - Fehlt in der Übersichtsseite einer Zentralanmeldung die Angabe einer dieser - Phasen, dann wurden die entsprechenden Zeiten noch nicht festgelegt! + Fehlt in der Übersichtsseite einer Zentralanmeldung die Angabe einer + dieser Phasen, dann wurden die entsprechenden Zeiten noch nicht + festgelegt!

Mehrere Zentralanmeldungen werden völlig unabhängig voneinander abgewickelt. diff --git a/templates/i18n/allocation-info/en-eu.hamlet b/templates/i18n/allocation-info/en-eu.hamlet index c08cfdf21..f38b5c00c 100644 --- a/templates/i18n/allocation-info/en-eu.hamlet +++ b/templates/i18n/allocation-info/en-eu.hamlet @@ -1,6 +1,7 @@ $newline text

- Every central allocations progresses through the following stages in order: + Every central allocations progresses through the following stages + (usually in order):

_{MsgAllocationStaffRegister} @@ -15,7 +16,7 @@ $newline text content the application files should have.

Courses registered for participation in the central allocation can not - gain participants through the entire course of the allocation. + gain participants throughout the entire course of the allocation. Not even through manual enrollment by course administrators.

@@ -25,21 +26,25 @@ $newline text Only during this phase may students apply to the various courses which participate in the central allocation.

- Applicants may assign priorities ("this course would be my first choice" - down to "I will only participate in this course if nothing else is - available to me") to courses they apply to. + Applicants may assign priorities (“this course would be my first choice” + down to “I will only participate in this course if nothing else is + available to me”) to courses they apply to. Multiple courses may have the same priority.

Applications and priorities may be freely edited and retracted during the application period.

Students may request more than one placement from a central allocation. - Additional placements are made if sufficient capacity is available and/or placements are sufficiently urgent.

Application texts and/or files need to be specified for each course individually, as requested by the course administrators. +

+ During the application phase courses that participate in the + central allocation are forced to be visible. + “_{MsgCourseVisibleFrom}” and “_{MsgCourseVisibleTo}” are thus + ignored during this phase.

_{MsgAllocationStaffAllocation} @@ -53,6 +58,9 @@ $newline text $#

$# Veranstalter haben noch eine letzte Möglichkeit, $# die Kurskapazität anzupassen. +

+ Course administrators have one last chance to edit their courses' + capacities.

_{MsgAllocationProcess} @@ -61,24 +69,73 @@ $newline text Placements in courses are made with regard to the current study progress, urgency, and the grading of the application as determined by a course administrator. + Further details wrt. to the allocation process can be found # + + in the FAQ + .

Applicants are directly enrolled in the selected courses. - Applicants which leave courses they were assigned in the course of a central allocation may be affected negatively by this in future central allocations. + $#

+ $# Only after placements have been made, may course administrators enroll + $# and deregister participants of their courses. + $# Course administrators can request to be assigned successors to fill + $# their courses' remaining capacity. + +

+ _{MsgAllocationSubstitutesProcess} +

- Only after placements have been made, may course administrators enroll - and deregister participants of their courses. - Course administrators can request to be assigned successors to fill - their courses' remaining capacity. + System administrators occasionally trigger the distribution of + allocation places to substitute participants. +

+ Course administrators may specify a deadline until which they + are prepared to accept substitutes for their courses. +

+ + Caution: # + If the administrators for a certain course do not specify a + deadline no substitutes will ever be assigned to that course. # + + In general without consulting the course adminstrators. + +

+ _{MsgAllocationRegisterByStaff} +
+

+ Direct registration to courses is prevented from the time at + which they are registered to a central allocation. +

+ Starting with “_{MsgAllocationRegisterByStaffFrom}” course + administrators are once again permitted to add/remove + participants to and from their courses. + +

+ _{MsgAllocationRegisterByCourse} +
+

+ Students can, starting with + “_{MsgAllocationRegisterByCourseFrom}”, once again register + themselves for the courses directly. + The rules specified by course administrators for direct + registration to their courses apply. +

+ It is therefore advised that course administrators take care to + define sensible deadlines for direct registration to their + courses, even if they participate in a central allocation. +

+ The central allocation usually fills all available places. + It is therefore not recommended that students do not participate + in the central allocation in hopes of being able to register + themselves afterwards.

Central allocation procedure may vary. - +
In particular: # - If, on the central allocation's page, no times are specified for one of the phases mentioned above, the time in question has not been determined yet!

diff --git a/templates/i18n/allocation-participate-tip/de-de-formal.hamlet b/templates/i18n/allocation-participate-tip/de-de-formal.hamlet new file mode 100644 index 000000000..fc213110b --- /dev/null +++ b/templates/i18n/allocation-participate-tip/de-de-formal.hamlet @@ -0,0 +1,11 @@ +$newline never + +Wird an einer Zentralanmeldung teilgenommen, können Sie für gewöhnlich # +bestimmte Rechte, die Sie normalerweise bzgl. Ihres Kurses hätten, # +nicht ausüben. + +
+ +Details finden Sie unter: # + +^{modal (toWidget (mr MsgMenuAllocationInfo)) (Left (SomeRoute InfoAllocationR))} diff --git a/templates/i18n/allocation-participate-tip/en-eu.hamlet b/templates/i18n/allocation-participate-tip/en-eu.hamlet new file mode 100644 index 000000000..3ee612506 --- /dev/null +++ b/templates/i18n/allocation-participate-tip/en-eu.hamlet @@ -0,0 +1,10 @@ +$newline never + +If a course participates in a central allocation, you will usually # +lose some permissions that you would normally have. + +
+ +For details see: # + +^{modal (toWidget (mr MsgMenuAllocationInfo)) (Left (SomeRoute InfoAllocationR))}