feat(schedule): account for display default for exam occurrences
This commit is contained in:
parent
5e0737d1b1
commit
766397d114
@ -42,16 +42,18 @@ fetchExamOccurrences :: MonadHandler m => Maybe UserId -> AuthTagActive -> UTCTi
|
||||
fetchExamOccurrences muid ata now = E.select $ E.from $ \(course `E.InnerJoin` exam `E.InnerJoin` examOccurrence) -> do
|
||||
E.on $ course E.^. CourseId E.==. exam E.^. ExamCourse
|
||||
E.on $ exam E.^. ExamId E.==. examOccurrence E.^. ExamOccurrenceExam
|
||||
E.where_ $ isCourseLecturer muid ata (course E.^. CourseId)
|
||||
E.||. ( mayViewCourse muid ata now course Nothing -- do NOT remove, this is actually necessary here!
|
||||
-- (There can be exam participants that are
|
||||
-- not enrolled, me thinks)
|
||||
E.&&. E.maybe E.false (\visibleFrom -> visibleFrom E.<=. E.val now) (exam E.^. ExamVisibleFrom) -- is the exam visible?
|
||||
E.&&. E.maybe E.false (\publishOcc -> publishOcc E.<=. E.val now) (exam E.^. ExamPublishOccurrenceAssignments) -- are the exam occurrence assignments visible?
|
||||
E.&&. (E.exists $ E.from $ \examRegistration -> E.where_ $
|
||||
examRegistration E.^. ExamRegistrationExam E.==. exam E.^. ExamId
|
||||
E.&&. E.just (examRegistration E.^. ExamRegistrationUser) E.==. E.val muid
|
||||
E.&&. E.maybe E.true (\registrationOccurrence -> registrationOccurrence E.==. examOccurrence E.^. ExamOccurrenceId) (examRegistration E.^. ExamRegistrationOccurrence) -- if registered for a specific occurrence, get only this one, otherwise get every occurrence available
|
||||
E.where_ $ examOccurrenceShouldBeDisplayed muid course exam examOccurrence
|
||||
E.&&. ( isCourseLecturer muid ata (course E.^. CourseId)
|
||||
E.||. ( mayViewCourse muid ata now course Nothing -- do NOT remove, this is actually necessary here!
|
||||
-- (There can be exam participants that are
|
||||
-- not enrolled, me thinks)
|
||||
E.&&. E.maybe E.false (\visibleFrom -> visibleFrom E.<=. E.val now) (exam E.^. ExamVisibleFrom) -- is the exam visible?
|
||||
E.&&. E.maybe E.false (\publishOcc -> publishOcc E.<=. E.val now) (exam E.^. ExamPublishOccurrenceAssignments) -- are the exam occurrence assignments visible?
|
||||
E.&&. (E.exists $ E.from $ \examRegistration -> E.where_ $
|
||||
examRegistration E.^. ExamRegistrationExam E.==. exam E.^. ExamId
|
||||
E.&&. E.just (examRegistration E.^. ExamRegistrationUser) E.==. E.val muid
|
||||
E.&&. E.maybe E.true (\registrationOccurrence -> registrationOccurrence E.==. examOccurrence E.^. ExamOccurrenceId) (examRegistration E.^. ExamRegistrationOccurrence) -- if registered for a specific occurrence, get only this one, otherwise get every occurrence available
|
||||
)
|
||||
)
|
||||
)
|
||||
return (course, exam, examOccurrence)
|
||||
@ -74,3 +76,11 @@ tutorialShouldBeDisplayed (Just uid) _course _tutorial = E.exists . E.from $ \us
|
||||
user E.^. UserScheduleOccurrenceDisplayDefault
|
||||
)
|
||||
tutorialShouldBeDisplayed _ _ _ = E.false
|
||||
|
||||
examOccurrenceShouldBeDisplayed :: Maybe UserId -> E.SqlExpr (Entity Course) -> E.SqlExpr (Entity Exam) -> E.SqlExpr (Entity ExamOccurrence) -> E.SqlExpr (E.Value Bool)
|
||||
examOccurrenceShouldBeDisplayed (Just uid) _course _exam _examOcc = E.exists . E.from $ \user ->
|
||||
E.where_ $ user E.^. UserId E.==. E.val uid
|
||||
E.&&. ( -- TODO: also check whether there is a display opt-in/out for this course or exam or exam occurrence
|
||||
user E.^. UserScheduleOccurrenceDisplayDefault
|
||||
)
|
||||
examOccurrenceShouldBeDisplayed _ _ _ _ = E.false
|
||||
|
||||
Reference in New Issue
Block a user