diff --git a/src/Handler/Utils/ExamOffice/Exam.hs b/src/Handler/Utils/ExamOffice/Exam.hs index 9d8d1b50c..e9f903471 100644 --- a/src/Handler/Utils/ExamOffice/Exam.hs +++ b/src/Handler/Utils/ExamOffice/Exam.hs @@ -34,7 +34,7 @@ resultIsSynced authId examResult = (hasSchool E.&&. allSchools) E.||. (E.not_ ha examOfficeExamResultAuth :: E.SqlExpr (E.Value UserId) -- ^ office -> E.SqlExpr (Entity ExamResult) -> E.SqlExpr (E.Value Bool) -examOfficeExamResultAuth authId examResult = authByUser E.||. authByField E.||. authBySchool +examOfficeExamResultAuth authId examResult = authByUser E.||. authByField E.||. authBySchool E.||. authByExtraSchool where cId = E.subSelectForeign examResult ExamResultExam (\exam -> E.subSelectForeign exam ExamCourse (E.^. CourseId)) @@ -67,3 +67,9 @@ examOfficeExamResultAuth authId examResult = authByUser E.||. authByField E.||. E.on $ course E.^. CourseSchool E.==. userFunction E.^. UserFunctionSchool E.&&. userFunction E.^. UserFunctionFunction E.==. E.val SchoolExamOffice E.where_ $ userFunction E.^. UserFunctionUser E.==. authId + + authByExtraSchool = E.exists . E.from $ \(userFunction `E.InnerJoin` examSchool) -> do + E.on $ userFunction E.^. UserFunctionFunction E.==. E.val SchoolExamOffice + E.&&. userFunction E.^. UserFunctionSchool E.==. examSchool E.^. ExamOfficeSchoolSchool + E.where_ $ examSchool E.^. ExamOfficeSchoolExam E.==. examResult E.^. ExamResultExam + E.where_ $ userFunction E.^. UserFunctionUser E.==. authId