--
-- news__set_approve/8
--
create or replace function news__set_approve(
integer,
character varying,
timestamp with time zone,
timestamp with time zone,
integer,
timestamp with time zone,
character varying,
boolean
) returns int4 as $$
declare
p_revision_id alias for $1;
p_approve_p alias for $2; -- default 't'
p_publish_date alias for $3; -- default null
p_archive_date alias for $4; -- default null
p_approval_user alias for $5; -- default null
p_approval_date alias for $6; -- default current_timestamp
p_approval_ip alias for $7; -- default null
p_live_revision_p alias for $8; -- default 't'
v_item_id cr_items.item_id%TYPE;
begin
select item_id into v_item_id
from cr_revisions
where revision_id = p_revision_id;
-- unapprove an revision (does not mean to knock out active revision)
if p_approve_p = 'f' then
update cr_news
set approval_date = null,
approval_user = null,
approval_ip = null,
archive_date = null
where news_id = p_revision_id;
--
update cr_revisions
set publish_date = null
where revision_id = p_revision_id;
else
-- approve a revision
update cr_revisions
set publish_date = p_publish_date
where revision_id = p_revision_id;
--
update cr_news
set archive_date = p_archive_date,
approval_date = p_approval_date,
approval_user = p_approval_user,
approval_ip = p_approval_ip
where news_id = p_revision_id;
--
-- cannot use content_item.set_live_revision because it sets publish_date to sysdate
if p_live_revision_p = 't' then
update cr_items
set live_revision = p_revision_id,
publish_status = 'ready'
where item_id = v_item_id;
end if;
--
end if;
return 0;
end;
$$ language plpgsql;