Work on queries.
[egate.git] / www / search.egw
1 <html>
2 {
3 # $Id: search.egw,v 1.4 1995/10/31 10:03:53 adam Exp $
4
5 proc ok-response {} {
6     global sessionWait
7     set sessionWait 1
8 }
9
10 proc fail-response {} {
11     global sessionWait
12     set sessionWait -1
13 }
14
15 proc display-rec {from to} {
16     while {$from < $to} { 
17         htmlr {<b>} $from {</b><br>}
18         if {![catch {
19             set title [lindex [z39.1 getMarc $from field 245 * a] 0]
20             set year [lindex [z39.1 getMarc $from field 260 * c] 0]
21         } ] } {
22             htmlr $title { <i> } $year {</i><br>}
23         }
24         incr from
25     }
26 }
27
28 proc build-query {} {
29     global targets
30     global t
31
32     set op {}
33     set q {}
34     for {set i 1} {$i < 4} {incr i} {
35         set term [form entry$i]
36         if {$term != ""} {
37             set field [form menu$i]
38             foreach x [lindex $targets($t) 2] {
39                 if {[lindex $x 0] == $field} {
40                     set attr [lindex $x 1]
41                 }
42             }
43             switch $op {
44             And
45                 { set q "@and $q ${attr} ${term}" }
46             Or
47                 { set q "@or $q ${attr} ${term}" }
48             {And not}
49                 { set q "@not $q ${attr} ${term}" }
50             {}
51                 { set q "${attr} ${term}" }
52             }
53             set op [form logic$i]
54         }
55     }
56     return $q
57 }
58
59     global sessionWait
60     z39 callback ok-response
61     z39 failback fail-response
62     set sessionWait 0
63     ir-set z39.1 z39
64     z39.1 databaseNames [form base]
65     htmlr {<head><title> WWW/Z39.50 Gateway Search } $t { </title>}
66     htmlr {</head><body>}
67     set query [build-query]
68     htmlr {query: } $query {<br>}
69     z39.1 search $query
70     htmlr {sessionId: } $sessionId {<br>}
71     htmlr {sessionParms: } $sessionParms {<br>}
72     htmlr {form: } [form] { <br>}
73     htmlr {databases: } $databases { <br>}
74     zwait sessionWait
75     if {$sessionWait == 1} {
76         set r [z39.1 resultCount]
77         htmlr {<strong> } $r { hits</strong><br>}
78     } else {
79         set status [z39.1 searchStatus]
80         set msg [lindex $status 2]
81         set addinfo [lindex $status 3]
82         html {<strong>Search fail: } $msg
83         if {$msg != ""} {
84             html {, } $addinfo
85         }
86         htmlr {</strong><br></body></html>}
87         wabort
88     }
89     set setOffset [z39.1 numberOfRecordsReturned]
90     display-rec 0 $setOffset
91     set setMax [z39.1 resultCount]
92     if {$setMax > 30} {
93         set setMax 30
94     }
95     set toGet [expr $setMax - $setOffset]
96     while {$toGet > 0} {
97         z39.1 present $setOffset $toGet
98         set got [z39.1 numberOfRecordsReturned]
99         display-rec $setOffset [expr $got + $setOffset]
100         set $setOffset [expr $got + $setOffset]
101         set toGet [expr $setMax - $setOffset]
102         set sessionWait 0
103         zwait sessionWait
104         if {$sessionWait != "1"} {
105             break
106         }
107     }
108 }
109 </body>
110 </html>
111