create or replace function content_item__copy2 (integer,integer,integer,varchar)
returns integer as '
declare
copy2__item_id alias for $1;
copy2__target_folder_id alias for $2;
copy2__creation_user alias for $3;
copy2__creation_ip alias for $4; -- 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_storage_type cr_items.storage_type%TYPE;
begin
-- call content_folder.copy if the item is a folder
if content_folder__is_folder(copy2__item_id) = ''t'' then
PERFORM content_folder__copy(
copy2__item_id,
copy2__target_folder_id,
copy2__creation_user,
copy2__creation_ip
);
-- call content_symlink.copy if the item is a symlink
else if content_symlink__is_symlink(copy2__item_id) = ''t'' then
PERFORM content_symlink__copy(
copy2__item_id,
copy2__target_folder_id,
copy2__creation_user,
copy2__creation_ip
);
-- call content_extlink.copy if the item is a URL
else if content_extlink__is_extlink(copy2__item_id) = ''t'' then
PERFORM content_extlink__copy(
copy2__item_id,
copy2__target_folder_id,
copy2__creation_user,
copy2__creation_ip
);
-- make sure the target folder is really a folder
else if content_folder__is_folder(copy2__target_folder_id) = ''t'' then
select
parent_id
into
v_current_folder_id
from
cr_items
where
item_id = copy2__item_id;
-- can''t copy to the same folder
if copy2__target_folder_id != v_current_folder_id then
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 = copy2__item_id;
-- make sure the content type of the item is registered to the folder
v_is_registered := content_folder__is_registered(
copy2__target_folder_id,
v_content_type,
''f''
);
if v_is_registered = ''t'' then
-- create the new content item
v_item_id := content_item__new(
v_name,
copy2__target_folder_id,
null,
v_locale,
now(),
copy2__creation_user,
null,
copy2__creation_ip,
''content_item'',
v_content_type,
null,
null,
''text/plain'',
null,
null,
v_storage_type
);
-- get the latest revision of the old item
select
latest_revision into v_old_revision_id
from
cr_items
where
item_id = copy2__item_id;
-- 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,
copy2__creation_user,
copy2__creation_ip
);
end if;
end if;
end if;
end if; end if; end if; end if;
return v_item_id;
end;' language 'plpgsql';
create or replace function content_extlink__copy (integer,integer,integer,varchar)
returns integer as '
declare
copy__extlink_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
v_current_folder_id cr_folders.folder_id%TYPE;
v_name cr_items.name%TYPE;
v_url cr_extlinks.url%TYPE;
v_description cr_extlinks.description%TYPE;
v_label cr_extlinks.label%TYPE;
v_extlink_id cr_extlinks.extlink_id%TYPE;
begin
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__extlink_id;
-- can''t copy to the same folder
if copy__target_folder_id != v_current_folder_id then
select
i.name, e.url, e.description, e.label
into
v_name, v_url, v_description, v_label
from
cr_extlinks e, cr_items i
where
e.extlink_id = i.item_id
and
e.extlink_id = copy__extlink_id;
if content_folder__is_registered(copy__target_folder_id,
''content_extlink'',''f'') = ''t'' then
v_extlink_id := content_extlink__new(
v_name,
v_url,
v_label,
v_description,
copy__target_folder_id,
null,
current_timestamp,
copy__creation_user,
copy__creation_ip
);
end if;
end if;
end if;
return 0;
end;' language 'plpgsql';