mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	Improve profile for Organizations (#27982)
Fixes some problems in #27955: - autofocus of the search box before: if access the home page will jump to the search box  after: will not jump to the search box  - incorrect display of overview tab before:  after:  - improve the permission check to the private profile repo In #26295, we simply added access control to the private profile. But if user have access to the private profile repo , we should also display the profile. - add a button which can jump to the repo list? I agree @wxiaoguang 's opinion here: https://github.com/go-gitea/gitea/pull/27955#issuecomment-1803178239 But it seems that this feature is sponsored. So can we add a button which can quickly jump to the repo list or just move profile to the `overview` page? --------- Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
		
					parent
					
						
							
								340055ab6c
							
						
					
				
			
			
				commit
				
					
						089ac06969
					
				
			
		
					 5 changed files with 20 additions and 13 deletions
				
			
		| 
						 | 
					@ -157,7 +157,7 @@ func Home(ctx *context.Context) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
 | 
						ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx)
 | 
						profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer)
 | 
				
			||||||
	defer profileClose()
 | 
						defer profileClose()
 | 
				
			||||||
	prepareOrgProfileReadme(ctx, profileGitRepo, profileReadmeBlob)
 | 
						prepareOrgProfileReadme(ctx, profileGitRepo, profileReadmeBlob)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,9 @@ package user
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
	"code.gitea.io/gitea/models/organization"
 | 
						"code.gitea.io/gitea/models/organization"
 | 
				
			||||||
 | 
						access_model "code.gitea.io/gitea/models/perm/access"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/models/unit"
 | 
				
			||||||
	user_model "code.gitea.io/gitea/models/user"
 | 
						user_model "code.gitea.io/gitea/models/user"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
| 
						 | 
					@ -84,9 +86,11 @@ func PrepareContextForProfileBigAvatar(ctx *context.Context) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func FindUserProfileReadme(ctx *context.Context) (profileGitRepo *git.Repository, profileReadmeBlob *git.Blob, profileClose func()) {
 | 
					func FindUserProfileReadme(ctx *context.Context, doer *user_model.User) (profileGitRepo *git.Repository, profileReadmeBlob *git.Blob, profileClose func()) {
 | 
				
			||||||
	profileDbRepo, err := repo_model.GetRepositoryByName(ctx, ctx.ContextUser.ID, ".profile")
 | 
						profileDbRepo, err := repo_model.GetRepositoryByName(ctx, ctx.ContextUser.ID, ".profile")
 | 
				
			||||||
	if err == nil && !profileDbRepo.IsEmpty && !profileDbRepo.IsPrivate {
 | 
						if err == nil {
 | 
				
			||||||
 | 
							perm, err := access_model.GetUserRepoPermission(ctx, profileDbRepo, doer)
 | 
				
			||||||
 | 
							if err == nil && !profileDbRepo.IsEmpty && perm.CanRead(unit.TypeCode) {
 | 
				
			||||||
			if profileGitRepo, err = git.OpenRepository(ctx, profileDbRepo.RepoPath()); err != nil {
 | 
								if profileGitRepo, err = git.OpenRepository(ctx, profileDbRepo.RepoPath()); err != nil {
 | 
				
			||||||
				log.Error("FindUserProfileReadme failed to OpenRepository: %v", err)
 | 
									log.Error("FindUserProfileReadme failed to OpenRepository: %v", err)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
| 
						 | 
					@ -97,6 +101,9 @@ func FindUserProfileReadme(ctx *context.Context) (profileGitRepo *git.Repository
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						} else if !repo_model.IsErrRepoNotExist(err) {
 | 
				
			||||||
 | 
							log.Error("FindUserProfileReadme failed to GetRepositoryByName: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return profileGitRepo, profileReadmeBlob, func() {
 | 
						return profileGitRepo, profileReadmeBlob, func() {
 | 
				
			||||||
		if profileGitRepo != nil {
 | 
							if profileGitRepo != nil {
 | 
				
			||||||
			_ = profileGitRepo.Close()
 | 
								_ = profileGitRepo.Close()
 | 
				
			||||||
| 
						 | 
					@ -107,7 +114,7 @@ func FindUserProfileReadme(ctx *context.Context) (profileGitRepo *git.Repository
 | 
				
			||||||
func RenderUserHeader(ctx *context.Context) {
 | 
					func RenderUserHeader(ctx *context.Context) {
 | 
				
			||||||
	prepareContextForCommonProfile(ctx)
 | 
						prepareContextForCommonProfile(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, profileReadmeBlob, profileClose := FindUserProfileReadme(ctx)
 | 
						_, profileReadmeBlob, profileClose := FindUserProfileReadme(ctx, ctx.Doer)
 | 
				
			||||||
	defer profileClose()
 | 
						defer profileClose()
 | 
				
			||||||
	ctx.Data["HasProfileReadme"] = profileReadmeBlob != nil
 | 
						ctx.Data["HasProfileReadme"] = profileReadmeBlob != nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,7 +64,7 @@ func userProfile(ctx *context.Context) {
 | 
				
			||||||
		ctx.Data["HeatmapTotalContributions"] = activities_model.GetTotalContributionsInHeatmap(data)
 | 
							ctx.Data["HeatmapTotalContributions"] = activities_model.GetTotalContributionsInHeatmap(data)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx)
 | 
						profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer)
 | 
				
			||||||
	defer profileClose()
 | 
						defer profileClose()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
 | 
						showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@
 | 
				
			||||||
		<input type="hidden" name="sort" value="{{$.SortType}}">
 | 
							<input type="hidden" name="sort" value="{{$.SortType}}">
 | 
				
			||||||
		<input type="hidden" name="language" value="{{$.Language}}">
 | 
							<input type="hidden" name="language" value="{{$.Language}}">
 | 
				
			||||||
		<div class="ui fluid action input">
 | 
							<div class="ui fluid action input">
 | 
				
			||||||
			{{template "shared/searchinput" dict "Value" .Keyword "AutoFocus" true}}
 | 
								{{template "shared/searchinput" dict "Value" .Keyword "AutoFocus" (not .ProfileReadme)}}
 | 
				
			||||||
			{{if .PageIsExploreRepositories}}
 | 
								{{if .PageIsExploreRepositories}}
 | 
				
			||||||
				<input type="hidden" name="only_show_relevant" value="{{.OnlyShowRelevant}}">
 | 
									<input type="hidden" name="only_show_relevant" value="{{.OnlyShowRelevant}}">
 | 
				
			||||||
			{{else if .TabName}}
 | 
								{{else if .TabName}}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
<div class="ui secondary stackable pointing menu">
 | 
					<div class="ui secondary stackable pointing menu">
 | 
				
			||||||
	{{if .HasProfileReadme}}
 | 
						{{if and .HasProfileReadme .ContextUser.IsIndividual}}
 | 
				
			||||||
	<a class="{{if eq .TabName "overview"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=overview">
 | 
						<a class="{{if eq .TabName "overview"}}active {{end}}item" href="{{.ContextUser.HomeLink}}?tab=overview">
 | 
				
			||||||
		{{svg "octicon-info"}} {{ctx.Locale.Tr "user.overview"}}
 | 
							{{svg "octicon-info"}} {{ctx.Locale.Tr "user.overview"}}
 | 
				
			||||||
	</a>
 | 
						</a>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue