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 -N -r1.17.2.8 -r1.17.2.9
--- openacs-4/packages/file-storage/file-storage.info 9 Nov 2003 20:57:36 -0000 1.17.2.8
+++ openacs-4/packages/file-storage/file-storage.info 15 Nov 2003 18:17:12 -0000 1.17.2.9
@@ -7,14 +7,14 @@
f
f
-
+
Dave Bauer
This application allows users to collaboratively maintain documents on the web server
2003-11-09
OpenACS
Now allows storage of files on the filesystem or database.
-
+
Index: openacs-4/packages/file-storage/sql/oracle/file-storage-package-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/sql/oracle/file-storage-package-create.sql,v
diff -u -N -r1.4.2.4 -r1.4.2.5
--- openacs-4/packages/file-storage/sql/oracle/file-storage-package-create.sql 23 Jun 2003 18:47:02 -0000 1.4.2.4
+++ openacs-4/packages/file-storage/sql/oracle/file-storage-package-create.sql 15 Nov 2003 18:17:12 -0000 1.4.2.5
@@ -27,7 +27,8 @@
--
package_id in apm_packages.package_id%TYPE,
folder_name in cr_folders.label%TYPE default null,
- description in cr_folders.description%TYPE default null
+ description in cr_folders.description%TYPE default null,
+ name in cr_items.name%TYPE default null
) return fs_root_folders.folder_id%TYPE;
function new_file(
@@ -205,7 +206,8 @@
--
package_id in apm_packages.package_id%TYPE,
folder_name in cr_folders.label%TYPE default null,
- description in cr_folders.description%TYPE default null
+ description in cr_folders.description%TYPE default null,
+ name in cr_items.name%TYPE default null
) return fs_root_folders.folder_id%TYPE
is
v_folder_id fs_root_folders.folder_id%TYPE;
@@ -234,7 +236,7 @@
end if;
v_folder_id := content_folder.new(
- name => v_package_key || '_' || package_id,
+ name => nvl(new_root_folder.name,v_package_key || '_' || package_id),
label => v_folder_name,
description => v_description
);
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 -N -r1.8.2.5 -r1.8.2.6
--- openacs-4/packages/file-storage/sql/postgresql/file-storage-package-create.sql 9 Nov 2003 03:36:56 -0000 1.8.2.5
+++ openacs-4/packages/file-storage/sql/postgresql/file-storage-package-create.sql 15 Nov 2003 18:17:12 -0000 1.8.2.6
@@ -6,7 +6,7 @@
-- @cvs-id $Id$
--
-create function file_storage__get_root_folder (
+create or replace function file_storage__get_root_folder (
--
-- Returns the root folder corresponding to a particular
-- package instance.
@@ -37,7 +37,7 @@
end;' language 'plpgsql' with (iscachable);
-create function file_storage__get_package_id (
+create or replace function file_storage__get_package_id (
integer -- cr_items.item_id%TYPE
) returns integer as ' -- fs_root_folders.package_id%TYPE
declare
@@ -162,7 +162,7 @@
end;' language 'plpgsql';
-create function file_storage__new_file(
+create or replace function file_storage__new_file(
--
-- Create a file in CR in preparation for actual storage
-- Wrapper for content_item__new
@@ -177,7 +177,7 @@
integer -- cr_items.item_id%TYPE,
) returns integer as ' -- cr_items.item_id%TYPE
declare
- new_file__title alias for $1;
+ new_file__name alias for $1;
new_file__folder_id alias for $2;
new_file__user_id alias for $3;
new_file__creation_ip alias for $4;
@@ -189,7 +189,7 @@
if new_file__indb_p
then
v_item_id := content_item__new (
- new_file__title, -- name
+ new_file__name, -- name
new_file__folder_id, -- parent_id
new_file__item_id, -- item_id (default)
null, -- locale (default)
@@ -207,7 +207,7 @@
);
else
v_item_id := content_item__new (
- new_file__title, -- name
+ new_file__name, -- name
new_file__folder_id, -- parent_id
new_file__item_id, -- item_id (default)
null, -- locale (default)
@@ -234,23 +234,23 @@
end;' language 'plpgsql';
-create function file_storage__new_file(
+create or replace function file_storage__new_file(
varchar, -- cr_items.name%TYPE,
integer, -- cr_items.parent_id%TYPE,
integer, -- acs_objects.creation_user%TYPE,
varchar, -- acs_objects.creation_ip%TYPE,
boolean -- store in db?
) returns integer as ' -- cr_items.item_id%TYPE
declare
- new_file__title alias for $1;
+ new_file__name alias for $1;
new_file__folder_id alias for $2;
new_file__user_id alias for $3;
new_file__creation_ip alias for $4;
new_file__indb_p alias for $5;
begin
return file_storage__new_file(
- new_file__title,
+ new_file__name,
new_file__folder_id,
new_file__user_id,
new_file__creation_ip,
@@ -261,7 +261,7 @@
end;' language 'plpgsql';
-create function file_storage__delete_file (
+create or replace function file_storage__delete_file (
--
-- Delete a file and all its version
-- Wrapper to content_item__delete
@@ -277,7 +277,7 @@
end;' language 'plpgsql';
-create function file_storage__rename_file (
+create or replace function file_storage__rename_file (
--
-- Rename a file and all
-- Wrapper to content_item__rename
@@ -287,19 +287,19 @@
) returns integer as '
declare
rename_file__file_id alias for $1;
- rename_file__title alias for $2;
+ rename_file__name alias for $2;
begin
return content_item__rename(
rename_file__file_id, -- item_id
- rename_file__title -- name
+ rename_file__name -- name
);
end;' language 'plpgsql';
-create function file_storage__copy_file(
+create or replace function file_storage__copy_file(
--
-- Copy a file, but only copy the live_revision
--
@@ -313,7 +313,7 @@
copy_file__target_folder_id alias for $2;
copy_file__creation_user alias for $3;
copy_file__creation_ip alias for $4;
- v_title cr_items.name%TYPE;
+ 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;
@@ -334,7 +334,7 @@
then true
else false
end)
- into v_title,v_live_revision,v_filename,v_description,v_mime_type,v_content_length,v_indb_p
+ 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
@@ -343,7 +343,7 @@
-- We should probably use the copy functions of CR
-- when we optimize this function
v_new_file_id := file_storage__new_file(
- v_title, -- title
+ v_name, -- name
copy_file__target_folder_id, -- folder_id
copy_file__creation_user, -- creation_user
copy_file__creation_ip, -- creation_ip
@@ -401,7 +401,7 @@
end;' language 'plpgsql';
-create function file_storage__move_file (
+create or replace function file_storage__move_file (
--
-- Move a file (ans all its versions) to a different folder.
-- Wrapper for content_item__move
@@ -427,7 +427,7 @@
end;' language 'plpgsql';
-create function file_storage__get_title (
+create or replace function file_storage__get_title (
--
-- Unfortunately, title in the file-storage context refers
-- to the name attribute in cr_items, not the title attribute in
@@ -464,7 +464,7 @@
end;' language 'plpgsql';
-create function file_storage__get_parent_id (
+create or replace function file_storage__get_parent_id (
integer -- item_id in cr_items.item_id%TYPE
) returns integer as ' -- cr_items.item_id%TYPE
declare
@@ -482,7 +482,7 @@
end;'language 'plpgsql';
-create function file_storage__get_content_type (
+create or replace function file_storage__get_content_type (
--
-- Wrapper for content_item__get_content_type
integer -- cr_items.item_id%TYPE
@@ -498,7 +498,7 @@
-create function file_storage__get_folder_name (
+create or replace function file_storage__get_folder_name (
--
-- Wrapper for content_folder__get_label
integer -- cr_folders.folder_id%TYPE
@@ -513,7 +513,7 @@
end;' language 'plpgsql';
-create function file_storage__new_version (
+create or replace function file_storage__new_version (
--
-- Create a new version of a file
-- Wrapper for content_revision__new
@@ -565,7 +565,7 @@
end;' language 'plpgsql';
-create function file_storage__delete_version (
+create or replace function file_storage__delete_version (
--
-- Delete a version of a file
--
@@ -605,7 +605,7 @@
end;' language 'plpgsql';
-create function file_storage__new_folder(
+create or replace function file_storage__new_folder(
--
-- Create a folder
--
@@ -675,7 +675,7 @@
end;' language 'plpgsql';
-create function file_storage__delete_folder(
+create or replace function file_storage__delete_folder(
--
-- Delete a folder
--
@@ -693,7 +693,7 @@
-- JS: BEFORE DELETE TRIGGER to clean up CR entries (except root folder)
-create function fs_package_items_delete_trig () returns opaque as '
+create or replace function fs_package_items_delete_trig () returns opaque as '
declare
v_rec record;
@@ -756,7 +756,7 @@
-- JS: AFTER DELETE TRIGGER to clean up last CR entry
-create function fs_root_folder_delete_trig () returns opaque as '
+create or replace function fs_root_folder_delete_trig () returns opaque as '
begin
PERFORM content_folder__delete(old.folder_id);
return null;
Index: openacs-4/packages/file-storage/sql/postgresql/upgrade/upgrade-4.6.2-4.6.3.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/sql/postgresql/upgrade/upgrade-4.6.2-4.6.3.sql,v
diff -u -N
--- openacs-4/packages/file-storage/sql/postgresql/upgrade/upgrade-4.6.2-4.6.3.sql 23 Jun 2003 18:47:03 -0000 1.1.2.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,253 +0,0 @@
--- Add user_id and IP to update_last_modified
--- $Id
-
-create function file_storage__new_file(
- --
- -- Create a file in CR in preparation for actual storage
- -- Wrapper for content_item__new
- --
- -- DRB: I added this version to allow one to predefine item_id, among other things to
- -- make it easier to use with ad_form
- varchar, -- cr_items.name%TYPE,
- integer, -- cr_items.parent_id%TYPE,
- integer, -- acs_objects.creation_user%TYPE,
- varchar, -- acs_objects.creation_ip%TYPE,
- boolean, -- store in db?
- integer -- cr_items.item_id%TYPE,
-) returns integer as ' -- cr_items.item_id%TYPE
-declare
- new_file__title alias for $1;
- new_file__folder_id alias for $2;
- new_file__user_id alias for $3;
- new_file__creation_ip alias for $4;
- new_file__indb_p alias for $5;
- new_file__item_id alias for $6;
- v_item_id integer;
-begin
-
- if new_file__indb_p
- then
- v_item_id := content_item__new (
- new_file__title, -- name
- new_file__folder_id, -- parent_id
- new_file__item_id, -- item_id (default)
- null, -- locale (default)
- now(), -- creation_date (default)
- new_file__user_id, -- creation_user
- new_file__folder_id, -- context_id
- new_file__creation_ip, -- creation_ip
- ''content_item'', -- item_subtype (default)
- ''file_storage_object'', -- content_type (needed by site-wide search)
- null, -- title (default)
- null, -- description
- ''text/plain'', -- mime_type (default)
- null, -- nls_language (default)
- null -- data (default)
- );
- else
- v_item_id := content_item__new (
- new_file__title, -- name
- new_file__folder_id, -- parent_id
- new_file__item_id, -- item_id (default)
- null, -- locale (default)
- now(), -- creation_date (default)
- new_file__user_id, -- creation_user
- new_file__folder_id, -- context_id
- new_file__creation_ip, -- creation_ip
- ''content_item'', -- item_subtype (default)
- ''file_storage_object'', -- content_type (needed by site-wide search)
- null, -- title (default)
- null, -- description
- ''text/plain'', -- mime_type (default)
- null, -- nls_language (default)
- null, -- text (default)
- ''file'' -- storage_type
- );
-
- end if;
-
- perform acs_object__update_last_modified(new_file__folder_id,new_file__user_id,new_file__creation_ip);
-
- return v_item_id;
-
-end;' language 'plpgsql';
-
-
-create 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_title 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;
-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,
- (case when i.storage_type = ''lob''
- then true
- else false
- end)
- into v_title,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;
-
- -- We should probably use the copy functions of CR
- -- when we optimize this function
- v_new_file_id := file_storage__new_file(
- v_title, -- title
- 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_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;
-
-end;' language 'plpgsql';
-
-
-create function file_storage__move_file (
- --
- -- Move a file (ans all its versions) to a different folder.
- -- Wrapper for content_item__move
- --
- integer, -- cr_folders.folder_id%TYPE,
- integer -- cr_folders.folder_id%TYPE
-) returns integer as ' -- 0 for success
-declare
- move_file__file_id alias for $1;
- move_file__target_folder_id alias for $2;
- move_file__creation_user alias for $3;
- move_file__creation_ip alias for $4;
-begin
-
- perform content_item__move(
- move_file__file_id, -- item_id
- move_file__target_folder_id -- target_folder_id
- );
-
- perform acs_object__update_last_modified(move_file__target_folder_id,move_file__creation_user,move_file__creation_ip);
-
- return 0;
-end;' language 'plpgsql';
-
-create function file_storage__new_version (
- --
- -- Create a new version of a file
- -- Wrapper for content_revision__new
- --
- varchar, -- cr_revisions.title%TYPE,
- varchar, -- cr_revisions.description%TYPE,
- varchar, -- cr_revisions.mime_type%TYPE,
- integer, -- cr_items.item_id%TYPE,
- integer, -- acs_objects.creation_user%TYPE,
- varchar -- acs_objects.creation_ip%TYPE
-) returns integer as ' -- cr_revisions.revision_id
-declare
- new_version__filename alias for $1;
- new_version__description alias for $2;
- new_version__mime_type alias for $3;
- new_version__item_id alias for $4;
- new_version__creation_user alias for $5;
- new_version__creation_ip alias for $6;
- v_revision_id cr_revisions.revision_id%TYPE;
- v_folder_id cr_items.parent_id%TYPE;
-begin
- -- Create a revision
- v_revision_id := content_revision__new (
- new_version__filename, -- title
- new_version__description, -- description
- now(), -- publish_date
- new_version__mime_type, -- mime_type
- null, -- nls_language
- null, -- data (default)
- new_version__item_id, -- item_id
- null, -- revision_id
- now(), -- creation_date
- new_version__creation_user, -- creation_user
- new_version__creation_ip -- creation_ip
- );
-
- -- Make live the newly created revision
- perform content_item__set_live_revision(v_revision_id);
-
- select cr_items.parent_id
- into v_folder_id
- from cr_items
- where cr_items.item_id = new_version__item_id;
-
- perform acs_object__update_last_modified(v_folder_id,new_version__creation_user,new_version__creation_ip);
-
- return v_revision_id;
-
-end;' language 'plpgsql';
-
Index: openacs-4/packages/file-storage/tcl/file-storage-dav-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/tcl/file-storage-dav-procs.tcl,v
diff -u -N -r1.1.2.1 -r1.1.2.2
--- openacs-4/packages/file-storage/tcl/file-storage-dav-procs.tcl 9 Nov 2003 20:56:45 -0000 1.1.2.1
+++ openacs-4/packages/file-storage/tcl/file-storage-dav-procs.tcl 15 Nov 2003 18:17:12 -0000 1.1.2.2
@@ -29,7 +29,7 @@
set tmp_filename [oacs_dav::conn tmpfile]
set tmp_size [file size $tmp_filename]
# authenticate that user has write privilege
-
+ns_log notice "OACS-DAV File Storage PUT tmp_filename $tmp_filename tmp_size $tmp_size"
# we need to calculate parent_id from the URI
# it might not be the root DAV folder for the package
# check for folder or not
Index: openacs-4/packages/file-storage/tcl/file-storage-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/tcl/file-storage-procs.tcl,v
diff -u -N -r1.25.2.7 -r1.25.2.8
--- openacs-4/packages/file-storage/tcl/file-storage-procs.tcl 9 Nov 2003 20:56:45 -0000 1.25.2.7
+++ openacs-4/packages/file-storage/tcl/file-storage-procs.tcl 15 Nov 2003 18:17:12 -0000 1.25.2.8
@@ -200,6 +200,7 @@
-pretty_name $sn(instance_name) \
-name $name
}
+
ad_proc -public fs::new_root_folder {
{-package_id ""}
{-pretty_name ""}
@@ -627,6 +628,15 @@
set mime_type [cr_filename_to_mime_type -create $name]
set tmp_size [file size $tmp_filename]
+ switch [cr_registered_type_for_mime_type $mime_type] {
+ image {
+ set content_type "image"
+ }
+ default {
+ set content_type "file_storage_object"
+ }
+ }
+
db_transaction {
if {[empty_string_p $item_id] || ![db_string item_exists ""]} {
set item_id [db_exec_plsql create_item ""]
Index: openacs-4/packages/file-storage/www/index.vuh
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/www/index.vuh,v
diff -u -N -r1.1.2.1 -r1.1.2.2
--- openacs-4/packages/file-storage/www/index.vuh 10 Nov 2003 02:44:25 -0000 1.1.2.1
+++ openacs-4/packages/file-storage/www/index.vuh 15 Nov 2003 18:17:12 -0000 1.1.2.2
@@ -10,6 +10,12 @@
set extra_uri [ad_conn path_info]
set root_folder [fs_get_root_folder]
set file_item_id [fs::get_item_id -name $extra_uri -folder_id $root_folder]
+ns_log debug "File Storage index.vuh item_id=$file_item_id URL=[ad_conn url]"
+if {[empty_string_p $file_item_id]} {
+ ns_log debug "File Storage return not found"
+ ns_return 404 text/plain "File Not Found"
+ ad_script_abort
+}
permission::require_permission \
-object_id $file_item_id \
-privilege read \