diff options
Diffstat (limited to 'services/forms/user_form_hidden_comments.go')
-rw-r--r-- | services/forms/user_form_hidden_comments.go | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/services/forms/user_form_hidden_comments.go b/services/forms/user_form_hidden_comments.go new file mode 100644 index 0000000..b9677c1 --- /dev/null +++ b/services/forms/user_form_hidden_comments.go @@ -0,0 +1,104 @@ +// Copyright 2021 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package forms + +import ( + "math/big" + + issues_model "code.gitea.io/gitea/models/issues" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/services/context" +) + +type hiddenCommentTypeGroupsType map[string][]issues_model.CommentType + +// hiddenCommentTypeGroups maps the group names to comment types, these group names comes from the Web UI (appearance.tmpl) +var hiddenCommentTypeGroups = hiddenCommentTypeGroupsType{ + "reference": { + /*3*/ issues_model.CommentTypeIssueRef, + /*4*/ issues_model.CommentTypeCommitRef, + /*5*/ issues_model.CommentTypeCommentRef, + /*6*/ issues_model.CommentTypePullRef, + }, + "label": { + /*7*/ issues_model.CommentTypeLabel, + }, + "milestone": { + /*8*/ issues_model.CommentTypeMilestone, + }, + "assignee": { + /*9*/ issues_model.CommentTypeAssignees, + }, + "title": { + /*10*/ issues_model.CommentTypeChangeTitle, + }, + "branch": { + /*11*/ issues_model.CommentTypeDeleteBranch, + /*25*/ issues_model.CommentTypeChangeTargetBranch, + }, + "time_tracking": { + /*12*/ issues_model.CommentTypeStartTracking, + /*13*/ issues_model.CommentTypeStopTracking, + /*14*/ issues_model.CommentTypeAddTimeManual, + /*15*/ issues_model.CommentTypeCancelTracking, + /*26*/ issues_model.CommentTypeDeleteTimeManual, + }, + "deadline": { + /*16*/ issues_model.CommentTypeAddedDeadline, + /*17*/ issues_model.CommentTypeModifiedDeadline, + /*18*/ issues_model.CommentTypeRemovedDeadline, + }, + "dependency": { + /*19*/ issues_model.CommentTypeAddDependency, + /*20*/ issues_model.CommentTypeRemoveDependency, + }, + "lock": { + /*23*/ issues_model.CommentTypeLock, + /*24*/ issues_model.CommentTypeUnlock, + }, + "review_request": { + /*27*/ issues_model.CommentTypeReviewRequest, + }, + "pull_request_push": { + /*29*/ issues_model.CommentTypePullRequestPush, + }, + "project": { + /*30*/ issues_model.CommentTypeProject, + /*31*/ issues_model.CommentTypeProjectColumn, + }, + "issue_ref": { + /*33*/ issues_model.CommentTypeChangeIssueRef, + }, +} + +// UserHiddenCommentTypesFromRequest parse the form to hidden comment types bitset +func UserHiddenCommentTypesFromRequest(ctx *context.Context) *big.Int { + bitset := new(big.Int) + for group, commentTypes := range hiddenCommentTypeGroups { + if ctx.FormBool(group) { + for _, commentType := range commentTypes { + bitset = bitset.SetBit(bitset, int(commentType), 1) + } + } + } + return bitset +} + +// IsUserHiddenCommentTypeGroupChecked check whether a hidden comment type group is "enabled" (checked on UI) +func IsUserHiddenCommentTypeGroupChecked(group string, hiddenCommentTypes *big.Int) (ret bool) { + commentTypes, ok := hiddenCommentTypeGroups[group] + if !ok { + log.Critical("the group map for hidden comment types is out of sync, unknown group: %v", group) + return false + } + if hiddenCommentTypes == nil { + return false + } + for _, commentType := range commentTypes { + if hiddenCommentTypes.Bit(int(commentType)) == 1 { + return true + } + } + return false +} |