]> source.dussan.org Git - gitea.git/commitdiff
Use milestone deadline when sorting issues (#14551)
authorkoalp <49921473+koalp@users.noreply.github.com>
Tue, 15 Jun 2021 01:15:56 +0000 (03:15 +0200)
committerGitHub <noreply@github.com>
Tue, 15 Jun 2021 01:15:56 +0000 (21:15 -0400)
When sorting issues by deadline, the deadline of the milestone the issue
is attached to wasn't taken into account.

It have been changed and the nearest deadline is taken into account for
sorting.

Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
models/issue.go

index 769988795a144dabb0151415d0d5c4764bf20b0d..f1a092debdb5a103dbf9dc7b8963a42b69671884 100644 (file)
@@ -1127,9 +1127,18 @@ func sortIssuesSession(sess *xorm.Session, sortType string, priorityRepoID int64
                sess.Desc("issue.priority")
        case "nearduedate":
                // 253370764800 is 01/01/9999 @ 12:00am (UTC)
-               sess.OrderBy("CASE WHEN issue.deadline_unix = 0 THEN 253370764800 ELSE issue.deadline_unix END ASC")
+               sess.Join("LEFT", "milestone", "issue.milestone_id = milestone.id").
+                       OrderBy("CASE " +
+                               "WHEN issue.deadline_unix = 0 AND (milestone.deadline_unix = 0 OR milestone.deadline_unix IS NULL) THEN 253370764800 " +
+                               "WHEN milestone.deadline_unix = 0 OR milestone.deadline_unix IS NULL THEN issue.deadline_unix " +
+                               "WHEN milestone.deadline_unix < issue.deadline_unix OR issue.deadline_unix = 0 THEN milestone.deadline_unix " +
+                               "ELSE issue.deadline_unix END ASC")
        case "farduedate":
-               sess.Desc("issue.deadline_unix")
+               sess.Join("LEFT", "milestone", "issue.milestone_id = milestone.id").
+                       OrderBy("CASE " +
+                               "WHEN milestone.deadline_unix IS NULL THEN issue.deadline_unix " +
+                               "WHEN milestone.deadline_unix < issue.deadline_unix OR issue.deadline_unix = 0 THEN milestone.deadline_unix " +
+                               "ELSE issue.deadline_unix END DESC")
        case "priorityrepo":
                sess.OrderBy("CASE WHEN issue.repo_id = " + strconv.FormatInt(priorityRepoID, 10) + " THEN 1 ELSE 2 END, issue.created_unix DESC")
        default: