From 90e4a620f0c1671ff332db1910c176e58ccbac06 Mon Sep 17 00:00:00 2001 From: ros Date: Mon, 31 May 2021 16:23:51 +0200 Subject: [PATCH 01/16] feat(course material): first two filters --- .../courses/material/de-de-formal.msg | 2 ++ .../categories/courses/material/en-eu.msg | 2 ++ src/Application.hs | 8 ++++++ src/Handler/Material.hs | 25 +++++++++++++------ test/Database/Fill.hs | 18 +++++++++++++ 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/messages/uniworx/categories/courses/material/de-de-formal.msg b/messages/uniworx/categories/courses/material/de-de-formal.msg index 63311eb1d..e8fe8430c 100644 --- a/messages/uniworx/categories/courses/material/de-de-formal.msg +++ b/messages/uniworx/categories/courses/material/de-de-formal.msg @@ -30,3 +30,5 @@ MaterialVideoDownload: Herunterladen MaterialFree: Kursmaterialien ohne Anmeldung zugänglich AccessibleSince: Verfügbar seit VisibleFrom: Veröffentlicht +FilterMaterialNameSearch !ident-ok: Name +FilterMaterialTypeAndDescriptionSearch: Art oder Beschreibung \ No newline at end of file diff --git a/messages/uniworx/categories/courses/material/en-eu.msg b/messages/uniworx/categories/courses/material/en-eu.msg index 8c2b0c202..4cc59f300 100644 --- a/messages/uniworx/categories/courses/material/en-eu.msg +++ b/messages/uniworx/categories/courses/material/en-eu.msg @@ -30,3 +30,5 @@ MaterialVideoDownload: Download MaterialFree: Course material is publicly available. AccessibleSince: Accessible since VisibleFrom: Published +FilterMaterialNameSearch !ident-ok: Name +FilterMaterialTypeAndDescriptionSearch: Type or description \ No newline at end of file diff --git a/src/Application.hs b/src/Application.hs index 0c0fcbbd5..9d5e8ebce 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -710,3 +710,11 @@ addPWEntry User{ userAuthentication = _, ..} (Text.encodeUtf8 -> pw) = db' $ do PWHashConf{..} <- getsYesod $ view _appAuthPWHash (AuthPWHash . Text.decodeUtf8 -> userAuthentication) <- liftIO $ makePasswordWith pwHashAlgorithm pw pwHashStrength void $ insert User{..} + + + + + + + + diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 2e0e961b5..a09ea741a 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -102,17 +102,17 @@ getMaterialListR tid ssh csh = do & forceFilter "may-access" (Any True) dbTableWidget' psValidator DBTable { dbtIdent = "material-list" :: Text - , dbtStyle = def + , dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout } , dbtParams = def - , dbtSQLQuery = \material -> do + , dbtSQLQuery = \material -> do E.where_ $ material E.^. MaterialCourse E.==. E.val cid let filesNum :: E.SqlExpr (E.Value Int64) filesNum = E.subSelectCount . E.from $ \materialFile -> E.where_ $ materialFile E.^. MaterialFileMaterial E.==. material E.^. MaterialId return (material, filesNum) , dbtRowKey = (E.^. MaterialId) - , dbtProj = dbtProjFilteredPostId - , dbtColonnade = widgetColonnade $ mconcat + , dbtProj = dbtProjFilteredPostId + , dbtColonnade = widgetColonnade $ mconcat [ -- dbRow, sortable (Just "type") (i18nCell MsgMaterialType) $ foldMap (textCell . CI.original) . materialType . row2material @@ -138,10 +138,21 @@ getMaterialListR tid ssh csh = do , ( "last-edit" , SortColumn (E.^. MaterialLastEdit) ) ] , dbtFilter = mconcat - [ singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr - -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool + [ (singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr + -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool) + , (singletonMap "searchName". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + Nothing -> E.val True :: E.SqlExpr (E.Value Bool) + Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) + , (singletonMap "searchTypeAndDescription". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + Nothing -> E.val True :: E.SqlExpr (E.Value Bool) + Just needle -> (E.castString (material E.^. MaterialType) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) + --E.||. (E.castString (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) + ) + ] - , dbtFilterUI = mempty + , dbtFilterUI = \mPrev -> mconcat $ catMaybes + [ Just $ prismAForm (singletonFilter "searchName") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch) + , Just $ prismAForm (singletonFilter "searchTypeAndDescription") mPrev $ aopt textField (fslI MsgFilterMaterialTypeAndDescriptionSearch) ] , dbtCsvEncode = noCsvEncode , dbtCsvDecode = Nothing , dbtExtraReps = [] diff --git a/test/Database/Fill.hs b/test/Database/Fill.hs index 5d8755b7b..b97ed31e3 100644 --- a/test/Database/Fill.hs +++ b/test/Database/Fill.hs @@ -730,6 +730,24 @@ fillDb = do } , examStaff = Just "Hofmann" } + _ <- insert' Material + { materialCourse = ffp + , materialName = "Material 1" + , materialType = Just "Typ 1" + , materialDescription = Just $ htmlToStoredMarkup [shamlet|Folien für die Zentralübung|] + , materialVisibleFrom = Just now + , materialLastEdit = now + } + + _ <- insert' Material + { materialCourse = ffp + , materialName = "Material 2" + , materialType = Just "Typ 2" + , materialDescription = Just $ htmlToStoredMarkup [shamlet|Videos für die Vorlesung|] + , materialVisibleFrom = Just now + , materialLastEdit = now + } + void . insertMany $ map (\u -> ExamRegistration examFFP u Nothing now) [ fhamann , maxMuster From 89e9887fe1112cbc21517e4b501ead33f5a969ba Mon Sep 17 00:00:00 2001 From: ros Date: Sun, 6 Jun 2021 11:22:13 +0200 Subject: [PATCH 02/16] feat(course material): materialDescription in progress --- src/Application.hs | 5 ----- src/Handler/Material.hs | 5 +---- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/Application.hs b/src/Application.hs index 9d5e8ebce..29eb69e05 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -713,8 +713,3 @@ addPWEntry User{ userAuthentication = _, ..} (Text.encodeUtf8 -> pw) = db' $ do - - - - - diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index a09ea741a..226fbd28d 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -146,9 +146,7 @@ getMaterialListR tid ssh csh = do , (singletonMap "searchTypeAndDescription". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.castString (material E.^. MaterialType) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) - --E.||. (E.castString (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) - ) - + E.||. (E.castString (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) ] , dbtFilterUI = \mPrev -> mconcat $ catMaybes [ Just $ prismAForm (singletonFilter "searchName") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch) @@ -400,4 +398,3 @@ getMArchiveR tid ssh csh mnm = do let getMatQuery = materialArchiveSource tid ssh csh mnm serveSomeFiles archiveName getMatQuery - From 3a9622dfb8474d9f3764f5870197e317a96d9de3 Mon Sep 17 00:00:00 2001 From: ros Date: Fri, 11 Jun 2021 16:04:01 +0200 Subject: [PATCH 03/16] feat(course material): materialdescription search implemented --- src/Application.hs | 5 +---- src/Handler/Material.hs | 3 ++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Application.hs b/src/Application.hs index 29eb69e05..001d87096 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -709,7 +709,4 @@ addPWEntry :: User addPWEntry User{ userAuthentication = _, ..} (Text.encodeUtf8 -> pw) = db' $ do PWHashConf{..} <- getsYesod $ view _appAuthPWHash (AuthPWHash . Text.decodeUtf8 -> userAuthentication) <- liftIO $ makePasswordWith pwHashAlgorithm pw pwHashStrength - void $ insert User{..} - - - + void $ insert User{..} \ No newline at end of file diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 226fbd28d..147c79344 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -18,6 +18,7 @@ import qualified Data.CaseInsensitive as CI -- import qualified Data.Text.Encoding as Text import qualified Database.Esqueleto.Legacy as E +import qualified Database.Esqueleto.Utils as E import Utils.Form import Handler.Utils @@ -146,7 +147,7 @@ getMaterialListR tid ssh csh = do , (singletonMap "searchTypeAndDescription". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.castString (material E.^. MaterialType) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) - E.||. (E.castString (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) + E.||. (E.maybe (E.val mempty) (E.castString.esqueletoMarkupOutput) (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) ] , dbtFilterUI = \mPrev -> mconcat $ catMaybes [ Just $ prismAForm (singletonFilter "searchName") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch) From decdda359d16cce429a7e7a07d4674840e5fe6af Mon Sep 17 00:00:00 2001 From: ros Date: Mon, 21 Jun 2021 15:18:45 +0200 Subject: [PATCH 04/16] =?UTF-8?q?feat(course=20material):=20auto=20vorschl?= =?UTF-8?q?=C3=A4ge=20f=C3=BCr=20materialtype?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Application.hs | 6 +++++- src/Handler/Material.hs | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Application.hs b/src/Application.hs index 001d87096..d9a64a0f9 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -709,4 +709,8 @@ addPWEntry :: User addPWEntry User{ userAuthentication = _, ..} (Text.encodeUtf8 -> pw) = db' $ do PWHashConf{..} <- getsYesod $ view _appAuthPWHash (AuthPWHash . Text.decodeUtf8 -> userAuthentication) <- liftIO $ makePasswordWith pwHashAlgorithm pw pwHashStrength - void $ insert User{..} \ No newline at end of file + void $ insert User{..} + + + + diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 147c79344..88e496565 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -81,6 +81,16 @@ fetchMaterial tid ssh csh mnm = getMaterialListR :: TermId -> SchoolId -> CourseShorthand -> Handler Html getMaterialListR tid ssh csh = do + cid <- runDB . getKeyBy404 $ TermSchoolCourseShort tid ssh csh + let typeOptions :: HandlerFor UniWorX (OptionList Text) + typeOptions = do + previouslyUsed <- runDB $ + E.select $ E.from $ \material -> + E.distinctOnOrderBy [E.asc $ material E.^. MaterialType] $ do + E.where_ $ material E.^. MaterialCourse E.==. E.val cid + E.&&. E.not_ (E.isNothing $ material E.^. MaterialType) + return $ material E.^. MaterialType + return . mkOptionList $ map (\t -> Option t t t) (map CI.original (Set.toAscList (Set.fromList (mapMaybe E.unValue previouslyUsed)))) let matLink :: MaterialName -> Route UniWorX matLink = CourseR tid ssh csh . flip MaterialR MShowR @@ -97,7 +107,7 @@ getMaterialListR tid ssh csh = do seeAllModificationTimestamps <- hasWriteAccessTo $ CourseR tid ssh csh MaterialNewR -- ordinary users should not see modification dates older than visibility MsgRenderer mr <- getMsgRenderer table <- runDB $ do - cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh + --cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh let row2material = view $ _dbrOutput . _1 . _entityVal psValidator = def & defaultSorting [SortDescBy "last-edit"] & forceFilter "may-access" (Any True) @@ -151,7 +161,7 @@ getMaterialListR tid ssh csh = do ] , dbtFilterUI = \mPrev -> mconcat $ catMaybes [ Just $ prismAForm (singletonFilter "searchName") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch) - , Just $ prismAForm (singletonFilter "searchTypeAndDescription") mPrev $ aopt textField (fslI MsgFilterMaterialTypeAndDescriptionSearch) ] + , Just $ prismAForm (singletonFilter "searchTypeAndDescription") mPrev $ aopt (textField & addDatalist typeOptions) (fslI MsgFilterMaterialTypeAndDescriptionSearch)] , dbtCsvEncode = noCsvEncode , dbtCsvDecode = Nothing , dbtExtraReps = [] From d8b1f9788c74ea5d7dc4f1f45432649d9601106a Mon Sep 17 00:00:00 2001 From: ros Date: Mon, 21 Jun 2021 16:00:55 +0200 Subject: [PATCH 05/16] feat(course material): small empty-bug fixed --- src/Application.hs | 1 + src/Handler/Material.hs | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Application.hs b/src/Application.hs index d9a64a0f9..d1d7195f2 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -714,3 +714,4 @@ addPWEntry User{ userAuthentication = _, ..} (Text.encodeUtf8 -> pw) = db' $ do + diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 88e496565..ad378b383 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -107,7 +107,6 @@ getMaterialListR tid ssh csh = do seeAllModificationTimestamps <- hasWriteAccessTo $ CourseR tid ssh csh MaterialNewR -- ordinary users should not see modification dates older than visibility MsgRenderer mr <- getMsgRenderer table <- runDB $ do - --cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh let row2material = view $ _dbrOutput . _1 . _entityVal psValidator = def & defaultSorting [SortDescBy "last-edit"] & forceFilter "may-access" (Any True) @@ -156,7 +155,7 @@ getMaterialListR tid ssh csh = do Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) , (singletonMap "searchTypeAndDescription". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) - Just needle -> (E.castString (material E.^. MaterialType) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) + Just needle -> (E.maybe (E.val mempty) E.castString (material E.^. MaterialType) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) E.||. (E.maybe (E.val mempty) (E.castString.esqueletoMarkupOutput) (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) ] , dbtFilterUI = \mPrev -> mconcat $ catMaybes From 95d1b41c606a2abb4f09a9c7499119d9d108ba91 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Mon, 21 Jun 2021 14:06:34 +0000 Subject: [PATCH 06/16] Apply 1 suggestion(s) to 1 file(s) --- src/Handler/Material.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index ad378b383..55c9ced2c 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -90,7 +90,7 @@ getMaterialListR tid ssh csh = do E.where_ $ material E.^. MaterialCourse E.==. E.val cid E.&&. E.not_ (E.isNothing $ material E.^. MaterialType) return $ material E.^. MaterialType - return . mkOptionList $ map (\t -> Option t t t) (map CI.original (Set.toAscList (Set.fromList (mapMaybe E.unValue previouslyUsed)))) + return . mkOptionList . map (\(CI.original -> t) -> Option t t t) . Set.toAscList . Set.fromList $ mapMaybe E.unValue previouslyUsed let matLink :: MaterialName -> Route UniWorX matLink = CourseR tid ssh csh . flip MaterialR MShowR From a7b41e9cc89f794ecaadb0c4d52207c773467b78 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Mon, 21 Jun 2021 14:07:01 +0000 Subject: [PATCH 07/16] Apply 1 suggestion(s) to 1 file(s) --- src/Handler/Material.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 55c9ced2c..a803b5f8d 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -148,8 +148,8 @@ getMaterialListR tid ssh csh = do , ( "last-edit" , SortColumn (E.^. MaterialLastEdit) ) ] , dbtFilter = mconcat - [ (singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr - -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool) + [ singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr + -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool , (singletonMap "searchName". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) From 08ec676616814809d7b0a30933e6e73391ac3037 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Mon, 21 Jun 2021 14:07:28 +0000 Subject: [PATCH 08/16] Apply 1 suggestion(s) to 1 file(s) --- src/Handler/Material.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index a803b5f8d..81aa47187 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -150,7 +150,7 @@ getMaterialListR tid ssh csh = do , dbtFilter = mconcat [ singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool - , (singletonMap "searchName". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + , (singletonMap "searchName" . FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) , (singletonMap "searchTypeAndDescription". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of From c09acbbf8a7b95176b3d52449b3b9d26e315ccd6 Mon Sep 17 00:00:00 2001 From: ros Date: Mon, 21 Jun 2021 16:17:52 +0200 Subject: [PATCH 09/16] =?UTF-8?q?feat(course=20material):=20runDB=20f?= =?UTF-8?q?=C3=BCr=20cid=20nur=20einmal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Application.hs | 7 +------ src/Handler/Material.hs | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/Application.hs b/src/Application.hs index d1d7195f2..001d87096 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -709,9 +709,4 @@ addPWEntry :: User addPWEntry User{ userAuthentication = _, ..} (Text.encodeUtf8 -> pw) = db' $ do PWHashConf{..} <- getsYesod $ view _appAuthPWHash (AuthPWHash . Text.decodeUtf8 -> userAuthentication) <- liftIO $ makePasswordWith pwHashAlgorithm pw pwHashStrength - void $ insert User{..} - - - - - + void $ insert User{..} \ No newline at end of file diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 81aa47187..5f095626a 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -81,16 +81,6 @@ fetchMaterial tid ssh csh mnm = getMaterialListR :: TermId -> SchoolId -> CourseShorthand -> Handler Html getMaterialListR tid ssh csh = do - cid <- runDB . getKeyBy404 $ TermSchoolCourseShort tid ssh csh - let typeOptions :: HandlerFor UniWorX (OptionList Text) - typeOptions = do - previouslyUsed <- runDB $ - E.select $ E.from $ \material -> - E.distinctOnOrderBy [E.asc $ material E.^. MaterialType] $ do - E.where_ $ material E.^. MaterialCourse E.==. E.val cid - E.&&. E.not_ (E.isNothing $ material E.^. MaterialType) - return $ material E.^. MaterialType - return . mkOptionList . map (\(CI.original -> t) -> Option t t t) . Set.toAscList . Set.fromList $ mapMaybe E.unValue previouslyUsed let matLink :: MaterialName -> Route UniWorX matLink = CourseR tid ssh csh . flip MaterialR MShowR @@ -107,6 +97,16 @@ getMaterialListR tid ssh csh = do seeAllModificationTimestamps <- hasWriteAccessTo $ CourseR tid ssh csh MaterialNewR -- ordinary users should not see modification dates older than visibility MsgRenderer mr <- getMsgRenderer table <- runDB $ do + cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh + let typeOptions :: HandlerFor UniWorX (OptionList Text) + typeOptions = do + previouslyUsed <- runDB $ + E.select $ E.from $ \material -> + E.distinctOnOrderBy [E.asc $ material E.^. MaterialType] $ do + E.where_ $ material E.^. MaterialCourse E.==. E.val cid + E.&&. E.not_ (E.isNothing $ material E.^. MaterialType) + return $ material E.^. MaterialType + return . mkOptionList $ map (\t -> Option t t t) (map CI.original (Set.toAscList (Set.fromList (mapMaybe E.unValue previouslyUsed)))) let row2material = view $ _dbrOutput . _1 . _entityVal psValidator = def & defaultSorting [SortDescBy "last-edit"] & forceFilter "may-access" (Any True) @@ -148,9 +148,9 @@ getMaterialListR tid ssh csh = do , ( "last-edit" , SortColumn (E.^. MaterialLastEdit) ) ] , dbtFilter = mconcat - [ singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr - -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool - , (singletonMap "searchName" . FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + [ (singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr + -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool) + , (singletonMap "searchName". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) , (singletonMap "searchTypeAndDescription". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of From bee8f84eb3528286349bef4b9ea23f1c6240e1d1 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Fri, 25 Jun 2021 12:22:22 +0000 Subject: [PATCH 10/16] Apply 1 suggestion(s) to 1 file(s) --- src/Handler/Material.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 5f095626a..84d3a142c 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -159,7 +159,7 @@ getMaterialListR tid ssh csh = do E.||. (E.maybe (E.val mempty) (E.castString.esqueletoMarkupOutput) (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) ] , dbtFilterUI = \mPrev -> mconcat $ catMaybes - [ Just $ prismAForm (singletonFilter "searchName") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch) + [ Just $ prismAForm (singletonFilter "name") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch) , Just $ prismAForm (singletonFilter "searchTypeAndDescription") mPrev $ aopt (textField & addDatalist typeOptions) (fslI MsgFilterMaterialTypeAndDescriptionSearch)] , dbtCsvEncode = noCsvEncode , dbtCsvDecode = Nothing From 363762081ebd7e5f854ba7966c5d0398ffaf310b Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Fri, 25 Jun 2021 12:22:29 +0000 Subject: [PATCH 11/16] Apply 1 suggestion(s) to 1 file(s) --- src/Handler/Material.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 84d3a142c..dfe10d2d9 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -160,7 +160,7 @@ getMaterialListR tid ssh csh = do ] , dbtFilterUI = \mPrev -> mconcat $ catMaybes [ Just $ prismAForm (singletonFilter "name") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch) - , Just $ prismAForm (singletonFilter "searchTypeAndDescription") mPrev $ aopt (textField & addDatalist typeOptions) (fslI MsgFilterMaterialTypeAndDescriptionSearch)] + , Just $ prismAForm (singletonFilter "type-and-description") mPrev $ aopt (textField & addDatalist typeOptions) (fslI MsgFilterMaterialTypeAndDescriptionSearch)] , dbtCsvEncode = noCsvEncode , dbtCsvDecode = Nothing , dbtExtraReps = [] From bc09bedb84787a22feec2f310aa77e8d27bc4996 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Fri, 25 Jun 2021 12:23:09 +0000 Subject: [PATCH 12/16] Apply 1 suggestion(s) to 1 file(s) --- src/Handler/Material.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index dfe10d2d9..0b6fcc9cf 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -153,7 +153,7 @@ getMaterialListR tid ssh csh = do , (singletonMap "searchName". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) - , (singletonMap "searchTypeAndDescription". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + , (singletonMap "type-and-description". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.maybe (E.val mempty) E.castString (material E.^. MaterialType) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) E.||. (E.maybe (E.val mempty) (E.castString.esqueletoMarkupOutput) (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) From 617eb7ff948b47b65c6e153c3e581926fd56880b Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Fri, 25 Jun 2021 12:23:16 +0000 Subject: [PATCH 13/16] Apply 1 suggestion(s) to 1 file(s) --- src/Handler/Material.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 0b6fcc9cf..0a8edb3a7 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -150,7 +150,7 @@ getMaterialListR tid ssh csh = do , dbtFilter = mconcat [ (singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool) - , (singletonMap "searchName". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + , (singletonMap "name". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) , (singletonMap "type-and-description". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of From d1cdb0d1da792ee593ad2167d319dd232e43bcc9 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 25 Jun 2021 12:25:25 +0000 Subject: [PATCH 14/16] Apply 1 suggestion(s) to 1 file(s) --- messages/uniworx/categories/courses/material/de-de-formal.msg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/messages/uniworx/categories/courses/material/de-de-formal.msg b/messages/uniworx/categories/courses/material/de-de-formal.msg index e8fe8430c..7d3ab8df6 100644 --- a/messages/uniworx/categories/courses/material/de-de-formal.msg +++ b/messages/uniworx/categories/courses/material/de-de-formal.msg @@ -31,4 +31,4 @@ MaterialFree: Kursmaterialien ohne Anmeldung zugänglich AccessibleSince: Verfügbar seit VisibleFrom: Veröffentlicht FilterMaterialNameSearch !ident-ok: Name -FilterMaterialTypeAndDescriptionSearch: Art oder Beschreibung \ No newline at end of file +FilterMaterialTypeAndDescriptionSearch: Art und Beschreibung \ No newline at end of file From 86234e9624675a8a4a650f31a2316ee171853dd5 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 25 Jun 2021 12:25:32 +0000 Subject: [PATCH 15/16] Apply 1 suggestion(s) to 1 file(s) --- messages/uniworx/categories/courses/material/en-eu.msg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/messages/uniworx/categories/courses/material/en-eu.msg b/messages/uniworx/categories/courses/material/en-eu.msg index 4cc59f300..55d202c82 100644 --- a/messages/uniworx/categories/courses/material/en-eu.msg +++ b/messages/uniworx/categories/courses/material/en-eu.msg @@ -31,4 +31,4 @@ MaterialFree: Course material is publicly available. AccessibleSince: Accessible since VisibleFrom: Published FilterMaterialNameSearch !ident-ok: Name -FilterMaterialTypeAndDescriptionSearch: Type or description \ No newline at end of file +FilterMaterialTypeAndDescriptionSearch: Type and description \ No newline at end of file From dc5fc3f710363f0644c43866505e32095b41ce92 Mon Sep 17 00:00:00 2001 From: ros Date: Fri, 25 Jun 2021 14:47:25 +0200 Subject: [PATCH 16/16] feat(course material): merge-request suggestions --- .../categories/courses/material/de-de-formal.msg | 2 +- .../uniworx/categories/courses/material/en-eu.msg | 2 +- src/Handler/Material.hs | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/messages/uniworx/categories/courses/material/de-de-formal.msg b/messages/uniworx/categories/courses/material/de-de-formal.msg index 7d3ab8df6..6e244f71c 100644 --- a/messages/uniworx/categories/courses/material/de-de-formal.msg +++ b/messages/uniworx/categories/courses/material/de-de-formal.msg @@ -31,4 +31,4 @@ MaterialFree: Kursmaterialien ohne Anmeldung zugänglich AccessibleSince: Verfügbar seit VisibleFrom: Veröffentlicht FilterMaterialNameSearch !ident-ok: Name -FilterMaterialTypeAndDescriptionSearch: Art und Beschreibung \ No newline at end of file +FilterMaterialTypeAndDescriptionSearch: Art/Beschreibung \ No newline at end of file diff --git a/messages/uniworx/categories/courses/material/en-eu.msg b/messages/uniworx/categories/courses/material/en-eu.msg index 55d202c82..4fa16fd7e 100644 --- a/messages/uniworx/categories/courses/material/en-eu.msg +++ b/messages/uniworx/categories/courses/material/en-eu.msg @@ -31,4 +31,4 @@ MaterialFree: Course material is publicly available. AccessibleSince: Accessible since VisibleFrom: Published FilterMaterialNameSearch !ident-ok: Name -FilterMaterialTypeAndDescriptionSearch: Type and description \ No newline at end of file +FilterMaterialTypeAndDescriptionSearch: Type/description \ No newline at end of file diff --git a/src/Handler/Material.hs b/src/Handler/Material.hs index 0a8edb3a7..31336fe1c 100644 --- a/src/Handler/Material.hs +++ b/src/Handler/Material.hs @@ -106,7 +106,7 @@ getMaterialListR tid ssh csh = do E.where_ $ material E.^. MaterialCourse E.==. E.val cid E.&&. E.not_ (E.isNothing $ material E.^. MaterialType) return $ material E.^. MaterialType - return . mkOptionList $ map (\t -> Option t t t) (map CI.original (Set.toAscList (Set.fromList (mapMaybe E.unValue previouslyUsed)))) + return . mkOptionList . map (\(CI.original -> t) -> Option t t t) . Set.toAscList . Set.fromList $ mapMaybe E.unValue previouslyUsed let row2material = view $ _dbrOutput . _1 . _entityVal psValidator = def & defaultSorting [SortDescBy "last-edit"] & forceFilter "may-access" (Any True) @@ -148,15 +148,15 @@ getMaterialListR tid ssh csh = do , ( "last-edit" , SortColumn (E.^. MaterialLastEdit) ) ] , dbtFilter = mconcat - [ (singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr - -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool) - , (singletonMap "name". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + [ singletonMap "may-access" . mkFilterProjectedPost $ \(Any b) dbr + -> (== b) <$> hasReadAccessTo (matLink . materialName $ row2material dbr) :: DB Bool + , singletonMap "name". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) - Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) - , (singletonMap "type-and-description". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of + Just needle -> (E.castString (material E.^. MaterialName) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) + , singletonMap "type-and-description". FilterColumn $ \material criterion -> case getLast (criterion :: Last Text) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> (E.maybe (E.val mempty) E.castString (material E.^. MaterialType) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) - E.||. (E.maybe (E.val mempty) (E.castString.esqueletoMarkupOutput) (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%))) + E.||. (E.maybe (E.val mempty) (E.castString.esqueletoMarkupOutput) (material E.^. MaterialDescription) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) ] , dbtFilterUI = \mPrev -> mconcat $ catMaybes [ Just $ prismAForm (singletonFilter "name") mPrev $ aopt textField (fslI MsgFilterMaterialNameSearch)