parent
59f25587e8
commit
889dea8fc1
|
@ -114,11 +114,12 @@ func doCheckOrgCounts(username string, orgCounts map[string]int, strict bool, ca
|
|||
Name: username,
|
||||
}).(*models.User)
|
||||
|
||||
user.GetOrganizations(&models.SearchOrganizationsOptions{All: true})
|
||||
orgs, err := models.GetOrgsByUserID(user.ID, true)
|
||||
assert.NoError(t, err)
|
||||
|
||||
calcOrgCounts := map[string]int{}
|
||||
|
||||
for _, org := range user.Orgs {
|
||||
for _, org := range orgs {
|
||||
calcOrgCounts[org.LowerName] = org.NumRepos
|
||||
count, ok := canonicalCounts[org.LowerName]
|
||||
if ok {
|
||||
|
|
|
@ -112,7 +112,6 @@ type User struct {
|
|||
LoginName string
|
||||
Type UserType
|
||||
OwnedOrgs []*User `xorm:"-"`
|
||||
Orgs []*User `xorm:"-"`
|
||||
Repos []*Repository `xorm:"-"`
|
||||
Location string
|
||||
Website string
|
||||
|
@ -603,58 +602,6 @@ func (u *User) GetOwnedOrganizations() (err error) {
|
|||
return err
|
||||
}
|
||||
|
||||
// GetOrganizations returns paginated organizations that user belongs to.
|
||||
// TODO: does not respect All and show orgs you privately participate
|
||||
func (u *User) GetOrganizations(opts *SearchOrganizationsOptions) error {
|
||||
sess := x.NewSession()
|
||||
defer sess.Close()
|
||||
|
||||
schema, err := x.TableInfo(new(User))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
groupByCols := &strings.Builder{}
|
||||
for _, col := range schema.Columns() {
|
||||
fmt.Fprintf(groupByCols, "`%s`.%s,", schema.Name, col.Name)
|
||||
}
|
||||
groupByStr := groupByCols.String()
|
||||
groupByStr = groupByStr[0 : len(groupByStr)-1]
|
||||
|
||||
sess.Select("`user`.*, count(repo_id) as org_count").
|
||||
Table("user").
|
||||
Join("INNER", "org_user", "`org_user`.org_id=`user`.id").
|
||||
Join("LEFT", builder.
|
||||
Select("id as repo_id, owner_id as repo_owner_id").
|
||||
From("repository").
|
||||
Where(accessibleRepositoryCondition(u)), "`repository`.repo_owner_id = `org_user`.org_id").
|
||||
And("`org_user`.uid=?", u.ID).
|
||||
GroupBy(groupByStr)
|
||||
if opts.PageSize != 0 {
|
||||
sess = opts.setSessionPagination(sess)
|
||||
}
|
||||
type OrgCount struct {
|
||||
User `xorm:"extends"`
|
||||
OrgCount int
|
||||
}
|
||||
orgCounts := make([]*OrgCount, 0, 10)
|
||||
|
||||
if err := sess.
|
||||
Asc("`user`.name").
|
||||
Find(&orgCounts); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
orgs := make([]*User, len(orgCounts))
|
||||
for i, orgCount := range orgCounts {
|
||||
orgCount.User.NumRepos = orgCount.OrgCount
|
||||
orgs[i] = &orgCount.User
|
||||
}
|
||||
|
||||
u.Orgs = orgs
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DisplayName returns full name if it's not empty,
|
||||
// returns username otherwise.
|
||||
func (u *User) DisplayName() string {
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
:more-repos-link="'{{.ContextUser.HomeLink}}'"
|
||||
{{if not .ContextUser.IsOrganization}}
|
||||
:organizations="[
|
||||
{{range .ContextUser.Orgs}}
|
||||
{{range .Orgs}}
|
||||
{name: '{{.Name}}', num_repos: '{{.NumRepos}}'},
|
||||
{{end}}
|
||||
]"
|
||||
|
|
Loading…
Reference in a new issue