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 = []