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] }