diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ff23608e..8d28a1244 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,89 @@ 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.4.67](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.66...v27.4.67) (2024-06-17) + + +### Bug Fixes + +* **avs:** fix rare avs update bug involving values optional in avs but compulsory in user entity ([a6d0105](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/a6d0105903caba0eb47715eeb217ea2c53d99e23)) + +## [27.4.66](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.65...v27.4.66) (2024-06-12) + + +### Bug Fixes + +* **avs:** fix [#164](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/164) by removing companyPersonalNumber and companyDepartment upon ldap sync expiry ([da74b95](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/da74b957295caefb010c90297af557f997b18e7c)) +* **avs:** fix [#165](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/165) by updating userCompanyDepartmen and userCompanyPersonalNumer ([76e0710](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/76e0710c7b54a40d2c236299ea4fabd009d3f35a)) +* **avs:** repeated avs sync enqueue no longe violates duplicate db uniqueness constraints ([996e6a0](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/996e6a0ce563bda96638863efd40ce38fce8ac2b)) +* **avs:** update email on manual company switch ([9fd80f2](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/9fd80f25526eefce217c659f6ea2991771c11ece)), closes [#164](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/164) + +## [27.4.65](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.64...v27.4.65) (2024-06-10) + + +### Bug Fixes + +* **avs:** company update no longer fails on duplicate key ([bb101de](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/bb101dee7b40cd3d8ba10a559af642396d5b87b5)) +* **avs:** profile page correctly indicates automatic email and postal addresses ([e553ad4](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/e553ad4358a71fc96fa946533f0441d4af5202c9)) +* **avs:** steps towards [#164](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/164) ([aa1d230](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/aa1d230e497f0e59dbea9f4fd5c7da773f5a4280)) +* **lette:** adjust window for new pin letters ([6acfd84](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/6acfd849aeb473a018f7a9c34e69f61b3c22b6f8)) + +## [27.4.64](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.63...v27.4.64) (2024-05-27) + +## [27.4.63](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.62...v27.4.63) (2024-05-23) + + +### Bug Fixes + +* **avs:** company update checks uniques and ignores those updates if necessary ([9451d90](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/9451d90a9e00d08a2a7d169c4674d99ff1018ee9)) + +## [27.4.62](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.61...v27.4.62) (2024-05-19) + + +### Bug Fixes + +* **avs:** avs update on company shorthands working now ([ff2347b](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/ff2347b1c950c7a2bb281cdcd07a52925e23b9f0)) +* **avs:** deal gracefully with empty card status results ([ccf9340](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/ccf934044938277d821eb4b9ea08a8a134e84189)) + +## [27.4.61](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.60...v27.4.61) (2024-05-06) + + +### Bug Fixes + +* **avs:** fix [#76](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/76) allowing company changes and fix [#69](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/69) ([3c4a0b8](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/3c4a0b86c1e3d8a28405ab73b964ba1b988d2822)) +* **build:** add missing tex packages ([6750798](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/6750798920dc76882f4e8ef39b47018fb7b77e44)) +* **build:** workaround non modal form result handler ([2fbd281](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/2fbd28154cd7aea282eaa2604a42263ac90e3b1e)) + +## [27.4.60](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.59...v27.4.60) (2024-04-26) + + +### Bug Fixes + +* **avs:** disable caching by 0s no longer causes an exception ([d578e80](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/d578e80282c8bf6872fa6040514a9d2c85582707)) +* **avs:** fix [#152](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/152) by providing new online avs card filter throughout ([ad2375b](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/ad2375b338866f37c8b7825a9eab12fa6c9abccb)) +* **avs:** fix [#36](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/36) and remove dead code ([4f8850b](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/4f8850b3b4f710f9cf59163175b27599c97ac5c0)) +* **avs:** fix [#69](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/69) by redesigning live avs status page ([697979c](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/697979c277ce7198f4573d6cea30373a1fcc17da)) +* **avs:** invalidate contact cache after licence writes ([c382be9](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/c382be9325fcc92e13cb5dc2ad7c20b198db26fc)) +* **avs:** several minor bugfixes ([a52c8a6](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/a52c8a6ad709029a8822d383370b0d2bdd25e7d7)), closes [#158](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/158) +* **build:** add import needed for production only ([724e4a0](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/724e4a0bec343ab9c6d172d8e93b8040bbe3fe7d)) +* **build:** migration needs to check for table existens first ([f439ea4](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/f439ea45af9b1c4a029fc1b9b6383f3c97194ed0)) +* **build:** minor error non-development code ([66eaa4f](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/66eaa4f7dcc124b631414d4a1adbe555a4029100)) +* **build:** missing parameters added ([83afdf7](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/83afdf760f93fc1a553de3a122b444412ed84ba4)) +* **build:** simple type error ([d56a1cd](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/d56a1cdd46259418faa737b9bb0a9d9ffba442e0)) +* **build:** type error in test db fill data ([f465cc9](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/f465cc972367233a4944dd0aeb81b223a187bb85)) +* **doc:** minor haddock problems ([d4f8a6c](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/d4f8a6c77b2a4a4540935f7f0beca0d0605508c8)) +* **firm:** supervisor filter acts weird in test environment ([b566e59](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/b566e59eb1325485fe26dc4f0b5cb63165c58f74)) +* **i18n:** fix some bad plurals ([890f8ad](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/890f8ad8b60115533faa6b99f4c4504243cbfb1d)) +* **lint:** remove minor superfluous dollar ([64a1233](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/64a123387f3539b73649d02a6ecd97de577097e6)) +* **qualification:** fix [#159](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/issues/159) by removing an misleadingly named column for user qualification table ([fd6a538](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/fd6a5384d3517958a3c7726e32eed3bad197a591)) + +## [27.4.59](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.58...v27.4.59) (2024-02-13) + + +### Bug Fixes + +* **sql:** remove potential bug in relation to missing parenthesis after not_ ([42695cf](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/commit/42695cf5ef9f21691dc027f1ec97d57eec72f03e)) + ## [27.4.58](https://gitlab2.rz.ifi.lmu.de/uni2work/uni2work/compare/v27.4.57...v27.4.58) (2024-02-08) diff --git a/fixtest.sh b/fixtest.sh new file mode 100755 index 000000000..d59f51144 --- /dev/null +++ b/fixtest.sh @@ -0,0 +1,6 @@ +if [[ ! -d .stack-work-test ]]; then + mv -vT .stack-work .stack-work-test + [[ -d .stack-work-build ]] && mv -vT .stack-work-build .stack-work +else + echo "Directory .stack-work-test exists already." +fi diff --git a/messages/faq/de-de-formal.msg b/messages/faq/de-de-formal.msg index 221b1f5b1..a568617e6 100644 --- a/messages/faq/de-de-formal.msg +++ b/messages/faq/de-de-formal.msg @@ -1,11 +1,9 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost +# SPDX-FileCopyrightText: 2022-24 Gregor Kleen ,Steffen Jost ,Steffen Jost # # SPDX-License-Identifier: AGPL-3.0-or-later +FAQLoginExpired: Mein Passwort ist abgelaufen und muss erneuert werden FAQNoCampusAccount: Ich habe keine Fraport AG Kennung (Büko-Login); kann ich trotzdem Zugang zum System erhalten? FAQForgottenPassword: Ich habe mein Passwort vergessen FAQCampusCantLogin: Ich kann mich mit meiner Fraport AG Kennung (Büko-Login) nicht anmelden -FAQCourseCorrectorsTutors: Wie kann ich Ausbilder oder Korrektoren für meine Kursart konfigurieren? -FAQNotLecturerHowToCreateCourses: Wie kann ich eine neue Kursart anlegen? -FAQExamPoints: Warum kann ich bei meiner Klausur keine Punkte eintragen? -FAQInvalidCredentialsAdAccountDisabled: Ich kann mich nicht anmelden und bekomme die Meldung „Benutzereintrag gesperrt“ \ No newline at end of file +FAQNotLecturerHowToCreateCourses: Wie kann ich eine neue Kursart anlegen? \ No newline at end of file diff --git a/messages/faq/en-eu.msg b/messages/faq/en-eu.msg index 0686713bb..5d1ed4913 100644 --- a/messages/faq/en-eu.msg +++ b/messages/faq/en-eu.msg @@ -1,11 +1,9 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost +# SPDX-FileCopyrightText: 2022-24 Gregor Kleen ,Steffen Jost ,Steffen Jost # # SPDX-License-Identifier: AGPL-3.0-or-later +FAQLoginExpired: My password expired FAQNoCampusAccount: I don't have Fraport AG credentials (Büko login); can I still get access? FAQForgottenPassword: I have forgotten my password FAQCampusCantLogin: I can't log in using my Fraport AG credentials (Büko login) -FAQCourseCorrectorsTutors: How can I add instructors 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” \ No newline at end of file +FAQNotLecturerHowToCreateCourses: How can I create new courses? \ No newline at end of file diff --git a/messages/uniworx/categories/qualification/de-de-formal.msg b/messages/uniworx/categories/qualification/de-de-formal.msg index e0fee7cb8..9c72b28ee 100644 --- a/messages/uniworx/categories/qualification/de-de-formal.msg +++ b/messages/uniworx/categories/qualification/de-de-formal.msg @@ -25,7 +25,8 @@ TableQualificationSapExport: SAP TableQualificationSapExportTooltip: Wird die Qualifikation an das SAP übermittelt? Betrifft nur Benutzer mit Fraport Personalnummer. LmsQualificationValidUntil: Gültig bis TableQualificationLastRefresh: Zuletzt erneuert -TableQualificationLastNotified: Letzte Benachrichtigung +TableQualificationLastNotified: Letzte Benachrichtigung über erfolgte Gültigkeitsänderung +TableQualificationLastNotifiedTooltip: Hier werden ausschließlich Benachrichtigungen berücksichtigt, die über einen bereits erfolgten Ablauf/Entzug/Wiedererteilung informieren. Dies ignoriert insbesondere reguläre Verlängerung, z.B. durch E-Learning. TableQualificationFirstHeld: Erstmalig TableQualificationBlockedDue: Entzug TableQualificationBlockedTooltip: Wann wurde die Qualifikation vorübergehend außer Kraft gesetzt und warum wurde dies veranlasst? diff --git a/messages/uniworx/categories/qualification/en-eu.msg b/messages/uniworx/categories/qualification/en-eu.msg index c886cb843..3779c22a0 100644 --- a/messages/uniworx/categories/qualification/en-eu.msg +++ b/messages/uniworx/categories/qualification/en-eu.msg @@ -25,7 +25,8 @@ TableQualificationSapExport: Sent to SAP TableQualificationSapExportTooltip: Is this qualification transmitted to SAP? Only applies to qualification holder having a Fraport AG personnel number. LmsQualificationValidUntil: Valid until TableQualificationLastRefresh: Last renewed -TableQualificationLastNotified: Last notified +TableQualificationLastNotified: Last notified about validity change +TableQualificationLastNotifiedTooltip: The date of the last notification about any already effective change in validity due to revocation or reissue. This does not entail regular validity extensions, e.g. due to e-learning. TableQualificationFirstHeld: First held TableQualificationBlockedDue: Revocations TableQualificationBlockedTooltip: Why and when was this qualification temporarily suspended? diff --git a/models/lms.model b/models/lms.model index c47e69a8c..2d3531ff8 100644 --- a/models/lms.model +++ b/models/lms.model @@ -69,7 +69,7 @@ QualificationUser lastRefresh Day -- lastRefresh > validUntil possible, if Qualification^elearningOnly == False firstHeld Day -- first time the qualification was earned, should never change scheduleRenewal Bool default=true -- if false, no automatic renewal is scheduled and the qualification expires - lastNotified UTCTime default=now() -- last notficiation about being invalid + lastNotified UTCTime default=now() -- last notficiation about actual licence validity changes (does not entail e-learning notifications) -- Reasons and temporary revocations are implemented through QualificationUserBlock -- TODO: adjust SAP interface to transmit end dates UniqueQualificationUser qualification user diff --git a/nix/docker/version.json b/nix/docker/version.json index 0f6ee116f..f5cb37c86 100644 --- a/nix/docker/version.json +++ b/nix/docker/version.json @@ -1,3 +1,3 @@ { - "version": "27.4.58" + "version": "27.4.67" } diff --git a/package-lock.json b/package-lock.json index 16f8bd6f6..fa74a5f95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "uni2work", - "version": "27.4.58", + "version": "27.4.67", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2eac33199..74c5a52a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uni2work", - "version": "27.4.58", + "version": "27.4.67", "description": "", "keywords": [], "author": "", diff --git a/package.yaml b/package.yaml index 9e9579f42..d7a3d4d22 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: uniworx -version: 27.4.58 +version: 27.4.67 dependencies: - base - yesod diff --git a/src/Handler/Course/ParticipantInvite.hs b/src/Handler/Course/ParticipantInvite.hs index 30daf6f19..53eff795d 100644 --- a/src/Handler/Course/ParticipantInvite.hs +++ b/src/Handler/Course/ParticipantInvite.hs @@ -193,7 +193,7 @@ handleAddUserR tid ssh csh tdesc ttyp = do currentRoute <- fromMaybe (error "postCAddUserR called from 404-handler") <$> getCurrentRoute (_ , registerConfirmResult) <- runButtonForm FIDCourseRegisterConfirm - -- $logDebugS "***AbortProblem***" $ tshow registerConfirmResult + -- $logDebugS "***AbortProblem***" $ tshow registerConfirmResult prefillUsers <- case registerConfirmResult of Nothing -> return mempty (Just BtnCourseRegisterAbort) -> do diff --git a/src/Handler/Health/Interface.hs b/src/Handler/Health/Interface.hs index c530b43c5..7dbc96932 100644 --- a/src/Handler/Health/Interface.hs +++ b/src/Handler/Health/Interface.hs @@ -103,7 +103,7 @@ runInterfaceLogTable interfs@(reqIfs,_) = do mkInterfaceLogTable :: (Bool -> Widget) -> ReqBanInterfaceHealth -> DB ([(Text,Bool)], Widget) mkInterfaceLogTable flagError interfs@(reqIfs, banIfs) = do - -- $logWarnS "DEBUG" $ tshow ([ihDebugShow x | x<- reqIfs], [ihDebugShow x | x<- banIfs]) + -- $logWarnS "DEBUG" $ tshow ([ihDebugShow x | x<- reqIfs], [ihDebugShow x | x<- banIfs]) void $ liftHandler $ timeoutHandler 42000001 $ runDB $ runInterfaceChecks interfs now <- liftIO getCurrentTime dbTableDB ilvalidator DBTable{dbtColonnade=colonnade now, ..} diff --git a/src/Handler/Info.hs b/src/Handler/Info.hs index 497fcb6c4..f927908d4 100644 --- a/src/Handler/Info.hs +++ b/src/Handler/Info.hs @@ -1,4 +1,4 @@ --- SPDX-FileCopyrightText: 2022-2023 Felix Hamann , Gregor Kleen , Sarah Vaupel , Steffen Jost , Winnie Ros +-- SPDX-FileCopyrightText: 2022-2024 Felix Hamann , Gregor Kleen , Sarah Vaupel , Steffen Jost , Winnie Ros , Steffen Jost -- -- SPDX-License-Identifier: AGPL-3.0-or-later @@ -13,12 +13,12 @@ import Data.Map ((!)) import qualified Data.CaseInsensitive as CI import qualified Data.Set as Set -import qualified Database.Esqueleto.Legacy as E -import qualified Database.Esqueleto.Utils as E +-- import qualified Database.Esqueleto.Legacy as E +-- import qualified Database.Esqueleto.Utils as E import Development.GitRev -import Auth.LDAP (ADError(..), ADInvalidCredentials(..), CampusMessage(..)) +-- import Auth.LDAP (ADError(..), ADInvalidCredentials(..), CampusMessage(..)) import Yesod.Auth.Message(AuthMessage(..)) @@ -175,6 +175,7 @@ showFAQ :: ( MonadAP m , MonadThrow m ) => Route UniWorX -> FAQItem -> m Bool +showFAQ _ FAQLoginExpired = return True showFAQ _ FAQNoCampusAccount = is _Nothing <$> maybeAuthId showFAQ (AuthR _) FAQCampusCantLogin = return True showFAQ _ FAQCampusCantLogin = is _Nothing <$> maybeAuthId @@ -183,38 +184,20 @@ showFAQ _ FAQForgottenPassword = is _Nothing <$> maybeAuthId showFAQ _ FAQNotLecturerHowToCreateCourses = and2M (is _Just <$> maybeAuthId) (not <$> hasWriteAccessTo CourseNewR) -showFAQ (CourseR tid ssh csh _) FAQCourseCorrectorsTutors - = and2M (is _Just <$> maybeAuthId) - (or2M (hasWriteAccessTo $ CourseR tid ssh csh SheetNewR) - (hasWriteAccessTo $ CourseR tid ssh csh CTutorialNewR) - ) -showFAQ (CExamR tid ssh csh examn _) FAQExamPoints - = and2M (hasWriteAccessTo $ CExamR tid ssh csh examn EEditR) - noExamParts - where - noExamParts = liftHandler . runDB . E.selectNotExists . E.from $ \(examPart `E.InnerJoin` exam `E.InnerJoin` course) -> do - E.on $ course E.^. CourseId E.==. exam E.^. ExamCourse - E.on $ exam E.^. ExamId E.==. examPart E.^. ExamPartExam - 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.&&. exam E.^. ExamName E.==. E.val examn -showFAQ _ FAQInvalidCredentialsAdAccountDisabled = maybeT (return False) $ do - guardM $ is _Nothing <$> maybeAuthId - sessionError <- MaybeT $ lookupSessionJson SessionError - guard $ sessionError == PermissionDenied (toPathPiece $ ADInvalidCredentials ADAccountDisabled) - return True -showFAQ _ _ = return False +-- showFAQ (CourseR tid ssh csh _) FAQCourseCorrectorsTutors +-- = and2M (is _Just <$> maybeAuthId) +-- (or2M (hasWriteAccessTo $ CourseR tid ssh csh SheetNewR) +-- (hasWriteAccessTo $ CourseR tid ssh csh CTutorialNewR) +-- ) +-- showFAQ _ _ = return False prioFAQ :: Monad m => Route UniWorX -> FAQItem -> m Rational +prioFAQ _ FAQLoginExpired = return 2 prioFAQ _ FAQNoCampusAccount = return 1 prioFAQ _ FAQCampusCantLogin = return 1 prioFAQ _ FAQForgottenPassword = return 1 prioFAQ _ FAQNotLecturerHowToCreateCourses = return 1 -prioFAQ _ FAQCourseCorrectorsTutors = return 1 -prioFAQ _ FAQExamPoints = return 2 -prioFAQ _ FAQInvalidCredentialsAdAccountDisabled = return 3 getInfoLecturerR :: Handler Html diff --git a/src/Handler/Qualification.hs b/src/Handler/Qualification.hs index 91a105146..08ed399d8 100644 --- a/src/Handler/Qualification.hs +++ b/src/Handler/Qualification.hs @@ -595,7 +595,10 @@ postQualificationR sid qsh = do ) $ \( view $ resultQualUser . _entityVal . _qualificationUserScheduleRenewal -> b) -> ifIconCell (not b) IconNoNotification , sortable (Just "lms-status-plus")(i18nCell MsgTableLmsStatus & cellTooltipWgt Nothing (lmsStatusInfoCell isAdmin auditMonths)) $ \(preview $ resultLmsUser . _entityVal -> lu) -> foldMap (lmsStatusCell isAdmin linkLmsUser) lu - , sortable (Just "last-notified") (i18nCell MsgTableQualificationLastNotified) $ \( view $ resultQualUser . _entityVal . _qualificationUserLastNotified -> d) -> dateTimeCell d + -- QualificationUserLastNotified is about notification on actual validity changes. If a user's licence is about to expire and renewed before expiry via e-learning, this value does not change. + -- NOTE: If this column is reinstatiated, header and tooltip were already updated to avoid any confusion! + -- , sortable (Just "last-notified") (i18nCell MsgTableQualificationLastNotified & cellTooltip MsgTableQualificationLastNotifiedTooltip) + -- $ \( view $ resultQualUser . _entityVal . _qualificationUserLastNotified -> d) -> dateTimeCell d ] psValidator = def & defaultSorting [SortDescBy "last-refresh"] tbl <- mkQualificationTable isAdmin qent acts colChoices psValidator diff --git a/templates/i18n/faq/campus-cant-login.de-de-formal.hamlet b/templates/i18n/faq/campus-cant-login.de-de-formal.hamlet index a516f2522..aff71f83a 100644 --- a/templates/i18n/faq/campus-cant-login.de-de-formal.hamlet +++ b/templates/i18n/faq/campus-cant-login.de-de-formal.hamlet @@ -8,19 +8,27 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later

Können sie sich mit exakt identischen (idealerweise # copy&paste) Daten # - im Campus-Portal # + im myapps.microsoft.com # anmelden? +
+ Falls sie die Fehlermeldung „Passwort abgelaufen“ oder "password-expired" erhalten, # + dann befolgen Sie bitte # + + diese Anleitung zum erneuern Ihres Passworts. +
Falls nicht („_{InvalidLogin}“), ist davon auszugehen, dass Sie # Ihre Anmeldedaten falsch eingeben oder # -
keine LMU-Benutzerkennung # - (ehem. Campus-Kennung) besitzen. + keine gültige Fraport AG # + Benutzerkennung besitzen. # + Rufen Sie in diesem Fall den allgemeinen Fraport IT-Helpdesk # + an unter +49-69-690127

- Beachten Sie dabei auch, dass Uni2work Leerzeichen sowohl im # - Passwort als auch bei der Kennung berücksichtigt. + Beachten Sie, dass Leerzeichen sowohl im # + Passwort als auch bei der Kennung berücksichtigt werden.
@@ -33,34 +41,27 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later aktiviertem JavaScript), dass Sie Ihr Passwort korrekt eingeben.

- Uni2work bietet zwei Login-Formulare. + Uni2work bietet mehrere Login-Formulare.
- Für die Anmeldung mit der LMU-Benutzerkennung (ehem. Campus-Kennung) # + Für die Anmeldung mit Ihren Fraport AG Konto # müssen Sie das Formular „_{MsgLDAPLoginTitle}“ verwenden.
- Geben Sie unter „_{MsgCampusIdent}“ ihre vollständige # - LMU-Benutzerkennung an. # - - Diese ist identisch mit ihrer @campus.lmu.de E-Mail # - Adresse. - +

- Falls Sie seit Ihrem letzten Login in Uni2work ihr Passwort geändert # + Falls Sie Ihr Passwort kürzlich geändert # haben, kann es sein, dass die Änderung des Passworts (noch) nicht # - korrekt propagiert wurde. + korrekt propagiert wurde. Warten Sie einfach ein paar Minuten oder # + versuchen Sie, Ihr altes Passwort zu verwenden. -
- - In diesem Fall können Sie versuchen Ihr Passwort erneut zu ändern.

Sobald Sie die obigen Hinweise befolgt haben, wenden Sie sich bitte # (erneut) über das Hilfe-Formular, oben rechts # - auf jeder Seite, an die Uni2work-Administration. + auf jeder Seite, an die FRADrive-Administration.
diff --git a/templates/i18n/faq/campus-cant-login.en-eu.hamlet b/templates/i18n/faq/campus-cant-login.en-eu.hamlet index 0159c44cc..99b621cdc 100644 --- a/templates/i18n/faq/campus-cant-login.en-eu.hamlet +++ b/templates/i18n/faq/campus-cant-login.en-eu.hamlet @@ -7,18 +7,29 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later

Can you log in to # - the Campus-Portal # + the myapps.microsoft.com # using the exact same (ideally copied & pasted) login data? +
+ If you received the error message „Passwort abgelaufen“ or "password-expired" # + then please follow # + + these instructions for password renewal. +
If you cannot (“_{InvalidLogin}”), this means that you are # entering your login data wrong or that you # -
do not have a LMU user ID # - (formerly Campus-ID). + + do not have a valid Fraport AG credentials. + +
+ + In this case please call the general Fraport IT-Servicedesk + at
+49-69-690127

- Please consider that for Uni2work both your user ID and password are # + Please consider that for FRADrive both your user ID and password are # sensitive to whitespace characters.
@@ -37,31 +48,22 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later password manager instead of typing it manually.

- Uni2work offers two login forms. + Furthermore, FRADrive offers several login forms.
- To log in using your LMU user ID (formerly Campus-ID) you need to # + To log in using your Fraport AG credentials you need to # use the form titled “_{MsgLDAPLoginTitle}”. -
- - Under “_{MsgCampusIdent}” please enter your entire LMU user ID, # - which is identical to your @campus.lmu.de email # - address. -

If you have changed your password since last you logged into # - Uni2work, it may be the case that your password change was not # - propagated properly. - -
- - If so, please try changing your password again. + FRADrive, it may be the case that your password change was not # + propagated properly. Please wait a few minutes and try again, + or try changing your password again.

Once you have followed the suggestions above, please contact a # - Uni2work-administrator using the Support form # + FRADrive-administrator using the Support form # (at the top right of every page).
@@ -73,4 +75,4 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later Never disclose your password to third parties! # - Not even to an Uni2work-administrator or the IT-Servicedesk! + Not even to a FRADrive-administrator or the IT-Servicedesk! diff --git a/templates/i18n/faq/course-correctors-tutors.de-de-formal.hamlet b/templates/i18n/faq/course-correctors-tutors.de-de-formal.hamlet deleted file mode 100644 index 0c68818a5..000000000 --- a/templates/i18n/faq/course-correctors-tutors.de-de-formal.hamlet +++ /dev/null @@ -1,10 +0,0 @@ -$newline never - -$# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Winnie Ros -$# -$# SPDX-License-Identifier: AGPL-3.0-or-later - -

- Ausbilder:innen und Korrektor:innen werden beim Anlegen oder Editieren des # - jeweiligen Kurses bzw. Übungsblattes angegeben. - diff --git a/templates/i18n/faq/course-correctors-tutors.en-eu.hamlet b/templates/i18n/faq/course-correctors-tutors.en-eu.hamlet deleted file mode 100644 index f4fe7f813..000000000 --- a/templates/i18n/faq/course-correctors-tutors.en-eu.hamlet +++ /dev/null @@ -1,9 +0,0 @@ -$newline never - -$# SPDX-FileCopyrightText: 2022 Gregor Kleen -$# -$# SPDX-License-Identifier: AGPL-3.0-or-later - -

- Instructors and correctors are assigned when creating or editing the # - respective course or exercise sheet. diff --git a/templates/i18n/faq/exam-points.de-de-formal.hamlet b/templates/i18n/faq/exam-points.de-de-formal.hamlet deleted file mode 100644 index 20895c634..000000000 --- a/templates/i18n/faq/exam-points.de-de-formal.hamlet +++ /dev/null @@ -1,14 +0,0 @@ -$newline never - -$# SPDX-FileCopyrightText: 2022 Gregor Kleen -$# -$# SPDX-License-Identifier: AGPL-3.0-or-later - - -

- Klausurpunkte werden in Uni2work pro Teilaufgabe verwaltet. - -

- Um Klausurleistungen als Punkte anzugeben (und optional automatisch # - eine Note daraus zu berechnen), müssen Sie mindestens eine # - Teilprüfung/Aufgabe anlegen. diff --git a/templates/i18n/faq/exam-points.en-eu.hamlet b/templates/i18n/faq/exam-points.en-eu.hamlet deleted file mode 100644 index d7a6d7e65..000000000 --- a/templates/i18n/faq/exam-points.en-eu.hamlet +++ /dev/null @@ -1,14 +0,0 @@ -$newline never - -$# SPDX-FileCopyrightText: 2022 Gregor Kleen -$# -$# SPDX-License-Identifier: AGPL-3.0-or-later - - -

- Exam points are managed in Uni2work on a per-exam-part basis. - -

- To store exam achievements in the form of points (and optionally # - automatically compute grades), you need to create at least one # - exam part/question. diff --git a/templates/i18n/faq/forgotten-password.de-de-formal.hamlet b/templates/i18n/faq/forgotten-password.de-de-formal.hamlet index a3fa6e009..44f0c970a 100644 --- a/templates/i18n/faq/forgotten-password.de-de-formal.hamlet +++ b/templates/i18n/faq/forgotten-password.de-de-formal.hamlet @@ -1,27 +1,16 @@ $newline never -$# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Winnie Ros +$# SPDX-FileCopyrightText: 2022-24 Gregor Kleen ,Winnie Ros ,Steffen Jost $# $# SPDX-License-Identifier: AGPL-3.0-or-later

- Wenn Sie sich gewöhnlicherweise mit Ihrer LMU-Benutzerkennug # - (ehem. Campus-Kennung) anmelden, wenden Sie sich bitte an # - den IT-Servicedesk # - um Ihr Passwort zurücksetzen zu lassen. + Wenn Sie Ihr Passwort vergessen haben, wenden Sie sich bitte an # + den allgemeinen Fraport IT-Helpdesk unter + + +49-69-690127 -

- Wenn Sie sich mit einer Uni2work-internen Kennung anmelden wenden # - Sie sich dafür bitte über das Hilfe-Formular # - (oben rechts auf jeder Seite) an die Uni2work-Administration.
- Tragen sie dabei unter „Antworten an“ die Adresse ein, an die # - Uni2work gewöhnlicherweise Mitteilungen verschickt. -
- Bitte geben Sie zusätzlich mind. eine nicht-öffentliche # - personenbezogene Information an, um den Administrator:innen zu helfen # - die Anfrage zu authorisieren. # - - Geeignet ist z.B. die Matrikelnummer oder der ungefähre Zeitpunkt # - des letzten Logins. + Die FRADrive Administratoren können bei Login Problemen leider # + nicht helfen, da diese keinen Zugriff auf Ihren Fraport AG Account haben. diff --git a/templates/i18n/faq/forgotten-password.en-eu.hamlet b/templates/i18n/faq/forgotten-password.en-eu.hamlet index a1814ad97..63fed8099 100644 --- a/templates/i18n/faq/forgotten-password.en-eu.hamlet +++ b/templates/i18n/faq/forgotten-password.en-eu.hamlet @@ -1,26 +1,17 @@ $newline never -$# SPDX-FileCopyrightText: 2022 Gregor Kleen +$# SPDX-FileCopyrightText: 2024 Gregor Kleen ,Steffen Jost $# $# SPDX-License-Identifier: AGPL-3.0-or-later

- If you usually log in using your LMU user ID (formerly Campus-ID) # - please contact # - the IT # - servicedesk (german) to reset your password. + If you have forgotten your password # + please contact the general Fraport IT-servicedesk at # + + +49-69-690127 + to reset your password. -

- If you log in using a Uni2work-internal account please use # - the Support form (at the top right of every # - page) to contact a Uni2work-administrator.
- Specify the email to which Uni2work usually sends notifications # - under “Send answers to”. -
- - Please also include at least one non-public piece of information to # - help authorise your request. # - We suggest your Matriculation number or the approximate time of your # - last successful login. + FRADrive administrators have no access to your Frapot AG account # + and thus cannot help you with this problem. diff --git a/templates/i18n/faq/invalid-credentials-ad-account-disabled.de-de-formal.hamlet b/templates/i18n/faq/invalid-credentials-ad-account-disabled.de-de-formal.hamlet deleted file mode 100644 index 404ce35ea..000000000 --- a/templates/i18n/faq/invalid-credentials-ad-account-disabled.de-de-formal.hamlet +++ /dev/null @@ -1,22 +0,0 @@ -$newline never - -$# SPDX-FileCopyrightText: 2022 Gregor Kleen -$# -$# SPDX-License-Identifier: AGPL-3.0-or-later - - -

- Gewöhnlicherweise wird Ihr Benutzereintrag gesperrt, wenn sie # - exmatrikuliert werden bzw. Ihr Beschäftigungsverhältnis endet. # - - Es kommt gelegentlich vor, dass Ihr Benutzereintrag nicht korrekt # - entsperrt wird, wenn Sie wieder immatrikuliert bzw. eingestellt # - werden. - -

- Falls Sie aktuell immatrikuliert bzw. eingestellt sind, oder Sie # - einen anderen triftigen Grund vorweisen können, warum Sie Zugang zu # - Uni2work brauchen, wenden Sie sich bitte über # - das Hilfe-Formular, oben rechts auf jeder # - Seite, an die Uni2work-Administration und schildern Sie Ihre # - Situation. diff --git a/templates/i18n/faq/invalid-credentials-ad-account-disabled.en-eu.hamlet b/templates/i18n/faq/invalid-credentials-ad-account-disabled.en-eu.hamlet deleted file mode 100644 index c14257f97..000000000 --- a/templates/i18n/faq/invalid-credentials-ad-account-disabled.en-eu.hamlet +++ /dev/null @@ -1,19 +0,0 @@ -$newline never - -$# SPDX-FileCopyrightText: 2022 Gregor Kleen -$# -$# SPDX-License-Identifier: AGPL-3.0-or-later - - -

- Usually your account is disabled once you are no longer matriculated # - (i.e. registered as a student) or employed. # - - Occasionally accounts are not correctly re-enabled once you are # - matriculated or employed, again. - -

- If you are currently matriculated, employed, or have another good # - reason why you should have access to Uni2work, please contact a # - Uni2work-Administrator using the Support form # - (at the top right of every page) and describe your situation. diff --git a/templates/i18n/faq/login-expired.de-de-formal.hamlet b/templates/i18n/faq/login-expired.de-de-formal.hamlet new file mode 100644 index 000000000..c1295a4b0 --- /dev/null +++ b/templates/i18n/faq/login-expired.de-de-formal.hamlet @@ -0,0 +1,47 @@ +$newline never + +$# SPDX-FileCopyrightText: 2024 Steffen Jost +$# +$# SPDX-License-Identifier: AGPL-3.0-or-later + + +

+ Der Zugang zu FRADrive erfolgt über Ihren Fraport AG Login. # + Das Passwort für Ihren Fraport AG Login muss alle 90 Tage geändert werden. # + Tun Sie dies nicht, so können Sie sich nicht mehr einloggen. # + Dies besagen die Richtlininen der Fraport AG IT Abteilung. + +

+ Bevor oder auch nachdem Ihr Passwort abgelaufen ist, # + können Sie das Passwort ganze leicht selbst mit einer # + der folgenden Methoden ändern: # + +

    +
  1. + Über # + + das Azure Portal + . +
  2. + Über Ihre # + + Microsoft Kontoseite + . Verwenden Sie dort die Funktion "Kennwort ändern". +
  3. + Über Ihre Profil-Einstellungen "Konto-Anzeigen" auf # + + Ihre Microsoft My-Apps Seite + . + +

    + + Hinweis: # + + Wenden Sie sich bei Problemen mit dem Passwortwechsel # + bitte direkt an den allgemeinen Fraport IT-Helpdesk unter # + + +49-69-690127 + +
    + Die FRADrive Administratoren können bei diesem Login Problem leider # + nicht helfen, da diese keinen Zugriff auf Ihren Fraport AG Account haben. diff --git a/templates/i18n/faq/login-expired.en-eu.hamlet b/templates/i18n/faq/login-expired.en-eu.hamlet new file mode 100644 index 000000000..9fa4d7786 --- /dev/null +++ b/templates/i18n/faq/login-expired.en-eu.hamlet @@ -0,0 +1,46 @@ +$newline never + +$# SPDX-FileCopyrightText: 2024 Steffen Jost +$# +$# SPDX-License-Identifier: AGPL-3.0-or-later + + +

    + Using FRADrive required a Fraport AG account. # + The password for your Fraport AG account must be changed every 90 days. # + Following the general IT safety guidelines of Fraport AG, # + your login will be temporarily disabled otherwise. + +

    + Regardless of whether your password has already expired or not, # + you may easily change your password with any one of the following methods: # + +

      +
    1. + Via # + + the azure portal + . +
    2. + Using you # + + Microsoft account page + , then using the function "change password" there. +
    3. + By accessing your profile settings on # + + your Microsoft My-Apps page + . + +

      + + Please note: # + + If you have any problem changing your password # + please call the general Fraport IT-servicedesk at # + + +49-69-690127 + +
      + FRADrive administrators have no access to your Frapot AG account # + and thus cannot help you with this problem. diff --git a/test/Database/Fill.hs b/test/Database/Fill.hs index ceda104d5..03145a685 100644 --- a/test/Database/Fill.hs +++ b/test/Database/Fill.hs @@ -693,12 +693,25 @@ fillDb = do , UserSupervisor gkleen gkleen True (Just fraGround) (Just "Staff") , UserSupervisor tinaTester tinaTester False Nothing (Just "Staff") ] - ++ take 444 [ UserSupervisor fhamann uid True Nothing (Just "Test") | Entity uid _ <- matUsers, uid /= jost] - ++ take 123 [ UserSupervisor gkleen uid True (Just fraGround) (Just "Test") | Entity uid _ <- drop 369 matUsers ] - ++ take 11 [ UserSupervisor jost uid False (Just fraportAg) (Just "Test") | Entity uid _ <- drop 501 matUsers ] - upsertManyWhere supvs [] [] [] - -- upsertManyWhere supvs [] [] [] -- NOTE: multiple calls like this are ok - -- insertMany_ supvs -- NOTE: multiple calls like this throw an error! + ++ take 444 [ UserSupervisor fhamann uid True Nothing (Just $ tshow SupervisorReasonCompanyDefault) | Entity uid _ <- matUsers, uid /= jost] + ++ take 123 [ UserSupervisor gkleen uid True Nothing Nothing | Entity uid _ <- drop 369 matUsers ] + ++ take 11 [ UserSupervisor jost uid False Nothing (Just $ tshow SupervisorReasonCompanyDefault) | Entity uid _ <- drop 501 matUsers ] + upsertManyWhere supvs [] [] [] + -- insertMany_ supvs -- NOTE: multiple calls like this throw a runtime error! + -- upsertManyWhere supvs [] [] [] -- NOTE: multiple calls like this are ok + -- upsertManyWhere (supvs ++ take 5 (drop 12 [ UserSupervisor jost uid False | Entity uid _ <- drop 501 matUsers ])) -- no duplicates within first argument allowed! (runtime error: ON CONFLICT DO UPDATE command cannot affect row a second time) + -- [copyField UserSupervisorRerouteNotifications] [UserSupervisorRerouteNotifications =. True] [UserSupervisorSupervisor ==. jost, UserSupervisorUser <-. [uid | Entity uid _ <- take 3 $ drop 504 matUsers ]] -- does not work! + -- let changeSome usr@(UserSupervisor s u _) + -- | s == jost, u `elem` take 14 [ uid | Entity uid _ <- drop 501 matUsers ] = UserSupervisor s u True + -- | otherwise = usr + -- upsertManyWhere (changeSome <$> (supvs ++ take 5 (drop 12 [ UserSupervisor jost uid False | Entity uid _ <- drop 501 matUsers ]))) -- no duplicates within first argument allowed! (runtime error: ON CONFLICT DO UPDATE command cannot affect row a second time) + -- [copyField UserSupervisorRerouteNotifications] [] [UserSupervisorSupervisor ==. jost, UserSupervisorUser <-. [uid | Entity uid _ <- take 3 $ drop 504 matUsers ]] -- probably does the same as the above + -- OBSERVATIONS: + -- - use the 2. argument with `copyField` to overwrite an existing field with the new record value provided in the 1. argument in case of an update + -- - use the 3. argument to update a field indepently from the provided records or for computations involving previous values, eg. +=. + -- - use the 4. argument to filter both the application of the 2. and 3. argument + + ifi <- insert' $ School "Institut für Informatik" "IfI" (Just $ 14 * nominalDay) (Just $ 10 * nominalDay) True (ExamModeDNF predDNFFalse) (ExamCloseOnFinished True) SchoolAuthorshipStatementModeOptional (Just ifiAuthorshipStatement) True SchoolAuthorshipStatementModeRequired (Just ifiAuthorshipStatement) False mi <- insert' $ School "Institut für Mathematik" "MI" Nothing Nothing False (ExamModeDNF predDNFFalse) (ExamCloseOnFinished False) SchoolAuthorshipStatementModeNone Nothing True SchoolAuthorshipStatementModeOptional Nothing True