KanBan: be able to set default board (#14147)
Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
parent
c09e11d018
commit
3091600cc8
7 changed files with 193 additions and 56 deletions
|
@ -8,6 +8,7 @@ import (
|
|||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/timeutil"
|
||||
|
||||
"xorm.io/builder"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
|
@ -164,22 +165,43 @@ func UpdateProjectBoard(board *ProjectBoard) error {
|
|||
func updateProjectBoard(e Engine, board *ProjectBoard) error {
|
||||
_, err := e.ID(board.ID).Cols(
|
||||
"title",
|
||||
"default",
|
||||
).Update(board)
|
||||
return err
|
||||
}
|
||||
|
||||
// GetProjectBoards fetches all boards related to a project
|
||||
func GetProjectBoards(projectID int64) ([]*ProjectBoard, error) {
|
||||
|
||||
var boards = make([]*ProjectBoard, 0, 5)
|
||||
|
||||
sess := x.Where("project_id=?", projectID)
|
||||
return boards, sess.Find(&boards)
|
||||
// if no default board set, first board is a temporary "Uncategorized" board
|
||||
func GetProjectBoards(projectID int64) (ProjectBoardList, error) {
|
||||
return getProjectBoards(x, projectID)
|
||||
}
|
||||
|
||||
// GetUncategorizedBoard represents a board for issues not assigned to one
|
||||
func GetUncategorizedBoard(projectID int64) (*ProjectBoard, error) {
|
||||
func getProjectBoards(e Engine, projectID int64) ([]*ProjectBoard, error) {
|
||||
var boards = make([]*ProjectBoard, 0, 5)
|
||||
|
||||
if err := e.Where("project_id=? AND `default`=?", projectID, false).Find(&boards); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defaultB, err := getDefaultBoard(e, projectID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return append([]*ProjectBoard{defaultB}, boards...), nil
|
||||
}
|
||||
|
||||
// getDefaultBoard return default board and create a dummy if none exist
|
||||
func getDefaultBoard(e Engine, projectID int64) (*ProjectBoard, error) {
|
||||
var board ProjectBoard
|
||||
exist, err := e.Where("project_id=? AND `default`=?", projectID, true).Get(&board)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if exist {
|
||||
return &board, nil
|
||||
}
|
||||
|
||||
// represents a board for issues not assigned to one
|
||||
return &ProjectBoard{
|
||||
ProjectID: projectID,
|
||||
Title: "Uncategorized",
|
||||
|
@ -187,22 +209,55 @@ func GetUncategorizedBoard(projectID int64) (*ProjectBoard, error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
// SetDefaultBoard represents a board for issues not assigned to one
|
||||
// if boardID is 0 unset default
|
||||
func SetDefaultBoard(projectID, boardID int64) error {
|
||||
sess := x
|
||||
|
||||
_, err := sess.Where(builder.Eq{
|
||||
"project_id": projectID,
|
||||
"`default`": true,
|
||||
}).Cols("`default`").Update(&ProjectBoard{Default: false})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if boardID > 0 {
|
||||
_, err = sess.ID(boardID).Where(builder.Eq{"project_id": projectID}).
|
||||
Cols("`default`").Update(&ProjectBoard{Default: true})
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// LoadIssues load issues assigned to this board
|
||||
func (b *ProjectBoard) LoadIssues() (IssueList, error) {
|
||||
var boardID int64
|
||||
if !b.Default {
|
||||
boardID = b.ID
|
||||
issueList := make([]*Issue, 0, 10)
|
||||
|
||||
} else {
|
||||
// Issues without ProjectBoardID
|
||||
boardID = -1
|
||||
if b.ID != 0 {
|
||||
issues, err := Issues(&IssuesOptions{
|
||||
ProjectBoardID: b.ID,
|
||||
ProjectID: b.ProjectID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
issueList = issues
|
||||
}
|
||||
issues, err := Issues(&IssuesOptions{
|
||||
ProjectBoardID: boardID,
|
||||
ProjectID: b.ProjectID,
|
||||
})
|
||||
b.Issues = issues
|
||||
return issues, err
|
||||
|
||||
if b.Default {
|
||||
issues, err := Issues(&IssuesOptions{
|
||||
ProjectBoardID: -1, // Issues without ProjectBoardID
|
||||
ProjectID: b.ProjectID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
issueList = append(issueList, issues...)
|
||||
}
|
||||
|
||||
b.Issues = issueList
|
||||
return issueList, nil
|
||||
}
|
||||
|
||||
// LoadIssues load issues assigned to the boards
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue