forked from p85947160/gitea
parent
59f25587e8
commit
889dea8fc1
|
@ -114,11 +114,12 @@ func doCheckOrgCounts(username string, orgCounts map[string]int, strict bool, ca
|
||||||
Name: username,
|
Name: username,
|
||||||
}).(*models.User)
|
}).(*models.User)
|
||||||
|
|
||||||
user.GetOrganizations(&models.SearchOrganizationsOptions{All: true})
|
orgs, err := models.GetOrgsByUserID(user.ID, true)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
calcOrgCounts := map[string]int{}
|
calcOrgCounts := map[string]int{}
|
||||||
|
|
||||||
for _, org := range user.Orgs {
|
for _, org := range orgs {
|
||||||
calcOrgCounts[org.LowerName] = org.NumRepos
|
calcOrgCounts[org.LowerName] = org.NumRepos
|
||||||
count, ok := canonicalCounts[org.LowerName]
|
count, ok := canonicalCounts[org.LowerName]
|
||||||
if ok {
|
if ok {
|
||||||
|
|
|
@ -112,7 +112,6 @@ type User struct {
|
||||||
LoginName string
|
LoginName string
|
||||||
Type UserType
|
Type UserType
|
||||||
OwnedOrgs []*User `xorm:"-"`
|
OwnedOrgs []*User `xorm:"-"`
|
||||||
Orgs []*User `xorm:"-"`
|
|
||||||
Repos []*Repository `xorm:"-"`
|
Repos []*Repository `xorm:"-"`
|
||||||
Location string
|
Location string
|
||||||
Website string
|
Website string
|
||||||
|
@ -603,58 +602,6 @@ func (u *User) GetOwnedOrganizations() (err error) {
|
||||||
return err
|
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,
|
// DisplayName returns full name if it's not empty,
|
||||||
// returns username otherwise.
|
// returns username otherwise.
|
||||||
func (u *User) DisplayName() string {
|
func (u *User) DisplayName() string {
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
:more-repos-link="'{{.ContextUser.HomeLink}}'"
|
:more-repos-link="'{{.ContextUser.HomeLink}}'"
|
||||||
{{if not .ContextUser.IsOrganization}}
|
{{if not .ContextUser.IsOrganization}}
|
||||||
:organizations="[
|
:organizations="[
|
||||||
{{range .ContextUser.Orgs}}
|
{{range .Orgs}}
|
||||||
{name: '{{.Name}}', num_repos: '{{.NumRepos}}'},
|
{name: '{{.Name}}', num_repos: '{{.NumRepos}}'},
|
||||||
{{end}}
|
{{end}}
|
||||||
]"
|
]"
|
||||||
|
|
Loading…
Reference in New Issue