mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	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>
This commit is contained in:
		@@ -99,7 +99,7 @@ const (
 | 
			
		||||
	// 28 merge pull request
 | 
			
		||||
	CommentTypeMergePull
 | 
			
		||||
	// 29 push to PR head branch
 | 
			
		||||
	CommentTypePullPush
 | 
			
		||||
	CommentTypePullRequestPush
 | 
			
		||||
	// 30 Project changed
 | 
			
		||||
	CommentTypeProject
 | 
			
		||||
	// 31 Project board changed
 | 
			
		||||
@@ -725,7 +725,7 @@ func (c *Comment) CodeCommentURL() string {
 | 
			
		||||
 | 
			
		||||
// LoadPushCommits Load push commits
 | 
			
		||||
func (c *Comment) LoadPushCommits(ctx context.Context) (err error) {
 | 
			
		||||
	if c.Content == "" || c.Commits != nil || c.Type != CommentTypePullPush {
 | 
			
		||||
	if c.Content == "" || c.Commits != nil || c.Type != CommentTypePullRequestPush {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -1325,7 +1325,7 @@ func CreatePushPullComment(ctx context.Context, pusher *user_model.User, pr *Pul
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ops := &CreateCommentOptions{
 | 
			
		||||
		Type: CommentTypePullPush,
 | 
			
		||||
		Type: CommentTypePullRequestPush,
 | 
			
		||||
		Doer: pusher,
 | 
			
		||||
		Repo: pr.BaseRepo,
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,8 @@ func init() {
 | 
			
		||||
	db.RegisterModel(new(Setting))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetSettings returns specific settings from user
 | 
			
		||||
func GetSettings(uid int64, keys []string) (map[string]*Setting, error) {
 | 
			
		||||
// GetUserSettings returns specific settings from user
 | 
			
		||||
func GetUserSettings(uid int64, keys []string) (map[string]*Setting, error) {
 | 
			
		||||
	settings := make([]*Setting, 0, len(keys))
 | 
			
		||||
	if err := db.GetEngine(db.DefaultContext).
 | 
			
		||||
		Where("user_id=?", uid).
 | 
			
		||||
@@ -62,21 +62,53 @@ func GetUserAllSettings(uid int64) (map[string]*Setting, error) {
 | 
			
		||||
	return settingsMap, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteSetting deletes a specific setting for a user
 | 
			
		||||
func DeleteSetting(setting *Setting) error {
 | 
			
		||||
	_, err := db.GetEngine(db.DefaultContext).Delete(setting)
 | 
			
		||||
func validateUserSettingKey(key string) error {
 | 
			
		||||
	if len(key) == 0 {
 | 
			
		||||
		return fmt.Errorf("setting key must be set")
 | 
			
		||||
	}
 | 
			
		||||
	if strings.ToLower(key) != key {
 | 
			
		||||
		return fmt.Errorf("setting key should be lowercase")
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetUserSetting gets a specific setting for a user
 | 
			
		||||
func GetUserSetting(userID int64, key string, def ...string) (string, error) {
 | 
			
		||||
	if err := validateUserSettingKey(key); err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	setting := &Setting{UserID: userID, SettingKey: key}
 | 
			
		||||
	has, err := db.GetEngine(db.DefaultContext).Get(setting)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	if !has {
 | 
			
		||||
		if len(def) == 1 {
 | 
			
		||||
			return def[0], nil
 | 
			
		||||
		}
 | 
			
		||||
		return "", nil
 | 
			
		||||
	}
 | 
			
		||||
	return setting.SettingValue, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteUserSetting deletes a specific setting for a user
 | 
			
		||||
func DeleteUserSetting(userID int64, key string) error {
 | 
			
		||||
	if err := validateUserSettingKey(key); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	_, err := db.GetEngine(db.DefaultContext).Delete(&Setting{UserID: userID, SettingKey: key})
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetSetting updates a users' setting for a specific key
 | 
			
		||||
func SetSetting(setting *Setting) error {
 | 
			
		||||
	if strings.ToLower(setting.SettingKey) != setting.SettingKey {
 | 
			
		||||
		return fmt.Errorf("setting key should be lowercase")
 | 
			
		||||
// SetUserSetting updates a users' setting for a specific key
 | 
			
		||||
func SetUserSetting(userID int64, key, value string) error {
 | 
			
		||||
	if err := validateUserSettingKey(key); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return upsertSettingValue(setting.UserID, setting.SettingKey, setting.SettingValue)
 | 
			
		||||
	return upsertUserSettingValue(userID, key, value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func upsertSettingValue(userID int64, key, value string) error {
 | 
			
		||||
func upsertUserSettingValue(userID int64, key, value string) error {
 | 
			
		||||
	return db.WithTx(func(ctx context.Context) error {
 | 
			
		||||
		e := db.GetEngine(ctx)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								models/user/setting_keys.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								models/user/setting_keys.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
// 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 user
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// SettingsKeyHiddenCommentTypes is the settings key for hidden comment types
 | 
			
		||||
	SettingsKeyHiddenCommentTypes = "issue.hidden_comment_types"
 | 
			
		||||
)
 | 
			
		||||
@@ -19,21 +19,29 @@ func TestSettings(t *testing.T) {
 | 
			
		||||
	newSetting := &Setting{UserID: 99, SettingKey: keyName, SettingValue: "Gitea User Setting Test"}
 | 
			
		||||
 | 
			
		||||
	// create setting
 | 
			
		||||
	err := SetSetting(newSetting)
 | 
			
		||||
	err := SetUserSetting(newSetting.UserID, newSetting.SettingKey, newSetting.SettingValue)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	// test about saving unchanged values
 | 
			
		||||
	err = SetSetting(newSetting)
 | 
			
		||||
	err = SetUserSetting(newSetting.UserID, newSetting.SettingKey, newSetting.SettingValue)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	// get specific setting
 | 
			
		||||
	settings, err := GetSettings(99, []string{keyName})
 | 
			
		||||
	settings, err := GetUserSettings(99, []string{keyName})
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	assert.Len(t, settings, 1)
 | 
			
		||||
	assert.EqualValues(t, newSetting.SettingValue, settings[keyName].SettingValue)
 | 
			
		||||
 | 
			
		||||
	settingValue, err := GetUserSetting(99, keyName)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	assert.EqualValues(t, newSetting.SettingValue, settingValue)
 | 
			
		||||
 | 
			
		||||
	settingValue, err = GetUserSetting(99, "no_such")
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	assert.EqualValues(t, "", settingValue)
 | 
			
		||||
 | 
			
		||||
	// updated setting
 | 
			
		||||
	updatedSetting := &Setting{UserID: 99, SettingKey: keyName, SettingValue: "Updated"}
 | 
			
		||||
	err = SetSetting(updatedSetting)
 | 
			
		||||
	err = SetUserSetting(updatedSetting.UserID, updatedSetting.SettingKey, updatedSetting.SettingValue)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	// get all settings
 | 
			
		||||
@@ -43,7 +51,7 @@ func TestSettings(t *testing.T) {
 | 
			
		||||
	assert.EqualValues(t, updatedSetting.SettingValue, settings[updatedSetting.SettingKey].SettingValue)
 | 
			
		||||
 | 
			
		||||
	// delete setting
 | 
			
		||||
	err = DeleteSetting(&Setting{UserID: 99, SettingKey: keyName})
 | 
			
		||||
	err = DeleteUserSetting(99, keyName)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	settings, err = GetUserAllSettings(99)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user