-- Data model to support release scheduling of items in the content -- repository of the ArsDigita Publishing System -- Copyright (C) 1999-2000 ArsDigita Corporation -- Author: Karl Goldstein (karlg@arsdigita.com) -- $Id: content-schedule.sql,v 1.10 2011/07/07 10:46:02 gustafn Exp $ -- This is free software distributed under the terms of the GNU Public -- License. Full text of the license is available from the GNU Project: -- http://www.fsf.org/copyleft/gpl.html -- prompt *** Preparing for scheduled updates to live content... CREATE OR REPLACE FUNCTION cr_scheduled_release_tr () RETURNS trigger AS $$ BEGIN raise EXCEPTION '-20000: Inserts are not allowed into cr_scheduled_release_job.'; return new; END; $$ LANGUAGE plpgsql; create trigger cr_scheduled_release_tr before insert on cr_scheduled_release_job for each row execute procedure cr_scheduled_release_tr (); -- show errors -- Update the publishing status for items that are due to be released -- or expired. -- -- procedure cr_scheduled_release_exec/0 -- CREATE OR REPLACE FUNCTION cr_scheduled_release_exec( ) RETURNS integer AS $$ DECLARE exec__last_exec timestamptz; exec__this_exec timestamptz default current_timestamp; exec__items_released integer default 0; exec__items_expired integer default 0; exec__err_num integer; -- sqlcode exec__err_msg varchar; -- substr(sqlerrm, 1, 500); item_rec record; BEGIN select last_exec into exec__last_exec from cr_scheduled_release_job; for item_rec in select p.item_id, live_revision from cr_release_periods p, cr_items i where start_when between exec__last_exec and now() and p.item_id = i.item_id LOOP -- update publish status update cr_items set publish_status = 'live' where item_id = item_rec.item_id; exec__items_released := exec__items_released + 1; end loop; for item_rec in select p.item_id, live_revision from cr_release_periods p, cr_items i where end_when between exec__last_exec and now() and p.item_id = i.item_id LOOP -- update publish status update cr_items set publish_status = 'expired' where item_id = item_rec.item_id; exec__items_expired := exec__items_expired + 1; end loop; -- exception -- when others then -- err_num := SQLCODE; -- err_msg := substr(SQLERRM, 1, 500); -- end; -- keep a record of the update insert into cr_scheduled_release_log ( items_released, items_expired, err_num, err_msg ) values ( exec__items_released, exec__items_expired, exec__err_num, exec__err_msg ); -- Table was growing without bound (OpenACS DanW) delete from cr_scheduled_release_log where exec_date < now() - '4 week'::interval; -- Reset the last time of execution to start of processing update cr_scheduled_release_job set last_exec = exec__this_exec; return 0; END; $$ LANGUAGE plpgsql;