feat: add a new unit type unitTypePolls

This integrates the polls further into Gitea and allows us to enable / disable polls from the repository settings.

Implements:

Feature F04: Enable/Disable Polls for a Repository
Rule R05: Enabling Polls for a Repository requires being Owner

See https://github.com/go-gitea/gitea/issues/8115#issuecomment-1441096541
domi41 1 year ago
parent b3250a061d
commit ffb8118d48

@ -18,16 +18,17 @@ type Type int
// Enumerate all the unit types
const (
TypeInvalid Type = iota // 0 invalid
TypeCode // 1 code
TypeIssues // 2 issues
TypePullRequests // 3 PRs
TypeReleases // 4 Releases
TypeWiki // 5 Wiki
TypeExternalWiki // 6 ExternalWiki
TypeExternalTracker // 7 ExternalTracker
TypeProjects // 8 Kanban board
TypePackages // 9 Packages
TypeInvalid Type = iota // 00 invalid
TypeCode // 01 code
TypeIssues // 02 issues
TypePullRequests // 03 PRs
TypeReleases // 04 Releases
TypeWiki // 05 Wiki
TypeExternalWiki // 06 ExternalWiki
TypeExternalTracker // 07 ExternalTracker
TypeProjects // 08 Kanban board
TypePackages // 09 Packages
TypePolls // 10 Polls
)
// Value returns integer value for unit type
@ -55,6 +56,8 @@ func (u Type) String() string {
return "TypeProjects"
case TypePackages:
return "TypePackages"
case TypePolls:
return "TypePolls"
}
return fmt.Sprintf("Unknown Type %d", u)
}
@ -78,6 +81,7 @@ var (
TypeExternalTracker,
TypeProjects,
TypePackages,
TypePolls,
}
// DefaultRepoUnits contains the default unit types
@ -89,6 +93,7 @@ var (
TypeWiki,
TypeProjects,
TypePackages,
TypePolls,
}
// NotAllowedDefaultRepoUnits contains units that can't be default
@ -284,11 +289,20 @@ var (
TypePackages,
"repo.packages",
"/packages",
"packages.desc",
"packages.desc", // why not repo.packages.desc ?
6,
perm.AccessModeRead,
}
UnitPolls = Unit{
TypePolls,
"repo.polls",
"/polls",
"repo.polls.desc",
7,
perm.AccessModeOwner,
}
// Units contains all the units
Units = map[Type]Unit{
TypeCode: UnitCode,
@ -300,6 +314,7 @@ var (
TypeExternalWiki: UnitExternalWiki,
TypeProjects: UnitProjects,
TypePackages: UnitPackages,
TypePolls: UnitPolls,
}
)
@ -349,7 +364,7 @@ func MinUnitAccessMode(unitsMap map[Type]perm.AccessMode) perm.AccessMode {
continue
}
// get the minial permission great than AccessModeNone except all are AccessModeNone
// get the minimal permission greater than AccessModeNone except all are AccessModeNone
if mode > perm.AccessModeNone && (res == perm.AccessModeNone || mode < res) {
res = mode
}

@ -556,7 +556,7 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) {
ctx.Data["CanWriteCode"] = ctx.Repo.CanWrite(unit_model.TypeCode)
ctx.Data["CanWriteIssues"] = ctx.Repo.CanWrite(unit_model.TypeIssues)
ctx.Data["CanWritePulls"] = ctx.Repo.CanWrite(unit_model.TypePullRequests)
ctx.Data["CanWritePolls"] = ctx.Repo.IsOwner() // todo: add a 'real' permission
ctx.Data["CanWritePolls"] = ctx.Repo.CanWrite(unit_model.TypePolls)
canSignedUserFork, err := repo_module.CanUserForkRepo(ctx.Doer, ctx.Repo.Repository)
if err != nil {
@ -1042,6 +1042,7 @@ func UnitTypes() func(ctx *Context) {
ctx.Data["UnitTypeExternalTracker"] = unit_model.TypeExternalTracker
ctx.Data["UnitTypeProjects"] = unit_model.TypeProjects
ctx.Data["UnitTypePackages"] = unit_model.TypePackages
ctx.Data["UnitTypePolls"] = unit_model.TypePolls
}
}

@ -1881,6 +1881,7 @@ settings.pulls.allow_rebase_update = Enable updating pull request branch by reba
settings.pulls.default_delete_branch_after_merge = Delete pull request branch after merge by default
settings.packages_desc = Enable Repository Packages Registry
settings.projects_desc = Enable Repository Projects
settings.polls_desc = Enable Repository Polls
settings.admin_settings = Administrator Settings
settings.admin_enable_health_check = Enable Repository Health Checks (git fsck)
settings.admin_code_indexer = Code Indexer

@ -1820,7 +1820,9 @@ settings.pulls.allow_manual_merge=Activer le marquage des demandes d'ajout comme
settings.pulls.enable_autodetect_manual_merge=Activer la détection automatique de la fusion manuelle (Remarque : dans certains cas particuliers, des erreurs de détection peuvent se produire)
settings.pulls.allow_rebase_update=Activer la mise à jour de demande d'ajout par rebase
settings.pulls.default_delete_branch_after_merge=Supprimer la branche après la fusion par default
settings.projects_desc=Activer les projets de dépôt
settings.packages_desc=Activer les paquets du dépôt
settings.projects_desc=Activer les projets du dépôt
settings.polls_desc=Activer les scrutins du dépôt
settings.admin_settings=Paramètres administrateur
settings.admin_enable_health_check=Activer les vérifications de santé du dépôt (git fsck)
settings.admin_enable_close_issues_via_commit_in_any_branch=Fermer un ticket via une révision faite sur une branche non par défaut

@ -489,6 +489,15 @@ func SettingsPost(ctx *context.Context) {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypePackages)
}
if form.EnablePolls && !unit_model.TypePolls.UnitGlobalDisabled() {
units = append(units, repo_model.RepoUnit{
RepoID: repo.ID,
Type: unit_model.TypePolls,
})
} else if !unit_model.TypePolls.UnitGlobalDisabled() {
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypePolls)
}
if form.EnablePulls && !unit_model.TypePullRequests.UnitGlobalDisabled() {
units = append(units, repo_model.RepoUnit{
RepoID: repo.ID,

@ -145,6 +145,7 @@ type RepoSettingForm struct {
TrackerIssueStyle string
ExternalTrackerRegexpPattern string
EnableCloseIssuesViaCommitInAnyBranch bool
EnablePolls bool
EnableProjects bool
EnablePackages bool
EnablePulls bool

@ -211,8 +211,7 @@
</a>
{{end}}
{{/* TODO: make a permission for reading polls and use it here */}}
{{ if (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) }}
{{ if .Permission.CanRead $.UnitTypePolls }}
<a class="{{ if .PageIsPolls }}active{{ end }} item" href="{{ .RepoLink }}/polls">
{{svg "octicon-law" 16}} {{.locale.Tr "repo.polls"}}
</a>

@ -394,6 +394,19 @@
<div class="ui divider"></div>
{{$isPollsEnabled := .Repository.UnitEnabled $.UnitTypePolls}}
<div class="inline field">
<label>{{.locale.Tr "repo.polls"}}</label>
{{if .UnitTypePolls.UnitGlobalDisabled}}
<div class="ui checkbox tooltip disabled" data-content="{{.locale.Tr "repo.unit_disabled"}}">
{{else}}
<div class="ui checkbox">
{{end}}
<input class="enable-system" name="enable_polls" type="checkbox" {{if $isPollsEnabled}}checked{{end}}>
<label>{{.locale.Tr "repo.settings.polls_desc"}}</label>
</div>
</div>
{{$isProjectsEnabled := .Repository.UnitEnabled $.UnitTypeProjects}}
<div class="inline field">
<label>{{.locale.Tr "repo.project_board"}}</label>

Loading…
Cancel
Save