diff --git a/messages/uniworx/categories/courses/courses/de-de-formal.msg b/messages/uniworx/categories/courses/courses/de-de-formal.msg index 48fb14f44..9071ab4b4 100644 --- a/messages/uniworx/categories/courses/courses/de-de-formal.msg +++ b/messages/uniworx/categories/courses/courses/de-de-formal.msg @@ -121,6 +121,8 @@ CourseParticipantsAlreadyRegistered n@Int: #{n} #{pluralDE n "Teinehmer:in" "Tei CourseParticipantsAlreadyTutorialMember n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} #{pluralDE n "ist" "sind"} bereits in dieser Übungsgruppe angemeldet CourseParticipantsRegistered n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} erfolgreich angemeldet CourseParticipantsRegisteredTutorial n@Int: #{n} #{pluralDE n "Teinehmer:in" "Teilnehmer:innen"} erfolgreich zur Übungsgruppe angemeldet +CourseParticipantsRegisterConfirmationHeading: Teilnehmer:innen hinzufügen + CourseApplicationText: Text-Bewerbung CourseApplicationFollowInstructions: Beachten Sie die Anweisungen zur Bewerbung! CourseRegistrationText: Text zur Anmeldung diff --git a/messages/uniworx/categories/courses/courses/en-eu.msg b/messages/uniworx/categories/courses/courses/en-eu.msg index 81df1187c..211199d82 100644 --- a/messages/uniworx/categories/courses/courses/en-eu.msg +++ b/messages/uniworx/categories/courses/courses/en-eu.msg @@ -121,6 +121,8 @@ CourseParticipantsAlreadyRegistered n: #{n} #{pluralEN n "participant is" "parti CourseParticipantsAlreadyTutorialMember n: #{n} #{pluralEN n "participant is" "participants are"} already registered for this tutorial CourseParticipantsRegistered n: Successfully registered #{n} #{pluralEN n "participant" "participants"} CourseParticipantsRegisteredTutorial n: Successfully registered #{n} #{pluralEN n "participant" "participants"} for tutorial +CourseParticipantsRegisterConfirmationHeading: Register participants + CourseApplicationText: Application text CourseApplicationFollowInstructions: Please follow the instructions for applications! CourseRegistrationText: Registration text diff --git a/messages/uniworx/utils/buttons/de-de-formal.msg b/messages/uniworx/utils/buttons/de-de-formal.msg index 35e2ab2c6..7d950c1d4 100644 --- a/messages/uniworx/utils/buttons/de-de-formal.msg +++ b/messages/uniworx/utils/buttons/de-de-formal.msg @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost ,Winnie Ros +# SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost ,Winnie Ros ,Sarah Vaupel # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -65,4 +65,7 @@ BtnNotifyNewCourseForceOff: Nicht benachrichtigen BtnUserAssimilate: Assimilieren BtnCloseExam: Prüfung abschließen BtnFinishExam: Prüfungsergebnisse sichtbar schalten -BtnConfirm: Bestätigen \ No newline at end of file +BtnConfirm: Bestätigen +BtnCourseRegisterAdd: Personen suchen +BtnCourseRegisterConfirm: Ausgewählte Personen anmelden +BtnCourseRegisterAbort: Abbrechen \ No newline at end of file diff --git a/messages/uniworx/utils/buttons/en-eu.msg b/messages/uniworx/utils/buttons/en-eu.msg index baa52748c..bf7955faf 100644 --- a/messages/uniworx/utils/buttons/en-eu.msg +++ b/messages/uniworx/utils/buttons/en-eu.msg @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022 Steffen Jost ,Winnie Ros +# SPDX-FileCopyrightText: 2022 Steffen Jost ,Winnie Ros ,Sarah Vaupel # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -65,4 +65,7 @@ BtnNotifyNewCourseForceOff: Do not notify me BtnUserAssimilate: Assimilate BtnCloseExam: Close exam BtnFinishExam: Make results visible -BtnConfirm: Confirm \ No newline at end of file +BtnConfirm: Confirm +BtnCourseRegisterAdd: Search persons +BtnCourseRegisterConfirm: Register selected persons +BtnCourseRegisterAbort: Abort \ No newline at end of file diff --git a/src/Handler/Course/ParticipantInvite.hs b/src/Handler/Course/ParticipantInvite.hs index 857cbda7f..2c857bbcf 100644 --- a/src/Handler/Course/ParticipantInvite.hs +++ b/src/Handler/Course/ParticipantInvite.hs @@ -13,9 +13,7 @@ import Handler.Utils.Avs import Jobs.Queue ---import Data.Aeson hiding (Result(..)) import qualified Data.CaseInsensitive as CI ---import qualified Data.HashSet as HashSet import Data.List (genericLength) import qualified Data.Map as Map import qualified Data.Text as Text @@ -26,6 +24,26 @@ import Control.Monad.Except (MonadError(..)) import Generics.Deriving.Monoid (memptydefault, mappenddefault) +data ButtonCourseRegisterMode = BtnCourseRegisterAdd | BtnCourseRegisterConfirm | BtnCourseRegisterAbort + deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic, Typeable) +instance Universe ButtonCourseRegisterMode +instance Finite ButtonCourseRegisterMode + +embedRenderMessage ''UniWorX ''ButtonCourseRegisterMode id + +nullaryPathPiece ''ButtonCourseRegisterMode $ camelToPathPiece' 1 + +instance Button UniWorX ButtonCourseRegisterMode where + btnLabel x = [whamlet|_{x}|] + + btnClasses BtnCourseRegisterAdd = [BCIsButton, BCPrimary] + btnClasses BtnCourseRegisterConfirm = [BCIsButton, BCPrimary] + btnClasses BtnCourseRegisterAbort = [BCIsButton, BCDanger] + + btnValidate _ BtnCourseRegisterAbort = False + btnValidate _ _ = True + + data AddUsers = AddUsers { auUsers :: Set Text , auTutorial :: Maybe (CI Text) @@ -120,11 +138,32 @@ postCAddUserR tid ssh csh = do } ---confirmAddUser :: () ---confirmAddUser = do --- siteLayoutMsg MsgCourseParticipantsRegisterConfirmationHeading $ do --- setTitleI MsgCourseParticipantsRegisterConfirmationHeading - +confirmAddUser :: Handler Html +confirmAddUser = do + siteLayoutMsg MsgCourseParticipantsRegisterConfirmationHeading $ do + setTitleI MsgCourseParticipantsRegisterConfirmationHeading + let + confirmCheckBox :: Widget + confirmCheckBox = do + let sJsonField :: Field (HandlerFor UniWorX) a + sJsonField = secretJsonField' $ \theId name attrs val _isReq -> + [whamlet| + $newline never + + |] + fieldView sJsonField act mempty vAttrs (Right act) False + availableActs :: Widget + availableActs = fieldView (secretJsonField :: Field Handler (Set csvAction)) "" mempty [] (Right . Set.empty) False + (confirmForm', confirmEnctype) <- liftHandler . generateFormPost . withButtonForm' [BtnCourseRegisterConfirm, BtnCourseRegisterAbort] . identifyForm FIDCourseRegisterConfirm $ \csrf -> return (error "No meaningful FormResult", $(widgetFile "course/add-user/confirmation")) + let confirmForm = wrapForm confirmForm' FormSettings + { formMethod = POST + , formAction = Just $ tblLink id + , formEncoding = confirmEnctype + , formAttrs = [] + , formSubmit = FormNoSubmit + , formAnchor = Nothing :: Maybe Text + } + $(widgetFile "course/add-user/confirmation-wrapper") registerUsers :: CourseId -> Map Text (Maybe UserId) -> WriterT [Message] (YesodJobDB UniWorX) () diff --git a/src/Utils/Form.hs b/src/Utils/Form.hs index 3f7d374bf..bb584f8bb 100644 --- a/src/Utils/Form.hs +++ b/src/Utils/Form.hs @@ -283,7 +283,7 @@ data FormIdentifier | FIDDBTableCsvImportConfirm Text | FIDDelete | FIDPrintAcknowledge - | FIDCourseRegister + | FIDCourseRegister | FIDCourseRegisterConfirm | FIDuserRights | FIDUserSystemFunctions | FIDcUserNote diff --git a/templates/course/add-user/confirmation-wrapper.hamlet b/templates/course/add-user/confirmation-wrapper.hamlet new file mode 100644 index 000000000..631eb1a99 --- /dev/null +++ b/templates/course/add-user/confirmation-wrapper.hamlet @@ -0,0 +1,10 @@ +$newline never + +$# SPDX-FileCopyrightText: 2022 Sarah Vaupel +$# +$# SPDX-License-Identifier: AGPL-3.0-or-later + +
+

_{MsgCourseAddUserConfirmationTip} +

+ ^{confirmForm} diff --git a/templates/course/add-user/confirmation.hamlet b/templates/course/add-user/confirmation.hamlet new file mode 100644 index 000000000..7c3fc225d --- /dev/null +++ b/templates/course/add-user/confirmation.hamlet @@ -0,0 +1,27 @@ +$newline never + +$# SPDX-FileCopyrightText: 2022 Sarah Vaupel +$# +$# SPDX-License-Identifier: AGPL-3.0-or-later + +#{csrf} +^{availableActs} +
+ $forall actionClass <- sortOn dbtCsvCoarsenActionClass (Map.keys actionMap) +
+ +