Index: openacs-4/packages/search/www/search.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/www/search.tcl,v diff -u -r1.37 -r1.38 --- openacs-4/packages/search/www/search.tcl 26 Jul 2011 18:39:32 -0000 1.37 +++ openacs-4/packages/search/www/search.tcl 27 Oct 2014 16:41:55 -0000 1.38 @@ -5,16 +5,16 @@ } { q:trim {t:trim ""} - {offset:integer 0} - {num:integer 0} + {offset:naturalnum 0} + {num:naturalnum 0} {dfs:trim ""} {dts:trim ""} - {search_package_id ""} + {search_package_id:naturalnum ""} {scope ""} {object_type ""} } -validate { keywords_p { - if {![exists_and_not_null q]} { + if {![info exists q] || $q eq ""} { ad_complain "#search.lt_You_must_specify_some#" } } @@ -27,7 +27,7 @@ set package_url [ad_conn package_url] set package_url_with_extras $package_url -set context results +set context Results set context_base_url $package_url # Do we want debugging information at the end of the page @@ -39,28 +39,14 @@ array set info [lindex [callback -impl $driver search::driver_info] 0] # array set info [list package_key intermedia-driver version 1 automatic_and_queries_p 1 stopwords_p 1] } else { - array set info [acs_sc_call FtsEngineDriver info [list] $driver] + array set info [acs_sc::invoke -contract FtsEngineDriver -operation info -call_args [list] -impl $driver] } if { [array get info] eq "" } { - ReturnHeaders - ns_write "[_ search.lt_FtsEngineDriver_not_a]" + ns_return 200 text/html [_ search.lt_FtsEngineDriver_not_a] ad_script_abort } -if {[string trim $q] eq ""} { - set query {} - set empty_p 1 - set url_advanced_search "advanced-search" - ad_return_template - # FIXME DAVEB I don't understand why I can't call ad_script_abort here instead of return.... - # if I call ad_script_abort the adp is never rendered - return -} else { - set empty_p 0 -} - - if { $num <= 0} { set limit [parameter::get -package_id $package_id -parameter LimitDefault] } else { @@ -97,7 +83,7 @@ set subsite_packages [concat [ad_conn subsite_id] [subsite::util::packages -node_id [ad_conn node_id]]] lappend params $subsite_packages set search_package_id $subsite_packages -} else { +} elseif {$search_package_id ne ""} { lappend params $search_package_id } @@ -117,11 +103,14 @@ if {[callback::impl_exists -impl $driver -callback search::search]} { # DAVEB TODO Add subsite to the callback def? # FIXME do this in the intermedia driver! -# set final_query_string [db_string final_query_select "select site_wide_search.im_convert(:q) from dual"] + # set final_query_string [db_string final_query_select "select site_wide_search.im_convert(:q) from dual"] - array set result [lindex [callback -impl $driver search::search -query $q -offset $offset -limit $limit -user_id $user_id -df $df -extra_args [list package_ids $search_package_id object_type $object_type]] 0] + array set result [lindex [callback -impl $driver search::search -query $q -offset $offset -limit $limit \ + -user_id $user_id -df $df \ + -extra_args [list package_ids $search_package_id object_type $object_type]] 0] } else { - array set result [acs_sc_call FtsEngineDriver search $params $driver] + array set result [acs_sc::invoke -contract FtsEngineDriver -operation search \ + -call_args $params -impl $driver] } set tend [clock clicks -milliseconds] @@ -131,7 +120,8 @@ if {[callback::impl_exists -impl $object_type -callback search::url]} { set url [callback -impl $object_type search::url -object_id $object_id] } else { - set url [acs_sc_call FtsContentProvider url [list $object_id] $object_type] + set url [acs_sc::invoke -contract FtsContentProvider -operation url \ + -call_args [list $object_id] -impl $object_type] } ad_returnredirect $url ad_script_abort @@ -142,7 +132,7 @@ 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) } { +if { $info(automatic_and_queries_p) && "and" in $q } { set and_queries_notice_p 1 } else { set and_queries_notice_p 0 @@ -161,7 +151,7 @@ template::multirow create searchresult title_summary txt_summary url_one object_id -for { set __i 0 } { $__i < [expr {$high - $low +1}] } { incr __i } { +for { set __i 0 } { $__i < $high - $low + 1 } { incr __i } { if {[catch { set object_id [lindex $result(ids) $__i] if {$object_id eq ""} { @@ -173,17 +163,21 @@ array set datasource [lindex [callback -impl $object_type search::datasource -object_id $object_id] 0] set url_one [lindex [callback -impl $object_type search::url -object_id $object_id] 0] } else { - ns_log warning "SEARCH search/www/search.tcl callback::datasource::$object_type not found" - array set datasource [acs_sc_call FtsContentProvider datasource [list $object_id] $object_type] - set url_one [acs_sc_call FtsContentProvider url [list $object_id] $object_type] + #ns_log warning "SEARCH search/www/search.tcl callback::datasource::$object_type not found" + array set datasource [acs_sc::invoke -contract FtsContentProvider -operation datasource \ + -call_args [list $object_id] -impl $object_type] + set url_one [acs_sc::invoke -contract FtsContentProvider -operation url \ + -call_args [list $object_id] -impl $object_type] } search::content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) $object_id if {[callback::impl_exists -impl $driver -callback search::summary]} { set title_summary [lindex [callback -impl $driver search::summary -query $q -text $datasource(title)] 0] set txt_summary [lindex [callback -impl $driver search::summary -query $q -text $txt] 0] } else { - 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 title_summary [acs_sc::invoke -contract FtsEngineDriver -operation summary \ + -call_args [list $q $datasource(title)] -impl $driver] + set txt_summary [acs_sc::invoke -contract FtsEngineDriver -operation summary \ + -call_args [list $q $txt] -impl $driver] } } errmsg]} { ns_log error "search.tcl object_id $object_id object_type $object_type error $errmsg" @@ -193,7 +187,7 @@ } set search_the_web [parameter::get -package_id $package_id -parameter SearchTheWeb] -if {[llength $search_the_web]} { +if {$search_the_web ne ""} { set stw "" foreach {url site} $search_the_web { append stw "$site "