delivery-method-procs.tcl
Does not contain a contract.
- Location:
- /packages/notifications/tcl/delivery-method-procs.tcl
Related Files
- packages/notifications/tcl/delivery-method-procs.xql
- packages/notifications/tcl/delivery-method-procs.tcl
- packages/notifications/tcl/delivery-method-procs-postgresql.xql
- packages/notifications/tcl/delivery-method-procs-oracle.xql
[ hide source ] | [ make this the default ]
File Contents
ad_library { Notification Delivery Methods Functions to support notification delivery methods. A delivery method is a means by which a notification is sent to a user. "Email" is a common one, but others, like "sms", may exist. The delivery method integration is done via acs-service-contract: any new delivery method must implement this service contract. @creation-date 2002-05-24 @author Ben Adida <ben@openforce.biz> @cvs-id $Id: delivery-method-procs.tcl,v 1.16.2.3 2022/07/12 14:02:11 antoniop Exp $ } namespace eval notification::delivery {} d_proc -private notification::delivery::get_impl_key { {-delivery_method_id:required} } { Return the service contract implementation key for notification delivery methods } { return [db_string select_impl_key {}] } d_proc -public notification::delivery::send { {-delivery_method_id:required} {-reply_object_id ""} {-notification_type_id:required} {-from_user_id ""} {-to_user_id:required} {-subject:required} {-content_text:required} {-content_html:required} {-file_ids ""} } { do the delivery of certain content to a particular user using a particular delivery method. This is just a wrapper proc that sets up the call to the service contract implementation for a given delivery method. } { #need to check if its ok to notify this user in this way. For now just checks if they are an approved user. if { ![notification::security::can_notify_user -user_id $to_user_id -delivery_method_id $delivery_method_id] } { ns_log debug "notification::delivery::send: Blocked notification to $to_user_id subject:$subject" return "Blocked" } # Get the implementation key set impl_key [get_impl_key -delivery_method_id $delivery_method_id] # Prepare the arguments set args [list $from_user_id $to_user_id $reply_object_id $notification_type_id $subject $content_text $content_html $file_ids] # Make the generic call return [acs_sc::invoke -contract NotificationDeliveryMethod -operation Send -call_args $args -impl $impl_key] } d_proc -public notification::delivery::scan_replies { {-delivery_method_id:required} } { scan for replies. Every delivery method allows for replies. This is the wrapper proc that indicates to the delivery method service contract implementation that it's time to scan for replies. } { # Get the implementation key set impl_key [get_impl_key -delivery_method_id $delivery_method_id] # Prepare the arguments set args [list] # ns_log Notice "NOTIF-DELIV-METHOD: about to call acs_sc on $impl_key" # Make the generic call return [acs_sc::invoke -contract NotificationDeliveryMethod -operation ScanReplies -call_args $args -impl $impl_key] } d_proc -public notification::delivery::new { {-delivery_method_id ""} {-sc_impl_id:required} {-short_name:required} {-pretty_name:required} } { Register a new delivery method with the notification service. } { set extra_vars [ns_set create s \ delivery_method_id $delivery_method_id \ sc_impl_id $sc_impl_id \ short_name $short_name \ pretty_name $pretty_name \ ] return [package_instantiate_object \ -extra_vars $extra_vars \ "notification_delivery_method"] } d_proc -public notification::delivery::delete { {-delivery_method_id:required} } { Unregister a delivery method with the notification service. } { db_exec_plsql delete {} } d_proc -private notification::delivery::update_sc_impl_id { {-delivery_method_id ""} {-sc_impl_id:required} } { Register a new service contract implementation with an existing delivery method. } { db_dml update {} } d_proc -public notification::delivery::get_id { {-short_name:required} } { Return the delivery_method_id from the short_name. } { return [db_string select_delivery_method_id {}] } # Local variables: # mode: tcl # tcl-indent-level: 4 # indent-tabs-mode: nil # End: