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:
		
							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