| |
1 <%-- |
| |
2 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
| |
3 |
| |
4 Copyright 2018 Mike Becker. All rights reserved. |
| |
5 |
| |
6 Redistribution and use in source and binary forms, with or without |
| |
7 modification, are permitted provided that the following conditions are met: |
| |
8 |
| |
9 1. Redistributions of source code must retain the above copyright |
| |
10 notice, this list of conditions and the following disclaimer. |
| |
11 |
| |
12 2. Redistributions in binary form must reproduce the above copyright |
| |
13 notice, this list of conditions and the following disclaimer in the |
| |
14 documentation and/or other materials provided with the distribution. |
| |
15 |
| |
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| |
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| |
18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| |
19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| |
20 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| |
21 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| |
22 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| |
23 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| |
24 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| |
25 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
26 --%> |
| |
27 <%@page pageEncoding="UTF-8" %> |
| |
28 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> |
| |
29 <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
| |
30 |
| |
31 <jsp:useBean id="viewmodel" type="de.uapcore.lightpit.viewmodel.IssueDetailView" scope="request"/> |
| |
32 <c:set var="issue" scope="page" value="${viewmodel.issue}" /> |
| |
33 |
| |
34 <table class="formtable fullwidth"> |
| |
35 <colgroup> |
| |
36 <col> |
| |
37 <col style="width: 100%"> |
| |
38 </colgroup> |
| |
39 <tbody> |
| |
40 <c:if test="${viewmodel.issue.id ge 0}"> |
| |
41 <tr> |
| |
42 <th><fmt:message key="issue.id"/></th> |
| |
43 <td>${issue.id}</td> |
| |
44 </tr> |
| |
45 </c:if> |
| |
46 <tr> |
| |
47 <th><fmt:message key="issue.project"/></th> |
| |
48 <td> |
| |
49 <c:out value="${issue.project.name}" /> |
| |
50 </td> |
| |
51 </tr> |
| |
52 <tr> |
| |
53 <th><fmt:message key="issue.created"/></th> |
| |
54 <td><fmt:formatDate value="${issue.created}" /></td> |
| |
55 </tr> |
| |
56 <tr> |
| |
57 <th><fmt:message key="issue.updated"/></th> |
| |
58 <td><fmt:formatDate value="${issue.updated}" /></td> |
| |
59 </tr> |
| |
60 <tr> |
| |
61 <th><fmt:message key="issue.component"/></th> |
| |
62 <td> |
| |
63 <c:if test="${not empty issue.component}"> |
| |
64 <c:out value="${issue.component.name}"/> |
| |
65 </c:if> |
| |
66 <c:if test="${empty issue.component}"> |
| |
67 <fmt:message key="placeholder.null-component"/> |
| |
68 </c:if> |
| |
69 </td> |
| |
70 </tr> |
| |
71 <tr> |
| |
72 <th><fmt:message key="issue.category"/></th> |
| |
73 <td> |
| |
74 <div class="issue-tag ${issue.category}" style="width: auto"> |
| |
75 <fmt:message key="issue.category.${issue.category}" /> |
| |
76 </div> |
| |
77 </td> |
| |
78 </tr> |
| |
79 <tr> |
| |
80 <th><fmt:message key="issue.status"/></th> |
| |
81 <td> |
| |
82 <div class="issue-tag phase-${issue.status.phase}" style="width: auto"> |
| |
83 <fmt:message key="issue.status.${issue.status}" /> |
| |
84 </div> |
| |
85 </td> |
| |
86 </tr> |
| |
87 <tr> |
| |
88 <th><fmt:message key="issue.subject"/></th> |
| |
89 <td><c:out value="${issue.subject}"/></td> |
| |
90 </tr> |
| |
91 <tr> |
| |
92 <th class="vtop"><fmt:message key="issue.description"/></th> |
| |
93 <td> |
| |
94 <textarea readonly rows="10"><c:out value="${issue.description}"/></textarea> |
| |
95 </td> |
| |
96 </tr> |
| |
97 <tr> |
| |
98 <th><fmt:message key="issue.assignee"/></th> |
| |
99 <td> |
| |
100 <c:if test="${not empty issue.assignee}"> |
| |
101 <c:out value="${issue.assignee.displayname}"/> |
| |
102 </c:if> |
| |
103 <c:if test="${empty issue.assignee}"> |
| |
104 <fmt:message key="placeholder.null-assignee" /> |
| |
105 </c:if> |
| |
106 </td> |
| |
107 </tr> |
| |
108 <tr> |
| |
109 <th class="vtop"><fmt:message key="issue.affected-versions"/></th> |
| |
110 <td> |
| |
111 <c:forEach var="version" items="${issue.affectedVersions}"> |
| |
112 <c:out value="${version.name}"/> |
| |
113 </c:forEach> |
| |
114 </td> |
| |
115 </tr> |
| |
116 <tr> |
| |
117 <th class="vtop"><fmt:message key="issue.resolved-versions"/></th> |
| |
118 <td> |
| |
119 <c:forEach var="version" items="${issue.resolvedVersions}"> |
| |
120 <c:out value="${version.name}"/> |
| |
121 </c:forEach> |
| |
122 </td> |
| |
123 </tr> |
| |
124 <tr> |
| |
125 <th><fmt:message key="issue.eta"/></th> |
| |
126 <td><fmt:formatDate value="${issue.eta}" /></td> |
| |
127 </tr> |
| |
128 </tbody> |
| |
129 <tfoot> |
| |
130 <tr> |
| |
131 <td colspan="2"> |
| |
132 <%-- TODO: fix #14 --%> |
| |
133 <a href="./projects/${issue.project.node}/all-components/all-versions/issues/" class="button"> |
| |
134 <fmt:message bundle="${lightpit_bundle}" key="button.cancel"/> |
| |
135 </a> |
| |
136 <a href="./projects/${issue.project.node}/issues/${issue.id}/edit" class="button submit"> |
| |
137 <fmt:message key="button.issue.edit"/> |
| |
138 </a> |
| |
139 </td> |
| |
140 </tr> |
| |
141 </tfoot> |
| |
142 </table> |
| |
143 |
| |
144 <hr class="comments-separator"/> |
| |
145 <h2><fmt:message key="issue.comments"/></h2> |
| |
146 <c:if test="${viewmodel.issue.id ge 0}"> |
| |
147 <form id="comment-form" action="./projects/commit-issue-comment" method="post"> |
| |
148 <table class="formtable fullwidth"> |
| |
149 <tbody> |
| |
150 <tr> |
| |
151 <td><textarea rows="5" name="comment" required></textarea></td> |
| |
152 </tr> |
| |
153 </tbody> |
| |
154 <tfoot> |
| |
155 <tr> |
| |
156 <td> |
| |
157 <input type="hidden" name="issueid" value="${issue.id}"/> |
| |
158 <button type="submit"><fmt:message key="button.comment"/></button> |
| |
159 </td> |
| |
160 </tr> |
| |
161 </tfoot> |
| |
162 </table> |
| |
163 </form> |
| |
164 <c:forEach var="comment" items="${viewmodel.comments}"> |
| |
165 <div class="comment"> |
| |
166 <div class="caption"> |
| |
167 <c:if test="${not empty comment.author}"> |
| |
168 <c:out value="${comment.author.displayname}"/> |
| |
169 </c:if> |
| |
170 <c:if test="${empty comment.author}"> |
| |
171 <fmt:message key="issue.comments.anonauthor"/> |
| |
172 </c:if> |
| |
173 </div> |
| |
174 <div class="smalltext"> |
| |
175 <fmt:formatDate type="BOTH" value="${comment.created}" /> |
| |
176 <c:if test="${comment.updateCount gt 0}"> |
| |
177 <!-- TODO: update count --> |
| |
178 </c:if> |
| |
179 </div> |
| |
180 <div class="medskip"> |
| |
181 <c:out value="${comment.comment}"/> |
| |
182 </div> |
| |
183 </div> |
| |
184 </c:forEach> |
| |
185 </c:if> |
| |
186 |