Index: openacs-4/packages/file-storage/www/file.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/www/file.tcl,v diff -u -r1.35 -r1.36 --- openacs-4/packages/file-storage/www/file.tcl 27 Jun 2015 21:41:49 -0000 1.35 +++ openacs-4/packages/file-storage/www/file.tcl 7 Aug 2017 23:48:11 -0000 1.36 @@ -6,7 +6,7 @@ @cvs-id $Id$ } { file_id:naturalnum,notnull - {show_all_versions_p:boolean "f"} + {show_all_versions_p:boolean,notnull "f"} } -validate { valid_file -requires {file_id} { if {![fs_file_p $file_id]} { @@ -37,7 +37,8 @@ db_1row file_info "" # get folder id so we can implement a back link -set folder_id [db_string get_folder ""] +set folder_id [db_string get_folder {}] +set folder_write_p [permission::permission_p -object_id $folder_id -privilege write] set folder_view_url [export_vars -base index {folder_id}] @@ -60,20 +61,47 @@ set rename_name [_ file-storage.Rename_File] } -set actions [list \ - [_ file-storage.Upload_Revision] [export_vars -base file-add {file_id return_url}] "Upload a new version of this file" \ - $rename_name [export_vars -base file-edit file_id] "Rename file" \ - [_ file-storage.Copy_File] [export_vars -base copy {{object_id $file_id} return_url}] "Copy file" \ - [_ file-storage.Move_File] [export_vars -base move {{object_id $file_id} {return_url $folder_view_url}}] "Move file" \ - [_ file-storage.Delete_File] [export_vars -base delete {{object_id $file_id} {return_url $folder_view_url}}] "Delete file"] -if {$delete_p == "t"} { +set actions {} + +if {$write_p} { lappend actions \ - [_ file-storage.Set_Permissions] \ - [export_vars -base permissions {{object_id $file_id}}] \ - [_ file-storage.lt_Modify_permissions_on] + [_ file-storage.Upload_Revision] \ + [export_vars -base file-add {file_id return_url}] \ + "Upload a new version of this file" \ + $rename_name \ + [export_vars -base file-edit file_id] \ + "Rename file" } +# 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 {$folder_write_p} { + lappend actions \ + [_ file-storage.Copy_File] \ + [export_vars -base copy {{object_id $file_id} return_url}] \ + "Copy file" +} + +if {$delete_p} { + # 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 + lappend actions \ + [_ file-storage.Move_File] \ + [export_vars -base move {{object_id $file_id} {return_url $folder_view_url}}] \ + "Move file" + lappend actions \ + [_ file-storage.Delete_File] \ + [export_vars -base delete {{object_id $file_id} {return_url $folder_view_url}}] \ + "Delete file" \ + [_ file-storage.Set_Permissions] \ + [export_vars -base permissions {{object_id $file_id}}] \ + [_ file-storage.lt_Modify_permissions_on] +} + + template::list::create \ -name version \ -no_data [_ file-storage.lt_There_are_no_versions] \ @@ -124,8 +152,10 @@ } else { set version_url [export_vars -base "download/$title" {file_id}] } - set version_delete [_ file-storage.Delete_Version] - set version_delete_url [export_vars -base version-delete version_id] + if {$delete_p} { + set version_delete [_ file-storage.Delete_Version] + set version_delete_url [export_vars -base version-delete version_id] + } set author_link [acs_community_member_link -user_id $author_id -label $author] } @@ -140,3 +170,9 @@ if { $categories_p } { set category_links [fs::category_links -object_id $file_id -folder_id $folder_id] } + +# Local variables: +# mode: tcl +# tcl-indent-level: 4 +# indent-tabs-mode: nil +# End: