fix(tutorials): improve creation interface
tutorial_room is no longer NOT NULL
This commit is contained in:
parent
c0976c3ba9
commit
bc248d0fc2
@ -1268,6 +1268,8 @@ ExceptionExists: Diese Ausnahme existiert bereits
|
|||||||
ExceptionNoOccurAt: Termin
|
ExceptionNoOccurAt: Termin
|
||||||
|
|
||||||
TutorialType: Typ
|
TutorialType: Typ
|
||||||
|
TutorialTypePlaceholder: Tutorium, Zentralübung, ...
|
||||||
|
TutorialTypeTip: Dient nur der Information der Studierenden
|
||||||
TutorialName: Bezeichnung
|
TutorialName: Bezeichnung
|
||||||
TutorialParticipants: Teilnehmer
|
TutorialParticipants: Teilnehmer
|
||||||
TutorialCapacity: Kapazität
|
TutorialCapacity: Kapazität
|
||||||
@ -1295,7 +1297,7 @@ TutorialDeleted: Tutorium gelöscht
|
|||||||
TutorialRegisteredSuccess tutn@TutorialName: Erfolgreich zum Tutorium #{tutn} angemeldet
|
TutorialRegisteredSuccess tutn@TutorialName: Erfolgreich zum Tutorium #{tutn} angemeldet
|
||||||
TutorialDeregisteredSuccess tutn@TutorialName: Erfolgreich vom Tutorium #{tutn} abgemeldet
|
TutorialDeregisteredSuccess tutn@TutorialName: Erfolgreich vom Tutorium #{tutn} abgemeldet
|
||||||
|
|
||||||
TutorialNameTip: Muss eindeutig sein
|
TutorialNameTip: Muss innerhalb des Kurses eindeutig sein
|
||||||
TutorialCapacityNonPositive: Kapazität muss größer oder gleich null sein
|
TutorialCapacityNonPositive: Kapazität muss größer oder gleich null sein
|
||||||
TutorialCapacityTip: Beschränkt wieviele Studenten sich zu diesem Tutorium anmelden können
|
TutorialCapacityTip: Beschränkt wieviele Studenten sich zu diesem Tutorium anmelden können
|
||||||
TutorialRegGroupTip: Studenten können sich in jeweils maximal einem Tutorium pro Registrierungs-Gruppe anmelden. Ist bei zwei oder mehr Tutorien keine Registrierungs-Gruppe gesetzt zählen diese als in verschiedenen Registrierungs-Gruppen
|
TutorialRegGroupTip: Studenten können sich in jeweils maximal einem Tutorium pro Registrierungs-Gruppe anmelden. Ist bei zwei oder mehr Tutorien keine Registrierungs-Gruppe gesetzt zählen diese als in verschiedenen Registrierungs-Gruppen
|
||||||
@ -1303,6 +1305,9 @@ TutorialRoomPlaceholder: Raum
|
|||||||
TutorialTutors: Tutoren
|
TutorialTutors: Tutoren
|
||||||
TutorialTutorAlreadyAdded: Ein Tutor mit dieser E-Mail ist bereits für dieses Tutorium eingetragen
|
TutorialTutorAlreadyAdded: Ein Tutor mit dieser E-Mail ist bereits für dieses Tutorium eingetragen
|
||||||
|
|
||||||
|
OccurrenceNoneScheduled: (Noch) keine planmäßigen Termine
|
||||||
|
OccurrenceNoneExceptions: (Noch) keine Termin-Ausnahmen
|
||||||
|
|
||||||
TutorialNew: Neues Tutorium
|
TutorialNew: Neues Tutorium
|
||||||
|
|
||||||
TutorialNameTaken tutn@TutorialName: Es existiert bereits anderes Tutorium mit Namen #{tutn}
|
TutorialNameTaken tutn@TutorialName: Es existiert bereits anderes Tutorium mit Namen #{tutn}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ Tutorial json
|
|||||||
course CourseId
|
course CourseId
|
||||||
type (CI Text) -- "Tutorium", "Zentralübung", ...
|
type (CI Text) -- "Tutorium", "Zentralübung", ...
|
||||||
capacity Int Maybe -- limit for enrolment in this tutorial
|
capacity Int Maybe -- limit for enrolment in this tutorial
|
||||||
room Text
|
room Text Maybe
|
||||||
time Occurrences
|
time Occurrences
|
||||||
regGroup (CI Text) Maybe -- each participant may register for one tutorial per regGroup
|
regGroup (CI Text) Maybe -- each participant may register for one tutorial per regGroup
|
||||||
registerFrom UTCTime Maybe
|
registerFrom UTCTime Maybe
|
||||||
|
|||||||
@ -137,7 +137,7 @@ getCShowR tid ssh csh = do
|
|||||||
<li>
|
<li>
|
||||||
^{nameEmailWidget' tutor}
|
^{nameEmailWidget' tutor}
|
||||||
|]
|
|]
|
||||||
, sortable (Just "room") (i18nCell MsgTutorialRoom) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> textCell tutorialRoom
|
, sortable (Just "room") (i18nCell MsgTutorialRoom) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> maybe mempty textCell tutorialRoom
|
||||||
, sortable Nothing (i18nCell MsgTutorialTime) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> occurrencesCell tutorialTime
|
, sortable Nothing (i18nCell MsgTutorialTime) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> occurrencesCell tutorialTime
|
||||||
, sortable (Just "register-from") (i18nCell MsgTutorialRegisterFrom) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> maybeDateTimeCell tutorialRegisterFrom
|
, sortable (Just "register-from") (i18nCell MsgTutorialRegisterFrom) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> maybeDateTimeCell tutorialRegisterFrom
|
||||||
, sortable (Just "register-to") (i18nCell MsgTutorialRegisterTo) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> maybeDateTimeCell tutorialRegisterTo
|
, sortable (Just "register-to") (i18nCell MsgTutorialRegisterTo) $ \DBRow{ dbrOutput = Entity _ Tutorial{..} } -> maybeDateTimeCell tutorialRegisterTo
|
||||||
|
|||||||
@ -21,7 +21,7 @@ data TutorialForm = TutorialForm
|
|||||||
, tfRegGroup :: Maybe (CI Text)
|
, tfRegGroup :: Maybe (CI Text)
|
||||||
, tfTutorControlled :: Bool
|
, tfTutorControlled :: Bool
|
||||||
, tfCapacity :: Maybe Int
|
, tfCapacity :: Maybe Int
|
||||||
, tfRoom :: Text
|
, tfRoom :: Maybe Text
|
||||||
, tfTime :: Occurrences
|
, tfTime :: Occurrences
|
||||||
, tfRegisterFrom :: Maybe UTCTime
|
, tfRegisterFrom :: Maybe UTCTime
|
||||||
, tfRegisterTo :: Maybe UTCTime
|
, tfRegisterTo :: Maybe UTCTime
|
||||||
@ -36,7 +36,7 @@ tutorialForm cid template html = do
|
|||||||
uid <- liftHandler requireAuthId
|
uid <- liftHandler requireAuthId
|
||||||
|
|
||||||
let
|
let
|
||||||
tutorForm = Set.fromList <$> massInputAccumA miAdd' miCell' (\p -> Just . SomeRoute $ cRoute :#: p) miLayout' ("tutors" :: Text) (fslI MsgTutorialTutors & setTooltip MsgMassInputTip) True (Set.toList . tfTutors <$> template)
|
tutorForm = Set.fromList <$> massInputAccumA miAdd' miCell' (\p -> Just . SomeRoute $ cRoute :#: p) miLayout' ("tutors" :: Text) (fslI MsgTutorialTutors & setTooltip MsgMassInputTip) False (Set.toList . tfTutors <$> template)
|
||||||
where
|
where
|
||||||
miAdd' :: (Text -> Text) -> FieldView UniWorX -> Form ([Either UserEmail UserId] -> FormResult [Either UserEmail UserId])
|
miAdd' :: (Text -> Text) -> FieldView UniWorX -> Form ([Either UserEmail UserId] -> FormResult [Either UserEmail UserId])
|
||||||
miAdd' nudge submitView csrf = do
|
miAdd' nudge submitView csrf = do
|
||||||
@ -66,11 +66,11 @@ tutorialForm cid template html = do
|
|||||||
|
|
||||||
flip (renderAForm FormStandard) html $ TutorialForm
|
flip (renderAForm FormStandard) html $ TutorialForm
|
||||||
<$> areq (textField & cfStrip & cfCI) (fslpI MsgTutorialName (mr MsgTutorialName) & setTooltip MsgTutorialNameTip) (tfName <$> template)
|
<$> areq (textField & cfStrip & cfCI) (fslpI MsgTutorialName (mr MsgTutorialName) & setTooltip MsgTutorialNameTip) (tfName <$> template)
|
||||||
<*> areq (textField & cfStrip & cfCI & addDatalist tutTypeDatalist) (fslpI MsgTutorialType $ mr MsgTutorialType) (tfType <$> template)
|
<*> areq (textField & cfStrip & cfCI & addDatalist tutTypeDatalist) (fslpI MsgTutorialType (mr MsgTutorialTypePlaceholder) & setTooltip MsgTutorialTypeTip) (tfType <$> template)
|
||||||
<*> aopt (textField & cfStrip & cfCI) (fslI MsgTutorialRegGroup & setTooltip MsgTutorialRegGroupTip) ((tfRegGroup <$> template) <|> Just (Just "tutorial"))
|
<*> aopt (textField & cfStrip & cfCI) (fslI MsgTutorialRegGroup & setTooltip MsgTutorialRegGroupTip) ((tfRegGroup <$> template) <|> Just (Just "tutorial"))
|
||||||
<*> apopt checkBoxField (fslI MsgTutorialTutorControlled & setTooltip MsgTutorialTutorControlledTip) (tfTutorControlled <$> template)
|
<*> apopt checkBoxField (fslI MsgTutorialTutorControlled & setTooltip MsgTutorialTutorControlledTip) (tfTutorControlled <$> template)
|
||||||
<*> aopt (natFieldI MsgTutorialCapacityNonPositive) (fslpI MsgTutorialCapacity (mr MsgTutorialCapacity) & setTooltip MsgTutorialCapacityTip) (tfCapacity <$> template)
|
<*> aopt (natFieldI MsgTutorialCapacityNonPositive) (fslpI MsgTutorialCapacity (mr MsgTutorialCapacity) & setTooltip MsgTutorialCapacityTip) (tfCapacity <$> template)
|
||||||
<*> areq textField (fslpI MsgTutorialRoom $ mr MsgTutorialRoomPlaceholder) (tfRoom <$> template)
|
<*> (assertM (not . null) <$> aopt (textField & cfStrip) (fslpI MsgTutorialRoom $ mr MsgTutorialRoomPlaceholder) (tfRoom <$> template))
|
||||||
<*> occurrencesAForm ("occurrences" :: Text) (tfTime <$> template)
|
<*> occurrencesAForm ("occurrences" :: Text) (tfTime <$> template)
|
||||||
<*> aopt utcTimeField (fslpI MsgRegisterFrom (mr MsgDate)
|
<*> aopt utcTimeField (fslpI MsgRegisterFrom (mr MsgDate)
|
||||||
& setTooltip MsgCourseRegisterFromTip
|
& setTooltip MsgCourseRegisterFromTip
|
||||||
|
|||||||
@ -45,7 +45,7 @@ getCTutorialListR tid ssh csh = do
|
|||||||
|]
|
|]
|
||||||
, sortable (Just "participants") (i18nCell MsgTutorialParticipants) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, n) } -> anchorCell (CTutorialR tid ssh csh tutorialName TUsersR) $ tshow n
|
, sortable (Just "participants") (i18nCell MsgTutorialParticipants) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, n) } -> anchorCell (CTutorialR tid ssh csh tutorialName TUsersR) $ tshow n
|
||||||
, sortable (Just "capacity") (i18nCell MsgTutorialCapacity) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> maybe mempty (textCell . tshow) tutorialCapacity
|
, sortable (Just "capacity") (i18nCell MsgTutorialCapacity) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> maybe mempty (textCell . tshow) tutorialCapacity
|
||||||
, sortable (Just "room") (i18nCell MsgTutorialRoom) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> textCell tutorialRoom
|
, sortable (Just "room") (i18nCell MsgTutorialRoom) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> maybe mempty textCell tutorialRoom
|
||||||
, sortable Nothing (i18nCell MsgTutorialTime) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> occurrencesCell tutorialTime
|
, sortable Nothing (i18nCell MsgTutorialTime) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> occurrencesCell tutorialTime
|
||||||
, sortable (Just "register-group") (i18nCell MsgTutorialRegGroup) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> maybe mempty (textCell . CI.original) tutorialRegGroup
|
, sortable (Just "register-group") (i18nCell MsgTutorialRegGroup) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> maybe mempty (textCell . CI.original) tutorialRegGroup
|
||||||
, sortable (Just "register-from") (i18nCell MsgTutorialRegisterFrom) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> maybeDateTimeCell tutorialRegisterFrom
|
, sortable (Just "register-from") (i18nCell MsgTutorialRegisterFrom) $ \DBRow{ dbrOutput = (Entity _ Tutorial{..}, _) } -> maybeDateTimeCell tutorialRegisterFrom
|
||||||
|
|||||||
@ -12,5 +12,5 @@ $if not (null occurrencesExceptions)
|
|||||||
$forall exc <- occurrencesExceptions'
|
$forall exc <- occurrencesExceptions'
|
||||||
<li>^{exc}
|
<li>^{exc}
|
||||||
|
|
||||||
$if null occurrencesScheduled && null occurrencesExceptions
|
$# $if null occurrencesScheduled && null occurrencesExceptions
|
||||||
_{MsgOccurrenceNever}
|
$# _{MsgOccurrenceNever}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
$newline never
|
$newline never
|
||||||
<td colspan=2>
|
<td colspan=2>
|
||||||
^{addWidget}
|
^{addWidget}
|
||||||
<td>
|
<td style="vertical-align: bottom">
|
||||||
^{fvInput submitView}
|
^{fvInput submitView}
|
||||||
|
|||||||
@ -6,6 +6,12 @@ $newline never
|
|||||||
^{cellWdgts ! coord}
|
^{cellWdgts ! coord}
|
||||||
<td>
|
<td>
|
||||||
^{fvInput (delButtons ! coord)}
|
^{fvInput (delButtons ! coord)}
|
||||||
|
$if null (review liveCoords lLength)
|
||||||
|
<tr>
|
||||||
|
<td colspan=3 style="font-weight: 600; font-size: 0.9rem; color: var(--color-fontsec);">
|
||||||
|
_{MsgOccurrenceNoneExceptions}
|
||||||
|
<td colspan=3>
|
||||||
|
<div style="height:1px; width:90%; margin: 0.5em auto; background-color: var(--color-grey);">
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr .massinput__cell.massinput__cell--add>
|
<tr .massinput__cell.massinput__cell--add>
|
||||||
^{addWdgts ! (0, 0)}
|
^{addWdgts ! (0, 0)}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
$newline never
|
$newline never
|
||||||
<td colspan=2>
|
<td colspan=2>
|
||||||
^{addWidget}
|
^{addWidget}
|
||||||
<td>
|
<td style="vertical-align: bottom">
|
||||||
^{fvInput submitView}
|
^{fvInput submitView}
|
||||||
|
|||||||
@ -6,6 +6,12 @@ $newline never
|
|||||||
^{cellWdgts ! coord}
|
^{cellWdgts ! coord}
|
||||||
<td>
|
<td>
|
||||||
^{fvInput (delButtons ! coord)}
|
^{fvInput (delButtons ! coord)}
|
||||||
|
$if null (review liveCoords lLength)
|
||||||
|
<tr>
|
||||||
|
<td colspan=3 style="font-weight: 600; font-size: 0.9rem; color: var(--color-fontsec);">
|
||||||
|
_{MsgOccurrenceNoneScheduled}
|
||||||
|
<td colspan=3>
|
||||||
|
<div style="height:1px; width:90%; margin: 0.5em auto; background-color: var(--color-grey);">
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr .massinput__cell.massinput__cell--add>
|
<tr .massinput__cell.massinput__cell--add>
|
||||||
^{addWdgts ! (0, 0)}
|
^{addWdgts ! (0, 0)}
|
||||||
|
|||||||
Reference in New Issue
Block a user