Index: openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-create.sql 29 Jun 2001 20:31:14 -0000 1.1 @@ -0,0 +1,337 @@ +-- +-- packages/bboard/sql/bboard-create.sql +-- +-- @author Anukul Kapoor <akk@arsdigita.com> +-- @author John Prevost <jmp@arsdigita.com> +-- @creation-date 2000-08-29 +-- @cvs-id $Id: bboard-create.sql,v 1.1 2001/06/29 20:31:14 lukep Exp $ +-- + +-- separate parts so that if one fails, the rest happens + +-- create the privileges + +begin; + + select acs_privilege__create_privilege('bboard_create_forum',null,null); + select acs_privilege__create_privilege('bboard_create_category',null,null); + select acs_privilege__create_privilege('bboard_create_message',null,null); + select acs_privilege__create_privilege('bboard_write_forum',null,null); + select acs_privilege__create_privilege('bboard_write_category',null,null); + select acs_privilege__create_privilege('bboard_write_message',null,null); + select acs_privilege__create_privilege('bboard_read_forum',null,null); + select acs_privilege__create_privilege('bboard_read_category',null,null); + select acs_privilege__create_privilege('bboard_read_message',null,null); + select acs_privilege__create_privilege('bboard_delete_forum',null,null); + select acs_privilege__create_privilege('bboard_delete_category',null,null); + select acs_privilege__create_privilege('bboard_delete_message',null,null); + select acs_privilege__create_privilege('bboard_moderate_forum',null,null); + + + -- temporarily drop this trigger to avoid a data-change violation + -- on acs_privilege_hierarchy_index while updating the child privileges. + + drop trigger acs_priv_hier_ins_del_tr on acs_privilege_hierarchy; + + select acs_privilege__add_child('create','bboard_create_forum'); + select acs_privilege__add_child('create','bboard_create_category'); + select acs_privilege__add_child('create','bboard_create_message'); + select acs_privilege__add_child('write','bboard_write_forum'); + select acs_privilege__add_child('write','bboard_write_category'); + select acs_privilege__add_child('write','bboard_write_message'); + select acs_privilege__add_child('read','bboard_read_forum'); + select acs_privilege__add_child('read','bboard_read_category'); + select acs_privilege__add_child('read','bboard_read_message'); + select acs_privilege__add_child('delete','bboard_delete_forum'); + select acs_privilege__add_child('delete','bboard_delete_category'); + select acs_privilege__add_child('delete','bboard_delete_message'); + + -- re-enable the trigger before the last insert to force the + -- acs_privilege_hierarchy_index table to be updated. + + create trigger acs_priv_hier_ins_del_tr after insert or delete + on acs_privilege_hierarchy for each row + execute procedure acs_priv_hier_ins_del_tr (); + +select acs_privilege__add_child('admin','bboard_moderate_forum'); +end; + + +create function inline_0 () +returns integer as ' +declare + default_context integer; + registered_users integer; + the_public integer; +begin + + default_context := acs__magic_object_id(''default_context''); + registered_users := acs__magic_object_id(''registered_users''); + the_public := acs__magic_object_id(''the_public''); + + -- give registered users the power to post by default + + perform acs_permission__grant_permission ( + default_context, + registered_users, + ''bboard_create_message'' + ); + + -- give the public the power to read by default + + perform acs_permission__grant_permission ( + default_context, + the_public, + ''bboard_read_message'' + ); + + perform acs_permission__grant_permission ( + default_context, + the_public, + ''bboard_read_category'' + ); + + perform acs_permission__grant_permission ( + default_context, + the_public, + ''bboard_read_forum'' + ); + + + return 0; +end; +' language 'plpgsql'; + +select inline_0 (); +drop function inline_0 (); + + +select acs_object_type__create_type ( + 'bboard_forum', + 'BBoard Forum', + 'BBoard Forum', + 'acs_object', + 'BBOARD_FORUMS', + 'FORUM_ID', + null, + 'f', + null, + 'BBOARD_FORUM__NAME' +); + +select acs_object_type__create_type ( + 'bboard_category', + 'BBoard Category', + 'BBoard Categories', + 'acs_object', + 'BBOARD_CATEGORIES', + 'CATEGORY_ID', + null, + 'f', + null, + 'BBOARD_CATEGORY__NAME' +); + + + +-- bboard forums +-- +-- these act as primary containers for messages +-- a message's context_id will point to its forum + +create table bboard_forums ( + forum_id integer + constraint bboard_forums_forum_id_fk + references acs_objects (object_id) + constraint bboard_forums_pk + primary key, + short_name varchar(400) + constraint bboard_forums_short_name_nn + not null, + charter varchar(4000), + moderated_p char(1) + constraint bboard_forums_moderated_p_nn + not null + constraint bboard_forums_moderated_p_ck + check (moderated_p in ('t','f')), + bboard_id integer + constraint bboard_forums_bboard_id_nn + not null + constraint bboard_forums_bboard_id_fk + references apm_packages (package_id) + on delete cascade +); + +create index bboard_forums_bboard_id_idx + on bboard_forums (bboard_id); + +create table bboard_forum_message_map ( + forum_id integer + constraint bboard_fmm_forum_id_fk + references bboard_forums (forum_id) + on delete cascade, + message_id integer + constraint bboard_fmm_message_id_fk + references acs_messages (message_id) + on delete cascade, + status varchar(20) + constraint bboard_fmm_status_ck + check (status in ('unmoderated', 'approved', 'rejected')) + constraint bboard_fmm_status_nn + not null, + constraint bboard_forum_message_map_pk + primary key (forum_id, message_id) +); + +create index bboard_fmm_message_id_idx + on bboard_forum_message_map (message_id); + +create index bboard_fmm_status_idx + on bboard_forum_message_map (status); + +-- bboard categories +-- +-- these are for intra-forum categorization +-- categories will be scoped to forums via their acs_object.context_id + +create table bboard_categories ( + category_id integer + constraint bboard_c_category_id_fk + references acs_objects (object_id) + constraint bboard_c_category_id_pk + primary key, + short_name varchar(400) + constraint bboard_c_short_name_nn + not null, + forum_id integer + constraint bboard_c_forum_id_fk + references bboard_forums (forum_id) + on delete cascade + constraint bboard_c_forum_id_nn + not null, + description varchar(4000) +); + +create index bboard_categories_forum_id_idx + on bboard_categories (forum_id); + +create table bboard_category_message_map ( + category_id integer + constraint bboard_cmm_category_id_fk + references bboard_categories (category_id) + on delete cascade, + message_id integer + constraint bboard_cmm_message_id_fk + references acs_messages (message_id) + on delete cascade, + constraint bboard_category_message_map_pk + primary key (category_id, message_id) +); + +create index bboard_cmm_message_id_idx + on bboard_category_message_map (message_id); + +-- @@ bboard-views + +-- Tables to track subscriptions + +create table bboard_forum_subscribers ( + forum_id integer + constraint bboard_fs_forum_id_fk + references bboard_forums (forum_id) + on delete cascade, + subscriber_id integer + constraint bboard_fs_subscriber_id_fk + references parties (party_id) + on delete cascade, + constraint bboard_forum_subscribers_pk + primary key (forum_id, subscriber_id) +); + +create index bboard_fs_subscriber_id_idx + on bboard_forum_subscribers (subscriber_id); + +create table bboard_category_subscribers ( + category_id integer + constraint bboard_cs_category_id_fk + references bboard_categories (category_id) + on delete cascade, + subscriber_id integer + constraint bboard_cs_subscriber_id_fk + references parties (party_id) + on delete cascade, + constraint bboard_category_subscribers_pk + primary key (category_id, subscriber_id) +); + +create index bboard_cs_subscriber_id_idx + on bboard_category_subscribers (subscriber_id); + +create table bboard_thread_subscribers ( + thread_id integer + constraint bboard_ts_thread_id_fk + references acs_messages (message_id) + on delete cascade, + subscriber_id integer + constraint bboard_ts_subscriber_id_fk + references parties (party_id) + on delete cascade, + constraint bboard_thread_subscribers_pk + primary key (thread_id, subscriber_id) +); + +create index bboard_ts_subscriber_id_idx + on bboard_thread_subscribers (subscriber_id); + +\i bboard-views +\i bboard-packages + +insert into cr_mime_types (mime_type) + values ('text/plain; format=flowed'); + + +-- -- NOTE: this is only temporary until we figure out how +-- -- packages will register child types to an acs-message +-- declare +-- v_exists integer; +-- begin + +-- select decode(count(*),0,0,1) into v_exists +-- from cr_type_children +-- where parent_type = 'acs_message_revision' +-- and child_type = 'content_revision'; + +-- if v_exists = 0 then +-- content_type.register_child_type ( +-- parent_type => 'acs_message_revision', +-- child_type => 'content_revision' +-- ); +-- end if; + +-- select decode(count(*),0,0,1) into v_exists +-- from cr_type_children +-- where parent_type = 'acs_message_revision' +-- and child_type = 'content_revision'; + +-- if v_exists = 0 then +-- content_type.register_child_type ( +-- parent_type => 'acs_message_revision', +-- child_type => 'image' +-- ); +-- end if; + +-- select decode(count(*),0,0,1) into v_exists +-- from cr_type_children +-- where parent_type = 'acs_message_revision' +-- and child_type = 'content_revision'; + +-- if v_exists = 0 then +-- content_type.register_child_type ( +-- parent_type => 'acs_message_revision', +-- child_type => 'content_extlink' +-- ); +-- end if; + +-- end; +-- / +-- show errors Index: openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-drop.sql 29 Jun 2001 20:31:14 -0000 1.1 @@ -0,0 +1,136 @@ +-- +-- packages/message/sql/bboard-drop.sql +-- +-- @author jmp@arsdigita.com +-- @creation-date 2000-08-31 +-- @cvs-id $Id: bboard-drop.sql,v 1.1 2001/06/29 20:31:14 lukep Exp $ +-- + +-- This drop script destroys all messages that belong to forums. +-- It should handle any permission changes that have been done since +-- install by removing any permissions having to do with the standard +-- bboard permissions. + +-- We need to get rid of things that might be referring to +-- bboard objects that would prevent removal. This includes: +-- email-a-friend droppings +-- attachments (files and images) + +-- if something else is pointing at one of our messages, this script +-- will fail and removing bboard will be icky. this is sort of hairy +-- problem with unknown potential intra-package references. + + +create function inline_0 () +returns integer as ' + + raise NOTICE ''currently it is impossible to delete multiple threads within a transaction. please ensure you've removed all forums through the admin interface before you try to drop the package.'' + +' language 'plpgsql'; + +select inline_0 (); +drop function inline_0(); + + +-- Delete all subscriptions +delete from bboard_thread_subscribers; +delete from bboard_category_subscribers; +delete from bboard_forum_subscribers; + +-- Delete all categories +delete from bboard_category_message_map; +delete from bboard_categories; +delete from acs_objects where object_type = 'bboard_category'; + +-- Delete all forums +delete from bboard_forum_message_map; +delete from bboard_forums; +delete from acs_objects where object_type = 'bboard_forum'; + +-- Drop all schema objects + +drop function bboard_forum__forum_p (integer); +drop function bboard_forum__new (integer, varchar, varchar, char, integer, + integer, timestamp, integer, varchar, varchar); +drop function bboard_forum__delete (integer); +drop function bboard_forum__set_attrs (integer, varchar, varchar, char, integer); +drop function bboard_forum__subscribe (integer, integer); +drop function bboard_forum__forum_containing_message (integer); +drop function bboard_category__category_p (integer); +drop function bboard_category__new (integer, varchar, varchar, integer, + integer, timestamp, integer, varchar, varchar); +drop function bboard_category__delete (integer); +drop function bboard_category__set_attrs (integer, varchar, varchar, integer); +drop function bboard_category__subscribe (integer, integer); +drop function bboard_message__new (integer, integer, timestamp, integer, + varchar, varchar, varchar, varchar, text, + integer, timestamp, integer, varchar, varchar); +drop function bboard_message__message_p (integer); +drop function bboard_message__set_attrs (integer, integer, timestamp, + integer, varchar, varchar, integer); +drop function bboard_message__set_status (integer, integer, varchar); +drop function bboard_message__add_category (integer, integer); +drop function bboard_message__remove_category (integer, integer); +drop function bboard_message__clear_categories (integer); +drop function bboard_message__subscribe (integer, integer); + + + +drop view bboard_messages_by_category; +drop view bboard_messages_all; +drop table bboard_thread_subscribers; +drop table bboard_category_subscribers; +drop table bboard_forum_subscribers; +drop table bboard_category_message_map; +drop table bboard_categories; +drop table bboard_forum_message_map; +drop table bboard_forums; + +-- Drop object type metadata +begin; + select acs_object_type__drop_type ('bboard_forum'); + select acs_object_type__drop_type ('bboard_category'); +end; + + +-- Drop permission metadata +delete from acs_permissions + where privilege in + ('bboard_create_forum', 'bboard_create_category', + 'bboard_create_message', 'bboard_write_forum', + 'bboard_write_category', 'bboard_write_message', + 'bboard_read_forum', 'bboard_read_category', + 'bboard_read_message', 'bboard_delete_forum', + 'bboard_delete_category', 'bboard_delete_message', + 'bboard_moderate_forum'); + +delete from acs_privilege_hierarchy + where privilege in + ('bboard_create_forum', 'bboard_create_category', + 'bboard_create_message', 'bboard_write_forum', + 'bboard_write_category', 'bboard_write_message', + 'bboard_read_forum', 'bboard_read_category', + 'bboard_read_message', 'bboard_delete_forum', + 'bboard_delete_category', 'bboard_delete_message', + 'bboard_moderate_forum'); + +delete from acs_privilege_hierarchy + where child_privilege in + ('bboard_create_forum', 'bboard_create_category', + 'bboard_create_message', 'bboard_write_forum', + 'bboard_write_category', 'bboard_write_message', + 'bboard_read_forum', 'bboard_read_category', + 'bboard_read_message', 'bboard_delete_forum', + 'bboard_delete_category', 'bboard_delete_message', + 'bboard_moderate_forum'); + +delete from acs_privileges + where privilege in + ('bboard_create_forum', 'bboard_create_category', + 'bboard_create_message', 'bboard_write_forum', + 'bboard_write_category', 'bboard_write_message', + 'bboard_read_forum', 'bboard_read_category', + 'bboard_read_message', 'bboard_delete_forum', + 'bboard_delete_category', 'bboard_delete_message', + 'bboard_moderate_forum'); + Index: openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-packages.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-packages.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-packages.sql 29 Jun 2001 20:31:14 -0000 1.1 @@ -0,0 +1,572 @@ +-- +-- packages/bboard/sql/bboard-packages.sql +-- +-- @author Anukul Kapoor <akk@arsdigita.com> +-- @author John Prevost <jmp@arsdigita.com> +-- @creation-date 2000-11-22 +-- @cvs-id $Id: bboard-packages.sql,v 1.1 2001/06/29 20:31:14 lukep Exp $ +-- + +------------ bboard_forum package --------------- + +create function bboard_forum__forum_p (integer) +returns char as ' +declare + p_forum_id alias for $1; + v_check_forum_id integer; +begin + select count(forum_id) into v_check_forum_id + from bboard_forums + where forum_id = p_forum_id; + if v_check_forum_id = 1 then + return ''t''; + else + return ''f''; + end if; +end; +' language 'plpgsql'; + + +create function bboard_forum__new (integer, varchar, varchar, char, integer, + integer, timestamp, integer, varchar, varchar) +returns integer as ' +declare + p_forum_id alias for $1; -- default null + p_short_name alias for $2; + p_charter alias for $3; -- default null + p_moderated_p alias for $4; -- default ''f'' + p_bboard_id alias for $5; + p_context_id alias for $6; -- default null + p_creation_date alias for $7; -- default now() + p_creation_user alias for $8; -- default null + p_creation_ip alias for $9; -- default null + p_object_type alias for $10; -- default ''bboard_forum'' + v_context_id integer; + v_forum_id integer; +begin + v_context_id := coalesce(p_context_id, p_bboard_id); + v_forum_id := acs_object__new ( + p_forum_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + v_context_id + ); + + insert into bboard_forums + (forum_id, short_name, charter, moderated_p, bboard_id) + values (v_forum_id, p_short_name, p_charter, p_moderated_p, p_bboard_id); + return v_forum_id; +end; +' language 'plpgsql'; + + +create function bboard_forum__delete (integer) +returns integer as ' +declare + p_forum_id alias for $1; +begin + delete from bboard_forums + where forum_id = p_forum_id; + PERFORM acs_object__delete(p_forum_id); + return 0; +end; +' language 'plpgsql'; + + +create function bboard_forum__set_attrs (integer, varchar, varchar, char, integer) +returns integer as ' +declare + p_forum_id alias for $1; + p_short_name alias for $2; -- default null + p_charter alias for $3; -- default null + p_moderated_p alias for $4; -- default null + p_bboard_id alias for $5; -- default null + v_check_forum_id integer; +begin + select count(forum_id) into v_check_forum_id + from bboard_forums + where forum_id = p_forum_id; + -- Not a forum. Fail silently? + if v_check_forum_id <> 1 then + return -1; + end if; + if p_short_name is not null then + update bboard_forums set short_name = p_short_name + where forum_id = p_forum_id; + end if; + if p_charter is not null then + update bboard_forums set charter = p_charter + where forum_id = p_forum_id; + end if; + if p_moderated_p is not null then + update bboard_forums set moderated_p = p_moderated_p + where forum_id = p_forum_id; + end if; + if p_bboard_id is not null then + update bboard_forums set bboard_id = p_bboard_id + where forum_id = p_forum_id; + update acs_objects set context_id = p_bboard_id + where object_id = p_forum_id; + end if; + return 0; +end; +' language 'plpgsql'; + + +create function bboard_forum__subscribe (integer, integer) +returns integer as ' +declare + p_forum_id alias for $1; + p_subscriber_id alias for $2; +begin + insert into bboard_forum_subscribers (forum_id, subscriber_id) + values (p_forum_id, p_subscriber_id); + return 0; +end; +' language 'plpgsql'; + + +create function bboard_forum__forum_containing_message (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_forum_id integer; +begin + select max(forum_id) into v_forum_id + from bboard_forum_message_map + where message_id = p_message_id; + + if v_forum_id is null then + return 0; + else + return v_forum_id; + end if; +end; +' language 'plpgsql'; + + +create function bboard_forum__name (integer) +returns varchar as ' +declare + p_forum_id alias for $1; + v_forum_name varchar; +begin + select short_name into v_forum_name + from bboard_forums + where forum_id = p_forum_id; + return v_forum_name; +end; +' language 'plpgsql'; + + +---------- bboard_category package --------------- + +create function bboard_category__category_p (integer) +returns char as ' +declare + p_category_id alias for $1; + v_check_category_id integer; +begin + select count(category_id) into v_check_category_id + from bboard_categories + where category_id = p_category_id; + if v_check_category_id = 1 then + return ''t''; + else + return ''f''; + end if; +end; +' language 'plpgsql'; + + +create function bboard_category__new (integer, varchar, varchar, integer, + integer, timestamp, integer, varchar, varchar) +returns integer as ' +declare + p_category_id alias for $1; -- default null + p_short_name alias for $2; + p_description alias for $3; -- default null + p_forum_id alias for $4; + p_context_id alias for $5; -- default null + p_creation_date alias for $6; -- default now() + p_creation_user alias for $7; -- default null + p_creation_ip alias for $8; -- default null + p_object_type alias for $9; -- default ''bboard_category'' + v_category_id integer; + v_context_id integer; +begin + v_context_id := coalesce(p_context_id, p_forum_id); + v_category_id := acs_object__new ( + p_category_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + v_context_id + ); + + insert into bboard_categories + (category_id, short_name, description, forum_id) + values (v_category_id, p_short_name, p_description, p_forum_id); + + return v_category_id; +end; +' language 'plpgsql'; + + +create function bboard_category__delete (integer) +returns integer as ' +declare + p_category_id alias for $1; +begin + delete from bboard_categories + where category_id = p_category_id; + PERFORM acs_object__delete(p_category_id); + return 0; +end; +' language 'plpgsql'; + + +create function bboard_category__set_attrs (integer, varchar, varchar, integer) +returns integer as ' +declare + p_category_id alias for $1; + p_short_name alias for $2; -- default null + p_description alias for $3; -- default null + p_forum_id alias for $4; -- default null + v_check_category_id integer; +begin + select count(category_id) into v_check_category_id + from bboard_categories + where category_id = p_category_id; + -- Not a category. Fail silently? + if v_check_category_id <> 1 then + return -1; + end if; + -- It is a category. Go for it. + if p_short_name is not null then + update bboard_categories set short_name = p_short_name + where category_id = p_category_id; + end if; + if p_description is not null then + update bboard_categories set description = p_description + where category_id = p_category_id; + end if; + if p_forum_id is not null then + update bboard_categories set forum_id = p_forum_id + where category_id = p_category_id; + update acs_objects set context_id = p_forum_id + where object_id = p_category_id; + end if; + return 0; +end; +' language 'plpgsql'; + +create function bboard_category__subscribe (integer, integer) +returns integer as ' +declare + p_category_id alias for $1; + p_subscriber_id alias for $2; +begin + insert into bboard_category_subscribers (category_id, subscriber_id) + values (p_category_id, p_subscriber_id); + return 0; +end; +' language 'plpgsql'; + + +create function name (integer) +returns varchar as ' +declare + category_id alias for $1; + v_category_name varchar; +begin + select short_name into v_category_name + from bboard_categories + where category_id = name.category_id; + return v_category_name; +end; +' language 'plpgsql'; + + +--------------- bboard_message package ---------------- + +create function bboard_message__new (integer, integer, timestamp, integer, + varchar, varchar, varchar, varchar, text, + integer, timestamp, integer, varchar, varchar) +returns integer as ' +declare + p_message_id alias for $1; -- default null + p_reply_to alias for $2; -- default null + p_sent_date alias for $3; -- default sysdate + p_sender alias for $4; -- default null + p_rfc822_id alias for $5; -- default null + p_title alias for $6; -- default null + p_mime_type alias for $7; -- default ''text/plain'' + p_text alias for $8; -- default null + p_data alias for $9; -- default null + p_context_id alias for $10; -- default 0 + p_creation_date alias for $11; -- default sysdate + p_creation_user alias for $12; -- default null + p_creation_ip alias for $13; -- default null + p_object_type alias for $14; -- default ''acs_message'' + v_sent_date timestamp; +begin + v_sent_date := coalesce(p_sent_date, now()); + + return acs_message__new ( + p_message_id, + p_reply_to, + v_sent_date, + p_sender, + p_rfc822_id, + p_title, + null, + p_mime_type, + p_text, + p_data, + 0, + p_context_id, + p_creation_user, + p_creation_ip, + p_object_type, + ''t'' + ); + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__message_p (integer) +returns char as ' +declare + p_message_id alias for $1; + v_check_message_id integer; +begin + select count(message_id) into v_check_message_id + from acs_messages + where message_id = p_message_id; + if v_check_message_id = 1 then + return ''t''; + else + return ''f''; + end if; +end; +' language 'plpgsql'; + + +create function bboard_message__set_attrs (integer, integer, timestamp, + integer, varchar, varchar, integer) +returns integer as ' +declare + p_message_id alias for $1; + p_reply_to alias for $2; -- default null + p_sent_date alias for $3; -- default null + p_sender alias for $4; -- default null + p_title alias for $5; -- default null + p_mime_type alias for $6; -- default null + p_context_id alias for $7; -- default null + v_check_message_id integer; + v_revision_id integer; +begin + if bboard_message__message_p(p_message_id) = ''f'' then + return -1; + end if; + + -- modify the parts that are in acs_messages + + if p_reply_to is not null then + update acs_messages set reply_to = p_reply_to + where message_id = p_message_id; + end if; + if p_sent_date is not null then + update acs_messages set sent_date = p_sent_date + where message_id = p_message_id; + end if; + if p_sender is not null then + update acs_messages set sender = p_sender + where message_id = p_message_id; + end if; + + -- modify the parts that are in cr_revisions + if p_title is not null or p_mime_type is not null then + select live_revision into v_revision_id + from cr_items where item_id = p_message_id + for update; + if p_title is not null then + update cr_revisions set title = p_title + where revision_id = v_revision_id; + end if; + if p_mime_type is not null then + update cr_revisions set mime_type = p_mime_type + where revision_id = v_revision_id; + end if; + end if; + + -- modify the context_id in acs_objects + + if p_context_id is not null then + update acs_objects set context_id = p_context_id + where object_id = p_message_id; + end if; + + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__set_status (integer, integer, varchar) +returns integer as ' +declare + p_message_id alias for $1; + p_forum_id alias for $2; + p_status alias for $3; +begin + if bboard_message__message_p(p_message_id) = ''f'' + or bboard_forum__forum_p(p_forum_id) = ''f'' then + return -1; + end if; + delete from bboard_forum_message_map + where message_id = p_message_id + and forum_id = p_forum_id; + if p_status is not null then + insert into bboard_forum_message_map (forum_id, message_id, status) + values (p_forum_id, p_message_id, p_status); + end if; + + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__add_category (integer, integer) +returns integer as ' +declare + p_message_id alias for $1; + p_category_id alias for $2; +begin + insert into bboard_category_message_map (message_id, category_id) + values (p_message_id, p_category_id); + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__remove_category (integer, integer) +returns integer as ' +declare + p_message_id alias for $1; + p_category_id alias for $2; +begin + delete from bboard_category_message_map + where category_id = p_category_id + and message_id = p_message_id; + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__clear_categories (integer) +returns integer as ' +declare + p_message_id alias for $1; +begin + delete from bboard_category_message_map + where message_id = p_message_id; + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__subscribe (integer, integer) +returns integer as ' +declare + p_thread_id alias for $1; + p_subscriber_id alias for $2; +begin + insert into bboard_thread_subscribers (thread_id, subscriber_id) + values (p_thread_id, p_subscriber_id); + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__remove_thread (integer) +returns integer as ' +declare + thread_id alias for $1; + child_val record; + message_val record; + image_p integer; + v_search_key varchar; +begin + select tree_sortkey || ''%'' into v_search_key + from acs_messages + where message_id = thread_id; + + for child_val in + select object_id as child_id, object_type + from acs_objects + where context_id in (select message_id + from acs_messages + where tree_sortkey like v_search_key) + loop + if child_val.object_type = ''acs_message'' then + perform acs_message__delete(child_val.child_id); + elsif child_val.object_type = ''content_item'' then + select count(*) into image_p + from images + where image_id = child_val.child_id; + if image_p = 1 then + perform acs_message__delete_image(child_val.child_id); + else + perform acs_message__delete_file(child_val.child_id); + end if; + end if; + end loop; + + for message_val in + select message_id + from acs_messages + where tree_sortkey like v_search_key + loop + perform acs_message__delete(message_val.message_id); + end loop; + + return 0; +end; +' language 'plpgsql'; + + +create function bboard_message__remove (integer) +returns integer as ' +declare + message_id alias for $1; + child_val record; + image_p integer; +begin + for child_val in + select object_id as child_id, object_type + from acs_objects + where context_id = message_id + loop + if child_val.object_type = ''acs_message'' then + perform acs_message__delete(child_val.child_id); + elsif child_val.object_type = ''content_item'' then + select count(*) into image_p + from images + where image_id = child_val.child_id; + if image_p = 1 then + perform acs_message__delete_image(child_val.child_id); + else + perform acs_message__delete_file(child_val.child_id); + end if; + end if; + end loop; + + perform acs_message__delete(message_id); + return 0; +end; +' language 'plpgsql'; \ No newline at end of file Index: openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-views.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-views.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/contrib/obsolete-packages/bboard/sql/postgresql/bboard-views.sql 29 Jun 2001 20:31:14 -0000 1.1 @@ -0,0 +1,59 @@ +-- +-- packages/bboard/sql/bboard-views.sql +-- +-- @author Anukul Kapoor <akk@arsdigita.com> +-- @author John Prevost <jmp@arsdigita.com> +-- @creation-date 2001-02-05 +-- @cvs-id $Id: bboard-views.sql,v 1.1 2001/06/29 20:31:14 lukep Exp $ +-- + +create view bboard_messages_all as + select m.message_id, m.reply_to, m.sent_date, m.sender, + m.title, m.mime_type, m.content, f.forum_id, f.status, + (select count(1) from acs_messages m2 + where m2.message_id in (select mf.message_id + from bboard_forum_message_map mf) + and m2.tree_sortkey like m.tree_sortkey || '%') + as num_replies, + (select max(sent_date) from acs_messages m2 + where m2.message_id in (select mf.message_id + from bboard_forum_message_map mf) + and m2.tree_sortkey like m.tree_sortkey || '%') + as last_reply_date + from acs_messages_all m, bboard_forum_message_map f + where m.message_id = f.message_id; + +create view bboard_messages_by_category as + select msg.*, cat.category_id + from bboard_messages_all msg, bboard_category_message_map cat + where msg.message_id = cat.message_id + UNION + select msg.*, NULL as category_id + from bboard_messages_all msg + where 0 = (select count(1) from bboard_category_message_map cat + where msg.message_id = cat.message_id); + + +-- create or replace view bboard_messages_all as +-- select m.message_id, m.reply_to, m.sent_date, m.sender, +-- m.title, m.mime_type, m.content, f.forum_id, f.status, +-- (select count(1) from acs_messages m2 +-- where m2.message_id in (select mf.message_id +-- from bboard_forum_message_map mf +-- where mf.forum_id = f.forum_id) +-- start with m2.message_id = m.message_id +-- connect by m2.reply_to = prior m2.message_id) as num_replies, +-- (select max(sent_date) from acs_messages m2 +-- where m2.message_id in (select mf.message_id +-- from bboard_forum_message_map mf +-- where mf.forum_id = f.forum_id) +-- start with m2.message_id = m.message_id +-- connect by m2.reply_to = prior m2.message_id) as last_reply_date +-- from acs_messages_all m, bboard_forum_message_map f +-- where m.message_id = f.message_id; + +-- create or replace view bboard_messages_by_category as +-- select msg.*, cat.category_id +-- from bboard_messages_all msg, bboard_category_message_map cat +-- where msg.message_id = cat.message_id(+); +