Index: openacs-4/packages/file-storage/sql/postgresql/file-storage-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/sql/postgresql/file-storage-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/file-storage/sql/postgresql/file-storage-create.sql 1 Aug 2001 19:13:51 -0000 1.1 @@ -0,0 +1,141 @@ +-- +-- packages/file-storage/sql/postgresql/file-storage-create.sql +-- +-- @author Kevin Scaldeferri (kevin@arsdigita.com) +-- @creation-date 6 Nov 2000 +-- @cvs-id $Id: file-storage-create.sql,v 1.1 2001/08/01 19:13:51 jowells Exp $ +-- + +-- +-- We need to create a root folder in the content repository for +-- each instance of file storage +-- + + +create table fs_root_folders ( + -- ID for this package instance + package_id integer + constraint fs_root_folder_package_id_fk + references apm_packages on delete cascade + constraint fs_root_folder_package_id_pk + primary key, + -- the ID of the root folder + folder_id integer + constraint fs_root_folder_folder_id_fk + references cr_folders on delete cascade + constraint fs_root_folder_folder_id_un + unique +); + + + +-- file_storage API +-- +-- function get_root_folder ( +-- package_id in apm_packages.package_id%TYPE +-- ) return fs_root_folders.folder_id%TYPE; +-- +-- +-- function new_root_folder ( +-- package_id in apm_packages.package_id%TYPE +-- ) return fs_root_folders.folder_id%TYPE; + + +create function file_storage__get_root_folder ( + -- + -- Returns the root folder corresponding to a particular + -- package instance. + -- + integer -- apm_packages.package_id%TYPE +) +returns integer as ' -- fs_root_folders.folder_id%TYPE +declare + get_root_folder__package_id alias for $1; + v_folder_id fs_root_folders.folder_id%TYPE; + v_count integer; +begin + + select count(*) into v_count + from fs_root_folders + where package_id = get_root_folder__package_id; + + if v_count > 0 then + select folder_id into v_folder_id + from fs_root_folders + where package_id = get_root_folder__package_id; + else + -- must be a new instance. Gotta create a new root folder + v_folder_id := file_storage__new_root_folder(get_root_folder__package_id); + end if; + + return v_folder_id; + +end;' language 'plpgsql'; + + + +create function file_storage__new_root_folder ( + -- + -- Creates a new root folder + -- + -- + -- A hackish function to get around the fact that we can not run + -- code automatically when a new package instance is created. + -- + integer -- apm_packages.package_id%TYPE +) +returns integer as ' -- fs_root_folders.folder_id%TYPE +declare + new_root_folder__package_id alias for $1; + v_folder_id fs_root_folders.folder_id%TYPE; + v_package_name apm_packages.instance_name%TYPE; + v_package_key apm_packages.package_key%TYPE; +begin + + select instance_name, package_key + into v_package_name, v_package_key + from apm_packages + where package_id = new_root_folder__package_id; + + v_folder_id := content_folder__new ( + v_package_key || ''_'' || package_id, -- name + v_package_name || ''Root Folder'', -- label + ''Root folder for the file-storage system. All other folders in file storage are subfolders of this one.'', -- description + null -- parent_id (default) + ); + + insert into fs_root_folders + (package_id, folder_id) + values + (new_root_folder__package_id, v_folder_id); + + -- allow child items to be added + PERFORM content_folder__register_content_type( + v_folder_id, -- folder_id + ''content_revision'', -- content_types + ''f'' -- include_subtypes (default) + ); + PERFORM content_folder__register_content_type( + v_folder_id, -- folder_id + ''content_folder'', -- content_types + ''f'' -- include_subtypes (default) + ); + + -- set up default permissions + PERFORM acs_permission__grant_permission ( + v_folder_id, -- object_id + acs__magic_object_id(''the_public''), -- grantee_id + ''read'' -- privilege + ); + + PERFORM acs_permission__grant_permission ( + v_folder_id, -- object_id + acs__magic_object_id(''registered_users''), -- grantee_id + ''write'' -- privilege + ); + + return v_folder_id; + +end;' language 'plpgsql'; + + Index: openacs-4/packages/file-storage/sql/postgresql/file-storage-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/sql/postgresql/file-storage-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/file-storage/sql/postgresql/file-storage-drop.sql 1 Aug 2001 19:14:08 -0000 1.1 @@ -0,0 +1,38 @@ +-- +-- packages/file-storage/sql/file-storage-drop.sql +-- +-- @author Kevin Scaldeferri (kevin@arsdigita.com) +-- @creation-date 6 Now 2000 +-- @cvs-id $Id: file-storage-drop.sql,v 1.1 2001/08/01 19:14:08 jowells Exp $ +-- +-- drop script for file-storage +-- + +-- +-- content repository is set up to cascade, so we should just have to +-- delete the root folders +-- + +create function inline_0() +returns integer as ' +declare + rec_root_folder record; +begin + + for rec_root_folder in + select folder_id + from fs_root_folders + loop + PERFORM acs_object__delete(rec_root_folder.folder_id); + end loop; + + return 0; + +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0(); + +drop table fs_root_folders; +select drop_package('file_storage'); +