Allow setting name when sending help request without account

This commit is contained in:
Gregor Kleen 2018-11-09 13:57:11 +01:00
parent 77dcc02b9c
commit 1d69bd8d07
8 changed files with 48 additions and 16 deletions

View File

@ -245,7 +245,7 @@ instance RenderMessage UniWorX HelpIdentOptions where
data HelpForm = HelpForm
{ hfReferer:: Maybe Text
, hfUserId :: Either (Maybe Email) UserId
, hfUserId :: Either (Maybe Address) UserId
, hfRequest:: Text
}
@ -256,13 +256,13 @@ helpForm mReferer mUid = HelpForm
<*> (unTextarea <$> areq textareaField (fslI MsgHelpRequest) Nothing)
<* submitButton
where
identActions :: Map _ (AForm _ (Either (Maybe Email) UserId))
identActions :: Map _ (AForm _ (Either (Maybe Address) UserId))
identActions = Map.fromList $ case mUid of
(Just uid) -> (HIUser, pure $ Right uid):defaultActions
Nothing -> defaultActions
defaultActions =
[ (HIEmail, Left . Just <$> apreq emailField (fslI MsgEMail) Nothing)
[ (HIEmail, Left . Just <$> (Address <$> aopt textField (fslI MsgName) Nothing <*> apreq emailField (fslI MsgEMail) Nothing))
, (HIAnonymous, pure $ Left Nothing)
]

View File

@ -42,6 +42,8 @@ import Control.Monad.Morph as Import (MFunctor(..))
import Control.Monad.Trans.Resource as Import (ReleaseKey)
import Network.Mail.Mime.Instances as Import ()
import Control.Monad.Trans.RWS (RWST)

View File

@ -14,7 +14,7 @@ import Utils.Lens
import Data.Bitraversable
dispatchJobHelpRequest :: Either (Maybe Email) UserId
dispatchJobHelpRequest :: Either (Maybe Address) UserId
-> UTCTime
-> Text -- ^ Help Request
-> Maybe Text -- ^ Referer
@ -22,9 +22,10 @@ dispatchJobHelpRequest :: Either (Maybe Email) UserId
dispatchJobHelpRequest jSender jRequestTime jHelpRequest jReferer = do
supportAddress <- getsYesod $ appMailSupport . appSettings
userInfo <- bitraverse return (runDB . getEntity) jSender
let userAddress = either (fmap $ Address Nothing)
(fmap $ \(Entity _ User{..}) -> Address (Just userDisplayName) (CI.original userEmail))
userInfo
let userAddress = either
id
(fmap $ \(Entity _ User{..}) -> Address (Just userDisplayName) (CI.original userEmail))
userInfo
mailT def $ do
_mailTo .= [supportAddress]
whenIsJust userAddress $ addMailHeader "Reply-To" . renderAddress

View File

@ -15,7 +15,7 @@ import Data.List.NonEmpty (NonEmpty)
data Job = JobSendNotification { jRecipient :: UserId, jNotification :: Notification }
| JobSendTestEmail { jEmail :: Email, jMailContext :: MailContext }
| JobQueueNotification { jNotification :: Notification }
| JobHelpRequest { jSender :: Either (Maybe Email) UserId
| JobHelpRequest { jSender :: Either (Maybe Address) UserId
, jRequestTime :: UTCTime
, jHelpRequest :: Text, jReferer :: Maybe Text }
| JobSetLogSettings { jInstance :: InstanceId, jLogSettings :: LogSettings }

View File

@ -0,0 +1,25 @@
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Network.Mail.Mime.Instances
(
) where
import ClassyPrelude
import Network.Mail.Mime
import Data.Hashable (Hashable)
import Data.Aeson
import Data.Aeson.TH
import Utils.PathPiece
deriving instance Read Address
deriving instance Ord Address
deriving instance Generic Address
instance Hashable Address
deriveJSON defaultOptions
{ fieldLabelModifier = intercalate "-" . map toLower . drop 1 . splitCamel
} ''Address

View File

@ -49,6 +49,7 @@ import qualified Network.HaskellNet.Auth as HaskellNet (UserName, Password, Auth
import qualified Network.Socket as HaskellNet (PortNumber(..), HostName)
import Network.Mail.Mime (Address)
import Network.Mail.Mime.Instances ()
import Mail (VerpMode)
@ -255,12 +256,6 @@ deriveFromJSON
}
''SmtpAuthConf
deriveFromJSON
defaultOptions
{ fieldLabelModifier = intercalate "-" . map toLower . drop 1 . splitCamel
}
''Address
instance FromJSON AppSettings where
parseJSON = withObject "AppSettings" $ \o -> do

View File

@ -6,9 +6,12 @@ $newline never
<body>
<dl>
$case userInfo
$of Left (Just email)
$of Left (Just Address{..})
$maybe name <- addressName
<dt>Name
<dd>#{name}
<dt>E-Mail
<dd>#{email}
<dd>#{addressEmail}
$of Left Nothing
$of Right Nothing
<dt>Ungültige UserId erhalten!

View File

@ -30,6 +30,12 @@
}
}
.form-group--optional {
.form-group__label::after {
content: '';
}
}
.form-group--submit .form-group__input {
grid-column: 2;
}