--
-- forums_message__new/13
--
create or replace function forums_message__new(
integer,
character varying,
integer,
character varying,
text,
character,
integer,
character varying,
integer,
timestamp with time zone,
integer,
character varying,
integer
) returns int4 as $$
declare
p_message_id alias for $1;
p_object_type alias for $2;
p_forum_id alias for $3;
p_subject alias for $4;
p_content alias for $5;
p_format alias for $6;
p_user_id alias for $7;
p_state alias for $8;
p_parent_id alias for $9;
p_creation_date alias for $10;
p_creation_user alias for $11;
p_creation_ip alias for $12;
p_context_id alias for $13;
v_message_id integer;
v_forum_policy forums_forums.posting_policy%TYPE;
v_state forums_messages.state%TYPE;
v_posting_date forums_messages.posting_date%TYPE;
v_package_id acs_objects.package_id%TYPE;
begin
select package_id into v_package_id from forums_forums where forum_id = p_forum_id;
if v_package_id is null then
raise exception 'forums_message__new: forum_id % not found', p_forum_id;
end if;
v_message_id := acs_object__new(
p_message_id,
p_object_type,
p_creation_date,
p_creation_user,
p_creation_ip,
coalesce(p_context_id, p_forum_id),
't',
p_subject,
v_package_id
);
if p_state is null then
select posting_policy
into v_forum_policy
from forums_forums
where forum_id = p_forum_id;
if v_forum_policy = 'moderated'
then v_state := 'pending';
else v_state := 'approved';
end if;
else
v_state := p_state;
end if;
insert into forums_messages
(message_id, forum_id, subject, content, format, user_id, parent_id, state, last_child_post, last_poster)
values
(v_message_id, p_forum_id, p_subject, p_content, p_format, p_user_id, p_parent_id,
v_state, current_timestamp, p_user_id);
update forums_forums
set last_post = current_timestamp
where forum_id = p_forum_id;
if p_parent_id is null then
if v_state = 'approved' then
update forums_forums
set thread_count = thread_count + 1,
approved_thread_count = approved_thread_count + 1
where forum_id=p_forum_id;
else
update forums_forums
set thread_count = thread_count + 1
where forum_id=p_forum_id;
end if;
else
if v_state = 'approved' then
update forums_messages
set approved_reply_count = approved_reply_count + 1,
reply_count = reply_count + 1,
last_poster = p_user_id,
last_child_post = current_timestamp
where message_id = forums_message__root_message_id(v_message_id);
else
-- dont update last_poster, last_child_post when not approved
update forums_messages
set reply_count = reply_count + 1
where message_id = forums_message__root_message_id(v_message_id);
end if;
end if;
return v_message_id;
end;$$ language plpgsql;