diff --git a/src/Handler/Users.hs b/src/Handler/Users.hs index 605b49f3d..29f3d71f3 100644 --- a/src/Handler/Users.hs +++ b/src/Handler/Users.hs @@ -132,7 +132,7 @@ postUsersR = do , sortable (Just "auth-ldap") (i18nCell MsgAuthMode) $ \DBRow{ dbrOutput = Entity _ User{..} } -> i18nCell userAuthentication , sortable (Just "ldap-sync") (i18nCell MsgLdapSynced) $ \DBRow{ dbrOutput = Entity _ User{..} } -> maybe mempty dateTimeCell userLastLdapSynchronisation , flip foldMap universeF $ \function -> - sortable Nothing (i18nCell function) $ \DBRow{ dbrOutput = Entity uid _ } -> flip (set' cellContents) mempty $ do + sortable (Just $ SortingKey $ CI.mk $ toPathPiece function) (i18nCell function) $ \DBRow{ dbrOutput = Entity uid _ } -> flip (set' cellContents) mempty $ do schools <- liftHandler . runDB . E.select . E.from $ \(school `E.InnerJoin` userFunction) -> do E.on $ school E.^. SchoolId E.==. userFunction E.^. UserFunctionSchool E.where_ $ userFunction E.^. UserFunctionUser E.==. E.val uid @@ -145,7 +145,7 @@ postUsersR = do $forall (E.Value sh) <- schools
  • #{sh} |] - , sortable Nothing (i18nCell MsgUserSystemFunctions) $ \DBRow{ dbrOutput = Entity uid _ } -> + , sortable (Just "system-function") (i18nCell MsgUserSystemFunctions) $ \DBRow{ dbrOutput = Entity uid _ } -> let getFunctions = fmap (map $ userSystemFunctionFunction . entityVal) . liftHandler . runDB $ selectList [ UserSystemFunctionUser ==. uid, UserSystemFunctionIsOptOut ==. False ] [ Asc UserSystemFunctionFunction ] in listCell' getFunctions i18nCell , sortable Nothing (mempty & cellAttrs <>~ pure ("hide-columns--hider-label", mr MsgTableActionsHead)) $ \inp@DBRow{ dbrOutput = Entity uid _ } -> FormCell @@ -201,7 +201,14 @@ postUsersR = do , dbtRowKey = (E.^. UserId) , dbtColonnade , dbtProj = dbtProjId - , dbtSorting = Map.fromList + , dbtSorting = Map.fromList $ + [ ( SortingKey $ CI.mk $ toPathPiece function + , SortColumn $ \user -> E.subSelect $ E.from $ \uf -> do + E.where_ $ uf E.^. UserFunctionUser E.==. user E.^. UserId + E.&&. uf E.^. UserFunctionFunction E.==. E.val function + return (uf E.^. UserFunctionSchool) + ) | function <- universeF + ] ++ [ ( "name" , SortColumn $ \user -> user E.^. UserSurname ) @@ -234,6 +241,11 @@ postUsersR = do E.orderBy [E.asc (usrSpvr E.^. UserDisplayName)] return (usrSpvr E.^. UserDisplayName) ) + , ( "system-function" + , SortColumn $ \user -> E.subSelect $ E.from $ \usf -> do + E.where_ $ usf E.^. UserSystemFunctionUser E.==. user E.^. UserId + return $ usf E.^. UserSystemFunctionFunction + ) ] , dbtFilter = Map.fromList -- OverloadedLists does not work with the templates [ ( "user-search", FilterColumn $ \user (criteria :: Set.Set Text) -> diff --git a/src/Jobs.hs b/src/Jobs.hs index ae2000aa9..7dcc4d81a 100644 --- a/src/Jobs.hs +++ b/src/Jobs.hs @@ -246,10 +246,11 @@ manageJobPool foundation@UniWorX{..} unmask = shutdownOnException $ \routeExc -> { jobWorkers = jobWorkers oldState `Map.withoutKeys` Map.keysSet deadWorkers } guard . not $ Map.null deadWorkers - return . forM_ (Map.toList deadWorkers) $ \(jobAsync, result) -> do - case result of - Right () -> $logInfoS "JobPoolManager" [st|Job-Executor #{showWorkerId (jobWorkerName oldState jobAsync)} terminated|] - Left e -> $logErrorS "JobPoolManager" [st|Job-Executer #{showWorkerId (jobWorkerName oldState jobAsync)} crashed: #{tshow e}|] + return . forM_ (Map.toList deadWorkers) $ \(jobAsync, _result) -> do + -- TOO MUCH LOGGING + -- case result of + -- Right () -> $logInfoS "JobPoolManager" [st|Job-Executor #{showWorkerId (jobWorkerName oldState jobAsync)} terminated|] + -- Left e -> $logErrorS "JobPoolManager" [st|Job-Executer #{showWorkerId (jobWorkerName oldState jobAsync)} crashed: #{tshow e}|] void . lift . allocateLinkedAsync $ let go = do next <- evalRandTIO . mapRandT (liftIO . atomically) . runMaybeT $ do