mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	The JSONRedirect/JSONOK/JSONError functions were put into "Base" context incorrectly, it would cause abuse. Actually, they are for "web context" only, so, move them to the correct place. And by the way, use them to simplify old code: +75 -196
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2020 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package org
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
 | 
						|
	"code.gitea.io/gitea/models/db"
 | 
						|
	issues_model "code.gitea.io/gitea/models/issues"
 | 
						|
	"code.gitea.io/gitea/modules/context"
 | 
						|
	"code.gitea.io/gitea/modules/label"
 | 
						|
	repo_module "code.gitea.io/gitea/modules/repository"
 | 
						|
	"code.gitea.io/gitea/modules/web"
 | 
						|
	"code.gitea.io/gitea/services/forms"
 | 
						|
)
 | 
						|
 | 
						|
// RetrieveLabels find all the labels of an organization
 | 
						|
func RetrieveLabels(ctx *context.Context) {
 | 
						|
	labels, err := issues_model.GetLabelsByOrgID(ctx, ctx.Org.Organization.ID, ctx.FormString("sort"), db.ListOptions{})
 | 
						|
	if err != nil {
 | 
						|
		ctx.ServerError("RetrieveLabels.GetLabels", err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
	for _, l := range labels {
 | 
						|
		l.CalOpenIssues()
 | 
						|
	}
 | 
						|
	ctx.Data["Labels"] = labels
 | 
						|
	ctx.Data["NumLabels"] = len(labels)
 | 
						|
	ctx.Data["SortType"] = ctx.FormString("sort")
 | 
						|
}
 | 
						|
 | 
						|
// NewLabel create new label for organization
 | 
						|
func NewLabel(ctx *context.Context) {
 | 
						|
	form := web.GetForm(ctx).(*forms.CreateLabelForm)
 | 
						|
	ctx.Data["Title"] = ctx.Tr("repo.labels")
 | 
						|
	ctx.Data["PageIsLabels"] = true
 | 
						|
	ctx.Data["PageIsOrgSettings"] = true
 | 
						|
 | 
						|
	if ctx.HasError() {
 | 
						|
		ctx.Flash.Error(ctx.Data["ErrorMsg"].(string))
 | 
						|
		ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	l := &issues_model.Label{
 | 
						|
		OrgID:       ctx.Org.Organization.ID,
 | 
						|
		Name:        form.Title,
 | 
						|
		Exclusive:   form.Exclusive,
 | 
						|
		Description: form.Description,
 | 
						|
		Color:       form.Color,
 | 
						|
	}
 | 
						|
	if err := issues_model.NewLabel(ctx, l); err != nil {
 | 
						|
		ctx.ServerError("NewLabel", err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
	ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
 | 
						|
}
 | 
						|
 | 
						|
// UpdateLabel update a label's name and color
 | 
						|
func UpdateLabel(ctx *context.Context) {
 | 
						|
	form := web.GetForm(ctx).(*forms.CreateLabelForm)
 | 
						|
	l, err := issues_model.GetLabelInOrgByID(ctx, ctx.Org.Organization.ID, form.ID)
 | 
						|
	if err != nil {
 | 
						|
		switch {
 | 
						|
		case issues_model.IsErrOrgLabelNotExist(err):
 | 
						|
			ctx.Error(http.StatusNotFound)
 | 
						|
		default:
 | 
						|
			ctx.ServerError("UpdateLabel", err)
 | 
						|
		}
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	l.Name = form.Title
 | 
						|
	l.Exclusive = form.Exclusive
 | 
						|
	l.Description = form.Description
 | 
						|
	l.Color = form.Color
 | 
						|
	if err := issues_model.UpdateLabel(l); err != nil {
 | 
						|
		ctx.ServerError("UpdateLabel", err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
	ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
 | 
						|
}
 | 
						|
 | 
						|
// DeleteLabel delete a label
 | 
						|
func DeleteLabel(ctx *context.Context) {
 | 
						|
	if err := issues_model.DeleteLabel(ctx.Org.Organization.ID, ctx.FormInt64("id")); err != nil {
 | 
						|
		ctx.Flash.Error("DeleteLabel: " + err.Error())
 | 
						|
	} else {
 | 
						|
		ctx.Flash.Success(ctx.Tr("repo.issues.label_deletion_success"))
 | 
						|
	}
 | 
						|
 | 
						|
	ctx.JSONRedirect(ctx.Org.OrgLink + "/settings/labels")
 | 
						|
}
 | 
						|
 | 
						|
// InitializeLabels init labels for an organization
 | 
						|
func InitializeLabels(ctx *context.Context) {
 | 
						|
	form := web.GetForm(ctx).(*forms.InitializeLabelsForm)
 | 
						|
	if ctx.HasError() {
 | 
						|
		ctx.Redirect(ctx.Org.OrgLink + "/labels")
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	if err := repo_module.InitializeLabels(ctx, ctx.Org.Organization.ID, form.TemplateName, true); err != nil {
 | 
						|
		if label.IsErrTemplateLoad(err) {
 | 
						|
			originalErr := err.(label.ErrTemplateLoad).OriginalError
 | 
						|
			ctx.Flash.Error(ctx.Tr("repo.issues.label_templates.fail_to_load_file", form.TemplateName, originalErr))
 | 
						|
			ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
 | 
						|
			return
 | 
						|
		}
 | 
						|
		ctx.ServerError("InitializeLabels", err)
 | 
						|
		return
 | 
						|
	}
 | 
						|
	ctx.Redirect(ctx.Org.OrgLink + "/settings/labels")
 | 
						|
}
 |