source: trunk/www/common/history/list_history.jsp @ 5951

Last change on this file since 5951 was 5951, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

  • Fixes rest of list pages in Biomaterial LIMS menu
  • Introduced an 'iframe' page type so that thos pages doesn't have to 'cannibalise' on the 'popup' page type (doesn't works well with absolutely positioned content).
  • Fixed subclass="dialogbuttons" on all list pages when used in popup form


  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 12.5 KB
Line 
1<%-- $Id: list_history.jsp 5951 2012-02-09 14:19:17Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 3
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21
22  @author Nicklas
23  @version 2.0
24--%>
25<%@ page pageEncoding="UTF-8" session="false"
26  import="net.sf.basedb.core.SessionControl"
27  import="net.sf.basedb.core.DbControl"
28  import="net.sf.basedb.core.Item"
29  import="net.sf.basedb.core.BasicItem"
30  import="net.sf.basedb.core.ChangeHistory"
31  import="net.sf.basedb.core.Permission"
32  import="net.sf.basedb.core.Nameable"
33  import="net.sf.basedb.core.ItemContext"
34  import="net.sf.basedb.core.ItemQuery"
35  import="net.sf.basedb.core.ItemResultIterator"
36  import="net.sf.basedb.core.PermissionDeniedException"
37  import="net.sf.basedb.core.PluginDefinition"
38  import="net.sf.basedb.core.query.Orders"
39  import="net.sf.basedb.core.query.Hql"
40  import="net.sf.basedb.core.plugin.GuiContext"
41  import="net.sf.basedb.core.plugin.Plugin"
42  import="net.sf.basedb.core.log.ChangeType"
43  import="net.sf.basedb.util.Values"
44  import="net.sf.basedb.util.Enumeration"
45  import="net.sf.basedb.util.formatter.Formatter"
46  import="net.sf.basedb.clients.web.Base"
47  import="net.sf.basedb.clients.web.ModeInfo"
48  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
49  import="net.sf.basedb.clients.web.util.HTML"
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.List"
57  import="java.util.Date"
58  import="java.util.Map"
59%>
60<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
61<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
62<%!
63  private static final Item itemType = Item.CHANGEHISTORY;
64  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
65%>
66<%
67final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
68final String ID = sc.getId();
69final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
70
71final Item sourceType = Item.valueOf(request.getParameter("source_type"));
72final int sourceId = Values.getInt(request.getParameter("source_id"));
73final float scale = Base.getScale(sc);
74final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
75final String callback = request.getParameter("callback");
76final String title = mode.generateTitle("history entry", "history entries");
77final DbControl dc = sc.newDbControl();
78ItemResultIterator<ChangeHistory> history = null;
79
80try
81{
82  final BasicItem source = sourceType.getById(dc, sourceId); 
83  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
84  try
85  {
86    final ItemQuery<ChangeHistory> query = 
87      Base.getConfiguredQuery(dc, cc, true, ChangeHistory.getHistoryOf(source), mode);
88    query.order(cc.getSortDirection().sortBy(Hql.property("id")));
89    history = query.iterate(dc);
90    //cc.setMessage(query.toString());
91  }
92  catch (Throwable t)
93  {
94    cc.setMessage(t.getMessage());
95    t.printStackTrace();
96  }
97  Formatter<Date> dateFormatter = FormatterFactory.getDateTimeFormatter(sc);
98  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
99  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
100  int numListed = 0;
101  %>
102  <base:page type="iframe">
103  <base:head scripts="table.js" styles="table.css,toolbar.css">
104  </base:head>
105  <base:body >
106    <script language="JavaScript">
107    var submitPage = 'index.jsp';
108    var formId = 'history';
109    function viewItem(itemId)
110    {
111      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false, '&source_id=<%=sourceId%>&source_type=<%=sourceType.name()%>');
112    }
113    function itemOnClick(evt, itemId)
114    {
115      viewItem(itemId);
116    }
117
118    function configureColumns()
119    {
120      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
121    }
122    function presetOnChange()
123    {
124      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
125    }
126    function returnSelected()
127    {
128      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
129      window.close();
130    }
131    function runPlugin(cmd)
132    {
133      Table.submitToPopup(formId, cmd, 750, 500);
134    }
135    </script>
136    <tbl:table 
137      id="history"
138      columns="<%=cc.getSetting("columns")%>"
139      sortby="<%=cc.getSortProperty()%>" 
140      direction="<%=cc.getSortDirection()%>"
141      title="<%=title%>"
142      action="index.jsp"
143      sc="<%=sc%>"
144      item="<%=itemType%>"
145      subclass="fulltable"
146      >
147      <tbl:hidden 
148        name="source_id"
149        value="<%=String.valueOf(sourceId)%>" 
150      />
151      <tbl:hidden 
152        name="source_type" 
153        value="<%=sourceType.name()%>" 
154      />
155      <tbl:columndef 
156         id="id"
157        clazz="uniquecol"
158         property="id"
159         datatype="int"
160         title="ID"
161         sortable="true" 
162         filterable="true"
163         exportable="true"
164      />
165      <tbl:columndef 
166        id="time"
167        property="$hst.time"
168        exportproperty="changeHistory.time"
169        datatype="timestamp"
170        title="Time"
171        sortable="true" 
172        filterable="true"
173        exportable="true"
174        show="always" 
175      />
176      <%
177      Enumeration<String, String> types = new Enumeration<String, String>();
178      for (ChangeType ct : ChangeType.values())
179      {
180        types.add(Integer.toString(ct.getValue()), ct.toString());
181      }
182      %>
183      <tbl:columndef 
184        id="changeType"
185        property="changeType"
186        datatype="int"
187        title="Type"
188        sortable="true" 
189        filterable="true"
190        exportable="true"
191        enumeration="<%=types%>"
192      />
193      <tbl:columndef 
194        id="user"
195        property="$hst.user.name"
196        exportproperty="changeHistory.user.name"
197        datatype="string"
198        title="User"
199        sortable="true" 
200        filterable="true"
201        exportable="true"
202      />
203      <tbl:columndef 
204        id="session"
205        property="$hst.session.loginTime"
206        exportproperty="changeHistory.session.loginTime"
207        datatype="date"
208        title="Session"
209        sortable="true" 
210        filterable="true"
211        exportable="true"
212      />
213      <tbl:columndef 
214        id="client"
215        property="$hst.client.name"
216        exportproperty="changeHistory.client.name"
217        datatype="string"
218        title="Client"
219        sortable="true" 
220        filterable="true"
221        exportable="true"
222      />
223      <tbl:columndef 
224        id="project"
225        property="$hst.project.name"
226        exportproperty="changeHistory.project.name"
227        datatype="string"
228        title="Project"
229        sortable="true" 
230        filterable="true"
231        exportable="true"
232      />
233      <tbl:columndef 
234        id="plugin"
235        property="$hst.plugin.name"
236        exportproperty="changeHistory.plugin.name"
237        datatype="string"
238        title="Plugin"
239        sortable="true"
240        filterable="true"
241        exportable="true"
242      />
243      <tbl:columndef 
244        id="job"
245        property="$hst.job.name"
246        exportproperty="changeHistory.job.name"
247        datatype="string"
248        title="Job"
249        sortable="true" 
250        filterable="true"
251        exportable="true"
252      />
253      <tbl:columndef 
254        id="changeInfo"
255        property="changeInfo"
256        datatype="string"
257        title="Change info" 
258        sortable="true" 
259        filterable="true" 
260        exportable="true"
261      />
262      <div class="panelgroup bottomborder">
263        <tbl:toolbar
264          visible="<%=mode.hasToolbar()%>"
265          subclass="bottomborder"
266          >
267          <tbl:button 
268            image="columns.png" 
269            onclick="configureColumns()" 
270            title="Columns&hellip;" 
271            tooltip="Show, hide and re-order columns" 
272          />
273          <tbl:button 
274            image="export.png" 
275            onclick="runPlugin('ExportItems')" 
276            title="Export&hellip;" 
277            tooltip="Export data" 
278            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
279          />
280          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
281            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
282        </tbl:toolbar>
283        <tbl:panel>
284          <tbl:presetselector 
285            onchange="presetOnChange()"
286          />
287          <tbl:navigator
288            page="<%=cc.getPage()%>" 
289            rowsperpage="<%=cc.getRowsPerPage()%>" 
290            totalrows="<%=history == null ? 0 : history.getTotalCount()%>" 
291            visible="<%=mode.hasNavigator()%>"
292          />
293        </tbl:panel>
294      </div>
295      <tbl:data>
296        <tbl:headers>
297          <tbl:headerrow>
298            <tbl:header colspan="3" />
299            <tbl:columnheaders />
300          </tbl:headerrow>
301          <tbl:headerrow>
302            <tbl:header subclass="index" />
303            <tbl:header 
304              subclass="check" 
305              visible="<%=mode.hasCheck()%>"
306              ><base:icon 
307                image="check_uncheck.png" 
308                tooltip="Check/uncheck all" 
309                onclick="Forms.checkUncheck(document.forms[formId])" 
310              /></tbl:header>
311            <tbl:header 
312              subclass="check" 
313              visible="<%=mode.hasRadio()%>"
314              />
315            <tbl:header 
316              subclass="icons" 
317              visible="<%=mode.hasIcons()%>"
318              />
319            <tbl:propertyfilter />
320          </tbl:headerrow>
321        </tbl:headers>
322        <tbl:rows>
323          <%
324          if (cc.getMessage() != null)
325          {
326            %>
327            <tbl:panel clazz="messagepanel">
328              <div class="messagecontainer error"><%=cc.getMessage()%></div>
329            </tbl:panel>
330            <%
331            cc.setMessage(null);
332          }
333          int index = cc.getPage()*cc.getRowsPerPage();
334          int selectedItemId = cc.getId();
335          if (history != null)
336          {           
337            while (history.hasNext())
338            {
339              ChangeHistory item = history.next();
340              int itemId = item.getId();
341              String tooltip = mode.isSelectionMode() ? 
342                  "Select this item" : "View this item";
343              index++;
344              numListed++;
345              %>
346              <tbl:row>
347                <tbl:header 
348                  clazz="index"
349                  ><%=index%></tbl:header>
350                <tbl:header 
351                  clazz="check" 
352                  visible="<%=mode.hasCheck()%>"
353                  ><input 
354                    type="checkbox" 
355                    name="<%=itemId%>" 
356                    value="<%=itemId%>" 
357                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
358                  ></tbl:header>
359                <tbl:header 
360                  clazz="check" 
361                  visible="<%=mode.hasRadio()%>"
362                  ><input 
363                    type="radio" 
364                    name="item_id" 
365                    value="<%=itemId%>" 
366                    <%=selectedItemId == itemId ? "checked" : ""%>
367                  ></tbl:header>
368                <tbl:header 
369                  clazz="icons" 
370                  visible="<%=mode.hasIcons()%>"
371                  >&nbsp;</tbl:header>
372                <tbl:cell column="time"><div class="link" 
373                  onclick="itemOnClick(null, <%=itemId%>)" 
374                  title="<%=tooltip%>"><%=dateFormatter.format(item.getTime())%></div></tbl:cell>
375                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
376                <tbl:cell column="changeType"><%=item.getChangeType()%></tbl:cell>
377                <tbl:cell column="changeInfo"><%=HTML.niceFormat(item.getChangeInfo())%></tbl:cell>
378                <tbl:cell column="user"><%=ChangeHistoryUtil.getUser(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
379                <tbl:cell column="session"><%=ChangeHistoryUtil.getSession(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
380                <tbl:cell column="client"><%=ChangeHistoryUtil.getClient(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
381                <tbl:cell column="project"><%=ChangeHistoryUtil.getProject(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
382                <tbl:cell column="plugin"><%=ChangeHistoryUtil.getPlugin(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
383                <tbl:cell column="job"><%=ChangeHistoryUtil.getJob(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
384              </tbl:row>
385              <%
386              }
387            }
388          if (numListed == 0)
389          {
390            %>
391            <tbl:panel clazz="messagepanel">
392              <div class="messagecontainer note">
393              <%=history == null || history.getTotalCount() == 0 ? "No history entries were found" : "No history entries on this page. Please select another page!" %>
394              </div>
395            </tbl:panel>
396            <%
397          }
398          %>
399        </tbl:rows>
400      </tbl:data>
401    </tbl:table>
402     
403     
404  </base:body>
405  </base:page>
406  <%
407}
408finally
409{
410  if (dc != null) dc.close();
411}
412
413%>
Note: See TracBrowser for help on using the repository browser.