Added create issue
This commit is contained in:
		
							parent
							
								
									23d103c721
								
							
						
					
					
						commit
						2fa8d0c8dd
					
				
					 14 changed files with 34 additions and 52 deletions
				
			
		
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							|  | @ -19,7 +19,7 @@ import ( | ||||||
| // Test that go1.2 tag above is included in builds. main.go refers to this definition.
 | // Test that go1.2 tag above is included in builds. main.go refers to this definition.
 | ||||||
| const go12tag = true | const go12tag = true | ||||||
| 
 | 
 | ||||||
| const APP_VER = "0.1.7.0324" | const APP_VER = "0.1.7.0325" | ||||||
| 
 | 
 | ||||||
| func init() { | func init() { | ||||||
| 	base.AppVer = APP_VER | 	base.AppVer = APP_VER | ||||||
|  |  | ||||||
|  | @ -17,9 +17,8 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type CreateIssueForm struct { | type CreateIssueForm struct { | ||||||
| 	IssueName   string `form:"name" binding:"Required;MaxSize(50)"` | 	IssueName   string `form:"title" binding:"Required;MaxSize(50)"` | ||||||
| 	RepoId      int64  `form:"repoid" binding:"Required"` | 	MilestoneId int64  `form:"milestoneid"` | ||||||
| 	MilestoneId int64  `form:"milestoneid" binding:"Required"` |  | ||||||
| 	AssigneeId  int64  `form:"assigneeid"` | 	AssigneeId  int64  `form:"assigneeid"` | ||||||
| 	Labels      string `form:"labels"` | 	Labels      string `form:"labels"` | ||||||
| 	Content     string `form:"content"` | 	Content     string `form:"content"` | ||||||
|  | @ -27,9 +26,7 @@ type CreateIssueForm struct { | ||||||
| 
 | 
 | ||||||
| func (f *CreateIssueForm) Name(field string) string { | func (f *CreateIssueForm) Name(field string) string { | ||||||
| 	names := map[string]string{ | 	names := map[string]string{ | ||||||
| 		"IssueName":   "Issue name", | 		"IssueName": "Issue name", | ||||||
| 		"RepoId":      "Repository ID", |  | ||||||
| 		"MilestoneId": "Milestone ID", |  | ||||||
| 	} | 	} | ||||||
| 	return names[field] | 	return names[field] | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -30,8 +30,9 @@ import ( | ||||||
| 	"sync" | 	"sync" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"github.com/gogits/gogs/modules/log" |  | ||||||
| 	"github.com/nfnt/resize" | 	"github.com/nfnt/resize" | ||||||
|  | 
 | ||||||
|  | 	"github.com/gogits/gogs/modules/log" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
|  |  | ||||||
|  | @ -102,7 +102,10 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string | ||||||
| 
 | 
 | ||||||
| // AvatarLink returns avatar link by given e-mail.
 | // AvatarLink returns avatar link by given e-mail.
 | ||||||
| func AvatarLink(email string) string { | func AvatarLink(email string) string { | ||||||
| 	return "/avatar/" + EncodeMd5(email) | 	if Service.EnableCacheAvatar { | ||||||
|  | 		return "/avatar/" + EncodeMd5(email) | ||||||
|  | 	} | ||||||
|  | 	return "http://1.gravatar.com/avatar/" + EncodeMd5(email) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Seconds-based time units
 | // Seconds-based time units
 | ||||||
|  |  | ||||||
|  | @ -76,6 +76,11 @@ func RepoAssignment(redirect bool) martini.Handler { | ||||||
| 		ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName) | 		ctx.Repo.CloneLink.SSH = fmt.Sprintf("%s@%s:%s/%s.git", base.RunUser, base.Domain, user.LowerName, repo.LowerName) | ||||||
| 		ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s://%s/%s/%s.git", scheme, base.Domain, user.LowerName, repo.LowerName) | 		ctx.Repo.CloneLink.HTTPS = fmt.Sprintf("%s://%s/%s/%s.git", scheme, base.Domain, user.LowerName, repo.LowerName) | ||||||
| 
 | 
 | ||||||
|  | 		if len(params["branchname"]) == 0 { | ||||||
|  | 			params["branchname"] = "master" | ||||||
|  | 		} | ||||||
|  | 		ctx.Data["Branchname"] = params["branchname"] | ||||||
|  | 
 | ||||||
| 		ctx.Data["IsRepositoryValid"] = true | 		ctx.Data["IsRepositoryValid"] = true | ||||||
| 		ctx.Data["Repository"] = repo | 		ctx.Data["Repository"] = repo | ||||||
| 		ctx.Data["Owner"] = user | 		ctx.Data["Owner"] = user | ||||||
|  |  | ||||||
|  | @ -26,11 +26,6 @@ func Branches(ctx *middleware.Context, params martini.Params) { | ||||||
| 
 | 
 | ||||||
| 	ctx.Data["Username"] = params["username"] | 	ctx.Data["Username"] = params["username"] | ||||||
| 	ctx.Data["Reponame"] = params["reponame"] | 	ctx.Data["Reponame"] = params["reponame"] | ||||||
| 
 |  | ||||||
| 	if len(params["branchname"]) == 0 { |  | ||||||
| 		params["branchname"] = "master" |  | ||||||
| 	} |  | ||||||
| 	ctx.Data["Branchname"] = params["branchname"] |  | ||||||
| 	ctx.Data["Branches"] = brs | 	ctx.Data["Branches"] = brs | ||||||
| 	ctx.Data["IsRepoToolbarBranches"] = true | 	ctx.Data["IsRepoToolbarBranches"] = true | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -30,12 +30,7 @@ func Issues(ctx *middleware.Context, params martini.Params) { | ||||||
| 		ctx.Handle(200, "issue.Issues: %v", err) | 		ctx.Handle(200, "issue.Issues: %v", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 	ctx.HTML(200, "issue/list") | ||||||
| 	if len(params["branchname"]) == 0 { |  | ||||||
| 		params["branchname"] = "master" |  | ||||||
| 	} |  | ||||||
| 	ctx.Data["Branchname"] = params["branchname"] |  | ||||||
| 	ctx.HTML(200, "issue/repo") |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.CreateIssueForm) { | func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.CreateIssueForm) { | ||||||
|  | @ -57,10 +52,10 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	issue, err := models.CreateIssue(ctx.User.Id, form.RepoId, form.MilestoneId, form.AssigneeId, | 	issue, err := models.CreateIssue(ctx.User.Id, ctx.Repo.Repository.Id, form.MilestoneId, form.AssigneeId, | ||||||
| 		form.IssueName, form.Labels, form.Content, false) | 		form.IssueName, form.Labels, form.Content, false) | ||||||
| 	if err == nil { | 	if err == nil { | ||||||
| 		log.Trace("%s Issue created: %d", form.RepoId, issue.Id) | 		log.Trace("%d Issue created: %d", ctx.Repo.Repository.Id, issue.Id) | ||||||
| 		ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index)) | 		ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index)) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -12,10 +12,5 @@ import ( | ||||||
| 
 | 
 | ||||||
| func Pulls(ctx *middleware.Context, params martini.Params) { | func Pulls(ctx *middleware.Context, params martini.Params) { | ||||||
| 	ctx.Data["IsRepoToolbarPulls"] = true | 	ctx.Data["IsRepoToolbarPulls"] = true | ||||||
| 	if len(params["branchname"]) == 0 { |  | ||||||
| 		params["branchname"] = "master" |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	ctx.Data["Branchname"] = params["branchname"] |  | ||||||
| 	ctx.HTML(200, "repo/pulls") | 	ctx.HTML(200, "repo/pulls") | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -57,10 +57,6 @@ func Single(ctx *middleware.Context, params martini.Params) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if len(params["branchname"]) == 0 { |  | ||||||
| 		params["branchname"] = "master" |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Get tree path
 | 	// Get tree path
 | ||||||
| 	treename := params["_1"] | 	treename := params["_1"] | ||||||
| 
 | 
 | ||||||
|  | @ -177,7 +173,6 @@ func Single(ctx *middleware.Context, params martini.Params) { | ||||||
| 
 | 
 | ||||||
| 	ctx.Data["Username"] = params["username"] | 	ctx.Data["Username"] = params["username"] | ||||||
| 	ctx.Data["Reponame"] = params["reponame"] | 	ctx.Data["Reponame"] = params["reponame"] | ||||||
| 	ctx.Data["Branchname"] = params["branchname"] |  | ||||||
| 
 | 
 | ||||||
| 	var treenames []string | 	var treenames []string | ||||||
| 	Paths := make([]string, 0) | 	Paths := make([]string, 0) | ||||||
|  | @ -216,10 +211,6 @@ func SingleDownload(ctx *middleware.Context, params martini.Params) { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if len(params["branchname"]) == 0 { |  | ||||||
| 		params["branchname"] = "master" |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Get tree path
 | 	// Get tree path
 | ||||||
| 	treename := params["_1"] | 	treename := params["_1"] | ||||||
| 
 | 
 | ||||||
|  | @ -290,11 +281,6 @@ func Setting(ctx *middleware.Context, params martini.Params) { | ||||||
| 		title = t | 		title = t | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if len(params["branchname"]) == 0 { |  | ||||||
| 		params["branchname"] = "master" |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	ctx.Data["Branchname"] = params["branchname"] |  | ||||||
| 	ctx.Data["Title"] = title + " - settings" | 	ctx.Data["Title"] = title + " - settings" | ||||||
| 	ctx.HTML(200, "repo/setting") | 	ctx.HTML(200, "repo/setting") | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										5
									
								
								serve.go
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								serve.go
									
									
									
									
									
								
							|  | @ -249,8 +249,8 @@ func runServ(k *cli.Context) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if refname == "" { | 	if refname == "" { | ||||||
| 		println("No find any reference name:", b.String()) | 		println("Not found any reference name:", b.String()) | ||||||
| 		log.Error("No find any reference name: " + b.String()) | 		log.Error("Not found any reference name: " + b.String()) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -267,7 +267,6 @@ func runServ(k *cli.Context) { | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		if ref, ok = refs[refname]; !ok { | 		if ref, ok = refs[refname]; !ok { | ||||||
| 			log.Error("unknow reference name -", refname, "-", b.String()) |  | ||||||
| 			log.Error("unknow reference name -", refname, "-", b.String()) | 			log.Error("unknow reference name -", refname, "-", b.String()) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -4,13 +4,14 @@ | ||||||
| {{template "repo/toolbar" .}} | {{template "repo/toolbar" .}} | ||||||
| <div id="body" class="container"> | <div id="body" class="container"> | ||||||
|     <div id="issue"> |     <div id="issue"> | ||||||
|         <form class="form" action="#" method="post" id="issue-create-form"> |         <form class="form" action="/{{.RepositoryLink}}/issues/new" method="post" id="issue-create-form"> | ||||||
|  |             {{.CsrfTokenHtml}} | ||||||
|             <div class="col-md-1"> |             <div class="col-md-1"> | ||||||
|                 <img class="avatar" src="http://tp2.sinaimg.cn/5068084885/50/40050297589/1" alt=""/> |                 <img class="avatar" src="{{.SignedUser.AvatarLink}}" alt=""/> | ||||||
|             </div> |             </div> | ||||||
|             <div class="col-md-8 panel panel-default"> |             <div class="col-md-8 panel panel-default"> | ||||||
|                 <div class="form-group panel-body"> |                 <div class="form-group panel-body"> | ||||||
|                     <input class="form-control input-lg" type="text" name="title" required="required" placeholder="Title"/> |                     <input class="form-control input-lg" type="text" name="title" required="required" placeholder="Title" value="{{.title}}" /> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="form-group panel-body"> |                 <div class="form-group panel-body"> | ||||||
|                     <div class="md-help pull-right"><!-- todo help link --> |                     <div class="md-help pull-right"><!-- todo help link --> | ||||||
|  | @ -23,7 +24,7 @@ | ||||||
|                     <div class="tab-content"> |                     <div class="tab-content"> | ||||||
|                         <div class="tab-pane" id="issue-textarea"> |                         <div class="tab-pane" id="issue-textarea"> | ||||||
|                             <div class="form-group"> |                             <div class="form-group"> | ||||||
|                                 <textarea class="form-control" name="content" id="issue-content" rows="10" placeholder="Write some content"></textarea> |                                 <textarea class="form-control" name="content" id="issue-content" rows="10" placeholder="Write some content">{{.content}}</textarea> | ||||||
|                             </div> |                             </div> | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="tab-pane" id="issue-preview">preview</div> |                         <div class="tab-pane" id="issue-preview">preview</div> | ||||||
|  |  | ||||||
|  | @ -18,6 +18,11 @@ | ||||||
|                     <a class="btn btn-default issue-close" href="#">Close 128</a> |                     <a class="btn btn-default issue-close" href="#">Close 128</a> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|  |             <div class="issues list-group"> | ||||||
|  |                 {{range .Issues}} | ||||||
|  |                 <div class="list-group-item issue-item" id="{{.Id}}"></div> | ||||||
|  |                 {{end}} | ||||||
|  |             </div> | ||||||
|             <div class="issues list-group"> |             <div class="issues list-group"> | ||||||
|                 <div class="list-group-item unread issue-item" id="issue-id"> |                 <div class="list-group-item unread issue-item" id="issue-id"> | ||||||
|                     <span class="number pull-right">#123</span> |                     <span class="number pull-right">#123</span> | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
|     <div class="container"> |     <div class="container"> | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
|             <div class="col-md-7"> |             <div class="col-md-7"> | ||||||
|                 <h3 class="name"><i class="fa fa-book fa-lg"></i><a href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a> / {{.Repository.Name}}</h3> |                 <h3 class="name"><i class="fa fa-book fa-lg"></i><a href="{{.Owner.HomeLink}}">{{.Owner.Name}}</a> / <a href="/{{.Owner.Name}}/{{.Repository.Name}}">{{.Repository.Name}}</a></h3> | ||||||
|                 <p class="desc">{{.Repository.Description}}{{if .Repository.Website}} <a href="{{.Repository.Website}}">{{.Repository.Website}}</a>{{end}}</p> |                 <p class="desc">{{.Repository.Description}}{{if .Repository.Website}} <a href="{{.Repository.Website}}">{{.Repository.Website}}</a>{{end}}</p> | ||||||
|             </div> |             </div> | ||||||
|             <div class="col-md-5 actions text-right clone-group-btn"> |             <div class="col-md-5 actions text-right clone-group-btn"> | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								web.go
									
									
									
									
									
								
							|  | @ -90,7 +90,7 @@ func runWeb(*cli.Context) { | ||||||
| 
 | 
 | ||||||
| 	// Routers.
 | 	// Routers.
 | ||||||
| 	m.Get("/", ignSignIn, routers.Home) | 	m.Get("/", ignSignIn, routers.Home) | ||||||
| 	m.Get("/install",routers.Install) | 	m.Get("/install", routers.Install) | ||||||
| 	m.Get("/issues", reqSignIn, user.Issues) | 	m.Get("/issues", reqSignIn, user.Issues) | ||||||
| 	m.Get("/pulls", reqSignIn, user.Pulls) | 	m.Get("/pulls", reqSignIn, user.Pulls) | ||||||
| 	m.Get("/stars", reqSignIn, user.Stars) | 	m.Get("/stars", reqSignIn, user.Stars) | ||||||
|  | @ -142,13 +142,13 @@ func runWeb(*cli.Context) { | ||||||
| 		r.Post("/settings", repo.SettingPost) | 		r.Post("/settings", repo.SettingPost) | ||||||
| 		r.Get("/settings", repo.Setting) | 		r.Get("/settings", repo.Setting) | ||||||
| 		r.Get("/action/:action", repo.Action) | 		r.Get("/action/:action", repo.Action) | ||||||
|  | 		r.Any("/issues/new", binding.BindIgnErr(auth.CreateIssueForm{}), repo.CreateIssue) | ||||||
|  | 		r.Post("/issues/:index", binding.BindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue) | ||||||
| 	}, reqSignIn, middleware.RepoAssignment(true)) | 	}, reqSignIn, middleware.RepoAssignment(true)) | ||||||
| 	m.Group("/:username/:reponame", func(r martini.Router) { | 	m.Group("/:username/:reponame", func(r martini.Router) { | ||||||
| 		r.Get("/commits/:branchname", repo.Commits) | 		r.Get("/commits/:branchname", repo.Commits) | ||||||
| 		r.Get("/issues", repo.Issues) | 		r.Get("/issues", repo.Issues) | ||||||
| 		r.Any("/issues/new", binding.BindIgnErr(auth.CreateIssueForm{}), repo.CreateIssue) |  | ||||||
| 		r.Get("/issues/:index", repo.ViewIssue) | 		r.Get("/issues/:index", repo.ViewIssue) | ||||||
| 		r.Post("/issues/:index", binding.BindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue) |  | ||||||
| 		r.Get("/pulls", repo.Pulls) | 		r.Get("/pulls", repo.Pulls) | ||||||
| 		r.Get("/branches", repo.Branches) | 		r.Get("/branches", repo.Branches) | ||||||
| 		r.Get("/src/:branchname", repo.Single) | 		r.Get("/src/:branchname", repo.Single) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue