Index: openacs-4/packages/search/www/search.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/www/search.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/search/www/search.tcl 3 Sep 2001 07:14:40 -0000 1.2 +++ openacs-4/packages/search/www/search.tcl 15 Sep 2001 21:31:50 -0000 1.3 @@ -4,7 +4,11 @@ @cvs-id $Id$ } { q:notnull,trim - {offset 0} + {t:trim ""} + {offset:integer 0} + {num:integer 0} + {dfs:trim ""} + {dts:trim ""} } -errors { q:notnull {You must specify some keywords.} } @@ -15,7 +19,7 @@ set template_one_file "$this_dir/search-results-one" set template_bottom_file "$this_dir/search-results-bottom" - +set user_id [ad_conn user_id] set package_id [ad_conn package_id] set driver [ad_parameter -package_id $package_id FtsEngineDriver] array set info [acs_sc_call FtsEngineDriver info [list] $driver] @@ -25,33 +29,60 @@ ns_write "FtsEngineDriver not available!" return } +if { $num <= 0} { + set limit [ad_parameter -package_id $package_id LimitDefault] +} else { + set limit $num +} -set limit [ad_parameter -package_id $package_id LimitDefault] +set df "" +set dt "" +if { $dfs == "all" } { set dfs "" } +array set symbol2interval [ad_parameter -package_id $package_id Symbol2Interval] +if { $dfs != "" } { set df [db_exec_plsql get_df "select now() + '$symbol2interval($dfs)'::interval"] } +if { $dts != "" } { set dt [db_exec_plsql get_dt "select now() + '$symbol2interval($dts)'::interval"] } + + + + + + set title "Search Results" set context_bar [ad_context_bar {Search Results}] set q [string tolower $q] +set urlencoded_query [ad_urlencode $q] if { $offset < 0 } { set offset 0 } set t0 [clock clicks -milliseconds] -array set result [acs_sc_call FtsEngineDriver search [list $q $offset $limit] $driver] +array set result [acs_sc_call FtsEngineDriver search [list $q $offset $limit $user_id $df $dt] $driver] set tend [clock clicks -milliseconds] -set elapsed [format "%.02f" [expr double(abs($tend - $t0)) / 1000.0]] -if { $offset >= $result(count) } { set offset [expr ($result(count) / $limit) * $limit] } +if { $t == "Feeling Lucky" } { + set object_id [lindex $result(ids) 0] + set object_type [db_exec_plsql get_object_type "select acs_object_util__get_object_type($object_id)"] + set url [acs_sc_call FtsContentProvider url [list $object_id] $object_type] + ad_returnredirect $url + return +} +set elapsed [format "%.02f" [expr double(abs($tend - $t0)) / 1000.0]] +if { $offset >= $result(count) } { set offset [expr ($result(count) / $limit) * $limit] } set low [expr $offset + 1] set high [expr $offset + $limit] if { $high > $result(count) } { set high $result(count) } - - if { $info(automatic_and_queries_p) && ([lsearch -exact $q and] > 0) } { set and_queries_notice_p 1 } else { set and_queries_notice_p 0 } +set url_advanced_search "" +append url_advanced_search "advanced-search?q=${urlencoded_query}" +if { $num > 0 } { append url_advanced_search "&num=${num}" } + set template_top [template::adp_parse $template_top_file [list \ + t $t \ title $title \ context_bar $context_bar \ query $q \ @@ -62,17 +93,17 @@ low $low \ high $high \ count $result(count) \ - elapsed $elapsed]] + elapsed $elapsed \ + url_advanced_search $url_advanced_search]] ns_write $template_top - for { set __i [expr 0] } { $__i < [expr $high - $low +1] } { incr __i } { + for { set __i 0 } { $__i < [expr $high - $low +1] } { incr __i } { set object_id [lindex $result(ids) $__i] set object_type [db_exec_plsql get_object_type "select acs_object_util__get_object_type($object_id)"] array set datasource [acs_sc_call FtsContentProvider datasource [list $object_id] $object_type] - - set txt [search_content_filter $datasource(content) $datasource(mime) $datasource(storage)] + search_content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) set title_summary [acs_sc_call FtsEngineDriver summary [list $q $datasource(title)] $driver] set txt_summary [acs_sc_call FtsEngineDriver summary [list $q $txt] $driver] set url [acs_sc_call FtsContentProvider url [list $object_id] $object_type] @@ -87,21 +118,37 @@ } - set urlencoded_query [ad_urlencode $q] set from_result_page 1 set current_result_page [expr ($low / $limit) + 1] - set to_result_page [expr ($result(count) / $limit) + 1] + set to_result_page [expr ceil(double($result(count)) / double($limit))] + set url_previous "" + set url_next "" + append url_previous "search?q=${urlencoded_query}" + append url_next "search?q=${urlencoded_query}" + if { [expr $current_result_page - 1] > $from_result_page } { + append url_previous "&offset=[expr ($current_result_page - 2) * $limit]" + } + if { $current_result_page < $to_result_page } { + append url_next "&offset=[expr $current_result_page * $limit]" + } + if { $num > 0 } { + append url_previous "&num=$num" + append url_next "&num=$num" + } + + set items [list] set links [list] set values [list] for { set __i $from_result_page } { $__i <= $to_result_page} { incr __i } { + set link "" + append link "search?q=${urlencoded_query}" + if { $__i > 1 } { append link "&offset=[expr ($__i - 1) * $limit]" } + if { $num > 0 } { append link "&num=$num" } + lappend items $__i - if { $__i == 1 } { - lappend links "search?q=${urlencoded_query}" - } else { - lappend links "search?q=${urlencoded_query}&offset=[expr ($__i - 1) * $limit]" - } + lappend links $link lappend values $__i } @@ -120,9 +167,9 @@ from_result_page $from_result_page \ current_result_page $current_result_page \ to_result_page $to_result_page \ - offset_previous [expr $offset - $limit] \ + url_previous $url_previous \ choice_bar [search_choice_bar $items $links $values $current_result_page] \ - offset_next [expr $offset + $limit] \ + url_next $url_next \ stw $stw\ ]]