From ec06be2dfd5b7abcf40a9c61bea7120fa66b66ff Mon Sep 17 00:00:00 2001 From: SJost Date: Fri, 9 Nov 2018 10:01:39 +0100 Subject: [PATCH] Fixes #223, number of submission buddies, no longer ignore .vscode --- .gitignore | 3 +-- .vscode/tasks.json | 35 +++++++++++++++++++++++++++++++++++ config/submission-blacklist | 5 +++++ messages/uniworx/de.msg | 2 +- routes | 24 ++++++++++++------------ src/Handler/Sheet.hs | 30 +++++++++++------------------- src/Handler/Submission.hs | 2 +- 7 files changed, 66 insertions(+), 35 deletions(-) create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index 663c0dcc1..bce03bdeb 100644 --- a/.gitignore +++ b/.gitignore @@ -30,5 +30,4 @@ src/Handler/Course.SnapCustom.hs /instance .stack-work-* .directory -tags -.vscode \ No newline at end of file +tags \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..88fe3a8fb --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,35 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "./build.sh", + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "silent", + "focus": false, + "panel": "dedicated", + "showReuseMessage": false + } + }, + { + "label": "start", + "type": "shell", + "command": "./start.sh", + "group": "build", + "presentation": { + "echo": true, + "reveal": "silent", + "focus": false, + "panel": "dedicated", + "showReuseMessage": false + }, + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/config/submission-blacklist b/config/submission-blacklist index ad2a62ccf..dbc7d0c21 100644 --- a/config/submission-blacklist +++ b/config/submission-blacklist @@ -10,3 +10,8 @@ $# Ignoriere rekursiv alle Ordner __MACOSX und ihren Inhalt $# Ignoriere rekursiv alle Dateien .DS_Store (Mac OS) **/.DS_Store + +$# Ignoriere VI-Style-Backup-Files +**/*~ +$# Ignoriere Emacs-Style-Backup-Files +**/.#*# \ No newline at end of file diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index b131bc5ab..bf3acc5d3 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -346,7 +346,7 @@ MailSheetActiveIntro courseName@Text termDesc@Text sheetName@SheetName: Sie kön MailSubjectSheetSoonInactive csh@CourseShorthand sheetName@SheetName: #{sheetName} in #{csh} kann nur noch kurze Zeit abgegeben werden MailSheetSoonInactiveIntro courseName@Text termDesc@Text sheetName@SheetName: Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) endet in Kürze. -MailSubjectSheetInactive csh@CourseShorthand sheetName@SheetName: Abgabfristt für #{sheetName} in #{csh} abgelaufen +MailSubjectSheetInactive csh@CourseShorthand sheetName@SheetName: Abgabfrist für #{sheetName} in #{csh} abgelaufen MailSheetInactiveIntro courseName@Text termDesc@Text sheetName@SheetName: Die Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) beendet. MailCorrectionsAssignedIntro courseName@Text termDesc@Text sheetName@SheetName n@Int: #{display n} Abgaben wurden Ihnen zur Korrektur für #{sheetName} im Kurs #{courseName} (#{termDesc}) zugeteilt. MailEditNotifications: Benachrichtigungen ein-/ausschalten diff --git a/routes b/routes index 5808a7347..399f3bf72 100644 --- a/routes +++ b/routes @@ -10,20 +10,20 @@ -- Admins always have access to entities within their assigned schools. -- -- Access Tags: --- !free -- free for all --- !lecturer -- lecturer for this course (or the school, if route is not connected to a course) --- !corrector -- corrector for this sheet (or the submission, if route is connected to a submission, or the course, if route is not connected to a sheet, or any course, if route is not connected to a course) --- !registered -- participant for this course (no effect outside of courses) --- !owner -- part of the group of owners of this submission --- !capacity -- course this route is associated with has at least one unit of participant capacity +-- !free -- free for all +-- !lecturer -- lecturer for this course (or the school, if route is not connected to a course) +-- !corrector -- corrector for this sheet (or the submission, if route is connected to a submission, or the course, if route is not connected to a sheet, or any course, if route is not connected to a course) +-- !registered -- participant for this course (no effect outside of courses) +-- !owner -- part of the group of owners of this submission +-- !capacity -- course this route is associated with has at least one unit of participant capacity -- --- !materials -- only if course allows all materials to be free (no meaning outside of courses) --- !time -- access depends on time somehow --- !isRead -- only if it is read-only access (i.e. GET but not POST) --- !isWrite -- only if it is write access (i.e. POST only) why needed??? --- --- !deprecated -- like free, but logs and gives a warning; entirely disabled in production +-- !materials -- only if course allows all materials to be free (no meaning outside of courses) +-- !time -- access depends on time somehow +-- !isRead -- only if it is read-only access (i.e. GET but not POST) +-- !isWrite -- only if it is write access (i.e. POST only) why needed??? -- +-- !deprecated -- like free, but logs and gives a warning; entirely disabled in production +-- !development -- like free, but only for development builds /static StaticR Static appStatic !free /auth AuthR Auth getAuth !free diff --git a/src/Handler/Sheet.hs b/src/Handler/Sheet.hs index 8feceb2bf..97ef5fcfb 100644 --- a/src/Handler/Sheet.hs +++ b/src/Handler/Sheet.hs @@ -180,8 +180,7 @@ getSheetListR tid ssh csh = do mkRoute = do cid' <- mkCid return $ CSubmissionR tid ssh csh sheetName cid' CorrectionR - protoCell = anchorCellM mkRoute $(widgetFile "widgets/rating") - in protoCell & cellContents %~ (<* tell (sheetTypeSum sheetType submissionRatingPoints)) + in anchorCellM mkRoute $(widgetFile "widgets/rating") , sortable Nothing -- (Just "percent") (i18nCell MsgRatingPercent) $ \(Entity _ Sheet{sheetType=sType}, _, mbSub) -> case mbSub of @@ -196,23 +195,7 @@ getSheetListR tid ssh csh = do ] psValidator = def & defaultSorting [("submission-since", SortAsc)] - ------------------------------------------------------ - -- ISSUE #223 - -- The following line does not work; something is wrong with the tell in line 189 above. - -- (SheetTypeSummary{..}, table) <- dbTable psValidator $ DBTable - -- - -- If fixed, remove the following workaround code: - SheetTypeSummary{..} <- do - rows <- runDB $ E.select $ E.from $ \(sheet `E.LeftOuterJoin` (submission `E.InnerJoin` submissionUser)) -> do - E.on $ submission E.?. SubmissionId E.==. submissionUser E.?. SubmissionUserSubmission - E.on $ (E.just $ sheet E.^. SheetId) E.==. submission E.?. SubmissionSheet - E.&&. submissionUser E.?. SubmissionUserUser E.==. E.val muid - E.where_ $ sheet E.^. SheetCourse E.==. E.val cid - return (sheet E.^. SheetType, submission E.?. SubmissionRatingPoints) - return $ foldMap (\(E.Value sheetType, E.Value mbPts) -> sheetTypeSum sheetType (join mbPts)) rows - (_, table) <- dbTable psValidator $ DBTable - -- END ISSUE #223 - ----------------------------------------------------- + ((), table) <- dbTable psValidator $ DBTable { dbtSQLQuery = sheetData , dbtColonnade = sheetCol , dbtProj = \DBRow{ dbrOutput = dbrOutput@(Entity _ Sheet{..}, _, _) } @@ -245,6 +228,15 @@ getSheetListR tid ssh csh = do , dbtStyle = def , dbtIdent = "sheets" :: Text } + -- Collect summary over all Sheets, not just the ones shown due to pagination: + SheetTypeSummary{..} <- do + rows <- runDB $ E.select $ E.from $ \(sheet `E.LeftOuterJoin` (submission `E.InnerJoin` submissionUser)) -> do + E.on $ submission E.?. SubmissionId E.==. submissionUser E.?. SubmissionUserSubmission + E.on $ (E.just $ sheet E.^. SheetId) E.==. submission E.?. SubmissionSheet + E.&&. submissionUser E.?. SubmissionUserUser E.==. E.val muid + E.where_ $ sheet E.^. SheetCourse E.==. E.val cid + return (sheet E.^. SheetType, submission E.?. SubmissionRatingPoints) + return $ foldMap (\(E.Value sheetType, E.Value mbPts) -> sheetTypeSum sheetType (join mbPts)) rows defaultLayout $ do $(widgetFile "sheetList") $(widgetFile "widgets/sheetTypeSummary") diff --git a/src/Handler/Submission.hs b/src/Handler/Submission.hs index e77197b0c..26a7161d5 100644 --- a/src/Handler/Submission.hs +++ b/src/Handler/Submission.hs @@ -56,7 +56,7 @@ makeSubmissionForm msmid uploadMode grouping buddies = identForm FIDsubmission $ flip (renderAForm FormStandard) html $ (,) <$> fileUploadForm <*> (catMaybes <$> sequenceA [bool aforced' aopt editableBuddies ciField (fslpI (MsgSubmissionMember g) "user@campus.lmu.de" ) buddy - | g <- [1..(max (fromIntegral groupNr) $ length buddies)] -- groupNr might have decreased meanwhile + | g <- [1..(min (fromIntegral groupNr) $ length buddies)] -- groupNr might have decreased meanwhile | buddy <- map (Just . Just) buddies ++ repeat Nothing -- show current buddies ]) <* submitButton