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

Last change on this file since 7815 was 7815, checked in by Nicklas Nordborg, 2 years ago

References #2213: Extend registration of devices

A device is now registered without verification.

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