packages feed

happstack-6.0.0: templates/project/src/Pages/PostEntry.hs

module Pages.PostEntry (postEntryPage) where

import Control.Monad.Trans (liftIO)
import Happstack.Server    (Method(POST), ServerPart, Response, look, methodM, seeOther, toResponse)
import Happstack.State     (update)
import State.GuestBook     (AddGuestBookEntry(..))
import System.Time         (getClockTime)
import Types.GuestBook     (GuestBookEntry(..))

postEntryPage :: ServerPart Response
postEntryPage =
    do methodM POST -- only accept a post method
       author  <- look "author"  -- `mplus` (error "GuestBookEntry, need author")
       message <- look "message" --  `mplus` (error "GuesBookEntry, need message")
       email   <- look "email"   -- `mplus` (error "GuestBookEntry: need email")
       now <- liftIO getClockTime
       let entry = GuestBookEntry { author  = (if null author then "Anonymous" else author) 
                                  , message = message 
                                  , date    = now 
                                  , email   = email
                                  }
       update $ AddGuestBookEntry entry
       seeOther "/guestbook" (toResponse "/guestbook")