Course Edit compiles, but deletion/edit does not work yet. I think I need to separate Post/Get Handlers again.
This commit is contained in:
parent
b980bab1b1
commit
26efab4506
5
routes
5
routes
@ -12,7 +12,8 @@
|
|||||||
/term/edit TermEditR GET POST
|
/term/edit TermEditR GET POST
|
||||||
/term/#TermIdentifier/edit TermEditExistR GET
|
/term/#TermIdentifier/edit TermEditExistR GET
|
||||||
|
|
||||||
/course CourseShowR GET
|
/course/ CourseShowR GET
|
||||||
/course/edit CourseEditR GET POST
|
!/course/edit CourseEditR GET POST
|
||||||
|
!/course/#TermIdentifier CourseShowTermR GET
|
||||||
/course/#TermIdentifier/#Text/edit CourseEditExistR GET
|
/course/#TermIdentifier/#Text/edit CourseEditExistR GET
|
||||||
|
|
||||||
|
|||||||
@ -168,14 +168,16 @@ instance Yesod UniWorX where
|
|||||||
isAuthorized ProfileR _ = isAuthenticated
|
isAuthorized ProfileR _ = isAuthenticated
|
||||||
|
|
||||||
-- TODO: all?
|
-- TODO: all?
|
||||||
isAuthorized TermShowR _ = return Authorized
|
isAuthorized TermShowR _ = return Authorized
|
||||||
isAuthorized CourseShowR _ = return Authorized
|
isAuthorized CourseShowR _ = return Authorized
|
||||||
|
isAuthorized (CourseShowTermR _) _ = return Authorized
|
||||||
-- TODO: change to Assistants
|
-- TODO: change to Assistants
|
||||||
isAuthorized TermEditR _ = return Authorized
|
isAuthorized TermEditR _ = return Authorized
|
||||||
isAuthorized (TermEditExistR _) _ = return Authorized
|
isAuthorized (TermEditExistR _) _ = return Authorized
|
||||||
isAuthorized CourseEditR _ = return Authorized
|
isAuthorized CourseEditR _ = return Authorized
|
||||||
isAuthorized (CourseEditExistR _ _) _ = return Authorized
|
isAuthorized (CourseEditExistR _ _) _ = return Authorized
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- This function creates static content files in the static folder
|
-- This function creates static content files in the static folder
|
||||||
-- and names them based on a hash of their content. This allows
|
-- and names them based on a hash of their content. This allows
|
||||||
|
|||||||
@ -21,33 +21,37 @@ import Yesod.Colonnade
|
|||||||
|
|
||||||
|
|
||||||
getCourseShowR :: Handler TypedContent
|
getCourseShowR :: Handler TypedContent
|
||||||
getCourseShowR = do
|
getCourseShowR = redirect TermShowR
|
||||||
terms <- runDB $ selectList [] [Desc TermStart]
|
|
||||||
selectRep $ do
|
getCourseShowTermR :: TermIdentifier -> Handler Html
|
||||||
provideRep $ return $ toJSON terms
|
getCourseShowTermR tidini = do
|
||||||
provideRep $ do
|
(term,courses) <- runDB $ do
|
||||||
let colonnadeTerms = mconcat
|
term <- get $ TermKey tidini
|
||||||
[ headed "Kürzel" $ (\t -> let tn = termName t in do
|
courses <- selectList [CourseTermId ==. tidini] [Asc CourseShorthand]
|
||||||
adminLink <- handlerToWidget $ isAuthorized (TermEditExistR tn) False
|
return (term, courses)
|
||||||
[whamlet|
|
when (isNothing term) $ do
|
||||||
$if adminLink == Authorized
|
setMessage [shamlet| Semester #{termToText tidini} nicht gefunden. |]
|
||||||
<a href=@{TermEditExistR tn}>
|
redirect TermShowR
|
||||||
#{termToText tn}
|
let colonnadeTerms = mconcat
|
||||||
$else
|
[ headed "Kürzel" $ (\c ->
|
||||||
#{termToText tn}
|
let shd = courseShorthand c
|
||||||
|] )
|
tid = courseTermId c
|
||||||
, headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart
|
in do
|
||||||
, headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd
|
adminLink <- handlerToWidget $ isAuthorized (CourseEditExistR tid shd ) False
|
||||||
, headed "Aktiv" (\t -> if termActive t then tickmark else "")
|
[whamlet|
|
||||||
-- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "")
|
$if adminLink == Authorized
|
||||||
, headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart
|
<a href=@{CourseEditExistR tid shd}>
|
||||||
, headed "Semesterende" $ fromString.formatTimeGerWD.termEnd
|
#{shd}
|
||||||
, headed "Feiertage im Semester" $
|
$else
|
||||||
fromString.(intercalate ", ").(map formatTimeGerWD).termHolidays
|
#{shd}
|
||||||
]
|
|] )
|
||||||
defaultLayout $ do
|
-- , headed "Institut" $ [shamlet| #{course} |]
|
||||||
setTitle "Freigeschaltete Semester"
|
, headed "Beginn Anmeldung" $ fromString.(maybe "" formatTimeGerWD).courseRegisterFrom
|
||||||
encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms)
|
, headed "Ende Anmeldung" $ fromString.(maybe "" formatTimeGerWD).courseRegisterTo
|
||||||
|
]
|
||||||
|
defaultLayout $ do
|
||||||
|
setTitle "Semesterkurse"
|
||||||
|
encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal courses)
|
||||||
|
|
||||||
|
|
||||||
getCourseEditR :: Handler Html
|
getCourseEditR :: Handler Html
|
||||||
@ -69,6 +73,8 @@ courseEditHandler course = do
|
|||||||
aid <- requireAuthId
|
aid <- requireAuthId
|
||||||
((result, formWidget), formEnctype) <- runFormPost $ newCourseForm $ courseToForm <$> course
|
((result, formWidget), formEnctype) <- runFormPost $ newCourseForm $ courseToForm <$> course
|
||||||
action <- lookupPostParam "formaction"
|
action <- lookupPostParam "formaction"
|
||||||
|
liftIO $ putStrLn "================"
|
||||||
|
liftIO $ print (result,action)
|
||||||
case (result,action) of
|
case (result,action) of
|
||||||
(FormSuccess res, fAct)
|
(FormSuccess res, fAct)
|
||||||
| fAct == formActionDelete
|
| fAct == formActionDelete
|
||||||
@ -76,7 +82,7 @@ courseEditHandler course = do
|
|||||||
runDB $ delete cid -- TODO Sicherheitsabfrage einbauen!
|
runDB $ delete cid -- TODO Sicherheitsabfrage einbauen!
|
||||||
let cti = termToText $ cfTerm res
|
let cti = termToText $ cfTerm res
|
||||||
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde gelöscht! |]
|
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde gelöscht! |]
|
||||||
redirect CourseShowR
|
redirect $ CourseShowTermR $ cfTerm res
|
||||||
| fAct == formActionSave
|
| fAct == formActionSave
|
||||||
, Just cid <- cfCourseId res -> do
|
, Just cid <- cfCourseId res -> do
|
||||||
actTime <- liftIO getCurrentTime
|
actTime <- liftIO getCurrentTime
|
||||||
@ -94,6 +100,7 @@ courseEditHandler course = do
|
|||||||
]
|
]
|
||||||
let cti = termToText $ cfTerm res
|
let cti = termToText $ cfTerm res
|
||||||
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde geändert. |]
|
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde geändert. |]
|
||||||
|
redirect $ CourseShowTermR $ cfTerm res
|
||||||
| fAct == formActionSave
|
| fAct == formActionSave
|
||||||
, Nothing <- cfCourseId res -> do
|
, Nothing <- cfCourseId res -> do
|
||||||
actTime <- liftIO getCurrentTime
|
actTime <- liftIO getCurrentTime
|
||||||
@ -117,7 +124,7 @@ courseEditHandler course = do
|
|||||||
runDB $ insert_ $ Lecturer aid cid
|
runDB $ insert_ $ Lecturer aid cid
|
||||||
let cti = termToText $ cfTerm res
|
let cti = termToText $ cfTerm res
|
||||||
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde angelegt. |]
|
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde angelegt. |]
|
||||||
redirect CourseShowR
|
redirect $ CourseShowTermR $ cfTerm res
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
let cti = termToText $ cfTerm res
|
let cti = termToText $ cfTerm res
|
||||||
setMessage $ [shamlet|
|
setMessage $ [shamlet|
|
||||||
@ -127,7 +134,7 @@ courseEditHandler course = do
|
|||||||
(FormFailure _,_) -> setMessage "Bitte Eingabe korrigieren."
|
(FormFailure _,_) -> setMessage "Bitte Eingabe korrigieren."
|
||||||
_other -> return ()
|
_other -> return ()
|
||||||
let formTitle = "Kurs editieren/anlegen" :: Text
|
let formTitle = "Kurs editieren/anlegen" :: Text
|
||||||
let actionUrl = TermEditR
|
let actionUrl = CourseEditR
|
||||||
let formActions = defaultFormActions
|
let formActions = defaultFormActions
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle [shamlet| #{formTitle} |]
|
setTitle [shamlet| #{formTitle} |]
|
||||||
@ -146,7 +153,11 @@ data CourseForm = CourseForm
|
|||||||
, cfRegFrom :: Maybe UTCTime
|
, cfRegFrom :: Maybe UTCTime
|
||||||
, cfRegTo :: Maybe UTCTime
|
, cfRegTo :: Maybe UTCTime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
instance Show CourseForm where
|
||||||
|
show cf = T.unpack (cfShort cf) ++ ' ':(show $ cfCourseId cf)
|
||||||
|
|
||||||
|
|
||||||
courseToForm :: Entity Course -> CourseForm
|
courseToForm :: Entity Course -> CourseForm
|
||||||
courseToForm cEntity = CourseForm
|
courseToForm cEntity = CourseForm
|
||||||
{ cfCourseId = Just $ entityKey cEntity
|
{ cfCourseId = Just $ entityKey cEntity
|
||||||
@ -166,7 +177,7 @@ courseToForm cEntity = CourseForm
|
|||||||
newCourseForm :: Maybe CourseForm -> Form CourseForm
|
newCourseForm :: Maybe CourseForm -> Form CourseForm
|
||||||
newCourseForm template html = do
|
newCourseForm template html = do
|
||||||
(result, widget) <- flip (renderBootstrap3 bsHorizontalDefault) html $ CourseForm
|
(result, widget) <- flip (renderBootstrap3 bsHorizontalDefault) html $ CourseForm
|
||||||
<$> pure Nothing -- $ join (cfCourseId <$> template)
|
<$> pure cid -- $ join $ cfCourseId <$> template -- why doesnt this work?
|
||||||
<*> areq textField (set "Name") (cfName <$> template)
|
<*> areq textField (set "Name") (cfName <$> template)
|
||||||
<*> aopt htmlField (set "Beschreibung") (cfDesc <$> template)
|
<*> aopt htmlField (set "Beschreibung") (cfDesc <$> template)
|
||||||
<*> aopt urlField (set "Homepage") (cfLink <$> template)
|
<*> aopt urlField (set "Homepage") (cfLink <$> template)
|
||||||
@ -176,6 +187,9 @@ newCourseForm template html = do
|
|||||||
<*> aopt (natField "Kapazität") (set "Kapazität") (cfCapacity <$> template)
|
<*> aopt (natField "Kapazität") (set "Kapazität") (cfCapacity <$> template)
|
||||||
<*> aopt utcTimeField (set "Anmeldung von:") (cfRegFrom <$> template)
|
<*> aopt utcTimeField (set "Anmeldung von:") (cfRegFrom <$> template)
|
||||||
<*> aopt utcTimeField (set "Anmeldung bis:") (cfRegTo <$> template)
|
<*> aopt utcTimeField (set "Anmeldung bis:") (cfRegTo <$> template)
|
||||||
|
-- <* bootstrapSubmit (bsSubmit (show cid))
|
||||||
|
liftIO $ putStrLn "++++++++++"
|
||||||
|
liftIO $ print cid
|
||||||
return $ case result of
|
return $ case result of
|
||||||
FormSuccess courseResult
|
FormSuccess courseResult
|
||||||
| errorMsgs <- validateCourse courseResult
|
| errorMsgs <- validateCourse courseResult
|
||||||
@ -192,6 +206,9 @@ newCourseForm template html = do
|
|||||||
)
|
)
|
||||||
_ -> (result, widget)
|
_ -> (result, widget)
|
||||||
where
|
where
|
||||||
|
cid :: Maybe CourseId
|
||||||
|
cid = join $ cfCourseId <$> template
|
||||||
|
|
||||||
set :: Text -> FieldSettings site
|
set :: Text -> FieldSettings site
|
||||||
set = bfs
|
set = bfs
|
||||||
|
|
||||||
|
|||||||
@ -38,6 +38,12 @@ getTermShowR = do
|
|||||||
, headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd
|
, headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd
|
||||||
, headed "Aktiv" (\t -> if termActive t then tickmark else "")
|
, headed "Aktiv" (\t -> if termActive t then tickmark else "")
|
||||||
-- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "")
|
-- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "")
|
||||||
|
, headed "Kursliste" $ (\t -> let tn = termName t in do
|
||||||
|
numCourses <- handlerToWidget $ runDB $ count [CourseTermId ==. tn ]
|
||||||
|
[whamlet|
|
||||||
|
<a href=@{CourseShowTermR tn}>
|
||||||
|
#{show numCourses} Kurse
|
||||||
|
|] )
|
||||||
, headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart
|
, headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart
|
||||||
, headed "Semesterende" $ fromString.formatTimeGerWD.termEnd
|
, headed "Semesterende" $ fromString.formatTimeGerWD.termEnd
|
||||||
, headed "Feiertage im Semester" $
|
, headed "Feiertage im Semester" $
|
||||||
|
|||||||
Reference in New Issue
Block a user