56 changes: 28 additions & 28 deletions src/main/webapp/WEB-INF/jsp/retra/WorklogOverview.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<tr>
<th><fmt:message key="worklog.workFrom" /></th>
<td>
<input type="text" name="worklogFilterFrom" value="${worklogFilterFrom}" tabindex="1" id="worklogFilterWorkFromId"/><%--
<input type="text" name="worklogFilterFrom" value="${fn:escapeXml(worklogFilterFrom)}" tabindex="1" id="worklogFilterWorkFromId"/><%--
--%><img src="${imgRoot}/calendarIco.gif" alt="<fmt:message key='calendar.label' />" title="<fmt:message key='calendar.label' />" align="top" id="worklogFilterWorkFromImgId"/>
<script type="text/javascript">
<!--
Expand All @@ -24,7 +24,7 @@
</td>
<th><fmt:message key="worklog.employee" /></th>
<td>
<vc:select name="worklogFilterEmployee" valueObjects="${employees}" selected="${worklogFilterEmployee}"
<vc:select name="worklogFilterEmployee" valueObjects="${employees}" selected="${fn:escapeXml(worklogFilterEmployee)}"
valueProperty="pk" labelProperty="user.contactInfo.displayName" orderBy="user.contactInfo.displayName"
tabindex="3" />
</td>
Expand All @@ -35,7 +35,7 @@
<tr>
<th><fmt:message key="worklog.workTo" /></th>
<td>
<input type="text" name="worklogFilterTo" value="${worklogFilterTo}" tabindex="2" id="worklogFilterWorkToId"/><%--
<input type="text" name="worklogFilterTo" value="${fn:escapeXml(worklogFilterTo)}" tabindex="2" id="worklogFilterWorkToId"/><%--
--%><img src="${imgRoot}/calendarIco.gif" alt="<fmt:message key='calendar.label' />" title="<fmt:message key='calendar.label' />" align="top" id="worklogFilterWorkToImgId"/>
<script type="text/javascript">
<!--
Expand All @@ -45,7 +45,7 @@
</td>
<th><fmt:message key="worklog.project" /></th>
<td>
<vc:select name="worklogFilterProject" valueObjects="${projects}" selected="${worklogFilterProject}"
<vc:select name="worklogFilterProject" valueObjects="${projects}" selected="${fn:escapeXml(worklogFilterProject)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName"
tabindex="4">
<vc:select-option value="">--- <fmt:message key="worklog.allProjects" /> ---</vc:select-option>
Expand All @@ -55,11 +55,11 @@
<tr>
<th><fmt:message key="worklog.invoice.code" /></th>
<td>
<input type="text" name="worklogFilterInvoiceCode" value="${worklogFilterInvoiceCode}" maxlength="30"/>
<input type="text" name="worklogFilterInvoiceCode" value="${fn:escapeXml(worklogFilterInvoiceCode)}" maxlength="30"/>
</td>
<th><fmt:message key="worklog.activity" /></th>
<td>
<vc:select name="worklogFilterActivity" valueObjects="${activities}" selected="${worklogFilterActivity}"
<vc:select name="worklogFilterActivity" valueObjects="${activities}" selected="${fn:escapeXml(worklogFilterActivity)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName">
<vc:select-option value="">--- <fmt:message key="worklog.allActivities" /> ---</vc:select-option>
</vc:select> <!-- tabindex="5" -->
Expand All @@ -72,10 +72,10 @@
<c:forEach items="${invoiceRelations}" var="relation">
<c:choose>
<c:when test="${relation.code == worklogFilterInvoiceRelation}">
<option value="${relation.code}" selected="selected"><fmt:message key="invoice.relation.${relation.code}" /></option>
<option value="${fn:escapeXml(relation.code)}" selected="selected"><fmt:message key="invoice.relation.${relation.code}" /></option>
</c:when>
<c:otherwise>
<option value="${relation.code}"><fmt:message key="invoice.relation.${relation.code}" /></option>
<option value="${fn:escapeXml(relation.code)}"><fmt:message key="invoice.relation.${relation.code}" /></option>
</c:otherwise>
</c:choose>
</c:forEach>
Expand Down Expand Up @@ -108,7 +108,7 @@

<div class="tabber">

<h2 class="visibleOnlyInPrint">${employee.user.contactInfo.displayName}: ${worklogFilterFrom} - ${worklogFilterTo}</h2>
<h2 class="visibleOnlyInPrint">${fn:escapeXml(employee.user.contactInfo.displayName)}: ${fn:escapeXml(worklogFilterFrom)} - ${fn:escapeXml(worklogFilterTo)}</h2>

<div class="tabbertab">
<h2>Worklog Items</h2>
Expand All @@ -128,37 +128,37 @@

<display:column titleKey="worklog.project" media="html" >
<!-- this is hack for sorting -->
<span class="invisible">${worklog.project.code}</span>
<acronym title="${worklog.project.name}">${worklog.project.code}</acronym>
<span class="invisible">${fn:escapeXml(worklog.project.code)}</span>
<acronym title="${fn:escapeXml(worklog.project.name)}">${fn:escapeXml(worklog.project.code)}</acronym>
</display:column>
<display:column property="project.code" titleKey="worklog.project" media="csv excel xml pdf rtf"/>
<display:column property="project.code" titleKey="worklog.project" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column titleKey="worklog.component" media="html">
<!-- this is hack for sorting -->
<span class="invisible">${worklog.component.code}</span>
<acronym title="${worklog.component.name}">${worklog.component.code}</acronym>
<span class="invisible">${fn:escapeXml(worklog.component.code)}</span>
<acronym title="${fn:escapeXml(worklog.component.name)}">${fn:escapeXml(worklog.component.code)}</acronym>
</display:column>
<display:column property="component.code" titleKey="worklog.component" media="csv excel xml rtf"/>
<display:column property="component.code" titleKey="worklog.component" media="csv excel xml rtf" escapeXml="true" />

<display:column titleKey="worklog.activity" media="html">
<!-- this is hack for sorting -->
<span class="invisible">${worklog.activity.code}</span>
<acronym title="${worklog.activity.name}">${worklog.activity.code}</acronym>
<span class="invisible">${fn:escapeXml(worklog.activity.code)}</span>
<acronym title="${fn:escapeXml(worklog.activity.name)}">${fn:escapeXml(worklog.activity.code)}</acronym>
</display:column>
<display:column property="activity.code" titleKey="worklog.activity" media="csv excel xml pdf rtf"/>

<display:column titleKey="worklog.invoice" media="html" class="nowrap">
<c:if test="${worklog.invoice != null}">
<span class="invisible">${worklog.invoice.code}</span>
<acronym title="${worklog.invoice.name}">${worklog.invoice.code}</acronym>&nbsp;-&nbsp;<img src="${imgRoot}/<fmt:message key='invoice.state.img.${worklog.invoice.state}' />" alt="<fmt:message key='invoice.state.${worklog.invoice.state}' />" title="<fmt:message key='invoice.state.${worklog.invoice.state}' />" align="absmiddle"/>
<span class="invisible">${fn:escapeXml(worklog.invoice.code)}</span>
<acronym title="${fn:escapeXml(worklog.invoice.name)}">${fn:escapeXml(worklog.invoice.code)}</acronym>&nbsp;-&nbsp;<img src="${imgRoot}/<fmt:message key='invoice.state.img.${worklog.invoice.state}' />" alt="<fmt:message key='invoice.state.${worklog.invoice.state}' />" title="<fmt:message key='invoice.state.${worklog.invoice.state}' />" align="absmiddle"/>
</c:if>
</display:column>
<display:column property="invoice.code" titleKey="worklog.invoice" media="csv excel xml rtf"/>
<display:column property="invoice.code" titleKey="worklog.invoice" media="csv excel xml rtf" escapeXml="true" />

<display:column property="employee.user.contactInfo.displayName" titleKey="worklog.employee"/>
<display:column property="employee.user.contactInfo.displayName" titleKey="worklog.employee" escapeXml="true" />

<display:column property="descriptionGui" titleKey="worklog.description" media="html"/>
<display:column property="description" titleKey="worklog.description" media="csv excel xml pdf rtf"/>
<display:column property="description" titleKey="worklog.description" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column property="workFrom" titleKey="worklog.workFrom" decorator="cz.softinel.retra.core.utils.decorator.HourDecorator"/>
<display:column property="workTo" titleKey="worklog.workTo" decorator="cz.softinel.retra.core.utils.decorator.HourDecorator"/>
Expand Down Expand Up @@ -216,7 +216,7 @@
<tr>
<th>Day \ Project</th>
<c:forEach items="${projectProjectionList}" var="project">
<th>${project.key}</th>
<th>${fn:escapeXml(project.key)}</th>
</c:forEach>
<th>Hours / day</th>
</tr>
Expand Down Expand Up @@ -270,8 +270,8 @@
<c:forEach items="${project.projectionFor[3].list}" var="activity">
<tr class="even">
<th><fmt:formatDate value="${day.key}" pattern="${TypeFormats.DATE_FORMAT_DOW}"/></th>
<td>${project.key}</td>
<td>${activity.key}</td>
<td>${fn:escapeXml(project.key)}</td>
<td>${fn:escapeXml(activity.key)}</td>
<th style='text-align:right;'><fmt:formatNumber value="${activity.value.sum}" maxFractionDigits="2" minFractionDigits="2" /></th>
</tr>
</c:forEach>
Expand All @@ -284,7 +284,7 @@
</tr>
</c:forEach>
<tr class="odd totalRow">
<th>Week ${week.key}</th>
<th>Week ${fn:escapeXml(week.key)}</th>
<td>&nbsp;</td>
<td>&nbsp;</td>
<th style='text-align:right;'><fmt:formatNumber value="${week.value.sum}" maxFractionDigits="2" minFractionDigits="2" /></th>
Expand All @@ -306,14 +306,14 @@
<tr>
<th>&nbsp;</th>
<c:forEach items="${activityProjectionList}" var="activity">
<th>${activity.key}</th>
<th>${fn:escapeXml(activity.key)}</th>
</c:forEach>
<th><fmt:message key="worklog.total"/></th>
</tr>
</thead>
<c:forEach items="${projectProjectionList}" var="project">
<tr class="odd">
<th>${project.key}</th>
<th>${fn:escapeXml(project.key)}</th>
<c:forEach items="${activityProjectionList}" var="activity">
<td style='text-align:right;'>
<fmt:formatNumber value="${worklogGroupped.map[false][false][project.key][activity.key].sum}" maxFractionDigits="2" minFractionDigits="2" />
Expand Down
12 changes: 6 additions & 6 deletions src/main/webapp/WEB-INF/jsp/retra/WorklogOverviewList.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
<tr>
<th><fmt:message key="worklog.month" /></th>
<td>
<vc:select name="worklogFilterMonth" valueObjects="${months}" selected="${worklogFilterMonth}"
<vc:select name="worklogFilterMonth" valueObjects="${months}" selected="${fn:escapeXml(worklogFilterMonth)}"
valueProperty="value" labelProperty="label" orderBy="label" tabindex="1" />
</td>
<th><fmt:message key="worklog.employee" /></th>
<td>
<vc:select name="worklogFilterEmployee" valueObjects="${employees}" selected="${worklogFilterEmployee}"
<vc:select name="worklogFilterEmployee" valueObjects="${employees}" selected="${fn:escapeXml(worklogFilterEmployee)}"
valueProperty="pk" labelProperty="user.contactInfo.displayName" orderBy="user.contactInfo.displayName"
tabindex="2" />
</td>
Expand All @@ -25,7 +25,7 @@
<tr>
<th><fmt:message key="worklog.year" /></th>
<td>
<vc:select name="worklogFilterYear" valueObjects="${years}" selected="${worklogFilterYear}"
<vc:select name="worklogFilterYear" valueObjects="${years}" selected="${fn:escapeXml(worklogFilterYear)}"
valueProperty="value" labelProperty="label" orderBy="label" tabindex="3" />
</td>
<td colspan="2"></td>
Expand All @@ -44,17 +44,17 @@
<display:setProperty name="export.rtf.filename" value="${employee.user.contactInfo.displayName}-worklog.rtf" />

<!-- header -->
<display:caption>${employee.user.contactInfo.displayName} - <fmt:message key="month.${worklogFilterMonth}"/> ${worklogFilterYear}</display:caption>
<display:caption>${fn:escapeXml(employee.user.contactInfo.displayName)} - <fmt:message key="month.${worklogFilterMonth}"/> ${fn:escapeXml(worklogFilterYear)}</display:caption>

<!-- data columns -->
<display:column property="date" titleKey="worklog.date" decorator="cz.softinel.retra.core.utils.decorator.DateDecorator" group="1" class="printBold" />

<display:column titleKey="worklog.project">
${worklog.project.code} - ${worklog.project.name}
${fn:escapeXml(worklog.project.codefn:escapeXml)} - ${fn:escapeXml(worklog.project.name)}
</display:column>

<display:column titleKey="worklog.activity">
${worklog.activity.code} - ${worklog.activity.name}
${fn:escapeXml(worklog.activity.code)} - ${fn:escapeXml(worklog.activity.name)}
</display:column>

<display:column property="hours" titleKey="worklog.hours" total="true" format="{0,number,0.00}"/>
Expand Down
62 changes: 31 additions & 31 deletions src/main/webapp/WEB-INF/jsp/retra/WorklogProjectOverview.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<tr>
<th><fmt:message key="worklog.workFrom" /></th>
<td>
<input type="text" name="worklogFilterFrom" value="${worklogFilterFrom}" tabindex="1" id="worklogFilterWorkFromId"/><%--
<input type="text" name="worklogFilterFrom" value="${fn:escapeXml(worklogFilterFrom)}" tabindex="1" id="worklogFilterWorkFromId"/><%--
--%><img src="${imgRoot}/calendarIco.gif" alt="<fmt:message key='calendar.label' />" title="<fmt:message key='calendar.label' />" align="top" id="worklogFilterWorkFromImgId"/>
<script type="text/javascript">
<!--
Expand All @@ -24,7 +24,7 @@
</td>
<th><fmt:message key="worklog.project" /></th>
<td>
<vc:select name="worklogFilterProject" valueObjects="${projects}" selected="${worklogFilterProject}"
<vc:select name="worklogFilterProject" valueObjects="${projects}" selected="${fn:escapeXml(worklogFilterProject)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName"
tabindex="4">
<vc:select-option value="">--- <fmt:message key="worklog.allProjects" /> ---</vc:select-option>
Expand All @@ -35,7 +35,7 @@
<tr>
<th><fmt:message key="worklog.workTo" /></th>
<td>
<input type="text" name="worklogFilterTo" value="${worklogFilterTo}" tabindex="2" id="worklogFilterWorkToId"/><%--
<input type="text" name="worklogFilterTo" value="${fn:escapeXml(worklogFilterTo)}" tabindex="2" id="worklogFilterWorkToId"/><%--
--%><img src="${imgRoot}/calendarIco.gif" alt="<fmt:message key='calendar.label' />" title="<fmt:message key='calendar.label' />" align="top" id="worklogFilterWorkToImgId"/>
<script type="text/javascript">
<!--
Expand All @@ -45,7 +45,7 @@
</td>
<th><fmt:message key="worklog.activity" /></th>
<td>
<vc:select name="worklogFilterActivity" valueObjects="${activities}" selected="${worklogFilterActivity}"
<vc:select name="worklogFilterActivity" valueObjects="${activities}" selected="${fn:escapeXml(worklogFilterActivity)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName">
<vc:select-option value="">--- <fmt:message key="worklog.allActivities" /> ---</vc:select-option>
</vc:select> <!-- tabindex="5" -->
Expand All @@ -54,7 +54,7 @@
<tr>
<th><fmt:message key="worklog.invoice.code" /></th>
<td>
<input type="text" name="worklogFilterInvoiceCode" value="${worklogFilterInvoiceCode}" maxlength="30"/>
<input type="text" name="worklogFilterInvoiceCode" value="${fn:escapeXml(worklogFilterInvoiceCode)}" maxlength="30"/>
</td>
<th></th>
<td></td>
Expand All @@ -66,10 +66,10 @@
<c:forEach items="${invoiceRelations}" var="relation">
<c:choose>
<c:when test="${relation.code == worklogFilterInvoiceRelation}">
<option value="${relation.code}" selected="selected"><fmt:message key="invoice.relation.${relation.code}" /></option>
<option value="${fn:escapeXml(relation.code)}" selected="selected"><fmt:message key="invoice.relation.${relation.code}" /></option>
</c:when>
<c:otherwise>
<option value="${relation.code}"><fmt:message key="invoice.relation.${relation.code}" /></option>
<option value="${fn:escapeXml(relation.code)}"><fmt:message key="invoice.relation.${relation.code}" /></option>
</c:otherwise>
</c:choose>
</c:forEach>
Expand All @@ -89,8 +89,8 @@
<div class="tabbertab">
<h2>Employee</h2>
<display:table id="worklogByEmployeeId" name="worklogByEmployee.list" requestURI="${requestURI}" export="true">
<display:column property="key" titleKey="worklog.employee" />
<display:column property="keyInfo" titleKey="worklog.employee.ldaplogin" media="csv excel xml pdf rtf"/>
<display:column property="key" titleKey="worklog.employee" escapeXml="true"/>
<display:column property="keyInfo" titleKey="worklog.employee.ldaplogin" media="csv excel xml pdf rtf" escapeXml="true" />
<display:column property="value.sum" titleKey="worklog.hours" format="{0,number,#,##0.00}"/>
<display:footer media="html">
<tr>
Expand All @@ -104,7 +104,7 @@
<div class="tabbertab">
<h2>Activity</h2>
<display:table id="worklogByAcrivityId" name="worklogByAcrivity.list" requestURI="${requestURI}" export="true">
<display:column property="key" titleKey="worklog.activity" />
<display:column property="key" titleKey="worklog.activity" escapeXml="true" />
<display:column property="value.sum" titleKey="worklog.hours" format="{0,number,#,##0.00}" />
<display:footer media="html">
<tr>
Expand All @@ -118,7 +118,7 @@
<div class="tabbertab">
<h2>Project</h2>
<display:table id="worklogByProjectId" name="worklogByProject.list" requestURI="${requestURI}" export="true">
<display:column property="key" titleKey="worklog.project" />
<display:column property="key" titleKey="worklog.project" escapeXml="true" />
<display:column property="value.sum" titleKey="worklog.hours" format="{0,number,#,##0.00}" />
<display:footer media="html">
<tr>
Expand All @@ -136,14 +136,14 @@
<tr>
<th>&nbsp;</th>
<c:forEach items="${worklogGrouppedAcrivity.list}" var="activity">
<th>${activity.key}</th>
<th>${fn:escapeXml(activity.key)}</th>
</c:forEach>
<th>Total</th>
</tr>
</thead>
<c:forEach items="${worklogByEmployee.list}" var="employee">
<tr class="odd">
<th>${employee.key}</th>
<th>${fn:escapeXml(employee.key)}</th>
<c:forEach items="${worklogGrouppedAcrivity.list}" var="activity">
<td style='text-align:right;'>
<fmt:formatNumber value="${worklogGroupped.map[employee.key][activity.key][false].sum}" maxFractionDigits="2" minFractionDigits="2" />
Expand Down Expand Up @@ -185,14 +185,14 @@
<tr>
<th>&nbsp;</th>
<c:forEach items="${projectProjectionList}" var="project">
<th>${project.key}</th>
<th>${fn:escapeXml(project.key)}</th>
</c:forEach>
<th><fmt:message key="worklog.total"/></th>
</tr>
</thead>
<c:forEach items="${employeeProjectionList}" var="employee">
<tr class="odd">
<th>${employee.key}</th>
<th>${fn:escapeXml(employee.key)}</th>
<c:forEach items="${projectProjectionList}" var="project">
<td style='text-align:right;'>
<fmt:formatNumber value="${worklogGroupped.map[employee.key][false][project.key].sum}" pattern="#,##0.0#" />
Expand All @@ -218,14 +218,14 @@
<tr>
<th>&nbsp;</th>
<c:forEach items="${activityProjectionList}" var="activity">
<th>${activity.key}</th>
<th>${fn:escapeXml(activity.key)}</th>
</c:forEach>
<th><fmt:message key="worklog.total"/></th>
</tr>
</thead>
<c:forEach items="${projectProjectionList}" var="project">
<tr class="odd">
<th>${project.key}</th>
<th>${fn:escapeXml(project.key)}</th>
<c:forEach items="${activityProjectionList}" var="activity">
<td style='text-align:right;'>
<fmt:formatNumber value="${worklogGroupped.map[false][activity.key][project.key].sum}" maxFractionDigits="2" minFractionDigits="2" />
Expand Down Expand Up @@ -262,37 +262,37 @@

<display:column titleKey="worklog.project" media="html" >
<!-- this is hack for sorting -->
<span class="invisible">${worklog.project.code}</span>
<acronym title="${worklog.project.name}">${worklog.project.code}</acronym>
<span class="invisible">${fn:escapeXml(worklog.project.code)}</span>
<acronym title="${fn:escapeXml(worklog.project.name)}">${fn:escapeXml(worklog.project.code)}</acronym>
</display:column>
<display:column property="project.code" titleKey="worklog.project" media="csv excel xml pdf rtf"/>
<display:column property="project.code" titleKey="worklog.project" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column titleKey="worklog.component" media="html">
<!-- this is hack for sorting -->
<span class="invisible">${worklog.component.code}</span>
<acronym title="${worklog.component.name}">${worklog.component.code}</acronym>
<span class="invisible">${fn:escapeXml(worklog.component.code)}</span>
<acronym title="${fn:escapeXml(worklog.component.name)}">${fn:escapeXml(worklog.component.code)}</acronym>
</display:column>
<display:column property="component.code" titleKey="worklog.component" media="csv excel xml rtf"/>
<display:column property="component.code" titleKey="worklog.component" media="csv excel xml rtf" escapeXml="true" />

<display:column titleKey="worklog.activity" media="html">
<!-- this is hack for sorting -->
<span class="invisible">${worklog.activity.code}</span>
<acronym title="${worklog.activity.name}">${worklog.activity.code}</acronym>
<span class="invisible">${fn:escapeXml(worklog.activity.code)}</span>
<acronym title="${fn:escapeXml(worklog.activity.name)}">${fn:escapeXml(worklog.activity.code)}</acronym>
</display:column>
<display:column property="activity.code" titleKey="worklog.activity" media="csv excel xml pdf rtf"/>
<display:column property="activity.code" titleKey="worklog.activity" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column titleKey="worklog.invoice" media="html" class="nowrap">
<c:if test="${worklog.invoice != null}">
<span class="invisible">${worklog.invoice.code}</span>
<acronym title="${worklog.invoice.name}">${worklog.invoice.code}</acronym>&nbsp;-&nbsp;<img src="${imgRoot}/<fmt:message key='invoice.state.img.${worklog.invoice.state}' />" alt="<fmt:message key='invoice.state.${worklog.invoice.state}' />" title="<fmt:message key='invoice.state.${worklog.invoice.state}' />" align="middle"/>
<span class="invisible">${fn:escapeXml(worklog.invoice.code)}</span>
<acronym title="${fn:escapeXml(worklog.invoice.name)}">${fn:escapeXml(worklog.invoice.code)}</acronym>&nbsp;-&nbsp;<img src="${imgRoot}/<fmt:message key='invoice.state.img.${worklog.invoice.state}' />" alt="<fmt:message key='invoice.state.${worklog.invoice.state}' />" title="<fmt:message key='invoice.state.${worklog.invoice.state}' />" align="middle"/>
</c:if>
</display:column>
<display:column property="invoice.code" titleKey="worklog.invoice" media="csv excel xml rtf"/>
<display:column property="invoice.code" titleKey="worklog.invoice" media="csv excel xml rtf" escapeXml="true" />

<display:column property="employee.user.contactInfo.displayName" titleKey="worklog.employee"/>
<display:column property="employee.user.contactInfo.displayName" titleKey="worklog.employee" escapeXml="true" />

<display:column property="descriptionGui" titleKey="worklog.description" media="html"/>
<display:column property="description" titleKey="worklog.description" media="csv excel xml pdf rtf"/>
<display:column property="description" titleKey="worklog.description" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column property="workFrom" titleKey="worklog.workFrom" decorator="cz.softinel.retra.core.utils.decorator.HourDecorator"/>
<display:column property="workTo" titleKey="worklog.workTo" decorator="cz.softinel.retra.core.utils.decorator.HourDecorator"/>
Expand Down
8 changes: 4 additions & 4 deletions src/main/webapp/WEB-INF/jsp/retra/WorklogView.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@
</tr>
<tr>
<th><fmt:message key="worklog.project" /></th>
<td>${worklog.project.code} - ${worklog.project.name}</td>
<td>${fn:escapeXml(worklog.project.code)} - ${fn:escapeXml(worklog.project.name)}</td>
</tr>
<tr>
<th><fmt:message key="worklog.component" /></th>
<td>
<c:if test="${worklog.component != null}" >${worklog.component.code} - ${worklog.component.name}</c:if>
<c:if test="${worklog.component != null}" >${fn:escapeXml(worklog.component.code)} - ${fn:escapeXml(worklog.component.name)}</c:if>
<c:if test="${worklog.component == null}" >-</c:if>
</td>
</tr>
<tr>
<th><fmt:message key="worklog.activity" /></th>
<td>${worklog.activity.code} - ${worklog.activity.name}</td>
<td>${fn:escapeXml(worklog.activity.code)} - ${fn:escapeXml(worklog.activity.name)}</td>
</tr>
<tr>
<th><fmt:message key="worklog.invoice" /></th>
<td>
<c:if test="${worklog.onInvoice}" >${worklog.invoice.code} (${worklog.invoice.name})&nbsp;-&nbsp;<img src="${imgRoot}/<fmt:message key='invoice.state.img.${worklog.invoice.state}' />" alt="<fmt:message key='invoice.state.${worklog.invoice.state}' />" title="<fmt:message key='invoice.state.${worklog.invoice.state}' />" align="absmiddle" /></c:if>
<c:if test="${worklog.onInvoice}" >${fn:escapeXml(worklog.invoice.code)} (${fn:escapeXml(worklog.invoice.name)})&nbsp;-&nbsp;<img src="${imgRoot}/<fmt:message key='invoice.state.img.${worklog.invoice.state}' />" alt="<fmt:message key='invoice.state.${worklog.invoice.state}' />" title="<fmt:message key='invoice.state.${worklog.invoice.state}' />" align="absmiddle" /></c:if>
<c:if test="${!worklog.onInvoice}" >-</c:if>
</td>
</tr>
Expand Down
22 changes: 11 additions & 11 deletions src/main/webapp/WEB-INF/jsp/retra/WorklogWeeklyOverview.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<td>&nbsp;</td>
<th><fmt:message key="worklog.employee" /></th>
<td>
<vc:select name="worklogFilterEmployee" valueObjects="${employees}" selected="${worklogFilterEmployee}"
<vc:select name="worklogFilterEmployee" valueObjects="${employees}" selected="${fn:escapeXml(worklogFilterEmployee)}"
valueProperty="pk" labelProperty="user.contactInfo.displayName" orderBy="user.contactInfo.displayName"
tabindex="3" />
</td>
Expand All @@ -22,12 +22,12 @@
<tr>
<th><fmt:message key="worklog.week" /></th>
<td>
<vc:select name="worklogFilterWeek" valueObjects="${weeks}" selected="${worklogFilterWeek}"
<vc:select name="worklogFilterWeek" valueObjects="${weeks}" selected="${fn:escapeXml(worklogFilterWeek)}"
valueProperty="code" labelProperty="label" orderBy="code" tabindex="1" />
</td>
<th><fmt:message key="worklog.project" /></th>
<td>
<vc:select name="worklogFilterProject" valueObjects="${projects}" selected="${worklogFilterProject}"
<vc:select name="worklogFilterProject" valueObjects="${projects}" selected="${fn:escapeXml(worklogFilterProject)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk"
tabindex="4">
<vc:select-option value="">--- <fmt:message key="worklog.allProjects" /> ---</vc:select-option>
Expand All @@ -39,7 +39,7 @@
<td>&nbsp;</td>
<th><fmt:message key="worklog.activity" /></th>
<td>
<vc:select name="worklogFilterActivity" valueObjects="${activities}" selected="${worklogFilterActivity}"
<vc:select name="worklogFilterActivity" valueObjects="${activities}" selected="${fn:escapeXml(worklogFilterActivity)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- <fmt:message key="worklog.allActivities" /> ---</vc:select-option>
</vc:select> <!-- tabindex="5" -->
Expand Down Expand Up @@ -69,20 +69,20 @@

<display:column titleKey="worklog.project" media="html" >
<!-- this is hack for sorting -->
<span class="invisible">${worklog.project.code}</span>
<span title="${worklog.project.name}">${worklog.project.code}</span>
<span class="invisible">${fn:escapeXml(worklog.project.code)}</span>
<span title="${fn:escapeXml(worklog.project.name)}">${fn:escapeXml(worklog.project.code)}</span>
</display:column>
<display:column property="project.code" titleKey="worklog.project" media="csv excel xml pdf rtf"/>
<display:column property="project.code" titleKey="worklog.project" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column titleKey="worklog.activity" media="html">
<!-- this is hack for sorting -->
<span class="invisible">${worklog.activity.code}</span>
<span title="${worklog.activity.name}">${worklog.activity.code}</span>
<span class="invisible">${fn:escapeXml(worklog.activity.code)}</span>
<span title="${fn:escapeXml(worklog.activity.name)}">${fn:escapeXml(worklog.activity.code)}</span>
</display:column>
<display:column property="activity.code" titleKey="worklog.activity" media="csv excel xml pdf rtf"/>
<display:column property="activity.code" titleKey="worklog.activity" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column property="descriptionGui" titleKey="worklog.description" media="html"/>
<display:column property="description" titleKey="worklog.description" media="csv excel xml pdf rtf"/>
<display:column property="description" titleKey="worklog.description" media="csv excel xml pdf rtf" escapeXml="true" />

<display:column property="workFrom" titleKey="worklog.workFrom" decorator="cz.softinel.retra.core.utils.decorator.HourDecorator"/>
<display:column property="workTo" titleKey="worklog.workTo" decorator="cz.softinel.retra.core.utils.decorator.HourDecorator"/>
Expand Down
46 changes: 23 additions & 23 deletions src/main/webapp/WEB-INF/jsp/system/ChangeVisualConfiguration.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<spring:bind path="visualConfigurationForm.skinName">
<th>Skin</th>
<td>
<vc:select name="${status.expression}" valueObjects="${skins}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${skins}" selected="${fn:escapeXml(status.value)}"
valueProperty="name" labelProperty="title" >
<vc:select-option value="">--- default ---</vc:select-option>
</vc:select>
Expand All @@ -25,7 +25,7 @@
<spring:bind path="visualConfigurationForm.timeSelectorImplementation">
<th>Time Selector</th>
<td>
<vc:select name="${status.expression}" valueObjects="${timeSelectors}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${timeSelectors}" selected="${fn:escapeXml(status.value)}"
valueProperty="name" labelProperty="title" >
<vc:select-option value="">--- default ---</vc:select-option>
</vc:select>
Expand All @@ -39,7 +39,7 @@
<th>Default activity for projects</th>
<td>
<spring:bind path="visualConfigurationForm.da">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -53,7 +53,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p0">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -62,7 +62,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a0">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -76,7 +76,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p1">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -85,7 +85,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a1">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -99,7 +99,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p2">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -108,7 +108,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a2">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -122,7 +122,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p3">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -131,7 +131,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a3">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -145,7 +145,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p4">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -154,7 +154,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a4">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -168,7 +168,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p5">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -177,7 +177,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a5">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -191,7 +191,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p6">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -200,7 +200,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a6">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -214,7 +214,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p7">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -223,7 +223,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a7">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -237,7 +237,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p8">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -246,7 +246,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a8">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand All @@ -260,7 +260,7 @@
<th>Project / Default activity</th>
<td>
<spring:bind path="visualConfigurationForm.p9">
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${projects}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- project ---</vc:select-option>
</vc:select>
Expand All @@ -269,7 +269,7 @@
</c:forEach>
</spring:bind>
<spring:bind path="visualConfigurationForm.a9">
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${status.value}"
<vc:select name="${status.expression}" valueObjects="${activities}" selected="${fn:escapeXml(status.value)}"
valueProperty="pk" labelProperty="codeAndName" orderBy="codeAndName" parentProperty="parent.pk">
<vc:select-option value="">--- default activity ---</vc:select-option>
</vc:select>
Expand Down
2 changes: 1 addition & 1 deletion src/main/webapp/WEB-INF/jsp/system/Login.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<form action="LoginAction.do?fkprm=true&originalUrl=${originalUrl}" method="post">
<p>Username</p>
<p>
<input type="text" name="loginName" value="${loginName}" />
<input type="text" name="loginName" value="${fn:escapeXml(loginName)}" />
</p>
<p>Password</p>
<p>
Expand Down
2 changes: 1 addition & 1 deletion src/main/webapp/WEB-INF/jsp/system/RetraError.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<div class="component dashboardComponentHalf">
<h2><fmt:message key="retra.error"/></h2>
<form action="Newsboard.do?fkprm=true" method="post">
<p><fmt:message key="retra.error.id"/>: ${errId}</p>
<p><fmt:message key="retra.error.id"/>: ${fn:escapeXml(errId)}</p>
<p>
<input type="submit" name="submit" class="button" value="<fmt:message key="newsboard.label"/>" />
</p>
Expand Down
21 changes: 21 additions & 0 deletions src/main/webapp/WEB-INF/lovs/years.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,26 @@
<field value="2018" key="year.2018" />
<field value="2019" key="year.2019" />
<field value="2020" key="year.2020" />
<field value="2021" key="year.2021" />
<field value="2022" key="year.2022" />
<field value="2023" key="year.2023" />
<field value="2024" key="year.2024" />
<field value="2025" key="year.2025" />
<field value="2026" key="year.2026" />
<field value="2027" key="year.2027" />
<field value="2028" key="year.2028" />
<field value="2029" key="year.2029" />
<field value="2030" key="year.2030" />
<field value="2030" key="year.2030" />
<field value="2031" key="year.2031" />
<field value="2032" key="year.2032" />
<field value="2033" key="year.2033" />
<field value="2034" key="year.2034" />
<field value="2035" key="year.2035" />
<field value="2036" key="year.2036" />
<field value="2037" key="year.2037" />
<field value="2038" key="year.2038" />
<field value="2039" key="year.2039" />
<field value="2040" key="year.2040" />
</lov>
</lovs>
15 changes: 13 additions & 2 deletions src/main/webapp/WEB-INF/news/system-news.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
<!-- TODO: must be done better structure, keys to message properties etc. -->

<news>
<item date="xx.yy.2022"
title="Build 2.11.0"
body="Fix of these issues:&lt;br />
&lt;a href='https://jira/browse/RETRA-55' target='_blank'>RETRA-55&lt;/a> - Retra logovani - zlepsit, prechod na log4j2.&lt;br />
&lt;a href='https://jira/browse/RETRA-56' target='_blank'>RETRA-56&lt;/a> - Retra je nachylna na XSS.&lt;br />
&lt;a href='https://jira/browse/RETRA-41' target='_blank'>RETRA-41&lt;/a> - Specialni znaky v nazvu projektu.&lt;br />
&lt;a href='https://jira/browse/RETRA-48' target='_blank'>RETRA-48&lt;/a> - Chyba při renderování textu worklogu.&lt;br />
"
author="Retra Team"
/>

<item date="27.6.2019"
title="Build 2.10.0"
body="Fix &lt;a href='https://jira/browse/RETRA-44' target='_blank'>RETRA-44&lt;/a> - Rozsireni exportu Timesheetu a Invoice o sloupec username."
Expand All @@ -26,7 +37,7 @@
body="Bugfixing of jokes generator."
author="Retra Team"
/>

<!--
<item date="22.5.2018"
title="Build 2.6.0"
body="Small refactoring of permissions and bugfix."
Expand Down Expand Up @@ -80,7 +91,7 @@
body="New integration with JIRA implemented (worklogs) and some bugfix."
author="Retra Team"
/>
<!-- item date="2.2.2015"
<item date="2.2.2015"
title="Build 2.0.0"
body="Invoice batch generating, filtering projects and employees for assign and some bugfix."
author="Retra Team"
Expand Down
4 changes: 2 additions & 2 deletions src/main/webapp/WEB-INF/resources/about.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ about.authors.label=Authors
about.contributors.label=Contributors

about.version.major=2
about.version.minor=10
about.version.minor=11
about.version.build=0

about.text=Retra is application for managing internal resources and simple internal information system

about.releasedOn=27.6.2019
about.releasedOn=xx.yy.2022

about.authors=Radek Pinc, Petr S\u00edgl
about.contributors=Bori\u0161a \u017divkovi\u0107, Pavel M\u00fcller, Jaroslava Faustov\u00e1, Jan N\u011bmec, Karel Mr\u00e1zek, David Smekal, Erik Szalai, Pavel Vlasat\u00fd, Martin Javorek, Milan \u010ce\u010drdle
4 changes: 2 additions & 2 deletions src/main/webapp/WEB-INF/resources/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ header.title=Retra
header.author=Radek Pinc, Petr S\u00edgl
header.description=Retra - Resource and Activity Tracker
header.keywords=Retra, Resource, Activity, Project, Managing, Tracker
footer.copyright=Copyright &copy; 2007-2019, <a href='About.do?fkprm=true'>Retra Team</a>
footer.copyright.noLink=Copyright &copy; 2007-2019, Retra Team
footer.copyright=Copyright &copy; 2007-2022, <a href='About.do?fkprm=true'>Retra Team</a>
footer.copyright.noLink=Copyright &copy; 2007-2022, Retra Team
newsboard.label=Newsboard
dashboard.label=Dashboard
login.label=Login
Expand Down