Bladeren bron

#1585 order owners list by last changed time

Unknwon 9 jaren geleden
bovenliggende
commit
3d9b98fae4
3 gewijzigde bestanden met toevoegingen van 32 en 3 verwijderingen
  1. 21 0
      models/org.go
  2. 7 0
      models/user.go
  3. 4 3
      routers/repo/repo.go

+ 21 - 0
models/org.go

@@ -9,6 +9,8 @@ import (
 	"fmt"
 	"os"
 	"strings"
+
+	"github.com/go-xorm/xorm"
 )
 
 var (
@@ -251,6 +253,25 @@ func IsPublicMembership(orgId, uid int64) bool {
 	return has
 }
 
+func getOwnedOrgsByUserID(sess *xorm.Session, userID int64) ([]*User, error) {
+	orgs := make([]*User, 0, 10)
+	return orgs, sess.Where("`org_user`.uid=?", userID).And("`org_user`.is_owner=?", true).
+		Join("INNER", "`org_user`", "`org_user`.org_id=`user`.id").Find(&orgs)
+}
+
+// GetOwnedOrgsByUserID returns a list of organizations are owned by given user ID.
+func GetOwnedOrgsByUserID(userID int64) ([]*User, error) {
+	sess := x.NewSession()
+	return getOwnedOrgsByUserID(sess, userID)
+}
+
+// GetOwnedOrganizationsByUserIDDesc returns a list of organizations are owned by
+// given user ID and descring order by given condition.
+func GetOwnedOrgsByUserIDDesc(userID int64, desc string) ([]*User, error) {
+	sess := x.NewSession()
+	return getOwnedOrgsByUserID(sess.Desc(desc), userID)
+}
+
 // GetOrgUsersByUserId returns all organization-user relations by user ID.
 func GetOrgUsersByUserId(uid int64) ([]*OrgUser, error) {
 	ous := make([]*OrgUser, 0, 10)

+ 7 - 0
models/user.go

@@ -61,6 +61,7 @@ type User struct {
 	LoginSource int64 `xorm:"NOT NULL DEFAULT 0"`
 	LoginName   string
 	Type        UserType
+	OwnedOrgs   []*User       `xorm:"-"`
 	Orgs        []*User       `xorm:"-"`
 	Repos       []*Repository `xorm:"-"`
 	Location    string
@@ -307,6 +308,12 @@ func (u *User) GetRepositories() (err error) {
 	return err
 }
 
+// GetOwnedOrganizations returns all organizations that user owns.
+func (u *User) GetOwnedOrganizations() (err error) {
+	u.OwnedOrgs, err = GetOwnedOrgsByUserID(u.Id)
+	return err
+}
+
 // GetOrganizations returns all organizations that user belongs to.
 func (u *User) GetOrganizations() error {
 	ous, err := GetOrgUsersByUserId(u.Id)

+ 4 - 3
routers/repo/repo.go

@@ -28,11 +28,12 @@ const (
 )
 
 func checkContextUser(ctx *middleware.Context, uid int64) *models.User {
-	if err := ctx.User.GetOrganizations(); err != nil {
-		ctx.Handle(500, "GetOrganizations", err)
+	orgs, err := models.GetOwnedOrgsByUserIDDesc(ctx.User.Id, "updated")
+	if err != nil {
+		ctx.Handle(500, "GetOwnedOrganizationsByUserIDDesc", err)
 		return nil
 	}
-	ctx.Data["Orgs"] = ctx.User.Orgs
+	ctx.Data["Orgs"] = orgs
 
 	// Not equal means current user is an organization.
 	if uid == ctx.User.Id || uid == 0 {