-- delete from cr_folder_type_map -- where content_type not in ( 'file_storage_object', 'content_folder', 'content_extlink') -- and folder_id in ( -- select o2.object_id as folder_id from acs_objects o1, acs_objects o2 -- where o1.object_id in (select folder_id from fs_root_folders) -- and o2.tree_sortkey between o1.tree_sortkey -- and tree_right(o1.tree_sortkey) -- and o2.object_type = 'content_folder'); -- -- The query above reformulated as recursive query to avoid the -- dependency on acs_objects.tree_sortkey -- delete from cr_folder_type_map where content_type not in ( 'file_storage_object', 'content_folder', 'content_extlink') and folder_id in ( with recursive folders as ( select folder_id from fs_root_folders union all select i.item_id as folder_id from folders, cr_items i, acs_objects o where folders.folder_id = i.parent_id and o.object_id = i.item_id and o.object_type = 'content_folder' ) select * from folders); --- from file-storage-package-create.sql CREATE OR REPLACE FUNCTION file_storage__new_folder( new_folder__name varchar, new_folder__folder_name varchar, new_folder__parent_id integer, new_folder__creation_user integer, new_folder__creation_ip varchar ) RETURNS integer AS $$ DECLARE v_folder_id cr_folders.folder_id%TYPE; v_package_id acs_objects.package_id%TYPE; BEGIN v_package_id := file_storage__get_package_id(new_folder__parent_id); -- Create a new folder v_folder_id := content_folder__new ( new_folder__name, -- name new_folder__folder_name, -- label null, -- description new_folder__parent_id, -- parent_id null, -- context_id (default) null, -- folder_id (default) now(), -- creation_date new_folder__creation_user, -- creation_user new_folder__creation_ip, -- creation_ip v_package_id -- package_id ); -- Register the needed content types -- -- GN: Maybe, when someone decides to really implement the half-cooked -- "image" content type, it should go in here as well. PERFORM content_folder__register_content_type( v_folder_id, -- folder_id 'file_storage_object', -- content_type 't'); -- include_subtypes PERFORM content_folder__register_content_type( v_folder_id, -- folder_id 'content_folder', -- content_type 't'); -- include_subtypes PERFORM content_folder__register_content_type( v_folder_id, -- folder_id 'content_extlink', -- content_types 't'); -- include_subtypes -- PERFORM content_folder__register_content_type( -- v_folder_id, -- folder_id -- 'content_symlink', -- content_types -- 't'); -- include_subtypes -- Give the creator admin privileges on the folder PERFORM acs_permission__grant_permission ( v_folder_id, -- object_id new_folder__creation_user, -- grantee_id 'admin' -- privilege ); return v_folder_id; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION file_storage__new_root_folder( new_root_folder__package_id integer, new_root_folder__folder_name varchar, new_root_folder__url varchar, new_root_folder__description varchar ) RETURNS integer AS $$ DECLARE v_folder_id fs_root_folders.folder_id%TYPE; BEGIN v_folder_id := content_folder__new ( new_root_folder__url, -- name new_root_folder__folder_name, -- label new_root_folder__description, -- description null, -- parent_id (default) new_root_folder__package_id, --context_id null, --folder_id null, --creation_date null, --creation_user null, --creation_ip new_root_folder__package_id --package_id ); insert into fs_root_folders (package_id, folder_id) values (new_root_folder__package_id, v_folder_id); -- -- Register the needed content types -- -- GN: Maybe, when someone decides to really implement the half-cooked -- "image" content type, it should go in here as well. PERFORM content_folder__register_content_type( v_folder_id, -- folder_id 'file_storage_object', -- content_types 'f'); -- include_subtypes PERFORM content_folder__register_content_type( v_folder_id, -- folder_id 'content_folder', -- content_types 't'); -- include_subtypes PERFORM content_folder__register_content_type( v_folder_id, -- folder_id 'content_extlink', -- content_types 't'); -- include_subtypes -- PERFORM content_folder__register_content_type( -- v_folder_id, -- folder_id -- 'content_symlink', -- content_types -- 't'); -- include_subtypes -- ); return v_folder_id; END; $$ LANGUAGE plpgsql;