mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 00:20:25 +08:00 
			
		
		
		
	Fix display problems of members and teams unit (#26363)
Fix: - display member count and team count in the menu bar  - Also display member unit in the menu bar if there are no hidden members in public org  - hidden member board when there's no seeable members. In this org, we only have hidden members:  We will hidden the member board when doer is not the member of this org  Before:  If you click the number in the members board, you will access the members page, which is not expected.  --------- Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		@@ -24,6 +24,7 @@ type Organization struct {
 | 
			
		||||
	Organization     *organization.Organization
 | 
			
		||||
	OrgLink          string
 | 
			
		||||
	CanCreateOrgRepo bool
 | 
			
		||||
	PublicMemberOnly bool // Only display public members
 | 
			
		||||
 | 
			
		||||
	Team  *organization.Team
 | 
			
		||||
	Teams []*organization.Team
 | 
			
		||||
@@ -172,6 +173,18 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
 | 
			
		||||
	ctx.Org.OrgLink = org.AsUser().OrganisationLink()
 | 
			
		||||
	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.
 | 
			
		||||
	if ctx.Org.IsMember {
 | 
			
		||||
		shouldSeeAllTeams := false
 | 
			
		||||
@@ -203,6 +216,7 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		ctx.Data["NumTeams"] = len(ctx.Org.Teams)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	teamName := ctx.Params(":team")
 | 
			
		||||
 
 | 
			
		||||
@@ -120,31 +120,15 @@ func Home(ctx *context.Context) {
 | 
			
		||||
 | 
			
		||||
	opts := &organization.FindOrgMembersOpts{
 | 
			
		||||
		OrgID:       org.ID,
 | 
			
		||||
		PublicOnly:  true,
 | 
			
		||||
		PublicOnly:  ctx.Org.PublicMemberOnly,
 | 
			
		||||
		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)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.ServerError("FindOrgMembers", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	membersCount, err := organization.CountOrgMembers(opts)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.ServerError("CountOrgMembers", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var isFollowing bool
 | 
			
		||||
	if ctx.Doer != nil {
 | 
			
		||||
		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["Total"] = count
 | 
			
		||||
	ctx.Data["MembersTotal"] = membersCount
 | 
			
		||||
	ctx.Data["Members"] = members
 | 
			
		||||
	ctx.Data["Teams"] = ctx.Org.Teams
 | 
			
		||||
	ctx.Data["DisableNewPullMirrors"] = setting.Mirror.DisableNewPull
 | 
			
		||||
@@ -171,5 +154,7 @@ func Home(ctx *context.Context) {
 | 
			
		||||
	ctx.Data["Page"] = pager
 | 
			
		||||
	ctx.Data["ContextUser"] = ctx.ContextUser
 | 
			
		||||
 | 
			
		||||
	ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
 | 
			
		||||
 | 
			
		||||
	ctx.HTML(http.StatusOK, tplOrgHome)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,12 +37,13 @@
 | 
			
		||||
 | 
			
		||||
	<div class="ui container">
 | 
			
		||||
		<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_list" .}}
 | 
			
		||||
				{{template "base/paginate" .}}
 | 
			
		||||
			</div>
 | 
			
		||||
 | 
			
		||||
			{{if .ShowMemberAndTeamTab}}
 | 
			
		||||
			<div class="ui five wide column">
 | 
			
		||||
				{{if .CanCreateOrgRepo}}
 | 
			
		||||
					<div class="center aligned">
 | 
			
		||||
@@ -53,19 +54,20 @@
 | 
			
		||||
					</div>
 | 
			
		||||
					<div class="divider"></div>
 | 
			
		||||
				{{end}}
 | 
			
		||||
				<h4 class="ui top attached header gt-df">
 | 
			
		||||
					<strong class="gt-f1">{{.locale.Tr "org.members"}}</strong>
 | 
			
		||||
					<a class="text grey gt-dif gt-ac" href="{{.OrgLink}}/members"><span>{{.MembersTotal}}</span> {{svg "octicon-chevron-right"}}</a>
 | 
			
		||||
				</h4>
 | 
			
		||||
				<div class="ui attached segment members">
 | 
			
		||||
					{{$isMember := .IsOrganizationMember}}
 | 
			
		||||
					{{range .Members}}
 | 
			
		||||
						{{if or $isMember (call $.IsPublicMember .ID)}}
 | 
			
		||||
							<a href="{{.HomeLink}}" title="{{.Name}}{{if .FullName}} ({{.FullName}}){{end}}">{{ctx.AvatarUtils.Avatar . 48}}</a>
 | 
			
		||||
				{{if .NumMembers}}
 | 
			
		||||
					<h4 class="ui top attached header gt-df">
 | 
			
		||||
						<strong class="gt-f1">{{.locale.Tr "org.members"}}</strong>
 | 
			
		||||
						<a class="text grey gt-dif gt-ac" href="{{.OrgLink}}/members"><span>{{.NumMembers}}</span> {{svg "octicon-chevron-right"}}</a>
 | 
			
		||||
					</h4>
 | 
			
		||||
					<div class="ui attached segment members">
 | 
			
		||||
						{{$isMember := .IsOrganizationMember}}
 | 
			
		||||
						{{range .Members}}
 | 
			
		||||
							{{if or $isMember (call $.IsPublicMember .ID)}}
 | 
			
		||||
								<a href="{{.HomeLink}}" title="{{.Name}}{{if .FullName}} ({{.FullName}}){{end}}">{{ctx.AvatarUtils.Avatar . 48}}</a>
 | 
			
		||||
							{{end}}
 | 
			
		||||
						{{end}}
 | 
			
		||||
					{{end}}
 | 
			
		||||
				</div>
 | 
			
		||||
 | 
			
		||||
					</div>
 | 
			
		||||
				{{end}}
 | 
			
		||||
				{{if .IsOrganizationMember}}
 | 
			
		||||
					<div class="ui top attached header gt-df">
 | 
			
		||||
						<strong class="gt-f1">{{.locale.Tr "org.teams"}}</strong>
 | 
			
		||||
@@ -89,6 +91,7 @@
 | 
			
		||||
					{{end}}
 | 
			
		||||
				{{end}}
 | 
			
		||||
			</div>
 | 
			
		||||
			{{end}}
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -21,13 +21,13 @@
 | 
			
		||||
			{{svg "octicon-code"}} {{$.locale.Tr "org.code"}}
 | 
			
		||||
		</a>
 | 
			
		||||
		{{end}}
 | 
			
		||||
		{{if .IsOrganizationMember}}
 | 
			
		||||
		{{if .NumMembers}}
 | 
			
		||||
			<a class="{{if $.PageIsOrgMembers}}active {{end}}item" href="{{$.OrgLink}}/members">
 | 
			
		||||
				{{svg "octicon-person"}} {{$.locale.Tr "org.members"}}
 | 
			
		||||
				{{if .NumMembers}}
 | 
			
		||||
					<div class="ui small label">{{.NumMembers}}</div>
 | 
			
		||||
				{{end}}
 | 
			
		||||
				<div class="ui small label">{{.NumMembers}}</div>
 | 
			
		||||
			</a>
 | 
			
		||||
		{{end}}
 | 
			
		||||
		{{if .IsOrganizationMember}}
 | 
			
		||||
			<a class="{{if $.PageIsOrgTeams}}active {{end}}item" href="{{$.OrgLink}}/teams">
 | 
			
		||||
				{{svg "octicon-people"}} {{$.locale.Tr "org.teams"}}
 | 
			
		||||
				{{if .NumTeams}}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user