Index: openacs-4/packages/contacts/www/message.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/message.tcl,v diff -u -r1.37 -r1.38 --- openacs-4/packages/contacts/www/message.tcl 21 Jun 2007 20:06:42 -0000 1.37 +++ openacs-4/packages/contacts/www/message.tcl 23 Jun 2007 10:18:17 -0000 1.38 @@ -43,37 +43,44 @@ set party_ids [list] } -if { ![empty_string_p $group_id] } { +set invalid_party_ids [list] + +if { $group_id ne "" } { + + # Make sure the user has write permission on the group + permission::require_permission -object_id $group_id -privilege "write" + + # Get the party_ids from the group members if { [contact::group::mapped_p -group_id $group_id] } { - set party_ids [group::get_members -group_id $group_id] + set valid_party_ids [group::get_members -group_id $group_id] } -} -if { [exists_and_not_null party_id] } { - foreach p_id $party_id { - if {[lsearch $party_ids $party_id] < 0} { - lappend party_ids $p_id +} else { + + if { [exists_and_not_null party_id] } { + foreach p_id $party_id { + if {[lsearch $party_ids $party_id] < 0} { + lappend party_ids $p_id + } } } -} - -if { [exists_and_not_null to] } { - foreach party_id $to { - lappend party_ids $party_id + + if { [exists_and_not_null to] } { + foreach party_id $to { + lappend party_ids $party_id + } } -} - -set invalid_party_ids [list] - -foreach id $party_ids { - if {[contact::visible_p -party_id $id -package_id [ad_conn package_id]]} { - lappend valid_party_ids $id - } else { - append invalid_party_ids $id + + + # Make sure the parties are visible to the user + foreach id $party_ids { + if {[contact::visible_p -party_id $id -package_id [ad_conn package_id]]} { + lappend valid_party_ids $id + } } } -set party_count [llength $party_ids] +set party_count [llength $valid_party_ids] set title "[_ contacts.Messages]" set user_id [ad_conn user_id] set context [list $title] @@ -85,34 +92,20 @@ ad_script_abort } -foreach party_id $valid_party_ids { - set contact_name [contact::name -party_id $party_id] - set contact_url [contact::url -party_id $party_id] - set contact_link "${contact_name}" - set sort_key [string toupper $contact_name] - # Check if the party has a valid e-mail address we can send to - lappend recipients [list $contact_name $party_id $contact_link] -} - -set sorted_recipients [ams::util::sort_list_of_lists -list $recipients] set recipients [list] set invalid_recipients [list] set party_ids [list] - -foreach recipient $sorted_recipients { - set party_id [lindex $recipient 1] - set contact_link [lindex $recipient 2] +# Make sure that we can actually send the message +foreach party_id $valid_party_ids { if { [lsearch [list "letter" "label" "envelope"] $message_type] >= 0 } { # Check if we can send a letter to this party set letter_p [contact::message::mailing_address_exists_p -party_id $party_id] if { $letter_p } { lappend party_ids $party_id - lappend recipients $contact_link } else { lappend invalid_party_ids $party_id - lappend invalid_recipients $contact_link } } elseif { $message_type == "email" } { @@ -127,27 +120,43 @@ set emp_addr [contact::email -party_id $employer_id] if { ![empty_string_p $emp_addr] } { lappend party_ids $employer_id - lappend recipients $contact_link } else { lappend invalid_party_ids $party_id - lappend invalid_recipients $contact_link } } else { lappend invalid_party_ids $party_id - lappend invalid_recipients $contact_link } } else { lappend party_ids $party_id - lappend recipients $contact_link } } else { # We are unsure what to send, so just assume for the time being we can send it to them lappend party_ids $party_id - lappend recipients $contact_link } } +# If we are passing in a group, do not show the individual users +if { [empty_string_p $group_id] } { + + # Prepare the recipients + foreach party_id $party_ids { + set contact_name [contact::name -party_id $party_id] + set contact_url [contact::url -party_id $party_id] + lappend recipients "${contact_name}" + } + +} else { + lappend recipients "[group::title -group_id $group_id]" +} + +# Deal with the invalid recipients +foreach party_id $invalid_party_ids { + set contact_name [contact::name -party_id $party_id] + set contact_url [contact::url -party_id $party_id] + lappend invalid_recipients "${contact_name}" +} + set recipients [join $recipients ", "] set invalid_recipients [join $invalid_recipients ", "] if { [llength $invalid_recipients] > 0 } { @@ -199,6 +208,7 @@ set form_elements { file_ids:text(hidden) party_ids:text(hidden) + group_id:text(hidden) return_url:text(hidden) folder_id:text(hidden) object_id:text(hidden) @@ -218,10 +228,8 @@ set message_type [lindex $op 1] if { [lsearch [list "header" "footer"] $message_type] < 0 } { lappend message_options [list "-- [_ contacts.New] [lindex $op 0] --" $message_type] - } else { - set ${message_type}_options [list [list [_ contacts.--none--] ""]] } - + # set email_text and letter_text and others in the future set "${message_type}_text" [lindex $op 0] } @@ -274,12 +282,19 @@ } else { set title [_ contacts.create_$message_type] + + if {$group_id ne ""} { + # Get the group template + set message_src "/packages/contacts/lib/${message_type}_group" + } else { + set message_src "/packages/contacts/lib/${message_type}" + } } set context [list $title] if { [string is false [exists_and_not_null message]] } { - set signature_list [list [list [_ contacts.--none--] ""]] + set signature_list [list] set reset_title $title set reset_signature_id $signature_id db_foreach signatures "select title, signature_id, default_p @@ -293,10 +308,12 @@ } set title $reset_title set signature_id $reset_signature_id - append form_elements { - {signature_id:text(select) - {label "[_ contacts.Signature]"} - {options {$signature_list}} + if {$signature_list ne ""} { + append form_elements { + {signature_id:text(select) + {label "[_ contacts.Signature]"} + {options {$signature_list}} + } } } } @@ -311,7 +328,7 @@ set edit_buttons [list [list "[_ contacts.Next]" create]] -# the message form will rest party_ids so we need to carry it over +# the message form will reset party_ids so we need to carry it over set new_party_ids $party_ids ad_form -action message \ -name message \