[Notice] Announcing the End of Demo Server [Read me]

apply URL change
@fbe22f1a82c32407c462725b867f018a5e58547f
--- app/controllers/IssueApp.java
+++ app/controllers/IssueApp.java
... | ... | @@ -47,13 +47,10 @@ |
47 | 47 |
* 이슈 해결 상태 |
48 | 48 |
* @return |
49 | 49 |
*/ |
50 |
- public static Result issues(String projectName, String stateType) { |
|
51 |
- Project project = Project.findByName(projectName); |
|
50 |
+ public static Result issues(String userName, String projectName, String stateType) { |
|
51 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
52 | 52 |
Form<SearchCondition> issueParamForm = new Form<SearchCondition>(SearchCondition.class); |
53 | 53 |
SearchCondition issueParam = issueParamForm.bindFromRequest().get(); |
54 |
- if (project == null) { |
|
55 |
- return notFound(); |
|
56 |
- } |
|
57 | 54 |
Page<Issue> issues = Issue.findIssues(project.name, issueParam.pageNum, |
58 | 55 |
StateType.getValue(stateType), issueParam.sortBy, |
59 | 56 |
Direction.getValue(issueParam.orderBy), issueParam.filter, issueParam.milestone, |
... | ... | @@ -61,11 +58,8 @@ |
61 | 58 |
return ok(issueList.render("title.issueList", issues, issueParam, project)); |
62 | 59 |
} |
63 | 60 |
|
64 |
- public static Result issue(String projectName, Long issueId) { |
|
65 |
- Project project = Project.findByName(projectName); |
|
66 |
- if (project == null) { |
|
67 |
- return notFound(); |
|
68 |
- } |
|
61 |
+ public static Result issue(String userName, String projectName, Long issueId) { |
|
62 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
69 | 63 |
Issue issueInfo = Issue.findById(issueId); |
70 | 64 |
if (issueInfo == null) { |
71 | 65 |
return ok(notExistingPage.render("title.post.notExistingPage", project)); |
... | ... | @@ -75,21 +69,14 @@ |
75 | 69 |
} |
76 | 70 |
} |
77 | 71 |
|
78 |
- public static Result newIssue(String projectName) { |
|
79 |
- Project project = Project.findByName(projectName); |
|
80 |
- if (project == null) { |
|
81 |
- return notFound(); |
|
82 |
- } |
|
72 |
+ public static Result newIssue(String userName, String projectName) { |
|
73 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
83 | 74 |
return ok(newIssue.render("title.newIssue", new Form<Issue>(Issue.class), project)); |
84 | 75 |
} |
85 | 76 |
|
86 |
- public static Result saveIssue(String projectName) { |
|
77 |
+ public static Result saveIssue(String userName, String projectName) { |
|
87 | 78 |
Form<Issue> issueForm = new Form<Issue>(Issue.class).bindFromRequest(); |
88 |
- Project project = Project.findByName(projectName); |
|
89 |
- |
|
90 |
- if (project == null) { |
|
91 |
- return notFound(); |
|
92 |
- } |
|
79 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
93 | 80 |
if (issueForm.hasErrors()) { |
94 | 81 |
return badRequest(newIssue.render(issueForm.errors().toString(), issueForm, project)); |
95 | 82 |
} else { |
... | ... | @@ -101,14 +88,13 @@ |
101 | 88 |
newIssue.filePath = saveFile(request()); |
102 | 89 |
Issue.create(newIssue); |
103 | 90 |
} |
104 |
- return redirect(routes.IssueApp.issues(project.name, StateType.ALL.stateType())); |
|
91 |
+ return redirect(routes.IssueApp.issues(project.owner, project.name, StateType.ALL.stateType())); |
|
105 | 92 |
} |
106 | 93 |
|
107 |
- public static Result editIssue(String projectName, Long id) { |
|
94 |
+ public static Result editIssue(String userName, String projectName, Long id) { |
|
108 | 95 |
Issue targetIssue = Issue.findById(id); |
109 | 96 |
Form<Issue> editForm = new Form<Issue>(Issue.class).fill(targetIssue); |
110 |
- Project project = Project.findByName(projectName); |
|
111 |
- |
|
97 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
112 | 98 |
if (UserApp.currentUser().id == targetIssue.reporterId |
113 | 99 |
|| RoleCheck.roleCheck(UserApp.currentUser().id, project.id, |
114 | 100 |
PermissionResource.PROJECT, |
... | ... | @@ -117,14 +103,13 @@ |
117 | 103 |
return ok(editIssue.render("title.editIssue", editForm, id, project)); |
118 | 104 |
} else { |
119 | 105 |
return ok(issueError.render("post.edit.rejectNotAuthor", |
120 |
- routes.IssueApp.issue(project.name, id), project)); |
|
106 |
+ routes.IssueApp.issue(project.owner, project.name, id), project)); |
|
121 | 107 |
} |
122 | 108 |
} |
123 | 109 |
|
124 |
- public static Result updateIssue(String projectName, Long id) { |
|
110 |
+ public static Result updateIssue(String userName, String projectName, Long id) { |
|
125 | 111 |
Form<Issue> issueForm = new Form<Issue>(Issue.class).bindFromRequest(); |
126 |
- Project projcet = Project.findByName(projectName); |
|
127 |
- |
|
112 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
128 | 113 |
if (issueForm.hasErrors()) { |
129 | 114 |
return badRequest(issueForm.errors().toString()); |
130 | 115 |
} else { |
... | ... | @@ -132,25 +117,22 @@ |
132 | 117 |
issue.reporterId = UserApp.currentUser().id; |
133 | 118 |
issue.id = id; |
134 | 119 |
issue.filePath = saveFile(request()); |
135 |
- issue.project = projcet; |
|
120 |
+ issue.project = project; |
|
136 | 121 |
Issue.edit(issue); |
137 | 122 |
} |
138 |
- return redirect(routes.IssueApp.issues(projcet.name, StateType.ALL.name())); |
|
123 |
+ return redirect(routes.IssueApp.issues(project.owner, project.name, StateType.ALL.name())); |
|
139 | 124 |
} |
140 | 125 |
|
141 |
- public static Result deleteIssue(String projectName, Long issueId) { |
|
142 |
- Project project = Project.findByName(projectName); |
|
143 |
- if (project == null) { |
|
144 |
- return notFound(); |
|
145 |
- } |
|
126 |
+ public static Result deleteIssue(String userName, String projectName, Long issueId) { |
|
127 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
146 | 128 |
Issue.delete(issueId); |
147 |
- return redirect(routes.IssueApp.issues(project.name, StateType.ALL.stateType())); |
|
129 |
+ return redirect(routes.IssueApp.issues(project.owner, project.name, StateType.ALL.stateType())); |
|
148 | 130 |
} |
149 | 131 |
|
150 |
- public static Result saveComment(String projectName, Long issueId) { |
|
132 |
+ public static Result saveComment(String userName, String projectName, Long issueId) { |
|
151 | 133 |
Form<IssueComment> commentForm = new Form<IssueComment>(IssueComment.class) |
152 | 134 |
.bindFromRequest(); |
153 |
- Project project = Project.findByName(projectName); |
|
135 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
154 | 136 |
if (commentForm.hasErrors()) { |
155 | 137 |
return TODO; |
156 | 138 |
} else { |
... | ... | @@ -161,27 +143,21 @@ |
161 | 143 |
IssueComment.create(comment); |
162 | 144 |
Issue.findById(issueId).numOfComments++; |
163 | 145 |
Issue.updateNumOfComments(issueId); |
164 |
- return redirect(routes.IssueApp.issue(project.name, issueId)); |
|
146 |
+ return redirect(routes.IssueApp.issue(project.owner, project.name, issueId)); |
|
165 | 147 |
} |
166 | 148 |
} |
167 | 149 |
|
168 |
- public static Result deleteComment(String projectName, Long issueId, Long commentId) { |
|
169 |
- Project project = Project.findByName(projectName); |
|
170 |
- if (project == null) { |
|
171 |
- return notFound(); |
|
172 |
- } |
|
150 |
+ public static Result deleteComment(String userName, String projectName, Long issueId, Long commentId) { |
|
151 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
173 | 152 |
IssueComment.delete(commentId); |
174 | 153 |
Issue.updateNumOfComments(issueId); |
175 |
- return redirect(routes.IssueApp.issue(project.name, issueId)); |
|
154 |
+ return redirect(routes.IssueApp.issue(project.owner, project.name, issueId)); |
|
176 | 155 |
} |
177 | 156 |
|
178 |
- public static Result extractExcelFile(String projectName, String stateType) throws Exception { |
|
179 |
- Project project = Project.findByName(projectName); |
|
157 |
+ public static Result extractExcelFile(String userName, String projectName, String stateType) throws Exception { |
|
158 |
+ Project project = ProjectApp.getProject(userName, projectName); |
|
180 | 159 |
Form<SearchCondition> issueParamForm = new Form<SearchCondition>(SearchCondition.class); |
181 | 160 |
SearchCondition issueParam = issueParamForm.bindFromRequest().get(); |
182 |
- if (project == null) { |
|
183 |
- return notFound(); |
|
184 |
- } |
|
185 | 161 |
Page<Issue> issues = Issue.findIssues(project.name, issueParam.pageNum, |
186 | 162 |
StateType.getValue(stateType), issueParam.sortBy, |
187 | 163 |
Direction.getValue(issueParam.orderBy), issueParam.filter, issueParam.milestone, |
... | ... | @@ -192,7 +168,7 @@ |
192 | 168 |
return ok(issueList.render("title.issueList", issues, issueParam, project)); |
193 | 169 |
} |
194 | 170 |
|
195 |
- public static Result enrollAutoNotification(String projectName) throws Exception { |
|
171 |
+ public static Result enrollAutoNotification(String userName, String projectName) throws Exception { |
|
196 | 172 |
return TODO; |
197 | 173 |
} |
198 | 174 |
|
--- app/views/issue/editIssue.scala.html
+++ app/views/issue/editIssue.scala.html
... | ... | @@ -4,7 +4,7 @@ |
4 | 4 |
|
5 | 5 |
@main(Messages(title), project) { |
6 | 6 |
|
7 |
- @form( action = routes.IssueApp.updateIssue(project.name, issueId), |
|
7 |
+ @form( action = routes.IssueApp.updateIssue(project.owner, project.name, issueId), |
|
8 | 8 |
'enctype -> "multipart/form-data", |
9 | 9 |
'class -> "form-horizontal"){ |
10 | 10 |
<fieldset> |
--- app/views/issue/issue.scala.html
+++ app/views/issue/issue.scala.html
... | ... | @@ -5,9 +5,9 @@ |
5 | 5 |
<div class="row"> |
6 | 6 |
<div class="span2 offset10"> |
7 | 7 |
<div id="board_btn_panel"> |
8 |
- <a class="btn btn-primary" href="@routes.IssueApp.editIssue(project.name, issue.id)">@Messages("button.edit")</a> <a |
|
8 |
+ <a class="btn btn-primary" href="@routes.IssueApp.editIssue(project.owner, project.name, issue.id)">@Messages("button.edit")</a> <a |
|
9 | 9 |
data-toggle="modal" href="#deleteIssueConfirm" class="btn">@Messages("button.delete")</a> |
10 |
- <a class="btn" href="@routes.IssueApp.issues(project.name,"open")">@Messages("button.list")</a> |
|
10 |
+ <a class="btn" href="@routes.IssueApp.issues(project.owner, project.name,"open")">@Messages("button.list")</a> |
|
11 | 11 |
</div> |
12 | 12 |
</div> |
13 | 13 |
</div> |
... | ... | @@ -74,7 +74,7 @@ |
74 | 74 |
</div> |
75 | 75 |
<div class="modal-footer"> |
76 | 76 |
<a class="btn btn-danger" |
77 |
- href="@routes.IssueApp.deleteComment(project.name, issue.id, comment.id)">@Messages("button.yes")</a> |
|
77 |
+ href="@routes.IssueApp.deleteComment(project.owner, project.name, issue.id, comment.id)">@Messages("button.yes")</a> |
|
78 | 78 |
<a href="#" class="btn" data-dismiss="modal">@Messages("button.no")</a> |
79 | 79 |
</div> |
80 | 80 |
</div> |
... | ... | @@ -92,7 +92,7 @@ |
92 | 92 |
<!-- 댓글 입력 폼 --> |
93 | 93 |
<hr /> |
94 | 94 |
<div class="row"> |
95 |
- @form(routes.IssueApp.saveComment(project.name, issue.id), 'enctype -> |
|
95 |
+ @form(routes.IssueApp.saveComment(project.owner, project.name, issue.id), 'enctype -> |
|
96 | 96 |
"multipart/form-data"){ |
97 | 97 |
<div class="span12">@textarea(commentForm("contents"))</div> |
98 | 98 |
<div class="span6">@inputFile(commentForm("filePath"))</div> |
... | ... | @@ -115,7 +115,7 @@ |
115 | 115 |
</div> |
116 | 116 |
<div class="modal-footer"> |
117 | 117 |
<a class="btn btn-danger" |
118 |
- href="@routes.IssueApp.deleteIssue(project.name, issue.id)">@Messages("button.yes")</a> |
|
118 |
+ href="@routes.IssueApp.deleteIssue(project.owner, project.name, issue.id)">@Messages("button.yes")</a> |
|
119 | 119 |
<a href="#" class="btn" data-dismiss="modal">@Messages("button.no")</a> |
120 | 120 |
</div> |
121 | 121 |
</div> |
--- app/views/issue/issueList.scala.html
+++ app/views/issue/issueList.scala.html
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 |
|
6 | 6 |
@header(label:String, sortBy:String) = { |
7 | 7 |
<th> |
8 |
- <a sortBy="@sortBy" href="@routes.IssueApp.issues(project.name, param.stateType)">@label</a> |
|
8 |
+ <a sortBy="@sortBy" href="@routes.IssueApp.issues(project.owner, project.name, param.stateType)">@label</a> |
|
9 | 9 |
@if(sortBy == param.sortBy){ |
10 | 10 |
@if(param.orderBy == "desc"){ |
11 | 11 |
<i class="icon-chevron-down"></i> |
... | ... | @@ -21,7 +21,7 @@ |
21 | 21 |
<div class="row"> |
22 | 22 |
<div span="span6"> |
23 | 23 |
<div class="pull-right"> |
24 |
- <form id="searchForm" class="form-search form-inline" action="@routes.IssueApp.issues(project.name, param.stateType)" method="GET" > |
|
24 |
+ <form id="searchForm" class="form-search form-inline" action="@routes.IssueApp.issues(project.owner, project.name, param.stateType)" method="GET" > |
|
25 | 25 |
<select id="milestone" name="milestone"> |
26 | 26 |
<option class="blank" value ="">@Messages("issue.menu.milestoneSelectDefault")</option>@Milestone.options(project.id).map { v => <option id="changeMilestone" name ="milestone" value="@v._1" >@v._2</option>} |
27 | 27 |
</select> |
... | ... | @@ -31,7 +31,7 @@ |
31 | 31 |
<input type="hidden" name="stateType" value="@param.stateType"> |
32 | 32 |
<button type="submit" id="searchSubmit" class="btn"> <i class="icon-search"> </i></button> |
33 | 33 |
|
34 |
- <a class="btn btn-primary" href="@routes.IssueApp.newIssue(project.name)" >@Messages("issue.menu.new")</a> |
|
34 |
+ <a class="btn btn-primary" href="@routes.IssueApp.newIssue(project.owner, project.name)" >@Messages("issue.menu.new")</a> |
|
35 | 35 |
</form> |
36 | 36 |
</div> |
37 | 37 |
</div> |
... | ... | @@ -39,11 +39,11 @@ |
39 | 39 |
<div> |
40 | 40 |
<ul class="nav nav-tabs" id="issue_list"> |
41 | 41 |
<li class="@if(param.stateType.equals("all")){active}"> |
42 |
- <a href="@routes.IssueApp.issues(project.name,"all")">@Messages("issue.stateType.all")</a></li> |
|
42 |
+ <a href="@routes.IssueApp.issues(project.owner, project.name,"all")">@Messages("issue.stateType.all")</a></li> |
|
43 | 43 |
<li class="@if(param.stateType.equals("open")){active}"> |
44 |
- <a href="@routes.IssueApp.issues(project.name, "open")">@Messages("issue.stateType.open")</a></li> |
|
44 |
+ <a href="@routes.IssueApp.issues(project.owner, project.name, "open")">@Messages("issue.stateType.open")</a></li> |
|
45 | 45 |
<li class="@if(param.stateType.equals("closed")){active}"> |
46 |
- <a href="@routes.IssueApp.issues(project.name, "closed")">@Messages("issue.stateType.closed")</a></li> |
|
46 |
+ <a href="@routes.IssueApp.issues(project.owner, project.name, "closed")">@Messages("issue.stateType.closed")</a></li> |
|
47 | 47 |
</ul> |
48 | 48 |
|
49 | 49 |
@if(currentPage.getTotalRowCount == 0){ |
... | ... | @@ -52,7 +52,7 @@ |
52 | 52 |
</div> |
53 | 53 |
}else{ |
54 | 54 |
<div class="pull-right"> |
55 |
- <form class="form-inline" id="checkboxForm" action="@routes.IssueApp.issues(project.name, param.stateType)" method="GET"> |
|
55 |
+ <form class="form-inline" id="checkboxForm" action="@routes.IssueApp.issues(project.owner, project.name, param.stateType)" method="GET"> |
|
56 | 56 |
|
57 | 57 |
<input type="hidden" name="filter" value="@param.filter"> |
58 | 58 |
<input type="hidden" name="stateType" value="@param.stateType"> |
... | ... | @@ -72,7 +72,7 @@ |
72 | 72 |
<label class="checkbox inline"> |
73 | 73 |
<input type="checkbox" name="fileAttachedCheck" id="fileAttachedCheckId" value="1"> @Messages("checkbox.fileAttached") |
74 | 74 |
</label> |
75 |
- <a href="@routes.IssueApp.extractExcelFile(project.name, param.stateType)"><i class ="icon-download-alt"></i>@Messages("button.excelDownload")</a> |
|
75 |
+ <a href="@routes.IssueApp.extractExcelFile(project.owner, project.name, param.stateType)"><i class ="icon-download-alt"></i>@Messages("button.excelDownload")</a> |
|
76 | 76 |
</fieldset> |
77 | 77 |
</div> |
78 | 78 |
</div> |
... | ... | @@ -95,7 +95,7 @@ |
95 | 95 |
<tr> |
96 | 96 |
<td>@issue.id</td> |
97 | 97 |
<td>@Messages(issue.state())</td> |
98 |
- <td><a href="@routes.IssueApp.issue(project.name, issue.id)">@issue.title @if(issue.comments.size > 0){[@issue.comments.size]} @if(issue.filePath != null){<i class="icon-file">}</a></td> |
|
98 |
+ <td><a href="@routes.IssueApp.issue(project.owner, project.name, issue.id)">@issue.title @if(issue.comments.size > 0){[@issue.comments.size]} @if(issue.filePath != null){<i class="icon-file">}</a></td> |
|
99 | 99 |
<td> |
100 | 100 |
@if(issue.assigneeId == null){ |
101 | 101 |
<em>@Messages("issue.noAssignee")</em> |
... | ... | @@ -115,7 +115,7 @@ |
115 | 115 |
@pagination(currentPage, 5, "pagination") |
116 | 116 |
</div> |
117 | 117 |
<div class="span2"> |
118 |
- <a class="btn pull-right" href="@routes.IssueApp.enrollAutoNotification(project.name)"><i class="icon-ok"></i>@Messages("button.autoNotification")</a> |
|
118 |
+ <a class="btn pull-right" href="@routes.IssueApp.enrollAutoNotification(project.owner, project.name)"><i class="icon-ok"></i>@Messages("button.autoNotification")</a> |
|
119 | 119 |
</div> |
120 | 120 |
</div> |
121 | 121 |
|
--- app/views/issue/newIssue.scala.html
+++ app/views/issue/newIssue.scala.html
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 |
<div class="page-header"> |
8 | 8 |
<h1>@Messages(title)</h1> |
9 | 9 |
</div> |
10 |
- @form(action = routes.IssueApp.saveIssue(project.name), |
|
10 |
+ @form(action = routes.IssueApp.saveIssue(project.owner, project.name), |
|
11 | 11 |
'enctype -> "multipart/form-data", |
12 | 12 |
'class -> "form-horizontal"){ |
13 | 13 |
<fieldset> |
... | ... | @@ -148,7 +148,7 @@ |
148 | 148 |
<div class="row pull-right"> |
149 | 149 |
<div class="actions"> |
150 | 150 |
<input type="submit" class="btn btn-primary" value="@Messages("button.save")"> |
151 |
- <a href="@routes.IssueApp.issues(project.name, "all")" class="btn">@Messages("button.cancel")</a> |
|
151 |
+ <a href="@routes.IssueApp.issues(project.owner, project.name, "all")" class="btn">@Messages("button.cancel")</a> |
|
152 | 152 |
</div> |
153 | 153 |
</div> |
154 | 154 |
} |
--- app/views/issue/notExistingPage.scala.html
+++ app/views/issue/notExistingPage.scala.html
... | ... | @@ -1,8 +1,8 @@ |
1 |
- @(title:String, project:Project) |
|
1 |
+@(title:String, project:Project) |
|
2 | 2 |
|
3 | 3 |
@import helper.twitterBootstrap._ |
4 | 4 |
|
5 | 5 |
@main(title, project) { |
6 | 6 |
<h1>존재하지 않는 게시물 입니다.</h1> |
7 |
- <a href="@routes.IssueApp.issues(project.name, "all")" class="btn">목록으로 가기</a> |
|
7 |
+ <a href="@routes.IssueApp.issues(project.owner, project.name, "all")" class="btn">목록으로 가기</a> |
|
8 | 8 |
} |
--- app/views/milestone/list.scala.html
+++ app/views/milestone/list.scala.html
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 |
routes.MilestoneApp.milestones(projectName, state, _sort, _direction) |
10 | 10 |
} |
11 | 11 |
@makeIssuesLink(mId: Long, _state: String) = @{ |
12 |
- routes.IssueApp.issues(projectName, _state)+"&milestone="+mId |
|
12 |
+ routes.IssueApp.issues(projectInst.owner, projectName, _state)+"&milestone="+mId |
|
13 | 13 |
} |
14 | 14 |
@sortMark(_sort: String) = @{ |
15 | 15 |
/* TODO It will be chnaged. */ |
--- conf/routes
+++ conf/routes
... | ... | @@ -55,17 +55,17 @@ |
55 | 55 |
GET /:projectName/milestone/:id/edit controllers.MilestoneApp.editMilestone(projectName:String, id: Long) |
56 | 56 |
|
57 | 57 |
# Issues |
58 |
-GET /:projectName/issueList controllers.IssueApp.issues(projectName:String, stateType:String) |
|
59 |
-GET /:projectName/issues/new controllers.IssueApp.newIssue(projectName:String) |
|
60 |
-POST /:projectName/issues/new controllers.IssueApp.saveIssue(projectName:String) |
|
61 |
-GET /:projectName/issues/:id controllers.IssueApp.issue(projectName:String, id:Long) |
|
62 |
-POST /:projectName/issue/:id/reply controllers.IssueApp.saveComment(projectName:String, id:Long) |
|
63 |
-GET /:projectName/issue/:id/delete controllers.IssueApp.deleteIssue(projectName:String, id:Long) |
|
64 |
-GET /:projectName/issue/:id/deleteComment controllers.IssueApp.deleteComment(projectName:String, id:Long, commentId:Long) |
|
65 |
-GET /:projectName/issueList/excel controllers.IssueApp.extractExcelFile(projectName:String, stateType:String) |
|
66 |
-GET /:projectName/issues/:id/edit controllers.IssueApp.editIssue(projectName:String, id:Long) |
|
67 |
-POST /:projectName/issues/:id/edit controllers.IssueApp.updateIssue(projectName:String, id:Long) |
|
68 |
-GET /:projectName/issueList/autonotify controllers.IssueApp.enrollAutoNotification(projectName:String) |
|
58 |
+GET /:user/:project/issueList controllers.IssueApp.issues(user:String, project:String, stateType:String) |
|
59 |
+GET /:user/:project/issues/new controllers.IssueApp.newIssue(user:String, project:String) |
|
60 |
+POST /:user/:project/issues/new controllers.IssueApp.saveIssue(user:String, project:String) |
|
61 |
+GET /:user/:project/issues/:id controllers.IssueApp.issue(user:String, project:String, id:Long) |
|
62 |
+POST /:user/:project/issue/:id/reply controllers.IssueApp.saveComment(user:String, project:String, id:Long) |
|
63 |
+GET /:user/:project/issue/:id/delete controllers.IssueApp.deleteIssue(user:String, project:String, id:Long) |
|
64 |
+GET /:user/:project/issue/:id/deleteComment controllers.IssueApp.deleteComment(user:String, project:String, id:Long, commentId:Long) |
|
65 |
+GET /:user/:project/issueList/excel controllers.IssueApp.extractExcelFile(user:String, project:String, stateType:String) |
|
66 |
+GET /:user/:project/issues/:id/edit controllers.IssueApp.editIssue(user:String, project:String, id:Long) |
|
67 |
+POST /:user/:project/issues/:id/edit controllers.IssueApp.updateIssue(user:String, project:String, id:Long) |
|
68 |
+GET /:user/:project/issueList/autonotify controllers.IssueApp.enrollAutoNotification(user:String, project:String) |
|
69 | 69 |
|
70 | 70 |
# Git |
71 | 71 |
GET /:projectName/info/refs controllers.GitApp.advertise(projectName:String, service:String) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?