aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Franz <info@jonasfranz.software>2017-06-25 20:20:29 +0200
committerKim "BKC" Carlbäcker <kim.carlbacker@gmail.com>2017-06-25 20:20:29 +0200
commit441986a473a666e0a6a34ec49c50b5aa19245cf8 (patch)
tree67d45e4b2268a896649ef093cdd0b01ffed5aa1e
parent735676267e48e6a57b250825e2e77edbb513e11d (diff)
downloadgitea-441986a473a666e0a6a34ec49c50b5aa19245cf8.tar.gz
gitea-441986a473a666e0a6a34ec49c50b5aa19245cf8.zip
Fix "Dashboard shows deleted comments" (#1995)
-rw-r--r--models/action.go40
-rw-r--r--models/action_test.go3
-rw-r--r--models/issue_comment.go3
-rw-r--r--models/migrations/migrations.go2
-rw-r--r--models/migrations/v35.go25
-rw-r--r--routers/user/home.go5
-rw-r--r--routers/user/profile.go2
-rw-r--r--templates/user/dashboard/feeds.tmpl2
8 files changed, 78 insertions, 4 deletions
diff --git a/models/action.go b/models/action.go
index bf3ce027cf..9a12e9229b 100644
--- a/models/action.go
+++ b/models/action.go
@@ -9,6 +9,7 @@ import (
"fmt"
"path"
"regexp"
+ "strconv"
"strings"
"time"
"unicode"
@@ -77,6 +78,9 @@ type Action struct {
ActUser *User `xorm:"-"`
RepoID int64 `xorm:"INDEX"`
Repo *Repository `xorm:"-"`
+ CommentID int64 `xorm:"INDEX"`
+ Comment *Comment `xorm:"-"`
+ IsDeleted bool `xorm:"INDEX NOT NULL DEFAULT false"`
RefName string
IsPrivate bool `xorm:"INDEX NOT NULL DEFAULT false"`
Content string `xorm:"TEXT"`
@@ -191,6 +195,35 @@ func (a *Action) GetRepoLink() string {
return "/" + a.GetRepoPath()
}
+// GetCommentLink returns link to action comment.
+func (a *Action) GetCommentLink() string {
+ if a == nil {
+ return "#"
+ }
+ if a.Comment == nil && a.CommentID != 0 {
+ a.Comment, _ = GetCommentByID(a.CommentID)
+ }
+ if a.Comment != nil {
+ return a.Comment.HTMLURL()
+ }
+ if len(a.GetIssueInfos()) == 0 {
+ return "#"
+ }
+ //Return link to issue
+ issueIDString := a.GetIssueInfos()[0]
+ issueID, err := strconv.ParseInt(issueIDString, 10, 64)
+ if err != nil {
+ return "#"
+ }
+
+ issue, err := GetIssueByID(issueID)
+ if err != nil {
+ return "#"
+ }
+
+ return issue.HTMLURL()
+}
+
// GetBranch returns the action's repository branch.
func (a *Action) GetBranch() string {
return a.RefName
@@ -678,6 +711,7 @@ type GetFeedsOptions struct {
RequestingUserID int64
IncludePrivate bool // include private actions
OnlyPerformedBy bool // only actions performed by requested user
+ IncludeDeleted bool // include deleted actions
}
// GetFeeds returns actions according to the provided options
@@ -706,5 +740,11 @@ func GetFeeds(opts GetFeedsOptions) ([]*Action, error) {
if opts.RequestedUser.IsOrganization() {
sess.In("repo_id", repoIDs)
}
+
+ if !opts.IncludeDeleted {
+ sess.And("is_deleted = ?", false)
+
+ }
+
return actions, sess.Find(&actions)
}
diff --git a/models/action_test.go b/models/action_test.go
index debc884b37..96ee9a5f73 100644
--- a/models/action_test.go
+++ b/models/action_test.go
@@ -310,6 +310,7 @@ func TestGetFeeds(t *testing.T) {
RequestingUserID: user.ID,
IncludePrivate: true,
OnlyPerformedBy: false,
+ IncludeDeleted: true,
})
assert.NoError(t, err)
assert.Len(t, actions, 1)
@@ -337,6 +338,7 @@ func TestGetFeeds2(t *testing.T) {
RequestingUserID: userID,
IncludePrivate: true,
OnlyPerformedBy: false,
+ IncludeDeleted: true,
})
assert.NoError(t, err)
assert.Len(t, actions, 1)
@@ -348,6 +350,7 @@ func TestGetFeeds2(t *testing.T) {
RequestingUserID: userID,
IncludePrivate: false,
OnlyPerformedBy: false,
+ IncludeDeleted: true,
})
assert.NoError(t, err)
assert.Len(t, actions, 0)
diff --git a/models/issue_comment.go b/models/issue_comment.go
index 8be1ca6d40..de963f45f6 100644
--- a/models/issue_comment.go
+++ b/models/issue_comment.go
@@ -334,6 +334,8 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err
Content: fmt.Sprintf("%d|%s", opts.Issue.Index, strings.Split(opts.Content, "\n")[0]),
RepoID: opts.Repo.ID,
Repo: opts.Repo,
+ Comment: comment,
+ CommentID: comment.ID,
IsPrivate: opts.Repo.IsPrivate,
}
@@ -666,6 +668,7 @@ func DeleteComment(comment *Comment) error {
return err
}
}
+ sess.Where("comment_id = ?", comment.ID).Cols("is_deleted").Update(&Action{IsDeleted: true})
return sess.Commit()
}
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 99fd012480..ae15c9f479 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -118,6 +118,8 @@ var migrations = []Migration{
NewMigration("remove columns from action", removeActionColumns),
// v34 -> v35
NewMigration("give all units to owner teams", giveAllUnitsToOwnerTeams),
+ // v35 -> v36
+ NewMigration("adds comment to an action", addCommentIDToAction),
}
// Migrate database to current version
diff --git a/models/migrations/v35.go b/models/migrations/v35.go
new file mode 100644
index 0000000000..7746663a40
--- /dev/null
+++ b/models/migrations/v35.go
@@ -0,0 +1,25 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "fmt"
+
+ "github.com/go-xorm/xorm"
+)
+
+func addCommentIDToAction(x *xorm.Engine) error {
+ // Action see models/action.go
+ type Action struct {
+ CommentID int64 `xorm:"INDEX"`
+ IsDeleted bool `xorm:"INDEX NOT NULL DEFAULT false"`
+ }
+
+ if err := x.Sync2(new(Action)); err != nil {
+ return fmt.Errorf("Sync2: %v", err)
+ }
+
+ return nil
+}
diff --git a/routers/user/home.go b/routers/user/home.go
index 9ff03cf04f..7128890690 100644
--- a/routers/user/home.go
+++ b/routers/user/home.go
@@ -54,7 +54,7 @@ func getDashboardContextUser(ctx *context.Context) *models.User {
}
// retrieveFeeds loads feeds for the specified user
-func retrieveFeeds(ctx *context.Context, user *models.User, includePrivate, isProfile bool) {
+func retrieveFeeds(ctx *context.Context, user *models.User, includePrivate, isProfile bool, includeDeletedComments bool) {
var requestingID int64
if ctx.User != nil {
requestingID = ctx.User.ID
@@ -64,6 +64,7 @@ func retrieveFeeds(ctx *context.Context, user *models.User, includePrivate, isPr
RequestingUserID: requestingID,
IncludePrivate: includePrivate,
OnlyPerformedBy: isProfile,
+ IncludeDeleted: includeDeletedComments,
})
if err != nil {
ctx.Handle(500, "GetFeeds", err)
@@ -186,7 +187,7 @@ func Dashboard(ctx *context.Context) {
ctx.Data["MirrorCount"] = len(mirrors)
ctx.Data["Mirrors"] = mirrors
- retrieveFeeds(ctx, ctxUser, true, false)
+ retrieveFeeds(ctx, ctxUser, true, false, false)
if ctx.Written() {
return
}
diff --git a/routers/user/profile.go b/routers/user/profile.go
index 1768cec7b1..c7d761052e 100644
--- a/routers/user/profile.go
+++ b/routers/user/profile.go
@@ -138,7 +138,7 @@ func Profile(ctx *context.Context) {
ctx.Data["Keyword"] = keyword
switch tab {
case "activity":
- retrieveFeeds(ctx, ctxUser, showPrivate, true)
+ retrieveFeeds(ctx, ctxUser, showPrivate, true, false)
if ctx.Written() {
return
}
diff --git a/templates/user/dashboard/feeds.tmpl b/templates/user/dashboard/feeds.tmpl
index 12768bca52..855a79786a 100644
--- a/templates/user/dashboard/feeds.tmpl
+++ b/templates/user/dashboard/feeds.tmpl
@@ -63,7 +63,7 @@
{{else if eq .GetOpType 7}}
<span class="text truncate issue title has-emoji">{{index .GetIssueInfos 1}}</span>
{{else if eq .GetOpType 10}}
- <span class="text truncate issue title has-emoji">{{.GetIssueTitle}}</span>
+ <a href="{{.GetCommentLink}}" class="text truncate issue title has-emoji">{{.GetIssueTitle}}</a>
<p class="text light grey has-emoji">{{index .GetIssueInfos 1}}</p>
{{else if eq .GetOpType 11}}
<p class="text light grey has-emoji">{{index .GetIssueInfos 1}}</p>