Attempt to inform user if session has really terminated.
[egate.git] / www / search.egw
index 670facd..88969cd 100644 (file)
@@ -1,8 +1,8 @@
 <html>
 {
-# $Id: search.egw,v 1.28 1996/01/12 13:08:30 adam Exp $
+# $Id: search.egw,v 1.39 1996/03/14 11:50:48 adam Exp $
 
-proc start-scan {scanNo cache dir initSet} {
+proc start-scan {scanNo targetNo cache dir initSet} {
     global sessionId
     global sessionParms
     global sessionWait
@@ -14,23 +14,66 @@ proc start-scan {scanNo cache dir initSet} {
     global useIcons
     global debug
 
-    set host $hist($setNo,host)
+    set host $hist($setNo,$targetNo,host)
 
-    html "<head><title> WWW/Z39.50 Gateway Scan " $host " </title>\n"
+    html "<head><title> WWW/Z39.50 Gateway Scan " [splitHostSpec $host]
+    html " </title>\n"
     html "</head><body>\n"
 
-    set databases [lindex $targets($host) 1]
+    set useIcons 1
+    button-main
+
+    if {$dir == "b"} {
+        set lines 20
+        set pos 20
+    } elseif {$dir == "f"} {
+        set lines 20
+        set pos 1
+    } else {
+        set lines 20
+        set pos 10
+    }
+    if {$hist($setNo,$scanNo,scanTerm) != ""} {
+        if {[z39scan $setNo $scanNo 0 $lines $pos $cache] != "1"} {
+            button-new-query $setNo
+            egw_log debug "z39_scan failed"
+            return
+        }
+        html {<a href="http:} $env(SCRIPT_NAME)
+        html / $sessionId {/search.egw/} $setNo + $targetNo + 
+        html [expr $scanNo - 1] + b {">}
+        if {$useIcons} {
+            html {<img src="/egwgif/button-previous-terms.gif" }
+            html {alt="Next Terms" border=0></a>}
+        } else {
+            html {Previous Terms</a> | }
+        }
+
+        html {<a href="http:} $env(SCRIPT_NAME)
+        html / $sessionId {/search.egw/} $setNo + $targetNo +
+        html [expr $scanNo + 1] + f {">}
+        if {$useIcons} {
+            html {<img src="/egwgif/button-next-terms.gif" }
+            html {alt="Next Terms" border=0></a>}
+        } else {
+            html {Next Terms</a> | }
+        }
+        html {</a>}
+    }
+    button-new-query $setNo
+
+    set databases [splitDatabaseSpec $host]
 
     if {$initSet == ""} {
         set databaseDefault [lindex $databases 0]
         set oSetNo 0
     } else {
         set oSetNo $initSet
-        set databaseDefault $hist($oSetNo,database)
+        set databaseDefault $hist($oSetNo,$targetNo,database)
     }
     
     html {<form action="http:} $env(SCRIPT_NAME)
-    html / $sessionId {/search.egw/} $setNo {+1" method=get>} \n
+    html / $sessionId {/search.egw/} $setNo + $targetNo {+1" method=get>} \n
     set nodb [llength $databases]
     if {$nodb > 1} {
         if {$nodb > 2} {
@@ -50,14 +93,15 @@ proc start-scan {scanNo cache dir initSet} {
             html {<input type="checkbox" name="baseall" value="} 
             html [concat $databases] {"> All <br>} \n
         }
-        html "Input your search criteria:<br>\n"
     }
+    html "Input your scan criteria:<br>\n"
     set fields [lindex $targets($host) 2]
     set no 1
     html {<select name="menu} $no {">} \n
     set template {}
     if {$oSetNo > 0} {
         set template [join $hist($oSetNo,form,menu$no)]
+        egw_log debug "template=$template"
     }
     if {[string length $template] > 0} {
         html {<option> } $template \n
@@ -72,33 +116,24 @@ proc start-scan {scanNo cache dir initSet} {
     html { size=35> }
     html {<input type=submit name=submit value="Scan">}
     html "\n"
-    html {</form>}
+    html {</form><br>}
+
+    set useIcons 0
     if {$hist($setNo,$scanNo,scanTerm) == ""} {
-        wabort
-        return
-    }
-    if {$dir == "b"} {
-        set lines 20
-        set pos 20
-    } elseif {$dir == "f"} {
-        set lines 20
-        set pos 1
-    } else {
-        set lines 20
-        set pos 10
-    }
-    if {[z39scan $setNo $scanNo 0 $lines $pos $cache] != "1"} {
+        button-main
+        button-new-query $setNo        
         return
     }
 
-    html "<br><p>\n"
+    html "<p>\n"
     display-scan $setNo $scanNo 0
     html "<p>\n"
 
-    button-europagate
+    button-main
 
     html {<a href="http:} $env(SCRIPT_NAME)
-    html / $sessionId {/search.egw/} $setNo + [expr $scanNo - 1] + b {">}
+    html / $sessionId {/search.egw/} $setNo + $targetNo +
+    html [expr $scanNo - 1] + b {">}
     if {$useIcons} {
         html {<img src="/egwgif/button-previous-terms.gif" }
         html {alt="Next Terms" border=0></a>}
@@ -107,7 +142,8 @@ proc start-scan {scanNo cache dir initSet} {
     }
 
     html {<a href="http:} $env(SCRIPT_NAME)
-    html / $sessionId {/search.egw/} $setNo + [expr $scanNo + 1] + f {">}
+    html / $sessionId {/search.egw/} $setNo + $targetNo +
+    html [expr $scanNo + 1] + f {">}
     if {$useIcons} {
         html {<img src="/egwgif/button-next-terms.gif" }
         html {alt="Next Terms" border=0></a>}
@@ -115,7 +151,7 @@ proc start-scan {scanNo cache dir initSet} {
         html {Next Terms</a> | }
     }
     html {</a>}
-    button-new-query 0 $setNo
+    button-new-query $setNo
 
     if {!$debug} return
     html "<hr>\n"
@@ -125,54 +161,19 @@ proc start-scan {scanNo cache dir initSet} {
     foreach e {SERVER_NAME PATH_INFO SCRIPT_NAME} {
         html $e {: } $env($e) {<br>} \n
     }
-    html "form: " [wform] " <br>\n"
-    html "target: " $host " <br>\n"
-    html "databases: " $hist($setNo,database) " <br>\n"
-    html "selected: " [wform base] " <br>\n"
+    html "form: " [egw_form] " <br>\n"
+    html "databases: " $hist($setNo,$targetNo,database) " <br>\n"
+    html "selected: " [egw_form base] " <br>\n"
     html "setNo: " $setNo " <br>\n"
     html "nextSetNo: " $nextSetNo " <br>\n"    
 }
 
-proc buttons {setNo setMax startPos after} {
-    global sessionId
-    global useIcons
-    global env
-    global hist
-
-    html "<p>\n"
-    button-europagate
-    if {$setMax < [z39.$setNo resultCount]} {
-        html {<a href="http:} $env(SCRIPT_NAME)
-        html / $sessionId {/search.egw/} $setNo + [expr $setMax + 1]
-        html + [expr $setMax + $hist($setNo,maxPresent)]
-        if {$useIcons} {
-            html {"><img src="/egwgif/button-next-records.gif" alt="Next Records"}
-           html { border=0></a>}
-        } else {
-            html {">Next Records</a>} " | \n"
-        }
-    }
-    if {$startPos != "" && $startPos != "1"} {
-        html {<a href="http:} $env(SCRIPT_NAME)
-        html / $sessionId {/search.egw/} $setNo 
-        html + [expr $startPos - $hist($setNo,maxPresent)]
-        html + [expr $startPos - 1]
-        if {$useIcons} {
-            html {"><img src="/egwgif/button-previous-records.gif" }
-           html {alt="Previous Records" border=0></a>}
-        } else {
-            html {">Previous Records</a>} " | \n"
-        }
-    }
-    button-new-query 1 $setNo
-    button-new-target 1
-    button-view-history 0
-
-    html "<p>\n"
-}
-
     if {[info commands saveState] == ""} {
         source z39util.tcl
+        if {![info exists debug]} {
+            session-lost
+            egw_abort
+        }
     }
     global sessionWait
     global nextSetNo
@@ -180,151 +181,133 @@ proc buttons {setNo setMax startPos after} {
     global hist
 
     set setNo [lindex $sessionParms 0]
+    set targetNo [lindex $sessionParms 1]
+    set startPos [lindex $sessionParms 2]
+    set endPos [lindex $sessionParms 3]
 
-    if {[wform] != ""} {
-        set hist($nextSetNo,idAuthentication) $hist($setNo,idAuthentication)
-        set hist($nextSetNo,host) $hist($setNo,host)
+    if {[egw_form] != ""} {
+        set hist($nextSetNo,$targetNo,idAuthentication) \
+            $hist($setNo,$targetNo,idAuthentication)
+        set hist($nextSetNo,$targetNo,host) \
+            $hist($setNo,$targetNo,host)
 
         if {$nextSetNo == $setNo} {
             set setNo $nextSetNo
             incr nextSetNo
         } else {
-            catch {unset hist($setNo,hits)}
+            catch {unset hist($setNo,$targetNo,hits)}
         }
         set hist($setNo,scan) 0
 
-        set hist($setNo,form,menu1) [wform menu1]
-        set hist($setNo,form,menu2) [wform menu2]
-        set hist($setNo,form,menu3) [wform menu3]
+        set hist($setNo,form,menu1) [egw_form menu1]
+        set hist($setNo,form,menu2) [egw_form menu2]
+        set hist($setNo,form,menu3) [egw_form menu3]
 
-        set hist($setNo,form,entry1) [wform entry1]
-        set hist($setNo,form,entry2) [wform entry2]
-        set hist($setNo,form,entry3) [wform entry3]
+        set hist($setNo,form,entry1) [egw_form entry1]
+        set hist($setNo,form,entry2) [egw_form entry2]
+        set hist($setNo,form,entry3) [egw_form entry3]
 
-        set hist($setNo,form,logic1) [wform logic1]
-        set hist($setNo,form,logic2) [wform logic2]
+        set hist($setNo,form,logic1) [egw_form logic1]
+        set hist($setNo,form,logic2) [egw_form logic2]
         set hist($setNo,form,logic3) {}
         
-        set host $hist($setNo,host)
-        set databases [lindex $targets($host) 1]
+        set host $hist($setNo,0,host)
+
+        set databases [splitDatabaseSpec $host]
 
-        set b [wform base]
-       if {[wform baseall] != ""} {
-           set hist($setNo,database) $databases
+        set b [egw_form base]
+       if {[egw_form baseall] != ""} {
+           set hist($setNo,$targetNo,database) $databases
         } elseif {$b == ""} {
-            set hist($setNo,database) $databases
+            set hist($setNo,$targetNo,database) $databases
         } else {
-            set hist($setNo,database) $b
+            set hist($setNo,$targetNo,database) $b
         }
-        set hist($setNo,maxPresent) [wform hits]
+        set hist($setNo,maxPresent) [egw_form hits]
         if {$hist($setNo,maxPresent) == ""} {
             set hist($setNo,maxPresent) 30
         }
-        set i [lindex $sessionParms 1]
-        if {$i == ""} {
+        set hist($setNo,format) brief
+        set hist($setNo,sort) server
+
+        set i [lindex $sessionParms 2]
+        if {[string length $i] == 0} {
             for {set j 1} {$j <= 3} {incr j} {
-                if {[wform scan$j] != ""} {
+                if {[egw_form scan$j] != ""} {
                     set i $j
                     break
                 }
             }
         }
-        if {$i != ""} {
+        if {[string length $i] != 0} {
             set scanNo 1000
             set hist($setNo,scan) $i
-            set termPlusAttr [build-scan $hist($setNo,host) $i]
+            set termPlusAttr [build-scan $hist($setNo,0,host) $i]
             set hist($setNo,$scanNo,scanTerm) [lindex $termPlusAttr 0]
             set hist($setNo,scanAttr) [lindex $termPlusAttr 1]
-            start-scan $scanNo 0 {} {}
+            start-scan $scanNo $targetNo 0 {} $setNo
             html "</body></html>\n"
-            wabort
+            egw_abort
             return
         }
-        set query [build-query $hist($setNo,host) 3]
-        if {"x$query" == "x"} {
+        set query [build-query $hist($setNo,0,host) 3]
+        if {[string length $query] == 0} {
             html "<head><title> WWW/Z39.50 Gateway Search</title>\n<body>\n"
             displayError "Empty query" \
                 "You must specify at least one search word"
             html "</body></html>\n"
-            wabort
+            egw_abort
         }
-        set hist($setNo,query) $query
-    } else {
-        if {[lindex $sessionParms 1] == "scan"} {
-            set scanNo 1000
-            set hist($setNo,$scanNo,scanTerm) {}
-            start-scan $scanNo 0 {} {}
-            html "</body></html>\n"
-            wabort
+        set hist($setNo,0,query) $query
+    } elseif {[lindex $sessionParms 2] == "hyper"} {
+        egw_log debug "hyper search"
+        set hist($nextSetNo,$targetNo,idAuthentication) \
+            $hist($setNo,$targetNo,idAuthentication)
+        set hist($nextSetNo,$targetNo,host) \
+            $hist($setNo,$targetNo,host)
+        set hist($nextSetNo,$targetNo,database) \
+            $hist($setNo,$targetNo,database)
+
+        if {$nextSetNo == $setNo} {
+            set setNo $nextSetNo
+            incr nextSetNo
+        } else {
+            catch {unset hist($setNo,$targetNo,hits)}
         }
+        set hist($setNo,scan) 0
+        set hist($setNo,$targetNo,query) \
+            "$hist($setNo,scanAttr) \"[lindex $sessionParms 3]\""
+        egw_log debug "hyper databases: $hist($setNo,$targetNo,database)"
+        set hist($setNo,form,entry1) [lindex $sessionParms 3]
+        set startPos ""
+    } elseif {[lindex $sessionParms 2] == "scan"} {
+        egw_log debug "star scan"
+        set scanNo 1000
+        set hist($setNo,$scanNo,scanTerm) {}
+        start-scan $scanNo $targetNo 0 {} {}
+        html "</body></html>\n"
+        egw_abort
+    } else {
         if {![info exists hist($setNo,scan)]} return
         if {$hist($setNo,scan) > 0} {
-            set scanNo [lindex $sessionParms 1]
-            set dir [lindex $sessionParms 2]
+            set scanNo [lindex $sessionParms 2]
+            set dir [lindex $sessionParms 3]
             if {$scanNo == ""} {
                 set scanNo 1000
             }
-            start-scan $scanNo 1 $dir $setNo
+            start-scan $scanNo $targetNo 1 $dir $setNo
             html "</body></html>\n"
-            wabort
+            egw_abort
         }
     }
-    set host $hist($setNo,host)
+    set host $hist($setNo,$targetNo,host)
 
-    html "<head><title> WWW/Z39.50 Gateway Search " $host " </title>\n"
+    html "<head><title> WWW/Z39.50 Gateway Search " [splitHostSpec $host] 
+    html " </title>\n"
     html "</head><body>\n"
 
-    set startPos [lindex $sessionParms 1]
-    set endPos [lindex $sessionParms 2]
-    set setMax 0
-    set setOffset 0
-    if {$startPos == ""} {
-        if {[z39search $setNo 1 0 B] != "1"} {
-            return
-        }
-        set r [z39.$setNo resultCount]
-        set setOffset [z39.$setNo numberOfRecordsReturned]
-        if {$setOffset > 0} {
-            html {<h3> Records 1-} $setOffset " out of $r</h3>\n"
-        } else {
-            html "<h3> No hits</h3>\n"
-        }
-        wflush
-        html "<ul>\n"
-        display-rec 1 $setOffset display-brief 0
-        incr setOffset
-        set setMax [z39.$setNo resultCount]
-        if {$setMax > $hist($setNo,maxPresent)} {
-            set setMax $hist($setNo,maxPresent)
-        }
-    } else {
-        if {[z39search $setNo 0 0 B] != "1"} {
-            return 
-        }
-        set r [z39.$setNo resultCount]
-        set setOffset $startPos
-        set setMax [z39.$setNo resultCount]
-        if {$setMax > $endPos} {
-            set setMax $endPos
-        }
-        if {$setMax > 0} {
-            buttons $setNo $setMax $startPos 0
-        }
-        if {$setMax > 0} {
-            html {<h3> Records } $startPos {-} $setMax " out of $r</h3>\n"
-        } else {
-            html "<h3> No hits</h3>\n"
-        }
-        wflush
-        html "<ul>\n"
-    }
-    if {$setMax > 0} {
-        z39present $setNo 0 $setOffset $setMax display-brief B
-    }
-    html "</ul>\n"
-    buttons $setNo $setMax $startPos 1
+    display-result-set-s $setNo $targetNo $startPos $endPos
 }
-
 {
     global debug
     if {!$debug} return
@@ -335,14 +318,12 @@ proc buttons {setNo setMax startPos after} {
     foreach n [array names env] {
         html "env($n) = " $env($n) " <br>\n"
     }
-    html "form: " [wform] " <br>\n"
-    html "target: " $host " <br>\n"
-    html "databases: " $hist($setNo,database) " <br>\n"
-    html "selected: " [wform base] " <br>\n"
-    html "query: --" $hist($setNo,query) "-- <br>"
+    html "form: " [egw_form] " <br>\n"
+    html "databases: " $hist($setNo,$targetNo,database) " <br>\n"
+    html "selected: " [egw_form base] " <br>\n"
+    html "query: --" $hist($setNo,$targetNo,query) "-- <br>"
     html "setNo: " $setNo " <br>\n"
     html "nextSetNo: " $nextSetNo " <br>\n"
 }
-
 </body>
 </html>