From 7329c84304cdb74b43b57e6b0899bd84c20a85c1 Mon Sep 17 00:00:00 2001 From: SJost Date: Thu, 19 Apr 2018 11:22:35 +0200 Subject: [PATCH] SubmissionEdit page offers downloads now. --- src/Handler/Submission.hs | 41 ++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/Handler/Submission.hs b/src/Handler/Submission.hs index 7aadaa67c..6e1158686 100644 --- a/src/Handler/Submission.hs +++ b/src/Handler/Submission.hs @@ -57,7 +57,7 @@ makeSubmissionForm unpackZips grouping buddies = identForm FIDsubmission $ \html <$> areq (zipFileField unpackZips) (fsm $ bool MsgSubmissionFile MsgSubmissionArchive unpackZips) Nothing <*> (catMaybes <$> sequenceA [bool aforced' aopt editableBuddies textField (fsm $ MsgSubmissionMember g) buddy | g <- [1..(max groupNr $ length buddies)] -- groupNr might have decreased meanwhile - | buddy <- map (Just . Just) buddies ++ repeat Nothing -- show current buddies + | buddy <- map (Just . Just) buddies ++ repeat Nothing -- show current buddies ]) <* submitButton where @@ -74,7 +74,7 @@ getSubmissionR = postSubmissionR postSubmissionR tid csh shn (SubmissionMode mcid) = do uid <- requireAuthId msmid <- traverse decrypt mcid - (Entity shid Sheet{..}, buddies) <- runDB $ do + (Entity shid Sheet{..}, buddies, oldfiles) <- runDB $ do sheet@(Entity shid Sheet{..}) <- fetchSheet tid csh shn case msmid of Nothing -> do @@ -102,7 +102,7 @@ postSubmissionR tid csh shn (SubmissionMode mcid) = do E.&&. submissionUser E.^. SubmissionUserUserId E.!=. E.val uid E.orderBy [E.asc $ user E.^. UserEmail] return $ user E.^. UserEmail - return (sheet,buddies) + return (sheet,buddies,[]) (E.Value smid:_) -> do cID <- encrypt smid addMessageI "info" $ MsgSubmissionAlreadyExists @@ -117,7 +117,8 @@ postSubmissionR tid csh shn (SubmissionMode mcid) = do E.&&. submissionUser E.^. SubmissionUserUserId E.!=. E.val uid E.orderBy [E.asc $ user E.^. UserEmail] return $ user E.^. UserEmail - return (sheet,buddies) + oldfiles <- sourceToList $ submissionFileSource smid + return (sheet,buddies,oldfiles) let unpackZips = True -- undefined -- TODO ((res,formWidget), formEnctype) <- runFormPost $ makeSubmissionForm unpackZips sheetGrouping $ map E.unValue buddies mCID <- runDB $ do @@ -189,6 +190,9 @@ postSubmissionR tid csh shn (SubmissionMode mcid) = do Just cID -> redirect $ CourseR tid csh $ SheetR $ SubmissionR shn $ SubmissionMode $ Just cID Nothing -> return () + mArCid <- fmap (CI.original . ciphertext) <$> traverse encrypt msmid + let mCidArCid = (,) <$> mcid <*> mArCid + let pageTitle = MsgSubmissionTitle (unTermKey tid) csh shn let formTitle = pageTitle let formText = Nothing :: Maybe UniWorXMessage @@ -196,12 +200,34 @@ postSubmissionR tid csh shn (SubmissionMode mcid) = do defaultLayout $ do setTitleI pageTitle $(widgetFile "formPageI18n") + [whamlet| + $maybe (cid, arCid) <-mCidArCid +
+

+ Archive +

Enthaltene Dateien: + $forall (Entity _ File{..}) <- oldfiles + + #{fileTitle} + |] +submissionFileSource :: SubmissionId -> Source (YesodDB UniWorX) (Entity File) +submissionFileSource submissionID = E.selectSource . E.from $ \(sf `E.InnerJoin` f) -> E.distinctOnOrderBy [E.asc $ f E.^. FileTitle] $ do + E.on (f E.^. FileId E.==. sf E.^. SubmissionFileFileId) + E.where_ $ sf E.^. SubmissionFileSubmissionId E.==. E.val submissionID + E.where_ . E.not_ $ sf E.^. SubmissionFileIsDeletion + E.orderBy [E.desc $ sf E.^. SubmissionFileIsUpdate] + return f + + + + + @@ -309,13 +335,6 @@ getSubmissionDownloadSingleR cID path = do [Entity _ File{ fileContent = Just c }] -> return $ TypedContent (defaultMimeLookup fileName) (toContent c) _ -> notFound -submissionFileSource :: SubmissionId -> Source (YesodDB UniWorX) (Entity File) -submissionFileSource submissionID = E.selectSource . E.from $ \(sf `E.InnerJoin` f) -> E.distinctOnOrderBy [E.asc $ f E.^. FileTitle] $ do - E.on (f E.^. FileId E.==. sf E.^. SubmissionFileFileId) - E.where_ $ sf E.^. SubmissionFileSubmissionId E.==. E.val submissionID - E.where_ . E.not_ $ sf E.^. SubmissionFileIsDeletion - E.orderBy [E.desc $ sf E.^. SubmissionFileIsUpdate] - return f postSubmissionDownloadMultiArchiveR :: Handler TypedContent postSubmissionDownloadMultiArchiveR = do