2016-08-26 21:23:21 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2016-11-24 10:04:31 +03:00
2016-08-26 21:23:21 +03:00
package repo
import (
"time"
2016-11-11 12:39:44 +03:00
api "code.gitea.io/sdk/gitea"
2016-08-26 21:23:21 +03:00
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
2016-08-26 21:23:21 +03:00
)
2016-11-24 10:04:31 +03:00
// ListIssueComments list all the comments of an issue
2016-08-26 21:23:21 +03:00
func ListIssueComments ( ctx * context . APIContext ) {
var since time . Time
2016-08-26 23:40:53 +03:00
if len ( ctx . Query ( "since" ) ) > 0 {
since , _ = time . Parse ( time . RFC3339 , ctx . Query ( "since" ) )
}
2016-08-26 21:23:21 +03:00
2016-08-26 23:40:53 +03:00
// comments,err:=models.GetCommentsByIssueIDSince(, since)
issue , err := models . GetRawIssueByIndex ( ctx . Repo . Repository . ID , ctx . ParamsInt64 ( ":index" ) )
2016-08-26 21:23:21 +03:00
if err != nil {
2016-08-26 23:40:53 +03:00
ctx . Error ( 500 , "GetRawIssueByIndex" , err )
2016-08-26 21:23:21 +03:00
return
}
2017-06-21 04:00:44 +03:00
comments , err := models . FindComments ( models . FindCommentsOptions {
IssueID : issue . ID ,
Since : since . Unix ( ) ,
Type : models . CommentTypeComment ,
} )
2016-08-26 23:40:53 +03:00
if err != nil {
ctx . Error ( 500 , "GetCommentsByIssueIDSince" , err )
return
2016-08-26 21:23:21 +03:00
}
2016-08-26 23:40:53 +03:00
apiComments := make ( [ ] * api . Comment , len ( comments ) )
for i := range comments {
apiComments [ i ] = comments [ i ] . APIFormat ( )
2016-08-26 21:23:21 +03:00
}
ctx . JSON ( 200 , & apiComments )
}
2016-12-22 11:29:26 +03:00
// ListRepoIssueComments returns all issue-comments for an issue
func ListRepoIssueComments ( ctx * context . APIContext ) {
var since time . Time
if len ( ctx . Query ( "since" ) ) > 0 {
since , _ = time . Parse ( time . RFC3339 , ctx . Query ( "since" ) )
}
2017-06-21 04:00:44 +03:00
comments , err := models . FindComments ( models . FindCommentsOptions {
RepoID : ctx . Repo . Repository . ID ,
Since : since . Unix ( ) ,
Type : models . CommentTypeComment ,
} )
2016-12-22 11:29:26 +03:00
if err != nil {
ctx . Error ( 500 , "GetCommentsByRepoIDSince" , err )
return
}
apiComments := make ( [ ] * api . Comment , len ( comments ) )
for i := range comments {
apiComments [ i ] = comments [ i ] . APIFormat ( )
}
ctx . JSON ( 200 , & apiComments )
}
2016-11-24 10:04:31 +03:00
// CreateIssueComment create a comment for an issue
2016-08-26 21:23:21 +03:00
func CreateIssueComment ( ctx * context . APIContext , form api . CreateIssueCommentOption ) {
issue , err := models . GetIssueByIndex ( ctx . Repo . Repository . ID , ctx . ParamsInt64 ( ":index" ) )
if err != nil {
2016-08-26 23:40:53 +03:00
ctx . Error ( 500 , "GetIssueByIndex" , err )
2016-08-26 21:23:21 +03:00
return
}
2016-08-26 23:40:53 +03:00
comment , err := models . CreateIssueComment ( ctx . User , ctx . Repo . Repository , issue , form . Body , nil )
2016-08-26 21:23:21 +03:00
if err != nil {
2016-08-26 23:40:53 +03:00
ctx . Error ( 500 , "CreateIssueComment" , err )
2016-08-26 21:23:21 +03:00
return
}
ctx . JSON ( 201 , comment . APIFormat ( ) )
}
2016-11-24 10:04:31 +03:00
// EditIssueComment modify a comment of an issue
2016-08-26 21:23:21 +03:00
func EditIssueComment ( ctx * context . APIContext , form api . EditIssueCommentOption ) {
comment , err := models . GetCommentByID ( ctx . ParamsInt64 ( ":id" ) )
if err != nil {
if models . IsErrCommentNotExist ( err ) {
ctx . Error ( 404 , "GetCommentByID" , err )
} else {
2016-08-26 23:40:53 +03:00
ctx . Error ( 500 , "GetCommentByID" , err )
2016-08-26 21:23:21 +03:00
}
return
}
if ! ctx . IsSigned || ( ctx . User . ID != comment . PosterID && ! ctx . Repo . IsAdmin ( ) ) {
2016-08-26 23:40:53 +03:00
ctx . Status ( 403 )
2016-08-26 21:23:21 +03:00
return
2016-11-07 19:30:04 +03:00
} else if comment . Type != models . CommentTypeComment {
2016-08-26 23:40:53 +03:00
ctx . Status ( 204 )
2016-08-26 21:23:21 +03:00
return
}
comment . Content = form . Body
if err := models . UpdateComment ( comment ) ; err != nil {
2016-08-26 23:40:53 +03:00
ctx . Error ( 500 , "UpdateComment" , err )
2016-08-26 21:23:21 +03:00
return
}
ctx . JSON ( 200 , comment . APIFormat ( ) )
}
2016-12-22 11:29:26 +03:00
// DeleteIssueComment delete a comment from an issue
func DeleteIssueComment ( ctx * context . APIContext ) {
comment , err := models . GetCommentByID ( ctx . ParamsInt64 ( ":id" ) )
if err != nil {
if models . IsErrCommentNotExist ( err ) {
ctx . Error ( 404 , "GetCommentByID" , err )
} else {
ctx . Error ( 500 , "GetCommentByID" , err )
}
return
}
if ! ctx . IsSigned || ( ctx . User . ID != comment . PosterID && ! ctx . Repo . IsAdmin ( ) ) {
ctx . Status ( 403 )
return
} else if comment . Type != models . CommentTypeComment {
ctx . Status ( 204 )
return
}
2017-01-25 05:43:02 +03:00
if err = models . DeleteComment ( comment ) ; err != nil {
2016-12-22 11:29:26 +03:00
ctx . Error ( 500 , "DeleteCommentByID" , err )
return
}
ctx . Status ( 204 )
}