mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-30 05:46:09 +01:00
36f7c162e2
This implements "repository flags", a way for instance administrators to assign custom flags to repositories. The idea is that custom templates can look at these flags, and display banners based on them, Forgejo does not provide anything built on top of it, just the foundation. The feature is optional, and disabled by default. To enable it, set `[repository].ENABLE_FLAGS = true`. On the UI side, instance administrators will see a new "Manage flags" tab on repositories, and a list of enabled tags (if any) on the repository home page. The "Manage flags" page allows them to remove existing flags, or add any new ones that are listed in `[repository].SETTABLE_FLAGS`. The model does not enforce that only the `SETTABLE_FLAGS` are present. If the setting is changed, old flags may remain present in the database, and anything that uses them, will still work. The repository flag management page will allow an instance administrator to remove them, but not set them, once removed. Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu> (cherry picked from commitba735ce222
) (cherry picked from commitf09f6e029b
) (cherry picked from commit2f8b041489
) (cherry picked from commitd3186ee5f4
)
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
// Copyright 2024 The Forgejo Authors c/o Codeberg e.V.. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package flags
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"code.gitea.io/gitea/modules/base"
|
|
"code.gitea.io/gitea/modules/context"
|
|
"code.gitea.io/gitea/modules/log"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
)
|
|
|
|
const (
|
|
tplRepoFlags base.TplName = "repo/flags"
|
|
)
|
|
|
|
func Manage(ctx *context.Context) {
|
|
ctx.Data["IsRepoFlagsPage"] = true
|
|
ctx.Data["Title"] = ctx.Tr("repo.admin.manage_flags")
|
|
|
|
flags := map[string]bool{}
|
|
for _, f := range setting.Repository.SettableFlags {
|
|
flags[f] = false
|
|
}
|
|
repoFlags, _ := ctx.Repo.Repository.ListFlags(ctx)
|
|
for _, f := range repoFlags {
|
|
flags[f.Name] = true
|
|
}
|
|
|
|
ctx.Data["Flags"] = flags
|
|
|
|
ctx.HTML(http.StatusOK, tplRepoFlags)
|
|
}
|
|
|
|
func ManagePost(ctx *context.Context) {
|
|
newFlags := ctx.FormStrings("flags")
|
|
|
|
err := ctx.Repo.Repository.ReplaceAllFlags(ctx, newFlags)
|
|
if err != nil {
|
|
ctx.Flash.Error(ctx.Tr("repo.admin.failed_to_replace_flags"))
|
|
log.Error("Error replacing repository flags for repo %d: %v", ctx.Repo.Repository.ID, err)
|
|
} else {
|
|
ctx.Flash.Success(ctx.Tr("repo.admin.flags_replaced"))
|
|
}
|
|
|
|
ctx.Redirect(ctx.Repo.Repository.HTMLURL() + "/flags")
|
|
}
|