fix(exams): allow occurrences after exam end
This commit is contained in:
parent
2eb062beb2
commit
3d63b355eb
@ -11,18 +11,18 @@ import Import
|
|||||||
import Utils.Lens hiding (parts)
|
import Utils.Lens hiding (parts)
|
||||||
|
|
||||||
import Handler.Exam.CorrectorInvite
|
import Handler.Exam.CorrectorInvite
|
||||||
|
|
||||||
import Handler.Utils
|
import Handler.Utils
|
||||||
import Handler.Utils.Invitations
|
import Handler.Utils.Invitations
|
||||||
|
|
||||||
import Data.Map ((!))
|
import Data.Map ((!))
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
|
|
||||||
import qualified Database.Esqueleto as E
|
import qualified Database.Esqueleto as E
|
||||||
|
|
||||||
import qualified Control.Monad.State.Class as State
|
import qualified Control.Monad.State.Class as State
|
||||||
import Text.Blaze.Html.Renderer.String (renderHtml)
|
import Text.Blaze.Html.Renderer.String (renderHtml)
|
||||||
|
|
||||||
|
|
||||||
data ExamForm = ExamForm
|
data ExamForm = ExamForm
|
||||||
{ efName :: ExamName
|
{ efName :: ExamName
|
||||||
@ -346,7 +346,7 @@ validateExam = do
|
|||||||
forM_ efOccurrences $ \ExamOccurrenceForm{..} -> do
|
forM_ efOccurrences $ \ExamOccurrenceForm{..} -> do
|
||||||
guardValidation (MsgExamOccurrenceEndMustBeAfterStart eofName) $ NTop eofEnd >= NTop (Just eofStart)
|
guardValidation (MsgExamOccurrenceEndMustBeAfterStart eofName) $ NTop eofEnd >= NTop (Just eofStart)
|
||||||
guardValidation (MsgExamOccurrenceStartMustBeAfterExamStart eofName) $ NTop (Just eofStart) >= NTop efStart
|
guardValidation (MsgExamOccurrenceStartMustBeAfterExamStart eofName) $ NTop (Just eofStart) >= NTop efStart
|
||||||
guardValidation (MsgExamOccurrenceEndMustBeBeforeExamEnd eofName) $ NTop eofEnd <= NTop efEnd
|
warnValidation (MsgExamOccurrenceEndMustBeBeforeExamEnd eofName) $ NTop eofEnd <= NTop efEnd
|
||||||
|
|
||||||
forM_ [ (a, b) | a <- Set.toAscList efOccurrences, b <- Set.toAscList efOccurrences, b > a ] $ \(a, b) -> do
|
forM_ [ (a, b) | a <- Set.toAscList efOccurrences, b <- Set.toAscList efOccurrences, b > a ] $ \(a, b) -> do
|
||||||
eofRange' <- formatTimeRange SelFormatDateTime (eofStart a) (eofEnd a)
|
eofRange' <- formatTimeRange SelFormatDateTime (eofStart a) (eofEnd a)
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
module Utils.Form where
|
module Utils.Form where
|
||||||
|
|
||||||
import ClassyPrelude.Yesod hiding (addMessage, cons, Proxy(..), identifyForm)
|
import ClassyPrelude.Yesod hiding (addMessage, addMessageI, cons, Proxy(..), identifyForm)
|
||||||
import Yesod.Core.Instances ()
|
import Yesod.Core.Instances ()
|
||||||
import Settings
|
import Settings
|
||||||
|
|
||||||
@ -632,7 +632,7 @@ selectField' :: ( Eq a
|
|||||||
selectField' optMsg mkOpts = Field{..}
|
selectField' optMsg mkOpts = Field{..}
|
||||||
where
|
where
|
||||||
fieldEnctype = UrlEncoded
|
fieldEnctype = UrlEncoded
|
||||||
|
|
||||||
fieldParse [] _ = return $ Right Nothing
|
fieldParse [] _ = return $ Right Nothing
|
||||||
fieldParse (s:_) _
|
fieldParse (s:_) _
|
||||||
| s == "" = return $ Right Nothing
|
| s == "" = return $ Right Nothing
|
||||||
@ -646,7 +646,7 @@ selectField' optMsg mkOpts = Field{..}
|
|||||||
rendered = case val of
|
rendered = case val of
|
||||||
Left _ -> ""
|
Left _ -> ""
|
||||||
Right a -> maybe "" optionExternalValue . listToMaybe $ filter ((== a) . optionInternalValue) olOptions
|
Right a -> maybe "" optionExternalValue . listToMaybe $ filter ((== a) . optionInternalValue) olOptions
|
||||||
|
|
||||||
isSel Nothing = not $ rendered `elem` map optionExternalValue olOptions
|
isSel Nothing = not $ rendered `elem` map optionExternalValue olOptions
|
||||||
isSel (Just opt) = rendered == optionExternalValue opt
|
isSel (Just opt) = rendered == optionExternalValue opt
|
||||||
[whamlet|
|
[whamlet|
|
||||||
@ -936,7 +936,7 @@ guardValidation :: ( MonadHandler m
|
|||||||
=> msg -- ^ Message describing violation
|
=> msg -- ^ Message describing violation
|
||||||
-> Bool -- ^ @False@ iff constraint is violated
|
-> Bool -- ^ @False@ iff constraint is violated
|
||||||
-> FormValidator r m ()
|
-> FormValidator r m ()
|
||||||
guardValidation msg isValid = when (not isValid) $ tellValidationError msg
|
guardValidation msg isValid = unless isValid $ tellValidationError msg
|
||||||
|
|
||||||
guardValidationM :: ( MonadHandler m
|
guardValidationM :: ( MonadHandler m
|
||||||
, RenderMessage (HandlerSite m) msg
|
, RenderMessage (HandlerSite m) msg
|
||||||
@ -944,6 +944,15 @@ guardValidationM :: ( MonadHandler m
|
|||||||
=> msg -> m Bool -> FormValidator r m ()
|
=> msg -> m Bool -> FormValidator r m ()
|
||||||
guardValidationM = (. lift) . (=<<) . guardValidation
|
guardValidationM = (. lift) . (=<<) . guardValidation
|
||||||
|
|
||||||
|
|
||||||
|
warnValidation :: ( MonadHandler m
|
||||||
|
, RenderMessage (HandlerSite m) msg
|
||||||
|
)
|
||||||
|
=> msg -- ^ Message describing violation
|
||||||
|
-> Bool -- ^ @False@ iff constraint is violated
|
||||||
|
-> FormValidator r m ()
|
||||||
|
warnValidation msg isValid = unless isValid $ addMessageI Warning msg
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
-- Form Manipulation --
|
-- Form Manipulation --
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user