Provisional check for user adding themselves as lecturer

This commit is contained in:
Gregor Kleen 2019-03-27 23:27:43 +01:00
parent 3a260804d9
commit 8110e7ff6c
2 changed files with 29 additions and 23 deletions

View File

@ -104,6 +104,9 @@ CourseLecturers: Kursverwalter
CourseLecturer: Dozent CourseLecturer: Dozent
CourseAssistant: Assistent CourseAssistant: Assistent
CourseLecturerAlreadyAdded email@UserEmail: Es gibt bereits einen Kursverwalter mit E-Mail #{email} CourseLecturerAlreadyAdded email@UserEmail: Es gibt bereits einen Kursverwalter mit E-Mail #{email}
CourseRegistrationEndMustBeAfterStart: Ende des Anmeldezeitraums muss nach dem Anfang liegen
CourseDeregistrationEndMustBeAfterStart: Ende des Abmeldezeitraums muss nach dem Anfang des Anmeldezeitraums liegen
CourseUserMustBeLecturer: Aktueller Benutzer muss als Kursverwalter eingetragen sein
NoSuchTerm tid@TermId: Semester #{display tid} gibt es nicht. NoSuchTerm tid@TermId: Semester #{display tid} gibt es nicht.
NoSuchSchool ssh@SchoolId: Institut #{display ssh} gibt es nicht. NoSuchSchool ssh@SchoolId: Institut #{display ssh} gibt es nicht.

View File

@ -14,7 +14,7 @@ import Handler.Utils.Delete
import Handler.Utils.Database import Handler.Utils.Database
import Handler.Utils.Table.Cells import Handler.Utils.Table.Cells
import Handler.Utils.Table.Columns import Handler.Utils.Table.Columns
import Database.Esqueleto.Utils import qualified Database.Esqueleto.Utils as E
import Database.Esqueleto.Utils.TH import Database.Esqueleto.Utils.TH
-- import Data.Time -- import Data.Time
@ -684,10 +684,10 @@ makeCourseForm miButtonAction template = identifyForm FIDcourse $ \html -> do
<*> aopt utcTimeField (fslpI MsgDeRegUntil (mr MsgDate) <*> aopt utcTimeField (fslpI MsgDeRegUntil (mr MsgDate)
& setTooltip MsgCourseDeregisterUntilTip) (deepAlt (cfDeRegUntil <$> template) newDeRegUntil) & setTooltip MsgCourseDeregisterUntilTip) (deepAlt (cfDeRegUntil <$> template) newDeRegUntil)
<*> lecturerForm <*> lecturerForm
return $ case result of errorMsgs' <- traverse validateCourse result
FormSuccess courseResult return $ case errorMsgs' of
| errorMsgs <- validateCourse courseResult FormSuccess errorMsgs
, not $ null errorMsgs -> | not $ null errorMsgs ->
(FormFailure errorMsgs, (FormFailure errorMsgs,
[whamlet| [whamlet|
<div class="alert alert-danger"> <div class="alert alert-danger">
@ -702,23 +702,26 @@ makeCourseForm miButtonAction template = identifyForm FIDcourse $ \html -> do
_ -> (result, widget) _ -> (result, widget)
validateCourse :: CourseForm -> [Text] validateCourse :: (MonadHandler m, HandlerSite m ~ UniWorX) => CourseForm -> m [Text]
validateCourse CourseForm{..} = validateCourse CourseForm{..} = do
[ msg | (False, msg) <- uid <- liftHandlerT requireAuthId
[ userAdmin <- liftHandlerT . runDB . getBy $ UniqueUserAdmin uid cfSchool -- FIXME: This /needs/ to be a call to `isAuthorized` on a route
( NTop cfRegFrom <= NTop cfRegTo MsgRenderer mr <- getMsgRenderer
, "Ende des Anmeldezeitraums muss nach dem Anfang liegen"
) return
, [ mr msg | (False, msg) <-
( NTop cfRegFrom <= NTop cfDeRegUntil [
, "Ende des Abmeldezeitraums muss nach dem Anfang liegen" ( NTop cfRegFrom <= NTop cfRegTo
) , MsgCourseRegistrationEndMustBeAfterStart
-- No starting date is okay: effective immediately )
-- ( cfHasReg <= (isNothing cfRegFrom) ,
-- , "Beginn der Anmeldung angeben oder Anmeldungen deaktivieren" ( NTop cfRegFrom <= NTop cfDeRegUntil
-- ) , MsgCourseDeregistrationEndMustBeAfterStart
-- , )
] ] , ( maybe (any ((== uid) . fst) cfLecturers) (\(Entity _ UserAdmin{}) -> True) userAdmin
, MsgCourseUserMustBeLecturer
)
] ]
@ -852,7 +855,7 @@ makeCourseUserTable cid colChoices psValidator =
, fltrUserNameEmail queryUser , fltrUserNameEmail queryUser
-- , ("course-user-degree", error "TODO") -- TODO -- , ("course-user-degree", error "TODO") -- TODO
-- , ("course-user-field" , error "TODO") -- TODO -- , ("course-user-field" , error "TODO") -- TODO
, ("course-user-semesternr", FilterColumn $ mkExactFilter $ queryFeaturesStudy >>> (E.?. StudyFeaturesSemester)) , ("course-user-semesternr", FilterColumn $ E.mkExactFilter $ queryFeaturesStudy >>> (E.?. StudyFeaturesSemester))
-- , ("course-registration", error "TODO") -- TODO -- , ("course-registration", error "TODO") -- TODO
-- , ("course-user-note", error "TODO") -- TODO -- , ("course-user-note", error "TODO") -- TODO
] ]