available-plugins.jsp 19.9 KB
Newer Older
Gaston Dombiak's avatar
Gaston Dombiak committed
1
<%--
2 3 4
  - Licensed under the Apache License, Version 2.0 (the "License");
  - you may not use this file except in compliance with the License.
  - You may obtain a copy of the License at
Gaston Dombiak's avatar
Gaston Dombiak committed
5
  -
6 7 8 9 10 11 12
  -     http://www.apache.org/licenses/LICENSE-2.0
  -
  - Unless required by applicable law or agreed to in writing, software
  - distributed under the License is distributed on an "AS IS" BASIS,
  - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  - See the License for the specific language governing permissions and
  - limitations under the License.
Gaston Dombiak's avatar
Gaston Dombiak committed
13 14
--%>

15 16
<%@ page errorPage="error.jsp" import="org.jivesoftware.util.ByteFormat,
                                       org.jivesoftware.util.Version,
17
                                       org.jivesoftware.openfire.XMPPServer,
Sven Tantau's avatar
Sven Tantau committed
18 19
                                       org.jivesoftware.openfire.container.Plugin,
                                       org.jivesoftware.util.StringUtils"
20
    %>
21 22 23
<%@ page import="org.jivesoftware.openfire.container.PluginManager" %>
<%@ page import="org.jivesoftware.openfire.update.AvailablePlugin" %>
<%@ page import="org.jivesoftware.openfire.update.UpdateManager" %>
24 25 26 27
<%@ page import="java.io.File" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Collections" %>
28
<%@ page import="java.util.Comparator" %>
29 30 31
<%@ page import="java.util.List" %>
<%@ page import="org.jivesoftware.util.JiveGlobals"%>
<%@ page import="java.util.Date"%>
Gaston Dombiak's avatar
Gaston Dombiak committed
32 33 34 35

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>

36 37
<jsp:useBean id="webManager" class="org.jivesoftware.util.WebManager"  />
<% webManager.init(request, response, session, application, out ); %>
Gaston Dombiak's avatar
Gaston Dombiak committed
38 39 40 41 42 43

<%
    boolean downloadRequested = request.getParameter("download") != null;
    String url = request.getParameter("url");

    UpdateManager updateManager = XMPPServer.getInstance().getUpdateManager();
44 45
    List<AvailablePlugin> plugins = updateManager.getNotInstalledPlugins();

46
    String time = JiveGlobals.getProperty("update.lastCheck");
47
    // Sort plugins alphabetically
48 49 50
    Collections.sort(plugins, new Comparator<AvailablePlugin>() {
        public int compare(AvailablePlugin o1, AvailablePlugin o2) {
            return o1.getName().compareTo(o2.getName());
51 52
        }
    });
Gaston Dombiak's avatar
Gaston Dombiak committed
53 54 55 56

    if (downloadRequested) {
        // Download and install new plugin
        updateManager.downloadPlugin(url);
57 58
        // Log the event
        webManager.logEvent("downloaded new plugin from "+url, null);
Gaston Dombiak's avatar
Gaston Dombiak committed
59 60 61 62 63
    }

%>

<html>
64 65 66
<head>
<title><fmt:message key="plugin.available.title"/></title>
<meta name="pageID" content="available-plugins"/>
67 68 69 70

<style type="text/css">

.light-gray-border {
71
    border-color: #ccc;
72 73 74
    border-style: solid;
    border-width: 1px 1px 1px 1px;
    padding: 5px;
75
	-moz-border-radius: 3px;
76 77
}

Derek DeMoro's avatar
Derek DeMoro committed
78

79 80 81 82 83 84

.table-header {
    text-align: left;
    font-family: verdana, arial, helvetica, sans-serif;
    font-size: 8pt;
    font-weight: bold;
85
    border-color: #ccc;
86
    border-style: solid;
87
    border-width: 1px 0 1px 0;
88 89 90
    padding: 5px;
}

91 92 93 94 95
.row-header {
    text-align: left;
    font-family: verdana, arial, helvetica, sans-serif;
    font-size: 8pt;
    font-weight: bold;
96
    border-color: #ccc;
97
    border-style: solid;
98
    border-width: 1px 1px 1px 0;
99 100 101 102 103 104 105 106
    padding: 5px;
}

.table-header-left {
    text-align: left;
    font-family: verdana, arial, helvetica, sans-serif;
    font-size: 8pt;
    font-weight: bold;
107
    border-color: #ccc;
108
    border-style: solid;
109
    border-width: 1px 0 1px 1px;
110 111 112 113 114 115 116 117 118
    padding: 5px;

}

.table-header-right {
    text-align: left;
    font-family: verdana, arial, helvetica, sans-serif;
    font-size: 8pt;
    font-weight: bold;
119
    border-color: #ccc;
120
    border-style: solid;
121
    border-width: 1px 1px 1px 0;
122 123 124 125 126 127
    padding: 5px;
}

.line-bottom-border {
    font-family: verdana, arial, helvetica, sans-serif;
    font-size: 9pt;
128
    border-color: #e3e3e3;
129
    border-style: solid;
130
    border-width: 0 0 1px 0;
131 132 133 134 135 136
    padding: 5px;
}


</style>

137
<script src="dwr/engine.js" type="text/javascript"></script>
138 139
<script src="dwr/util.js" type="text/javascript"></script>
<script src="dwr/interface/downloader.js" type="text/javascript"></script>
140
<script type="text/javascript">
141 142

    var downloading;
143
    function downloadPlugin(url, id) {
144
        downloading = true;
145
        document.getElementById(id + "-image").innerHTML = '<img src="images/working-16x16.gif" border="0"/>';
Derek DeMoro's avatar
Derek DeMoro committed
146
        document.getElementById(id).style.background = "#FFFFCC";
147 148 149 150 151
        setTimeout("startDownload('" + url + "','" + id + "')", 5000);
    }

    function startDownload(url, id) {
        downloader.installPlugin(downloadComplete, url, id);
152 153
    }

154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
    function downloadComplete(status) {
        downloading = false;
        if (!status.successfull) {
            document.getElementById(status.hashCode + "-image").innerHTML = '<img src="images/add-16x16.gif" border="0"/>';
            document.getElementById(status.hashCode).style.background = "#FFFFFF";
            document.getElementById("errorMessage").style.display = '';
            document.getElementById(status.hashCode).style.display = '';
            document.getElementById(status.hashCode + "-row").style.display = 'none';
            setTimeout("closeErrorMessage()", 5000);
        }
        else {
            document.getElementById(status.hashCode).style.display = 'none';
            document.getElementById(status.hashCode + "-row").style.display = '';
            setTimeout("fadeIt('" + status.hashCode + "')", 3000);
        }
169 170
    }

171 172
    function closeErrorMessage(){
        Effect.Fade("errorMessage");
173 174 175 176 177
    }

    function fadeIt(id) {
        Effect.Fade(id + "-row");
    }
178 179


180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
    DWREngine.setErrorHandler(handleError);

    function handleError(error) {
    }

    // Handle leaving of page validation.
    window.onbeforeunload = function (evt) {
        if (!downloading) {
            return;
        }
        var message = '<fmt:message key="plugin.available.cancel.redirect" />';
        if (typeof evt == 'undefined') {
            evt = window.event;
        }
        if (evt) {
            evt.returnValue = message;
        }
        return message;
    }
199

Derek DeMoro's avatar
Derek DeMoro committed
200 201 202 203 204 205 206 207 208 209 210 211 212 213
    function updatePluginsList(){
        document.getElementById("reloaderID").innerHTML = '<img src="images/working-16x16.gif" border="0"/>';
        downloader.updatePluginsList(pluginsListUpdated);
    }

    function updatePluginsListNow(){
        document.getElementById("reloader2").innerHTML = '<img src="images/working-16x16.gif" border="0"/>';
        downloader.updatePluginsList(pluginsListUpdated);
    }

    function pluginsListUpdated(){
        window.location.href = "available-plugins.jsp";
    }

214

215 216 217 218
</script>
</head>

<body>
Gaston Dombiak's avatar
Gaston Dombiak committed
219 220

<p>
221
    <fmt:message key="plugin.available.info"/>
Gaston Dombiak's avatar
Gaston Dombiak committed
222
</p>
223

Gaston Dombiak's avatar
Gaston Dombiak committed
224 225
<p>

226
<%if(time == null){ %>
227
<div style="padding:10px;background:#FFEBB5;border:1px solid #DEB24A;width:75%;">
Derek DeMoro's avatar
Derek DeMoro committed
228
    <fmt:message key="plugin.available.no.list" />&nbsp;<span id="reloaderID"><a href="javascript:updatePluginsList();"><fmt:message key="plugin.available.list" /></a></span>
229 230
</div>
<br/>
231
<div style="width:75%;">
232 233 234 235 236 237 238 239 240 241 242
    <p>
   <fmt:message key="plugin.available.no.list.description" />
</p>

<% if(!updateManager.isServiceEnabled()){ %>
<fmt:message key="plugin.available.auto.update.currently" /> <b><fmt:message key="plugin.available.auto.update.currently.disabled" /></b>. <a href="manage-updates.jsp"><fmt:message key="plugin.available.click.here" /></a> <fmt:message key="plugin.available.change" />
<% } %>
</div>
<% } else {%>


243 244 245
<div id="errorMessage" class="error" style="display:none;">
    <fmt:message key="plugin.available.error.downloading" />
</div>
246 247


248
<div class="light-gray-border" style="padding:10px;">
Gaston Dombiak's avatar
Gaston Dombiak committed
249 250
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<thead>
251
    <tr style="background:#eee;">
252
        <td class="table-header-left">&nbsp;</td>
Derek DeMoro's avatar
Derek DeMoro committed
253
        <td nowrap colspan="2" class="table-header"><fmt:message key="plugin.available.open_source"/></td>
254 255 256 257 258
        <td nowrap class="table-header"><fmt:message key="plugin.available.description"/></td>
        <td nowrap class="table-header"><fmt:message key="plugin.available.version"/></td>
        <td nowrap class="table-header"><fmt:message key="plugin.available.author"/></td>
        <td nowrap class="table-header">File Size</td>
        <td nowrap class="table-header-right"><fmt:message key="plugin.available.install"/></td>
Gaston Dombiak's avatar
Gaston Dombiak committed
259 260 261 262 263
    </tr>
</thead>
<tbody>

<%
264
    // If only the admin plugin is installed, show "none".
Gaston Dombiak's avatar
Gaston Dombiak committed
265 266
    if (plugins.isEmpty()) {
%>
267 268 269
<tr>
    <td align="center" colspan="8"><fmt:message key="plugin.available.no_plugin"/></td>
</tr>
Gaston Dombiak's avatar
Gaston Dombiak committed
270 271 272 273 274 275 276 277
<%
    }

    for (AvailablePlugin plugin : plugins) {
        String pluginName = plugin.getName();
        String pluginDescription = plugin.getDescription();
        String pluginAuthor = plugin.getAuthor();
        String pluginVersion = plugin.getLatestVersion();
278 279 280 281 282 283
        ByteFormat byteFormat = new ByteFormat();
        String fileSize = byteFormat.format(plugin.getFileSize());

        if (plugin.isCommercial()) {
            continue;
        }
Gaston Dombiak's avatar
Gaston Dombiak committed
284
%>
285 286 287
<tr id="<%= plugin.hashCode()%>">
    <td width="1%" class="line-bottom-border">
        <% if (plugin.getIcon() != null) { %>
Sven Tantau's avatar
Sven Tantau committed
288
        <img src="<%= StringUtils.escapeForXML(plugin.getIcon()) %>" width="16" height="16" alt="Plugin">
289 290 291 292 293 294
        <% }
        else { %>
        <img src="images/plugin-16x16.gif" width="16" height="16" alt="Plugin">
        <% } %>
    </td>
    <td width="20%" nowrap class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
295
        <%= (pluginName != null ? StringUtils.escapeHTMLTags(pluginName) : "") %> &nbsp;
296 297 298
    </td>
    <td nowrap valign="top" class="line-bottom-border">
        <% if (plugin.getReadme() != null) { %>
Sven Tantau's avatar
Sven Tantau committed
299
        <a href="<%= StringUtils.escapeForXML(plugin.getReadme()) %>"
300 301 302 303
            ><img src="images/doc-readme-16x16.gif" width="16" height="16" border="0" alt="README"></a>
        <% }
        else { %> &nbsp; <% } %>
        <% if (plugin.getChangelog() != null) { %>
Sven Tantau's avatar
Sven Tantau committed
304
        <a href="<%= StringUtils.escapeForXML(plugin.getChangelog()) %>"
305 306 307 308 309
            ><img src="images/doc-changelog-16x16.gif" width="16" height="16" border="0" alt="changelog"></a>
        <% }
        else { %> &nbsp; <% } %>
    </td>
    <td width="60%" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
310
        <%= pluginDescription != null ? StringUtils.escapeHTMLTags(pluginDescription) : "" %>
311 312
    </td>
    <td width="5%" align="center" valign="top" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
313
        <%= pluginVersion != null ? StringUtils.escapeHTMLTags(pluginVersion) : "" %>
314 315
    </td>
    <td width="15%" nowrap valign="top" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
316
        <%= pluginAuthor != null ? StringUtils.escapeHTMLTags(pluginAuthor) : "" %>  &nbsp;
317
    </td>
318
    <td width="15%" nowrap valign="top" class="line-bottom-border" align="right">
Sven Tantau's avatar
Sven Tantau committed
319
        <%= StringUtils.escapeHTMLTags(fileSize) %>
320 321 322 323 324 325 326 327 328 329 330 331
    </td>
    <td width="1%" align="center" valign="top" class="line-bottom-border">
        <%
            String updateURL = plugin.getURL();
            if (updateManager.isPluginDownloaded(updateURL)) {
        %>
        &nbsp;
        <%  }
        else { %>
        <%

        %>
Sven Tantau's avatar
Sven Tantau committed
332
        <a href="javascript:downloadPlugin('<%=StringUtils.escapeForXML(updateURL)%>', '<%= plugin.hashCode()%>')"><span id="<%= plugin.hashCode() %>-image"><img src="images/add-16x16.gif" width="16" height="16" border="0"
333
                                                                                                                                        alt="<fmt:message key="plugin.available.download" />"></span></a>
334 335 336 337

        <% } %>
    </td>
</tr>
338
<tr id="<%= plugin.hashCode()%>-row" style="display:none;background: #E7FBDE;">
339
    <td width="1%" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
340
        <img src="<%= StringUtils.escapeForXML(plugin.getIcon())%>" width="16" height="16" alt=""/>
341
    </td>
Sven Tantau's avatar
Sven Tantau committed
342
    <td colspan="6" nowrap class="line-bottom-border"><%= StringUtils.escapeHTMLTags(plugin.getName())%> <fmt:message key="plugin.available.installation.success" /></td>
343
    <td class="line-bottom-border" align="center">
344
        <img src="images/success-16x16.gif" height="16" width="16" alt=""/>
345 346
    </td>
</tr>
347 348 349
<%
    }
%>
350
<tr><td><br/></td></tr>
Daniel Henninger's avatar
Daniel Henninger committed
351
<tr style="background:#eee;">
352
    <td class="table-header-left">&nbsp;</td>
Derek DeMoro's avatar
Derek DeMoro committed
353
    <td nowrap colspan="7" class="row-header"><fmt:message key="plugin.available.commercial_plugins" /></td>
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
</tr>
<%
    for (AvailablePlugin plugin : plugins) {
        String pluginName = plugin.getName();
        String pluginDescription = plugin.getDescription();
        String pluginAuthor = plugin.getAuthor();
        String pluginVersion = plugin.getLatestVersion();
        ByteFormat byteFormat = new ByteFormat();
        String fileSize = byteFormat.format(plugin.getFileSize());

        if (!plugin.isCommercial()) {
            continue;
        }
%>
<tr id="<%= plugin.hashCode()%>">
    <td width="1%" class="line-bottom-border">
        <% if (plugin.getIcon() != null) { %>
Sven Tantau's avatar
Sven Tantau committed
371
        <img src="<%= StringUtils.escapeForXML(plugin.getIcon()) %>" width="16" height="16" alt="Plugin">
372 373 374 375 376 377
        <% }
        else { %>
        <img src="images/plugin-16x16.gif" width="16" height="16" alt="Plugin">
        <% } %>
    </td>
    <td width="20%" nowrap class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
378
        <%= (pluginName != null ? StringUtils.escapeHTMLTags(pluginName) : "") %> &nbsp;
379 380 381
    </td>
    <td nowrap valign="top" class="line-bottom-border">
        <% if (plugin.getReadme() != null) { %>
Sven Tantau's avatar
Sven Tantau committed
382
        <a href="<%= StringUtils.escapeForXML(plugin.getReadme()) %>"
383 384 385 386
            ><img src="images/doc-readme-16x16.gif" width="16" height="16" border="0" alt="README"></a>
        <% }
        else { %> &nbsp; <% } %>
        <% if (plugin.getChangelog() != null) { %>
Sven Tantau's avatar
Sven Tantau committed
387
        <a href="<%= StringUtils.escapeForXML(plugin.getChangelog()) %>"
388 389 390 391 392
            ><img src="images/doc-changelog-16x16.gif" width="16" height="16" border="0" alt="changelog"></a>
        <% }
        else { %> &nbsp; <% } %>
    </td>
    <td width="60%" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
393
        <%= pluginDescription != null ? StringUtils.escapeHTMLTags(pluginDescription) : "" %>
394 395
    </td>
    <td width="5%" align="center" valign="top" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
396
        <%= pluginVersion != null ? StringUtils.escapeHTMLTags(pluginVersion) : "" %>
397 398
    </td>
    <td width="15%" nowrap valign="top" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
399
        <%= pluginAuthor != null ? StringUtils.escapeHTMLTags(pluginAuthor) : "" %>  &nbsp;
400 401
    </td>
    <td width="15%" nowrap valign="top" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
402
        <%= StringUtils.escapeHTMLTags(fileSize)  %>
403 404 405 406 407 408 409 410 411 412
    </td>
    <td width="1%" align="center" valign="top" class="line-bottom-border">
        <%
            String updateURL = plugin.getURL();
            if (updateManager.isPluginDownloaded(updateURL)) {
        %>
        &nbsp;
        <%  }
        else { %>

Sven Tantau's avatar
Sven Tantau committed
413
        <span id="<%= plugin.hashCode() %>-image"><a href="javascript:downloadPlugin('<%=StringUtils.escapeForXML(updateURL) %>', '<%= plugin.hashCode() %>')"><img src="images/add-16x16.gif" width="16" height="16" border="0"
414 415 416 417
                                                                                                                                        alt="<fmt:message key="plugin.available.download" />"></a></span>
        <% } %>
    </td>
</tr>
418 419
<tr id="<%= plugin.hashCode()%>-row" style="display:none;background: #E7FBDE;">
     <td width="1%" class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
420
        <img src="<%= StringUtils.escapeForXML(plugin.getIcon())%>" width="16" height="16" alt=""/>
421
    </td>
Sven Tantau's avatar
Sven Tantau committed
422
    <td colspan="6" nowrap class="line-bottom-border"><%= StringUtils.escapeHTMLTags(plugin.getName())%> <fmt:message key="plugin.available.installation.success" /></td>
423
    <td class="line-bottom-border" align="center">
424
        <img src="images/success-16x16.gif" height="16" width="16" alt=""/>
425 426
    </td>
</tr>
427
<%
Gaston Dombiak's avatar
Gaston Dombiak committed
428 429
    }
%>
430

Gaston Dombiak's avatar
Gaston Dombiak committed
431 432
</tbody>
</table>
433

Gaston Dombiak's avatar
Gaston Dombiak committed
434 435
</div>

436 437 438 439 440
<br/>


<%
    final XMPPServer server = XMPPServer.getInstance();
441
    Version serverVersion = server.getServerInfo().getVersion();
442 443
    List<Plugin> outdatedPlugins = new ArrayList<Plugin>();
    for (Plugin plugin : server.getPluginManager().getPlugins()) {
444
        String pluginVersion = server.getPluginManager().getMinServerVersion(plugin);
445 446 447 448 449
        if (pluginVersion != null) {
        	Version pluginMinServerVersion = new Version(pluginVersion);
        	if (pluginMinServerVersion.isNewerThan(serverVersion)) {
                outdatedPlugins.add(plugin);
        	}
450 451 452 453 454 455
        }
    }

    if (outdatedPlugins.size() > 0) {
%>
    <div class="light-gray-border" style="padding:10px;">
456
    <p><fmt:message key="plugin.available.outdated" /><a href="http://www.igniterealtime.org/projects/openfire/" target="_blank"><fmt:message key="plugin.available.outdated.update" /></a></p>
457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477
    <table cellpadding="0" cellspacing="0" border="0" width="100%">


        <%
            PluginManager pluginManager = server.getPluginManager();
            for (Plugin plugin : outdatedPlugins) {
                String pluginName = pluginManager.getName(plugin);
                String pluginDescription = pluginManager.getDescription(plugin);
                String pluginAuthor = pluginManager.getAuthor(plugin);
                String pluginVersion = pluginManager.getVersion(plugin);
                File pluginDir = pluginManager.getPluginDirectory(plugin);
                File icon = new File(pluginDir, "logo_small.png");
                boolean readmeExists = new File(pluginDir, "readme.html").exists();
                boolean changelogExists = new File(pluginDir, "changelog.html").exists();
                if (!icon.exists()) {
                    icon = new File(pluginDir, "logo_small.gif");
                }
        %>
        <tr>
            <td class="line-bottom-border" width="1%">
                <% if (icon.exists()) { %>
478
                <img src="/geticon?plugin=<%= URLEncoder.encode(pluginDir.getName(), "utf-8") %>&showIcon=true&decorator=none" width="16" height="16" alt="Plugin">
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499
                <% }
                else { %>
                <img src="images/plugin-16x16.gif" width="16" height="16" alt="Plugin">
                <% } %>
            </td>
            <td class="line-bottom-border" width="1%" nowrap>
                <%= pluginName%>
            </td>
            <td nowrap class="line-bottom-border">
                <p><% if (readmeExists) { %>
                    <a href="plugin-admin.jsp?plugin=<%= URLEncoder.encode(pluginDir.getName(), "utf-8") %>&showReadme=true&decorator=none"
                        ><img src="images/doc-readme-16x16.gif" width="16" height="16" border="0" alt="README"></a>
                    <% }
                    else { %> &nbsp; <% } %>
                    <% if (changelogExists) { %>
                    <a href="plugin-admin.jsp?plugin=<%= URLEncoder.encode(pluginDir.getName(), "utf-8") %>&showChangelog=true&decorator=none"
                        ><img src="images/doc-changelog-16x16.gif" width="16" height="16" border="0" alt="changelog"></a>
                    <% }
                    else { %> &nbsp; <% } %></p>
            </td>
            <td class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
500
                <%= StringUtils.escapeHTMLTags(pluginDescription) %>
501 502
            </td>
            <td class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
503
                <%= StringUtils.escapeHTMLTags(pluginVersion) %>
504 505
            </td>
            <td class="line-bottom-border">
Sven Tantau's avatar
Sven Tantau committed
506
                <%= StringUtils.escapeHTMLTags(pluginAuthor) %>
507 508 509 510 511 512 513 514 515
            </td>
        </tr>
        <% }%>
  </table>

        <%} %>

</div>
<br/>
516
 <%
517
        if(time != null){
518 519
            Date date = new Date(Long.parseLong(time));
            time = JiveGlobals.formatDate(date);
520
        }
521 522
    %>
       <p>
523
           <% if(time != null) { %>
524
        <fmt:message key="plugin.available.autoupdate" /> <%= time%>.
525
           <% } %>
526
           <% if(updateManager.isServiceEnabled()){%>
527 528 529 530
              <fmt:message key="plugin.available.autoupdate.on" />
           <% } else { %>
                <fmt:message key="plugin.available.autoupdate.off" />
           <% } %>
Derek DeMoro's avatar
Derek DeMoro committed
531
           &nbsp;<span id="reloader2"><a href="javascript:updatePluginsListNow()"><fmt:message key="plugin.available.manual.update" /></a></span>
532 533
        </p>
           <% } %>
534

535
</body>
Sven Tantau's avatar
Sven Tantau committed
536
</html>