diff --git a/FragenSJ.txt b/FragenSJ.txt deleted file mode 100644 index 6ddd8de2b..000000000 --- a/FragenSJ.txt +++ /dev/null @@ -1,38 +0,0 @@ -** Sicherheitsabfragen? - - Verschlüsselung des Zugriffs? - - - SDelR tid csh sn : GET zeigt Sicherheitsabfrage - POST löscht. - Ist das so sinnvoll? - Sicherheitsabfrage als PopUpMessage? - - - Utils.getKeyBy404 effiziente Variante, welche nur den Key liefert? Esq? - (Sheet.hs -> fetchSheet) - - - Handler.Sheet.postSDelR: deleteCascade für Files? Klappt das? - Kann man abfragen, was bei deleteCascade alles gelöscht wird? - - - -** i18n: - - i18n der - Links -> MenuItems verwenden wie bisher - Page Titles -> setTitleI - Buttons? -> Kann leicht geändert werden! - Was ist mit einfachen Text Feldern, z.B. die Beschriftung von Knöpfen wie in Handler.Course.getTermCourseListR, Zeile 66 "pageActions" für menuItemLabel? - -** Page pageActions - Berechtigungen prüfen? - => Eigener Constructor statt NavbarLeft/Right?! - - -** FORMS - 3 - Sheets: Multiple Files -> wird später gemacht - - Versionen für Studenten/Korrektoren/Lecturers/Admins - -> ja über isAuthorizedDB siehe unten, - -> Lecturer kann gleich auf Edit-Seite gehen wie in UniWorX - - -Freischaltung von Teilen einer Webseite: - - Freigabe der Links über Authorisierung in der Foundation - - Anzeige der Links nach Authorisierung wie in menItemAccessCallback - - möglichst direkt isAuthorizedDB in einem runDB aufrufen!!! diff --git a/src/Database/Esqueleto/Utils.hs b/src/Database/Esqueleto/Utils.hs index f3aec73aa..701ce9616 100644 --- a/src/Database/Esqueleto/Utils.hs +++ b/src/Database/Esqueleto/Utils.hs @@ -7,6 +7,7 @@ module Database.Esqueleto.Utils , SqlIn(..) , mkExactFilter, mkContainsFilter , anyFilter + , inList ) where import ClassyPrelude.Yesod hiding (isInfixOf, any, all) @@ -99,4 +100,12 @@ anyFilter :: (Foldable f) => f (t -> Set.Set Text-> E.SqlExpr (E.Value Bool)) -> t -> Set.Set Text-> E.SqlExpr (E.Value Bool) anyFilter fltrs needle criterias = F.foldr aux false fltrs where - aux fltr acc = fltr needle criterias E.||. acc \ No newline at end of file + aux fltr acc = fltr needle criterias E.||. acc + +-- | Convenience for Sorting by a Column being element of a certain List +-- Does not work, may produce esqueleto error +-- `unsafeSqlBinOp: non-id/composite keys not expected here` somehow +inList :: (PersistField typ, PersistEntity val) + => EntityField val typ -> [typ] -> E.SqlExpr (Entity val) -> E.SqlExpr (E.Value Bool) +inList _column [] = const $ E.val True +inList column l = \row -> row E.^. column `E.in_` E.valList l diff --git a/src/Handler/Admin.hs b/src/Handler/Admin.hs index 067b17ccd..2322fb0a9 100644 --- a/src/Handler/Admin.hs +++ b/src/Handler/Admin.hs @@ -404,8 +404,8 @@ postAdminFeaturesR = do ] dbtSorting = Map.fromList [ ("key" , SortColumn (E.^. StudyTermsKey)) - , ("isnew" , SortColumn (\studyTerm -> studyTerm E.^. StudyTermsId `E.in_` E.valList (Set.toList newKeys))) - , ("isbad" , SortColumn (\studyTerm -> studyTerm E.^. StudyTermsId `E.in_` E.valList (Set.toList badKeys))) + , ("isnew" , SortColumn (StudyTermsKey `E.inList` (unStudyTermsKey <$> Set.toList newKeys))) + , ("isbad" , SortColumn (StudyTermsKey `E.inList` (unStudyTermsKey <$> Set.toList badKeys))) , ("name" , SortColumn (E.^. StudyTermsName)) , ("short" , SortColumn (E.^. StudyTermsShorthand)) ] @@ -413,7 +413,9 @@ postAdminFeaturesR = do dbtFilterUI = mempty dbtParams = def { dbParamsFormAction = Just . SomeRoute $ AdminFeaturesR :#: ("admin-studyterms-table-wrapper" :: Text) } - psValidator = def & defaultSorting [SortAscBy "name", SortAscBy "short", SortAscBy "key"] + psValidator = def + -- & defaultSorting [SortAscBy "name", SortAscBy "short", SortAscBy "key"] + & defaultSorting [SortDescBy "isbad", SortDescBy "isnew", SortAscBy "key"] in dbTable psValidator DBTable{..} mkCandidateTable =