Projects must specify a ticket workflow
This commit is contained in:
parent
561eb6826d
commit
6e5ab77466
7 changed files with 76 additions and 11 deletions
|
@ -136,10 +136,11 @@ ProjectCollabUser
|
||||||
Project
|
Project
|
||||||
ident PrjIdent
|
ident PrjIdent
|
||||||
sharer SharerId
|
sharer SharerId
|
||||||
name Text Maybe
|
name Text Maybe
|
||||||
desc Text Maybe
|
desc Text Maybe
|
||||||
|
workflow WorkflowId
|
||||||
nextTicket Int
|
nextTicket Int
|
||||||
wiki RepoId Maybe
|
wiki RepoId Maybe
|
||||||
|
|
||||||
UniqueProject ident sharer
|
UniqueProject ident sharer
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ data NewProject = NewProject
|
||||||
{ npIdent :: PrjIdent
|
{ npIdent :: PrjIdent
|
||||||
, npName :: Maybe Text
|
, npName :: Maybe Text
|
||||||
, npDesc :: Maybe Text
|
, npDesc :: Maybe Text
|
||||||
|
, npWflow :: WorkflowId
|
||||||
, npRole :: ProjectRoleId
|
, npRole :: ProjectRoleId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,12 +46,17 @@ newProjectAForm sid = NewProject
|
||||||
<$> areq (newProjectIdentField sid) "Identifier*" Nothing
|
<$> areq (newProjectIdentField sid) "Identifier*" Nothing
|
||||||
<*> aopt textField "Name" Nothing
|
<*> aopt textField "Name" Nothing
|
||||||
<*> aopt textField "Description" Nothing
|
<*> aopt textField "Description" Nothing
|
||||||
|
<*> areq selectWorkflow "Workflow*" Nothing
|
||||||
<*> areq selectRole "Your role*" Nothing
|
<*> areq selectRole "Your role*" Nothing
|
||||||
where
|
where
|
||||||
selectRole =
|
selectRole =
|
||||||
selectField $
|
selectField $
|
||||||
optionsPersistKey [ProjectRoleSharer ==. sid] [] $
|
optionsPersistKey [ProjectRoleSharer ==. sid] [] $
|
||||||
rl2text . projectRoleIdent
|
rl2text . projectRoleIdent
|
||||||
|
selectWorkflow =
|
||||||
|
selectField $
|
||||||
|
optionsPersistKey [WorkflowSharer ==. sid] [] $
|
||||||
|
\ w -> fromMaybe (wfl2text $ workflowIdent w) $ workflowName w
|
||||||
|
|
||||||
newProjectForm :: SharerId -> Form NewProject
|
newProjectForm :: SharerId -> Form NewProject
|
||||||
newProjectForm sid = renderDivs $ newProjectAForm sid
|
newProjectForm sid = renderDivs $ newProjectAForm sid
|
||||||
|
@ -90,6 +96,7 @@ editProjectAForm (Entity jid project) = Project
|
||||||
<*> pure (projectSharer project)
|
<*> pure (projectSharer project)
|
||||||
<*> aopt textField "Name" (Just $ projectName project)
|
<*> aopt textField "Name" (Just $ projectName project)
|
||||||
<*> aopt textField "Description" (Just $ projectDesc project)
|
<*> aopt textField "Description" (Just $ projectDesc project)
|
||||||
|
<*> pure (projectWorkflow project)
|
||||||
<*> pure (projectNextTicket project)
|
<*> pure (projectNextTicket project)
|
||||||
<*> aopt selectWiki "Wiki" (Just $ projectWiki project)
|
<*> aopt selectWiki "Wiki" (Just $ projectWiki project)
|
||||||
where
|
where
|
||||||
|
|
|
@ -42,7 +42,7 @@ import Yesod.Core (defaultLayout)
|
||||||
import Yesod.Core.Handler (redirect, setMessage, lookupPostParam, notFound)
|
import Yesod.Core.Handler (redirect, setMessage, lookupPostParam, notFound)
|
||||||
import Yesod.Form.Functions (runFormPost)
|
import Yesod.Form.Functions (runFormPost)
|
||||||
import Yesod.Form.Types (FormResult (..))
|
import Yesod.Form.Types (FormResult (..))
|
||||||
import Yesod.Persist.Core (runDB, getBy404)
|
import Yesod.Persist.Core (runDB, get404, getBy404)
|
||||||
|
|
||||||
import qualified Database.Esqueleto as E
|
import qualified Database.Esqueleto as E
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ import Vervis.Model.Ident
|
||||||
import Vervis.Model.Repo
|
import Vervis.Model.Repo
|
||||||
import Vervis.Settings
|
import Vervis.Settings
|
||||||
import Vervis.Widget.Sharer
|
import Vervis.Widget.Sharer
|
||||||
|
import Vervis.Widget.Workflow
|
||||||
|
|
||||||
getProjectsR :: ShrIdent -> Handler Html
|
getProjectsR :: ShrIdent -> Handler Html
|
||||||
getProjectsR ident = do
|
getProjectsR ident = do
|
||||||
|
@ -77,6 +78,7 @@ postProjectsR shr = do
|
||||||
, projectSharer = sid
|
, projectSharer = sid
|
||||||
, projectName = npName np
|
, projectName = npName np
|
||||||
, projectDesc = npDesc np
|
, projectDesc = npDesc np
|
||||||
|
, projectWorkflow = npWflow np
|
||||||
, projectNextTicket = 1
|
, projectNextTicket = 1
|
||||||
, projectWiki = Nothing
|
, projectWiki = Nothing
|
||||||
}
|
}
|
||||||
|
@ -104,11 +106,16 @@ getProjectNewR shr = do
|
||||||
|
|
||||||
getProjectR :: ShrIdent -> PrjIdent -> Handler Html
|
getProjectR :: ShrIdent -> PrjIdent -> Handler Html
|
||||||
getProjectR shar proj = do
|
getProjectR shar proj = do
|
||||||
(project, repos) <- runDB $ do
|
(project, workflow, wsharer, repos) <- runDB $ do
|
||||||
Entity sid _s <- getBy404 $ UniqueSharer shar
|
Entity sid s <- getBy404 $ UniqueSharer shar
|
||||||
Entity pid p <- getBy404 $ UniqueProject proj sid
|
Entity pid p <- getBy404 $ UniqueProject proj sid
|
||||||
|
w <- get404 $ projectWorkflow p
|
||||||
|
sw <-
|
||||||
|
if workflowSharer w == sid
|
||||||
|
then return s
|
||||||
|
else get404 $ workflowSharer w
|
||||||
rs <- selectList [RepoProject ==. Just pid] [Asc RepoIdent]
|
rs <- selectList [RepoProject ==. Just pid] [Asc RepoIdent]
|
||||||
return (p, rs)
|
return (p, w, sw, rs)
|
||||||
defaultLayout $(widgetFile "project/one")
|
defaultLayout $(widgetFile "project/one")
|
||||||
|
|
||||||
putProjectR :: ShrIdent -> PrjIdent -> Handler Html
|
putProjectR :: ShrIdent -> PrjIdent -> Handler Html
|
||||||
|
|
29
src/Vervis/Widget/Workflow.hs
Normal file
29
src/Vervis/Widget/Workflow.hs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{- This file is part of Vervis.
|
||||||
|
-
|
||||||
|
- Written in 2016 by fr33domlover <fr33domlover@riseup.net>.
|
||||||
|
-
|
||||||
|
- ♡ Copying is an act of love. Please copy, reuse and share.
|
||||||
|
-
|
||||||
|
- The author(s) have dedicated all copyright and related and neighboring
|
||||||
|
- rights to this software to the public domain worldwide. This software is
|
||||||
|
- distributed without any warranty.
|
||||||
|
-
|
||||||
|
- You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
|
- with this software. If not, see
|
||||||
|
- <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
-}
|
||||||
|
|
||||||
|
module Vervis.Widget.Workflow
|
||||||
|
( workflowLinkW
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
import Prelude
|
||||||
|
|
||||||
|
import Vervis.Foundation
|
||||||
|
import Vervis.Model
|
||||||
|
import Vervis.Model.Ident (wfl2text)
|
||||||
|
import Vervis.Settings (widgetFile)
|
||||||
|
|
||||||
|
workflowLinkW :: Sharer -> Workflow -> Widget
|
||||||
|
workflowLinkW sharer workflow = $(widgetFile "workflow/widget/link")
|
|
@ -12,10 +12,6 @@ $# You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
$# with this software. If not, see
|
$# with this software. If not, see
|
||||||
$# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
$# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
|
||||||
<p>
|
|
||||||
This is the project page for <b>#{prj2text proj}</b>, shared by
|
|
||||||
<b>#{shr2text shar}</b>.
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href=@{ProjectEditR shar proj}>Edit this project
|
<a href=@{ProjectEditR shar proj}>Edit this project
|
||||||
|
|
||||||
|
@ -59,6 +55,11 @@ $else
|
||||||
$maybe desc <- repoDesc repository
|
$maybe desc <- repoDesc repository
|
||||||
#{desc}
|
#{desc}
|
||||||
|
|
||||||
|
<h2>Ticket workflow
|
||||||
|
|
||||||
|
<p>
|
||||||
|
^{workflowLinkW wsharer workflow}
|
||||||
|
|
||||||
<h2>Wiki
|
<h2>Wiki
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
19
templates/workflow/widget/link.hamlet
Normal file
19
templates/workflow/widget/link.hamlet
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
$# This file is part of Vervis.
|
||||||
|
$#
|
||||||
|
$# Written in 2016 by fr33domlover <fr33domlover@riseup.net>.
|
||||||
|
$#
|
||||||
|
$# ♡ Copying is an act of love. Please copy, reuse and share.
|
||||||
|
$#
|
||||||
|
$# The author(s) have dedicated all copyright and related and neighboring
|
||||||
|
$# rights to this software to the public domain worldwide. This software is
|
||||||
|
$# distributed without any warranty.
|
||||||
|
$#
|
||||||
|
$# You should have received a copy of the CC0 Public Domain Dedication along
|
||||||
|
$# with this software. If not, see
|
||||||
|
$# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||||
|
|
||||||
|
<a href=@{WorkflowR (sharerIdent sharer) (workflowIdent workflow)}>
|
||||||
|
$maybe name <- workflowName workflow
|
||||||
|
#{name}
|
||||||
|
$nothing
|
||||||
|
#{wfl2text $ workflowIdent workflow}
|
|
@ -169,6 +169,7 @@ library
|
||||||
Vervis.Widget.Role
|
Vervis.Widget.Role
|
||||||
Vervis.Widget.Sharer
|
Vervis.Widget.Sharer
|
||||||
Vervis.Widget.Ticket
|
Vervis.Widget.Ticket
|
||||||
|
Vervis.Widget.Workflow
|
||||||
Vervis.Wiki
|
Vervis.Wiki
|
||||||
-- other-modules:
|
-- other-modules:
|
||||||
default-extensions: TemplateHaskell
|
default-extensions: TemplateHaskell
|
||||||
|
|
Loading…
Reference in a new issue