Term Handler cleaned again; small changes to Model (Maybe added for some Text Types, courseOwner dropped).
This commit is contained in:
parent
2eae90d1f8
commit
d10a629fa2
11
models
11
models
@ -27,12 +27,11 @@ DegreeCourse json
|
|||||||
degreeId DegreeId
|
degreeId DegreeId
|
||||||
courseId CourseId
|
courseId CourseId
|
||||||
UniqueDegreeCourse degreeId courseId
|
UniqueDegreeCourse degreeId courseId
|
||||||
Course json
|
Course
|
||||||
name Text
|
name Text
|
||||||
shorthand Text
|
shorthand Text
|
||||||
description Textarea
|
description Html Maybe
|
||||||
linkexternal Text
|
linkexternal Text Maybe
|
||||||
owner UserId
|
|
||||||
schoolId SchoolId
|
schoolId SchoolId
|
||||||
termId TermId -- TermId ist jetzt Text als Typ
|
termId TermId -- TermId ist jetzt Text als Typ
|
||||||
capacity Int Maybe
|
capacity Int Maybe
|
||||||
@ -60,7 +59,7 @@ Sheet
|
|||||||
hintId FileId Maybe
|
hintId FileId Maybe
|
||||||
solutionId FileId Maybe
|
solutionId FileId Maybe
|
||||||
markingId FileId Maybe
|
markingId FileId Maybe
|
||||||
markingText Text
|
markingText Text Maybe
|
||||||
activeFrom UTCTime
|
activeFrom UTCTime
|
||||||
activeTo UTCTime
|
activeTo UTCTime
|
||||||
hintFrom UTCTime Maybe
|
hintFrom UTCTime Maybe
|
||||||
@ -129,7 +128,7 @@ Booking
|
|||||||
Room
|
Room
|
||||||
name Text
|
name Text
|
||||||
capacity Int Maybe
|
capacity Int Maybe
|
||||||
building Text
|
building Text Maybe
|
||||||
-- BookingRoom
|
-- BookingRoom
|
||||||
-- subject RoomForId
|
-- subject RoomForId
|
||||||
-- roomId RoomId
|
-- roomId RoomId
|
||||||
|
|||||||
9
routes
9
routes
@ -8,9 +8,8 @@
|
|||||||
|
|
||||||
/profile ProfileR GET
|
/profile ProfileR GET
|
||||||
|
|
||||||
/showterms ShowTermsR GET
|
/term ShowTermsR GET
|
||||||
|
/term/edit EditTermR GET POST
|
||||||
|
/term/#TermIdentifier/edit EditTermExistR GET
|
||||||
|
|
||||||
/assist/newcourse NewCourseR GET POST
|
/assist/newcourse NewCourseR GET POST
|
||||||
/assist/newterm NewTermR GET
|
|
||||||
/assist/editterm EditTermR GET POST
|
|
||||||
/assist/editterm/#TermIdentifier EditTermExistR GET
|
|
||||||
|
|||||||
@ -168,7 +168,6 @@ instance Yesod UniWorX where
|
|||||||
isAuthorized ProfileR _ = isAuthenticated
|
isAuthorized ProfileR _ = isAuthenticated
|
||||||
-- TODO: change to Assistants
|
-- TODO: change to Assistants
|
||||||
isAuthorized NewCourseR _ = return Authorized
|
isAuthorized NewCourseR _ = return Authorized
|
||||||
isAuthorized NewTermR _ = return Authorized
|
|
||||||
isAuthorized EditTermR _ = return Authorized
|
isAuthorized EditTermR _ = return Authorized
|
||||||
isAuthorized (EditTermExistR _) _ = return Authorized
|
isAuthorized (EditTermExistR _) _ = return Authorized
|
||||||
isAuthorized ShowTermsR _ = return Authorized
|
isAuthorized ShowTermsR _ = return Authorized
|
||||||
|
|||||||
@ -25,9 +25,15 @@ getShowTermsR = do
|
|||||||
provideRep $ return $ toJSON terms
|
provideRep $ return $ toJSON terms
|
||||||
provideRep $ do
|
provideRep $ do
|
||||||
let colonnadeTerms = mconcat
|
let colonnadeTerms = mconcat
|
||||||
-- TODO Edit-Links only $if isAdmin, otherwise breadcrumb navigation
|
[ headed "Kürzel" $ (\t -> let tn = termName t in do
|
||||||
[ headed "Kürzel" $ (\t -> let tn = termName t in
|
adminLink <- handlerToWidget $ isAuthorized (EditTermExistR tn) False
|
||||||
[whamlet| <a href=@{EditTermExistR tn}>#{termToText tn}|] )
|
[whamlet|
|
||||||
|
$if adminLink == Authorized
|
||||||
|
<a href=@{EditTermExistR tn}>
|
||||||
|
#{termToText tn}
|
||||||
|
$else
|
||||||
|
#{termToText tn}
|
||||||
|
|] )
|
||||||
, headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart
|
, headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart
|
||||||
, 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 "")
|
||||||
@ -42,36 +48,23 @@ getShowTermsR = do
|
|||||||
encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms)
|
encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms)
|
||||||
|
|
||||||
|
|
||||||
getNewTermR :: Handler Html
|
|
||||||
getNewTermR = do
|
|
||||||
-- TODO: Defaults für Semester hier ermitteln und übergeben
|
|
||||||
getEditTermMaybeR Nothing
|
|
||||||
|
|
||||||
|
|
||||||
getEditTermR :: Handler Html
|
getEditTermR :: Handler Html
|
||||||
getEditTermR = do
|
getEditTermR = do
|
||||||
-- TODO: Defaults für Semester hier ermitteln und übergeben
|
-- TODO: Defaults für Semester hier ermitteln und übergeben
|
||||||
getEditTermMaybeR Nothing
|
termEditHandler Nothing
|
||||||
|
|
||||||
|
postEditTermR :: Handler Html
|
||||||
|
postEditTermR = termEditHandler Nothing
|
||||||
|
|
||||||
getEditTermExistR :: TermIdentifier -> Handler Html
|
getEditTermExistR :: TermIdentifier -> Handler Html
|
||||||
getEditTermExistR tid = do
|
getEditTermExistR tid = do
|
||||||
term <- runDB $ get $ TermKey tid
|
term <- runDB $ get $ TermKey tid
|
||||||
getEditTermMaybeR term
|
termEditHandler term
|
||||||
|
|
||||||
|
|
||||||
getEditTermMaybeR :: Maybe Term -> Handler Html
|
termEditHandler :: Maybe Term -> Handler Html
|
||||||
getEditTermMaybeR mbTerm= do
|
termEditHandler term = do
|
||||||
aid <- requireAuthId
|
((result, formWidget), formEnctype) <- runFormPost $ newTermForm term
|
||||||
-- TODO: verify Admin
|
|
||||||
(formWidget, formEnctype) <- generateFormPost $ newTermForm mbTerm
|
|
||||||
wdgtTermForm formWidget formEnctype
|
|
||||||
|
|
||||||
postEditTermR :: Handler Html
|
|
||||||
postEditTermR = do
|
|
||||||
aid <- requireAuthId
|
|
||||||
-- TODO: verify Admin
|
|
||||||
((result, formWidget), formEnctype) <- runFormPost $ newTermForm Nothing
|
|
||||||
action <- lookupPostParam "formaction"
|
action <- lookupPostParam "formaction"
|
||||||
case (result,action) of
|
case (result,action) of
|
||||||
(FormSuccess res, fAct)
|
(FormSuccess res, fAct)
|
||||||
@ -79,7 +72,7 @@ postEditTermR = do
|
|||||||
runDB $ delete (TermKey $ termName res)
|
runDB $ delete (TermKey $ termName res)
|
||||||
let tid = termToText $ termName res
|
let tid = termToText $ termName res
|
||||||
let msg = "Semester " `T.append` tid `T.append` " erfolgreich gelöscht."
|
let msg = "Semester " `T.append` tid `T.append` " erfolgreich gelöscht."
|
||||||
setMessage [shamlet| #{msg} |]
|
setMessage $ [shamlet| #{msg} |]
|
||||||
redirect ShowTermsR
|
redirect ShowTermsR
|
||||||
| fAct == formActionSave -> do
|
| fAct == formActionSave -> do
|
||||||
-- term <- runDB $ get $ TermKey termName
|
-- term <- runDB $ get $ TermKey termName
|
||||||
@ -89,14 +82,16 @@ postEditTermR = do
|
|||||||
setMessage [shamlet| #{msg} |]
|
setMessage [shamlet| #{msg} |]
|
||||||
redirect ShowTermsR
|
redirect ShowTermsR
|
||||||
| otherwise -> redirect ShowTermsR
|
| otherwise -> redirect ShowTermsR
|
||||||
(FormMissing,_) -> do
|
(FormMissing,_) -> return ()
|
||||||
setMessage "Keine Formulardaten erhalten."
|
(FormFailure _,_) -> setMessage "Bitte Eingabe korrigieren."
|
||||||
wdgtTermForm formWidget formEnctype
|
let formTitle = "Semester editieren/anlegen" :: Text
|
||||||
|
let actionUrl = EditTermR
|
||||||
(FormFailure _,_) -> do
|
let formActions = defaultFormActions
|
||||||
setMessage "Bitte Eingabe korrigieren."
|
defaultLayout $ do
|
||||||
wdgtTermForm formWidget formEnctype
|
setTitle [shamlet| #{formTitle} |]
|
||||||
|
$(widgetFile "generic_form")
|
||||||
|
|
||||||
|
{-
|
||||||
wdgtTermForm :: (ToWidget UniWorX a) => a -> Enctype -> Handler Html
|
wdgtTermForm :: (ToWidget UniWorX a) => a -> Enctype -> Handler Html
|
||||||
wdgtTermForm formWidget formEnctype = do
|
wdgtTermForm formWidget formEnctype = do
|
||||||
let formTitle = "Semester editieren/anlegen" :: Text
|
let formTitle = "Semester editieren/anlegen" :: Text
|
||||||
@ -105,6 +100,7 @@ wdgtTermForm formWidget formEnctype = do
|
|||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle [shamlet| #{formTitle} |]
|
setTitle [shamlet| #{formTitle} |]
|
||||||
$(widgetFile "generic_form")
|
$(widgetFile "generic_form")
|
||||||
|
-}
|
||||||
|
|
||||||
newTermForm :: Maybe Term -> Form Term
|
newTermForm :: Maybe Term -> Form Term
|
||||||
newTermForm template html = do
|
newTermForm template html = do
|
||||||
|
|||||||
@ -5,7 +5,7 @@ module Handler.Utils.Table where
|
|||||||
-- General Utilities for Tables
|
-- General Utilities for Tables
|
||||||
|
|
||||||
import Import hiding ((<>))
|
import Import hiding ((<>))
|
||||||
import Data.Monoid ((<>))
|
-- import Data.Monoid ((<>))
|
||||||
import Data.Profunctor
|
import Data.Profunctor
|
||||||
|
|
||||||
import Text.Blaze as B
|
import Text.Blaze as B
|
||||||
@ -31,7 +31,7 @@ encodeHeadedWidgetTableNumbered :: Attribute -> Colonnade Headed a (WidgetT site
|
|||||||
encodeHeadedWidgetTableNumbered attrs colo tdata =
|
encodeHeadedWidgetTableNumbered attrs colo tdata =
|
||||||
encodeHeadedWidgetTable attrs (mconcat [numberCol, lmap snd colo]) (zip [1..] tdata)
|
encodeHeadedWidgetTable attrs (mconcat [numberCol, lmap snd colo]) (zip [1..] tdata)
|
||||||
where
|
where
|
||||||
|
numberCol :: Colonnade Headed (Int,a) (WidgetT site IO ())
|
||||||
numberCol = headed "Nr" (fromString.show.fst)
|
numberCol = headed "Nr" (fromString.show.fst)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ seasonFromChar c
|
|||||||
data TermIdentifier = TermIdentifier
|
data TermIdentifier = TermIdentifier
|
||||||
{ year :: Integer -- ^ Using 'Integer' to model years is consistent with 'Data.Time.Calendar'
|
{ year :: Integer -- ^ Using 'Integer' to model years is consistent with 'Data.Time.Calendar'
|
||||||
, season :: Season
|
, season :: Season
|
||||||
} deriving (Show, Read, Eq, Generic, Typeable)
|
} deriving (Show, Read, Eq, Ord, Generic, Typeable)
|
||||||
|
|
||||||
--TODO: Enforce the number of digits within year, with parsing filling in the current leading digits? Goal: short urls
|
--TODO: Enforce the number of digits within year, with parsing filling in the current leading digits? Goal: short urls
|
||||||
termToText :: TermIdentifier -> Text
|
termToText :: TermIdentifier -> Text
|
||||||
@ -72,11 +72,6 @@ termFromText t
|
|||||||
= Right TermIdentifier{..}
|
= Right TermIdentifier{..}
|
||||||
| otherwise = Left $ "Invalid TermIdentifier: “" <> t <> "”"
|
| otherwise = Left $ "Invalid TermIdentifier: “" <> t <> "”"
|
||||||
|
|
||||||
instance Ord TermIdentifier where
|
|
||||||
ti1 <= ti2 =
|
|
||||||
year ti1 <= year ti2 ||
|
|
||||||
(year ti1 == year ti2 || season ti1 <= season ti2)
|
|
||||||
|
|
||||||
instance PersistField TermIdentifier where
|
instance PersistField TermIdentifier where
|
||||||
toPersistValue = PersistText . termToText
|
toPersistValue = PersistText . termToText
|
||||||
fromPersistValue (PersistText t) = termFromText t
|
fromPersistValue (PersistText t) = termFromText t
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user