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