Index: openacs-4/packages/contacts/www/index.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/index.tcl,v
diff -u -r1.2 -r1.2.2.1
--- openacs-4/packages/contacts/www/index.tcl 13 Jan 2005 13:57:08 -0000 1.2
+++ openacs-4/packages/contacts/www/index.tcl 30 Nov 2005 15:31:02 -0000 1.2.2.1
@@ -1,357 +1,93 @@
ad_page_contract {
+ List and manage contacts.
-
@author Matthew Geddert openacs@geddert.com
@creation-date 2004-07-28
@cvs-id $Id$
-
} {
- {searchterm ""}
- {letter ""}
- {num_rows "20"}
- {start_row:naturalnum "0"}
- {category_id:multiple,optional}
- {groupby:optional}
- {orderby:optional}
- {sortby "first_names"}
+ {orderby "first_names,asc"}
{format "normal"}
- {status "current"}
- {object_type ""}
+ {search_id:integer ""}
+ {query ""}
+ {page:optional}
+ {page_size:integer ""}
+ {add_person:optional}
+ {add_organization:optional}
+ {aggregate_attribute_id ""}
+ {aggregate_extend_id:multiple ""}
+ {extend_values:optional ""}
+ {attr_val_name:optional ""}
}
-set admin_p [ad_permission_p [ad_conn package_id] admin]
-
-set title "Contacts"
-set context {}
-
-set valid_numrows [list 10 20 50 100 ALL]
-if { [lsearch $valid_numrows $num_rows] < 0 } {
- set num_rows 50
+if { [exists_and_not_null add_person] } {
+ ad_returnredirect "add/person"
+ ad_script_abort
+} elseif { [exists_and_not_null add_organization] } {
+ ad_returnredirect "add/organization"
+ ad_script_abort
}
+set aggregated_p 0
+if {[exists_and_not_null aggregate_attribute_id] } {
+ set aggregated_p 1
+}
-
-if { $num_rows == "ALL" } {
- set start_row 0
+set extend_p 0
+if { [exists_and_not_null search_id] } {
+ set extend_p 1
}
+set user_id [ad_conn user_id]
+set package_id [ad_conn package_id]
-
-
-
-set export_vars_page_nav [export_vars -url { category_id format letter num_rows object_type orderby searchterm sortby status }]
-set export_vars_search_form [export_vars -form { category_id format num_rows object_type orderby sortby status }]
-set export_vars_search_url [export_vars -url { category_id format num_rows object_type orderby sortby status }]
-set export_vars_letter_url [export_vars -url { category_id format num_rows object_type orderby sortby status }]
-set export_vars_sortby_url [export_vars -url { category_id format letter num_rows object_type orderby searchterm status }]
-set export_vars_num_rows_url [export_vars -url { category_id format letter object_type orderby searchterm sortby status }]
-set export_vars_category_form [export_vars -form { format letter num_rows object_type orderby searchterm sortby status }]
-set export_vars_category_url [export_vars -url { format letter num_rows object_type orderby searchterm sortby status }]
-
-
-
-
-if {[exists_and_not_null category_id]} {
- set category_id_filter "party_id in ( select object_id from category_object_map where category_id = $category_id )"
- set temp_category_id $category_id
-} else {
- set category_id_filter ""
- set temp_category_id ""
+set valid_page_sizes [list 25 50 100 500]
+if { ![exists_and_not_null page_size] || [lsearch $valid_page_sizes $page_size] < 0 } {
+ set page_size [parameter::get -boolean -parameter "DefaultPageSize" -default "50"]
}
-set categories_p [contacts::categories::enabled_p]
+set contacts_total_count [contact::search::results_count -search_id $search_id -query $query]
-if { [string is true $categories_p] } {
-set category_select [contacts::categories::get_selects -export_vars $export_vars_category_form -category_id $temp_category_id]
+if { $aggregated_p } {
+ set contacts_total_count "$contacts_total_count"
}
-
-set searchterm_filter "upper(sort_$sortby) like upper('%$searchterm%')"
-set letter_filter "upper(sort_$sortby) like upper('$letter%')"
-
-if { [lsearch [list organization person] $object_type] < 0 } {
- set object_type_filter ""
-} else {
- set object_type_filter "object_type = '$object_type'"
+if { [exists_and_not_null search_id] } {
+ contact::search::log -search_id $search_id
}
-if { [lsearch [list current archived] $status] < 0 } {
- set status_filter ""
-} else {
- set status_filter "status = '$status'"
+set public_searches [lang::util::localize_list_of_lists -list [db_list_of_lists public_searches {}]]
+set search_options [concat [list [list [_ contacts.All_Contacts] ""]] $public_searches]
+set searchcount 1
+db_foreach my_recent_searches {} {
+ lappend search_options [list "${searchcount}) ${recent_title}" ${recent_search_id}]
+ incr searchcount
}
+lang::util::localize_list_of_lists -list $search_options
-if { $status == "archived" } {
-set bulk_actions [list \
- "\#contacts.Make_Current\#" "contact-current" "\#contacts.Make_the_checked_contacts_current\#"]
-} else {
-set bulk_actions [list \
- "\#contacts.Archive\#" "contact-archive" "\#contacts.Archive_the_checked_contacts\#"]
-}
-# "\#contacts.Add_to_Category\#" "contacts-category-add" "\#contacts.Add_the_selected_contacts_to_a_category\#"
-# "\#contacts.Send_Email\#" "bulk-email" "\#contacts.Send_an_email_message_to_the_selected_contacts\#" \
-list::create \
- -html { width 100% } \
- -name entries \
- -multirow entries \
- -key party_id \
- -row_pretty_plural "Contacts" \
- -checkbox_name checkbox \
- -selected_format $format \
- -class "list" \
- -main_class "list" \
- -sub_class "narrow" \
- -pass_properties {
- variable
- } -actions {
- "\#contacts.Add_a_Person\#" "contact-ae?object_type=person" "\#contacts.Add_a_Person\#"
- "\#contacts.Add_an_Organization\#" "contact-ae?object_type=organization" "\#contacts.Add_an_Organization\#"
- } -bulk_actions $bulk_actions \
- -elements {
- edit {
- label {}
- display_template {
-
- }
+set form_elements {
+ {search_id:integer(select),optional {label ""} {options $search_options} {html {onChange "javascript:acs_FormRefresh('search')"}}}
+ {query:text(text),optional {label ""} {html {size 20 maxlength 255}}}
+ {save:text(submit) {label {[_ contacts.Search]}} {value "go"}}
+ {results_count:integer(inform),optional {label " [_ contacts.Results] $contacts_total_count "}}
+}
- }
- contact_name {
- display_col contact_name
- link_url_eval $contact_url
- label "\#contacts.Contact\#"
- }
- first_names {
- display_col first_names
- label "First Names"
- }
- last_name {
- display_col last_name
- label "Last Name"
- }
- organization_name {
- display_col name
- label "Organization"
- }
- email {
- display_template {
- @entries.email_url;noquote@
- }
- label "\#contacts.Email_Address\#"
- }
- contact_type {
- display_template {
- \#contacts.Organization\#
- \#contacts.Person\#
- }
- label "\#contacts.Contact_Type\#"
- }
- } -filters {
- sortby {
- label "\#contacts.Sort_By\#"
- values {
- {{\#contacts.First_Names\#} first_names}
- {{\#contacts.Last_Name\#} last_name}
- }
- where_clause {}
- }
- start_row {}
- category_id {
- label Categories
- where_clause {$category_id_filter}
- }
- letter {
- label "Letter"
- where_clause {$letter_filter}
- }
- object_type {
- label "\#contacts.Contact_Type\#"
- values {
- {{\#contacts.Organization\#} organization}
- {{\#contacts.Person\#} person}
- }
- where_clause {$object_type_filter}
- }
- searchterm {
- label "Search"
- where_clause {$searchterm_filter}
- }
- status {
- label "\#contacts.Status\#"
- values {
- {{\#contacts.Current\#} current}
- {{\#contacts.Archived\#} archived}
- }
- where_clause {$status_filter}
- }
- num_rows {
- label "\#contacts.Number_of_Rows\#"
- values {
- {10 10}
- {20 20}
- {50 50}
- {100 100}
- {500 500}
- {All ALL}
- }
- }
- } -groupby {
- } -orderby {
- default_value contact_name,asc
- contact_name {
- label "\#contacts.Contact\#"
- orderby_desc "contacts.sort_$sortby desc, contacts.object_type desc, contacts.email desc"
- orderby_asc "contacts.sort_$sortby asc, contacts.object_type desc, contacts.email desc"
- default_direction asc
- }
- email {
- label "\#contacts.Email_Address\#"
- orderby_desc "contacts.email desc, contacts.sort_$sortby desc, contacts.object_type desc"
- orderby_asc "contacts.email asc, contacts.sort_$sortby desc, contacts.object_type desc"
- default_direction asc
- }
- contact_type {
- label "\#contacts.Contact_Type\#"
- orderby_desc "contacts.object_type desc, contacts.sort_$sortby desc, contacts.email desc"
- orderby_asc "contacts.object_type asc, contacts.sort_$sortby desc, contacts.email desc"
- default_direction asc
- }
- } -formats {
- normal {
- label "Table"
- layout table
- row {
- checkbox {}
- edit {}
- contact_name {}
- email {}
- contact_type {}
- }
- }
- csv {
- label "CSV"
- output csv
- row {
- contact_name {}
- first_names {}
- last_name {}
- organization_name {}
- email {}
- contact_type {}
- }
- }
+if { [parameter::get -boolean -parameter "ForceSearchBeforeAdd" -default "0"] } {
+ if { [exists_and_not_null query] && $search_id == "" } {
+ append form_elements {
+ {add_person:text(submit) {label {[_ contacts.Add_Person]}} {value "1"}}
+ {add_organization:text(submit) {label {[_ contacts.Add_Organization]}} {value "1"}}
+ }
}
-
-# This query will override the ad_page_contract value entry_id
-
-# left join category_object_map c on (contact_attrs.party_id = c.object_id)
-set multirow_query "
-"
-# [template::list::sortby_clause -sortby -name entries]
-
-db_multirow -extend { contact_url email_url object_type_pretty } -unclobber entries get_contact_info {} {
- set contact_url "view/$party_id"
- if { [exists_and_not_null email] } {
- set email_url "$email"
- }
- if { $object_type == "organization" } {
- set object_type_pretty "\#contacts.Organization\#"
- } else {
- set object_type_pretty "\#contacts.Person\#"
- }
}
-
-set initial_list_query "
-select distinct upper(substr(sort_$sortby,1,1))
- from contacts
- where party_id is not null
-"
-
-if { [exists_and_not_null category_id_filter ] } {
- append initial_list_query "and $category_id_filter\n"
-}
-# we cannot use the letter filter because it defeats the purpose
-#if { [exists_and_not_null letter_filter ] } {
-# append initial_list_query "and $category_id_filter"
-#
-#}
-if { [exists_and_not_null object_type_filter ] } {
- append initial_list_query "and $object_type_filter\n"
-}
-if { [exists_and_not_null searchterm_filter ] } {
- append initial_list_query "and $searchterm_filter\n"
-}
-if { [exists_and_not_null status_filter ] } {
- append initial_list_query "and $status_filter\n"
-}
-
-set initial_list [db_list_of_lists get_list_of_starting_letters $initial_list_query]
-
-
-
-set letter_bar [contacts::util::letter_bar -letter $letter -export_vars $export_vars_letter_url -initial_list $initial_list]
-
-
-# pagination - hopefully once list builder has pagination documenation
-# this can be built into list builder
-
-
-db_1row get_total_rows "
-select count(*) as total_rows
- from contacts
- where party_id is not null
- [template::list::filter_where_clauses -and -name entries]
-"
-
-if { $num_rows != "ALL" } {
-
- set first_row [expr $start_row + 1]
- set last_row [expr $start_row + $num_rows]
-
- if { $num_rows >= $total_rows } {
- set first_row 1
- set last_row $total_rows
- set start_row 0
+ad_form -name "search" -method "GET" -export {orderby page_size format} -form $form_elements \
+ -on_request {
+ } -edit_request {
+ } -on_refresh {
+ } -on_submit {
+ } -after_submit {
}
-
- if { $last_row >= $total_rows } {
- set next_link_p 0
- set last_row $total_rows
- } else {
- set next_link_p 1
- set next_link_url "?start_row=$last_row&$export_vars_page_nav"
- }
- if { $start_row == "0" } {
- set prev_link_p 0
- } else {
- set prev_link_p 1
- set prev_link_start_row [expr $start_row - $num_rows]
- if { $prev_link_start_row < "0" } {
- set prev_link_start_row "0"
- }
- set prev_link_url "?start_row=$prev_link_start_row&$export_vars_page_nav"
- }
-
-} else {
- set next_link_p 0
- set prev_link_p 0
- set first_row 1
- set last_row $total_rows
-}
-template::list::write_output -name entries
-
-
-
-
-
-
-
-
-
-ad_return_template
-
-