source: branches/2.15-stable/www/include/menu.jsp @ 5256

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

Merged patch release 2.14.2 to 2.15-stable branch.

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