2019-02-18 23:55:04 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-02-18 23:55:04 +03:00
2022-06-13 12:37:59 +03:00
package issues
2019-02-18 23:55:04 +03:00
2021-11-24 12:49:20 +03:00
import (
2023-10-11 07:24:07 +03:00
"context"
2021-11-24 12:49:20 +03:00
"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
2023-10-11 07:24:07 +03:00
func LockIssue ( ctx context . Context , opts * IssueLockOptions ) error {
return updateIssueLock ( ctx , opts , true )
2019-02-18 23:55:04 +03:00
}
// UnlockIssue unlocks a previously locked issue.
2023-10-11 07:24:07 +03:00
func UnlockIssue ( ctx context . Context , opts * IssueLockOptions ) error {
return updateIssueLock ( ctx , opts , false )
2019-02-18 23:55:04 +03:00
}
2023-10-11 07:24:07 +03:00
func updateIssueLock ( ctx context . Context , opts * IssueLockOptions , lock bool ) error {
2019-02-18 23:55:04 +03:00
if opts . Issue . IsLocked == lock {
return nil
}
opts . Issue . IsLocked = lock
var commentType CommentType
if opts . Issue . IsLocked {
commentType = CommentTypeLock
} else {
commentType = CommentTypeUnlock
}
2023-10-11 07:24:07 +03:00
ctx , committer , err := db . TxContext ( ctx )
2021-11-19 16:39:57 +03:00
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
2022-04-08 12:11:15 +03:00
if err := UpdateIssueCols ( 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
}
2022-12-10 05:46:31 +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
}