code.gitea.io/gitea@v1.21.7/routers/web/org/org_labels.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package org 5 6 import ( 7 "net/http" 8 9 "code.gitea.io/gitea/models/db" 10 issues_model "code.gitea.io/gitea/models/issues" 11 "code.gitea.io/gitea/modules/context" 12 "code.gitea.io/gitea/modules/label" 13 repo_module "code.gitea.io/gitea/modules/repository" 14 "code.gitea.io/gitea/modules/web" 15 "code.gitea.io/gitea/services/forms" 16 ) 17 18 // RetrieveLabels find all the labels of an organization 19 func RetrieveLabels(ctx *context.Context) { 20 labels, err := issues_model.GetLabelsByOrgID(ctx, ctx.Org.Organization.ID, ctx.FormString("sort"), db.ListOptions{}) 21 if err != nil { 22 ctx.ServerError("RetrieveLabels.GetLabels", err) 23 return 24 } 25 for _, l := range labels { 26 l.CalOpenIssues() 27 } 28 ctx.Data["Labels"] = labels 29 ctx.Data["NumLabels"] = len(labels) 30 ctx.Data["SortType"] = ctx.FormString("sort") 31 } 32 33 // NewLabel create new label for organization 34 func NewLabel(ctx *context.Context) { 35 form := web.GetForm(ctx).(*forms.CreateLabelForm) 36 ctx.Data["Title"] = ctx.Tr("repo.labels") 37 ctx.Data["PageIsLabels"] = true 38 ctx.Data["PageIsOrgSettings"] = true 39 40 if ctx.HasError() { 41 ctx.Flash.Error(ctx.Data["ErrorMsg"].(string)) 42 ctx.Redirect(ctx.Org.OrgLink + "/settings/labels") 43 return 44 } 45 46 l := &issues_model.Label{ 47 OrgID: ctx.Org.Organization.ID, 48 Name: form.Title, 49 Exclusive: form.Exclusive, 50 Description: form.Description, 51 Color: form.Color, 52 } 53 if err := issues_model.NewLabel(ctx, l); err != nil { 54 ctx.ServerError("NewLabel", err) 55 return 56 } 57 ctx.Redirect(ctx.Org.OrgLink + "/settings/labels") 58 } 59 60 // UpdateLabel update a label's name and color 61 func UpdateLabel(ctx *context.Context) { 62 form := web.GetForm(ctx).(*forms.CreateLabelForm) 63 l, err := issues_model.GetLabelInOrgByID(ctx, ctx.Org.Organization.ID, form.ID) 64 if err != nil { 65 switch { 66 case issues_model.IsErrOrgLabelNotExist(err): 67 ctx.Error(http.StatusNotFound) 68 default: 69 ctx.ServerError("UpdateLabel", err) 70 } 71 return 72 } 73 74 l.Name = form.Title 75 l.Exclusive = form.Exclusive 76 l.Description = form.Description 77 l.Color = form.Color 78 l.SetArchived(form.IsArchived) 79 if err := issues_model.UpdateLabel(ctx, l); err != nil { 80 ctx.ServerError("UpdateLabel", err) 81 return 82 } 83 ctx.Redirect(ctx.Org.OrgLink + "/settings/labels") 84 } 85 86 // DeleteLabel delete a label 87 func DeleteLabel(ctx *context.Context) { 88 if err := issues_model.DeleteLabel(ctx, ctx.Org.Organization.ID, ctx.FormInt64("id")); err != nil { 89 ctx.Flash.Error("DeleteLabel: " + err.Error()) 90 } else { 91 ctx.Flash.Success(ctx.Tr("repo.issues.label_deletion_success")) 92 } 93 94 ctx.JSONRedirect(ctx.Org.OrgLink + "/settings/labels") 95 } 96 97 // InitializeLabels init labels for an organization 98 func InitializeLabels(ctx *context.Context) { 99 form := web.GetForm(ctx).(*forms.InitializeLabelsForm) 100 if ctx.HasError() { 101 ctx.Redirect(ctx.Org.OrgLink + "/labels") 102 return 103 } 104 105 if err := repo_module.InitializeLabels(ctx, ctx.Org.Organization.ID, form.TemplateName, true); err != nil { 106 if label.IsErrTemplateLoad(err) { 107 originalErr := err.(label.ErrTemplateLoad).OriginalError 108 ctx.Flash.Error(ctx.Tr("repo.issues.label_templates.fail_to_load_file", form.TemplateName, originalErr)) 109 ctx.Redirect(ctx.Org.OrgLink + "/settings/labels") 110 return 111 } 112 ctx.ServerError("InitializeLabels", err) 113 return 114 } 115 ctx.Redirect(ctx.Org.OrgLink + "/settings/labels") 116 }