forked from gitea/gitea
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:
parent
27e4ac3e40
commit
7f8028e5a1
|
@ -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")
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -21,13 +21,13 @@
|
||||||
{{svg "octicon-code"}} {{$.locale.Tr "org.code"}}
|
{{svg "octicon-code"}} {{$.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"}} {{$.locale.Tr "org.members"}}
|
{{svg "octicon-person"}} {{$.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"}} {{$.locale.Tr "org.teams"}}
|
{{svg "octicon-people"}} {{$.locale.Tr "org.teams"}}
|
||||||
{{if .NumTeams}}
|
{{if .NumTeams}}
|
||||||
|
|
Loading…
Reference in New Issue