Index: openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs.tcl 20 Apr 2001 20:51:09 -0000 1.1 +++ openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs.tcl 29 Jun 2001 20:33:23 -0000 1.2 @@ -365,32 +365,19 @@ } # Thread based sends - acs_messaging_send_query -message_id $email_message_id -query { - select subscriber_id as recipient_id, thread_id as grouping_id, - sysdate as wait_until - from bboard_thread_subscribers s - where s.thread_id in (select message_id from acs_messages - start with message_id = :message_id - connect by message_id = prior reply_to) - } -bind [list message_id $message_id] + acs_messaging_send_query -message_id $email_message_id \ + -query [db_map thread_subscribers] \ + -bind [list message_id $message_id] # Category based sends - acs_messaging_send_query -message_id $email_message_id -query { - select s.subscriber_id as recipient_id, s.category_id as grouping_id, - sysdate as wait_until - from bboard_category_subscribers s, bboard_category_message_map m - where m.message_id = :message_id - and s.category_id = m.category_id - } -bind [list message_id $message_id] + acs_messaging_send_query -message_id $email_message_id \ + -query [db_map category_subscribers] \ + -bind [list message_id $message_id] # Forum based sends - acs_messaging_send_query -message_id $email_message_id -query { - select s.subscriber_id as recipient_id, s.forum_id as grouping_id, - sysdate as wait_until - from bboard_forum_subscribers s, bboard_forum_message_map m - where m.message_id = :message_id - and s.forum_id = m.forum_id - } -bind [list message_id $message_id] + acs_messaging_send_query -message_id $email_message_id \ + -query [db_map forum_subscribers] \ + -bind [list message_id $message_id] } ad_proc -public bboard_subscribe_forum { @@ -637,6 +624,7 @@ ad_proc -public bboard_message_url { {-absolute:boolean} + {-top:boolean} {message_id} {forum_id ""} } { @@ -651,9 +639,13 @@ # This is a workaround to a bug in acs-messaging-procs/first_ancestor # that won't be deployed until after this next bboard release -akk - db_1row first_ancestor { - select acs_message.first_ancestor(:message_id) as ancestor_id - from dual + if {! $top_p} { + db_1row first_ancestor { + select acs_message.first_ancestor(:message_id) as ancestor_id + from dual + } + } else { + set ancestor_id $message_id } if { $message_id == $ancestor_id } { @@ -681,6 +673,12 @@ return "$prefix[bboard_message_page]?message_id=$message_id&forum_id=$forum_id$anchor" } +ad_proc -public bboard_subscriptions_url {} { + Returns URL for managing bboard subscriptions. +} { + return "[ad_conn location][ad_conn package_url]subscriptions" +} + # if i were cool, i'd implement an Omega(log n) solution for this # i am not however, cool @@ -921,7 +919,7 @@ set result [ad_html_to_text $content] } else { set result "Error display bboard posting as email! -Out bboard system has received a post we don't know how to +Our bboard system has received a post we don't know how to send via email. Please go to the below URL for a better shot at displaying." } @@ -931,7 +929,9 @@ set footer "-------------------- This is a posting from the $forum_name bboard. To reply you can go to: -[bboard_message_url -absolute $message_id $forum_id]" +[bboard_message_url -absolute $message_id $forum_id] +To unsubscribe from this or other bboard posts go to: +[bboard_subscriptions_url]" return "${header} @@ -967,7 +967,7 @@ } set email_mesg_id [bboard_message_new -sender $user_id \ - -title "$forum_name - $title" \ + -title "$title \[$forum_name\]" \ -mime_type "text/plain" \ -content [bboard_alert_message -mime_type $mime_type \ -content $content \ @@ -983,28 +983,46 @@ ad_proc -private bboard_garbage_collect { } { + garbage collects deleted messages, message email artifacts, etc., + In particular, this deletes message objects that aren't currently + in a forum, but that are children of bboard messages or bboard forums. + } { acs_messaging_process_queue - db_dml bboard_alert_clean { - declare - cursor alerts_cursor is - select object_id - from acs_objects - where object_type = 'acs_message' - and object_id not in (select message_id - from bboard_forum_message_map) - and (context_id in (select message_id - from bboard_forum_message_map) - or - context_id in (select object_id - from acs_objects - where object_type = - 'bboard_forum')); - begin - for alert_val in alerts_cursor loop - acs_message.delete(alert_val.object_id); - end loop; - end; + + if {[db_type] == "postgresql"} { + bboard_garbage_collect_postgresql + } else { + db_exec_plsql bboard_alert_clean "" } +} + +ad_proc -private bboard_garbage_collect_postgresql {} { + Works around postgresql bugs that make it impossible + to delete multiple items in a single transaction + + WARNING The Postgres version of these queries + assume that acs-messaging is only used by bboard, + and will delete entries made by any other package. + If this poses a problem, revisit the oracle queries + and port the CONNECT BY query faithfully. +} { + db_foreach get_orphans { + select object_id as message_id + from acs_objects + where object_type = 'acs_message' + and object_id not in (select message_id + from bboard_forum_message_map) + } { + db_dml clear_revision_references { + update cr_items + set latest_revision=null, live_revision=null + where item_id = :message_id + } + + db_exec_plsql delete_message { + select bboard_message__remove(:message_id); + } + } } \ No newline at end of file