source: trunk/www/include/menu.jsp @ 5918

Last change on this file since 5918 was 5918, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

Started with the redesign of list and view pages. I am using the biosource and sample pages for testing.
Changes affect more of the non-fixed pages since a lot of the contents is generated by taglibs. This means that the non-fixed pages doesn't look very good at the moment.

Table listings has only been fixed so that they display and can be used. Much more work is needed as part of #160.

I have also fixed the following pages:

  • The main menu
  • Login page + Home page
  • Item overview frameset
  • Plugins and extensions overview
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 48.0 KB
Line 
1<%-- $Id: menu.jsp 5918 2011-12-21 10:43:35Z 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 pageEncoding="UTF-8" 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.Type"
54  import="net.sf.basedb.core.query.Orders"
55  import="net.sf.basedb.core.query.Order"
56  import="net.sf.basedb.core.query.Hql"
57  import="net.sf.basedb.core.query.Restrictions"
58  import="net.sf.basedb.core.query.Expressions"
59  import="net.sf.basedb.clients.web.Base"
60  import="net.sf.basedb.clients.web.util.HTML"
61  import="net.sf.basedb.clients.web.resources.Bundle"
62  import="net.sf.basedb.util.Values"
63  import="net.sf.basedb.util.resources.ResourceBundleWrapper"
64  import="net.sf.basedb.util.resources.ResourceBundleFactory"
65  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
66  import="net.sf.basedb.clients.web.extensions.JspContext"
67  import="net.sf.basedb.clients.web.extensions.menu.MenuItemAction"
68  import="net.sf.basedb.util.extensions.Extension"
69  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
70  import="net.sf.basedb.util.extensions.ActionIterator"
71  import="java.util.HashMap"
72  import="java.util.Map"
73  import="java.util.ArrayList"
74  import="java.util.LinkedList"
75  import="java.util.List"
76  import="java.util.Arrays"
77  import="java.util.Iterator"
78  import="java.util.Set"
79  import="java.util.HashSet"
80%>
81<%@ taglib prefix="m" uri="/WEB-INF/menu.tld" %>
82<%
83final SessionControl sc = Base.getSessionControl(pageContext, false);
84final String ID = sc == null ? "" : sc.getId();
85String name = Values.getString(request.getParameter("name"), "login");
86final String root = request.getContextPath()+"/";
87if ("exception".equals(name) && sc != null && sc.isLoggedIn()) name = "standard";
88
89final ResourceBundleWrapper common = ResourceBundleFactory.getResourceBundle(Bundle.COMMON, sc);
90final ResourceBundleWrapper menu = ResourceBundleFactory.getResourceBundle(Bundle.MENU, sc);
91
92if ("login".equals(name))
93{
94}
95else if ("projects".equals(name) && sc != null && sc.isLoggedIn())
96{
97  // Projects menu
98  int activeProjectId = sc.getActiveProjectId();
99  %>
100  <m:menu 
101    id="projects"
102    style="display: none"
103    >
104    <%
105    final DbControl dc = sc.newDbControl();
106    boolean menuSeparatorBeforeDeactivate = true;
107    try
108    {
109      List<Project> projects = new ArrayList<Project>();
110      int lastRecentActiveIndex = 0;
111      // 1. Load the most recently active projects
112      String tmp = sc.getUserClientSetting("projects.recentActive");
113      Set<Integer> recentProjects = new HashSet<Integer>();
114      if (tmp != null)
115      {
116        for (String id : tmp.split(":"))
117        {
118          try
119          {
120            Project p = Project.getById(dc, Values.getInt(id));
121            if (!p.isRemoved())
122            {
123              recentProjects.add(p.getId());
124              projects.add(p);
125              lastRecentActiveIndex++;
126            }
127          }
128          catch (RuntimeException ex)
129          {}
130        }
131      }
132     
133      // 2. Load more projects
134      final ItemContext projectCC = sc.getCurrentContext(Item.PROJECT);
135      final ItemQuery<Project> projectQuery = Project.getQuery();
136      projectQuery.include(Include.MINE, Include.SHARED);
137      projectQuery.restrict(Restrictions.not(Restrictions.in(Hql.property("id"), Expressions.parameter("projects"))));
138      projectQuery.setParameter("projects", recentProjects, Type.INT);
139      Order projectSortOrder = projectCC.getSortOrder();
140      if (projectSortOrder != null) projectQuery.order(projectSortOrder);
141      projectQuery.order(Orders.asc(Hql.property("name")));
142      projectQuery.setCacheResult(true);
143      projects.addAll(projectQuery.list(dc));
144      boolean breakAt15 = projects.size() > 16;
145      int index = 0;
146      String thisIsTheActiveProject = menu.getString("activeproject.tooltip");
147      String thisIsNotTheActiveProject = menu.getString("inactiveproject.tooltip");
148      if (lastRecentActiveIndex > 0)
149      {
150        %>
151        <m:menuitem 
152          title="<%=menu.getString("recentprojects.title")%>" 
153          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
154          enabled="false" 
155        />
156        <m:menuseparator />
157        <%
158      }
159      Set<Integer> shownProjects = new HashSet<Integer>();
160      for (Project p : projects)
161      {
162        if (index == 15 && breakAt15) break;
163        index++;
164        int projectId = p.getId();
165        boolean active = activeProjectId == projectId;
166        String prefix = index <= lastRecentActiveIndex ? index + ". " : "";
167        shownProjects.add(p.getId());
168        String link = active ? 
169          "Menu.openUrl('"+root+"my_base/projects/index.jsp?ID="+ID+"&cmd=ViewItem&item_id=" + projectId + "')" : 
170          "Main.openPopup('"+root+"my_base/projects/set_active.jsp?ID="+ID+"&project_id="+p.getId()+"', 'ActivateProject', 300, 140)";
171        %>
172        <m:menuitem
173          title="<%=prefix + HTML.encodeTags(p.getName())%>"
174          style="<%=active ? "color: #000000; font-weight: bold;" : null %>"
175          onclick="<%=link%>"
176          icon="<%=active ? "checkedmenu.gif" : null%>"
177          tooltip="<%=active ? thisIsTheActiveProject : thisIsNotTheActiveProject%>"
178        />
179        <%
180        if (index == lastRecentActiveIndex)
181        {
182          %>
183          <m:menuseparator />
184          <%
185          menuSeparatorBeforeDeactivate = false;
186        }
187        else
188        {
189          menuSeparatorBeforeDeactivate = true;
190        }
191      }
192      if (breakAt15)
193      {
194        int more = projects.size() - 15;
195        %>
196        <m:menuitem 
197          title="<%="…" + menu.getString("moreprojects.title", Integer.toString(more))%>"
198          onclick="<%="Menu.openUrl('"+root+"my_base/projects/index.jsp?ID="+ID+"&cmd=UpdateContext&tmpfilter:INT:id=<>"+Values.getString(shownProjects, "|", true)+"')"%>"
199          tooltip="<%=menu.getString("moreprojects.tooltip")%>"
200        />
201        <%
202      }
203    }
204    catch (Throwable t)
205    {
206      t.printStackTrace();
207      menuSeparatorBeforeDeactivate = false;
208      %>
209      <m:menuseparator />
210      <m:menuitem 
211        title="<%=menu.getString("projects.error.title")%>" 
212        tooltip="<%=menu.getString("projects.error.tooltip", t.getMessage())%>"
213        enabled="false"
214        icon="error.png"
215      />
216      <%
217    }
218    finally
219    {
220      if (dc != null) dc.close();
221    }
222    if (menuSeparatorBeforeDeactivate)
223    {
224      %>
225      <m:menuseparator />
226      <%
227    }
228    %>
229    <m:menuitem
230      title="<%="<i>- " + menu.getString("noactiveproject.title") + " -</i>"%>"
231      onclick="<%="Main.openPopup('"+root+"my_base/projects/set_active.jsp?ID="+ID+"', 'ActivateProject', 300, 140)"%>"
232      icon="<%=activeProjectId == 0 ? "checkedmenu.gif" : null%>"
233      enabled="<%=activeProjectId != 0%>"
234      tooltip="<%=menu.getString("noactiveproject.tooltip", activeProjectId == 0)%>"
235    />
236  </m:menu>
237  <%
238}
239else if ("recentItems".equals(name) && sc != null && sc.isLoggedIn())
240{
241  // Recently used items menu
242  String stickyItems = Values.getString(sc.getUserClientSetting("menu.mostRecent"), 
243    "EXPERIMENT:BIOASSAYSET:TRANSFORMATION");
244  boolean loadNames = Values.getBoolean(sc.getUserClientSetting("menu.mostRecent.loadNames"), 
245    true);
246  String recentItems = sc.getUserClientSetting("menu.mostRecent.viewed");
247  DbControl dc = loadNames ? sc.newDbControl() : null;
248  try
249  {
250    %>
251    <m:menu
252      id="mostRecent"
253      style="display: none;"
254      >
255      <%
256      int numItems = 0;
257      // Recently viewed items
258      List<String> recentlyViewed = recentItems == null ? 
259        new ArrayList<String>() : Arrays.asList(recentItems.split(":"));
260      if (recentlyViewed.size() > 0)
261      {
262        %>
263        <m:menuitem 
264          title="<%=menu.getString("recentitems.title")%>" 
265          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
266          enabled="false" 
267        />
268        <m:menuseparator />
269        <%
270        for (String recent : recentlyViewed)
271        {
272          try
273          {
274            String[] tmp = recent.split("=");
275            Item itemType = Item.valueOf(tmp[0]);
276            String itemTextKey = "item." + itemType.name().toLowerCase();
277            String itemText = common.getString(itemTextKey);
278            if (itemText == itemTextKey) itemText = itemType.toString();
279            int itemId = Values.getInt(tmp[1], 0);
280            if (itemId != 0)
281            {
282              String shortName = "";
283              String fullName = "";
284              if (loadNames)
285              {
286                try
287                {
288                  BasicItem item = itemType.getById(dc, itemId);
289                  fullName = ((Nameable)item).getName();
290                  shortName = HTML.encodeTags(StringUtil.trimString(fullName, 35));
291                }
292                catch (Throwable t)
293                {
294                  continue;
295                }
296              }
297              else
298              {
299                fullName = itemText + "; id=" + itemId;
300                shortName = itemText + " (id=" + itemId + ")";
301              }
302              numItems++;
303              %>
304              <m:menuitem
305                title="<%=numItems + ". " + shortName%>"
306                onclick="<%="Main.viewOrEditItem('" + ID + "', '" + itemType.name() + "', " + itemId + ")"%>"
307                tooltip="<%=menu.getString("gotorecentitem.tooltip", fullName, itemText)%>"
308              />
309              <%
310            }
311          }
312          catch (Throwable t)
313          {}
314        }
315      }
316      if (stickyItems != null && stickyItems.length() > 0)
317      {
318        int numSticky = 0;
319        if (numItems > 0)
320        {
321          %>
322          <m:menuseparator />
323          <%
324        }
325        %>
326        <m:menuitem 
327          title="<%=menu.getString("stickyitems.title")%>" 
328          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
329          enabled="false" 
330        />
331        <m:menuseparator />
332        <%
333        // Sticky items
334        for (String recentItem : stickyItems.split(":"))
335        {
336          try
337          {
338            BasicItem item = null;
339            Item itemType = Item.valueOf(recentItem);
340            ItemContext cc = sc.getCurrentContext(itemType);
341            String itemTextKey = "item." + itemType.name().toLowerCase();
342            String itemText = common.getString(itemTextKey);
343            if (itemText == itemTextKey) itemText = itemType.toString();
344            if (cc.getId() != 0)
345            {
346              String shortName = "";
347              String fullName = "";
348              if (loadNames)
349              {
350                try
351                {
352                  item = itemType.getById(dc, cc.getId());
353                  fullName = ((Nameable)item).getName();
354                  shortName = ": " + HTML.encodeTags(StringUtil.trimString(fullName, 30));
355                }
356                catch (Throwable t)
357                {
358                  continue;
359                }
360              }
361              else
362              {
363                fullName = itemText + "; id=" + cc.getId();
364                shortName = " (id=" + cc.getId() + ")";
365              }
366              numItems++;
367              numSticky++;
368              %>
369              <m:menuitem
370                title="<%=itemText + shortName%>"
371                onclick="<%="Main.viewOrEditItem('" + ID + "', '" + itemType.name() + "', " + cc.getId() + ")"%>"
372                tooltip="<%=menu.getString("gotorecentitem.tooltip", fullName, itemText)%>"
373              />
374              <%
375              if (itemType == Item.BIOASSAYSET)
376              {
377                // Add menu for Experiment explorer as well
378                %>
379                <m:menuitem
380                  title="<%=menu.getString("experimentexplorer.title", shortName)%>"
381                  onclick="<%="location.href = '"+root+"views/experiments/explorer/view/index.jsp?ID=" + ID + "&bioassayset_id="+cc.getId()+"'"%>"
382                  tooltip="<%=menu.getString("experimentexplorer.tooltip")%>"
383                  visible="<%=item == null || ((BioAssaySet)item).getNumSpots() > 0 %>"
384                />
385                <%
386              }
387            }
388          }
389          catch (Throwable t)
390          {}
391        }
392        if (numSticky == 0)
393        {
394          %>
395          <m:menuitem 
396            title="<%="<i>- " + menu.getString("nostickyitems.title") + " -</i>"%>"
397            enabled="false"
398          />
399          <%
400        }
401      }
402      %>
403      <m:menuseparator />
404      <m:menuitem 
405        title="<%=menu.getString("recentoptions.title") + "…"%>" 
406        onclick="<%="Main.openPopup('"+root+"my_base/user/preferences.jsp?ID="+ID+"&page=mostRecent', 'Preferences', 600, 400);"%>"
407        tooltip="<%=menu.getString("recentoptions.tooltip")%>" 
408      />
409    </m:menu>
410    <%
411  }
412  finally
413  {
414    if (dc != null) dc.close();
415  }
416}
417else if ("standard".equals(name))
418{
419  final DbControl dc = sc.newDbControl();
420  StringBuilder fillText = new StringBuilder();
421  try
422  {
423    Project activeProject = sc.getActiveProjectId() == 0 ? null : Project.getById(dc, sc.getActiveProjectId());
424    if (activeProject == null)
425    {
426      fillText.append("<img src=\""+root+"images/no_active_project.gif\" border=\"0\">&nbsp;");
427      fillText.append("<a href=\"javascript:void(0)\" style=\"color:#FF0000;\" title=\"" + menu.getString("menu.projects.tooltip.0") + "\"");
428    }
429    else
430    {
431      fillText.append("<img src=\""+root+"images/project.gif\" border=\"0\">&nbsp;");
432      fillText.append("<a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.projects.tooltip.1") + "\"");
433    }
434   
435    fillText.append(" onclick=\"Menu.toggleTopMenu(document.getElementById('projects'), event.clientX-50, event.clientY); event.cancelBubble = true;\">");
436    fillText.append(activeProject == null ? "<i>- " + menu.getString("noactiveproject.title") + " -</i>" : HTML.encodeTags(activeProject.getName()));
437    fillText.append(" <img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a><span class=\"menuseparator\"></span>");
438   
439    fillText.append("<a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.refresh.tooltip") + "\"");
440    fillText.append(" onclick=\"location.reload()\">");
441    fillText.append("<img src=\""+root+"images/refresh.gif\" border=\"0\"></a><span class=\"menuseparator\"></span>");
442   
443    fillText.append("<a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.recentitems.tooltip") + "\"");
444    fillText.append(" onclick=\"Menu.toggleTopMenu(document.getElementById('mostRecent'), event.clientX-200, event.clientY); event.cancelBubble = true;\">");
445    fillText.append("<img src=\""+root+"images/recent.png\" border=\"0\"><img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a><span class=\"menuseparator\"></span>");
446   
447    User user = User.getById(dc, sc.getLoggedInUserId());
448    fillText.append("<img src=\""+root+"images/take_ownership.png\" border=\"0\"> <a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.user.tooltip") + "\"");
449    fillText.append(" onclick=\"javascript:Menu.toggleTopMenu(document.getElementById('switchuser'), event.clientX-100, event.clientY); event.cancelBubble = true;\">");
450    fillText.append(HTML.encodeTags(user.getLogin()));
451    fillText.append(" (").append(user.getName()).append(") <img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a>");
452    %>
453    <%
454    // Permission settings
455    final boolean hasFiles              = !sc.hasPermission(Permission.DENIED, Item.FILE);
456    final boolean createFiles           =  sc.hasPermission(Permission.CREATE, Item.FILE);
457    final boolean hasFileServers        = !sc.hasPermission(Permission.DENIED, Item.FILESERVER);
458
459    final boolean hasProjects           = !sc.hasPermission(Permission.DENIED, Item.PROJECT); 
460    final boolean createProjects        =  sc.hasPermission(Permission.CREATE, Item.PROJECT); 
461    final boolean hasPermissionTemplates = !sc.hasPermission(Permission.DENIED, Item.PERMISSIONTEMPLATE); 
462
463    final boolean hasMessages           = !sc.hasPermission(Permission.DENIED, Item.MESSAGE); 
464    final boolean createMessages        =  sc.hasPermission(Permission.CREATE, Item.MESSAGE); 
465
466    final boolean hasPhysicalBioAssays  = !sc.hasPermission(Permission.DENIED, Item.PHYSICALBIOASSAY); 
467    final boolean hasDerivedBioAssays   = !sc.hasPermission(Permission.DENIED, Item.DERIVEDBIOASSAY); 
468
469    final boolean hasRawBioAssays       = !sc.hasPermission(Permission.DENIED, Item.RAWBIOASSAY); 
470    final boolean createRawBioAssays    =  sc.hasPermission(Permission.CREATE, Item.RAWBIOASSAY); 
471    final boolean hasExperiments        = !sc.hasPermission(Permission.DENIED, Item.EXPERIMENT); 
472    final boolean createExperiments     =  sc.hasPermission(Permission.CREATE, Item.EXPERIMENT); 
473    final boolean hasFormulas           = !sc.hasPermission(Permission.DENIED, Item.FORMULA); 
474    final boolean createFormulas        =  sc.hasPermission(Permission.CREATE, Item.FORMULA); 
475   
476    final boolean hasReporters          = !sc.hasPermission(Permission.DENIED, Item.REPORTER); 
477    final boolean hasReporterLists      = !sc.hasPermission(Permission.DENIED, Item.REPORTERLIST); 
478    final boolean createReporters       =  sc.hasPermission(Permission.CREATE, Item.REPORTER); 
479    final boolean hasJobs               = !sc.hasPermission(Permission.DENIED, Item.JOB); 
480    final boolean hasSessions           = !sc.hasPermission(Permission.DENIED, Item.SESSION); 
481    %>
482    <m:menu
483      id="view"
484      style="display: none"
485      >
486      <m:menuitem
487        title="<%=menu.getString("home.title")%>"
488        tooltip="<%=menu.getString("home.tooltip")%>" 
489        onclick="<%="Menu.openUrl('"+root+"my_base/index.jsp?ID="+ID+"')"%>" 
490      />
491      <m:menuitem
492        title="<%=menu.getString("allitems.title")%>"
493        tooltip="<%=menu.getString("allitems.tooltip")%>"
494        onclick="<%="Menu.openUrl('"+root+"views/items/index.jsp?ID="+ID+"')"%>"
495      />
496      <m:menuitem
497        title="<%=menu.getString("trashcan.title")%>"
498        tooltip="<%=menu.getString("trashcan.tooltip")%>"
499        onclick="<%="Menu.openUrl('"+root+"views/trashcan/index.jsp?ID="+ID+"')"%>"
500      />
501      <m:menuseparator />
502      <m:menuitem 
503        title="<%=common.getString("item.file+")%>" 
504        onclick="<%="Menu.openUrl('"+root+"filemanager/index.jsp?ID="+ID+"')"%>" 
505        tooltip="<%=menu.getString("files.tooltip", hasFiles)%>" 
506        enabled="<%=hasFiles%>"
507      />
508      <m:menuitem 
509        title="<%=common.getString("item.fileserver+")%>" 
510        onclick="<%="Menu.openUrl('"+root+"filemanager/fileservers/index.jsp?ID="+ID+"')"%>" 
511        tooltip="<%=menu.getString("fileservers.tooltip", hasFileServers)%>" 
512        enabled="<%=hasFileServers%>"
513      />
514      <m:menuitem
515        title="<%=common.getString("item.project+")%>"
516        onclick="<%="Menu.openUrl('"+root+"my_base/projects/index.jsp?ID="+ID+"')"%>"
517        tooltip="<%=menu.getString("projects.tooltip", hasProjects)%>"
518        enabled="<%=hasProjects%>"
519      />
520      <m:menuitem
521        title="<%=common.getString("item.permissiontemplate+")%>"
522        onclick="<%="Menu.openUrl('"+root+"views/permissiontemplates/index.jsp?ID="+ID+"')"%>"
523        tooltip="<%=menu.getString("permissiontemplates.tooltip", hasPermissionTemplates)%>"
524        enabled="<%=hasPermissionTemplates%>"
525      />
526      <m:menuitem 
527        title="<%=common.getString("item.message+")%>" 
528        onclick="<%="Menu.openUrl('"+root+"my_base/messages/index.jsp?ID="+ID+"')"%>" 
529        tooltip="<%=menu.getString("messages.tooltip", hasMessages)%>"
530        enabled="<%=hasMessages%>"
531      />
532      <m:menuitem 
533        title="<%=common.getString("item.job+")%>" 
534        onclick="<%="Menu.openUrl('"+root+"views/jobs/index.jsp?ID="+ID+"')"%>" 
535        tooltip="<%=menu.getString("jobs.tooltip", hasJobs)%>"
536        enabled="<%=hasJobs%>"
537      />
538      <m:menuitem 
539        title="<%=common.getString("item.session+")%>" 
540        onclick="<%="Menu.openUrl('"+root+"views/sessions/index.jsp?ID="+ID+"')"%>" 
541        tooltip="<%=menu.getString("sessions.tooltip", hasSessions)%>"
542        enabled="<%=hasSessions%>"
543      />
544      <m:menuseparator />
545      <m:menuitem
546        title="<%=common.getString("item.physicalbioassay+")%>"
547        onclick="<%="Menu.openUrl('"+root+"views/physicalbioassays/index.jsp?ID="+ID+"')"%>"
548        tooltip="<%=menu.getString("physicalbioassays.tooltip", hasPhysicalBioAssays)%>"
549        enabled="<%=hasPhysicalBioAssays%>"
550      />
551      <m:menuitem
552        title="<%=common.getString("item.derivedbioassay+")%>"
553        onclick="<%="Menu.openUrl('"+root+"views/derivedbioassays/index.jsp?ID="+ID+"')"%>"
554        tooltip="<%=menu.getString("derivedbioassays.tooltip", hasDerivedBioAssays)%>"
555        enabled="<%=hasDerivedBioAssays%>"
556      />
557      <m:menuitem
558        title="<%=common.getString("item.rawbioassay+")%>"
559        onclick="<%="Menu.openUrl('"+root+"views/rawbioassays/index.jsp?ID="+ID+"')"%>"
560        tooltip="<%=menu.getString("rawbioassays.tooltip", hasRawBioAssays)%>"
561        enabled="<%=hasRawBioAssays%>"
562      />
563      <m:menuitem
564        title="<%=common.getString("item.experiment+")%>"
565        onclick="<%="Menu.openUrl('"+root+"views/experiments/index.jsp?ID="+ID+"')"%>"
566        tooltip="<%=menu.getString("experiments.tooltip", hasExperiments)%>"
567        enabled="<%=hasExperiments%>"
568      />
569      <m:menuitem
570        title="<%=common.getString("item.formula+")%>"
571        onclick="<%="Menu.openUrl('"+root+"views/formulas/index.jsp?ID="+ID+"')"%>"
572        tooltip="<%=menu.getString("formulas.tooltip", hasFormulas)%>"
573        enabled="<%=hasFormulas%>"
574      />
575      <m:menuseparator />
576      <m:menuitem
577        title="<%=common.getString("item.reporter+")%>"
578        onclick="<%="Menu.openUrl('"+root+"views/reporters/index.jsp?ID="+ID+"')"%>"
579        tooltip="<%=menu.getString("reporters.tooltip", hasReporters)%>"
580        enabled="<%=hasReporters%>"
581      />
582      <m:menuitem
583        title="<%=common.getString("item.reporterlist+")%>"
584        onclick="<%="Menu.openUrl('"+root+"views/reporterlists/index.jsp?ID="+ID+"')"%>"
585        tooltip="<%=menu.getString("reporterlists.tooltip", hasReporterLists)%>"
586        enabled="<%=hasReporterLists%>"
587      />
588    </m:menu>
589
590    <m:menu 
591      id="base" 
592      style="display: none"
593      >
594      <m:submenu 
595        subid="projects" 
596        title="<%=menu.getString("menu.projects")%>"
597        tooltip="<%=menu.getString("menu.projects.tooltip", activeProject != null)%>"
598        enabled="<%=hasProjects%>"
599      />
600      <m:menuseparator />
601      <m:menuitem 
602        title="<%=menu.getString("contactinfo.title") + "…"%>" 
603        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=contact', 'Settings', 600, 400);"%>" 
604        tooltip="<%=menu.getString("contactinfo.tooltip")%>" 
605      />
606      <m:menuitem 
607        title="<%=menu.getString("password.title") + "…"%>" 
608        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=password', 'Settings', 600, 400);"%>" 
609        tooltip="<%=menu.getString("password.tooltip")%>" 
610      />
611      <m:menuitem 
612        title="<%=menu.getString("other.title") + "…"%>" 
613        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=other', 'Settings', 600, 400);"%>" 
614        tooltip="<%=menu.getString("other.tooltip")%>" 
615      />
616      <m:menuseparator />
617      <m:menuitem 
618        title="<%=menu.getString("preferences.title") + "…"%>" 
619        onclick="<%="Main.openPopup('"+root+"my_base/user/preferences.jsp?ID="+ID+"', 'Preferences', 600, 400);"%>" 
620        tooltip="<%=menu.getString("preferences.tooltip")%>" 
621      />
622      <m:menuitem 
623        title="<%=menu.getString("reloadpermissions.title") + "…"%>" 
624        onclick="<%="Main.openPopup('"+root+"my_base/user/submit_user.jsp?ID="+ID+"&cmd=ReloadPermissions', 'ReloadPermissions', 300, 200);"%>" 
625        tooltip="<%=menu.getString("reloadpermissions.tooltip")%>" 
626      />
627      <m:menuitem 
628        title="<%=menu.getString("resetlistsettings.title") + "…"%>" 
629        onclick="<%="Main.openPopup('"+root+"my_base/user/reset_filters.jsp?ID="+ID+"', 'ResetFilter', 450, 300);"%>" 
630        tooltip="<%=menu.getString("resetlistsettings.tooltip")%>" 
631      />
632      <m:menuseparator />
633      <m:menuitem 
634        title="<%=menu.getString("logout.title") + "…"%>" 
635        onclick="<%="Main.openPopup('"+root+"logout.jsp?ID="+ID+"', 'Logout', 300, 200);"%>"
636        tooltip="<%=menu.getString("logout.tooltip")%>" 
637      />
638    </m:menu>
639
640    <%
641    // BioLIMS - menu
642    final boolean hasTags             = !sc.hasPermission(Permission.DENIED, Item.TAG); 
643    final boolean createTags          =  sc.hasPermission(Permission.CREATE, Item.TAG); 
644
645    final boolean hasBioSources         = !sc.hasPermission(Permission.DENIED, Item.BIOSOURCE); 
646    final boolean createBioSources      =  sc.hasPermission(Permission.CREATE, Item.BIOSOURCE); 
647
648    final boolean hasSamples            = !sc.hasPermission(Permission.DENIED, Item.SAMPLE); 
649    final boolean createSamples         =  sc.hasPermission(Permission.CREATE, Item.SAMPLE);
650
651    final boolean hasExtracts           = !sc.hasPermission(Permission.DENIED, Item.EXTRACT); 
652    final boolean createExtracts        =  sc.hasPermission(Permission.CREATE, Item.EXTRACT); 
653   
654    final boolean hasBioMaterialLists   = !sc.hasPermission(Permission.DENIED, Item.BIOMATERIALLIST);
655   
656    final boolean hasBioPlates      = !sc.hasPermission(Permission.DENIED, Item.BIOPLATE);
657    final boolean createBioPlates   =  sc.hasPermission(Permission.CREATE, Item.BIOPLATE);
658    final boolean hasBioPlateTypes  = !sc.hasPermission(Permission.DENIED, Item.BIOPLATETYPE);
659    final boolean hasBioPlateEventTypes = !sc.hasPermission(Permission.DENIED, Item.BIOPLATEEVENTTYPE);
660    final boolean hasBioLims      =  hasTags || hasBioSources || hasSamples || hasExtracts || 
661                      hasBioMaterialLists || hasBioPlates || 
662                      hasBioPlateTypes || hasBioPlateEventTypes;
663   
664    if (hasBioLims)
665    {
666    %>
667      <m:menu 
668        id="biolims"
669        style="display: none"
670        >
671        <m:menuitem
672          title="<%=common.getString("item.biosource+")%>"
673          onclick="<%="Menu.openUrl('"+root+"biomaterials/biosources/index.jsp?ID="+ID+"')"%>"
674          tooltip="<%=menu.getString("biosources.tooltip", hasBioSources)%>"
675          enabled="<%=hasBioSources%>"
676        />
677        <m:menuitem
678          title="<%=common.getString("item.sample+")%>"
679          onclick="<%="Menu.openUrl('"+root+"biomaterials/samples/index.jsp?ID="+ID+"')"%>"
680          tooltip="<%=menu.getString("samples.tooltip", hasSamples)%>"
681          enabled="<%=hasSamples%>"
682        />
683        <m:menuitem
684          title="<%=common.getString("item.extract+")%>"
685          onclick="<%="Menu.openUrl('"+root+"biomaterials/extracts/index.jsp?ID="+ID+"')"%>"
686          tooltip="<%=menu.getString("extracts.tooltip", hasExtracts)%>"
687          enabled="<%=hasExtracts%>"
688        />
689        <m:menuitem
690          title="<%=common.getString("item.tag+")%>"
691          onclick="<%="Menu.openUrl('"+root+"biomaterials/tags/index.jsp?ID="+ID+"')"%>"
692          tooltip="<%=menu.getString("tags.tooltip", hasTags)%>"
693          enabled="<%=hasTags%>"
694        />
695        <m:menuseparator />
696        <m:menuitem
697          title="<%=common.getString("item.bioplate+")%>"
698          onclick="<%="Menu.openUrl('"+root+"biomaterials/bioplates/index.jsp?ID="+ID+"')"%>"
699          tooltip="<%=menu.getString("bioplates.tooltip", hasBioPlates)%>"
700          enabled="<%=hasBioPlates%>"
701        />
702        <m:menuitem
703          title="<%=common.getString("item.bioplatetype+")%>"
704          onclick="<%="Menu.openUrl('"+root+"biomaterials/bioplatetypes/index.jsp?ID="+ID+"')"%>"
705          tooltip="<%=menu.getString("bioplatetypes.tooltip", hasBioPlateTypes)%>"
706          enabled="<%=hasBioPlateTypes%>"
707        />
708        <m:menuitem
709          title="<%=common.getString("item.bioplateeventtype+")%>"
710          onclick="<%="Menu.openUrl('"+root+"biomaterials/bioplateeventtypes/index.jsp?ID="+ID+"')"%>"
711          tooltip="<%=menu.getString("bioplateeventtypes.tooltip", hasBioPlateEventTypes)%>"
712          enabled="<%=hasBioPlateEventTypes%>"
713        />
714        <m:menuseparator />
715        <m:menuitem
716          title="<%=common.getString("item.biomateriallist+")%>"
717          onclick="<%="Menu.openUrl('"+root+"biomaterials/lists/index.jsp?ID="+ID+"')"%>"
718          tooltip="<%=menu.getString("biomateriallists.tooltip", hasBioMaterialLists)%>"
719          enabled="<%=hasBioMaterialLists%>"
720        />
721      </m:menu>
722    <%
723    }
724   
725    // Array LIMS - menu
726    final boolean hasPlateGeometries = sc.hasPermission(Permission.READ, Item.PLATEGEOMETRY);
727    final boolean hasPlateTypes = !sc.hasPermission(Permission.DENIED, Item.PLATETYPE);
728    final boolean hasPlates = !sc.hasPermission(Permission.DENIED, Item.PLATE);
729    final boolean hasPlateMappings = !sc.hasPermission(Permission.DENIED, Item.PLATEMAPPING);
730    final boolean hasArraySlides = !sc.hasPermission(Permission.DENIED, Item.ARRAYSLIDE);
731    final boolean hasArrayBatches = !sc.hasPermission(Permission.DENIED, Item.ARRAYBATCH);
732    final boolean hasArrayDesigns = !sc.hasPermission(Permission.DENIED, Item.ARRAYDESIGN);
733    final boolean hasLims = hasPlateGeometries || hasPlateTypes || hasPlates || hasPlateMappings || 
734      hasArraySlides || hasArrayBatches || hasArrayDesigns;
735    if (hasLims)
736    {
737      %>
738      <m:menu 
739        id="lims" 
740        style="display: none"
741        >
742        <m:menuitem 
743          title="<%=common.getString("item.plategeometry+")%>" 
744          onclick="<%="Menu.openUrl('"+root+"lims/geometries/index.jsp?ID="+ID+"')"%>" 
745          tooltip="<%=menu.getString("plategeometries.tooltip", hasPlateGeometries)%>" 
746          enabled="<%=hasPlateGeometries%>"
747        />
748        <m:menuitem 
749          title="<%=common.getString("item.platetype+")%>" 
750          onclick="<%="Menu.openUrl('"+root+"lims/platetypes/index.jsp?ID="+ID+"')"%>" 
751          tooltip="<%=menu.getString("platetypes.tooltip", hasPlateTypes)%>" 
752          enabled="<%=hasPlateTypes%>"
753        />
754        <m:menuitem 
755          title="<%=common.getString("item.plate+")%>" 
756          onclick="<%="Menu.openUrl('"+root+"lims/plates/index.jsp?ID="+ID+"')"%>" 
757          tooltip="<%=menu.getString("plates.tooltip", hasPlates)%>" 
758          enabled="<%=hasPlates%>"
759        />
760        <m:menuitem 
761          title="<%=common.getString("item.platemapping+")%>" 
762          onclick="<%="Menu.openUrl('"+root+"lims/platemappings/index.jsp?ID="+ID+"')"%>" 
763          tooltip="<%=menu.getString("platetypes.tooltip", hasPlateTypes)%>" 
764          enabled="<%=hasPlateTypes%>"
765        />
766        <m:menuseparator />
767        <m:menuitem 
768          title="<%=common.getString("item.arraydesign+")%>" 
769          onclick="<%="Menu.openUrl('"+root+"lims/arraydesigns/index.jsp?ID="+ID+"')"%>" 
770          tooltip="<%=menu.getString("arraydesigns.tooltip", hasArrayDesigns)%>" 
771          enabled="<%=hasArrayDesigns%>"
772        />
773        <m:menuitem 
774          title="<%=common.getString("item.arraybatch+")%>" 
775          onclick="<%="Menu.openUrl('"+root+"lims/arraybatches/index.jsp?ID="+ID+"')"%>" 
776          tooltip="<%=menu.getString("arraybatches.tooltip", hasArrayBatches)%>" 
777          enabled="<%=hasArrayBatches%>"
778        />
779        <m:menuitem 
780          title="<%=common.getString("item.arrayslide+")%>" 
781          onclick="<%="Menu.openUrl('"+root+"lims/arrayslides/index.jsp?ID="+ID+"')"%>" 
782          tooltip="<%=menu.getString("arrayslides.tooltip", hasArraySlides)%>" 
783          enabled="<%=hasArraySlides%>"
784        />
785      </m:menu>
786      <%
787    }
788    %>
789    <%
790    // Administrate -> Types menu
791    final boolean hasQuotaTypes = sc.hasPermission(Permission.READ, Item.QUOTATYPE);
792    final boolean hasMimeTypes = sc.hasPermission(Permission.READ, Item.MIMETYPE);
793    final boolean hasAnnotationTypeCategories = !sc.hasPermission(Permission.DENIED, Item.ANNOTATIONTYPECATEGORY);   
794    final boolean hasAnnotationTypes = !sc.hasPermission(Permission.DENIED, Item.ANNOTATIONTYPE);
795    final boolean hasReporterTypes = !sc.hasPermission(Permission.DENIED, Item.REPORTERTYPE);
796    final boolean hasExtraValueTypes = !sc.hasPermission(Permission.DENIED, Item.EXTRAVALUETYPE);
797    final boolean hasQuantities = !sc.hasPermission(Permission.DENIED, Item.QUANTITY);
798    final boolean hasItemSubtypes = sc.hasPermission(Permission.READ, Item.ITEMSUBTYPE);
799    final boolean hasTypes = hasMimeTypes || hasQuotaTypes || 
800      hasAnnotationTypeCategories || hasAnnotationTypes || 
801      hasReporterTypes || hasExtraValueTypes || hasQuantities || hasItemSubtypes;
802    if (hasTypes)
803    {
804      %>
805      <m:menu 
806        id="types" 
807        style="display: none"
808        >
809        <m:menuitem 
810          title="<%=common.getString("item.itemsubtype+")%>" 
811          onclick="<%="Menu.openUrl('"+root+"admin/itemsubtypes/index.jsp?ID="+ID+"')"%>" 
812          tooltip="<%=menu.getString("itemsubtypes.tooltip", hasItemSubtypes)%>" 
813          enabled="<%=hasItemSubtypes%>"
814        />
815        <m:menuseparator />
816        <m:menuitem 
817          title="<%=common.getString("item.annotationtype+")%>" 
818          onclick="<%="Menu.openUrl('"+root+"admin/annotationtypes/index.jsp?ID="+ID+"')"%>" 
819          tooltip="<%=menu.getString("annotationtypes.tooltip", hasAnnotationTypes)%>" 
820          enabled="<%=hasAnnotationTypes%>"
821        />
822        <m:menuitem 
823          title="<%=common.getString("item.annotationtypecategory+")%>" 
824          onclick="<%="Menu.openUrl('"+root+"admin/annotationtypecategories/index.jsp?ID="+ID+"')"%>" 
825          tooltip="<%=menu.getString("annotationtypecategories.tooltip", hasAnnotationTypeCategories)%>" 
826          enabled="<%=hasAnnotationTypeCategories%>"
827        />
828        <m:menuseparator />
829        <m:menuitem 
830          title="<%=common.getString("item.mimetype+")%>" 
831          onclick="<%="Menu.openUrl('"+root+"admin/mimetypes/index.jsp?ID="+ID+"')"%>" 
832          tooltip="<%=menu.getString("mimetypes.tooltip", hasMimeTypes)%>" 
833          enabled="<%=hasMimeTypes%>"
834        />
835        <m:menuitem 
836          title="<%=common.getString("item.quotatype+")%>" 
837          onclick="<%="Menu.openUrl('"+root+"admin/quotatypes/index.jsp?ID="+ID+"')"%>" 
838          tooltip="<%=menu.getString("quotatypes.tooltip", hasQuotaTypes)%>" 
839          enabled="<%=hasQuotaTypes%>"
840        />
841        <m:menuitem 
842          title="<%=common.getString("item.reportertype+")%>" 
843          onclick="<%="Menu.openUrl('"+root+"admin/reportertypes/index.jsp?ID="+ID+"')"%>" 
844          tooltip="<%=menu.getString("reportertypes.tooltip", hasReporterTypes)%>" 
845          enabled="<%=hasReporterTypes%>"
846        />
847        <m:menuitem 
848          title="<%=common.getString("item.extravaluetype+")%>" 
849          onclick="<%="Menu.openUrl('"+root+"admin/extravaluetypes/index.jsp?ID="+ID+"')"%>" 
850          tooltip="<%=menu.getString("extravaluetypes.tooltip", hasExtraValueTypes)%>" 
851          enabled="<%=hasExtraValueTypes%>"
852        />
853        <m:menuseparator />
854        <m:menuitem 
855          title="<%=menu.getString("units+quantities.title")%>" 
856          onclick="<%="Menu.openUrl('"+root+"admin/quantities/index.jsp?ID="+ID+"')"%>" 
857          tooltip="<%=menu.getString("units+quantities.tooltip", hasQuantities)%>" 
858          enabled="<%=hasQuantities%>"
859        />
860      </m:menu>
861      <%
862    }
863    %>
864    <%
865    // Administrate -> Platforms menu
866    final boolean hasPlatforms = sc.hasPermission(Permission.READ, Item.PLATFORM);
867    final boolean hasFileSetMemberTypes = sc.hasPermission(Permission.READ, Item.DATAFILETYPE);
868    final boolean hasTopPlatforms = hasPlatforms || hasFileSetMemberTypes;
869    if (hasTopPlatforms)
870    {
871      %>
872      <m:menu 
873        id="platforms"
874        style="display: none"
875        >
876        <m:menuitem 
877          title="<%=common.getString("item.platform+")%>"
878          onclick="<%="Menu.openUrl('"+root+"admin/platforms/index.jsp?ID="+ID+"')"%>" 
879          tooltip="<%=menu.getString("platforms.tooltip", hasPlatforms)%>"
880          enabled="<%=hasPlatforms%>"
881        />
882        <m:menuitem 
883          title="<%=common.getString("item.datafiletype+")%>"
884          onclick="<%="Menu.openUrl('"+root+"admin/datafiletypes/index.jsp?ID="+ID+"')"%>" 
885          tooltip="<%=menu.getString("datafiletypes.tooltip", hasFileSetMemberTypes)%>"
886          enabled="<%=hasFileSetMemberTypes%>"
887        />
888      </m:menu>
889      <%
890    }
891    %>
892   
893    <%
894    // Plugins menu
895    final boolean hasPluginTypes = !sc.hasPermission(Permission.DENIED, Item.PLUGINTYPE);
896    final boolean hasPluginDefinitions = !sc.hasPermission(Permission.DENIED, Item.PLUGINDEFINITION);
897    final boolean hasPluginConfigurations = !sc.hasPermission(Permission.DENIED, Item.PLUGINCONFIGURATION);
898    final boolean hasJobAgents = sc.hasPermission(Permission.READ, Item.JOBAGENT);
899    final boolean hasPlugins = hasPluginTypes || hasPluginDefinitions || 
900      hasPluginConfigurations || hasJobAgents;
901   
902    if (hasPlugins)
903    {
904      %>
905      <m:menu 
906        id="plugins" 
907        style="display: none"
908        >
909        <m:menuitem
910          title="<%=menu.getString("installedextensions.title")%>"
911          onclick="<%="Menu.openUrl('"+root+"admin/extensions/index.jsp?ID="+ID+"')"%>"
912          tooltip="<%=menu.getString("installedextensions.tooltip")%>"
913        />
914        <m:menuseparator />
915        <m:menuitem 
916          title="<%=menu.getString("plugintypes.title")%>" 
917          onclick="<%="Menu.openUrl('"+root+"admin/plugintypes/index.jsp?ID="+ID+"')"%>" 
918          tooltip="<%=menu.getString("plugintypes.tooltip", hasPluginTypes)%>"
919          enabled="<%=hasPluginTypes%>"
920        />
921        <m:menuitem 
922          title="<%=menu.getString("plugindefinitions.title")%>" 
923          onclick="<%="Menu.openUrl('"+root+"admin/plugindefinitions/index.jsp?ID="+ID+"')"%>" 
924          tooltip="<%=menu.getString("plugindefinitions.tooltip", hasPluginDefinitions)%>"
925          enabled="<%=hasPluginDefinitions%>"
926        />
927        <m:menuitem 
928          title="<%=menu.getString("pluginconfigurations.title")%>" 
929          onclick="<%="Menu.openUrl('"+root+"admin/pluginconfigurations/index.jsp?ID="+ID+"')"%>" 
930          tooltip="<%=menu.getString("pluginconfigurations.tooltip", hasPluginConfigurations)%>"
931          enabled="<%=hasPluginConfigurations%>"
932        />
933        <m:menuseparator />
934        <m:menuitem 
935          title="<%=common.getString("item.jobagent+")%>" 
936          onclick="<%="Menu.openUrl('"+root+"admin/jobagents/index.jsp?ID="+ID+"')"%>" 
937          tooltip="<%=menu.getString("jobagents.tooltip", hasJobAgents)%>"
938          enabled="<%=hasJobAgents%>"
939        />
940      </m:menu>
941      <%
942    }
943    %>
944 
945    <%
946    // Administrate menu
947    final boolean hasUsers = !sc.hasPermission(Permission.DENIED, Item.USER);
948    final boolean hasGroups = !sc.hasPermission(Permission.DENIED, Item.GROUP);
949    final boolean hasRoles = sc.hasPermission(Permission.READ, Item.ROLE);
950    final boolean hasQuota = sc.hasPermission(Permission.READ, Item.QUOTA);
951    final boolean hasSoftware = !sc.hasPermission(Permission.DENIED, Item.SOFTWARE);
952    final boolean hasHardware = !sc.hasPermission(Permission.DENIED, Item.HARDWARE);
953    final boolean hasProtocols = !sc.hasPermission(Permission.DENIED, Item.PROTOCOL);
954    final boolean hasClients = sc.hasPermission(Permission.READ, Item.CLIENT);
955    final boolean hasNews = sc.hasPermission(Permission.READ, Item.NEWS);
956    final boolean hasReporterCloneTemplates = !sc.hasPermission(Permission.DENIED, Item.REPORTERCLONETEMPLATE);
957    final boolean hasDiskUsage = sc.hasPermission(Permission.READ, Item.DISKUSAGE);
958    final Client currentClient = Client.getById(dc, sc.getClientId());
959    final boolean hasServer = currentClient.hasPermission(Permission.WRITE);
960
961    final boolean hasAdministrate = 
962      hasUsers || hasGroups || hasRoles || hasQuota || hasTypes || hasPlugins ||
963      hasSoftware || hasHardware || hasProtocols || hasClients || hasNews || hasReporterCloneTemplates || 
964      hasDiskUsage || hasServer || hasTopPlatforms;
965
966    if (hasAdministrate)
967    {
968      %>
969      <m:menu 
970        id="administrate" 
971        style="display: none"
972        >
973        <m:menuitem 
974          title="<%=common.getString("item.user+")%>" 
975          onclick="<%="Menu.openUrl('"+root+"admin/users/index.jsp?ID="+ID+"')"%>" 
976          tooltip="<%=menu.getString("users.tooltip", hasUsers)%>"
977          enabled="<%=hasUsers%>"
978        />
979        <m:menuitem 
980          title="<%=common.getString("item.group+")%>" 
981          onclick="<%="Menu.openUrl('"+root+"admin/groups/index.jsp?ID="+ID+"')"%>" 
982          tooltip="<%=menu.getString("groups.tooltip", hasGroups)%>" 
983          enabled="<%=hasGroups%>"
984        />
985        <m:menuitem 
986          title="<%=common.getString("item.role+")%>" 
987          onclick="<%="Menu.openUrl('"+root+"admin/roles/index.jsp?ID="+ID+"')"%>" 
988          tooltip="<%=menu.getString("roles.tooltip", hasRoles)%>" 
989          enabled="<%=hasRoles%>"
990        />
991        <m:menuseparator />
992        <m:submenu 
993          subid="plugins" 
994          title="<%=menu.getString("menu.plugins")%>"
995          tooltip="<%=menu.getString("menu.plugins.tooltip")%>"
996          enabled="<%=hasPlugins%>"
997        />
998        <m:menuseparator />
999        <m:menuitem 
1000          title="<%=common.getString("item.quota+")%>" 
1001          onclick="<%="Menu.openUrl('"+root+"admin/quota/index.jsp?ID="+ID+"')"%>" 
1002          tooltip="<%=menu.getString("quota.tooltip", hasQuota)%>" 
1003          enabled="<%=hasQuota%>"
1004        />
1005        <m:menuitem 
1006          title="<%=common.getString("item.software+")%>" 
1007          onclick="<%="Menu.openUrl('"+root+"admin/software/index.jsp?ID="+ID+"')"%>" 
1008          tooltip="<%=menu.getString("software.tooltip", hasSoftware)%>" 
1009          enabled="<%=hasSoftware%>"
1010        />
1011        <m:menuitem 
1012          title="<%=common.getString("item.hardware+")%>" 
1013          onclick="<%="Menu.openUrl('"+root+"admin/hardware/index.jsp?ID="+ID+"')"%>" 
1014          tooltip="<%=menu.getString("hardware.tooltip", hasHardware)%>" 
1015          enabled="<%=hasHardware%>"
1016        />
1017        <m:menuitem 
1018          title="<%=common.getString("item.protocol+")%>" 
1019          onclick="<%="Menu.openUrl('"+root+"admin/protocols/index.jsp?ID="+ID+"')"%>" 
1020          tooltip="<%=menu.getString("protocols.tooltip", hasProtocols)%>" 
1021          enabled="<%=hasProtocols%>"
1022        />
1023        <m:menuitem 
1024          title="<%=common.getString("item.client+")%>" 
1025          onclick="<%="Menu.openUrl('"+root+"admin/clients/index.jsp?ID="+ID+"')"%>" 
1026          tooltip="<%=menu.getString("clients.tooltip", hasClients)%>" 
1027          enabled="<%=hasClients%>"
1028        />
1029        <m:menuitem 
1030          title="<%=common.getString("item.news+")%>" 
1031          onclick="<%="Menu.openUrl('"+root+"admin/news/index.jsp?ID="+ID+"')"%>" 
1032          tooltip="<%=menu.getString("news.tooltip", hasNews)%>" 
1033          enabled="<%=hasNews%>"
1034        />
1035        <m:menuitem 
1036          title="<%=common.getString("item.reporterclonetemplate+")%>" 
1037          onclick="<%="Menu.openUrl('"+root+"admin/reporterclonetemplates/index.jsp?ID="+ID+"')"%>" 
1038          tooltip="<%=menu.getString("reporterclonetemplates.tooltip", hasReporterCloneTemplates)%>" 
1039          enabled="<%=hasReporterCloneTemplates%>"
1040        />
1041        <m:menuseparator />
1042        <m:submenu 
1043          subid="platforms" 
1044          title="<%=menu.getString("menu.platforms")%>"
1045          tooltip="<%=menu.getString("menu.platforms.tooltip")%>"
1046          enabled="<%=hasTopPlatforms%>"
1047        />
1048        <m:submenu 
1049          subid="types" 
1050          title="<%=menu.getString("menu.types")%>"
1051          tooltip="<%=menu.getString("menu.types.tooltip")%>"
1052          enabled="<%=hasTypes%>"
1053        />
1054        <m:menuseparator />
1055        <m:menuitem 
1056          title="<%=common.getString("item.diskusage+")%>" 
1057          onclick="<%="Menu.openUrl('"+root+"admin/diskusage/index.jsp?ID="+ID+"')"%>" 
1058          tooltip="<%=menu.getString("diskusage.tooltip", hasDiskUsage)%>" 
1059          enabled="<%=hasDiskUsage%>"
1060        />
1061        <m:menuitem 
1062          title="<%=menu.getString("serversettings.title")+"…"%>"
1063          onclick="<%="Main.openPopup('"+root+"admin/server/configure.jsp?ID="+ID+"', 'ServerSettings', 600, 400);"%>"
1064          tooltip="<%=menu.getString("serversettings.tooltip", hasServer)%>"
1065          enabled="<%=hasServer%>"
1066        />
1067        <m:menuitem 
1068          title="<%=menu.getString("broadcast.title")+"…"%>"
1069          onclick="<%="Main.openPopup('"+root+"admin/server/broadcast.jsp?ID="+ID+"', 'BroadcastMessage', 600, 400);"%>"
1070          tooltip="<%=menu.getString("broadcast.tooltip", hasServer)%>"
1071          enabled="<%=hasServer%>"
1072        />
1073        <m:menuitem
1074          title="<%=menu.getString("services.title")%>"
1075          tooltip="<%=menu.getString("services.tooltip", hasServer)%>"
1076          onclick="<%="Menu.openUrl('"+root+"admin/services/index.jsp?ID="+ID+"')"%>"
1077          enabled="<%=hasServer%>"
1078        />
1079      </m:menu>
1080      <%
1081    }
1082    %>
1083    <%
1084    // Help menu
1085    final String helplink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.help"));
1086    final String faqlink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.faq"));
1087    final String reportbuglink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.reportbug"));
1088    %>
1089    <m:menu id="help" style="display: none">
1090      <m:menuitem
1091        visible="<%=HTML.isValidUrl(helplink)%>"
1092        title="<%=menu.getString("menu.help") + "…"%>"
1093        onclick="<%="window.open('"+helplink+"','Help')"%>"
1094      />
1095      <m:menuitem
1096        visible="<%=HTML.isValidUrl(faqlink)%>"
1097        title="<%=menu.getString("faq.title") + "…"%>"
1098        onclick="<%="window.open('"+faqlink+"','FAQ')"%>"
1099        tooltip="<%=menu.getString("faq.tooltip") %>"
1100      />
1101      <m:menuseparator />
1102
1103      <m:menuitem
1104        title="<%=menu.getString("about.title") + "…"%>"
1105        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=about', 'About', 600, 400)"%>"
1106      />
1107
1108      <m:menuitem
1109        title="<%=menu.getString("license.title") + "…"%>"
1110        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=license', 'About', 600, 400)"%>"
1111      />
1112      <m:menuitem
1113        visible="<%=HTML.isValidUrl(reportbuglink)%>"
1114        title="<%=menu.getString("bugreport.title") + "…"%>"
1115        onclick="<%="window.open('"+reportbuglink+"','Reportbug')"%>"
1116        tooltip="<%=menu.getString("bugreport.tooltip")%>"
1117      />
1118      <m:menuseparator />
1119      <m:menuitem
1120        title="<%=menu.getString("basesite.title") + "…"%>" 
1121        onclick="<%="Menu.openUrl('http://base.thep.lu.se', 'basesite')"%>"
1122        tooltip="<%=menu.getString("basesite.tooltip")%>"
1123      />
1124    </m:menu>
1125   
1126    <%
1127    //Switch user/logout menu
1128    final boolean hasImpersonate = 
1129      !sc.isImpersonated() && sc.hasSystemPermission(Permission.ACT_AS_ANOTHER_USER);
1130    %>
1131    <m:menu
1132      id="switchuser"
1133      style="display: none;"
1134      >
1135      <m:menuitem 
1136        title="<%=menu.getString("switchuser.title") + "…"%>" 
1137        onclick="<%="Main.openPopup('"+root+"switch.jsp?ID="+ID+"', 'Switch', 300, 200);"%>"
1138        tooltip="<%=menu.getString("switchuser.tooltip")%>" 
1139      />
1140      <m:menuitem 
1141        title="<%=menu.getString("impersonate.title") + "…"%>" 
1142        onclick="<%="Main.openPopup('"+root+"impersonate.jsp?ID="+ID+"', 'Impersonate', 450, 300);"%>"
1143        tooltip="<%=menu.getString("impersonate.tooltip")%>" 
1144        visible="<%=hasImpersonate%>"
1145      />
1146      <m:menuitem 
1147        title="<%=menu.getString("logout.title") + "…"%>" 
1148        onclick="<%="Main.openPopup('"+root+"logout.jsp?ID="+ID+"', 'Logout', 300, 200);"%>"
1149        tooltip="<%=menu.getString("logout.tooltip")%>" 
1150      />
1151    </m:menu>
1152   
1153    <%
1154    // Extensions menu
1155    JspContext context = ExtensionsControl.createContext(dc, pageContext);
1156    ExtensionsInvoker<MenuItemAction> invoker = 
1157      (ExtensionsInvoker<MenuItemAction>)ExtensionsControl.useExtensions(context, 
1158        "net.sf.basedb.clients.web.menu.extensions");
1159    ExtensionsControl ec = ExtensionsControl.get(dc);
1160    ActionIterator<MenuItemAction> it = invoker.iterate();
1161    Map<String, List<MenuItemAction>> menus = new HashMap<String, List<MenuItemAction>>();
1162    menus.put("extensions", new LinkedList<MenuItemAction>());
1163    int numExtensionMenues = 0;
1164    while (it.hasNext())
1165    {
1166      MenuItemAction action = it.next();
1167      String menuId = action.getMenuId();
1168      menuId = menuId == null ? "extensions" : "extensions." + menuId;
1169      List<MenuItemAction> actions = menus.get(menuId);
1170      if (actions == null)
1171      {
1172        actions = new LinkedList<MenuItemAction>();
1173        menus.put(menuId, actions);
1174      }
1175      actions.add(action);
1176    }
1177   
1178    for (Map.Entry<String, List<MenuItemAction>> entry : menus.entrySet())
1179    {
1180      String menuId = entry.getKey();
1181      List<MenuItemAction> actions = entry.getValue();
1182      if (actions.size() == 0) continue;
1183      %>
1184      <m:menu id="<%=menuId%>" style="display: none;">
1185      <%
1186      for (MenuItemAction action : actions)
1187      {
1188        numExtensionMenues++;
1189        if (action.getType() == MenuItemAction.MenuType.SEPARATOR)
1190        {
1191          %>
1192          <m:menuseparator style="<%=action.getStyle()%>" visible="<%=action.isVisible()%>" />
1193          <%
1194        }
1195        else if (action.getType() == MenuItemAction.MenuType.MENUITEM)
1196        {
1197          %>
1198          <m:menuitem 
1199            style="<%=action.getStyle()%>"
1200            title="<%=action.getTitle()%>"
1201            icon="<%=action.getIcon()%>"
1202            tooltip="<%=action.getTooltip()%>"
1203            enabled="<%=action.isEnabled()%>"
1204            visible="<%=action.isVisible()%>"
1205            onclick="<%=action.getOnClick()%>"
1206          />
1207          <%
1208        }
1209        else if (action.getType() == MenuItemAction.MenuType.SUBMENU)
1210        {
1211          %>
1212          <m:submenu 
1213            subid="<%="extensions." + action.getSubmenuId()%>"
1214            style="<%=action.getStyle()%>"
1215            title="<%=action.getTitle()%>"
1216            icon="<%=action.getIcon()%>"
1217            tooltip="<%=action.getTooltip()%>"
1218            enabled="<%=action.isEnabled()%>"
1219            visible="<%=action.isVisible()%>"
1220          />
1221          <%
1222        }
1223      }
1224      %>
1225      </m:menu>
1226      <%
1227    }
1228    %>
1229   
1230    <%
1231    // Main menu
1232    %>
1233    <m:menu
1234      type="horizontal"
1235      id="menubar"
1236      style="top: 0px; left: 0px; right: 0px;"
1237      open="click"
1238      filltext="<%=fillText.toString()%>"
1239      >
1240      <m:submenu
1241        subid="base"
1242        title="<%=menu.getString("menu.base")%>"
1243      />
1244      <m:submenu
1245        subid="view"
1246        title="<%=menu.getString("menu.view")%>"
1247      />
1248      <m:submenu 
1249        subid="biolims"
1250        title="<%=menu.getString("menu.biolims")%>"
1251      />
1252      <m:submenu
1253        subid="lims"
1254        title="<%=menu.getString("menu.arraylims")%>"
1255      />
1256      <m:submenu
1257        subid="administrate"
1258        title="<%=menu.getString("menu.administrate")%>"
1259        visible="<%=hasAdministrate%>"
1260      />
1261      <m:submenu
1262        subid="extensions"
1263        title="<%=menu.getString("menu.extensions")%>"
1264        visible="<%=numExtensionMenues > 0 %>"
1265      />
1266      <m:submenu
1267        subid="help"
1268        title="<%=menu.getString("menu.help")%>"
1269      />
1270    </m:menu>
1271    <%
1272  }
1273  finally
1274  {
1275    if (dc != null) dc.close();
1276  }
1277
1278}
1279%>
1280
1281
Note: See TracBrowser for help on using the repository browser.