2019-02-18 23:55:04 +03:00
// Copyright 2019 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 models
2021-11-24 12:49:20 +03:00
import (
"code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user"
)
2021-09-19 14:49:59 +03:00
2019-02-18 23:55:04 +03:00
// IssueLockOptions defines options for locking and/or unlocking an issue/PR
type IssueLockOptions struct {
2021-11-24 12:49:20 +03:00
Doer * user_model . User
2019-02-18 23:55:04 +03:00
Issue * Issue
Reason string
}
// LockIssue locks an issue. This would limit commenting abilities to
// users with write access to the repo
func LockIssue ( opts * IssueLockOptions ) error {
return updateIssueLock ( opts , true )
}
// UnlockIssue unlocks a previously locked issue.
func UnlockIssue ( opts * IssueLockOptions ) error {
return updateIssueLock ( opts , false )
}
func updateIssueLock ( opts * IssueLockOptions , lock bool ) error {
if opts . Issue . IsLocked == lock {
return nil
}
opts . Issue . IsLocked = lock
var commentType CommentType
if opts . Issue . IsLocked {
commentType = CommentTypeLock
} else {
commentType = CommentTypeUnlock
}
2021-11-19 16:39:57 +03:00
ctx , committer , err := db . TxContext ( )
if err != nil {
2019-10-11 09:44:43 +03:00
return err
}
2021-11-19 16:39:57 +03:00
defer committer . Close ( )
2019-10-11 09:44:43 +03:00
2021-11-19 16:39:57 +03:00
if err := updateIssueCols ( db . GetEngine ( ctx ) , opts . Issue , "is_locked" ) ; err != nil {
2019-02-18 23:55:04 +03:00
return err
}
2021-03-14 21:52:12 +03:00
opt := & CreateCommentOptions {
2019-02-18 23:55:04 +03:00
Doer : opts . Doer ,
Issue : opts . Issue ,
Repo : opts . Issue . Repo ,
Type : commentType ,
Content : opts . Reason ,
2019-12-01 05:44:39 +03:00
}
2021-11-19 16:39:57 +03:00
if _ , err := createComment ( ctx , opt ) ; err != nil {
2019-12-01 05:44:39 +03:00
return err
}
2021-11-19 16:39:57 +03:00
return committer . Commit ( )
2019-02-18 23:55:04 +03:00
}