Index: openacs-4/packages/file-storage/www/folder-chunk.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/www/folder-chunk.tcl,v diff -u -N -r1.49 -r1.50 --- openacs-4/packages/file-storage/www/folder-chunk.tcl 27 Oct 2014 16:41:33 -0000 1.49 +++ openacs-4/packages/file-storage/www/folder-chunk.tcl 7 Aug 2017 23:48:11 -0000 1.50 @@ -5,22 +5,22 @@ @creation-date Feb 22, 2002 @cvs-id $Id$ } -query { - {orderby:optional} + {orderby:token,optional} } -properties { folder_name:onevalue contents:multirow content_size_total:onevalue page_num } -if {(![info exists folder_id] || $folder_id eq "")} { +if {![info exists folder_id] || $folder_id eq ""} { ad_return_complaint 1 [_ file-storage.lt_bad_folder_id_folder_] ad_script_abort } -if {(![info exists allow_bulk_actions] || $allow_bulk_actions eq "")} { +if {![info exists allow_bulk_actions] || $allow_bulk_actions eq ""} { set allow_bulk_actions "0" } -if { (![info exists category_id] || $category_id eq "") } { +if { ![info exists category_id] || $category_id eq "" } { set category_id "" } set viewing_user_id [ad_conn user_id] @@ -38,19 +38,19 @@ set delete_p [permission::permission_p -party_id $viewing_user_id -object_id $folder_id -privilege "delete"] } -if {(![info exists n_past_days] || $n_past_days eq "")} { +if {![info exists n_past_days] || $n_past_days eq ""} { set n_past_days 99999 } -if {(![info exists fs_url] || $fs_url eq "")} { +if {![info exists fs_url] || $fs_url eq ""} { set fs_url [ad_conn package_url] } set folder_name [lang::util::localize [fs::get_object_name -object_id $folder_id]] set content_size_total 0 -if {(![info exists format] || $format eq "")} { +if {![info exists format] || $format eq ""} { set format table } @@ -76,18 +76,20 @@ set cancel_url "[ad_conn url]?[ad_conn query]" set add_url [export_vars -base "${fs_url}file-add" {folder_id}] -lappend actions "#file-storage.Add_File#" \ - [export_vars -base "${fs_url}file-upload-confirm" {folder_id cancel_url {return_url $add_url}}] \ - [_ file-storage.lt_Upload_a_file_in_this] \ - "#file-storage.Create_a_URL#" \ - [export_vars -base "${fs_url}simple-add" {folder_id}] \ - [_ file-storage.lt_Add_a_link_to_a_web_p] \ - "#file-storage.New_Folder#" \ - [export_vars -base "${fs_url}folder-create" {{parent_id $folder_id}}] \ - "#file-storage.Create_a_new_folder#" \ - [_ file-storage.lt_Upload_compressed_fol] \ - [export_vars -base "${fs_url}folder-zip-add" {folder_id}] \ - [_ file-storage.lt_Upload_a_compressed_f] +if {$write_p} { + lappend actions "#file-storage.Add_File#" \ + [export_vars -base "${fs_url}file-upload-confirm" {folder_id cancel_url {return_url $add_url}}] \ + [_ file-storage.lt_Upload_a_file_in_this] \ + "#file-storage.Create_a_URL#" \ + [export_vars -base "${fs_url}simple-add" {folder_id}] \ + [_ file-storage.lt_Add_a_link_to_a_web_p] \ + "#file-storage.New_Folder#" \ + [export_vars -base "${fs_url}folder-create" {{parent_id $folder_id}}] \ + "#file-storage.Create_a_new_folder#" \ + [_ file-storage.lt_Upload_compressed_fol] \ + [export_vars -base "${fs_url}folder-zip-add" {folder_id}] \ + [_ file-storage.lt_Upload_a_compressed_f] +} set expose_rss_p [parameter::get -parameter ExposeRssP -package_id $package_id -default 0] set like_filesystem_p [parameter::get -parameter BehaveLikeFilesystemP -package_id $package_id -default 1] @@ -106,11 +108,14 @@ "#file-storage.Delete_this_folder#" } if {$admin_p} { + if { $root_folder_id ne $folder_id } { + lappend actions \ + "#file-storage.Edit_Folder#" \ + [export_vars -base "${fs_url}folder-edit" {folder_id}] \ + "#file-storage.Rename_this_folder#" + } lappend actions \ - "#file-storage.Edit_Folder#" \ - [export_vars -base "${fs_url}folder-edit" {folder_id}] \ - "#file-storage.Rename_this_folder#" \ - "#file-storage.lt_Modify_permissions_on_1#" \ + "#file-storage.lt_Modify_permissions_on_1#" \ [export_vars -base "${fs_url}permissions" -override {{object_id $folder_id}} {{return_url "[ad_conn url]"}}] \ "#file-storage.lt_Modify_permissions_on_1#" if { $expose_rss_p } { @@ -132,7 +137,7 @@ set elements [list \ type \ [list label [_ file-storage.Type] \ - display_template {@contents.alt_icon@@contents.pretty_type@} \ + display_template {@contents.alt_icon@@contents.pretty_type@} \ orderby_desc {sort_key_desc,fs_objects.pretty_type desc} \ orderby_asc {fs_objects.sort_key, fs_objects.pretty_type asc}] \ name \ @@ -181,32 +186,53 @@ concat $elements [list views [list label "Views"]] } -if {(![info exists return_url] || $return_url eq "")} { +if {![info exists return_url] || $return_url eq ""} { set return_url [export_vars -base "index" {folder_id}] } set vars_to_export [list return_url] + +set bulk_actions {} if {$allow_bulk_actions} { - set bulk_actions [list [_ file-storage.Move] \ - ${fs_url}move \ - [_ file-storage.lt_Move_Checked_Items_to] \ - [_ file-storage.Copy] \ - ${fs_url}copy \ - [_ file-storage.lt_Copy_Checked_Items_to] \ - [_ file-storage.Delete] \ - ${fs_url}delete \ - [_ file-storage.Delete_Checked_Items] \ - [_ file-storage.Download_ZIP] \ - ${fs_url}download-zip \ - [_ file-storage.Download_ZIP_Checked_Items]] + set user_id [ad_conn user_id] + set bulk_delete_p [db_string some_deletables { + select exists (select 1 from fs_objects + where parent_id = :folder_id + and acs_permission__permission_p(object_id, :viewing_user_id, 'delete')) + }] + set bulk_copy_p [permission::permission_p -object_id $folder_id -privilege write] + + + # add button only when available folders for move exist. We + # lazily check for deletion, as a proper check of a suitable + # destination for moving would be too much effort + if {$bulk_delete_p} { + lappend bulk_actions \ + [_ file-storage.Move] ${fs_url}move [_ file-storage.lt_Move_Checked_Items_to] + } + # add button only when available folders for copy exist. We settle for + # a lazy check on write permissions for folder because a rigorous + # check of available destinations would not be performant. + if {$bulk_copy_p} { + lappend bulk_actions \ + [_ file-storage.Copy] ${fs_url}copy [_ file-storage.lt_Copy_Checked_Items_to] + } + + if {$bulk_delete_p} { + lappend bulk_actions \ + [_ file-storage.Delete] ${fs_url}delete [_ file-storage.Delete_Checked_Items] + } + + lappend bulk_actions \ + [_ file-storage.Download_ZIP] ${fs_url}download-zip [_ file-storage.Download_ZIP_Checked_Items] + callback fs::folder_chunk::add_bulk_actions \ -bulk_variable "bulk_actions" \ -folder_id $folder_id \ -var_export_list "vars_to_export" -} else { - set bulk_actions "" } + if {$format eq "list"} { set actions {} } @@ -274,8 +300,6 @@ } - set file_upload_name [fs::remove_special_file_system_characters -string $file_upload_name] - if { $content_size ne "" } { incr content_size_total $content_size } @@ -353,8 +377,11 @@ default { set properties_link [_ file-storage.properties] set properties_url [export_vars -base ${fs_url}file {{file_id $object_id}}] - set new_version_link [_ acs-kernel.common_New] - set new_version_url [export_vars -base ${fs_url}file-add {{file_id $object_id}}] + if { [permission::permission_p \ + -object_id $object_id -privilege "write"] } { + set new_version_link [_ acs-kernel.common_New] + set new_version_url [export_vars -base ${fs_url}file-add {{file_id $object_id}}] + } set icon "/resources/file-storage/file.gif" set alt_icon "#file-storage.file#" set download_link [_ file-storage.Download] @@ -400,3 +427,9 @@ set compressed_url [export_vars -base ${fs_url}download-zip -url {{object_id $folder_id}}] } ad_return_template + +# Local variables: +# mode: tcl +# tcl-indent-level: 4 +# indent-tabs-mode: nil +# End: