From fc556e0eb35636d29415ce610ae1427d13428ffb Mon Sep 17 00:00:00 2001 From: fr33domlover Date: Thu, 1 Sep 2016 17:40:02 +0000 Subject: [PATCH] Workflow scope field, minimal support --- config/models | 2 +- src/Vervis/Form/Project.hs | 24 +++++++++++++++++++----- src/Vervis/Form/Workflow.hs | 8 +++++--- src/Vervis/Handler/Workflow.hs | 2 ++ src/Vervis/Migration.hs | 4 +++- src/Vervis/Model/Workflow.hs | 8 +++++++- templates/workflow/one.hamlet | 2 ++ 7 files changed, 39 insertions(+), 11 deletions(-) diff --git a/config/models b/config/models index e4ffe6d..8f6db68 100644 --- a/config/models +++ b/config/models @@ -166,7 +166,7 @@ Workflow ident WflIdent name Text Maybe desc Text Maybe - -- scope WorkflowScope -- sharer / public / featured + scope WorkflowScope UniqueWorkflow sharer ident diff --git a/src/Vervis/Form/Project.hs b/src/Vervis/Form/Project.hs index 06f1e11..a89161b 100644 --- a/src/Vervis/Form/Project.hs +++ b/src/Vervis/Form/Project.hs @@ -26,12 +26,13 @@ import Vervis.Import hiding (on, isNothing) import Database.Esqueleto hiding ((==.)) -import qualified Database.Esqueleto as E ((==.)) +import qualified Database.Esqueleto as E import Vervis.Field.Project import Vervis.Model import Vervis.Model.Ident import Vervis.Model.Repo +import Vervis.Model.Workflow data NewProject = NewProject { npIdent :: PrjIdent @@ -53,10 +54,23 @@ newProjectAForm sid = NewProject selectField $ optionsPersistKey [ProjectRoleSharer ==. sid] [] $ rl2text . projectRoleIdent - selectWorkflow = - selectField $ - optionsPersistKey [WorkflowSharer ==. sid] [] $ - \ w -> fromMaybe (wfl2text $ workflowIdent w) $ workflowName w + selectWorkflow = selectField $ do + l <- runDB $ select $ from $ \ (w `InnerJoin` s) -> do + on $ w ^. WorkflowSharer E.==. s ^. SharerId + where_ $ + w ^. WorkflowSharer E.==. val sid E.||. + w ^. WorkflowScope E.!=. val WSSharer + return + ( s ^. SharerIdent + , w ^. WorkflowId + , w ^. WorkflowIdent + , w ^. WorkflowName + ) + let mkpair (Value sident, Value wid, Value wident, Value wname) = + ( shr2text sident <> " / " <> fromMaybe (wfl2text wident) wname + , wid + ) + optionsPairs $ map mkpair l newProjectForm :: SharerId -> Form NewProject newProjectForm sid = renderDivs $ newProjectAForm sid diff --git a/src/Vervis/Form/Workflow.hs b/src/Vervis/Form/Workflow.hs index cdb216b..8e6627d 100644 --- a/src/Vervis/Form/Workflow.hs +++ b/src/Vervis/Form/Workflow.hs @@ -37,9 +37,10 @@ import Vervis.Model.Ident import Vervis.Model.Workflow data NewWorkflow = NewWorkflow - { nwIdent :: WflIdent - , nwName :: Maybe Text - , nwDesc :: Maybe Text + { nwIdent :: WflIdent + , nwName :: Maybe Text + , nwDesc :: Maybe Text + , nwPublic :: Bool } newWorkflowAForm :: SharerId -> AForm Handler NewWorkflow @@ -47,6 +48,7 @@ newWorkflowAForm sid = NewWorkflow <$> areq (newWorkflowIdentField sid) "Identifier*" Nothing <*> aopt textField "Name" Nothing <*> aopt textField "Description" Nothing + <*> areq checkBoxField "Public*" Nothing newWorkflowForm :: SharerId -> Form NewWorkflow newWorkflowForm sid = renderDivs $ newWorkflowAForm sid diff --git a/src/Vervis/Handler/Workflow.hs b/src/Vervis/Handler/Workflow.hs index b80d440..ea9bec9 100644 --- a/src/Vervis/Handler/Workflow.hs +++ b/src/Vervis/Handler/Workflow.hs @@ -88,6 +88,8 @@ postWorkflowsR shr = do , workflowIdent = nwIdent nw , workflowName = nwName nw , workflowDesc = nwDesc nw + , workflowScope = + if nwPublic nw then WSPublic else WSSharer } runDB $ insert_ workflow setMessage "Workflow added." diff --git a/src/Vervis/Migration.hs b/src/Vervis/Migration.hs index 574a024..2d42b6b 100644 --- a/src/Vervis/Migration.hs +++ b/src/Vervis/Migration.hs @@ -65,7 +65,9 @@ runMigrations sb migrations = do changes :: MonadIO m => [SchemaT SqlBackend m ()] changes = - [ + [ addField "Workflow" + (Field "scope" (FTPrim SqlString) NotNull) + (Just "'WSSharer'") ] migrateDB :: MonadIO m => ReaderT SqlBackend m () diff --git a/src/Vervis/Model/Workflow.hs b/src/Vervis/Model/Workflow.hs index c0717cf..e85c3e7 100644 --- a/src/Vervis/Model/Workflow.hs +++ b/src/Vervis/Model/Workflow.hs @@ -14,7 +14,8 @@ -} module Vervis.Model.Workflow - ( WorkflowFieldType (..) + ( WorkflowScope (..) + , WorkflowFieldType (..) ) where @@ -22,6 +23,11 @@ import Prelude import Database.Persist.TH +data WorkflowScope = WSSharer | WSPublic | WSFeatured + deriving (Eq, Show, Read, Bounded, Enum) + +derivePersistField "WorkflowScope" + data WorkflowFieldType = WFTText | WFTEnum deriving (Eq, Show, Read, Bounded, Enum) diff --git a/templates/workflow/one.hamlet b/templates/workflow/one.hamlet index 737f4b6..c01acdb 100644 --- a/templates/workflow/one.hamlet +++ b/templates/workflow/one.hamlet @@ -18,6 +18,8 @@ $# .