diff options
Diffstat (limited to 'models/org.go')
-rw-r--r-- | models/org.go | 93 |
1 files changed, 45 insertions, 48 deletions
diff --git a/models/org.go b/models/org.go index dfd720fa..b45dcafb 100644 --- a/models/org.go +++ b/models/org.go @@ -10,7 +10,7 @@ import ( "os" "strings" - "github.com/gogits/gogs/modules/base" + "github.com/go-xorm/xorm" ) var ( @@ -93,17 +93,6 @@ func (org *User) RemoveOrgRepo(repoID int64) error { return org.removeOrgRepo(x, repoID) } -// IsOrgEmailUsed returns true if the e-mail has been used in organization account. -func IsOrgEmailUsed(email string) (bool, error) { - if len(email) == 0 { - return false, nil - } - return x.Get(&User{ - Email: email, - Type: ORGANIZATION, - }) -} - // CreateOrganization creates record of a new organization. func CreateOrganization(org, owner *User) (err error) { if err = IsUsableName(org.Name); err != nil { @@ -117,18 +106,9 @@ func CreateOrganization(org, owner *User) (err error) { return ErrUserAlreadyExist{org.Name} } - isExist, err = IsOrgEmailUsed(org.Email) - if err != nil { - return err - } else if isExist { - return ErrEmailAlreadyUsed{org.Email} - } - org.LowerName = strings.ToLower(org.Name) org.FullName = org.Name - org.Avatar = base.EncodeMd5(org.Email) - org.AvatarEmail = org.Email - // No password for organization. + org.UseCustomAvatar = true org.NumTeams = 1 org.NumMembers = 1 @@ -141,6 +121,17 @@ func CreateOrganization(org, owner *User) (err error) { if _, err = sess.Insert(org); err != nil { return fmt.Errorf("insert organization: %v", err) } + org.GenerateRandomAvatar() + + // Add initial creator to organization and owner team. + if _, err = sess.Insert(&OrgUser{ + Uid: owner.Id, + OrgID: org.Id, + IsOwner: true, + NumTeams: 1, + }); err != nil { + return fmt.Errorf("insert org-user relation: %v", err) + } // Create default owner team. t := &Team{ @@ -154,23 +145,11 @@ func CreateOrganization(org, owner *User) (err error) { return fmt.Errorf("insert owner team: %v", err) } - // Add initial creator to organization and owner team. - ou := &OrgUser{ - Uid: owner.Id, - OrgID: org.Id, - IsOwner: true, - NumTeams: 1, - } - if _, err = sess.Insert(ou); err != nil { - return fmt.Errorf("insert org-user relation: %v", err) - } - - tu := &TeamUser{ + if _, err = sess.Insert(&TeamUser{ Uid: owner.Id, OrgID: org.Id, TeamID: t.ID, - } - if _, err = sess.Insert(tu); err != nil { + }); err != nil { return fmt.Errorf("insert team-user relation: %v", err) } @@ -212,7 +191,6 @@ func GetOrganizations(num, offset int) ([]*User, error) { return orgs, err } -// TODO: need some kind of mechanism to record failure. // DeleteOrganization completely and permanently deletes everything of organization. func DeleteOrganization(org *User) (err error) { if err := DeleteUser(org); err != nil { @@ -220,23 +198,23 @@ func DeleteOrganization(org *User) (err error) { } sess := x.NewSession() - defer sess.Close() + defer sessionRelease(sess) if err = sess.Begin(); err != nil { return err } - if _, err = sess.Delete(&Team{OrgID: org.Id}); err != nil { - sess.Rollback() - return err - } - if _, err = sess.Delete(&OrgUser{OrgID: org.Id}); err != nil { - sess.Rollback() - return err + if err = deleteBeans(sess, + &Team{OrgID: org.Id}, + &OrgUser{OrgID: org.Id}, + &TeamUser{OrgID: org.Id}, + ); err != nil { + return fmt.Errorf("deleteBeans: %v", err) } - if _, err = sess.Delete(&TeamUser{OrgID: org.Id}); err != nil { - sess.Rollback() - return err + + if err = deleteUser(sess, org); err != nil { + return fmt.Errorf("deleteUser: %v", err) } + return sess.Commit() } @@ -275,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) |