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

Last change on this file since 4022 was 4022, checked in by Nicklas Nordborg, 16 years ago

Fixes #855: &hellip is displayed in some menu items with IE

Was missing the final ;

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