1
0
mirror of https://github.com/go-gitea/gitea.git synced 2024-07-01 02:05:30 +00:00
Signed-off-by: a1012112796 <1012112796@qq.com>
This commit is contained in:
a1012112796 2024-06-03 01:22:46 +00:00
parent 9b2b4da954
commit 85b93b2438
No known key found for this signature in database
GPG Key ID: E5FB19032C2C2A64
6 changed files with 22 additions and 21 deletions

View File

@ -42,7 +42,7 @@ func (issue *Issue) LoadProjectIssue(ctx context.Context) (err error) {
return err return err
} }
return issue.ProjectIssue.LoadProjectBoard(ctx) return issue.ProjectIssue.LoadProjectColumn(ctx)
} }
func (issue *Issue) projectID(ctx context.Context) int64 { func (issue *Issue) projectID(ctx context.Context) int64 {

View File

@ -19,7 +19,8 @@ type ProjectIssue struct { //revive:disable-line:exported
ProjectID int64 `xorm:"INDEX"` ProjectID int64 `xorm:"INDEX"`
// ProjectColumnID should not be zero since 1.22. If it's zero, the issue will not be displayed on UI and it might result in errors. // ProjectColumnID should not be zero since 1.22. If it's zero, the issue will not be displayed on UI and it might result in errors.
ProjectColumnID int64 `xorm:"'project_board_id' INDEX"` ProjectColumnID int64 `xorm:"'project_board_id' INDEX"`
ProjectColumn *Column `xorm:"-"`
// the sorting order on the column // the sorting order on the column
Sorting int64 `xorm:"NOT NULL DEFAULT 0"` Sorting int64 `xorm:"NOT NULL DEFAULT 0"`
@ -62,14 +63,14 @@ func GetProjectIssueByIssueID(ctx context.Context, issueID int64) (*ProjectIssue
return issue, nil return issue, nil
} }
func (issue *ProjectIssue) LoadProjectBoard(ctx context.Context) error { func (issue *ProjectIssue) LoadProjectColumn(ctx context.Context) error {
if issue.ProjectBoard != nil { if issue.ProjectColumn != nil {
return nil return nil
} }
var err error var err error
issue.ProjectBoard, err = GetBoard(ctx, issue.ProjectBoardID) issue.ProjectColumn, err = GetColumn(ctx, issue.ProjectColumnID)
return err return err
} }
@ -139,20 +140,20 @@ func MoveIssuesOnProjectColumn(ctx context.Context, column *Column, sortedIssueI
}) })
} }
func MoveIssueToBoardTail(ctx context.Context, issue *ProjectIssue, toBoard *Board) error { func MoveIssueToColumnTail(ctx context.Context, issue *ProjectIssue, toColumn *Column) error {
ctx, committer, err := db.TxContext(ctx) ctx, committer, err := db.TxContext(ctx)
if err != nil { if err != nil {
return err return err
} }
defer committer.Close() defer committer.Close()
num, err := toBoard.NumIssues(ctx) num, err := toColumn.NumIssues(ctx)
if err != nil { if err != nil {
return err return err
} }
_, err = db.GetEngine(ctx).Exec("UPDATE `project_issue` SET project_board_id=?, sorting=? WHERE issue_id=?", _, err = db.GetEngine(ctx).Exec("UPDATE `project_issue` SET project_board_id=?, sorting=? WHERE issue_id=?",
toBoard.ID, num, issue.IssueID) toColumn.ID, num, issue.IssueID)
if err != nil { if err != nil {
return err return err
} }

View File

@ -2050,7 +2050,7 @@ func ViewIssue(ctx *context.Context) {
ctx.Data["CanWriteProjects"] = canWriteProjects ctx.Data["CanWriteProjects"] = canWriteProjects
if canWriteProjects && issue.Project != nil { if canWriteProjects && issue.Project != nil {
ctx.Data["ProjectBoards"], err = issue.Project.GetBoards(ctx) ctx.Data["ProjectColumns"], err = issue.Project.GetColumns(ctx)
if err != nil { if err != nil {
ctx.ServerError("Project.GetBoards", err) ctx.ServerError("Project.GetBoards", err)
return return

View File

@ -619,22 +619,22 @@ func MoveBoardForIssue(ctx *context.Context) {
return return
} }
board, err := project_model.GetBoard(ctx, ctx.ParamsInt64(":boardID")) column, err := project_model.GetColumn(ctx, ctx.ParamsInt64(":columnID"))
if err != nil { if err != nil {
if project_model.IsErrProjectBoardNotExist(err) { if project_model.IsErrProjectColumnNotExist(err) {
ctx.NotFound("ProjectBoardNotExist", nil) ctx.NotFound("ErrProjectColumnNotExist", nil)
} else { } else {
ctx.ServerError("GetProjectBoard", err) ctx.ServerError("GetColumn", err)
} }
return return
} }
if board.ProjectID != issue.Project.ID { if column.ProjectID != issue.Project.ID {
ctx.NotFound("BoardNotInProject", nil) ctx.NotFound("ColumnNotInProject", nil)
return return
} }
err = project_model.MoveIssueToBoardTail(ctx, issue.ProjectIssue, board) err = project_model.MoveIssueToColumnTail(ctx, issue.ProjectIssue, column)
if err != nil { if err != nil {
ctx.NotFound("MoveIssueToBoardTail", nil) ctx.NotFound("MoveIssueToBoardTail", nil)
return return

View File

@ -1212,7 +1212,7 @@ func registerRoutes(m *web.Route) {
m.Post("/lock", reqRepoIssuesOrPullsWriter, web.Bind(forms.IssueLockForm{}), repo.LockIssue) m.Post("/lock", reqRepoIssuesOrPullsWriter, web.Bind(forms.IssueLockForm{}), repo.LockIssue)
m.Post("/unlock", reqRepoIssuesOrPullsWriter, repo.UnlockIssue) m.Post("/unlock", reqRepoIssuesOrPullsWriter, repo.UnlockIssue)
m.Post("/delete", reqRepoAdmin, repo.DeleteIssue) m.Post("/delete", reqRepoAdmin, repo.DeleteIssue)
m.Post("/move_project_board/{boardID}", repo.MoveBoardForIssue) m.Post("/move_project_column/{columnID}", repo.MoveBoardForIssue)
}, context.RepoMustNotBeArchived()) }, context.RepoMustNotBeArchived())
m.Group("/{index}", func() { m.Group("/{index}", func() {

View File

@ -200,13 +200,13 @@
<a class="item muted sidebar-item-link tw-block" href="{{.Issue.Project.Link ctx}}"> <a class="item muted sidebar-item-link tw-block" href="{{.Issue.Project.Link ctx}}">
{{svg .Issue.Project.IconName 18 "tw-mr-2"}}{{.Issue.Project.Title}} {{svg .Issue.Project.IconName 18 "tw-mr-2"}}{{.Issue.Project.Title}}
</a> </a>
<div class="ui dropdown jump {{if not .CanWriteProjects}}disabled{{end}} select-issue-project-board item tw-mx-0 tw-pr-2" data-url="{{$.Issue.Link}}/move_project_board/"> <div class="ui dropdown jump {{if not .CanWriteProjects}}disabled{{end}} select-issue-project-board item tw-mx-0 tw-pr-2" data-url="{{$.Issue.Link}}/move_project_column/">
<span class="text"> <span class="text">
{{ctx.Locale.Tr "repo.issues.move_project_boad"}}: {{.Issue.ProjectIssue.ProjectBoard.Title}} {{ctx.Locale.Tr "repo.issues.move_project_boad"}}: {{.Issue.ProjectIssue.ProjectColumn.Title}}
</span> </span>
<div class="menu"> <div class="menu">
{{if .ProjectBoards}} {{if .ProjectColumns}}
{{range .ProjectBoards}} {{range .ProjectColumns}}
<div class="item no-select" data-project-id="{{.ProjectID}}" data-board-id="{{.ID}}">{{.Title}}</div> <div class="item no-select" data-project-id="{{.ProjectID}}" data-board-id="{{.ID}}">{{.Title}}</div>
{{end}} {{end}}
{{end}} {{end}}