From c2dc23c116d502877a8626ae559efc749d918047 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Fri, 22 Mar 2019 18:40:59 +0100 Subject: [PATCH] course user info shows study terms and matriclenr --- models/courses | 2 +- src/Handler/Course.hs | 63 ++++++++++++++++++++++++++++++------ templates/profileData.hamlet | 3 +- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/models/courses b/models/courses index a731e778d..01b667499 100644 --- a/models/courses +++ b/models/courses @@ -51,7 +51,7 @@ CourseParticipant -- course enrolement CourseUserNote -- lecturers of a specific course may share a text note on each enrolled student course CourseId user UserId - note Text -- arbitrary user-defined text; visible only to lecturer of this course + note Html -- arbitrary user-defined text; visible only to lecturer of this course UniqueCourseUserNote user course CourseUserNoteEdit -- who edited a participants course note when user UserId diff --git a/src/Handler/Course.hs b/src/Handler/Course.hs index 6145f379f..f94ebca79 100644 --- a/src/Handler/Course.hs +++ b/src/Handler/Course.hs @@ -29,6 +29,7 @@ import qualified Data.Map as Map import qualified Database.Esqueleto as E +import Text.Blaze.Html.Renderer.Text (renderHtml) -- NOTE: Outdated way to use dbTable; see ProfileDataR Handler for a more recent method. type CourseTableData = DBRow (Entity Course, Int, Bool, Entity School) @@ -835,9 +836,11 @@ postCUserR tid ssh csh uCId = do dozentId <- requireAuthId uid <- decrypt uCId -- DB reads - (cid, User{..}, thisUniqueNote, noteText, noteEdits ) <- runDB $ do + (cid, User{..}, thisUniqueNote, noteText, noteEdits, studies ) <- runDB $ do cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh + -- Abfrage Benutzerdaten user <- get404 uid + -- Abfrage Teilnehmernotiz let thisUniqueNote = UniqueCourseUserNote uid cid mbNoteEnt <- getBy thisUniqueNote (noteText,noteEdits) <- case mbNoteEnt of @@ -850,7 +853,14 @@ postCUserR tid ssh csh uCId = do E.limit 1 -- more will be shown, if changed here return (edit E.^. CourseUserNoteEditTime, usr E.^. UserEmail, usr E.^. UserDisplayName, usr E.^. UserSurname) return (Just courseUserNoteNote, $(unValueN 4) <$> noteEdits) - return (cid,user,thisUniqueNote,noteText,noteEdits) + -- Abfrage Studiengänge + studies <- E.select $ E.from $ \(studydegree `E.InnerJoin` studyfeat `E.InnerJoin` studyterms) -> do + E.where_ $ studyfeat E.^. StudyFeaturesUser E.==. E.val uid + E.on $ studyfeat E.^. StudyFeaturesField E.==. studyterms E.^. StudyTermsId + E.on $ studyfeat E.^. StudyFeaturesDegree E.==. studydegree E.^. StudyDegreeId + return (studyfeat, studydegree, studyterms) + + return (cid,user,thisUniqueNote,noteText,noteEdits,studies) let editByWgt = [whamlet| $forall (etime,_eemail,ename,_esurname) <- noteEdits
@@ -858,32 +868,67 @@ postCUserR tid ssh csh uCId = do |] -- _{MsgLastEdit} ^{formatTimeW SelFormatDateTime etime} ^{nameWidget ename esurname} ((noteRes, noteView), noteEnctype) <- runFormPost . identifyForm FIDcUserNote . renderAForm FormStandard $ - (aopt (annotateField editByWgt textField) (fslpI MsgCourseUserNote "Text" & setTooltip MsgCourseUserNoteTooltip) $ Just noteText) + (aopt (annotateField editByWgt htmlField') (fslpI MsgCourseUserNote "Html" & setTooltip MsgCourseUserNoteTooltip) $ Just noteText) <* submitButton formResult noteRes $ \mbNote -> (do - let note = foldMap id mbNote -- Maybe Text to maybe empty Text now <- liftIO getCurrentTime - if null note - then do + case mbNote of + Nothing -> do runDB $ do -- must delete all edits due to foreign key constraints, which does not make sense -> refactor! maybeM (return ()) (\nk -> deleteWhere [CourseUserNoteEditNote ==. nk]) (getKeyBy thisUniqueNote) deleteBy thisUniqueNote addMessageI Info MsgCourseUserNoteDeleted - else do + redirect currentRoute -- reload page after post + _ | (renderHtml <$> mbNote) == (renderHtml <$> noteText) -> return() -- no changes + (Just note) -> do runDB $ do (Entity noteKey _) <- upsertBy thisUniqueNote (CourseUserNote cid uid note) [CourseUserNoteNote =. note] void . insert $ CourseUserNoteEdit dozentId now noteKey addMessageI Success MsgCourseUserNoteSaved + redirect currentRoute -- reload page after post ) - -- USE src/utils/Form.formResult defaultLayout -- TODO [whamlet|

^{nameWidget userDisplayName userSurname} - #{mailtoHtml userEmail} +
+
+
+
_{MsgEMail} +
#{mailtoHtml userEmail} +
_{MsgMatrikelNr} +
+ $maybe matnr <- userMatrikelnummer + #{matnr} + $nothing + Keine eingetragene Matrikelnummer +
Studiengänge +
+ $if null studies + Nicht eingeschrieben + $else +
+ + +
Studiengang + Abschluss + Studienart + Semester + Aktiv + Update + $forall ((Entity _ StudyFeatures{..}), (Entity _ degree), (Entity _ field)) <- studies + $with _ <- notUsedT studyFeaturesUser + + _{field}#{notUsedT studyFeaturesField} + _{degree}#{notUsedT studyFeaturesDegree} + _{studyFeaturesType} + #{display studyFeaturesSemester} + #{hasTickmark studyFeaturesValid} + ^{formatTimeW SelFormatDate studyFeaturesUpdated} +
diff --git a/templates/profileData.hamlet b/templates/profileData.hamlet index 08c5ae02f..12ff74157 100644 --- a/templates/profileData.hamlet +++ b/templates/profileData.hamlet @@ -7,7 +7,7 @@
_{MsgMatrikelNr}
#{matnr}
_{MsgEMail} -
#{display userEmail} +
#{mailtoHtml userEmail}
_{MsgIdent}
#{display userIdent}
_{MsgLastLogin} @@ -52,7 +52,6 @@
Aktiv Update - $forall ((Entity _ StudyFeatures{..}), (Entity _ degree), (Entity _ field)) <- studies $with _ <- notUsedT studyFeaturesUser