Index: openacs-4/packages/intermedia-driver/tcl/intermedia-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/intermedia-driver/tcl/intermedia-procs.tcl,v diff -u -N -r1.4 -r1.4.4.1 --- openacs-4/packages/intermedia-driver/tcl/intermedia-procs.tcl 27 Oct 2014 16:41:45 -0000 1.4 +++ openacs-4/packages/intermedia-driver/tcl/intermedia-procs.tcl 14 Feb 2019 10:02:36 -0000 1.4.4.1 @@ -6,37 +6,37 @@ Search Index Callback for Oracle Intermedia @author Dave Bauer (dave@thedesignexperience.org) @creation-date 2005-06-12 - + } { # we want the datasource array reference in case we want to do something clever if {$datasource ne ""} { - upvar $datasource _datasource + upvar $datasource _datasource } set content "${title} ${content}" # if storage type is file, store the text in the site_wide_index table if {![db_string index_exists "select 1 from site_wide_index where object_id=:object_id" -default 0]} { - db_dml index "insert into site_wide_index - (object_id, object_name, package_id, relevant_date, community_id, indexed_content) - values - (:object_id, :title, :package_id, :relevant_date, :community_id, empty_clob() ) - returning indexed_content into :1" -clobs [list $content] + db_dml index "insert into site_wide_index + (object_id, object_name, package_id, relevant_date, community_id, indexed_content) + values + (:object_id, :title, :package_id, :relevant_date, :community_id, empty_clob() ) + returning indexed_content into :1" -clobs [list $content] } else { - # call the update index proc since this object is already indexed - callback -impl intermedia-driver search::update_index \ - -object_id $object_id \ - -content $content \ - -title $title \ - -keywords $keywords \ - -community_id $community_id \ - -relevant_date $relevant_date \ - -description $description \ - -datasource $datasource \ - -package_id $package_id + # call the update index proc since this object is already indexed + callback -impl intermedia-driver search::update_index \ + -object_id $object_id \ + -content $content \ + -title $title \ + -keywords $keywords \ + -community_id $community_id \ + -relevant_date $relevant_date \ + -description $description \ + -datasource $datasource \ + -package_id $package_id } - + } ad_proc -public -callback search::update_index -impl intermedia-driver {} { @@ -45,29 +45,29 @@ @creation-date 2005-08-01 } { if {$datasource ne ""} { - upvar $datasource _datasource - } + upvar $datasource _datasource + } if {![db_string index_exists "select 1 from site_wide_index where object_id=:object_id" -default 0]} { - callback -impl intermedia-driver search::index \ - -object_id $object_id \ - -content $content \ - -title $title \ - -keywords $keywords \ - -community_id $community_id \ - -relevant_date $relevant_date \ - -description $description \ - -datasource $datasource \ - -package_id $package_id - return + callback -impl intermedia-driver search::index \ + -object_id $object_id \ + -content $content \ + -title $title \ + -keywords $keywords \ + -community_id $community_id \ + -relevant_date $relevant_date \ + -description $description \ + -datasource $datasource \ + -package_id $package_id + return } else { - db_dml index "update site_wide_index - set object_name=:title, - package_id=:package_id, - community_id=:community_id, - relevant_date=:relevant_date, - indexed_content=empty_clob() - where object_id=:object_id - returning indexed_content into :1" -clobs [list $content] + db_dml index "update site_wide_index + set object_name=:title, + package_id=:package_id, + community_id=:community_id, + relevant_date=:relevant_date, + indexed_content=empty_clob() + where object_id=:object_id + returning indexed_content into :1" -clobs [list $content] } } @@ -94,19 +94,19 @@ @param object_type } { if {[info exists package_ids] && [llength $package_ids]} { - set package_ids_clause " and swi.package_id in ([template::util::tcl_to_sql_list $package_ids]) " + set package_ids_clause " and swi.package_id in ([template::util::tcl_to_sql_list $package_ids]) " } else { - set package_ids_clause "" + set package_ids_clause "" } if {[info exists object_type] && $object_type eq "forums"} { - set object_type_clause " and o.object_type in ('forums_forum', 'forums_message') " + set object_type_clause " and o.object_type in ('forums_forum', 'forums_message') " } elseif {[info exists object_type] && $object_type ne "all" } { - set object_type_clause " and o.object_type = :object_type " + set object_type_clause " and o.object_type = :object_type " } else { - set object_type_clause "" + set object_type_clause "" } - + set weighted_score "score(10) - case when object_type='faq' then nvl(months_between(sysdate,relevant_date)/4,20) when object_type='forums' @@ -127,7 +127,7 @@ set people_search_clause { o.object_type = 'phb_person' or } if {[apm_package_installed_p "dotlrn"]} { - set is_guest_p [search::is_guest_p] + set is_guest_p [db_string get_is_guest_p {select dotlrn_privacy.guest_p(:user_id) from dual}] if {$is_guest_p} { set people_search_clause { and }; # doesn't look like legal SQL } @@ -144,33 +144,33 @@ set member_clause {} } - set results_ids [db_list search "select s.object_id from + set results_ids [db_list search "select s.object_id from (select rownum as r,o.object_id - from site_wide_index swi, acs_objects o - where swi.object_id= o.object_id + from site_wide_index swi, acs_objects o + where swi.object_id= o.object_id $object_type_clause - and contains (swi.indexed_content,:query, 10)> 0 + and contains (swi.indexed_content,:query, 10)> 0 and ( - $people_search_clause + $people_search_clause (exists (select 1 from acs_object_party_privilege_map m where m.object_id = o.object_id and m.party_id = :user_id - and m.privilege = 'read') + and m.privilege = 'read') $community_id_clause)) $package_ids_clause order by $weighted_score desc) s where r > $offset and r <= $offset + $limit"] # TODO implement stopwords reporting for user query - set count [db_string count "select count(swi.object_id) from site_wide_index swi, acs_objects o where o.object_id=swi.object_id $object_type_clause and contains (swi.indexed_content,:query)> 0 + set count [db_string count "select count(swi.object_id) from site_wide_index swi, acs_objects o where o.object_id=swi.object_id $object_type_clause and contains (swi.indexed_content,:query)> 0 and ( - $people_search_clause + $people_search_clause (exists (select 1 from acs_object_party_privilege_map m where m.object_id = o.object_id and m.party_id = :user_id - and m.privilege = 'read') + and m.privilege = 'read') $member_clause)) $package_ids_clause "] set stop_words "" @@ -206,7 +206,13 @@ @author Dave Bauer (dave@thedesignexperience.org) @creation-date 2005-05-29 - + } { return [list package_key intermedia-driver version 1 automatic_and_queries_p 1 stopwords_p 1] } + +# Local variables: +# mode: tcl +# tcl-indent-level: 4 +# indent-tabs-mode: nil +# End: