Skip to content

Commit b37cb32

Browse files
committed
Add web routers for project workflow
1 parent 7fefa37 commit b37cb32

File tree

4 files changed

+126
-12
lines changed

4 files changed

+126
-12
lines changed

models/project/workflows.go

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ type WorkflowAction struct {
3939
ActionValue string
4040
}
4141

42-
type ProjectWorkflowEvent struct {
42+
type ProjectWorkflow struct {
4343
ID int64
4444
ProjectID int64 `xorm:"unique(s)"`
4545
WorkflowEvent WorkflowEvent `xorm:"unique(s)"`
@@ -48,24 +48,52 @@ type ProjectWorkflowEvent struct {
4848
UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
4949
}
5050

51+
func (p *ProjectWorkflow) Link() string {
52+
return ""
53+
}
54+
55+
func newDefaultWorkflows() []*ProjectWorkflow {
56+
return []*ProjectWorkflow{
57+
{
58+
WorkflowEvent: WorkflowEventItemAddedToProject,
59+
WorkflowActions: []WorkflowAction{{ActionType: WorkflowActionTypeScope, ActionValue: "issue"}},
60+
},
61+
{
62+
ProjectID: 0,
63+
WorkflowEvent: WorkflowEventItemReopened,
64+
WorkflowActions: []WorkflowAction{{ActionType: WorkflowActionTypeScope, ActionValue: "issue"}},
65+
},
66+
}
67+
}
68+
69+
func GetWorkflowDefaultValue(workflowIDStr string) *ProjectWorkflow {
70+
workflows := newDefaultWorkflows()
71+
for _, workflow := range workflows {
72+
if workflow.WorkflowEvent == WorkflowEvent(workflowIDStr) {
73+
return workflow
74+
}
75+
}
76+
return &ProjectWorkflow{}
77+
}
78+
5179
func init() {
52-
db.RegisterModel(new(ProjectWorkflowEvent))
80+
db.RegisterModel(new(ProjectWorkflow))
5381
}
5482

55-
func FindWorkflowEvents(ctx context.Context, projectID int64) (map[WorkflowEvent]ProjectWorkflowEvent, error) {
56-
events := make(map[WorkflowEvent]ProjectWorkflowEvent)
83+
func FindWorkflowEvents(ctx context.Context, projectID int64) (map[WorkflowEvent]ProjectWorkflow, error) {
84+
events := make(map[WorkflowEvent]ProjectWorkflow)
5785
if err := db.GetEngine(ctx).Where("project_id=?", projectID).Find(&events); err != nil {
5886
return nil, err
5987
}
60-
res := make(map[WorkflowEvent]ProjectWorkflowEvent, len(events))
88+
res := make(map[WorkflowEvent]ProjectWorkflow, len(events))
6189
for _, event := range events {
6290
res[event.WorkflowEvent] = event
6391
}
6492
return res, nil
6593
}
6694

67-
func GetWorkflowEventByID(ctx context.Context, id int64) (*ProjectWorkflowEvent, error) {
68-
p, exist, err := db.GetByID[ProjectWorkflowEvent](ctx, id)
95+
func GetWorkflowByID(ctx context.Context, id int64) (*ProjectWorkflow, error) {
96+
p, exist, err := db.GetByID[ProjectWorkflow](ctx, id)
6997
if err != nil {
7098
return nil, err
7199
}
@@ -74,3 +102,19 @@ func GetWorkflowEventByID(ctx context.Context, id int64) (*ProjectWorkflowEvent,
74102
}
75103
return p, nil
76104
}
105+
106+
func GetWorkflows(ctx context.Context, projectID int64) ([]*ProjectWorkflow, error) {
107+
events := make([]*ProjectWorkflow, 0, 10)
108+
if err := db.GetEngine(ctx).Where("project_id=?", projectID).Find(&events); err != nil {
109+
return nil, err
110+
}
111+
workflows := newDefaultWorkflows()
112+
for i, defaultWorkflow := range workflows {
113+
for _, workflow := range events {
114+
if workflow.WorkflowEvent == defaultWorkflow.WorkflowEvent {
115+
workflows[i] = workflow
116+
}
117+
}
118+
}
119+
return workflows, nil
120+
}

routers/web/projects/workflows.go

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,71 @@
33

44
package projects
55

6-
import "code.gitea.io/gitea/services/context"
6+
import (
7+
"strconv"
78

8-
var tmplWorkflows = "projects/workflows"
9+
project_model "code.gitea.io/gitea/models/project"
10+
"code.gitea.io/gitea/modules/templates"
11+
"code.gitea.io/gitea/services/context"
12+
)
13+
14+
var tmplWorkflows = templates.TplName("projects/workflows")
915

1016
func Workflows(ctx *context.Context) {
11-
}
17+
projectID := ctx.PathParamInt64("id")
18+
p, err := project_model.GetProjectByID(ctx, projectID)
19+
if err != nil {
20+
if project_model.IsErrProjectNotExist(err) {
21+
ctx.NotFound(nil)
22+
} else {
23+
ctx.ServerError("GetProjectByID", err)
24+
}
25+
return
26+
}
27+
if p.RepoID != ctx.Repo.Repository.ID {
28+
ctx.NotFound(nil)
29+
return
30+
}
31+
32+
ctx.Data["Title"] = ctx.Tr("projects.workflows")
33+
ctx.Data["PageIsWorkflows"] = true
34+
ctx.Data["PageIsProjects"] = true
35+
ctx.Data["PageIsProjectsWorkflows"] = true
36+
37+
workflows, err := project_model.GetWorkflows(ctx, projectID)
38+
if err != nil {
39+
ctx.ServerError("GetWorkflows", err)
40+
return
41+
}
42+
ctx.Data["Workflows"] = workflows
43+
44+
workflowIDStr := ctx.PathParam("workflow_id")
45+
var workflow *project_model.ProjectWorkflow
46+
if workflowIDStr == "" { // get first value workflow or the first workflow
47+
for _, wf := range workflows {
48+
if wf.ID > 0 {
49+
workflow = wf
50+
break
51+
}
52+
}
53+
if workflow.ID == 0 {
54+
workflow = workflows[0]
55+
}
56+
} else {
57+
workflowID, _ := strconv.ParseInt(workflowIDStr, 10, 64)
58+
if workflowID > 0 {
59+
var err error
60+
workflow, err = project_model.GetWorkflowByID(ctx, workflowID)
61+
if err != nil {
62+
ctx.ServerError("GetWorkflowByID", err)
63+
return
64+
}
65+
ctx.Data["CurWorkflow"] = workflow
66+
} else {
67+
workflow = project_model.GetWorkflowDefaultValue(workflowIDStr)
68+
}
69+
}
70+
ctx.Data["CurWorkflow"] = workflow
1271

13-
func WorkflowEdit(ctx *context.Context) {
72+
ctx.HTML(200, tmplWorkflows)
1473
}

routers/web/web.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1404,7 +1404,7 @@ func registerRoutes(m *web.Router) {
14041404
m.Get("/{id}", repo.ViewProject)
14051405
m.Group("/{id}/workflows", func() {
14061406
m.Get("", projects.Workflows)
1407-
m.Get("/{workflow_id}", projects.WorkflowEdit)
1407+
m.Get("/{workflow_id}", projects.Workflows)
14081408
})
14091409
m.Group("", func() { //nolint:dupl
14101410
m.Get("/new", repo.RenderNewProject)

templates/projects/workflows.tmpl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<div class="ui container">
2+
<div class="ui stackable grid">
3+
<div class="four wide column">
4+
<div class="ui fluid vertical menu">
5+
{{range .Workflows}}
6+
<a class="item active" href="{{.Link}}">{{.Name}}</a>
7+
{{end}}
8+
</div>
9+
</div>
10+
</div>
11+
</div>

0 commit comments

Comments
 (0)