]> source.dussan.org Git - gitea.git/commitdiff
Fix remove team member issue (#3566)
authorWendell Sun <iwendellsun@gmail.com>
Fri, 23 Feb 2018 08:42:02 +0000 (16:42 +0800)
committerBo-Yi Wu <appleboy.tw@gmail.com>
Fri, 23 Feb 2018 08:42:02 +0000 (16:42 +0800)
Put sess.Commit() out of the RemoveOrgUser function

Add an empty line to separate import packages

models/org.go
models/org_team.go

index 095265a12e72e5603543a20c3a8e2f49dfde398c..ed0d5830671ded478d6aaeefca17cebe509f8022 100644 (file)
@@ -436,8 +436,7 @@ func AddOrgUser(orgID, uid int64) error {
        return sess.Commit()
 }
 
-// RemoveOrgUser removes user from given organization.
-func RemoveOrgUser(orgID, userID int64) error {
+func removeOrgUser(sess *xorm.Session, orgID, userID int64) error {
        ou := new(OrgUser)
 
        has, err := x.
@@ -473,12 +472,6 @@ func RemoveOrgUser(orgID, userID int64) error {
                }
        }
 
-       sess := x.NewSession()
-       defer sess.Close()
-       if err := sess.Begin(); err != nil {
-               return err
-       }
-
        if _, err := sess.ID(ou.ID).Delete(ou); err != nil {
                return err
        } else if _, err = sess.Exec("UPDATE `user` SET num_members=num_members-1 WHERE id=?", orgID); err != nil {
@@ -520,6 +513,19 @@ func RemoveOrgUser(orgID, userID int64) error {
                }
        }
 
+       return nil
+}
+
+// RemoveOrgUser removes user from given organization.
+func RemoveOrgUser(orgID, userID int64) error {
+       sess := x.NewSession()
+       defer sess.Close()
+       if err := sess.Begin(); err != nil {
+               return err
+       }
+       if err := removeOrgUser(sess, orgID, userID); err != nil {
+               return err
+       }
        return sess.Commit()
 }
 
index 941b7ed2a1c70073bb91933d7f7c664599d7e211..9d8a031418dba0b4e8af079c53483f210a226320 100644 (file)
@@ -10,6 +10,8 @@ import (
        "strings"
 
        "code.gitea.io/gitea/modules/log"
+
+       "github.com/go-xorm/xorm"
 )
 
 const ownerTeamName = "Owners"
@@ -521,7 +523,7 @@ func AddTeamMember(team *Team, userID int64) error {
        return sess.Commit()
 }
 
-func removeTeamMember(e Engine, team *Team, userID int64) error {
+func removeTeamMember(e *xorm.Session, team *Team, userID int64) error {
        isMember, err := isTeamMember(e, team.OrgID, team.ID, userID)
        if err != nil || !isMember {
                return err
@@ -558,6 +560,16 @@ func removeTeamMember(e Engine, team *Team, userID int64) error {
                }
        }
 
+       // Check if the user is a member of any team in the organization.
+       if count, err := e.Count(&TeamUser{
+               UID:   userID,
+               OrgID: team.OrgID,
+       }); err != nil {
+               return err
+       } else if count == 0 {
+               return removeOrgUser(e, team.OrgID, userID)
+       }
+
        return nil
 }