Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix inconsistent user profile layout across tabs #25625

Merged
merged 48 commits into from
Jul 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
519293d
Adjusting profile layout for package, project and code page.
puni9869 Jul 2, 2023
aaa5f71
Templates and go file formatting
puni9869 Jul 2, 2023
2fedaf3
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 2, 2023
eae7940
fix merge
wxiaoguang Jul 2, 2023
b0bd1ea
fix merge
wxiaoguang Jul 2, 2023
8eb033e
Fixing page-content style
puni9869 Jul 2, 2023
907a710
Removing page-content to gt-mt-4
puni9869 Jul 2, 2023
cbd0ca8
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 3, 2023
9d6c8cf
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 3, 2023
bef3289
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 3, 2023
c3f23d1
Fix :: Suggestions Removing page-content
puni9869 Jul 3, 2023
110081a
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 3, 2023
110e50b
Adding style in package version list
puni9869 Jul 3, 2023
8b9a080
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 3, 2023
656191a
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 3, 2023
f3ee922
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 4, 2023
617544c
fix style in package/repo
puni9869 Jul 4, 2023
aeb49f9
Adding style in packages in repo package
puni9869 Jul 4, 2023
0e9e8be
Formatting templates
puni9869 Jul 4, 2023
52cfeec
Adding style
puni9869 Jul 4, 2023
5b18ff6
Formatting templates
puni9869 Jul 4, 2023
55121d6
Adding context to the profile version list package page
puni9869 Jul 4, 2023
7ed8299
Fixing linter issues in templates
puni9869 Jul 4, 2023
2cf7ff8
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 4, 2023
1113af0
Resolving conflicts
puni9869 Jul 4, 2023
1165409
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 4, 2023
e0289ad
Fixing kanban board header
puni9869 Jul 5, 2023
6623348
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 5, 2023
44c2edd
Fixing in edit project org projects
puni9869 Jul 5, 2023
ee1413d
Adding org header avatar
puni9869 Jul 5, 2023
eaa7ee8
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 5, 2023
6e3c782
fix merge
wxiaoguang Jul 5, 2023
ab9b005
fix container layout
wxiaoguang Jul 5, 2023
1571c37
Merge branch 'main' into punit/ISSUE-24871-user-profile-orig
wxiaoguang Jul 5, 2023
7ec582b
revert unnecessary new lines
wxiaoguang Jul 5, 2023
3c5652d
rewrite
wxiaoguang Jul 5, 2023
fd85288
rewrite
wxiaoguang Jul 5, 2023
b29bbfa
rewrite
wxiaoguang Jul 5, 2023
6c93f71
rewrite
wxiaoguang Jul 5, 2023
f355415
fix
wxiaoguang Jul 5, 2023
da7bf21
remove unused code
wxiaoguang Jul 5, 2023
9046994
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 5, 2023
deceaf1
Merge branch 'main' into punit/ISSUE-24871-user-profile
puni9869 Jul 6, 2023
ab0ad22
Merge branch 'main' into punit/ISSUE-24871-user-profile
GiteaBot Jul 6, 2023
0162ec5
Merge branch 'main' into punit/ISSUE-24871-user-profile
GiteaBot Jul 6, 2023
36660f6
Merge branch 'main' into punit/ISSUE-24871-user-profile
GiteaBot Jul 6, 2023
8e6f3c2
Merge branch 'main' into punit/ISSUE-24871-user-profile
GiteaBot Jul 6, 2023
b670669
dedent templates/user/overview/header.tmpl
silverwind Jul 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion models/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ func GetUserFollowers(ctx context.Context, u, viewer *User, listOptions db.ListO

// GetUserFollowing returns range of user's following.
func GetUserFollowing(ctx context.Context, u, viewer *User, listOptions db.ListOptions) ([]*User, int64, error) {
sess := db.GetEngine(db.DefaultContext).
sess := db.GetEngine(ctx).
Select("`user`.*").
Join("LEFT", "follow", "`user`.id=follow.follow_id").
Where("follow.user_id=?", u.ID).
Expand Down
1 change: 0 additions & 1 deletion modules/context/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
}
ctx.Data["IsOrganizationOwner"] = ctx.Org.IsOwner
ctx.Data["IsOrganizationMember"] = ctx.Org.IsMember
ctx.Data["IsProjectEnabled"] = true
ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
ctx.Data["IsPublicMember"] = func(uid int64) bool {
Expand Down
1 change: 1 addition & 0 deletions routers/web/org/projects.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ func MustEnableProjects(ctx *context.Context) {

// Projects renders the home page of projects
func Projects(ctx *context.Context) {
shared_user.PrepareContextForProfileBigAvatar(ctx)
ctx.Data["Title"] = ctx.Tr("repo.project_board")

sortType := ctx.FormTrim("sort")
Expand Down
106 changes: 90 additions & 16 deletions routers/web/shared/user/header.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,109 @@
package user

import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/organization"
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting"
)

func RenderUserHeader(ctx *context.Context) {
ctx.Data["IsProjectEnabled"] = true
// prepareContextForCommonProfile store some common data into context data for user's profile related pages (including the nav menu)
// It is designed to be fast and safe to be called multiple times in one request
func prepareContextForCommonProfile(ctx *context.Context) {
ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
ctx.Data["ContextUser"] = ctx.ContextUser
tab := ctx.FormString("tab")
ctx.Data["TabName"] = tab
repo, err := repo_model.GetRepositoryByName(ctx.ContextUser.ID, ".profile")
if err == nil && !repo.IsEmpty {
gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())
ctx.Data["EnableFeed"] = setting.Other.EnableFeed
ctx.Data["FeedURL"] = ctx.ContextUser.HomeLink()
}

// PrepareContextForProfileBigAvatar set the context for big avatar view on the profile page
func PrepareContextForProfileBigAvatar(ctx *context.Context) {
prepareContextForCommonProfile(ctx)

ctx.Data["IsFollowing"] = ctx.Doer != nil && user_model.IsFollowing(ctx.Doer.ID, ctx.ContextUser.ID)
ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail && ctx.ContextUser.Email != "" && ctx.IsSigned && !ctx.ContextUser.KeepEmailPrivate

// Show OpenID URIs
openIDs, err := user_model.GetUserOpenIDs(ctx.ContextUser.ID)
if err != nil {
ctx.ServerError("GetUserOpenIDs", err)
return
}
ctx.Data["OpenIDs"] = openIDs

if len(ctx.ContextUser.Description) != 0 {
content, err := markdown.RenderString(&markup.RenderContext{
URLPrefix: ctx.Repo.RepoLink,
Metas: map[string]string{"mode": "document"},
GitRepo: ctx.Repo.GitRepo,
Ctx: ctx,
}, ctx.ContextUser.Description)
if err != nil {
ctx.ServerError("OpenRepository", err)
ctx.ServerError("RenderString", err)
return
}
defer gitRepo.Close()
commit, err := gitRepo.GetBranchCommit(repo.DefaultBranch)
if err != nil {
ctx.ServerError("GetBranchCommit", err)
return
ctx.Data["RenderedDescription"] = content
}

showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
orgs, err := organization.FindOrgs(organization.FindOrgOptions{
UserID: ctx.ContextUser.ID,
IncludePrivate: showPrivate,
})
if err != nil {
ctx.ServerError("FindOrgs", err)
return
}
ctx.Data["Orgs"] = orgs
ctx.Data["HasOrgsVisible"] = organization.HasOrgsVisible(orgs, ctx.Doer)

badges, _, err := user_model.GetUserBadges(ctx, ctx.ContextUser)
if err != nil {
ctx.ServerError("GetUserBadges", err)
return
}
ctx.Data["Badges"] = badges

// in case the numbers are already provided by other functions, no need to query again (which is slow)
if _, ok := ctx.Data["NumFollowers"]; !ok {
_, ctx.Data["NumFollowers"], _ = user_model.GetUserFollowers(ctx, ctx.ContextUser, ctx.Doer, db.ListOptions{PageSize: 1, Page: 1})
}
if _, ok := ctx.Data["NumFollowing"]; !ok {
_, ctx.Data["NumFollowing"], _ = user_model.GetUserFollowing(ctx, ctx.ContextUser, ctx.Doer, db.ListOptions{PageSize: 1, Page: 1})
}
}

func FindUserProfileReadme(ctx *context.Context) (profileGitRepo *git.Repository, profileReadmeBlob *git.Blob, profileClose func()) {
profileDbRepo, err := repo_model.GetRepositoryByName(ctx.ContextUser.ID, ".profile")
if err == nil && !profileDbRepo.IsEmpty {
if profileGitRepo, err = git.OpenRepository(ctx, profileDbRepo.RepoPath()); err != nil {
log.Error("FindUserProfileReadme failed to OpenRepository: %v", err)
} else {
if commit, err := profileGitRepo.GetBranchCommit(profileDbRepo.DefaultBranch); err != nil {
log.Error("FindUserProfileReadme failed to GetBranchCommit: %v", err)
} else {
profileReadmeBlob, _ = commit.GetBlobByPath("README.md")
}
}
blob, err := commit.GetBlobByPath("README.md")
if err == nil && blob != nil {
ctx.Data["ProfileReadme"] = true
}
return profileGitRepo, profileReadmeBlob, func() {
if profileGitRepo != nil {
_ = profileGitRepo.Close()
}
}
}

func RenderUserHeader(ctx *context.Context) {
prepareContextForCommonProfile(ctx)

_, profileReadmeBlob, profileClose := FindUserProfileReadme(ctx)
defer profileClose()
ctx.Data["HasProfileReadme"] = profileReadmeBlob != nil
}
4 changes: 3 additions & 1 deletion routers/web/user/code.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/modules/context"
code_indexer "code.gitea.io/gitea/modules/indexer/code"
"code.gitea.io/gitea/modules/setting"
shared_user "code.gitea.io/gitea/routers/web/shared/user"
)

const (
Expand All @@ -23,8 +24,9 @@ func CodeSearch(ctx *context.Context) {
ctx.Redirect(ctx.ContextUser.HomeLink())
return
}
shared_user.PrepareContextForProfileBigAvatar(ctx)
shared_user.RenderUserHeader(ctx)

ctx.Data["IsProjectEnabled"] = true
ctx.Data["IsPackageEnabled"] = setting.Packages.Enabled
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
ctx.Data["Title"] = ctx.Tr("explore.code")
Expand Down
2 changes: 1 addition & 1 deletion routers/web/user/home.go
Original file line number Diff line number Diff line change
Expand Up @@ -857,7 +857,7 @@ func UsernameSubRoute(ctx *context.Context) {
context_service.UserAssignmentWeb()(ctx)
if !ctx.Written() {
ctx.Data["EnableFeed"] = setting.Other.EnableFeed
Profile(ctx)
OwnerProfile(ctx)
}
}
}
2 changes: 2 additions & 0 deletions routers/web/user/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ const (

// ListPackages displays a list of all packages of the context user
func ListPackages(ctx *context.Context) {
shared_user.PrepareContextForProfileBigAvatar(ctx)
page := ctx.FormInt("page")
if page <= 1 {
page = 1
Expand Down Expand Up @@ -259,6 +260,7 @@ func ViewPackageVersion(ctx *context.Context) {

// ListPackageVersions lists all versions of a package
func ListPackageVersions(ctx *context.Context) {
shared_user.PrepareContextForProfileBigAvatar(ctx)
p, err := packages_model.GetPackageByName(ctx, ctx.Package.Owner.ID, packages_model.Type(ctx.Params("type")), ctx.Params("name"))
if err != nil {
if err == packages_model.ErrPackageNotExist {
Expand Down
Loading