mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 06:24:11 +01:00 
			
		
		
		
	Fix dashboard issues labels filter bug (#14210)
Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		
							parent
							
								
									a07e67d9cc
								
							
						
					
					
						commit
						21adeaad70
					
				@ -1500,6 +1500,7 @@ type UserIssueStatsOptions struct {
 | 
			
		||||
	IsPull      bool
 | 
			
		||||
	IsClosed    bool
 | 
			
		||||
	IssueIDs    []int64
 | 
			
		||||
	LabelIDs    []int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetUserIssueStats returns issue statistic information for dashboard by given conditions.
 | 
			
		||||
@ -1516,29 +1517,38 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
 | 
			
		||||
		cond = cond.And(builder.In("issue.id", opts.IssueIDs))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sess := func(cond builder.Cond) *xorm.Session {
 | 
			
		||||
		s := x.Where(cond)
 | 
			
		||||
		if len(opts.LabelIDs) > 0 {
 | 
			
		||||
			s.Join("INNER", "issue_label", "issue_label.issue_id = issue.id").
 | 
			
		||||
				In("issue_label.label_id", opts.LabelIDs)
 | 
			
		||||
		}
 | 
			
		||||
		return s
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch opts.FilterMode {
 | 
			
		||||
	case FilterModeAll:
 | 
			
		||||
		stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
		stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
			And(builder.In("issue.repo_id", opts.UserRepoIDs)).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
		stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
			And(builder.In("issue.repo_id", opts.UserRepoIDs)).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	case FilterModeAssign:
 | 
			
		||||
		stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
		stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
			Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
 | 
			
		||||
			And("issue_assignees.assignee_id = ?", opts.UserID).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
		stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
			Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
 | 
			
		||||
			And("issue_assignees.assignee_id = ?", opts.UserID).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
@ -1546,27 +1556,27 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	case FilterModeCreate:
 | 
			
		||||
		stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
		stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
			And("issue.poster_id = ?", opts.UserID).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
		stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
			And("issue.poster_id = ?", opts.UserID).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	case FilterModeMention:
 | 
			
		||||
		stats.OpenCount, err = x.Where(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
		stats.OpenCount, err = sess(cond).And("issue.is_closed = ?", false).
 | 
			
		||||
			Join("INNER", "issue_user", "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?", true).
 | 
			
		||||
			And("issue_user.uid = ?", opts.UserID).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		stats.ClosedCount, err = x.Where(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
		stats.ClosedCount, err = sess(cond).And("issue.is_closed = ?", true).
 | 
			
		||||
			Join("INNER", "issue_user", "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?", true).
 | 
			
		||||
			And("issue_user.uid = ?", opts.UserID).
 | 
			
		||||
			Count(new(Issue))
 | 
			
		||||
@ -1576,7 +1586,7 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cond = cond.And(builder.Eq{"issue.is_closed": opts.IsClosed})
 | 
			
		||||
	stats.AssignCount, err = x.Where(cond).
 | 
			
		||||
	stats.AssignCount, err = sess(cond).
 | 
			
		||||
		Join("INNER", "issue_assignees", "issue.id = issue_assignees.issue_id").
 | 
			
		||||
		And("issue_assignees.assignee_id = ?", opts.UserID).
 | 
			
		||||
		Count(new(Issue))
 | 
			
		||||
@ -1584,14 +1594,14 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats.CreateCount, err = x.Where(cond).
 | 
			
		||||
	stats.CreateCount, err = sess(cond).
 | 
			
		||||
		And("poster_id = ?", opts.UserID).
 | 
			
		||||
		Count(new(Issue))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats.MentionCount, err = x.Where(cond).
 | 
			
		||||
	stats.MentionCount, err = sess(cond).
 | 
			
		||||
		Join("INNER", "issue_user", "issue.id = issue_user.issue_id and issue_user.is_mentioned = ?", true).
 | 
			
		||||
		And("issue_user.uid = ?", opts.UserID).
 | 
			
		||||
		Count(new(Issue))
 | 
			
		||||
@ -1599,7 +1609,7 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats.YourRepositoriesCount, err = x.Where(cond).
 | 
			
		||||
	stats.YourRepositoriesCount, err = sess(cond).
 | 
			
		||||
		And(builder.In("issue.repo_id", opts.UserRepoIDs)).
 | 
			
		||||
		Count(new(Issue))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 | 
			
		||||
@ -580,6 +580,7 @@ func Issues(ctx *context.Context) {
 | 
			
		||||
		FilterMode:  filterMode,
 | 
			
		||||
		IsPull:      isPullList,
 | 
			
		||||
		IsClosed:    isShowClosed,
 | 
			
		||||
		LabelIDs:    opts.LabelIDs,
 | 
			
		||||
	}
 | 
			
		||||
	if len(repoIDs) > 0 {
 | 
			
		||||
		userIssueStatsOpts.UserRepoIDs = repoIDs
 | 
			
		||||
@ -599,6 +600,7 @@ func Issues(ctx *context.Context) {
 | 
			
		||||
			IsPull:      isPullList,
 | 
			
		||||
			IsClosed:    isShowClosed,
 | 
			
		||||
			IssueIDs:    issueIDsFromSearch,
 | 
			
		||||
			LabelIDs:    opts.LabelIDs,
 | 
			
		||||
		}
 | 
			
		||||
		if len(repoIDs) > 0 {
 | 
			
		||||
			statsOpts.RepoIDs = repoIDs
 | 
			
		||||
@ -621,6 +623,7 @@ func Issues(ctx *context.Context) {
 | 
			
		||||
			IsPull:      isPullList,
 | 
			
		||||
			IsClosed:    isShowClosed,
 | 
			
		||||
			IssueIDs:    issueIDsFromSearch,
 | 
			
		||||
			LabelIDs:    opts.LabelIDs,
 | 
			
		||||
		})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.ServerError("GetUserIssueStats All", err)
 | 
			
		||||
@ -672,6 +675,7 @@ func Issues(ctx *context.Context) {
 | 
			
		||||
	ctx.Data["RepoIDs"] = repoIDs
 | 
			
		||||
	ctx.Data["IsShowClosed"] = isShowClosed
 | 
			
		||||
	ctx.Data["TotalIssueCount"] = totalIssues
 | 
			
		||||
	ctx.Data["SelectLabels"] = selectLabels
 | 
			
		||||
 | 
			
		||||
	if isShowClosed {
 | 
			
		||||
		ctx.Data["State"] = "closed"
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user