diff --git a/messages/uniworx/categories/system_message/de-de-formal.msg b/messages/uniworx/categories/system_message/de-de-formal.msg index f17673b8d..8ea0aacb1 100644 --- a/messages/uniworx/categories/system_message/de-de-formal.msg +++ b/messages/uniworx/categories/system_message/de-de-formal.msg @@ -8,6 +8,7 @@ SystemMessageLastChanged: Zuletzt geändert SystemMessageLastUnhide: Zuletzt un-versteckt SystemMessageFrom: Sichtbar ab SystemMessageTo: Sichtbar bis +SystemMessageOnVolatileClusterSettings: Sichtbar bei VolatileCluster-Einstellungen SystemMessageAuthenticatedOnly: Nur angemeldet SystemMessageSeverity: Schwere SystemMessagePriority: Priorität @@ -38,3 +39,7 @@ SystemMessageEditTranslationSuccess: Übersetzung angepasst. SystemMessageDeleteTranslationSuccess: Übersetzung entfernt. RFC1766: RFC1766-Sprachcode + +SystemMessageOnVolatileClusterSettingKey: VolatileCluster-Einstellung +SystemMessageOnVolatileClusterSettingValue: Wert +SystemMessageOnVolatileClusterSettingKeyExists: Für diese Einstellung existiert bereits ein Wert! diff --git a/messages/uniworx/categories/system_message/en-eu.msg b/messages/uniworx/categories/system_message/en-eu.msg index df7c84720..560f32552 100644 --- a/messages/uniworx/categories/system_message/en-eu.msg +++ b/messages/uniworx/categories/system_message/en-eu.msg @@ -8,6 +8,7 @@ SystemMessageLastChanged: Last changed SystemMessageLastUnhide: Last unhidden SystemMessageFrom: Visible from SystemMessageTo: Visible to +SystemMessageOnVolatileClusterSettings: Visible on VolatileCluster settings SystemMessageAuthenticatedOnly: Only logged in users SystemMessageSeverity: Severity SystemMessagePriority: Priority @@ -38,3 +39,7 @@ SystemMessageEditTranslationSuccess: Successfully edited translation. SystemMessageDeleteTranslationSuccess: Successfully deleted translation. RFC1766: RFC1766 language code + +SystemMessageOnVolatileClusterSettingKey: VolatileCluster setting +SystemMessageOnVolatileClusterSettingValue: Value +SystemMessageOnVolatileClusterSettingKeyExists: There already exists a value for this setting! diff --git a/messages/uniworx/misc/de-de-formal.msg b/messages/uniworx/misc/de-de-formal.msg index 570b2fd19..a5a876f64 100644 --- a/messages/uniworx/misc/de-de-formal.msg +++ b/messages/uniworx/misc/de-de-formal.msg @@ -8,3 +8,6 @@ FieldSecondary: Nebenfach MultiEmailFieldTip: Es sind mehrere, Komma-separierte, E-Mail-Adressen möglich WeekDay: Wochentag LdapIdentificationOrEmail: Campus-Kennung / E-Mail-Adresse + +ClusterVolatileWorkflowsEnabled: Workflows aktiv +ClusterVolatileQuickActionsEnabled: Schnellzugriffsmenü aktiv diff --git a/messages/uniworx/misc/en-eu.msg b/messages/uniworx/misc/en-eu.msg index 9c128addc..9265b6b61 100644 --- a/messages/uniworx/misc/en-eu.msg +++ b/messages/uniworx/misc/en-eu.msg @@ -7,4 +7,7 @@ FieldPrimary: Major FieldSecondary: Minor MultiEmailFieldTip: Multiple emails addresses may be specified (comma-separated) WeekDay: Day of the week -LdapIdentificationOrEmail: Campus account/email address \ No newline at end of file +LdapIdentificationOrEmail: Campus account/email address + +ClusterVolatileWorkflowsEnabled: Workflows enabled +ClusterVolatileQuickActionsEnabled: Quick actions enabled \ No newline at end of file diff --git a/src/Foundation/I18n.hs b/src/Foundation/I18n.hs index 8faf5a2bd..dada7b2d5 100644 --- a/src/Foundation/I18n.hs +++ b/src/Foundation/I18n.hs @@ -514,6 +514,14 @@ instance RenderMessage UniWorX RouteWorkflowScope where mr :: forall msg. RenderMessage UniWorX msg => msg -> Text mr = renderMessage foundation ls +instance RenderMessage UniWorX VolatileClusterSettingsKey where + renderMessage foundation ls = \case + ClusterVolatileWorkflowsEnabled -> mr MsgClusterVolatileWorkflowsEnabled + ClusterVolatileQuickActionsEnabled -> mr MsgClusterVolatileQuickActionsEnabled + where + mr :: forall msg. RenderMessage UniWorX msg => msg -> Text + mr = renderMessage foundation ls + unRenderMessage' :: (Ord a, Finite a, RenderMessage master a) => (Text -> Text -> Bool) -> master -> Text -> [a] unRenderMessage' cmp foundation inp = nubOrd $ do diff --git a/src/Handler/SystemMessage.hs b/src/Handler/SystemMessage.hs index 28a519ab9..12747a62d 100644 --- a/src/Handler/SystemMessage.hs +++ b/src/Handler/SystemMessage.hs @@ -7,16 +7,15 @@ module Handler.SystemMessage import Import -import qualified Data.Map.Lazy as Map - -import qualified Data.Set as Set -import qualified Data.HashMap.Strict as HashMap - -import qualified Data.List.NonEmpty as NonEmpty - import Handler.Utils import Handler.Utils.News +import qualified Data.HashMap.Strict as HashMap +import Data.Map ((!)) +import qualified Data.Map.Lazy as Map +import qualified Data.List.NonEmpty as NonEmpty +import qualified Data.Set as Set + import qualified Database.Esqueleto.Legacy as E @@ -24,10 +23,31 @@ invalidateVisibleSystemMessages :: (MonadHandler m, HandlerSite m ~ UniWorX) => invalidateVisibleSystemMessages = memcachedByInvalidate AuthCacheVisibleSystemMessages $ Proxy @(Map SystemMessageId (Maybe UTCTime, Maybe UTCTime)) --- TODO: work in progress systemMessageVolatileClusterSettingsForm :: Maybe SystemMessageVolatileClusterSettings -> AForm Handler SystemMessageVolatileClusterSettings -systemMessageVolatileClusterSettingsForm _mPrev = wFormToAForm $ do - return mempty +systemMessageVolatileClusterSettingsForm (fmap Set.toList -> mPrev) = wFormToAForm $ do + currentRoute <- fromMaybe (error "systemMessageVolatileClusterSettingsForm called from 404-handler") <$> getCurrentRoute + let + volatileClusterSettingForm :: (Text -> Text) -> Maybe (VolatileClusterSettingsKey, Value) -> Form (VolatileClusterSettingsKey, Value) + volatileClusterSettingForm nudge mTemplate csrf = do + (keyRes, keyView) <- mpopt (selectField optionsFinite) ("" & addName (nudge "key" )) (view _1 <$> mTemplate) + (valRes, valView) <- mreq (jsonField JsonFieldNormal) ("" & addName (nudge "value")) (view _2 <$> mTemplate) + return ((,) <$> keyRes <*> valRes, $(widgetFile "widgets/massinput/systemMessage/volatileClusterSettings/form")) + + miAdd nudge submitView csrf = do + (formRes, formView) <- volatileClusterSettingForm nudge Nothing csrf + MsgRenderer mr <- getMsgRenderer + let res = formRes <&> \newDat@(newKey, _) oldDat -> if + | any (\(oldKey, _) -> newKey == oldKey) oldDat -> FormFailure [mr MsgSystemMessageOnVolatileClusterSettingKeyExists] + | otherwise -> FormSuccess $ pure newDat + return (res, $(widgetFile "widgets/massinput/systemMessage/volatileClusterSettings/add")) + miEdit nudge = volatileClusterSettingForm nudge . Just + + miButtonAction :: forall p. PathPiece p => p -> Maybe (SomeRoute UniWorX) + miButtonAction frag = Just . SomeRoute $ currentRoute :#: frag + + miLayout :: MassInputLayout ListLength (VolatileClusterSettingsKey, Value) (VolatileClusterSettingsKey, Value) + miLayout lLength _ cellWdgts delButtons addWdgts = $(widgetFile "widgets/massinput/systemMessage/volatileClusterSettings/layout") + fmap (fmap Set.fromList) $ massInputAccumEditW miAdd miEdit miButtonAction miLayout ("system-message-volatile-cluster-settings" :: Text) (fslI MsgSystemMessageOnVolatileClusterSettings) False mPrev getMessageR, postMessageR :: CryptoUUIDSystemMessage -> Handler Html diff --git a/templates/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet b/templates/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet new file mode 100644 index 000000000..7764a2693 --- /dev/null +++ b/templates/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet @@ -0,0 +1,4 @@ +$newline never +^{formView} + + ^{fvWidget submitView} diff --git a/templates/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet b/templates/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet new file mode 100644 index 000000000..324dfb3a1 --- /dev/null +++ b/templates/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet @@ -0,0 +1,6 @@ +$newline never + + #{csrf} + ^{fvWidget keyView} + + ^{fvWidget valView} diff --git a/templates/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet b/templates/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet new file mode 100644 index 000000000..5f6349265 --- /dev/null +++ b/templates/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet @@ -0,0 +1,16 @@ +$newline never + + + + + $forall coord <- review liveCoords lLength + + ^{cellWdgts ! coord} + + + ^{addWdgts ! (0, 0)}
_{MsgSystemMessageOnVolatileClusterSettingKey} + _{MsgSystemMessageOnVolatileClusterSettingValue} + +
+ ^{fvWidget (delButtons ! coord)} +