ticket_notify

one of the documented procedures in this installation of the ACS
Usage:
ticket_notify   db   what   msg_id   subject   body   { excluded_users "" }
What it does:
send mail to people who should know about this change. what -- new_ticket updated_ticket copied_ticket status_change etc (so we don;t notify submitter on new ticket for example)
Defined in: /web/philip/tcl/ticket-defs.tcl

Source code:

 
    set precedence {watcher admin assignee submitter} 
    # Currently watches unimplemented

    foreach who $precedence { 
        switch $who { 
            watcher { 
                # set all admins 
                set query 1
                set selection [ns_db select $db "select
 u.email as notify_email, u.first_names || ' ' || u.last_name as user_name,
   u.user_id as notify_user_id
 from users_alertable u, ticket_email_alerts tea, ticket_issues ti
 where  u.user_id = tea.user_id 
   and ti.msg_id = $msg_id 
   and (tea.msg_id = ti.msg_id
        or (tea.domain_id = ti.domain_id and tea.project_id is null)
        or (tea.domain_id is null and tea.project_id = ti.project_id)
        or (tea.domain_id = ti.domain_id and tea.project_id = ti.project_id))"]
                set is_a "watcher"
            }
            
            admin { 
                # set all admins -- do not spam if notify_admin_p is false.
                set query 1
                set selection [ns_db select $db "select
  u.email as notify_email,
  u.first_names || ' ' || u.last_name as user_name,
   u.user_id as notify_user_id
 from users_alertable u,
  ticket_issues t, 
  ticket_domains td, 
  ticket_projects tp, 
  user_group_map ugm
 where  u.user_id = ugm.user_id 
  and t.msg_id = $msg_id 
  and td.domain_id = t.domain_id 
  and ugm.group_id = td.group_id 
  and ugm.role = 'administrator'
  and td.notify_admin_p = 't'"]
                set is_a "admin"
            }

            assignee { 
                # set all assigned users 
                set query 1
                set selection [ns_db select $db "select
 u.email as notify_email, u.first_names || ' ' || u.last_name as user_name, 
   u.user_id as notify_user_id
 from users_alertable u, ticket_issue_assignments tia, ticket_issues t
 where tia.msg_id = $msg_id
 and u.user_id = tia.user_id and t.msg_id = $msg_id and tia.msg_id = t.msg_id"]
                set is_a "assignee"
            }
            
            submitter { 
                if {[lsearch -exact {new_ticket} $what] < 0} { 
                    set query 1
                    set selection [ns_db select $db "select
 u.email as notify_email, u.first_names || ' ' || u.last_name as user_name,
   u.user_id as notify_user_id
 from users_alertable u, ticket_issues t where t.user_id = u.user_id and t.msg_id = $msg_id"]
                    set is_a submitter
                } else { 
                    set query 0
                }
            }
            
            default { 
                set query 0
            }
        }

        if { $query } { 
            while { [ns_db getrow $db $selection] } { 
                set_variables_after_query
                if {[lsearch -exact $excluded_users $notify_user_id] < 0} { 
                    # not on the exclude list...
                    set mail_name($notify_email) "$user_name"
                    set mail_user_id($notify_email) "$notify_user_id"
                    set mail_is_a($notify_email) "$is_a"
                }
            }
        }
    }
    set pretty_is_a(watcher) "Has watches set:"
    set pretty_is_a(admin) "Administrator:"
    set pretty_is_a(submitter) "Original submitter:"
    set pretty_is_a(assignee) "Assigned to Ticket:"

    set send_to {}
    set send_to_html {The following people have been notified:<ul>}
    foreach user_is_a $precedence {
        set i 0
        foreach who [array names mail_is_a] { 
            if { $mail_is_a($who) == "$user_is_a"} { 
                if {$i == 0}  { 
                    append send_to " $pretty_is_a($user_is_a)\n"
                }
                append send_to "   $mail_name($who) - $who\n"
                append send_to_html "<li> <a href=\"mailto:$who\">$mail_name($who)</a> <em>($user_is_a)</em><br>\n"
                incr i
            }
        }
    }

    append send_to_html {</ul><p>}

    set extra_headers [ns_set create] 
    
    foreach who [array names mail_is_a] { 
        ns_set update $extra_headers "Reply-To" [ticket_reply_email_addr $msg_id $mail_user_id($who)] 

	if {[catch {ns_sendmail [ticket_mail_send $who]  [ticket_reply_email_addr]  $subject  [ticket_mail_send_body $who "$body\n\n$send_to\nManage via [ad_url]/ticket/issue-view.tcl?msg_id=$msg_id"]  $extra_headers} errmsg]} { 
            append send_to_html "Error for $who<pre>$errmsg</pre>"
        }
    }

    append send_to_html "Subject: <strong>[ns_quotehtml $subject]</strong><pre>[ns_quotehtml $body]</pre>\nManage via <a href=\"[ad_url]/ticket/issue-view?msg_id=$msg_id\">/ticket/issue-view.tcl?msg_id=$msg_id</a>"
    return $send_to_html


philg@mit.edu