diff --git a/routes b/routes index f7229c577..afea21d20 100644 --- a/routes +++ b/routes @@ -12,8 +12,9 @@ /term/edit TermEditR GET POST /term/#TermIdentifier/edit TermEditExistR GET -/course/ CourseShowR GET +/course/ CourseListR GET !/course/edit CourseEditR GET POST -!/course/#TermIdentifier CourseShowTermR GET +!/course/#TermIdentifier CourseListTermR GET /course/#TermIdentifier/#Text/edit CourseEditExistR GET +/course/#TermIdentifier/#Text/show CourseShowR GET diff --git a/src/Foundation.hs b/src/Foundation.hs index 3b734eb4e..024f17928 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -169,8 +169,9 @@ instance Yesod UniWorX where -- TODO: all? isAuthorized TermShowR _ = return Authorized - isAuthorized CourseShowR _ = return Authorized - isAuthorized (CourseShowTermR _) _ = return Authorized + isAuthorized CourseListR _ = return Authorized + isAuthorized (CourseShowR _ _) _ = return Authorized + isAuthorized (CourseListTermR _) _ = return Authorized -- TODO: change to Assistants isAuthorized TermEditR _ = return Authorized isAuthorized (TermEditExistR _) _ = return Authorized diff --git a/src/Handler/Course.hs b/src/Handler/Course.hs index 1a877fce6..71c7c54cf 100644 --- a/src/Handler/Course.hs +++ b/src/Handler/Course.hs @@ -20,11 +20,11 @@ import Colonnade import Yesod.Colonnade -getCourseShowR :: Handler TypedContent -getCourseShowR = redirect TermShowR +getCourseListR :: Handler TypedContent +getCourseListR = redirect TermShowR -getCourseShowTermR :: TermIdentifier -> Handler Html -getCourseShowTermR tidini = do +getCourseListTermR :: TermIdentifier -> Handler Html +getCourseListTermR tidini = do (term,courses) <- runDB $ do term <- get $ TermKey tidini courses <- selectList [CourseTermId ==. TermKey tidini] [Asc CourseShorthand] @@ -35,24 +35,34 @@ getCourseShowTermR tidini = do let colonnadeTerms = mconcat [ headed "Kürzel" $ (\c -> let shd = courseShorthand c - (TermKey tid) = courseTermId c + tid = unTermKey $ courseTermId c + in [whamlet| #{shd} |] ) +-- , headed "Institut" $ [shamlet| #{course} |] + , headed "Beginn Anmeldung" $ fromString.(maybe "" formatTimeGerWD).courseRegisterFrom + , headed "Ende Anmeldung" $ fromString.(maybe "" formatTimeGerWD).courseRegisterTo + , headed " " $ (\c -> + let shd = courseShorthand c + tid = unTermKey $ 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 + editieren + |] ) ] defaultLayout $ do setTitle "Semesterkurse" encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal courses) +getCourseShowR :: TermIdentifier -> Text -> Handler Html +getCourseShowR tid csh = do + courseEnt <- runDB $ getBy404 $ CourseTermShort (TermKey tid) csh + let course = entityVal courseEnt + defaultLayout $ do + setTitle $ [shamlet| #{termToText tid} - #{csh}|] + $(widgetFile "course") + getCourseEditR :: Handler Html getCourseEditR = do @@ -82,7 +92,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 $ CourseShowTermR $ cfTerm res + redirect $ CourseListTermR $ cfTerm res | fAct == formActionSave , Just cid <- cfCourseId res -> do actTime <- liftIO getCurrentTime @@ -100,7 +110,7 @@ courseEditHandler course = do ] let cti = termToText $ cfTerm res setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde geändert. |] - redirect $ CourseShowTermR $ cfTerm res + redirect $ CourseListTermR $ cfTerm res | fAct == formActionSave , Nothing <- cfCourseId res -> do actTime <- liftIO getCurrentTime @@ -124,7 +134,7 @@ courseEditHandler course = do runDB $ insert_ $ Lecturer aid cid let cti = termToText $ cfTerm res setMessage $ [shamlet| Kurs #{cti}/#{cfShort res} wurde angelegt. |] - redirect $ CourseShowTermR $ cfTerm res + redirect $ CourseListTermR $ cfTerm res Nothing -> do let cti = termToText $ cfTerm res setMessage $ [shamlet| diff --git a/src/Handler/Term.hs b/src/Handler/Term.hs index f97d51547..662596477 100644 --- a/src/Handler/Term.hs +++ b/src/Handler/Term.hs @@ -41,7 +41,7 @@ getTermShowR = do , headed "Kursliste" $ (\t -> let tn = termName t in do numCourses <- handlerToWidget $ runDB $ count [CourseTermId ==. TermKey tn ] [whamlet| - + #{show numCourses} Kurse |] ) , headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart diff --git a/templates/course.hamlet b/templates/course.hamlet new file mode 100644 index 000000000..d4e2612f7 --- /dev/null +++ b/templates/course.hamlet @@ -0,0 +1,40 @@ +
+
+
+

+ #{courseName course} + +
+
+
+
+
+

Beschreibung + + $maybe descr <- courseDescription course +

#{descr} + + +

+ You can also use this scaffolded site to explore some concepts, and best practices. + + +

  • + We can link to other handlers, like the Profile. + Try it out as an anonymous user and see the access denied. + Then, try to login with the dummy authentication added + while in development. + +
  • + The HTML you are seeing now is actually composed by a number of widgets, # + most of them are brought together by the defaultLayout function which # + is defined in the Foundation.hs module, + All the files for templates and wigdets are in templates. + +
  • + A Widget's Html, Css and Javascript are separated in three files with the + .hamlet, .lucius and .julius extensions. + + +
    +