Work on WAIS protocol.
[egate.git] / www / search.egw
1 <html>
2 {
3 # $Id: search.egw,v 1.37 1996/03/12 16:30:28 adam Exp $
4
5 proc start-scan {scanNo targetNo cache dir initSet} {
6     global sessionId
7     global sessionParms
8     global sessionWait
9     global setNo
10     global hist
11     global targets
12     global nextSetNo
13     global env
14     global useIcons
15     global debug
16
17     set host $hist($setNo,$targetNo,host)
18
19     html "<head><title> WWW/Z39.50 Gateway Scan " [splitHostSpec $host]
20     html " </title>\n"
21     html "</head><body>\n"
22
23     set useIcons 1
24     button-main
25
26     if {$dir == "b"} {
27         set lines 20
28         set pos 20
29     } elseif {$dir == "f"} {
30         set lines 20
31         set pos 1
32     } else {
33         set lines 20
34         set pos 10
35     }
36     if {$hist($setNo,$scanNo,scanTerm) != ""} {
37         if {[z39scan $setNo $scanNo 0 $lines $pos $cache] != "1"} {
38             button-new-query 0 $setNo
39             egw_log debug "z39_scan failed"
40             return
41         }
42         html {<a href="http:} $env(SCRIPT_NAME)
43         html / $sessionId {/search.egw/} $setNo + $targetNo + 
44         html [expr $scanNo - 1] + b {">}
45         if {$useIcons} {
46             html {<img src="/egwgif/button-previous-terms.gif" }
47             html {alt="Next Terms" border=0></a>}
48         } else {
49             html {Previous Terms</a> | }
50         }
51
52         html {<a href="http:} $env(SCRIPT_NAME)
53         html / $sessionId {/search.egw/} $setNo + $targetNo +
54         html [expr $scanNo + 1] + f {">}
55         if {$useIcons} {
56             html {<img src="/egwgif/button-next-terms.gif" }
57             html {alt="Next Terms" border=0></a>}
58         } else {
59             html {Next Terms</a> | }
60         }
61         html {</a>}
62     }
63     button-new-query 0 $setNo
64
65     set databases [splitDatabaseSpec $host]
66
67     if {$initSet == ""} {
68         set databaseDefault [lindex $databases 0]
69         set oSetNo 0
70     } else {
71         set oSetNo $initSet
72         set databaseDefault $hist($oSetNo,$targetNo,database)
73     }
74     
75     html {<form action="http:} $env(SCRIPT_NAME)
76     html / $sessionId {/search.egw/} $setNo + $targetNo {+1" method=get>} \n
77     set nodb [llength $databases]
78     if {$nodb > 1} {
79         if {$nodb > 2} {
80             html "Databases:<br>\n"
81         }
82         set i 0
83         foreach d $databases {
84             html {<input type="checkbox" name="base" value="} $d 
85             if {[lsearch $databaseDefault $d] == -1} {
86                 html {"> } $d \n
87             } else {
88                 html {" checked> } $d \n
89             }
90         }
91         html "<br>\n"
92         if {$nodb > 2} {
93             html {<input type="checkbox" name="baseall" value="} 
94             html [concat $databases] {"> All <br>} \n
95         }
96     }
97     html "Input your scan criteria:<br>\n"
98     set fields [lindex $targets($host) 2]
99     set no 1
100     html {<select name="menu} $no {">} \n
101     set template {}
102     if {$oSetNo > 0} {
103         set template [join $hist($oSetNo,form,menu$no)]
104         egw_log debug "template=$template"
105     }
106     if {[string length $template] > 0} {
107         html {<option> } $template \n
108     }
109     foreach f $fields {
110         set name [lindex $f 0]
111         if {$template == $name} continue
112         html {<option> } $name \n
113     }
114     html "</select>\n"
115     html {<input type="text" name="entry} $no {"}
116     html { size=35> }
117     html {<input type=submit name=submit value="Scan">}
118     html "\n"
119     html {</form><br>}
120
121     set useIcons 0
122     if {$hist($setNo,$scanNo,scanTerm) == ""} {
123         button-main
124         button-new-query 0 $setNo        
125         return
126     }
127
128     html "<p>\n"
129     display-scan $setNo $scanNo 0
130     html "<p>\n"
131
132     button-main
133
134     html {<a href="http:} $env(SCRIPT_NAME)
135     html / $sessionId {/search.egw/} $setNo + $targetNo +
136     html [expr $scanNo - 1] + b {">}
137     if {$useIcons} {
138         html {<img src="/egwgif/button-previous-terms.gif" }
139         html {alt="Next Terms" border=0></a>}
140     } else {
141         html {Previous Terms</a> | }
142     }
143
144     html {<a href="http:} $env(SCRIPT_NAME)
145     html / $sessionId {/search.egw/} $setNo + $targetNo +
146     html [expr $scanNo + 1] + f {">}
147     if {$useIcons} {
148         html {<img src="/egwgif/button-next-terms.gif" }
149         html {alt="Next Terms" border=0></a>}
150     } else {
151         html {Next Terms</a> | }
152     }
153     html {</a>}
154     button-new-query 0 $setNo
155
156     if {!$debug} return
157     html "<hr>\n"
158     html "<h3>Debug information</h3>\n"
159     html "sessionId: $sessionId <br>\n"
160     html "sessionParms: $sessionParms <br>\n"
161     foreach e {SERVER_NAME PATH_INFO SCRIPT_NAME} {
162         html $e {: } $env($e) {<br>} \n
163     }
164     html "form: " [egw_form] " <br>\n"
165     html "target: " $host " <br>\n"
166     html "databases: " $hist($setNo,$targetNo,database) " <br>\n"
167     html "selected: " [egw_form base] " <br>\n"
168     html "setNo: " $setNo " <br>\n"
169     html "nextSetNo: " $nextSetNo " <br>\n"    
170 }
171
172     if {[info commands saveState] == ""} {
173         source z39util.tcl
174     }
175     global sessionWait
176     global nextSetNo
177     global setNo
178     global hist
179
180     set setNo [lindex $sessionParms 0]
181     set targetNo [lindex $sessionParms 1]
182     set startPos [lindex $sessionParms 2]
183     set endPos [lindex $sessionParms 3]
184
185     if {[egw_form] != ""} {
186         set hist($nextSetNo,$targetNo,idAuthentication) \
187             $hist($setNo,$targetNo,idAuthentication)
188         set hist($nextSetNo,$targetNo,host) \
189             $hist($setNo,$targetNo,host)
190
191         if {$nextSetNo == $setNo} {
192             set setNo $nextSetNo
193             incr nextSetNo
194         } else {
195             catch {unset hist($setNo,hits)}
196         }
197         set hist($setNo,scan) 0
198
199         set hist($setNo,form,menu1) [egw_form menu1]
200         set hist($setNo,form,menu2) [egw_form menu2]
201         set hist($setNo,form,menu3) [egw_form menu3]
202
203         set hist($setNo,form,entry1) [egw_form entry1]
204         set hist($setNo,form,entry2) [egw_form entry2]
205         set hist($setNo,form,entry3) [egw_form entry3]
206
207         set hist($setNo,form,logic1) [egw_form logic1]
208         set hist($setNo,form,logic2) [egw_form logic2]
209         set hist($setNo,form,logic3) {}
210         
211         set host $hist($setNo,0,host)
212
213         set databases [splitDatabaseSpec $host]
214
215         set b [egw_form base]
216         if {[egw_form baseall] != ""} {
217             set hist($setNo,0,database) $databases
218         } elseif {$b == ""} {
219             set hist($setNo,0,database) $databases
220         } else {
221             set hist($setNo,0,database) $b
222         }
223         set hist($setNo,maxPresent) [egw_form hits]
224         if {$hist($setNo,maxPresent) == ""} {
225             set hist($setNo,maxPresent) 30
226         }
227         set hist($setNo,format) brief
228         set hist($setNo,sort) server
229
230         set i [lindex $sessionParms 2]
231         if {$i == ""} {
232             for {set j 1} {$j <= 3} {incr j} {
233                 if {[egw_form scan$j] != ""} {
234                     set i $j
235                     break
236                 }
237             }
238         }
239         if {$i != ""} {
240             set scanNo 1000
241             set hist($setNo,scan) $i
242             set termPlusAttr [build-scan $hist($setNo,0,host) $i]
243             set hist($setNo,$scanNo,scanTerm) [lindex $termPlusAttr 0]
244             set hist($setNo,scanAttr) [lindex $termPlusAttr 1]
245             start-scan $scanNo $targetNo 0 {} $setNo
246             html "</body></html>\n"
247             egw_abort
248             return
249         }
250         set query [build-query $hist($setNo,0,host) 3]
251         if {"x$query" == "x"} {
252             html "<head><title> WWW/Z39.50 Gateway Search</title>\n<body>\n"
253             displayError "Empty query" \
254                 "You must specify at least one search word"
255             html "</body></html>\n"
256             egw_abort
257         }
258         set hist($setNo,0,query) $query
259     } elseif {[lindex $sessionParms 2] == "hyper"} {
260         egw_log debug "hyper search"
261         set hist($nextSetNo,$targetNo,idAuthentication) \
262             $hist($setNo,$targetNo,idAuthentication)
263         set hist($nextSetNo,$targetNo,host) \
264             $hist($setNo,$targetNo,host)
265         set hist($nextSetNo,$targetNo,database) \
266             $hist($setNo,$targetNo,database)
267
268         if {$nextSetNo == $setNo} {
269             set setNo $nextSetNo
270             incr nextSetNo
271         } else {
272             catch {unset hist($setNo,hits)}
273         }
274         set hist($setNo,scan) 0
275         set hist($setNo,$targetNo,query) \
276             "$hist($setNo,scanAttr) \"[lindex $sessionParms 3]\""
277         egw_log debug "hyper databases: $hist($setNo,$targetNo,database)"
278         set hist($setNo,form,entry1) [lindex $sessionParms 3]
279         set startPos ""
280     } elseif {[lindex $sessionParms 2] == "scan"} {
281         egw_log debug "star scan"
282         set scanNo 1000
283         set hist($setNo,$scanNo,scanTerm) {}
284         start-scan $scanNo $targetNo 0 {} {}
285         html "</body></html>\n"
286         egw_abort
287     } else {
288         if {![info exists hist($setNo,scan)]} return
289         if {$hist($setNo,scan) > 0} {
290             set scanNo [lindex $sessionParms 2]
291             set dir [lindex $sessionParms 3]
292             if {$scanNo == ""} {
293                 set scanNo 1000
294             }
295             start-scan $scanNo $targetNo 1 $dir $setNo
296             html "</body></html>\n"
297             egw_abort
298         }
299     }
300     set host $hist($setNo,$targetNo,host)
301
302     html "<head><title> WWW/Z39.50 Gateway Search " [splitHostSpec $host] 
303     html " </title>\n"
304     html "</head><body>\n"
305
306     display-result-set-s $setNo $targetNo $startPos $endPos
307 }
308 {
309     global debug
310     if {!$debug} return
311     html "<hr>\n"
312     html "<h3>Debug information</h3>\n"
313     html "sessionId: $sessionId <br>\n"
314     html "sessionParms: $sessionParms <br>\n"
315     foreach n [array names env] {
316         html "env($n) = " $env($n) " <br>\n"
317     }
318     html "form: " [egw_form] " <br>\n"
319     html "target: " $host " <br>\n"
320     html "databases: " $hist($setNo,$targetNo,database) " <br>\n"
321     html "selected: " [egw_form base] " <br>\n"
322     html "query: --" $hist($setNo,$targetNo,query) "-- <br>"
323     html "setNo: " $setNo " <br>\n"
324     html "nextSetNo: " $nextSetNo " <br>\n"
325 }
326 </body>
327 </html>