Skip to content

Commit 6d77901

Browse files
authored
Merge branch 'main' into lunny/display_heatmap_when_necessary
2 parents a60b447 + f604144 commit 6d77901

File tree

14 files changed

+267
-53
lines changed

14 files changed

+267
-53
lines changed

models/activities/statistic.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"code.gitea.io/gitea/models/webhook"
2020
"code.gitea.io/gitea/modules/optional"
2121
"code.gitea.io/gitea/modules/setting"
22+
"code.gitea.io/gitea/modules/structs"
2223
)
2324

2425
// Statistic contains the database statistics
@@ -68,7 +69,7 @@ func GetStatistic(ctx context.Context) (stats Statistic) {
6869
}
6970
stats.Counter.UsersNotActive = user_model.CountUsers(ctx, &usersNotActiveOpts)
7071

71-
stats.Counter.Org, _ = db.Count[organization.Organization](ctx, organization.FindOrgOptions{IncludePrivate: true})
72+
stats.Counter.Org, _ = db.Count[organization.Organization](ctx, organization.FindOrgOptions{IncludeVisibility: structs.VisibleTypePrivate})
7273
stats.Counter.PublicKey, _ = e.Count(new(asymkey_model.PublicKey))
7374
stats.Counter.Repo, _ = repo_model.CountRepositories(ctx, repo_model.CountRepositoryOptions{})
7475
stats.Counter.Watch, _ = e.Count(new(repo_model.Watch))

models/organization/org_list.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ type SearchOrganizationsOptions struct {
5050
// FindOrgOptions finds orgs options
5151
type FindOrgOptions struct {
5252
db.ListOptions
53-
UserID int64
54-
IncludePrivate bool
53+
UserID int64
54+
IncludeVisibility structs.VisibleType
5555
}
5656

5757
func queryUserOrgIDs(userID int64, includePrivate bool) *builder.Builder {
@@ -65,18 +65,27 @@ func queryUserOrgIDs(userID int64, includePrivate bool) *builder.Builder {
6565
func (opts FindOrgOptions) ToConds() builder.Cond {
6666
var cond builder.Cond = builder.Eq{"`user`.`type`": user_model.UserTypeOrganization}
6767
if opts.UserID > 0 {
68-
cond = cond.And(builder.In("`user`.`id`", queryUserOrgIDs(opts.UserID, opts.IncludePrivate)))
69-
}
70-
if !opts.IncludePrivate {
71-
cond = cond.And(builder.Eq{"`user`.visibility": structs.VisibleTypePublic})
68+
cond = cond.And(builder.In("`user`.`id`", queryUserOrgIDs(opts.UserID, opts.IncludeVisibility == structs.VisibleTypePrivate)))
7269
}
70+
// public=0, limited=1, private=2
71+
cond = cond.And(builder.Lte{"`user`.visibility": opts.IncludeVisibility})
7372
return cond
7473
}
7574

7675
func (opts FindOrgOptions) ToOrders() string {
7776
return "`user`.lower_name ASC"
7877
}
7978

79+
func DoerViewOtherVisibility(doer, other *user_model.User) structs.VisibleType {
80+
if doer == nil || other == nil {
81+
return structs.VisibleTypePublic
82+
}
83+
if doer.IsAdmin || doer.ID == other.ID {
84+
return structs.VisibleTypePrivate
85+
}
86+
return structs.VisibleTypeLimited
87+
}
88+
8089
// GetOrgsCanCreateRepoByUserID returns a list of organizations where given user ID
8190
// are allowed to create repos.
8291
func GetOrgsCanCreateRepoByUserID(ctx context.Context, userID int64) ([]*Organization, error) {

models/organization/org_list_test.go

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,48 +10,53 @@ import (
1010
"code.gitea.io/gitea/models/organization"
1111
"code.gitea.io/gitea/models/unittest"
1212
user_model "code.gitea.io/gitea/models/user"
13+
"code.gitea.io/gitea/modules/structs"
1314

1415
"github.com/stretchr/testify/assert"
1516
)
1617

17-
func TestCountOrganizations(t *testing.T) {
18+
func TestOrgList(t *testing.T) {
1819
assert.NoError(t, unittest.PrepareTestDatabase())
20+
t.Run("CountOrganizations", testCountOrganizations)
21+
t.Run("FindOrgs", testFindOrgs)
22+
t.Run("GetUserOrgsList", testGetUserOrgsList)
23+
t.Run("LoadOrgListTeams", testLoadOrgListTeams)
24+
t.Run("DoerViewOtherVisibility", testDoerViewOtherVisibility)
25+
}
26+
27+
func testCountOrganizations(t *testing.T) {
1928
expected, err := db.GetEngine(db.DefaultContext).Where("type=?", user_model.UserTypeOrganization).Count(&organization.Organization{})
2029
assert.NoError(t, err)
21-
cnt, err := db.Count[organization.Organization](db.DefaultContext, organization.FindOrgOptions{IncludePrivate: true})
30+
cnt, err := db.Count[organization.Organization](db.DefaultContext, organization.FindOrgOptions{IncludeVisibility: structs.VisibleTypePrivate})
2231
assert.NoError(t, err)
2332
assert.Equal(t, expected, cnt)
2433
}
2534

26-
func TestFindOrgs(t *testing.T) {
27-
assert.NoError(t, unittest.PrepareTestDatabase())
28-
35+
func testFindOrgs(t *testing.T) {
2936
orgs, err := db.Find[organization.Organization](db.DefaultContext, organization.FindOrgOptions{
30-
UserID: 4,
31-
IncludePrivate: true,
37+
UserID: 4,
38+
IncludeVisibility: structs.VisibleTypePrivate,
3239
})
3340
assert.NoError(t, err)
3441
if assert.Len(t, orgs, 1) {
3542
assert.EqualValues(t, 3, orgs[0].ID)
3643
}
3744

3845
orgs, err = db.Find[organization.Organization](db.DefaultContext, organization.FindOrgOptions{
39-
UserID: 4,
40-
IncludePrivate: false,
46+
UserID: 4,
4147
})
4248
assert.NoError(t, err)
4349
assert.Empty(t, orgs)
4450

4551
total, err := db.Count[organization.Organization](db.DefaultContext, organization.FindOrgOptions{
46-
UserID: 4,
47-
IncludePrivate: true,
52+
UserID: 4,
53+
IncludeVisibility: structs.VisibleTypePrivate,
4854
})
4955
assert.NoError(t, err)
5056
assert.EqualValues(t, 1, total)
5157
}
5258

53-
func TestGetUserOrgsList(t *testing.T) {
54-
assert.NoError(t, unittest.PrepareTestDatabase())
59+
func testGetUserOrgsList(t *testing.T) {
5560
orgs, err := organization.GetUserOrgsList(db.DefaultContext, &user_model.User{ID: 4})
5661
assert.NoError(t, err)
5762
if assert.Len(t, orgs, 1) {
@@ -61,8 +66,7 @@ func TestGetUserOrgsList(t *testing.T) {
6166
}
6267
}
6368

64-
func TestLoadOrgListTeams(t *testing.T) {
65-
assert.NoError(t, unittest.PrepareTestDatabase())
69+
func testLoadOrgListTeams(t *testing.T) {
6670
orgs, err := organization.GetUserOrgsList(db.DefaultContext, &user_model.User{ID: 4})
6771
assert.NoError(t, err)
6872
assert.Len(t, orgs, 1)
@@ -71,3 +75,10 @@ func TestLoadOrgListTeams(t *testing.T) {
7175
assert.Len(t, teamsMap, 1)
7276
assert.Len(t, teamsMap[3], 5)
7377
}
78+
79+
func testDoerViewOtherVisibility(t *testing.T) {
80+
assert.Equal(t, structs.VisibleTypePublic, organization.DoerViewOtherVisibility(nil, nil))
81+
assert.Equal(t, structs.VisibleTypeLimited, organization.DoerViewOtherVisibility(&user_model.User{ID: 1}, &user_model.User{ID: 2}))
82+
assert.Equal(t, structs.VisibleTypePrivate, organization.DoerViewOtherVisibility(&user_model.User{ID: 1}, &user_model.User{ID: 1}))
83+
assert.Equal(t, structs.VisibleTypePrivate, organization.DoerViewOtherVisibility(&user_model.User{ID: 1, IsAdmin: true}, &user_model.User{ID: 2}))
84+
}

options/locale/locale_pt-PT.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,6 +1651,7 @@ issues.save=Guardar
16511651
issues.label_title=Nome do rótulo
16521652
issues.label_description=Descrição do rótulo
16531653
issues.label_color=Cor do rótulo
1654+
issues.label_color_invalid=Cor inválida
16541655
issues.label_exclusive=Exclusivo
16551656
issues.label_archive=Arquivar rótulo
16561657
issues.label_archived_filter=Mostrar rótulos arquivados

0 commit comments

Comments
 (0)