|
|
|
@ -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 {
|
|
|
|
|