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-09-19 14:49:59 +03:00
import "code.gitea.io/gitea/models/db"
2019-02-18 23:55:04 +03:00
// IssueLockOptions defines options for locking and/or unlocking an issue/PR
type IssueLockOptions struct {
Doer * User
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-09-23 18:45:36 +03:00
sess := db . NewSession ( db . DefaultContext )
2019-10-11 09:44:43 +03:00
defer sess . Close ( )
if err := sess . Begin ( ) ; err != nil {
return err
}
if err := updateIssueCols ( sess , 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
}
2019-12-16 06:54:24 +03:00
if _ , err := createComment ( sess , opt ) ; err != nil {
2019-12-01 05:44:39 +03:00
return err
}
2019-10-11 09:44:43 +03:00
return sess . Commit ( )
2019-02-18 23:55:04 +03:00
}