{-# OPTIONS_GHC -fno-warn-orphans #-} module Handler.Users where import Import import Jobs -- import Data.Text import Handler.Utils import Handler.Utils.Tokens import Handler.Utils.Users import Handler.Utils.Invitations import qualified Auth.LDAP as Auth import qualified Data.CaseInsensitive as CI import qualified Data.Set as Set import qualified Data.Map as Map import qualified Database.Esqueleto as E import qualified Database.Esqueleto.Utils as E import Handler.Profile (makeProfileData) import qualified Yesod.Auth.Util.PasswordStore as PWStore import qualified Data.ByteString.Base64 as Base64 import Text.Hamlet (ihamlet) import Data.Aeson hiding (Result(..)) hijackUserForm :: CryptoUUIDUser -> Form () hijackUserForm cID csrf = do (uidResult, uidView) <- mforced hiddenField "" (cID :: CryptoUUIDUser) (btnResult, btnView) <- mreq (buttonField BtnHijack) "" Nothing return (() <$ uidResult <* btnResult, mconcat [toWidget csrf, fvInput uidView, fvInput btnView]) -- In case of refactoring, use this: -- instance HasEntity (DBRow (Entity User)) User where -- hasEntity = _dbrOutput -- instance HasUser (DBRow (Entity USer)) where -- hasUser = _entityVal getUsersR :: Handler Html getUsersR = do let dbtColonnade = dbColonnade . mconcat $ [ dbRow , sortable (Just "name") (i18nCell MsgName) $ \DBRow{ dbrOutput = Entity uid User{..} } -> anchorCellM (AdminUserR <$> encrypt uid) (nameWidget userDisplayName userSurname) , sortable (Just "matriculation") (i18nCell MsgMatrikelNr) $ \DBRow{ dbrOutput = Entity uid User{..} } -> anchorCellM (AdminUserR <$> encrypt uid) (toWgt userMatrikelnummer) -- , sortable (Just "last-name") (i18nCell MsgName) $ \DBRow{ dbrOutput = Entity uid User{..} } -> anchorCellM -- (AdminUserR <$> encrypt uid) -- (toWidget . display $ last $ impureNonNull $ words $ userDisplayName) , sortable (Just "auth-ldap") (i18nCell MsgAuthMode) $ \DBRow{ dbrOutput = Entity _ User{..} } -> i18nCell userAuthentication , flip foldMap universeF $ \function -> sortable Nothing (i18nCell function) $ \DBRow{ dbrOutput = Entity uid _ } -> flip (set' cellContents) mempty $ do schools <- lift . 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 E.&&. userFunction E.^. UserFunctionFunction E.==. E.val function E.orderBy [E.asc $ school E.^. SchoolShorthand] return $ school E.^. SchoolShorthand return [whamlet| $newline never