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 -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.pretty_type@} \
+ display_template {@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: