mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Fix issue templates when blank isses are disabled (#27061)
Fixes #27060 --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: delvh <dev.lh@web.de>
This commit is contained in:
		@@ -804,7 +804,7 @@ func CompareDiff(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx.Data["IsRepoToolbarCommits"] = true
 | 
						ctx.Data["IsRepoToolbarCommits"] = true
 | 
				
			||||||
	ctx.Data["IsDiffCompare"] = true
 | 
						ctx.Data["IsDiffCompare"] = true
 | 
				
			||||||
	templateErrs := setTemplateIfExists(ctx, pullRequestTemplateKey, pullRequestTemplateCandidates)
 | 
						_, templateErrs := setTemplateIfExists(ctx, pullRequestTemplateKey, pullRequestTemplateCandidates)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(templateErrs) > 0 {
 | 
						if len(templateErrs) > 0 {
 | 
				
			||||||
		ctx.Flash.Warning(renderErrorOfTemplates(ctx, templateErrs), true)
 | 
							ctx.Flash.Warning(renderErrorOfTemplates(ctx, templateErrs), true)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -830,10 +830,11 @@ func RetrieveRepoMetas(ctx *context.Context, repo *repo_model.Repository, isPull
 | 
				
			|||||||
	return labels
 | 
						return labels
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles []string) map[string]error {
 | 
					// Tries to load and set an issue template. The first return value indicates if a template was loaded.
 | 
				
			||||||
 | 
					func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles []string) (bool, map[string]error) {
 | 
				
			||||||
	commit, err := ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.Repository.DefaultBranch)
 | 
						commit, err := ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.Repository.DefaultBranch)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil
 | 
							return false, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	templateCandidates := make([]string, 0, 1+len(possibleFiles))
 | 
						templateCandidates := make([]string, 0, 1+len(possibleFiles))
 | 
				
			||||||
@@ -896,20 +897,15 @@ func setTemplateIfExists(ctx *context.Context, ctxDataKey string, possibleFiles
 | 
				
			|||||||
		ctx.Data["label_ids"] = strings.Join(labelIDs, ",")
 | 
							ctx.Data["label_ids"] = strings.Join(labelIDs, ",")
 | 
				
			||||||
		ctx.Data["Reference"] = template.Ref
 | 
							ctx.Data["Reference"] = template.Ref
 | 
				
			||||||
		ctx.Data["RefEndName"] = git.RefName(template.Ref).ShortName()
 | 
							ctx.Data["RefEndName"] = git.RefName(template.Ref).ShortName()
 | 
				
			||||||
		return templateErrs
 | 
							return true, templateErrs
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return templateErrs
 | 
						return false, templateErrs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewIssue render creating issue page
 | 
					// NewIssue render creating issue page
 | 
				
			||||||
func NewIssue(ctx *context.Context) {
 | 
					func NewIssue(ctx *context.Context) {
 | 
				
			||||||
	issueConfig, _ := issue_service.GetTemplateConfigFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
 | 
						issueConfig, _ := issue_service.GetTemplateConfigFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
 | 
				
			||||||
	hasTemplates := issue_service.HasTemplatesOrContactLinks(ctx.Repo.Repository, ctx.Repo.GitRepo)
 | 
						hasTemplates := issue_service.HasTemplatesOrContactLinks(ctx.Repo.Repository, ctx.Repo.GitRepo)
 | 
				
			||||||
	if !issueConfig.BlankIssuesEnabled && hasTemplates {
 | 
					 | 
				
			||||||
		// The "issues/new" and "issues/new/choose" share the same query parameters "project" and "milestone", if blank issues are disabled, just redirect to the "issues/choose" page with these parameters.
 | 
					 | 
				
			||||||
		ctx.Redirect(fmt.Sprintf("%s/issues/new/choose?%s", ctx.Repo.Repository.Link(), ctx.Req.URL.RawQuery), http.StatusSeeOther)
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("repo.issues.new")
 | 
						ctx.Data["Title"] = ctx.Tr("repo.issues.new")
 | 
				
			||||||
	ctx.Data["PageIsIssueList"] = true
 | 
						ctx.Data["PageIsIssueList"] = true
 | 
				
			||||||
@@ -963,7 +959,8 @@ func NewIssue(ctx *context.Context) {
 | 
				
			|||||||
	ctx.Data["Tags"] = tags
 | 
						ctx.Data["Tags"] = tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, templateErrs := issue_service.GetTemplatesFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
 | 
						_, templateErrs := issue_service.GetTemplatesFromDefaultBranch(ctx.Repo.Repository, ctx.Repo.GitRepo)
 | 
				
			||||||
	if errs := setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates); len(errs) > 0 {
 | 
						templateLoaded, errs := setTemplateIfExists(ctx, issueTemplateKey, IssueTemplateCandidates)
 | 
				
			||||||
 | 
						if len(errs) > 0 {
 | 
				
			||||||
		for k, v := range errs {
 | 
							for k, v := range errs {
 | 
				
			||||||
			templateErrs[k] = v
 | 
								templateErrs[k] = v
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -978,6 +975,12 @@ func NewIssue(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWrite(unit.TypeIssues)
 | 
						ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWrite(unit.TypeIssues)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !issueConfig.BlankIssuesEnabled && hasTemplates && !templateLoaded {
 | 
				
			||||||
 | 
							// The "issues/new" and "issues/new/choose" share the same query parameters "project" and "milestone", if blank issues are disabled, just redirect to the "issues/choose" page with these parameters.
 | 
				
			||||||
 | 
							ctx.Redirect(fmt.Sprintf("%s/issues/new/choose?%s", ctx.Repo.Repository.Link(), ctx.Req.URL.RawQuery), http.StatusSeeOther)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplIssueNew)
 | 
						ctx.HTML(http.StatusOK, tplIssueNew)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user