Index: openacs-4/packages/forums/tcl/forums-install-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/forums/tcl/forums-install-procs.tcl,v diff -u -r1.10 -r1.11 --- openacs-4/packages/forums/tcl/forums-install-procs.tcl 7 Aug 2017 23:48:11 -0000 1.10 +++ openacs-4/packages/forums/tcl/forums-install-procs.tcl 3 Sep 2024 15:37:38 -0000 1.11 @@ -11,13 +11,25 @@ ad_proc -private forum::install::package_install {} { package install callback } { - forum::sc::register_implementations + # Since before 5.5, search is implemented using callbacks. New + # installations will not register search service contract + # implementations. See forums-callback-procs. + # forum::sc::register_implementations + + # Create notification types + forum::install::create_notification_types } ad_proc -private forum::install::package_uninstall {} { package uninstall callback } { - forum::sc::unregister_implementations + # Since before 5.5, search is implemented using callbacks. New + # installations will not register search service contract + # implementations. See forums-callback-procs. + # forum::sc::unregister_implementations + + # Delete notification types + forum::install::delete_notification_types } ad_proc -private forum::install::package_upgrade { @@ -32,11 +44,192 @@ -spec { 1.1d3 1.1d4 { # just need to install the forum_forum callback - forum::sc::register_forum_fts_impl + # This proc is deprecated, so we just skip it + # See acs-api-browser.graph__bad_calls automated test + # forum::sc::register_forum_fts_impl } + 1.3.1d17 1.3.1d18 { + # Unregister search service contract implementation + # and rely on callbacks from now on. + forum::sc::unregister_implementations + } + 1.3.1d18 1.4.0d1 { + ## Forum moderator notifications + forum::install::create_moderator_notification_types + } } } +ad_proc -private forum::install::create_notification_types {} { + Create the Forum Notification types used to notify users of forum + changes. +} { + ## Forum user notifications + forum::install::create_user_notification_types + + ## Forum moderator notifications + forum::install::create_moderator_notification_types +} + +ad_proc -private forum::install::create_user_notification_types {} { + Create the Forum Notification types used to notify users of forum + changes. +} { + # Entire forum + set spec { + contract_name "NotificationType" + owner "forums" + name "forums_forum_notif_type" + pretty_name "forums_forum_notif_type" + aliases { + GetURL forum::notification::get_url + ProcessReply forum::notification::process_reply + } + } + set sc_impl_id [acs_sc::impl::new_from_spec -spec $spec] + + set type_id [notification::type::new \ + -sc_impl_id $sc_impl_id \ + -short_name "forums_forum_notif" \ + -pretty_name "Forum Notification" \ + -description "Notifications for Entire Forums"] + + # Enable the various intervals and delivery methods + db_dml insert_intervals { + insert into notification_types_intervals + (type_id, interval_id) + select :type_id, interval_id + from notification_intervals where name in ('instant','hourly','daily') + } + db_dml insert_del_method { + insert into notification_types_del_methods + (type_id, delivery_method_id) + select :type_id, delivery_method_id + from notification_delivery_methods where short_name in ('email') + } + + # Message + set spec { + contract_name "NotificationType" + owner "forums" + name "forums_message_notif_type" + pretty_name "forums_message_notif_type" + aliases { + GetURL forum::notification::get_url + ProcessReply forum::notification::process_reply + } + } + set sc_impl_id [acs_sc::impl::new_from_spec -spec $spec] + + set type_id [notification::type::new \ + -sc_impl_id $sc_impl_id \ + -short_name "forums_message_notif" \ + -pretty_name "Message Notification" \ + -description "Notifications for Message Thread"] + + # Enable the various intervals and delivery methods + db_dml insert_intervals { + insert into notification_types_intervals + (type_id, interval_id) + select :type_id, interval_id + from notification_intervals where name in ('instant','hourly','daily') + } + db_dml insert_del_method { + insert into notification_types_del_methods + (type_id, delivery_method_id) + select :type_id, delivery_method_id + from notification_delivery_methods where short_name in ('email') + } +} + +ad_proc -private forum::install::create_moderator_notification_types {} { + Create the Forum Notification types used to notify usersmoderators + of forum changes. +} { + # Entire forum + set spec { + contract_name "NotificationType" + owner "forums" + name "forums_forum_moderator_notif_type" + pretty_name "forums_forum_moderator_notif_type" + aliases { + GetURL forum::notification::get_url + ProcessReply forum::notification::process_reply + } + } + set sc_impl_id [acs_sc::impl::new_from_spec -spec $spec] + + set type_id [notification::type::new \ + -sc_impl_id $sc_impl_id \ + -short_name "forums_forum_moderator_notif" \ + -pretty_name "Forum Moderator Notification" \ + -description "Moderator notifications for Entire Forums"] + + # Enable the various intervals and delivery methods + db_dml insert_intervals { + insert into notification_types_intervals + (type_id, interval_id) + select :type_id, interval_id + from notification_intervals where name in ('instant','hourly','daily') + } + db_dml insert_del_method { + insert into notification_types_del_methods + (type_id, delivery_method_id) + select :type_id, delivery_method_id + from notification_delivery_methods where short_name in ('email') + } + + # Message + set spec { + contract_name "NotificationType" + owner "forums" + name "forums_message_moderator_notif_type" + pretty_name "forums_message_moderator_notif_type" + aliases { + GetURL forum::notification::get_url + ProcessReply forum::notification::process_reply + } + } + set sc_impl_id [acs_sc::impl::new_from_spec -spec $spec] + + set type_id [notification::type::new \ + -sc_impl_id $sc_impl_id \ + -short_name "forums_message_moderator_notif" \ + -pretty_name "Message Moderator Notification" \ + -description "Moderator notifications for Message Thread"] + + # Enable the various intervals and delivery methods + db_dml insert_intervals { + insert into notification_types_intervals + (type_id, interval_id) + select :type_id, interval_id + from notification_intervals where name in ('instant','hourly','daily') + } + db_dml insert_del_method { + insert into notification_types_del_methods + (type_id, delivery_method_id) + select :type_id, delivery_method_id + from notification_delivery_methods where short_name in ('email') + } +} + +ad_proc -private forum::install::delete_notification_types {} { + Delete notification types on uninstall +} { + foreach {short_name impl_name} { + "forums_forum_notif" "forums_forum_notif_type" + "forums_message_notif" "forums_message_notif_type" + "forums_forum_moderator_notif" "forums_forum_moderator_notif_type" + "forums_message_moderator_notif" "forums_message_moderator_notif_type" + } { + notification::type::delete -short_name $short_name + + acs_sc::impl::delete \ + -contract_name "NotificationType" \ + -impl_name $impl_name + } +} + ad_proc -private ::install::xml::action::forum-create { node } { Create a forum instance from an install.xml file } { @@ -73,16 +266,31 @@ @author realfsen@km.co.at @creation-date 2009.03.24 } { - # Delete each message in the each forum - foreach set_id [forum::list_forums -package_id $package_id] { - ad_ns_set_to_tcl_vars $set_id ;# get the forum_id - foreach message_id [db_list _ "select message_id from forums_messages where forum_id = :forum_id"] { - forum::message::delete -message_id $message_id + # + # For all forums in this package... + # + db_foreach get_forums { + select forum_id from forums_forums where package_id = :package_id + } { + # + # ...delete each message,... + # + db_foreach get_messages { + select message_id from forums_messages where forum_id = :forum_id + } { + forum::message::delete -message_id $message_id + } + + # + # ...delete the forum,... + # + forum::delete -forum_id $forum_id + + # + # ...and invoke the deletion callback. + # + callback::forum::forum_delete::contract -package_id $package_id -forum_id $forum_id } - db_exec_plsql _ "select forums_forum__delete(:forum_id)" - # ÅR: is this really necessary ?? - callback::forum::forum_delete::contract -package_id $package_id -forum_id $forum_id - } } # Local variables: