source: trunk/www/admin/roles/view_role.jsp @ 5042

Last change on this file since 5042 was 5042, checked in by Martin Svensson, 13 years ago

References #360 Covering the submenu items in 'Administrate' menu.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 14.1 KB
Line 
1<%-- $Id: view_role.jsp 5042 2009-08-11 10:48:42Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Nicklas Nordborg
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.SystemItems"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.Role"
34  import="net.sf.basedb.core.User"
35  import="net.sf.basedb.core.RoleKey"
36  import="net.sf.basedb.core.PermissionDeniedException"
37  import="net.sf.basedb.core.PluginDefinition"
38  import="net.sf.basedb.core.ItemQuery"
39  import="net.sf.basedb.core.ItemResultList"
40  import="net.sf.basedb.core.Include"
41  import="net.sf.basedb.core.query.Orders"
42  import="net.sf.basedb.core.query.Hql"
43  import="net.sf.basedb.core.plugin.GuiContext"
44  import="net.sf.basedb.core.plugin.Plugin"
45  import="net.sf.basedb.clients.web.Base"
46  import="net.sf.basedb.clients.web.PermissionUtil"
47  import="net.sf.basedb.clients.web.util.HTML"
48  import="net.sf.basedb.util.Values"
49  import="net.sf.basedb.util.formatter.Formatter"
50  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
51  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
52  import="net.sf.basedb.clients.web.extensions.JspContext"
53  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
54  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
55  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
56  import="java.util.Date"
57  import="java.util.Map"
58  import="java.util.Set"
59  import="java.util.List"
60%>
61<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
62<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
63<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
64<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
65<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
66<%!
67  private static final Item itemType = Item.ROLE;
68  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
69 
70  private static final String getShortPermissions(Item itemType, Set<Permission> permissions)
71  {
72    Set<Permission> defined = itemType.getDefinedPermissions();
73    StringBuilder sb = new StringBuilder();
74    if (defined.contains(Permission.CREATE)) sb.append(permissions.contains(Permission.CREATE) ? "C" : "-");
75    if (defined.contains(Permission.READ)) sb.append(permissions.contains(Permission.READ) ? "R" : "-");
76    if (defined.contains(Permission.USE)) sb.append(permissions.contains(Permission.USE) ? "U" : "-");
77    if (defined.contains(Permission.WRITE)) sb.append(permissions.contains(Permission.WRITE) ? "W" : "-");
78    if (defined.contains(Permission.DELETE)) sb.append(permissions.contains(Permission.DELETE) ? "D" : "-");
79    if (defined.contains(Permission.SET_OWNER)) sb.append(permissions.contains(Permission.SET_OWNER) ? "O" : "-");
80    if (defined.contains(Permission.SET_PERMISSION)) sb.append(permissions.contains(Permission.SET_PERMISSION) ? "P" : "-");
81    return sb.toString();
82  }
83%>
84<%
85final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
86final String ID = sc.getId();
87final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
88final int itemId = cc.getId();
89final float scale = Base.getScale(sc);
90final DbControl dc = sc.newDbControl();
91try
92{
93  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
94  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
95
96  String title = null;
97  Role role = Role.getById(dc, itemId);
98 
99  RoleKey system = RoleKey.getById(dc, SystemItems.getRoleKeyId(Item.SYSTEM));
100  final boolean hasShareToEveryone = system.getPermissions(role).contains(Permission.SHARE_TO_EVERYONE);
101  final boolean hasActAsAnotherUser = system.getPermissions(role).contains(Permission.ACT_AS_ANOTHER_USER);
102  final boolean hasSelectJobagent = system.getPermissions(role).contains(Permission.SELECT_JOBAGENT);
103 
104  final boolean writePermission = role.hasPermission(Permission.WRITE);
105  final boolean deletePermission = role.hasPermission(Permission.DELETE);
106  final boolean isRemoved = role.isRemoved();
107  final boolean isUsed = isRemoved && role.isUsed();
108  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
109  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, role);
110  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
111  %>
112  <base:page title="<%=title%>">
113  <base:head scripts="table.js,tabcontrol.js" styles="toolbar.css,table.css,headertabcontrol.css,path.css">
114    <ext:scripts context="<%=jspContext%>" />
115    <ext:stylesheets context="<%=jspContext%>" />
116    <script language="JavaScript">
117    function editItem()
118    {
119      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
120    }
121    function deleteItem()
122    {
123      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
124    }
125    function restoreItem()
126    {
127      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
128    }
129    function deleteItemPermanently()
130    {
131      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
132    }
133    function itemDeleted()
134    {
135      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
136    }
137    function showUsingItems()
138    {
139      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
140    }
141    function deleteItemPermanently()
142    {
143      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
144    }
145    function itemDeleted()
146    {
147      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
148    }
149    function showUsingItems()
150    {
151      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
152    }
153    function runPlugin(cmd)
154    {
155      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
156    }
157    </script>
158  </base:head>
159  <base:body>
160    <p>
161    <p:path>
162      <p:pathelement title="Roles" href="<%="index.jsp?ID="+ID%>" />
163      <p:pathelement title="<%=HTML.encodeTags(role.getName())%>" />
164    </p:path>
165   
166    <t:tabcontrol id="main" active="properties">
167    <t:tab id="properties" title="Properties">
168   
169    <tbl:toolbar
170      >
171      <tbl:button 
172        disabled="<%=writePermission ? false : true%>" 
173        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
174        onclick="editItem()" 
175        title="Edit&hellip;" 
176        tooltip="<%=writePermission ? "Edit this role" : "You do not have permission to edit this role"%>" 
177      />
178      <tbl:button 
179        disabled="<%=deletePermission ? false : true%>" 
180        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
181        onclick="deleteItem()" 
182        title="Delete"
183        visible="<%=!role.isRemoved()%>"
184        tooltip="<%=deletePermission ? "Delete this role" : "You do not have permission to delete this role"%>" 
185      />
186      <tbl:button 
187        disabled="<%=writePermission ? false : true%>" 
188        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
189        onclick="restoreItem()" 
190        title="Restore"
191        visible="<%=role.isRemoved()%>"
192        tooltip="<%=writePermission ? "Restore this role" : "You do not have permission to restore this role"%>" 
193      />
194      <tbl:button 
195        image="import.gif" 
196        onclick="runPlugin('ImportItem')" 
197        title="Import&hellip;" 
198        tooltip="Import data" 
199        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
200      />
201      <tbl:button 
202        image="export.gif" 
203        onclick="runPlugin('ExportItem')" 
204        title="Export&hellip;" 
205        tooltip="Export data" 
206        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
207      />
208      <tbl:button 
209        image="runplugin.gif" 
210        onclick="runPlugin('RunPlugin')" 
211        title="Run plugin&hellip;" 
212        tooltip="Run a plugin" 
213        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
214      />
215      <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
216        wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
217      <tbl:button
218        image="help.gif"
219        onclick="<%="Main.openHelp('" + ID +"', 'role.view.properties')"%>"
220        title="Help&hellip;"
221        tooltip="Get help about this page"
222      />
223      </tbl:toolbar>
224    <div class="boxedbottom">
225      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(role)%></i></div>
226      <%
227      if (role.isRemoved())
228      {
229        %>
230        <div class="itemstatus">
231          <base:icon 
232            image="<%=deletePermanentlyPermission ? "deleted.gif" : "deleted_disabled.gif"%>"
233            onclick="<%=deletePermanentlyPermission ? "deleteItemPermanently()" : null%>"
234            tooltip="<%=deletePermanentlyPermission ? "Permanently delete this item" : null%>"
235            visible="<%=isRemoved%>"> This item has been flagged for deletion<br></base:icon>
236          <base:icon image="used.gif" 
237            onclick="showUsingItems()"
238            tooltip="Show the items that are using this one"
239            visible="<%=isUsed%>"> This item is used by other items and can't be permanently deleted<br></base:icon>
240        </div>
241        <%
242      }
243      %>
244      <table class="form" cellspacing=0>
245      <tr>
246        <td class="prompt">Name</td>
247        <td><%=HTML.encodeTags(role.getName())%></td>
248      </tr>
249      <tr>
250        <td class="prompt">Registered</td>
251        <td><%=dateFormatter.format(role.getEntryDate())%></td>
252      </tr>
253      <tr>
254        <td class="prompt">System ID</td>
255        <td><%=HTML.encodeTags(role.getSystemId())%></td>
256      </tr>
257      <tr>
258        <td class="prompt">Is default</td>
259        <td><%=role.isDefault() ? "yes" : "no"%></td>
260      </tr>
261      <tr>
262        <td class="prompt">Description</td>
263        <td><%=HTML.niceFormat(role.getDescription())%></td>
264      </tr>
265      </table>
266     
267      <base:section 
268        id="permissions" 
269        title="<%="Permissions"%>"
270        context="<%=cc%>"
271        >     
272        <table class="form" cellspacing=0>
273        <tr>
274          <td class="prompt">Share to everyone</td>
275          <td><%=hasShareToEveryone ? "yes" : "no"%></td>
276          <td class="prompt">Select job agent</td>
277          <td><%=hasSelectJobagent ? "yes" : "no"%></td>
278        </tr>
279        <tr>
280          <td class="prompt">Act as another user</td>
281          <td><%=hasActAsAnotherUser ? "yes" : "no"%></td>
282        </tr>
283        </table>
284       
285        <div class="itemlist">
286        <div class="data">
287        <table border="0" cellspacing="0" cellpadding="0">
288        <tr>
289        <%
290        Map<String, List<Item>> permissionGroups = PermissionUtil.getPermissionGroups();
291       
292        for (String name : permissionGroups.keySet())
293        {
294          %>
295          <th class="columnheader" colspan="2"><b><%=name%></b></th>
296          <%
297        }
298        %>
299        </tr>
300        <%
301        int newItems = 0;
302        int index = 0;
303        int i = 0;
304        do
305        {
306          newItems = 0;
307          StringBuilder sb = new StringBuilder();
308          sb.append("<tr valign=\"top\"");
309          sb.append(" class=\"").append(i == 1 ? "oddrow" : "evenrow").append("\"");
310          sb.append(">");
311          for (String name : permissionGroups.keySet())
312          {
313            List<Item> items = permissionGroups.get(name);
314            if (items.size() > index)
315            {
316              newItems++;
317              Item item = items.get(index);
318              int keyId = SystemItems.getRoleKeyId(item);
319              RoleKey key = RoleKey.getById(dc, keyId);
320             
321              sb.append("<td class=\"cell\"><b>").append(key.getName()).append("</b></td>");
322              sb.append("<td class=\"cell\">");
323                           
324              if (keyId != 0)
325              {               
326                Set<Permission> permissions = key.getPermissions(role);
327                sb.append(getShortPermissions(item, permissions));
328              }
329              else
330              {
331                sb.append("(undefined key)");
332              }
333              sb.append("</td>");
334            }
335            else
336            {
337              sb.append("<td class=\"cell\" colspan=\"2\">&nbsp;</td>");
338            }
339          }
340          if (newItems > 0)
341          {
342            %>
343            <%=sb.toString()%>
344            <%
345          }
346          i = 1 - i;
347          index++;
348        } while (newItems > 0);
349        %>
350        <tr class="panel">
351        <td colspan="99" class="panel">
352        <b>C</b> = Create, <b>R</b> = Read, <b>U</b> = Use,
353        <b>W</b> = Write, <b>D</b> = Delete, <b>O</b> = Change owner, <b>P</b> = Change permissions
354       
355        </td>
356        </tr>
357        </table>
358        </div>
359        </div>       
360        <br>
361      </base:section>
362      <%
363      ItemQuery<User> userQuery = role.getUsers();
364      userQuery.include(Include.ALL);
365      userQuery.order(Orders.asc(Hql.property("name")));
366      ItemResultList<User> users = userQuery.list(dc);
367     
368      if (users.size() == 0)
369      {
370        %>
371        <h4>Members</h4>
372        There are no members of this role (or, you don't have permission to view them).
373        <%
374      }
375      else
376      {
377        %>
378        <base:section 
379          id="members" 
380          title="<%="Members (" + users.size() + ")"%>"
381          context="<%=cc%>"
382          >
383          <tbl:table
384            id="members"
385            clazz="itemlist"
386            columns="all"
387            >
388          <tbl:columndef 
389            id="name"
390            title="Name"
391          />
392          <tbl:columndef 
393            id="type"
394            title="Type"
395          />
396          <tbl:columndef 
397            id="description"
398            title="Description"
399          />
400          <tbl:data>
401            <tbl:columns>
402            </tbl:columns>
403            <tbl:rows>
404            <%
405            for (User user : users)
406            {
407              %>
408              <tbl:row>
409                <tbl:cell column="name"><base:icon 
410                    image="deleted.gif" 
411                    tooltip="This item has been scheduled for deletion" 
412                    visible="<%=user.isRemoved()%>"
413                  /><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
414                <tbl:cell column="type">User</tbl:cell>
415                <tbl:cell column="description"><%=HTML.encodeTags(user.getDescription())%></tbl:cell>
416              </tbl:row>
417              <%
418            }
419            %>
420            </tbl:rows>
421          </tbl:data>
422          </tbl:table>
423        </base:section>
424        <%
425      }
426      %>
427
428    </div>
429      </t:tab>
430      </t:tabcontrol>
431
432  </base:body>
433  </base:page>
434  <%
435}
436finally
437{
438  if (dc != null) dc.close();
439}
440
441%>
Note: See TracBrowser for help on using the repository browser.