--
-- content_symlink__new/8
--
create or replace function content_symlink__new(
character varying,
character varying,
integer,
integer,
integer,
timestamp with time zone,
integer,
character varying
) returns int4 as $$
declare
new__name alias for $1; -- default null
new__label alias for $2; -- default null
new__target_id alias for $3;
new__parent_id alias for $4;
new__symlink_id alias for $5; -- default null
new__creation_date alias for $6; -- default now()
new__creation_user alias for $7; -- default null
new__creation_ip alias for $8; -- default null
v_symlink_id cr_symlinks.symlink_id%TYPE;
v_name cr_items.name%TYPE;
v_label cr_symlinks.label%TYPE;
v_ctype varchar;
begin
-- SOME CHECKS --
-- 1) check that the target is now a symlink
if content_symlink__is_symlink(new__target_id) = 't' then
raise EXCEPTION '-20000: Cannot create a symlink to a symlink %', new__target_id;
end if;
-- 2) check that the parent is a folder
if content_folder__is_folder(new__parent_id) = 'f' then
raise EXCEPTION '-20000: The parent is not a folder';
end if;
-- 3) check that parent folder supports symlinks
if content_folder__is_registered(new__parent_id,'content_symlink','f') = 'f' then
raise EXCEPTION '-20000: This folder does not allow symlinks to be created';
end if;
-- 4) check that the content folder supports the target items content type
if content_folder__is_registered(new__parent_id, content_item__get_content_type(new__target_id), 'f') = 'f' then
v_ctype := content_item__get_content_type(new__target_id);
raise EXCEPTION '-20000: This folder does not allow symlinks to items of type % to be created', v_ctype;
end if;
-- PASSED ALL CHECKS --
-- Select default name if the name is null
if new__name is null or new__name = '' then
select
'symlink_to_' || name into v_name
from
cr_items
where
item_id = new__target_id;
if NOT FOUND then
v_name := null;
end if;
else
v_name := new__name;
end if;
-- Select default label if the label is null
if new__label is null then
v_label := 'Symlink to ' || v_name;
else
v_label := new__label;
end if;
v_symlink_id := content_item__new(
v_name,
new__parent_id,
new__symlink_id,
null,
new__creation_date,
new__creation_user,
null,
new__creation_ip,
'content_item',
'content_symlink',
null,
null,
'text/plain',
null,
null,
'text'
);
insert into cr_symlinks
(symlink_id, target_id, label)
values
(v_symlink_id, new__target_id, v_label);
return v_symlink_id;
end;$$ language plpgsql;