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
+
+
+
+
+
+