From 1f40933d38b58b60938a77cbea1c847fc8f8c3e5 Mon Sep 17 00:00:00 2001 From: qwerty287 <80460567+qwerty287@users.noreply.github.com> Date: Fri, 21 Jan 2022 18:59:26 +0100 Subject: Add config options to hide issue events (#17414) * Add config option to hide issue events Adds a config option `HIDE_ISSUE_EVENTS` to hide most issue events (changed labels, milestones, projects...) on the issue detail page. If this is true, only the following events (comment types) are shown: * plain comments * closed/reopned/merged * reviews * Make configurable using a list * Add docs * Add missing newline * Fix merge issues * Allow changes per user settings * Fix lint * Rm old docs * Apply suggestions from code review * Use bitsets * Rm comment * fmt * Fix lint * Use variable/constant to provide key * fmt * fix lint * refactor * Add a prefix for user setting key * Add license comment * Add license comment * Update services/forms/user_form_hidden_comments.go Co-authored-by: Gusted * check len == 0 Co-authored-by: wxiaoguang Co-authored-by: zeripath Co-authored-by: Gusted Co-authored-by: 6543 <6543@obermui.de> --- services/forms/user_form_hidden_comments.go | 105 ++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 services/forms/user_form_hidden_comments.go (limited to 'services/forms') diff --git a/services/forms/user_form_hidden_comments.go b/services/forms/user_form_hidden_comments.go new file mode 100644 index 0000000000..e0c26e8ddf --- /dev/null +++ b/services/forms/user_form_hidden_comments.go @@ -0,0 +1,105 @@ +// Copyright 2021 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package forms + +import ( + "math/big" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/log" +) + +type hiddenCommentTypeGroupsType map[string][]models.CommentType + +// hiddenCommentTypeGroups maps the group names to comment types, these group names comes from the Web UI (appearance.tmpl) +var hiddenCommentTypeGroups = hiddenCommentTypeGroupsType{ + "reference": { + /*3*/ models.CommentTypeIssueRef, + /*4*/ models.CommentTypeCommitRef, + /*5*/ models.CommentTypeCommentRef, + /*6*/ models.CommentTypePullRef, + }, + "label": { + /*7*/ models.CommentTypeLabel, + }, + "milestone": { + /*8*/ models.CommentTypeMilestone, + }, + "assignee": { + /*9*/ models.CommentTypeAssignees, + }, + "title": { + /*10*/ models.CommentTypeChangeTitle, + }, + "branch": { + /*11*/ models.CommentTypeDeleteBranch, + /*25*/ models.CommentTypeChangeTargetBranch, + }, + "time_tracking": { + /*12*/ models.CommentTypeStartTracking, + /*13*/ models.CommentTypeStopTracking, + /*14*/ models.CommentTypeAddTimeManual, + /*15*/ models.CommentTypeCancelTracking, + /*26*/ models.CommentTypeDeleteTimeManual, + }, + "deadline": { + /*16*/ models.CommentTypeAddedDeadline, + /*17*/ models.CommentTypeModifiedDeadline, + /*18*/ models.CommentTypeRemovedDeadline, + }, + "dependency": { + /*19*/ models.CommentTypeAddDependency, + /*20*/ models.CommentTypeRemoveDependency, + }, + "lock": { + /*23*/ models.CommentTypeLock, + /*24*/ models.CommentTypeUnlock, + }, + "review_request": { + /*27*/ models.CommentTypeReviewRequest, + }, + "pull_request_push": { + /*29*/ models.CommentTypePullRequestPush, + }, + "project": { + /*30*/ models.CommentTypeProject, + /*31*/ models.CommentTypeProjectBoard, + }, + "issue_ref": { + /*33*/ models.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 + } + if hiddenCommentTypes == nil { + return false + } + for _, commentType := range commentTypes { + if hiddenCommentTypes.Bit(int(commentType)) == 1 { + return true + } + } + return false +} -- cgit v1.2.3