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.80 -r1.81
--- openacs-4/packages/file-storage/tcl/file-storage-procs.tcl 14 Jun 2018 12:23:47 -0000 1.80
+++ openacs-4/packages/file-storage/tcl/file-storage-procs.tcl 14 Jun 2018 12:28:37 -0000 1.81
@@ -4,14 +4,14 @@
@creation-date 6 November 2000
@cvs-id $Id$
}
-
+
ad_proc fs_get_root_folder {
{-package_id ""}
} {
Returns the root folder for the file storage system.
} {
if {$package_id eq ""} {
- set package_id [ad_conn package_id]
+ set package_id [ad_conn package_id]
}
return [fs::get_root_folder -package_id $package_id]
@@ -20,7 +20,7 @@
ad_proc fs_get_folder_name {
folder_id
} {
- Returns the name of a folder.
+ Returns the name of a folder.
} {
return [db_string folder_name {}]
}
@@ -44,13 +44,13 @@
system. Returns 0 otherwise.
} {
if {[db_string object_type {
- select object_type
- from acs_objects
- where object_id = :folder_id
+ select object_type
+ from acs_objects
+ where object_id = :folder_id
} -default ""] eq "content_folder"} {
- return 1
+ return 1
} else {
- return 0
+ return 0
}
}
@@ -61,13 +61,13 @@
system. Returns 0 otherwise.
} {
if {[db_string object_type {
- select object_type
+ select object_type
from acs_objects
where object_id = :file_id
} -default ""] eq "content_item"} {
- return 1
+ return 1
} else {
- return 0
+ return 0
}
}
@@ -78,13 +78,13 @@
system. Returns 0 otherwise.
} {
if {[db_string object_type {
- select object_type
+ select object_type
from acs_objects
where object_id = :version_id
} -default ""] eq "file_storage_object"} {
- return 1
+ return 1
} else {
- return 0
+ return 0
}
}
@@ -97,14 +97,14 @@
item_id
privilege
} {
- This procedure, given a content item and a privilege, checks to see if
+ This procedure, given a content item and a privilege, checks to see if
there are any children of the item on which the user does not have that
privilege. It returns 0 if there is any child item on which the user
does not have the privilege. It returns 1 if the user has the
privilege on every child item.
} {
if {$user_id eq ""} {
- set user_id [ad_conn user_id]
+ set user_id [ad_conn user_id]
}
# This only gets child folders and items
@@ -114,19 +114,19 @@
# now check revisions
db_foreach child_items {} {
- incr num_wo_perm [db_string revision_perms {}]
+ incr num_wo_perm [db_string revision_perms {}]
}
if { $num_wo_perm > 0 } {
- return 0
+ return 0
} else {
- return 1
+ return 1
}
}
-#
+#
# Display procs
#
@@ -139,16 +139,16 @@
item_id
} {
Constructs the list to be fed to ad_context_bar appropriate for
- item_id. If -final is specified, that string will be the last
- item in the context bar. Otherwise, the name corresponding to
+ item_id. If -final is specified, that string will be the last
+ item in the context bar. Otherwise, the name corresponding to
item_id will be used.
} {
if {$root_folder_id eq ""} {
set root_folder_id [fs_get_root_folder]
}
- if {$final eq ""
- && !($item_id == $root_folder_id)
+ if {$final eq ""
+ && !($item_id == $root_folder_id)
} {
# don't get title for last element if we are in the
# root folder
@@ -211,15 +211,15 @@
} {
if {$package_id eq ""} {
- set package_id [ad_conn package_id]
+ set package_id [ad_conn package_id]
}
if {$pretty_name eq ""} {
- set pretty_name [apm_instance_name_from_id $package_id]
+ set pretty_name [apm_instance_name_from_id $package_id]
}
if {$name eq ""} {
- set name "file-storage_${package_id}"
+ set name "file-storage_${package_id}"
}
return [db_exec_plsql new_root_folder {}]
@@ -237,7 +237,7 @@
@return folder_id of the root folder retrieved
} {
if {$package_id eq ""} {
- set package_id [ad_conn package_id]
+ set package_id [ad_conn package_id]
}
return [db_exec_plsql get_root_folder {}]
@@ -276,37 +276,37 @@
@return folder_id of the newly created folder
} {
if {$creation_user eq ""} {
- set creation_user [ad_conn user_id]
+ set creation_user [ad_conn user_id]
}
if {$creation_ip eq ""} {
- set creation_ip [ns_conn peeraddr]
+ set creation_ip [ns_conn peeraddr]
}
# If the package_id is empty, try the package_id from the parent_object
if {$package_id eq ""} {
- set package_id [acs_object::package_id -object_id $parent_id]
-
- # If the package_id from the parent_id exists, make sure it is a file-storage package_id
- if {$package_id ne ""} {
- if {[apm_package_key_from_id $package_id] ne "file-storage"} {
- set package_id ""
- }
- }
+ set package_id [acs_object::package_id -object_id $parent_id]
+
+ # If the package_id from the parent_id exists, make sure it is a file-storage package_id
+ if {$package_id ne ""} {
+ if {[apm_package_key_from_id $package_id] ne "file-storage"} {
+ set package_id ""
+ }
+ }
}
set folder_id [content::folder::new \
- -name $name \
- -label $pretty_name \
- -parent_id $parent_id \
- -creation_user $creation_user \
- -creation_ip $creation_ip \
- -description $description \
- -package_id $package_id]
+ -name $name \
+ -label $pretty_name \
+ -parent_id $parent_id \
+ -creation_user $creation_user \
+ -creation_ip $creation_ip \
+ -description $description \
+ -package_id $package_id]
permission::grant -party_id $creation_user -object_id $folder_id -privilege "admin"
if {!$no_callback_p} {
- callback fs::folder_new -package_id $package_id -folder_id $folder_id
+ callback fs::folder_new -package_id $package_id -folder_id $folder_id
}
return $folder_id
@@ -321,9 +321,9 @@
} {
db_exec_plsql rename_folder {}
if {!$no_callback_p} {
- if {![catch {ad_conn package_id} package_id]} {
- callback fs::folder_edit -package_id $package_id -folder_id $folder_id
- }
+ if {![catch {ad_conn package_id} package_id]} {
+ callback fs::folder_edit -package_id $package_id -folder_id $folder_id
+ }
}
}
@@ -342,7 +342,7 @@
is this a file storage object
} {
if {![string is integer -strict $object_id]} {
- return 0
+ return 0
}
return [db_string select_object_p {}]
}
@@ -421,7 +421,7 @@
@param folder_id The folder for which to retrieve contents
@param user_id The viewer of the contents (to make sure they have
- permission)
+ permission)
} {
return [db_list select_folder_contents {}]
@@ -432,10 +432,10 @@
{-user_id ""}
{-n_past_days "99999"}
} {
- WARNING: This proc is not scalable because it does too many permission checks.
+ WARNING: This proc is not scalable because it does too many permission checks.
DRB: Not so true now that permissions are fast. However it is now only used
- to clone files in dotLRN and for the somewhat brain-damaged syllabus package.
+ to clone files in dotLRN and for the somewhat brain-damaged syllabus package.
At minimum the permission checks returned by the code can be removed. Most of
the other fields as well. Oh well ...
@@ -447,34 +447,34 @@
object_id, name, live_revision, type,
last_modified, new_p, content_size, file_upload_name
- write_p, delete_p, admin_p,
+ write_p, delete_p, admin_p,
@param folder_id The folder for which to retrieve contents
@param user_id The viewer of the contents (to make sure they have
- permission)
+ permission)
@param n_past_days Mark files that are newer than the past N days as new
} {
if {$folder_id eq ""} {
- set folder_id [get_root_folder -package_id [ad_conn package_id]]
+ set folder_id [get_root_folder -package_id [ad_conn package_id]]
}
if {$user_id eq ""} {
- set user_id [acs_magic_object the_public]
+ set user_id [acs_magic_object the_public]
}
set list_of_ns_sets [db_list_of_ns_sets select_folder_contents {}]
foreach set $list_of_ns_sets {
- # in plain Tcl:
- # set last_modified_ansi [lc_time_system_to_conn $last_modified_ansi]
- ns_set put $set last_modified_ansi [lc_time_system_to_conn [ns_set get $set last_modifed_ansi]]
+ # in plain Tcl:
+ # set last_modified_ansi [lc_time_system_to_conn $last_modified_ansi]
+ ns_set put $set last_modified_ansi [lc_time_system_to_conn [ns_set get $set last_modifed_ansi]]
- # in plain Tcl:
- # set last_modified [lc_time_fmt $last_modified_ansi "%x %X"]
- ns_set put $set last_modified [lc_time_fmt [ns_set get $set last_modified_ansi] "%x %X"]
+ # in plain Tcl:
+ # set last_modified [lc_time_fmt $last_modified_ansi "%x %X"]
+ ns_set put $set last_modified [lc_time_fmt [ns_set get $set last_modified_ansi] "%x %X"]
- # set content_size_pretty [lc_numeric $content_size]
- ns_set put $set content_size_pretty [lc_numeric [ns_set get $set content_size]]
+ # set content_size_pretty [lc_numeric $content_size]
+ ns_set put $set content_size_pretty [lc_numeric [ns_set get $set content_size]]
}
return $list_of_ns_sets
@@ -488,14 +488,14 @@
@param folder_id The folder for which to retrieve contents
@param user_id The viewer of the contents (to make sure they have
- permission)
+ permission)
} {
if {$folder_id eq ""} {
- set folder_id [get_root_folder -package_id [ad_conn package_id]]
+ set folder_id [get_root_folder -package_id [ad_conn package_id]]
}
if {$user_id eq ""} {
- set user_id [acs_magic_object the_public]
+ set user_id [acs_magic_object the_public]
}
return [db_string select_folder_contents_count {}]
@@ -510,25 +510,25 @@
publish a file storage object to the file system
} {
if {$path eq ""} {
- set path [ad_tmpnam]
+ set path [ad_tmpnam]
}
db_1row select_object_info {}
-
+
switch -- $type {
- folder {
- set result [publish_folder_to_file_system -folder_id $object_id -path $path -folder_name $name -user_id $user_id]
- }
- url {
- set result [publish_url_to_file_system -object_id $object_id -path $path -file_name $file_name]
- }
- symlink {
- set linked_object_id [content::symlink::resolve -item_id $object_id]
- set result [publish_versioned_object_to_file_system -object_id $linked_object_id -path $path -file_name $file_name]
- }
- default {
- set result [publish_versioned_object_to_file_system -object_id $object_id -path $path -file_name $file_name]
- }
+ folder {
+ set result [publish_folder_to_file_system -folder_id $object_id -path $path -folder_name $name -user_id $user_id]
+ }
+ url {
+ set result [publish_url_to_file_system -object_id $object_id -path $path -file_name $file_name]
+ }
+ symlink {
+ set linked_object_id [content::symlink::resolve -item_id $object_id]
+ set result [publish_versioned_object_to_file_system -object_id $linked_object_id -path $path -file_name $file_name]
+ }
+ default {
+ set result [publish_versioned_object_to_file_system -object_id $object_id -path $path -file_name $file_name]
+ }
}
return $result
}
@@ -542,17 +542,17 @@
publish the contents of a file storage folder to the file system
} {
if {$path eq ""} {
- set path [ad_tmpnam]
+ set path [ad_tmpnam]
}
if {$folder_name eq ""} {
- set folder_name [get_object_name -object_id $folder_id]
+ set folder_name [get_object_name -object_id $folder_id]
}
set folder_name [ad_sanitize_filename \
-collapse_spaces \
-tolower \
$folder_name]
-
+
set dir "[file join ${path} "${folder_name}"]"
# set dir "[file join ${path} "download"]"
file mkdir $dir
@@ -562,10 +562,10 @@
-collapse_spaces \
-tolower \
[ns_set get $object name]]
- publish_object_to_file_system \
- -object_id [ns_set get $object object_id] \
- -path $dir \
- -file_name $file_name \
+ publish_object_to_file_system \
+ -object_id [ns_set get $object object_id] \
+ -path $dir \
+ -file_name $file_name \
-user_id $user_id
}
@@ -581,14 +581,14 @@
(which at least KDE also knows how to handle)
} {
if {$path eq ""} {
- set path [ad_tmpnam]
- file mkdir $path
+ set path [ad_tmpnam]
+ file mkdir $path
}
db_1row select_object_metadata {}
if {$file_name eq ""} {
- set file_name $name
+ set file_name $name
}
set file_name "${file_name}.url"
set file_name [ad_sanitize_filename \
@@ -612,8 +612,8 @@
publish an object to the file system
} {
if {$path eq ""} {
- set path [ad_tmpnam]
- file mkdir $path
+ set path [ad_tmpnam]
+ file mkdir $path
}
db_1row select_object_metadata {}
@@ -622,29 +622,29 @@
set like_filesystem_p [parameter::get -parameter BehaveLikeFilesystemP -default 1]
if { $like_filesystem_p } {
- set file_name $title
- if {$file_name eq ""} {
- if {![info exists upload_file_name]} {
- set file_name "unnamedfile"
- } else {
- set file_name $file_upload_name
- }
- } elseif {[content::item::get -item_id $object_id -array_name item_info]} {
- # We make sure that the file_name contains the file
- # extension at the end so that the users default
- # application for that file type can be used
-
- set mime_type $item_info(mime_type)
- set file_extension [db_string get_extension {
- select file_extension from cr_mime_types where mime_type = :mime_type
- }]
+ set file_name $title
+ if {$file_name eq ""} {
+ if {![info exists upload_file_name]} {
+ set file_name "unnamedfile"
+ } else {
+ set file_name $file_upload_name
+ }
+ } elseif {[content::item::get -item_id $object_id -array_name item_info]} {
+ # We make sure that the file_name contains the file
+ # extension at the end so that the users default
+ # application for that file type can be used
- if { ![regexp "\.$file_extension$" $file_name match] } {
- set file_name "$file_name.$file_extension"
- }
- }
+ set mime_type $item_info(mime_type)
+ set file_extension [db_string get_extension {
+ select file_extension from cr_mime_types where mime_type = :mime_type
+ }]
+
+ if { ![regexp "\.$file_extension$" $file_name match] } {
+ set file_name "$file_name.$file_extension"
+ }
+ }
} else {
- set file_name $file_upload_name
+ set file_name $file_upload_name
}
set file_name [ad_sanitize_filename \
@@ -653,45 +653,45 @@
$file_name]
switch -- $storage_type {
- lob {
+ lob {
- # FIXME: db_blob_get_file is failing when i use bind variables
+ # FIXME: db_blob_get_file is failing when i use bind variables
- # DRB: you're out of luck - the driver doesn't support them and while it should
- # be fixed it will be a long time before we'll want to require an updated
- # driver. I'm substituting the Tcl variable value directly in the query due to
- # this. It's safe because we've pulled the value ourselves from the database,
- # don't need to worry about SQL smuggling etc.
+ # DRB: you're out of luck - the driver doesn't support them and while it should
+ # be fixed it will be a long time before we'll want to require an updated
+ # driver. I'm substituting the Tcl variable value directly in the query due to
+ # this. It's safe because we've pulled the value ourselves from the database,
+ # don't need to worry about SQL smuggling etc.
- db_blob_get_file select_object_content {} -file [file join ${path} ${file_name}]
- }
- text {
- set content [db_string select_object_content {}]
+ db_blob_get_file select_object_content {} -file [file join ${path} ${file_name}]
+ }
+ text {
+ set content [db_string select_object_content {}]
- set fp [open [file join ${path} ${file_name}] w]
- puts $fp $content
- close $fp
- }
- file {
- set cr_path [cr_fs_path $storage_area_key]
- set cr_file_name [db_string select_file_name {}]
+ set fp [open [file join ${path} ${file_name}] w]
+ puts $fp $content
+ close $fp
+ }
+ file {
+ set cr_path [cr_fs_path $storage_area_key]
+ set cr_file_name [db_string select_file_name {}]
- #
- # When there are multiple "unnamed files" in a directory,
- # the constructed full_name might exist already. This
- # would lead to an error in the "file copy"
- # operation. Therefore, generate a new name with an
- # alternate suffix in these cases.
- #
+ #
+ # When there are multiple "unnamed files" in a directory,
+ # the constructed full_name might exist already. This
+ # would lead to an error in the "file copy"
+ # operation. Therefore, generate a new name with an
+ # alternate suffix in these cases.
+ #
set full_name [file join $path $file_name]
set base_name $full_name
set count 0
- while {[file exists $full_name]} {
+ while {[file exists $full_name]} {
set full_name $base_name-[incr $count]
}
- file copy -- "${cr_path}${cr_file_name}" $full_name
- }
+ file copy -- "${cr_path}${cr_file_name}" $full_name
+ }
}
return [file join ${path} ${file_name}]
@@ -734,8 +734,8 @@
Get the item_id of a file
} {
if {$folder_id eq ""} {
- set package_id [ad_conn package_id]
- set folder_id [fs_get_root_folder -package_id $package_id]
+ set package_id [ad_conn package_id]
+ set folder_id [fs_get_root_folder -package_id $package_id]
}
return [db_exec_plsql get_item_id ""]
}
@@ -761,104 +761,104 @@
} {
if {[parameter::get -parameter "StoreFilesInDatabaseP" -package_id $package_id]} {
- set indbp "t"
+ set indbp "t"
set storage_type "lob"
} else {
- set indbp "f"
+ set indbp "f"
set storage_type "file"
}
-
+
# This check also happens in content repository, but as something
# similar was already here and mimetype coming from this was used
# afterwards, we kept this behavior.
set mime_type [cr_check_mime_type \
-filename $name \
-mime_type $mime_type \
-file $tmp_filename]
-
+
# we have to do this here because we create the object before
# calling cr_import_content
-
+
if {[content::type::content_type_p -mime_type $mime_type -content_type "image"]} {
set content_type image
} else {
set content_type file_storage_object
}
if {$item_id eq ""} {
- set item_id [db_nextval acs_object_id_seq]
+ set item_id [db_nextval acs_object_id_seq]
}
db_transaction {
- if {![db_string item_exists {}]} {
-
- set item_id [content::item::new \
- -item_id $item_id \
- -parent_id $parent_id \
- -creation_user "$creation_user" \
- -creation_ip "$creation_ip" \
- -package_id "$package_id" \
- -name $name \
- -storage_type "$storage_type" \
- -content_type "file_storage_object" \
- -mime_type "text/plain"
- ]
-
- if {$creation_user ne ""} {
- permission::grant -party_id $creation_user -object_id $item_id -privilege admin
- }
+ if {![db_string item_exists {}]} {
- # Deal with notifications. Usually send out the notification
- # But suppress it if the parameter is given
- if {$no_notification_p} {
- set do_notify_here_p "f"
- } else {
- set do_notify_here_p "t"
- }
- } else {
- # th: fixed to set old item_id if item already exists and no new item needed to be created
- db_1row get_old_item ""
- set do_notify_here_p "f"
- }
- if {$no_callback_p} {
- set revision_id [fs::add_version \
- -name $name \
- -tmp_filename $tmp_filename \
- -package_id $package_id \
- -item_id $item_id \
- -creation_user $creation_user \
- -creation_ip $creation_ip \
- -title $title \
- -description $description \
- -suppress_notify_p $do_notify_here_p \
- -storage_type $storage_type \
- -mime_type $mime_type \
- -no_callback
- ]
- } else {
- set revision_id [fs::add_version \
- -name $name \
- -tmp_filename $tmp_filename \
- -package_id $package_id \
- -item_id $item_id \
- -creation_user $creation_user \
- -creation_ip $creation_ip \
- -title $title \
- -description $description \
- -suppress_notify_p $do_notify_here_p \
- -storage_type $storage_type \
- -mime_type $mime_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
- if {!$no_callback_p} {
- if {![catch {ad_conn package_id} package_id]} {
- callback fs::file_new -package_id $package_id -file_id $item_id
- }
- }
- }
+ set item_id [content::item::new \
+ -item_id $item_id \
+ -parent_id $parent_id \
+ -creation_user "$creation_user" \
+ -creation_ip "$creation_ip" \
+ -package_id "$package_id" \
+ -name $name \
+ -storage_type "$storage_type" \
+ -content_type "file_storage_object" \
+ -mime_type "text/plain"
+ ]
+
+ if {$creation_user ne ""} {
+ permission::grant -party_id $creation_user -object_id $item_id -privilege admin
+ }
+
+ # Deal with notifications. Usually send out the notification
+ # But suppress it if the parameter is given
+ if {$no_notification_p} {
+ set do_notify_here_p "f"
+ } else {
+ set do_notify_here_p "t"
+ }
+ } else {
+ # th: fixed to set old item_id if item already exists and no new item needed to be created
+ db_1row get_old_item ""
+ set do_notify_here_p "f"
+ }
+ if {$no_callback_p} {
+ set revision_id [fs::add_version \
+ -name $name \
+ -tmp_filename $tmp_filename \
+ -package_id $package_id \
+ -item_id $item_id \
+ -creation_user $creation_user \
+ -creation_ip $creation_ip \
+ -title $title \
+ -description $description \
+ -suppress_notify_p $do_notify_here_p \
+ -storage_type $storage_type \
+ -mime_type $mime_type \
+ -no_callback
+ ]
+ } else {
+ set revision_id [fs::add_version \
+ -name $name \
+ -tmp_filename $tmp_filename \
+ -package_id $package_id \
+ -item_id $item_id \
+ -creation_user $creation_user \
+ -creation_ip $creation_ip \
+ -title $title \
+ -description $description \
+ -suppress_notify_p $do_notify_here_p \
+ -storage_type $storage_type \
+ -mime_type $mime_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
+ if {!$no_callback_p} {
+ if {![catch {ad_conn package_id} package_id]} {
+ callback fs::file_new -package_id $package_id -file_id $item_id
+ }
+ }
+ }
}
return $revision_id
}
@@ -881,10 +881,10 @@
@return revision_id
} {
if {[parameter::get -parameter "StoreFilesInDatabaseP" -package_id $package_id]} {
- set indbp "t"
+ set indbp "t"
set storage_type "lob"
} else {
- set indbp "f"
+ set indbp "f"
set storage_type "file"
}
if {$item_id ne ""} {
@@ -893,25 +893,25 @@
}]
}
if {$mime_type eq "" } {
- set mime_type "text/html"
+ set mime_type "text/html"
}
if { $name eq "" } {
- set name $title
+ set name $title
}
set content_type "file_storage_object"
db_transaction {
- if {$item_id eq "" || ![db_string item_exists {}]} {
- set item_id [db_exec_plsql create_item ""]
- if {$creation_user ne ""} {
- 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"
- }
-
+ if {$item_id eq "" || ![db_string item_exists {}]} {
+ set item_id [db_exec_plsql create_item ""]
+ if {$creation_user ne ""} {
+ 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 \
@@ -924,16 +924,16 @@
-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
- }
- if {!$no_callback_p} {
- if {![catch {ad_conn package_id} package_id]} {
- callback fs::file_new -package_id $package_id -file_id $item_id
- }
- }
+ 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
+ }
+
+ if {!$no_callback_p} {
+ if {![catch {ad_conn package_id} package_id]} {
+ callback fs::file_new -package_id $package_id -file_id $item_id
+ }
+ }
}
return $revision_id
}
@@ -956,16 +956,16 @@
@return revision_id
} {
if {$package_id eq ""} {
- set package_id [ad_conn package_id]
+ set package_id [ad_conn package_id]
}
if {$storage_type eq ""} {
- set storage_type [db_string get_storage_type {}]
+ set storage_type [db_string get_storage_type {}]
}
if {$creation_user eq ""} {
- set creation_user [ad_conn user_id]
+ set creation_user [ad_conn user_id]
}
if {$creation_ip eq ""} {
- set creation_ip [ns_conn peeraddr]
+ set creation_ip [ns_conn peeraddr]
}
set parent_id [fs::get_parent -item_id $item_id]
if {$storage_type eq ""} {
@@ -991,19 +991,19 @@
# 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 \
+ -storage_type \
+ -creation_user $creation_user \
+ -creation_ip $creation_ip \
+ -other_type "file_storage_object" \
+ -image_type "file_storage_object" \
+ -title $title \
+ -description $description \
-package_id $package_id \
- $parent_id \
- $tmp_filename \
- $tmp_size \
- $mime_type \
- $name]
+ $parent_id \
+ $tmp_filename \
+ $tmp_size \
+ $mime_type \
+ $name]
db_dml set_lob_content "" -blobs [list $content_body]
db_dml set_lob_size ""
}
@@ -1016,7 +1016,7 @@
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
+ 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.
@@ -1044,7 +1044,7 @@
{-mime_type ""}
-no_callback:boolean
} {
- Create a new version of a file storage item
+ Create a new version of a file storage item
@return revision_id
} {
# always use the storage type of the existing item
@@ -1063,27 +1063,27 @@
set tmp_size [file size $tmp_filename]
set parent_id [fs::get_parent -item_id $item_id]
set revision_id [cr_import_content \
- -item_id $item_id \
- -storage_type $storage_type \
- -creation_user $creation_user \
- -creation_ip $creation_ip \
- -other_type "file_storage_object" \
- -image_type "file_storage_object" \
- -title $title \
- -description $description \
+ -item_id $item_id \
+ -storage_type $storage_type \
+ -creation_user $creation_user \
+ -creation_ip $creation_ip \
+ -other_type "file_storage_object" \
+ -image_type "file_storage_object" \
+ -title $title \
+ -description $description \
-package_id $package_id \
- $parent_id \
- $tmp_filename \
- $tmp_size \
- $mime_type \
- $name]
-
+ $parent_id \
+ $tmp_filename \
+ $tmp_size \
+ $mime_type \
+ $name]
+
content::item::set_live_revision -revision_id $revision_id
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
+ 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.
@@ -1094,9 +1094,9 @@
}
if {!$no_callback_p} {
- if {![catch {ad_conn package_id} package_id]} {
- callback fs::file_revision_new -package_id $package_id -file_id $item_id -parent_id $parent_id
- }
+ if {![catch {ad_conn package_id} package_id]} {
+ callback fs::file_revision_new -package_id $package_id -file_id $item_id -parent_id $parent_id
+ }
}
return $revision_id
@@ -1114,22 +1114,22 @@
set version_name [get_object_name -object_id $item_id]
if {$parent_id eq ""} {
- set parent_id [fs::get_parent -item_id $item_id]
+ set parent_id [fs::get_parent -item_id $item_id]
}
-
+
set folder_info [fs::get_folder_package_and_root $parent_id]
set package_id [lindex $folder_info 0]
# check if there were symlinks, if yes, delete them
set all_symlinks [db_list get_all_symlinks {}]
foreach symlink_id $all_symlinks {
- fs::delete_file -item_id $symlink_id
+ fs::delete_file -item_id $symlink_id
}
if {!$no_callback_p} {
- if {![catch {ad_conn package_id} package_id]} {
- callback fs::file_delete -package_id $package_id -file_id $item_id
- }
+ if {![catch {ad_conn package_id} package_id]} {
+ callback fs::file_delete -package_id $package_id -file_id $item_id
+ }
}
db_exec_plsql delete_file ""
@@ -1147,18 +1147,18 @@
Deletes a folder and all contents
} {
if {!$no_callback_p} {
- if {![catch {ad_conn package_id} package_id]} {
- callback fs::folder_delete -package_id $package_id -folder_id $folder_id
- }
+ if {![catch {ad_conn package_id} package_id]} {
+ callback fs::folder_delete -package_id $package_id -folder_id $folder_id
+ }
}
if {$parent_id eq ""} {
- set parent_id [fs::get_parent -item_id $folder_id]
+ set parent_id [fs::get_parent -item_id $folder_id]
}
set version_name [get_object_name -object_id $folder_id]
db_exec_plsql delete_folder {}
-
+
if { !$no_notifications_p } {
fs::do_notifications -folder_id $parent_id -filename $version_name -item_id $folder_id -action "delete_folder"
}
@@ -1172,9 +1172,9 @@
the file as well.
} {
set parent_id [db_exec_plsql delete_version {}]
-
+
if {$parent_id > 0} {
- delete_file -item_id $item_id -parent_id $parent_id
+ delete_file -item_id $item_id -parent_id $parent_id
}
return $parent_id
}
@@ -1188,42 +1188,42 @@
@param item_id folder_id or item_id of file-storage folder or file
@param root_folder_id root folder to resolve URL from
-
+
@return fully qualified URL for WebDAV access or empty string if
item is not WebDAV enabled
} {
if { [parameter::get -parameter "UseWebDavP"] == 0 } {
- return "ho"
- }
+ return "ho"
+ }
if {$package_id eq ""} {
- set package_id [ad_conn package_id]
+ set package_id [ad_conn package_id]
}
-
+
if {$root_folder_id eq ""} {
- set root_folder_id [fs::get_root_folder -package_id $package_id]
+ set root_folder_id [fs::get_root_folder -package_id $package_id]
}
if {"t" eq [oacs_dav::folder_enabled -folder_id $root_folder_id]} {
- if {$root_folder_id eq $item_id} {
- set url_stub ""
- } else {
- set url_stub [content::item::get_virtual_path -root_folder_id $root_folder_id -item_id $item_id]
- }
- set package_url [apm_package_url_from_id $package_id]
+ if {$root_folder_id eq $item_id} {
+ set url_stub ""
+ } else {
+ set url_stub [content::item::get_virtual_path -root_folder_id $root_folder_id -item_id $item_id]
+ }
+ set package_url [apm_package_url_from_id $package_id]
- set webdav_prefix [oacs_dav::uri_prefix]
+ set webdav_prefix [oacs_dav::uri_prefix]
- if { [security::RestrictLoginToSSLP] } {
- return "[security::get_secure_location]${webdav_prefix}${package_url}${url_stub}"
- } else {
- return "[ad_url]${webdav_prefix}${package_url}${url_stub}"
- }
+ if { [security::RestrictLoginToSSLP] } {
+ return "[security::get_secure_location]${webdav_prefix}${package_url}${url_stub}"
+ } else {
+ return "[ad_url]${webdav_prefix}${package_url}${url_stub}"
+ }
} else {
- return ""
-
+ return ""
+
}
}
@@ -1244,7 +1244,7 @@
set package_and_root [fs::get_folder_package_and_root $folder_id]
set root_folder [lindex $package_and_root 1]
if {$package_id eq ""} {
- set package_id [lindex $package_and_root 0]
+ set package_id [lindex $package_and_root 0]
}
if {$action eq "new_file"} {
@@ -1271,20 +1271,20 @@
if {$action eq "new_version"} {
- set sql "select description as description from cr_revisions
+ set sql "select description as description from cr_revisions
where cr_revisions.revision_id = :item_id"
} elseif {[string match "*folder" $action]} {
set sql "select description from cr_folders where folder_id=:item_id"
} else {
- set sql "select description as description from cr_revisions
+ set sql "select description as description from cr_revisions
where cr_revisions.item_id = :item_id"
}
db_0or1row description $sql
}
db_1row path1 { }
-
+
# Set email message body - "text only" for now
set text_version ""
append text_version "[_ file-storage.lt_Notification_for_File]\n"
@@ -1300,16 +1300,16 @@
append text_version "[_ file-storage.Uploaded_by_ownern]\n"
}
if {[info exists description]} {
- append text_version "[_ file-storage.lt_Version_Notes_descrip]\n"
+ append text_version "[_ file-storage.lt_Version_Notes_descrip]\n"
}
set url_version "$url$path1?folder_id=$folder_id"
append text_version "[_ file-storage.lt_View_folder_contents_]\n"
-
+
set html_version [ad_html_text_convert -from text/plain -to text/html -- $text_version]
append html_version "
"
# Do the notification for the file-storage
-
+
notification::new \
-type_id [notification::type::get_type_id \
-short_name fs_fs_notif] \
@@ -1329,7 +1329,7 @@
-object_id $parent_id \
-notif_subject "[_ file-storage.lt_File_Storage_Notifica]" \
-notif_text $new_content \
- -notif_html $html_version
+ -notif_html $html_version
set folder_id $parent_id
}
}
@@ -1339,15 +1339,15 @@
} {
Returns an array containing elements editable_p, mime_type, file_extension
if an fs item is editable through the browser, editable_p is set to 1
-
+
@author Deds Castillo (deds@i-manila.com.ph)
@creation-date 2004-07-03
-
+
@param item_id
- @return
-
- @error
+ @return
+
+ @error
} {
# ideally, this would get values from parameters
# hardcoding it for now
@@ -1356,7 +1356,7 @@
content::item::get -item_id $item_id -array_name item_info
set mime_info(mime_type) [set mime_type $item_info(mime_type)]
set mime_info(file_extension) [db_string get_extension {
- select file_extension from cr_mime_types where mime_type = :mime_type
+ select file_extension from cr_mime_types where mime_type = :mime_type
}]
if {[string tolower $mime_info(mime_type)] in $editable_mime_types} {
@@ -1371,15 +1371,15 @@
-item_id:required
} {
returns 1 if item is editable via browser
-
+
@author Deds Castillo (deds@i-manila.com.ph)
@creation-date 2004-07-03
-
+
@param item_id
- @return
-
- @error
+ @return
+
+ @error
} {
array set item_editable_info [fs::item_editable_info -item_id $item_id]
@@ -1391,34 +1391,34 @@
-revision_id
} {
returns an array containing the fs object info
-
+
@author Deds Castillo (deds@i-manila.com.ph)
@creation-date 2004-07-03
-
+
@param item_id
@param revision_id
- @return
-
- @error
+ @return
+
+ @error
} {
if {(![info exists revision_id] || $revision_id eq "")} {
set revision_id [content::item::get_live_revision -item_id $file_id]
}
db_1row file_info {
- select r.item_id as file_id, r.revision_id,
- r.mime_type, r.title, r.description,
- r.content_length as content_size,
- i.name, o.last_modified, i.parent_id,
- i.storage_type, i.storage_area_key
- from cr_revisions r, cr_items i, acs_objects o
- where r.revision_id = :revision_id
- and r.item_id = i.item_id
- and i.item_id = :file_id
- and i.content_type = 'file_storage_object'
- and r.revision_id = o.object_id
+ select r.item_id as file_id, r.revision_id,
+ r.mime_type, r.title, r.description,
+ r.content_length as content_size,
+ i.name, o.last_modified, i.parent_id,
+ i.storage_type, i.storage_area_key
+ from cr_revisions r, cr_items i, acs_objects o
+ where r.revision_id = :revision_id
+ and r.item_id = i.item_id
+ and i.item_id = :file_id
+ and i.content_type = 'file_storage_object'
+ and r.revision_id = o.object_id
} -column_array file_object_info
# GN: this query was probably never defined in CVS
@@ -1428,7 +1428,7 @@
set file_object_info(cr_file_path) [content::revision::get_cr_file_path \
-revision_id $revision_id]
}
-
+
return [array get file_object_info]
}
@@ -1453,14 +1453,14 @@
Returns the package_id for a passed-in file_id. This is useful when
using symlinks to files whose real root_folder_id is not the root_folder_id
of the package the user is in.
-
+
@author Stan Kaufman (skaufman@epimetrics.com)
@creation-date 2005-09-07
-
+
@param file_id
@return package_id
-
+
} {
return [db_string select_package_id {}]
}
@@ -1474,10 +1474,10 @@
handles folders
@param object_id
-
+
@author Stan Kaufman (skaufman@epimetrics.com)
@creation-date 2005-02-28
-} {
+} {
set folder_id $object_id
set package_id [lindex [fs::get_folder_package_and_root $folder_id] 0]
set fs_package_url [lindex [site_node::get_url_from_object_id -object_id $package_id] 0]
@@ -1491,7 +1491,7 @@
-symlink:boolean
} {
copy file to target folder
-
+
@param file_id Item_id of the file to be copied
@param target_folder_id Folder ID of the folder to which the file is copied to
@param postfix Postfix will be added with "_" to the new filename (not title). Very useful if you want to avoid unique name constraints on cr_items.
@@ -1500,49 +1500,49 @@
db_1row file_data {}
if {$postfix ne ""} {
- set name [lang::util::localize "[file rootname $name]_$postfix[file extension $name]"]
+ set name [lang::util::localize "[file rootname $name]_$postfix[file extension $name]"]
}
if {$symlink_p} {
- return [content::symlink::new -name $name -label $title -target_id $file_id -parent_id $target_folder_id]
+ return [content::symlink::new -name $name -label $title -target_id $file_id -parent_id $target_folder_id]
} else {
- set user_id [ad_conn user_id]
- set creation_ip [ad_conn peeraddr]
- set file_path "[cr_fs_path][cr_create_content_file_path $file_id $file_rev_id]"
+ set user_id [ad_conn user_id]
+ set creation_ip [ad_conn peeraddr]
+ set file_path "[cr_fs_path][cr_create_content_file_path $file_id $file_rev_id]"
- # We need to check if the file already exists with the same name in the target folder
- # If yes, just add a new revision.
-
- set new_file_id [content::item::get_id_by_name -name $name -parent_id $target_folder_id]
- if {$new_file_id eq ""} {
- set new_file_id [content::item::new \
- -name $name \
- -parent_id $target_folder_id \
- -context_id $target_folder_id \
- -item_subtype "content_item" \
- -content_type "file_storage_object" \
- -storage_type "file"]
- }
+ # We need to check if the file already exists with the same name in the target folder
+ # If yes, just add a new revision.
- # Now create the revision
- set new_file_rev_id [content::revision::copy \
- -revision_id $file_rev_id \
- -target_item_id $new_file_id \
- -creation_user $user_id \
- -creation_ip $creation_ip]
-
- set new_path [cr_create_content_file_path $new_file_id $new_file_rev_id]
- cr_create_content_file $new_file_id $new_file_rev_id $file_path
-
- if {$postfix ne ""} {
- # set postfixed new title
- db_dml update_title {}
- }
+ set new_file_id [content::item::get_id_by_name -name $name -parent_id $target_folder_id]
+ if {$new_file_id eq ""} {
+ set new_file_id [content::item::new \
+ -name $name \
+ -parent_id $target_folder_id \
+ -context_id $target_folder_id \
+ -item_subtype "content_item" \
+ -content_type "file_storage_object" \
+ -storage_type "file"]
+ }
- content::item::set_live_revision -revision_id $new_file_rev_id
-
- return $new_file_id
- }
+ # Now create the revision
+ set new_file_rev_id [content::revision::copy \
+ -revision_id $file_rev_id \
+ -target_item_id $new_file_id \
+ -creation_user $user_id \
+ -creation_ip $creation_ip]
+
+ set new_path [cr_create_content_file_path $new_file_id $new_file_rev_id]
+ cr_create_content_file $new_file_id $new_file_rev_id $file_path
+
+ if {$postfix ne ""} {
+ # set postfixed new title
+ db_dml update_title {}
+ }
+
+ content::item::set_live_revision -revision_id $new_file_rev_id
+
+ return $new_file_id
+ }
}
ad_proc -public fs::file_copy {
@@ -1552,7 +1552,7 @@
-symlink:boolean
} {
copy file to target folder
-
+
@param file_id Item_id of the file to be copied
@param target_folder_id Folder ID of the folder to which the file is copied to
@param postfix Postfix will be added with "_" to the new filename (not title). Very useful if you want to avoid unique name constraints on cr_items.
@@ -1561,49 +1561,49 @@
db_1row file_data {}
if {$postfix ne ""} {
- set name [lang::util::localize "[file rootname $name]_$postfix[file extension $name]"]
+ set name [lang::util::localize "[file rootname $name]_$postfix[file extension $name]"]
}
if {$symlink_p} {
- return [content::symlink::new -name $name -label $title -target_id $file_id -parent_id $target_folder_id]
+ return [content::symlink::new -name $name -label $title -target_id $file_id -parent_id $target_folder_id]
} else {
- set user_id [ad_conn user_id]
- set creation_ip [ad_conn peeraddr]
- set file_path "[cr_fs_path][cr_create_content_file_path $file_id $file_rev_id]"
+ set user_id [ad_conn user_id]
+ set creation_ip [ad_conn peeraddr]
+ set file_path "[cr_fs_path][cr_create_content_file_path $file_id $file_rev_id]"
- # We need to check if the file already exists with the same name in the target folder
- # If yes, just add a new revision.
-
- set new_file_id [content::item::get_id_by_name -name $name -parent_id $target_folder_id]
- if {$new_file_id eq ""} {
- set new_file_id [content::item::new \
- -name $name \
- -parent_id $target_folder_id \
- -context_id $target_folder_id \
- -item_subtype "content_item" \
- -content_type "file_storage_object" \
- -storage_type "file"]
- }
+ # We need to check if the file already exists with the same name in the target folder
+ # If yes, just add a new revision.
- # Now create the revision
- set new_file_rev_id [content::revision::copy \
- -revision_id $file_rev_id \
- -target_item_id $new_file_id \
- -creation_user $user_id \
- -creation_ip $creation_ip]
-
- set new_path [cr_create_content_file_path $new_file_id $new_file_rev_id]
- cr_create_content_file $new_file_id $new_file_rev_id $file_path
-
- if {$postfix ne ""} {
- # set postfixed new title
- db_dml update_title {}
- }
+ set new_file_id [content::item::get_id_by_name -name $name -parent_id $target_folder_id]
+ if {$new_file_id eq ""} {
+ set new_file_id [content::item::new \
+ -name $name \
+ -parent_id $target_folder_id \
+ -context_id $target_folder_id \
+ -item_subtype "content_item" \
+ -content_type "file_storage_object" \
+ -storage_type "file"]
+ }
- content::item::set_live_revision -revision_id $new_file_rev_id
-
- return $new_file_id
- }
+ # Now create the revision
+ set new_file_rev_id [content::revision::copy \
+ -revision_id $file_rev_id \
+ -target_item_id $new_file_id \
+ -creation_user $user_id \
+ -creation_ip $creation_ip]
+
+ set new_path [cr_create_content_file_path $new_file_id $new_file_rev_id]
+ cr_create_content_file $new_file_id $new_file_rev_id $file_path
+
+ if {$postfix ne ""} {
+ # set postfixed new title
+ db_dml update_title {}
+ }
+
+ content::item::set_live_revision -revision_id $new_file_rev_id
+
+ return $new_file_id
+ }
}
ad_proc -private fs::category_links {
@@ -1622,22 +1622,22 @@
@return a list of category_links to filter the supplied folder for a given category
} {
if { $fs_url eq "" } {
- set fs_url [ad_conn package_url]
+ set fs_url [ad_conn package_url]
}
set selected_found_p 0
set categories [list]
foreach category_id [category::get_mapped_categories $object_id] {
- if { $category_id eq $selected_category_id } {
- set selected_found_p 1
- lappend categories "[category::get_name $category_id] (x)"
- } else {
- lappend categories "[category::get_name $category_id]"
- }
+ if { $category_id eq $selected_category_id } {
+ set selected_found_p 1
+ lappend categories "[category::get_name $category_id] (x)"
+ } else {
+ lappend categories "[category::get_name $category_id]"
+ }
}
if { [string is false $selected_found_p] && $selected_category_id ne "" } {
- # we need to show the link to remove this category file at the
- # top of the folder
- lappend categories "[category::get_name $selected_category_id] (x)"
+ # we need to show the link to remove this category file at the
+ # top of the folder
+ lappend categories "[category::get_name $selected_category_id] (x)"
}
return [join $categories $joinwith]
}