diff --git a/routes b/routes
index 143f36075..f7229c577 100644
--- a/routes
+++ b/routes
@@ -12,7 +12,8 @@
/term/edit TermEditR GET POST
/term/#TermIdentifier/edit TermEditExistR GET
-/course CourseShowR GET
-/course/edit CourseEditR GET POST
+/course/ CourseShowR GET
+!/course/edit CourseEditR GET POST
+!/course/#TermIdentifier CourseShowTermR GET
/course/#TermIdentifier/#Text/edit CourseEditExistR GET
diff --git a/src/Foundation.hs b/src/Foundation.hs
index 74d78907b..3b734eb4e 100644
--- a/src/Foundation.hs
+++ b/src/Foundation.hs
@@ -168,14 +168,16 @@ instance Yesod UniWorX where
isAuthorized ProfileR _ = isAuthenticated
-- TODO: all?
- isAuthorized TermShowR _ = return Authorized
+ isAuthorized TermShowR _ = return Authorized
isAuthorized CourseShowR _ = return Authorized
+ isAuthorized (CourseShowTermR _) _ = return Authorized
-- TODO: change to Assistants
- isAuthorized TermEditR _ = return Authorized
- isAuthorized (TermEditExistR _) _ = return Authorized
- isAuthorized CourseEditR _ = return Authorized
+ isAuthorized TermEditR _ = return Authorized
+ isAuthorized (TermEditExistR _) _ = return Authorized
+ isAuthorized CourseEditR _ = return Authorized
isAuthorized (CourseEditExistR _ _) _ = return Authorized
+
-- This function creates static content files in the static folder
-- and names them based on a hash of their content. This allows
diff --git a/src/Handler/Course.hs b/src/Handler/Course.hs
index 9ea804b84..e674b4185 100644
--- a/src/Handler/Course.hs
+++ b/src/Handler/Course.hs
@@ -21,33 +21,37 @@ import Yesod.Colonnade
getCourseShowR :: Handler TypedContent
-getCourseShowR = do
- terms <- runDB $ selectList [] [Desc TermStart]
- selectRep $ do
- provideRep $ return $ toJSON terms
- provideRep $ do
- let colonnadeTerms = mconcat
- [ headed "Kürzel" $ (\t -> let tn = termName t in do
- adminLink <- handlerToWidget $ isAuthorized (TermEditExistR tn) False
- [whamlet|
- $if adminLink == Authorized
-
- #{termToText tn}
- $else
- #{termToText tn}
- |] )
- , headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart
- , headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd
- , headed "Aktiv" (\t -> if termActive t then tickmark else "")
- -- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "")
- , headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart
- , headed "Semesterende" $ fromString.formatTimeGerWD.termEnd
- , headed "Feiertage im Semester" $
- fromString.(intercalate ", ").(map formatTimeGerWD).termHolidays
- ]
- defaultLayout $ do
- setTitle "Freigeschaltete Semester"
- encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms)
+getCourseShowR = redirect TermShowR
+
+getCourseShowTermR :: TermIdentifier -> Handler Html
+getCourseShowTermR tidini = do
+ (term,courses) <- runDB $ do
+ term <- get $ TermKey tidini
+ courses <- selectList [CourseTermId ==. tidini] [Asc CourseShorthand]
+ return (term, courses)
+ when (isNothing term) $ do
+ setMessage [shamlet| Semester #{termToText tidini} nicht gefunden. |]
+ redirect TermShowR
+ let colonnadeTerms = mconcat
+ [ headed "Kürzel" $ (\c ->
+ let shd = courseShorthand c
+ tid = courseTermId c
+ in do
+ adminLink <- handlerToWidget $ isAuthorized (CourseEditExistR tid shd ) False
+ [whamlet|
+ $if adminLink == Authorized
+
+ #{shd}
+ $else
+ #{shd}
+ |] )
+-- , headed "Institut" $ [shamlet| #{course} |]
+ , headed "Beginn Anmeldung" $ fromString.(maybe "" formatTimeGerWD).courseRegisterFrom
+ , headed "Ende Anmeldung" $ fromString.(maybe "" formatTimeGerWD).courseRegisterTo
+ ]
+ defaultLayout $ do
+ setTitle "Semesterkurse"
+ encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal courses)
getCourseEditR :: Handler Html
@@ -69,6 +73,8 @@ courseEditHandler course = do
aid <- requireAuthId
((result, formWidget), formEnctype) <- runFormPost $ newCourseForm $ courseToForm <$> course
action <- lookupPostParam "formaction"
+ liftIO $ putStrLn "================"
+ liftIO $ print (result,action)
case (result,action) of
(FormSuccess res, fAct)
| fAct == formActionDelete
@@ -76,7 +82,7 @@ courseEditHandler course = do
runDB $ delete cid -- TODO Sicherheitsabfrage einbauen!
let cti = termToText $ cfTerm res
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde gelöscht! |]
- redirect CourseShowR
+ redirect $ CourseShowTermR $ cfTerm res
| fAct == formActionSave
, Just cid <- cfCourseId res -> do
actTime <- liftIO getCurrentTime
@@ -94,6 +100,7 @@ courseEditHandler course = do
]
let cti = termToText $ cfTerm res
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde geändert. |]
+ redirect $ CourseShowTermR $ cfTerm res
| fAct == formActionSave
, Nothing <- cfCourseId res -> do
actTime <- liftIO getCurrentTime
@@ -117,7 +124,7 @@ courseEditHandler course = do
runDB $ insert_ $ Lecturer aid cid
let cti = termToText $ cfTerm res
setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde angelegt. |]
- redirect CourseShowR
+ redirect $ CourseShowTermR $ cfTerm res
Nothing -> do
let cti = termToText $ cfTerm res
setMessage $ [shamlet|
@@ -127,7 +134,7 @@ courseEditHandler course = do
(FormFailure _,_) -> setMessage "Bitte Eingabe korrigieren."
_other -> return ()
let formTitle = "Kurs editieren/anlegen" :: Text
- let actionUrl = TermEditR
+ let actionUrl = CourseEditR
let formActions = defaultFormActions
defaultLayout $ do
setTitle [shamlet| #{formTitle} |]
@@ -146,7 +153,11 @@ data CourseForm = CourseForm
, cfRegFrom :: Maybe UTCTime
, cfRegTo :: Maybe UTCTime
}
-
+
+instance Show CourseForm where
+ show cf = T.unpack (cfShort cf) ++ ' ':(show $ cfCourseId cf)
+
+
courseToForm :: Entity Course -> CourseForm
courseToForm cEntity = CourseForm
{ cfCourseId = Just $ entityKey cEntity
@@ -166,7 +177,7 @@ courseToForm cEntity = CourseForm
newCourseForm :: Maybe CourseForm -> Form CourseForm
newCourseForm template html = do
(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)
<*> aopt htmlField (set "Beschreibung") (cfDesc <$> 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 utcTimeField (set "Anmeldung von:") (cfRegFrom <$> template)
<*> aopt utcTimeField (set "Anmeldung bis:") (cfRegTo <$> template)
+ -- <* bootstrapSubmit (bsSubmit (show cid))
+ liftIO $ putStrLn "++++++++++"
+ liftIO $ print cid
return $ case result of
FormSuccess courseResult
| errorMsgs <- validateCourse courseResult
@@ -192,6 +206,9 @@ newCourseForm template html = do
)
_ -> (result, widget)
where
+ cid :: Maybe CourseId
+ cid = join $ cfCourseId <$> template
+
set :: Text -> FieldSettings site
set = bfs
diff --git a/src/Handler/Term.hs b/src/Handler/Term.hs
index 42607ddb3..188a32e42 100644
--- a/src/Handler/Term.hs
+++ b/src/Handler/Term.hs
@@ -38,6 +38,12 @@ getTermShowR = do
, headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd
, headed "Aktiv" (\t -> if termActive t then tickmark else "")
-- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "")
+ , headed "Kursliste" $ (\t -> let tn = termName t in do
+ numCourses <- handlerToWidget $ runDB $ count [CourseTermId ==. tn ]
+ [whamlet|
+
+ #{show numCourses} Kurse
+ |] )
, headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart
, headed "Semesterende" $ fromString.formatTimeGerWD.termEnd
, headed "Feiertage im Semester" $