Mon, 05 Aug 2024 19:38:47 +0200
fix removing filter not working
fixes #407
311
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | package de.uapcore.lightpit.logic |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | import de.uapcore.lightpit.HttpRequest |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | import de.uapcore.lightpit.dao.DataAccessObject |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | import de.uapcore.lightpit.dateOptValidator |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | import de.uapcore.lightpit.entities.Issue |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | import de.uapcore.lightpit.entities.IssueComment |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | import de.uapcore.lightpit.entities.IssueRelation |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | import de.uapcore.lightpit.entities.Version |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | import de.uapcore.lightpit.types.IssueCategory |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | import de.uapcore.lightpit.types.IssueStatus |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | import de.uapcore.lightpit.types.RelationType |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | import de.uapcore.lightpit.viewmodel.IssueDetailView |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | import de.uapcore.lightpit.viewmodel.PathInfos |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | import de.uapcore.lightpit.viewmodel.PathInfosFull |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | import de.uapcore.lightpit.viewmodel.projectNavMenu |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | import java.sql.Date |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | fun Issue.hasChanged(reference: Issue) = !(component == reference.component && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | status == reference.status && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | category == reference.category && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | subject == reference.subject && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | description == reference.description && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | assignee == reference.assignee && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | eta == reference.eta && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | affected == reference.affected && |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | resolved == reference.resolved) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | fun Issue.compareEtaTo(date: Date?): Int { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
30 | val eta = this.eta |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | return if (eta == null && date == null) 0 |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
32 | else if (eta == null) 1 |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | else if (date == null) -1 |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | else eta.compareTo(date) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | fun Issue.applyFormData(http: HttpRequest, dao: DataAccessObject): Issue = this.apply { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | component = dao.findComponent(http.param("component")?.toIntOrNull() ?: -1) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
39 | category = IssueCategory.valueOf(http.param("category") ?: "") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | status = IssueStatus.valueOf(http.param("status") ?: "") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
41 | subject = http.param("subject") ?: "" |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | description = http.param("description") ?: "" |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | assignee = http.param("assignee")?.toIntOrNull()?.let { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | when (it) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
45 | -1 -> null |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | -2 -> (component?.lead ?: project.owner) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | else -> dao.findUser(it) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | // TODO: process error messages |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
51 | eta = http.param("eta", ::dateOptValidator, null, mutableListOf()) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | affected = http.param("affected")?.toIntOrNull()?.takeIf { it > 0 }?.let { Version(it, project.id) } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | resolved = http.param("resolved")?.toIntOrNull()?.takeIf { it > 0 }?.let { Version(it, project.id) } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
55 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
56 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | fun processIssueForm(issue: Issue, reference: Issue, http: HttpRequest, dao: DataAccessObject) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | if (issue.hasChanged(reference)) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
59 | dao.updateIssue(issue) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
60 | dao.insertHistoryEvent(issue) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
61 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
62 | val newComment = http.param("comment") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
63 | if (!newComment.isNullOrBlank()) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
64 | val comment = IssueComment(-1, issue.id).apply { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
65 | author = http.remoteUser?.let { dao.findUserByName(it) } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | comment = newComment |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
67 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
68 | val commentid = dao.insertComment(comment) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
69 | dao.insertHistoryEvent(issue, comment, commentid) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
70 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
71 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
72 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
73 | fun commitIssueComment(http: HttpRequest, dao: DataAccessObject, pathInfos: PathInfos) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
74 | val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
75 | if (issue == null) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
76 | http.response.sendError(404) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
77 | return |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
78 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
79 | if (processIssueComment(issue, http, dao)) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
80 | http.renderCommit("${pathInfos.issuesHref}${issue.id}") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
81 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
82 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
83 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
84 | fun processIssueComment(issue:Issue, http: HttpRequest, dao: DataAccessObject): Boolean { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
85 | val commentId = http.param("commentid")?.toIntOrNull() ?: -1 |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
86 | if (commentId > 0) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
87 | val comment = dao.findComment(commentId) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
88 | if (comment == null) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
89 | http.response.sendError(404) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
90 | return false |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
91 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
92 | val originalAuthor = comment.author?.username |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
93 | if (originalAuthor != null && originalAuthor == http.remoteUser) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
94 | val newComment = http.param("comment") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
95 | if (!newComment.isNullOrBlank()) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
96 | comment.comment = newComment |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
97 | dao.updateComment(comment) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
98 | dao.insertHistoryEvent(issue, comment) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
99 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
100 | } else { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
101 | http.response.sendError(403) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
102 | return false |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
103 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
104 | } else { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
105 | val comment = IssueComment(-1, issue.id).apply { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
106 | author = http.remoteUser?.let { dao.findUserByName(it) } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
107 | comment = http.param("comment") ?: "" |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
108 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
109 | val newId = dao.insertComment(comment) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
110 | dao.insertHistoryEvent(issue, comment, newId) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
111 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
112 | return true |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
113 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
114 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
115 | fun renderIssueView( |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
116 | http: HttpRequest, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
117 | dao: DataAccessObject, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
118 | issue: Issue, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
119 | pathInfos: PathInfos, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
120 | relationError: String? = null |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
121 | ) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
122 | val comments = dao.listComments(issue) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
123 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
124 | with(http) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
125 | pageTitle = "#${issue.id} ${issue.subject} (${issue.project.name})" |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
126 | view = IssueDetailView( |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
127 | issue, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
128 | comments, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
129 | dao.listIssues(issue.project, true), |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
130 | dao.listIssueRelations(issue), |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
131 | dao.listCommitRefs(issue), |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
132 | relationError, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
133 | pathInfos |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
134 | ) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
135 | if (pathInfos is PathInfosFull) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
136 | navigationMenu = projectNavMenu(dao.listProjects(), pathInfos) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
137 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
138 | styleSheets = listOf("projects") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
139 | javascript = "issue-editor" |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
140 | render("issue-view") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
141 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
142 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
143 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
144 | fun addIssueRelation(http: HttpRequest, dao: DataAccessObject, pathInfos: PathInfos) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
145 | val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
146 | if (issue == null) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
147 | http.response.sendError(404) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
148 | return |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
149 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
150 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
151 | // determine the relation type |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
152 | val type: Pair<RelationType, Boolean>? = http.param("type")?.let { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
153 | try { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
154 | if (it.startsWith("!")) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
155 | Pair(RelationType.valueOf(it.substring(1)), true) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
156 | } else { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
157 | Pair(RelationType.valueOf(it), false) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
158 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
159 | } catch (_: IllegalArgumentException) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
160 | null |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
161 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
162 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
163 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
164 | // if the relation type was invalid, send HTTP 500 |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
165 | if (type == null) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
166 | http.response.sendError(500) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
167 | return |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
168 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
169 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
170 | // determine the target issue |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
171 | val targetIssue: Issue? = http.param("issue")?.let { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
172 | if (it.startsWith("#") && it.length > 1) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
173 | it.substring(1).split(" ", limit = 2)[0].toIntOrNull() |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
174 | ?.let(dao::findIssue) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
175 | ?.takeIf { target -> target.project.id == issue.project.id } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
176 | } else { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
177 | null |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
178 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
179 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
180 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
181 | // check if the target issue is valid |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
182 | if (targetIssue == null) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
183 | renderIssueView(http, dao, issue, pathInfos, "issue.relations.target.invalid") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
184 | return |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
185 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
186 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
187 | // commit the result |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
188 | dao.insertIssueRelation(IssueRelation(issue, targetIssue, type.first, type.second)) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | http.renderCommit("${pathInfos.issuesHref}${issue.id}") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
190 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
191 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
192 | fun removeIssueRelation(http: HttpRequest, dao: DataAccessObject, pathInfos: PathInfos) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
193 | val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
194 | if (issue == null) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
195 | http.response.sendError(404) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
196 | return |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
197 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
198 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
199 | // determine relation |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
200 | val type = http.param("type")?.let { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
201 | try { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
202 | RelationType.valueOf(it)} |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
203 | catch (_:IllegalArgumentException) {null} |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
204 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
205 | if (type == null) { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
206 | http.response.sendError(500) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
207 | return |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
208 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
209 | val rel = http.param("to")?.toIntOrNull()?.let(dao::findIssue)?.let { |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
210 | IssueRelation( |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
211 | issue, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
212 | it, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
213 | type, |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
214 | http.param("reverse")?.toBoolean() ?: false |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
215 | ) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
216 | } |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
217 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
218 | // execute removal, if there is something to remove |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
219 | rel?.run(dao::deleteIssueRelation) |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
220 | |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
221 | // always pretend that the operation was successful - if there was nothing to remove, it's okay |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
222 | http.renderCommit("${pathInfos.issuesHref}${issue.id}") |
bf67e0ff7131
add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
223 | } |