-- Internationalization of publication and archive status. Code to generate -- a human readable publish status has been moved from the news__status plsql -- function to a Tcl proc. -- -- @author Peter Marklund --- **** Recreate function. This will drop the views as well. drop function news__status (integer) cascade; -- added select define_function_args('news__status','publish_date,archive_date'); -- -- procedure news__status/2 -- CREATE OR REPLACE FUNCTION news__status( p_publish_date timestamptz, p_archive_date timestamptz ) RETURNS varchar AS $$ DECLARE BEGIN if p_publish_date is not null then if p_publish_date > current_timestamp then -- Publishing in the future if p_archive_date is null then return 'going_live_no_archive'; else return 'going_live_with_archive'; end if; else -- Published in the past if p_archive_date is null then return 'published_no_archive'; else if p_archive_date > current_timestamp then return 'published_with_archive'; else return 'archived'; end if; end if; end if; else -- publish_date null return 'unapproved'; end if; END; $$ LANGUAGE plpgsql; -- **** Recreate views with calls to new status function create view news_items_live_or_submitted as select ci.item_id as item_id, cn.news_id, cn.package_id, cr.publish_date, cn.archive_date, cr.title as publish_title, cr.content as publish_body, (case when cr.mime_type = 'text/html' then 't' else 'f' end) as html_p, ao.creation_user, ps.first_names || ' ' || ps.last_name as item_creator, ao.creation_date::date as creation_date, ci.live_revision, news__status(cr.publish_date, cn.archive_date) as status from cr_items ci, cr_revisions cr, cr_news cn, acs_objects ao, persons ps where (ci.item_id = cr.item_id and ci.live_revision = cr.revision_id and cr.revision_id = cn.news_id and cr.revision_id = ao.object_id and ao.creation_user = ps.person_id) or (ci.live_revision is null and ci.item_id = cr.item_id and cr.revision_id = content_item__get_latest_revision(ci.item_id) and cr.revision_id = cn.news_id and cr.revision_id = ao.object_id and ao.creation_user = ps.person_id); create view news_item_revisions as select cr.item_id as item_id, cr.revision_id, ci.live_revision, cr.title as publish_title, cr.content as publish_body, cr.publish_date, cn.archive_date, cr.description as log_entry, (case when cr.mime_type = 'text/html' then 't' else 'f' end) as html_p, cr.mime_type as mime_type, cn.package_id, ao.creation_date::date as creation_date, news__status(cr.publish_date, cn.archive_date) as status, case when exists (select 1 from cr_revisions cr2 where cr2.revision_id = cn.news_id and cr2.publish_date is null ) then 1 else 0 end as approval_needed_p, ps.first_names || ' ' || ps.last_name as item_creator, ao.creation_user, ao.creation_ip, ci.name as item_name from cr_revisions cr, cr_news cn, cr_items ci, acs_objects ao, persons ps where cr.revision_id = ao.object_id and cr.revision_id = cn.news_id and ci.item_id = cr.item_id and ao.creation_user = ps.person_id; create view news_item_full_active as select ci.item_id as item_id, cn.package_id as package_id, revision_id, title as publish_title, cr.content as publish_body, (case when cr.mime_type = 'text/html' then 't' else 'f' end) as html_p, cr.publish_date, cn.archive_date, news__status(cr.publish_date, cn.archive_date) as status, ci.name as item_name, ps.person_id as creator_id, ps.first_names || ' ' || ps.last_name as item_creator from cr_items ci, cr_revisions cr, cr_news cn, acs_objects ao, persons ps where cr.item_id = ci.item_id and (cr.revision_id = ci.live_revision or (ci.live_revision is null and cr.revision_id = content_item__get_latest_revision(ci.item_id))) and cr.revision_id = cn.news_id and ci.item_id = ao.object_id and ao.creation_user = ps.person_id;