Index: openacs-4/packages/file-storage/tcl/file-storage-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/tcl/file-storage-procs-postgresql.xql,v
diff -u -r1.42 -r1.42.2.1
--- openacs-4/packages/file-storage/tcl/file-storage-procs-postgresql.xql 1 Mar 2005 22:53:02 -0000 1.42
+++ openacs-4/packages/file-storage/tcl/file-storage-procs-postgresql.xql 16 Aug 2005 11:05:23 -0000 1.42.2.1
@@ -256,4 +256,110 @@
+
+
+ select content_revision__new (
+ :title, -- title
+ :description, -- description
+ now(), -- publish_date
+ :mime_type, -- mime_type
+ null, -- ns_language
+ :content_body, -- text
+ :item_id, -- item_id
+ null,
+ now(), -- creation_date
+ :creation_user, -- creation_user
+ :creation_ip, -- creation_ip
+ null,
+ :package_id -- package_id
+ )
+
+
+
+
+
+ select content_revision__new (
+ :title, -- title
+ :description, -- description
+ now(), -- publish_date
+ :mime_type, -- mime_type
+ null, -- ns_language
+ :content_body, -- text
+ :item_id, -- item_id
+ null,
+ now(), -- creation_date
+ :creation_user, -- creation_user
+ :creation_ip, -- creation_ip
+ null,
+ :package_id -- package_id
+ )
+
+
+
+
+
+ select content_revision__new (
+ /* title => */ :title,
+ /* description => */ :description,
+ /* publish_date => */ current_timestamp,
+ /* mime_type => */ :mime_type,
+ /* nls_language => */ null,
+ /* data => */ null,
+ /* item_id => */ :item_id,
+ /* revision_id => */ :revision_id,
+ /* creation_date => */ current_timestamp,
+ /* creation_user => */ :creation_user,
+ /* creation_ip => */ :creation_ip,
+ /* package_id => */ :package_id
+ )
+
+
+
+
+
+
+ update cr_revisions
+ set mime_type = :mime_type,
+ lob = [set __lob_id [db_string get_lob_id "select empty_lob()"]]
+ where revision_id = :revision_id
+
+
+
+
+
+
+
+ update cr_revisions
+ set content_length = lob_length(lob)
+ where revision_id = :revision_id
+
+
+
+
+
+
+
+ begin
+ perform acs_object__update_last_modified
+ (:parent_id,:creation_user,:creation_ip);
+ perform
+ acs_object__update_last_modified(:item_id,:creation_user,:creation_ip);
+ return null;
+ end;
+
+
+
+
+
+ select file_storage__new_file (
+ :name,
+ :parent_id,
+ :creation_user,
+ :creation_ip,
+ :indbp,
+ :item_id
+ )
+
+
+
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 -r1.48.2.4 -r1.48.2.5
--- openacs-4/packages/file-storage/tcl/file-storage-procs.tcl 29 Jul 2005 02:27:39 -0000 1.48.2.4
+++ openacs-4/packages/file-storage/tcl/file-storage-procs.tcl 16 Aug 2005 11:05:21 -0000 1.48.2.5
@@ -722,6 +722,162 @@
return $revision_id
}
+ad_proc -public fs::add_created_file {
+ {-name ""}
+ -parent_id
+ -package_id
+ {-item_id ""}
+ {-mime_type ""}
+ {-creation_user ""}
+ {-creation_ip ""}
+ {-title ""}
+ {-description ""}
+ {-content_body ""}
+} {
+ Create a new file storage item or add a new revision if
+ an item with the same name and parent folder already exists
+
+ @return revision_id
+} {
+ if {[parameter::get -parameter "StoreFilesInDatabaseP" -package_id $package_id]} {
+ set indbp "t"
+ set storage_type "lob"
+ } else {
+ set indbp "f"
+ set storage_type "file"
+ }
+ if {![string equal "" $item_id]} {
+ set storage_type [db_string get_storage_type "select storage_type from cr_items where item_id=:item_id"]
+ }
+ if {[empty_string_p $mime_type] } {
+ set mime_type "text/html"
+ }
+ if { [empty_string_p $name] } {
+ set name $title
+ }
+
+ 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 ""]
+ if {![empty_string_p $creation_user]} {
+ permission::grant -party_id $creation_user -object_id $item_id -privilege admin
+ }
+ set do_notify_here_p "t"
+ } else {
+ set do_notify_here_p "f"
+ }
+
+ set revision_id [fs::add_created_version \
+ -name $title \
+ -item_id $item_id \
+ -creation_user $creation_user \
+ -creation_ip [ad_conn peeradd] \
+ -title $title \
+ -description $description \
+ -package_id $package_id \
+ -content_body $content_body \
+ -mime_type $mime_type \
+ -storage_type $storage_type]
+
+
+ if {[string is true $do_notify_here_p]} {
+ fs::do_notifications -folder_id $parent_id -filename $title -item_id $revision_id -action "new_file" -package_id $package_id
+ }
+ }
+ return $revision_id
+}
+
+ad_proc fs::add_created_version {
+ -name
+ -content_body
+ -mime_type
+ -item_id
+ {-creation_user ""}
+ {-creation_ip ""}
+ {-title ""}
+ {-description ""}
+ {-suppress_notify_p "f" }
+ {-storage_type ""}
+ {-package_id ""}
+ {-storage_type ""}
+} {
+ Create a new version of a file storage item using the content passed in content_body
+ @return revision_id
+} {
+ if {[empty_string_p $package_id]} {
+ set package_id [ad_conn package_id]
+ }
+ if {[empty_string_p $storage_type]} {
+ set storage_type [db_string get_storage_type ""]
+ }
+ if {[empty_string_p $creation_user]} {
+ set creation_user [ad_conn user_id]
+ }
+ if {[empty_string_p $creation_ip]} {
+ set creation_ip [ns_conn peeraddr]
+ }
+ set parent_id [get_parent -item_id $item_id]
+ if {[string equal "" $storage_type]} {
+ set storage_type [db_string get_storage_type "select storage_type from cr_items where item_id=:item_id"]
+ }
+ switch -- $storage_type {
+ file {
+ set revision_id [db_exec_plsql new_file_revision { }]
+
+ set cr_file [cr_create_content_file_from_string $item_id $revision_id $content_body]
+
+ # get the size
+ set file_size [cr_file_size $cr_file]
+
+ # update the file path in the CR and the size on cr_revisions
+ db_dml update_revision { }
+ }
+ lob {
+ # if someone stored file storage content in the database
+ # we need to use lob. the only want ot get a lob into the
+ # database if to pass it as a file
+ set revision_id [cr_import_content \
+ -item_id $item_id \
+ -storage_type \
+ -creation_user $creation_user \
+ -creation_ip $creation_ip \
+ -other_type "file_storage_object" \
+ -image_type "file_storage_object" \
+ -title $title \
+ -description $description \
+ $parent_id \
+ $tmp_filename \
+ $tmp_size \
+ $mime_type \
+ $name]
+ db_dml set_lob_content "" -blobs [list $content_body]
+ db_dml set_lob_size ""
+ }
+ text {
+ set revision_id [db_exec_plsql new_text_revision {}]
+ }
+ }
+
+ db_dml set_live_revision ""
+ db_exec_plsql update_last_modified ""
+
+ if {[string is false $suppress_notify_p]} {
+ fs::do_notifications -folder_id $parent_id -filename $title -item_id $revision_id -action "new_version" -package_id $package_id
+ }
+
+ #It's safe to rebuild RSS repeatedly, assuming it's not too expensive.
+ set folder_info [fs::get_folder_package_and_root $parent_id]
+ set db_package_id [lindex $folder_info 0]
+ if { [parameter::get -package_id $db_package_id -parameter ExposeRssP -default 0] } {
+ fs::rss::build_feeds $parent_id
+ }
+
+ return $revision_id
+}
+
+
ad_proc fs::add_version {
-name
-tmp_filename
@@ -896,10 +1052,11 @@
@param action The kind of operation. One of: new_file, new_version, new_url, delete_file, delete_url
delete_folder
} {
+ set package_and_root [fs::get_folder_package_and_root $folder_id]
+ set root_folder [lindex $package_and_root 1]
if {[string equal "" $package_id]} {
- set package_id [ad_conn package_id]
+ set package_id [lindex $package_and_root 0]
}
- set root_folder [fs_get_root_folder -package_id $package_id]
if {[string equal $action "new_file"]} {
set action_type "[_ file-storage.New_File_Uploaded]"
Index: openacs-4/packages/file-storage/tcl/file-storage-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/tcl/file-storage-procs.xql,v
diff -u -r1.16.2.1 -r1.16.2.2
--- openacs-4/packages/file-storage/tcl/file-storage-procs.xql 15 Jul 2005 14:38:54 -0000 1.16.2.1
+++ openacs-4/packages/file-storage/tcl/file-storage-procs.xql 16 Aug 2005 11:05:23 -0000 1.16.2.2
@@ -164,4 +164,33 @@
+
+
+ select storage_type from cr_items where item_id=:item_id
+
+
+
+
+
+ update cr_items set live_revision=:revision_id
+ where item_id=:item_id
+
+
+
+
+
+ update cr_revisions
+ set content = :cr_file, content_length = :file_size
+ where revision_id = :revision_id
+
+
+
+
+
+ select count(*) from cr_items
+ where name=:name
+ and parent_id=:parent_id
+
+
+
\ No newline at end of file