1.1 --- a/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt Thu May 13 18:01:56 2021 +0200 1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt Thu May 13 19:31:09 2021 +0200 1.3 @@ -145,12 +145,15 @@ 1.4 } 1.5 } 1.6 1.7 + private fun feedPath(project: Project) = "feed/${project.node}/issues.rss" 1.8 + 1.9 data class PathInfos( 1.10 val projectInfo: ProjectInfo, 1.11 val version: Version?, 1.12 val component: Component? 1.13 ) { 1.14 - val issuesHref by lazyOf("projects/${projectInfo.project.node}/issues/${version?.node ?: "-"}/${component?.node ?: "-"}/") 1.15 + val project = projectInfo.project 1.16 + val issuesHref by lazyOf("projects/${project.node}/issues/${version?.node ?: "-"}/${component?.node ?: "-"}/") 1.17 } 1.18 1.19 private fun withPathInfo(http: HttpRequest, dao: DataAccessObject): PathInfos? { 1.20 @@ -186,13 +189,14 @@ 1.21 withPathInfo(http, dao)?.run { 1.22 1.23 val issues = dao.listIssues(IssueFilter( 1.24 - project = SpecificFilter(projectInfo.project), 1.25 + project = SpecificFilter(project), 1.26 version = version?.let { SpecificFilter(it) } ?: AllFilter(), 1.27 component = component?.let { SpecificFilter(it) } ?: AllFilter() 1.28 )).sortedWith(DEFAULT_ISSUE_SORTER) 1.29 1.30 with(http) { 1.31 view = ProjectDetails(projectInfo, issues, version, component) 1.32 + feedPath = feedPath(project) 1.33 navigationMenu = activeProjectNavMenu( 1.34 dao.listProjects(), 1.35 projectInfo, 1.36 @@ -261,6 +265,7 @@ 1.37 projectInfo, 1.38 dao.listVersionSummaries(projectInfo.project) 1.39 ) 1.40 + feedPath = feedPath(projectInfo.project) 1.41 navigationMenu = activeProjectNavMenu( 1.42 dao.listProjects(), 1.43 projectInfo 1.44 @@ -290,6 +295,7 @@ 1.45 1.46 with(http) { 1.47 view = VersionEditView(projectInfo, version) 1.48 + feedPath = feedPath(projectInfo.project) 1.49 navigationMenu = activeProjectNavMenu( 1.50 dao.listProjects(), 1.51 projectInfo, 1.52 @@ -342,6 +348,7 @@ 1.53 projectInfo, 1.54 dao.listComponentSummaries(projectInfo.project) 1.55 ) 1.56 + feedPath = feedPath(projectInfo.project) 1.57 navigationMenu = activeProjectNavMenu( 1.58 dao.listProjects(), 1.59 projectInfo 1.60 @@ -371,6 +378,7 @@ 1.61 1.62 with(http) { 1.63 view = ComponentEditView(projectInfo, component, dao.listUsers()) 1.64 + feedPath = feedPath(projectInfo.project) 1.65 navigationMenu = activeProjectNavMenu( 1.66 dao.listProjects(), 1.67 projectInfo, 1.68 @@ -426,7 +434,9 @@ 1.69 val comments = dao.listComments(issue) 1.70 1.71 with(http) { 1.72 - view = IssueDetailView(issue, comments, projectInfo.project, version, component) 1.73 + view = IssueDetailView(issue, comments, project, version, component) 1.74 + // TODO: feed path for this particular issue 1.75 + feedPath = feedPath(projectInfo.project) 1.76 navigationMenu = activeProjectNavMenu( 1.77 dao.listProjects(), 1.78 projectInfo, 1.79 @@ -443,7 +453,7 @@ 1.80 withPathInfo(http, dao)?.run { 1.81 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) ?: Issue( 1.82 -1, 1.83 - projectInfo.project, 1.84 + project, 1.85 ) 1.86 1.87 // pre-select component, if available in the path info 1.88 @@ -464,10 +474,11 @@ 1.89 projectInfo.versions, 1.90 projectInfo.components, 1.91 dao.listUsers(), 1.92 - projectInfo.project, 1.93 + project, 1.94 version, 1.95 component 1.96 ) 1.97 + feedPath = feedPath(projectInfo.project) 1.98 navigationMenu = activeProjectNavMenu( 1.99 dao.listProjects(), 1.100 projectInfo, 1.101 @@ -505,7 +516,7 @@ 1.102 // TODO: throw validator exception instead of using defaults 1.103 val issue = Issue( 1.104 http.param("id")?.toIntOrNull() ?: -1, 1.105 - projectInfo.project 1.106 + project 1.107 ).apply { 1.108 component = dao.findComponent(http.param("component")?.toIntOrNull() ?: -1) 1.109 category = IssueCategory.valueOf(http.param("category") ?: "") 1.110 @@ -522,9 +533,9 @@ 1.111 eta = http.param("eta")?.let { if (it.isBlank()) null else Date.valueOf(it) } 1.112 1.113 affectedVersions = http.paramArray("affected") 1.114 - .mapNotNull { param -> param.toIntOrNull()?.let { Version(it, projectInfo.project.id) } } 1.115 + .mapNotNull { param -> param.toIntOrNull()?.let { Version(it, project.id) } } 1.116 resolvedVersions = http.paramArray("resolved") 1.117 - .mapNotNull { param -> param.toIntOrNull()?.let { Version(it, projectInfo.project.id) } } 1.118 + .mapNotNull { param -> param.toIntOrNull()?.let { Version(it, project.id) } } 1.119 } 1.120 1.121 val openId = if (issue.id < 0) {