Fix display problems of members and teams unit (#26363)

Fix:
- display member count and team count in the menu bar

![image](https://github.com/go-gitea/gitea/assets/18380374/7f03ced4-67e2-41ce-b19f-a992823726bb)
- Also display member unit in the menu bar if there are no hidden
members in public org

![image](https://github.com/go-gitea/gitea/assets/18380374/31422ad6-7190-438d-8e99-8a4af9cce908)
- hidden member board when there's no seeable members.
In this org, we only have hidden members: 

![image](https://github.com/go-gitea/gitea/assets/18380374/d749420b-554a-4483-8cd2-221df61b5ca7)
We will hidden the member board when doer is not the member of this org

![image](https://github.com/go-gitea/gitea/assets/18380374/93bb782e-7d4d-4ad3-a096-133afbc51f8a)
Before:

![image](https://github.com/go-gitea/gitea/assets/18380374/eafc0b3e-6218-42ab-a892-39645d08a5eb)
If you click the number in the members board, you will access the
members page, which is not expected.

![image](https://github.com/go-gitea/gitea/assets/18380374/73d6dadc-0ef2-4ca9-8485-c5f4211bffb2)

---------

Co-authored-by: delvh <dev.lh@web.de>
Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
yp05327 2023-08-15 23:00:35 +09:00 committed by GitHub
parent 27e4ac3e40
commit 7f8028e5a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 35 deletions

View file

@ -24,6 +24,7 @@ type Organization struct {
Organization *organization.Organization Organization *organization.Organization
OrgLink string OrgLink string
CanCreateOrgRepo bool CanCreateOrgRepo bool
PublicMemberOnly bool // Only display public members
Team *organization.Team Team *organization.Team
Teams []*organization.Team Teams []*organization.Team
@ -172,6 +173,18 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
ctx.Org.OrgLink = org.AsUser().OrganisationLink() ctx.Org.OrgLink = org.AsUser().OrganisationLink()
ctx.Data["OrgLink"] = ctx.Org.OrgLink ctx.Data["OrgLink"] = ctx.Org.OrgLink
// Member
ctx.Org.PublicMemberOnly = ctx.Doer == nil || !ctx.Org.IsMember && !ctx.Doer.IsAdmin
opts := &organization.FindOrgMembersOpts{
OrgID: org.ID,
PublicOnly: ctx.Org.PublicMemberOnly,
}
ctx.Data["NumMembers"], err = organization.CountOrgMembers(opts)
if err != nil {
ctx.ServerError("CountOrgMembers", err)
return
}
// Team. // Team.
if ctx.Org.IsMember { if ctx.Org.IsMember {
shouldSeeAllTeams := false shouldSeeAllTeams := false
@ -203,6 +216,7 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
return return
} }
} }
ctx.Data["NumTeams"] = len(ctx.Org.Teams)
} }
teamName := ctx.Params(":team") teamName := ctx.Params(":team")

View file

@ -120,31 +120,15 @@ func Home(ctx *context.Context) {
opts := &organization.FindOrgMembersOpts{ opts := &organization.FindOrgMembersOpts{
OrgID: org.ID, OrgID: org.ID,
PublicOnly: true, PublicOnly: ctx.Org.PublicMemberOnly,
ListOptions: db.ListOptions{Page: 1, PageSize: 25}, ListOptions: db.ListOptions{Page: 1, PageSize: 25},
} }
if ctx.Doer != nil {
isMember, err := org.IsOrgMember(ctx.Doer.ID)
if err != nil {
ctx.Error(http.StatusInternalServerError, "IsOrgMember")
return
}
opts.PublicOnly = !isMember && !ctx.Doer.IsAdmin
}
members, _, err := organization.FindOrgMembers(opts) members, _, err := organization.FindOrgMembers(opts)
if err != nil { if err != nil {
ctx.ServerError("FindOrgMembers", err) ctx.ServerError("FindOrgMembers", err)
return return
} }
membersCount, err := organization.CountOrgMembers(opts)
if err != nil {
ctx.ServerError("CountOrgMembers", err)
return
}
var isFollowing bool var isFollowing bool
if ctx.Doer != nil { if ctx.Doer != nil {
isFollowing = user_model.IsFollowing(ctx.Doer.ID, ctx.ContextUser.ID) isFollowing = user_model.IsFollowing(ctx.Doer.ID, ctx.ContextUser.ID)
@ -152,7 +136,6 @@ func Home(ctx *context.Context) {
ctx.Data["Repos"] = repos ctx.Data["Repos"] = repos
ctx.Data["Total"] = count ctx.Data["Total"] = count
ctx.Data["MembersTotal"] = membersCount
ctx.Data["Members"] = members ctx.Data["Members"] = members
ctx.Data["Teams"] = ctx.Org.Teams ctx.Data["Teams"] = ctx.Org.Teams
ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull
@ -171,5 +154,7 @@ func Home(ctx *context.Context) {
ctx.Data["Page"] = pager ctx.Data["Page"] = pager
ctx.Data["ContextUser"] = ctx.ContextUser ctx.Data["ContextUser"] = ctx.ContextUser
ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
ctx.HTML(http.StatusOK, tplOrgHome) ctx.HTML(http.StatusOK, tplOrgHome)
} }

View file

@ -37,12 +37,13 @@
<div class="ui container"> <div class="ui container">
<div class="ui mobile reversed stackable grid"> <div class="ui mobile reversed stackable grid">
<div class="ui eleven wide column"> <div class="ui {{if .ShowMemberAndTeamTab}}eleven wide{{end}} column">
{{template "explore/repo_search" .}} {{template "explore/repo_search" .}}
{{template "explore/repo_list" .}} {{template "explore/repo_list" .}}
{{template "base/paginate" .}} {{template "base/paginate" .}}
</div> </div>
{{if .ShowMemberAndTeamTab}}
<div class="ui five wide column"> <div class="ui five wide column">
{{if .CanCreateOrgRepo}} {{if .CanCreateOrgRepo}}
<div class="center aligned"> <div class="center aligned">
@ -53,19 +54,20 @@
</div> </div>
<div class="divider"></div> <div class="divider"></div>
{{end}} {{end}}
<h4 class="ui top attached header gt-df"> {{if .NumMembers}}
<strong class="gt-f1">{{.locale.Tr "org.members"}}</strong> <h4 class="ui top attached header gt-df">
<a class="text grey gt-dif gt-ac" href="{{.OrgLink}}/members"><span>{{.MembersTotal}}</span> {{svg "octicon-chevron-right"}}</a> <strong class="gt-f1">{{.locale.Tr "org.members"}}</strong>
</h4> <a class="text grey gt-dif gt-ac" href="{{.OrgLink}}/members"><span>{{.NumMembers}}</span> {{svg "octicon-chevron-right"}}</a>
<div class="ui attached segment members"> </h4>
{{$isMember := .IsOrganizationMember}} <div class="ui attached segment members">
{{range .Members}} {{$isMember := .IsOrganizationMember}}
{{if or $isMember (call $.IsPublicMember .ID)}} {{range .Members}}
<a href="{{.HomeLink}}" title="{{.Name}}{{if .FullName}} ({{.FullName}}){{end}}">{{ctx.AvatarUtils.Avatar . 48}}</a> {{if or $isMember (call $.IsPublicMember .ID)}}
<a href="{{.HomeLink}}" title="{{.Name}}{{if .FullName}} ({{.FullName}}){{end}}">{{ctx.AvatarUtils.Avatar . 48}}</a>
{{end}}
{{end}} {{end}}
{{end}} </div>
</div> {{end}}
{{if .IsOrganizationMember}} {{if .IsOrganizationMember}}
<div class="ui top attached header gt-df"> <div class="ui top attached header gt-df">
<strong class="gt-f1">{{.locale.Tr "org.teams"}}</strong> <strong class="gt-f1">{{.locale.Tr "org.teams"}}</strong>
@ -89,6 +91,7 @@
{{end}} {{end}}
{{end}} {{end}}
</div> </div>
{{end}}
</div> </div>
</div> </div>
</div> </div>

View file

@ -21,13 +21,13 @@
{{svg "octicon-code"}}&nbsp;{{$.locale.Tr "org.code"}} {{svg "octicon-code"}}&nbsp;{{$.locale.Tr "org.code"}}
</a> </a>
{{end}} {{end}}
{{if .IsOrganizationMember}} {{if .NumMembers}}
<a class="{{if $.PageIsOrgMembers}}active {{end}}item" href="{{$.OrgLink}}/members"> <a class="{{if $.PageIsOrgMembers}}active {{end}}item" href="{{$.OrgLink}}/members">
{{svg "octicon-person"}}&nbsp;{{$.locale.Tr "org.members"}} {{svg "octicon-person"}}&nbsp;{{$.locale.Tr "org.members"}}
{{if .NumMembers}} <div class="ui small label">{{.NumMembers}}</div>
<div class="ui small label">{{.NumMembers}}</div>
{{end}}
</a> </a>
{{end}}
{{if .IsOrganizationMember}}
<a class="{{if $.PageIsOrgTeams}}active {{end}}item" href="{{$.OrgLink}}/teams"> <a class="{{if $.PageIsOrgTeams}}active {{end}}item" href="{{$.OrgLink}}/teams">
{{svg "octicon-people"}}&nbsp;{{$.locale.Tr "org.teams"}} {{svg "octicon-people"}}&nbsp;{{$.locale.Tr "org.teams"}}
{{if .NumTeams}} {{if .NumTeams}}