This commit is contained in:
Gregor Kleen 2019-04-29 00:45:08 +02:00
parent 64c45c515e
commit b40096db8a
4 changed files with 63 additions and 5 deletions

View File

@ -1,3 +1,9 @@
* Version 29.04.2019
Tutorien
Anzeige von Korrektoren auf den Kursseiten
* Version 20.04.2019
Versand von Benachrichtigungen an Kursteilnehmer

View File

@ -999,7 +999,7 @@ makeCourseUserTable cid restrict colChoices psValidator = do
E.on $ tutorial E.^. TutorialId E.==. tutorialParticipant E.^. TutorialParticipantTutorial
E.where_ $ tutorial E.^. TutorialCourse E.==. E.val cid
E.&&. E.hasInfix (tutorial E.^. TutorialName) criterion
E.&&. tutorialParticipant E.^. TutorialParticipantUser E.==. (queryUser row) E.^. UserId
E.&&. tutorialParticipant E.^. TutorialParticipantUser E.==. queryUser row E.^. UserId
)
-- , ("course-registration", error "TODO") -- TODO
-- , ("course-user-note", error "TODO") -- TODO
@ -1051,7 +1051,7 @@ postCUsersR tid ssh csh = do
psValidator = def & defaultSortingByName
ent@(Entity cid _) <- getBy404 $ TermSchoolCourseShort tid ssh csh
numParticipants <- count [CourseParticipantCourse ==. cid]
table <- makeCourseUserTable cid (const $ E.true) colChoices psValidator
table <- makeCourseUserTable cid (const E.true) colChoices psValidator
return (ent, numParticipants, table)
formResult participantRes $ \case
(CourseUserSendMail, selectedUsers) -> do
@ -1089,8 +1089,8 @@ postTUsersR tid ssh csh tutn = do
psValidator = def
& defaultSortingByName
& restrictSorting (\name _ -> none (== name) ["note"]) -- We need to be careful to restrict allowed sorting/filter to not expose sensitive information
isInTut q = E.exists . E.from $ \tutorialParticipant -> do
E.where_ $ tutorialParticipant E.^. TutorialParticipantUser E.==. (queryUser q) E.^. UserId
isInTut q = E.exists . E.from $ \tutorialParticipant ->
E.where_ $ tutorialParticipant E.^. TutorialParticipantUser E.==. queryUser q E.^. UserId
E.&&. tutorialParticipant E.^. TutorialParticipantTutorial E.==. E.val tutid
cid <- getKeyBy404 $ TermSchoolCourseShort tid ssh csh
table <- makeCourseUserTable cid isInTut colChoices psValidator

View File

@ -18,8 +18,12 @@ import qualified Data.Set as Set
import qualified Data.CaseInsensitive as CI
import qualified Data.Text as Text
import Utils.Lens
{-# ANN module ("Hlint: ignore Redundant void" :: String) #-}
getCTutorialListR :: TermId -> SchoolId -> CourseShorthand -> Handler Html
getCTutorialListR tid ssh csh = do
@ -241,7 +245,7 @@ tutorialForm cid template html = do
<*> aopt (natFieldI MsgTutorialCapacityNonPositive) (fslpI MsgTutorialCapacity (mr MsgTutorialCapacity) & setTooltip MsgTutorialCapacityTip) (tfCapacity <$> template)
<*> areq textField (fslpI MsgTutorialRoom $ mr MsgTutorialRoomPlaceholder) (tfRoom <$> template)
<*> occurencesAForm (tfTime <$> template)
<*> aopt ciField (fslI MsgTutorialRegGroup & setTooltip MsgTutorialRegGroupTip) ((tfRegGroup <$> template) <|> Just (Just "tutorial"))
<*> fmap (assertM (not . Text.null . CI.original) . fmap (CI.map Text.strip)) (aopt ciField (fslI MsgTutorialRegGroup & setTooltip MsgTutorialRegGroupTip) ((tfRegGroup <$> template) <|> Just (Just "tutorial")))
<*> aopt utcTimeField (fslpI MsgRegisterFrom (mr MsgDate)
& setTooltip MsgCourseRegisterFromTip
) (tfRegisterFrom <$> template)

View File

@ -182,6 +182,54 @@ $newline text
in Uni2work Abgaben angelegt,
welche wie üblich korrigiert werden können.
<section>
<h2>Tutorien
<dl .deflist>
<dt .deflist__dt> Termine
<dd .deflist__dd>
Tutorien können beliebig viele reguläre Termine haben, die sich wöchentlich wiederholen.
<br />
Zusätzlich können beliebig viele <i>Ausnahmen</i> angelegt werden.
<br />
Hierbei überschreibt eine Ausnahme, dass ein Termin nicht stattfindet, die reguläre Terminplanung (man gibt hierbei einen beliebigen Zeitpunkt innerhalb des regulären Termins an).
<br />
Eine Ausnahme, dass ein Termin außerplanmäßig stattfindet, überschreibt wiederrum Ausnahmen, die Termine ausfallen lassen.
<br />
Dieses Verhalten kann genutzt werden um einzelne Termine zeitlich zu verschieben, indem der reguläre Termin ausfällt und stattdessen ein außerplanmäßiger mit versetzter Zeit stattfindet.
<dt .deflist__dt> Tutoren
<dd .deflist__dd>
<p>
Tutoren werden ad hoc pro Tutoriumsgruppe festgelegt.
<br />
Eine Tutoriumsgruppe kann beliebig viele Tutoren haben und ein Tutor kann beliebig viele Tutoriengruppen betreuen.
<p>
Tutoren haben Zugriff auf die Namen und Studiendaten ihrer Tutoriums-Teilnehmer und können auch Mitteilungen an sie verschicken (analog zu Kursmitteilungen).
<dt .deflist__dt> Anmeldung
<dd .deflist__dd>
<p>
Studenten können sich auf der Kursseite selbst zu Tutorien anmelden.
<br />
Die Anmeldung erfolgt momentan noch auf <i>first come, first served</i>-Basis
<br />
Eine vorherige Anmeldung zum Kurs ist Voraussetzung
<p>
Die Anmeldung kann pro Tutoriumsgruppe zeitlich beschränkt werden.
<p>
Tutoriumsgruppen können mit einer <i>Registrierungs-Gruppe</i> versehen werden.
<br />
Es handelt sich hierbei um einen beliebig wählbaren Text der ansonsten keine Bedeutung hat.
<br />
Studenten wird die Anmeldung nur in einem Tutorium pro Registrierungs-Gruppe erlaubt.
Leere Registrierungs-Gruppen zählen hierbei als <i>verschieden</i>.
<p>
Um die Anmeldung in beliebig viele Tutoriumsgruppen zuzulassen können alle Registrierungs-Gruppen leer gelassen werden.
<section>
<h2>Klausuren
Das Verwalten von Klausuren und Notenmeldungen