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';