www/my_base/user/preferences.jsp

Code
Comments
Other
Rev Date Author Line
419 19 Apr 05 nicklas 1 <%-- $Id$
419 19 Apr 05 nicklas 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2005 Nicklas Nordborg
5425 23 Sep 10 nicklas 4   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
3675 16 Aug 07 jari 5   Copyright (C) 2007 Johan Enell, Nicklas Nordborg, Martin Svensson
419 19 Apr 05 nicklas 6
2304 22 May 06 jari 7   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 8   Available at http://base.thep.lu.se/
419 19 Apr 05 nicklas 9
419 19 Apr 05 nicklas 10   BASE is free software; you can redistribute it and/or
419 19 Apr 05 nicklas 11   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 12   as published by the Free Software Foundation; either version 3
419 19 Apr 05 nicklas 13   of the License, or (at your option) any later version.
419 19 Apr 05 nicklas 14
419 19 Apr 05 nicklas 15   BASE is distributed in the hope that it will be useful,
419 19 Apr 05 nicklas 16   but WITHOUT ANY WARRANTY; without even the implied warranty of
419 19 Apr 05 nicklas 17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
419 19 Apr 05 nicklas 18   GNU General Public License for more details.
419 19 Apr 05 nicklas 19
419 19 Apr 05 nicklas 20   You should have received a copy of the GNU General Public License
4511 11 Sep 08 jari 21   along with BASE. If not, see <http://www.gnu.org/licenses/>.
419 19 Apr 05 nicklas 22   ------------------------------------------------------------------
419 19 Apr 05 nicklas 23
419 19 Apr 05 nicklas 24   This page is used to display and modify the preferences for
419 19 Apr 05 nicklas 25   the logged in user. It displays a tabbed dialogue:
419 19 Apr 05 nicklas 26
419 19 Apr 05 nicklas 27   @param page
419 19 Apr 05 nicklas 28     The name active page of the tabbed dialog.
419 19 Apr 05 nicklas 29     - appearance: Font sizes, scale factor, etc.
419 19 Apr 05 nicklas 30
419 19 Apr 05 nicklas 31   Saving the form invokes the submit_user.jsp page with cmd=SavePreferences
419 19 Apr 05 nicklas 32
419 19 Apr 05 nicklas 33   @author Nicklas
419 19 Apr 05 nicklas 34   @version 2.0
419 19 Apr 05 nicklas 35 --%>
5426 24 Sep 10 nicklas 36 <%@ page pageEncoding="UTF-8" session="false"
419 19 Apr 05 nicklas 37   import="net.sf.basedb.core.SessionControl"
2733 16 Oct 06 nicklas 38   import="net.sf.basedb.core.Item"
419 19 Apr 05 nicklas 39   import="net.sf.basedb.core.DbControl"
419 19 Apr 05 nicklas 40   import="net.sf.basedb.core.User"
7295 20 Feb 17 nicklas 41   import="net.sf.basedb.core.Role"
7295 20 Feb 17 nicklas 42   import="net.sf.basedb.core.Type"
2907 14 Nov 06 nicklas 43   import="net.sf.basedb.core.Metadata"
2733 16 Oct 06 nicklas 44   import="net.sf.basedb.core.ItemContext"
7295 20 Feb 17 nicklas 45   import="net.sf.basedb.core.ItemQuery"
419 19 Apr 05 nicklas 46   import="net.sf.basedb.core.Permission"
7295 20 Feb 17 nicklas 47   import="net.sf.basedb.core.query.Hql"
7295 20 Feb 17 nicklas 48   import="net.sf.basedb.core.query.Restrictions"
7295 20 Feb 17 nicklas 49   import="net.sf.basedb.core.query.Expressions"
7295 20 Feb 17 nicklas 50   import="net.sf.basedb.core.query.Orders"
2907 14 Nov 06 nicklas 51   import="net.sf.basedb.util.ToStringComparator"
419 19 Apr 05 nicklas 52   import="net.sf.basedb.clients.web.Base"
419 19 Apr 05 nicklas 53   import="net.sf.basedb.clients.web.util.HTML"
2942 22 Nov 06 nicklas 54   import="net.sf.basedb.clients.web.formatter.FormatterSettings"
7112 16 Mar 16 nicklas 55   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
7112 16 Mar 16 nicklas 56   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
7112 16 Mar 16 nicklas 57   import="net.sf.basedb.clients.web.extensions.JspContext"
7112 16 Mar 16 nicklas 58   import="net.sf.basedb.clients.web.extensions.startpage.StartPageAction"
7499 06 Aug 18 nicklas 59   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7499 06 Aug 18 nicklas 60   import="net.sf.basedb.clients.web.extensions.tabcontrol.TabAction"
2753 20 Oct 06 nicklas 61   import="net.sf.basedb.util.Values"
7295 20 Feb 17 nicklas 62   import="java.util.Collections"
2733 16 Oct 06 nicklas 63   import="java.util.List"
2907 14 Nov 06 nicklas 64   import="java.util.Set"
2907 14 Nov 06 nicklas 65   import="java.util.TreeSet"
2907 14 Nov 06 nicklas 66   import="java.util.HashSet"
2907 14 Nov 06 nicklas 67   import="java.util.Arrays"
6153 28 Sep 12 nicklas 68   import="java.util.Iterator"
419 19 Apr 05 nicklas 69 %>
419 19 Apr 05 nicklas 70 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
419 19 Apr 05 nicklas 71 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
7502 10 Aug 18 nicklas 72 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
419 19 Apr 05 nicklas 73 <%
522 04 May 05 nicklas 74 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
522 04 May 05 nicklas 75 final String ID = sc.getId();
522 04 May 05 nicklas 76 final float scale = Base.getScale(sc);
5435 30 Sep 10 nicklas 77 final String activePage = Values.getStringOrNull(request.getParameter("page"));
7954 12 May 21 nicklas 78 final DbControl dc = sc.newDbControl(":User preferences");
419 19 Apr 05 nicklas 79 try
419 19 Apr 05 nicklas 80 {
522 04 May 05 nicklas 81   final User user = User.getById(dc, sc.getLoggedInUserId());
2189 25 Apr 06 nicklas 82   
4673 28 Nov 08 nicklas 83   final String longTexts = Values.getString(sc.getUserClientSetting("text.long"), "display");
4673 28 Nov 08 nicklas 84   
2189 25 Apr 06 nicklas 85   final boolean hasImages = Values.getBoolean(sc.getUserClientSetting("toolbar.images"), true);
2189 25 Apr 06 nicklas 86   final boolean hasText = Values.getBoolean(sc.getUserClientSetting("toolbar.text"), true);
2733 16 Oct 06 nicklas 87   
2733 16 Oct 06 nicklas 88   final String minColor = Values.getString(sc.getUserClientSetting("ratiocolor.min"), "0000FF");
2733 16 Oct 06 nicklas 89   final String midColor = Values.getString(sc.getUserClientSetting("ratiocolor.mid"), "FFFFFF");
2733 16 Oct 06 nicklas 90   final String maxColor = Values.getString(sc.getUserClientSetting("ratiocolor.max"), "FFFF00");
2733 16 Oct 06 nicklas 91   
6520 18 Aug 14 nicklas 92   final boolean rememberDialogPositions = Values.getBoolean(sc.getUserClientSetting("dialogs.remember-positions"), true);
7112 16 Mar 16 nicklas 93   final String startPageId = sc.getUserClientSetting("start-page-id");
6520 18 Aug 14 nicklas 94   
2733 16 Oct 06 nicklas 95   ItemContext cc = sc.getCurrentContext(Item.USERCLIENTSETTING);
2733 16 Oct 06 nicklas 96   List<String> recentColors = cc.getRecent("colors");
2943 23 Nov 06 nicklas 97   List<String> recentDateFormats = cc.getRecent("dateFormats");
2943 23 Nov 06 nicklas 98   List<String> recentDateTimeFormats = cc.getRecent("dateTimeFormats");
6153 28 Sep 12 nicklas 99   
6153 28 Sep 12 nicklas 100   // Load sticky items
6153 28 Sep 12 nicklas 101   String mostRecent = Values.getString(sc.getUserClientSetting("menu.mostRecent"),
6153 28 Sep 12 nicklas 102       "EXPERIMENT:BIOASSAYSET:TRANSFORMATION");
6153 28 Sep 12 nicklas 103   Set<String> stickyItems = new HashSet<String>(Arrays.asList(mostRecent.split(":")));
6153 28 Sep 12 nicklas 104   Set<Item> allItems = new TreeSet<Item>(new ToStringComparator<Item>(false));
6153 28 Sep 12 nicklas 105   allItems.addAll(Metadata.getOwnableItems());
6153 28 Sep 12 nicklas 106   allItems.add(Item.BIOASSAYSET);
7112 16 Mar 16 nicklas 107   
7295 20 Feb 17 nicklas 108   // Load roles
7295 20 Feb 17 nicklas 109   List<Role> roles = null;
7295 20 Feb 17 nicklas 110   Set<Integer> roleIds = sc.getAllRoles();
7295 20 Feb 17 nicklas 111   Set<Integer> defaultInactive = Collections.emptySet();
7295 20 Feb 17 nicklas 112   if (roleIds != null && roleIds.size() > 0)
7295 20 Feb 17 nicklas 113   {
7295 20 Feb 17 nicklas 114     ItemQuery<Role> roleQuery = Role.getQuery();
7295 20 Feb 17 nicklas 115     roleQuery.restrict(Restrictions.in(Hql.property("id"), Expressions.parameter("roles")));
7295 20 Feb 17 nicklas 116     roleQuery.setParameter("roles", roleIds, Type.INT);
7295 20 Feb 17 nicklas 117     roleQuery.order(Orders.asc(Hql.property("name")));
7295 20 Feb 17 nicklas 118     roles = roleQuery.list(dc);
7295 20 Feb 17 nicklas 119     
7295 20 Feb 17 nicklas 120     String tmp = Values.getStringOrNull(sc.getUserClientSetting("inactiveRoles"));
7295 20 Feb 17 nicklas 121     if (tmp != null)
7295 20 Feb 17 nicklas 122     {
7295 20 Feb 17 nicklas 123       defaultInactive = new HashSet<Integer>(Arrays.asList(Values.getInt(tmp.split(":"))));
7295 20 Feb 17 nicklas 124     }
7295 20 Feb 17 nicklas 125   }
7295 20 Feb 17 nicklas 126
7502 10 Aug 18 nicklas 127   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, null, user);
7605 26 Feb 19 nicklas 128   ExtensionsInvoker<StartPageAction> invoker = ExtensionsControl.useExtensions(jspContext, "net.sf.basedb.clients.web.start-page");
7605 26 Feb 19 nicklas 129   ExtensionsInvoker<TabAction> tabsInvoker = ExtensionsControl.useExtensions(jspContext, EditUtil.EP_PREFIX_EDIT+"user-preferences");
419 19 Apr 05 nicklas 130   %>
6155 05 Oct 12 nicklas 131   <base:page type="popup" title="<%="Preferences for "+HTML.encodeTags(user.getName())%>" id="preferences">
6159 09 Oct 12 nicklas 132   <base:head scripts="tabcontrol-2.js,~preferences.js" styles="tabcontrol.css">
7502 10 Aug 18 nicklas 133     <ext:scripts context="<%=jspContext%>" />
7502 10 Aug 18 nicklas 134     <ext:stylesheets context="<%=jspContext%>" />
5911 15 Dec 11 nicklas 135     <style>
5911 15 Dec 11 nicklas 136     .colorbox
5911 15 Dec 11 nicklas 137     {
5911 15 Dec 11 nicklas 138       margin: 2px;
5911 15 Dec 11 nicklas 139     }
6153 28 Sep 12 nicklas 140     </style>    
419 19 Apr 05 nicklas 141   </base:head>
6155 05 Oct 12 nicklas 142   <base:body>
5901 08 Dec 11 nicklas 143     <h1>Preferences for <%=HTML.encodeTags(user.getName())%> <base:help tabcontrol="settings" /></h1>
6162 10 Oct 12 nicklas 144     <form action="submit_user.jsp?ID=<%=ID%>" method="post" name="preferences">
5904 09 Dec 11 nicklas 145     <input type=hidden name="cmd" value="SavePreferences">
6187 29 Oct 12 nicklas 146     <input type="hidden" name="mincolor" id="mincolor" value="<%=minColor%>">
6187 29 Oct 12 nicklas 147     <input type="hidden" name="midcolor" id="midcolor" value="<%=midColor%>">
6187 29 Oct 12 nicklas 148     <input type="hidden" name="maxcolor" id="maxcolor" value="<%=maxColor%>">
1977 13 Feb 06 martin 149
5904 09 Dec 11 nicklas 150     <t:tabcontrol 
6159 09 Oct 12 nicklas 151       id="settings"
5905 12 Dec 11 nicklas 152       subclass="content dialogtabcontrol"
7499 06 Aug 18 nicklas 153       active="<%=activePage%>" remember="<%=activePage == null%>" 
7499 06 Aug 18 nicklas 154       extensions="<%=tabsInvoker%>"
5904 09 Dec 11 nicklas 155       position="bottom">
5904 09 Dec 11 nicklas 156       <t:tab 
5904 09 Dec 11 nicklas 157         id="appearance" 
5904 09 Dec 11 nicklas 158         title="Appearance" 
5904 09 Dec 11 nicklas 159         helpid="userpreferences.appearance"
5904 09 Dec 11 nicklas 160         >
5904 09 Dec 11 nicklas 161         <table class="fullform">
5904 09 Dec 11 nicklas 162         <tr>
5904 09 Dec 11 nicklas 163           <th>Font size</th>
5904 09 Dec 11 nicklas 164           <td>
5904 09 Dec 11 nicklas 165             <%
5904 09 Dec 11 nicklas 166             String fontsize = Values.getString(sc.getUserClientSetting("appearance.fontsize"), "size_m.css");
5904 09 Dec 11 nicklas 167             %>
5904 09 Dec 11 nicklas 168             <input type="radio" name="fontsize" id="fontsizeXS" value="size_xs.css" 
6155 05 Oct 12 nicklas 169               <%="size_xs.css".equals(fontsize) ? "checked" : ""%>
6155 05 Oct 12 nicklas 170               data-scale="80"
5904 09 Dec 11 nicklas 171               ><label for="fontsizeXS">XS</label>
5904 09 Dec 11 nicklas 172             <input type="radio" name="fontsize" id="fontsizeS" value="size_s.css" 
6155 05 Oct 12 nicklas 173               <%="size_s.css".equals(fontsize) ? "checked" : ""%>
6155 05 Oct 12 nicklas 174               data-scale="90"
5904 09 Dec 11 nicklas 175               ><label for="fontsizeS">S</label>
5904 09 Dec 11 nicklas 176             <input type="radio" name="fontsize" id="fontsizeM" value="size_m.css" 
6155 05 Oct 12 nicklas 177               <%="size_m.css".equals(fontsize) ? "checked" : ""%>
6155 05 Oct 12 nicklas 178               data-scale="100"
5904 09 Dec 11 nicklas 179               ><label for="fontsizeM">M</label>
5904 09 Dec 11 nicklas 180             <input type="radio" name="fontsize" id="fontsizeL" value="size_l.css" 
6155 05 Oct 12 nicklas 181               <%="size_l.css".equals(fontsize) ? "checked" : ""%>
6155 05 Oct 12 nicklas 182               data-scale="115"
5904 09 Dec 11 nicklas 183               ><label for="fontsizeL">L</label>
5904 09 Dec 11 nicklas 184             <input type="radio" name="fontsize" id="fontsizeXL" value="size_xl.css" 
6155 05 Oct 12 nicklas 185               <%="size_xl.css".equals(fontsize) ? "checked" : ""%>
6155 05 Oct 12 nicklas 186               data-scale="130"
5904 09 Dec 11 nicklas 187               ><label for="fontsizeXL">XL</label>
5904 09 Dec 11 nicklas 188           </td>
5904 09 Dec 11 nicklas 189         </tr>
5904 09 Dec 11 nicklas 190         <tr>
5904 09 Dec 11 nicklas 191           <th>Scale factor</th>
5904 09 Dec 11 nicklas 192           <td>
6155 05 Oct 12 nicklas 193             <input class="text required" type="text" name="scale" id="scale"
5904 09 Dec 11 nicklas 194             value="<%=Values.getInt(sc.getUserClientSetting("appearance.scale"), 100)%>" 
6155 05 Oct 12 nicklas 195             size="4" maxlength="3">%
5904 09 Dec 11 nicklas 196             (50 - 200)
5904 09 Dec 11 nicklas 197           </td>
5904 09 Dec 11 nicklas 198         </tr>
5904 09 Dec 11 nicklas 199         <tr>
5904 09 Dec 11 nicklas 200           <th>Display long texts</th>
5904 09 Dec 11 nicklas 201           <td>
5904 09 Dec 11 nicklas 202             <input type="radio" name="longTexts" id="longTextsAlways" value="display" 
5904 09 Dec 11 nicklas 203               <%="display".equals(longTexts) ? "checked" : "" %>
5904 09 Dec 11 nicklas 204               ><label for="longTextsAlways">Always</label>
5904 09 Dec 11 nicklas 205             <input type="radio" name="longTexts" id="longTextsHover" value="hover" 
5904 09 Dec 11 nicklas 206               <%="hover".equals(longTexts) ? "checked" : "" %>
5904 09 Dec 11 nicklas 207               ><label for="longTextsHover">On hover</label>
5904 09 Dec 11 nicklas 208             <input type="radio" name="longTexts" id="longTextsClick" value="click" 
5904 09 Dec 11 nicklas 209               <%="click".equals(longTexts) ? "checked" : "" %>
5904 09 Dec 11 nicklas 210               ><label for="longTextsClick">On click</label>
5904 09 Dec 11 nicklas 211           </td>
5904 09 Dec 11 nicklas 212         </tr>    
5904 09 Dec 11 nicklas 213         <tr>
5904 09 Dec 11 nicklas 214           <th>Toolbar</th>
5904 09 Dec 11 nicklas 215           <td>
5904 09 Dec 11 nicklas 216             <input type="radio" name="toolbar" id="toolbarBoth" value="both" 
5904 09 Dec 11 nicklas 217               <%=hasImages && hasText ? "checked" : "" %>
5904 09 Dec 11 nicklas 218               ><label for="toolbarBoth">Images and text</label>
5904 09 Dec 11 nicklas 219             <input type="radio" name="toolbar" id="toolbarImages" value="images" 
5904 09 Dec 11 nicklas 220               <%=hasImages && !hasText ? "checked" : "" %>
5904 09 Dec 11 nicklas 221               ><label for="toolbarImages">Images only</label>
5904 09 Dec 11 nicklas 222             <input type="radio" name="toolbar" id="toolbarText" value="text" 
5904 09 Dec 11 nicklas 223               <%=!hasImages && hasText ? "checked" : "" %>
5904 09 Dec 11 nicklas 224               ><label for="toolbarText">Text only</label>
5904 09 Dec 11 nicklas 225           </td>
5904 09 Dec 11 nicklas 226         </tr>    
5904 09 Dec 11 nicklas 227         <tr>
5904 09 Dec 11 nicklas 228           <th>Ratio color range</th>
5904 09 Dec 11 nicklas 229           <td>
6155 05 Oct 12 nicklas 230             <span id="btnMinColor" tabindex="0" class="link" data-dialog-title="Color for min value" data-color-box="mincolor"
6187 29 Oct 12 nicklas 231               ><span id="mincolor.visual" style="background: #<%=minColor%>; display: inline-block;" class="colorbox large">&nbsp;</span>Min</span>
5904 09 Dec 11 nicklas 232             
6155 05 Oct 12 nicklas 233             <span id="btnMidColor" tabindex="0" class="link" data-dialog-title="Color for midpoint value" data-color-box="midcolor"
6187 29 Oct 12 nicklas 234               ><span id="midcolor.visual" style="background: #<%=midColor%>; display: inline-block;" class="colorbox large">&nbsp;</span>Mid</span>
6155 05 Oct 12 nicklas 235             
6155 05 Oct 12 nicklas 236             <span id="btnMaxColor" tabindex="0" class="link" data-dialog-title="Color for max value" data-color-box="maxcolor"
6187 29 Oct 12 nicklas 237               ><span id="maxcolor.visual" style="background: #<%=maxColor%>; display: inline-block;" class="colorbox large">&nbsp;</span>Max</span>
6155 05 Oct 12 nicklas 238           
6155 05 Oct 12 nicklas 239
6155 05 Oct 12 nicklas 240               <select name="presets" id="colorPresets" class="selectionlist">
5904 09 Dec 11 nicklas 241               <option value="">- presets -
5904 09 Dec 11 nicklas 242               <option value="FF0000,FFFF00,00FF00">Red - Yellow - Green
5904 09 Dec 11 nicklas 243               <option value="0000FF,FFFFFF,FFFF00">Blue - White - Yellow
5904 09 Dec 11 nicklas 244               <option value="000000,999999,FFFFFF">Black - Grey - White
5904 09 Dec 11 nicklas 245               <%
5904 09 Dec 11 nicklas 246               if (recentColors != null && recentColors.size() > 0)
5904 09 Dec 11 nicklas 247               {
5904 09 Dec 11 nicklas 248                 %>
6155 05 Oct 12 nicklas 249                 <option value="" class="recentheader" disabled>- recently used -
5904 09 Dec 11 nicklas 250                 <%
5904 09 Dec 11 nicklas 251                 for (int i = 0; i < recentColors.size(); ++i)
5904 09 Dec 11 nicklas 252                 {
5904 09 Dec 11 nicklas 253                   String color = recentColors.get(i);
5904 09 Dec 11 nicklas 254                   %>
5904 09 Dec 11 nicklas 255                   <option value="<%=color%>" class="recent"><%=color%>
5904 09 Dec 11 nicklas 256                   <%
5904 09 Dec 11 nicklas 257                 }
5904 09 Dec 11 nicklas 258               }
5904 09 Dec 11 nicklas 259               %>
5904 09 Dec 11 nicklas 260               </select>
5904 09 Dec 11 nicklas 261           </td>
5904 09 Dec 11 nicklas 262         </tr>
5904 09 Dec 11 nicklas 263         <tr>
5904 09 Dec 11 nicklas 264           <th>Date format</th>
5904 09 Dec 11 nicklas 265           <td>
5904 09 Dec 11 nicklas 266             <input class="text" type="text" name="date_format" 
5904 09 Dec 11 nicklas 267             value="<%=HTML.encodeTags(FormatterSettings.getDateFormat(sc))%>" 
5904 09 Dec 11 nicklas 268             size="20">
6155 05 Oct 12 nicklas 269             <select name="datePresets" id="datePresets" class="selectionlist">
5904 09 Dec 11 nicklas 270               <option value="">- presets -
5904 09 Dec 11 nicklas 271               <option value="yyyy-MM-dd">yyyy-MM-dd
5904 09 Dec 11 nicklas 272               <option value="d/M/yyyy">d/M/yyyy
5904 09 Dec 11 nicklas 273               <option value="M/d/yyyy">M/d/yyyy
5904 09 Dec 11 nicklas 274               <%
5904 09 Dec 11 nicklas 275               if (recentDateFormats != null && recentDateFormats.size() > 0)
5904 09 Dec 11 nicklas 276               {
5904 09 Dec 11 nicklas 277                 %>
6155 05 Oct 12 nicklas 278                 <option value="" class="recentheader" disabled>- recently used -
5904 09 Dec 11 nicklas 279                 <%
5904 09 Dec 11 nicklas 280                 for (int i = 0; i < recentDateFormats.size(); ++i)
5904 09 Dec 11 nicklas 281                 {
5904 09 Dec 11 nicklas 282                   String format = HTML.encodeTags(recentDateFormats.get(i));
5904 09 Dec 11 nicklas 283                   %>
5904 09 Dec 11 nicklas 284                   <option value="<%=format%>" class="recent"><%=format%>
5904 09 Dec 11 nicklas 285                   <%
5904 09 Dec 11 nicklas 286                 }
5904 09 Dec 11 nicklas 287               }
5904 09 Dec 11 nicklas 288               %>
5904 09 Dec 11 nicklas 289             </select>
5904 09 Dec 11 nicklas 290           </td>
5904 09 Dec 11 nicklas 291         </tr>
5904 09 Dec 11 nicklas 292         
5904 09 Dec 11 nicklas 293         <tr>
5904 09 Dec 11 nicklas 294           <th>Date-time format</th>
5904 09 Dec 11 nicklas 295           <td>
5904 09 Dec 11 nicklas 296             <input class="text" type="text" name="datetime_format" 
5904 09 Dec 11 nicklas 297             value="<%=HTML.encodeTags(FormatterSettings.getDateTimeFormat(sc))%>" 
5904 09 Dec 11 nicklas 298             size="20">
6155 05 Oct 12 nicklas 299             <select name="dateTimePresets" id="dateTimePresets" class="selectionlist">
5904 09 Dec 11 nicklas 300               <option value="">- presets -
5904 09 Dec 11 nicklas 301               <option value="yyyy-MM-dd HH:mm:ss">yyyy-MM-dd HH:mm:ss
5904 09 Dec 11 nicklas 302               <option value="d/M/yyyy HH:mm:ss">d/M/yyyy HH:mm:ss
5904 09 Dec 11 nicklas 303               <option value="M/d/yyyy HH:mm:ss">M/d/yyyy HH:mm:ss
5904 09 Dec 11 nicklas 304               <%
5904 09 Dec 11 nicklas 305               if (recentDateTimeFormats != null && recentDateTimeFormats.size() > 0)
5904 09 Dec 11 nicklas 306               {
5904 09 Dec 11 nicklas 307                 %>
6155 05 Oct 12 nicklas 308                 <option value="" class="recentheader" disabled>- recently used -
5904 09 Dec 11 nicklas 309                 <%
5904 09 Dec 11 nicklas 310                 for (int i = 0; i < recentDateTimeFormats.size(); ++i)
5904 09 Dec 11 nicklas 311                 {
5904 09 Dec 11 nicklas 312                   String format = HTML.encodeTags(recentDateTimeFormats.get(i));
5904 09 Dec 11 nicklas 313                   %>
5904 09 Dec 11 nicklas 314                   <option value="<%=format%>" class="recent"><%=format%>
5904 09 Dec 11 nicklas 315                   <%
5904 09 Dec 11 nicklas 316                 }
5904 09 Dec 11 nicklas 317               }
5904 09 Dec 11 nicklas 318               %>
5904 09 Dec 11 nicklas 319             </select>
5904 09 Dec 11 nicklas 320           </td>
5904 09 Dec 11 nicklas 321         </tr>
419 19 Apr 05 nicklas 322         <%
5904 09 Dec 11 nicklas 323         int numDecimals = FormatterSettings.getNumDecimals(sc);
419 19 Apr 05 nicklas 324         %>
2733 16 Oct 06 nicklas 325         <tr>
5904 09 Dec 11 nicklas 326           <th>Decimals</th>
5904 09 Dec 11 nicklas 327           <td>
8144 21 Apr 23 nicklas 328             <select name="decimals" style="width: 5em;">
2733 16 Oct 06 nicklas 329             <%
5904 09 Dec 11 nicklas 330             for (int i = 0; i < 8; i++)
2733 16 Oct 06 nicklas 331             {
2733 16 Oct 06 nicklas 332               %>
5904 09 Dec 11 nicklas 333               <option value="<%=i%>" <%=numDecimals == i ? "selected" : ""%>><%=i%>
2733 16 Oct 06 nicklas 334               <%
2733 16 Oct 06 nicklas 335             }
5904 09 Dec 11 nicklas 336             %>
5904 09 Dec 11 nicklas 337             <option value="-1" <%=numDecimals < 0 ? "selected" : ""%>>all
5904 09 Dec 11 nicklas 338             </select>
5904 09 Dec 11 nicklas 339           </td>
2733 16 Oct 06 nicklas 340         </tr>
8144 21 Apr 23 nicklas 341         <%
8144 21 Apr 23 nicklas 342         Character ts = FormatterSettings.getThousandsSeparator(sc);
8144 21 Apr 23 nicklas 343         %>
6520 18 Aug 14 nicklas 344         <tr>
8144 21 Apr 23 nicklas 345           <th>Thousands separator</th>
8144 21 Apr 23 nicklas 346           <td>
8144 21 Apr 23 nicklas 347             <select name="thousands_separator" style="width: 5em;">
8144 21 Apr 23 nicklas 348             <option value="" <%=ts==null?"selected":""%>>(none)
8144 21 Apr 23 nicklas 349             <%
8144 21 Apr 23 nicklas 350             boolean noMatch = ts != null;
8144 21 Apr 23 nicklas 351             for (Character c : Arrays.asList(' ', ','))
8144 21 Apr 23 nicklas 352             {
8144 21 Apr 23 nicklas 353               boolean selected = c.equals(ts);
8144 21 Apr 23 nicklas 354               if (selected) noMatch = false;
8144 21 Apr 23 nicklas 355               %>
8144 21 Apr 23 nicklas 356               <option value="<%=c%>" <%=selected ? "selected" : ""%>><%=c==' '?"(space)":c%>
8144 21 Apr 23 nicklas 357               <%
8144 21 Apr 23 nicklas 358             }
8144 21 Apr 23 nicklas 359             if (noMatch)
8144 21 Apr 23 nicklas 360             {
8144 21 Apr 23 nicklas 361               %>
8144 21 Apr 23 nicklas 362               <option value="<%=ts%>" selected><%=ts%>
8144 21 Apr 23 nicklas 363               <%
8144 21 Apr 23 nicklas 364             }
8144 21 Apr 23 nicklas 365             %>
8144 21 Apr 23 nicklas 366             </select>
8144 21 Apr 23 nicklas 367           </td>
8144 21 Apr 23 nicklas 368         </tr>
8144 21 Apr 23 nicklas 369         <tr>
6520 18 Aug 14 nicklas 370           <th>Dialogs</th>
6520 18 Aug 14 nicklas 371           <td>
6540 26 Sep 14 nicklas 372             <label id="rememberPositions"><input type="checkbox" name="remember_positions" value="1" 
6520 18 Aug 14 nicklas 373               <%=rememberDialogPositions ? "checked" : "" %>
6520 18 Aug 14 nicklas 374               >Remember positions</label>
6520 18 Aug 14 nicklas 375           </td>
6520 18 Aug 14 nicklas 376         </tr>    
7112 16 Mar 16 nicklas 377         <tr>
7112 16 Mar 16 nicklas 378           <th>Start page</th>
7112 16 Mar 16 nicklas 379           <td>
7112 16 Mar 16 nicklas 380             <select name="start_page" class="selectionlist">
7112 16 Mar 16 nicklas 381               <option value="" title="The BASE › Home page">BASE › Home
7112 16 Mar 16 nicklas 382               <%
7112 16 Mar 16 nicklas 383               Iterator<StartPageAction> it = invoker.iterator();
7112 16 Mar 16 nicklas 384               while (it.hasNext())
7112 16 Mar 16 nicklas 385               {
7112 16 Mar 16 nicklas 386                 try
7112 16 Mar 16 nicklas 387                 {
7112 16 Mar 16 nicklas 388                   StartPageAction action = it.next();
7112 16 Mar 16 nicklas 389                   %>
7112 16 Mar 16 nicklas 390                   <option value="<%=action.getId()%>" 
7112 16 Mar 16 nicklas 391                     title="<%=HTML.encodeTags(action.getDescription())%>"
7112 16 Mar 16 nicklas 392                     <%=action.getId().equals(startPageId) ? "selected": ""%>
7112 16 Mar 16 nicklas 393                     ><%=HTML.encodeTags(action.getName())%>
7112 16 Mar 16 nicklas 394                   <%
7112 16 Mar 16 nicklas 395                 }
7112 16 Mar 16 nicklas 396                 catch (RuntimeException ex)
7112 16 Mar 16 nicklas 397                 {} // Ignore exceptions thrown inside extensions
7112 16 Mar 16 nicklas 398               }
7112 16 Mar 16 nicklas 399               %>
7112 16 Mar 16 nicklas 400             </select>
7112 16 Mar 16 nicklas 401           </td>
7112 16 Mar 16 nicklas 402         </tr>    
5904 09 Dec 11 nicklas 403         <tr class="dynamic">
5904 09 Dec 11 nicklas 404           <th></th>
6163 10 Oct 12 nicklas 405           <td></td>
5904 09 Dec 11 nicklas 406         </tr>
2733 16 Oct 06 nicklas 407         </table>
5904 09 Dec 11 nicklas 408       </t:tab>
5904 09 Dec 11 nicklas 409       
5904 09 Dec 11 nicklas 410       <t:tab
5904 09 Dec 11 nicklas 411         id="plugins" 
5904 09 Dec 11 nicklas 412         title="Plugins" 
5904 09 Dec 11 nicklas 413         helpid="userpreferences.plugins"
5904 09 Dec 11 nicklas 414         >
5904 09 Dec 11 nicklas 415         <table class="fullform">
5904 09 Dec 11 nicklas 416         <tr>
5904 09 Dec 11 nicklas 417           <th>Messages</th>
5904 09 Dec 11 nicklas 418           <td>
5904 09 Dec 11 nicklas 419             <%
5904 09 Dec 11 nicklas 420             boolean sendMessage = Values.getBoolean(sc.getUserClientSetting("plugins.sendmessage"), true);
2943 23 Nov 06 nicklas 421             %>
5904 09 Dec 11 nicklas 422             <input type="checkbox" name="sendmessage" id="sendMessage" value="1" <%=sendMessage ? "checked" : ""%>
5904 09 Dec 11 nicklas 423               ><label for="sendMessage">Send message when plugin completes</label>
5904 09 Dec 11 nicklas 424           </td>
5904 09 Dec 11 nicklas 425         </tr>
5904 09 Dec 11 nicklas 426         <tr>
5904 09 Dec 11 nicklas 427           <th>Remove jobs</th>      
5904 09 Dec 11 nicklas 428           <td>
2943 23 Nov 06 nicklas 429             <%
5904 09 Dec 11 nicklas 430             boolean removeJobWhenFinished = Values.getBoolean(sc.getUserClientSetting("plugins.removejob"), false);
2943 23 Nov 06 nicklas 431             %>
5904 09 Dec 11 nicklas 432             <input type="checkbox" name="removejob" id="removeJob" value="1" <%=removeJobWhenFinished ? "checked" : "" %>
5904 09 Dec 11 nicklas 433               ><label for="removeJob">Remove import and export jobs when they are finished.</label>
5904 09 Dec 11 nicklas 434           </td>
5904 09 Dec 11 nicklas 435         </tr>
5904 09 Dec 11 nicklas 436         <tr>
5904 09 Dec 11 nicklas 437           <th>Show warnings</th>      
5904 09 Dec 11 nicklas 438           <td>
2943 23 Nov 06 nicklas 439             <%
5904 09 Dec 11 nicklas 440             boolean showWarnings = Values.getBoolean(sc.getUserClientSetting("plugins.showWarnings"), false);
5904 09 Dec 11 nicklas 441             %>
5904 09 Dec 11 nicklas 442             <input type="checkbox" name="show_warnings" id="showWarnings" value="1" <%=showWarnings ? "checked" : "" %>
5904 09 Dec 11 nicklas 443               ><label for="showWarnings">Show plug-in warning messages when starting a new job.</label>
5904 09 Dec 11 nicklas 444           </td>
5904 09 Dec 11 nicklas 445         </tr>
5904 09 Dec 11 nicklas 446         <tr class="dynamic">
5904 09 Dec 11 nicklas 447           <th></th>
5904 09 Dec 11 nicklas 448           <td></td>
5904 09 Dec 11 nicklas 449         </tr>
5904 09 Dec 11 nicklas 450         </table>
5904 09 Dec 11 nicklas 451       </t:tab>
5904 09 Dec 11 nicklas 452       
5904 09 Dec 11 nicklas 453       <t:tab
5904 09 Dec 11 nicklas 454         id="mostRecent"
5904 09 Dec 11 nicklas 455         title="Recent items"
5904 09 Dec 11 nicklas 456         helpid="userpreferences.mostrecent"
5904 09 Dec 11 nicklas 457         tooltip="Specify how many items to remember in lists of 'most recent items'"
5904 09 Dec 11 nicklas 458         >
3190 13 Mar 07 enell 459         <%
5904 09 Dec 11 nicklas 460         boolean loadNames = Values.getBoolean(sc.getUserClientSetting("menu.mostRecent.loadNames"), true);
3190 13 Mar 07 enell 461         %>
5904 09 Dec 11 nicklas 462         <table class="fullform">
5905 12 Dec 11 nicklas 463         <tr >
5904 09 Dec 11 nicklas 464           <th>Recently viewed items</th>
5904 09 Dec 11 nicklas 465           <td>
6155 05 Oct 12 nicklas 466             <input class="text required" type="text" name="maxViewed" id="maxViewed"
5904 09 Dec 11 nicklas 467               value="<%=Values.getInt(sc.getUserClientSetting("menu.mostRecent.maxViewed"), 6)%>" 
6155 05 Oct 12 nicklas 468               size="4" maxlength="2">
5904 09 Dec 11 nicklas 469             (0 - 10)
5904 09 Dec 11 nicklas 470           </td>
5904 09 Dec 11 nicklas 471         </tr>
5904 09 Dec 11 nicklas 472         <tr>
5904 09 Dec 11 nicklas 473           <th>Recently used items</th>
5904 09 Dec 11 nicklas 474           <td>
6155 05 Oct 12 nicklas 475             <input class="text required" type="text" name="maxUsed" id="maxUsed"
5904 09 Dec 11 nicklas 476               value="<%=Values.getInt(sc.getUserClientSetting("appearance.recent"), 4)%>" 
6155 05 Oct 12 nicklas 477               size="4" maxlength="2">
5904 09 Dec 11 nicklas 478             (0 - 10)
5904 09 Dec 11 nicklas 479           </td>
5904 09 Dec 11 nicklas 480         </tr>
5904 09 Dec 11 nicklas 481         <tr>
5904 09 Dec 11 nicklas 482           <th>Load item names</th>
5904 09 Dec 11 nicklas 483           <td>
5904 09 Dec 11 nicklas 484             <input type="checkbox" name="loadNames" id="loadNames" value="1" <%=loadNames ? "checked" : ""%>>
5904 09 Dec 11 nicklas 485             <label for="loadNames">Load the names of all items</label>
5904 09 Dec 11 nicklas 486           </td>
5904 09 Dec 11 nicklas 487         </tr>
5904 09 Dec 11 nicklas 488         <tr class="dynamic">
5904 09 Dec 11 nicklas 489           <th></th>
5904 09 Dec 11 nicklas 490           <td>
5904 09 Dec 11 nicklas 491         <table>
5904 09 Dec 11 nicklas 492         <tr>
5906 12 Dec 11 nicklas 493           <td>
5906 12 Dec 11 nicklas 494             <base:buttongroup
5906 12 Dec 11 nicklas 495               vertical="true">
5906 12 Dec 11 nicklas 496               <base:button
6155 05 Oct 12 nicklas 497                 id="moveUp"
5906 12 Dec 11 nicklas 498                 image="move_up.png"
5906 12 Dec 11 nicklas 499                 tooltip="Move up" 
5906 12 Dec 11 nicklas 500                 subclass="square"
6155 05 Oct 12 nicklas 501                 data-down="0"
5906 12 Dec 11 nicklas 502               />
5906 12 Dec 11 nicklas 503               <base:button 
6155 05 Oct 12 nicklas 504                 id="moveDown"
5906 12 Dec 11 nicklas 505                 image="move_down.png"
5906 12 Dec 11 nicklas 506                 tooltip="Move down" 
5906 12 Dec 11 nicklas 507                 subclass="square"
6155 05 Oct 12 nicklas 508                 data-down="1"
5906 12 Dec 11 nicklas 509               />
5906 12 Dec 11 nicklas 510             </base:buttongroup>
5904 09 Dec 11 nicklas 511           </td>
5904 09 Dec 11 nicklas 512           <td>
5904 09 Dec 11 nicklas 513             <b>Sticky items</b><br>
6155 05 Oct 12 nicklas 514             <select name="sticky_items" id="stickyItems" multiple size="12" style="width: 12em;">
6153 28 Sep 12 nicklas 515               <%
6153 28 Sep 12 nicklas 516               Iterator<Item> it = allItems.iterator();
6153 28 Sep 12 nicklas 517               while (it.hasNext())
6153 28 Sep 12 nicklas 518               {
6153 28 Sep 12 nicklas 519                 Item item = it.next();
6153 28 Sep 12 nicklas 520                 if (stickyItems.contains(item.name()))
6153 28 Sep 12 nicklas 521                 {
6153 28 Sep 12 nicklas 522                   it.remove();
6153 28 Sep 12 nicklas 523                   %>
6153 28 Sep 12 nicklas 524                   <option value="<%=item.name()%>"><%=item.toString() %>
6153 28 Sep 12 nicklas 525                   <%
6153 28 Sep 12 nicklas 526                 }
6153 28 Sep 12 nicklas 527               }
6153 28 Sep 12 nicklas 528               %>
5904 09 Dec 11 nicklas 529             </select>
5904 09 Dec 11 nicklas 530           </td>
5904 09 Dec 11 nicklas 531           <td>
5906 12 Dec 11 nicklas 532             <base:buttongroup
5906 12 Dec 11 nicklas 533               vertical="true"
5906 12 Dec 11 nicklas 534               >
5906 12 Dec 11 nicklas 535               <base:button
6155 05 Oct 12 nicklas 536                 id="moveLeft"
5906 12 Dec 11 nicklas 537                 image="move_left.png" 
5906 12 Dec 11 nicklas 538                 tooltip="Show this item in the 'Most recent' menu" 
5906 12 Dec 11 nicklas 539                 subclass="square"
5906 12 Dec 11 nicklas 540               />
5906 12 Dec 11 nicklas 541               <base:button 
6155 05 Oct 12 nicklas 542                 id="moveRight"
5906 12 Dec 11 nicklas 543                 image="move_right.png" 
5906 12 Dec 11 nicklas 544                 tooltip="Don't show this item in the 'Most recent' menu" 
5906 12 Dec 11 nicklas 545                 subclass="square"
5906 12 Dec 11 nicklas 546               />
5906 12 Dec 11 nicklas 547             </base:buttongroup>
5904 09 Dec 11 nicklas 548           </td>
5904 09 Dec 11 nicklas 549           <td>
5904 09 Dec 11 nicklas 550             <b>All items</b><br>
6155 05 Oct 12 nicklas 551             <select name="all_items" id="allItems" multiple size="12" style="width: 12em;">
6153 28 Sep 12 nicklas 552               <%
6153 28 Sep 12 nicklas 553               for (Item item : allItems)
6153 28 Sep 12 nicklas 554               {
6153 28 Sep 12 nicklas 555                 %>
6153 28 Sep 12 nicklas 556                 <option value="<%=item.name()%>"><%=item.toString() %>
6153 28 Sep 12 nicklas 557                 <%
6153 28 Sep 12 nicklas 558               }
6153 28 Sep 12 nicklas 559               %>
5904 09 Dec 11 nicklas 560             </select>
5904 09 Dec 11 nicklas 561           </td>
5904 09 Dec 11 nicklas 562         </tr>
5904 09 Dec 11 nicklas 563         </table>
5904 09 Dec 11 nicklas 564           
5904 09 Dec 11 nicklas 565           </td>
5904 09 Dec 11 nicklas 566         </tr>
5904 09 Dec 11 nicklas 567         </table>
5904 09 Dec 11 nicklas 568       </t:tab>
7295 20 Feb 17 nicklas 569       <t:tab
7295 20 Feb 17 nicklas 570         id="inactiveRoles"
7295 20 Feb 17 nicklas 571         title="Inactive roles"
7295 20 Feb 17 nicklas 572         helpid="userpreferences.inactiveroles"
7295 20 Feb 17 nicklas 573         tooltip="Select if any roles should be inactive by default after logging in"
7295 20 Feb 17 nicklas 574         visible="<%=roles != null && roles.size() > 0%>"
7295 20 Feb 17 nicklas 575         >
7295 20 Feb 17 nicklas 576         <table class="fullform">
7295 20 Feb 17 nicklas 577         <tr class="dynamic">
7295 20 Feb 17 nicklas 578           <th>Default roles</th>
7295 20 Feb 17 nicklas 579           <td>
7295 20 Feb 17 nicklas 580             <b>Inactive at login</b><br>
7295 20 Feb 17 nicklas 581             <%
7295 20 Feb 17 nicklas 582             for (Role r : roles)
7295 20 Feb 17 nicklas 583             {
7295 20 Feb 17 nicklas 584               boolean inactive = defaultInactive.contains(r.getId());
7295 20 Feb 17 nicklas 585               %>
7295 20 Feb 17 nicklas 586               <label><input type="checkbox" id="role.<%=r.getId()%>"
7295 20 Feb 17 nicklas 587                 name="inactiveRoles" value="<%=r.getId()%>"
7295 20 Feb 17 nicklas 588                 <%=inactive ? "checked" : "" %>
7295 20 Feb 17 nicklas 589                 ><%=HTML.encodeTags(r.getName())%></label><br>
7295 20 Feb 17 nicklas 590               <%
7295 20 Feb 17 nicklas 591             }
7295 20 Feb 17 nicklas 592             %>
7295 20 Feb 17 nicklas 593             <div class="messagecontainer note" style="margin-top: 1em;">
7295 20 Feb 17 nicklas 594             Select all roles that should be inactive by default 
7295 20 Feb 17 nicklas 595             after logging in. Note! This setting only applies when
7295 20 Feb 17 nicklas 596             logging in via the web interface.
7295 20 Feb 17 nicklas 597             </div>
7295 20 Feb 17 nicklas 598           </td>
7295 20 Feb 17 nicklas 599         </tr>
7295 20 Feb 17 nicklas 600         </table>
7295 20 Feb 17 nicklas 601         
7295 20 Feb 17 nicklas 602       </t:tab>
5904 09 Dec 11 nicklas 603     </t:tabcontrol>
5904 09 Dec 11 nicklas 604     </form>
5908 13 Dec 11 nicklas 605
5908 13 Dec 11 nicklas 606     <div class="legend">
5946 03 Feb 12 nicklas 607       <base:icon image="required.png" />= required information
5908 13 Dec 11 nicklas 608     </div>
5908 13 Dec 11 nicklas 609
5900 07 Dec 11 nicklas 610     <base:buttongroup subclass="dialogbuttons">
6163 10 Oct 12 nicklas 611       <base:button id="btnSave" title="Save" />
6155 05 Oct 12 nicklas 612       <base:button id="close" title="Cancel" />
5900 07 Dec 11 nicklas 613     </base:buttongroup>
419 19 Apr 05 nicklas 614   </base:body>
419 19 Apr 05 nicklas 615   </base:page>
419 19 Apr 05 nicklas 616   <%
419 19 Apr 05 nicklas 617 }
419 19 Apr 05 nicklas 618 finally
419 19 Apr 05 nicklas 619 {
419 19 Apr 05 nicklas 620   if (dc != null) dc.close();
419 19 Apr 05 nicklas 621 }
419 19 Apr 05 nicklas 622 %>