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örperschaft als Hrsg.", "corporate body as editor", // 200 |
56 |
"weitere Kö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ä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ä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ü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ä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> <%=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 |
(<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 |
<a class="intern" href="<%=me%>?off=<%=boff%>"> |
617 |
<b><<</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 |
<a class="intern" href="<%=me%>?off=<%=maxrow%>"> |
627 |
<%=t[88+s.l]%> <%=maxrow+1%> |
628 |
<%=t[90+s.l]%> <%=nmax%><b>>></b></a> |
629 |
<% |
630 |
} |
631 |
} |
632 |
|
633 |
%> |
634 |
<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>>></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>>></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> |