diff --git a/src/Handler/Course.hs b/src/Handler/Course.hs index 7e4ffb532..e6b8afeae 100644 --- a/src/Handler/Course.hs +++ b/src/Handler/Course.hs @@ -163,11 +163,11 @@ makeCourseTable whereClause colChoices psValidator = do return (course, participants, registered, school) lecturerQuery cid (user `E.InnerJoin` lecturer) = do E.on $ user E.^. UserId E.==. lecturer E.^. LecturerUser - E.where_ $ E.val cid E.==. lecturer E.^. LecturerCourse + E.where_ $ cid E.==. lecturer E.^. LecturerCourse return user dbtProj :: DBRow _ -> MaybeT (ReaderT SqlBackend (HandlerT UniWorX IO)) CourseTableData dbtProj = traverse $ \(course, E.Value participants, E.Value registered, school) -> do - lecturerList <- lift $ E.select $ E.from $ lecturerQuery $ entityKey course + lecturerList <- lift $ E.select $ E.from $ lecturerQuery $ E.val $ entityKey course return (course, participants, registered, school, lecturerList) snd <$> dbTable psValidator DBTable { dbtSQLQuery @@ -204,12 +204,18 @@ makeCourseTable whereClause colChoices psValidator = do -- ) , ( "school", FilterColumn $ \(_course `E.InnerJoin` school :: CourseTableExpr) -> emptyOrIn $ school E.^. SchoolId -- TODO: Refactor all?! - -- mkExactFilter $ $(sqlIJProj 2 2) >>> (E.^. SchoolId) + -- E.mkExactFilter $ $(sqlIJproj 2 2) >>> (E.^. SchoolId) ) , ( "schoolshort", FilterColumn $ \(_course `E.InnerJoin` school :: CourseTableExpr) criterias -> if | Set.null criterias -> E.val True :: E.SqlExpr (E.Value Bool) | otherwise -> school E.^. SchoolShorthand `E.in_` E.valList (Set.toList criterias) ) + , ( "lecturer", FilterColumn $ \(course `E.InnerJoin` _school :: CourseTableExpr) criterias -> if + | Set.null criterias -> E.val True :: E.SqlExpr (E.Value Bool) + | otherwise -> E.exists $ E.from $ \t -> do + user <- lecturerQuery (course E.^. CourseId) t + E.where_ $ E.any (E.hasInfix (user E.^. UserSurname) . E.val) (criterias :: Set.Set Text) + ) , ( "registered", FilterColumn $ \tExpr criterion -> case getLast (criterion :: Last Bool) of Nothing -> E.val True :: E.SqlExpr (E.Value Bool) Just needle -> course2Registered muid tExpr E.==. E.val needle @@ -224,6 +230,7 @@ makeCourseTable whereClause colChoices psValidator = do , dbtFilterUI = \mPrev -> mconcat $ catMaybes [ Just $ prismAForm (singletonFilter "term" . maybePrism _PathPiece) mPrev $ aopt (hoistField lift termField) (fslI MsgTerm) , Just $ prismAForm (singletonFilter "schoolshort" . maybePrism (_PathPiece . from _SchoolId)) mPrev $ aopt (hoistField lift schoolField) (fslI MsgCourseSchool) + , Just $ prismAForm (singletonFilter "lecturer") mPrev $ aopt textField (fslI MsgCourseLecturer) , Just $ prismAForm (singletonFilter "search") mPrev $ aopt textField (fslI MsgCourseFilterSearch) , muid $> prismAForm (singletonFilter "registered" . maybePrism _PathPiece) mPrev (aopt boolField (fslI MsgCourseFilterRegistered)) ]