diff --git a/src/Handler/Term.hs b/src/Handler/Term.hs
index 44183fbca..c4ec50ffd 100644
--- a/src/Handler/Term.hs
+++ b/src/Handler/Term.hs
@@ -4,6 +4,8 @@
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE FlexibleContexts #-}
+
module Handler.Term where
import Import
@@ -65,26 +67,22 @@ getEditTermMaybeR :: Maybe Term -> Handler Html
getEditTermMaybeR mbTerm= do
aid <- requireAuthId
(formWidget, formEnctype) <- generateFormPost $ newTermForm mbTerm
- let formtitle = "Semester editieren/anlegen" :: Text
- let actionurl = EditTermR
- defaultLayout $ do
- setTitle [shamlet| #{formtitle} |]
- $(widgetFile "generic_form_delete")
-
+ wdgtTermForm formWidget formEnctype
postEditTermR :: Handler Html
postEditTermR = do
aid <- requireAuthId
((result, formWidget), formEnctype) <- runFormPost $ newTermForm Nothing
- action <- lookupPostParam "action"
+ action <- lookupPostParam "formaction"
case (result,action) of
- (FormSuccess res, Just "delete") -> do
+ (FormSuccess res, fAct)
+ | fAct == formActionDelete -> do
runDB $ delete (TermKey $ termName res)
let tid = termToText $ termName res
let msg = "Semester " `T.append` tid `T.append` " erfolgreich gelöscht."
setMessage [shamlet| #{msg} |]
redirect ShowTermsR
- (FormSuccess res, Just "save") -> do
+ | fAct == formActionSave -> do
-- term <- runDB $ get $ TermKey termName
runDB $ repsert (TermKey $ termName res) res
let tid = termToText $ termName res
@@ -100,15 +98,10 @@ postEditTermR = do
Ende des Semesters liegt vor dem Start!
|]
redirect ShowTermsR
- (FormSuccess res, _) ->
- redirect ShowTermsR
+ | otherwise -> redirect ShowTermsR
(FormMissing,_) -> do
setMessage "Keine Formulardaten erhalten."
- let formtitle = "Semester editieren/anlegen" :: Text
- let actionurl = EditTermR
- defaultLayout $ do
- setTitle [shamlet| #{formtitle} |]
- $(widgetFile "generic_form_delete")
+ wdgtTermForm formWidget formEnctype
(FormFailure errorMsgs,_) -> do
setMessage [shamlet|
@@ -117,12 +110,17 @@ postEditTermR = do
$forall errmsg <- errorMsgs
#{errmsg}
|]
- let formtitle = "Semester editieren/anlegen" :: Text
- let actionurl = EditTermR
- defaultLayout $ do
- setTitle [shamlet| #{formtitle} |]
- $(widgetFile "generic_form_delete")
-
+ wdgtTermForm formWidget formEnctype
+
+wdgtTermForm :: (ToWidget UniWorX a) => a -> Enctype -> Handler Html
+wdgtTermForm formWidget formEnctype = do
+ let formTitle = "Semester editieren/anlegen" :: Text
+ let actionUrl = EditTermR
+ let formActions = defaultFormActions
+ defaultLayout $ do
+ setTitle [shamlet| #{formTitle} |]
+ $(widgetFile "generic_form")
+
newTermForm :: Maybe Term -> Form Term
newTermForm template =
renderBootstrap3 bsHorizontalDefault $ Term
diff --git a/src/Handler/Utils.hs b/src/Handler/Utils.hs
index dbb5c9430..9d39c556f 100644
--- a/src/Handler/Utils.hs
+++ b/src/Handler/Utils.hs
@@ -7,4 +7,5 @@ module Handler.Utils
import Handler.Utils.DateTime as Handler.Utils
import Handler.Utils.Term as Handler.Utils
import Handler.Utils.Bootstrap3 as Handler.Utils
+import Handler.Utils.Form as Handler.Utils
diff --git a/src/Handler/Utils/Form.hs b/src/Handler/Utils/Form.hs
new file mode 100644
index 000000000..136b87f22
--- /dev/null
+++ b/src/Handler/Utils/Form.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeFamilies #-}
+
+module Handler.Utils.Form where
+
+import Import
+import Data.String (IsString(..))
+-- import Yesod.Core
+-- import qualified Data.Text as T
+-- import Yesod.Form.Types
+-- import Yesod.Form.Functions
+
+formBtnSave :: (Text,Text,Text)
+formBtnSave = ("save" ,"Speichern" ,"btn-primary")
+
+formBtnAbort :: (Text,Text,Text)
+formBtnAbort = ("abort" ,"Abbrechen" ,"btn-default")
+
+formBtnDelete ::(Text,Text,Text)
+formBtnDelete = ("delete","Löschen" ,"btn-warning")
+
+formActionSave :: Maybe Text
+formActionSave = Just $ fst3 formBtnSave
+
+formActionAbort :: Maybe Text
+formActionAbort = Just $ fst3 formBtnAbort
+
+formActionDelete :: Maybe Text
+formActionDelete = Just $ fst3 formBtnDelete
+
+defaultFormActions :: [(Text,Text,Text)]
+defaultFormActions = [ formBtnDelete
+ , formBtnAbort
+ , formBtnSave
+ ]
diff --git a/templates/generic_form.hamlet b/templates/generic_form.hamlet
index c0a6037f6..0c4432f83 100644
--- a/templates/generic_form.hamlet
+++ b/templates/generic_form.hamlet
@@ -4,10 +4,13 @@
- #{formtitle}
+ #{formTitle}