send_one_group_spam_message spam_idWhat it does:
This procedure sends out a group spam message with the given spam_id, provided the spam is approved ( i.e. either the spam policy of the group is "open", or policy is "wait" and the group administrator approved it)Defined in: /web/philip/tcl/user-group-defs.tcl
Source code:
ns_log Notice "running send_one_group_spam_message"
set db [ns_db gethandle]
# Get information related to this spam from the group_spam_history_table
set selection [ns_db select $db "select *
from group_spam_history
where spam_id = $spam_id
and approved_p = 't'
and send_date is null"]
if { [ns_db getrow $db $selection] == 0} {
# no sendable spam
ns_db releasehandle $db
ns_log Notice "send_one_group_spam_message : no spam to send"
return
}
set_variables_after_query
set group_name [database_to_tcl_string $db "
select group_name
from user_groups
where group_id = $group_id"]
set admin_email [database_to_tcl_string $db "
select admin_email
from user_groups
where group_id = $group_id"]
set group_spam_removal_string "[group_spam_removal_blurb $db $group_id]"
if { [lsearch $send_to "all"] != -1 } {
set role_clause ""
} else {
foreach recipient_role $send_to {
append ug_role_clause "ug.role='$recipient_role' "
}
set role_clause "and ("
append role_clause [join $ug_role_clause " or "] )
}
set sql_query "select distinct u.email as receiver_email,
u.user_id as receiver_id ,
u.first_names as receiver_first_names,
u.last_name as receiver_last_name
from user_group_map ug, users_spammable u
where ug.group_id = $group_id
$role_clause
and ug.user_id = u.user_id
and not exists ( select 1
from group_member_email_preferences
where group_id = $group_id
and user_id = u.user_id
and dont_spam_me_p = 't')
and not exists ( select 1
from user_user_bozo_filter
where origin_user_id = u.user_id
and target_user_id = $sender_id)"
set selection_list [database_to_tcl_list_list $db $sql_query]
# Release the handle while sending mail
ns_db releasehandle $db
# query sets email for each recipient
regsub -all "\r" $body "" body_stripped
foreach row $selection_list {
set receiver_email [lindex $row 0]
set receiver_id [lindex $row 1]
set receiver_first_names [lindex $row 2]
set receiver_last_name [lindex $row 3]
set message_body $body_stripped
# This appends group-wide removal blurb
append message_body $group_spam_removal_string
# This appends site-wide bozo-filter blurb,
# so, the receiver doesn't get any more email from sender
append message_body "[bozo_filter_blurb $sender_id]"
# substitute all user/group specific data in the message body
regsub -all "<first_names>" $message_body $receiver_first_names message_body
regsub -all "<last_name>" $message_body $receiver_last_name message_body
regsub -all "<email>" $message_body $receiver_email message_body
regsub -all "<group_name>" $message_body $group_name message_body
regsub -all "<admin_email>" $message_body $admin_email message_body
ns_sendmail $receiver_email $from_address $subject $message_body
incr n_receivers_actual
}
# Log that the emails went out
set db [ns_db gethandle subquery]
ns_db dml $db "update group_spam_history
set n_receivers_actual=$n_receivers_actual,
send_date = sysdate
where spam_id = $spam_id "
ns_db releasehandle $db
ns_log Notice "send_one_group_spam_message : finished sending group spam id $spam_id"