mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	This reverts commit 78438d310b.
			
			
This commit is contained in:
		@@ -615,35 +615,50 @@ func (u *User) GetRepositories(page, pageSize int) (err error) {
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnitRepositoriesSubQuery returns repositories query builder according units
 | 
			
		||||
func (u *User) UnitRepositoriesSubQuery(units ...UnitType) *builder.Builder {
 | 
			
		||||
	b := builder.Select("repository.id").From("repository")
 | 
			
		||||
// GetRepositoryIDs returns repositories IDs where user owned and has unittypes
 | 
			
		||||
func (u *User) GetRepositoryIDs(units ...UnitType) ([]int64, error) {
 | 
			
		||||
	var ids []int64
 | 
			
		||||
 | 
			
		||||
	sess := x.Table("repository").Cols("repository.id")
 | 
			
		||||
 | 
			
		||||
	if len(units) > 0 {
 | 
			
		||||
		b.Join("INNER", "repo_unit", builder.Expr("repository.id = repo_unit.repo_id").
 | 
			
		||||
			And(builder.In("repo_unit.type", units)),
 | 
			
		||||
		)
 | 
			
		||||
		sess = sess.Join("INNER", "repo_unit", "repository.id = repo_unit.repo_id")
 | 
			
		||||
		sess = sess.In("repo_unit.type", units)
 | 
			
		||||
	}
 | 
			
		||||
	return b.Where(builder.Eq{"repository.owner_id": u.ID})
 | 
			
		||||
 | 
			
		||||
	return ids, sess.Where("owner_id = ?", u.ID).Find(&ids)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// OrgUnitRepositoriesSubQuery returns repositories query builder according orgnizations and units
 | 
			
		||||
func (u *User) OrgUnitRepositoriesSubQuery(userID int64, units ...UnitType) *builder.Builder {
 | 
			
		||||
	b := builder.
 | 
			
		||||
		Select("team_repo.repo_id").
 | 
			
		||||
		From("team_repo").
 | 
			
		||||
		Join("INNER", "team_user", builder.Eq{"team_user.uid": userID}.And(
 | 
			
		||||
			builder.Expr("team_user.team_id = team_repo.team_id"),
 | 
			
		||||
		))
 | 
			
		||||
// GetOrgRepositoryIDs returns repositories IDs where user's team owned and has unittypes
 | 
			
		||||
func (u *User) GetOrgRepositoryIDs(units ...UnitType) ([]int64, error) {
 | 
			
		||||
	var ids []int64
 | 
			
		||||
 | 
			
		||||
	sess := x.Table("repository").
 | 
			
		||||
		Cols("repository.id").
 | 
			
		||||
		Join("INNER", "team_user", "repository.owner_id = team_user.org_id").
 | 
			
		||||
		Join("INNER", "team_repo", "repository.is_private != ? OR (team_user.team_id = team_repo.team_id AND repository.id = team_repo.repo_id)", true)
 | 
			
		||||
 | 
			
		||||
	if len(units) > 0 {
 | 
			
		||||
		b.Join("INNER", "team_unit", builder.Eq{"team_unit.org_id": u.ID}.And(
 | 
			
		||||
			builder.Expr("team_unit.team_id = team_repo.team_id").And(
 | 
			
		||||
				builder.In("`type`", units),
 | 
			
		||||
			),
 | 
			
		||||
		))
 | 
			
		||||
		sess = sess.Join("INNER", "team_unit", "team_unit.team_id = team_user.team_id")
 | 
			
		||||
		sess = sess.In("team_unit.type", units)
 | 
			
		||||
	}
 | 
			
		||||
	return b.Where(builder.Eq{"team_repo.org_id": u.ID}).
 | 
			
		||||
		GroupBy("team_repo.repo_id")
 | 
			
		||||
 | 
			
		||||
	return ids, sess.
 | 
			
		||||
		Where("team_user.uid = ?", u.ID).
 | 
			
		||||
		GroupBy("repository.id").Find(&ids)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetAccessRepoIDs returns all repositories IDs where user's or user is a team member organizations
 | 
			
		||||
func (u *User) GetAccessRepoIDs(units ...UnitType) ([]int64, error) {
 | 
			
		||||
	ids, err := u.GetRepositoryIDs(units...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	ids2, err := u.GetOrgRepositoryIDs(units...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return append(ids, ids2...), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetMirrorRepositories returns mirror repositories that user owns, including private repositories.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user