From bd67a840ef9a7423c2ddb0fdf4779dc1119e2478 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Fri, 10 Jun 2011 09:09:07 +0300 Subject: [PATCH] setUltDestReferer --- Yesod/Handler.hs | 19 +++++++++++++++++++ yesod-core.cabal | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Yesod/Handler.hs b/Yesod/Handler.hs index 89c7db68..9d3aa160 100644 --- a/Yesod/Handler.hs +++ b/Yesod/Handler.hs @@ -79,7 +79,9 @@ module Yesod.Handler -- ** Ultimate destination , setUltDest , setUltDestString + , setUltDestText , setUltDest' + , setUltDestReferer , redirectUltDest , clearUltDest -- ** Messages @@ -466,8 +468,12 @@ setUltDest dest = do setUltDestString $ render dest -- | Same as 'setUltDest', but use the given string. +setUltDestText :: Monad mo => Text -> GGHandler sub master mo () +setUltDestText = setSession ultDestKey + setUltDestString :: Monad mo => Text -> GGHandler sub master mo () setUltDestString = setSession ultDestKey +{-# DEPRECATED setUltDestString "Use setUltDestText instead" #-} -- | Same as 'setUltDest', but uses the current page. -- @@ -484,6 +490,19 @@ setUltDest' = do render <- getUrlRenderParams setUltDestString $ render (tm r) gets' +-- | Sets the ultimate destination to the referer request header, if present. +-- +-- This function will not overwrite an existing ultdest. +setUltDestReferer :: Monad mo => GGHandler sub master mo () +setUltDestReferer = do + mdest <- lookupSession ultDestKey + maybe + (waiRequest >>= maybe (return ()) setUltDestBS . lookup "referer" . W.requestHeaders) + (const $ return ()) + mdest + where + setUltDestBS = setUltDestText . T.pack . S8.unpack + -- | Redirect to the ultimate destination in the user's session. Clear the -- value from the session. -- diff --git a/yesod-core.cabal b/yesod-core.cabal index 02367e98..7e0d7b73 100644 --- a/yesod-core.cabal +++ b/yesod-core.cabal @@ -1,5 +1,5 @@ name: yesod-core -version: 0.8.2 +version: 0.8.3 license: BSD3 license-file: LICENSE author: Michael Snoyman