diff options
author | Bwko <bouwko@gmail.com> | 2017-08-23 03:30:54 +0200 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2017-08-23 09:30:54 +0800 |
commit | 1a5fe4326f1166eac447cb598db34f7ae348d610 (patch) | |
tree | 0ca4412138469051eda63a981b32353e2139698e /models/action.go | |
parent | faf4b503b24d33a2a0f455d26bb782345ab8e0c9 (diff) | |
download | gitea-1a5fe4326f1166eac447cb598db34f7ae348d610.tar.gz gitea-1a5fe4326f1166eac447cb598db34f7ae348d610.zip |
Add collaborative repositories to the dashboard (#2205)
* Add collaborative repositories to the dashboard
Remove some unused code from the Dashboard func
* fix some bug and some refactor
* fix tests
Diffstat (limited to 'models/action.go')
-rw-r--r-- | models/action.go | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/models/action.go b/models/action.go index 852bb66d28..595be92f76 100644 --- a/models/action.go +++ b/models/action.go @@ -15,6 +15,7 @@ import ( "unicode" "github.com/Unknwon/com" + "github.com/go-xorm/builder" "github.com/go-xorm/xorm" "code.gitea.io/git" @@ -712,10 +713,13 @@ type GetFeedsOptions struct { IncludePrivate bool // include private actions OnlyPerformedBy bool // only actions performed by requested user IncludeDeleted bool // include deleted actions + Collaborate bool // Include collaborative repositories } // GetFeeds returns actions according to the provided options func GetFeeds(opts GetFeedsOptions) ([]*Action, error) { + cond := builder.NewCond() + var repoIDs []int64 if opts.RequestedUser.IsOrganization() { env, err := opts.RequestedUser.AccessibleReposEnv(opts.RequestingUserID) @@ -725,26 +729,28 @@ func GetFeeds(opts GetFeedsOptions) ([]*Action, error) { if repoIDs, err = env.RepoIDs(1, opts.RequestedUser.NumRepos); err != nil { return nil, fmt.Errorf("GetUserRepositories: %v", err) } + + cond = cond.And(builder.In("repo_id", repoIDs)) + } + + if opts.Collaborate { + cond = builder.Eq{"user_id": opts.RequestedUser.ID}.Or( + builder.Expr(`repo_id IN (SELECT repo_id FROM "access" WHERE access.user_id = ?)`, opts.RequestedUser.ID)) + } else { + cond = builder.Eq{"user_id": opts.RequestedUser.ID} } - actions := make([]*Action, 0, 20) - sess := x.Limit(20). - Desc("id"). - Where("user_id = ?", opts.RequestedUser.ID) if opts.OnlyPerformedBy { - sess.And("act_user_id = ?", opts.RequestedUser.ID) + cond = cond.And(builder.Eq{"act_user_id": opts.RequestedUser.ID}) } if !opts.IncludePrivate { - sess.And("is_private = ?", false) - } - if opts.RequestedUser.IsOrganization() { - sess.In("repo_id", repoIDs) + cond = cond.And(builder.Eq{"is_private": false}) } if !opts.IncludeDeleted { - sess.And("is_deleted = ?", false) - + cond = cond.And(builder.Eq{"is_deleted": false}) } - return actions, sess.Find(&actions) + actions := make([]*Action, 0, 20) + return actions, x.Limit(20).Desc("id").Where(cond).Find(&actions) } |