select define_function_args('content_item__copy','item_id,target_folder_id,creation_user,creation_ip,name'); create or replace function content_item__copy ( integer, integer, integer, varchar, varchar ) returns integer as ' declare copy__item_id alias for $1; copy__target_folder_id alias for $2; copy__creation_user alias for $3; copy__creation_ip alias for $4; -- default null copy__name alias for $5; -- default null v_current_folder_id cr_folders.folder_id%TYPE; v_num_revisions integer; v_name cr_items.name%TYPE; v_content_type cr_items.content_type%TYPE; v_locale cr_items.locale%TYPE; v_item_id cr_items.item_id%TYPE; v_revision_id cr_revisions.revision_id%TYPE; v_is_registered boolean; v_old_revision_id cr_revisions.revision_id%TYPE; v_new_revision_id cr_revisions.revision_id%TYPE; v_old_live_revision_id cr_revisions.revision_id%TYPE; v_new_live_revision_id cr_revisions.revision_id%TYPE; v_storage_type cr_items.storage_type%TYPE; begin -- call content_folder.copy if the item is a folder if content_folder__is_folder(copy__item_id) = ''t'' then PERFORM content_folder__copy( copy__item_id, copy__target_folder_id, copy__creation_user, copy__creation_ip, copy__name ); -- call content_symlink.copy if the item is a symlink else if content_symlink__is_symlink(copy__item_id) = ''t'' then PERFORM content_symlink__copy( copy__item_id, copy__target_folder_id, copy__creation_user, copy__creation_ip, copy__name ); -- call content_extlink.copy if the item is a URL else if content_extlink__is_extlink(copy__item_id) = ''t'' then PERFORM content_extlink__copy( copy__item_id, copy__target_folder_id, copy__creation_user, copy__creation_ip, copy__name ); -- make sure the target folder is really a folder else if content_folder__is_folder(copy__target_folder_id) = ''t'' then select parent_id into v_current_folder_id from cr_items where item_id = copy__item_id; select content_type, name, locale, coalesce(live_revision, latest_revision), storage_type into v_content_type, v_name, v_locale, v_revision_id, v_storage_type from cr_items where item_id = copy__item_id; -- copy to a different folder, or allow copy to the same folder -- with a different name if copy__target_folder_id != v_current_folder_id or ( v_name != copy__name and copy__name is not null ) then -- make sure the content type of the item is registered to the folder v_is_registered := content_folder__is_registered( copy__target_folder_id, v_content_type, ''f'' ); if v_is_registered = ''t'' then -- create the new content item v_item_id := content_item__new( coalesce (copy__name, v_name), copy__target_folder_id, null, v_locale, now(), copy__creation_user, null, copy__creation_ip, ''content_item'', v_content_type, null, null, ''text/plain'', null, null, v_storage_type ); select latest_revision, live_revision into v_old_revision_id, v_old_live_revision_id from cr_items where item_id = copy__item_id; end if; -- copy the latest revision (if any) to the new item if v_old_revision_id is not null then v_new_revision_id := content_revision__copy ( v_old_revision_id, null, v_item_id, copy__creation_user, copy__creation_ip ); end if; -- copy the live revision (if there is one and it differs from the latest) to the new item if v_old_live_revision_id is not null then if v_old_live_revision_id <> v_old_revision_id then v_new_live_revision_id := content_revision__copy ( v_old_live_revision_id, null, v_item_id, copy__creation_user, copy__creation_ip ); else v_new_live_revision_id := v_new_revision_id; end if; end if; update cr_items set live_revision = v_new_live_revision_id, latest_revision = v_new_revision_id where item_id = v_item_id; end if; end if; end if; end if; end if; return v_item_id; end;' language 'plpgsql'; select define_function_args('content_folder__is_folder','item_id'); -- add image__ procs that support package_id create or replace function image__new (varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,boolean,timestamptz,varchar,integer,integer,integer,integer) returns integer as ' declare new__name alias for $1; new__parent_id alias for $2; -- default null new__item_id alias for $3; -- default null new__revision_id alias for $4; -- default null new__mime_type alias for $5; -- default jpeg new__creation_user alias for $6; -- default null new__creation_ip alias for $7; -- default null new__relation_tag alias for $8; -- default null new__title alias for $9; -- default null new__description alias for $10; -- default null new__is_live alias for $11; -- default f new__publish_date alias for $12; -- default now() new__path alias for $13; new__file_size alias for $14; new__height alias for $15; new__width alias for $16; new__package_id alias for $17; -- default null new__locale varchar default null; new__nls_language varchar default null; new__creation_date timestamptz default current_timestamp; new__context_id integer; v_item_id cr_items.item_id%TYPE; v_package_id acs_objects.package_id%TYPE; v_revision_id cr_revisions.revision_id%TYPE; begin new__context_id := new__parent_id; if new__package_id is null then v_package_id := acs_object__package_id(new__parent_id); else v_package_id := new__package_id; end if; v_item_id := 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, ''content_item'', ''image'', null, new__description, new__mime_type, new__nls_language, null, ''file'', -- storage_type v_package_id ); -- update cr_child_rels to have the correct relation_tag update cr_child_rels set relation_tag = new__relation_tag where parent_id = new__parent_id and child_id = new__item_id and relation_tag = content_item__get_content_type(new__parent_id) || ''-'' || ''image''; v_revision_id := content_revision__new ( new__title, new__description, new__publish_date, new__mime_type, new__nls_language, null, v_item_id, new__revision_id, new__creation_date, new__creation_user, new__creation_ip, v_package_id ); insert into images (image_id, height, width) values (v_revision_id, new__height, new__width); -- update revision with image file info update cr_revisions set content_length = new__file_size, content = new__path where revision_id = v_revision_id; -- is_live => ''t'' not used as part of content_item.new -- because content_item.new does not let developer specify revision_id, -- revision_id is determined in advance 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 image__new (varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,boolean,timestamptz,varchar,integer,integer,integer ) returns integer as ' declare new__name alias for $1; new__parent_id alias for $2; -- default null new__item_id alias for $3; -- default null new__revision_id alias for $4; -- default null new__mime_type alias for $5; -- default jpeg new__creation_user alias for $6; -- default null new__creation_ip alias for $7; -- default null new__relation_tag alias for $8; -- default null new__title alias for $9; -- default null new__description alias for $10; -- default null new__is_live alias for $11; -- default f new__publish_date alias for $12; -- default now() new__path alias for $13; new__file_size alias for $14; new__height alias for $15; new__width alias for $16; begin return image__new(new__name, new__parent_id, new__item_id, new__revision_id, new__mime_type, new__creation_user, new__creation_ip, new__relation_tag, new__title, new__description, new__is_live, new__publish_date, new__path, new__file_size, new__height, new__width, null ); end; ' language 'plpgsql'; -- DRB's version create or replace function image__new (varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,varchar, varchar,timestamptz,integer, integer, integer) returns integer as ' declare p_name alias for $1; p_parent_id alias for $2; -- default null p_item_id alias for $3; -- default null p_revision_id alias for $4; -- default null p_mime_type alias for $5; -- default jpeg p_creation_user alias for $6; -- default null p_creation_ip alias for $7; -- default null p_title alias for $8; -- default null p_description alias for $9; -- default null p_storage_type alias for $10; p_content_type alias for $11; p_nls_language alias for $12; p_publish_date alias for $13; p_height alias for $14; p_width alias for $15; p_package_id alias for $16; -- default null v_item_id cr_items.item_id%TYPE; v_revision_id cr_revisions.revision_id%TYPE; v_package_id acs_objects.package_id%TYPE; begin if content_item__is_subclass(p_content_type, ''image'') = ''f'' then raise EXCEPTION ''-20000: image__new can only be called for an image type''; end if; if p_package_id is null then v_package_id := acs_object__package_id(p_parent_id); else v_package_id := p_package_id; end if; v_item_id := content_item__new ( p_name, p_parent_id, p_item_id, null, current_timestamp, p_creation_user, p_parent_id, p_creation_ip, ''content_item'', p_content_type, null, null, null, null, null, p_storage_type, v_package_id ); -- We will let the caller fill in the LOB data or file path. v_revision_id := content_revision__new ( p_title, p_description, p_publish_date, p_mime_type, p_nls_language, null, v_item_id, p_revision_id, current_timestamp, p_creation_user, p_creation_ip, v_package_id ); insert into images (image_id, height, width) values (v_revision_id, p_height, p_width); return v_item_id; end; ' language 'plpgsql'; create or replace function image__new (varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,varchar, varchar,timestamptz,integer, integer) returns integer as ' declare p_name alias for $1; p_parent_id alias for $2; -- default null p_item_id alias for $3; -- default null p_revision_id alias for $4; -- default null p_mime_type alias for $5; -- default jpeg p_creation_user alias for $6; -- default null p_creation_ip alias for $7; -- default null p_title alias for $8; -- default null p_description alias for $9; -- default null p_storage_type alias for $10; p_content_type alias for $11; p_nls_language alias for $12; p_publish_date alias for $13; p_height alias for $14; p_width alias for $15; begin return image__new(p_name, p_parent_id, p_item_id, p_revision_id, p_mime_type, p_creation_user, p_creation_ip, p_title, p_description, p_storage_type, p_content_type, p_nls_language, p_publish_date, p_height, p_width, null ); end; ' language 'plpgsql'; create or replace function image__new_revision(integer, integer, varchar, varchar, timestamptz, varchar, varchar, integer, varchar, integer, integer, integer) returns integer as ' declare p_item_id alias for $1; p_revision_id alias for $2; p_title alias for $3; p_description alias for $4; p_publish_date alias for $5; p_mime_type alias for $6; p_nls_language alias for $7; p_creation_user alias for $8; p_creation_ip alias for $9; p_height alias for $10; p_width alias for $11; p_package_id alias for $12; v_revision_id integer; v_package_id acs_objects.package_id%TYPE; begin -- We will let the caller fill in the LOB data or file path. if p_package_id is null then v_package_id := acs_object__package_id(p_item_id); else v_package_id := p_package_id; end if; v_revision_id := content_revision__new ( p_title, p_description, p_publish_date, p_mime_type, p_nls_language, null, p_item_id, p_revision_id, current_timestamp, p_creation_user, p_creation_ip, v_package_id ); insert into images (image_id, height, width) values (v_revision_id, p_height, p_width); return v_revision_id; end;' language 'plpgsql'; create or replace function image__new_revision(integer,integer,varchar,varchar,timestamptz,varchar,varchar, integer,varchar,integer,integer) returns integer as ' declare p_item_id alias for $1; p_revision_id alias for $2; p_title alias for $3; p_description alias for $4; p_publish_date alias for $5; p_mime_type alias for $6; p_nls_language alias for $7; p_creation_user alias for $8; p_creation_ip alias for $9; p_height alias for $10; p_width alias for $11; v_revision_id integer; begin return image__new_revision(p_item_id, p_revision_id, p_title, p_description, p_publish_date, p_mime_type, p_nls_language, p_creation_user, p_creation_ip, p_height, p_width, p_revision_id, null ); end;' language 'plpgsql';