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 ![image](https://github.com/go-gitea/gitea/assets/18380374/7f100e8d-2bd6-4563-85ba-d6008ffc71d7) after: will not jump to the search box ![image](https://github.com/go-gitea/gitea/assets/18380374/9aab382c-8ebe-4d18-b990-4adbb6c341ad) - incorrect display of overview tab before: ![image](https://github.com/go-gitea/gitea/assets/18380374/b24c79e8-9b79-4576-9276-43bd19172043) after: ![image](https://github.com/go-gitea/gitea/assets/18380374/7aab5827-f086-4874-bd84-39bd81b872f3) - 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
|
@ -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…
Reference in a new issue