-- Data model to keep a journal of all actions on objects. -- -- -- @author Lars Pind (lars@pinds.com) -- @creation-date 2000-22-18 -- @cvs-id $Id: journal-create.sql,v 1.11 2011/07/07 10:46:02 gustafn Exp $ -- -- Copyright (C) 1999-2000 ArsDigita Corporation -- -- 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 CREATE OR REPLACE FUNCTION inline_0 () RETURNS integer AS $$ BEGIN PERFORM acs_object_type__create_type ( 'journal_entry', 'Journal Entry', 'Journal Entries', 'acs_object', 'journal_entries', 'journal_id', 'journal_entry', 'f', null, null ); -- XXX fill in all the attributes in later. return 0; END; $$ LANGUAGE plpgsql; select inline_0 (); drop function inline_0 (); -- show errors create table journal_entries ( journal_id integer constraint journal_entries_journal_id_fk references acs_objects (object_id) constraint journal_entries_journal_id_pk primary key, object_id integer constraint journal_entries_object_id_fk references acs_objects on delete cascade, action varchar(100), action_pretty text, msg text ); create index journal_entries_object_idx on journal_entries (object_id); comment on table journal_entries is ' Keeps track of actions performed on objects, e.g. banning a user, starting or finishing a workflow task, etc. '; -- create or replace package journal_entry -- as -- -- function new ( -- journal_id in journal_entries.journal_id%TYPE default null, -- object_id in journal_entries.object_id%TYPE, -- action in journal_entries.action%TYPE, -- action_pretty in journal_entries.action_pretty%TYPE default null, -- creation_date in acs_objects.creation_date%TYPE default sysdate, -- creation_user in acs_objects.creation_user%TYPE default null, -- creation_ip in acs_objects.creation_ip%TYPE default null, -- msg in journal_entries.msg%TYPE default null -- ) return journal_entries.journal_id%TYPE; -- -- procedure delete( -- journal_id in journal_entries.journal_id%TYPE -- ); -- -- procedure delete_for_object( -- object_id in acs_objects.object_id%TYPE -- ); -- -- end journal_entry; -- show errors -- create or replace package body journal_entry -- function new -- added select define_function_args('journal_entry__new','journal_id;null,object_id,action,action_pretty;null,creation_date;now(),creation_user;null,creation_ip;null,msg;null'); -- -- procedure journal_entry__new/8 -- CREATE OR REPLACE FUNCTION journal_entry__new( new__journal_id integer, -- default null new__object_id integer, new__action varchar, new__action_pretty varchar, -- default null new__creation_date timestamptz, -- default now() new__creation_user integer, -- default null new__creation_ip varchar, -- default null new__msg varchar -- default null ) RETURNS integer AS $$ DECLARE v_journal_id journal_entries.journal_id%TYPE; BEGIN v_journal_id := acs_object__new ( new__journal_id, 'journal_entry', new__creation_date, new__creation_user, new__creation_ip, new__object_id, 't', new__action, null ); insert into journal_entries ( journal_id, object_id, action, action_pretty, msg ) values ( v_journal_id, new__object_id, new__action, new__action_pretty, new__msg ); return v_journal_id; END; $$ LANGUAGE plpgsql; -- procedure delete -- added select define_function_args('journal_entry__delete','journal_id'); -- -- procedure journal_entry__delete/1 -- CREATE OR REPLACE FUNCTION journal_entry__delete( delete__journal_id integer ) RETURNS integer AS $$ DECLARE BEGIN delete from journal_entries where journal_id = delete__journal_id; PERFORM acs_object__delete(delete__journal_id); return 0; END; $$ LANGUAGE plpgsql; -- procedure delete_for_object -- added select define_function_args('journal_entry__delete_for_object','object_id'); -- -- procedure journal_entry__delete_for_object/1 -- CREATE OR REPLACE FUNCTION journal_entry__delete_for_object( delete_for_object__object_id integer ) RETURNS integer AS $$ DECLARE journal_rec record; BEGIN for journal_rec in select journal_id from journal_entries where object_id = delete_for_object__object_id LOOP PERFORM journal_entry__delete(journal_rec.journal_id); end loop; return 0; END; $$ LANGUAGE plpgsql; -- show errors