Index: openacs-4/packages/contacts/lib/contacts-master.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/lib/contacts-master.tcl,v diff -u -N -r1.4 -r1.5 --- openacs-4/packages/contacts/lib/contacts-master.tcl 17 Jun 2005 08:58:17 -0000 1.4 +++ openacs-4/packages/contacts/lib/contacts-master.tcl 19 Jun 2005 07:00:28 -0000 1.5 @@ -8,20 +8,17 @@ if { [site_node::get_package_url -package_key "tasks"] != "" } { set prefix "/contacts/" -} else { - set prefix "${package_url}" -} -if { [site_node::get_package_url -package_key "tasks"] != "" } { set tasks_enabled_p 1 } else { + set prefix "${package_url}" set tasks_enabled_p 0 } set link_list [list] lappend link_list "${prefix}" lappend link_list "[_ contacts.Contacts]" -if { ![parameter::get -boolean -parameter "ForceSearchBeforeAdd" -default "0"] || !${tasks_enabled_p} } { +if { ![parameter::get -boolean -parameter "ForceSearchBeforeAdd" -default "0"] && !${tasks_enabled_p} } { lappend link_list "${prefix}add/person" lappend link_list "[_ contacts.Add_Person]" Index: openacs-4/packages/contacts/tcl/contact-search-condition-type-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contact-search-condition-type-procs.tcl,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/contacts/tcl/contact-search-condition-type-procs.tcl 19 Jun 2005 05:02:29 -0000 1.1 +++ openacs-4/packages/contacts/tcl/contact-search-condition-type-procs.tcl 19 Jun 2005 07:00:28 -0000 1.2 @@ -549,17 +549,15 @@ set interval "[lindex $var_list 1] [lindex $var_list 2]" switch $operand { in_search { - set search_id [lindex $var_list 2] + set search_id [lindex $var_list 1] set search_link "[contact::search::title -search_id $search_id]" set output_pretty "[_ contacts.lt_Contact_in_the_search_search_link]" - ns_log notice "contact::party_id_in_sub_search_clause -search_id $search_id" set output_code [contact::party_id_in_sub_search_clause -search_id $search_id] } not_in_search { - set search_id [lindex $var_list 2] + set search_id [lindex $var_list 1] set search_link "[contact::search::title -search_id $search_id]" set output_pretty "[_ contacts.lt_Contact_not_in_the_search_search_link]" - ns_log notice "contact::party_id_in_sub_search_clause -search_id $search_id" set output_code [contact::party_id_in_sub_search_clause -search_id $search_id -not] } update { Index: openacs-4/packages/contacts/tcl/contact-search-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contact-search-procs.tcl,v diff -u -N -r1.10 -r1.11 --- openacs-4/packages/contacts/tcl/contact-search-procs.tcl 19 Jun 2005 05:02:29 -0000 1.10 +++ openacs-4/packages/contacts/tcl/contact-search-procs.tcl 19 Jun 2005 07:00:28 -0000 1.11 @@ -45,6 +45,16 @@ return [db_string select_title {} -default {}] } +ad_proc -public contact::search::get { + -search_id:required + -array:required +} { + Get the info on an ams_attribute +} { + upvar 1 $array row + db_1row select_search_info {} -column_array row +} + ad_proc -public contact::search::update { {-search_id ""} {-title ""} @@ -186,6 +196,63 @@ return $result } + +ad_proc -public contact::search_pretty { + {-search_id} + {-format "text/html"} +} { + Get the search in human readable format. Cached +} { + return [util_memoize [list ::contact::search_pretty_not_cached -search_id $search_id -format $format]] +} + + +ad_proc -public contact::search_pretty_not_cached { + {-search_id} + {-format "text/html"} +} { + Get the search in human readable format +} { + set conditions [list] + db_foreach selectqueries { + select type, var_list from contact_search_conditions where search_id = :search_id + } { + lappend conditions [contacts::search::condition_type -type $type -request pretty -var_list $var_list] + } + + if { [llength $conditions] > 0 } { + + contact::search::get -search_id $search_id -array "search_info" + + if { $search_info(object_type) == "person" } { + set object_type [_ contacts.people] + } elseif { $search_info(object_type) == "organization" } { + set object_type [_ contacts.organizations] + } else { + set object_type [_ contacts.people_or_organizations] + } + + set results "[_ contacts.Search_for_all_object_type_where]\n" + + if { $search_info(all_or_any) == "all" } { + append results [join $conditions "\n[_ contacts.and] "] + } else { + append results [join $conditions "\n[_ contacts.or] "] + } + + if { $format == "text/html" } { + set results [ad_enhanced_text_to_html $results] + } else { + set results [ad_enhanced_text_to_plain_text $results] + } + + return $results + } else { + return {} + } +} + + ad_proc -public contact::search::query_clause { {-and:boolean} {-query ""} @@ -309,7 +376,7 @@ lappend where_clauses "$party_id in ( select organization_id from organizations )" } db_foreach select_queries {} { - lappend where_clauses [contact::search::translate -type $type -var_list $var_list -to code -revision_id $revision_id -party_id $party_id] + lappend where_clauses [contacts::search::condition_type -type $type -request sql -var_list $var_list -revision_id $revision_id -party_id $party_id] } } else { set operator "and" @@ -329,30 +396,3 @@ return $result } - -ad_proc -public contact::search::translate { - {-type} - {-var_list} - {-to "code"} - {-party_id} - {-revision_id} -} { - returns the group_id for which this group is a component, if none then it return null -} { - set output_pretty [contacts::search::condition_type -type $type -request pretty -var_list $var_list -party_id $party_id -revision_id $revision_id] - set output_code [contacts::search::condition_type -type $type -request sql -var_list $var_list -party_id $party_id -revision_id $revision_id] - if { ![exists_and_not_null output_pretty] || ![exists_and_not_null output_code] } { - if { [exists_and_not_null error_message] } { - error "[_ contacts.lt_The_query_type_var_li]" - } else { - error "[_ contacts.lt_The_query_type_var_li_1]" - } - } else { - switch $to { - code { return $output_code } - pretty { return $output_pretty } - } - } -} - - Index: openacs-4/packages/contacts/tcl/contact-search-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contact-search-procs.xql,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/contacts/tcl/contact-search-procs.xql 16 Jun 2005 20:51:58 -0000 1.3 +++ openacs-4/packages/contacts/tcl/contact-search-procs.xql 19 Jun 2005 07:00:28 -0000 1.4 @@ -15,6 +15,14 @@ + + + select * + from contact_searches + where search_id = :search_id + + + select parties.party_id Index: openacs-4/packages/contacts/www/search.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/search.tcl,v diff -u -N -r1.11 -r1.12 --- openacs-4/packages/contacts/www/search.tcl 19 Jun 2005 05:02:29 -0000 1.11 +++ openacs-4/packages/contacts/www/search.tcl 19 Jun 2005 07:00:28 -0000 1.12 @@ -72,7 +72,7 @@ append form_elements { {object_type:text(hidden) {value $object_type}} {object_type_pretty:text(inform) {label {[_ contacts.Search_for]}} {value "$object_type_pretty"} {after_html "[_ contacts.which_match]"}} - {all_or_any:text(select),optional {label ""} {options {{[_ contacts.All] all} {[_ contacts.Any] any}}} {after_html "[_ contacts.lt_of_the_following_cond]
"}} + {all_or_any:text(select),optional {label ""} {options {{[_ contacts.All] all} {[_ contacts.Any] any}}} {after_html "[_ contacts.lt_of_the_following_cond]"}} } } else { set object_type_options [list] @@ -87,13 +87,17 @@ if { $search_exists_p } { - set query_pretty "" + if { [llength $conditions] > 0 } { + set query_pretty "" + } else { + set query_pretty "" + } lappend form_elements [list query:text(hidden),optional] lappend form_elements [list query_pretty:text(inform),optional [list label {}] [list value $query_pretty]] Index: openacs-4/packages/contacts/www/searches.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/searches.tcl,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/contacts/www/searches.tcl 14 Jun 2005 06:08:28 -0000 1.1 +++ openacs-4/packages/contacts/www/searches.tcl 19 Jun 2005 07:00:28 -0000 1.2 @@ -26,10 +26,6 @@ -selected_format $format \ -key search_id \ -elements { - object_type { - label {Type} - display_col object_type - } title { label {#contacts.Title#} display_col title @@ -98,22 +94,14 @@ set copy_url [export_vars -base search-action -url {search_id {owner_id $user_id} {action copy} return_url}] lappend search_ids $search_id - db_foreach selectqueries { - select type as query_type, var_list as query_var_list from contact_search_conditions where search_id = :search_id - } { - if { [exists_and_not_null query] } { - append query "
" - } - append query "[contact::search::translate -type $query_type -var_list $query_var_list -to pretty -party_id "party_id" -revision_id "cr.revisions.revision_id"]" - } - } # Since contact::search::results_count can if not cached required two db queries # when this is included in the multirow code block above it can hang due to a lack # of db pools. So it has to be done here. template::multirow foreach searches { set results [contact::search::results_count -search_id $search_id] + set query [contact::search_pretty -search_id $search_id] } list::write_output -name searches