Major revision. Single-target result set can be reached from the
[egate.git] / www / search.egw
1 <html>
2 {
3 # $Id: search.egw,v 1.38 1996/03/13 14:07:31 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 $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 $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 $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 $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 "databases: " $hist($setNo,$targetNo,database) " <br>\n"
166     html "selected: " [egw_form base] " <br>\n"
167     html "setNo: " $setNo " <br>\n"
168     html "nextSetNo: " $nextSetNo " <br>\n"    
169 }
170
171     if {[info commands saveState] == ""} {
172         source z39util.tcl
173     }
174     global sessionWait
175     global nextSetNo
176     global setNo
177     global hist
178
179     set setNo [lindex $sessionParms 0]
180     set targetNo [lindex $sessionParms 1]
181     set startPos [lindex $sessionParms 2]
182     set endPos [lindex $sessionParms 3]
183
184     if {[egw_form] != ""} {
185         set hist($nextSetNo,$targetNo,idAuthentication) \
186             $hist($setNo,$targetNo,idAuthentication)
187         set hist($nextSetNo,$targetNo,host) \
188             $hist($setNo,$targetNo,host)
189
190         if {$nextSetNo == $setNo} {
191             set setNo $nextSetNo
192             incr nextSetNo
193         } else {
194             catch {unset hist($setNo,$targetNo,hits)}
195         }
196         set hist($setNo,scan) 0
197
198         set hist($setNo,form,menu1) [egw_form menu1]
199         set hist($setNo,form,menu2) [egw_form menu2]
200         set hist($setNo,form,menu3) [egw_form menu3]
201
202         set hist($setNo,form,entry1) [egw_form entry1]
203         set hist($setNo,form,entry2) [egw_form entry2]
204         set hist($setNo,form,entry3) [egw_form entry3]
205
206         set hist($setNo,form,logic1) [egw_form logic1]
207         set hist($setNo,form,logic2) [egw_form logic2]
208         set hist($setNo,form,logic3) {}
209         
210         set host $hist($setNo,0,host)
211
212         set databases [splitDatabaseSpec $host]
213
214         set b [egw_form base]
215         if {[egw_form baseall] != ""} {
216             set hist($setNo,$targetNo,database) $databases
217         } elseif {$b == ""} {
218             set hist($setNo,$targetNo,database) $databases
219         } else {
220             set hist($setNo,$targetNo,database) $b
221         }
222         set hist($setNo,maxPresent) [egw_form hits]
223         if {$hist($setNo,maxPresent) == ""} {
224             set hist($setNo,maxPresent) 30
225         }
226         set hist($setNo,format) brief
227         set hist($setNo,sort) server
228
229         set i [lindex $sessionParms 2]
230         if {[string length $i] == 0} {
231             for {set j 1} {$j <= 3} {incr j} {
232                 if {[egw_form scan$j] != ""} {
233                     set i $j
234                     break
235                 }
236             }
237         }
238         if {[string length $i] != 0} {
239             set scanNo 1000
240             set hist($setNo,scan) $i
241             set termPlusAttr [build-scan $hist($setNo,0,host) $i]
242             set hist($setNo,$scanNo,scanTerm) [lindex $termPlusAttr 0]
243             set hist($setNo,scanAttr) [lindex $termPlusAttr 1]
244             start-scan $scanNo $targetNo 0 {} $setNo
245             html "</body></html>\n"
246             egw_abort
247             return
248         }
249         set query [build-query $hist($setNo,0,host) 3]
250         if {[string length $query] == 0} {
251             html "<head><title> WWW/Z39.50 Gateway Search</title>\n<body>\n"
252             displayError "Empty query" \
253                 "You must specify at least one search word"
254             html "</body></html>\n"
255             egw_abort
256         }
257         set hist($setNo,0,query) $query
258     } elseif {[lindex $sessionParms 2] == "hyper"} {
259         egw_log debug "hyper search"
260         set hist($nextSetNo,$targetNo,idAuthentication) \
261             $hist($setNo,$targetNo,idAuthentication)
262         set hist($nextSetNo,$targetNo,host) \
263             $hist($setNo,$targetNo,host)
264         set hist($nextSetNo,$targetNo,database) \
265             $hist($setNo,$targetNo,database)
266
267         if {$nextSetNo == $setNo} {
268             set setNo $nextSetNo
269             incr nextSetNo
270         } else {
271             catch {unset hist($setNo,$targetNo,hits)}
272         }
273         set hist($setNo,scan) 0
274         set hist($setNo,$targetNo,query) \
275             "$hist($setNo,scanAttr) \"[lindex $sessionParms 3]\""
276         egw_log debug "hyper databases: $hist($setNo,$targetNo,database)"
277         set hist($setNo,form,entry1) [lindex $sessionParms 3]
278         set startPos ""
279     } elseif {[lindex $sessionParms 2] == "scan"} {
280         egw_log debug "star scan"
281         set scanNo 1000
282         set hist($setNo,$scanNo,scanTerm) {}
283         start-scan $scanNo $targetNo 0 {} {}
284         html "</body></html>\n"
285         egw_abort
286     } else {
287         if {![info exists hist($setNo,scan)]} return
288         if {$hist($setNo,scan) > 0} {
289             set scanNo [lindex $sessionParms 2]
290             set dir [lindex $sessionParms 3]
291             if {$scanNo == ""} {
292                 set scanNo 1000
293             }
294             start-scan $scanNo $targetNo 1 $dir $setNo
295             html "</body></html>\n"
296             egw_abort
297         }
298     }
299     set host $hist($setNo,$targetNo,host)
300
301     html "<head><title> WWW/Z39.50 Gateway Search " [splitHostSpec $host] 
302     html " </title>\n"
303     html "</head><body>\n"
304
305     display-result-set-s $setNo $targetNo $startPos $endPos
306 }
307 {
308     global debug
309     if {!$debug} return
310     html "<hr>\n"
311     html "<h3>Debug information</h3>\n"
312     html "sessionId: $sessionId <br>\n"
313     html "sessionParms: $sessionParms <br>\n"
314     foreach n [array names env] {
315         html "env($n) = " $env($n) " <br>\n"
316     }
317     html "form: " [egw_form] " <br>\n"
318     html "databases: " $hist($setNo,$targetNo,database) " <br>\n"
319     html "selected: " [egw_form base] " <br>\n"
320     html "query: --" $hist($setNo,$targetNo,query) "-- <br>"
321     html "setNo: " $setNo " <br>\n"
322     html "nextSetNo: " $nextSetNo " <br>\n"
323 }
324 </body>
325 </html>