Index: openacs-4/packages/mail-tracking/lib/messages.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/mail-tracking/lib/messages.tcl,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/mail-tracking/lib/messages.tcl 8 Jun 2006 15:56:43 -0000 1.28.2.2 @@ -0,0 +1,280 @@ +# Expects the following optional parameters (in each combination): +# +# recipient - to filter mails for a single receiver +# sender - to filter mails for a single sender +# object_id - to filter mails for a object_id +# page - to filter the pagination +# page_size - to know how many rows show (optional default to 10) +# show_filter_p - to show or not the filters in the inlcude, default to "t" +# from_package_id - to watch mails of this package instance +# elements - a list of elements to show in the list template. If not provided will show all elements. +# Posible elemets are: sender recipient pkg_id subject object file_ids body sent_date + +ad_page_contract { + +@author Nima Mazloumi +@creation-date Mon May 30 17:55:50 CEST 2005 +@cvs-id $Id: messages.tcl,v 1.28.2.2 2006/06/08 15:56:43 maltes Exp $ +} -query { + recipient_id:optional + sender_id:optional + recipient:optional + {emp_mail_f:optional 1} + sender:optional + package_id:optional + object_id:optional + object:optional + {orderby:optional "sent_date,desc"} +} -properties { + show_filter_p + acs_mail_log:multirow + context:onevalue +} + +set page_title [ad_conn instance_name] +set context [list "index"] + +set required_param_list [list] +set optional_param_list [list from_package_id recipient_id object_id] +set optional_unset_list [list pkg_id object recipient sender] + +foreach required_param $required_param_list { + if {![info exists $required_param]} { + return -code error "$required_param is a required parameter." + } +} + +foreach optional_param $optional_param_list { + if {![info exists $optional_param]} { + set $optional_param {} + } +} + +foreach optional_unset $optional_unset_list { + if {[info exists $optional_unset]} { + if {[empty_string_p [set $optional_unset]]} { + unset $optional_unset + } + } +} + + +if { [exists_and_not_null sender_id] } { + set sender $sender_id +} + +if { [exists_and_not_null recipient_id] } { + set recipient $recipient_id +} + +if { [exists_and_not_null object_id] } { + set object $object_id +} + +if { [exists_and_not_null from_package_id] } { + set pkg_id $from_package_id +} + +if { ![exists_and_not_null show_filter_p] } { + set show_filter_p "t" +} + +if { ![exists_and_not_null page_size] } { + set page_size 5 +} + +set tracking_url [apm_package_url_from_key "mail-tracking"] +# Wich elements will be shown on the list template +set rows_list [list] +if {![exists_and_not_null elements] } { + set rows_list [list sender {} recipient {} pkg_id {} subject {} object {} file_ids {} body {} sent_date {}] +} else { + foreach element $elements { + lappend rows_list $element + lappend rows_list [list] + } +} + +set filters [list \ + sender { + label "[_ mail-tracking.Sender]" + where_clause "sender_id = :sender" + } \ + object { + label "[_ mail-tracking.Object_id]" + where_clause "object_id = :object" + } \ + pkg_id { + label "[_ mail-tracking.Package]" + where_clause "package_id = :pkg_id" + } + ] + +if { [apm_package_installed_p organizations] && [exists_and_not_null recipient]} { + set org_p [organization::organization_p -party_id $recipient] + if { $org_p } { + lappend filters emp_mail_f { + label "[_ mail-tracking.Emails_to]" + values { {"[_ mail-tracking.Organization]" 1} { "[_ mail-tracking.Employees]" 2 }} + } + } + + if { $org_p && [string equal $emp_mail_f 2] } { + set emp_list [contact::util::get_employees -organization_id $recipient] + lappend emp_list $recipient + set recipient_where_clause " and mlrm.recipient_id in ([template::util::tcl_to_sql_list $emp_list])" + } else { + set recipient_where_clause " and mlrm.recipient_id = :recipient" + } +} elseif { [exists_and_not_null recipient] } { + set recipient_where_clause " and mlrm.recipient_id = :recipient" +} else { + set recipient_where_clause "" +} + + +template::list::create \ + -name messages \ + -selected_format normal \ + -multirow messages \ + -key acs_mail_log.log_id \ + -page_size $page_size \ + -page_flush_p 1 \ + -page_query_name "messages_pagination" \ + -row_pretty_plural "[_ mail-tracking.messages]" \ + -elements { + sender { + label "[_ mail-tracking.Sender]" + display_template { + @messages.sender_name@ + } + } + recipient { + label "[_ mail-tracking.Recipient]" + display_template { + @messages.recipient;noquote@ + } + } + pkg_id { + label "[_ mail-tracking.Package]" + display_template { + @messages.package_name@ + } + } + subject { + label "[_ mail-tracking.Subject]" + } + object { + label "[_ mail-tracking.Object_id]" + display_template { + @messages.object_id@ + } + } + file_ids { + label "[_ mail-tracking.Files]" + display_template {@messages.download_files;noquote@} + } + body { + label "[_ mail-tracking.Body]" + display_template { + #mail-tracking.View# + } + } + sent_date { + label "[_ mail-tracking.Sent_Date]" + } + } -orderby { + sender { + orderby sender_id + label "[_ mail-tracking.Sender]" + } + pkg_id { + orderby package_id + label "[_ mail-tracking.Package]" + } + subject { + orderby subject + label "[_ mail-tracking.Subject]" + } + sent_date { + orderby sent_date + label "[_ mail-tracking.Sent_Date]" + } + } -formats { + normal { + label "Table" + layout table + row $rows_list + } + } -filters $filters \ + + +db_multirow -extend { file_ids object_url sender_name recipient package_name package_url url_message_id download_files} messages select_messages { } { + + set sender_name [party::name -party_id $sender_id] + set reciever_list [list] + db_foreach reciever_id {select recipient_id from acs_mail_log_recipient_map where type ='to' and log_id = :log_id and recipient_id is not null} { + lappend reciever_list [party::name -party_id $recipient_id] + } + set recipient [join $reciever_list "
"] + + if {[exists_and_not_null package_id]} { + set package_name [apm_instance_name_from_id $package_id] + set package_url [apm_package_url_from_id $package_id] + } else { + set package_name "" + set package_url "" + } + + + set count 0 + while {[regexp {^(.*?)\t?=\?[^\?]+\?Q\?(.*?)\?=\n?(.*?)$} $subject match before quoted after] && $count < 5} { + incr count + set result "" + for { set i 0 } { $i < [string length $quoted] } { incr i } { + set current [string index $quoted $i] + if {$current == "="} { + incr i + set high [string index $quoted $i] + incr i + set low [string index $quoted $i] + set current [binary format H2 "$high$low"] + } elseif {[string eq $current "_"]} { + set current " " + } + append result $current + } + set subject "$before$result$after" + } + + set files [list] + # We get the related files for all the object_types + set content_types [list content_revision content_item file_storage_object image] + foreach content_type $content_types { + + foreach file [application_data_link::get_linked -from_object_id $log_id -to_object_type "$content_type"] { + if { [string equal $content_type "content_revision"] } { + lappend files [item::get_item_from_revision $file] + } else { + lappend files $file + } + } + } + + set download_files "" + + foreach file $files { + set title [content::item::get_title -item_id $file] + if { [empty_string_p $title] } { + set title [acs_object_name $file] + } + # Creating the link to dowload the files + append download_files "$title
" + } + + set object_url "/o/$object_id" +} + + + +ad_return_template \ No newline at end of file