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  }