2019-09-06 05:20:09 +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 comments
import (
2021-09-19 14:49:59 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2021-12-10 04:27:50 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2019-10-30 13:02:46 +03:00
"code.gitea.io/gitea/modules/notification"
2021-10-11 01:40:03 +03:00
"code.gitea.io/gitea/modules/timeutil"
2019-09-06 05:20:09 +03:00
)
2019-09-24 20:39:50 +03:00
// CreateIssueComment creates a plain issue comment.
2022-06-13 12:37:59 +03:00
func CreateIssueComment ( doer * user_model . User , repo * repo_model . Repository , issue * issues_model . Issue , content string , attachments [ ] string ) ( * issues_model . Comment , error ) {
comment , err := issues_model . CreateComment ( & issues_model . CreateCommentOptions {
Type : issues_model . CommentTypeComment ,
2019-09-24 20:39:50 +03:00
Doer : doer ,
Repo : repo ,
Issue : issue ,
Content : content ,
Attachments : attachments ,
} )
if err != nil {
return nil , err
}
2021-10-11 01:40:03 +03:00
2022-06-13 12:37:59 +03:00
mentions , err := issues_model . FindAndUpdateIssueMentions ( db . DefaultContext , issue , doer , comment . Content )
2021-01-02 20:04:02 +03:00
if err != nil {
return nil , err
}
2021-10-11 01:40:03 +03:00
2021-01-02 20:04:02 +03:00
notification . NotifyCreateIssueComment ( doer , repo , issue , comment , mentions )
2019-10-30 13:02:46 +03:00
2019-09-24 20:39:50 +03:00
return comment , nil
}
// UpdateComment updates information of comment.
2022-06-13 12:37:59 +03:00
func UpdateComment ( c * issues_model . Comment , doer * user_model . User , oldContent string ) error {
2022-01-20 20:46:10 +03:00
needsContentHistory := c . Content != oldContent &&
2022-06-13 12:37:59 +03:00
( c . Type == issues_model . CommentTypeComment || c . Type == issues_model . CommentTypeReview || c . Type == issues_model . CommentTypeCode )
2021-11-22 15:20:16 +03:00
if needsContentHistory {
2022-06-13 12:37:59 +03:00
hasContentHistory , err := issues_model . HasIssueContentHistory ( db . DefaultContext , c . IssueID , c . ID )
2021-11-22 15:20:16 +03:00
if err != nil {
return err
}
if ! hasContentHistory {
2022-06-13 12:37:59 +03:00
if err = issues_model . SaveIssueContentHistory ( db . DefaultContext , c . PosterID , c . IssueID , c . ID ,
2021-11-22 15:20:16 +03:00
c . CreatedUnix , oldContent , true ) ; err != nil {
return err
}
}
}
2022-06-13 12:37:59 +03:00
if err := issues_model . UpdateComment ( c , doer ) ; err != nil {
2019-09-24 20:39:50 +03:00
return err
}
2021-11-22 15:20:16 +03:00
if needsContentHistory {
2022-06-13 12:37:59 +03:00
err := issues_model . SaveIssueContentHistory ( db . DefaultContext , doer . ID , c . IssueID , c . ID , timeutil . TimeStampNow ( ) , c . Content , false )
2021-10-11 01:40:03 +03:00
if err != nil {
return err
}
}
2019-10-30 13:02:46 +03:00
notification . NotifyUpdateComment ( doer , c , oldContent )
2019-09-24 20:39:50 +03:00
return nil
}
// DeleteComment deletes the comment
2022-06-13 12:37:59 +03:00
func DeleteComment ( doer * user_model . User , comment * issues_model . Comment ) error {
2022-11-12 23:18:50 +03:00
ctx , committer , err := db . TxContext ( db . DefaultContext )
2022-06-13 12:37:59 +03:00
if err != nil {
return err
}
defer committer . Close ( )
if err := issues_model . DeleteComment ( ctx , comment ) ; err != nil {
return err
}
if err := committer . Commit ( ) ; err != nil {
2019-09-24 20:39:50 +03:00
return err
}
2019-10-30 13:02:46 +03:00
notification . NotifyDeleteComment ( doer , comment )
2019-09-24 20:39:50 +03:00
return nil
}