-- -- reduce number of versions of content_item__new from 12 to 6 by using defaults -- commented differences -- commented arguments of plpgsql functions with long argument lists -- reduced code duplication by basing one version of content_item__new/17 directly on /20 -- marking on version of content_item__new/17 and content_item__new/6 as deprecated -- -- content_item__new/19 content_item__new/20 DROP FUNCTION IF EXISTS content_item__new(character varying, integer, integer, character varying, timestamp with time zone, integer, integer, character varying, character varying, character varying, character varying, text, character varying, character varying, character varying, text, character varying, boolean, character varying, integer); DROP FUNCTION IF EXISTS content_item__new(character varying, integer, integer, character varying, timestamp with time zone, integer, integer, character varying, character varying, character varying, character varying, text, character varying, character varying, character varying, text, character varying, boolean, character varying); -- content_item__new/16 content_item__new/17 DROP FUNCTION IF EXISTS content_item__new(varchar, integer, integer, varchar, timestamptz, integer, integer, varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar, integer); DROP FUNCTION IF EXISTS content_item__new(varchar, integer, integer, varchar, timestamptz, integer, integer, varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar); -- content_item__new/15 content_item__new/16 DROP FUNCTION IF EXISTS content_item__new(varchar,integer,integer, varchar,timestamptz, integer, integer, varchar, varchar, varchar, varchar, varchar, varchar, varchar, integer, integer); DROP FUNCTION IF EXISTS content_item__new(varchar,integer,integer, varchar,timestamptz, integer, integer, varchar, varchar, varchar, varchar, varchar, varchar, varchar, integer); -- content_item__new/5 content_item__new/6 DROP FUNCTION IF EXISTS content_item__new(varchar, integer, varchar, text, text, integer); DROP FUNCTION IF EXISTS content_item__new(varchar, integer, varchar, text, text); -- content_item__new/2 content_item__new/3 DROP FUNCTION IF EXISTS content_item__new(varchar, integer, integer); DROP FUNCTION IF EXISTS content_item__new(varchar, integer); -- procedure content_item__new/16 content_item__new/17 DROP FUNCTION IF EXISTS content_item__new(integer, varchar, integer, varchar, timestamptz, integer, integer, varchar, boolean, varchar, text, varchar, boolean, varchar, varchar, varchar, integer); DROP FUNCTION IF EXISTS content_item__new(integer, varchar, integer, varchar, timestamptz, integer, integer, varchar, boolean, varchar, text, varchar, boolean, varchar, varchar, varchar); select define_function_args('content_item__new','name,parent_id;null,item_id;null,locale;null,creation_date;now,creation_user;null,context_id;null,creation_ip;null,item_subtype;content_item,content_type;content_revision,title;null,description;null,mime_type;text/plain,nls_language;null,text;null,data;null,relation_tag;null,is_live;f,storage_type;null,package_id;null'); -- -- procedure content_item__new/20 content_item__new/19 -- CREATE OR REPLACE FUNCTION content_item__new( new__name cr_items.name%TYPE, new__parent_id cr_items.parent_id%TYPE, -- default null new__item_id acs_objects.object_id%TYPE, -- default null new__locale cr_items.locale%TYPE, -- default null new__creation_date acs_objects.creation_date%TYPE, -- default now -- default 'now' new__creation_user acs_objects.creation_user%TYPE, -- default null new__context_id acs_objects.context_id%TYPE, -- default null new__creation_ip acs_objects.creation_ip%TYPE, -- default null new__item_subtype acs_object_types.object_type%TYPE, -- default 'content_item' new__content_type acs_object_types.object_type%TYPE, -- default 'content_revision' new__title cr_revisions.title%TYPE, -- default null new__description cr_revisions.description%TYPE, -- default null new__mime_type cr_revisions.mime_type%TYPE, -- default 'text/plain' new__nls_language cr_revisions.nls_language%TYPE, -- default null new__text varchar, -- default null new__data cr_revisions.content%TYPE, -- default null new__relation_tag cr_child_rels.relation_tag%TYPE, -- default null new__is_live boolean, -- default 'f' new__storage_type cr_items.storage_type%TYPE, -- default null new__package_id acs_objects.package_id%TYPE default null ) RETURNS integer AS $$ DECLARE v_parent_id cr_items.parent_id%TYPE; v_parent_type acs_objects.object_type%TYPE; v_item_id cr_items.item_id%TYPE; v_title cr_revisions.title%TYPE; v_revision_id cr_revisions.revision_id%TYPE; v_rel_id acs_objects.object_id%TYPE; v_rel_tag cr_child_rels.relation_tag%TYPE; v_context_id acs_objects.context_id%TYPE; v_storage_type cr_items.storage_type%TYPE; BEGIN -- place the item in the context of the pages folder if no -- context specified if new__parent_id is null then select c_root_folder_id from content_item_globals into v_parent_id; else v_parent_id := new__parent_id; end if; -- Determine context_id if new__context_id is null then v_context_id := v_parent_id; else v_context_id := new__context_id; end if; -- use the name of the item if no title is supplied if new__title is null or new__title = '' then v_title := new__name; else v_title := new__title; end if; if v_parent_id = -4 or content_folder__is_folder(v_parent_id) = 't' then if v_parent_id != -4 and content_folder__is_registered( v_parent_id, new__content_type, 'f') = 'f' then raise EXCEPTION '-20000: This items content type % is not registered to this folder %', new__content_type, v_parent_id; end if; else if v_parent_id != -4 then if new__relation_tag is null then v_rel_tag := content_item__get_content_type(v_parent_id) || '-' || new__content_type; else v_rel_tag := new__relation_tag; end if; select object_type into v_parent_type from acs_objects where object_id = v_parent_id; if NOT FOUND then raise EXCEPTION '-20000: Invalid parent ID % specified in content_item.new', v_parent_id; end if; if content_item__is_subclass(v_parent_type, 'content_item') = 't' and content_item__is_valid_child(v_parent_id, new__content_type, v_rel_tag) = 'f' then raise EXCEPTION '-20000: This items content type % is not allowed in this container %', new__content_type, v_parent_id; end if; end if; end if; -- Create the object v_item_id := acs_object__new( new__item_id, new__item_subtype, new__creation_date, new__creation_user, new__creation_ip, v_context_id, 't', v_title, new__package_id ); insert into cr_items ( item_id, name, content_type, parent_id, storage_type ) values ( v_item_id, new__name, new__content_type, v_parent_id, new__storage_type ); -- if the parent is not a folder, insert into cr_child_rels if v_parent_id != -4 and content_folder__is_folder(v_parent_id) = 'f' then v_rel_id := acs_object__new( null, 'cr_item_child_rel', now(), null, null, v_parent_id, 't', v_rel_tag || ': ' || v_parent_id || ' - ' || v_item_id, new__package_id ); insert into cr_child_rels ( rel_id, parent_id, child_id, relation_tag, order_n ) values ( v_rel_id, v_parent_id, v_item_id, v_rel_tag, v_item_id ); end if; if new__data is not null then -- call content_revision__new/13 v_revision_id := content_revision__new( v_title, new__description, now(), -- publish_date new__mime_type, new__nls_language, new__data, v_item_id, null, -- revision_id new__creation_date, new__creation_user, new__creation_ip, null, new__package_id ); elsif new__text is not null or new__title is not null then -- call content_revision__new/13 v_revision_id := content_revision__new( v_title, new__description, now(), -- publish_date new__mime_type, new__nls_language, new__text, v_item_id, null, -- revision_id new__creation_date, new__creation_user, new__creation_ip, null, new__package_id ); end if; -- make the revision live if is_live is true if new__is_live = 't' then PERFORM content_item__set_live_revision(v_revision_id); end if; return v_item_id; END; $$ LANGUAGE plpgsql; -- -- procedure content_item__new/16 content_item__new/17 -- CREATE OR REPLACE FUNCTION content_item__new( new__name varchar, new__parent_id integer, -- default null new__item_id integer, -- default null new__locale varchar, -- default null new__creation_date timestamptz, -- default now() new__creation_user integer, -- default null new__context_id integer, -- default null new__creation_ip varchar, -- default null new__item_subtype varchar, -- default 'content_item' new__content_type varchar, -- default 'content_revision' new__title varchar, -- default null new__description varchar, -- default null new__mime_type varchar, -- default 'text/plain' new__nls_language varchar, -- default null new__text varchar, -- default null new__storage_type varchar, -- check in ('text','file') new__package_id integer default null ) RETURNS integer AS $$ -- -- content_item__new/17 might become obsolete, when we define proper defaults for /20 -- DECLARE BEGIN raise NOTICE 'content_item__new/17 is deprecated, call content_item__new/20 instead'; return content_item__new(new__name, new__parent_id, new__item_id, new__locale, new__creation_date, new__creation_user, new__context_id, new__creation_ip, new__item_subtype, new__content_type, new__title, new__description, new__mime_type, new__nls_language, new__text, null, -- data null, -- relation_tag 'f', -- is_live new__storage_type, new__package_id ); END; $$ LANGUAGE plpgsql; -- -- procedure content_item__new/15 content_item__new/16 -- CREATE OR REPLACE FUNCTION content_item__new( new__name varchar, new__parent_id integer, -- default null new__item_id integer, -- default null new__locale varchar, -- default null new__creation_date timestamptz, -- default now() new__creation_user integer, -- default null new__context_id integer, -- default null new__creation_ip varchar, -- default null new__item_subtype varchar, -- default 'content_item' new__content_type varchar, -- default 'content_revision' new__title varchar, -- default null new__description varchar, -- default null new__mime_type varchar, -- default 'text/plain' new__nls_language varchar, -- default null new__data integer, -- default null new__package_id integer default null ) RETURNS integer AS $$ -- -- content_item__new/16 maybe obsolete, when we define proper defaults for /20 -- -- This version passes "data" as integer (lob version), most other use -- "text" and "storage_type" -- DECLARE new__relation_tag varchar default null; new__is_live boolean default 'f'; v_parent_id cr_items.parent_id%TYPE; v_parent_type acs_objects.object_type%TYPE; v_item_id cr_items.item_id%TYPE; v_revision_id cr_revisions.revision_id%TYPE; v_title cr_revisions.title%TYPE; v_rel_id acs_objects.object_id%TYPE; v_rel_tag cr_child_rels.relation_tag%TYPE; v_context_id acs_objects.context_id%TYPE; BEGIN -- place the item in the context of the pages folder if no -- context specified if new__parent_id is null then select c_root_folder_id from content_item_globals into v_parent_id; else v_parent_id := new__parent_id; end if; -- Determine context_id if new__context_id is null then v_context_id := v_parent_id; else v_context_id := new__context_id; end if; -- use the name of the item if no title is supplied if new__title is null or new__title = '' then v_title := new__name; else v_title := new__title; end if; if v_parent_id = -4 or content_folder__is_folder(v_parent_id) = 't' then if v_parent_id != -4 and content_folder__is_registered( v_parent_id, new__content_type, 'f') = 'f' then raise EXCEPTION '-20000: This items content type % is not registered to this folder %', new__content_type, v_parent_id; end if; else if v_parent_id != -4 then select object_type into v_parent_type from acs_objects where object_id = v_parent_id; if NOT FOUND then raise EXCEPTION '-20000: Invalid parent ID % specified in content_item.new', v_parent_id; end if; if content_item__is_subclass(v_parent_type, 'content_item') = 't' and content_item__is_valid_child(v_parent_id, new__content_type) = 'f' then raise EXCEPTION '-20000: This items content type % is not allowed in this container %', new__content_type, v_parent_id; end if; end if; end if; -- Create the object v_item_id := acs_object__new( new__item_id, new__item_subtype, new__creation_date, new__creation_user, new__creation_ip, v_context_id, 't', v_title, new__package_id ); insert into cr_items ( item_id, name, content_type, parent_id, storage_type ) values ( v_item_id, new__name, new__content_type, v_parent_id, 'lob' ); -- if the parent is not a folder, insert into cr_child_rels if v_parent_id != -4 and content_folder__is_folder(v_parent_id) = 'f' and content_item__is_valid_child(v_parent_id, new__content_type) = 't' then if new__relation_tag is null or new__relation_tag = '' then v_rel_tag := content_item__get_content_type(v_parent_id) || '-' || new__content_type; else v_rel_tag := new__relation_tag; end if; v_rel_id := acs_object__new( null, 'cr_item_child_rel', now(), null, null, v_parent_id, 't', v_rel_tag || ': ' || v_parent_id || ' - ' || v_item_id, new__package_id ); insert into cr_child_rels ( rel_id, parent_id, child_id, relation_tag, order_n ) values ( v_rel_id, v_parent_id, v_item_id, v_rel_tag, v_item_id ); end if; -- create the revision if data or title is not null if new__data is not null then -- call content_revision__new/12 (data is integer) v_revision_id := content_revision__new( v_title, new__description, now(), -- publish_date new__mime_type, new__nls_language, new__data, v_item_id, null, -- revision_id new__creation_date, new__creation_user, new__creation_ip, new__package_id ); elsif new__title is not null then -- call content_revision__new/13 (data is null) v_revision_id := content_revision__new( v_title, new__description, now(), -- publish_date new__mime_type, new_nls_language, null, -- data/text v_item_id, null, -- revision_id new__creation_date, new__creation_user, new__creation_ip, null, new__package_id ); end if; -- make the revision live if is_live is true if new__is_live = 't' then PERFORM content_item__set_live_revision(v_revision_id); end if; return v_item_id; END; $$ LANGUAGE plpgsql; -- -- procedure content_item__new/5 content_item__new/6 -- CREATE OR REPLACE FUNCTION content_item__new( new__name varchar, new__parent_id integer, -- default null new__title varchar, -- default null new__description text, -- default null new__text text, -- default null new__package_id integer default null ) RETURNS integer AS $$ DECLARE BEGIN raise NOTICE 'content_item__new/6 is deprecated, call content_item__new/20 instead'; -- calls content_item__new/20 return content_item__new(new__name, new__parent_id, null, -- item_id null, -- locale now(), -- creation_date null, -- creation_user null, -- context_id null, -- creation_ip 'content_item', -- item_subtype 'content_revision', -- content_type new__title, new__description, 'text/plain', -- mime_type null, -- nls_language new__text, null, -- data null, -- relation_tag 'f', -- is_live 'text', -- storage_type new__package_id ); END; $$ LANGUAGE plpgsql; -- -- procedure content_item__new/2 content_item__new/3 -- CREATE OR REPLACE FUNCTION content_item__new( new__name varchar, new__parent_id integer, new__package_id integer default null ) RETURNS integer AS $$ -- -- calls content_item__new/6 -- DECLARE BEGIN return content_item__new(new__name, new__parent_id, null, null, null, new__package_id); END; $$ LANGUAGE plpgsql; -- function new -- sets security_inherit_p to FALSE -DaveB -- -- procedure content_item__new/16 content_item__new/17 -- CREATE OR REPLACE FUNCTION content_item__new( new__item_id integer, --default null new__name varchar, new__parent_id integer, -- default null new__title varchar, -- default null new__creation_date timestamptz, -- default now() new__creation_user integer, -- default null new__context_id integer, -- default null new__creation_ip varchar, -- default null new__is_live boolean, -- default 'f' new__mime_type varchar, new__text text, -- default null new__storage_type varchar, -- check in ('text', 'file') new__security_inherit_p boolean, -- default 't' new__storage_area_key varchar, -- default 'CR_FILES' new__item_subtype varchar, new__content_type varchar, new__package_id integer default null ) RETURNS integer AS $$ -- -- content_item__new/17 maybe obsolete, when we define proper defaults for /20 -- -- differs from other content_item__new/17 by -- this version has 1st arg item_id vs. 3rd arg (differs as well from /20) -- this version does not have a "locale" and "nls_language" -- this version has "is_live" (like /20) -- this version has "security_inherit_p" DECLARE new__description varchar default null; new__relation_tag varchar default null; new__nls_language varchar default null; v_parent_id cr_items.parent_id%TYPE; v_parent_type acs_objects.object_type%TYPE; v_item_id cr_items.item_id%TYPE; v_revision_id cr_revisions.revision_id%TYPE; v_title cr_revisions.title%TYPE; v_rel_id acs_objects.object_id%TYPE; v_rel_tag cr_child_rels.relation_tag%TYPE; v_context_id acs_objects.context_id%TYPE; BEGIN -- place the item in the context of the pages folder if no -- context specified if new__parent_id is null then select c_root_folder_id from content_item_globals into v_parent_id; else v_parent_id := new__parent_id; end if; -- Determine context_id if new__context_id is null then v_context_id := v_parent_id; else v_context_id := new__context_id; end if; -- use the name of the item if no title is supplied if new__title is null or new__title = '' then v_title := new__name; else v_title := new__title; end if; if v_parent_id = -4 or content_folder__is_folder(v_parent_id) = 't' then if v_parent_id != -4 and content_folder__is_registered( v_parent_id, new__content_type, 'f') = 'f' then raise EXCEPTION '-20000: This items content type % is not registered to this folder %', new__content_type, v_parent_id; end if; else if v_parent_id != -4 then select object_type into v_parent_type from acs_objects where object_id = v_parent_id; if NOT FOUND then raise EXCEPTION '-20000: Invalid parent ID % specified in content_item.new', v_parent_id; end if; if content_item__is_subclass(v_parent_type, 'content_item') = 't' and content_item__is_valid_child(v_parent_id, new__content_type) = 'f' then raise EXCEPTION '-20000: This items content type % is not allowed in this container %', new__content_type, v_parent_id; end if; end if; end if; -- Create the object v_item_id := acs_object__new( new__item_id, new__item_subtype, new__creation_date, new__creation_user, new__creation_ip, v_context_id, new__security_inherit_p, v_title, new__package_id ); insert into cr_items ( item_id, name, content_type, parent_id, storage_type, storage_area_key ) values ( v_item_id, new__name, new__content_type, v_parent_id, new__storage_type, new__storage_area_key ); -- if the parent is not a folder, insert into cr_child_rels if v_parent_id != -4 and content_folder__is_folder(v_parent_id) = 'f' and content_item__is_valid_child(v_parent_id, new__content_type) = 't' then if new__relation_tag is null then v_rel_tag := content_item__get_content_type(v_parent_id) || '-' || new__content_type; else v_rel_tag := new__relation_tag; end if; v_rel_id := acs_object__new( null, 'cr_item_child_rel', new__creation_date, null, null, v_parent_id, 'f', v_rel_tag || ': ' || v_parent_id || ' - ' || v_item_id, new__package_id ); insert into cr_child_rels ( rel_id, parent_id, child_id, relation_tag, order_n ) values ( v_rel_id, v_parent_id, v_item_id, v_rel_tag, v_item_id ); end if; if new__title is not null or new__text is not null then -- call content_revision__new/13 v_revision_id := content_revision__new( v_title, new__description, now(), -- publish_date new__mime_type, null, -- nls_language, new__text, v_item_id, null, -- revision_id new__creation_date, new__creation_user, new__creation_ip, null, -- content_length new__package_id ); end if; -- make the revision live if is_live is true if new__is_live = 't' then PERFORM content_item__set_live_revision(v_revision_id); end if; return v_item_id; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION content_item__new( new__name varchar, new__parent_id integer, -- default null new__title varchar default null, new__description text default null, new__text text default null, new__package_id integer default null ) RETURNS integer AS $$ -- -- content_item__new/6 maybe obsolete, when we define proper defaults for /20 -- -- calls content_item__new/17 DECLARE BEGIN return content_item__new(new__name, new__parent_id, null, null, now(), null, null, null, 'content_item', 'content_revision', new__title, new__description, 'text/plain', null, new__text, 'text', new__package_id ); END; $$ LANGUAGE plpgsql;