aboutsummaryrefslogtreecommitdiffstats
path: root/services/forms
diff options
context:
space:
mode:
authorqwerty287 <80460567+qwerty287@users.noreply.github.com>2022-01-21 18:59:26 +0100
committerGitHub <noreply@github.com>2022-01-21 18:59:26 +0100
commit1f40933d38b58b60938a77cbea1c847fc8f8c3e5 (patch)
treef817b372123ab31dbbfa54a39087b6e5560eee8e /services/forms
parent108f1aab5cc4e667288a507acadb53a7b6ea4dbe (diff)
downloadgitea-1f40933d38b58b60938a77cbea1c847fc8f8c3e5.tar.gz
gitea-1f40933d38b58b60938a77cbea1c847fc8f8c3e5.zip
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 <williamzijl7@hotmail.com> * check len == 0 Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: Gusted <williamzijl7@hotmail.com> Co-authored-by: 6543 <6543@obermui.de>
Diffstat (limited to 'services/forms')
-rw-r--r--services/forms/user_form_hidden_comments.go105
1 files changed, 105 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 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
+}