source: trunk/www/admin/users/list_users.jsp @ 4906

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

References #1128 More item-pages updated

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 22.1 KB
Line 
1<%-- $Id: list_users.jsp 4906 2009-04-24 13:53:14Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell, Nicklas Nordborg, Martin Svensson
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.ExtendedProperty"
30  import="net.sf.basedb.core.ExtendedProperties" 
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.User"
33  import="net.sf.basedb.core.Group"
34  import="net.sf.basedb.core.Role"
35  import="net.sf.basedb.core.Type"
36  import="net.sf.basedb.core.ItemQuery"
37  import="net.sf.basedb.core.Include"
38  import="net.sf.basedb.core.ItemResultIterator"
39  import="net.sf.basedb.core.ItemResultList"
40  import="net.sf.basedb.core.ItemContext"
41  import="net.sf.basedb.core.Permission"
42  import="net.sf.basedb.core.PluginDefinition"
43  import="net.sf.basedb.core.query.Orders"
44  import="net.sf.basedb.core.query.Hql"
45  import="net.sf.basedb.core.query.Restrictions"
46  import="net.sf.basedb.core.query.Expressions"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.core.plugin.Plugin"
49  import="net.sf.basedb.util.Enumeration"
50  import="net.sf.basedb.clients.web.Base"
51  import="net.sf.basedb.clients.web.ModeInfo"
52  import="net.sf.basedb.clients.web.PermissionUtil"
53  import="net.sf.basedb.clients.web.util.HTML"
54  import="net.sf.basedb.util.Values"
55  import="net.sf.basedb.util.formatter.Formatter"
56  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
57  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
58  import="net.sf.basedb.clients.web.extensions.JspContext"
59  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
60  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
61  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
62  import="java.util.List"
63  import="java.util.Map"
64  import="java.util.Date"
65%>
66<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
67<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
68<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
69<%!
70  private static final Item itemType = Item.USER;
71  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
72%>
73<%
74final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
75final String ID = sc.getId();
76final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
77final boolean writePermission = sc.hasPermission(Permission.WRITE, itemType);
78final boolean deletePermission = sc.hasPermission(Permission.DELETE, itemType);
79final boolean impersonatePermission = sc.hasSystemPermission(Permission.ACT_AS_ANOTHER_USER);
80final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
81
82final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
83final String callback = request.getParameter("callback");
84final String title = mode.generateTitle("user", "users");
85final DbControl dc = sc.newDbControl();
86ItemResultIterator<User> users = null;
87try
88{
89  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
90
91  // Query for groups relatated to the current user
92  final ItemQuery<Group> groupQuery = Group.getQuery();
93  groupQuery.include(cc.getInclude());
94  groupQuery.join(Hql.innerJoin("users", "usr"));
95  groupQuery.restrict(Restrictions.eq(Hql.alias("usr"), Expressions.parameter("user")));
96  groupQuery.order(Orders.asc(Hql.property("name"))); 
97
98  // Query for roles relatated to the current user
99  final ItemQuery<Role> roleQuery = Role.getQuery();
100  roleQuery.include(cc.getInclude());
101  roleQuery.join(Hql.innerJoin("users", "usr"));
102  roleQuery.restrict(Restrictions.eq(Hql.alias("usr"), Expressions.parameter("user")));
103  roleQuery.order(Orders.asc(Hql.property("name"))); 
104 
105  List<ExtendedProperty> extendedProperties = ExtendedProperties.getProperties("UserData");
106 
107  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
108  try
109  {
110    final ItemQuery<User> query = Base.getConfiguredQuery(cc, true, User.getQuery(), mode);
111    users = query.iterate(dc);
112  }
113  catch (Throwable t)
114  {
115    cc.setMessage(t.getMessage());
116  }
117  int numListed = 0;
118  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
119  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
120  %>
121  <base:page title="<%=title==null ? "Users" : title%>" type="<%=mode.getPageType()%>">
122  <base:head scripts="menu.js,table.js" styles="menu.css,table.css">
123    <ext:scripts context="<%=jspContext%>" />
124    <ext:stylesheets context="<%=jspContext%>" />
125    <script language="JavaScript">
126    var submitPage = 'index.jsp';
127    var formId = 'users';
128    function newItem()
129    {
130      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
131    }
132    function editItem(itemId)
133    {
134      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
135    }
136    function viewItem(itemId)
137    {
138      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
139    }
140    function itemOnClick(evt, itemId)
141    {
142      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
143    }
144    function deleteItems()
145    {
146      var frm = document.forms[formId];
147      if (Forms.numChecked(frm) == 0)
148      {
149        alert('Please select at least one item in the list');
150        return;
151      }
152      frm.action = submitPage;
153      frm.cmd.value = 'DeleteItems';
154      frm.submit();
155    }
156    function restoreItems()
157    {
158      var frm = document.forms[formId];
159      if (Forms.numChecked(frm) == 0)
160      {
161        alert('Please select at least one item in the list');
162        return;
163      }
164      frm.action = submitPage;
165      frm.cmd.value = 'RestoreItems';
166      frm.submit();
167    }
168    function deleteItemPermanently(itemId)
169    {
170      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', itemId);
171    }
172    function configureColumns()
173    {
174      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
175    }
176    function runPlugin(cmd)
177    {
178      Table.submitToPopup(formId, cmd, 740, 540);
179    }
180    function returnSelected()
181    {
182      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
183      window.close();
184    }
185    function presetOnChange()
186    {
187      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
188    }
189    function newGroup()
190    {
191      var frm = document.forms[formId];
192      var selected = Table.getSelected(formId);
193      if (selected.length == 0)
194      {
195        alert('Please select at least one item in the list');
196        return;
197      }
198      var extraUrl = '&user_id='+selected.join('&user_id=');
199      Main.viewOrEditItem('<%=ID%>', 'GROUP', 0, true, extraUrl);
200    }
201    function impersonate(userId)
202    {
203      Main.openPopup('../../impersonate.jsp?ID=<%=ID%>&user_id='+userId, 'Impersonate', 480, 240);
204    }
205    function defaultMembership()
206    {
207      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=EditDefaultMembership', 'DefaultMembership', 600, 400);
208    }
209    </script>
210  </base:head>
211 
212  <base:body>
213    <%
214    if (cc.getMessage() != null)
215    {
216      %>
217      <div class="error"><%=cc.getMessage()%></div>
218      <%
219      cc.setMessage(null);
220    }
221    %>
222    <tbl:table 
223      id="users" 
224      clazz="itemlist" 
225      columns="<%=cc.getSetting("columns")%>"
226      sortby="<%=cc.getSortProperty()%>" 
227      direction="<%=cc.getSortDirection()%>"
228      title="<%=title%>"
229      action="index.jsp"
230      sc="<%=sc%>"
231      item="<%=itemType%>"
232      >
233      <tbl:hidden 
234        name="mode" 
235        value="<%=mode.getName()%>" 
236      />
237      <tbl:hidden 
238        name="callback" 
239        value="<%=callback%>" 
240        skip="<%=callback == null%>" 
241      />
242      <tbl:columndef 
243        id="name"
244        property="name"
245        datatype="string"
246        title="Name"
247        sortable="true" 
248        filterable="true"
249        exportable="true"
250        show="always" 
251      />
252      <tbl:columndef 
253        id="id"
254        clazz="uniquecol"
255        property="id"
256        datatype="int"
257        title="ID"
258        sortable="true"
259        filterable="true"
260        exportable="true"
261      />
262      <tbl:columndef 
263        id="entryDate"
264        property="entryDate"
265        datatype="date"
266        title="Registered"
267        sortable="true" 
268        filterable="true"
269        exportable="true"
270        formatter="<%=dateFormatter%>"
271      />
272      <tbl:columndef 
273        id="login"
274        clazz="uniquecol"
275        property="login"
276        datatype="string"
277        title="Login"
278        sortable="true" 
279        filterable="true"
280        exportable="true"
281      />
282      <tbl:columndef 
283        id="systemId"
284        clazz="uniquecol"
285        property="systemId"
286        datatype="string"
287        title="System ID"
288        sortable="true"
289        filterable="true"
290        exportable="true"
291      />
292      <tbl:columndef 
293        id="externalId"
294        clazz="uniquecol"
295        property="externalId"
296        datatype="string"
297        title="External ID"
298        sortable="true" 
299        filterable="true"
300        exportable="true"
301      />
302      <tbl:columndef 
303        id="expirationDate"
304        property="expirationDate"
305        datatype="date"
306        title="Expiration date"
307        sortable="true" 
308        filterable="true"
309        exportable="true"
310        formatter="<%=dateFormatter%>"
311      />
312      <tbl:columndef 
313        id="disabled"
314        property="disabled"
315        datatype="boolean"
316        title="Disabled"
317        sortable="true" 
318        filterable="true"
319        exportable="true"
320      />
321      <tbl:columndef 
322        id="multiuserAccount"
323        property="multiuserAccount"
324        datatype="boolean"
325        title="Multi-user account"
326        sortable="true" 
327        filterable="true"
328        exportable="true"
329      />
330      <tbl:columndef 
331        id="groups"
332        title="Groups"
333        property="&groups(name)"
334        datatype="string"
335        filterable="true"
336        exportable="true"
337      />
338      <tbl:columndef
339        id="roles"
340        title="Roles"
341        property="&roles(name)"
342        datatype="string"
343        filterable="true"
344        exportable="true"
345      />
346      <tbl:columndef 
347        id="organisation"
348        property="organisation"
349        datatype="string"
350        title="Organisation"
351        sortable="true" 
352        filterable="true"
353        exportable="true"
354      />
355      <tbl:columndef 
356        id="address"
357        property="address"
358        datatype="string"
359        title="Address"
360        sortable="true" 
361        filterable="true"
362        exportable="true"
363      />
364      <tbl:columndef 
365        id="email"
366        property="email"
367        datatype="string"
368        title="Email"
369        sortable="true" 
370        filterable="true"
371        exportable="true"
372      />
373      <tbl:columndef 
374        id="phone"
375        property="phone"
376        datatype="string"
377        title="Phone"
378        sortable="true" 
379        filterable="true"
380        exportable="true"
381      />
382      <tbl:columndef 
383        id="fax"
384        property="fax"
385        datatype="string"
386        title="Fax"
387        sortable="true" 
388        filterable="true"
389        exportable="true"
390      />
391      <tbl:columndef 
392        id="url"
393        property="url"
394        datatype="string"
395        title="Url"
396        sortable="true" 
397        filterable="true"
398        exportable="true"
399      />
400      <%
401      if (extendedProperties != null)
402      {
403        for (ExtendedProperty ep : extendedProperties)
404        {
405          String name = ep.getName();
406          %>
407          <tbl:columndef
408            id="<%=name%>"
409            property="<%=name%>"
410            datatype="<%=ep.getType().getStringValue()%>"
411            title="<%=HTML.encodeTags(ep.getTitle())%>"
412            sortable="true"
413            filterable="true"
414            exportable="true"
415            formatter="<%=FormatterFactory.getExtendedPropertyFormatter(sc, ep)%>"
416          />
417          <%
418        }
419      }
420      %>
421      <tbl:columndef 
422        id="quota"
423        property="quota.name"
424        datatype="string"
425        title="Quota"
426        sortable="true" 
427        filterable="true"
428        exportable="true"
429      />
430      <tbl:columndef 
431        id="quotagroup"
432        property="quotaGroup.name"
433        datatype="string"
434        title="Quota group"
435        sortable="true" 
436        filterable="true"
437        exportable="true"
438      />
439      <tbl:columndef 
440        id="description"
441        property="description"
442        datatype="string"
443        title="Description" 
444        sortable="true" 
445        filterable="true" 
446        exportable="true"
447      />
448     
449      <tbl:toolbar
450        visible="<%=mode.hasToolbar()%>"
451        >
452        <tbl:button 
453          disabled="<%=createPermission ? false : true%>" 
454          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
455          onclick="newItem()" 
456          title="New&hellip;" 
457          tooltip="<%=createPermission ? "Create new user" : "You do not have permission to create users"%>" 
458        />
459        <tbl:button 
460          disabled="<%=deletePermission ? false : true%>" 
461          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
462          onclick="deleteItems()" 
463          title="Delete" 
464          tooltip="<%=deletePermission ? "Delete the selected items" : "You do not have permission to delete users" %>" 
465        />
466        <tbl:button 
467          disabled="<%=writePermission ? false : true%>" 
468          image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
469          onclick="restoreItems()" 
470          title="Restore" 
471          tooltip="<%=writePermission ? "Restore the selected (deleted) items" : "You do not have permission to edit users" %>" 
472        />
473        <tbl:button 
474          image="columns.gif" 
475          onclick="configureColumns()" 
476          title="Columns&hellip;" 
477          tooltip="Show, hide and re-order columns" 
478        />
479        <tbl:button
480          image="membership.gif"
481          onclick="defaultMembership()"
482          title="Default membership&hellip;"
483          tooltip="Specify groups and roles that are automtically assigned to new users"
484        />
485        <tbl:button
486          image="add.png"
487          onclick="newGroup()"
488          title="New group&hellip;"
489          tooltip="Create a new group with the selected users as members"
490          visible="<%=sc.hasPermission(Permission.CREATE, Item.GROUP)%>"
491        />
492        <tbl:button 
493          image="import.gif" 
494          onclick="runPlugin('ImportItems')" 
495          title="Import&hellip;" 
496          tooltip="Import data" 
497          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
498        />
499        <tbl:button 
500          image="export.gif" 
501          onclick="runPlugin('ExportItems')" 
502          title="Export&hellip;" 
503          tooltip="Export data" 
504          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
505        />
506        <tbl:button 
507          image="runplugin.gif" 
508          onclick="runPlugin('RunListPlugin')" 
509          title="Run plugin&hellip;" 
510          tooltip="Run a plugin" 
511          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
512        />
513        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
514          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
515      </tbl:toolbar>
516      <tbl:navigator
517        page="<%=cc.getPage()%>" 
518        rowsperpage="<%=cc.getRowsPerPage()%>" 
519        totalrows="<%=users == null ? 0 : users.getTotalCount()%>" 
520        visible="<%=mode.hasNavigator()%>"
521      />
522      <tbl:data>
523        <tbl:columns>
524        <tbl:presetselector 
525          clazz="columnheader"
526          colspan="3"
527          onchange="presetOnChange()"
528        />
529        </tbl:columns>
530
531        <tr>
532          <tbl:header 
533            clazz="index"
534            >&nbsp;</tbl:header>
535          <tbl:header 
536            clazz="check" 
537            visible="<%=mode.hasCheck()%>"
538            ><base:icon 
539              image="check_uncheck.gif" 
540              tooltip="Check/uncheck all" 
541              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
542            /></tbl:header>
543          <tbl:header 
544            clazz="check" 
545            visible="<%=mode.hasRadio()%>"
546            >&nbsp;</tbl:header>
547          <tbl:header 
548            clazz="icons" 
549            visible="<%=mode.hasIcons()%>"
550            >&nbsp;</tbl:header>
551          <tbl:propertyfilter />
552        </tr>
553         
554          <tbl:rows>
555          <%
556          int index = cc.getPage()*cc.getRowsPerPage();
557          int selectedItemId = cc.getId();
558          if (users != null)
559          {           
560            while (users.hasNext())
561            {
562              User item = users.next();
563              int itemId = item.getId();
564              String name = HTML.encodeTags(item.getName());
565              String tooltip = mode.isSelectionMode() ? 
566                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
567              String deletePermanently = "deleteItemPermanently("+itemId+")";
568              index++;
569              numListed++;
570              %>
571              <tbl:row>
572                <tbl:header 
573                  clazz="index"
574                  ><%=index%></tbl:header>
575                <tbl:header 
576                  clazz="check" 
577                  visible="<%=mode.hasCheck()%>"
578                  ><input 
579                    type="checkbox" 
580                    name="<%=itemId%>" 
581                    value="<%=itemId%>" 
582                    title="<%=name%>" 
583                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
584                  ></tbl:header>
585                <tbl:header 
586                  clazz="check" 
587                  visible="<%=mode.hasRadio()%>"
588                  ><input 
589                    type="radio" 
590                    name="item_id" 
591                    value="<%=itemId%>" 
592                    title="<%=name%>" 
593                    <%=selectedItemId == itemId ? "checked" : ""%>
594                  ></tbl:header>
595                <tbl:header 
596                  clazz="icons" 
597                  visible="<%=mode.hasIcons()%>"
598                  ><base:icon 
599                    image="<%=deletePermission ? "deleted.gif" : "deleted_disabled.gif"%>"
600                    onclick="<%=deletePermission ? deletePermanently : null%>"
601                    tooltip="This item has been scheduled for deletion" 
602                    visible="<%=item.isRemoved()%>"
603                  /><base:icon
604                    image="systemitem.gif"
605                    tooltip="This item is a system item"
606                    visible="<%=item.isSystemItem()%>" 
607                  /><base:icon
608                    image="login.png"
609                    tooltip="Login as this user"
610                    onclick="<%="impersonate(" + itemId + ")"%>"
611                    visible="<%=impersonatePermission%>"
612                  />&nbsp;</tbl:header>
613                <tbl:cell column="name"><div class="link" 
614                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
615                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
616                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
617                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
618                <tbl:cell column="login"><%=HTML.encodeTags(item.getLogin())%></tbl:cell>
619                <tbl:cell column="systemId"><%=Values.getString(item.getSystemId())%></tbl:cell>
620                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
621                <tbl:cell column="expirationDate" value="<%=item.getExpirationDate()%>" />
622                <tbl:cell column="disabled"><%=item.isDisabled() ? "yes" : "no" %></tbl:cell>
623                <tbl:cell column="multiuserAccount"><%=item.isMultiuserAccount() ? "yes" : "no" %></tbl:cell>
624                <tbl:cell column="groups">
625                  <%
626                  groupQuery.setParameter("user", itemId, Type.INT);
627                  try
628                  {
629                    String separator = "";
630                    for (Group g : groupQuery.list(dc))
631                    {
632                      out.write(separator);
633                      if (mode.hasPropertyLink())
634                      {
635                        out.write(Base.getLinkedName(ID, g, false, mode.hasEditLink()));
636                      }
637                      else
638                      {
639                        out.write(HTML.encodeTags(g.getName()));
640                      }
641                      separator = ", ";
642                    }
643                  }
644                  catch (Throwable t)
645                  {
646                    %>
647                    <div class="error"><%=t.getMessage()%></div>
648                    <%
649                  }
650                  %>
651                </tbl:cell>
652                <tbl:cell column="roles">
653                  <%
654                  roleQuery.setParameter("user", itemId, Type.INT);
655                  try
656                  {
657                    String separator = "";
658                    for (Role r : roleQuery.list(dc))
659                    {
660                      out.write(separator);
661                      if (mode.hasPropertyLink())
662                      {
663                        out.write(Base.getLinkedName(ID, r, false, mode.hasEditLink()));
664                      }
665                      else
666                      {
667                        out.write(HTML.encodeTags(r.getName()));
668                      }
669                      separator = ", ";
670                    }
671                  }
672                  catch (Throwable t)
673                  {
674                    %>
675                    <div class="error"><%=t.getMessage()%></div>
676                    <%
677                  }
678                  %>
679                </tbl:cell>
680                <tbl:cell column="organisation"><%=HTML.encodeTags(item.getOrganisation())%></tbl:cell>
681                <tbl:cell column="address"><%=HTML.encodeTags(item.getAddress())%></tbl:cell>
682                <tbl:cell column="email"><%=HTML.encodeTags(item.getEmail())%></tbl:cell>
683                <tbl:cell column="phone"><%=HTML.encodeTags(item.getPhone())%></tbl:cell>
684                <tbl:cell column="fax"><%=HTML.encodeTags(item.getFax())%></tbl:cell>
685                <tbl:cell column="url"><%=HTML.encodeTags(item.getUrl())%></tbl:cell><%
686                if (extendedProperties != null)
687                {
688                  for (ExtendedProperty ep : extendedProperties)
689                  {
690                    name = ep.getName();
691                    %>
692                    <tbl:cell column="<%=name%>"><tbl:cellvalue value="<%=item.getExtended(name)%>" /></tbl:cell>
693                    <%
694                  }
695                }
696                %>
697                <tbl:cell column="quota"
698                  ><base:propertyvalue 
699                    item="<%=item%>" 
700                    property="quota"
701                    enableEditLink="<%=mode.hasEditLink()%>" 
702                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
703                  /></tbl:cell>
704                <tbl:cell column="quotagroup"
705                  ><base:propertyvalue 
706                    item="<%=item%>" 
707                    property="quotaGroup"
708                    enableEditLink="<%=mode.hasEditLink()%>" 
709                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
710                  /></tbl:cell>
711                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
712              </tbl:row>
713              <%
714              }
715            }
716          %>
717          </tbl:rows>
718      </tbl:data>
719      <%
720      if (numListed == 0)
721      {
722        %>
723        <tbl:panel><%=users == null || users.getTotalCount() == 0 ? "No users were found" : "No users on this page. Please select another page!" %></tbl:panel>
724        <%
725      }
726      else
727      {
728        %>
729        <tbl:navigator
730          page="<%=cc.getPage()%>" 
731          rowsperpage="<%=cc.getRowsPerPage()%>" 
732          totalrows="<%=users == null ? 0 : users.getTotalCount()%>" 
733          visible="<%=mode.hasNavigator()%>"
734          locked="true"
735        />
736        <%
737      }
738      %>
739    </tbl:table>
740    <base:buttongroup align="center" clazz="fixedatbottom">
741      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
742      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
743      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
744    </base:buttongroup>
745    <br><br><br>
746  </base:body>
747  </base:page>
748  <%
749}
750finally
751{
752  if (users != null) users.close();
753  if (dc != null) dc.close();
754}
755%>
Note: See TracBrowser for help on using the repository browser.