Index: openacs-4/packages/file-storage/www/folder-create.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/www/folder-create.tcl,v diff -u -r1.10 -r1.11 --- openacs-4/packages/file-storage/www/folder-create.tcl 27 Oct 2014 16:41:33 -0000 1.10 +++ openacs-4/packages/file-storage/www/folder-create.tcl 7 Aug 2017 23:48:11 -0000 1.11 @@ -29,23 +29,30 @@ set user_id [ad_conn user_id] set package_id [ad_conn package_id] # check that they have write permission on the parent folder or this folder if its an edit. -if { ([info exists parent_id] && $parent_id ne "") } { +if { [info exists parent_id] && $parent_id ne "" } { permission::require_permission \ -object_id $parent_id \ -party_id $user_id \ -privilege "write" } if {![ad_form_new_p -key folder_id]} { - #editing an existing folder + # + # editing an existing folder + # permission::require_permission \ -object_id $folder_id \ -party_id $user_id \ -privilege "write" set context [fs_context_bar_list -final "[_ file-storage.Edit_Folder]" $folder_id] -} else { - #adding a new folder +} elseif {[info exists parent_id]} { + # + # adding a new folder + # set context [fs_context_bar_list -final "[_ file-storage.Create_New_Folder]" $parent_id] +} else { + ad_return_complaint 1 "invalid parent_id" + ad_script_abort } ad_form -name "folder-ae" -html { enctype multipart/form-data } -export { parent_id } -form { @@ -56,9 +63,9 @@ set package_id [ad_conn package_id] if { [parameter::get -parameter CategoriesP -package_id $package_id -default 0] } { - if { ([info exists folder_id] && $folder_id ne "") } { + if { [info exists folder_id] && $folder_id ne "" } { set categorized_object_id $folder_id - } elseif { ([info exists parent_id] && $parent_id ne "") } { + } elseif { [info exists parent_id] && $parent_id ne "" } { set categorized_object_id $parent_id } else { set categorized_object_id "" @@ -89,9 +96,19 @@ # strip out spaces from the name # use - instead of _ which can get URLencoded - set name [string tolower [util_text_to_url -text $folder_name]] - #I want the transaction here for the error message. But fs::new_folder should not be used without a transaction if you are going to set the description. + set name [ad_sanitize_filename \ + -collapse_spaces \ + -tolower \ + $folder_name] + # check folder name does not exist already + if {[content::item::get_id_by_name \ + -name $name -parent_id $parent_id] ne ""} { + set folder_link [_ file-storage.folder] + template::form::set_error folder-ae folder_name [_ file-storage.lt_The_folder_link_you_s] + break + } + db_transaction { set folder_id [fs::new_folder \ -name $name \ @@ -101,10 +118,9 @@ -creation_ip [ad_conn peeraddr] \ -description $description] } on_error { - ns_log notice "AIGH! something bad happened! $errmsg" - ad_return_complaint 1 [_ file-storage.lt_Either_there_is_alrea [list folder_name $folder_name directory_url "index?folder_id=$parent_id"]] - - ad_script_abort + ns_log error $errmsg + ad_return_complaint 1 "[_ acs-subsite.lt_Heres_what_the_databa] $errmsg" + ad_script_abort } if { [parameter::get -parameter CategoriesP -package_id $package_id -default 0] } { @@ -113,9 +129,8 @@ -element_name category_id] } - ad_returnredirect "?folder_id=$folder_id" - ad_script_abort } -edit_data { + db_transaction { fs::rename_folder -folder_id $folder_id -name $folder_name fs::set_folder_description -folder_id $folder_id -description $description @@ -125,9 +140,17 @@ -container_object_id $package_id \ -element_name category_id] } + +} -after_submit { ad_returnredirect "?folder_id=$folder_id" ad_script_abort } ad_return_template + +# Local variables: +# mode: tcl +# tcl-indent-level: 4 +# indent-tabs-mode: nil +# End: