source: trunk/www/my_base/user/settings.jsp @ 6428

Last change on this file since 6428 was 6428, checked in by Nicklas Nordborg, 9 years ago

References #1599: Convert authentication plug-in system to an extension point

Added a boolean flag to extended-properties.xml file to make it possible to mark some properties as editable by an administrator only.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 12.5 KB
Line 
1<%-- $Id: settings.jsp 6428 2014-03-03 14:53:29Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
5  Copyright (C) 2007 Martin Svensson
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 page is used to display and modify the attributes of
25  the logged in user. It displays a tabbed dialogue:
26
27  @param page
28    The name active page of the tabbed dialog.
29    - contact: Contact information for the user, address, phone, email, etc.
30    - password: The password for the user
31    - other: Other information
32
33  Saving the form invokes the submit_user.jsp page with cmd=SaveSettings
34
35  @author Nicklas
36  @version 2.0
37--%>
38<%@ page pageEncoding="UTF-8" session="false"
39  import="net.sf.basedb.core.*"
40  import="net.sf.basedb.util.EmailUtil"
41  import="net.sf.basedb.clients.web.*"
42  import="net.sf.basedb.clients.web.util.HTML"
43  import="net.sf.basedb.util.formatter.Formatter" 
44  import="net.sf.basedb.util.json.JsonUtil"
45  import="net.sf.basedb.util.json.JsonConverter"
46  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
47  import="net.sf.basedb.clients.web.formatter.FormatterSettings"
48  import="org.json.simple.JSONObject"
49  import="org.json.simple.JSONArray"
50  import="java.util.Date"
51  import="java.util.List"
52%>
53<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
54<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
55<%
56final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
57final String ID = sc.getId();
58final String activePage = request.getParameter("page");
59final float scale = Base.getScale(sc);
60final DbControl dc = sc.newDbControl();
61final ItemContext cc = Base.getAndSetCurrentContext(sc, Item.USER, null, null);
62try
63{
64  final User user = User.getById(dc, sc.getLoggedInUserId());
65  final String title = "Information for " + HTML.encodeTags(user.getName());
66  final boolean writePermission = user.hasPermission(Permission.RESTRICTED_WRITE);
67  final String ifDisabled = writePermission ? "" : "disabled";
68  final String passwordDisabled = writePermission && Application.isUsingInternalAuthentication() ? 
69    "" : "disabled";
70  dc.detachItem(user);
71  sc.setSessionSetting("user", user);
72 
73  List<ExtendedProperty> extendedProperties = ExtendedProperties.getProperties("UserData");
74  JSONArray jsonExtendedProperties = JsonUtil.toArray(extendedProperties, new JsonConverter<ExtendedProperty>()
75    {
76      public Object convert(ExtendedProperty ep)
77      {
78        JSONObject json = new JSONObject();
79        json.put("name", ep.getName());
80        json.put("valueType", ep.getType().name());
81        json.put("title", ep.getTitle());
82        json.put("nullable", ep.isNullable());
83        return json;
84      }
85    });
86 
87  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
88  String dateFormat = FormatterSettings.getDateFormat(sc);
89  String jsDateFormat = HTML.javaScriptEncode(dateFormat);
90  String htmlDateFormat = HTML.encodeTags(dateFormat);
91  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
92  String dateTimeFormat = FormatterSettings.getDateTimeFormat(sc);
93  String jsDateTimeFormat = HTML.javaScriptEncode(dateTimeFormat);
94  String htmlDateTimeFormat = HTML.encodeTags(dateTimeFormat);
95%>
96  <base:page type="popup" title="<%=title%>">
97  <base:head scripts="tabcontrol-2.js,~settings.js" styles="tabcontrol.css" />
98  <base:body>
99    <h1><%=title%><base:help tabcontrol="settings" /></h1>
100 
101    <div id="page-data" class="datacontainer"
102      data-date-format="<%=htmlDateFormat%>"
103      data-datetime-format="<%=htmlDateTimeFormat%>"
104      data-extended-properties="<%=HTML.encodeTags(jsonExtendedProperties.toJSONString())%>"
105    ></div>
106 
107    <form action="submit_user.jsp?ID=<%=ID%>" method="post" name="user">
108    <input type=hidden name="cmd" value="SaveSettings">
109 
110    <t:tabcontrol 
111      subclass="content dialogtabcontrol"
112      active="<%=activePage%>" id="settings" 
113      position="bottom" remember="false">
114 
115      <t:tab id="contact" title="Contact information" helpid="userpreferences.contact">
116        <table class="fullform input100">
117        <tr>
118          <th>Full name</th>
119          <td><%=HTML.encodeTags(user.getName())%></td>
120          <td></td>
121        </tr>
122        <tr>
123          <th>Email</th>
124          <td><input <%=ifDisabled%> type="text" name="email" value="<%=HTML.encodeTags(user.getEmail())%>" maxlength="<%=User.MAX_EMAIL_LENGTH%>"></td>
125          <td></td>
126        </tr>
127        <%
128        if (EmailUtil.isEnabled() && writePermission)
129        {
130          %>
131          <tr>
132            <th class="subprompt"></th>
133            <td>
134              <%
135              boolean sendMessagesAsEmail = user.getSendMessagesAsEmail();
136              %>
137              <input type="checkbox" name="sendMessagesAsEmail" id="sendMessagesAsEmail" value="1" <%=sendMessagesAsEmail ? "checked" : ""%>
138                ><label for="sendMessagesAsEmail">Send system messages as email</label>
139            </td>
140            <td></td>
141          </tr>
142          <%
143        }
144        %>
145        <tr>
146          <th>Organisation</th>
147          <td><input <%=ifDisabled%> type="text" name="organisation" value="<%=HTML.encodeTags(user.getOrganisation())%>" maxlength="<%=User.MAX_ORGANISATION_LENGTH%>"></td>
148          <td></td>
149        </tr>
150        <tr class="big">
151          <th>Address</th>
152          <td>
153            <textarea <%=ifDisabled%> rows="4" name="address" id="address"><%=HTML.encodeTags(user.getAddress())%></textarea>
154          </td>
155          <td style="width: 20px;">
156            <base:zoom textarea="address" title="Address" />
157          </td>
158        </tr>
159        <tr>
160          <th>Phone</th>
161          <td><input <%=ifDisabled%> type="text" name="phone" value="<%=HTML.encodeTags(user.getPhone())%>" maxlength="<%=User.MAX_PHONE_LENGTH%>"></td>
162          <td></td>
163        </tr>
164        <tr>
165          <th>Fax</th>
166          <td><input <%=ifDisabled%> type="text" name="fax" value="<%=HTML.encodeTags(user.getFax())%>" maxlength="<%=User.MAX_FAX_LENGTH%>"></td>
167          <td></td>
168        </tr>
169        <tr>
170          <th>Url</th>
171          <td><input <%=ifDisabled%> type="text" name="url" value="<%=HTML.encodeTags(user.getUrl())%>" maxlength="<%=User.MAX_URL_LENGTH%>"></td>
172          <td></td>
173        </tr>
174        <tr class="dynamic">
175          <th></th>
176          <td></td>
177          <td></td>
178        </tr>
179        </table>
180      </t:tab>
181     
182      <t:tab id="password" title="Password" helpid="userpreferences.password">
183        <table class="fullform input100">
184        <% if (!Application.isUsingInternalAuthentication() && writePermission)
185        {
186          %>
187          <tr>
188            <td colspan="2">
189            <div class="messagecontainer error">Base is using external authentication. Password cannot be changed here.</div>
190            </td>
191          </tr>
192          <%
193        }
194        %>
195        <tr>
196          <th>Login</th>
197          <td><%=HTML.encodeTags(user.getLogin())%></td>
198        </tr>
199        <tr>
200          <th>New password</th>
201          <td><input <%=passwordDisabled%> type="password" name="password" value=""  maxlength="30"></td>
202        </tr>
203        <tr>
204          <th>Retype password</th>
205          <td><input <%=passwordDisabled%> type="password" name="retype_password" value="" maxlength="30"></td>
206        </tr>
207        <tr class="dynamic">
208          <th></th>
209          <td><i>- leave empty to not change the password</i></td>
210        </tr>
211        </table>
212      </t:tab>
213   
214      <t:tab id="other" title="Other information" 
215        helpid="userpreferences.other">
216        <table class="fullform input100">
217        <%
218        if (extendedProperties != null)
219        {
220          for (ExtendedProperty ep : extendedProperties)
221          {
222            String name = ep.getName();
223            String fieldName = "ep."+name;
224            Type type = ep.getType();
225            boolean required = !ep.isNullable();
226            Object value = user == null ? cc.getPropertyValue(name) : user.getExtended(name);
227            String isRequired = required ? "class=\"required\"" : "";
228            final String isDisabled = ep.isRestrictedEdit() ? "disabled" : "";
229            boolean addZoom = false;
230            %>
231            <tr>
232              <th><%=HTML.encodeTags(ep.getTitle())%></th>
233              <td>
234              <%
235              if (type == Type.INT || type == Type.LONG)
236              {
237                %>
238                <input <%=isRequired%> <%=isDisabled %> type="text" name="<%=fieldName%>" id="<%=fieldName%>"
239                  value="<%=value == null ? "" : value%>" style="width: 15em;" maxlength="20">
240                <%
241              }
242              else if (type == Type.FLOAT || type == Type.DOUBLE)
243              {
244                %>
245                <input <%=isRequired%> <%=isDisabled%> type="text" name="<%=fieldName%>" id="<%=fieldName%>"
246                  value="<%=value == null ? "" : value%>" style="width: 15em;" maxlength="20">
247                <%
248              }
249              else if (type == Type.STRING)
250              {
251                %>
252                <input <%=isRequired%> <%=isDisabled%> type="text" name="<%=fieldName%>"
253                  value="<%=HTML.encodeTags((String)value)%>"
254                  maxlength="<%=ep.getLength()%>">
255                <%
256              }
257              else if (type == Type.TEXT)
258              {
259                addZoom = true;
260                %>
261                <textarea <%=isRequired%> <%=isDisabled%> name="<%=fieldName%>" id="<%=fieldName%>" rows="6" 
262                  ><%=HTML.encodeTags((String)value)%></textarea>
263                <%
264              }
265              else if (type == Type.BOOLEAN)
266              {
267                Boolean b = (Boolean)value;
268                if (!required)
269                {
270                  %>
271                  <input type="radio" name="<%=fieldName%>" id="<%=fieldName%>.null" value=""
272                    <%=b == null ? "checked" : ""%> 
273                    ><label for="<%=fieldName%>.null"><i>- not specified -</i></label><br>
274                  <%
275                }
276                %>
277                <input type="radio" name="<%=fieldName%>" id="<%=fieldName%>.true" value="true" 
278                  <%=b != null && b == true ? "checked" : ""%>
279                  ><label for="<%=fieldName%>.true">true</label>
280                <input type="radio" name="<%=fieldName%>" id="<%=fieldName%>.false" value="false" 
281                  <%=b != null && b == false ? "checked" : ""%>
282                  ><label for="<%=fieldName%>.false">false</label>
283                <%
284              }
285              else if (type == Type.DATE)
286              {
287                %>
288                <table>
289                <tr>
290                <td>
291                  <input <%=isRequired%> <%=isDisabled%> type="text" name="<%=fieldName%>" id="<%=fieldName%>"
292                    value="<%=dateFormatter.format((Date)value)%>" style="width: 15em;"
293                    maxlength="20" title="Enter date in format: <%=dateFormat%>"
294                    >
295                </td>
296                <td>
297                  <base:button 
298                    id="<%="btn."+fieldName%>"
299                    data-extended-property="<%=name%>"
300                    image="calendar.png"
301                    title="Calendar&hellip;" 
302                    tooltip="Select a date from a calendar" 
303                    visible="<%=writePermission%>"
304                  />
305                </td>
306                </tr>
307                </table>
308                <%
309              }
310              else if (type == Type.TIMESTAMP)
311              {
312                %>
313                <table>
314                <tr>
315                <td>
316                  <input <%=isRequired%> <%=isDisabled%> type="text" name="<%=fieldName%>" id="<%=fieldName%>"
317                    value="<%=dateTimeFormatter.format((Date)value)%>" style="width: 15em;"
318                    maxlength="20" title="Enter timestamp in format: <%=dateTimeFormat%>"
319                    >
320                </td>
321                <td>
322                  <base:button 
323                    id="<%="btn."+fieldName%>"
324                    data-extended-property="<%=name%>"
325                    image="calendar.png"
326                    title="Calendar&hellip;" 
327                    tooltip="Select a timestamp from a calendar" 
328                    visible="<%=writePermission%>"
329                  />
330                </td>
331                </tr>
332                </table>
333                <%
334              }
335              %>
336              </td>
337              <td style="width: 20px;">
338                <%
339                if (addZoom)
340                {
341                  %>
342                  <base:zoom textarea="<%=fieldName%>" title="<%=HTML.encodeTags(ep.getTitle()) %>" />
343                  <%
344                }
345                %>
346              </td>
347            </tr>
348            <%
349          }
350        }
351        %>
352        <tr class="dynamic">
353          <th>Description</th>
354          <td>
355            <textarea <%=ifDisabled%> rows="5" name="description" id="description"><%=HTML.encodeTags(user.getDescription())%></textarea>
356          </td>
357          <td style="width: 20px;">
358            <base:zoom textarea="description" title="Description" />
359          </td>
360        </tr>
361        </table>
362      </t:tab>
363    </t:tabcontrol>
364    </form>
365 
366    <base:buttongroup subclass="dialogbuttons">
367      <base:button id="btnSave" title="Save" visible="<%=writePermission%>"/>
368      <base:button id="close" title="Cancel" visible="<%=writePermission%>"/>
369      <base:button id="close" title="Close" visible="<%=!writePermission%>"/>
370    </base:buttongroup>
371 
372  </base:body>
373  </base:page>
374  <%
375}
376finally
377{
378  if (dc != null) dc.close();
379}
380%>
Note: See TracBrowser for help on using the repository browser.