Form for Degrees changes implemented
This commit is contained in:
parent
a02cf61c82
commit
b2bb30a429
@ -419,6 +419,8 @@ DegreeShort: Abschlusskürzel
|
|||||||
StudyTermsKey: Schlüssel Studiengang
|
StudyTermsKey: Schlüssel Studiengang
|
||||||
StudyTermsName: Studiengang
|
StudyTermsName: Studiengang
|
||||||
StudyTermsShort: Studiengangkürzel
|
StudyTermsShort: Studiengangkürzel
|
||||||
|
StudyDegreeChangeSuccess: Abschlusszuordnungen wurden aktualisiert
|
||||||
|
|
||||||
|
|
||||||
MailTestFormEmail: Email-Addresse
|
MailTestFormEmail: Email-Addresse
|
||||||
MailTestFormLanguages: Spracheinstellungen
|
MailTestFormLanguages: Spracheinstellungen
|
||||||
|
|||||||
2
routes
2
routes
@ -39,7 +39,7 @@
|
|||||||
/users/#CryptoUUIDUser AdminUserR GET POST !development
|
/users/#CryptoUUIDUser AdminUserR GET POST !development
|
||||||
/users/#CryptoUUIDUser/hijack AdminHijackUserR POST !adminANDno-escalation
|
/users/#CryptoUUIDUser/hijack AdminHijackUserR POST !adminANDno-escalation
|
||||||
/admin/test AdminTestR GET POST
|
/admin/test AdminTestR GET POST
|
||||||
/admin/features AdminFeaturesR GET --POST
|
/admin/features AdminFeaturesR GET POST
|
||||||
/admin/errMsg AdminErrMsgR GET POST
|
/admin/errMsg AdminErrMsgR GET POST
|
||||||
|
|
||||||
/info InfoR GET !free
|
/info InfoR GET !free
|
||||||
|
|||||||
@ -163,13 +163,24 @@ postAdminErrMsgR = do
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
getAdminFeaturesR :: Handler Html
|
getAdminFeaturesR, postAdminFeaturesR :: Handler Html
|
||||||
getAdminFeaturesR = do
|
getAdminFeaturesR = postAdminFeaturesR
|
||||||
(degreeTable,studytermsTable,candidateTable) <- runDB $ (,,)
|
postAdminFeaturesR = do
|
||||||
|
((degreeResult,degreeTable),studytermsTable,candidateTable) <- runDB $ (,,)
|
||||||
<$> mkDegreeTable
|
<$> mkDegreeTable
|
||||||
<*> mkStudytermsTable
|
<*> mkStudytermsTable
|
||||||
<*> mkCandidateTable
|
<*> mkCandidateTable
|
||||||
|
|
||||||
|
let degreeResult' :: FormResult (Map (Key StudyDegree) (Maybe Text, Maybe Text))
|
||||||
|
degreeResult' = degreeResult <&> getDBFormResult
|
||||||
|
(\row -> ( row ^. _dbrOutput . _entityVal . _studyDegreeName
|
||||||
|
, row ^. _dbrOutput . _entityVal . _studyDegreeShorthand
|
||||||
|
))
|
||||||
|
updateDegree degreeKey (name,short) = update degreeKey [StudyDegreeName =. name, StudyDegreeShorthand =. short]
|
||||||
|
formResult degreeResult' $ \res -> do
|
||||||
|
void . runDB $ Map.traverseWithKey updateDegree res
|
||||||
|
addMessageI Success MsgStudyDegreeChangeSuccess
|
||||||
|
|
||||||
siteLayoutMsg MsgAdminFeaturesHeading $ do
|
siteLayoutMsg MsgAdminFeaturesHeading $ do
|
||||||
setTitleI MsgAdminFeaturesHeading
|
setTitleI MsgAdminFeaturesHeading
|
||||||
[whamlet|
|
[whamlet|
|
||||||
@ -184,6 +195,7 @@ getAdminFeaturesR = do
|
|||||||
^{candidateTable}
|
^{candidateTable}
|
||||||
|]
|
|]
|
||||||
where
|
where
|
||||||
|
mkDegreeTable :: DB (FormResult (DBFormResult (Key StudyDegree) (Maybe Text, Maybe Text) (DBRow (Entity StudyDegree))), Widget)
|
||||||
mkDegreeTable =
|
mkDegreeTable =
|
||||||
let dbtIdent = "admin-studydegrees" :: Text
|
let dbtIdent = "admin-studydegrees" :: Text
|
||||||
dbtStyle = def
|
dbtStyle = def
|
||||||
@ -193,8 +205,18 @@ getAdminFeaturesR = do
|
|||||||
dbtProj = return
|
dbtProj = return
|
||||||
dbtColonnade = mconcat
|
dbtColonnade = mconcat
|
||||||
[ sortable (Just "degree-key") (i18nCell MsgDegreeKey) (numCell . view (_dbrOutput . _entityVal . _studyDegreeKey))
|
[ sortable (Just "degree-key") (i18nCell MsgDegreeKey) (numCell . view (_dbrOutput . _entityVal . _studyDegreeKey))
|
||||||
, sortable (Just "degree-name") (i18nCell MsgDegreeName) (foldMap textCell . view (_dbrOutput . _entityVal . _studyDegreeName))
|
, sortable (Just "degree-name") (i18nCell MsgDegreeName)
|
||||||
, sortable (Just "degree-short") (i18nCell MsgDegreeShort) (foldMap textCell . view (_dbrOutput . _entityVal . _studyDegreeShorthand))
|
(formCell id (return . view (_dbrOutput . _entityKey))
|
||||||
|
(\row _mkUnique ->
|
||||||
|
(\(res,nameview) -> (set _1 <$> res, fvInput nameview)) <$>
|
||||||
|
mopt textField "" (Just $ row ^. _dbrOutput . _entityVal . _studyDegreeName)
|
||||||
|
))
|
||||||
|
, sortable (Just "degree-short") (i18nCell MsgDegreeShort)
|
||||||
|
(formCell id (return . view (_dbrOutput . _entityKey))
|
||||||
|
(\row _mkUnique ->
|
||||||
|
(\(res,shortview) -> (set _2 <$> res, fvInput shortview)) <$>
|
||||||
|
mopt textField "" (Just $ row ^. _dbrOutput . _entityVal . _studyDegreeShorthand)
|
||||||
|
))
|
||||||
]
|
]
|
||||||
dbtSorting = Map.fromList
|
dbtSorting = Map.fromList
|
||||||
[ ("degree-key" , SortColumn (E.^. StudyDegreeKey))
|
[ ("degree-key" , SortColumn (E.^. StudyDegreeKey))
|
||||||
@ -203,9 +225,9 @@ getAdminFeaturesR = do
|
|||||||
]
|
]
|
||||||
dbtFilter = mempty
|
dbtFilter = mempty
|
||||||
dbtFilterUI = mempty
|
dbtFilterUI = mempty
|
||||||
dbtParams = def
|
dbtParams = def { dbParamsFormAddSubmit = True }
|
||||||
psValidator = def & defaultSorting [SortAscBy "degree-name", SortAscBy "degree-short", SortAscBy "degree-key"]
|
psValidator = def & defaultSorting [SortAscBy "degree-name", SortAscBy "degree-short", SortAscBy "degree-key"]
|
||||||
in dbTableWidget' psValidator DBTable{..}
|
in dbTable psValidator DBTable{..}
|
||||||
|
|
||||||
mkStudytermsTable =
|
mkStudytermsTable =
|
||||||
let dbtIdent = "admin-studyterms" :: Text
|
let dbtIdent = "admin-studyterms" :: Text
|
||||||
|
|||||||
@ -787,7 +787,7 @@ makeCourseUserTable cid colChoices psValidator =
|
|||||||
-- , ("course-user-note", error "TODO") -- TODO
|
-- , ("course-user-note", error "TODO") -- TODO
|
||||||
]
|
]
|
||||||
dbtFilterUI mPrev = mconcat
|
dbtFilterUI mPrev = mconcat
|
||||||
[ fltrUserNameEmailUI mPrev
|
[ fltrUserNameEmailUI mPrev
|
||||||
, fltrUserMatriclenrUI mPrev
|
, fltrUserMatriclenrUI mPrev
|
||||||
]
|
]
|
||||||
dbtParams = def
|
dbtParams = def
|
||||||
|
|||||||
@ -844,11 +844,11 @@ instance Ord i => Monoid (DBFormResult i a r) where
|
|||||||
getDBFormResult :: forall r i a. Ord i => (r -> a) -> DBFormResult i a r -> Map i a
|
getDBFormResult :: forall r i a. Ord i => (r -> a) -> DBFormResult i a r -> Map i a
|
||||||
getDBFormResult initial (DBFormResult m) = Map.map (\(r, f) -> f $ initial r) m
|
getDBFormResult initial (DBFormResult m) = Map.map (\(r, f) -> f $ initial r) m
|
||||||
|
|
||||||
formCell :: forall res r i a. (Ord i, Monoid res)
|
formCell :: forall x r i a. (Ord i, Monoid x)
|
||||||
=> Lens' res (FormResult (DBFormResult i a (DBRow r)))
|
=> Lens' x (FormResult (DBFormResult i a (DBRow r))) -- ^ lens focussing on the form result within the larger DBResult; @id@ iff the form delivers the only result of the table
|
||||||
-> (DBRow r -> MForm (HandlerT UniWorX IO) i)
|
-> (DBRow r -> MForm (HandlerT UniWorX IO) i) -- ^ generate row identfifiers for use in form result
|
||||||
-> (DBRow r -> (forall p. PathPiece p => p -> Text) -> MForm (HandlerT UniWorX IO) (FormResult (a -> a), Widget)) -- ^ Given the row data and a callback to make an input name suitably unique generate the `MForm`
|
-> (DBRow r -> (forall p. PathPiece p => p -> Text) -> MForm (HandlerT UniWorX IO) (FormResult (a -> a), Widget)) -- ^ Given the row data and a callback to make an input name suitably unique generate the `MForm`
|
||||||
-> (DBRow r -> DBCell (MForm (HandlerT UniWorX IO)) res)
|
-> (DBRow r -> DBCell (MForm (HandlerT UniWorX IO)) x)
|
||||||
formCell formCellLens genIndex genForm input@(DBRow{dbrKey}) = FormCell
|
formCell formCellLens genIndex genForm input@(DBRow{dbrKey}) = FormCell
|
||||||
{ formCellAttrs = []
|
{ formCellAttrs = []
|
||||||
, formCellContents = do -- MForm (HandlerT UniWorX IO) (FormResult (Map i (Endo a)), Widget)
|
, formCellContents = do -- MForm (HandlerT UniWorX IO) (FormResult (Map i (Endo a)), Widget)
|
||||||
@ -871,11 +871,11 @@ formCell formCellLens genIndex genForm input@(DBRow{dbrKey}) = FormCell
|
|||||||
dbRow :: forall h r m a. (Headedness h, IsDBTable m a) => Colonnade h (DBRow r) (DBCell m a)
|
dbRow :: forall h r m a. (Headedness h, IsDBTable m a) => Colonnade h (DBRow r) (DBCell m a)
|
||||||
dbRow = Colonnade.singleton (headednessPure $ i18nCell MsgNrColumn) $ \DBRow{ dbrIndex } -> textCell $ tshow dbrIndex
|
dbRow = Colonnade.singleton (headednessPure $ i18nCell MsgNrColumn) $ \DBRow{ dbrIndex } -> textCell $ tshow dbrIndex
|
||||||
|
|
||||||
dbSelect :: forall res h r i a. (Headedness h, Ord i, PathPiece i, Monoid res)
|
dbSelect :: forall x h r i a. (Headedness h, Ord i, PathPiece i, Monoid x)
|
||||||
=> Lens' res (FormResult (DBFormResult i a (DBRow r)))
|
=> Lens' x (FormResult (DBFormResult i a (DBRow r)))
|
||||||
-> Setter' a Bool
|
-> Setter' a Bool
|
||||||
-> (DBRow r -> MForm (HandlerT UniWorX IO) i)
|
-> (DBRow r -> MForm (HandlerT UniWorX IO) i)
|
||||||
-> Colonnade h (DBRow r) (DBCell (MForm (HandlerT UniWorX IO)) res)
|
-> Colonnade h (DBRow r) (DBCell (MForm (HandlerT UniWorX IO)) x)
|
||||||
dbSelect resLens selLens genIndex = Colonnade.singleton (headednessPure $ i18nCell MsgSelectColumn) $ formCell resLens genIndex genForm
|
dbSelect resLens selLens genIndex = Colonnade.singleton (headednessPure $ i18nCell MsgSelectColumn) $ formCell resLens genIndex genForm
|
||||||
where
|
where
|
||||||
genForm _ mkUnique = do
|
genForm _ mkUnique = do
|
||||||
|
|||||||
Reference in New Issue
Block a user