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}}
{{end}}
{{end}}
@@ -190,7 +190,7 @@
{{range .ClosedProjects}}
{{end}}
{{end}}
@@ -203,7 +203,7 @@
{{if .Project}}
{{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}}
{{end}}
{{end}}
@@ -252,7 +252,7 @@
{{range .ClosedProjects}}
{{end}}
{{end}}
@@ -264,7 +264,7 @@
{{if .Issue.ProjectID}}
{{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}}
-
+
{{.locale.Tr "repo.project_board"}}
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
@@ -265,27 +265,27 @@
{{.locale.Tr "repo.issues.new.clear_projects"}}
- {{if .OpenProjects}}
+ {{if .OpenProjectsTmplData}}
- {{range .OpenProjects}}
-
- {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
- {{.Name}}
+ {{range .OpenProjectsTmplData}}
+
+ {{if .Project.IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
+ {{.GetFullTitle}}
{{end}}
{{end}}
- {{if .ClosedProjects}}
+ {{if .ClosedProjectsTmplData}}
- {{range .ClosedProjects}}
-
- {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
- {{.Name}}
+ {{range .ClosedProjectsTmplData}}
+
+ {{if .Project.IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
+ {{.GetFullTitle}}
{{end}}
{{end}}
diff --git a/templates/repo/issue/new_form.tmpl b/templates/repo/issue/new_form.tmpl
index 1992900f15b25..069097849299d 100644
--- a/templates/repo/issue/new_form.tmpl
+++ b/templates/repo/issue/new_form.tmpl
@@ -158,39 +158,39 @@
diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index a899b417a51e1..0f3d6127e29a8 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -225,34 +225,34 @@
-
{{range .Milestones}}
- {{.GetFullTitle}}
+ {{$.ProjectTmplData.RenderFullTitle .}}
{{end}}
-
+
{{.locale.Tr "repo.project_board"}}
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
@@ -265,27 +265,27 @@
{{.locale.Tr "repo.issues.new.clear_projects"}}
- {{if .OpenProjectsTmplData}}
+ {{if .OpenProjects}}
- {{range .OpenProjectsTmplData}}
-
- {{if .Project.IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
- {{.GetFullTitle}}
+ {{range .OpenProjects}}
+
+ {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
+ {{$.ProjectTmplData.RenderFullTitle .}}
{{end}}
{{end}}
- {{if .ClosedProjectsTmplData}}
+ {{if .ClosedProjects}}
- {{range .ClosedProjectsTmplData}}
-
- {{if .Project.IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
- {{.GetFullTitle}}
+ {{range .ClosedProjects}}
+
+ {{if .IsOrganizationProject}}{{svg "octicon-project-symlink" 18 "gt-mr-3"}}{{else}}{{svg "octicon-project" 18 "gt-mr-3"}}{{end}}
+ {{$.ProjectTmplData.RenderFullTitle .}}
{{end}}
{{end}}
diff --git a/templates/repo/issue/new_form.tmpl b/templates/repo/issue/new_form.tmpl
index 069097849299d..74135a78425d1 100644
--- a/templates/repo/issue/new_form.tmpl
+++ b/templates/repo/issue/new_form.tmpl
@@ -158,39 +158,39 @@