Index: openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs-oracle.xql 29 Jun 2001 20:33:23 -0000 1.1 @@ -0,0 +1,495 @@ + + + + oracle8.1.6 + + + + + begin + :1 := bboard_forum.forum_p(:forum_id); + end; + + + + + + + + + begin + :1 := bboard_forum.new ( + forum_id => :forum_id, + short_name => :short_name, + charter => :charter, + moderated_p => :moderated_p, + bboard_id => :bboard_id, + context_id => :context_id, + creation_user => :creation_user, + creation_ip => :creation_ip + ); + end; + + + + + + + + + begin + bboard_forum.set_attrs ( + forum_id => :forum_id, + short_name => :short_name, + charter => :charter, + moderated_p => :moderated_p, + bboard_id => :bboard_id + ); + end; + + + + + + + + + begin + :1 := bboard_category.category_p(:category_id); + end; + + + + + + + + + begin + :1 := bboard_category.new ( + category_id => :category_id, + short_name => :short_name, + description => :description, + forum_id => :forum_id + ); + end; + + + + + + + + + begin + bboard_category.set_attrs ( + category_id => :category_id, + short_name => :short_name, + description => :description, + forum_id => :forum_id + ); + end; + + + + + + + + + begin + :1 := bboard_message.new ( + message_id => :message_id, + reply_to => :reply_to, + sent_date => :sent_date, + sender => :sender, + title => :title, + mime_type => :mime_type, + data => empty_blob(), + context_id => :context_id, + creation_user => :creation_user, + creation_ip => :creation_ip + ); + end; + + + + + + + + + update cr_revisions + set content = empty_blob() + where revision_id = :revision_id + returning content into :1 + + + + + + + + + begin + bboard_message.set_attrs ( + message_id => :message_id, + reply_to => :reply_to, + sent_date => :sent_date, + sender => :sender, + title => :title, + mime_type => :mime_type, + context_id => :context_id + ); + end; + + + + + + + + + update cr_revisions + set content = empty_blob() + where revision_id = :revision_id + returning content into :1 + + + + + + + + + begin + bboard_message.clear_categories ( :message_id ); + end; + + + + + + + + + begin + bboard_message.add_category ( + message_id => :message_id, + category_id => :category_id + ); + end; + + + + + + + + + begin + bboard_message.remove_category ( + message_id => :message_id, + category_id => :category_id + ); + end; + + + + + + + + + begin + bboard_message.set_status ( + message_id => :message_id, + forum_id => :forum_id, + status => :status + ); + end; + + + + + + + + + begin + bboard_forum.subscribe ( + forum_id => :forum_id, + subscriber_id => :subscriber_id + ); + end; + + + + + + + + + begin + bboard_category.subscribe ( + category_id => :category_id, + subscriber_id => :subscriber_id + ); + end; + + + + + + + + + begin + bboard_message.subscribe ( + thread_id => :thread_id, + subscriber_id => :subscriber_id + ); + end; + + + + + + + + + select count(*) as subscribed_p from bboard_thread_subscribers + where subscriber_id = :user_id + and thread_id in (select message_id + from acs_messages b + connect by b.message_id = prior b.reply_to + start with message_id = :message_id) + + + + + + + + + + select bboard_forum.forum_containing_message(:message_id) as forum_id + from dual + + + + + + + + + select acs_message.first_ancestor(:message_id) as ancestor_id + from dual + + + + + + + + + begin + :1 := acs_message.new_image ( + message_id => :message_id, + image_id => :file_id, + file_name => :short_filename, + title => :title, + mime_type => :mime_type, + content => empty_blob(), + width => :width, + height => :height, + creation_user => :user_id, + creation_ip => :creation_ip, + is_live => 't' + ); + end; + + + + + + + + + select content_item.get_latest_revision(:file_id) as revision_id + from dual + + + + + + + + + update cr_revisions + set content = empty_blob() + where revision_id = :revision_id + returning content into :1 + + + + + + + + + begin + :1 := acs_message.new_file ( + message_id => :message_id, + file_id => :file_id, + file_name => :short_filename, + title => :title, + mime_type => :mime_type, + content => empty_blob(), + creation_user => :user_id, + creation_ip => :creation_ip, + is_live => 't' + ); + end; + + + + + + + + + select content_item.get_latest_revision(:file_id) as revision_id + from dual + + + + + + + + + update cr_revisions + set content = empty_blob() + where revision_id = :revision_id + returning content into :1 + + + + + + + + + select image_id + from images + where image_id = content_item.get_latest_revision(:file_id) + + + + + + + + + begin + acs_message.delete_image(:file_id); + end; + + + + + + + + + begin + acs_message.delete_file(:file_id); + end; + + + + + + + + +update cr_items + set latest_revision=null, live_revision=null + where item_id = -1; + + + + + + + + declare + cursor alerts_cursor is + + select object_id + from acs_objects + where object_id in (select object_id + from acs_objects + where object_type = 'acs_message' + start with context_id in (select forum_id + from bboard_forums) + connect by prior object_id = context_id) + and object_id not in (select message_id + from bboard_forum_message_map) + order by object_id desc; + begin + for alert_val in alerts_cursor loop + bboard_message.remove(alert_val.object_id); + end loop; + end; + + + + + + + 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) + and s.subscriber_id in (select party_id + from acs_object_party_privilege_map + where object_id = :message_id + and privilege = 'bboard_read_message') + + + + + + 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 + and s.subscriber_id in (select party_id + from acs_object_party_privilege_map + where object_id = :message_id + and privilege = 'bboard_read_message') + + + + + + + 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 + and s.subscriber_id in (select party_id + from acs_object_party_privilege_map + where object_id = :message_id + and privilege = 'bboard_read_message') + + + + Index: openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs-postgresql.xql 29 Jun 2001 20:33:23 -0000 1.1 @@ -0,0 +1,461 @@ + + + + postgresql7.1 + + + + select bboard_forum__forum_p(:forum_id); + + + + + + + select bboard_forum__new ( + :forum_id, + :short_name, + :charter, + :moderated_p, + :bboard_id, + :context_id, + now(), + :creation_user, + :creation_ip, + 'bboard_forum' + ); + + + + + + + select bboard_forum__set_attrs ( + :forum_id, + :short_name, + :charter, + :moderated_p, + :bboard_id + ); + + + + + + + select bboard_category__category_p(:category_id); + + + + + + + select bboard_category__new ( + :category_id, + :short_name, + :description, + :forum_id, + null, + now(), + null, + null, + 'bboard_category' + ); + + + + + + + select bboard_category__set_attrs ( + :category_id, + :short_name, + :description, + :forum_id + ); + + + + + + + select bboard_message__new ( + :message_id, + :reply_to, + :sent_date, + :sender, + null, -- rfc822_id + :title, + :mime_type, + null, -- text + null, -- data + :context_id, + now(), + :creation_user, + :creation_ip, + 'acs_message' + ); + + + + + + + + update cr_revisions + set content = :content + where revision_id = :revision_id + + + + + + + + + select bboard_message__set_attrs ( + :message_id, + :reply_to, + :sent_date, + :sender, + :title, + :mime_type, + :context_id + ); + + + + + + + + + update cr_revisions + set content = :content + + + + + + + + + select bboard_message__clear_categories ( :message_id ); + + + + + + + + + select bboard_message__add_category ( + :message_id, + :category_id + ); + + + + + + + + + select bboard_message__remove_category ( + :message_id, + :category_id + ); + + + + + + + + + select bboard_message__set_status ( + :message_id, + :forum_id, + :status + ); + + + + + + + + + select bboard_forum__subscribe ( + :forum_id, + :subscriber_id + ); + + + + + + + + + select bboard_category__subscribe ( + :category_id, + :subscriber_id + ); + + + + + + + + + select bboard_message__subscribe ( + :thread_id, + :subscriber_id + ); + + + + + + + + + select count(*) as subscribed_p from bboard_thread_subscribers + where subscriber_id = :user_id + and thread_id in + (select message_id + from acs_messages b + where tree_sortkey like + (select tree_sortkey + from acs_messages + where message_id = :message_id) || '%') + + + + + + + + + select bboard_forum__forum_containing_message(:message_id) as forum_id + + + + + + + + + + select acs_message__first_ancestor(:message_id) as ancestor_id + + + + + + + + + + select acs_message__new_image ( + :message_id, + :file_id, + :short_filename, + :title, + null, -- description + :mime_type, + null, -- content + :width, + :height, + now(), + :user_id, + :creation_ip, + 't' -- is_live + ); + + + + + + + + + select content_item__get_latest_revision(:file_id) as revision_id + + + + + + + + + + update cr_revisions + set content = :content + where revision_id = :revision_id + + + + + + + + select acs_message__new_file ( + :message_id, + :file_id, + :short_filename, + :title, + null, -- description + :mime_type, + null, -- content + now(), + :user_id, + :creation_ip, + 't' -- is_live + ); + + + + + + + + + select content_item__get_latest_revision(:file_id) as revision_id + + + + + + + + + + update cr_revisions + set content = :content + where revision_id = :revision_id + + + + + + + + + select image_id + from images + where image_id = content_item__get_latest_revision(:file_id) + + + + + + + + + select acs_message__delete_image(:file_id); + + + + + + + + + select acs_message__delete_file(:file_id); + + + + + + + + + +update cr_items + set latest_revision=null, live_revision=null + where item_id in + (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)); + + + + + + + +declare + message_rec record; +begin + for message_rec in + 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) + loop + perform bboard_message__remove(message_rec.message_id); + end loop; + + return 0; +end; + + + + + + + + select subscriber_id as recipient_id, thread_id as grouping_id, + now() as wait_until + from bboard_thread_subscribers s + where s.thread_id in + (select message_id from acs_messages + where tree_sortkey like + (select substring(tree_sortkey from 0 for 4) || '%' + from acs_messages + where message_id = :message_id)) + and s.subscriber_id in (select party_id + from acs_object_party_privilege_map + where object_id = :message_id + and privilege = 'bboard_read_message') + + + + + + + + select s.subscriber_id as recipient_id, s.category_id as grouping_id, + now() 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 + and s.subscriber_id in (select party_id + from acs_object_party_privilege_map + where object_id = :message_id + and privilege = 'bboard_read_message') + + + + + + + select s.subscriber_id as recipient_id, s.forum_id as grouping_id, + now() 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 + and s.subscriber_id in (select party_id + from acs_object_party_privilege_map + where object_id = :message_id + and privilege = 'bboard_read_message') + + + + 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 Index: openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/bboard/tcl/bboard-procs.xql 29 Jun 2001 20:33:23 -0000 1.1 @@ -0,0 +1,221 @@ + + + + + + + select * from bboard_forums where forum_id = :forum_id + + + + + + + + + select * from bboard_categories where category_id = :category_id + + + + + + + + + select live_revision as revision_id + from cr_items + where item_id = :message_id + for update + + + + + + + + + select live_revision as revision_id from cr_items + where item_id = :message_id + for update + + + + + + + + + select * from acs_messages_all where message_id = :message_id + + + + + + + + + delete from bboard_forum_subscribers + where forum_id = :forum_id + and subscriber_id = :subscriber_id + + + + + + + + + delete from bboard_category_subscribers + where category_id = :category_id + and subscriber_id = :subscriber_id + + + + + + + + + delete from bboard_thread_subscribers + where thread_id = :thread_id + and subscriber_id = :subscriber_id + + + + + + + + + select count(*) as subscribed_p from bboard_category_subscribers + where category_id = :category_id + and subscriber_id = :user_id + + + + + + + + + select count(*) as subscribed_p from bboard_forum_subscribers + where subscriber_id = :user_id + and forum_id in (select bc.forum_id + from bboard_categories bc + where bc.category_id = + :category_id) + + + + + + + + + select count(*) as subscribed_p + from bboard_forum_subscribers + where forum_id = :forum_id + and subscriber_id = :user_id + + + + + + + + + select count(*) as subscribed_p + from bboard_category_subscribers + where subscriber_id = :user_id + and category_id in (select bcmm.category_id + from bboard_category_message_map bcmm + where bcmm.message_id = :message_id) + + + + + + + + + + select count(*) as subscribed_p + from bboard_forum_subscribers + where subscriber_id = :user_id + and forum_id in (select bfmm.forum_id + from bboard_forum_message_map bfmm + where bfmm.message_id = :message_id) + + + + + + + + + select moderated_p + from bboard_forums + where forum_id = :forum_id + + + + + + + + + select mime_type + from cr_mime_types + where mime_type = :type + + + + + + + + + insert into cr_mime_types (mime_type) + values (:type) + + + + + + + + + select short_name as forum_name + from bboard_forums + where forum_id = :forum_id + + + + + + + + + select reply_to, sender, title, mime_type, content, email, + first_names||' '||last_name as full_name + from acs_messages_all, persons, parties + where message_id = :message_id + and person_id = sender + and party_id = person_id + + + + + + + + + select short_name as forum_name + from bboard_forums + where forum_id = :forum_id + + + + + +