diff --git a/src/Handler/Sheet.hs b/src/Handler/Sheet.hs index e6e4069e6..0afefdeed 100644 --- a/src/Handler/Sheet.hs +++ b/src/Handler/Sheet.hs @@ -1,5 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE OverloadedLists #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE QuasiQuotes #-} @@ -176,17 +177,50 @@ getSheetShowR tid csh shn = do entSheet <- runDB $ fetchSheet tid csh shn let sheet = entityVal entSheet sid = entityKey entSheet - -- - fileNameTypes <- runDB $ E.select $ E.from $ - \(sheet `E.InnerJoin` sheetFile `E.InnerJoin` file) -> do - -- Restrict to consistent rows that correspond to each other - E.on (file E.^. FileId E.==. sheetFile E.^. SheetFileFile) - E.on (sheetFile E.^. SheetFileSheet E.==. sheet E.^. SheetId) - -- filter to requested file - E.where_ (sheet E.^. SheetId E.==. E.val sid ) - -- return desired columns - return $ (file E.^. FileTitle, file E.^. FileModified, sheetFile E.^. SheetFileType) - let fileLinks = map (\(E.Value fName, E.Value modified, E.Value fType) -> (CSheetR tid csh (SheetFileR shn fType fName),modified)) fileNameTypes + -- without Colonnade +-- fileNameTypes <- runDB $ E.select $ E.from $ +-- \(sheet `E.InnerJoin` sheetFile `E.InnerJoin` file) -> do +-- -- Restrict to consistent rows that correspond to each other +-- E.on (file E.^. FileId E.==. sheetFile E.^. SheetFileFile) +-- E.on (sheetFile E.^. SheetFileSheet E.==. sheet E.^. SheetId) +-- -- filter to requested file +-- E.where_ (sheet E.^. SheetId E.==. E.val sid ) +-- -- return desired columns +-- return $ (file E.^. FileTitle, file E.^. FileModified, sheetFile E.^. SheetFileType) +-- let fileLinks = map (\(E.Value fName, E.Value modified, E.Value fType) -> (CSheetR tid csh (SheetFileR shn fType fName),modified)) fileNameTypes + -- with Colonnade + + let fileData (sheet `E.InnerJoin` sheetFile `E.InnerJoin` file) = do + -- Restrict to consistent rows that correspond to each other + E.on (file E.^. FileId E.==. sheetFile E.^. SheetFileFile) + E.on (sheetFile E.^. SheetFileSheet E.==. sheet E.^. SheetId) + -- filter to requested file + E.where_ $ sheet E.^. SheetId E.==. E.val sid + E.&&. E.not_ (E.isNothing $ file E.^. FileContent) + -- return desired columns + return $ (file E.^. FileTitle, file E.^. FileModified, sheetFile E.^. SheetFileType) + let colonnadeFiles = mconcat + [ sortable (Just "type") "Typ" $ \(_,_, E.Value ftype) -> textCell $ toPathPiece ftype + , sortable (Just "path") "Dateiname" $ anchorCell (\(E.Value fName,_,E.Value fType) -> CSheetR tid csh (SheetFileR shn fType fName)) + (\(E.Value fName,_,_) -> str2widget fName) + , sortable (Just "time") "Modifikation" $ \(_,E.Value modified,_) -> stringCell $ formatTimeGerWDT modified + ] + fileTable <- dbTable def $ DBTable + { dbtSQLQuery = fileData + , dbtColonnade = colonnadeFiles + , dbtAttrs = tableDefault + , dbtIdent = "files" :: Text + , dbtSorting = [ ( "type" + , SortColumn $ \(sheet `E.InnerJoin` sheetFile `E.InnerJoin` file) -> sheetFile E.^. SheetFileType + ) + , ( "path" + , SortColumn $ \(sheet `E.InnerJoin` sheetFile `E.InnerJoin` file) -> file E.^. FileTitle + ) + , ( "time" + , SortColumn $ \(sheet `E.InnerJoin` sheetFile `E.InnerJoin` file) -> file E.^. FileModified + ) + ] + } defaultLayout $ do setTitle $ toHtml $ T.append "Übung " $ sheetName sheet $(widgetFile "sheetShow") diff --git a/templates/sheetShow.hamlet b/templates/sheetShow.hamlet index b2a2fd16d..1ee760dff 100644 --- a/templates/sheetShow.hamlet +++ b/templates/sheetShow.hamlet @@ -25,16 +25,6 @@