Skip to content

Commit 866c5cf

Browse files
committed
fix search implementation
1 parent fed4ee8 commit 866c5cf

File tree

4 files changed

+41
-16
lines changed

4 files changed

+41
-16
lines changed

models/org.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,11 @@ func GetOrgsByUserID(userID int64, showAll bool) ([]*User, error) {
350350
return getOrgsByUserID(sess, userID, showAll)
351351
}
352352

353-
func getOwnedOrgsByUserID(sess *xorm.Session, userID int64) ([]*User, error) {
353+
func getOwnedOrgsByUserID(sess *xorm.Session, userID int64, showAll bool) ([]*User, error) {
354354
orgs := make([]*User, 0, 10)
355+
if !showAll {
356+
sess.And("`org_user`.is_public=?", true)
357+
}
355358
return orgs, sess.
356359
Where("`org_user`.uid=?", userID).
357360
And("`org_user`.is_owner=?", true).
@@ -361,16 +364,16 @@ func getOwnedOrgsByUserID(sess *xorm.Session, userID int64) ([]*User, error) {
361364
}
362365

363366
// GetOwnedOrgsByUserID returns a list of organizations are owned by given user ID.
364-
func GetOwnedOrgsByUserID(userID int64) ([]*User, error) {
367+
func GetOwnedOrgsByUserID(userID int64, showAll bool) ([]*User, error) {
365368
sess := x.NewSession()
366369
defer sess.Close()
367-
return getOwnedOrgsByUserID(sess, userID)
370+
return getOwnedOrgsByUserID(sess, userID, showAll)
368371
}
369372

370373
// GetOwnedOrgsByUserIDDesc returns a list of organizations are owned by
371374
// given user ID, ordered descending by the given condition.
372-
func GetOwnedOrgsByUserIDDesc(userID int64, desc string) ([]*User, error) {
373-
return getOwnedOrgsByUserID(x.Desc(desc), userID)
375+
func GetOwnedOrgsByUserIDDesc(userID int64, desc string, showAll bool) ([]*User, error) {
376+
return getOwnedOrgsByUserID(x.Desc(desc), userID, showAll)
374377
}
375378

376379
// GetOrgUsersByUserID returns all organization-user relations by user ID.

models/repo_list.go

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,26 +155,44 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
155155
// Append conditions
156156
if !opts.Starred && opts.OwnerID > 0 {
157157
var searcherReposCond builder.Cond = builder.Eq{"owner_id": opts.OwnerID}
158+
var ownerIds []int64
159+
// Searcher == Owner
158160
if opts.Searcher != nil {
159-
var ownerIds []int64
160-
161161
ownerIds = append(ownerIds, opts.Searcher.ID)
162-
err = opts.Searcher.GetOrganizations(true)
162+
err = opts.Searcher.GetOwnedOrganizations(true)
163163

164164
if err != nil {
165165
return nil, 0, fmt.Errorf("Organization: %v", err)
166166
}
167167

168-
for _, org := range opts.Searcher.Orgs {
168+
for _, org := range opts.Searcher.OwnedOrgs {
169169
ownerIds = append(ownerIds, org.ID)
170170
}
171171

172-
searcherReposCond = searcherReposCond.Or(builder.In("owner_id", ownerIds))
173172
if opts.Collaborate {
174-
searcherReposCond = searcherReposCond.Or(builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ? AND owner_id != ?)",
173+
searcherReposCond = searcherReposCond.Or(builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ?) AND owner_id != ?",
175174
opts.Searcher.ID, opts.Searcher.ID))
176175
}
176+
} else if opts.OwnerID > 0 {
177+
ownerIds = append(ownerIds, opts.OwnerID)
178+
179+
owner, err := GetUserByID(opts.OwnerID)
180+
if err != nil {
181+
return nil, 0, fmt.Errorf("User: %v", err)
182+
}
183+
184+
err = owner.GetOwnedOrganizations(false)
185+
186+
for _, org := range owner.OwnedOrgs {
187+
ownerIds = append(ownerIds, org.ID)
188+
}
189+
190+
if err != nil {
191+
return nil, 0, fmt.Errorf("Organization: %v", err)
192+
}
193+
177194
}
195+
searcherReposCond = searcherReposCond.Or(builder.In("owner_id", ownerIds))
178196
cond = cond.And(searcherReposCond)
179197
}
180198

@@ -268,17 +286,21 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList
268286
var ownerIds []int64
269287

270288
ownerIds = append(ownerIds, opts.Searcher.ID)
271-
err := opts.Searcher.GetOrganizations(true)
289+
err := opts.Searcher.GetOwnedOrganizations(true)
272290

273291
if err != nil {
274292
return nil, 0, fmt.Errorf("Organization: %v", err)
275293
}
276294

277-
for _, org := range opts.Searcher.Orgs {
295+
for _, org := range opts.Searcher.OwnedOrgs {
278296
ownerIds = append(ownerIds, org.ID)
279297
}
280298

281299
cond = cond.Or(builder.In("owner_id", ownerIds))
300+
if opts.Collaborate {
301+
cond = cond.Or(builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ?) AND owner_id != ?",
302+
opts.Searcher.ID, opts.Searcher.ID))
303+
}
282304
}
283305

284306
count, err := x.Where(cond).Count(new(Repository))

models/user.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,8 @@ func (u *User) GetMirrorRepositories() ([]*Repository, error) {
554554
}
555555

556556
// GetOwnedOrganizations returns all organizations that user owns.
557-
func (u *User) GetOwnedOrganizations() (err error) {
558-
u.OwnedOrgs, err = GetOwnedOrgsByUserID(u.ID)
557+
func (u *User) GetOwnedOrganizations(showAll bool) (err error) {
558+
u.OwnedOrgs, err = GetOwnedOrgsByUserID(u.ID, showAll)
559559
return err
560560
}
561561

routers/repo/repo.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func MustBeNotBare(ctx *context.Context) {
3535
}
3636

3737
func checkContextUser(ctx *context.Context, uid int64) *models.User {
38-
orgs, err := models.GetOwnedOrgsByUserIDDesc(ctx.User.ID, "updated_unix")
38+
orgs, err := models.GetOwnedOrgsByUserIDDesc(ctx.User.ID, "updated_unix", true)
3939
if err != nil {
4040
ctx.Handle(500, "GetOwnedOrgsByUserIDDesc", err)
4141
return nil

0 commit comments

Comments
 (0)