source: trunk/www/my_base/user/preferences.jsp @ 7112

Last change on this file since 7112 was 7112, checked in by Nicklas Nordborg, 6 years ago

References #1995: Add extension point for selecting start page

Added configuration setting in the BASE -> Preferences dialog for selecting the start page.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 17.5 KB
Line 
1<%-- $Id: preferences.jsp 7112 2016-03-16 07:37:52Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
5  Copyright (C) 2007 Johan Enell, Nicklas Nordborg, 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 preferences for
25  the logged in user. It displays a tabbed dialogue:
26
27  @param page
28    The name active page of the tabbed dialog.
29    - appearance: Font sizes, scale factor, etc.
30
31  Saving the form invokes the submit_user.jsp page with cmd=SavePreferences
32
33  @author Nicklas
34  @version 2.0
35--%>
36<%@ page pageEncoding="UTF-8" session="false"
37  import="net.sf.basedb.core.SessionControl"
38  import="net.sf.basedb.core.Item"
39  import="net.sf.basedb.core.DbControl"
40  import="net.sf.basedb.core.User"
41  import="net.sf.basedb.core.Metadata"
42  import="net.sf.basedb.core.ItemContext"
43  import="net.sf.basedb.core.Permission"
44  import="net.sf.basedb.util.ToStringComparator"
45  import="net.sf.basedb.clients.web.Base"
46  import="net.sf.basedb.clients.web.util.HTML"
47  import="net.sf.basedb.clients.web.formatter.FormatterSettings"
48  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
49  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
50  import="net.sf.basedb.clients.web.extensions.JspContext"
51  import="net.sf.basedb.clients.web.extensions.startpage.StartPageAction"
52  import="net.sf.basedb.util.Values"
53  import="java.util.List"
54  import="java.util.Set"
55  import="java.util.TreeSet"
56  import="java.util.HashSet"
57  import="java.util.Arrays"
58  import="java.util.Iterator"
59%>
60<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
61<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
62<%
63final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
64final String ID = sc.getId();
65final float scale = Base.getScale(sc);
66final String activePage = Values.getStringOrNull(request.getParameter("page"));
67final DbControl dc = sc.newDbControl();
68try
69{
70  final User user = User.getById(dc, sc.getLoggedInUserId());
71 
72  final String longTexts = Values.getString(sc.getUserClientSetting("text.long"), "display");
73 
74  final boolean hasImages = Values.getBoolean(sc.getUserClientSetting("toolbar.images"), true);
75  final boolean hasText = Values.getBoolean(sc.getUserClientSetting("toolbar.text"), true);
76 
77  final String minColor = Values.getString(sc.getUserClientSetting("ratiocolor.min"), "0000FF");
78  final String midColor = Values.getString(sc.getUserClientSetting("ratiocolor.mid"), "FFFFFF");
79  final String maxColor = Values.getString(sc.getUserClientSetting("ratiocolor.max"), "FFFF00");
80 
81  final boolean rememberDialogPositions = Values.getBoolean(sc.getUserClientSetting("dialogs.remember-positions"), true);
82  final String startPageId = sc.getUserClientSetting("start-page-id");
83 
84  ItemContext cc = sc.getCurrentContext(Item.USERCLIENTSETTING);
85  List<String> recentColors = cc.getRecent("colors");
86  List<String> recentDateFormats = cc.getRecent("dateFormats");
87  List<String> recentDateTimeFormats = cc.getRecent("dateTimeFormats");
88 
89  // Load sticky items
90  String mostRecent = Values.getString(sc.getUserClientSetting("menu.mostRecent"),
91      "EXPERIMENT:BIOASSAYSET:TRANSFORMATION");
92  Set<String> stickyItems = new HashSet<String>(Arrays.asList(mostRecent.split(":")));
93  Set<Item> allItems = new TreeSet<Item>(new ToStringComparator<Item>(false));
94  allItems.addAll(Metadata.getOwnableItems());
95  allItems.add(Item.BIOASSAYSET);
96 
97  JspContext context = ExtensionsControl.createContext(dc, pageContext, null, user);
98  ExtensionsInvoker<StartPageAction> invoker = (ExtensionsInvoker<StartPageAction>)ExtensionsControl.useExtensions(context, "net.sf.basedb.clients.web.start-page");
99  %>
100  <base:page type="popup" title="<%="Preferences for "+HTML.encodeTags(user.getName())%>" id="preferences">
101  <base:head scripts="tabcontrol-2.js,~preferences.js" styles="tabcontrol.css">
102    <style>
103    .colorbox
104    {
105      margin: 2px;
106    }
107    </style>   
108  </base:head>
109  <base:body>
110    <h1>Preferences for <%=HTML.encodeTags(user.getName())%> <base:help tabcontrol="settings" /></h1>
111    <form action="submit_user.jsp?ID=<%=ID%>" method="post" name="preferences">
112    <input type=hidden name="cmd" value="SavePreferences">
113    <input type="hidden" name="mincolor" id="mincolor" value="<%=minColor%>">
114    <input type="hidden" name="midcolor" id="midcolor" value="<%=midColor%>">
115    <input type="hidden" name="maxcolor" id="maxcolor" value="<%=maxColor%>">
116
117    <t:tabcontrol 
118      id="settings"
119      subclass="content dialogtabcontrol"
120      active="<%=activePage%>" remember="<%=activePage == null%>"   
121      position="bottom">
122      <t:tab 
123        id="appearance" 
124        title="Appearance" 
125        helpid="userpreferences.appearance"
126        >
127        <table class="fullform">
128        <tr>
129          <th>Font size</th>
130          <td>
131            <%
132            String fontsize = Values.getString(sc.getUserClientSetting("appearance.fontsize"), "size_m.css");
133            %>
134            <input type="radio" name="fontsize" id="fontsizeXS" value="size_xs.css" 
135              <%="size_xs.css".equals(fontsize) ? "checked" : ""%>
136              data-scale="80"
137              ><label for="fontsizeXS">XS</label>
138            <input type="radio" name="fontsize" id="fontsizeS" value="size_s.css" 
139              <%="size_s.css".equals(fontsize) ? "checked" : ""%>
140              data-scale="90"
141              ><label for="fontsizeS">S</label>
142            <input type="radio" name="fontsize" id="fontsizeM" value="size_m.css" 
143              <%="size_m.css".equals(fontsize) ? "checked" : ""%>
144              data-scale="100"
145              ><label for="fontsizeM">M</label>
146            <input type="radio" name="fontsize" id="fontsizeL" value="size_l.css" 
147              <%="size_l.css".equals(fontsize) ? "checked" : ""%>
148              data-scale="115"
149              ><label for="fontsizeL">L</label>
150            <input type="radio" name="fontsize" id="fontsizeXL" value="size_xl.css" 
151              <%="size_xl.css".equals(fontsize) ? "checked" : ""%>
152              data-scale="130"
153              ><label for="fontsizeXL">XL</label>
154          </td>
155        </tr>
156        <tr>
157          <th>Scale factor</th>
158          <td>
159            <input class="text required" type="text" name="scale" id="scale"
160            value="<%=Values.getInt(sc.getUserClientSetting("appearance.scale"), 100)%>" 
161            size="4" maxlength="3">%
162            (50 - 200)
163          </td>
164        </tr>
165        <tr>
166          <th>Display long texts</th>
167          <td>
168            <input type="radio" name="longTexts" id="longTextsAlways" value="display" 
169              <%="display".equals(longTexts) ? "checked" : "" %>
170              ><label for="longTextsAlways">Always</label>
171            <input type="radio" name="longTexts" id="longTextsHover" value="hover" 
172              <%="hover".equals(longTexts) ? "checked" : "" %>
173              ><label for="longTextsHover">On hover</label>
174            <input type="radio" name="longTexts" id="longTextsClick" value="click" 
175              <%="click".equals(longTexts) ? "checked" : "" %>
176              ><label for="longTextsClick">On click</label>
177          </td>
178        </tr>   
179        <tr>
180          <th>Toolbar</th>
181          <td>
182            <input type="radio" name="toolbar" id="toolbarBoth" value="both" 
183              <%=hasImages && hasText ? "checked" : "" %>
184              ><label for="toolbarBoth">Images and text</label>
185            <input type="radio" name="toolbar" id="toolbarImages" value="images" 
186              <%=hasImages && !hasText ? "checked" : "" %>
187              ><label for="toolbarImages">Images only</label>
188            <input type="radio" name="toolbar" id="toolbarText" value="text" 
189              <%=!hasImages && hasText ? "checked" : "" %>
190              ><label for="toolbarText">Text only</label>
191          </td>
192        </tr>   
193        <tr>
194          <th>Ratio color range</th>
195          <td>
196            <span id="btnMinColor" tabindex="0" class="link" data-dialog-title="Color for min value" data-color-box="mincolor"
197              ><span id="mincolor.visual" style="background: #<%=minColor%>; display: inline-block;" class="colorbox large">&nbsp;</span>Min</span>
198           
199            <span id="btnMidColor" tabindex="0" class="link" data-dialog-title="Color for midpoint value" data-color-box="midcolor"
200              ><span id="midcolor.visual" style="background: #<%=midColor%>; display: inline-block;" class="colorbox large">&nbsp;</span>Mid</span>
201           
202            <span id="btnMaxColor" tabindex="0" class="link" data-dialog-title="Color for max value" data-color-box="maxcolor"
203              ><span id="maxcolor.visual" style="background: #<%=maxColor%>; display: inline-block;" class="colorbox large">&nbsp;</span>Max</span>
204         
205
206              <select name="presets" id="colorPresets" class="selectionlist">
207              <option value="">- presets -
208              <option value="FF0000,FFFF00,00FF00">Red - Yellow - Green
209              <option value="0000FF,FFFFFF,FFFF00">Blue - White - Yellow
210              <option value="000000,999999,FFFFFF">Black - Grey - White
211              <%
212              if (recentColors != null && recentColors.size() > 0)
213              {
214                %>
215                <option value="" class="recentheader" disabled>- recently used -
216                <%
217                for (int i = 0; i < recentColors.size(); ++i)
218                {
219                  String color = recentColors.get(i);
220                  %>
221                  <option value="<%=color%>" class="recent"><%=color%>
222                  <%
223                }
224              }
225              %>
226              </select>
227          </td>
228        </tr>
229        <tr>
230          <th>Date format</th>
231          <td>
232            <input class="text" type="text" name="date_format" 
233            value="<%=HTML.encodeTags(FormatterSettings.getDateFormat(sc))%>" 
234            size="20">
235            <select name="datePresets" id="datePresets" class="selectionlist">
236              <option value="">- presets -
237              <option value="yyyy-MM-dd">yyyy-MM-dd
238              <option value="d/M/yyyy">d/M/yyyy
239              <option value="M/d/yyyy">M/d/yyyy
240              <%
241              if (recentDateFormats != null && recentDateFormats.size() > 0)
242              {
243                %>
244                <option value="" class="recentheader" disabled>- recently used -
245                <%
246                for (int i = 0; i < recentDateFormats.size(); ++i)
247                {
248                  String format = HTML.encodeTags(recentDateFormats.get(i));
249                  %>
250                  <option value="<%=format%>" class="recent"><%=format%>
251                  <%
252                }
253              }
254              %>
255            </select>
256          </td>
257        </tr>
258       
259        <tr>
260          <th>Date-time format</th>
261          <td>
262            <input class="text" type="text" name="datetime_format" 
263            value="<%=HTML.encodeTags(FormatterSettings.getDateTimeFormat(sc))%>" 
264            size="20">
265            <select name="dateTimePresets" id="dateTimePresets" class="selectionlist">
266              <option value="">- presets -
267              <option value="yyyy-MM-dd HH:mm:ss">yyyy-MM-dd HH:mm:ss
268              <option value="d/M/yyyy HH:mm:ss">d/M/yyyy HH:mm:ss
269              <option value="M/d/yyyy HH:mm:ss">M/d/yyyy HH:mm:ss
270              <%
271              if (recentDateTimeFormats != null && recentDateTimeFormats.size() > 0)
272              {
273                %>
274                <option value="" class="recentheader" disabled>- recently used -
275                <%
276                for (int i = 0; i < recentDateTimeFormats.size(); ++i)
277                {
278                  String format = HTML.encodeTags(recentDateTimeFormats.get(i));
279                  %>
280                  <option value="<%=format%>" class="recent"><%=format%>
281                  <%
282                }
283              }
284              %>
285            </select>
286          </td>
287        </tr>
288        <%
289        int numDecimals = FormatterSettings.getNumDecimals(sc);
290        %>
291        <tr>
292          <th>Decimals</th>
293          <td>
294            <select name="decimals" style="width: 4em;">
295            <%
296            for (int i = 0; i < 8; i++)
297            {
298              %>
299              <option value="<%=i%>" <%=numDecimals == i ? "selected" : ""%>><%=i%>
300              <%
301            }
302            %>
303            <option value="-1" <%=numDecimals < 0 ? "selected" : ""%>>all
304            </select>
305          </td>
306        </tr>
307        <tr>
308          <th>Dialogs</th>
309          <td>
310            <label id="rememberPositions"><input type="checkbox" name="remember_positions" value="1" 
311              <%=rememberDialogPositions ? "checked" : "" %>
312              >Remember positions</label>
313          </td>
314        </tr>   
315        <tr>
316          <th>Start page</th>
317          <td>
318            <select name="start_page" class="selectionlist">
319              <option value="" title="The BASE › Home page">BASE › Home
320              <%
321              Iterator<StartPageAction> it = invoker.iterator();
322              while (it.hasNext())
323              {
324                try
325                {
326                  StartPageAction action = it.next();
327                  %>
328                  <option value="<%=action.getId()%>" 
329                    title="<%=HTML.encodeTags(action.getDescription())%>"
330                    <%=action.getId().equals(startPageId) ? "selected": ""%>
331                    ><%=HTML.encodeTags(action.getName())%>
332                  <%
333                }
334                catch (RuntimeException ex)
335                {} // Ignore exceptions thrown inside extensions
336              }
337              %>
338            </select>
339          </td>
340        </tr>   
341        <tr class="dynamic">
342          <th></th>
343          <td></td>
344        </tr>
345        </table>
346      </t:tab>
347     
348      <t:tab
349        id="plugins" 
350        title="Plugins" 
351        helpid="userpreferences.plugins"
352        >
353        <table class="fullform">
354        <tr>
355          <th>Messages</th>
356          <td>
357            <%
358            boolean sendMessage = Values.getBoolean(sc.getUserClientSetting("plugins.sendmessage"), true);
359            %>
360            <input type="checkbox" name="sendmessage" id="sendMessage" value="1" <%=sendMessage ? "checked" : ""%>
361              ><label for="sendMessage">Send message when plugin completes</label>
362          </td>
363        </tr>
364        <tr>
365          <th>Remove jobs</th>     
366          <td>
367            <%
368            boolean removeJobWhenFinished = Values.getBoolean(sc.getUserClientSetting("plugins.removejob"), false);
369            %>
370            <input type="checkbox" name="removejob" id="removeJob" value="1" <%=removeJobWhenFinished ? "checked" : "" %>
371              ><label for="removeJob">Remove import and export jobs when they are finished.</label>
372          </td>
373        </tr>
374        <tr>
375          <th>Show warnings</th>     
376          <td>
377            <%
378            boolean showWarnings = Values.getBoolean(sc.getUserClientSetting("plugins.showWarnings"), false);
379            %>
380            <input type="checkbox" name="show_warnings" id="showWarnings" value="1" <%=showWarnings ? "checked" : "" %>
381              ><label for="showWarnings">Show plug-in warning messages when starting a new job.</label>
382          </td>
383        </tr>
384        <tr class="dynamic">
385          <th></th>
386          <td></td>
387        </tr>
388        </table>
389      </t:tab>
390     
391      <t:tab
392        id="mostRecent"
393        title="Recent items"
394        helpid="userpreferences.mostrecent"
395        tooltip="Specify how many items to remember in lists of 'most recent items'"
396        >
397        <%
398        boolean loadNames = Values.getBoolean(sc.getUserClientSetting("menu.mostRecent.loadNames"), true);
399        %>
400        <table class="fullform">
401        <tr >
402          <th>Recently viewed items</th>
403          <td>
404            <input class="text required" type="text" name="maxViewed" id="maxViewed"
405              value="<%=Values.getInt(sc.getUserClientSetting("menu.mostRecent.maxViewed"), 6)%>" 
406              size="4" maxlength="2">
407            (0 - 10)
408          </td>
409        </tr>
410        <tr>
411          <th>Recently used items</th>
412          <td>
413            <input class="text required" type="text" name="maxUsed" id="maxUsed"
414              value="<%=Values.getInt(sc.getUserClientSetting("appearance.recent"), 4)%>" 
415              size="4" maxlength="2">
416            (0 - 10)
417          </td>
418        </tr>
419        <tr>
420          <th>Load item names</th>
421          <td>
422            <input type="checkbox" name="loadNames" id="loadNames" value="1" <%=loadNames ? "checked" : ""%>>
423            <label for="loadNames">Load the names of all items</label>
424          </td>
425        </tr>
426        <tr class="dynamic">
427          <th></th>
428          <td>
429        <table>
430        <tr>
431          <td>
432            <base:buttongroup
433              vertical="true">
434              <base:button
435                id="moveUp"
436                image="move_up.png"
437                tooltip="Move up" 
438                subclass="square"
439                data-down="0"
440              />
441              <base:button 
442                id="moveDown"
443                image="move_down.png"
444                tooltip="Move down" 
445                subclass="square"
446                data-down="1"
447              />
448            </base:buttongroup>
449          </td>
450          <td>
451            <b>Sticky items</b><br>
452            <select name="sticky_items" id="stickyItems" multiple size="12" style="width: 12em;">
453              <%
454              Iterator<Item> it = allItems.iterator();
455              while (it.hasNext())
456              {
457                Item item = it.next();
458                if (stickyItems.contains(item.name()))
459                {
460                  it.remove();
461                  %>
462                  <option value="<%=item.name()%>"><%=item.toString() %>
463                  <%
464                }
465              }
466              %>
467            </select>
468          </td>
469          <td>
470            <base:buttongroup
471              vertical="true"
472              >
473              <base:button
474                id="moveLeft"
475                image="move_left.png" 
476                tooltip="Show this item in the 'Most recent' menu" 
477                subclass="square"
478              />
479              <base:button 
480                id="moveRight"
481                image="move_right.png" 
482                tooltip="Don't show this item in the 'Most recent' menu" 
483                subclass="square"
484              />
485            </base:buttongroup>
486          </td>
487          <td>
488            <b>All items</b><br>
489            <select name="all_items" id="allItems" multiple size="12" style="width: 12em;">
490              <%
491              for (Item item : allItems)
492              {
493                %>
494                <option value="<%=item.name()%>"><%=item.toString() %>
495                <%
496              }
497              %>
498            </select>
499          </td>
500        </tr>
501        </table>
502         
503          </td>
504        </tr>
505        </table>
506      </t:tab>
507    </t:tabcontrol>
508    </form>
509
510    <div class="legend">
511      <base:icon image="required.png" />= required information
512    </div>
513
514    <base:buttongroup subclass="dialogbuttons">
515      <base:button id="btnSave" title="Save" />
516      <base:button id="close" title="Cancel" />
517    </base:buttongroup>
518  </base:body>
519  </base:page>
520  <%
521}
522finally
523{
524  if (dc != null) dc.close();
525}
526%>
Note: See TracBrowser for help on using the repository browser.