-- views on 'news' application that pick from cr_news, cr_items, cr_revisions -- Re-arrange 'joins' for performance tuning -- RAL: Casted all _date columns to ::date for consistency with Oracle views. -- -- Views on multiple items -- View on all released news items in its active revision -- RAL: for now, changed: -- content.blob_to_string(cr.content) as publish_body, -- to -- cr.content as publish_body -- -- RAL: Dropped 'content' column from this view which is redundant and not -- used anywhere. -- create or replace view news_items_approved as select ci.item_id as item_id, cn.package_id, cr.title as publish_title, cn.lead as publish_lead, cr.content as publish_body, cr.mime_type as publish_format, to_char(cr.publish_date, 'Mon dd, yyyy') as pretty_publish_date, cr.publish_date, ao.creation_user, ps.first_names || ' ' || ps.last_name as item_creator, cn.archive_date::date as archive_date 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; -- View of all news items in the system -- RAL: for now, changed: -- content.blob_to_string(cr.content) as publish_body, -- to -- cr.content as publish_body -- create or replace 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, cn.lead as publish_lead, cr.content as publish_body, cr.mime_type as publish_format, 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); -- View of unapproved items create or replace view news_items_unapproved as select ci.item_id as item_id, cr.title as publish_title, cn.lead as publish_lead, cn.package_id as package_id, ao.creation_date::date as creation_date, 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.revision_id = ao.object_id and ao.creation_user = ps.person_id and cr.revision_id = content_item__get_live_revision(ci.item_id) and cr.revision_id = cn.news_id and cr.item_id = ci.item_id and cr.publish_date is null; -- One News Item Views -- -- View of all revisions of a news item -- RAL: for now, changed: -- content.blob_to_string(cr.content) as publish_body, -- to -- cr.content as publish_body -- create or replace view news_item_revisions as select cr.item_id as item_id, cr.revision_id, ci.live_revision, cr.title as publish_title, cn.lead as publish_lead, cr.content as publish_body, cr.publish_date, cn.archive_date, cr.description as log_entry, cr.mime_type as publish_format, 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; -- View of a submitted news item or active revision in unapproved state create or replace view news_item_unapproved as select cr.revision_id, ci.name as item_name, ps.first_names || ' ' || ps.last_name as item_creator, ao.creation_ip as item_creation_ip, ao.creation_date::date as creation_date from cr_revisions cr, cr_items ci, acs_objects ao, persons ps where ci.item_id = cr.item_id and cr.revision_id = ao.object_id and ao.creation_user = ps.person_id; -- View of a news item as of its active revision -- RAL: for now, changed: -- content.blob_to_string(cr.content) as publish_body, -- to -- cr.content as publish_body -- create or replace view news_item_full_active as select ci.item_id as item_id, cn.package_id as package_id, revision_id, cr.title as publish_title, cn.lead as publish_lead, cr.content as publish_body, cr.mime_type as publish_format, 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;