2014-03-22 21:50:50 +04:00
// Copyright 2014 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.
package repo
import (
2014-03-23 00:00:46 +04:00
"fmt"
2014-03-22 21:50:50 +04:00
"github.com/codegangsta/martini"
"github.com/gogits/gogs/models"
2014-03-23 00:00:46 +04:00
"github.com/gogits/gogs/modules/auth"
2014-03-22 21:50:50 +04:00
"github.com/gogits/gogs/modules/base"
2014-03-23 00:00:46 +04:00
"github.com/gogits/gogs/modules/log"
2014-03-22 21:50:50 +04:00
"github.com/gogits/gogs/modules/middleware"
)
func Issues ( ctx * middleware . Context , params martini . Params ) {
2014-03-23 00:00:46 +04:00
ctx . Data [ "Title" ] = "Issues"
2014-03-22 21:50:50 +04:00
ctx . Data [ "IsRepoToolbarIssues" ] = true
milestoneId , _ := base . StrTo ( params [ "milestone" ] ) . Int ( )
page , _ := base . StrTo ( params [ "page" ] ) . Int ( )
var err error
ctx . Data [ "Issues" ] , err = models . GetIssues ( 0 , ctx . Repo . Repository . Id , 0 ,
int64 ( milestoneId ) , page , params [ "state" ] == "closed" , false , params [ "labels" ] , params [ "sortType" ] )
if err != nil {
ctx . Handle ( 200 , "issue.Issues: %v" , err )
return
}
2014-03-23 20:16:17 +04:00
if len ( params [ "branchname" ] ) == 0 {
params [ "branchname" ] = "master"
}
ctx . Data [ "Branchname" ] = params [ "branchname" ]
2014-03-22 21:50:50 +04:00
ctx . HTML ( 200 , "repo/issues" )
}
2014-03-22 22:27:03 +04:00
2014-03-23 00:00:46 +04:00
func CreateIssue ( ctx * middleware . Context , params martini . Params , form auth . CreateIssueForm ) {
2014-03-22 22:27:03 +04:00
if ! ctx . Repo . IsOwner {
2014-03-23 09:12:55 +04:00
ctx . Handle ( 404 , "issue.CreateIssue" , nil )
2014-03-22 22:27:03 +04:00
return
}
2014-03-23 00:00:46 +04:00
ctx . Data [ "Title" ] = "Create issue"
if ctx . Req . Method == "GET" {
ctx . HTML ( 200 , "issue/create" )
return
}
if ctx . HasError ( ) {
ctx . HTML ( 200 , "issue/create" )
return
}
issue , err := models . CreateIssue ( ctx . User . Id , form . RepoId , form . MilestoneId , form . AssigneeId ,
form . IssueName , form . Labels , form . Content , false )
if err == nil {
log . Trace ( "%s Issue created: %d" , form . RepoId , issue . Id )
2014-03-23 01:59:22 +04:00
ctx . Redirect ( fmt . Sprintf ( "/%s/%s/issues/%d" , params [ "username" ] , params [ "reponame" ] , issue . Index ) )
2014-03-23 00:00:46 +04:00
return
}
ctx . Handle ( 200 , "issue.CreateIssue" , err )
}
func ViewIssue ( ctx * middleware . Context , params martini . Params ) {
2014-03-24 03:09:11 +04:00
index , err := base . StrTo ( params [ "index" ] ) . Int ( )
2014-03-23 00:00:46 +04:00
if err != nil {
2014-03-23 09:12:55 +04:00
ctx . Handle ( 404 , "issue.ViewIssue" , err )
2014-03-23 00:00:46 +04:00
return
}
2014-03-24 03:09:11 +04:00
issue , err := models . GetIssueByIndex ( ctx . Repo . Repository . Id , int64 ( index ) )
2014-03-23 00:00:46 +04:00
if err != nil {
if err == models . ErrIssueNotExist {
2014-03-23 09:12:55 +04:00
ctx . Handle ( 404 , "issue.ViewIssue" , err )
2014-03-23 00:00:46 +04:00
} else {
ctx . Handle ( 200 , "issue.ViewIssue" , err )
}
return
}
ctx . Data [ "Title" ] = issue . Name
ctx . Data [ "Issue" ] = issue
ctx . HTML ( 200 , "issue/view" )
2014-03-22 22:27:03 +04:00
}
2014-03-24 03:09:11 +04:00
func UpdateIssue ( ctx * middleware . Context , params martini . Params , form auth . CreateIssueForm ) {
if ! ctx . Repo . IsOwner {
ctx . Handle ( 404 , "issue.UpdateIssue" , nil )
return
}
index , err := base . StrTo ( params [ "index" ] ) . Int ( )
if err != nil {
ctx . Handle ( 404 , "issue.UpdateIssue" , err )
return
}
issue , err := models . GetIssueByIndex ( ctx . Repo . Repository . Id , int64 ( index ) )
if err != nil {
if err == models . ErrIssueNotExist {
ctx . Handle ( 404 , "issue.UpdateIssue" , err )
} else {
ctx . Handle ( 200 , "issue.UpdateIssue" , err )
}
return
}
issue . Name = form . IssueName
issue . MilestoneId = form . MilestoneId
issue . AssigneeId = form . AssigneeId
issue . Labels = form . Labels
issue . Content = form . Content
if err = models . UpdateIssue ( issue ) ; err != nil {
ctx . Handle ( 200 , "issue.UpdateIssue" , err )
return
}
ctx . Data [ "Title" ] = issue . Name
ctx . Data [ "Issue" ] = issue
}