--
-- file_storage__new_root_folder/3
--
create or replace function file_storage__new_root_folder(
integer,
character varying,
character varying
) returns int4 as $$
-- fs_root_folders.folder_id%TYPE
declare
new_root_folder__package_id alias for $1;
new_root_folder__folder_name alias for $2;
new_root_folder__description alias for $3;
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;
v_folder_name cr_folders.label%TYPE;
v_description cr_folders.description%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;
if new_root_folder__folder_name is null
then
v_folder_name := v_package_name || ' Root Folder ';
else
v_folder_name := new_root_folder__folder_name;
end if;
if new_root_folder__description is null
then
v_description := 'Root folder for the file-storage system. All other folders in file storage are subfolders of this one.';
else
v_description := new_root_folder__description;
end if;
v_folder_id := content_folder__new (
v_package_key || '_' || new_root_folder__package_id, -- name
v_folder_name, -- label
v_description, -- 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
-- JS: Note that we need to set include_subtypes to
-- JS: true since we created a new subtype.
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
'content_revision', -- content_types
't' -- include_subtypes
);
PERFORM content_folder__register_content_type(
v_folder_id, -- folder_id
'content_folder', -- content_types
't' -- include_subtypes
);
-- 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;
--
-- file_storage__new_root_folder/4
--
create or replace function file_storage__new_root_folder(
new_root_folder__package_id integer,
new_root_folder__folder_name character varying,
new_root_folder__url character varying,
new_root_folder__description character varying
) returns int4 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;