diff --git a/CHANGELOG.md b/CHANGELOG.md index ac54a44f9..e89ba956b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,45 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [27.0.0](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v26.6.6...v27.0.0) (2022-12-14) + + +### ⚠ BREAKING CHANGES + +* remove applications and allocations + +### Features + +* **add-users:** add page-action to add users from TUsersR ([9c62c9e](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/9c62c9ee8ca365ceea206c696d3596e46927391c)) +* **add-users:** connect confirmation form with handler ([c013ae9](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/c013ae9efcd7df812b26ae32ce04ba3da4e6aef4)) +* **add-users:** correctly add users and reroute ([fecc752](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/fecc752d6ce3aa952efabdac2ff17064f4091050)) +* **add-users:** more page-actions for convenience ([a882a3c](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/a882a3c0d03ffc57902cbec779621fb58617ed3b)) +* **avs:** add page-action and form handler for registering avs participants ([747d619](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/747d6198c4efdafab009012dc46ed65b02303a38)) +* **avs:** register course participants for day groups per default ([64d3ceb](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/64d3ceb56d4a7ce09d7760c7452f48e12b182070)) +* **course-users:** fuse avs register form with CAddUserR ([4a00907](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/4a00907bdad26208329080ad87fe52daa33775ff)) +* **course-users:** register avs-upserted users ([cba73bf](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/cba73bf2ca6825e9d4d00e51440354aba4cf57f0)) +* **course-users:** set new tutorials to Schulung ([69de448](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/69de44893c9e37a809cde350d404f60a14e5052b)) +* **tutorial-users:** replace study-fields column with qualifications column ([9850e1d](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/9850e1dd88a5371abe67fd5fb69458d7f52ea8e8)) +* **tutorial-users:** table action for granting qualifications ([fa0caba](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/fa0caba55d05f080f5ed98b0b83dde3c6cebe7b7)) +* **users-add:** add error message for users not found in avs ([e273c60](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/e273c60a2325f75033d2393725ce7a25368821bf)) +* **users-add:** redirect to different routes depending on tutorial ([93c6853](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/93c6853b082a5d2195bb55cbf7b792d2f4307254)) +* **users-add:** upsert tutorial participants ([662445e](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/662445e8cc92cf9f5815851d7e9d0b559cef289e)) + + +### Bug Fixes + +* **add-users:** fix and refactor confirm post param handling ([727d78c](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/727d78cabc01e9f520b7140336bdacebc6188e2b)) +* **add-users:** fix confirm secret field decoding ([57c9535](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/57c9535733b9ca2888a01d940a4a8888ca342c97)) +* **add-users:** fix typo in message ([5e02c99](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/5e02c99c44783672a66f2562bc92d14287b0ff48)) +* **build:** accepting linter suggestions ([d25dd64](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/d25dd64eec0a75b8d0e53795341088835f34fd85)) +* **routes:** remove redundant auth tag ([5ef36f1](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/5ef36f1d1c0bd92773bbb58af417bae8307a3610)) +* **users-add:** upsert tutorial only if users not empty ([e65d388](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/e65d38898e78dffa3dedf89292bf28e39a2ce3cf)) + + +* remove applications and allocations ([66b4cf8](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/66b4cf8542b1e8c16346861ceed2833d9a56f35f)) + +## [26.6.6](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v26.6.5...v26.6.6) (2022-12-12) + ## [26.6.5](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v26.6.4...v26.6.5) (2022-12-05) ## [26.6.4](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v26.6.3...v26.6.4) (2022-12-02) diff --git a/config/settings.yml b/config/settings.yml index e714cd3e9..8b5c96e54 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -276,16 +276,8 @@ user-defaults: show-sex: false exam-office-get-synced: true exam-office-get-labels: true + prefers-postal: true -# During central allocations lecturer-given ratings of applications (as -# ExamGrades) are combined with a central priority. -# This encodes the weight of the lecturer ratings on the same scale as the -# centrally supplied priorities. -allocation-grade-scale: 25 -# This encodes, as a proportion of the number of places, how many -# ordinal places lecturer ratings may move students up or down when -# central priorities are supplied as ordered list. -allocation-grade-ordinal-proportion: 0.075 instance-id: "_env:INSTANCE_ID:instance" ribbon: "_env:RIBBON:" diff --git a/messages/button/de.msg b/messages/button/de.msg index 3d6df1522..a0e59982a 100644 --- a/messages/button/de.msg +++ b/messages/button/de.msg @@ -4,4 +4,5 @@ AmbiguousButtons: Mehrere Submit-Buttons aktiv WrongButtonValue: Submit-Button hat falschen Wert -MultipleButtonValues: Submit-Button hat mehrere Werte \ No newline at end of file +MultipleButtonValues: Submit-Button hat mehrere Werte +BtnFormOutdated: Knopfdruck verworfen wegen zwischenzeitlicher Datenänderungen \ No newline at end of file diff --git a/messages/button/en.msg b/messages/button/en.msg index d2a12f40f..4f714d799 100644 --- a/messages/button/en.msg +++ b/messages/button/en.msg @@ -5,3 +5,4 @@ AmbiguousButtons: Multiple active submit buttons WrongButtonValue: Submit button has wrong value MultipleButtonValues: Submit button has multiple values +BtnFormOutdated: Button ignored due to interim data changes \ No newline at end of file diff --git a/messages/faq/de-de-formal.msg b/messages/faq/de-de-formal.msg index de1ba1cc2..75427b0e1 100644 --- a/messages/faq/de-de-formal.msg +++ b/messages/faq/de-de-formal.msg @@ -8,5 +8,4 @@ FAQCampusCantLogin: Ich kann mich mit meiner Fraport AG Kennung (Büko-Login) ni FAQCourseCorrectorsTutors: Wie kann ich Tutoren oder Korrektoren für meinen Kurs konfigurieren? FAQNotLecturerHowToCreateCourses: Wie kann ich einen neuen Kurs anlegen? FAQExamPoints: Warum kann ich bei meiner Klausur keine Punkte eintragen? -FAQInvalidCredentialsAdAccountDisabled: Ich kann mich nicht anmelden und bekomme die Meldung „Benutzereintrag gesperrt“ -FAQAllocationNoPlaces: Ich habe über eine Zentralanmeldung keine Plätze/nicht die Plätze, die ich möchte, erhalten \ No newline at end of file +FAQInvalidCredentialsAdAccountDisabled: Ich kann mich nicht anmelden und bekomme die Meldung „Benutzereintrag gesperrt“ \ No newline at end of file diff --git a/messages/faq/en-eu.msg b/messages/faq/en-eu.msg index 182268d3f..2f40802c9 100644 --- a/messages/faq/en-eu.msg +++ b/messages/faq/en-eu.msg @@ -8,5 +8,4 @@ FAQCampusCantLogin: I can't log in using my Fraport AG credentials (Büko login) FAQCourseCorrectorsTutors: How can I add tutors or correctors to my course? FAQNotLecturerHowToCreateCourses: How can I create new courses? FAQExamPoints: Why can't I enter achievements for my exam as points? -FAQInvalidCredentialsAdAccountDisabled: I can't log in and am instead given the message “Account disabled” -FAQAllocationNoPlaces: I did not receive any places/the places I wanted from a central allocation \ No newline at end of file +FAQInvalidCredentialsAdAccountDisabled: I can't log in and am instead given the message “Account disabled” \ No newline at end of file diff --git a/messages/uniworx/categories/admin/de-de-formal.msg b/messages/uniworx/categories/admin/de-de-formal.msg index d11cce147..3de34f94f 100644 --- a/messages/uniworx/categories/admin/de-de-formal.msg +++ b/messages/uniworx/categories/admin/de-de-formal.msg @@ -79,7 +79,7 @@ StudyFeatureInferenceNoNameConflicts: Keine Konflikte beobachtet StudyFeatureInferenceNameConflictsHeading: Studiengangseinträge mit beobachteten Konflikten AdminHeading !ident-ok: Administration -AdminPageEmpty: Diese Seite soll eine Übersichtsseite für Administrator:innen werden. Aktuell finden sich hier nur Links zu wichtigen Administrator-Funktionalitäten. + BearerTokenImpersonate: Auftreten als BearerTokenImpersonateNone: Keine Änderung BearerTokenImpersonateSingle: Einzelner Benutzer/Einzelne Benutzerin @@ -94,3 +94,23 @@ BearerTokenArchiveName !ident-ok: tokens.zip TestDownloadDirect: Direkte Generierung TestDownloadInTransaction: Generierung während Datenbank-Transaktion TestDownloadFromDatabase: Generierung während Download aus Datenbank + +ProblemsHeading: Problemübersicht +ProblemsHeadingDrivers: Fahrberechtigungen +ProblemsAvsProblem: Synchronisation mit AVS/MoBaKo komplett fehlgeschlagen +ProblemsDriverSynch n@Int: #{tshow n} Diskrepanzen zwischen AVS und FRADrive +ProblemsDriverSynch0: Alle Sperrungen von Fahrberechtigungen sind im AVS eingetragen +ProblemsDriverSynch1: Alle gültigen Vorfeld-Fahrberechtigungen 'F' sind im AVS eingetragen +ProblemsDriverSynch2: Alle gültigen Rollfeld-Fahrberechtigungen 'R' sind im AVS eingetragen +ProblemsRDriversHaveFs: Alle Inhaber einer Rollfeld-Fahrberechtigung besitzen auch eine gültige Vorfeld-Fahrberechtigung +ProblemsDriversHaveAvsIds: Alle Inhaber einer Fahrberechtigung konnten einer AVS Identifikationsnummer zugeordnet werden +ProblemsHeadingUsers: Allgemein +ProblemsUsersAreReachable: Für alle Benutzer ist eine E-Mail oder postalische Adresse bekannt +ProblemsNoStalePrintJobs n@Integer: Alle Briefversandaufträge der vergangenen #{show n} Tage wurden von der Druckerei bestätigt +ProblemsUnreachableHeading: Unerreichbare Benutzer +ProblemsUnreachableBody: Benutzer ohne E-Mail oder Postadresse, welche z.B. bei ablaufenden Berechtigungen nicht benachrichtigt werden können: +ProblemsRWithoutFHeading: Fahrer mit R ohne F +ProblemsRWithoutFBody: Diese Fahrer sind wegen einer ungültigen Vorfeld-Fahrberechtigung komplett gesperrt, obwohl eine gültige Rollfeld-Fahrberechtigung besteht: +ProblemsNoAvsIdHeading: Fahrer ohne AVS-Id +ProblemsNoAvsIdBody: Fahrer mit gültiger Fahrberechtigung in FRADrive, welche trotzdem nicht fahren dürfen, da die Fahrberechtigung aufgrund einer unbekannten AVS Id nicht an die Ausweisstelle übermittelt werden konnte: +ProblemsAvsSynchHeading: Synchronisation AVS Fahrberechtigungen diff --git a/messages/uniworx/categories/admin/en-eu.msg b/messages/uniworx/categories/admin/en-eu.msg index 25d9dcff0..37cca0d0f 100644 --- a/messages/uniworx/categories/admin/en-eu.msg +++ b/messages/uniworx/categories/admin/en-eu.msg @@ -79,7 +79,6 @@ StudyFeatureInferenceNoNameConflicts: No observed conflicts StudyFeatureInferenceNameConflictsHeading: Fields of study with observed conflicts AdminHeading: Administration -AdminPageEmpty: This page shall provide an overview for administrators in the future. For now there are only links to important administrator-functions. BearerTokenImpersonate: Impersonate BearerTokenImpersonateNone: No one @@ -95,3 +94,23 @@ BearerTokenArchiveName: tokens.zip TestDownloadDirect: Direct generation TestDownloadInTransaction: Generate during database transaction TestDownloadFromDatabase: Generate while streaming from database + +ProblemsHeading: Overview Problems +ProblemsHeadingDrivers: Driving Licences +ProblemsAvsProblem: Synchronisation with AVS/MoBaKo failed entirely +ProblemsDriverSynch n: #{tshow n} mismatches between AVS and FRADrive +ProblemsDriverSynch0: All revocations of driving licences were successfully registered with AVS +ProblemsDriverSynch1: All valid apron driving licences 'F' were successfully registered with AVS +ProblemsDriverSynch2: All valid maneuvering area driving licences 'R' were successfully registered with AVS +ProblemsRDriversHaveFs: All driving licence 'R' holders also have a valid 'F' licence +ProblemsDriversHaveAvsIds: All driving licence holder could be matched with their AVS id +ProblemsHeadingUsers: Miscellaneous +ProblemsUsersAreReachable: Either Email or postal address is known for all users +ProblemsNoStalePrintJobs n: All requests for letter mailing within the last #{show n} days were acknowledged as printed by the airport printing center +ProblemsUnreachableHeading: Unreachable Users +ProblemsUnreachableBody: Users without Email nor postal address, who thus cannot be notified about expiring qualifications: +ProblemsRWithoutFHeading: Drivers having 'R' but not 'F' +ProblemsRWithoutFBody: Drivers without apron driving licence are prohibited from driving, even if they own a valid maneuvering driving licence: +ProblemsNoAvsIdHeading: Drivers without AVS id +ProblemsNoAvsIdBody: Drivers having a valid apron driving licence within FRADrive only, but who may not drive since a missing AVS id prevents communication of the driving licence to AVS: +ProblemsAvsSynchHeading: Synchronisation AVS Driving Licences diff --git a/messages/uniworx/categories/authorization/de-de-formal.msg b/messages/uniworx/categories/authorization/de-de-formal.msg index 15d5204e6..a5e4e744c 100644 --- a/messages/uniworx/categories/authorization/de-de-formal.msg +++ b/messages/uniworx/categories/authorization/de-de-formal.msg @@ -30,10 +30,8 @@ UnauthorizedSystemExamOffice: Sie sind nicht mit systemweiter Prüfungsverwaltun UnauthorizedSystemPrinter: Sie sind nicht mit systemweitem Druck und Briefversand beauftragt. UnauthorizedExternalExamExamOffice: Es existieren keine Prüfungsergebnisse für Nutzer:innen, für die Sie mit der Prüfungsverwaltung beauftragt sind. UnauthorizedEvaluation: Sie sind nicht mit der Kursumfragenverwaltung beauftragt. -UnauthorizedAllocationAdmin: Sie sind nicht mit der Administration von Zentralanmeldungen beauftragt. UnauthorizedSchoolLecturer: Sie sind nicht als Veranstalter:in für dieses Institut eingetragen. UnauthorizedLecturer: Sie sind nicht als Veranstalter:in für diese Veranstaltung eingetragen. -UnauthorizedAllocationLecturer: Sie sind nicht als Veranstalter:in für eine Veranstaltung dieser Zentralanmeldung eingetragen. UnauthorizedCorrector: Sie sind nicht als Korrektor:in für diese Veranstaltung eingetragen. UnauthorizedSheetCorrector: Sie sind nicht als Korrektor:in für dieses Übungsblatt eingetragen. UnauthorizedExamCorrector: Sie sind nicht als Korrektor:in für diese Prüfung eingetragen. @@ -41,19 +39,14 @@ UnauthorizedCorrectorAny: Sie sind nicht als Korrektor:in für eine Veranstaltun UnauthorizedRegistered: Sie sind nicht als Teilnehmer:in für diese Veranstaltung registriert. UnauthorizedRegisteredExam: Sie sind nicht als Teilnehmer:in für diese Prüfung registriert. UnauthorizedRegisteredAnyExam: Sie sind nicht als Teilnehmer:in für eine Prüfung registriert. -UnauthorizedAllocationRegistered: Sie sind nicht als Teilnehmer:in für diese Zentralanmeldung registriert. UnauthorizedExamResult: Sie haben keine Ergebnisse in dieser Prüfung. UnauthorizedExamOccurrenceRegistration: Anmeldung zur Prüfung erfolgt nicht inkl. Raum/Termin. UnauthorizedExternalExamResult: Sie haben keine Ergebnisse in dieser Prüfung. UnauthorizedParticipant: Angegebener Benutzer/Angegebene Benutzerin ist nicht als Teilnehmer:in dieser Veranstaltung registriert. UnauthorizedParticipantSelf: Sie sind nicht Teilnehmer:in dieser Veranstaltung. -UnauthorizedApplicant: Angegebener Benutzer/Angegebene Benutzerin hat sich nicht für diese Veranstaltung beworben. -UnauthorizedApplicantSelf: Sie sind nicht Bewerber:in für diese Veranstaltung. UnauthorizedCourseTime: Dieser Kurs ist momentan nicht freigegeben. UnauthorizedCourseRegistrationTime: Dieser Kurs erlaubt momentan keine Anmeldungen. -UnauthorizedAllocationRegisterTime: Diese Zentralanmeldung erlaubt momentan keine Bewerbungen. UnauthorizedSheetTime: Dieses Übungsblatt ist momentan nicht freigegeben. -UnauthorizedApplicationTime: Diese Bewerbung ist momentan nicht freigegeben. UnauthorizedMaterialTime: Dieses Material ist momentan nicht freigegeben. UnauthorizedTutorialTime: Dieses Tutorium erlaubt momentan keine Anmeldungen. UnauthorizedCourseNewsTime: Diese Nachricht ist momentan nicht freigegeben. @@ -84,9 +77,6 @@ UnauthorizedExternalExamLecturer: Sie sind nicht als Prüfer:in für diese exter UnauthorizedSubmissionSubmissionGroup: Sie sind nicht Mitglied in einer der registrierten Abgabegruppen, die an dieser Abgabe beteiligt sind UnauthorizedSheetSubmissionGroup: Sie sind nicht Mitglied in einer registrierten Abgabegruppe -UnauthorizedAllocatedCourseRegister: Direkte Anmeldungen zum Kurs sind aufgrund einer Zentralanmeldung aktuell nicht gestattet -UnauthorizedAllocatedCourseDeregister: Abmeldungen vom Kurs sind aufgrund einer Zentralanmeldung aktuell nicht gestattet -UnauthorizedAllocatedCourseDelete: Kurse, die an einer Zentralanmeldung teilnehmen, dürfen nicht gelöscht werden UnauthorizedWorkflowInitiate: Sie dürfen keinen neuen laufenden Workflow initiieren UnauthorizedWorkflowWrite: Sie dürfen aktuell keinen Zustandsübergang im Workflow auslösen UnauthorizedWorkflowRead: Der Workflow enthält aktuell keine Zustände oder Daten die Sie einsehen dürfen diff --git a/messages/uniworx/categories/authorization/en-eu.msg b/messages/uniworx/categories/authorization/en-eu.msg index 79a050879..489a2e6ca 100644 --- a/messages/uniworx/categories/authorization/en-eu.msg +++ b/messages/uniworx/categories/authorization/en-eu.msg @@ -25,7 +25,6 @@ UnauthorizedSchoolAdmin: You are no administrator for this department. UnauthorizedAdminEscalation: You aren't an administrator for all departments for which this user is an administrator. UnauthorizedExamOffice: You are not part of an exam office. UnauthorizedEvaluation: You are not charged with course evaluation. -UnauthorizedAllocationAdmin: You are not charged with the administration of central allocations. UnauthorizedExamExamOffice: You are not part of the appropriate exam office for any of the participants of this exam. UnauthorizedSchoolExamOffice: You are not part of an exam office for this school. UnauthorizedSystemExamOffice: You are not charged with system wide exam administration. @@ -33,7 +32,6 @@ UnauthorizedSystemPrinter: You are not charged with system wide letter printing. UnauthorizedExternalExamExamOffice: You are not part of the appropriate exam office for any of the participants of this exam. UnauthorizedSchoolLecturer: You are no lecturer for this department. UnauthorizedLecturer: You are no administrator for this course. -UnauthorizedAllocationLecturer: You are no administrator for any of the courses of this central allocation. UnauthorizedCorrector: You are no sheet corrector for this course. UnauthorizedSheetCorrector: You are no corrector for this sheet. UnauthorizedExamCorrector: You are no corrector for this exam. @@ -41,19 +39,14 @@ UnauthorizedCorrectorAny: You are no corrector for any course. UnauthorizedRegistered: You are no participant in this course. UnauthorizedRegisteredExam: You are not registered for this exam. UnauthorizedRegisteredAnyExam: You are not registered for an exam. -UnauthorizedAllocationRegistered: You are no participant in this central allocation. UnauthorizedExamResult: You have no results in this exam. UnauthorizedExamOccurrenceRegistration: Registration for exam is not done including occurrence/room. UnauthorizedExternalExamResult: You have no results in this exam. UnauthorizedParticipant: The specified user is no participant of this course. UnauthorizedParticipantSelf: You are no participant of this course. -UnauthorizedApplicant: The specified user is no applicant for this course. -UnauthorizedApplicantSelf: You are no applicant for this course. UnauthorizedCourseTime: This course is not currently available. UnauthorizedCourseRegistrationTime: This course does not currently allow enrollment. -UnauthorizedAllocationRegisterTime: This central allocation does not currently allow applications. UnauthorizedSheetTime: This sheet is not currently available. -UnauthorizedApplicationTime: This allocation is not currently available. UnauthorizedMaterialTime: This course material is not currently available. UnauthorizedTutorialTime: This tutorial does not currently allow registration. UnauthorizedCourseNewsTime: This news item is not currently available. @@ -84,9 +77,6 @@ UnauthorizedExternalExamLecturer: You are not an associated person for this exte UnauthorizedSubmissionSubmissionGroup: You are not member in any of the submission groups for this submission UnauthorizedSheetSubmissionGroup: You are not member in any submission group -UnauthorizedAllocatedCourseRegister: Direct enrollment to this course is currently not allowed due to participation in a central allocation -UnauthorizedAllocatedCourseDeregister: Deregistration from this course is currently not allowed due to participation in a central allocation -UnauthorizedAllocatedCourseDelete: Courses that participate in a central allocation may not be deleted UnauthorizedWorkflowInitiate: You currently may not initiate a new running workflow UnauthorizedWorkflowWrite: You are currently not allowed to initiate any state transition within the workflow UnauthorizedWorkflowRead: The workflow currently contains no states or data you are permitted to view diff --git a/messages/uniworx/categories/avs/de-de-formal.msg b/messages/uniworx/categories/avs/de-de-formal.msg index 169fd2987..62a4d8622 100644 --- a/messages/uniworx/categories/avs/de-de-formal.msg +++ b/messages/uniworx/categories/avs/de-de-formal.msg @@ -12,4 +12,13 @@ AvsVersionNo: Versionsnummer AvsQueryEmpty: Bitte mindestens ein Anfragefeld ausfüllen! AvsQueryStatusInvalid t@Text: Nur numerische IDs eingeben, durch Komma getrennt! Erhalten: #{show t} AvsLicence: Fahrberechtigung -AvsPersonNoNotId: AVS Personennummer dient zur menschlichen Kommunikation mit der Ausweisstelle und darf nicht verwechselt werden mit der maschinell verwendeten AVS Personen Id \ No newline at end of file +AvsPersonNoNotId: AVS Personennummer dient zur menschlichen Kommunikation mit der Ausweisstelle und darf nicht verwechselt werden mit der maschinell verwendeten AVS Personen Id +AvsTitleLicenceSynch: Abgleich Fahrberechtigungen zwischen AVS und FRADrive +BtnRevokeAvsLicences: Fahrberechtigungen im AVS sofort entziehen +BtnImportUnknownAvsIds: Daten unbekannter Personen importieren +AvsImportIDs n@Int m@Int: AVS Persondendaten importiert: #{show n}/#{show m} +RevokeUnknownLicencesOk: AVS Fahrberechtigungen unbekannter Fahrer wurden gesperrt +RevokeUnknownLicencesFail: Nicht alle AVS Fahrberechtigungen unbekannter Fahrer konnten entzogen werden, siehe Log für Details +AvsCommunicationError: AVS Schnittstelle lieferte einen unerwarteten Fehler. +LicenseTableChangeAvs: Im AVS ändern +LicenseTableChangeFDrive: In FRADrive ändern \ No newline at end of file diff --git a/messages/uniworx/categories/avs/en-eu.msg b/messages/uniworx/categories/avs/en-eu.msg index 3ee9a293e..4731dec69 100644 --- a/messages/uniworx/categories/avs/en-eu.msg +++ b/messages/uniworx/categories/avs/en-eu.msg @@ -12,4 +12,13 @@ AvsVersionNo: Version number AvsQueryEmpty: At least one query field must be filled! AvsQueryStatusInvalid t: Numeric IDs only, comma seperated! #{show t} AvsLicence: Driving Licence -AvsPersonNoNotId: AVS person number is used in human communication only and must not be mistaken for the AVS personen id used in machine communications \ No newline at end of file +AvsPersonNoNotId: AVS person number is used in human communication only and must not be mistaken for the AVS personen id used in machine communications +AvsTitleLicenceSynch: Synchronisation driving licences between AVS and FRADrive +BtnRevokeAvsLicences: Revoke AVS driving licences immediately +BtnImportUnknownAvsIds: Import unknown person data +AvsImportIDs n m: AVS person daten importet: #{show n}/#{show m} +RevokeUnknownLicencesOk: AVS driving licences of unknown drivers revoked +RevokeUnknownLicencesFail: Not all AVS driving licences of unknown drivers could be revoked, see log for details +AvsCommunicationError: AVS interface returned an unexpected error. +LicenseTableChangeAvs: Change in AVS +LicenseTableChangeFDrive: Change within FRADrive \ No newline at end of file diff --git a/messages/uniworx/categories/courses/allocation/de-de-formal.msg b/messages/uniworx/categories/courses/allocation/de-de-formal.msg deleted file mode 100644 index 0dce255ba..000000000 --- a/messages/uniworx/categories/courses/allocation/de-de-formal.msg +++ /dev/null @@ -1,265 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Winnie Ros -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -AllocationAcceptFormDoesNotMatchSession: Das Formular zum Akzeptieren der Vergabe wurde für ein anderes Vergabeergebnis erzeugt, als aktuell in Ihrer Session gespeichert ist. -AllocationAccepted: Zentralvergabe gespeichert. -HeadingAllocationAccept: Platzvergabe akzeptieren -AllocationAddUserUserNotFound: E-Mail Adresse konnte keinem Benutzer zugeordnet werden -AllocationAddUserUser: Benutzer:in -AllocationAddUserUserPlaceholder: E-Mail -AllocationAddUserTotalCoursesLessThanOne: Anzahl angefragter Plätze muss größer null sein -AllocationAddUserTotalCourses: Angefragte Plätze -AllocationAddUserSetPriority: Zentrale Dringlichkeit eintragen? -AllocationAddUserPriority: Zentrale Dringlichkeit -AllocationAddUserApplications: Bewerbungen/Bewertungen -AllocationAddUserTitle termText@Text ssh'@SchoolShorthand allocation@AllocationName: #{termText} - #{ssh'} - #{allocation}: Bewerber:in hinzufügen -AllocationAddUserShortTitle tid@TermId ssh@SchoolId ash@AllocationShorthand: #{tid}-#{ssh}-#{ash}: Bewerber:in hinzufügen -AllocationAddUserUserAdded: Bewerber:in erfolgreich zur Zentralanmeldung hinzugefügt -AllocationAddUserUserExists: Der/Die angegebene Benutzer/Benutzerin ist bereits ein/eine Bewerber/Bewerberin zur Zentralanmeldung -AllocationEditUserUserEdited: Bewerber:in erfolgreich bearbeitet -AllocationEditUserTitle termText@Text ssh@SchoolShorthand ash@AllocationShorthand userDisplayName@Text: #{termText} - #{ssh} - #{ash}, Bewerber:in bearbeiten: #{userDisplayName} -AllocationEditUserShortTitle tid@TermId ssh@SchoolId ash@AllocationShorthand userDisplayName@Text !ident-ok: #{tid}-#{ssh}-#{ash}: #{userDisplayName} -AllocationPriority: Priorität -CourseAllocationCourseAcceptsSubstitutesUntil: Akzeptiert Nachrücker:innen bis -CourseAllocationCourseAcceptsSubstitutesNever: Akzeptiert keine Nachrücker:innen -CourseAllocationApplicationInstructionsApplication: Anweisungen zur Bewerbung -CourseAllocationApplicationTemplateApplication: Bewerbungsvorlage(n) -CourseApplication: Bewerbung -AllocationCoursePriority i@Natural: #{i}. Wahl -AllocationCourseNoApplication: Keine Bewerbung -ApplicationPriority: Priorität -ApplicationVeto !ident-ok: Veto -ApplicationVetoTip: Bewerber:in mit Veto werden garantiert nicht dem Kurs zugeteilt -ApplicationRatingPoints: Bewertung -ApplicationRatingPointsTip: Bewerber:in mit 5.0 werden garantiert nicht dem Kurs zugeteilt -ApplicationRatingComment: Kommentar -ApplicationRatingCommentVisibleTip: Feedback an Bewerber:in -ApplicationRatingCommentInvisibleTip: Dient zunächst nur als Notiz für Kursverwalter:innen -ApplicationRatingSection: Bewertung -ApplicationRatingSectionSelfTip: Sie verfügen über hinreichende Authorisierung um sowohl die Bewerbung als auch ihre Bewertung zu editieren. -CourseApplicationExists: Sie haben sich bereits für diesen Kurs beworben -CourseApplicationCreated csh@CourseShorthand: Erfolgreich zu #{csh} beworben -CourseApplicationInvalidAction: Angegebene Aktion kann nicht durchgeführt werden -CourseApplicationEdited csh@CourseShorthand: Bewerbung zu #{csh} erfolgreich angepasst -CourseApplicationNotEdited csh@CourseShorthand: Bewerbung zu #{csh} hat sich nicht verändert -CourseApplicationRated: Bewertung erfolgreich angepasst -CourseApplicationRatingDeleted: Bewertung erfolgreich entfernt -CourseApplicationDeleted csh@CourseShorthand: Bewerbung zu #{csh} erfolgreich zurückgezogen -AllocationUsersMissingPriorities: Teilnehmer:innen ohne zentrale Dringlichkeit -AllocationUsersMissingPrioritiesTip: Es muss sichergestellt sein, dass keine Teilnehmer:innen unberechtigt aus der Zentralvergabe ausgeschlossen werden, indem ihnen keine zentrale Dringlichkeit zugewiesen wurde. -AllocationUsersMissingPrioritiesOk: Es wurde sichergestellt, dass es für jeden der genannten Benutzer:innen einen zulässigen Grund gibt, warum dieser nicht an der Zentralanmeldung teilnehmen sollte. -AllocationUsersMissingPrioritiesNotOk: Zentralvergabe kann nicht erfolgen, solange nicht allen Teilnehmer:innen, die nicht explizit von der Vergabe ausgeschlossen wurden („Teilnehmer:in ohne zentrale Dringlichkeit”), eine zentrale Dringlichkeit zugewiesen wurde! -AllocationRestrictCourses: Kurse einschränken -AllocationRestrictCoursesTip: Sollen nur Plätze für eine Teilmenge von Kursen zugewiesen werden? So können u.A. Nachrücker:innen verteilt werden. Diese Funktionalität sollte nur verwendet werden, wenn manche Kurse aus zulässigen Gründen ausgeschlossen werden müssen; z.B. weil ein Seminar bereits ein Treffen zur Organisation hatte und nun keine weiteren Teilnehmer:innen mehr akzeptieren kann. -AllocationRestrictCoursesSelection: Kurse -AllocationRestrictCoursesSelectionTip: Teilnehmer:innen werden nur auf die Kurse verteilt, die hier angegeben werden. -AllocationOnlyCompute: Durch Senden dieses Formulars wird zunächst nur eine mögliche Zentralvergabe berechnet und zur Kontrolle temporär gespeichert. Es werden keine Änderungen am Stand der Datenbank vorgenommen oder Benachrichtigungen verschickt. -AllocationComputed: Eine mögliche Zentralvergabe wurde berechnet und in Ihrer Session gespeichert. Es wurden noch keine Änderungen vorgenommen! -HeadingAllocationCompute: Platzvergabe berechnen -HeadingAllocationInfo: Hinweise zum Ablauf einer Zentralanmeldung -AllocationAvailableCourses: Kurse -AllocationAppliedCourses: Bewerbungen -AllocationListTitle: Zentralanmeldungen -AllocationMissingPrioritiesIgnored: Bewerber:innen, für die keine zentrale Priorität angegeben wird, werden bei der Vergabe ignoriert! -AllocationPriorities: Zentrale Dringlichkeiten -AllocationPrioritiesTitle tid@TermId ssh@SchoolId ash@AllocationShorthand: #{tid}-#{ssh}-#{ash}: Zentrale Dringlichkeiten -AllocationPrioritiesFile: CSV-Datei -AllocationPrioritiesSunk num@Int64: Zentrale Prioritäten für #{num} Bewerber erfolgreich hinterlegt -AllocationPrioritiesMissing num@Int64: Für #{num} #{pluralDE num "Bewerber:in" "Bewerber:innen"} ist keine zentrale Priorität hinterlegt, da in der hochgeladenen CSV-Datei die #{pluralDE num "entsprechende Matrikelnummer" "entsprechenden Matrikelnummern"} nicht gefunden #{pluralDE num "wurde" "wurden"} -AllocationPrioritiesMode: Modus -AllocationTotalCoursesNegative: Gewünschte Kursanzahl muss größer null sein -AllocationTotalCourses: Gewünschte Anzahl von Kursen -AllocationTotalCoursesTip: Sie werden im Laufe dieser Zentralanmeldung maximal so vielen Kursen zugeteilt, wie Sie hier angeben -AllocationRegistered: Teilnahme an der Zentralanmeldung erfolgreich registriert -AllocationRegistrationEdited: Einstellungen zur Teilnahme an der Zentralanmeldung erfolgreich angepasst -AllocationTitle termText@Text ssh'@SchoolShorthand allocation@AllocationName !ident-ok: #{termText} - #{ssh'}: #{allocation} -AllocationShortTitle termText@Text ssh'@SchoolShorthand ash@AllocationShorthand !ident-ok: #{termText} - #{ssh'} - #{ash} -AllocationNotificationNewCourse: Benachrichtigung bei neuen Kursen -AllocationNotificationNewCourseTip: Wollen Sie per E-Mail benachrichtigt werden, wenn für diese Zentralanmeldung ein neuer Kurs eingetragen wird? Dies überschreibt die systemweite Einstellung in "Anpassen". -AllocationNotificationNewCourseSuccessForceOn: Sie werden benachrichtigt, wenn ein neuer Kurs eingetragen wird -AllocationNotificationNewCourseSuccessForceOff: Sie werden nicht benachrichtigt, wenn ein neuer Kurs eingetragen wird -AllocationNotificationNewCourseCurrentlyOff: Aktuell würden Sie keine Benachrichtigung erhalten. -AllocationNotificationNewCourseCurrentlyOn: Aktuell würden Sie benachrichtigt werden. -CsvColumnAllocationUserSurname: Nachname(n) des/der Bewerbers/Bewerberin -CsvColumnAllocationUserFirstName: Vorname(n) des/der Bewerbers/Bewerberin -CsvColumnAllocationUserName: Voller Name des/der Bewerbers/Bewerberin -CsvColumnAllocationUserMatriculation: Matrikelnummer des/der Bewerbers/Bewerberin -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 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]) -AllocationUsersCsvName tid@TermId ssh@SchoolId ash@AllocationShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase ash}-bewerber:in -AllocationUserNewMatches: Neue Zuteilungen -AllocationUsers: Bewerber:innen -AllocationUsersTitle tid@TermId ssh@SchoolId ash@AllocationShorthand: #{tid}-#{ssh}-#{ash}: Bewerber:innen - -#templates allocation/show/course -AllocationNoApplication: Keine Bewerbung -CourseAllocationCourseParticipants: Teilnehmer:innen -CourseMembersCount n@Int !ident-ok: #{n} -CourseMembersCountLimited n@Int max@Int !ident-ok: #{n}/#{max} -CourseAllocationCourseRatings ratings@Word64 vetos@Word64: #{ratings} #{pluralDE ratings "Bewertung" "Bewertungen"} (#{vetos} #{pluralDE vetos "Veto" "Vetos"}) - -#templates allocation/accept -ComputedAllocation: Berechnete Vergabe -AllocationUsersCount: Teilnehmer:innen -AllocationCoursesCount: Kurse -AllocationRequestedPlaces: Angefragte Plätze -AllocationOfferedPlaces: Angebotene Plätze -AllocationUnmatchedUsers: Teilnehmer:innen ohne zugeteilte Plätze -AllocationUnmatchedCourses: Kurse ohne zugeteilte Teilnehmer:innen -AllocationTime: Zeitpunkt der Vergabe -AllocationCourseEligible: Berücksichtigt -AllocationMatchedUsers: Neu zugeteilt - -#templates allocation/show -AllocationSchool: Institut -AllocationSemester !ident-ok: Semester -AllocationDescription: Beschreibung -AllocationStaffDescription: Beschreibung für Dozierende -AllocationStaffRegisterFrom: Eintragung der Kurse ab -AllocationStaffRegisterTo: Eintragung der Kurse bis -AllocationStaffRegister: Eintragung der Kurse -AllocationStaffAllocationFrom: Bewertung der Bewerbungen ab -AllocationStaffAllocationTo: Bewertung der Bewerbungen bis -AllocationStaffAllocation: Bewertung der Bewerbungen -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: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 -AllocationNextSubstitutesDeadline: Nächster Kurs akzeptiert Nachrücker:innen bis -AllocationNextSubstitutesDeadlineNever: Keine Kurse akzeptieren mehr Nachrücker:innen -AllocationFreeCapacity: Freie Plätze -AllocationOverrideDeregister: Abmeldung von den Kursen nur bis -AllocationParticipation: Teilnahme an der Zentralanmeldung -AllocationParticipationLoginFirst: Um an der Zentralanmeldung teilzunehmen, loggen Sie sich bitte zunächst ein. -AllocationNotificationLoginFirst: Um Ihre Benachrichtigungseinstellungen zu ändern, loggen Sie sich bitte zunächst ein. -AllocationCourses: Kurse dieser Zentralanmeldung -AllocationPriorityTip: Kurse, denen Sie eine höhere Priorität zuteilen, werden bei der Platzvergabe präferiert. -AllocationPriorityRelative: Die absoluten Prioritäts-Werte sind bedeutungslos, es wird nur jeweils betrachtet ob ein Kurs höhere Priorität hat als ein anderer. -ApplicationEditTip: Während des Bewerbungszeitraums können eigene Bewerbungen beliebig angepasst und auch wieder zurückgezogen werden. -AllocationNumCoursesAvailableApplied available@Int applied@Int: Sie haben sich bisher für #{applied}/#{available} #{pluralDE applied "Kurs" "Kursen"} beworben - -AllocationCourseRestrictionDontRestrict: Nicht einschränken -AllocationCourseRestrictionSubstitutes: Kurse, die aktuell Nachrücker akzeptieren -AllocationCourseRestrictionCustom: Benutzerdefiniert - -AllocationName !ident-ok: Name -Allocation: Zentralanmeldung -AllocationActive: Aktiv -AllocationUsersApplied: Bewerbungen -AllocationUsersAssigned: Zuweisungen -AllocationUsersVetoed !ident-ok: Vetos -AllocationUsersRequested: Angefragte Plätze -AllocationUsersPriority: Zentrale Dringlichkeit - -AllocationPriorityNumericValues: Numerische Werte -AllocationPriorityNumericValuesTip: Komma-separierte ganze Zahlen -AllocationPriorityNumericNoValues: Es wurden keine numerischen Werte angegeben -AllocationPriorityNumericNoParse val@Text: Ganze Zahl konnte nicht geparst werden: „#{val}“ -AllocationPriorityOrdinalValueNegative: Sortier-Index darf nicht negativ sein -AllocationPriorityOrdinalValue: Sortier-Index -AllocationPriorityOrdinalValueTip: Null entspricht dem ersten Eintrag der Liste, höhere Indizes entsprechen später in der sortierten Liste vorkommenden Bewerbern und damit einer höheren Dringlichkeit -AllocationPriorityNumeric': Numerisch -AllocationPriorityOrdinal': Nach Sortierung -AllocationPrioritiesNumeric: Numerische Dringlichkeiten -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 -AllocationFormShorthand: Kürzel -AllocationFormName !ident-ok: Name -AllocationFormLegacyShorthands: Alte Kürzel -AllocationFormLegacyShorthandsTip: Zentralanmeldungen werden gelegentlich mit vorherigen Versionen in Bezug gesetzt (z.B. um Kapazität/Auslastung zu vergleichen). Dies geschieht anhand des Kürzels, bzw. anhand der hier angegebenen alten Kürzel. (Komma-separierte Liste) -AllocationFormDescriptions: Beschreibungen -AllocationFormDescription: Beschreibung -AllocationFormDescriptionTip: Wird allen Benutzern auf der Seite der Zentralanmeldung angezeigt -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: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 -AllocationFormStaffAllocationFromTip: Ab diesem Zeitpunkt dürfen Kursverwalter:innen Bewerbungen zu ihren Kursen bewerten. Falls kein Zeitpunkt angegeben wird, ist dies nie gestattet. -AllocationFormStaffAllocationTo: Bewertung der Bewerbungen bis -AllocationFormStaffAllocationToTip: Falls kein Zeitpunkt angegeben wird, ist die Bewertung zunächst für immer möglich. -AllocationFormRegisterFrom: Bewerbung ab -AllocationFormRegisterFromTip: Ab diesem Zeitpunkt dürfen alle Benutzer Bewerbungen zu den teilnehmenden Kursen hinterlegen. Falls kein Zeitpunkt angegeben wird, ist dies nie gestattet. -AllocationFormRegisterTo: Bewerbung bis -AllocationFormRegisterToTip: Falls kein Zeitpunkt angegeben wird, ist Bewerbung zunächst für immer möglich. -AllocationFormRegisterByStaffFrom: An- und Abmeldung durch Kursverwalter:innen ab -AllocationFormRegisterByStaffFromTip: Ab diesem Zeitpunkt dürfen Kursverwalter:innen Studierende direkt zu ihren Kursen anmelden. Falls kein Zeitpunkt angegeben wird, ist dies für an der Zentralanmeldung teilnehmende Kurse nie gestattet. -AllocationFormRegisterByStaffTo: An- und Abmeldung durch Kursverwalter:innen bis -AllocationFormRegisterByStaffToTip: Falls kein Zeitpunkt angegeben wird, ist An- und Abmeldung zunächst für immer möglich. -AllocationFormRegisterByCourse: An- und Abmeldung nach Kursregeln ab -AllocationFormRegisterByCourseTip: Ab diesem Zeitpunkt folgt selbstständige An- und Abmeldung zu bzw. von den teilnehmenden Kursen wieder den Regeln des jeweiligen Kurses. Falls kein Zeitpunkt angegeben wird, ist direkte An- und Abmeldung nie gestattet. -AllocationFormOverrideDeregister: Direkte Abmeldung frühestens ab -AllocationFormOverrideDeregisterTip: Bis zu diesem Zeitpunkt dürfen Teilnehmende sich nicht von teilnehmenden Kursen abmelden, selbst wenn dies nach Kursregeln gestattet wäre. Falls kein Zeitpunkt angegeben wird, ist Abmeldung nach Kursregeln gestattet (bzw. ab „_{MsgAllocationFormRegisterByCourse}“). - -AllocationFormStaffRegisterToMustBeAfterFrom: „_{MsgAllocationFormStaffRegisterTo}“ muss nach „_{MsgAllocationFormStaffRegisterFrom}“ liegen. -AllocationFormStaffAllocationToMustBeAfterFrom: „_{MsgAllocationFormStaffAllocationTo}“ muss nach „_{MsgAllocationFormStaffAllocationFrom}“ liegen. -AllocationFormRegisterToMustBeAfterFrom: „_{MsgAllocationFormRegisterTo}“ muss nach „_{MsgAllocationFormRegisterFrom}“ liegen. -AllocationFormRegisterByStaffToMustBeAfterFrom: „_{MsgAllocationFormRegisterByStaffTo}“ muss nach „_{MsgAllocationFormRegisterByStaffFrom}“ liegen. -AllocationFormStaffRegisterFromMustBeBeforeStaffAllocationFrom: „_{MsgAllocationFormStaffRegisterFrom}“ muss vor „_{MsgAllocationFormStaffAllocationFrom}“ liegen. -AllocationFormStaffRegisterToMustBeBeforeStaffAllocationTo: „_{MsgAllocationFormStaffRegisterTo}“ muss vor „_{MsgAllocationFormStaffAllocationTo}“ liegen. -AllocationFormStaffRegisterFromMustBeBeforeRegisterFrom: „_{MsgAllocationFormStaffRegisterFrom}“ muss vor „_{MsgAllocationFormRegisterFrom}“ liegen. -AllocationFormStaffRegisterToMustBeBeforeRegisterTo: „_{MsgAllocationFormStaffRegisterTo}“ muss vor „_{MsgAllocationFormRegisterTo}“ liegen. -AllocationFormStaffAllocationToShouldBeBeforeRegisterByStaffFrom: „_{MsgAllocationFormStaffAllocationTo}“ sollte vor „_{MsgAllocationFormRegisterByStaffFrom}“ liegen. -AllocationFormStaffAllocationToShouldBeBeforeRegisterByCourse: „_{MsgAllocationFormStaffAllocationTo}“ sollte vor „_{MsgAllocationFormRegisterByCourse}“ liegen. -AllocationFormStaffAllocationToShouldBeAfterRegisterTo: „_{MsgAllocationFormStaffAllocationTo}“ sollte nach „_{MsgAllocationFormRegisterTo}“ liegen. -AllocationFormRegisterToShouldBeBeforeRegisterByStaffFrom: „_{MsgAllocationFormRegisterTo}“ sollte vor „_{MsgAllocationFormRegisterByStaffFrom}“ liegen. -AllocationFormRegisterToShouldBeBeforeRegisterByCourse: „_{MsgAllocationFormRegisterTo}“ sollte vor „_{MsgAllocationFormRegisterByCourse}“ liegen. -AllocationFormRegisterByStaffFromShouldBeBeforeRegisterByCourse: „_{MsgAllocationFormRegisterByStaffFrom}“ sollte vor „_{MsgAllocationFormRegisterByCourse}“ liegen. - -AllocationNewSuccess: Zentralanmeldung erfolgreich angelegt -AllocationNewAlreadyExists: Eine Zentralanmeldung mit diesem Namen/Kürzel existiert bereits für diese Kombination aus Semester und Institut. - -TitleAllocationNew: Neue Zentralanmeldung anlegen - -TitleAllocationEdit tid@TermId ssh@SchoolId ash@AllocationShorthand: #{toPathPiece tid}-#{ssh}-#{ash}: Zentralanmeldung bearbeiten -HeadingAllocationEdit tid@TermId ssh@SchoolId aname@AllocationName: Zentralanmeldung bearbeiten: _{ShortTermIdentifier (unTermKey tid)}, #{ssh}, #{aname} - -AllocationEditSuccess: Zentralanmeldung erfolgreich bearbeitet -AllocationEditAlreadyExists: Eine andere Zentralanmeldung mit diesem Namen/Kürzel existiert bereits für diese Kombination aus Semester und Institut. - -TitleAllocationMatchings tid@TermId ssh@SchoolId ash@AllocationShorthand: #{toPathPiece tid}-#{ssh}-#{ash}: Verteilungen -HeadingAllocationMatchings tid@TermId ssh@SchoolId aname@AllocationName: Verteilungen: _{ShortTermIdentifier (unTermKey tid)}, #{ssh}, #{aname} -AllocationMatchingsNone: Noch keine Verteilungen -AllocationMatchingsLog: Protokoll -AllocationMatchingsTime: Zeitpunkt -AllocationMatchingsFingerprint: Prüfsumme - -AllocationMatchingLogFileName tid@TermId ssh@SchoolId ash@AllocationShorthand cID@CryptoUUIDAllocationMatching: za-verteilung.#{toPathPiece tid}-#{ssh}-#{ash}.#{toPathPiece cID}.log - -AllocationUserDeleteQuestion: Wollen Sie den/die unten aufgeführten Benutzer:in wirklich aus der Zentralanmeldung entfernen? -AllocationUserDeleted: Benutzer:in erfolgreich entfernt -AllocationApplicationsCount n@Word64: #{n} #{pluralDE n "Bewerbung" "Bewerbungen"} -AllocationAllocationsCount n@Word64: #{n} #{pluralDE n "Zuweisung" "Zuweisungen"} -AllocationCourseHasRatings ratings@Word64 vetos@Word64: Dieser Kurs hat bereits #{ratings} #{pluralDE ratings "Bewertung" "Bewertungen"} (#{vetos} #{pluralDE vetos "Veto" "Vetos"}) - -AllocationCourseParticipantFormCourse: Kurs -AllocationCourseParticipantFormIsRegistered: Registriert? -AllocationCourseParticipantFormIsSelfInflicted: Selbstverschuldet abgemeldet (Grund)? -AllocationCourseParticipantFormDefaultReason: Kein Grund - -AllocationUserCourseParticipantFormTitle: Anmeldungen -AllocationUserAllocationUserFormTitle: Teilnahme an der Zentralanmeldung \ No newline at end of file diff --git a/messages/uniworx/categories/courses/allocation/en-eu.msg b/messages/uniworx/categories/courses/allocation/en-eu.msg deleted file mode 100644 index 22ab907fe..000000000 --- a/messages/uniworx/categories/courses/allocation/en-eu.msg +++ /dev/null @@ -1,264 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Winnie Ros -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -AllocationAcceptFormDoesNotMatchSession: The form to accept the computed allocation was generated for a different result than the one, that is currently saved in your session. -AllocationAccepted: Successfully saved allocation -HeadingAllocationAccept: Accept allocation -AllocationAddUserUserNotFound: Email could not be resolved to an user -AllocationAddUserUser: User -AllocationAddUserUserPlaceholder: Email -AllocationAddUserTotalCoursesLessThanOne: Number of requested courses needs to be greater than zero -AllocationAddUserTotalCourses: Requested courses -AllocationAddUserSetPriority: Set central priority? -AllocationAddUserPriority: Central priority -AllocationAddUserApplications: Applications/Ratings -AllocationAddUserTitle termText ssh' allocation: #{termText} - #{ssh'} - #{allocation}: Add applicant -AllocationAddUserShortTitle tid@TermId ssh@SchoolId ash@AllocationShorthand: #{tid}-#{ssh}-#{ash}: Add applicant -AllocationAddUserUserAdded: Successfully added applicant to central allocation -AllocationAddUserUserExists: The specified user is already an applicant for the central allocation -AllocationEditUserUserEdited: Successfully edited applicant -AllocationEditUserTitle termText ssh ash userDisplayName: #{termText} - #{ssh} - #{ash}, Edit applicant: #{userDisplayName} -AllocationEditUserShortTitle tid ssh ash userDisplayName !ident-ok: #{tid}-#{ssh}-#{ash}: #{userDisplayName} -AllocationPriority: Priority -CourseAllocationCourseAcceptsSubstitutesUntil: Accepts substitutes until -CourseAllocationCourseAcceptsSubstitutesNever: Does not accept substitutes -CourseAllocationApplicationInstructionsApplication: Instructions for application -CourseAllocationApplicationTemplateApplication: Application template(s) -CourseApplication: Application -AllocationCoursePriority i: #{ordinalEN i} -AllocationCourseNoApplication: No -ApplicationPriority: Priority -ApplicationVeto: Veto -ApplicationVetoTip: Vetoed applicants will not be assigned to the course -ApplicationRatingPoints: Grading -ApplicationRatingPointsTip: Applicants graded 5.0 will not be assigned to the course -ApplicationRatingComment: Comment -ApplicationRatingCommentVisibleTip: Feedback for the applicant -ApplicationRatingCommentInvisibleTip: Currently only a note for course administrators -ApplicationRatingSection: Grading -ApplicationRatingSectionSelfTip: You are authorised to edit the application as well as it's grading. -CourseApplicationExists: You already applied for this course -CourseApplicationCreated csh: Successfully applied for #{csh} -CourseApplicationInvalidAction: Invalid action -CourseApplicationEdited csh: Successfully changed application for #{csh} -CourseApplicationNotEdited csh: Application for #{csh} not changed -CourseApplicationRated: Successfully edited rating -CourseApplicationRatingDeleted: Successfully deleted rating -CourseApplicationDeleted csh: Successfully withdrew application for #{csh} -AllocationUsersMissingPriorities: Participants without central priority -AllocationUsersMissingPrioritiesTip: Care must be taken, that no participant is excluded from the allocation by not having been assigned a central priority. -AllocationUsersMissingPrioritiesOk: It was ensured, that all participants mentioned above, are excluded from the allocation on valid grounds. -AllocationUsersMissingPrioritiesNotOk: Central allocation cannot occur until all participants, that were not excluded explicitly (“Participants without central priority”), have been assigned a central priority! -AllocationRestrictCourses: Restrict courses -AllocationRestrictCoursesTip: Should places be assigned only in a subset of courses? This functionality can be used to make alternate placements in the case that some participants withdraw from their assigned courses. This functionality should only be used to exclude courses on valid grounds. E.g. if a seminar already had a planning meeting and is thus unable to accept new participants. -AllocationRestrictCoursesSelection: Courses -AllocationRestrictCoursesSelectionTip: Participants will only be assigned to courses listed here. -AllocationOnlyCompute: By sending this form a possible allocation will be computed and saved temporarily. You can then check that the computed allocation is as expected. No changes will yet be made to the state of the database and no notifications will be sent. -AllocationComputed: A possible allocation has been computed and stored in your session. No changes have yet been made! -HeadingAllocationCompute: Compute allocation -HeadingAllocationInfo: Information regarding central allocations -AllocationAvailableCourses: Courses -AllocationAppliedCourses: Applications -AllocationListTitle: Central allocations -AllocationMissingPrioritiesIgnored: Applicants for whom no central priority has been registered will be ignored during assignment! -AllocationPriorities: Central priorities -AllocationPrioritiesTitle tid ssh ash: #{tid}-#{ssh}-#{ash}: Central priorities -AllocationPrioritiesFile: CSV file -AllocationPrioritiesSunk num: Successfully registered central priorities for #{num} #{pluralEN num "applicant" "applicants"} -AllocationPrioritiesMissing num: Could not register central priorities for #{num} #{pluralEN num "applicant" "applicants"} because their matriculation was not found in the uploaded CSV file -AllocationPrioritiesMode: Mode -AllocationTotalCoursesNegative: Requested number of placements must be greater than zero -AllocationTotalCourses: Requested number of placements -AllocationTotalCoursesTip: During the allocation process you will be placed in at most as many courses as specified -AllocationRegistered: Successfully registered participation in this central allocation -AllocationRegistrationEdited: Successfully edited registration for this central allocation -AllocationTitle termText ssh' allocation: #{termText} - #{ssh'}: #{allocation} -AllocationShortTitle termText ssh' ash: #{termText} - #{ssh'} - #{ash} -AllocationNotificationNewCourse: Notifications for new courses -AllocationNotificationNewCourseTip: Do you want to be notified if a new course is added to this central allocation? This overrides the system wide setting under “Settings”. -AllocationNotificationNewCourseSuccessForceOn: You will be notified if a new course is added -AllocationNotificationNewCourseSuccessForceOff: You will not be notified if a new course is added -AllocationNotificationNewCourseCurrentlyOff: Currently you would not receive a notification. -AllocationNotificationNewCourseCurrentlyOn: Currently you would be notified. -CsvColumnAllocationUserSurname: Applicant's surname(s) -CsvColumnAllocationUserFirstName: Applicants's first name(s) -CsvColumnAllocationUserName: Applicant's full name -CsvColumnAllocationUserMatriculation: Applicant's matriculation -CsvColumnAllocationUserStudyFeatures: Features of study -CsvColumnAllocationUserRequested: Maximum number of placements the applicant is prepared to accept -CsvColumnAllocationUserApplied: Number of applications the applicant has provided -CsvColumnAllocationUserVetos: Number of applications that have received a veto from a course administrator or have been rated with a grade that is equivalent to "failed" (5.0) -CsvColumnAllocationUserAssigned: Number of assignments the applicant has already received -CsvColumnAllocationUserNewAssigned: Number of assignments the applicant would receive, if the calculated matching is accepted -CsvColumnAllocationUserPriority: Central priority of this applicant; either a number based on the applicants position in the list sorted by priority (higher numbers mean a higher priority) or a comma-separated list of numerical priorities in square brackets (e.g. [1, 2, 3]) -AllocationUsersCsvName tid ssh ash: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase ash}-applicants -AllocationUserNewMatches: New allocations -AllocationUsers: Applicants -AllocationUsersTitle tid ssh ash: #{tid}-#{ssh}-#{ash}: Applicants - -#templates allocation/show/course -AllocationNoApplication: No application -CourseAllocationCourseParticipants: Participants -CourseMembersCount n: #{n} -CourseMembersCountLimited n max: #{n}/#{max} -CourseAllocationCourseRatings ratings vetos: #{ratings} #{pluralENs ratings "rating"} (#{vetos} #{pluralENs vetos "veto"}) - -#templates allocation/accept -ComputedAllocation: Computed allocation -AllocationUsersCount: Participants -AllocationCoursesCount: Courses -AllocationRequestedPlaces: Requested places -AllocationOfferedPlaces: Offered places -AllocationUnmatchedUsers: Participants without assigned places -AllocationUnmatchedCourses: Courses without assigned participants -AllocationTime: Time of allocation -AllocationCourseEligible: Considered -AllocationMatchedUsers: Newly assigned - -#templates allocation/show -AllocationSchool: Department -AllocationSemester: Semester -AllocationDescription: Description -AllocationStaffDescription: Staff description -AllocationStaffRegisterFrom: Registration of courses starts -AllocationStaffRegisterTo: Register courses until -AllocationStaffRegister: Registration of courses -AllocationStaffAllocationFrom: Grading of applications starts -AllocationStaffAllocationTo: Rating of applications until -AllocationStaffAllocation: Grading of applications -AllocationRegisterFrom: Application period start -AllocationRegister: Application period -AllocationRegisterClosed: This central allocation is currently closed. -AllocationRegisterOpensIn difftime: This central allocation is expected to open in #{difftime} -AllocationRegisterByStaff: Enrollment by course administrators -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 -AllocationNextSubstitutesDeadline: Next course accepts substitutes until -AllocationNextSubstitutesDeadlineNever: No course currently accepts substitutes -AllocationFreeCapacity: Free capacity -AllocationOverrideDeregister: Leaving courses only until -AllocationParticipation: Your participation in this central allocation -AllocationParticipationLoginFirst: To participate in this central allocation, please log in first -AllocationNotificationLoginFirst: To change your notification settings, please log in first. -AllocationCourses: Centrally allocated courses -AllocationPriorityTip: Courses to which you assign a higher priority are preferred during the allocation process. -AllocationPriorityRelative: The absolute priority values are meaningless. The only consideration is whether one course has a higher priority than another. -ApplicationEditTip: During the application period you may edit and retract your applications at will. -AllocationNumCoursesAvailableApplied available applied: You have applied for #{applied}/#{available} #{pluralEN applied "course" "courses"} - -AllocationCourseRestrictionDontRestrict: Don't restrict -AllocationCourseRestrictionSubstitutes: Courses which currently allow substitute registrations -AllocationCourseRestrictionCustom: Custom -AllocationName: Name -Allocation: Central allocation -AllocationActive: Active -AllocationUsersApplied: Applications -AllocationUsersAssigned: Assignments -AllocationUsersVetoed: Vetos -AllocationUsersRequested: Requested assignments -AllocationUsersPriority: Central priority - -AllocationPriorityNumericValues: Numerical values -AllocationPriorityNumericValuesTip: Comma separated whole numbers -AllocationPriorityNumericNoValues: No numerical values were provided -AllocationPriorityNumericNoParse val: Whole number could not be parsed: “#{val}” -AllocationPriorityOrdinalValueNegative: Sorting index may not be negative -AllocationPriorityOrdinalValue: Sorting index -AllocationPriorityOrdinalValueTip: Zero corresponds to the first entry in the list; higher indices correspond to applicants occurring later in the sorted list and thus to higher central priorities -AllocationPriorityNumeric': Numerical -AllocationPriorityOrdinal': Based on sorted list -AllocationPrioritiesNumeric: Numeric priorities -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 -AllocationFormShorthand: Shorthand -AllocationFormName: Name -AllocationFormLegacyShorthands: Legacy shorthands -AllocationFormLegacyShorthandsTip: Allocations are occasionally related to previous versions (e.g. to compare capacity/utilisation). This is done via their shorthand and via the legacy shorthands given here. (Comma-separated list) -AllocationFormDescriptions: Description -AllocationFormDescription: Description -AllocationFormDescriptionTip: Will be shown to all users on the page of the allocation -AllocationFormStaffDescription: Description for lecturers -AllocationFormStaffDescriptionTip: Will only be shown to (potential) lecturers; will be displayed both when creating a course and on the page of the allocation -AllocationFormDeadlines: Deadlines -AllocationFormStaffRegisterFrom: Register courses from -AllocationFormStaffRegisterFromTip: Starting at this time lecturers may register their courses for the allocation. If no timestamp is given, this will never be permitted. -AllocationFormStaffRegisterTo: Register courses until -AllocationFormStaffRegisterToTip: If no timestamp is given, registration will initially be possible forever. -AllocationFormStaffAllocationFrom: Rating of applications from -AllocationFormStaffAllocationFromTip: Starting at this time lecturers may rate applications for their courses. If no timestamp is given, this will never be permitted. -AllocationFormStaffAllocationTo: Rating of applications until -AllocationFormStaffAllocationToTip: If no timestamp is given, rating will initially be possible forever. -AllocationFormRegisterFrom: Application from -AllocationFormRegisterFromTip: Starting at this time all users may provide applications for courses participating in this allocation. If no timestamp is given, this will never be permitted. -AllocationFormRegisterTo: Application to -AllocationFormRegisterToTip: If no timestamp is given, application will initially be possible forever. -AllocationFormRegisterByStaffFrom: (De-)registration by lecturers from -AllocationFormRegisterByStaffFromTip: Starting at this time lecturers may (de-)register participants from/to their courses directly. If no timestamp is given, this will never be permitted. -AllocationFormRegisterByStaffTo: (De-)registration by lecturers until -AllocationFormRegisterByStaffToTip: If no timestamp is given, (de-)registration will initially be possible forever. -AllocationFormRegisterByCourse: (De-)registration according to course rules from -AllocationFormRegisterByCourseTip: Starting at this time users may (de-)register themselves from/to courses participating in the allocation according to the rules of the respective course. If no timestamp is given, direct (de-)registration will never be permitted. -AllocationFormOverrideDeregister: Direct deregistration from -AllocationFormOverrideDeregisterTip: Up to this time participants of courses participating in the allocation may not deregister themselves, even if it would be allowed according to course rules. If no timestamp is given, deregistration is allowed according to course rules (or as per “_{MsgAllocationFormRegisterByCourse}”). - -AllocationFormStaffRegisterToMustBeAfterFrom: “_{MsgAllocationFormStaffRegisterTo}” must be after “_{MsgAllocationFormStaffRegisterFrom}”. -AllocationFormStaffAllocationToMustBeAfterFrom: “_{MsgAllocationFormStaffAllocationTo}” must be after “_{MsgAllocationFormStaffAllocationFrom}”. -AllocationFormRegisterToMustBeAfterFrom: “_{MsgAllocationFormRegisterTo}” must be after “_{MsgAllocationFormRegisterFrom}”. -AllocationFormRegisterByStaffToMustBeAfterFrom: “_{MsgAllocationFormRegisterByStaffTo}” must be after “_{MsgAllocationFormRegisterByStaffFrom}”. -AllocationFormStaffRegisterFromMustBeBeforeStaffAllocationFrom: “_{MsgAllocationFormStaffRegisterFrom}” must be before “_{MsgAllocationFormStaffAllocationFrom}”. -AllocationFormStaffRegisterToMustBeBeforeStaffAllocationTo: “_{MsgAllocationFormStaffRegisterTo}” must be before “_{MsgAllocationFormStaffAllocationTo}”. -AllocationFormStaffRegisterFromMustBeBeforeRegisterFrom: “_{MsgAllocationFormStaffRegisterFrom}” must be before “_{MsgAllocationFormRegisterFrom}”. -AllocationFormStaffRegisterToMustBeBeforeRegisterTo: “_{MsgAllocationFormStaffRegisterTo}” must be before “_{MsgAllocationFormRegisterTo}”. -AllocationFormStaffAllocationToShouldBeBeforeRegisterByStaffFrom: “_{MsgAllocationFormStaffAllocationTo}” should be before “_{MsgAllocationFormRegisterByStaffFrom}”. -AllocationFormStaffAllocationToShouldBeBeforeRegisterByCourse: “_{MsgAllocationFormStaffAllocationTo}” should be before “_{MsgAllocationFormRegisterByCourse}”. -AllocationFormStaffAllocationToShouldBeAfterRegisterTo: “_{MsgAllocationFormStaffAllocationTo}” should be after “_{MsgAllocationFormRegisterTo}”. -AllocationFormRegisterToShouldBeBeforeRegisterByStaffFrom: “_{MsgAllocationFormRegisterTo}” should be before “_{MsgAllocationFormRegisterByStaffFrom}”. -AllocationFormRegisterToShouldBeBeforeRegisterByCourse: “_{MsgAllocationFormRegisterTo}” should be before “_{MsgAllocationFormRegisterByCourse}”. -AllocationFormRegisterByStaffFromShouldBeBeforeRegisterByCourse: “_{MsgAllocationFormRegisterByStaffFrom}” should be before “_{MsgAllocationFormRegisterByCourse}”. - -AllocationNewSuccess: Successfully created allocation -AllocationNewAlreadyExists: An allocation with this name/shorthand already exists for this term and department. - -TitleAllocationNew: Create new allocation - -TitleAllocationEdit tid ssh ash: #{toPathPiece tid}-#{ssh}-#{ash}: Edit allocation -HeadingAllocationEdit tid ssh aname: Edit allocation: _{ShortTermIdentifier (unTermKey tid)}, #{ssh}, #{aname} - -AllocationEditSuccess: Successfully edited allocation -AllocationEditAlreadyExists: Another allocation with this name/shorthand already exists for this term and department. - -TitleAllocationMatchings tid ssh ash: #{toPathPiece tid}-#{ssh}-#{ash}: Matchings -HeadingAllocationMatchings tid ssh aname: Matchings: _{ShortTermIdentifier (unTermKey tid)}, #{ssh}, #{aname} -AllocationMatchingsNone: No matchings yet -AllocationMatchingsLog: Log -AllocationMatchingsTime: Timestamp -AllocationMatchingsFingerprint: Fingerprint - -AllocationMatchingLogFileName tid ssh ash cID: allocation-matching.#{toPathPiece tid}-#{ssh}-#{ash}.#{toPathPiece cID}.log - -AllocationUserDeleteQuestion: Do you really want to remove the allocation participant listed below? -AllocationUserDeleted: Participant successfully removed -AllocationApplicationsCount n: #{n} #{pluralENs n "application"} -AllocationAllocationsCount n: #{n} #{pluralENs n "allocation"} -AllocationCourseHasRatings ratings vetos: This course already has #{ratings} #{pluralENs ratings "rating"} (#{vetos} #{pluralENs vetos "veto"}) - -AllocationCourseParticipantFormCourse: Course -AllocationCourseParticipantFormIsRegistered: Registered? -AllocationCourseParticipantFormIsSelfInflicted: Deregistration “self inflicted” (reason)? -AllocationCourseParticipantFormDefaultReason: No Reason - -AllocationUserCourseParticipantFormTitle: Course registrations -AllocationUserAllocationUserFormTitle: Participation in allocation diff --git a/messages/uniworx/categories/courses/courses/application/de-de-formal.msg b/messages/uniworx/categories/courses/courses/application/de-de-formal.msg deleted file mode 100644 index c9982f589..000000000 --- a/messages/uniworx/categories/courses/courses/application/de-de-formal.msg +++ /dev/null @@ -1,45 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Winnie Ros -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -CourseApplicationTitle displayName@Text csh@CourseShorthand: Bewerbung für #{csh}: #{displayName} -CourseApplicationArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand appId@CryptoFileNameCourseApplication displayName@Text !ident-ok: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldCase (toPathPiece appId)}-#{foldCase displayName} -CourseApplicationsAllocatedDirectory: zentral -CourseApplicationsNotAllocatedDirectory: direkt -CsvColumnApplicationsAllocation: Zentralanmeldung über die die Bewerbung eingegangen ist -CsvColumnApplicationsApplication: Eindeutige Nummer der Bewerbung (zur Zuordnung im ZIP-Archiv aller Bewerbungsdateien) -CsvColumnApplicationsName: Voller Name des/der Bewerbers/Bewerberin -CsvColumnApplicationsMatriculation: Matrikelnummer des/der Bewerbers/Bewerberin -CsvColumnApplicationsEmail: E-Mail-Adresse des/der Bewerbers/Bewerberin -CsvColumnApplicationsText: Text-Bewerbung -CsvColumnApplicationsHasFiles: Hat der/die Bewerber/Bewerberin Dateien zu seiner Bewerbung eingereicht (siehe ZIP-Archiv aller Bewerbungsdateien)? -CsvColumnApplicationsVeto: Bewerber:in mit Veto werden garantiert nicht dem Kurs zugeteilt; "veto" oder leer -CsvColumnApplicationsRating: Bewertung der Bewerbung; "1.0", "1.3", "1.7", ..., "4.0", "5.0" (Leer wird behandelt wie eine Note zwischen 2.3 und 2.7) -CsvColumnApplicationsComment: Kommentar zur Bewerbung; je nach Kurs-Einstellungen entweder nur als Notiz für die Kursverwalter:innen oder Feedback für den/die Bewerber/Bewerberin -CourseApplicationsTableCsvName tid@TermId ssh@SchoolId csh@CourseShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-bewerbungen -CourseApplicationIsParticipant: Kursteilnehmer -ApplicationUserColumns: Bewerbung -ApplicationRatingColumns: Bewertung -ApplicationGeneratedColumns: Stammdaten -ApplicationGeneratedColumnsTip: Stammdaten eines/einer Bewerbers/Bewerberin sind Daten, welche dem System zu diesem/dieser Benutzer/Benutzerin bekannt sind und welche der/die Benutzer/Benutzerin im Zuge der Bewerbung nicht beeinflussen kann. -CourseApplicationVeto !ident-ok: Veto -CourseApplicationNoVeto: Kein Veto -CourseApplicationNoRatingPoints: Keine Bewertung -CourseApplicationNoRatingComment: Kein Kommentar -CourseApplicationsListTitle: Bewerbungen -AcceptApplicationsMode: Bewerbungen akzeptieren -AcceptApplicationsModeTip: Sollen akzeptierte Bewerber:innen direkt als Teilnehmer:in im Kurs eingetragen werden oder sollen Einladungen per E-Mail verschickt werden? -AcceptApplicationsSecondary: Gleichstände auflösen -AcceptApplicationsSecondaryTip: Wenn es im Laufe des Verfahrens mehrere Bewerber:innen mit der selben Bewertung für den selben Platz gibt, wie soll der Gleichstand aufgelöst werden? -CsvColumnUserAppStudyFeatures: Alle relevanten Studiendaten des/der Teilnehmers/Teilnehmerin als Semikolon (;) separierte Liste -ApplicationAllocationNoAllocationUser: Dieser Student/diese Studentin nimmt nicht (mehr) an der Zentralvergabe teil. Die Bewerbung existiert zwar noch, wird jedoch bis auf Weiteres sicherlich nicht zu einer Anmeldung führen. - -CourseApplicationId: Bewerbungsnummer -CourseApplicationRatingPoints: Bewertung - -#not used as Msg -AcceptApplicationsDirect: Direkt anmelden -AcceptApplicationsInvite: Einladungen verschicken -AcceptApplicationsSecondaryRandom: Zufällig -AcceptApplicationsSecondaryTime: Nach Zeitpunkt der Bewerbung -CourseApplicationsTableCsvSheetName tid@TermId ssh@SchoolId csh@CourseShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh} Bewerbungen diff --git a/messages/uniworx/categories/courses/courses/application/en-eu.msg b/messages/uniworx/categories/courses/courses/application/en-eu.msg deleted file mode 100644 index fc5fdc140..000000000 --- a/messages/uniworx/categories/courses/courses/application/en-eu.msg +++ /dev/null @@ -1,46 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Winnie Ros -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -CourseApplicationTitle displayName csh: Application for #{csh}: #{displayName} -CourseApplicationArchiveName tid ssh csh appId displayName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldCase (toPathPiece appId)}-#{foldCase displayName} -CourseApplicationsAllocatedDirectory: central -CourseApplicationsNotAllocatedDirectory: direct -CsvColumnApplicationsAllocation: Central allocation for which this application was made -CsvColumnApplicationsApplication: Globally unique number of application (for matching with the ZIP archive of all application files) -CsvColumnApplicationsName: Participant's full name -CsvColumnApplicationsMatriculation: Participant's matriculation -CsvColumnApplicationsEmail: Participant's email address -CsvColumnApplicationsText: Application text -CsvColumnApplicationsHasFiles: Did the applicant provide any additional files with their application (see ZIP archive of all application files)? -CsvColumnApplicationsVeto: Vetoed applicants are never assigned to the course; "veto" or empty -CsvColumnApplicationsRating: Application grading; Any number grade ("1.0", "1.3", "1.7", ..., "4.0", "5.0"); Empty cells will be treated as if they contained a grade between 2.3 and 2.7 -CsvColumnApplicationsComment: Application comment; depending on course settings this might purely be a note for course administrators or be feedback for the applicant -CourseApplicationsTableCsvName tid ssh csh: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-applications -CourseApplicationIsParticipant: Course participant -ApplicationUserColumns: Application -ApplicationRatingColumns: Rating -ApplicationGeneratedColumns: Master data -ApplicationGeneratedColumnsTip: An applicant's master data is data which is known to the system about this user and which the user cannot modify when applying for the course. -CourseApplicationVeto: Veto -CourseApplicationNoVeto: No veto -CourseApplicationNoRatingPoints: No grading -CourseApplicationNoRatingComment: No comment -CourseApplicationsListTitle: Applications -AcceptApplicationsMode: Accept applications -AcceptApplicationsModeTip: Should accepted applications be enrolled in the course directly or should invitations be sent via email? -AcceptApplicationsSecondary: Breaking ties -AcceptApplicationsSecondaryTip: If a tie occurs during the acceptance process, how should it be broken? -CsvColumnUserAppStudyFeatures: All relevant features of study for the participant, separated by semicolon (;) -ApplicationAllocationNoAllocationUser: This student does not (or does no longer) participate in the allocation. The application still exists, but will certainly not lead to a registriation while it is in this state. - -CourseApplicationId: Application number -CourseApplicationRatingPoints: Grading - -#not used as Msg -AcceptApplicationsDirect: Enroll directly -AcceptApplicationsInvite: Send invitations -AcceptApplicationsSecondaryRandom: Randomly -AcceptApplicationsSecondaryTime: By time of application -CourseApplicationsTableCsvSheetName tid ssh csh: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh} Applications - diff --git a/messages/uniworx/categories/courses/courses/de-de-formal.msg b/messages/uniworx/categories/courses/courses/de-de-formal.msg index 80d5f42b0..a1f9e46e0 100644 --- a/messages/uniworx/categories/courses/courses/de-de-formal.msg +++ b/messages/uniworx/categories/courses/courses/de-de-formal.msg @@ -12,9 +12,6 @@ FilterCourseSearchShorthand: Kürzel-Suche FilterCourseSearchTitle: Titel-Suche FilterCourseRegistered: Registriert FilterCourseRegisterOpen: Anmeldung möglich -FilterCourseAllocation: Zentralanmeldung -FilterCourseAllocationNone: Keine Zentralanmeldung -FilterCourseAllocationOption tid@TermId ssh@SchoolId aname@AllocationName !ident-ok: #{toPathPiece tid} #{ssh} #{aname} CourseRegistered: Angemeldet CourseRegistration: Anmeldung CourseDescription: Beschreibung @@ -25,13 +22,6 @@ CourseLecturerAlreadyAdded: Diese:r Nutzer:in ist bereits als Kursverwalter:in e CourseLecturerType: Rolle LecturerType: Rolle CourseLecturerRightsIdentical: Alle Sorten von Kursverwalter:innen haben identische Rechte. -CourseAllocationOption term@Text name@Text !ident-ok: #{name} (#{term}) -CourseAllocationParticipate: Teilnahme an Zentralanmeldung -CourseNoAllocationsAvailable: Es sind aktuell keine Zentralanmeldungen verfügbar -CourseAllocation: Zentralanmeldung -CourseAllocationMinCapacity: Minimale Teilnehmeranzahl -CourseAllocationMinCapacityTip: Wenn der Veranstaltung bei der Zentralanmeldung weniger als diese Anzahl von Teilnehmer:innen zugeteilt würden, werden diese stattdessen auf andere Kurse umverteilt -CourseAllocationMinCapacityMustBeNonNegative: Minimale Teilnehmeranzahl darf nicht negativ sein CourseAcceptSubstitutesUntil: Nachrücker:innen akzeptieren bis CourseAcceptSubstitutesUntilTip: Bis zu welchem Zeitpunkt sollen durch die Zentralanmeldung Nachrücker:innen diesem Kurs zugewiesen werden? Wird kein Datum angegeben werden nach der Initialen Verteilung nie Nachrücker:innen zugewiesen. Diese Frist sollte nicht willkürlich früh bzw. nicht gesetzt werden, um für die Studierenden keine unnötige Beschränkung darzustellen. Geeignet ist z.B. bei einem Seminar wenige Stunden vor dem ersten Treffen zum Verteilen der Themen. CourseDeregisterNoShow: „Nicht erschienen“ bei Abmeldung @@ -53,18 +43,6 @@ CourseVisibleToTip: Der Kurs ist ab "Sichtbar ab" bis zu diesem Zeitpunkt für a CourseMaterialFree: Das Kursmaterial ist ohne Anmeldung frei zugänglich CourseFormSectionRegistration: Anmeldung zum Kurs CourseFormSectionAdministration: Verwaltung -CourseApplicationInstructions: Anweisungen zur Bewerbung/Anmeldung -CourseApplicationInstructionsTip: Wird den Studierenden angezeigt, wenn diese sich für Ihre Veranstaltung bewerben bzw. bei dieser anmelden -CourseApplicationRequired: Bewerbungsverfahren -CourseApplicationRequiredTip: Sollen Anmeldungen zu diesem Kurs zunächst provisorisch (ohne Kapazitätsbeschränkung) sein, bis sie durch einen Kursverwalter (nach Bewertung der Bewerbungen) akzeptiert werden? -CourseApplicationTemplate: Bewerbungsvorlagen -CourseApplicationTemplateTip: Werden den Studierenden zum download angeboten, wenn diese sich für Ihre Veranstaltung bewerben bzw. bei dieser anmelden -CourseApplicationsText: Text-Bewerbungen -CourseApplicationsTextTip: Sollen die Studierenden bei Ihrer Bewerbung bzw. Anmeldung (ggf. zusätzlich zu abgegebenen Dateien) auch unformatierten Text einreichen können? -CourseApplicationsFiles: Bewerbungsdateien -CourseApplicationsFilesTip: Sollen die Studierenden bei Ihrer Bewerbung bzw. Anmeldung (ggf. zusätzlich zu unformatiertem Text) auch Dateien abgeben können? -CourseApplicationRatingsVisible: Feedback für Bewerbungen -CourseApplicationRatingsVisibleTip: Sollen Bewertung und Kommentar der Bewerbungen den Studierenden nach Ende der Bewertungs-Phase angezeigt werden? CourseCapacity: Kapazität CourseCapacityTip: Anzahl erlaubter Kursanmeldungen, leer lassen für unbeschränkte Kurskapazität CourseSecretTip: Anmeldung zum Kurs erfordert Eingabe des Passworts, sofern gesetzt @@ -80,15 +58,9 @@ CourseDeregisterUntilTip: Abmeldung ist ab "Anmeldungen von" bis zu diesem Zeitp CourseVisibilityEndMustBeAfterStart: Ende des Sichtbarkeitszeitraums muss nach dem Anfang liegen CourseRegistrationEndMustBeAfterStart: Ende des Anmeldezeitraums muss nach dem Anfang liegen CourseDeregistrationEndMustBeAfterStart: Ende des Abmeldezeitraums muss nach dem Anfang des Anmeldezeitraums liegen -CourseAllocationRequiresCapacity: Bei Teilnahme an einer Zentralanmeldung muss eine Kurskapazität angegeben werden -CourseAllocationTermMustMatch: Kurs-Semester muss mit Semester der Zentralanmeldung übereinstimmen CourseUserMustBeLecturer: Aktuelle:r Benutzer:in muss als Kursverwalter:in eingetragen sein -CourseAllocationCapacityMayNotBeChanged: Kapazität eines Kurses, der an einer Zentralanmeldung teilnimmt, darf nicht nachträglich verändert werden -AllocationStaffRegisterToExpiredAllocation: Die Frist zur Eintrageng von Kursen in die Zentralanmeldung ist verstrichen. Die Teilnahme darf nicht mehr verändert werden. -AllocationStaffRegisterToExpiredMinCapacity: Die Frist zur Eintrageng von Kursen in die Zentralanmeldung ist verstrichen. Die minimale Kapazität darf nicht mehr verändert werden. 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). -CourseApplicationInstructionsRecommended: Studierende können bei ihrer Anmeldung/Bewerbung nach aktuellen Einstellungen Texte bzw. Dateien abgeben. Es wurden jedoch keine Anweisungen zur Bewerbung oder Vorlage-Dateien hinterlegt. Sie sollten entweder keine Texte bzw. Dateien verlangen oder über Anweisungen bzw. Vorlagen klarstellen, was Sie von den Studierenden erwarten. NoSuchTerm tid@TermId: Semester #{tid} gibt es nicht. NoSuchSchool ssh@SchoolId: Institut #{ssh} gibt es nicht. NoSuchCourseShorthand csh@CourseShorthand: Kein Kurs mit Kürzel #{csh} bekannt. @@ -107,24 +79,32 @@ CourseParticipantInvitationAccepted courseName@Text: Sie wurden als Teilnehmer:i CourseParticipantEnlistDirectly: Bekannte Nutzer:innen sofort als Teilnehmer:in eintragen CourseSubmissionGroup: Feste Abgabegruppe SubmissionGroupEmptyIsUnsetTip: Leer lassen um Benutzer:innen aus den jeweiligen Abgabegruppen ersatzlos zu entfernen -CourseParticipantsRegisterHeading: Kursteilnehmer :innen hinzufügen +CourseParticipantsRegisterHeading: Kursteilnehmer:innen hinzufügen +CourseParticipantsRegisterActionAddParticipants: Personen zum Kurs anmelden +CourseParticipantsRegisterActionAddTutorialMembers: Personen zu Kurs und Übungsgruppe anmelden +CourseParticipantsRegisterUsersField: Zum Kurs anzumeldende Personen +CourseParticipantsRegisterUsersFieldTip: Bitte Personalnummer angeben. Mehrere Personen bitte mit Komma getrennt angeben. +CourseParticipantsRegisterTutorialOption: Kursteilnehmer:innen zu Übungsgruppe anmelden? +CourseParticipantsRegisterTutorialField: Übungsgruppe +CourseParticipantsRegisterTutorialFieldTip: Ist aktuell keine Übungsgruppe mit diesem Namen vorhanden, wird eine neue erstellt. Ist bereits eine Übungsgruppe mit diesem Namen vorhanden, werden die Kursteilnehmenden dieser hinzugefügt. +CourseParticipantsRegisterNoneGiven: Es wurden keine anzumeldenden Personen angegeben! +CourseParticipantsRegisterNotFoundInAvs n@Int: Zu #{n} #{pluralDE n "Angabe konnte keine übereinstimmende Person" "Angaben konnten keine übereinstimmenden Personen"} im AVS gefunden werden + CourseParticipantsInvited n@Int: #{n} #{pluralDE n "Einladung" "Einladungen"} per E-Mail verschickt -CourseParticipantsAlreadyRegistered n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} #{pluralDE n "ist" "sind"} bereits angemeldet -CourseParticipantsRegistered n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} erfolgreich angemeldet -CourseApplicationText: Text-Bewerbung -CourseApplicationFollowInstructions: Beachten Sie die Anweisungen zur Bewerbung! +CourseParticipantsAlreadyRegistered n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} #{pluralDE n "ist" "sind"} bereits zum Kurs angemeldet +CourseParticipantsAlreadyTutorialMember n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} #{pluralDE n "ist" "sind"} bereits in dieser Übungsgruppe angemeldet +CourseParticipantsRegistered n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} erfolgreich zum Kurs angemeldet +CourseParticipantsRegisteredTutorial n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} erfolgreich zur Übungsgruppe angemeldet +CourseParticipantsRegisterConfirmationHeading: Teilnehmer:innen hinzufügen +CourseParticipantsRegisterUnnecessary: Alle angeforderten Anmeldungen sind bereits vorhanden. Es wurden keine Änderungen vorgenommen. +CourseParticipantsRegisterConfirmInvalid: Ungültiges Bestätigungsformular! + CourseRegistrationText: Text zur Anmeldung CourseRegistrationFollowInstructions: Beachten Sie die Anweisungen zur Anmeldung! CourseRegistrationFiles: Datei(en) zur Anmeldung -CourseApplicationNoFiles: Keine Datei(en) -CourseApplicationFilesNeedReupload: Bewerbungsdateien müssen neu hochgeladen werden, wann immer die Bewerbung angepasst wird CourseRegistrationFilesNeedReupload: Dateien zur Anmeldung müssen neu hochgeladen werden, wann immer die Anmeldung angepasst wird -CourseApplicationFile: Bewerbung -CourseApplicationFiles: Bewerbungsdatei(en) -CourseApplicationArchive: Zip-Archiv der Bewerbungsdatei(en) CourseRegistrationFile: Datei zur Anmeldung CourseRegistrationArchive: Zip-Archiv der Datei(en) zur Anmeldung -CourseDeregistrationAllocationLog: Ihr Platz in diesem Kurs stammt aus einer Zentralanmeldung. Wenn Sie sich vom Kurs abmelden wird dieser Umstand permanent im System gespeichert und kann Sie u.U. bei zukünftigen Zentralanmeldungen benachteiligen. Wenn Sie gute Gründe vorzuweisen haben, warum Ihre Abmeldung nicht selbstverschuldet ist, kontaktieren Sie bitte eine:n Kursverwalter:in. Diese haben die Möglichkeit Sie ohne permanente Eintragung im System abzumelden. CourseDeregistrationNoShow: Wenn Sie sich vom Kurs abmelden, wird für alle Prüfungen des Kurses „nicht erschienen“ gemeldet. Wenn Sie gute Gründe vorzuweisen haben, warum Ihre Abmeldung nicht selbstverschuldet ist, kontaktieren Sie bitte eine:n Kursverwalter:in. Diese haben die Möglichkeit Sie ohne permanente Eintragung im System abzumelden. CourseDeregistrationFromInvisibleCourse: Dieser Kurs ist nur für angemeldete Teilnehmer:innen und Bewerber:innen sichtbar. Wenn Sie sich jetzt abmelden, können Sie danach nicht wieder auf den Kurs zugreifen! CourseDeregistrationNoReRegistration: Wenn Sie sich jetzt vom Kurs abmelden, können Sie sich nicht wieder selbstständig anmelden. @@ -134,15 +114,8 @@ CourseRegisterOk: Erfolgreich zum Kurs angemeldet CourseDeregisterOk: Erfolgreich vom Kurs abgemeldet CourseApplyOk: Erfolgreich zum Kurs beworben CourseRetractApplyOk: Bewerbung zum Kurs erfolgreich zurückgezogen -CourseApplicationTemplateArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-bewerbungsvorlagen CourseMemberOf: Teilnehmer:in von CourseAssociatedWith: assoziiert mit -CourseDeregistrationAllocationReason: Grund -CourseDeregistrationAllocationReasonTip: Der angegebene Grund wird permanent im System hinterlegt und ist i.A. einziger Anhaltspunkt zur Schlichtung etwaiger Konflikte -CourseDeregistrationAllocationNoShow: „Nicht erschienen“ eintragen -CourseDeregistrationAllocationNoShowTip: Soll für alle Prüfungen dieses Kurses „nicht erschienen“ als Prüfungsleistung eingetragen werden? Dies geschieht einmalig bei der Abmeldung (sofern nicht bereits eine Prüfungsleistung existiert) und automatisch beim Anlegen von neuen Prüfungen. -CourseDeregistrationAllocationShouldLog: Selbstverschuldet -CourseDeregistrationAllocationShouldLogTip: Falls der Platz des Studierenden, der abgemeldet wird, aus einer Zentralanmeldung stammt, ist vorgesehen einen permanenten Eintrag im System zu speichern, der den Studierenden u.U. bei zukünftigen Zentralanmeldungen benachteiligt. Als Kursverwalter:in haben Sie die Möglichkeit dies zu unterbinden, wenn der Studierende gute Gründe vorweisen kann, warum seine Abmeldung nicht selbstverschuldet ist. CourseLastEdit: Letzte Änderung CourseUserNote: Notiz CourseUserNoteTooltip: Nur für Verwalter dieses Kurses einsehbar @@ -201,17 +174,11 @@ CourseParticipantsCount n@Int !ident-ok: #{n} CourseParticipantsCountOf n@Int m@Int: #{n} von #{m} CourseVisibility: Sichtbarkeit CourseInvisible: Dieser Kurs ist momentan nur für Dozierende, Assistent:innen, Tutor:innen, Korrektor:innen, angemeldete Teilnehmer:innen und Bewerber:innen sichtbar. -CourseInvisibleOverridenByAllocation: Da die Zentralanmeldung, an welcher der Kurs teilnimmt aktuell offen für Bewerbungen ist, wird die Kurssichtbarkeit während der Bewerbungsphase forciert. Außerhalb der Bewerbungsphase ist der Kurs nur für Dozierende, Assistent:innen, Tutor:innen, Korrektor:innen, angemeldete Teilnehmer:innen und Bewerber:innen sichtbar. CourseRegistrationInterval: Anmeldung CourseDirectRegistrationInterval: Direkte Anmeldung CourseDeregisterUntil time@Text: Abmeldung nur bis #{time} -CourseApplicationInstructionsApplication: Anweisungen zur Bewerbung -CourseApplicationInstructionsRegistration: Anweisungen zur Anmeldung -CourseApplicationTemplateApplication: Bewerbungsvorlage(n) -CourseApplicationTemplateRegistration: Anmeldungsvorlage(n) -NotRegistered: Sie sind zu diesem Kurs nicht angemeldet. -CourseApplicationDeleteToEdit: Um Ihre Bewerbung zu editieren müssen Sie sie zunächst zurückziehen und sich erneut bewerben. CourseMaterial !ident-ok: Material +NotRegistered: Nicht zum Kurs angemeldet CourseMaterialNotFree: Das Kursmaterial ist nur für Mitglieder des Kurses einsehbar, also z.B. für Teilnehmer:innen, Tutor:innen, Korrektor:innen und Verwalter:innen. CourseMaterialsFoundHere: Material zum Kurs finden Sie hier CourseMaterialsNoneVisible: Aktuell gibt es zu diesem Kurs kein Material, oder nur Material auf das Sie keinen Zugriff haben (z.B. aufgrund von Fristen bzgl. der Sichtbarkeit). @@ -235,17 +202,8 @@ StudyTerms: Studiengänge NoStudyTermsKnown: Keine Studiengänge bekannt CourseMembersCountOf n@Int mbNum@(Maybe Int): #{n} Kursanmeldungen #{maybeToMessage " von " mbNum " möglichen"} -#template course/application -CourseAllocationsBounds n@Int: Voraussichtliche Zuteilungen durch #{pluralDE n "Zentralanmeldung" "Zentralanmeldungen"} -CourseAllocationsBoundCoincide numFirstChoice@Int: Vstl. #{numFirstChoice} #{pluralDE numFirstChoice "Teinehmer:in" "Teinehmer:innen"} -CourseAllocationsBound numApps@Int numFirstChoice@Int: Vstl. zwischen #{numFirstChoice} und #{numApps} #{pluralDE numApps "Teinehmer:in" "Teinehmer:innen"} -CourseAllocationsBoundCapped: Die obige Anzeige wurde durch die aktuell angegebene Kurskapazität reduziert. -CourseAllocationsBoundWarningOpen: Diese Informationen entsprechen nur dem aktuellen Stand der Bewerbungen und können sich noch ändern. -CourseApplications: Bewerbungen - CourseLoginToApply: Um sich zum Kurz zu bewerben müssen Sie sich zunächst in Uni2work anmelden CourseLoginToRegister: Um sich zum Kurs anzumelden müssen Sie zunächst in Uni2work anmelden -CourseAllApplicationsArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-bewerbungen CourseLecInviteHeading courseName@Text: Einladung zum/zur Kursverwalter/Kursverwalterin für #{courseName} CourseLecInviteExplanation: Sie wurden eingeladen, Verwalter:in für einen Kurs zu sein. CourseUserHasPersonalisedSheetFilesFilter: Teilnehmer:in hat personalisierte Übungsblatt-Dateien für @@ -261,13 +219,6 @@ CourseUserDownloadPersonalisedSheetFiles: Personalisierte Übungsblätter herunt CourseUserSetSubmissionGroup: Gruppenabgabe hinzufügen CourseUserReRegister: Teilnehmer:in registrieren -CourseApplicationsTableCsvSetVeto: Veto hinzufügen -CourseApplicationsTableCsvSetRating: Rating hinzufügen -CourseApplicationsTableCsvSetComment: Kommentar hinzufügen -CourseApplicationsTableCsvExceptionNoMatchingUser: Kein:e passende:r Benutzer:in -CourseApplicationsTableCsvExceptionNoMatchingAllocation: Keine passende Bewerbung -CourseApplicationsTableCsvExceptionNoMatchingStudyFeatures: Kein passendes Studienfach - CoursePersonalisedSheetFilesArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-personalisierte_dateien TutorialFreeCapacity: Freie Plätze @@ -286,3 +237,7 @@ CourseExamRegistrationTime: Angemeldet seit CourseParticipantStateIsActiveFilter: Ansicht CourseApply: Zum Kurs bewerben CourseAdministrator: Kursadministrator:in + +CourseAvsRegisterTitle: Teilnehmer:innen anmelden +CourseAvsRegisterParticipants: Teilnehmer:innen +CourseAvsRegisterParticipantsTip: Mehrere Teilnehmer:innen mit Komma separieren diff --git a/messages/uniworx/categories/courses/courses/en-eu.msg b/messages/uniworx/categories/courses/courses/en-eu.msg index a7e8abbc5..a15538266 100644 --- a/messages/uniworx/categories/courses/courses/en-eu.msg +++ b/messages/uniworx/categories/courses/courses/en-eu.msg @@ -12,9 +12,6 @@ FilterCourseSearchShorthand: Shorthand search FilterCourseSearchTitle: Title search FilterCourseRegistered: Registered FilterCourseRegisterOpen: Enrolment is allowed -FilterCourseAllocation: Central allocation -FilterCourseAllocationNone: No allocation -FilterCourseAllocationOption tid ssh aname: #{toPathPiece tid} #{ssh} #{aname} CourseRegistered: Enrolled CourseRegistration: Enrolment CourseDescription: Description @@ -25,13 +22,6 @@ CourseLecturerAlreadyAdded: This user is already configured as a course administ CourseLecturerType: Role LecturerType: Role CourseLecturerRightsIdentical: All sorts of course administrators have the same permissions. -CourseAllocationOption term name: #{name} (#{term}) -CourseAllocationParticipate: Participate in central allocation -CourseNoAllocationsAvailable: There are no ongoing central allocations -CourseAllocation: Central allocation -CourseAllocationMinCapacity: Minimum number of participants -CourseAllocationMinCapacityTip: If fewer students than this number were to be assigned to this course, then these students would instead be assigned to other courses -CourseAllocationMinCapacityMustBeNonNegative: Minimum number of participants must not be negative CourseAcceptSubstitutesUntil: Accept substitute registrations until CourseAcceptSubstitutesUntilTip: Until which time should substitute registrations through the central allocation be accepted to fill free places in the course? If left empty no substitute registrations will be made. This deadline should not arbitrarily be set early or ommitted so as to not be an unneccesarily restrictive for students. For a seminar a valid choice might be a few hours before the first meeting in which topics will be assigned. CourseDeregisterNoShow: Record “no show” when deregistering @@ -53,18 +43,6 @@ CourseVisibleToTip: Other users will be able to see the course from "Visible Fro CourseMaterialFree: Course material is publicly accessible CourseFormSectionRegistration: Registration CourseFormSectionAdministration: Administration -CourseApplicationInstructions: Instructions for application -CourseApplicationInstructionsTip: Will be shown to students if they decide to apply for this course -CourseApplicationRequired: Applications required -CourseApplicationRequiredTip: Should registrations for this course be provisional at first (without capacity constraint), until they are approved by a course administrator? -CourseApplicationTemplate: Application template -CourseApplicationTemplateTip: Students can download this template if they decide to apply for this course -CourseApplicationsText: Text application -CourseApplicationsTextTip: Should students submit plaintext with their application/registration (in addition to submitted files if applicable)? -CourseApplicationsFiles: Application files -CourseApplicationsFilesTip: Should students submit files with their application/registration (in addition to plaintext if applicable)? -CourseApplicationRatingsVisible: Feedback to applications -CourseApplicationRatingsVisibleTip: Should students be allowed to view rating and comments on their application after the rating period? CourseCapacity: Capacity CourseCapacityTip: Maximum permissable number of enrolments for this course; leave empty for unlimited capacity CourseSecretTip: Enrollment for this course will require the password, if set @@ -80,15 +58,9 @@ CourseDeregisterUntilTip: Participants may deregister from immediately after reg CourseVisibilityEndMustBeAfterStart: The end of the visibility period must be after its start CourseRegistrationEndMustBeAfterStart: The end of the registration period must be after its start CourseDeregistrationEndMustBeAfterStart: The end of the deregistration period must be after the start of the registration period -CourseAllocationRequiresCapacity: Course capacity needs to be specified if the course participates in a central allocation -CourseAllocationTermMustMatch: Course semester needs to match the semester of the central allocation CourseUserMustBeLecturer: The current user needs to be a course administrator -CourseAllocationCapacityMayNotBeChanged: The capacity of a course that participates in a central allocation must not be altered -AllocationStaffRegisterToExpiredAllocation: The course registration period for the central allocation is over. Participation may not be changed. -AllocationStaffRegisterToExpiredMinCapacity: The course registration period for the central allocation is over. Minimum capacity may not be changed. 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). -CourseApplicationInstructionsRecommended: Students can, as per the current course settings, submit files and/or texts with their applications/registrations. There are, however, no instructions for application or template files. You should either not require files/texts or clarify through instructions or templates what is expected of the students. NoSuchTerm tid: Semester #{tid} does not exist. NoSuchSchool ssh: Department #{ssh} does not exist. NoSuchCourseShorthand csh: There is no course with shorthand #{csh}. @@ -108,23 +80,31 @@ CourseParticipantEnlistDirectly: Enrol known users directly CourseSubmissionGroup: Registered submission group SubmissionGroupEmptyIsUnsetTip: Leave empty to remove users from their respective submission groups CourseParticipantsRegisterHeading: Add course participants +CourseParticipantsRegisterActionAddParticipants: Add course participants +CourseParticipantsRegisterActionAddTutorialMembers: Add course and tutorial participants +CourseParticipantsRegisterUsersField: Persons to register for course +CourseParticipantsRegisterUsersFieldTip: Please enter personal number. Please separate multiple entries with commas. +CourseParticipantsRegisterTutorialOption: Register course participants for tutorial? +CourseParticipantsRegisterTutorialField: Tutorial +CourseParticipantsRegisterTutorialFieldTip: If there is no tutorial with this name, a new one will be created. If there is a tutorial with this name, the course participants will be registered for it. +CourseParticipantsRegisterNoneGiven: No persons given to register! +CourseParticipantsRegisterNotFoundInAvs n: For #{n} #{pluralEN n "entry no corresponding person" "entries no corresponding persons"} could be found in AVS +CourseParticipantsRegisterUnnecessary: All requested registrations have already been saved. No actions have been performed. + CourseParticipantsInvited n: #{n} #{pluralEN n "invitation" "invitations"} sent via email -CourseParticipantsAlreadyRegistered n: #{n} #{pluralEN n "participant is" "participants are"} already enrolled -CourseParticipantsRegistered n: Successfully registered #{n} #{pluralEN n "participant" "participants"} -CourseApplicationText: Application text -CourseApplicationFollowInstructions: Please follow the instructions for applications! +CourseParticipantsAlreadyRegistered n: #{n} #{pluralEN n "participant is" "participants are"} already course #{pluralEN n "member" "members"} +CourseParticipantsAlreadyTutorialMember n: #{n} #{pluralEN n "participant is" "participants are"} already registered for this tutorial +CourseParticipantsRegistered n: Successfully registered #{n} #{pluralEN n "participant" "participants"} for course +CourseParticipantsRegisteredTutorial n: Successfully registered #{n} #{pluralEN n "participant" "participants"} for tutorial +CourseParticipantsRegisterConfirmationHeading: Register participants +CourseParticipantsRegisterConfirmInvalid: Invalid confirmation form! + CourseRegistrationText: Registration text CourseRegistrationFollowInstructions: Please follow the instructions for registrations! CourseRegistrationFiles: Registration file(s) -CourseApplicationNoFiles: No file(s) -CourseApplicationFilesNeedReupload: Application files need to be reuploaded every time the application is changed CourseRegistrationFilesNeedReupload: Registration files need to be reuploaded every time the registration is changed -CourseApplicationFile: Application -CourseApplicationFiles: Application file(s) -CourseApplicationArchive: Zip archive of application files CourseRegistrationFile: Registration file CourseRegistrationArchive: Zip archive of registration files -CourseDeregistrationAllocationLog: Your enrollment in this course is due to a central allocation. If you leave the course, this will be permanently recorded and might affect you negatively in future central allocations. If you have good reasons why you should not be held accountable for leaving the course, please contact a course administrator. Course administrators can deregister you without incurring a permanent record. CourseDeregistrationNoShow: If you deregister from this course “no show” will be recorded as your exam achievement for all exams associated with this course. If you have good reasons why you shold not be held accountable for leaving the course, please contact a course administrator. Course administrators can deregister you without incurring a permanent record. CourseDeregistrationFromInvisibleCourse: This course is only visible to enrolled participants and applicants. If you deregister now, you will not be able to access the course again! CourseDeregistrationNoReRegistration: If you deregister from the course now, you will not be able to re-register yourself. @@ -134,15 +114,8 @@ CourseRegisterOk: Successfully enrolled for course CourseDeregisterOk: Successfully left course CourseApplyOk: Successfully applied for course CourseRetractApplyOk: Successfully retracted application for course -CourseApplicationTemplateArchiveName tid ssh csh: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-application-templates CourseMemberOf: Participant of CourseAssociatedWith: associated with -CourseDeregistrationAllocationReason: Reason -CourseDeregistrationAllocationReasonTip: The specified reason will be permanently stored and might be the only information available during conflict resolution -CourseDeregistrationAllocationNoShow: Record as “no show” -CourseDeregistrationAllocationNoShowTip: Should, for all exams associated with this course, “no show” be recorded as the exam achievement automatically? This would be done once immediately (if no other achievement exists for the given exam) and automatically whenever a new exam is created. -CourseDeregistrationAllocationShouldLog: Self imposed -CourseDeregistrationAllocationShouldLogTip: If the participant was enrolled in this course due to a central allocation, it is intended that a permanent record be made that might affect the student negatively in future central allocations. As a course administrator you have the right to prevent this if the participant can present good reasons why them leaving the course is not self imposed. CourseLastEdit: Latest edit CourseUserNote: Note CourseUserNoteTooltip: Only visible to administrators of this course @@ -201,16 +174,10 @@ CourseParticipantsCount n: #{n} CourseParticipantsCountOf n m: #{n} of #{m} CourseVisibility: Visibility CourseInvisible: This course is currently only visible to lecturers, assistants, tutors, correctors, enrolled participants and applicants. -CourseInvisibleOverridenByAllocation: Because the allocation this course participates in is currently open for application, the course is forced to be visible. After the application phase, the course will only be visible to lecturers, assistants, tutors, correctors, enrolled participants and applicants. CourseRegistrationInterval: Enrolment CourseDirectRegistrationInterval: Direct enrolment CourseDeregisterUntil time: Deregistration only until #{time} -CourseApplicationInstructionsApplication: Instructions for application -CourseApplicationInstructionsRegistration: Instructions for registration -CourseApplicationTemplateApplication: Application template(s) -CourseApplicationTemplateRegistration: Registration template(s) NotRegistered: Note enrolled for this course -CourseApplicationDeleteToEdit: You need to withdraw your application and reapply to edit your application. CourseMaterial: Material CourseMaterialNotFree: Course material is only accessible to members of the course, e.g. for participants, tutors, correctors or administratiors. CourseMaterialsFoundHere: Material for this course is available here @@ -235,17 +202,8 @@ StudyTerms: Fields of study NoStudyTermsKnown: No known features of study CourseMembersCountOf n mbNum: #{n} #{maybeToMessage "of " mbNum " "}participants -#template course/application -CourseAllocationsBounds n: Expected number of alloctions due to #{pluralEN n "central allocation" "central allocations"} -CourseAllocationsBoundCoincide numFirstChoice: Est. #{numFirstChoice} #{pluralEN numFirstChoice "participant" "participants"} -CourseAllocationsBound numApps numFirstChoice: Est. between #{numFirstChoice} and #{numApps} #{pluralEN numApps "participant" "participants"} -CourseAllocationsBoundCapped: The numbers listed above were modified based on the currently configured course capacity. -CourseAllocationsBoundWarningOpen: The information listed above represents only the current state of applications and is subject to change. -CourseApplications: Applications - CourseLoginToApply: You need to login to Uni2work before you can apply for this course. CourseLoginToRegister: Your need to login to Uni2work before you can register for this course. -CourseAllApplicationsArchiveName tid ssh csh: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-applications CourseLecInviteHeading courseName: Invitation to be a course administrator for #{courseName} CourseLecInviteExplanation: You were invited to be a course administrator. CourseUserHasPersonalisedSheetFilesFilter: Participant has personalised sheet files for @@ -260,13 +218,6 @@ CourseUserSetSubmissionGroup: Set group-submission CourseUserReRegister: Reregister participant CourseUserDownloadPersonalisedSheetFiles: Download personalised sheets -CourseApplicationsTableCsvSetVeto: Set veto -CourseApplicationsTableCsvSetRating: Set rating -CourseApplicationsTableCsvSetComment: Set comment -CourseApplicationsTableCsvExceptionNoMatchingUser: No matching user -CourseApplicationsTableCsvExceptionNoMatchingAllocation: No matching allocation -CourseApplicationsTableCsvExceptionNoMatchingStudyFeatures: no matching study features - CoursePersonalisedSheetFilesArchiveName tid ssh csh: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-personalised_files TutorialFreeCapacity: Free capacity @@ -285,3 +236,7 @@ CourseExamRegistrationTime: Registered since CourseParticipantStateIsActiveFilter: View CourseApply: Apply for course CourseAdministrator: Course administrator + +CourseAvsRegisterTitle: Register participants +CourseAvsRegisterParticipants: Participants +CourseAvsRegisterParticipantsTip: Separate multiple participants with comma diff --git a/messages/uniworx/categories/courses/tutorial/de-de-formal.msg b/messages/uniworx/categories/courses/tutorial/de-de-formal.msg index 586b2d546..d9a9b7493 100644 --- a/messages/uniworx/categories/courses/tutorial/de-de-formal.msg +++ b/messages/uniworx/categories/courses/tutorial/de-de-formal.msg @@ -44,4 +44,6 @@ TutorCorrectorInvitationAccepted shn@SheetName: Sie wurden als Korrektor:in für TutorialUsersDeregistered count@Int64: #{show count} #{pluralDE count "-Tutorium-Teilnehmer:in" "Tutorium-Teilnehmer:innen" } abgemeldet TutorialUserDeregister: Vom Tutorium Abmelden TutorialUserSendMail: Mitteilung verschicken +TutorialUserGrantQualification: Qualifikation vergeben +TutorialUserGrantedQualification n@Int: Qualifikation erfolgreich an #{tshow n} Tutoriums-#{pluralDE n "Teilnehmer:in" "Teilnehmer:innen"} vergeben CommTutorial: Tutorium-Mitteilung \ No newline at end of file diff --git a/messages/uniworx/categories/courses/tutorial/en-eu.msg b/messages/uniworx/categories/courses/tutorial/en-eu.msg index cdd7e664a..0c889b3f1 100644 --- a/messages/uniworx/categories/courses/tutorial/en-eu.msg +++ b/messages/uniworx/categories/courses/tutorial/en-eu.msg @@ -45,4 +45,6 @@ TutorialUsersDeregistered count: Successfully deregistered #{show count} partici TutorialUserDeregister: Deregister from tutorial TutorialUserSendMail: Send mail +TutorialUserGrantQualification: Grant Qualification +TutorialUserGrantedQualification n: Successfully granted qualification #{tshow n} tutorial #{pluralEN n "user" "users"} CommTutorial: Tutorial message diff --git a/messages/uniworx/categories/info/de-de-formal.msg b/messages/uniworx/categories/info/de-de-formal.msg index d317cdb5b..1107a2c0d 100644 --- a/messages/uniworx/categories/info/de-de-formal.msg +++ b/messages/uniworx/categories/info/de-de-formal.msg @@ -9,7 +9,6 @@ InfoLecturerCourses: Veranstaltungen InfoLecturerExercises: Übungsbetrieb InfoLecturerTutorials: Tutorien InfoLecturerExams: Prüfungen -InfoLecturerAllocations: Zentralanmeldungen LecturerInfoTooltipNew: Neues Feature LecturerInfoTooltipProblem: Feature mit bekannten Problemen LecturerInfoTooltipPlanned: Geplantes Feature @@ -20,7 +19,6 @@ VersionHistory: Versionsgeschichte KnownBugs: Bekannte Bugs ImplementationDetails: Implementierung Clone: Klonen -Applicant: Bewerber:in Administrator: Administrator:in CommCourse: Kursmitteilung Corrector: Korrektor:in diff --git a/messages/uniworx/categories/info/en-eu.msg b/messages/uniworx/categories/info/en-eu.msg index e39baf4cc..107df050f 100644 --- a/messages/uniworx/categories/info/en-eu.msg +++ b/messages/uniworx/categories/info/en-eu.msg @@ -9,7 +9,6 @@ InfoLecturerCourses: Courses InfoLecturerExercises: Course Exercises InfoLecturerTutorials: Tutorials InfoLecturerExams: Exams -InfoLecturerAllocations: Central allocations LecturerInfoTooltipNew: New feature LecturerInfoTooltipProblem: Feature with known issues LecturerInfoTooltipPlanned: Planned feature @@ -21,7 +20,6 @@ KnownBugs: Known bugs ImplementationDetails: Implementation Clone: Cloning Administrator: Administrator -Applicant: Applicant CommCourse: Course message Corrector: Corrector DefinitionCourseEvents: Course occurrences diff --git a/messages/uniworx/categories/jobs_handler/de-de-formal.msg b/messages/uniworx/categories/jobs_handler/de-de-formal.msg index 1b71aa482..3deea807d 100644 --- a/messages/uniworx/categories/jobs_handler/de-de-formal.msg +++ b/messages/uniworx/categories/jobs_handler/de-de-formal.msg @@ -15,7 +15,6 @@ ResetPassword: FRADrive-Passwort ändern bzw. setzen MailSubjectChangeUserDisplayEmail: Diese E-Mail-Adresse in FRADrive veröffentlichen MailIntroChangeUserDisplayEmail displayEmail@UserEmail: Der oben genannte Benutzer/Die oben genannte Benutzerin möchte „#{displayEmail}“ als öffentliche Adresse, assoziiert mit sich selbst, angeben. Wenn Sie diese Aktion nicht selbst ausgelöst haben, ignorieren Sie diese Mitteilung bitte! MailTitleChangeUserDisplayEmail displayName@Text: #{displayName} möchte diese E-Mail-Adresse in FRADrive veröffentlichen -AllocationResultsStudentConsultFaq n@Int: Falls Sie Fragen oder Anmerkungen haben, beachten Sie bitte auch die Informationen auf #{pluralDE n "der" "den"} folgenden #{pluralDE n "Seite" "Seiten"}: CommCourseSubject: Kursmitteilung InvitationAcceptDecline: Einladung annehmen/ablehnen InvitationFromTip displayName@Text: Sie erhalten diese Einladung, weil #{displayName} ihren Versand in FRADrive ausgelöst hat. diff --git a/messages/uniworx/categories/jobs_handler/en-eu.msg b/messages/uniworx/categories/jobs_handler/en-eu.msg index 971490e9e..2169d8d2d 100644 --- a/messages/uniworx/categories/jobs_handler/en-eu.msg +++ b/messages/uniworx/categories/jobs_handler/en-eu.msg @@ -15,7 +15,6 @@ ResetPassword: Reselt FRADrive password MailSubjectChangeUserDisplayEmail: Publishing this email address in FRADrive MailIntroChangeUserDisplayEmail displayEmail: The user mentioned above wants to publish “#{displayEmail}” as their own email address. If you have not caused this email to be sent, please ignore it! MailTitleChangeUserDisplayEmail displayName: #{displayName} wants to publish this email address as their own in FRADrive -AllocationResultsStudentConsultFaq n@Int: If you have questions or remarks, please also take into account the information on the following #{pluralEN n "page" "pages"}: CommCourseSubject: Course message InvitationAcceptDecline: Accept/Decline invitation InvitationFromTip displayName: You are receiving this invitation because #{displayName} has caused it to be sent from within FRADrive. diff --git a/messages/uniworx/categories/news/de-de-formal.msg b/messages/uniworx/categories/news/de-de-formal.msg index 7b7977a14..982ec1100 100644 --- a/messages/uniworx/categories/news/de-de-formal.msg +++ b/messages/uniworx/categories/news/de-de-formal.msg @@ -3,7 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later SystemMessageLastChangedAt time@Text: Zuletzt geändert: #{time} -NewsOpenAllocations: Offene Zentralanmeldungen NewsUpcomingSheets: Anstehende Übungsblätter NewsUpcomingExams: Bevorstehende Prüfungen NewsHideHiddenSystemMessages: Versteckte Nachrichten nicht mehr anzeigen @@ -17,10 +16,4 @@ Done: Eingereicht SubmissionNew: Abgabe anlegen NoUpcomingSheetDeadlines: Keine anstehenden Übungsblätter NoUpcomingExams difftime@Text: In den nächsten #{difftime} gibt es keine Prüfungen oder ablaufende Prüfungsanmeldungen in Ihren Kursen -CourseParticipant: Teilnehmer:in - -NewsActiveAllocations: Daten zu aktiven Zentralanmeldungen für Dozenten -NewsActiveAllocationsPlaces: Plätze -NewsActiveAllocationsApplicants: Bewerber -NewsActiveAllocationsPlacementsMade: Zugeteilte Plätze -NewsActiveAllocationsApplicantsPlaced: Zugeteilte Bewerber \ No newline at end of file +CourseParticipant: Teilnehmer:in \ No newline at end of file diff --git a/messages/uniworx/categories/news/en-eu.msg b/messages/uniworx/categories/news/en-eu.msg index e03dcb74f..f7a0f18bf 100644 --- a/messages/uniworx/categories/news/en-eu.msg +++ b/messages/uniworx/categories/news/en-eu.msg @@ -3,7 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later SystemMessageLastChangedAt time: Last changed: #{time} -NewsOpenAllocations: Active central allocations NewsUpcomingSheets: Upcoming exercise sheets NewsUpcomingExams: Upcoming exams NewsHideHiddenSystemMessages: Don't show hidden news items @@ -18,9 +17,3 @@ SubmissionNew: Create submission NoUpcomingSheetDeadlines: No upcoming sheets NoUpcomingExams difftime: No exams for your courses occur or allow registration in the next #{difftime} CourseParticipant: Participant - -NewsActiveAllocations: Information on active allocations for lecturers -NewsActiveAllocationsPlaces: Places -NewsActiveAllocationsApplicants: Applicants -NewsActiveAllocationsPlacementsMade: Placements made -NewsActiveAllocationsApplicantsPlaced: Applicants placed diff --git a/messages/uniworx/categories/qualification/de-de-formal.msg b/messages/uniworx/categories/qualification/de-de-formal.msg index d4211562f..bce996fef 100644 --- a/messages/uniworx/categories/qualification/de-de-formal.msg +++ b/messages/uniworx/categories/qualification/de-de-formal.msg @@ -80,4 +80,8 @@ MppPin !ident-ok: Pin MppRecipient: Empfänger MppAddress: Adresse MppLang: Sprache -MppBadLanguage: Sprache muss derzeit "de" oder "en" sein. \ No newline at end of file +MppBadLanguage: Sprache muss derzeit "de" oder "en" sein. +LmsAutomaticQueuing n@Natural: Die folgenden Funktionen werden normalerweise einmal pro Tag um #{show n} Uhr ausgeführt. +LmsManualQueuing: Die folgenden Funktionen sollten einmal pro Tag ausgeführt werden. +BtnLmsEnqueue: Nutzer mit ablaufenden Qualifikationen zum E-Learning anmelden und benachrichtigen +BtnLmsDequeue: Nutzer mit beendetem E-Learning ggf. benachrichtigen und aufräumen \ No newline at end of file diff --git a/messages/uniworx/categories/qualification/en-eu.msg b/messages/uniworx/categories/qualification/en-eu.msg index 2e15e3c97..3a95b25bf 100644 --- a/messages/uniworx/categories/qualification/en-eu.msg +++ b/messages/uniworx/categories/qualification/en-eu.msg @@ -80,4 +80,8 @@ MppPin: Pin MppRecipient: Recipient MppAddress: Address MppLang: Language -MppBadLanguage: Language currently restricted to "en" or "de". \ No newline at end of file +MppBadLanguage: Language currently restricted to "en" or "de". +LmsAutomaticQueuing n@Natural: The following functions are executed daily at #{show n} o'clock. +LmsManualQueuing: The following functions should be executed daily. +BtnLmsEnqueue: Enqueue users with expiring qualifications for e-learning and notify them. +BtnLmsDequeue: Dequeue users with finished e-learning and notify, if appropriate. \ No newline at end of file diff --git a/messages/uniworx/categories/school/de-de-formal.msg b/messages/uniworx/categories/school/de-de-formal.msg index 81f08cfbc..e3706b656 100644 --- a/messages/uniworx/categories/school/de-de-formal.msg +++ b/messages/uniworx/categories/school/de-de-formal.msg @@ -27,7 +27,6 @@ SchoolExists ssh@SchoolId: Institut „#{ssh}“ existiert bereits SchoolLecturer: Dozent:in SchoolEvaluation: Kursumfragenverwaltung SchoolExamOffice: Prüfungsverwaltung -SchoolAllocation: Zentralanmeldungs-Administration SchoolAdmin !ident-ok: Admin SchoolAuthorshipStatementSection: Eigenständigkeitserklärungen diff --git a/messages/uniworx/categories/school/en-eu.msg b/messages/uniworx/categories/school/en-eu.msg index 42a7a3b8d..198bb6c4e 100644 --- a/messages/uniworx/categories/school/en-eu.msg +++ b/messages/uniworx/categories/school/en-eu.msg @@ -28,7 +28,6 @@ SchoolAdmin: Admin SchoolLecturer: Lecturer SchoolEvaluation: Course evaluation SchoolExamOffice: Exam office -SchoolAllocation: Administration of central allocations SchoolAuthorshipStatementSection: Statements of Authorship SchoolAuthorshipStatementSheetMode: Mode for exam-unrelated exercise sheet submissions diff --git a/messages/uniworx/categories/send/send_notifications/de-de-formal.msg b/messages/uniworx/categories/send/send_notifications/de-de-formal.msg index 50a25af92..d41551a38 100644 --- a/messages/uniworx/categories/send/send_notifications/de-de-formal.msg +++ b/messages/uniworx/categories/send/send_notifications/de-de-formal.msg @@ -2,61 +2,6 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later -#allocation.hs + templates in scope -MailSubjectAllocationStaffRegister allocationSchool@SchoolId allocation@AllocationName: Sie können nun Kurse für die Zentralameldung #{allocationSchool}: „#{allocation}“ registrieren -MailSubjectAllocationStaffRegisterMultiple n@Int: Sie können nun Kurse für #{n} Zentralameldungen registrieren -MailSubjectAllocationRegister allocationSchool@SchoolId allocation@AllocationName: Es kann sich nun für Kurse der Zentralameldung #{allocationSchool}: „#{allocation}“ beworben werden -MailSubjectAllocationRegisterMultiple n@Int: Es kann sich nun für Kurse für #{n} Zentralanmeldungen beworben werden -MailSubjectAllocationAllocation allocationSchool@SchoolId allocation@AllocationName: Sie können nun (optional) Bewerbungen für ihre Kurse in der Zentralanmeldung #{allocationSchool}: „#{allocation}“ bewerten -MailSubjectAllocationAllocationMultiple n@Int: Sie können nun (optional) Bewerbungen für ihre Kurse in #{n} Zentralanmeldungen bewerten -MailSubjectAllocationUnratedApplications allocationSchool@SchoolId allocation@AllocationName: Sie können nun (optional) Bewerbungen für ihre Kurse in der Zentralanmeldung #{allocationSchool}: „#{allocation}“ bewerten -MailSubjectAllocationUnratedApplicationsMultiple n@Int: Sie können nun (optional) Bewerbungen für ihre Kurse in #{n} Zentralanmeldungen bewerten -MailSubjectAllocationNewCourse allocation@AllocationName: Es wurde ein zusätzlicher Kurs zur Zentralanmeldung „#{allocation}” eingetragen -MailSubjectAllocationResults allocation@AllocationName: Plätze für Zentralanmeldung „#{allocation}“ wurden verteilt -AllocationResultLecturer csh@CourseShorthand count@Int64 count2@Int64: #{count} Teilnehmer:innen (von insgesamt #{count2}) für #{csh} -AllocationResultLecturerAll csh@CourseShorthand count@Int64: #{count} Teilnehmer:innen für #{csh} -AllocationResultLecturerNone csh@CourseShorthand: Keine Teilnehmer:innen für #{csh} -MailAllocationStaffRegisterIntroMultiple n@Int: Sie können nun Kurse für die folgenden #{n} Zentralameldungen registrieren: -MailAllocationStaffRegisterNewCourse: Sie können auf der unten aufgeführten Seite neue Kurse in FRADrive anlegen. Hierbei haben Sie die Möglichkeit anzugeben, dass der Kurs an einer Zentralanmeldung teilnimmt. -MailAllocationStaffRegisterDeadline n@Int deadline@Text: Bitte beachten Sie, dass alle Kurse, die an #{pluralDE n "dieser Zentralanmeldung" "diesen Zentralanmeldungen"} teilnehmen, bis #{deadline} eingetragen sein müssen. -MailAllocationStaffRegisterDeadlineMultiple: Bitte beachten Sie, dass alle Kurse, die an einer dieser Zentralanmeldungen teilnehmen, bis Ende der jeweiligen Regstrierungsphase (siehe unten) eingetragen sein müssen. -MailAllocationStaffRegisterDeadlineSingle deadline@Text: Registrierungsphase endet #{deadline} -MailAllocationStaffRegisterDeadlineSingleNothing: Aktuell kein Ende der Registrierungsphase festgelegt -MailAllocationSchoolAndName allocationSchool@SchoolId allocation@AllocationName: #{allocationSchool}: „#{allocation}“ -CourseNew: Neuen Kurs anlegen -MailAllocationRegisterIntroMultiple n@Int: Es kann sich nun für Kurse für die folgenden #{n} Zentralanmeldungen beworben werden: -MailAllocationRegister n@Int: Es kann sich nun, auf #{pluralDE n "der unten aufgeführten Seite" "den unten aufgeführten Seiten"}, für alle Kurse der #{pluralDE n "Zentralanmeldung" "Zentralanmeldungen"} jeweils einzeln beworben werden. -MailAllocationRegisterDeadline deadline@Text: Bitte beachten Sie, dass alle Bewerbungen bis #{deadline} eingegangen sein müssen. -MailAllocationRegisterDeadlineMultiple: Bitte beachten Sie, dass alle Bewerbungen bis Ende der jeweiligen Bewerbungsphase (siehe unten) eingegangen sein müssen. -MailAllocationRegisterDeadlineSingle deadline@Text: Bewerbungsphase endet #{deadline} -MailAllocationRegisterDeadlineSingleNothing: Aktuell kein Ende der Bewerbungsphase festgelegt -MailAllocationAllocationIntroMultiple n@Int: Sie können nun (optional) Bewerbungen für ihre Kurse in #{n} Zentralanmeldungen bewerten: -MailAllocationAllocation n@Int: Sie können nun auf den unten aufgeführten Seiten Bewerbungen, die im Rahmen der #{pluralDE n "Zentralanmeldung" "Zentralanmeldungen"} an ihre Kurse gestellt wurden, bewerten. Die Bewertungen werden bei der Vergabe der Plätze berücksichtigt. -MailAllocationApplicationsMayChange deadline@Text: Bitte beachten Sie, dass Studierende noch bis #{deadline} Bewerbungen stellen, verändern und zurückziehen können. Bewerbungen, die sich nach ihrer Bewertung noch verändern, müssen neu bewertet werden. -MailAllocationApplicationsRegisterDeadline deadline@Text: Bewerbungsphase endet #{deadline} -MailAllocationApplicationsRegisterDeadlineNothing: Aktuell kein Ende der Bewerbungsphase festgelegt -MailAllocationApplicationsMayChangeMultiple: Bitte beachten Sie, dass Studierende noch bis Ende der Bewerbungsphase (siehe unten) der jeweiligen Zentralanmeldung Bewerbungen stellen, verändern und zurückziehen können. Bewerbungen, die sich nach ihrer Bewertung noch verändern, müssen neu bewertet werden. -MailAllocationAllocationDeadline deadline@Text: Bitte beachten Sie, dass alle Bewertungen bis #{deadline} erfolgt sein müssen. -MailAllocationApplicationsAllocationDeadline deadline@Text: Bewertungsphase endet #{deadline} -MailAllocationApplicationsAllocationDeadlineNothing: Aktuell keine Ende der Bewertungsphase festgelegt -MailAllocationAllocationDeadlineMultiple: Bitte beachten Sie, dass alle Bewertungen bis Ende der Bewertungsphase (siehe unten) erfolgt sein müssen. -MailAllocationUnratedApplicationsIntroMultiple n@Int: Sie können nun (optional) Bewerbungen für ihre Kurse in #{n} Zentralanmeldungen bewerten: -MailAllocationUnratedApplications n@Int: Für die unten aufgeführten Kurse liegen Bewerbungen vor, die im Rahmen der #{pluralDE n "Zentralanmeldung" "Zentralanmeldungen"} an den jeweiligen Kurs gestellt wurden, die entweder noch nicht bewertet wurden oder die nach der Bewertung noch verändert wurden, sodass die vorhandenen Bewertungen nun nicht mehr gültig sind. -MailAllocationUnratedApplicationsRatingIsOptional: Es steht Ihnen frei so viele oder so wenige Bewerbungen zu bewerten, wie Sie möchten (Sie können auch garkeine Bewerbungen bewerten). -MailAllocationUnratedApplicationsCount i@Natural: #{i} #{pluralDE i "Bewerbung" "Bewerbungen"} -AllocationResultsLecturer: Im Rahmen der oben genannten Zentralanmeldung wurden Plätze zugewiesen, wie folgt: -AllocationResultsLecturerSubstituteCoursesWarning: Bitte konfigurieren Sie so bald wie möglich einen Zeitrahmen in dem Sie bereit sind etwaige Nachrücker in den folgenden Kursen zu akzeptieren: -AllocationResultsStudent: Sie haben Plätze erhalten in: -AllocationNoResultsStudent: Sie haben leider keine Plätze erhalten. -AllocationResultStudent csh@CourseShorthand: Sie haben einen Platz in #{csh} erhalten. -AllocationResultsTip: Die folgenden Informationen entsprechen dem aktuellen Stand der Zentralanmeldung und können sich, z.B. durch die Verteilung von Plätzen an Nachrücker, noch ändern. Über zukünftige Änderungen, die Sie betreffen, werden Sie gesondert informiert. -AllocationResultsStudentTip: Unten aufgeführt sind alle Plätze, die Sie im Rahmen der genannten Zentralanmeldung erhalten haben und von denen Sie seit dem weder abgemeldet wurden, noch sich selbst abgemeldet haben. Plätze, über die Sie ggf. bereits informiert wurden, können also erneut aufgeführt sein. -AllocationResultStudentRegistrationTip: Sie sind zu oben genanntem Kurs in FRADrive angemeldet. -AllocationResultsStudentRegistrationTip: Sie sind zu den oben genannten Kursen in FRADrive angemeldet. -MailAllocationNewCourseTip: Es wurde der folgende Kurs zur Zentralanmeldung eingetragen: -MailAllocationNewCourseEditApplicationsHere: Sie können Ihre Bewerbung(en) hier anpassen: -MailAllocationNewCourseApplyHere: Sie können sich hier bewerben: - #correctionsAssigned.hs + templates MailSubjectCorrectionsAssigned csh@CourseShorthand sheetName@SheetName: Ihnen wurden Korrekturen zu #{sheetName} in #{csh} zugeteilt MailCorrectionsAssignedIntro courseName@Text termDesc@Text sheetName@SheetName n@Int: #{n} #{pluralDE n "Abgabe wurde" "Abgaben wurden"} Ihnen zur Korrektur für #{sheetName} im Kurs #{courseName} (#{termDesc}) zugeteilt. diff --git a/messages/uniworx/categories/send/send_notifications/en-eu.msg b/messages/uniworx/categories/send/send_notifications/en-eu.msg index 8684f7085..381b6bf73 100644 --- a/messages/uniworx/categories/send/send_notifications/en-eu.msg +++ b/messages/uniworx/categories/send/send_notifications/en-eu.msg @@ -2,61 +2,6 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later -#allocation.hs + templates in scope -MailSubjectAllocationStaffRegister allocationSchool allocation: You can now register courses for the central allocation #{allocationSchool}: “#{allocation}” -MailSubjectAllocationStaffRegisterMultiple n: You can now register courses for #{n} central allocations -MailSubjectAllocationRegister allocationSchool allocation: Applications can now be made for courses of the central allocation #{allocationSchool}: “#{allocation}” -MailSubjectAllocationRegisterMultiple n: Applications can now be made for courses of #{n} central allocations -MailSubjectAllocationAllocation allocationSchool allocation: You can now (optionally) rate applications for your courses that participate in the central allocation #{allocationSchool}: “#{allocation}” -MailSubjectAllocationAllocationMultiple n: You can now (optionally) rate applications for your courses that participate in #{n} central allocations -MailSubjectAllocationUnratedApplications allocationSchool allocation: You can now (optionally) rate applications for your courses that participate in the central allocation #{allocationSchool}: “#{allocation}” -MailSubjectAllocationUnratedApplicationsMultiple n: You can now (optionally) rate applications for your courses that participate in #{n} central allocations -MailSubjectAllocationNewCourse allocation: A new course was added to the central allocation “#{allocation}” -AllocationResultLecturer csh count count2: #{count} #{pluralEN count "participant" "participants"} (of #{count2}) for #{csh} -AllocationResultLecturerAll csh count: #{count} #{pluralEN count "participant" "participants"} for #{csh} -AllocationResultLecturerNone csh: No participants for #{csh} -MailAllocationStaffRegisterIntroMultiple n: You can now register courses for the following #{n} central allocations: -MailAllocationStaffRegisterNewCourse: You can create new courses in FRADrive on the site listed below. While doing so you can specify that the course should participate in a central allocation. -MailAllocationStaffRegisterDeadline n deadline: Please consider that all courses, that are to participate in #{pluralEN n "this central allocation" "these central allocations"}, must be registered before #{deadline}. -MailAllocationStaffRegisterDeadlineMultiple: Please consider that alle courses, that are to participate in these central allocations, must be registered before the ends of their respective course registration periods (see below). -MailAllocationStaffRegisterDeadlineSingle deadline: Course Registration period ends on #{deadline} -MailAllocationStaffRegisterDeadlineSingleNothing: Currently no end of course registration period configured -MailAllocationSchoolAndName allocationSchool allocation: #{allocationSchool}: “#{allocation}” -CourseNew: Create new course -MailAllocationRegisterIntroMultiple n: Applications can now be made for courses of the following #{n} central allocations: -MailAllocationRegister n: Applications can now be made for each of the courses participating in the central #{pluralEN n "allocation" "allocations"} on the #{pluralEN n "page" "pages"} listed below. -MailAllocationRegisterDeadline deadline: Please consider that all applications have to be made before #{deadline}. -MailAllocationRegisterDeadlineMultiple: Please consider that all applications for courses participating in central allocations have to be made before the ends of their respective application periods (see below). -MailAllocationRegisterDeadlineSingle deadline: Application periods ends on #{deadline} -MailAllocationRegisterDeadlineSingleNothing: Currently no end of application period configured -MailAllocationAllocationIntroMultiple n: You can now (optionally) rate applications for your courses that participate in #{n} central allocations: -MailAllocationAllocation n: You can now rate applications made in the context of the central #{pluralEN n "allocation" "allocations"} for your courses on the pages listed below. Ratings made will have an effect on the allocation. -MailAllocationApplicationsMayChange deadline: Please consider that applicants may change or delete their applications until #{deadline}. If an application was rated before it was changed it needs to be rated again. -MailAllocationApplicationsRegisterDeadline deadline: Application period ends on #{deadline} -MailAllocationApplicationsRegisterDeadlineNothing: Currently no end of application period configured -MailAllocationApplicationsMayChangeMultiple: Please consider that applicants may change or delete their applications until the end of the respective central allocation's application period. If an application was rated before it was changed it needs to be rated again. -MailAllocationAllocationDeadline deadline: Please consider that all ratings have to be made before #{deadline}. -MailAllocationApplicationsAllocationDeadline deadline: Rating period ends on #{deadline} -MailAllocationApplicationsAllocationDeadlineNothing: Currently no end of rating period configured -MailAllocationAllocationDeadlineMultiple: Please consider that all ratings have to be made before the end of the respective rating period (see below). -MailAllocationUnratedApplicationsIntroMultiple n: You can now (optionally) rate applications for your courses that participate in #{n} central allocations: -MailAllocationUnratedApplications n: For there courses listed below, there exist applications made in the context of #{pluralEN n "the central allocation" "one of the central allocations"} which have either not yet been rated or which have changed since they were rated. -MailAllocationUnratedApplicationsRatingIsOptional: You are free to rate as many or as few applications as you want to (you may also rate none of them). -MailAllocationUnratedApplicationsCount i: #{i} #{pluralDE i "application" "applications"} -MailSubjectAllocationResults allocation: Placements have been made for the central allocation “#{allocation}” -AllocationResultsLecturer: In the course of the central allocations placements have been made as follows: -AllocationResultsLecturerSubstituteCoursesWarning: Please configure a deadline up to which you are able to accept substitute registrations for the following courses as soon as possible: -AllocationResultsStudent: You have been placed in: -AllocationNoResultsStudent: Unfortunately you were not placed in any courses. -AllocationResultStudent csh: You were placed in #{csh}. -AllocationResultsTip: The following information reflect the current state of the allocation and are subject to change (e.g. when handling succession). You will be informed separately if any future changes concern you. -AllocationResultsStudentTip: Listed below are placements in courses which you have received due to the mentioned central allocation and for which you have not left the respective course or have been deregistered. Thus placements you have been informed of already may be listed again. -AllocationResultStudentRegistrationTip: You were enrolled in the course mentioned above in FRADrive. -AllocationResultsStudentRegistrationTip: You were enrolled in the courses mentioned above in FRADrive. -MailAllocationNewCourseTip: The following course was added to the central allocation: -MailAllocationNewCourseEditApplicationsHere: You can modify your application here: -MailAllocationNewCourseApplyHere: You can apply here: - #correctionsAssigned.hs + templates MailSubjectCorrectionsAssigned csh sheetName: You were assigned corrections for #{sheetName} of #{csh} MailCorrectionsAssignedIntro courseName termDesc sheetName n: You were assigned #{n} #{pluralEN n "correction" "corrections"} for #{sheetName} of #{courseName} (#{termDesc}). diff --git a/messages/uniworx/categories/settings/auth_settings/de-de-formal.msg b/messages/uniworx/categories/settings/auth_settings/de-de-formal.msg index bc0ccf58e..f91e260cf 100644 --- a/messages/uniworx/categories/settings/auth_settings/de-de-formal.msg +++ b/messages/uniworx/categories/settings/auth_settings/de-de-formal.msg @@ -15,7 +15,6 @@ AuthTagExamOffice: Nutzer:in ist mit Prüfungsverwaltung beauftragt AuthTagSystemExamOffice: Nutzer:in ist mit systemweiter Prüfungsverwaltung beauftragt AuthTagSystemPrinter: Nutzer:in ist mit systemweiten Druck von Briefen beauftragt AuthTagEvaluation: Nutzer:in ist mit Kursumfragenverwaltung beauftragt -AuthTagAllocationAdmin: Nutzer:in ist mit der Administration von Zentralanmeldungen beauftragt AuthTagToken: Nutzer:in präsentiert Authorisierungs-Token AuthTagNoEscalation: Nutzer-Rechte werden nicht auf fremde Institute ausgeweitet AuthTagDeprecated: Seite ist nicht überholt @@ -27,17 +26,14 @@ AuthTagTutor: Nutzer:in ist Tutor:in AuthTagTutorControl: Tutorierende haben Kontrolle über ihre Tutorium AuthTagTime: Zeitliche Einschränkungen sind erfüllt AuthTagStaffTime: Zeitliche Einschränkungen für Lehrbeteiligte sind erfüllt -AuthTagAllocationTime: Zeitliche Einschränkungen durch Zentralanmeldung sind erfüllt AuthTagCourseTime: Zeitliche Einschränkungen für Kurssichtbarkeit sind erfüllt AuthTagCourseRegistered: Nutzer:in ist Kursteilnehmer:in -AuthTagAllocationRegistered: Nutzer:in nimmt an der Zentralanmeldung teil AuthTagTutorialRegistered: Nutzer:in ist Tutoriumsteilnehmer:in AuthTagExamRegistered: Nutzer:in ist Prüfungsteilnehmer:in AuthTagExamResult: Nutzer:in hat Prüfungsergebnisse AuthTagExamOccurrenceRegistered: Nutzer:in ist für Prüfungsraum/-termin angemeldet AuthTagExamOccurrenceRegistration: Anmeldung zur Prüfung erfolgt inkl. Raum/Termin AuthTagParticipant: Nutzer:in ist mit Kurs assoziiert -AuthTagApplicant: Nutzer:in ist mit Bewerber zum Kurs AuthTagRegisterGroup: Nutzer:in ist nicht Mitglied eines anderen Tutoriums mit der selben Registrierungs-Gruppe AuthTagCapacity: Kapazität ist ausreichend AuthTagEmpty: Ressource ist „leer“ diff --git a/messages/uniworx/categories/settings/auth_settings/en-eu.msg b/messages/uniworx/categories/settings/auth_settings/en-eu.msg index 5f61881c0..5a27d7360 100644 --- a/messages/uniworx/categories/settings/auth_settings/en-eu.msg +++ b/messages/uniworx/categories/settings/auth_settings/en-eu.msg @@ -15,7 +15,6 @@ AuthTagExamOffice: User is part of an exam office AuthTagSystemExamOffice: User is charged with system wide exam administration AuthTagSystemPrinter: User is responsible for system wide letter printing AuthTagEvaluation: User is charged with course evaluation -AuthTagAllocationAdmin: User is charged with administration of central allocations AuthTagToken: User is presenting an authorisation-token AuthTagNoEscalation: User permissions are not being expanded to other departments AuthTagDeprecated: Page is not deprecated @@ -27,17 +26,14 @@ AuthTagTutor: User is tutor AuthTagTutorControl: Tutors have control over their tutorial AuthTagTime: Time restrictions are fulfilled AuthTagStaffTime: Time restrictions for teaching staff are fulfilled -AuthTagAllocationTime: Time restrictions due to a central allocation are fulfilled AuthTagCourseTime: Time restrictions for course visibility are fulfilled AuthTagCourseRegistered: User is enrolled in course -AuthTagAllocationRegistered: User participates in central allocation AuthTagTutorialRegistered: User is tutorial participant AuthTagExamRegistered: User is exam participant AuthTagExamResult: User has an exam result AuthTagExamOccurrenceRegistered: User is registered for exam occurrence/room AuthTagExamOccurrenceRegistration: Registration for exam is done including occurrence/room AuthTagParticipant: User participates in course -AuthTagApplicant: User is applicant for course AuthTagRegisterGroup: User is not participant in any tutorial of the same registration group AuthTagCapacity: Capacity is sufficient AuthTagEmpty: Resource is “empty” diff --git a/messages/uniworx/categories/settings/de-de-formal.msg b/messages/uniworx/categories/settings/de-de-formal.msg index 3f9b5beb1..cbe000727 100644 --- a/messages/uniworx/categories/settings/de-de-formal.msg +++ b/messages/uniworx/categories/settings/de-de-formal.msg @@ -57,10 +57,7 @@ NotificationTriggerKindCourseLecturer: Für Kursverwalter:innen NotificationTriggerKindAdmin: Für Administrator:innen NotificationTriggerKindExamOffice: Für Prüfungsverwalter:innen NotificationTriggerKindEvaluation: Für Vorlesungsumfragen -NotificationTriggerKindAllocationStaff: Für Zentralanmeldungen (Dozierende) -NotificationTriggerKindAllocationParticipant: Für Zentralanmeldungen NotificationTriggerKindSubmissionUser: Für Mitabgebende einer Übungsblatt-Abgabe -NotificationTriggerKindAllocationAdmin: Für Administrator:innen von Zentralanmeldungen NotificationTriggerSubmissionRatedGraded: Meine Abgabe in einem gewerteten Übungsblatt wurde korrigiert NotificationTriggerSubmissionRated: Meine Abgabe wurde korrigiert @@ -77,20 +74,12 @@ NotificationTriggerExamRegistrationActive: Ich kann mich für eine Prüfung anme NotificationTriggerExamRegistrationSoonInactive: Ich kann mich bald nicht mehr für eine Prüfung anmelden NotificationTriggerExamDeregistrationSoonInactive: Ich kann mich bald nicht mehr von einer Prüfung abmelden NotificationTriggerExamResult: Ich kann ein neues Prüfungsergebnis einsehen -NotificationTriggerAllocationStaffRegister: Ich kann Kurse bei einer neuen Zentralanmeldung eintragen -NotificationTriggerAllocationAllocation: Ich kann Zentralanmeldungs-Bewerbungen für einen meiner Kurse bewerten -NotificationTriggerAllocationRegister: Ich kann mich bei einer neuen Zentralanmeldung bewerben -NotificationTriggerAllocationOutdatedRatings: Zentralanmeldungs-Bewerbungen für einen meiner Kurse wurden verändert, nachdem sie bewertet wurden -NotificationTriggerAllocationUnratedApplications: Bewertungen zu Zentralanmeldungs-Bewerbungen für einen meiner Kurse stehen aus -NotificationTriggerAllocationResults: Plätze wurden für eine meiner Zentralanmeldungen verteilt NotificationTriggerExamOfficeExamResults: Ich kann neue Prüfungsergebnisse einsehen NotificationTriggerExamOfficeExamResultsChanged: Prüfungsergebnisse wurden verändert NotificationTriggerCourseRegistered: Ein:e Kursverwalter:in hat mich zu einem Kurs angemeldet NotificationTriggerSubmissionUserCreated: Ich wurde als Mitabgebender zu einer Übungsblatt-Abgabe hinzugefügt NotificationTriggerSubmissionEdited: Eine meiner Übungsblatt-Abgaben wurde verändert NotificationTriggerSubmissionUserDeleted: Ich wurde als Mitabgebender von einer Übungsblatt-Abgabe entfernt -NotificationTriggerAllocationNewCourse: Es wurde ein neuer Kurs eingetragen zu einer Zentralanmeldungen, zu der ich meine Teilnahme registriert habe -NotificationTriggerAllocationNewCourseTip: Kann pro Zentralanmeldung überschrieben werden NotificationTriggerQualification: Eine meiner Qualifikationen läuft ab UserDisplayNameRules: Vorgaben für den angezeigten Namen @@ -113,8 +102,6 @@ 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! -FormAllocationNotifications: Benachrichtigungen für neue Zentralanmeldungskurse -FormAllocationNotificationsTip: Wollen Sie eine Benachrichtigung per E-Mail erhalten wenn ein neuer Kurs zur Zentralanmeldung eingetragen wird? „Ja“ und „Nein“ überschreiben die entsprechende systemweite Einstellung unter "Benachrichtigungen" SettingsUpdate: Einstellungen erfolgreich gespeichert TokensResetSuccess: Authorisierungs-Tokens invalidiert ProfileTitle: Benutzereinstellungen @@ -125,9 +112,6 @@ LastEditByUser: Ihre letzte Bearbeitung SubmissionGroupName: Gruppenname TitleChangeUserDisplayEmail: Öffentliche E-Mail-Adresse setzen LanguageChanged: Sprache erfolgreich geändert -AllocNotifyNewCourseDefault: Systemweite Einstellung -AllocNotifyNewCourseForceOff: Nein -AllocNotifyNewCourseForceOn: Ja Settings: Individuelle Benutzereinstellungen FormExamOffice: Prüfungsverwaltung diff --git a/messages/uniworx/categories/settings/en-eu.msg b/messages/uniworx/categories/settings/en-eu.msg index c543e822f..4e3d7af29 100644 --- a/messages/uniworx/categories/settings/en-eu.msg +++ b/messages/uniworx/categories/settings/en-eu.msg @@ -57,10 +57,7 @@ NotificationTriggerKindCourseLecturer: For course administrators NotificationTriggerKindAdmin: For administrators NotificationTriggerKindExamOffice: For the exam office NotificationTriggerKindEvaluation: For course evaluations -NotificationTriggerKindAllocationStaff: For central allocations (lecturers) -NotificationTriggerKindAllocationParticipant: For central allocations NotificationTriggerKindSubmissionUser: For participants in an exercise sheet submission -NotificationTriggerKindAllocationAdmin: For administrators of central allocations NotificationTriggerSubmissionRatedGraded: My submission for an exercise sheet was marked (not purely informational) NotificationTriggerSubmissionRated: My submission for an exercise sheet was marked @@ -77,20 +74,12 @@ NotificationTriggerExamRegistrationActive: I can now register for an exam NotificationTriggerExamRegistrationSoonInactive: I will soon no longer be able to register for an exam NotificationTriggerExamDeregistrationSoonInactive: I will soon no longer be able to deregister from an exam NotificationTriggerExamResult: An exam result is available -NotificationTriggerAllocationStaffRegister: I can now register a course for central allocation -NotificationTriggerAllocationAllocation: I can now grade applications to a central alloction for one of my courses -NotificationTriggerAllocationRegister: I can now apply to a new central allocation -NotificationTriggerAllocationOutdatedRatings: Applications to a central allocation for one of my courses have changed since they were graded -NotificationTriggerAllocationUnratedApplications: Grades are pending for applications to a central allocation for one of my courses -NotificationTriggerAllocationResults: Participants have been placed by one of my central allocations NotificationTriggerExamOfficeExamResults: New exam results are available NotificationTriggerExamOfficeExamResultsChanged: Exam results have changed NotificationTriggerCourseRegistered: A course administrator has enrolled me in a course NotificationTriggerSubmissionUserCreated: I was added to an exercise sheet submission NotificationTriggerSubmissionEdited: One of my exercise sheet submissions was changed NotificationTriggerSubmissionUserDeleted: I was removed from one of my exercise sheet submissions -NotificationTriggerAllocationNewCourse: A new course was added to a central allocation for which I have registered my participation -NotificationTriggerAllocationNewCourseTip: Can be overridden per central allocation NotificationTriggerQualification: My Qualifications are about to expire UserDisplayNameRules: Specification for display names @@ -113,8 +102,6 @@ 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! -FormAllocationNotifications: Notifications for new central allocation courses -FormAllocationNotificationsTip: Do you want to receive a notification if a new course is added to the central allocation? “Yes” and “No” override the system wide setting under “Notifications” SettingsUpdate: Successfully updated settings TokensResetSuccess: Successfully invalidated all authorisation tokens ProfileTitle: Settings @@ -125,10 +112,6 @@ LastEditByUser: Your last edit SubmissionGroupName: Group name TitleChangeUserDisplayEmail: Set display email LanguageChanged: Language changed successfully - -AllocNotifyNewCourseDefault: System-wide setting -AllocNotifyNewCourseForceOff: No -AllocNotifyNewCourseForceOn: Yes Settings: Settings FormExamOffice: Exam Office \ No newline at end of file diff --git a/messages/uniworx/categories/term/de-de-formal.msg b/messages/uniworx/categories/term/de-de-formal.msg index 9166aaf30..8a93e5698 100644 --- a/messages/uniworx/categories/term/de-de-formal.msg +++ b/messages/uniworx/categories/term/de-de-formal.msg @@ -28,7 +28,7 @@ TermLectureStartTooltip: Muss am oder nach dem Beginn liegen TermLectureEndTooltip: Muss am oder vor dem Ende liegen TermActive: Aktiv TermActiveTooltip: Zeitraum in dem Lehrende Kurse anlegen dürfen; kann auf angegebene Lehrende eingeschränkt werden -TermActiveForPlaceholder: Email (optional) +TermActiveForPlaceholder: E-Mail (optional) NumCourses num@Int64: #{num} #{pluralDE num "Kurs" "Kurse"} TermsHeading: Semesterübersicht TermEditHeading: Semester editieren/anlegen diff --git a/messages/uniworx/categories/term/en-eu.msg b/messages/uniworx/categories/term/en-eu.msg index 4491e0ef4..7880cc072 100644 --- a/messages/uniworx/categories/term/en-eu.msg +++ b/messages/uniworx/categories/term/en-eu.msg @@ -28,7 +28,7 @@ TermLectureStartTooltip: Must be on or after starting day TermLectureEndTooltip: Must be before or on ending day TermActive: Active TermActiveTooltip: Timeframe when lecturers may add courses; maybe restricted for specified lecturers -TermActiveForPlaceholder: E-Mail (optional) +TermActiveForPlaceholder: Email (optional) NumCourses num: #{num} #{pluralEN num "course" "courses"} TermsHeading: Semesters TermEditHeading: Edit semester diff --git a/messages/uniworx/utils/buttons/de-de-formal.msg b/messages/uniworx/utils/buttons/de-de-formal.msg index 35e2ab2c6..f627354ae 100644 --- a/messages/uniworx/utils/buttons/de-de-formal.msg +++ b/messages/uniworx/utils/buttons/de-de-formal.msg @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost ,Winnie Ros +# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost ,Winnie Ros ,Sarah Vaupel # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -9,8 +9,6 @@ BtnRegister: Anmelden BtnDeregister: Abmelden BtnCourseRegister: Zum Kurs anmelden BtnCourseDeregister: Vom Kurs abmelden -BtnCourseApply: Zum Kurs bewerben -BtnCourseRetractApplication: Bewerbung zum Kurs zurückziehen BtnExamRegister: Anmelden zur Prüfung BtnExamRegisterOccurrence: Anmelden zum Prüfungstermin/-raum BtnExamSwitchOccurrence: Zu Prüfungstermin/-raum wechseln @@ -32,20 +30,10 @@ BtnCorrInvAccept: Annehmen BtnCorrInvDecline: Ablehnen BtnSubmissionsAssign: Abgaben automatisch zuteilen BtnSubmissionsAssignAll: Abgaben automatisch zuteilen -BtnAllocationCompute: Vergabe berechnen -BtnAllocationAccept: Vergabe akzeptieren -BtnAllocationRegister: Teilnahme registrieren -BtnAllocationRegistrationEdit: Teilnahme anpassen -BtnAllocationApply: Bewerben -BtnAllocationApplicationEdit: Bewerbung ersetzen -BtnAllocationApplicationRetract: Bewerbung zurückziehen -BtnAllocationApplicationRate: Bewerbung bewerten BtnSystemMessageHide: Verstecken BtnSystemMessageUnhide: Nicht mehr verstecken BtnCommunicationSend: Senden BtnCommunicationTest: Test-Nachricht verschicken -BtnAcceptApplications: Bewerbungen akzeptieren -BtnAcceptApplicationsTip: Mit dem untigen Knopf können Sie den Kurs (höchstens bis zur angegeben Maximalkapazität, falls eingestellt) mit Bewerbern auffüllen. Die Bewertungen der Bewerbungen werden dabei berücksichtigt (Unbewertet wird behandelt wie eine Note zwischen 2.3 und 2.7). Bewerber mit Veto oder 5.0 werden nicht angemeldet. BtnExamAutoOccurrenceCalculate: Verteilungstabelle berechnen BtnExamAutoOccurrenceAccept: Verteilung akzeptieren BtnExamAutoOccurrenceNudgeUp !ident-ok: + @@ -65,4 +53,7 @@ BtnNotifyNewCourseForceOff: Nicht benachrichtigen BtnUserAssimilate: Assimilieren BtnCloseExam: Prüfung abschließen BtnFinishExam: Prüfungsergebnisse sichtbar schalten -BtnConfirm: Bestätigen \ No newline at end of file +BtnConfirm: Bestätigen +BtnCourseRegisterAdd: Personen suchen +BtnCourseRegisterConfirm: Ausgewählte Personen anmelden +BtnCourseRegisterAbort: Abbrechen \ No newline at end of file diff --git a/messages/uniworx/utils/buttons/en-eu.msg b/messages/uniworx/utils/buttons/en-eu.msg index baa52748c..5b3a7aadc 100644 --- a/messages/uniworx/utils/buttons/en-eu.msg +++ b/messages/uniworx/utils/buttons/en-eu.msg @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022 Steffen Jost ,Winnie Ros +# SPDX-FileCopyrightText: 2022 Steffen Jost ,Winnie Ros ,Sarah Vaupel # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -9,8 +9,6 @@ BtnRegister: Register BtnDeregister: Deregister BtnCourseRegister: Enrol for course BtnCourseDeregister: Leave course -BtnCourseApply: Apply for course -BtnCourseRetractApplication: Retract application BtnExamRegister: Enrol for exam BtnExamRegisterOccurrence: Enrol for exam occurrence/room BtnExamSwitchOccurrence: Switch to exam occurrence/room @@ -32,20 +30,10 @@ BtnCorrInvAccept: Accept BtnCorrInvDecline: Decline BtnSubmissionsAssign: Assign submissions automatically BtnSubmissionsAssignAll: Automatically distribute corrections -BtnAllocationCompute: Compute allocation -BtnAllocationAccept: Accept allocation -BtnAllocationRegister: Register participation -BtnAllocationRegistrationEdit: Edit registration -BtnAllocationApply: Apply -BtnAllocationApplicationEdit: Edit application -BtnAllocationApplicationRetract: Retract application -BtnAllocationApplicationRate: Grade application BtnSystemMessageHide: Hide BtnSystemMessageUnhide: Unhide BtnCommunicationSend: Send BtnCommunicationTest: Send test message -BtnAcceptApplications: Accept applications -BtnAcceptApplicationsTip: By clicking the button below you may fill the course with applicants (only up to the maximum capacity if configured). Grading of applications will be considered (no grading is treated as if graded between 2.3 and 2.7). Vetoed applicants and applications graded 5.0 will not be enrolled. BtnInviteAccept: Accept invitation BtnInviteDecline: Decline invitation BtnExamAutoOccurrenceCalculate: Calculate assignment rules @@ -65,4 +53,7 @@ BtnNotifyNewCourseForceOff: Do not notify me BtnUserAssimilate: Assimilate BtnCloseExam: Close exam BtnFinishExam: Make results visible -BtnConfirm: Confirm \ No newline at end of file +BtnConfirm: Confirm +BtnCourseRegisterAdd: Search persons +BtnCourseRegisterConfirm: Register selected persons +BtnCourseRegisterAbort: Abort \ No newline at end of file diff --git a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg index 2552a6418..15be16d0d 100644 --- a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg @@ -6,24 +6,15 @@ BreadcrumbCsvOptions: CSV-Optionen BreadcrumbSubmissionFile: Datei BreadcrumbSubmissionUserInvite: Einladung zur Abgabe BreadcrumbCryptoIDDispatch: CryptoID-Weiterleitung -BreadcrumbCourseAppsFiles: Bewerbungsdateien BreadcrumbCourseNotes: Kursnotizen BreadcrumbHiWis: Korrektor:innen BreadcrumbMaterial !ident-ok: Material BreadcrumbSheet: Übungsblatt BreadcrumbTutorial: Tutorium BreadcrumbExam: Prüfung -BreadcrumbApplicant: Bewerber:in BreadcrumbCourseRegister: Anmelden -BreadcrumbCourseRegisterTemplate: Bewerbungsvorlagen BreadcrumbCourseFavourite: Favorisieren BreadcrumbCourse: Kurs -BreadcrumbAllocationRegister: Teilnahme registrieren -BreadcrumbAllocation: Zentralanmeldung -BreadcrumbAllocationNew: Neue Zentralanmeldung -BreadcrumbAllocationEdit: Bearbeiten -BreadcrumbAllocationMatchings: Verteilungen -BreadcrumbAllocationMatchingLog: Verteilungs-Protokoll BreadcrumbTerm !ident-ok: Semester BreadcrumbSchool: Institut BreadcrumbUser: Benutzer:in @@ -41,7 +32,6 @@ BreadcrumbCourseNews: Kursnachricht BreadcrumbCourseNewsDelete: Kursnachricht löschen BreadcrumbCourseEventDelete: Kurstermin löschen BreadcrumbProfile: Einstellungen -BreadcrumbAllocationInfo: Ablauf einer Zentralanmeldung BreadcrumbCourseParticipantInvitation: Einladung als Kursteilnehmer:in BreadcrumbMaterialArchive: Archiv BreadcrumbMaterialFile: Datei @@ -56,7 +46,6 @@ BreadcrumbTutorInvite: Einladung als Tutor:in BreadcrumbExamCorrectorInvite: Einladung als Prüfungskorrektor:in BreadcrumbExamParticipantInvite: Einladung als Prüfungsteilnehmer:in BreadcrumbExamRegister: Anmelden -BreadcrumbApplicationFiles: Bewerbungsdateien BreadcrumbCourseNewsArchive: Archiv BreadcrumbCourseNewsFile: Datei BreadcrumbExternalExam: Externe Prüfung @@ -72,13 +61,6 @@ BreadcrumbParticipantsList: Kursteilnehmerlisten BreadcrumbParticipants: Kursteilnehmerliste BreadcrumbExamAutoOccurrence: Automatische Termin-/Raumverteilung BreadcrumbStorageKey: Lokalen Schlüssel generieren -BreadcrumbAllocationUsers: Bewerber:innen -BreadcrumbAllocationPriorities: Zentrale Dringlichkeiten -BreadcrumbAllocationCompute: Platzvergabe berechnen -BreadcrumbAllocationAccept: Platzvergabe akzeptieren -BreadcrumbAllocationAddUser: Bewerber:in hinzufügen -BreadcrumbAllocationEditUser: Bewerber:in bearbeiten -BreadcrumbAllocationDelUser: Bewerber:in entfernen BreadcrumbMessageHide: Verstecken BreadcrumbFaq !ident-ok: FAQ BreadcrumbSheetPersonalisedFiles: Personalisierte Dateien herunterladen @@ -113,7 +95,6 @@ BreadcrumbTermShow: Semester BreadcrumbTermCreate: Neues Semester anlegen BreadcrumbTermEdit: Semester editieren BreadcrumbTermCurrent: Aktuelles Semester -BreadcrumbAllocationListTitle: Zentralanmeldungen BreadcrumbParticipantsIntersect: Überschneidung von Kursteilnehmer:innen BreadcrumbCourseList: Kurse BreadcrumbCourseNew: Neuen Kurs anlegen @@ -136,7 +117,6 @@ BreadcrumbCourseEventNew: Neuer Kurstermin BreadcrumbCourseEventEdit: Kurstermin bearbeiten BreadcrumbExamList: Prüfungen BreadcrumbExamNew: Neue Prüfung anlegen -BreadcrumbCourseApplications: Bewerbungen BreadcrumbExamEdit: Prüfung bearbeiten BreadcrumbExamUsers: Teilnehmer:innen BreadcrumbExamGrades: Prüfungsleistungen diff --git a/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg b/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg index 2c8f601c5..bce374d79 100644 --- a/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg +++ b/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg @@ -6,24 +6,15 @@ BreadcrumbCsvOptions: csv-options BreadcrumbSubmissionFile: File BreadcrumbSubmissionUserInvite: Invitation to participate in a submission BreadcrumbCryptoIDDispatch: CryptoID-redirect -BreadcrumbCourseAppsFiles: Application files BreadcrumbCourseNotes: Course notes BreadcrumbHiWis: Correctors BreadcrumbMaterial: Material BreadcrumbSheet: Exercise sheet BreadcrumbTutorial: Tutorial BreadcrumbExam: Exam -BreadcrumbApplicant: Applicant BreadcrumbCourseRegister: Register -BreadcrumbCourseRegisterTemplate: Application template BreadcrumbCourseFavourite: Favourite BreadcrumbCourse: Course -BreadcrumbAllocationRegister: Register participation -BreadcrumbAllocation: Central allocation -BreadcrumbAllocationNew: New Allocation -BreadcrumbAllocationEdit: Edit -BreadcrumbAllocationMatchings: Matchings -BreadcrumbAllocationMatchingLog: Matching log BreadcrumbTerm: Semester BreadcrumbSchool: Department BreadcrumbUser: User @@ -41,7 +32,6 @@ BreadcrumbCourseNews: Course news BreadcrumbCourseNewsDelete: Delete course news BreadcrumbCourseEventDelete: Delete course occurrence BreadcrumbProfile: Settings -BreadcrumbAllocationInfo: On central allocations BreadcrumbCourseParticipantInvitation: Invitation to be a course participant BreadcrumbMaterialArchive: Archive BreadcrumbMaterialFile: File @@ -56,7 +46,6 @@ BreadcrumbTutorInvite: Invitation to be a tutor BreadcrumbExamCorrectorInvite: Invitation to be an exam corrector BreadcrumbExamParticipantInvite: Invitation to be an exam participant BreadcrumbExamRegister: Register -BreadcrumbApplicationFiles: Application files BreadcrumbCourseNewsArchive: Archive BreadcrumbCourseNewsFile: File BreadcrumbExternalExam: External exam @@ -72,13 +61,6 @@ BreadcrumbParticipantsList: Lists of course participants BreadcrumbParticipants: Course participants BreadcrumbExamAutoOccurrence: Automatic occurrence/room distribution BreadcrumbStorageKey: Generate storage key -BreadcrumbAllocationUsers: Applicants -BreadcrumbAllocationPriorities: Central priorities -BreadcrumbAllocationCompute: Compute allocation -BreadcrumbAllocationAccept: Accept allocation -BreadcrumbAllocationAddUser: Add applicant -BreadcrumbAllocationEditUser: Edit applicant -BreadcrumbAllocationDelUser: Remove participant BreadcrumbMessageHide: Hide BreadcrumbFaq: FAQ BreadcrumbSheetPersonalisedFiles: Download personalised sheet files @@ -113,7 +95,6 @@ BreadcrumbTermShow: Semesters BreadcrumbTermCreate: Create new semester BreadcrumbTermEdit: Edit semester BreadcrumbTermCurrent: Current semester -BreadcrumbAllocationListTitle: Central allocations BreadcrumbParticipantsIntersect: Common course participants BreadcrumbCourseList: Courses BreadcrumbCourseNew: Create new course @@ -133,7 +114,6 @@ BreadcrumbCourseEventNew: New course occurrence BreadcrumbCourseEventEdit: Edit course occurrence BreadcrumbExamList: Exams BreadcrumbExamNew: Create new exam -BreadcrumbCourseApplications: Applications BreadcrumbExamEdit: Edit exam BreadcrumbExamUsers: Participants BreadcrumbExamGrades: Exam results diff --git a/messages/uniworx/utils/navigation/menu/de-de-formal.msg b/messages/uniworx/utils/navigation/menu/de-de-formal.msg index 803e46860..e22177054 100644 --- a/messages/uniworx/utils/navigation/menu/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/menu/de-de-formal.msg @@ -9,11 +9,9 @@ MenuInfoLecturerCourses: Veranstaltungen MenuInfoLecturerExercises: Übungsbetrieb MenuInfoLecturerTutorials: Tutorien MenuInfoLecturerExams: Prüfungen -MenuInfoLecturerAllocations: Zentralanmeldungen MenuCsvOptions: CSV-Optionen MenuCorrectorAssignTitle: Korrektor:in zuweisen MenuOpenCourses: Kurse mit offener Registrierung -MenuOpenAllocations: Aktive Zentralanmeldungen MenuNews: Aktuell MenuInformation: Informationen MenuLegal: Rechtliche Informationen @@ -29,15 +27,10 @@ MenuHelp: Hilfe MenuProfile: Anpassen MenuLogin !ident-ok: Login MenuLogout !ident-ok: Logout -MenuAllocationList: Zentralanmeldungen -MenuAllocationNew: Neue Zentralanmeldung anlegen -MenuAllocationEdit: Zentralanmeldung bearbeiten -MenuAllocationMatchings: Verteilungen MenuCourseList: Kurse MenuCourseMembers: Kursteilnehmer:innen -MenuCourseAddMembers: KursteilnehmerInnen hinzufügen +MenuCourseAddMembers: Kursteilnehmer:innen hinzufügen MenuCourseCommunication: Kursmitteilung (E-Mail) -MenuCourseApplications: Bewerbungen MenuCourseExamOffice: Prüfungsbeauftragte MenuTermShow: Semester MenuSubmissionDelete: Abgabe löschen @@ -98,8 +91,6 @@ MenuExamOfficeExams: Prüfungen MenuExamOfficeFields: Fächer 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 @@ -110,12 +101,6 @@ MenuExternalExamList: Externe Prüfungen MenuExternalExamCorrect: Prüfungsleistungen eintragen MenuParticipantsList: Kursteilnehmerlisten MenuParticipantsIntersect: Überschneidung von Kursteilnehmer:innen -MenuAllocationUsers: Bewerber:innen -MenuAllocationPriorities: Zentrale Dringlichkeiten -MenuAllocationCompute: Platzvergabe berechnen - -MenuAllocationAddUser: Bewerber:in hinzufügen -MenuAllocationDelUser: Bewerber:in entfernen MenuFaq !ident-ok: FAQ MenuSheetPersonalisedFiles: Personalisierte Dateien herunterladen MenuCourseSheetPersonalisedFiles: Vorlage für personalisierte Übungsblatt-Dateien herunterladen diff --git a/messages/uniworx/utils/navigation/menu/en-eu.msg b/messages/uniworx/utils/navigation/menu/en-eu.msg index 73f58d1f3..ba0399da6 100644 --- a/messages/uniworx/utils/navigation/menu/en-eu.msg +++ b/messages/uniworx/utils/navigation/menu/en-eu.msg @@ -9,11 +9,9 @@ MenuInfoLecturerCourses: Courses MenuInfoLecturerExercises: Course Exercises MenuInfoLecturerTutorials: Tutorials MenuInfoLecturerExams: Exams -MenuInfoLecturerAllocations: Central allocations MenuCsvOptions: CSV-options MenuCorrectorAssignTitle: Assign corrector MenuOpenCourses: Courses with open registration -MenuOpenAllocations: Active central allocations MenuNews: News MenuInformation: Information MenuLegal: Legal @@ -29,15 +27,10 @@ MenuHelp: Support MenuProfile: Settings MenuLogin: Login MenuLogout: Logout -MenuAllocationList: Central allocations -MenuAllocationNew: Create new allocation -MenuAllocationEdit: Edit allocation -MenuAllocationMatchings: Matchings MenuCourseList: Courses MenuCourseMembers: Participants MenuCourseAddMembers: Add participants MenuCourseCommunication: Course message (email) -MenuCourseApplications: Applications MenuCourseExamOffice: Exam offices MenuTermShow: Semesters MenuSubmissionDelete: Delete submission @@ -99,8 +92,6 @@ MenuExamOfficeExams: Exams MenuExamOfficeFields: Fields of study MenuExamOfficeUsers: Users MenuLecturerInvite: Add functionaries -MenuAllocationInfo: Information regarding central allocations -MenuCourseApplicationsFiles: Files of all applications MenuSchoolList: Departments MenuSchoolNew: Create new department MenuExternalExamGrades: Exam results @@ -111,12 +102,6 @@ MenuExternalExamList: External exams MenuExternalExamCorrect: Enter exam results MenuParticipantsList: Lists of course participants MenuParticipantsIntersect: Common course participants -MenuAllocationUsers: Applicants -MenuAllocationPriorities: Central priorities -MenuAllocationCompute: Compute allocation - -MenuAllocationAddUser: Add applicant -MenuAllocationDelUser: Remove participant MenuFaq: FAQ MenuSheetPersonalisedFiles: Download personalised sheet files MenuCourseSheetPersonalisedFiles: Download template for personalised sheet files diff --git a/messages/uniworx/utils/table_column/de-de-formal.msg b/messages/uniworx/utils/table_column/de-de-formal.msg index 81e97e872..024a150dc 100644 --- a/messages/uniworx/utils/table_column/de-de-formal.msg +++ b/messages/uniworx/utils/table_column/de-de-formal.msg @@ -71,3 +71,6 @@ TableDiffDaysTooltip: Zeitspanne nach ISO 8601. Beispiel: "P2Y3M4D" ist eine Zei TableExamOfficeLabel: Label-Name TableExamOfficeLabelStatus: Label-Farbe TableExamOfficeLabelPriority: Label-Priorität +TableQualifications: Qualifikationen +TableCompany: Firma +TableSupervisor: Ansprechpartner diff --git a/messages/uniworx/utils/table_column/en-eu.msg b/messages/uniworx/utils/table_column/en-eu.msg index 450a5c9a1..1367d7bb1 100644 --- a/messages/uniworx/utils/table_column/en-eu.msg +++ b/messages/uniworx/utils/table_column/en-eu.msg @@ -71,3 +71,6 @@ TableDiffDaysTooltip: Duration given according to ISO 8601. Example: "P2Y3M4D" i TableExamOfficeLabel: Label name TableExamOfficeLabelStatus: Label colour TableExamOfficeLabelPriority: Label priority +TableQualifications: Qualifications +TableCompany: Company +TableSupervisor: Supervisor diff --git a/models/allocations.model b/models/allocations.model deleted file mode 100644 index 7cc299857..000000000 --- a/models/allocations.model +++ /dev/null @@ -1,70 +0,0 @@ --- SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost --- --- SPDX-License-Identifier: AGPL-3.0-or-later - -Allocation -- attributes with prefix staff- affect lecturers only, but are invisble to students - term TermId - school SchoolId -- school that manages this central allocation, not necessarily school of courses - shorthand AllocationShorthand -- practical shorthand - name AllocationName - legacyShorthands [AllocationShorthand] default='[]' -- just for association to previous allocations - description StoredMarkup Maybe -- description for prospective students - staffDescription StoredMarkup Maybe -- description seen by prospective lecturers only - staffRegisterFrom UTCTime Maybe -- lectureres may register courses - staffRegisterTo UTCTime Maybe -- course registration stops - -- staffDeregisterUntil not needed: staff may make arbitrary changes until staffRegisterTo, always frozen afterwards - staffAllocationFrom UTCTime Maybe -- lecturers may rate applicants from this day onwwards or prohibited - staffAllocationTo UTCTime Maybe -- - -- Student register for this allocation - -- canRegisterNow = maybe False (<= currentTime) registerFrom && maybe True (>= currentTime) registerTo - registerFrom UTCTime Maybe -- student applications allowed from a given day onwwards or prohibited - registerTo UTCTime Maybe -- student applications may be prohibited from a given date onwards - -- deregisterUntil not needed: students may withdraw applicants until registerTo, but never after. Also see overrideDeregister - -- overrides - registerByStaffFrom UTCTime Maybe -- lecturers may directly enrol/disenrol students after a given date or prohibited - registerByStaffTo UTCTime Maybe - registerByCourse UTCTime Maybe -- course registration dates are ignored until this day has passed or always prohibited - overrideDeregister UTCTime Maybe -- deregister prohibited after this time or always allowed (defaulting to course settings) - -- overrideVisible not needed, since courses are always visible - matchingSeed ByteString default='\x'::bytea - TermSchoolAllocationShort term school shorthand -- shorthand must be unique within school and semester - TermSchoolAllocationName term school name -- name must be unique within school and semester - deriving Show Eq Ord Generic - -AllocationMatching - allocation AllocationId - fingerprint AllocationFingerprint - time UTCTime - log FileContentReference - deriving Generic - -AllocationCourse - allocation AllocationId - course CourseId - minCapacity Int -- if the course would get assigned fewer than this many applicants, restart the assignment process without the course - acceptSubstitutes UTCTime Maybe - overrideSumCapacity Int Maybe -- mark course as outlier (ridiculously large capacity) and use this capacity instead for computing overall capacity of allocation - UniqueAllocationCourse course - deriving Generic - -AllocationUser - allocation AllocationId - user UserId - totalCourses Word64 -- number of total allocated courses for this user must be <= than this number - priority AllocationPriority Maybe - UniqueAllocationUser allocation user - deriving Eq Ord Show Generic - -AllocationDeregister -- self-inflicted user-deregistrations from an allocated course - user UserId - course CourseId Maybe OnDeleteSetNull OnUpdateCascade - time UTCTime - reason Text Maybe -- if this deregistration was done by proxy (e.g. the lecturer pressed the button) - deriving Eq Ord Show Generic - -AllocationNotificationSetting - user UserId - allocation AllocationId - isOptOut Bool - UniqueAllocationNotificationSetting user allocation - deriving Generic \ No newline at end of file diff --git a/models/courses.model b/models/courses.model index bc7191b80..3bfee5a1b 100644 --- a/models/courses.model +++ b/models/courses.model @@ -1,4 +1,4 @@ --- SPDX-FileCopyrightText: 2022 Gregor Kleen ,Sarah Vaupel ,Steffen Jost +-- SPDX-FileCopyrightText: 2022 Gregor Kleen ,Sarah Vaupel ,Steffen Jost -- -- SPDX-License-Identifier: AGPL-3.0-or-later @@ -22,14 +22,8 @@ Course -- Information about a single course; contained info is always visible registerFrom UTCTime Maybe -- enrolement allowed from a given day onwwards or prohibited registerTo UTCTime Maybe -- enrolement may be prohibited from a given date onwards deregisterUntil UTCTime Maybe -- unenrolement may be prohibited from a given date onwards - deregisterNoShow Bool default=false registerSecret Text Maybe -- enrolement maybe protected by a simple common passphrase materialFree Bool -- False: only enrolled users may see course materials not stored in this table - applicationsRequired Bool default=false - applicationsInstructions StoredMarkup Maybe - applicationsText Bool default=false - applicationsFiles UploadMode "default='{\"mode\": \"no-upload\"}'::jsonb" - applicationsRatingsVisible Bool default=false TermSchoolCourseShort term school shorthand -- shorthand must be unique within school and semester TermSchoolCourseName term school name -- name must be unique within school and semester deriving Generic @@ -67,7 +61,6 @@ CourseParticipant -- course enrolement user UserId registration UTCTime -- time of last enrolement for this course field StudyFeaturesId Maybe MigrationOnly - allocated AllocationId Maybe -- participant was centrally allocated state CourseParticipantState UniqueParticipant user course deriving Eq Ord Show Generic diff --git a/models/courses/applications.model b/models/courses/applications.model deleted file mode 100644 index cfb1119a5..000000000 --- a/models/courses/applications.model +++ /dev/null @@ -1,25 +0,0 @@ --- SPDX-FileCopyrightText: 2022 Gregor Kleen --- --- SPDX-License-Identifier: AGPL-3.0-or-later - -CourseApplication - course CourseId - user UserId - field StudyFeaturesId Maybe MigrationOnly - text Text Maybe -- free text entered by user - ratingVeto Bool default=false - ratingPoints ExamGrade Maybe - ratingComment Text Maybe - allocation AllocationId Maybe - allocationPriority Word64 Maybe - time UTCTime default=now() - ratingTime UTCTime Maybe - deriving Generic - -CourseApplicationFile - application CourseApplicationId OnDeleteCascade OnUpdateCascade - title FilePath - content FileContentReference Maybe - modified UTCTime - UniqueCourseApplicationFile application title - deriving Generic diff --git a/models/lms.model b/models/lms.model index 4c8ae02ee..12d543000 100644 --- a/models/lms.model +++ b/models/lms.model @@ -15,8 +15,8 @@ Qualification -- elearningOnly Bool -- successful E-learing automatically increases validity. NO! -- refreshInvitation StoredMarkup -- hard-coded I18N-MSGs used instead, but displayed on qualification page NO! -- expiryNotification StoredMarkup Maybe -- configurable user-profile-notifcations are used instead NO! - avsLicence AvsLicence Maybe -- if set, is synchronized to Avs as a driving licence - sapId Text Maybe -- if set, all QualificationUsers with userCompanyPersonalNumber are transmitted via SAP interface under this id + avsLicence AvsLicence Maybe -- if set, valid QualificationUsers are synchronized to AVS as a driving licence + sapId Text Maybe -- if set, valid QualificationUsers with userCompanyPersonalNumber are transmitted via SAP interface under this id SchoolQualificationShort school shorthand -- must be unique per school and shorthand SchoolQualificationName school name -- must be unique per school and name -- across all schools, only one qualification may be a driving licence: @@ -134,13 +134,3 @@ LmsResult timestamp UTCTime default=now() UniqueLmsResult qualification ident -- required by DBTable deriving Generic - --- Logs all processed rows from LmsUserlist and LmsResult -LmsAudit - qualification QualificationId OnDeleteCascade OnUpdateCascade - ident LmsIdent - notificationType LmsStatus -- LmsBlocked Day | LmsSuccess Day - note Text Maybe - received UTCTime -- timestamp from LmsUserlist/LmsResult - processed UTCTime default=now() - deriving Generic diff --git a/nix/docker/demo-version.json b/nix/docker/demo-version.json index f42a7f000..15bc0ab69 100644 --- a/nix/docker/demo-version.json +++ b/nix/docker/demo-version.json @@ -1,3 +1,3 @@ { - "version": "26.6.5" + "version": "27.0.0" } diff --git a/nix/docker/version.json b/nix/docker/version.json index f42a7f000..15bc0ab69 100644 --- a/nix/docker/version.json +++ b/nix/docker/version.json @@ -1,3 +1,3 @@ { - "version": "26.6.5" + "version": "27.0.0" } diff --git a/package-lock.json b/package-lock.json index 05f9e6c8f..dba6a1592 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "uni2work", - "version": "26.6.5", + "version": "27.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 4bf51a611..794a707a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uni2work", - "version": "26.6.5", + "version": "27.0.0", "description": "", "keywords": [], "author": "", diff --git a/package.yaml b/package.yaml index 8d0734a51..456b436a3 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: uniworx -version: 26.6.5 +version: 27.0.0 dependencies: - base - yesod diff --git a/routes b/routes index 090b2585f..9813f2df1 100644 --- a/routes +++ b/routes @@ -67,7 +67,12 @@ /admin/tokens AdminTokensR GET POST /admin/crontab AdminCrontabR GET /admin/avs AdminAvsR GET POST -/admin/ldap AdminLdapR GET POST +/admin/ldap AdminLdapR GET POST +/admin/problems AdminProblemsR GET +/admin/problems/no-contact ProblemUnreachableR GET +/admin/problems/no-avs-id ProblemWithoutAvsId GET +/admin/problems/r-without-f ProblemFbutNoR GET +/admin/problems/avs ProblemAvsSynchR GET POST /print PrintCenterR GET POST !system-printer /print/acknowledge/#Day/#Int/#Int PrintAckR GET POST !system-printer @@ -81,7 +86,6 @@ /info/lecturer InfoLecturerR GET !free /info/supervisor InfoSupervisorR GET !free /info/legal LegalR GET !free -/info/allocation InfoAllocationR GET !free /info/glossary GlossaryR GET !free /info/faq FaqR GET !free /info/terms-of-use TermsOfUseR GET !free @@ -138,24 +142,6 @@ / SchoolEditR GET POST -/allocation/ AllocationListR GET !free -!/allocation/new AllocationNewR GET POST !allocation-admin -/allocation/#TermId/#SchoolId/#AllocationShorthand AllocationR: - / AShowR GET POST !free - /edit AEditR GET POST !allocation-admin - /register ARegisterR POST !time - /course/#CryptoUUIDCourse/apply AApplyR POST !timeANDallocation-registered - /users AUsersR GET POST !allocation-admin - /users/#CryptoUUIDUser AEditUserR GET POST !allocation-admin - /users/#CryptoUUIDUser/delete ADelUserR GET POST !allocation-admin - !/users/add AAddUserR GET POST !allocation-admin - /priorities APriosR GET POST !allocation-admin - /compute AComputeR GET POST !allocation-admin - /accept AAcceptR GET POST !allocation-admin - /matchings AMatchingListR GET - /matchings/#CryptoUUIDAllocationMatching AMatchingR: - /log AMLogR GET - /participants ParticipantsListR GET !evaluation /participants/#TermId/#SchoolId ParticipantsR GET !evaluation /participants/intersect ParticipantsIntersectR GET POST !evaluation @@ -165,17 +151,15 @@ /course/ CourseListR GET !free !/course/new CourseNewR GET POST !lecturer /course/#TermId/#SchoolId/#CourseShorthand CourseR !lecturer: - / CShowR GET !tutor !corrector !exam-corrector !course-registered !course-time !evaluation !exam-office !allocation-admin + / CShowR GET !tutor !corrector !exam-corrector !course-registered !course-time !evaluation !exam-office /favourite CFavouriteR GET POST !free - /register CRegisterR GET POST !timeANDcapacityANDallocation-timeAND¬course-registeredANDcourse-time !timeANDallocation-timeAND¬exam-resultANDcourse-registered !lecturerANDallocation-time - /register-template CRegisterTemplateR GET !course-time + /register CRegisterR GET POST !timeANDcapacityAND¬course-registeredANDcourse-time !timeAND¬exam-resultANDcourse-registered !lecturer /edit CEditR GET POST /lecturer-invite CLecInviteR GET POST - /delete CDeleteR GET POST !lecturerANDemptyANDallocation-time + /delete CDeleteR GET POST !lecturerANDempty /users CUsersR GET POST - !/users/new CAddUserR GET POST !lecturerANDallocation-time - !/users/invite CInviteR GET POST - /users/#CryptoUUIDUser CUserR GET POST !lecturerANDparticipant !lecturerANDapplicant + !/users/new CAddUserR GET POST !lecturer + /users/#CryptoUUIDUser CUserR GET POST !lecturerANDparticipant !lecturer /correctors CHiWisR GET /communication CCommR GET POST /notes CNotesR GET POST !corrector -- THIS route is used to check for overall course corrector access! @@ -242,11 +226,6 @@ /grades EGradesR GET POST !exam-office /assign-occurrences EAutoOccurrenceR POST /correct ECorrectR GET POST !exam-correctorANDtime - /apps CApplicationsR GET POST - !/apps/files CAppsFilesR GET - /apps/#CryptoFileNameCourseApplication CourseApplicationR: - / CAEditR GET POST !timeANDself !lecturerANDstaff-time !selfANDread - /files CAFilesR GET !self !lecturerANDstaff-time !/news/add CNewsNewR GET POST /news/#CryptoUUIDCourseNews CourseNewsR: / CNShowR GET !timeANDparticipant @@ -289,16 +268,16 @@ -- OSIS CSV Export Demo /lms LmsAllR GET POST !free -- TODO verify that this is ok /lms/#SchoolId LmsSchoolR GET !free -- TODO verify that this is ok -/lms/#SchoolId/#QualificationShorthand LmsR GET POST !free -- TODO Filtering does not work! +/lms/#SchoolId/#QualificationShorthand LmsR GET POST !free -- /lms/#SchoolId/#QualificationShorthand/edit LmsEditR GET POST /lms/#SchoolId/#QualificationShorthand/users LmsUsersR GET -/lms/#SchoolId/#QualificationShorthand/users/direct LmsUsersDirectR GET -- development +/lms/#SchoolId/#QualificationShorthand/users/direct LmsUsersDirectR GET -- development only /lms/#SchoolId/#QualificationShorthand/userlist LmsUserlistR GET POST -/lms/#SchoolId/#QualificationShorthand/userlist/upload LmsUserlistUploadR GET POST -- development +/lms/#SchoolId/#QualificationShorthand/userlist/upload LmsUserlistUploadR GET POST -- development only /lms/#SchoolId/#QualificationShorthand/userlist/direct LmsUserlistDirectR POST !token -/lms/#SchoolId/#QualificationShorthand/fake LmsFakeR GET POST !development -- TODO: delete this testing URL +/lms/#SchoolId/#QualificationShorthand/fake LmsFakeR GET POST -- TODO: delete this testing URL /lms/#SchoolId/#QualificationShorthand/result LmsResultR GET POST -/lms/#SchoolId/#QualificationShorthand/result/upload LmsResultUploadR GET POST -- development +/lms/#SchoolId/#QualificationShorthand/result/upload LmsResultUploadR GET POST -- development only /lms/#SchoolId/#QualificationShorthand/result/direct LmsResultDirectR POST !token /api ApiDocsR GET !free diff --git a/src/Application.hs b/src/Application.hs index 8858ecf9c..3029ba0ab 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -145,7 +145,6 @@ import Handler.CryptoIDDispatch import Handler.SystemMessage import Handler.Health import Handler.Exam -import Handler.Allocation import Handler.ExamOffice import Handler.Metrics import Handler.ExternalExam diff --git a/src/Audit/Types.hs b/src/Audit/Types.hs index 023dda27e..db4dbdd30 100644 --- a/src/Audit/Types.hs +++ b/src/Audit/Types.hs @@ -64,17 +64,6 @@ data Transaction , transactionUser :: UserId } - | TransactionCourseApplicationEdit - { transactionCourse :: CourseId - , transactionUser :: UserId - , transactionCourseApplication :: CourseApplicationId - } - | TransactionCourseApplicationDeleted - { transactionCourse :: CourseId - , transactionUser :: UserId - , transactionCourseApplication :: CourseApplicationId - } - | TransactionSubmissionEdit { transactionSubmission :: SubmissionId , transactionSheet :: SheetId @@ -123,6 +112,17 @@ data Transaction { transactionTutorial :: TutorialId } + | TransactionTutorialParticipantEdit + { transactionTutorial :: TutorialId + , transactionTutorialParticipant :: TutorialParticipantId + , transactionUser :: UserId + } + | TransactionTutorialParticipantDelete + { transactionTutorial :: TutorialId + , transactionTutorialParticipant :: TutorialParticipantId + , transactionUser :: UserId + } + | TransactionExternalExamEdit { transactionExternalExam :: ExternalExamId } @@ -181,15 +181,35 @@ data Transaction , transactionNewUserIdent :: UserIdent } - | TransactionAllocationUserEdited - { transactionUser :: UserId - , transactionAllocation :: AllocationId + | TransactionLmsBlocked + { transactionQualification :: QualificationId + , transactionLmsIdent :: LmsIdent + , transactionLmsDay :: Day + , transactionLmsUser :: Maybe UserId + , transactionNote :: Maybe Text + , transactionReceived :: UTCTime -- when was the csv file received? } - | TransactionAllocationUserDeleted - { transactionUser :: UserId - , transactionAllocation :: AllocationId + | TransactionLmsSuccess + { transactionQualification :: QualificationId + , transactionLmsIdent :: LmsIdent + , transactionLmsDay :: Day + , transactionLmsUser :: Maybe UserId + , transactionNote :: Maybe Text + , transactionReceived :: UTCTime -- when was the csv file received? } - + + | TransactionQualificationUserEdit + { transactionQualificationUser :: QualificationUserId + , transactionQualification :: QualificationId + , transactionUser :: UserId + , transactionQualificationValidUntil :: Day + } + | TransactionQualificationUserDelete + { transactionQualificationUser :: QualificationUserId + , transactionQualification :: QualificationId + , transactionUser :: UserId + } + deriving (Eq, Ord, Read, Show, Generic, Typeable) deriveJSON defaultOptions diff --git a/src/CryptoID.hs b/src/CryptoID.hs index 31e3a3e7c..9d724bbee 100644 --- a/src/CryptoID.hs +++ b/src/CryptoID.hs @@ -50,8 +50,6 @@ decCryptoIDs [ ''SubmissionId , ''ExamId , ''ExamOccurrenceId , ''ExamPartId - , ''AllocationId - , ''CourseApplicationId , ''CourseId , ''CourseNewsId , ''CourseEventId @@ -59,8 +57,8 @@ decCryptoIDs [ ''SubmissionId , ''ExternalApiId , ''ExternalExamId , ''MaterialFileId - , ''AllocationMatchingId , ''PrintJobId + , ''QualificationId ] decCryptoIDKeySize diff --git a/src/Database/Esqueleto/Utils.hs b/src/Database/Esqueleto/Utils.hs index 128307869..041af20f7 100644 --- a/src/Database/Esqueleto/Utils.hs +++ b/src/Database/Esqueleto/Utils.hs @@ -7,7 +7,7 @@ module Database.Esqueleto.Utils ( true, false - , justVal, justValList, toValues + , vals, justVal, justValList, toValues , isJust, alt , isInfixOf, hasInfix , strConcat, substring @@ -98,6 +98,9 @@ false = E.val False -- infinity :: E.SqlExpr (E.Value UTCTime) -- infinity = unsafeSqlValue "'infinity'" +vals :: (MonoFoldable mono, PersistField (Element mono)) => mono -> E.SqlExpr (E.ValueList (Element mono)) +vals = E.valList . toList + justVal :: PersistField typ => typ -> E.SqlExpr (E.Value (Maybe typ)) -- justVal = E.val . Just justVal = E.just . E.val @@ -327,9 +330,9 @@ allFilter fltrs needle criterias = F.foldr aux true fltrs orderByList :: PersistField a => [a] -> E.SqlExpr (E.Value a) -> E.SqlExpr (E.Value Int) -orderByList vals - = let sortUni = zip [1..] vals -- memoize this, might not work due to polymorphism - in \x -> E.case_ [ (x E.==. E.val u, E.val i) | (i,u) <- sortUni ] (E.val . succ $ List.length vals) +orderByList valus + = let sortUni = zip [1..] valus -- memoize this, might not work due to polymorphism + in \x -> E.case_ [ (x E.==. E.val u, E.val i) | (i,u) <- sortUni ] (E.val . succ $ List.length valus) orderByOrd :: (Ord a, Finite a, PersistField a) => E.SqlExpr (E.Value a) -> E.SqlExpr (E.Value Int) orderByOrd = orderByList $ List.sort universeF diff --git a/src/Foundation/Authorization.hs b/src/Foundation/Authorization.hs index 1078158c9..7b27f7cf6 100644 --- a/src/Foundation/Authorization.hs +++ b/src/Foundation/Authorization.hs @@ -510,7 +510,6 @@ tagAccessPredicate AuthAdmin = cacheAPSchoolFunction SchoolAdmin (Just $ Right d | maybe True (`Set.notMember` adminList) mAuthId' -> Right $ case route' of _ | is _Nothing mAuthId' -> return AuthenticationRequired CourseR{} -> unauthorizedI MsgUnauthorizedSchoolAdmin - AllocationR{} -> unauthorizedI MsgUnauthorizedSchoolAdmin SchoolR _ _ -> unauthorizedI MsgUnauthorizedSchoolAdmin _other -> unauthorizedI MsgUnauthorizedSiteAdmin | otherwise -> Left $ APDB $ \_ _ mAuthId route _ -> case route of @@ -526,18 +525,6 @@ tagAccessPredicate AuthAdmin = cacheAPSchoolFunction SchoolAdmin (Just $ Right d E.&&. course E.^. CourseShorthand E.==. E.val csh guardMExceptT isAdmin $ unauthorizedI MsgUnauthorizedSchoolAdmin return Authorized - -- Allocations: access only to school admins - AllocationR tid ssh ash _ -> $cachedHereBinary (mAuthId, tid, ssh, ash) . exceptT return return $ do - authId <- maybeExceptT AuthenticationRequired $ return mAuthId - isAdmin <- lift . E.selectExists . E.from $ \(allocation `E.InnerJoin` userAdmin) -> do - E.on $ allocation E.^. AllocationSchool E.==. userAdmin E.^. UserFunctionSchool - E.where_ $ userAdmin E.^. UserFunctionUser E.==. E.val authId - E.&&. userAdmin E.^. UserFunctionFunction E.==. E.val SchoolAdmin - E.&&. allocation E.^. AllocationTerm E.==. E.val tid - E.&&. allocation E.^. AllocationSchool E.==. E.val ssh - E.&&. allocation E.^. AllocationShorthand E.==. E.val ash - guardMExceptT isAdmin (unauthorizedI MsgUnauthorizedSchoolAdmin) - return Authorized -- Schools: access only to school admins SchoolR ssh _ -> $cachedHereBinary (mAuthId, ssh) . exceptT return return $ do authId <- maybeExceptT AuthenticationRequired $ return mAuthId @@ -661,26 +648,6 @@ tagAccessPredicate AuthEvaluation = cacheAPSchoolFunction SchoolEvaluation (Just isEvaluation <- lift $ exists [UserFunctionUser ==. authId, UserFunctionFunction ==. SchoolEvaluation] guardMExceptT isEvaluation $ unauthorizedI MsgUnauthorizedEvaluation return Authorized -tagAccessPredicate AuthAllocationAdmin = cacheAPSchoolFunction SchoolAllocation (Just $ Right diffHour) $ \mAuthId' _ _ allocationList -> if - | maybe True (`Set.notMember` allocationList) mAuthId' -> Right $ if - | is _Nothing mAuthId' -> return AuthenticationRequired - | otherwise -> unauthorizedI MsgUnauthorizedAllocationAdmin - | otherwise -> Left $ APDB $ \_ _ mAuthId route _ -> case route of - AllocationR _ ssh _ _ -> $cachedHereBinary (mAuthId, ssh) . exceptT return return $ do - authId <- maybeExceptT AuthenticationRequired $ return mAuthId - isEvaluation <- lift . existsBy $ UniqueUserFunction authId ssh SchoolAllocation - guardMExceptT isEvaluation $ unauthorizedI MsgUnauthorizedAllocationAdmin - return Authorized - CourseR _ ssh _ _ -> $cachedHereBinary (mAuthId, ssh) . exceptT return return $ do - authId <- maybeExceptT AuthenticationRequired $ return mAuthId - isEvaluation <- lift . existsBy $ UniqueUserFunction authId ssh SchoolAllocation - guardMExceptT isEvaluation $ unauthorizedI MsgUnauthorizedAllocationAdmin - return Authorized - _other -> $cachedHereBinary mAuthId . exceptT return return $ do - authId <- maybeExceptT AuthenticationRequired $ return mAuthId - isEvaluation <- lift $ exists [UserFunctionUser ==. authId, UserFunctionFunction ==. SchoolAllocation] - guardMExceptT isEvaluation $ unauthorizedI MsgUnauthorizedAllocationAdmin - return Authorized tagAccessPredicate AuthToken = APDB $ \_ _ mAuthId route isWrite -> exceptT return return $ lift . validateBearer mAuthId route isWrite =<< askBearerUnsafe tagAccessPredicate AuthNoEscalation = APDB $ \_ _ mAuthId route _ -> case route of @@ -710,7 +677,6 @@ tagAccessPredicate AuthLecturer = cacheAPDB' (Just $ Right diffMinute) mkLecture , maybe True (`Set.notMember` lecturerList) mAuthId' -> Right $ case route' of _ | is _Nothing mAuthId' -> return AuthenticationRequired CourseR{} -> unauthorizedI MsgUnauthorizedLecturer - AllocationR{} -> unauthorizedI MsgUnauthorizedAllocationLecturer EExamR{} -> unauthorizedI MsgUnauthorizedExternalExamLecturer _other -> unauthorizedI MsgUnauthorizedSchoolLecturer | otherwise -> Left $ APDB $ \_ _ mAuthId route _ -> case route of @@ -724,18 +690,6 @@ tagAccessPredicate AuthLecturer = cacheAPDB' (Just $ Right diffMinute) mkLecture E.&&. course E.^. CourseShorthand E.==. E.val csh guardMExceptT isLecturer (unauthorizedI MsgUnauthorizedLecturer) return Authorized - AllocationR tid ssh ash _ -> $cachedHereBinary (mAuthId, tid, ssh, ash) . exceptT return return $ do - authId <- maybeExceptT AuthenticationRequired $ return mAuthId - isLecturer <- lift . E.selectExists . E.from $ \(allocation `E.InnerJoin` allocationCourse `E.InnerJoin` course `E.InnerJoin` lecturer) -> do - E.on $ course E.^. CourseId E.==. lecturer E.^. LecturerCourse - E.on $ course E.^. CourseId E.==. allocationCourse E.^. AllocationCourseCourse - E.on $ allocation E.^. AllocationId E.==. allocationCourse E.^. AllocationCourseAllocation - E.where_ $ lecturer E.^. LecturerUser E.==. E.val authId - E.&&. allocation E.^. AllocationTerm E.==. E.val tid - E.&&. allocation E.^. AllocationSchool E.==. E.val ssh - E.&&. allocation E.^. AllocationShorthand E.==. E.val ash - guardMExceptT isLecturer $ unauthorizedI MsgUnauthorizedAllocationLecturer - return Authorized EExamR tid ssh coursen examn _ -> $cachedHereBinary (mAuthId, tid, ssh, coursen, examn) . exceptT return return $ do authId <- maybeExceptT AuthenticationRequired $ return mAuthId isLecturer <- lift . E.selectExists . E.from $ \(eexam `E.InnerJoin` staff) -> do @@ -755,7 +709,6 @@ tagAccessPredicate AuthLecturer = cacheAPDB' (Just $ Right diffMinute) mkLecture where mkLecturerList _ route _ = case route of CourseR{} -> cacheLecturerList - AllocationR{} -> cacheLecturerList EExamR{} -> Just ( AuthCacheExternalExamStaffList , fmap (setOf $ folded . _Value) . E.select . E.from $ return . (E.^. ExternalExamStaffUser) @@ -1049,31 +1002,6 @@ tagAccessPredicate AuthTime = APDB $ \_ (runTACont -> cont) mAuthId route isWrit guard $ NTop (Just now) <= NTop deregUntil return Authorized _other -> unauthorizedI MsgUnauthorizedCourseRegistrationTime - - CApplicationR tid ssh csh _ _ -> maybeT (unauthorizedI MsgUnauthorizedApplicationTime) $ do - Entity course Course{..} <- $cachedHereBinary (tid, ssh, csh) . MaybeT . getBy $ TermSchoolCourseShort tid ssh csh - allocationCourse <- $cachedHereBinary course . lift . getBy $ UniqueAllocationCourse course - allocation <- for allocationCourse $ \(Entity _ AllocationCourse{..}) -> $cachedHereBinary allocationCourseAllocation . MaybeT $ get allocationCourseAllocation - - case allocation of - Nothing -> do - cTime <- liftIO getCurrentTime - guard $ maybe False (cTime >=) courseRegisterFrom - guard $ maybe True (cTime <=) courseRegisterTo - Just Allocation{..} -> do - cTime <- liftIO getCurrentTime - guard $ NTop allocationRegisterFrom <= NTop (Just cTime) - guard $ NTop (Just cTime) <= NTop allocationRegisterTo - - return Authorized - - AllocationR tid ssh ash _ -> maybeT (unauthorizedI MsgUnauthorizedAllocationRegisterTime) $ do - -- Checks `registerFrom` and `registerTo`, override as further routes become available - now <- liftIO getCurrentTime - Entity _ Allocation{..} <- MaybeT . $cachedHereBinary (tid, ssh, ash) . getBy $ TermSchoolAllocationShort tid ssh ash - guard $ NTop allocationRegisterFrom <= NTop (Just now) - guard $ NTop (Just now) <= NTop allocationRegisterTo - return Authorized MessageR cID -> maybeT (unauthorizedI MsgUnauthorizedSystemMessageTime) $ do smId <- catchIfMaybeT (const True :: CryptoIDError -> Bool) $ decrypt cID @@ -1111,75 +1039,6 @@ tagAccessPredicate AuthTime = APDB $ \_ (runTACont -> cont) mAuthId route isWrit return Authorized r -> $unsupportedAuthPredicate AuthTime r -tagAccessPredicate AuthStaffTime = APDB $ \_ _ _ route isWrite -> case route of - CApplicationR tid ssh csh _ _ -> maybeT (unauthorizedI MsgUnauthorizedApplicationTime) $ do - course <- $cachedHereBinary (tid, ssh, csh) . MaybeT . getKeyBy $ TermSchoolCourseShort tid ssh csh - allocationCourse <- $cachedHereBinary course . lift . getBy $ UniqueAllocationCourse course - allocation <- for allocationCourse $ \(Entity _ AllocationCourse{..}) -> $cachedHereBinary allocationCourseAllocation . MaybeT $ get allocationCourseAllocation - - case allocation of - Nothing -> return () - Just Allocation{..} -> do - cTime <- liftIO getCurrentTime - guard $ NTop allocationStaffAllocationFrom <= NTop (Just cTime) - when isWrite $ - guard $ NTop (Just cTime) <= NTop allocationStaffAllocationTo - - return Authorized - - AllocationR tid ssh ash _ -> maybeT (unauthorizedI MsgUnauthorizedAllocationRegisterTime) $ do - -- Checks `registerFrom` and `registerTo`, override as further routes become available - now <- liftIO getCurrentTime - Entity _ Allocation{..} <- MaybeT . $cachedHereBinary (tid, ssh, ash) . getBy $ TermSchoolAllocationShort tid ssh ash - guard $ NTop allocationStaffAllocationFrom <= NTop (Just now) - guard $ NTop (Just now) <= NTop allocationStaffAllocationTo - return Authorized - - r -> $unsupportedAuthPredicate AuthStaffTime r -tagAccessPredicate AuthAllocationTime = APDB $ \_ (runTACont -> cont) mAuthId route isWrite -> case route of - CourseR tid ssh csh CRegisterR -> do - now <- liftIO getCurrentTime - mba <- mbAllocation tid ssh csh - case mba of - Nothing -> return Authorized - Just (_, Allocation{..}) -> do - registered <- cont (predDNFSingleton $ PLVariable AuthCourseRegistered) mAuthId route isWrite - if - | not registered - , NTop allocationRegisterByCourse >= NTop (Just now) - -> unauthorizedI MsgUnauthorizedAllocatedCourseRegister - | registered - , NTop (Just now) >= NTop allocationOverrideDeregister - -> unauthorizedI MsgUnauthorizedAllocatedCourseDeregister - | otherwise - -> return Authorized - - CourseR tid ssh csh CAddUserR -> do - now <- liftIO getCurrentTime - mba <- mbAllocation tid ssh csh - case mba of - Just (_, Allocation{..}) - | NTop allocationRegisterByStaffTo <= NTop (Just now) - || NTop allocationRegisterByStaffFrom >= NTop (Just now) - -> unauthorizedI MsgUnauthorizedAllocatedCourseRegister - _other -> return Authorized - - CourseR tid ssh csh CDeleteR -> do - now <- liftIO getCurrentTime - mba <- mbAllocation tid ssh csh - case mba of - Just (_, Allocation{..}) - | NTop allocationRegisterByStaffTo <= NTop (Just now) - || NTop allocationRegisterByStaffFrom >= NTop (Just now) - -> unauthorizedI MsgUnauthorizedAllocatedCourseDelete - _other -> return Authorized - - r -> $unsupportedAuthPredicate AuthAllocationTime r - where - mbAllocation tid ssh csh = $cachedHereBinary (tid, ssh, csh) . runMaybeT $ do - cid <- MaybeT . getKeyBy $ TermSchoolCourseShort tid ssh csh - Entity _ AllocationCourse{..} <- MaybeT . getBy $ UniqueAllocationCourse cid - (cid,) <$> MaybeT (get allocationCourseAllocation) tagAccessPredicate AuthCourseTime = APDB $ \_ _ _mAuthId route _ -> case route of CourseR tid ssh csh _ -> exceptT return return $ do now <- liftIO getCurrentTime @@ -1187,7 +1046,7 @@ tagAccessPredicate AuthCourseTime = APDB $ \_ _ _mAuthId route _ -> case route o E.where_ $ course E.^. CourseTerm E.==. E.val tid E.&&. course E.^. CourseSchool E.==. E.val ssh E.&&. course E.^. CourseShorthand E.==. E.val csh - E.&&. courseIsVisible now course E.nothing + E.&&. courseIsVisible now course guardMExceptT courseVisible (unauthorizedI MsgUnauthorizedCourseTime) return Authorized r -> $unsupportedAuthPredicate AuthCourseTime r @@ -1406,13 +1265,6 @@ tagAccessPredicate AuthExamResult = APDB $ \_ _ mAuthId route _ -> case route of guardMExceptT (hasResult || hasPartResult) (unauthorizedI MsgUnauthorizedExamResult) return Authorized r -> $unsupportedAuthPredicate AuthExamRegistered r -tagAccessPredicate AuthAllocationRegistered = APDB $ \_ _ mAuthId route _ -> case route of - AllocationR tid ssh ash _ -> maybeT (unauthorizedI MsgUnauthorizedAllocationRegistered) $ do - uid <- hoistMaybe mAuthId - aId <- MaybeT . $cachedHereBinary (tid, ssh, ash) . getKeyBy $ TermSchoolAllocationShort tid ssh ash - void . MaybeT . $cachedHereBinary (uid, aId) . getKeyBy $ UniqueAllocationUser aId uid - return Authorized - r -> $unsupportedAuthPredicate AuthAllocationRegistered r tagAccessPredicate AuthParticipant = APDB $ \_ _ mAuthId route _ -> case route of CNewsR tid ssh csh cID _ -> maybeT (unauthorizedI MsgUnauthorizedParticipantSelf) $ do nId <- catchIfMaybeT (const True :: CryptoIDError -> Bool) $ decrypt cID @@ -1521,27 +1373,6 @@ tagAccessPredicate AuthParticipant = APDB $ \_ _ mAuthId route _ -> case route o E.&&. course E.^. CourseTerm E.==. E.val tid E.&&. course E.^. CourseSchool E.==. E.val ssh E.&&. course E.^. CourseShorthand E.==. E.val csh -tagAccessPredicate AuthApplicant = APDB $ \_ _ mAuthId route _ -> case route of - CourseR tid ssh csh (CUserR cID) -> maybeT (unauthorizedI MsgUnauthorizedApplicant) $ do - uid <- catchIfMaybeT (const True :: CryptoIDError -> Bool) $ decrypt cID - isApplicant <- isCourseApplicant tid ssh csh uid - guard isApplicant - return Authorized - - CourseR tid ssh csh _ -> maybeT (unauthorizedI MsgUnauthorizedApplicantSelf) $ do - uid <- hoistMaybe mAuthId - isApplicant <- isCourseApplicant tid ssh csh uid - guard isApplicant - return Authorized - - r -> $unsupportedAuthPredicate AuthApplicant r - where - isCourseApplicant tid ssh csh uid = lift . $cachedHereBinary (uid, tid, ssh, csh) . E.selectExists . E.from $ \(course `E.InnerJoin` courseApplication) -> do - E.on $ course E.^. CourseId E.==. courseApplication E.^. CourseApplicationCourse - E.where_ $ courseApplication E.^. CourseApplicationUser E.==. E.val uid - E.&&. course E.^. CourseTerm E.==. E.val tid - E.&&. course E.^. CourseSchool E.==. E.val ssh - E.&&. course E.^. CourseShorthand E.==. E.val csh tagAccessPredicate AuthCapacity = APDB $ \_ _ _ route _ -> case route of CExamR tid ssh csh examn (ERegisterOccR occn) -> maybeT (unauthorizedI MsgExamOccurrenceNoCapacity) $ do cid <- $cachedHereBinary (tid, ssh, csh) . MaybeT . getKeyBy $ TermSchoolCourseShort tid ssh csh @@ -1667,10 +1498,6 @@ tagAccessPredicate AuthSelf = APDB $ \_ _ mAuthId route _ -> exceptT return retu CourseR _ _ _ (CUserR cID) -> return $ Left cID ForProfileR cID -> return $ Left cID ForProfileDataR cID -> return $ Left cID - CApplicationR _ _ _ cID _ -> do - appId <- catchIfMExceptT (const $ unauthorizedI MsgUnauthorizedSelf) (const True :: CryptoIDError -> Bool) $ decrypt cID - CourseApplication{..} <- maybeMExceptT (unauthorizedI MsgUnauthorizedSelf) . $cachedHereBinary appId $ get appId - return $ Right courseApplicationUser _other -> throwError =<< $unsupportedAuthPredicate AuthSelf route referencedUser <- case referencedUser' of Right uid -> return uid @@ -1762,7 +1589,6 @@ routeAuthTags = fmap predDNFEntail . ofoldM parse defaultAuthDNF . routeAttrs broadenRoute :: AuthTag -> Route UniWorX -> Route UniWorX broadenRoute aTag route = case (aTag, route) of (AuthAdmin, CourseR tid ssh csh _) -> CourseR tid ssh csh CShowR - (AuthAdmin, AllocationR tid ssh ash _) -> AllocationR tid ssh ash AShowR (AuthAdmin, SchoolR ssh _) -> SchoolR ssh SchoolEditR (AuthAdmin, _) -> NewsR @@ -1775,7 +1601,6 @@ broadenRoute aTag route = case (aTag, route) of (AuthExamOffice, _) -> NewsR (AuthLecturer, CourseR tid ssh csh _) -> CourseR tid ssh csh CShowR - (AuthLecturer, AllocationR tid ssh ash _) -> AllocationR tid ssh ash AShowR (AuthLecturer, EExamR tid ssh coursen examn _) -> EExamR tid ssh coursen examn EEShowR (AuthLecturer, _) -> NewsR @@ -1920,7 +1745,4 @@ authoritiveApproot = \case CourseR _ _ _ (SheetR _ (SubmissionR _ (SubArchiveR _))) -> ApprootUserGenerated CourseR _ _ _ (CourseNewsR _ (CNFileR _)) -> ApprootUserGenerated CourseR _ _ _ (CourseNewsR _ CNArchiveR) -> ApprootUserGenerated - CourseR _ _ _ CRegisterTemplateR -> ApprootUserGenerated - CourseR _ _ _ CAppsFilesR -> ApprootUserGenerated - CourseR _ _ _ (CourseApplicationR _ CAFilesR) -> ApprootUserGenerated _other -> ApprootDefault diff --git a/src/Foundation/I18n.hs b/src/Foundation/I18n.hs index 8c66bedbd..41ae25346 100644 --- a/src/Foundation/I18n.hs +++ b/src/Foundation/I18n.hs @@ -9,7 +9,7 @@ module Foundation.I18n ( appLanguages, appLanguagesOpts , UniWorXMessage(..), UniWorXTestMessage(..), UniWorXSettingsMessage(..) , UniWorXHelpMessage(..), UniWorXNavigationMessage(..) - , UniWorXCourseMessage(..), UniWorXAllocationMessage(..), UniWorXExamMessage(..) + , UniWorXCourseMessage(..), UniWorXExamMessage(..) , UniWorXSheetMessage(..), UniWorXAdminMessage(..), UniWorXSubmissionMessage(..) , UniWorXTutorialMessage(..), UniWorXUserMessage(..), UniWorXButtonMessage(..) , UniWorXFormMessage(..), UniWorXRatingMessage(..), UniWorXTableColumnMessage(..) @@ -135,10 +135,10 @@ noneOneMoreEN num noneText singularForm pluralForm -- | num == 0 = noneText -- | otherwise = someText -ordinalEN :: ToMessage a +_ordinalEN :: ToMessage a => a -> Text -ordinalEN (toMessage -> numStr) = case lastChar of +_ordinalEN (toMessage -> numStr) = case lastChar of Just '1' -> [st|#{numStr}st|] Just '2' -> [st|#{numStr}nd|] Just '3' -> [st|#{numStr}rd|] @@ -189,7 +189,6 @@ mkMessageAddition ''UniWorX "Settings" "messages/uniworx/categories/settings" "d mkMessageAddition ''UniWorX "Help" "messages/uniworx/categories/help" "de-de-formal" mkMessageAddition ''UniWorX "Navigation" "messages/uniworx/utils/navigation" "de-de-formal" mkMessageAddition ''UniWorX "Course" "messages/uniworx/categories/courses/courses" "de-de-formal" -mkMessageAddition ''UniWorX "Allocation" "messages/uniworx/categories/courses/allocation" "de-de-formal" mkMessageAddition ''UniWorX "Exam" "messages/uniworx/categories/courses/exam" "de-de-formal" mkMessageAddition ''UniWorX "Sheet" "messages/uniworx/categories/courses/sheet" "de-de-formal" mkMessageAddition ''UniWorX "Admin" "messages/uniworx/categories/admin" "de-de-formal" diff --git a/src/Foundation/Navigation.hs b/src/Foundation/Navigation.hs index b17708671..47039a242 100644 --- a/src/Foundation/Navigation.hs +++ b/src/Foundation/Navigation.hs @@ -106,14 +106,19 @@ breadcrumb (UserPasswordR cID) = useRunDB $ do breadcrumb AdminNewFunctionaryInviteR = i18nCrumb MsgMenuLecturerInvite $ Just UsersR breadcrumb AdminFunctionaryInviteR = i18nCrumb MsgBreadcrumbFunctionaryInvite Nothing -breadcrumb AdminR = i18nCrumb MsgAdminHeading Nothing -breadcrumb AdminTestR = i18nCrumb MsgMenuAdminTest $ Just AdminR -breadcrumb AdminTestPdfR = i18nCrumb MsgMenuAdminTest $ Just AdminTestR -breadcrumb AdminErrMsgR = i18nCrumb MsgMenuAdminErrMsg $ Just AdminR -breadcrumb AdminTokensR = i18nCrumb MsgMenuAdminTokens $ Just AdminR -breadcrumb AdminCrontabR = i18nCrumb MsgBreadcrumbAdminCrontab $ Just AdminR -breadcrumb AdminAvsR = i18nCrumb MsgMenuAvs $ Just AdminR -breadcrumb AdminLdapR = i18nCrumb MsgMenuLdap $ Just AdminR +breadcrumb AdminR = i18nCrumb MsgAdminHeading Nothing +breadcrumb AdminTestR = i18nCrumb MsgMenuAdminTest $ Just AdminR +breadcrumb AdminTestPdfR = i18nCrumb MsgMenuAdminTest $ Just AdminTestR +breadcrumb AdminErrMsgR = i18nCrumb MsgMenuAdminErrMsg $ Just AdminR +breadcrumb AdminTokensR = i18nCrumb MsgMenuAdminTokens $ Just AdminR +breadcrumb AdminCrontabR = i18nCrumb MsgBreadcrumbAdminCrontab $ Just AdminR +breadcrumb AdminAvsR = i18nCrumb MsgMenuAvs $ Just AdminR +breadcrumb AdminLdapR = i18nCrumb MsgMenuLdap $ Just AdminR +breadcrumb AdminProblemsR = i18nCrumb MsgProblemsHeading $ Just AdminR +breadcrumb ProblemUnreachableR = i18nCrumb MsgProblemsUnreachableHeading $ Just AdminProblemsR +breadcrumb ProblemWithoutAvsId = i18nCrumb MsgProblemsNoAvsIdHeading $ Just AdminProblemsR +breadcrumb ProblemFbutNoR = i18nCrumb MsgProblemsRWithoutFHeading $ Just AdminProblemsR +breadcrumb ProblemAvsSynchR = i18nCrumb MsgProblemsAvsSynchHeading $ Just AdminProblemsR breadcrumb PrintCenterR = i18nCrumb MsgMenuApc Nothing breadcrumb PrintSendR = i18nCrumb MsgMenuPrintSend $ Just PrintCenterR @@ -143,7 +148,6 @@ breadcrumb DataProtectionR = i18nCrumb MsgMenuDataProt $ Just Legal breadcrumb TermsOfUseR = i18nCrumb MsgMenuTermsUse $ Just LegalR breadcrumb PaymentsR = i18nCrumb MsgMenuPayments $ Just LegalR -breadcrumb InfoAllocationR = i18nCrumb MsgBreadcrumbAllocationInfo $ Just InfoR breadcrumb VersionR = i18nCrumb MsgMenuVersion $ Just InfoR breadcrumb FaqR = i18nCrumb MsgBreadcrumbFaq $ Just InfoR @@ -207,36 +211,6 @@ breadcrumb (TermSchoolCourseListR tid ssh) = useRunDB . maybeT (i18nCrumb MsgBre <*> fmap isJust (get tid) return (CI.original $ unSchoolKey ssh, Just $ TermCourseListR tid) -breadcrumb AllocationListR = i18nCrumb MsgAllocationListTitle $ Just NewsR -breadcrumb AllocationNewR = i18nCrumb MsgBreadcrumbAllocationNew $ Just AllocationListR -breadcrumb (AllocationR tid ssh ash sRoute) = case sRoute of - AShowR -> useRunDB . maybeT (i18nCrumb MsgBreadcrumbAllocation $ Just AllocationListR) $ do - mr <- getMessageRender - Entity _ Allocation{allocationName} <- MaybeT . getBy $ TermSchoolAllocationShort tid ssh ash - return ([st|#{allocationName} (#{mr (ShortTermIdentifier (unTermKey tid))}, #{CI.original (unSchoolKey ssh)})|], Just AllocationListR) - AEditR -> i18nCrumb MsgBreadcrumbAllocationEdit . Just $ AllocationR tid ssh ash AShowR - AMatchingListR -> i18nCrumb MsgBreadcrumbAllocationMatchings . Just $ AllocationR tid ssh ash AShowR - AMatchingR _ AMLogR -> i18nCrumb MsgBreadcrumbAllocationMatchingLog . Just $ AllocationR tid ssh ash AMatchingListR - ARegisterR -> i18nCrumb MsgBreadcrumbAllocationRegister . Just $ AllocationR tid ssh ash AShowR - AApplyR cID -> useRunDB . maybeT (i18nCrumb MsgBreadcrumbCourse . Just $ AllocationR tid ssh ash AShowR) $ do - cid <- decrypt cID - Course{..} <- do - aid <- MaybeT . getKeyBy $ TermSchoolAllocationShort tid ssh ash - guardM . lift $ exists [ AllocationCourseAllocation ==. aid, AllocationCourseCourse ==. cid ] - MaybeT $ get cid - return (CI.original courseName, Just $ AllocationR tid ssh ash AShowR) - AUsersR -> i18nCrumb MsgBreadcrumbAllocationUsers . Just $ AllocationR tid ssh ash AShowR - APriosR -> i18nCrumb MsgBreadcrumbAllocationPriorities . Just $ AllocationR tid ssh ash AUsersR - AComputeR -> i18nCrumb MsgBreadcrumbAllocationCompute . Just $ AllocationR tid ssh ash AUsersR - AAcceptR -> i18nCrumb MsgBreadcrumbAllocationAccept . Just $ AllocationR tid ssh ash AUsersR - AAddUserR -> i18nCrumb MsgBreadcrumbAllocationAddUser . Just $ AllocationR tid ssh ash AUsersR - AEditUserR cID -> useRunDB . maybeT (i18nCrumb MsgBreadcrumbAllocationEditUser . Just $ AllocationR tid ssh ash AUsersR) $ do - guardM . lift . hasReadAccessTo . AllocationR tid ssh ash $ AEditUserR cID - uid <- decrypt cID - User{..} <- MaybeT $ get uid - return (userDisplayName, Just $ AllocationR tid ssh ash AUsersR) - ADelUserR cID -> i18nCrumb MsgBreadcrumbAllocationDelUser . Just $ AllocationR tid ssh ash (AEditUserR cID) - breadcrumb ParticipantsListR = i18nCrumb MsgBreadcrumbParticipantsList $ Just CourseListR breadcrumb (ParticipantsR _ _) = i18nCrumb MsgBreadcrumbParticipants $ Just ParticipantsListR breadcrumb ParticipantsIntersectR = i18nCrumb MsgMenuParticipantsIntersect $ Just ParticipantsListR @@ -249,7 +223,6 @@ breadcrumb (CourseR tid ssh csh CShowR) = useRunDB . maybeT (i18nCrumb MsgBreadc breadcrumb (CourseR tid ssh csh CEditR) = i18nCrumb MsgMenuCourseEdit . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CUsersR) = i18nCrumb MsgMenuCourseMembers . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CAddUserR) = i18nCrumb MsgMenuCourseAddMembers . Just $ CourseR tid ssh csh CUsersR -breadcrumb (CourseR tid ssh csh CInviteR) = i18nCrumb MsgBreadcrumbCourseParticipantInvitation . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CExamOfficeR) = i18nCrumb MsgMenuCourseExamOffice . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh (CUserR cID)) = useRunDB . maybeT (i18nCrumb MsgBreadcrumbUser . Just $ CourseR tid ssh csh CUsersR) $ do guardM . lift . hasReadAccessTo . CourseR tid ssh csh $ CUserR cID @@ -267,7 +240,6 @@ breadcrumb (CourseR tid ssh csh CTutorialListR) = i18nCrumb MsgMenuTutorialList breadcrumb (CourseR tid ssh csh CTutorialNewR) = i18nCrumb MsgMenuTutorialNew . Just $ CourseR tid ssh csh CTutorialListR breadcrumb (CourseR tid ssh csh CFavouriteR) = i18nCrumb MsgBreadcrumbCourseFavourite . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CRegisterR) = i18nCrumb MsgBreadcrumbCourseRegister . Just $ CourseR tid ssh csh CShowR -breadcrumb (CourseR tid ssh csh CRegisterTemplateR) = i18nCrumb MsgBreadcrumbCourseRegisterTemplate . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CLecInviteR) = i18nCrumb MsgBreadcrumbLecturerInvite . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CDeleteR) = i18nCrumb MsgMenuCourseDelete . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CHiWisR) = i18nCrumb MsgBreadcrumbHiWis . Just $ CourseR tid ssh csh CShowR @@ -289,17 +261,6 @@ breadcrumb (CourseR tid ssh csh (CourseEventR _cID sRoute)) = case sRoute of breadcrumb (CourseR tid ssh csh CExamListR) = i18nCrumb MsgMenuExamList . Just $ CourseR tid ssh csh CShowR breadcrumb (CourseR tid ssh csh CExamNewR) = i18nCrumb MsgMenuExamNew . Just $ CourseR tid ssh csh CExamListR -breadcrumb (CourseR tid ssh csh CApplicationsR) = i18nCrumb MsgMenuCourseApplications . Just $ CourseR tid ssh csh CShowR -breadcrumb (CourseR tid ssh csh CAppsFilesR) = i18nCrumb MsgBreadcrumbCourseAppsFiles . Just $ CourseR tid ssh csh CApplicationsR - -breadcrumb (CourseR tid ssh csh (CourseApplicationR cID sRoute)) = case sRoute of - CAEditR -> useRunDB . maybeT (i18nCrumb MsgBreadcrumbApplicant . Just $ CourseR tid ssh csh CApplicationsR) $ do - guardM . lift . hasReadAccessTo $ CApplicationR tid ssh csh cID CAEditR - appId <- decrypt cID - User{..} <- MaybeT (get appId) >>= MaybeT . get . courseApplicationUser - return (userDisplayName, Just $ CourseR tid ssh csh CApplicationsR) - CAFilesR -> i18nCrumb MsgBreadcrumbApplicationFiles . Just $ CApplicationR tid ssh csh cID CAEditR - breadcrumb (CourseR tid ssh csh (ExamR examn sRoute)) = case sRoute of EShowR -> useRunDB . maybeT (i18nCrumb MsgBreadcrumbExam . Just $ CourseR tid ssh csh CExamListR) $ do guardM . lift . hasReadAccessTo $ CExamR tid ssh csh examn EShowR @@ -776,6 +737,14 @@ defaultLinks = fmap catMaybes . mapM runMaybeT $ -- Define the menu items of the , navIcon = IconMenuAdmin , navChildren = [ NavLink + { navLabel = MsgProblemsHeading + , navRoute = AdminR + , navAccess' = NavAccessTrue + , navType = NavTypeLink { navModal = False } + , navQuick' = mempty + , navForceActive = False + } + , NavLink { navLabel = MsgMenuUsers , navRoute = UsersR , navAccess' = NavAccessTrue @@ -878,14 +847,6 @@ defaultLinks = fmap catMaybes . mapM runMaybeT $ -- Define the menu items of the , navQuick' = mempty , navForceActive = False } - , NavLink - { navLabel = MsgMenuAllocationList - , navRoute = AllocationListR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } , NavLink { navLabel = MsgMenuInfoLecturerTitle , navRoute = InfoLecturerR @@ -918,17 +879,6 @@ pageActions NewsR = return } , navChildren = [] } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuOpenAllocations - , navRoute = (AllocationListR, [("allocations-active", toPathPiece True)]) - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } ] pageActions (CourseR tid ssh csh CShowR) = do materialListSecondary <- pageQuickActions NavQuickViewPageActionSecondary $ CourseR tid ssh csh MaterialListR @@ -1355,7 +1305,6 @@ pageActions HelpR = return , ("exercises", MsgMenuInfoLecturerExercises) , ("tutorials", MsgMenuInfoLecturerTutorials) , ("exams", MsgMenuInfoLecturerExams) - , ("allocations", MsgMenuInfoLecturerAllocations) ] :: [(Text, UniWorXNavigationMessage)] return NavLink { navLabel @@ -1452,121 +1401,6 @@ pageActions TermShowR = do , navChildren = participantsSecondary } ] -pageActions AllocationListR = return - [ NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationNew - , navRoute = AllocationNewR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - ] -pageActions (AllocationR tid ssh ash AShowR) = return - [ NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationInfo - , navRoute = InfoAllocationR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = True } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationUsers - , navRoute = AllocationR tid ssh ash AUsersR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationCompute - , navRoute = AllocationR tid ssh ash AComputeR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - , NavPageActionSecondary - { navLink = NavLink - { navLabel = MsgMenuAllocationEdit - , navRoute = AllocationR tid ssh ash AEditR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - } - , NavPageActionSecondary - { navLink = NavLink - { navLabel = MsgMenuAllocationMatchings - , navRoute = AllocationR tid ssh ash AMatchingListR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = True } - , navQuick' = mempty - , navForceActive = False - } - } - ] -pageActions (AllocationR tid ssh ash AUsersR) = return - [ NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationPriorities - , navRoute = AllocationR tid ssh ash APriosR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationCompute - , navRoute = AllocationR tid ssh ash AComputeR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationAddUser - , navRoute = AllocationR tid ssh ash AAddUserR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - ] -pageActions (AllocationR tid ssh ash (AEditUserR cID)) = return - [ NavPageActionSecondary - { navLink = NavLink - { navLabel = MsgMenuAllocationDelUser - , navRoute = AllocationR tid ssh ash $ ADelUserR cID - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = True } - , navQuick' = mempty - , navForceActive = False - } - } - ] pageActions CourseListR = do participantsSecondary <- pageQuickActions NavQuickViewPageActionSecondary ParticipantsListR return @@ -1581,17 +1415,6 @@ pageActions CourseListR = do } , navChildren = [] } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuAllocationList - , navRoute = AllocationListR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } , NavPageActionPrimary { navLink = NavLink { navLabel = MsgMenuParticipantsList @@ -1727,31 +1550,6 @@ pageActions (CourseR tid ssh csh CUsersR) = return } , navChildren = [] } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuCourseApplications - , navRoute = CourseR tid ssh csh CApplicationsR - , navAccess' = NavAccessDB $ - let courseWhere course = course <$ do - E.where_ $ course E.^. CourseTerm E.==. E.val tid - E.&&. course E.^. CourseSchool E.==. E.val ssh - E.&&. course E.^. CourseShorthand E.==. E.val csh - existsApplications = E.selectExists . E.from $ \(course `E.InnerJoin` courseApplication) -> do - E.on $ course E.^. CourseId E.==. courseApplication E.^. CourseApplicationCourse - void $ courseWhere course - courseApplications = fmap (any E.unValue) . E.select . E.from $ \course -> do - void $ courseWhere course - return $ course E.^. CourseApplicationsRequired - courseAllocation = E.selectExists . E.from $ \(course `E.InnerJoin` allocationCourse) -> do - E.on $ course E.^. CourseId E.==. allocationCourse E.^. AllocationCourseCourse - void $ courseWhere course - in courseAllocation `or2M` courseApplications `or2M` existsApplications - , navType = NavTypeLink { navModal = False } - , navQuick' = navQuick NavQuickViewPageActionSecondary <> navQuick NavQuickViewFavourite - , navForceActive = False - } - , navChildren = [] - } ] pageActions (CourseR tid ssh csh MaterialListR) = return [ NavPageActionPrimary @@ -1814,40 +1612,53 @@ pageActions (CTutorialR tid ssh csh tutn TEditR) = return } } ] -pageActions (CTutorialR tid ssh csh tutn TUsersR) = return - [ NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuTutorialComm - , navRoute = CTutorialR tid ssh csh tutn TCommR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False +pageActions (CTutorialR tid ssh csh tutn TUsersR) = do + membersSecondary <- pageQuickActions NavQuickViewPageActionSecondary $ CourseR tid ssh csh CUsersR + return + [ NavPageActionPrimary + { navLink = NavLink + { navLabel = MsgMenuCourseMembers + , navRoute = CourseR tid ssh csh CUsersR + , navAccess' = NavAccessTrue + , navType = NavTypeLink { navModal = False } + , navQuick' = navQuick NavQuickViewPageActionSecondary + , navForceActive = False + } + , navChildren = membersSecondary } - , navChildren = [] - } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuTutorialEdit - , navRoute = CTutorialR tid ssh csh tutn TEditR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False + , NavPageActionPrimary + { navLink = NavLink + { navLabel = MsgMenuTutorialComm + , navRoute = CTutorialR tid ssh csh tutn TCommR + , navAccess' = NavAccessTrue + , navType = NavTypeLink { navModal = False } + , navQuick' = mempty + , navForceActive = False + } + , navChildren = [] } - , navChildren = [] - } - , NavPageActionSecondary - { navLink = NavLink - { navLabel = MsgMenuTutorialDelete - , navRoute = CTutorialR tid ssh csh tutn TDeleteR - , navAccess' = NavAccessTrue - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False + , NavPageActionPrimary + { navLink = NavLink + { navLabel = MsgMenuTutorialEdit + , navRoute = CTutorialR tid ssh csh tutn TEditR + , navAccess' = NavAccessTrue + , navType = NavTypeLink { navModal = False } + , navQuick' = mempty + , navForceActive = False + } + , navChildren = [] } - } - ] + , NavPageActionSecondary + { navLink = NavLink + { navLabel = MsgMenuTutorialDelete + , navRoute = CTutorialR tid ssh csh tutn TDeleteR + , navAccess' = NavAccessTrue + , navType = NavTypeLink { navModal = False } + , navQuick' = mempty + , navForceActive = False + } + } + ] pageActions (CourseR tid ssh csh CExamListR) = return [ NavPageActionPrimary { navLink = NavLink @@ -2200,44 +2011,6 @@ pageActions (CSubmissionR tid ssh csh shn cid CorrectionR) = return } } ] -pageActions (CourseR tid ssh csh CApplicationsR) = return - [ NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuCourseApplicationsFiles - , navRoute = CourseR tid ssh csh CAppsFilesR - , navAccess' = NavAccessDB $ - let appAccess (E.Value appId) = do - cID <- encrypt appId - hasReadAccessTo $ CApplicationR tid ssh csh cID CAFilesR - appSource = E.selectSource . E.from $ \(course `E.InnerJoin` courseApplication) -> do - E.on $ course E.^. CourseId E.==. courseApplication E.^. CourseApplicationCourse - E.where_ $ course E.^. CourseTerm E.==. E.val tid - E.&&. course E.^. CourseSchool E.==. E.val ssh - E.&&. course E.^. CourseShorthand E.==. E.val csh - E.where_ . E.exists . E.from $ \courseApplicationFile -> - E.where_ $ courseApplicationFile E.^. CourseApplicationFileApplication E.==. courseApplication E.^. CourseApplicationId - return $ courseApplication E.^. CourseApplicationId - in runConduit $ appSource .| anyMC appAccess - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - , NavPageActionPrimary - { navLink = NavLink - { navLabel = MsgMenuCourseMembers - , navRoute = CourseR tid ssh csh CUsersR - , navAccess' = NavAccessDB $ do - cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh - exists [ CourseParticipantCourse ==. cid ] - , navType = NavTypeLink { navModal = False } - , navQuick' = mempty - , navForceActive = False - } - , navChildren = [] - } - ] pageActions CorrectionsR = return [ NavPageActionPrimary { navLink = NavLink diff --git a/src/Foundation/Routes.hs b/src/Foundation/Routes.hs index a6ce7b7fd..454be37a6 100644 --- a/src/Foundation/Routes.hs +++ b/src/Foundation/Routes.hs @@ -40,13 +40,10 @@ deriving instance Generic MaterialR deriving instance Generic TutorialR deriving instance Generic ExamR deriving instance Generic EExamR -deriving instance Generic CourseApplicationR -deriving instance Generic AllocationR deriving instance Generic SchoolR deriving instance Generic ExamOfficeR deriving instance Generic CourseNewsR deriving instance Generic CourseEventR -deriving instance Generic AMatchingR deriving instance Generic (Route UniWorX) @@ -57,19 +54,16 @@ instance Hashable MaterialR instance Hashable TutorialR instance Hashable ExamR instance Hashable EExamR -instance Hashable CourseApplicationR -instance Hashable AllocationR instance Hashable SchoolR instance Hashable ExamOfficeR instance Hashable CourseNewsR instance Hashable CourseEventR -instance Hashable AMatchingR instance Hashable (Route UniWorX) instance Hashable (Route EmbeddedStatic) where hashWithSalt s = hashWithSalt s . renderRoute instance Hashable (Route Auth) where hashWithSalt s = hashWithSalt s . renderRoute - + instance Ord (Route Auth) where compare = compare `on` renderRoute instance Ord (Route EmbeddedStatic) where @@ -82,13 +76,10 @@ deriving instance Ord MaterialR deriving instance Ord TutorialR deriving instance Ord ExamR deriving instance Ord EExamR -deriving instance Ord CourseApplicationR -deriving instance Ord AllocationR deriving instance Ord SchoolR deriving instance Ord ExamOfficeR deriving instance Ord CourseNewsR deriving instance Ord CourseEventR -deriving instance Ord AMatchingR deriving instance Ord (Route UniWorX) data RouteChildren @@ -124,10 +115,6 @@ pattern CSubmissionR :: TermId -> SchoolId -> CourseShorthand -> SheetName -> Cr pattern CSubmissionR tid ssh csh shn cid ptn = CSheetR tid ssh csh shn (SubmissionR cid ptn) -pattern CApplicationR :: TermId -> SchoolId -> CourseShorthand -> CryptoFileNameCourseApplication -> CourseApplicationR -> Route UniWorX -pattern CApplicationR tid ssh csh appId ptn - = CourseR tid ssh csh (CourseApplicationR appId ptn) - pattern CNewsR :: TermId -> SchoolId -> CourseShorthand -> CryptoUUIDCourseNews -> CourseNewsR -> Route UniWorX pattern CNewsR tid ssh csh nId ptn = CourseR tid ssh csh (CourseNewsR nId ptn) diff --git a/src/Foundation/SiteLayout.hs b/src/Foundation/SiteLayout.hs index c60f2fde1..cb1fbb1ba 100644 --- a/src/Foundation/SiteLayout.hs +++ b/src/Foundation/SiteLayout.hs @@ -164,12 +164,9 @@ siteLayout' overrideHeading widget = do (favourites', (title, parents), nav', contentHeadline, mmsgs, maxFavouriteTerms, currentTheme, storedReasonAndToggleRoute) <- do (favCourses, breadcrumbs'', nav', contentHeadline, mmsgs, storedReasonAndToggleRoute) <- runDB $ do - favCourses'' <- withReaderT (projectBackend @SqlReadBackend) . E.select . E.from $ \(course `E.LeftOuterJoin` allocation `E.LeftOuterJoin` courseFavourite) -> do + favCourses'' <- withReaderT (projectBackend @SqlReadBackend) . E.select . E.from $ \(course `E.LeftOuterJoin` courseFavourite) -> do E.on $ E.just (course E.^. CourseId) E.==. courseFavourite E.?. CourseFavouriteCourse E.&&. courseFavourite E.?. CourseFavouriteUser E.==. E.val (view _1 <$> muid) - E.on . E.exists . E.from $ \allocationCourse -> - E.where_ $ allocationCourse E.^. AllocationCourseCourse E.==. course E.^. CourseId - E.&&. E.just (allocationCourse E.^. AllocationCourseAllocation) E.==. allocation E.?. AllocationId let isFavourite = E.not_ . E.isNothing $ courseFavourite E.?. CourseFavouriteId isCurrent @@ -198,7 +195,7 @@ siteLayout' overrideHeading widget = do E.&&. tutorial E.^. TutorialCourse E.==. course E.^. CourseId E.where_ $ E.just (tutor E.^. TutorUser) E.==. E.val (view _1 <$> muid) isAssociated = isParticipant E.||. isLecturer E.||. isCorrector E.||. isTutor - courseVisible = courseIsVisible now course $ allocation E.?. AllocationId + courseVisible = courseIsVisible now course reason = E.case_ [ E.when_ isCurrent E.then_ . E.just $ E.val FavouriteCurrent diff --git a/src/Foundation/Yesod/Auth.hs b/src/Foundation/Yesod/Auth.hs index e43fa0b7b..7d2c4be8a 100644 --- a/src/Foundation/Yesod/Auth.hs +++ b/src/Foundation/Yesod/Auth.hs @@ -291,7 +291,7 @@ decodeUser now UserDefaultConf{..} upsertMode ldapData = do , userMatrikelnummer = Nothing -- not known from LDAP, must be derived from REST interface to AVS TODO , userPostAddress = Nothing -- not known from LDAP, must be derived from REST interface to AVS TODO , userPinPassword = Nothing -- must be derived via AVS - , userPrefersPostal = False + , userPrefersPostal = userDefaultPrefersPostal , .. } userUpdate = [ diff --git a/src/Foundation/Yesod/Middleware.hs b/src/Foundation/Yesod/Middleware.hs index dd0866e19..6572ef630 100644 --- a/src/Foundation/Yesod/Middleware.hs +++ b/src/Foundation/Yesod/Middleware.hs @@ -1,4 +1,4 @@ --- SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost ,Wolfgang Witt +-- SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost ,Sarah Vaupel ,Wolfgang Witt -- -- SPDX-License-Identifier: AGPL-3.0-or-later @@ -210,7 +210,6 @@ routeNormalizers :: forall m backend. routeNormalizers = map (hoist (hoist liftHandler . withReaderT projectBackend) .) [ normalizeRender , ncSchool - , ncAllocation , ncCourse , ncSheet , ncMaterial @@ -218,10 +217,8 @@ routeNormalizers = map (hoist (hoist liftHandler . withReaderT projectBackend) . , ncExam , ncExternalExam , verifySubmission - , verifyCourseApplication , verifyCourseNews , verifyMaterialVideo - , verifyAllocationMatchingLog ] where normalizeRender :: Route UniWorX -> WriterT Any (ReaderT SqlReadBackend (HandlerFor UniWorX)) (Route UniWorX) @@ -253,11 +250,6 @@ routeNormalizers = map (hoist (hoist liftHandler . withReaderT projectBackend) . Entity ssh' _ <- MaybeT . lift . getBy $ UniqueSchoolShorthand schoolShort (caseChanged `on` unSchoolKey) ssh ssh' return ssh' - ncAllocation = maybeOrig $ \route -> do - AllocationR tid ssh ash _ <- return route - Entity _ Allocation{..} <- MaybeT . $cachedHereBinary (tid, ssh, ash) . lift . getBy $ TermSchoolAllocationShort tid ssh ash - caseChanged ash allocationShorthand - return $ route & typesUsing @RouteChildren @AllocationShorthand . filtered (== ash) .~ allocationShorthand ncCourse = maybeOrig $ \route -> do CourseR tid ssh csh _ <- return route Entity _ Course{..} <- MaybeT . $cachedHereBinary (tid, ssh, csh) . lift . getBy $ TermSchoolCourseShort tid ssh csh @@ -304,14 +296,6 @@ routeNormalizers = map (hoist (hoist liftHandler . withReaderT projectBackend) . let newRoute = CSubmissionR courseTerm courseSchool courseShorthand sheetName cID sr tell . Any $ route /= newRoute return newRoute - verifyCourseApplication = maybeOrig $ \route -> do - CApplicationR _tid _ssh _csh cID sr <- return route - aId <- decrypt cID - CourseApplication{courseApplicationCourse} <- lift . lift $ get404 aId - Course{courseTerm, courseSchool, courseShorthand} <- lift . lift $ get404 courseApplicationCourse - let newRoute = CApplicationR courseTerm courseSchool courseShorthand cID sr - tell . Any $ route /= newRoute - return newRoute verifyCourseNews = maybeOrig $ \route -> do CNewsR _tid _ssh _csh cID sr <- return route aId <- decrypt cID @@ -329,11 +313,3 @@ routeNormalizers = map (hoist (hoist liftHandler . withReaderT projectBackend) . let newRoute = CMaterialR courseTerm courseSchool courseShorthand materialName $ MVideoR cID tell . Any $ route /= newRoute return newRoute - verifyAllocationMatchingLog = maybeOrig $ \route -> do - AllocationR _tid _ssh _ash (AMatchingR cID AMLogR) <- return route - amId <- decrypt cID - AllocationMatching{allocationMatchingAllocation} <- lift . lift $ get404 amId - Allocation{allocationTerm, allocationSchool, allocationShorthand} <- lift . lift $ get404 allocationMatchingAllocation - let newRoute = AllocationR allocationTerm allocationSchool allocationShorthand $ AMatchingR cID AMLogR - tell . Any $ route /= newRoute - return newRoute diff --git a/src/Handler/Admin.hs b/src/Handler/Admin.hs index e627fbec3..94d6e2e29 100644 --- a/src/Handler/Admin.hs +++ b/src/Handler/Admin.hs @@ -8,6 +8,22 @@ module Handler.Admin import Import +-- import Data.Either +import qualified Data.Set as Set +-- import qualified Data.Text.Lazy.Encoding as LBS + +-- import qualified Control.Monad.Catch as Catch +-- import Servant.Client (ClientError(..), ResponseF(..)) +-- import Text.Blaze.Html (preEscapedToHtml) + +import Database.Esqueleto.Experimental ((:&)(..)) +import qualified Database.Esqueleto.Experimental as E +import qualified Database.Esqueleto.Utils as E + +import Handler.Utils.DateTime +import Handler.Utils.Avs +import Handler.Utils.Widgets + import Handler.Admin.Test as Handler.Admin import Handler.Admin.ErrorMessage as Handler.Admin import Handler.Admin.Tokens as Handler.Admin @@ -15,8 +31,192 @@ import Handler.Admin.Crontab as Handler.Admin import Handler.Admin.Avs as Handler.Admin import Handler.Admin.Ldap as Handler.Admin + getAdminR :: Handler Html -getAdminR = - siteLayoutMsg MsgAdminHeading $ do - setTitleI MsgAdminHeading - i18n MsgAdminPageEmpty +getAdminR = redirect AdminProblemsR + +getAdminProblemsR :: Handler Html +getAdminProblemsR = do + now <- liftIO getCurrentTime + let nowaday = utctDay now + cutOffPrintDays = 7 + cutOffPrintJob = addLocalDays (-cutOffPrintDays) now + (usersAreReachable, driversHaveAvsIds, rDriversHaveFs, noStalePrintJobs) <- runDB $ (,,,) + <$> areAllUsersReachable + <*> allDriversHaveAvsId nowaday + <*> allRDriversHaveFs nowaday + <*> (not <$> exists [PrintJobAcknowledged ==. Nothing, PrintJobCreated <=. cutOffPrintJob]) + diffLics <- try retrieveDifferingLicences <&> \case + -- (Left (UnsupportedContentType "text/html" resp)) -> Left $ text2widget "Html received" + (Left e) -> Left $ text2widget $ tshow (e :: SomeException) + (Right (to0, to1, to2)) -> Right (Set.size to0, Set.size to1, Set.size to2) + -- Attempt to format results in a nicer way failed, since rendering Html within a modal destroyed the page layout itself + -- let procDiffLics (to0, to1, to2) = Right (Set.size to0, Set.size to1, Set.size to2) + -- diffLics <- (procDiffLics <$> retrieveDifferingLicences) `catches` + -- [ Catch.Handler (\case (UnsupportedContentType "text/html;charset=utf-8" Response{responseBody}) + -- -> return $ Left $ toWidget $ preEscapedToHtml $ fromRight "Response UTF8-decoding error" $ LBS.decodeUtf8' responseBody + -- ex -> return $ Left $ text2widget $ tshow ex) + -- , Catch.Handler (\(ex::SomeException) -> return $ Left $ text2widget $ tshow ex) + -- ] + + -- we abuse messageTooltip for colored icons here + msgSuccessTooltip <- messageI Success MsgMessageSuccess + msgWarningTooltip <- messageI Warning MsgMessageWarning + msgErrorTooltip <- messageI Error MsgMessageError + + let flagError = messageTooltip . bool msgErrorTooltip msgSuccessTooltip + flagWarning = messageTooltip . bool msgWarningTooltip msgSuccessTooltip + flagNonZero :: Int -> Widget + flagNonZero n | n <= 0 = flagError True + | otherwise = messageTooltip =<< handlerToWidget (messageI Error (MsgProblemsDriverSynch n)) + + siteLayoutMsg MsgProblemsHeading $ do + setTitleI MsgProblemsHeading + $(widgetFile "admin-problems") + + +getProblemUnreachableR :: Handler Html +getProblemUnreachableR = do + unreachables <- runDB $ E.select retrieveUnreachableUsers + siteLayoutMsg MsgProblemsUnreachableHeading $ do + setTitleI MsgProblemsUnreachableHeading + [whamlet| +
+ _{MsgProblemsUnreachableBody} +