From 9d0875091ac4f885a5d588ddf4f621ffcb8c46e7 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Tue, 21 Feb 2023 16:53:06 +0900 Subject: [PATCH 1/6] show project name instead of title --- models/project/project.go | 19 +++++++++++++++++++ templates/repo/issue/list.tmpl | 8 ++++---- templates/repo/issue/new_form.tmpl | 6 +++--- .../repo/issue/view_content/comments.tmpl | 6 +++--- .../repo/issue/view_content/sidebar.tmpl | 6 +++--- templates/shared/issuelist.tmpl | 2 +- 6 files changed, 33 insertions(+), 14 deletions(-) diff --git a/models/project/project.go b/models/project/project.go index 931ef44675afd..a11c0a502c2d4 100644 --- a/models/project/project.go +++ b/models/project/project.go @@ -144,6 +144,25 @@ func (p *Project) Link() string { return "" } +// Name return the project's name which is combined with owner/repo/project's name +func (p *Project) Name() string { + if p.OwnerID > 0 { + if err := p.LoadOwner(db.DefaultContext); err != nil { + log.Error("LoadOwner: %v", err) + return "" + } + return fmt.Sprintf("%s/-/%s", p.Owner.Name, p.Title) + } + if p.RepoID > 0 { + if err := p.LoadRepo(db.DefaultContext); err != nil { + log.Error("LoadRepo: %v", err) + return "" + } + return fmt.Sprintf("%s/%s/%s", p.Repo.OwnerName, p.Repo.Name, p.Title) + } + return "" +} + func (p *Project) IsOrganizationProject() bool { return p.Type == TypeOrganization } diff --git a/templates/repo/issue/list.tmpl b/templates/repo/issue/list.tmpl index 2b1bea822fbf0..8921830922ca1 100644 --- a/templates/repo/issue/list.tmpl +++ b/templates/repo/issue/list.tmpl @@ -101,7 +101,7 @@ {{range .OpenProjects}} {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}} - {{.Title}} + {{.Name}} {{end}} {{end}} @@ -113,7 +113,7 @@ {{range .ClosedProjects}} {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}} - {{.Title}} + {{.Name}} {{end}} {{end}} @@ -273,7 +273,7 @@ {{range .OpenProjects}}
{{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}} - {{.Title}} + {{.Name}}
{{end}} {{end}} @@ -285,7 +285,7 @@ {{range .ClosedProjects}}
{{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}} - {{.Title}} + {{.Name}}
{{end}} {{end}} diff --git a/templates/repo/issue/new_form.tmpl b/templates/repo/issue/new_form.tmpl index 8346d07a13c66..1992900f15b25 100644 --- a/templates/repo/issue/new_form.tmpl +++ b/templates/repo/issue/new_form.tmpl @@ -178,7 +178,7 @@ {{range .OpenProjects}} {{svg "octicon-project" 18 "gt-mr-3"}} - {{.Title}} + {{.Name}} {{end}} {{end}} @@ -190,7 +190,7 @@ {{range .ClosedProjects}} {{svg "octicon-project" 18 "gt-mr-3"}} - {{.Title}} + {{.Name}} {{end}} {{end}} @@ -203,7 +203,7 @@ {{if .Project}} {{svg "octicon-project" 18 "gt-mr-3"}} - {{.Project.Title}} + {{.Project.Name}} {{end}} diff --git a/templates/repo/issue/view_content/comments.tmpl b/templates/repo/issue/view_content/comments.tmpl index b81c3c7f0351b..9ee9dc8e9150b 100644 --- a/templates/repo/issue/view_content/comments.tmpl +++ b/templates/repo/issue/view_content/comments.tmpl @@ -720,12 +720,12 @@ {{template "shared/user/authorlink" .Poster}} {{if gt .OldProjectID 0}} {{if gt .ProjectID 0}} - {{$.locale.Tr "repo.issues.change_project_at" (.OldProject.Title|Escape) (.Project.Title|Escape) $createdStr | Safe}} + {{$.locale.Tr "repo.issues.change_project_at" (.OldProject.Name|Escape) (.Project.Name|Escape) $createdStr | Safe}} {{else}} - {{$.locale.Tr "repo.issues.remove_project_at" (.OldProject.Title|Escape) $createdStr | Safe}} + {{$.locale.Tr "repo.issues.remove_project_at" (.OldProject.Name|Escape) $createdStr | Safe}} {{end}} {{else if gt .ProjectID 0}} - {{$.locale.Tr "repo.issues.add_project_at" (.Project.Title|Escape) $createdStr | Safe}} + {{$.locale.Tr "repo.issues.add_project_at" (.Project.Name|Escape) $createdStr | Safe}} {{end}} diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl index 2b24825b5f7bd..a899b417a51e1 100644 --- a/templates/repo/issue/view_content/sidebar.tmpl +++ b/templates/repo/issue/view_content/sidebar.tmpl @@ -240,7 +240,7 @@ {{range .OpenProjects}} {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}} - {{.Title}} + {{.Name}} {{end}} {{end}} @@ -252,7 +252,7 @@ {{range .ClosedProjects}} {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}} - {{.Title}} + {{.Name}} {{end}} {{end}} @@ -264,7 +264,7 @@ {{if .Issue.ProjectID}} {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}} - {{.Issue.Project.Title}} + {{.Issue.Project.Name}} {{end}} diff --git a/templates/shared/issuelist.tmpl b/templates/shared/issuelist.tmpl index a43047c79de91..9dc6a615799a5 100644 --- a/templates/shared/issuelist.tmpl +++ b/templates/shared/issuelist.tmpl @@ -88,7 +88,7 @@ {{end}} {{if .Project}} - {{svg "octicon-project" 14 "gt-mr-2"}}{{.Project.Title}} + {{svg "octicon-project" 14 "gt-mr-2"}}{{.Project.Name}} {{end}} {{if .Ref}} From 4c238890ed88034d03b5c858a5ebc634a2c184a7 Mon Sep 17 00:00:00 2001 From: yp05327 <576951401@qq.com> Date: Thu, 23 Feb 2023 03:12:28 +0900 Subject: [PATCH 2/6] test projecttmpldata --- models/project/project.go | 80 ++++++++++++++++--- routers/web/repo/issue.go | 20 ++--- templates/repo/issue/list.tmpl | 46 +++++------ templates/repo/issue/new_form.tmpl | 22 ++--- .../repo/issue/view_content/sidebar.tmpl | 22 ++--- 5 files changed, 124 insertions(+), 66 deletions(-) diff --git a/models/project/project.go b/models/project/project.go index a11c0a502c2d4..ac7483b3d4179 100644 --- a/models/project/project.go +++ b/models/project/project.go @@ -200,31 +200,35 @@ func IsTypeValid(p Type) bool { // SearchOptions are options for GetProjects type SearchOptions struct { - OwnerID int64 - RepoID int64 - Page int - IsClosed util.OptionalBool - SortType string - Type Type + ProjectID int64 + OwnerID int64 + RepoID int64 + Page int + IsClosed util.OptionalBool + SortType string + Type Type } func (opts *SearchOptions) toConds() builder.Cond { cond := builder.NewCond() + if opts.ProjectID > 0 { + cond = cond.And(builder.Eq{"project.id": opts.ProjectID}) + } if opts.RepoID > 0 { - cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) + cond = cond.And(builder.Eq{"project.repo_id": opts.RepoID}) } switch opts.IsClosed { case util.OptionalBoolTrue: - cond = cond.And(builder.Eq{"is_closed": true}) + cond = cond.And(builder.Eq{"project.is_closed": true}) case util.OptionalBoolFalse: - cond = cond.And(builder.Eq{"is_closed": false}) + cond = cond.And(builder.Eq{"project.is_closed": false}) } if opts.Type > 0 { - cond = cond.And(builder.Eq{"type": opts.Type}) + cond = cond.And(builder.Eq{"project.type": opts.Type}) } if opts.OwnerID > 0 { - cond = cond.And(builder.Eq{"owner_id": opts.OwnerID}) + cond = cond.And(builder.Eq{"project.owner_id": opts.OwnerID}) } return cond } @@ -265,6 +269,60 @@ func FindProjects(ctx context.Context, opts SearchOptions) ([]*Project, int64, e return projects, count, e.Find(&projects) } +type ProjcetTmplData struct { + Project Project `xorm:"extends"` + Repo repo_model.Repository `xorm:"extends"` + Owner user_model.User `xorm:"extends"` +} + +func (ptd *ProjcetTmplData) GetFullTitle() string { + if ptd.Project.OwnerID > 0 { + return fmt.Sprintf("%s/-/%s", ptd.Owner.Name, ptd.Project.Title) + } + if ptd.Project.RepoID > 0 { + return fmt.Sprintf("%s/%s/%s", ptd.Repo.OwnerName, ptd.Repo.Name, ptd.Project.Title) + } + return ptd.Project.Title +} + +// GetProjectsTmplData returns a list of all projects that have been created in the repository +func GetProjectsTmplData(ctx context.Context, opts SearchOptions) ([]*ProjcetTmplData, int64, error) { + e := db.GetEngine(db.DefaultContext).Table("project") + ptdl := make([]*ProjcetTmplData, 0, setting.UI.IssuePagingNum) + cond := opts.toConds() + + if opts.RepoID > 0 { + e = e.Select("project.*, repository.*").Join("INNER", "repository", "repository.id = project.repo_id") + } + if opts.OwnerID > 0 { + e = e.Select("project.*, user.*").Join("INNER", "user", "user.id = project.owner_id") + } + + e = e.Where(cond) + + if opts.Page > 0 { + e = e.Limit(setting.UI.IssuePagingNum, (opts.Page-1)*setting.UI.IssuePagingNum) + } + + switch opts.SortType { + case "oldest": + e.Desc("created_unix") + case "recentupdate": + e.Desc("updated_unix") + case "leastupdate": + e.Asc("updated_unix") + default: + e.Asc("created_unix") + } + + count, err := e.FindAndCount(&ptdl) + if err != nil { + return nil, 0, fmt.Errorf("FindAndCount: %w", err) + } + + return ptdl, count, nil +} + // NewProject creates a new Project func NewProject(p *Project) error { if !IsBoardTypeValid(p.BoardType) { diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 05ba26a70cda6..946ea3613d39e 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -485,51 +485,51 @@ func RetrieveRepoMilestonesAndAssignees(ctx *context.Context, repo *repo_model.R func retrieveProjects(ctx *context.Context, repo *repo_model.Repository) { var err error - projects, _, err := project_model.FindProjects(ctx, project_model.SearchOptions{ + ptdl, _, err := project_model.GetProjectsTmplData(ctx, project_model.SearchOptions{ RepoID: repo.ID, Page: -1, IsClosed: util.OptionalBoolFalse, Type: project_model.TypeRepository, }) if err != nil { - ctx.ServerError("GetProjects", err) + ctx.ServerError("GetProjectsTmplData", err) return } - projects2, _, err := project_model.FindProjects(ctx, project_model.SearchOptions{ + ptdl2, _, err := project_model.GetProjectsTmplData(ctx, project_model.SearchOptions{ OwnerID: repo.OwnerID, Page: -1, IsClosed: util.OptionalBoolFalse, Type: project_model.TypeOrganization, }) if err != nil { - ctx.ServerError("GetProjects", err) + ctx.ServerError("GetProjectsTmplData", err) return } - ctx.Data["OpenProjects"] = append(projects, projects2...) + ctx.Data["OpenProjectsTmplData"] = append(ptdl, ptdl2...) - projects, _, err = project_model.FindProjects(ctx, project_model.SearchOptions{ + ptdl, _, err = project_model.GetProjectsTmplData(ctx, project_model.SearchOptions{ RepoID: repo.ID, Page: -1, IsClosed: util.OptionalBoolTrue, Type: project_model.TypeRepository, }) if err != nil { - ctx.ServerError("GetProjects", err) + ctx.ServerError("GetProjectsTmplData", err) return } - projects2, _, err = project_model.FindProjects(ctx, project_model.SearchOptions{ + ptdl2, _, err = project_model.GetProjectsTmplData(ctx, project_model.SearchOptions{ OwnerID: repo.OwnerID, Page: -1, IsClosed: util.OptionalBoolTrue, Type: project_model.TypeOrganization, }) if err != nil { - ctx.ServerError("GetProjects", err) + ctx.ServerError("GetProjectsTmplData", err) return } - ctx.Data["ClosedProjects"] = append(projects, projects2...) + ctx.Data["ClosedProjectsTmplData"] = append(ptdl, ptdl2...) } // repoReviewerSelection items to bee shown diff --git a/templates/repo/issue/list.tmpl b/templates/repo/issue/list.tmpl index 8921830922ca1..10e0eb0e38aa2 100644 --- a/templates/repo/issue/list.tmpl +++ b/templates/repo/issue/list.tmpl @@ -81,7 +81,7 @@ - {{range .Milestones}}
- {{.Name}} + {{.GetFullTitle}}
{{end}} -