From d300bfdc9c5e0b23bb6667590e7bd9d1c57f4b92 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 27 Apr 2024 21:00:21 +0800 Subject: [PATCH] Follow maintainers' suggestions --- routers/web/org/projects.go | 63 ----------------------- routers/web/repo/projects.go | 67 ------------------------- routers/web/repo/pull.go | 3 +- routers/web/shared/project/column.go | 74 ++++++++++++++++++++++++++++ routers/web/web.go | 5 +- templates/projects/view.tmpl | 2 +- 6 files changed, 79 insertions(+), 135 deletions(-) create mode 100644 routers/web/shared/project/column.go diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go index be045a2212..bc313f6593 100644 --- a/routers/web/org/projects.go +++ b/routers/web/org/projects.go @@ -693,66 +693,3 @@ func MoveIssues(ctx *context.Context) { ctx.JSONOK() } - -// MoveColumns moves or keeps columns in a project and sorts them inside that project -func MoveColumns(ctx *context.Context) { - if ctx.Doer == nil { - ctx.JSON(http.StatusForbidden, map[string]string{ - "message": "Only signed in users are allowed to perform this action.", - }) - return - } - - project, err := project_model.GetProjectByID(ctx, ctx.ParamsInt64(":id")) - if err != nil { - ctx.NotFoundOrServerError("GetProjectByID", project_model.IsErrProjectNotExist, err) - return - } - if project.OwnerID != ctx.ContextUser.ID { - ctx.NotFound("InvalidRepoID", nil) - return - } - - type movedColumnsForm struct { - Columns []struct { - ColumnID int64 `json:"columnID"` - Sorting int64 `json:"sorting"` - } `json:"columns"` - } - - form := &movedColumnsForm{} - if err = json.NewDecoder(ctx.Req.Body).Decode(&form); err != nil { - ctx.ServerError("DecodeMovedColumnsForm", err) - } - - columnIDs := make([]int64, 0, len(form.Columns)) - sortedColumnIDs := make(map[int64]int64) - for _, column := range form.Columns { - columnIDs = append(columnIDs, column.ColumnID) - sortedColumnIDs[column.Sorting] = column.ColumnID - } - movedColumns, err := project_model.GetColumnsByIDs(ctx, columnIDs) - if err != nil { - ctx.NotFoundOrServerError("GetColumnsByIDs", issues_model.IsErrIssueNotExist, err) - return - } - - if len(movedColumns) != len(form.Columns) { - ctx.ServerError("some columns do not exist", errors.New("some columns do not exist")) - return - } - - for _, column := range movedColumns { - if column.ProjectID != project.ID { - ctx.ServerError("Some column's projectID is not equal to project's ID", errors.New("Some column's projectID is not equal to project's ID")) - return - } - } - - if err = project_model.MoveColumnsOnProject(ctx, project, sortedColumnIDs); err != nil { - ctx.ServerError("MoveColumnsOnProject", err) - return - } - - ctx.JSONOK() -} diff --git a/routers/web/repo/projects.go b/routers/web/repo/projects.go index 13df083dee..4c03f436f6 100644 --- a/routers/web/repo/projects.go +++ b/routers/web/repo/projects.go @@ -681,70 +681,3 @@ func MoveIssues(ctx *context.Context) { ctx.JSONOK() } - -// MoveColumns moves or keeps columns in a project and sorts them inside that project -func MoveColumns(ctx *context.Context) { - if ctx.Doer == nil { - ctx.JSON(http.StatusForbidden, map[string]string{ - "message": "Only signed in users are allowed to perform this action.", - }) - return - } - - project, err := project_model.GetProjectByID(ctx, ctx.ParamsInt64(":id")) - if err != nil { - if project_model.IsErrProjectNotExist(err) { - ctx.NotFound("ProjectNotExist", nil) - } else { - ctx.ServerError("GetProjectByID", err) - } - return - } - if project.RepoID != ctx.Repo.Repository.ID { - ctx.NotFound("InvalidRepoID", nil) - return - } - - type movedColumnsForm struct { - Columns []struct { - ColumnID int64 `json:"columnID"` - Sorting int64 `json:"sorting"` - } `json:"columns"` - } - - form := &movedColumnsForm{} - if err = json.NewDecoder(ctx.Req.Body).Decode(&form); err != nil { - ctx.ServerError("DecodeMovedColumnsForm", err) - } - - columnIDs := make([]int64, 0, len(form.Columns)) - sortedColumnIDs := make(map[int64]int64) - for _, column := range form.Columns { - columnIDs = append(columnIDs, column.ColumnID) - sortedColumnIDs[column.Sorting] = column.ColumnID - } - movedColumns, err := project_model.GetColumnsByIDs(ctx, columnIDs) - if err != nil { - ctx.NotFoundOrServerError("GetColumnsByIDs", issues_model.IsErrIssueNotExist, err) - return - } - - if len(movedColumns) != len(form.Columns) { - ctx.ServerError("some columns do not exist", errors.New("some columns do not exist")) - return - } - - for _, column := range movedColumns { - if column.ProjectID != project.ID { - ctx.ServerError("Some column's projectID is not equal to project's ID", errors.New("Some column's projectID is not equal to project's ID")) - return - } - } - - if err = project_model.MoveColumnsOnProject(ctx, project, sortedColumnIDs); err != nil { - ctx.ServerError("MoveColumnsOnProject", err) - return - } - - ctx.JSONOK() -} diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go index 06bfa010f8..05c2a6458c 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -1327,12 +1327,11 @@ func CompareAndPullRequestPost(ctx *context.Context) { } ctx.JSONError(flashError) } - return } if projectID > 0 { if !ctx.Repo.CanWrite(unit.TypeProjects) { - log.Error("user hasn't the permission to write to projects") + ctx.Error(http.StatusBadRequest, "user hasn't the permission to write to projects") return } dstProject, err := project_model.GetProjectByID(ctx, projectID) diff --git a/routers/web/shared/project/column.go b/routers/web/shared/project/column.go new file mode 100644 index 0000000000..5fde05f0f7 --- /dev/null +++ b/routers/web/shared/project/column.go @@ -0,0 +1,74 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package project + +import ( + "errors" + + issues_model "code.gitea.io/gitea/models/issues" + project_model "code.gitea.io/gitea/models/project" + "code.gitea.io/gitea/modules/json" + "code.gitea.io/gitea/services/context" +) + +// MoveColumns moves or keeps columns in a project and sorts them inside that project +func MoveColumns(ctx *context.Context) { + project, err := project_model.GetProjectByID(ctx, ctx.ParamsInt64(":id")) + if err != nil { + ctx.NotFoundOrServerError("GetProjectByID", project_model.IsErrProjectNotExist, err) + return + } + if project.OwnerID > 0 && project.OwnerID != ctx.ContextUser.ID { + ctx.NotFound("InvalidOwnerID", nil) + return + } + if project.RepoID > 0 && project.RepoID != ctx.Repo.Repository.ID { + ctx.NotFound("InvalidRepoID", nil) + return + } + + type movedColumnsForm struct { + Columns []struct { + ColumnID int64 `json:"columnID"` + Sorting int64 `json:"sorting"` + } `json:"columns"` + } + + form := &movedColumnsForm{} + if err = json.NewDecoder(ctx.Req.Body).Decode(&form); err != nil { + ctx.ServerError("DecodeMovedColumnsForm", err) + return + } + + columnIDs := make([]int64, 0, len(form.Columns)) + sortedColumnIDs := make(map[int64]int64) + for _, column := range form.Columns { + columnIDs = append(columnIDs, column.ColumnID) + sortedColumnIDs[column.Sorting] = column.ColumnID + } + movedColumns, err := project_model.GetColumnsByIDs(ctx, columnIDs) + if err != nil { + ctx.NotFoundOrServerError("GetColumnsByIDs", issues_model.IsErrIssueNotExist, err) + return + } + + if len(movedColumns) != len(form.Columns) { + ctx.ServerError("some columns do not exist", errors.New("some columns do not exist")) + return + } + + for _, column := range movedColumns { + if column.ProjectID != project.ID { + ctx.ServerError("Some column's projectID is not equal to project's ID", errors.New("Some column's projectID is not equal to project's ID")) + return + } + } + + if err = project_model.MoveColumnsOnProject(ctx, project, sortedColumnIDs); err != nil { + ctx.ServerError("MoveColumnsOnProject", err) + return + } + + ctx.JSONOK() +} diff --git a/routers/web/web.go b/routers/web/web.go index 619bca7112..f8d793510d 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -37,6 +37,7 @@ import ( "code.gitea.io/gitea/routers/web/repo" "code.gitea.io/gitea/routers/web/repo/actions" repo_setting "code.gitea.io/gitea/routers/web/repo/setting" + "code.gitea.io/gitea/routers/web/shared/project" "code.gitea.io/gitea/routers/web/user" user_setting "code.gitea.io/gitea/routers/web/user/setting" "code.gitea.io/gitea/routers/web/user/setting/security" @@ -999,7 +1000,7 @@ func registerRoutes(m *web.Route) { m.Post("/new", web.Bind(forms.CreateProjectForm{}), org.NewProjectPost) m.Group("/{id}", func() { m.Post("", web.Bind(forms.EditProjectBoardForm{}), org.AddBoardToProjectPost) - m.Post("/move", org.MoveColumns) + m.Post("/move", project.MoveColumns) m.Post("/delete", org.DeleteProject) m.Get("/edit", org.RenderEditProject) @@ -1355,7 +1356,7 @@ func registerRoutes(m *web.Route) { m.Post("/new", web.Bind(forms.CreateProjectForm{}), repo.NewProjectPost) m.Group("/{id}", func() { m.Post("", web.Bind(forms.EditProjectBoardForm{}), repo.AddBoardToProjectPost) - m.Post("/move", repo.MoveColumns) + m.Post("/move", project.MoveColumns) m.Post("/delete", repo.DeleteProject) m.Get("/edit", repo.RenderEditProject) diff --git a/templates/projects/view.tmpl b/templates/projects/view.tmpl index 91ddf38127..47f214a44e 100644 --- a/templates/projects/view.tmpl +++ b/templates/projects/view.tmpl @@ -90,7 +90,7 @@ data-modal-default-project-column-header="{{ctx.Locale.Tr "repo.projects.column.set_default"}}" data-modal-default-project-column-content="{{ctx.Locale.Tr "repo.projects.column.set_default_desc"}}" data-url="{{$.Link}}/{{.ID}}/default"> - {{svg "octicon-star"}} + {{svg "octicon-pin"}} {{ctx.Locale.Tr "repo.projects.column.set_default"}}