diff --git a/src/Foundation/Authorization.hs b/src/Foundation/Authorization.hs index cd5f4be14..7fc4f1794 100644 --- a/src/Foundation/Authorization.hs +++ b/src/Foundation/Authorization.hs @@ -1505,7 +1505,8 @@ tagAccessPredicate AuthCapacity = APDB $ \_ _ _ route _ -> case route of eid <- $cachedHereBinary (cid, examn) . MaybeT . getKeyBy $ UniqueExam cid examn Entity occId ExamOccurrence{..} <- $cachedHereBinary (eid, occn) . MaybeT . getBy $ UniqueExamOccurrence eid occn registered <- $cachedHereBinary occId . lift $ fromIntegral <$> count [ ExamRegistrationOccurrence ==. Just occId, ExamRegistrationExam ==. eid ] - guard $ examOccurrenceCapacity > registered + -- Nothing means unlimited size + guard $ maybe True (> registered) examOccurrenceCapacity return Authorized CTutorialR tid ssh csh tutn _ -> maybeT (unauthorizedI MsgTutorialNoCapacity) $ do cid <- $cachedHereBinary (tid, ssh, csh) . MaybeT . getKeyBy $ TermSchoolCourseShort tid ssh csh diff --git a/src/Handler/Exam/Form.hs b/src/Handler/Exam/Form.hs index f4dfdbe08..876687260 100644 --- a/src/Handler/Exam/Form.hs +++ b/src/Handler/Exam/Form.hs @@ -59,7 +59,7 @@ data ExamOccurrenceForm = ExamOccurrenceForm , eofName :: ExamOccurrenceName , eofRoom :: Maybe RoomReference , eofRoomHidden :: Bool - , eofCapacity :: Word64 + , eofCapacity :: Maybe Word64 , eofStart :: UTCTime , eofEnd :: Maybe UTCTime , eofDescription :: Maybe StoredMarkup @@ -232,7 +232,7 @@ examOccurrenceForm prev = wFormToAForm $ do <*> apopt checkBoxField (fslI MsgExamRoomRoomHidden & setTooltip MsgExamRoomRoomHiddenTip & addName (nudge "room-hidden")) (eofRoomHidden <$> mPrev) let eofRoomRes = view _1 <$> eofRoomRes' eofRoomHiddenRes = view _2 <$> eofRoomRes' - (eofCapacityRes, eofCapacityView) <- mpreq (natFieldI MsgExamRoomCapacityNegative) (fslI MsgExamRoomCapacity & addName (nudge "capacity")) (eofCapacity <$> mPrev) + (eofCapacityRes, eofCapacityView) <- mopt (natFieldI MsgExamRoomCapacityNegative) (fslI MsgExamRoomCapacity & addName (nudge "capacity")) (eofCapacity <$> mPrev) (eofStartRes, eofStartView) <- mpreq utcTimeField (fslI MsgExamRoomStart & addName (nudge "start")) (eofStart <$> mPrev) (eofEndRes, eofEndView) <- mopt utcTimeField (fslI MsgExamRoomEnd & addName (nudge "end")) (eofEnd <$> mPrev) (eofDescRes, eofDescView) <- mopt htmlField (fslI MsgExamRoomDescription & addName (nudge "description")) (eofDescription <$> mPrev)