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