Index: openacs-4/packages/file-storage/file-storage.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/file-storage.info,v
diff -u -r1.47 -r1.48
--- openacs-4/packages/file-storage/file-storage.info 27 Jun 2007 21:56:57 -0000 1.47
+++ openacs-4/packages/file-storage/file-storage.info 9 Jul 2007 07:49:42 -0000 1.48
@@ -7,7 +7,7 @@
f
f
-
+
OpenACS
Collaborative document storage
2007-06-15
@@ -16,7 +16,7 @@
0
#file-storage.file-storage#
-
+
Index: openacs-4/packages/file-storage/sql/postgresql/file-storage-package-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/sql/postgresql/file-storage-package-create.sql,v
diff -u -r1.24 -r1.25
--- openacs-4/packages/file-storage/sql/postgresql/file-storage-package-create.sql 30 Sep 2005 18:07:24 -0000 1.24
+++ openacs-4/packages/file-storage/sql/postgresql/file-storage-package-create.sql 9 Jul 2007 07:43:06 -0000 1.25
@@ -264,7 +264,6 @@
end;' language 'plpgsql';
-
create or replace function file_storage__copy_file(
--
-- Copy a file, but only copy the live_revision
@@ -273,7 +272,7 @@
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar -- acs_objects.creation_ip%TYPE
-) returns integer as ' -- cr_revisions.revision_id%TYPE
+) returns integer as ' -- cr_revisions.revision_id%TYPE
declare
copy_file__file_id alias for $1;
copy_file__target_folder_id alias for $2;
@@ -291,27 +290,35 @@
v_new_file_id cr_items.item_id%TYPE;
v_new_version_id cr_revisions.revision_id%TYPE;
v_indb_p boolean;
+ v_isurl boolean;
+ v_content_type cr_items.content_type%TYPE;
v_package_id apm_packages.package_id%TYPE;
begin
- -- We copy only the title from the file being copied, and attributes of the
- -- live revision
- select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length,
+ v_isurl:= false;
+ select content_type into v_content_type from cr_items where item_id = copy_file__file_id;
+ if v_content_type = ''content_extlink''
+ then
+ v_isurl:= true;
+ end if;
+
+ -- We copy only the title from the file being copied, and attributes of the live revision
+ if v_isurl = false
+ then
+ select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length,
(case when i.storage_type = ''lob''
then true
else false
end)
into v_name,v_live_revision,v_filename,v_description,v_mime_type,v_content_length,v_indb_p
- from cr_items i, cr_revisions r
- where r.item_id = i.item_id
- and r.revision_id = i.live_revision
- and i.item_id = copy_file__file_id;
+ from cr_items i, cr_revisions r
+ where r.item_id = i.item_id
+ and r.revision_id = i.live_revision
+ and i.item_id = copy_file__file_id;
- select package_id into v_package_id from acs_objects where object_id = copy_file__file_id;
+ select package_id into v_package_id from acs_objects where object_id = copy_file__file_id;
- -- We should probably use the copy functions of CR
- -- when we optimize this function
- v_new_file_id := file_storage__new_file(
+ v_new_file_id := file_storage__new_file(
v_name, -- name
copy_file__target_folder_id, -- folder_id
copy_file__creation_user, -- creation_user
@@ -320,18 +327,18 @@
v_package_id -- package_id
);
- v_new_version_id := file_storage__new_version (
+ v_new_version_id := file_storage__new_version (
v_filename, -- title
v_description, -- description
v_mime_type, -- mime_type
v_new_file_id, -- item_id
copy_file__creation_user, -- creation_user
copy_file__creation_ip -- creation_ip
);
-
- if v_indb_p
- then
+ if v_indb_p
+ then
+
-- Lob to copy from
select lob into v_lob_id
from cr_revisions
@@ -349,9 +356,8 @@
content_length = v_content_length
where revision_id = v_new_version_id;
- else
-
- -- For now, we simply copy the file name
+ else
+ -- For now, we simply copy the file name
select content into v_file_path
from cr_revisions
where revision_id = v_live_revision;
@@ -362,15 +368,16 @@
content_length = v_content_length
where revision_id = v_new_version_id;
+ end if;
+ perform acs_object__update_last_modified(copy_file__target_folder_id,copy_file__creation_user,copy_file__creation_ip);
+ return v_new_version_id;
+ else
+ perform content_extlink__copy (copy_file__file_id, copy_file__target_folder_id, copy_file__creation_user,copy_file__creation_ip,v_name);
+ return 0;
end if;
- perform acs_object__update_last_modified(copy_file__target_folder_id,copy_file__creation_user,copy_file__creation_ip);
-
- return v_new_version_id;
-
end;' language 'plpgsql';
-
create or replace function file_storage__move_file (
--
-- Move a file (ans all its versions) to a different folder.
Index: openacs-4/packages/file-storage/sql/postgresql/upgrade/upgrade-5.4.0d4-5.4.0d5.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/sql/postgresql/upgrade/upgrade-5.4.0d4-5.4.0d5.sql,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/file-storage/sql/postgresql/upgrade/upgrade-5.4.0d4-5.4.0d5.sql 9 Jul 2007 07:48:57 -0000 1.1
@@ -0,0 +1,114 @@
+create or replace function file_storage__copy_file(
+ --
+ -- Copy a file, but only copy the live_revision
+ --
+ integer, -- cr_items.item_id%TYPE,
+ integer, -- cr_items.parent_id%TYPE,
+ integer, -- acs_objects.creation_user%TYPE,
+ varchar -- acs_objects.creation_ip%TYPE
+) returns integer as ' -- cr_revisions.revision_id%TYPE
+declare
+ copy_file__file_id alias for $1;
+ copy_file__target_folder_id alias for $2;
+ copy_file__creation_user alias for $3;
+ copy_file__creation_ip alias for $4;
+ v_name cr_items.name%TYPE;
+ v_live_revision cr_items.live_revision%TYPE;
+ v_filename cr_revisions.title%TYPE;
+ v_description cr_revisions.description%TYPE;
+ v_mime_type cr_revisions.mime_type%TYPE;
+ v_content_length cr_revisions.content_length%TYPE;
+ v_lob_id cr_revisions.lob%TYPE;
+ v_new_lob_id cr_revisions.lob%TYPE;
+ v_file_path cr_revisions.content%TYPE;
+ v_new_file_id cr_items.item_id%TYPE;
+ v_new_version_id cr_revisions.revision_id%TYPE;
+ v_indb_p boolean;
+ v_isurl boolean;
+ v_content_type cr_items.content_type%TYPE;
+ v_package_id apm_packages.package_id%TYPE;
+begin
+
+ v_isurl:= false;
+ select content_type into v_content_type from cr_items where item_id = copy_file__file_id;
+ if v_content_type = ''content_extlink''
+ then
+ v_isurl:= true;
+ end if;
+
+ -- We copy only the title from the file being copied, and attributes of the live revision
+ if v_isurl = false
+ then
+ select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length,
+ (case when i.storage_type = ''lob''
+ then true
+ else false
+ end)
+ into v_name,v_live_revision,v_filename,v_description,v_mime_type,v_content_length,v_indb_p
+ from cr_items i, cr_revisions r
+ where r.item_id = i.item_id
+ and r.revision_id = i.live_revision
+ and i.item_id = copy_file__file_id;
+
+ select package_id into v_package_id from acs_objects where object_id = copy_file__file_id;
+
+ v_new_file_id := file_storage__new_file(
+ v_name, -- name
+ copy_file__target_folder_id, -- folder_id
+ copy_file__creation_user, -- creation_user
+ copy_file__creation_ip, -- creation_ip
+ v_indb_p, -- indb_p
+ v_package_id -- package_id
+ );
+
+ v_new_version_id := file_storage__new_version (
+ v_filename, -- title
+ v_description, -- description
+ v_mime_type, -- mime_type
+ v_new_file_id, -- item_id
+ copy_file__creation_user, -- creation_user
+ copy_file__creation_ip -- creation_ip
+ );
+
+ if v_indb_p
+ then
+
+ -- Lob to copy from
+ select lob into v_lob_id
+ from cr_revisions
+ where revision_id = v_live_revision;
+
+ -- New lob id
+ v_new_lob_id := empty_lob();
+
+ -- copy the blob
+ perform lob_copy(v_lob_id,v_new_lob_id);
+
+ -- Update the lob id on the new version
+ update cr_revisions
+ set lob = v_new_lob_id,
+ content_length = v_content_length
+ where revision_id = v_new_version_id;
+
+ else
+ -- For now, we simply copy the file name
+ select content into v_file_path
+ from cr_revisions
+ where revision_id = v_live_revision;
+
+ -- Update the file path
+ update cr_revisions
+ set content = v_file_path,
+ content_length = v_content_length
+ where revision_id = v_new_version_id;
+
+ end if;
+ perform acs_object__update_last_modified(copy_file__target_folder_id,copy_file__creation_user,copy_file__creation_ip);
+ return v_new_version_id;
+ else
+ perform content_extlink__copy (copy_file__file_id, copy_file__target_folder_id, copy_file__creation_user,copy_file__creation_ip,v_name);
+ return 0;
+ end if;
+
+end;' language 'plpgsql';
+