func LoadIssuesFromBoard(ctx context.Context, b *project_model.Board) (IssueList, error) {
issueList := make(IssueList, 0, 10)
- if b.ID != 0 {
+ if b.ID > 0 {
issues, err := Issues(ctx, &IssuesOptions{
ProjectBoardID: b.ID,
ProjectID: b.ProjectID,
if b.Default {
issues, err := Issues(ctx, &IssuesOptions{
- ProjectBoardID: -1, // Issues without ProjectBoardID
+ ProjectBoardID: db.NoConditionID,
ProjectID: b.ProjectID,
SortType: "project-column-sorting",
})
ProjectID: newProjectID,
})
}
-
-// MoveIssueAcrossProjectBoards move a card from one board to another
-func MoveIssueAcrossProjectBoards(ctx context.Context, issue *Issue, board *project_model.Board) error {
- ctx, committer, err := db.TxContext(ctx)
- if err != nil {
- return err
- }
- defer committer.Close()
- sess := db.GetEngine(ctx)
-
- var pis project_model.ProjectIssue
- has, err := sess.Where("issue_id=?", issue.ID).Get(&pis)
- if err != nil {
- return err
- }
-
- if !has {
- return fmt.Errorf("issue has to be added to a project first")
- }
-
- pis.ProjectBoardID = board.ID
- if _, err := sess.ID(pis.ID).Cols("project_board_id").Update(&pis); err != nil {
- return err
- }
-
- return committer.Commit()
-}
return sess
}
+func applyProjectBoardCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
+ // opts.ProjectBoardID == 0 means all project boards,
+ // do not need to apply any condition
+ if opts.ProjectBoardID > 0 {
+ sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": opts.ProjectBoardID}))
+ } else if opts.ProjectBoardID == db.NoConditionID {
+ sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Neq{"project_board_id": 0}))
+ }
+ return sess
+}
+
func applyRepoConditions(sess *xorm.Session, opts *IssuesOptions) *xorm.Session {
if len(opts.RepoIDs) == 1 {
opts.RepoCond = builder.Eq{"issue.repo_id": opts.RepoIDs[0]}
applyProjectCondition(sess, opts)
- if opts.ProjectBoardID != 0 {
- if opts.ProjectBoardID > 0 {
- sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": opts.ProjectBoardID}))
- } else {
- sess.In("issue.id", builder.Select("issue_id").From("project_issue").Where(builder.Eq{"project_board_id": 0}))
- }
- }
+ applyProjectBoardCondition(sess, opts)
switch opts.IsPull {
case util.OptionalBoolTrue:
}
if len(options.IncludedLabelIDs) == 0 && len(options.IncludedAnyLabelIDs) > 0 {
- _ = ctx // issue_model.GetLabelsByIDs should be called with ctx, this line can be removed when it's done.
labels, err := issue_model.GetLabelsByIDs(ctx, options.IncludedAnyLabelIDs, "name")
if err != nil {
return nil, fmt.Errorf("GetLabelsByIDs: %v", err)