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

Last change on this file since 4903 was 4903, checked in by Nicklas Nordborg, 13 years ago

Fixes #1179: A user should be able to see which groups he is a part of without any extra credentials

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