/[webpac]/trunk/openisis/idm.jsp
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/openisis/idm.jsp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 239 - (show annotations)
Mon Mar 8 17:49:13 2004 UTC (20 years ago) by dpavlin
File size: 21258 byte(s)
including openisis 0.9.0 into webpac tree

1 <%--
2 openisis - an open implementation of the ISIS database
3 Version 0.8.x (microversion see file Version)
4 Copyright (C) 2001-2002 by Erik Grziwotz, erik@openisis.org
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20 This software is dedicated to the memory of Eckart Dietrich.
21
22 This software is inspired by (but contains no code of) the iAPI
23 Copyright (C) 2000 by Robert Janusz, rj@jezuici.krakow.pl.
24 See iAPI.txt for what it contains.
25 EOH
26 --%><%@page
27 import="org.openisis.*,java.io.IOException,java.util.*,java.net.URLEncoder"
28 contentType="text/html; charset=iso-8859-1"
29 %><%!
30 static final String ID = "$Id: idm.jsp,v 1.4 2002/12/13 21:30:27 kripke Exp $";
31 static final String EMPTY = "";
32 static Db db;
33 static String dberr = EMPTY;
34 static String me = "idm";
35 static {
36 try {
37 String[] args = new String[] { "-v", "info", "-encoding", "Cp850" };
38 db = Db.open( "/var/db/idm/doku", args );
39 } catch (IOException e) {
40 e.printStackTrace();
41 dberr = e.toString();
42 }
43 };
44 static String NV ( String x ) { return null==x ? EMPTY : x; }
45 static int ROWS = 10; // number of rows to show at once
46 static int TERMS = 50; // number of terms to show at once
47 static int[] tag = {
48 100, 101, 200, 201,
49 301, 302, 430, 435,
50 28, 450, 800, 18
51 };
52 static String[] t = {
53 "Autor(en)", "author", // 100
54 "weitere Personen", "other contributors", // 101
55 "K&ouml;rperschaft als Hrsg.", "corporate body as editor", // 200
56 "weitere K&ouml;rperschaften", "other corporate bodies", // 201
57 "Titel ohne Autorennennung", "title (without indiv. author)", // 301
58 "Titel mit Autor", "title (with author)", // 302
59 "Erscheinungsvermerk", "publisher: name and place", // 430
60 "Erscheinungsjahr", "year of publication", // 435
61 "Erscheinungsland", "country of publication", // 28
62 "Ges.Titel/Ser.Titel/Bandnr.", "series title", // 450
63 "Schlagworte", "keywords", // 800
64 "Dokument Nr.", "no of document", // 18
65 // unused fields:
66 "Universit&auml;tseinrichtung (10):", EMPTY,
67 "Projekt (12):", EMPTY,
68 "Erfassungsdatum (16):", EMPTY,
69 "Dokumententyp (22):", EMPTY,
70 "Physikalische Form (24):", EMPTY,
71 "Sprache des Dokumentes (26):", EMPTY,
72 "Physische Form (440):", EMPTY,
73 "Quelle (Zeitschrift) (480):", EMPTY,
74 "Quelle (Monographie) (490):", EMPTY,
75 "ISBN (600):", EMPTY,
76 "Abstract (900):", EMPTY,
77 EMPTY, EMPTY,
78 EMPTY, EMPTY,
79 // 50: other texts
80 "Dokumentations-Datenbank des IDM der Universit&auml;t Bielefeld",
81 "documentation database of the IDM at the university of Bielefeld",
82 "Suchen", "search",
83 "English", "Deutsch", //54
84 "?", "?",
85 "weiter", "more",
86 "allen Feldern", "all fields", //60
87 // the ops
88 "und","and",
89 "oder","or",
90 "ohne","without",
91 "zur&uuml;cksetzen","reset",
92 "Name","Surname",//70
93 "Vorname","Given name",
94 "Institut","Institution",
95 "Strasse","Street",
96 "Ort","City",
97 "Land","Country", // 80
98 "Postleitzahl","Zip code",
99 "Bestellen", "order",
100 "Abschicken", "Submit",
101 "Einträge", "rows",
102 "bis", "to", // 90
103 "von", "of",
104 "für", "for",
105 "Indexeinträge beginnend mit", "terms starting with ",
106 "neue Suche", "new Query",
107 // 100: hilfe
108 "<h4>Willkommen bei der Dokumentations-Datenbank des\n"
109 +" IDM der Universit&auml;t Bielefeld</h4>\n"
110 +" Sie können bis zu drei Suchbegriffe verknüpfen.\n"
111 +" Jeder Suchbegriff kann auf ein Feld eingeschränkt werden.<br>\n"
112 +" Die ?-Funktion zeigt Ihnen alle Suchbegriffe,\n"
113 +" die mit dem Feldinhalt beginnen, ggf. auf mehreren Seiten.\n"
114 +" Diese Werte können per Klick übernommen werden.<br><br>\n"
115 +" Mit 'Suchen' wird die Anfrage ausgelöst.\n"
116 +" Es werden jeweils "+ROWS+" Sätze angezeigt.<br><br>\n"
117 +" Kopien von Titeln können gegen Kostenerstattung bestellt werden.<br>\n"
118 +" <h4>Suchtipps</h4>\n"
119 +" Für Prefixsuche beenden Sie den Begriff mit * oder $.<br>\n"
120 +" Die Suche wird auf jeweils 1000 Treffer eingeschränkt.\n"
121 +" Bei sehr häufigen Suchbegriffen, etwa 'a$', gibt es in jedem Satz\n"
122 +" mehrere Treffer, sodass weniger als 1000 Sätze gefunden werden.<br>\n"
123 +" \n"
124 +" Eine engere Suche, etwa durch Einschränkung auf ein Feld,\n"
125 +" kann in einem solchen Fall u.U. mehr Sätze finden!<br>\n"
126 +" Verwenden Sie bei mehreren Begriffen den präzisesten zuerst.<br>\n"
127 +" \n"
128 +" <h4>Cookies</h4>\n"
129 +" Die Funktion ist stark beeinträchtigt,\n"
130 +" falls Sie das Session-Cookie ablehnen.<br>\n"
131 +" Ein Session-Cookie wird nicht auf Ihrer Festplatte gespeichert,\n"
132 +" sondern verschwindet beim Schließen des Browsers.\n"
133 +" \n"
134 ,
135 // 101: help
136 "<h4>welcome to the documentation database of the"
137 +" IDM at the university of Bielefeld</h4>"
138 +" Up to three search terms may be combined.\n"
139 +" Each term can be restricted to a specific database field.<br>\n"
140 +" Use the ? beneath a field to display all entries in the index\n"
141 +" starting with the currently entered term.\n"
142 +" Click them for use in your query.<br><br>\n"
143 +" The 'search' button starts the query.\n"
144 +" Up to "+ROWS+" records are displayed at once.<br><br>\n"
145 +" You can order copies of each article for a nominal fee.<br>\n"
146 +" <h4>search tips</h4>\n"
147 +" Use a trailing * or $ to search by prefix.<br>\n"
148 +" The query will be restricted to 1000 hits.\n"
149 +" Very frequent terms like 'a$' will have several hits within\n"
150 +" each record, giving less than 1000 records total.<br>\n"
151 +" Restricting the query, e.g. by choosing a database field,\n"
152 +" may thus find more records!<br>\n"
153 +" When combining multiple terms, use the most specific one first\n"
154 +" for best results.<br>\n"
155 +" \n"
156 +" <h4>Cookies</h4>\n"
157 +" This page will not work properly,\n"
158 +" if you do not accept the session cookie.<br>\n"
159 +" This is not stored on your hard disc,\n"
160 +" but deleted after you quit your browser.\n"
161 ,
162 "entfernen", "remove",
163 "E-Mail", "e mail",
164 "Telefon", "phone",
165 "bitte füllen Sie die markierten Felder aus",
166 "please fill in all marked fields",
167 // 110
168 "Ihre Bestellung wurde abgeschickt. Vielen Dank",
169 "Your order has been submitted. Thank you",
170 "Ihre Bestellung konnte leider nicht abgeschickt werden."
171 +" Bitte versuchen Sie es später",
172 "Your order could not be submitted. Please try again later",
173 };
174 static final String[] ORDER = {
175 "Xlastname", "firstname", "institution", "Xstreet",
176 "Xcity", "country", "Xzip", "mail", "phone",
177 };
178 static final int[] ORDERT = { 70,72,74,76, 78,80,82,104,106 };
179
180 // check button value independet of language used
181 static boolean chkbutton ( int n, String param ) {
182 return t[n].equals( param ) || t[n+1].equals( param );
183 }
184 static int chkint ( int min, int max, int def, String param ) {
185 if ( null != param ) try {
186 int j = Integer.parseInt(param);
187 if ( min <= j && j <= max )
188 return j;
189 } catch (Exception e) {
190 }
191 return def;
192 }
193
194 static final int OP_AND = 0;
195 static final int OP_OR = 1;
196 static final int OP_NOT = 2;
197 static final char[] OP = { '*', '+', '^' };
198
199 static final String ORDERMAIL = "idmdoku@openisis.org";
200 static final String[] MAILHEADERS = {
201 Mail.TO, ORDERMAIL,
202 Mail.FROM, "Online-Katalog <server@openisis.org>",
203 Mail.SUBJECT, "online Bestellung",
204 };
205
206 static final int LINES = 3;
207
208 static class Ses {
209 int l; // lang, 0 or 1
210 int off = 0;
211 int rows = ROWS;
212 int view; // last seen view
213 int idx; // field to save index into
214 int msec; //
215
216 String qry;
217 int[] set;
218 int len;
219
220 // form content:
221 String[] t = new String[LINES];
222 String[] o = new String[ORDER.length]; // order data
223 int[] f = new int[LINES]; // 0 or 1+index of selected tag
224 int[] op = new int[LINES];
225
226 Iterator i;
227 String term = EMPTY;
228 ArrayList orders;
229
230 public Ses () {
231 for ( int i=0; i<LINES; i++ )
232 t[i] = EMPTY;
233 }
234
235 public String mkqry ()
236 {
237 StringBuffer q = new StringBuffer();
238 boolean had = false;
239 for ( int i=0; i<LINES; i++ ) {
240 String v = t[i];
241 int l = v.length();
242 if ( 0 == l )
243 continue;
244 if ( had )
245 q.append(' ').append(OP[op[i]]).append(' ');
246 had = true;
247 boolean blank = 0 <= v.indexOf(' ');
248 if ( blank )
249 q.append('"');
250 if ( '*' == v.charAt(l-1) )
251 q.append( v.substring(0,l-1) ).append('$');
252 else
253 q.append( v );
254 if ( blank )
255 q.append('"');
256 if ( 0 < f[i] && f[i] <= tag.length )
257 q.append('/').append(tag[f[i]-1]);
258 }
259 return qry = q.toString();
260 } // mkqry
261 };
262
263 // tasks: what to do
264 static final int DO_HELP = 0; // default: display help
265 static final int DO_QUERY = 1; // new search
266 static final int DO_QUERYN = 2; // next results
267 static final int DO_INDEX = 3; // display index
268 static final int DO_INDEXN = 4; // next index terms
269 static final int DO_ORDER = 5; // display order form
270 static final int DO_ORDERS = 6; // submit order form
271 static final int DO_LANG = 7; // toggle language
272 static final int DO_BLANK = 8; // empty search
273
274 // views: what to display
275 static final int VW_HELP = 0; // default: display help
276 static final int VW_QUERY = 1; // query results
277 static final int VW_INDEX = 2; // index terms
278 static final int VW_ORDER = 3; // order form
279
280 %><%
281 Ses s;
282 try {
283 s = (Ses) session.getAttribute( me );
284 } catch ( Exception e ) { s = null; }
285 if ( null == s )
286 session.setAttribute( me, s = new Ses() );
287
288 int task = DO_HELP;
289 String order = null;
290
291 // figure out, what to do
292 String wants = request.getParameter( "do" );
293 if ( chkbutton( 52, wants ) )
294 task = DO_QUERY;
295 else if ( chkbutton( 54, wants ) )
296 task = DO_LANG;
297 else if ( "order".equals( wants ) )
298 task = DO_ORDER;
299 else if ( chkbutton( 86, wants ) )
300 task = DO_ORDERS;
301 else if ( "more".equals( wants ) )
302 task = DO_INDEXN;
303 else if ( "new".equals( wants ) )
304 task = DO_BLANK;
305 else if ( null != request.getParameter( "off" ) )
306 task = DO_QUERYN;
307 else // check "index" buttons i0, i1 ...
308 for ( int i=0; i<LINES; i++ )
309 if ( chkbutton( 56, request.getParameter("i"+i) ) ) {
310 task = DO_INDEX;
311 s.idx = i;
312 break;
313 }
314
315 // save common form data
316 for ( int i=0; i<LINES; i++ ) {
317 String p;
318 s.f[i] = chkint( 0, tag.length, s.f[i], request.getParameter( "f"+i ) );
319 s.op[i] = chkint( 0, OP.length-1, s.op[i], request.getParameter( "op"+i ) );
320 if ( null != (p = request.getParameter( "t"+i )) )
321 s.t[i] = p.trim();
322 if ( DO_HELP == task && chkbutton( 56, request.getParameter("i"+i) ) ) {
323 task = DO_INDEX;
324 s.idx = i;
325 }
326 }
327 s.rows = chkint( 1, 5*ROWS, s.rows, request.getParameter( "rows" ) );
328 s.off = chkint( 0, s.len-1, s.off, request.getParameter( "off" ) );
329 for ( int i=0; i<ORDER.length; i++ ) {
330 String v = request.getParameter( ORDER[i] );
331 if ( null != v )
332 s.o[i] = v;
333 }
334
335 switch ( task ) {
336 case DO_BLANK:
337 for ( int i=0; i<LINES; i++ ) {
338 s.f[i] = s.op[i] = 0;
339 s.t[i] = EMPTY;
340 }
341 s.len = 0;
342 s.i = null;
343 s.set = null;
344 case DO_HELP:
345 s.view = VW_HELP;
346 break;
347 case DO_QUERY:
348 long then = System.currentTimeMillis();
349 s.set = db.search( s.mkqry(), Db.QRY_SIMPLE );
350 long now = System.currentTimeMillis();
351 s.len = null == s.set ? 0 : s.set.length;
352 s.off = 0;
353 s.msec = (int)(now - then);
354 case DO_QUERYN:
355 s.view = VW_QUERY;
356 break;
357 case DO_INDEX:
358 String term = s.t[ s.idx ];
359 /*
360 if ( 0 == term.length() ) {
361 s.view = VW_HELP;
362 break;
363 }
364 */
365 if ( term.endsWith("*") || term.endsWith("$") )
366 term=term.substring(0,term.length()-1);
367 s.i = db.terms( s.term = term );
368 case DO_INDEXN:
369 s.view = VW_INDEX;
370 break;
371 case DO_LANG:
372 s.l = 1 - s.l; // don't change view
373 break;
374 case DO_ORDER:
375 String id = request.getParameter("id");
376 if ( null != id ) {
377 if ( null == s.orders )
378 s.orders = new ArrayList();
379 boolean isnew = true;
380 for ( int i=0; i<s.orders.size(); i++ ) {
381 String[] o = (String[])s.orders.get(i);
382 if ( id.equals( o[0] ) ) {
383 isnew = false;
384 break;
385 }
386 }
387 if ( isnew )
388 s.orders.add( new String[] {
389 id, NV(request.getParameter("ti")) } );
390 }
391 if ( null != s.orders ) {
392 int sz = s.orders.size()-1;
393 int rm = chkint( 0, sz, -1, request.getParameter("rm") );
394 if ( 0 <= rm ) {
395 s.orders.remove( rm );
396 if ( 0 == sz )
397 s.orders = null;
398 }
399 }
400 if ( null == s.orders )
401 task = DO_HELP;
402 break;
403 case DO_ORDERS:
404 if ( null == s.orders ) {
405 task = DO_HELP;
406 break;
407 }
408 StringBuffer o = new StringBuffer();
409 int i = 0;
410 for ( ; i<ORDER.length; i++ ) {
411 String v = s.o[i];
412 if ( null == v )
413 v = EMPTY;
414 if ( 0 == v.length() && 'X' == ORDER[i].charAt(0) ) {
415 order = t[108+s.l]; // required field missing
416 task = DO_ORDER;
417 break;
418 }
419 o.append( t[ORDERT[i]] ).append( ": " ).append( v ).append( '\n' );
420 }
421 if ( ORDER.length == i ) { // survived
422 o.append( "\nbestellt:\n\n" );
423 for ( i=0; i<s.orders.size(); i++ ) {
424 String[] p = (String[])s.orders.get(i);
425 o.append( p[0] ).append( ": " ).append( p[1] ).append( '\n' );
426 }
427 try {
428 (new Mail.Smtp( ORDERMAIL )).put(
429 Mail.message( MAILHEADERS, o.toString() )
430 );
431 order = o.append("\n\n").append(t[110+s.l]).toString();
432 s.orders = null;
433 } catch (Exception e) {
434 order = o.append("\n\n")
435 .append( "<h2>" )
436 .append(t[112+s.l])
437 .append( "</h2>\n<!--" )
438 .append( e.getMessage() )
439 .append( "-->\n" )
440 .toString();
441 task = DO_ORDER;
442 }
443 }
444 s.view = VW_ORDER;
445 }
446 int maxrow = s.off + s.rows;
447 if ( maxrow >= s.len )
448 maxrow = s.len;
449
450 %><html>
451 <head>
452 <title><%=t[50+s.l]%></title>
453 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
454 <meta name="description" content="">
455 <meta http-equiv="Cache-Control" content="no-cache">
456 <meta http-equiv="Pragmas" content="no-cache">
457 <meta http-equiv="Robots" content="index,nofollow">
458 <link href="http://purl.org/dc" rel="schema.DC">
459 <meta name="DC.Title" content="IDM - documentation database">
460 <meta name="DC.Subject" content="">
461 <meta name="DC.Description" content="">
462 <meta name="DC.Creator" content="idm openisis">
463 <meta name="DC.Publisher" content="University of Bielefeld">
464 <meta name="DC.Date" content="2002-11-30" scheme="W3CDTF">
465 <meta name="DC.Type" content="Text" scheme="DCMIType">
466 <meta name="DC.Format" content="text/html">
467 <meta name="DC.Identifier" content="http://openisis.org/openisis/idm">
468 <link href="http://www.uni-bielefeld.de/icons/uni-logo-icon-16.png" type="image/png" rel="icon">
469 <link href="http://www.uni-bielefeld.de/css/unistandard.css" type="text/css" rel="stylesheet">
470 <!--
471 <style TYPE="text/css">
472 td {
473 font-family: Verdana, Arial, Helvetica, Geneva, sans-serif;
474 font-size: 12px
475 }
476 </style>
477 -->
478 </head>
479 <body bgcolor="#ffffff">
480 <!-- heading table: useless but nice ;) -->
481 <table width="100%" cols="1" cellpadding="0" border="0" cellspacing="0">
482 <tr>
483 <td align="center">
484 <a href="http://www.uni-bielefeld.de/idm/service/dokument.html">
485 <img src="/img/idm/service.gif" width="472" height="34"
486 alt="service" border="0">
487 </a>
488 <a href="http://www.uni-bielefeld.de/">
489 <img src="/img/idm/siegel.gif" width="27" height="27"
490 vspace="10" hspace="0"
491 alt="Universität Bielefeld" border="0">
492 </a>
493 </td>
494 </tr>
495 <tr>
496 <td align="center">
497 <img src="/img/idm/1pixgrau.gif" width="575"
498 vspace="0" hspace="0" height="3"
499 alt="=================================================">
500 <br></td>
501 </tr>
502 <tr>
503 <td width="470" height="25" bgcolor="#9DCCE6">
504 <a href="http://www.uni-bielefeld.de/idm/service/dokument.html">
505 <b>&nbsp;<%=t[50+s.l]%></b>
506 </a>
507 </td>
508 </tr>
509 </table>
510
511 <!-- form table: either query or order form -->
512 <form action="<%=me%>" method="GET">
513 <%
514 if ( DO_ORDER == task ) {
515 %>
516 <table width="575" cellpadding="0" border="0" cellspacing="0">
517 <%
518 for ( int i=0; i<ORDER.length; i++ ) {
519 String lbl = t[ORDERT[i]+s.l], nm = ORDER[i];
520 String req = 'X' == nm.charAt(0) ? "*" : "";
521 String v = null == s.o[i] ? "" : Field.html(s.o[i]);
522 %>
523 <tr><td><%=lbl%></td>
524 <td><input name="<%=nm%>" value="<%=v%>" size="40"><%=req%></td><tr>
525 <%
526 }
527 for(int i=0;i<s.orders.size();i++) {
528 String[] o = (String[])s.orders.get(i);
529 %>
530 <tr>
531 <td><%=Field.html(o[0])%></td>
532 <td><%=Field.html(o[1])%>
533 &nbsp;(<a class="intern" href="<%=me%>?do=order&rm=<%=i%>"><%=t[102+s.l]%></a>)
534 </td>
535 </tr>
536 <%
537 }
538 %>
539 <tr>
540 <td colspan="2" align="center">
541 <img src="/img/idm/1pixgrau.gif" width="575"
542 vspace="0" hspace="0" height="1"
543 alt="-------------------------------------------------">
544 <br></td>
545 </tr>
546 </table>
547 <input type="submit" name="do" value="<%=t[86+s.l]%>">
548 <%
549 } else {
550 %>
551 <table width="100%" cols="3" cellpadding="0" border="0" cellspacing="0">
552 <%
553 for ( int l=0; l<LINES; l++ ) {
554 %>
555 <tr valign="top" height="33">
556 <td>
557 <%
558 if ( 0 < l ) for ( int o=0; o<OP.length; o++ ) {
559 String checked = o == s.op[l] ? " checked" : "";
560 %>
561 <input type="radio" name="op<%=l%>"<%=checked%> value="<%=o%>"/>
562 <%=t[62+2*o+s.l] %>
563 <%
564 } // for ops
565 %>
566 </td>
567 <td>
568 <input type="text" name="t<%=l%>" size="24"
569 value="<%=Field.html(s.t[l])%>"/>
570 <input type="submit" name="i<%=l%>"
571 value="<%=t[56+s.l]%>"/>
572 </td>
573 <td align="left">
574 in <select name="f<%=l%>" size=1>
575 <option value="0"<%=(0==s.f[l])?" selected":""%>
576 ><%=t[60+s.l]%></option>
577 <%
578 for(int i=0; i<tag.length;i++) {
579 %>
580 <option value="<%=i+1%>"<%=(i+1==s.f[l])?" selected":""%>
581 ><%=t[2*i+s.l]%></option>
582 <%
583 } // for fields
584 %>
585 </select>
586 </td>
587 </tr>
588 <%
589 } // for lines
590 %>
591
592 <tr>
593 <td colspan="3" align="center" valign="center" height="7">
594 <img src="/img/idm/1pixgrau.gif" width="575"
595 vspace="3" hspace="0" height="1"
596 alt="-------------------------------------------------">
597 <br></td>
598 </tr>
599
600 </table>
601 <!-- <%= dberr %> -->
602 <input type="submit" name="do" value="<%=t[52+s.l]%>"/>
603 <input type="reset" name="reset" value="<%=t[68+s.l] %>"/>
604 <%--
605 <input type="text" name="rows" size="2" value="<%=s.rows%>"/> rows at once
606 --%>
607 <input type="submit" name="do" value="<%=t[54+s.l]%>"/>
608 <%
609 } // query form
610
611 if ( VW_QUERY == s.view && 0 < s.len ) {
612 if ( 0 < s.off ) {
613 int boff = s.off-s.rows;
614 if ( boff < 0 ) boff = 0;
615 %>
616 &nbsp;&nbsp;<a class="intern" href="<%=me%>?off=<%=boff%>">
617 <b>&lt;&lt;</b><%=t[88+s.l]%> <%=boff+1%>
618 <%=t[90+s.l]%> <%=boff+s.rows%></a>
619 <%
620 }
621 if ( maxrow < s.len ) {
622 int nmax = maxrow+s.rows;
623 if ( nmax > s.len )
624 nmax = s.len;
625 %>
626 &nbsp;&nbsp;<a class="intern" href="<%=me%>?off=<%=maxrow%>">
627 <%=t[88+s.l]%> <%=maxrow+1%>
628 <%=t[90+s.l]%> <%=nmax%><b>&gt;&gt;</b></a>
629 <%
630 }
631 }
632
633 %>
634 &nbsp;&nbsp;<a class="intern" href="<%=me%>?do=new"><%=t[98+s.l]%></a>
635 </form>
636 <hr>
637 <!-- switch view: help, query, index or order -->
638 <%
639 switch ( s.view ) {
640 default:
641 case VW_HELP:
642 %>
643 <%=t[100+s.l]%>
644 <%
645 break;
646 case VW_QUERY:
647 if ( 0 == s.len ) {
648 %>
649 0 <%=t[88+s.l]%> <%=t[94+s.l]%> '<%=s.qry%>'
650 <%
651 } else {
652 %>
653 <h4> <%=t[88+s.l]%> <%=s.off+1%>
654 <%=t[90+s.l]%> <%=maxrow%>
655 <%=t[92+s.l]%> <%=s.len%>
656 <%=t[94+s.l]%> '<%=s.qry%>' </h4>
657
658 <%-- start output --%>
659 <table cols="2" width="100%">
660 <%
661 for ( int i=s.off; i<maxrow; i++ ) {
662 Rec r = db.readRow( s.set[i] );
663 if ( null == r ) continue;
664 %>
665 <tr><td colspan="2"><hr></td></tr>
666 <%
667 for ( int j=0; j<tag.length; j++ ) {
668 out.println( r.v(
669 "<tr><td valign=\"top\" width=\"150\">"+t[2*j+s.l]
670 +"</td><td valign=\"top\">",
671 null, // cond,repeated prefix
672 tag[j], Db.MDL|Db.PS|Db.HTI, 0, 0, // tag and mode, len, off
673 ";<br>","</td></tr>")
674 );
675 }
676 String ti = r.v("",301,Db.MDL, 0, 0,"");
677 if ( null == ti || 0 == ti.length() )
678 ti = r.v("",302,Db.MDL, 0, 0,"");
679 String link = me+"?do=order"
680 + "&id=" + URLEncoder.encode( r.v("",18,Db.MDL, 0, 0,"") )
681 + "&ti=" + URLEncoder.encode( ti );
682 %>
683 <tr><td colspan="2" align="right">
684 <a class="intern" href="<%=link%>"><b>&gt;&gt;</b> <%=t[84+s.l]%></a>
685 </td></tr>
686 <%
687 }
688 %>
689 </table>
690 <%
691 }
692 break; // case VW_QUERY
693 case VW_INDEX:
694 %>
695 <h4><%=t[96+s.l]%> '<%=Field.html(s.term)%>'</h4>
696 <%
697 if ( null == s.i || ! s.i.hasNext() ) {
698 } else {
699 int i = TERMS;
700 while ( 0 < i-- && s.i.hasNext() ) {
701 String ix = (String)s.i.next();
702 if ( 0 == ix.length() ) continue;
703 String u = URLEncoder.encode( ix );
704 %>
705 <a class="intern" href="<%=me%>?t<%=s.idx%>=<%=u%>"><%=Field.html(ix)%></a><br>
706 <%
707 }
708 if ( 0 > i ) { // more
709 %>
710 <p align = "right">
711 <a class="intern" href="<%=me%>?do=more"><b>&gt;&gt;</b> <%=t[58+s.l]%></a><br>
712 </p>
713 <%
714 } else
715 s.i = null;
716 }
717 break; // case VW_INDEX
718 case VW_ORDER:
719 %>
720 <pre>
721 <%= order %>
722 </pre>
723 <%
724 } // switch
725 %>
726 <!-- <%= ID %> -->
727 </body></html>

  ViewVC Help
Powered by ViewVC 1.1.26