source: trunk/www/main.jsp @ 5479

Last change on this file since 5479 was 5479, checked in by Nicklas Nordborg, 12 years ago

Fixes #1546: Publish news as a rss feed

Added possibility to disable the RSS feed by commenting out the servlet definition in web.xml.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 9.3 KB
Line 
1<%-- $Id: main.jsp 5479 2010-11-08 07:33:46Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
5  Copyright (C) 2007 Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 3
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23
24  This is the front page of BASE. It displays a login form
25  and some of the relevant news items.
26
27  @param login The value to display in the login input field.
28  @param error An error message that should be displayed
29
30  @author Nicklas
31  @version 2.0
32--%>
33<%@ page pageEncoding="UTF-8" session="false"
34  import="net.sf.basedb.core.Application"
35  import="net.sf.basedb.core.SessionControl"
36  import="net.sf.basedb.core.DbControl"
37  import="net.sf.basedb.core.News"
38  import="net.sf.basedb.core.ItemQuery"
39  import="net.sf.basedb.core.ItemResultList"
40  import="net.sf.basedb.core.query.Orders"
41  import="net.sf.basedb.core.query.Hql"
42  import="net.sf.basedb.clients.web.Base"
43  import="net.sf.basedb.clients.web.util.HTML"
44  import="net.sf.basedb.util.formatter.Formatter"
45  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
46  import="net.sf.basedb.clients.web.servlet.RssNewsFeed"
47  import="net.sf.basedb.util.Values"
48  import="java.util.Date"
49%>
50<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
51<%
52final String login = Values.getString(request.getParameter("login"), "");
53final String error = Values.getString(request.getParameter("error"), null);
54final String root = request.getContextPath()+"/";
55
56final SessionControl sc = Base.getSessionControl(pageContext, true);
57final String ID = sc.getId();
58final Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
59final DbControl dc = sc.newDbControl();
60String broadcastTitle = (String)application.getAttribute("broadcast.title");
61String broadcastMessage = (String)application.getAttribute("broadcast.message");
62boolean denyLogin = Boolean.TRUE.equals(application.getAttribute("broadcast.deny-login"));
63ItemResultList<News> news = null;
64try
65{
66  %>
67  <base:page type="default" title="">
68  <base:head scripts="md5.js" styles="login.css">
69    <script language="JavaScript" type="text/javascript">
70    // Set foucs on the login form
71    function init()
72    {
73      setFocus();
74      top.frames['footnote'].location.reload();
75    }
76   
77    // Set the focus on either the login or password field.
78    function setFocus()
79    {
80      frm = document.forms['login'];
81      if (frm.login.value == '' && window.parent.lastLogin) frm.login.value = window.parent.lastLogin;
82      if (frm.encrypt && window.parent.encrypt != undefined) frm.encrypt.checked = window.parent.encrypt;
83      if (frm.login.value == '')
84      {
85        frm.login.focus();
86      }
87      else
88      {
89        frm.password.focus();
90        frm.password.select();
91      }
92    }
93    function saveLogin()
94    {
95      var frm = document.forms['login'];
96      window.parent.lastLogin = frm.login.value;
97     
98      if (frm.encrypt)
99      {
100        window.parent.encrypt = frm.encrypt.checked;
101        if (frm.encrypt.checked)
102        {
103          var password = frm.password.value;
104          var md5password = hex_md5(password);
105          md5password = hex_md5(md5password + ':<%=sc.getChallenge()%>');
106          frm.encrypted_password.value = md5password;
107          frm.password.value = '';
108        }
109      }
110      return true;
111    }
112    function doLogin()
113    {
114      var denyLogin = <%=denyLogin ? "true" : "false"%>;
115      if (denyLogin && !confirm('Login has been disabled by an administrator. Do you want to continue anyway?'))
116      {
117        return false;
118      }
119      saveLogin();
120      var frm = document.forms['login'];
121      frm.submit();
122    }
123    function showLoginForm()
124    {
125      Main.show('loginForm');
126      Main.hide('denyLogin');
127    }
128    </script>
129  </base:head>
130 
131  <base:body onload="init();">
132 
133    <table border=0 cellspacing=5 cellpadding=0 width="80%" align="center">
134    <tr>
135    <td>
136      <br><br>
137      <table class="loginform" width="100%" border="0" align="center">
138      <%
139      if (error != null) 
140      {
141        %>
142        <tr><td colspan="2" align="center"><div class="error"><%=error%></div></td></tr>
143        <%
144      }
145      %>
146      <tr>
147        <td style="vertical-align: middle; width; 25%;">
148          <div align="center">
149            <img src="images/baselogo.png" alt="BASE logo" width=122 height=58>
150          </div>
151        </td>
152        <td style="width: 75%;">
153          <form name="login" action="login.jsp" method="post" onsubmit="doLogin();">
154          <input type="hidden" name="ID" value="<%=ID%>">
155          <input type="hidden" name="nextpage" value="<%=root%>my_base/user/index.jsp">
156          <input type="hidden" name="encrypted_password" value="">
157         
158          <div id="loginForm" <%=denyLogin ? "style=\"display:none;\"" : ""%>>
159          <table border="0" cellspacing="0" cellpadding="2">
160          <tr>
161            <td class="prompt">Login</td>
162            <td><input class="text" type="text" name="login" value="<%=HTML.encodeTags(login)%>" 
163              size="15" maxlength="100"
164              style="width: 120px"></td>
165          </tr>
166          <tr>
167            <td class="prompt">Password</td>
168            <td>
169              <input class="text" type="password" name="password" size="15" maxlength="80"
170                onkeypress="return Forms.submitOnEnter(event, doLogin)"
171                style="width: 120px">
172            </td>
173            <td><base:button image="login.png" 
174              onclick="doLogin();" title="Login" tooltip="<%=HTML.encodeTags(broadcastTitle)%>" /></td>
175          </tr>
176          <%
177          if (Application.isUsingInternalAuthentication())
178          {
179            %>
180            <tr>
181              <td class="prompt">Encrypt password</td>
182              <td>
183                <input type="checkbox" name="encrypt" <%=false ? "" : "checked"%> value="1"><br>
184              </td>
185            </tr>
186            <%
187          }
188          %>
189          <tr>
190            <td colspan="3">
191            <%
192            String forgotPassword = sc.getClientDefaultSetting("server.forgotten.password");
193            String getAccount = sc.getClientDefaultSetting("server.get.account");
194            if (forgotPassword != null)
195            {
196              %>
197              <base:icon image="bullet.gif" />
198              <a href="javascript:Main.openPopup('info/forgot_password.jsp?ID=<%=ID%>', 'ForgotPassword', 500, 300)" title="Click here if you have forgotten your password">Forgot your password?</a>
199              <%
200            }
201            if (getAccount != null)
202            {
203              %>
204              <base:icon image="bullet.gif" />
205              <a href="javascript:Main.openPopup('info/get_account.jsp?ID=<%=ID%>', 'GetAccount', 500, 300)" title="Click here if you want to get an account on this server">Get an account!</a>
206              <%
207            }
208            %>
209            </td>
210          </tr>
211          </table>
212          </div>
213          <div id="denyLogin" <%=denyLogin ? "style=\"width: 90%; margin-left: 5%;\"" : "style=\"display:none;\""%> class="news">
214            <div class="item">
215            <span class="headline"><%=HTML.encodeTags(broadcastTitle) %> (login disabled)</span><br>
216            <span class="text"><%=HTML.niceFormat(broadcastMessage)%></span>
217            </div>
218            <table>
219              <tr><td><base:button title="Login anyway" onclick="showLoginForm()" 
220                image="login.png" tooltip="At your own risk!"/></td></tr>
221            </table>
222          </div>
223          </form>
224        </td>
225      </tr>
226      </table>
227      <br>
228      <br>
229     
230      <%
231      String aboutServer = sc.getClientDefaultSetting("server.about");
232      if (aboutServer != null)
233      {
234        %>
235        <h3>About this server</h3>
236        <p>
237          <%=aboutServer%>
238        </p>
239        <base:icon image="bullet.gif" />
240        <a href="javascript:Main.openPopup('info/about.jsp?ID=<%=ID%>&page=about', 'About', 500, 350)">More about this server</a>
241        <%
242      }
243      %>
244     
245      <h3>News and announcements
246      <%
247      if (RssNewsFeed.isEnabled()) 
248      {
249        %>
250        <a href="info/news.rss" 
251          title="Subscribe to news from this BASE server"
252          ><base:icon image="rss.png" /></a>
253        <%
254      }
255      %>
256      </h3>
257      <div id="news" class="news">
258      <%
259      if (broadcastTitle != null)
260      {
261        %>
262        <div class="item"><base:icon image="warning.gif" />
263          <span class="date"><%=dateFormatter.format(new Date())%></span>
264          <span class="headline"><%=HTML.encodeTags(broadcastTitle)%><%=denyLogin ? " (login disabled)" : "" %></span><br>
265          <span class="text"><%=HTML.niceFormat(broadcastMessage)%></span>
266        </div>
267        <% 
268      }
269     
270      ItemQuery<News> query = News.getQuery();
271      query.order(Orders.desc(Hql.property("newsDate")));
272      query.order(Orders.desc(Hql.property("id")));
273      query.setCacheResult(true);
274      query.setReturnTotalCount(true);
275      query.setMaxResults(10);
276      news = query.list(dc);
277      for (News n : news)
278      {
279        %>
280        <div class="item">
281          <span class="date"><%=dateFormatter.format(n.getNewsDate())%></span>
282          <span class="headline"><%=HTML.encodeTags(n.getName())%></span><br>
283          <span class="text"><%=HTML.niceFormat(n.getDescription())%></span>
284        </div>
285        <%
286      }
287      if (news.getTotalCount() > 10)
288      {
289        %>
290        <base:icon image="bullet.gif" /><a href="info/news.jsp" 
291          title="Show older news..."><%=news.getTotalCount()-10%> more</a>
292        <%
293      }
294      %>
295      </div>
296    </td>
297    </tr>
298    </table>
299  </base:body>
300  </base:page>
301  <%
302}
303finally
304{
305  if (dc != null) dc.close();
306}
307%>
308
Note: See TracBrowser for help on using the repository browser.