--
-- content_folder__move/2
--
create or replace function content_folder__move(
integer,
integer
) returns int4 as $$
declare
move__folder_id alias for $1;
move__target_folder_id alias for $2;
begin
perform content_folder__move (
move__folder_id,
move__target_folder_id,
NULL
);
return null;
end;$$ language plpgsql;
--
-- content_folder__move/3
--
create or replace function content_folder__move(
integer,
integer,
character varying
) returns int4 as $$
declare
move__folder_id alias for $1;
move__target_folder_id alias for $2;
move__name alias for $3; -- default null
v_source_folder_id integer;
v_valid_folders_p integer;
begin
select
count(*)
into
v_valid_folders_p
from
cr_folders
where
folder_id = move__target_folder_id
or
folder_id = move__folder_id;
if v_valid_folders_p != 2 then
raise EXCEPTION '-20000: content_folder.move - Not valid folder(s)';
end if;
if move__folder_id = content_item__get_root_folder(null) or
move__folder_id = content_template__get_root_folder() then
raise EXCEPTION '-20000: content_folder.move - Cannot move root folder';
end if;
if move__target_folder_id = move__folder_id then
raise EXCEPTION '-20000: content_folder.move - Cannot move a folder to itself';
end if;
if content_folder__is_sub_folder(move__folder_id, move__target_folder_id) = 't' then
raise EXCEPTION '-20000: content_folder.move - Destination folder is subfolder';
end if;
if content_folder__is_registered(move__target_folder_id,'content_folder','f') != 't' then
raise EXCEPTION '-20000: content_folder.move - Destination folder does not allow subfolders';
end if;
select parent_id into v_source_folder_id from cr_items
where item_id = move__folder_id;
-- update the parent_id for the folder
update cr_items
set parent_id = move__target_folder_id,
name = coalesce ( move__name, name )
where item_id = move__folder_id;
-- update the has_child_folders flags
-- update the source
update cr_folders set has_child_folders = 'f'
where folder_id = v_source_folder_id and not exists (
select 1 from cr_items
where parent_id = v_source_folder_id
and content_type = 'content_folder');
-- update the destination
update cr_folders set has_child_folders = 't'
where folder_id = move__target_folder_id;
return 0;
end;$$ language plpgsql;