source: branches/2.4-stable/www/include/menu.jsp @ 3822

Last change on this file since 3822 was 3822, checked in by Nicklas Nordborg, 15 years ago

Fixes #801: Code for the "Recently viewed items" menu is unstable when data is in an unexpected format

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 36.4 KB
Line 
1<%-- $Id: menu.jsp 3822 2007-10-12 10:27:14Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg, Gregory Vincic
4  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson, Gregory Vincic
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 2
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 this program; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place - Suite 330,
23  Boston, MA  02111-1307, USA.
24  ------------------------------------------------------------------
25
26  This page is included from the <base:page> taglib to display the
27  meny.
28
29  @param name
30    The name of the menu to display:
31    - standard: The standard menu for a logged in user
32    - login: The menu used on pages where no user is logged in
33    - exception: Used on error pages, does not display a menu at all
34    - auto: Will display either the "standard" or "login" menu
35
36  @author Nicklas
37  @version 2.0
38--%>
39<%@ page session="false"
40  import="net.sf.basedb.core.SessionControl"
41  import="net.sf.basedb.core.DbControl"
42  import="net.sf.basedb.core.BasicItem"
43  import="net.sf.basedb.core.Nameable"
44  import="net.sf.basedb.core.Permission"
45  import="net.sf.basedb.core.Item"
46  import="net.sf.basedb.core.ItemContext"
47  import="net.sf.basedb.core.User"
48  import="net.sf.basedb.core.Project"
49  import="net.sf.basedb.core.Client"
50  import="net.sf.basedb.core.StringUtil"
51  import="net.sf.basedb.core.ItemQuery"
52  import="net.sf.basedb.core.Include"
53  import="net.sf.basedb.core.ItemResultList"
54  import="net.sf.basedb.core.query.Orders"
55  import="net.sf.basedb.core.query.Hql"
56  import="net.sf.basedb.clients.web.Base"
57  import="net.sf.basedb.clients.web.util.HTML"
58  import="net.sf.basedb.util.Values"
59  import="java.util.HashMap"
60  import="java.util.ArrayList"
61  import="java.util.List"
62  import="java.util.Arrays"
63%>
64<%@ taglib prefix="m" uri="/WEB-INF/menu.tld" %>
65<%
66final SessionControl sc = Base.getSessionControl(pageContext, false);
67final String ID = sc == null ? "" : sc.getId();
68String name = Values.getString(request.getParameter("name"), "login");
69final String root = request.getContextPath()+"/";
70if ("exception".equals(name) && sc != null && sc.isLoggedIn()) name = "standard";
71
72if ("login".equals(name))
73{
74}
75else if ("recentItems".equals(name) && sc != null && sc.isLoggedIn())
76{
77  // Recently used items menu
78  String stickyItems = Values.getString(sc.getUserClientSetting("menu.mostRecent"), 
79    "EXPERIMENT:BIOASSAYSET:TRANSFORMATION");
80  boolean loadNames = Values.getBoolean(sc.getUserClientSetting("menu.mostRecent.loadNames"), 
81    true);
82  String recentItems = sc.getUserClientSetting("menu.mostRecent.viewed");
83  DbControl dc = loadNames ? sc.newDbControl() : null;
84  try
85  {
86    %>
87    <m:menu
88      id="mostRecent"
89      style="display: none;"
90      >
91      <%
92      int numItems = 0;
93      // Recently viewed items
94      List<String> recentlyViewed = recentItems == null ? 
95        new ArrayList<String>() : Arrays.asList(recentItems.split(":"));
96      if (recentlyViewed.size() > 0)
97      {
98        %>
99        <m:menuitem 
100          title="Recently viewed items" 
101          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
102          enabled="false" 
103        />
104        <m:menuseparator />
105        <%
106        for (String recent : recentlyViewed)
107        {
108          try
109          {
110            String[] tmp = recent.split("=");
111            Item itemType = Item.valueOf(tmp[0]);
112            int itemId = Values.getInt(tmp[1], 0);
113            if (itemId != 0)
114            {
115              String shortName = "";
116              String fullName = "";
117              if (loadNames)
118              {
119                try
120                {
121                  BasicItem item = itemType.getById(dc, itemId);
122                  fullName = ((Nameable)item).getName();
123                  shortName = HTML.encodeTags(StringUtil.trimString(fullName, 35));
124                }
125                catch (Throwable t)
126                {
127                  continue;
128                }
129              }
130              else
131              {
132                fullName = itemType.toString() + "; id=" + itemId;
133                shortName = itemType + " (id=" + itemId + ")";
134              }
135              numItems++;
136              %>
137              <m:menuitem
138                title="<%=numItems + ". " + shortName%>"
139                onclick="<%="Main.viewOrEditItem('" + ID + "', '" + itemType.name() + "', " + itemId + ")"%>"
140                tooltip="<%="Go to " + HTML.encodeTags(fullName) + " (" + itemType + ")"%>"
141              />
142              <%
143            }
144          }
145          catch (Throwable t)
146          {}
147        }
148      }
149      if (stickyItems != null && stickyItems.length() > 0)
150      {
151        int numSticky = 0;
152        if (numItems > 0)
153        {
154          %>
155          <m:menuseparator />
156          <%
157        }
158        %>
159        <m:menuitem 
160          title="Sticky items" 
161          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
162          enabled="false" 
163        />
164        <m:menuseparator />
165        <%
166        // Sticky items
167        for (String recentItem : stickyItems.split(":"))
168        {
169          try
170          {
171            Item itemType = Item.valueOf(recentItem);
172            ItemContext cc = sc.getCurrentContext(itemType);
173            if (cc.getId() != 0)
174            {
175              String shortName = "";
176              String fullName = "";
177              if (loadNames)
178              {
179                try
180                {
181                  BasicItem item = itemType.getById(dc, cc.getId());
182                  fullName = ((Nameable)item).getName();
183                  shortName = ": " + HTML.encodeTags(StringUtil.trimString(fullName, 30));
184                }
185                catch (Throwable t)
186                {
187                  continue;
188                }
189              }
190              else
191              {
192                fullName = itemType.toString() + "; id=" + cc.getId();
193                shortName = " (id=" + cc.getId() + ")";
194              }
195              numItems++;
196              numSticky++;
197              %>
198              <m:menuitem
199                title="<%=itemType + shortName%>"
200                onclick="<%="Main.viewOrEditItem('" + ID + "', '" + itemType.name() + "', " + cc.getId() + ")"%>"
201                tooltip="<%="Go to " + HTML.encodeTags(fullName) + " (" + itemType + ")"%>"
202              />
203              <%
204              if (itemType == Item.BIOASSAYSET)
205              {
206                // Add menu for Experiment explorer as well
207                %>
208                <m:menuitem
209                  title="<%="Experiment explorer"+HTML.encodeTags(shortName)%>"
210                  onclick="<%="location.href = '"+root+"views/experiments/explorer/view/index.jsp?ID=" + ID + "&bioassayset_id="+cc.getId()+"'"%>"
211                  tooltip="Go to experiment explorer"
212                />
213                <%
214              }
215            }
216          }
217          catch (Throwable t)
218          {}
219        }
220        if (numSticky == 0)
221        {
222          %>
223          <m:menuitem 
224            title="<i>- no sticky items -</i>"
225            enabled="false"
226          />
227          <%
228        }
229      }
230      %>
231      <m:menuseparator />
232      <m:menuitem 
233        title="Options&hellip;" 
234        onclick="<%="Main.openPopup('"+root+"my_base/user/preferences.jsp?ID="+ID+"&page=mostRecent', 'Preferences', 500, 400);"%>"
235        tooltip="Change options for this menu" 
236      />
237    </m:menu>
238    <%
239  }
240  finally
241  {
242    if (dc != null) dc.close();
243  }
244}
245else if ("standard".equals(name))
246{
247  final DbControl dc = sc.newDbControl(); 
248  ItemResultList<Project> projects = null;
249  StringBuilder fillText = new StringBuilder();
250  try
251  {
252    fillText.append("<a href=\"javascript:void(0)\" title=\"Refresh current page\"");
253    fillText.append(" onclick=\"location.reload()\">");
254    fillText.append("<img src=\""+root+"images/refresh.gif\" border=\"0\"></a><span class=\"menuseparator\">&nbsp;&nbsp;</span>");
255   
256    fillText.append("<a href=\"javascript:void(0)\" title=\"Go to the most recently viewed item\"");
257    fillText.append(" onclick=\"Menu.toggleTopMenu(document.getElementById('mostRecent'), event.clientX-20, event.clientY); event.cancelBubble = true;\">");
258    fillText.append(" <img src=\""+root+"images/recent.png\" border=\"0\"><img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a><span class=\"menuseparator\">&nbsp;&nbsp;</span>");
259   
260    Project activeProject = sc.getActiveProjectId() == 0 ? null : Project.getById(dc, sc.getActiveProjectId());
261    fillText.append("<img src=\""+root+"images/project.gif\" border=\"0\"> <a href=\"javascript:void(0)\" title=\"Switch project\"");
262    fillText.append(" onclick=\"Menu.toggleTopMenu(document.getElementById('projects'), event.clientX-100, event.clientY); event.cancelBubble = true;\">");
263    fillText.append(activeProject == null ? "<i>- none -</i>" : HTML.encodeTags(activeProject.getName()));
264    fillText.append(" <img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a><span class=\"menuseparator\">&nbsp;&nbsp;</span>");
265   
266    User user = User.getById(dc, sc.getLoggedInUserId());
267    String userPrompt = sc.isImpersonated() ? "Impersonated" : "User";
268    fillText.append("<img src=\""+root+"images/take_ownership.png\" border=\"0\"> <a href=\"javascript:void(0)\" title=\"Switch user/logout\"");
269    fillText.append(" onclick=\"javascript:Menu.toggleTopMenu(document.getElementById('switchuser'), event.clientX-100, event.clientY); event.cancelBubble = true;\">");
270    fillText.append(HTML.encodeTags(user.getLogin()));
271    fillText.append(" (").append(user.getName()).append(") <img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a>");
272    %>
273    <%
274    // Permission settings
275    final boolean hasFiles              = !sc.hasPermission(Permission.DENIED, Item.FILE);
276    final boolean createFiles           =  sc.hasPermission(Permission.CREATE, Item.FILE);
277
278    final boolean hasProjects           = !sc.hasPermission(Permission.DENIED, Item.PROJECT); 
279    final boolean createProjects        =  sc.hasPermission(Permission.CREATE, Item.PROJECT); 
280
281    final boolean hasMessages           = !sc.hasPermission(Permission.DENIED, Item.MESSAGE); 
282    final boolean createMessages        =  sc.hasPermission(Permission.CREATE, Item.MESSAGE); 
283
284    final boolean hasLabels             = !sc.hasPermission(Permission.DENIED, Item.LABEL); 
285    final boolean createLabels          =  sc.hasPermission(Permission.CREATE, Item.LABEL); 
286
287    final boolean hasBioSources         = !sc.hasPermission(Permission.DENIED, Item.BIOSOURCE); 
288    final boolean createBioSources      =  sc.hasPermission(Permission.CREATE, Item.BIOSOURCE); 
289
290    final boolean hasSamples            = !sc.hasPermission(Permission.DENIED, Item.SAMPLE); 
291    final boolean createSamples         =  sc.hasPermission(Permission.CREATE, Item.SAMPLE);
292
293    final boolean hasExtracts           = !sc.hasPermission(Permission.DENIED, Item.EXTRACT); 
294    final boolean createExtracts        =  sc.hasPermission(Permission.CREATE, Item.EXTRACT); 
295
296    final boolean hasLabeledExtracts    = !sc.hasPermission(Permission.DENIED, Item.LABELEDEXTRACT); 
297    final boolean createLabeledExtracts =  sc.hasPermission(Permission.CREATE, Item.LABELEDEXTRACT); 
298
299    final boolean hasHybridizations     = !sc.hasPermission(Permission.DENIED, Item.HYBRIDIZATION); 
300    final boolean createHybridizations  =  sc.hasPermission(Permission.CREATE, Item.HYBRIDIZATION); 
301
302    final boolean hasScans              = !sc.hasPermission(Permission.DENIED, Item.SCAN); 
303    final boolean createScans           =  sc.hasPermission(Permission.CREATE, Item.SCAN); 
304    final boolean hasRawBioAssays       = !sc.hasPermission(Permission.DENIED, Item.RAWBIOASSAY); 
305    final boolean createRawBioAssays    =  sc.hasPermission(Permission.CREATE, Item.RAWBIOASSAY); 
306    final boolean hasExperiments        = !sc.hasPermission(Permission.DENIED, Item.EXPERIMENT); 
307    final boolean createExperiments     =  sc.hasPermission(Permission.CREATE, Item.EXPERIMENT); 
308    final boolean hasFormulas           = !sc.hasPermission(Permission.DENIED, Item.FORMULA); 
309    final boolean createFormulas        =  sc.hasPermission(Permission.CREATE, Item.FORMULA); 
310   
311    final boolean hasReporters          = !sc.hasPermission(Permission.DENIED, Item.REPORTER); 
312    final boolean hasReporterLists      = !sc.hasPermission(Permission.DENIED, Item.REPORTERLIST); 
313    final boolean createReporters       =  sc.hasPermission(Permission.CREATE, Item.REPORTER); 
314    final boolean hasJobs               = !sc.hasPermission(Permission.DENIED, Item.JOB); 
315    final boolean hasSessions           = !sc.hasPermission(Permission.DENIED, Item.SESSION); 
316    %>
317    <m:menu
318      id="view"
319      style="display: none"
320      >
321      <m:menuitem
322        title="Home" 
323        onclick="<%="Menu.openUrl('"+root+"my_base/index.jsp?ID="+ID+"')"%>" 
324      />
325      <m:menuitem
326        title="All items"
327        tooltip="View all items that you are the owner of"
328        onclick="<%="Menu.openUrl('"+root+"views/items/index.jsp?ID="+ID+"')"%>"
329      />
330      <m:menuitem
331        title="Trashcan"
332        tooltip="View all items that have been marked for deletion"
333        onclick="<%="Menu.openUrl('"+root+"views/trashcan/index.jsp?ID="+ID+"')"%>"
334      />
335      <m:menuseparator />
336      <m:menuitem 
337        title="Files" 
338        onclick="<%="Menu.openUrl('"+root+"filemanager/index.jsp?ID="+ID+"')"%>" 
339        tooltip="<%=hasFiles ? "Manage files" : "You do not have permission to manage files"%>" 
340        enabled="<%=hasFiles%>"
341      />
342      <m:menuitem
343        title="Projects"
344        onclick="<%="Menu.openUrl('"+root+"my_base/projects/index.jsp?ID="+ID+"')"%>"
345        tooltip="Manage projects"
346        enabled="<%=hasProjects%>"
347      />
348      <m:menuitem 
349        title="Messages" 
350        onclick="<%="Menu.openUrl('"+root+"my_base/messages/index.jsp?ID="+ID+"')"%>" 
351        tooltip="<%=hasMessages ? "Read your messages" : "You do not have permission to read messages"%>" 
352        enabled="<%=hasMessages%>"
353      />
354      <m:menuitem 
355        title="Jobs" 
356        onclick="<%="Menu.openUrl('"+root+"views/jobs/index.jsp?ID="+ID+"')"%>" 
357        tooltip="<%=hasJobs ? "Check the status of your jobs" : "You do not have permission to access jobs"%>" 
358        enabled="<%=hasJobs%>"
359      />
360      <m:menuitem 
361        title="Sessions" 
362        onclick="<%="Menu.openUrl('"+root+"views/sessions/index.jsp?ID="+ID+"')"%>" 
363        tooltip="<%=hasSessions ? "Check you login sessions" : "You do not have permission to access sessions"%>" 
364        enabled="<%=hasSessions%>"
365      />
366      <m:menuseparator />
367      <m:menuitem
368        title="Biosources"
369        onclick="<%="Menu.openUrl('"+root+"biomaterials/biosources/index.jsp?ID="+ID+"')"%>"
370        tooltip="<%=hasBioSources ? "Manage biosources" : "You do not have permission to manage biosources"%>"
371        enabled="<%=hasBioSources%>"
372      />
373      <m:menuitem
374        title="Samples"
375        onclick="<%="Menu.openUrl('"+root+"biomaterials/samples/index.jsp?ID="+ID+"')"%>"
376        tooltip="<%=hasSamples ? "Manage samples" : "You do not have permission to manage samples"%>"
377        enabled="<%=hasSamples%>"
378      />
379      <m:menuitem
380        title="Extracts"
381        onclick="<%="Menu.openUrl('"+root+"biomaterials/extracts/index.jsp?ID="+ID+"')"%>"
382        tooltip="<%=hasExtracts ? "Manage extracts" : "You do not have permission to manage extracts"%>"
383        enabled="<%=hasExtracts%>"
384      />
385      <m:menuitem
386        title="Labeled extracts"
387        onclick="<%="Menu.openUrl('"+root+"biomaterials/labeledextracts/index.jsp?ID="+ID+"')"%>"
388        tooltip="<%=hasLabeledExtracts ? "Manage labeled extracts" : "You do not have permission to manage labeled extracts"%>"
389        enabled="<%=hasLabeledExtracts%>"
390      />
391      <m:menuitem
392        title="Labels"
393        onclick="<%="Menu.openUrl('"+root+"biomaterials/labels/index.jsp?ID="+ID+"')"%>"
394        tooltip="<%=hasLabels ? "Manage labels" : "You do not have permission to manage labels"%>"
395        enabled="<%=hasLabels%>"
396      />
397      <m:menuseparator />
398      <m:menuitem
399        title="Hybridizations"
400        onclick="<%="Menu.openUrl('"+root+"views/hybridizations/index.jsp?ID="+ID+"')"%>"
401        tooltip="<%=hasHybridizations ? "Manage hybridizations" : "You do not have permission to manage hybridizations"%>"
402        enabled="<%=hasHybridizations%>"
403      />
404      <m:menuitem
405        title="Scans"
406        onclick="<%="Menu.openUrl('"+root+"views/scans/index.jsp?ID="+ID+"')"%>"
407        tooltip="<%=hasScans ? "Manage scans" : "You do not have permission to manage scans"%>"
408        enabled="<%=hasScans%>"
409      />
410      <m:menuitem
411        title="Raw bioassays"
412        onclick="<%="Menu.openUrl('"+root+"views/rawbioassays/index.jsp?ID="+ID+"')"%>"
413        tooltip="<%=hasRawBioAssays ? "Manage raw bioassays" : "You do not have permission to manage raw bioassays"%>"
414        enabled="<%=hasRawBioAssays%>"
415      />
416      <m:menuitem
417        title="Experiments"
418        onclick="<%="Menu.openUrl('"+root+"views/experiments/index.jsp?ID="+ID+"')"%>"
419        tooltip="<%=hasExperiments ? "Manage experiments" : "You do not have permission to manage experiments"%>"
420        enabled="<%=hasExperiments%>"
421      />
422      <m:menuitem
423        title="Formulas"
424        onclick="<%="Menu.openUrl('"+root+"views/formulas/index.jsp?ID="+ID+"')"%>"
425        tooltip="<%=hasFormulas ? "Manage formulas" : "You do not have permission to manage formulas"%>"
426        enabled="<%=hasFormulas%>"
427      />
428      <m:menuseparator />
429      <m:menuitem
430        title="Reporters"
431        onclick="<%="Menu.openUrl('"+root+"views/reporters/index.jsp?ID="+ID+"')"%>"
432        tooltip="<%=hasReporters ? "Manage reporters" : "You do not have permission to manage reporters"%>"
433        enabled="<%=hasReporters%>"
434      />
435      <m:menuitem
436        title="Reporter lists"
437        onclick="<%="Menu.openUrl('"+root+"views/reporterlists/index.jsp?ID="+ID+"')"%>"
438        tooltip="<%=hasReporterLists ? "Manage reporter lists" : "You do not have permission to manage reporter lists"%>"
439        enabled="<%=hasReporterLists%>"
440      />
441
442    </m:menu>
443
444
445    <m:menu 
446      id="file" 
447      style="display: none"
448      >
449      <m:submenu 
450        subid="projects" 
451        title="Select project"
452        enabled="<%=hasProjects%>"
453      />
454      <m:menuseparator />
455      <m:menuitem 
456        title="Contact information&hellip;" 
457        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=contact', 'Settings', 500, 360);"%>" 
458        tooltip="Set your address, phone, email, etc." 
459      />
460      <m:menuitem 
461        title="Change password&hellip;" 
462        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=password', 'Settings', 500, 360);"%>" 
463        tooltip="Set your password" 
464      />
465      <m:menuitem 
466        title="Other information&hellip;" 
467        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=other', 'Settings', 500, 360);"%>" 
468        tooltip="Other user-related information" 
469      />
470      <m:menuseparator />
471      <m:menuitem 
472        title="Preferences&hellip;" 
473        onclick="<%="Main.openPopup('"+root+"my_base/user/preferences.jsp?ID="+ID+"', 'Preferences', 500, 400);"%>" 
474        tooltip="Change font sizes, etc." 
475      />
476      <m:menuitem 
477        title="Reload permissions" 
478        onclick="<%="Main.openPopup('"+root+"my_base/user/submit_user.jsp?ID="+ID+"&cmd=ReloadPermissions', 'ReloadPermissions', 300, 200);"%>" 
479        tooltip="Reload permissions" 
480      />
481      <m:menuseparator />
482      <m:menuitem 
483        title="Logout&hellip;" 
484        onclick="<%="Main.openPopup('"+root+"logout.jsp?ID="+ID+"', 'Logout', 360, 200);"%>"
485        tooltip="Exit from BASE" 
486      />
487    </m:menu>
488    <%
489    // Projects menu
490    int activeProjectId = sc.getActiveProjectId();
491    final ItemQuery<Project> projectQuery = Project.getQuery();
492    projectQuery.include(Include.MINE, Include.SHARED);
493    projectQuery.order(Orders.asc(Hql.property("name")));
494    projectQuery.setCacheResult(true);
495    %>
496    <m:menu 
497      id="projects"
498      style="display: none"
499      >
500      <m:menuitem
501        title="<i>- no active project -</i>"
502        onclick="<%="Main.openPopup('"+root+"my_base/projects/set_active.jsp?ID="+ID+"', 'ActivateProject', 300, 140)"%>"
503        icon="<%=activeProjectId == 0 ? "checkedmenu.gif" : null%>"
504        enabled="<%=activeProjectId != 0%>"
505        tooltip="<%=activeProjectId == 0 ? "No project is active" : "Disable the currently active project"%>"
506      />
507      <%
508      projects = projectQuery.list(dc);
509      for (Project p : projects)
510      {
511        int projectId = p.getId();
512        boolean active = activeProjectId == projectId;
513        %>
514        <m:menuitem
515          title="<%=HTML.encodeTags(p.getName())%>"
516          style="<%=active ? "color: #000000; font-weight: bold;" : null %>"
517          onclick="<%="Main.openPopup('"+root+"my_base/projects/set_active.jsp?ID="+ID+"&project_id="+p.getId()+"', 'ActivateProject', 300, 140)"%>"
518          icon="<%=active ? "checkedmenu.gif" : null%>"
519          enabled="<%=!active%>"
520          tooltip="<%=active ? "This is the active project" : "Set this project to the active project"%>"
521        />
522        <%
523      }
524      %>
525    </m:menu>
526   
527    <%
528    // Array LIMS - menu
529    final boolean hasPlateGeometries = sc.hasPermission(Permission.READ, Item.PLATEGEOMETRY);
530    final boolean hasPlateTypes = !sc.hasPermission(Permission.DENIED, Item.PLATETYPE);
531    final boolean hasPlates = !sc.hasPermission(Permission.DENIED, Item.PLATE);
532    final boolean hasPlateMappings = !sc.hasPermission(Permission.DENIED, Item.PLATEMAPPING);
533    final boolean hasArraySlides = !sc.hasPermission(Permission.DENIED, Item.ARRAYSLIDE);
534    final boolean hasArrayBatches = !sc.hasPermission(Permission.DENIED, Item.ARRAYBATCH);
535    final boolean hasArrayDesigns = !sc.hasPermission(Permission.DENIED, Item.ARRAYDESIGN);
536    final boolean hasLims = hasPlateGeometries || hasPlateTypes || hasPlates || hasPlateMappings || 
537      hasArraySlides || hasArrayBatches || hasArrayDesigns;
538    if (hasLims)
539    {
540      %>
541      <m:menu 
542        id="lims" 
543        style="display: none"
544        >
545        <m:menuitem 
546          title="Plate geometries" 
547          onclick="<%="Menu.openUrl('"+root+"lims/geometries/index.jsp?ID="+ID+"')"%>" 
548          tooltip="<%=hasPlateGeometries ? "Manage plate geometries" : "You do not have permission to manage plate geometries"%>" 
549          enabled="<%=hasPlateGeometries%>"
550        />
551        <m:menuitem 
552          title="Plate types" 
553          onclick="<%="Menu.openUrl('"+root+"lims/platetypes/index.jsp?ID="+ID+"')"%>" 
554          tooltip="<%=hasPlateTypes ? "Manage plate types" : "You do not have permission to manage plate types"%>" 
555          enabled="<%=hasPlateTypes%>"
556        />
557        <m:menuitem 
558          title="Plates" 
559          onclick="<%="Menu.openUrl('"+root+"lims/plates/index.jsp?ID="+ID+"')"%>" 
560          tooltip="<%=hasPlates ? "Manage plates" : "You do not have permission to manage plates"%>" 
561          enabled="<%=hasPlates%>"
562        />
563        <m:menuitem 
564          title="Plate mappings" 
565          onclick="<%="Menu.openUrl('"+root+"lims/platemappings/index.jsp?ID="+ID+"')"%>" 
566          tooltip="<%=hasPlateTypes ? "Manage plate mappings" : "You do not have permission to manage plate mappings"%>" 
567          enabled="<%=hasPlateTypes%>"
568        />
569        <m:menuseparator />
570        <m:menuitem 
571          title="Array designs" 
572          onclick="<%="Menu.openUrl('"+root+"lims/arraydesigns/index.jsp?ID="+ID+"')"%>" 
573          tooltip="<%=hasArrayDesigns ? "Manage array designs" : "You do not have permission to manage array designs"%>" 
574          enabled="<%=hasArrayDesigns%>"
575        />
576        <m:menuitem 
577          title="Array batches" 
578          onclick="<%="Menu.openUrl('"+root+"lims/arraybatches/index.jsp?ID="+ID+"')"%>" 
579          tooltip="<%=hasArrayBatches ? "Manage array batches" : "You do not have permission to manage array batches"%>" 
580          enabled="<%=hasArrayBatches%>"
581        />
582        <m:menuitem 
583          title="Array slides" 
584          onclick="<%="Menu.openUrl('"+root+"lims/arrayslides/index.jsp?ID="+ID+"')"%>" 
585          tooltip="<%=hasArraySlides ? "Manage array slides" : "You do not have permission to manage array slides"%>" 
586          enabled="<%=hasArraySlides%>"
587        />
588      </m:menu>
589      <%
590    }
591    %>
592    <%
593    // Administrate -> Types menu
594    final boolean hasQuotaTypes = sc.hasPermission(Permission.READ, Item.QUOTATYPE);
595    final boolean hasProtocolTypes = sc.hasPermission(Permission.READ, Item.PROTOCOLTYPE);
596    final boolean hasFileTypes = sc.hasPermission(Permission.READ, Item.FILETYPE);
597    final boolean hasMimeTypes = sc.hasPermission(Permission.READ, Item.MIMETYPE);
598    final boolean hasHardwareTypes = sc.hasPermission(Permission.READ, Item.HARDWARETYPE);
599    final boolean hasSoftwareTypes = sc.hasPermission(Permission.READ, Item.SOFTWARETYPE);
600    final boolean hasAnnotationTypeCategories = !sc.hasPermission(Permission.DENIED, Item.ANNOTATIONTYPECATEGORY);   
601    final boolean hasAnnotationTypes = !sc.hasPermission(Permission.DENIED, Item.ANNOTATIONTYPE);
602    final boolean hasReporterTypes = !sc.hasPermission(Permission.DENIED, Item.REPORTERTYPE);
603    final boolean hasExtraValueTypes = !sc.hasPermission(Permission.DENIED, Item.EXTRAVALUETYPE);
604    final boolean hasTypes = hasFileTypes || hasProtocolTypes || hasMimeTypes || hasQuotaTypes || 
605      hasSoftwareTypes || hasHardwareTypes || hasAnnotationTypeCategories || hasAnnotationTypes || 
606      hasReporterTypes || hasExtraValueTypes;
607    if (hasTypes)
608    {
609      %>
610      <m:menu 
611        id="types" 
612        style="display: none"
613        >
614        <m:menuitem 
615          title="Quota types" 
616          onclick="<%="Menu.openUrl('"+root+"admin/quotatypes/index.jsp?ID="+ID+"')"%>" 
617          tooltip="<%=hasQuotaTypes ? "Administrate quota types" : "You do not have permission to administrate quota types"%>" 
618          enabled="<%=hasQuotaTypes%>"
619        />
620        <m:menuitem 
621          title="Protocol types" 
622          onclick="<%="Menu.openUrl('"+root+"admin/protocoltypes/index.jsp?ID="+ID+"')"%>" 
623          tooltip="<%=hasProtocolTypes ? "Administrate protocol types" : "You do not have permission to administrate protocol types"%>" 
624          enabled="<%=hasProtocolTypes%>"
625        />
626        <m:menuitem 
627          title="File types" 
628          onclick="<%="Menu.openUrl('"+root+"admin/filetypes/index.jsp?ID="+ID+"')"%>" 
629          tooltip="<%=hasFileTypes ? "Administrate file types" : "You do not have permission to administrate file types"%>" 
630          enabled="<%=hasFileTypes%>"
631        />
632        <m:menuitem 
633          title="MIME types" 
634          onclick="<%="Menu.openUrl('"+root+"admin/mimetypes/index.jsp?ID="+ID+"')"%>" 
635          tooltip="<%=hasMimeTypes ? "Administrate MIME types" : "You do not have permission to administrate mime types"%>" 
636          enabled="<%=hasMimeTypes%>"
637        />
638        <m:menuitem 
639          title="Software types" 
640          onclick="<%="Menu.openUrl('"+root+"admin/softwaretypes/index.jsp?ID="+ID+"')"%>" 
641          tooltip="<%=hasSoftwareTypes ? "Administrate software types" : "You do not have permission to administrate software types"%>" 
642          enabled="<%=hasSoftwareTypes%>"
643        />
644        <m:menuitem 
645          title="Hardware types" 
646          onclick="<%="Menu.openUrl('"+root+"admin/hardwaretypes/index.jsp?ID="+ID+"')"%>" 
647          tooltip="<%=hasHardwareTypes ? "Administrate hardware types" : "You do not have permission to administrate hardware types"%>" 
648          enabled="<%=hasHardwareTypes%>"
649        />
650        <m:menuitem 
651          title="Annotation type categories" 
652          onclick="<%="Menu.openUrl('"+root+"admin/annotationtypecategories/index.jsp?ID="+ID+"')"%>" 
653          tooltip="<%=hasAnnotationTypeCategories ? "Administrate annotation type categories" : "You do not have permission to administrate annotation types categories"%>" 
654          enabled="<%=hasAnnotationTypeCategories%>"
655        />
656        <m:menuitem 
657          title="Annotation types" 
658          onclick="<%="Menu.openUrl('"+root+"admin/annotationtypes/index.jsp?ID="+ID+"')"%>" 
659          tooltip="<%=hasAnnotationTypes ? "Administrate annotation types" : "You do not have permission to administrate annotation types"%>" 
660          enabled="<%=hasAnnotationTypes%>"
661        />
662        <m:menuitem 
663          title="Reporter types" 
664          onclick="<%="Menu.openUrl('"+root+"admin/reportertypes/index.jsp?ID="+ID+"')"%>" 
665          tooltip="<%=hasReporterTypes ? "Administrate reporter types" : "You do not have permission to administrate reporter types"%>" 
666          enabled="<%=hasReporterTypes%>"
667        />
668        <m:menuitem 
669          title="Extra value types" 
670          onclick="<%="Menu.openUrl('"+root+"admin/extravaluetypes/index.jsp?ID="+ID+"')"%>" 
671          tooltip="<%=hasExtraValueTypes ? "Administrate extra value types" : "You do not have permission to administrate extra value types"%>" 
672          enabled="<%=hasExtraValueTypes%>"
673        />
674      </m:menu>
675      <%
676    }
677    %>
678   
679    <%
680    // Plugins menu
681    final boolean hasPluginTypes = !sc.hasPermission(Permission.DENIED, Item.PLUGINTYPE);
682    final boolean hasPluginDefinitions = !sc.hasPermission(Permission.DENIED, Item.PLUGINDEFINITION);
683    final boolean hasPluginConfigurations = !sc.hasPermission(Permission.DENIED, Item.PLUGINCONFIGURATION);
684    final boolean hasJobAgents = sc.hasPermission(Permission.READ, Item.JOBAGENT);
685    final boolean hasPlugins = hasPluginTypes || hasPluginDefinitions || 
686      hasPluginConfigurations || hasJobAgents;
687   
688    if (hasPlugins)
689    {
690      %>
691      <m:menu 
692        id="plugins" 
693        style="display: none"
694        >
695        <m:menuitem 
696          title="Types" 
697          onclick="<%="Menu.openUrl('"+root+"admin/plugintypes/index.jsp?ID="+ID+"')"%>" 
698          tooltip="<%=hasPluginDefinitions ? "Administrate plugin types" : "You do not have permission to administrate plugin types"%>"
699          enabled="<%=hasPluginTypes%>"
700        />
701        <m:menuitem 
702          title="Definitions" 
703          onclick="<%="Menu.openUrl('"+root+"admin/plugindefinitions/index.jsp?ID="+ID+"')"%>" 
704          tooltip="<%=hasPluginDefinitions ? "Administrate plugin definitions" : "You do not have permission to administrate plugin definitions"%>"
705          enabled="<%=hasPluginDefinitions%>"
706        />
707        <m:menuitem 
708          title="Configurations" 
709          onclick="<%="Menu.openUrl('"+root+"admin/pluginconfigurations/index.jsp?ID="+ID+"')"%>" 
710          tooltip="<%=hasPluginConfigurations ? "Administrate plugin configurations" : "You do not have permission to administrate plugin configurations"%>"
711          enabled="<%=hasPluginConfigurations%>"
712        />
713        <m:menuseparator />
714        <m:menuitem 
715          title="Job agents" 
716          onclick="<%="Menu.openUrl('"+root+"admin/jobagents/index.jsp?ID="+ID+"')"%>" 
717          tooltip="<%=hasJobAgents ? "Administrate job agents" : "You do not have permission to administrate job agents"%>"
718          enabled="<%=hasJobAgents%>"
719        />
720      </m:menu>
721      <%
722    }
723    %>
724 
725    <%
726    // Administrate menu
727    final boolean hasUsers = sc.hasPermission(Permission.READ, Item.USER);
728    final boolean hasGroups = sc.hasPermission(Permission.READ, Item.GROUP);
729    final boolean hasRoles = sc.hasPermission(Permission.READ, Item.ROLE);
730    final boolean hasQuota = sc.hasPermission(Permission.READ, Item.QUOTA);
731    final boolean hasSoftware = !sc.hasPermission(Permission.DENIED, Item.SOFTWARE);
732    final boolean hasHardware = !sc.hasPermission(Permission.DENIED, Item.HARDWARE);
733    final boolean hasProtocols = !sc.hasPermission(Permission.DENIED, Item.PROTOCOL);
734    final boolean hasClients = sc.hasPermission(Permission.READ, Item.CLIENT);
735    final boolean hasNews = sc.hasPermission(Permission.READ, Item.NEWS);
736    final boolean hasDiskUsage = sc.hasPermission(Permission.READ, Item.DISKUSAGE);
737    final Client currentClient = Client.getById(dc, sc.getClientId());
738    final boolean hasServer = currentClient.hasPermission(Permission.WRITE);
739
740    final boolean hasAdministrate = 
741      hasUsers || hasGroups || hasRoles || hasQuota || hasTypes || hasPlugins ||
742      hasSoftware || hasHardware || hasProtocols || hasClients || hasNews ||
743      hasDiskUsage || hasServer;
744
745    if (hasAdministrate)
746    {
747      %>
748      <m:menu 
749        id="administrate" 
750        style="display: none"
751        >
752        <m:menuitem 
753          title="Users" 
754          onclick="<%="Menu.openUrl('"+root+"admin/users/index.jsp?ID="+ID+"')"%>" 
755          tooltip="<%=hasUsers ? "Administrate users" : "You do not have permission to administrate users"%>"
756          enabled="<%=hasUsers%>"
757        />
758        <m:menuitem 
759          title="Groups" 
760          onclick="<%="Menu.openUrl('"+root+"admin/groups/index.jsp?ID="+ID+"')"%>" 
761          tooltip="<%=hasGroups ? "Administrate groups" : "You do not have permission to administrate groups"%>" 
762          enabled="<%=hasGroups%>"
763        />
764        <m:menuitem 
765          title="Roles" 
766          onclick="<%="Menu.openUrl('"+root+"admin/roles/index.jsp?ID="+ID+"')"%>" 
767          tooltip="<%=hasRoles ? "Administrate roles" : "You do not have permission to administrate roles"%>" 
768          enabled="<%=hasRoles%>"
769        />
770        <m:menuseparator />
771        <m:submenu 
772          subid="plugins" 
773          title="Plugins"
774          tooltip="Administrate plugin definitions and configurations"
775          enabled="<%=hasPlugins%>"
776        />
777        <m:menuseparator />
778        <m:menuitem 
779          title="Quota" 
780          onclick="<%="Menu.openUrl('"+root+"admin/quota/index.jsp?ID="+ID+"')"%>" 
781          tooltip="<%=hasQuota ? "Administrate quota" : "You do not have permission to administrate quota"%>" 
782          enabled="<%=hasQuota%>"
783        />
784        <m:menuitem 
785          title="Software" 
786          onclick="<%="Menu.openUrl('"+root+"admin/software/index.jsp?ID="+ID+"')"%>" 
787          tooltip="<%=hasSoftware ? "Administrate software" : "You do not have permission to administrate software"%>" 
788          enabled="<%=hasSoftware%>"
789        />
790        <m:menuitem 
791          title="Hardware" 
792          onclick="<%="Menu.openUrl('"+root+"admin/hardware/index.jsp?ID="+ID+"')"%>" 
793          tooltip="<%=hasHardware ? "Administrate hardware" : "You do not have permission to administrate hardware"%>" 
794          enabled="<%=hasHardware%>"
795        />
796        <m:menuitem 
797          title="Protocols" 
798          onclick="<%="Menu.openUrl('"+root+"admin/protocols/index.jsp?ID="+ID+"')"%>" 
799          tooltip="<%=hasProtocols ? "Administrate protocols" : "You do not have permission to administrate protocols"%>" 
800          enabled="<%=hasProtocols%>"
801        />
802        <m:menuitem 
803          title="Clients" 
804          onclick="<%="Menu.openUrl('"+root+"admin/clients/index.jsp?ID="+ID+"')"%>" 
805          tooltip="<%=hasClients ? "Administrate client applications" : "You do not have permission to administrate client applications"%>" 
806          enabled="<%=hasClients%>"
807        />
808        <m:menuitem 
809          title="News" 
810          onclick="<%="Menu.openUrl('"+root+"admin/news/index.jsp?ID="+ID+"')"%>" 
811          tooltip="<%=hasNews ? "Administrate news" : "You do not have permission to administrate news"%>" 
812          enabled="<%=hasNews%>"
813        />
814        <m:menuseparator />
815        <m:submenu 
816          subid="types" 
817          title="Types"
818          tooltip="Administrate quota, file, hardware and software types"
819          enabled="<%=hasTypes%>"
820        />
821        <m:menuseparator />
822        <m:menuitem 
823          title="Disk usage" 
824          onclick="<%="Menu.openUrl('"+root+"admin/diskusage/index.jsp?ID="+ID+"')"%>" 
825          tooltip="<%=hasDiskUsage ? "Check disk usage" : "You do not have permission to check disk usage"%>" 
826          enabled="<%=hasDiskUsage%>"
827        />
828        <m:menuitem 
829          title="Server settings&hellip;"
830          onclick="<%="Main.openPopup('"+root+"admin/server/configure.jsp?ID="+ID+"', 'ServerSettings', 500, 400);"%>"
831          tooltip="<%=hasServer ? "Configure the server" : "You do not have permission to configure the server"%>"
832          enabled="<%=hasServer%>"
833        />
834        <m:menuitem
835          title="Restart BASE&hellip;"
836          onclick="<%="Main.openPopup('"+root+"admin/server/restart.jsp?ID="+ID+"', 'RestartServer', 360, 200);"%>"
837          tooltip="<%=hasServer ? "Restart the server" : "You do not have permission to restart the server"%>"
838          enabled="<%=hasServer%>"
839        />
840      </m:menu>
841      <%
842    }
843    %>
844    <%
845    // Help menu
846    final String helplink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.help"));
847    final String faqlink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.faq"));
848    final String reportbuglink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.reportbug"));
849    %>
850    <m:menu id="help" style="display: none">
851      <m:menuitem
852        visible="<%=HTML.isValidUrl(helplink)%>"
853        title="Help&hellip"
854        onclick="<%="window.open('"+helplink+"','Help')"%>"
855      />
856      <m:menuitem
857        visible="<%=HTML.isValidUrl(faqlink)%>"
858        title="FAQ&hellip"
859        onclick="<%="window.open('"+faqlink+"','FAQ')"%>"
860      />
861      <m:menuseparator />
862
863      <m:menuitem
864        title="About&hellip;"
865        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=about', 'About', 500, 350)"%>"
866      />
867
868      <m:menuitem
869        title="License&hellip;"
870        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=license', 'About', 500, 350)"%>"
871
872      />
873      <m:menuitem
874        visible="<%=HTML.isValidUrl(reportbuglink)%>"
875        title="Report a bug&hellip"
876        onclick="<%="window.open('"+reportbuglink+"','Reportbug')"%>"
877      />
878      <m:menuseparator />
879      <m:menuitem
880        title="Base project site" onclick="<%="Menu.openUrl('http://base.thep.lu.se', 'basesite')"%>"
881      />
882    </m:menu>
883   
884    <%
885    //Switch user/logout menu
886    final boolean hasImpersonate = 
887      !sc.isImpersonated() && sc.hasSystemPermission(Permission.ACT_AS_ANOTHER_USER);
888    %>
889    <m:menu
890      id="switchuser"
891      style="display: none;"
892      >
893      <m:menuitem 
894        title="Switch user&hellip;" 
895        onclick="<%="Main.openPopup('"+root+"switch.jsp?ID="+ID+"', 'Switch', 360, 200);"%>"
896        tooltip="Login as another user" 
897      />
898      <m:menuitem 
899        title="Impersonate&hellip;" 
900        onclick="<%="Main.openPopup('"+root+"impersonate.jsp?ID="+ID+"', 'Impersonate', 480, 240);"%>"
901        tooltip="Login as another user without knowing the password" 
902        visible="<%=hasImpersonate%>"
903      />
904      <m:menuitem 
905        title="Logout&hellip;" 
906        onclick="<%="Main.openPopup('"+root+"logout.jsp?ID="+ID+"', 'Logout', 360, 200);"%>"
907        tooltip="Exit from BASE" 
908      />
909    </m:menu>
910    <%
911    // Main menu
912    %>
913    <m:menu
914      type="horizontal"
915      clazz="menu_horizontal"
916      id="menubar"
917      style="top: 10px; left: 8px; width: 98%"
918      open="click"
919      filltext="<%=fillText.toString()%>"
920      >
921
922      <m:submenu
923        subid="file"
924        title="File"
925      />
926      <m:submenu
927        subid="view"
928        title="View"
929      />
930      <m:submenu
931        subid="lims"
932        title="Array LIMS"
933      />
934      <m:submenu
935        subid="administrate"
936        title="Administrate"
937        visible="<%=hasAdministrate%>"
938      />
939      <m:submenu
940        subid="help"
941        title="Help"
942      />
943    </m:menu>
944    <br><br>
945    <%
946  }
947  finally
948  {
949    if (dc != null) dc.close();
950  }
951
952}
953%>
954
955
956
Note: See TracBrowser for help on using the repository browser.