diff --git a/yesod-form/ChangeLog.md b/yesod-form/ChangeLog.md index fdd3f56c5..58731e1c0 100644 --- a/yesod-form/ChangeLog.md +++ b/yesod-form/ChangeLog.md @@ -1,3 +1,7 @@ +## 1.4.10 + +* Fixed `identifyForm` to properly return `FormMissing` for empty forms. [#1072](https://github.com/yesodweb/yesod/issues/1072) + ## 1.4.9 * Added a `ToValue` instance for `Enctype` [#1296](https://github.com/yesodweb/yesod/pull/1296) diff --git a/yesod-form/Yesod/Form/Functions.hs b/yesod-form/Yesod/Form/Functions.hs index fc1e9903a..ed83624f0 100644 --- a/yesod-form/Yesod/Form/Functions.hs +++ b/yesod-form/Yesod/Form/Functions.hs @@ -62,7 +62,7 @@ import Yesod.Core import Yesod.Core.Handler (defaultCsrfParamName) import Network.Wai (requestMethod) import Text.Hamlet (shamlet) -import Data.Monoid (mempty) +import Data.Monoid (mempty, (<>)) import Data.Maybe (listToMaybe, fromMaybe) import qualified Data.Map as Map import qualified Data.Text.Encoding as TE @@ -336,13 +336,13 @@ identifyForm identVal form = \fragment -> do -- Create hidden . let fragment' = [shamlet| - + #{fragment} |] -- Check if we got its value back. mp <- askParams - let missing = (mp >>= Map.lookup identifyFormKey) /= Just [identVal] + let missing = (mp >>= Map.lookup identifyFormKey) /= Just ["identify-" <> identVal] -- Run the form proper (with our hidden ). If the -- data is missing, then do not provide any params to the @@ -350,7 +350,11 @@ identifyForm identVal form = \fragment -> do -- doing this avoids having lots of fields with red errors. let eraseParams | missing = local (\(_, h, l) -> (Nothing, h, l)) | otherwise = id - eraseParams (form fragment') + ( res', w) <- eraseParams (form fragment') + + -- Empty forms now properly return FormMissing. [#1072](https://github.com/yesodweb/yesod/issues/1072) + let res = if missing then FormMissing else res' + return ( res, w) identifyFormKey :: Text identifyFormKey = "_formid" diff --git a/yesod-form/yesod-form.cabal b/yesod-form/yesod-form.cabal index bd5296e6f..9f8a31de7 100644 --- a/yesod-form/yesod-form.cabal +++ b/yesod-form/yesod-form.cabal @@ -1,5 +1,5 @@ name: yesod-form -version: 1.4.9 +version: 1.4.10 license: MIT license-file: LICENSE author: Michael Snoyman