diff --git a/config/settings.yml b/config/settings.yml index 5d0702621..f5714203d 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -24,9 +24,9 @@ mail-from: email: "_env:MAILFROM_EMAIL:uniworx@localhost" mail-object-domain: "_env:MAILOBJECT_DOMAIN:localhost" mail-use-replyto-instead-sender: "_env:MAIL_USES_REPLYTO:true" -#mail-reroute-to: -# name: "_env:MAIL_REROUTE_TO_NAME:Steffen Jost" -# email: "_env:MAIL_REROUTE_TO_EMAL:jost@tcs.ifi.lmu.de" +mail-reroute-to: + name: "_env:MAIL_REROUTE_TO_NAME:" + email: "_env:MAIL_REROUTE_TO_EMAIL:" #mail-verp: # separator: "_env:VERP_SEPARATOR:+" # prefix: "_env:VERP_PREFIX:bounce" @@ -150,6 +150,7 @@ lms-direct: download-header: "_env:LMSDOWNLOADHEADER:true" download-delimiter: "_env:LMSDOWNLOADDELIMITER:," download-cr-lf: "_env:LMSDOWNLOADCRLF:true" + deletion-days: "_env:LMSDELETIONDAYS:7" avs: host: "_env:AVSHOST:skytest.fra.fraport.de" diff --git a/messages/uniworx/categories/avs/de-de-formal.msg b/messages/uniworx/categories/avs/de-de-formal.msg index 7a63ec25d..33f266aed 100644 --- a/messages/uniworx/categories/avs/de-de-formal.msg +++ b/messages/uniworx/categories/avs/de-de-formal.msg @@ -22,10 +22,11 @@ AvsImportAmbiguous n@Int: Import für #{show n} uneindeutige AVS IDs fehlgeschla AvsImportUnknowns n@Int: Import für #{show n} unbekannte AVS IDs fehlgeschlagen AvsSetLicences alic@AvsLicence n@Int m@Int: _{alic} im AVS gesetzt: #{show n}/#{show m} SetFraDriveLicences q@String n@Int: #{q} in FRADrive gewährt für #{show n} Benutzer -RevokeFraDriveLicences alic@AvsLicence n@Int: _{alic} in FRADrive zum Vortag beendet für #{show n} Fahrer +RevokeFraDriveLicencesError alic@AvsLicence: Entzug der _{alic} Lizenzen komplett fehlgeschlagen +RevokeFraDriveLicences alic@AvsLicence n@Int: _{alic} in FRADrive entzogen für #{show n} Fahrer 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. LicenceTableChangeAvs: Im AVS ändern LicenceTableGrantFDrive: In FRADrive erteilen -LicenceTableRevokeFDrive: In FRADrive zum Vortag entziehen \ No newline at end of file +LicenceTableRevokeFDrive: In FRADrive entziehen \ 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 91efb95f9..cadb045af 100644 --- a/messages/uniworx/categories/avs/en-eu.msg +++ b/messages/uniworx/categories/avs/en-eu.msg @@ -22,10 +22,11 @@ AvsImportAmbiguous n@Int: Import failed for #{show n} ambiguous AVS Ids AvsImportUnknowns n@Int: Import failed for #{show n} unknown AVS Ids AvsSetLicences alic n m: _{alic} set in AVS: #{show n}/#{show m} SetFraDriveLicences q@String n@Int: #{q} granted in FRADrive for #{show n} users -RevokeFraDriveLicences alic@AvsLicence n@Int: _{alic} now ended yesterday in FRADrive for #{show n} drivers +RevokeFraDriveLicencesError alic@AvsLicence: Revoking licences _{alic} failed entirely +RevokeFraDriveLicences alic@AvsLicence n@Int: _{alic} revoked in FRADrive for #{show n} drivers 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. LicenceTableChangeAvs: Change in AVS LicenceTableGrantFDrive: Grant in FRADrive -LicenceTableRevokeFDrive: Revoke yesterday in FRADrive +LicenceTableRevokeFDrive: Revoke in FRADrive diff --git a/messages/uniworx/categories/courses/courses/de-de-formal.msg b/messages/uniworx/categories/courses/courses/de-de-formal.msg index 6d349743c..939bb0659 100644 --- a/messages/uniworx/categories/courses/courses/de-de-formal.msg +++ b/messages/uniworx/categories/courses/courses/de-de-formal.msg @@ -242,3 +242,5 @@ CourseAdministrator: Kursadministrator:in CourseAvsRegisterTitle: Teilnehmer:innen anmelden CourseAvsRegisterParticipants: Teilnehmer:innen CourseAvsRegisterParticipantsTip: Mehrere Teilnehmer:innen mit Komma separieren + +CourseQualifications n@Int: Assoziierte #{pluralDE n "Qualifikation" "Qualifikationen"} \ No newline at end of file diff --git a/messages/uniworx/categories/courses/courses/en-eu.msg b/messages/uniworx/categories/courses/courses/en-eu.msg index b2d0a823d..0625c9ccc 100644 --- a/messages/uniworx/categories/courses/courses/en-eu.msg +++ b/messages/uniworx/categories/courses/courses/en-eu.msg @@ -241,3 +241,5 @@ CourseAdministrator: Course administrator CourseAvsRegisterTitle: Register participants CourseAvsRegisterParticipants: Participants CourseAvsRegisterParticipantsTip: Separate multiple participants with comma + +CourseQualifications n: Associated #{pluralENs n "Qualification"} \ No newline at end of file diff --git a/messages/uniworx/categories/courses/tutorial/de-de-formal.msg b/messages/uniworx/categories/courses/tutorial/de-de-formal.msg index 601183d85..eb030ae8c 100644 --- a/messages/uniworx/categories/courses/tutorial/de-de-formal.msg +++ b/messages/uniworx/categories/courses/tutorial/de-de-formal.msg @@ -44,6 +44,7 @@ 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 +TutorialUserPrintQualification: Zertifikat drucken TutorialUserGrantQualification: Qualifikation vergeben TutorialUserRenewQualification: Qualifikation regulär verlängern TutorialUserRenewedQualification n@Int: Qualifikation für #{tshow n} Tutoriums-#{pluralDE n "Teilnehmer:in" "Teilnehmer:innen"} regulär verlängert diff --git a/messages/uniworx/categories/courses/tutorial/en-eu.msg b/messages/uniworx/categories/courses/tutorial/en-eu.msg index 4ecbb64e1..cdcf22eda 100644 --- a/messages/uniworx/categories/courses/tutorial/en-eu.msg +++ b/messages/uniworx/categories/courses/tutorial/en-eu.msg @@ -45,6 +45,7 @@ TutorialUsersDeregistered count: Successfully deregistered #{show count} partici TutorialUserDeregister: Deregister from tutorial TutorialUserSendMail: Send mail +TutorialUserPrintQualification: Print certificate TutorialUserGrantQualification: Grant Qualification TutorialUserRenewQualification: Renew Qualification TutorialUserRenewedQualification n@Int: Successfully renewed qualification #{tshow n} tutorial #{pluralEN n "user" "users"} diff --git a/messages/uniworx/categories/error/de-de-formal.msg b/messages/uniworx/categories/error/de-de-formal.msg index fc419ed73..5ebda257d 100644 --- a/messages/uniworx/categories/error/de-de-formal.msg +++ b/messages/uniworx/categories/error/de-de-formal.msg @@ -6,3 +6,5 @@ ErrorResponseNotFound: Unter der von Ihrem Browser angefragten URL wurde keine S ErrorResponseNotAuthenticated: Um Zugriff auf einige Teile des Systems zu erhalten müssen Sie sich zunächst anmelden. ErrorResponseBadMethod requestMethodText@Text: Ihr Browser kann auf mehrere verschiedene Arten versuchen mit den vom System angebotenen Ressourcen zu interagieren. Die aktuell versuchte Methode (#{requestMethodText}) wird nicht unterstützt. ErrorResponseEncrypted: Um keine sensiblen Daten preiszugeben wurden nähere Details verschlüsselt. Wenn Sie eine Anfrage an den Support schicken fügen Sie bitte die unten aufgeführten verschlüsselten Daten mit an. + +ErrorUnknownFormAction: Unbekannte oder ungültige Formular Aktion wurde ignoriert. \ No newline at end of file diff --git a/messages/uniworx/categories/error/en-eu.msg b/messages/uniworx/categories/error/en-eu.msg index 6d22e42db..9b3a3d83a 100644 --- a/messages/uniworx/categories/error/en-eu.msg +++ b/messages/uniworx/categories/error/en-eu.msg @@ -6,3 +6,5 @@ ErrorResponseNotFound: No page could be found under the url requested by your br ErrorResponseNotAuthenticated: To be granted access to most parts of Uni2work you need to login first. ErrorResponseBadMethod requestMethodText: Your browser can interact in multiple ways with the resources offered by Uni2work. The requested method (#{requestMethodText}) is not supported here. ErrorResponseEncrypted: In order not to reveal sensitive information further details have been encrypted. If you send a support request, please include the encrypted data listed below. + +ErrorUnknownFormAction: Unknown or invalid form action was ignored. \ No newline at end of file diff --git a/messages/uniworx/categories/print/de-de-formal.msg b/messages/uniworx/categories/print/de-de-formal.msg index 29361a2cf..2e0c55e2b 100644 --- a/messages/uniworx/categories/print/de-de-formal.msg +++ b/messages/uniworx/categories/print/de-de-formal.msg @@ -7,6 +7,7 @@ PrintJobName: Bezeichnung PrintJobFilename: Dateiname PrintJobId !ident-ok: Id PrintJobCreated: Gesendet +PrintJobApcAcknowledge: Bestätigungs ID PrintJobAcknowledged: Bestätigt PrintJobUnacknowledged: Noch nicht gedruckt PrintJobAcknowledge n@Int64: #{n} #{pluralDE n "Druckauftrag" "Druckaufräge"} als gedruckt und versendet bestätigt diff --git a/messages/uniworx/categories/print/en-eu.msg b/messages/uniworx/categories/print/en-eu.msg index 7f07a8f52..8e1ee4b57 100644 --- a/messages/uniworx/categories/print/en-eu.msg +++ b/messages/uniworx/categories/print/en-eu.msg @@ -7,6 +7,7 @@ PrintJobName: Description PrintJobFilename: Filename PrintJobId: Id PrintJobCreated: Created +PrintJobApcAcknowledge: Acknowledge ID PrintJobAcknowledged: Acknowledged PrintJobUnacknowledged: Not yet printed PrintJobAcknowledge n: #{n} #{pluralENs n "print-job"} marked as printed and mailed diff --git a/messages/uniworx/categories/qualification/de-de-formal.msg b/messages/uniworx/categories/qualification/de-de-formal.msg index e99f42ec6..2d9e6af3c 100644 --- a/messages/uniworx/categories/qualification/de-de-formal.msg +++ b/messages/uniworx/categories/qualification/de-de-formal.msg @@ -20,18 +20,20 @@ TableQualificationSapExportTooltip: Wird die Qualifikation an das SAP übermitte LmsQualificationValidUntil: Gültig bis TableQualificationLastRefresh: Zuletzt erneuert TableQualificationFirstHeld: Erstmalig -TableQualificationBlockedDue: Suspendiert +TableQualificationBlockedDue: Entzogen TableQualificationBlockedTooltip: Wann wurde die Qualifikation vorübergehend außer Kraft gesetzt und warum wurde dies veranlasst? TableQualificationBlockedTooltipSimple: Wann wurde die Qualifikation aus besonderem Grund wiederrufen? -TableQualificationNoRenewal: Storniert -TableQualificationNoRenewalTooltip: Es wird keine Benachrichtigung mehr versendet, wenn diese Qualifikation ablaufen sollte. Die Qualifikation kann noch gültig sein. +TableQualificationNoRenewal: Auslaufend +TableQualificationNoRenewalTooltip: Es wird keine Benachrichtigung mehr versendet, wenn diese Qualifikation ablaufen sollte. Die Qualifikation kann noch weiterhin gültig sein. QualificationUserNoRenewal: Läuft ohne Benachrichtigung aus QualificationUserNone: Für diese Person sind keine Qualifikationen registriert. +QualificationBlockReason: Entzugsbegründung LmsUser: Inhaber -TableLmsEmail: E-Mail +LmsURL: Link E-Learning +TableLmsEmail: E‑Mail TableLmsIdent: LMS Identifikation -TableLmsElearning: E-Learning -TableLmsPin: E-Learning Pin +TableLmsElearning: E‑Learning +TableLmsPin: E‑Learning Pin TableLmsResetPin: Pin zurücksetzen? TableLmsDatePin: Pin erstellt TableLmsDelete: Löschen? @@ -41,7 +43,7 @@ TableLmsReceived: Letzte Rückmeldung TableLmsNotified: Versand Benachrichtigung TableLmsNotifiedTooltip: Benachrichtigungen werden erst versendet wenn das LMS bestätigt die Eröffnung des E-Learning für den Benutzer bestätigt hat, was ein paar Stunden dauern kann! TableLmsEnded: Beended -TableLmsStatus: Status E-Learning +TableLmsStatus: Status E‑Learning TableLmsStatusTooltip mbMonth@(Maybe Int): Zeigt an, seit wann ein E-Learning offen ist oder wann es mit Bestanden oder Durchgefalen abgeschlossen wurde. #{maybeToMessage "Anzeige erlischt " (fmap (flip pluralDEeN "Monat") mbMonth) " nach Abschluss."} TableLmsStatusDay: Datum letzte Statusänderung E-Learning TableLmsSuccess: Bestanden @@ -67,14 +69,19 @@ LmsErrorNoRefreshElearning: Fehler: E-Learning wird nicht automatisch gestartet, MailSubjectQualificationRenewal qname@Text: Qualifikation #{qname} muss demnächst erneuert werden MailSubjectQualificationExpiry qname@Text: Qualifikation #{qname} läuft demnächst ab MailSubjectQualificationExpired qname@Text: Qualifikation #{qname} ist ab sofort ungültig -MailBodyQualificationRenewal qname@Text: Sie müssen die Qualifikation #{qname} demnächst durch einen E-Learning Kurs erneuern, siehe Anhang. +MailBodyQualificationRenewal qname@Text: Qualifikation #{qname} muss demnächst durch einen E-Learning erneuert werden. Ansprechpartner werden gebeten, die Anmeldedaten im Anhang vertraulich an den Prüfling zu übermitteln. MailBodyQualificationExpiry: Diese Qualifikation läuft bald ab. Tätigkeiten, welche diese Qualifikation voraussetzen dürfen dann nicht länger ausgeübt werden! MailBodyQualificationExpired: Diese Qualifikation is nun abgelaufen. Tätigkeiten, welche diese Qualifikation voraussetzen dürfen ab sofort nicht länger ausgeübt werden! Es ist möglich, dass die Qualifikation vorzeit ungültig wurde, z.B. wegen erfolgloser Teilnahme an einem verpflichtendem E-Learning. -QualificationActExpire: Qualifikation ohne Benachrichtigung auslaufen lassen -QualificationActUnexpire: Benachrichtigung bei anstehender Erneuerung senden +QualificationActExpire: Auslaufend markieren - keine Benachrichtigung zur Erneuerung senden +QualificationActUnexpire: Auslaufend aufheben - kostenpflichtige Benachrichtigung bei anstehender Erneuerung senden QualificationSetExpire n@Int64: Benachrichtigung bei anstehender Erneuerung und E-Learning abgeschaltet für #{n} #{pluralDE n "Person" "Personen"} QualificationSetUnexpire n@Int64: Benachrichtigung bei anstehender Erneuerung und E-Learning aktiviert für #{n} #{pluralDE n "Person" "Personen"} -LmsRenewalInstructions: Anweisungen zur Verlängerung finden Sie im angehängten PDF. Um Missbrauch zu verhindern wurde das PDF dem von Ihnen in FRADrive hinterlegten PDF-Passwort verschlüsselt. Falls kein PDF-Passwort manuell hinterlegt wurde, ist das PDF-Passwort Ihre Flughafen Ausweisnummer, inklusive Punkt und der Ziffer danach. +QualificationActBlockSupervisor: Dauerhaft entziehen, mit sofortiger Wirkung +QualificationActBlock: Entziehen +QualificationActUnblock: Entzug löschen +QualificationStatusBlock l@QualificationShorthand n@Int m@Int: #{n}/#{m} #{l} entzogen +QualificationStatusUnblock l@QualificationShorthand n@Int m@Int: #{n}/#{m} #{l} reaktiviert +LmsRenewalInstructions: Weitere Anweisungen zur Verlängerung finden Sie im angehängten PDF. Um Missbrauch zu verhindern wurde das PDF mit dem im FRADrive hinterlegten PDF-Passwort des Prüflings verschlüsselt. Falls kein PDF-Passwort manuell hinterlegt wurde, ist das PDF-Passwort die Flughafen Ausweisnummer, inklusive Punkt und der Ziffer danach. LmsNoRenewal: Leider kann diese Qualifikation nicht alleine durch E-Learning verlängert werden. LmsActNotify: Benachrichtigung E-Learning erneut per Post oder E-Mail versenden LmsActRenewPin: Neue zufällige E-Learning PIN zuweisen @@ -83,17 +90,6 @@ LmsNotificationSend n@Int: E-Learning Benachrichtigungen an #{n} #{pluralDE n "P LmsPinRenewal n@Int: E-Learning Pin ausgetauscht für #{n} #{pluralDE n "Prüfling" "Prüflinge"}. LmsActionFailed n@Int: Aktion nicht durchgeführt für #{n} #{pluralDE n "Person" "Personen"}, da diese derzeit nicht an einer Prüfung teilnehmen. LmsStarted: E-Learning eröffnet -MppOpening: Anrede -MppClosing: Grußformel -MppSupervisor: Ansprechpartner -MppDate: Datum -MppURL: Link E-Learning -MppLogin !ident-ok: Login -MppPin !ident-ok: Pin -MppRecipient: Empfänger -MppAddress: Adresse -MppLang: Sprache -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 diff --git a/messages/uniworx/categories/qualification/en-eu.msg b/messages/uniworx/categories/qualification/en-eu.msg index 729511c76..0a3cc9eec 100644 --- a/messages/uniworx/categories/qualification/en-eu.msg +++ b/messages/uniworx/categories/qualification/en-eu.msg @@ -20,18 +20,20 @@ TableQualificationSapExportTooltip: Is this qualification transmitted to SAP? On LmsQualificationValidUntil: Valid until TableQualificationLastRefresh: Last renewed TableQualificationFirstHeld: First held -TableQualificationBlockedDue: Suspended +TableQualificationBlockedDue: Revoked TableQualificationBlockedTooltip: Why and when was this qualification temporarily suspended? TableQualificationBlockedTooltipSimple: When was this qualification revoked due to extraordinary reasons? -TableQualificationNoRenewal: Canceled +TableQualificationNoRenewal: Discontinued TableQualificationNoRenewalTooltip: No renewal notifications will be send for this qualification upon expiry. The qualification may still be valid. QualificationUserNoRenewal: Expires without further notification QualificationUserNone: No registered qualifications for this person. +QualificationBlockReason: Reason for revoking LmsUser: Licensee +LmsURL: Link E-learning TableLmsEmail: Email TableLmsIdent: LMS Identifier -TableLmsPin: E-learning pin -TableLmsElearning: E-learning +TableLmsPin: E‑learning pin +TableLmsElearning: E‑learning TableLmsResetPin: Reset pin? TableLmsDatePin: Pin created TableLmsDelete: Delete? @@ -67,14 +69,19 @@ LmsErrorNoRefreshElearning: Error: E-learning will not be started automatically MailSubjectQualificationRenewal qname: Qualification #{qname} must be renewed shortly MailSubjectQualificationExpiry qname: Qualification #{qname} expires soon MailSubjectQualificationExpired qname: Qualification #{qname} is no longer valid -MailBodyQualificationRenewal qname: You will soon need to renew qualification #{qname} by completing an e-learning course. For details see attachment. +MailBodyQualificationRenewal qname: The qualification #{qname} must be renewed soon by completing an e-learning course, otherwise it will expire. Supervisors are kindly requested to forward the login data confidentially to the examinee. MailBodyQualificationExpiry: This qualification expires soon. You may then no longer execute any duties that require this qualification as a precondition! MailBodyQualificationExpired: This qualification is now expired. You may no longer execute any duties that require this qualification as a precondition! It is possible that the qualification expired prematurely, e.g. due to a failed compulsory e-learning. -QualificationActExpire: Qualification shall expire silently -QualificationActUnexpire: Notify upon due renewal +QualificationActExpire: Discontinue - qualification expires silently +QualificationActUnexpire: Continue - send a possibly fee-paying notification upon due renewal QualificationSetExpire n: Expiry notification and e-learning deactivated for #{n} #{pluralENs n "person"} QualificationSetUnexpire n: Expiry notification and e-learning activated for #{n} #{pluralENs n "person"} -LmsRenewalInstructions: Instruction on how to accomplish the renewal are enclosed in the attached PDF. In order to avoid misuse, the PDF is encrypted with your chosen FRADrive PDF-Password. If you have not yet chosen a PDF-Password yet, then the password is your Fraport id card number, inkluding the punctuation mark and the Digit thereafter. +QualificationActBlockSupervisor: Waive permanently, effective immediately +QualificationActBlock: Revoke +QualificationActUnblock: Clear revocation +QualificationStatusBlock l n m: #{n}/#{m} #{l} revoked +QualificationStatusUnblock l n m: #{n}/#{m} #{l} reactivated +LmsRenewalInstructions: Instruction on how to accomplish the renewal are enclosed in the attached PDF. In order to avoid misuse, the PDF is encrypted with the FRADrive PDF-password of the examinee. If no PDF-password had been chosen yet, then the password is the Fraport id card number of the examinee, including the punctuation mark and the digit thereafter. LmsNoRenewal: Unfortunately, this particular qualification cannot be renewed through E-learning only. LmsActNotify: Resend e-learning notification by post or email LmsActRenewPin: Randomly replace e-learning PIN @@ -83,17 +90,6 @@ LmsNotificationSend n: E-learning notifications will be sent to #{n} #{pluralENs LmsPinRenewal n: E-learning pin replaced randomly for #{n} #{pluralENs n "examinee"}. LmsActionFailed n: No action for #{n} #{pluralENs n "person"}, since there was no ongoing examination. LmsStarted: E-learning open since -MppOpening: Opening -MppClosing: Closing -MppSupervisor: Supervisor -MppDate: Date -MppURL: Link e-learning -MppLogin: Login -MppPin: Pin -MppRecipient: Recipient -MppAddress: Address -MppLang: Language -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. diff --git a/messages/uniworx/utils/buttons/de-de-formal.msg b/messages/uniworx/utils/buttons/de-de-formal.msg index f627354ae..adf9d75ab 100644 --- a/messages/uniworx/utils/buttons/de-de-formal.msg +++ b/messages/uniworx/utils/buttons/de-de-formal.msg @@ -38,7 +38,7 @@ BtnExamAutoOccurrenceCalculate: Verteilungstabelle berechnen BtnExamAutoOccurrenceAccept: Verteilung akzeptieren BtnExamAutoOccurrenceNudgeUp !ident-ok: + BtnExamAutoOccurrenceNudgeDown !ident-ok: - -BtnSetDisplayEmail: E-Mail-Adresse setzen +BtnSetDisplayEmail: E‑Mail-Adresse setzen BtnAuthLDAP: Auf Fraport AG Kennung (Büko) umstellen BtnAuthPWHash: Auf FRADrive interne Kennung umstellen BtnPasswordReset: Passwort zurücksetzen diff --git a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg index 684e91f5e..6e49ab72d 100644 --- a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg @@ -88,7 +88,7 @@ BreadcrumbVersion: Versionsgeschichte BreadcrumbHelp: Hilfe BreadcrumbHealth: Instanz-Zustand BreadcrumbInstance: Instanz-Identifikation -BreadcrumbUserDisplayEmail: E-Mail-Adresse +BreadcrumbUserDisplayEmail: E‑Mail-Adresse BreadcrumbProfileData: Persönliche Daten BreadcrumbAuthPreds: Authorisierungseinstellungen BreadcrumbTermShow: Semester @@ -107,7 +107,7 @@ BreadcrumbSheetList: Übungsblätter BreadcrumbSheetNew: Neues Übungsblatt anlegen BreadcrumbSheetCurrent: Aktuelles Übungsblatt BreadcrumbSheetOldUnassigned: Abgaben ohne Korrektor:in -BreadcrumbCourseCommunication: Kursmitteilung (E-Mail) +BreadcrumbCourseCommunication: Kursmitteilung (E‑Mail) BreadcrumbTutorialList: Tutorien BreadcrumbTutorialNew: Neues Tutorium anlegen BreadcrumbCourseDelete: Kurs löschen diff --git a/messages/uniworx/utils/navigation/menu/de-de-formal.msg b/messages/uniworx/utils/navigation/menu/de-de-formal.msg index d008c4b44..196b16786 100644 --- a/messages/uniworx/utils/navigation/menu/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/menu/de-de-formal.msg @@ -31,7 +31,7 @@ MenuCourseList: Kurse MenuCourseMembers: Kursteilnehmer:innen MenuCourseAddMembers: Kursteilnehmer:innen hinzufügen MenuTutorialAddMembers: Tutorium Teilnehmer:innen hinzufügen -MenuCourseCommunication: Kursmitteilung (E-Mail) +MenuCourseCommunication: Kursmitteilung (E‑Mail) MenuCourseExamOffice: Prüfungsbeauftragte MenuTermShow: Semester MenuSubmissionDelete: Abgabe löschen @@ -115,12 +115,12 @@ MenuCourseEventEdit: Kurstermin bearbeiten MenuLanguage: Sprache MenuQualifications: Qualifikationen -MenuLms !ident-ok: E-Learning -MenuLmsEdit: Bearbeiten E-Learning +MenuLms !ident-ok: E‑Learning +MenuLmsEdit: Bearbeiten E‑Learning MenuLmsUser: Benutzer Qualifikationen -MenuLmsUsers: Export E-Learning Benutzer -MenuLmsUserlist: Melden E-Learning Benutzer -MenuLmsResult: Melden Ergebnisse E-Learning +MenuLmsUsers: Export E‑Learning Benutzer +MenuLmsUserlist: Melden E‑Learning Benutzer +MenuLmsResult: Melden Ergebnisse E‑Learning MenuLmsUpload: Hochladen MenuLmsDirectUpload: Direkter Upload MenuLmsDirectDownload: Direkter Download diff --git a/messages/uniworx/utils/navigation/menu/en-eu.msg b/messages/uniworx/utils/navigation/menu/en-eu.msg index a5760a1dd..85130a2e9 100644 --- a/messages/uniworx/utils/navigation/menu/en-eu.msg +++ b/messages/uniworx/utils/navigation/menu/en-eu.msg @@ -116,12 +116,12 @@ MenuCourseEventEdit: Edit course occurrence MenuLanguage: Language MenuQualifications: Qualifications -MenuLms: E-Learning -MenuLmsEdit: Edit E-Learning +MenuLms: E‑Learning +MenuLmsEdit: Edit E‑Learning MenuLmsUser: User Qualifications -MenuLmsUsers: Download E-Learning Users -MenuLmsUserlist: Upload E-Learning Users -MenuLmsResult: Upload E-Learning Results +MenuLmsUsers: Download E‑Learning Users +MenuLmsUserlist: Upload E‑Learning Users +MenuLmsResult: Upload E‑Learning Results MenuLmsUpload: Upload MenuLmsDirectUpload: Direct Upload MenuLmsDirectDownload: Direct Download diff --git a/messages/uniworx/utils/table_column/de-de-formal.msg b/messages/uniworx/utils/table_column/de-de-formal.msg index 1b6c4a69f..681b63f78 100644 --- a/messages/uniworx/utils/table_column/de-de-formal.msg +++ b/messages/uniworx/utils/table_column/de-de-formal.msg @@ -4,7 +4,7 @@ ExamOccurrenceStart: Prüfungsbeginn #general table-discriptions -TableEmail: E-Mail +TableEmail: E‑Mail TableStudyTerm: Studiengang TableStudyFeatureAge: Fachsemester TableStudyFeatureDegree: Abschluss diff --git a/messages/uniworx/utils/utils/de-de-formal.msg b/messages/uniworx/utils/utils/de-de-formal.msg index a36ce9848..3dfdcd670 100644 --- a/messages/uniworx/utils/utils/de-de-formal.msg +++ b/messages/uniworx/utils/utils/de-de-formal.msg @@ -77,6 +77,8 @@ MultiUserFieldExplanationAnyUser: Dieses Eingabefeld sucht in den Adressen aller MultiUserFieldInvitationExplanation: An Adressen, die so keinem Uni2work-Benutzer/keiner Uni2work-Benutzerin zugeordnet werden können, wird eine Einladung per E-Mail versandt. MultiUserFieldInvitationExplanationAlways: Es wird an alle Adressen, die Sie hier angeben, eine Einladung per E-Mail versandt. AmbiguousEmail: E-Mail-Adresse nicht eindeutig +InvalidEmailAddress: E-Mail-Adresse ist ungültig +InvalidEmailAddressWith e@Text: E-Mail-Adresse #{show e} ist ungültig UtilExamResultGrade: Note UtilExamResultPass: Bestanden/Nicht Bestanden UtilExamResultNoShow: Nicht erschienen diff --git a/messages/uniworx/utils/utils/en-eu.msg b/messages/uniworx/utils/utils/en-eu.msg index f2af64e05..8e551020c 100644 --- a/messages/uniworx/utils/utils/en-eu.msg +++ b/messages/uniworx/utils/utils/en-eu.msg @@ -77,6 +77,8 @@ MultiUserFieldExplanationAnyUser: This input searches through the addresses of a MultiUserFieldInvitationExplanation: For addresses, which are not found in this way, an invitation will be sent via email. MultiUserFieldInvitationExplanationAlways: An invitation will be sent via email to all addresses you enter here. AmbiguousEmail: Email address is ambiguous +InvalidEmailAddress: Email address is invalid +InvalidEmailAddressWith e: Email asdress #{show e} is invalid UtilExamResultGrade: Grade UtilExamResultPass: Passed/Failed UtilExamResultNoShow: Not present diff --git a/models/courses.model b/models/courses.model index 3bfee5a1b..0d278f295 100644 --- a/models/courses.model +++ b/models/courses.model @@ -90,3 +90,10 @@ CourseUserExamOfficeOptOut school SchoolId UniqueCourseUserExamOfficeOptOut course user school deriving Generic + +CourseQualification + course CourseId + qualification QualificationId + sortOrder Int default=0 + UniqueCourseQualification course qualification + deriving Generic \ No newline at end of file diff --git a/models/lms.model b/models/lms.model index ac2128e55..f96aca375 100644 --- a/models/lms.model +++ b/models/lms.model @@ -22,7 +22,7 @@ Qualification -- across all schools, only one qualification may be a driving licence: UniqueQualificationAvsLicence avsLicence !force -- NOTE: two NULL values are not equal for the purpose of Uniqueness constraints! - deriving Generic + deriving Eq Generic -- TODOs: -- - Enstehen Kosten, wenn Teilnehmer für KnowHow eingereiht werden, aber nicht am Kurs teilnehmen? diff --git a/models/print.model b/models/print.model index e3b8aeadb..69adcc7ba 100644 --- a/models/print.model +++ b/models/print.model @@ -3,15 +3,17 @@ -- SPDX-License-Identifier: AGPL-3.0-or-later PrintJob - name Text - filename FilePath - file ByteString -- stores plain pdf; otherwise use FileContentReference Maybe - created UTCTime - acknowledged UTCTime Maybe - recipient UserId Maybe OnDeleteCascade OnUpdateCascade -- optional as some letters may contain just an address - sender UserId Maybe OnDeleteSetNull OnUpdateCascade -- senders and associations are optional - course CourseId Maybe OnDeleteCascade OnUpdateCascade - qualification QualificationId Maybe OnDeleteCascade OnUpdateCascade - lmsUser LmsIdent Maybe OnDeleteCascade OnUpdateCascade -- allows tracking if recipient has been notified; must be unique + name Text + apcIdent Text default='unknown' + filename FilePath + file ByteString -- stores plain pdf; otherwise use FileContentReference Maybe + created UTCTime + acknowledged UTCTime Maybe + recipient UserId Maybe OnDeleteCascade OnUpdateCascade -- optional as some letters may contain just an address + sender UserId Maybe OnDeleteSetNull OnUpdateCascade -- senders and associations are optional + course CourseId Maybe OnDeleteCascade OnUpdateCascade + qualification QualificationId Maybe OnDeleteCascade OnUpdateCascade + lmsUser LmsIdent Maybe OnDeleteCascade OnUpdateCascade -- allows tracking if recipient has been notified; must be unique -- UniquePrintJobLmsUser lmsUser -- Note that in fact multiple print jobs per LMS user are possible! + -- UniquePrintJobApcIdent apcIdent -- TODO: not yet enforced, since LmsIdent is currently used deriving Generic \ No newline at end of file diff --git a/src/Audit/Types.hs b/src/Audit/Types.hs index 1299a11ef..4ba414ea8 100644 --- a/src/Audit/Types.hs +++ b/src/Audit/Types.hs @@ -197,20 +197,24 @@ data Transaction , transactionNote :: Maybe Text , transactionReceived :: UTCTime -- when was the csv file received? } - - | TransactionQualificationUserEdit - { transactionQualificationUser :: QualificationUserId - , transactionQualification :: QualificationId - , transactionUser :: UserId -- qualification holder that is updated + | TransactionQualificationUserEdit -- Note that a renewal always entails unblocking as well! + { transactionUser :: UserId -- qualification holder that is updated + , transactionQualificationUser :: QualificationUserId -- könnte entfernt werden + , transactionQualification :: QualificationId , transactionQualificationValidUntil :: Day , transactionQualificationScheduleRenewal :: Maybe Bool -- Maybe, because some update may leave it unchanged (also avoids DB Migration) } | TransactionQualificationUserDelete - { transactionQualificationUser :: QualificationUserId - , transactionQualification :: QualificationId - , transactionUser :: UserId + { transactionUser :: UserId + , transactionQualificationUser :: QualificationUserId + , transactionQualification :: QualificationId + } + | TransactionQualificationUserBlocking + { transactionUser :: UserId -- qualification holder that is updated + -- , transactionQualificationUser :: QualificationUserId -- not neccessary due to UniqueQualificationUser + , transactionQualification :: QualificationId + , transactionQualificationBlock :: Maybe QualificationBlocked -- Nothing indicates unblocking } - deriving (Eq, Ord, Read, Show, Generic) deriveJSON defaultOptions diff --git a/src/Handler/Admin.hs b/src/Handler/Admin.hs index cadc13683..9749f3004 100644 --- a/src/Handler/Admin.hs +++ b/src/Handler/Admin.hs @@ -23,6 +23,7 @@ import qualified Database.Esqueleto.Utils as E import Handler.Utils.DateTime import Handler.Utils.Avs import Handler.Utils.Widgets +import Handler.Utils.Users import Handler.Admin.Test as Handler.Admin import Handler.Admin.ErrorMessage as Handler.Admin @@ -83,7 +84,7 @@ getAdminProblemsR = do getProblemUnreachableR :: Handler Html getProblemUnreachableR = do - unreachables <- runDB $ E.select retrieveUnreachableUsers + unreachables <- runDB retrieveUnreachableUsers' siteLayoutMsg MsgProblemsUnreachableHeading $ do setTitleI MsgProblemsUnreachableHeading [whamlet| @@ -92,7 +93,7 @@ getProblemUnreachableR = do