182 } |
182 } |
183 |
183 |
184 private fun project(http: HttpRequest, dao: DataAccessObject) { |
184 private fun project(http: HttpRequest, dao: DataAccessObject) { |
185 withPathInfo(http, dao)?.run { |
185 withPathInfo(http, dao)?.run { |
186 |
186 |
187 val issues = dao.listIssues(project, version, component) |
187 val filter = IssueFilter(http) |
|
188 |
|
189 val needRelationsMap = filter.onlyBlocker |
|
190 |
|
191 val relationsMap = if (needRelationsMap) dao.getIssueRelationMap(project, filter.includeDone) else emptyMap() |
|
192 |
|
193 val issues = dao.listIssues(project, filter.includeDone, version, component) |
188 .sortedWith( |
194 .sortedWith( |
189 IssueSorter( |
195 IssueSorter( |
190 IssueSorter.Criteria(IssueSorter.Field.DONE), |
196 IssueSorter.Criteria(IssueSorter.Field.DONE), |
191 IssueSorter.Criteria(IssueSorter.Field.ETA), |
197 IssueSorter.Criteria(IssueSorter.Field.ETA), |
192 IssueSorter.Criteria(IssueSorter.Field.UPDATED, false) |
198 IssueSorter.Criteria(IssueSorter.Field.UPDATED, false) |
193 ) |
199 ) |
194 ) |
200 ) |
|
201 .filter { |
|
202 (!filter.onlyMine || (it.assignee?.username ?: "") == (http.remoteUser ?: "<Anonymous>")) && |
|
203 (!filter.onlyBlocker || (relationsMap[it.id]?.any { (_,type) -> type.blocking }?:false)) && |
|
204 (filter.status.isEmpty() || filter.status.contains(it.status)) && |
|
205 (filter.category.isEmpty() || filter.category.contains(it.category)) |
|
206 } |
195 |
207 |
196 with(http) { |
208 with(http) { |
197 pageTitle = project.name |
209 pageTitle = project.name |
198 view = ProjectDetails(projectInfo, issues, version, component) |
210 view = ProjectDetails(projectInfo, issues, filter, version, component) |
199 feedPath = feedPath(project) |
211 feedPath = feedPath(project) |
200 navigationMenu = activeProjectNavMenu( |
212 navigationMenu = activeProjectNavMenu( |
201 dao.listProjects(), |
213 dao.listProjects(), |
202 projectInfo, |
214 projectInfo, |
203 version, |
215 version, |
465 issue, |
477 issue, |
466 comments, |
478 comments, |
467 project, |
479 project, |
468 version, |
480 version, |
469 component, |
481 component, |
470 dao.listIssues(project), |
482 dao.listIssues(project, true), |
471 dao.listIssueRelations(issue), |
483 dao.listIssueRelations(issue), |
472 relationError |
484 relationError |
473 ) |
485 ) |
474 feedPath = feedPath(projectInfo.project) |
486 feedPath = feedPath(projectInfo.project) |
475 navigationMenu = activeProjectNavMenu( |
487 navigationMenu = activeProjectNavMenu( |