delivery-method-procs.tcl

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.

Location:
packages/notifications/tcl/delivery-method-procs.tcl
Created:
2002-05-24
Author:
Ben Adida
CVS Identification:
$Id: delivery-method-procs.tcl,v 1.16.2.3 2022/07/12 14:02:11 antoniop Exp $

Procedures in this file

Detailed information

notification::delivery::delete (public)

 notification::delivery::delete -delivery_method_id delivery_method_id

Unregister a delivery method with the notification service.

Switches:
-delivery_method_id (required)

Testcases:
No testcase defined.

notification::delivery::get_id (public)

 notification::delivery::get_id -short_name short_name

Return the delivery_method_id from the short_name.

Switches:
-short_name (required)

Testcases:
No testcase defined.

notification::delivery::get_impl_key (private)

 notification::delivery::get_impl_key \
    -delivery_method_id delivery_method_id

Return the service contract implementation key for notification delivery methods

Switches:
-delivery_method_id (required)

Testcases:
No testcase defined.

notification::delivery::new (public)

 notification::delivery::new [ -delivery_method_id delivery_method_id ] \
    -sc_impl_id sc_impl_id -short_name short_name \
    -pretty_name pretty_name

Register a new delivery method with the notification service.

Switches:
-delivery_method_id (optional)
-sc_impl_id (required)
-short_name (required)
-pretty_name (required)

Testcases:
No testcase defined.

notification::delivery::scan_replies (public)

 notification::delivery::scan_replies \
    -delivery_method_id delivery_method_id

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.

Switches:
-delivery_method_id (required)

Testcases:
No testcase defined.

notification::delivery::send (public)

 notification::delivery::send -delivery_method_id delivery_method_id \
    [ -reply_object_id reply_object_id ] \
    -notification_type_id notification_type_id \
    [ -from_user_id from_user_id ] -to_user_id to_user_id \
    -subject subject -content_text content_text \
    -content_html content_html [ -file_ids 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.

Switches:
-delivery_method_id (required)
-reply_object_id (optional)
-notification_type_id (required)
-from_user_id (optional)
-to_user_id (required)
-subject (required)
-content_text (required)
-content_html (required)
-file_ids (optional)

Testcases:
No testcase defined.

notification::delivery::update_sc_impl_id (private)

 notification::delivery::update_sc_impl_id \
    [ -delivery_method_id delivery_method_id ] -sc_impl_id sc_impl_id

Register a new service contract implementation with an existing delivery method.

Switches:
-delivery_method_id (optional)
-sc_impl_id (required)

Testcases:
No testcase defined.
[ hide source ] | [ make this the default ]

Content File Source

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: