diff --git a/messages/uniworx/categories/admin/de-de-formal.msg b/messages/uniworx/categories/admin/de-de-formal.msg index 23228c525..5d0989696 100644 --- a/messages/uniworx/categories/admin/de-de-formal.msg +++ b/messages/uniworx/categories/admin/de-de-formal.msg @@ -101,7 +101,7 @@ ProblemsHeadingDrivers: Fahrberechtigungen ProblemsHeadingNotifications: Benachrichtigungen ProblemsHeadingMisc: Allgemein ProblemsAvsProblem: Synchronisation mit AVS/MoBaKo komplett fehlgeschlagen -ProblemsDriverSynch n@Int: #{pluralDEeN n "Diskrepanze"} zwischen AVS und FRADrive +ProblemsDriverSynch n@Int: #{n} #{pluralDE n "Diskrepanz" "Diskrepanzen"} zwischen AVS und FRADrive ProblemsDriverSynch0: Alle Sperrungen von Vorfeld-Fahrberechtigungen 'F' sind im AVS eingetragen ProblemsDriverSynch1down: Alle Sperrungen von Rollfeld-Fahrberechtigungen 'R' sind im AVS eingetragen ProblemsDriverSynch1up: Alle gültigen Vorfeld-Fahrberechtigungen 'F' sind im AVS eingetragen @@ -125,8 +125,8 @@ AdminProblemSolved: Erledigt AdminProblemSolver: Bearbeitet von AdminProblemCreated: Erkannt AdminProblemInfo: Problembeschreibung -AdminProblemsSolved n@Int: #{pluralDEeN n "Admin Probleme"} als erledigt markiert -AdminProblemsReopened n@Int: #{pluralDEeN n "Admin Probleme"} erneut eröffnet +AdminProblemsSolved n@Int: #{pluralDEeN n "Admin Problem"} als erledigt markiert +AdminProblemsReopened n@Int: #{pluralDEeN n "Admin Problem"} erneut eröffnet AdminProblemNewCompany: Neue Firma aus AVS automatisch erstellt; prüfen und ggf. Standardansprechpartner eintragen AdminProblemSupervisorNewCompany b@Bool: Dieser Standardansprechpartner #{boolText mempty "mit Standardumleitung" b} wechselte zu neuer Firma AdminProblemSupervisorLeftCompany b@Bool: Einziger Standardansprechpartner #{boolText mempty "mit Standardumleitung" b} dieses Fahrers wechselte zu neuer Firma diff --git a/messages/uniworx/categories/user/de-de-formal.msg b/messages/uniworx/categories/user/de-de-formal.msg index a6d97c2f3..470e7b2db 100644 --- a/messages/uniworx/categories/user/de-de-formal.msg +++ b/messages/uniworx/categories/user/de-de-formal.msg @@ -101,6 +101,8 @@ UserAvsSwitchCompanyField: Primärfirma auswählen UserAvsCompanySwitched c@CompanyShorthand: Primärfirma gewechselt zu #{tshow c} AllUsersLdapSync: Alle LDAP-Synchronisieren AllUsersAvsSync: Alle AVS-Synchronisieren +ThisUserLdapSync: LDAP Synchronisation +ThisUserAvsSync: AVS Synchronisation AuthKindLDAP: Fraport AG Kennung AuthKindPWHash: FRADrive Kennung AuthKindNoLogin: Kein Login möglich diff --git a/messages/uniworx/categories/user/en-eu.msg b/messages/uniworx/categories/user/en-eu.msg index af9193b03..11faa5471 100644 --- a/messages/uniworx/categories/user/en-eu.msg +++ b/messages/uniworx/categories/user/en-eu.msg @@ -101,6 +101,8 @@ UserAvsSwitchCompanyField: Select primary company UserAvsCompanySwitched c: Primary company switched to #{tshow c} AllUsersLdapSync: Synchronise all with LDAP AllUsersAvsSync: Synchronise all with AVS +ThisUserLdapSync: Synchronise user with LDAP +ThisUserAvsSync: Synchronise user with AVS AuthKindLDAP: Fraport AG account AuthKindPWHash: FRADrive account AuthKindNoLogin: No login diff --git a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg index f58a0818d..9087f1ca0 100644 --- a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg +++ b/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg @@ -151,5 +151,3 @@ BreadcrumbSubmissionAuthorshipStatements: Eigenständigkeitserklärungen BreadcrumbExternalApis: Externe APIs BreadcrumbApiDocs: API Dokumentation BreadcrumbSwagger !ident-ok: OpenAPI 2.0 (Swagger) -BreadcrumbSynchLdap !ident-ok: LDAP Synch -BreadcrumbSynchAvs !ident-ok: AVS Synch \ No newline at end of file diff --git a/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg b/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg index 31a3c5016..5763051d1 100644 --- a/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg +++ b/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg @@ -151,5 +151,3 @@ BreadcrumbSubmissionAuthorshipStatements: Statements of Authorship BreadcrumbExternalApis: External APIs BreadcrumbApiDocs: API documentation BreadcrumbSwagger: OpenAPI 2.0 (Swagger) -BreadcrumbSynchLdap: Synch LDAP -BreadcrumbSynchAvs: Synch AVS diff --git a/routes b/routes index 2224abd6f..c484282ac 100644 --- a/routes +++ b/routes @@ -55,8 +55,6 @@ /users/#CryptoUUIDUser AdminUserR GET POST /users/#CryptoUUIDUser/delete AdminUserDeleteR POST /users/#CryptoUUIDUser/hijack AdminHijackUserR GET POST !adminANDno-escalation -/users/#CryptoUUIDUser/sync/ldap AdminUserSyncLdapR GET -/users/#CryptoUUIDUser/sync/avs AdminUserSyncAvsR GET /users/#CryptoUUIDUser/notifications UserNotificationR GET POST !self /users/#CryptoUUIDUser/password UserPasswordR GET POST !selfANDis-pw-hash !/users/functionary-invite/new AdminNewFunctionaryInviteR GET POST diff --git a/src/Foundation/Navigation.hs b/src/Foundation/Navigation.hs index 3e97c43ee..b485a7018 100644 --- a/src/Foundation/Navigation.hs +++ b/src/Foundation/Navigation.hs @@ -88,8 +88,6 @@ breadcrumb (AdminUserR cID) = useRunDB . maybeT (i18nCrumb MsgBreadcrumbUser $ J User{..} <- MaybeT $ get uid return (userDisplayName, Just UsersR) breadcrumb (AdminUserDeleteR cID) = i18nCrumb MsgBreadcrumbUserDelete . Just $ AdminUserR cID -breadcrumb (AdminUserSyncLdapR cID) = i18nCrumb MsgBreadcrumbSynchLdap . Just $ AdminUserR cID -breadcrumb (AdminUserSyncAvsR cID) = i18nCrumb MsgBreadcrumbSynchAvs . Just $ AdminUserR cID breadcrumb (AdminHijackUserR cID) = i18nCrumb MsgBreadcrumbUserHijack . Just $ AdminUserR cID breadcrumb (UserNotificationR cID) = useRunDB $ do mayList <- hasReadAccessTo UsersR @@ -1228,14 +1226,6 @@ pageActions (AdminUserR cID) = return { navLink = defNavLink MsgMenuUserEdit $ ForProfileR cID , navChildren = [] } - , NavPageActionPrimary - { navLink = defNavLink MsgUserLdapSync $ AdminUserSyncLdapR cID - , navChildren = [] - } - , NavPageActionPrimary - { navLink = defNavLink MsgUserAvsSync $ AdminUserSyncAvsR cID - , navChildren = [] - } , NavPageActionPrimary { navLink = defNavLinkModal MsgUserHijack $ AdminHijackUserR cID , navChildren = [] @@ -1467,6 +1457,12 @@ pageActions (ForProfileR cID) = return , navChildren = [] } ] +pageActions (ForProfileDataR cID) = return + [ NavPageActionPrimary + { navLink = defNavLink MsgAdminUserHeading $ AdminUserR cID + , navChildren = [] + } + ] pageActions TermShowR = do participantsSecondary <- pageQuickActions NavQuickViewPageActionSecondary ParticipantsListR return diff --git a/src/Handler/Profile.hs b/src/Handler/Profile.hs index 0a0985a4e..fdc81305b 100644 --- a/src/Handler/Profile.hs +++ b/src/Handler/Profile.hs @@ -14,15 +14,12 @@ module Handler.Profile , getSetDisplayEmailR, postSetDisplayEmailR , getCsvOptionsR, postCsvOptionsR , postLangR - , getAdminUserSyncAvsR - , getAdminUserSyncLdapR ) where import Import import Handler.Utils import Handler.Utils.AvsUpdate -import Handler.Utils.Avs import Handler.Utils.Profile import Handler.Utils.Users import Handler.Utils.Company @@ -1262,18 +1259,3 @@ postLangR = do addMessage Success . toHtml $ mr MsgLanguageChanged redirect . fromMaybe NewsR =<< lookupGlobalGetParam GetReferer - - -getAdminUserSyncLdapR :: CryptoUUIDUser -> Handler Html -getAdminUserSyncLdapR uuid = do - uid <- decrypt uuid - queueJob' $ JobSynchroniseLdapUser uid - addMessageI Success $ MsgSynchroniseLdapUserQueued 1 - redirectUltDest $ AdminUserR uuid - -getAdminUserSyncAvsR :: CryptoUUIDUser -> Handler Html -getAdminUserSyncAvsR uuid = do - uid <- decrypt uuid - n <- runDB $ queueAvsUpdateByUID (Set.singleton uid) Nothing - addMessageI Success $ MsgSynchroniseAvsUserQueued $ fromIntegral n - redirectUltDest $ AdminUserR uuid diff --git a/src/Handler/Users.hs b/src/Handler/Users.hs index 04f06667c..eedad2369 100644 --- a/src/Handler/Users.hs +++ b/src/Handler/Users.hs @@ -406,7 +406,7 @@ postUsersR = do redirectKeepGetParams UsersR _other -> addMessageI Error MsgInvalidFormAction - ((allUsersRes, allUsersWgt), allUsersEnctype) <- runFormPost . identifyForm FIDAllUsersAction $ buttonForm + ((allUsersRes, allUsersWgt'), allUsersEnctype) <- runFormPost . identifyForm FIDAllUsersAction $ buttonForm formResult allUsersRes $ \case AllUsersLdapSync -> do @@ -434,7 +434,7 @@ postUsersR = do addMessageI Success $ MsgSynchroniseAvsAllUsersQueued n redirect UsersR - let allUsersWgt' = wrapForm allUsersWgt def + let allUsersWgt = wrapForm allUsersWgt' def { formSubmit = FormNoSubmit , formAction = Just $ SomeRoute UsersR , formEncoding = allUsersEnctype @@ -494,6 +494,15 @@ nullaryPathPiece ''UserAssimilateButton $ camelToPathPiece' 2 embedRenderMessage ''UniWorX ''UserAssimilateButton id +data ThisUserAction = ThisUserLdapSync | ThisUserAvsSync + deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic) + deriving anyclass (Universe, Finite) + +nullaryPathPiece ''ThisUserAction $ camelToPathPiece' 1 +embedRenderMessage ''UniWorX ''ThisUserAction id + +instance Button UniWorX ThisUserAction where + btnClasses _ = [BCIsButton, BCPrimary] getAdminUserR, postAdminUserR :: CryptoUUIDUser -> Handler Html @@ -501,6 +510,23 @@ getAdminUserR = postAdminUserR postAdminUserR uuid = do adminId <- requireAuthId uid <- decrypt uuid + + ((thisUserActRes, thisUserActWgt'), thisUserActEnctype) <- runFormPost . identifyForm FIDThisUserAction $ buttonForm + formResult thisUserActRes $ \case + ThisUserLdapSync -> do + queueJob' $ JobSynchroniseLdapUser uid + addMessageI Success $ MsgSynchroniseLdapUserQueued 1 + redirectKeepGetParams $ AdminUserR uuid + ThisUserAvsSync -> do + n <- runDB $ queueAvsUpdateByUID (Set.singleton uid) Nothing + addMessageI Success $ MsgSynchroniseAvsUserQueued $ fromIntegral n + redirectKeepGetParams $ AdminUserR uuid + let thisUserActWgt = wrapForm thisUserActWgt' def + { formSubmit = FormNoSubmit + , formAction = Just $ SomeRoute $ AdminUserR uuid + , formEncoding = thisUserActEnctype + } + (user@User{..}, adminSchools, functions, schools, systemFunctions) <- runDB $ do user <- get404 uid diff --git a/src/Utils/Form.hs b/src/Utils/Form.hs index 18c96c289..5f670eb02 100644 --- a/src/Utils/Form.hs +++ b/src/Utils/Form.hs @@ -302,6 +302,7 @@ data FormIdentifier | FIDAssignSubmissions | FIDUserAuthMode | FIDUserAssimilate | FIDUserRights | FIDUserAuthentication | FIDAllUsersAction + | FIDThisUserAction | FIDLanguage | FIDExamAutoOccurrenceCalculate | FIDExamAutoOccurrenceConfirm | FIDExamAutoOccurrenceNudge UUID | FIDExamAutoOccurrenceIgnoreRoom UUID | FIDTestDownload diff --git a/templates/adminUser.hamlet b/templates/adminUser.hamlet index 1f51996e0..dca82f0ff 100644 --- a/templates/adminUser.hamlet +++ b/templates/adminUser.hamlet @@ -4,6 +4,8 @@ $# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen J $# $# SPDX-License-Identifier: AGPL-3.0-or-later +
+ ^{thisUserActWgt}
^{userDataWidget}
diff --git a/templates/users.hamlet b/templates/users.hamlet index d4157b630..6f04fde69 100644 --- a/templates/users.hamlet +++ b/templates/users.hamlet @@ -5,6 +5,6 @@ $# $# SPDX-License-Identifier: AGPL-3.0-or-later
- ^{allUsersWgt'} + ^{allUsersWgt}
^{userList}