--add new pl/pgsql proc --Dave Bauer dave@thedesignexperience.org --2003-09-22 create or replace function etp__create_page(integer, integer, varchar, varchar, varchar) returns integer as ' declare p_item_id alias for $1; p_package_id alias for $2; p_name alias for $3; p_title alias for $4; p_content_type alias for $5; -- default null -> use content_revision v_item_id integer; v_revision_id integer; v_folder_id integer; begin if p_item_id is null then v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id); else v_item_id := acs_object__new(p_item_id, ''content_item'', now(), null, null, p_package_id); end if; v_folder_id := etp__get_folder_id(p_package_id); -- due to a change in acs_object__delete we can reference the actual -- object type we want -- using this we can more easily search, but we will have to create a service -- contract for each custom content type -- we define a default etp_page_revision and service contract to go with it -- make sure to subtype from etp_page_revision for any custom types -- 2003-01-12 DaveB insert into cr_items ( item_id, parent_id, name, content_type ) values ( v_item_id, v_folder_id, p_name, p_content_type ); v_revision_id := acs_object__new(null, p_content_type, now(), null, null, v_item_id); insert into cr_revisions (revision_id, item_id, title, publish_date, mime_type) values (v_revision_id, v_item_id, p_title, now(), ''text/html''); update cr_items set live_revision = v_revision_id where item_id = v_item_id; return 1; end; ' language 'plpgsql'; create or replace function etp__create_new_revision(integer, varchar, integer, integer) returns integer as ' declare p_package_id alias for $1; p_name alias for $2; p_user_id alias for $3; p_revision_id alias for $4; v_revision_id integer; v_item_id integer; v_content_type varchar; begin select max(r.revision_id) into v_revision_id from cr_revisions r, cr_items i where i.name = p_name and i.parent_id = etp__get_folder_id(p_package_id) and r.item_id = i.item_id; select item_id into v_item_id from cr_revisions where revision_id = v_revision_id; select object_type into v_content_type from acs_objects where object_id = v_revision_id; -- cannot use acs_object__new because it creates attributes with their -- default values, which is not what we want. insert into acs_objects (object_id, object_type, creation_date, creation_user, context_id) values (p_revision_id, v_content_type, now(), p_user_id, v_item_id); insert into cr_revisions (revision_id, item_id, title, description, content, mime_type) select p_revision_id, item_id, title, description, content, mime_type from cr_revisions r where r.revision_id = v_revision_id; -- copy extended attributes to the new revision, if there are any insert into acs_attribute_values (object_id, attribute_id, attr_value) select p_revision_id as object_id, attribute_id, attr_value from acs_attribute_values where object_id = v_revision_id; return 1; end; ' language 'plpgsql';