Index: openacs-4/packages/file-storage/www/move-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/www/move-postgresql.xql,v diff -u -N -r1.9.4.1 -r1.9.4.2 --- openacs-4/packages/file-storage/www/move-postgresql.xql 3 Jul 2016 18:22:09 -0000 1.9.4.1 +++ openacs-4/packages/file-storage/www/move-postgresql.xql 17 Jul 2017 17:49:19 -0000 1.9.4.2 @@ -85,5 +85,13 @@ ) - + + + + select count(*) from cr_items + where name=:name + and parent_id=:folder_id + + + Index: openacs-4/packages/file-storage/www/move.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/www/move.tcl,v diff -u -N -r1.10.2.3 -r1.10.2.4 --- openacs-4/packages/file-storage/www/move.tcl 24 May 2017 16:09:24 -0000 1.10.2.3 +++ openacs-4/packages/file-storage/www/move.tcl 17 Jul 2017 17:49:19 -0000 1.10.2.4 @@ -54,49 +54,54 @@ if {[info exists folder_id]} { - permission::require_permission \ - -party_id $user_id \ - -object_id $folder_id \ - -privilege "write" + permission::require_permission \ + -party_id $user_id \ + -object_id $folder_id \ + -privilege "write" - # check for WRTIE permission on each object to be moved - # DaveB: I think it should be DELETE instead of WRITE - # but the existing file-move page checks for WRITE - set error_items {} - template::multirow foreach move_objects { - if {$copy_and_delete_p} { - # copy and delete file to move it - db_transaction { - if {$type ne "folder" } { - set file_rev_id [db_exec_plsql copy_item {}] - set file_id [content::revision::item_id -revision_id $file_rev_id] - callback fs::file_revision_new -package_id $package_id -file_id $file_id -parent_id $folder_id - fs::delete_file -item_id $object_id -parent_id $parent_id - } else { - db_exec_plsql copy_folder {} - fs::delete_folder -folder_id $object_id -parent_id $parent_id - } - } on_error { - lappend error_items $name - } - } else { - # execute move command - db_transaction { - db_exec_plsql move_item {} - } on_error { - lappend error_items $name - } - } - } + # check for WRTIE permission on each object to be moved + # DaveB: I think it should be DELETE instead of WRITE + # but the existing file-move page checks for WRITE + set error_items {} + template::multirow foreach move_objects { + if {[db_string item_exists_already_in_target_folder {}]} { + ns_log Notice "item $name exists already in folder $folder_id" + lappend error_items $name + } else { + if {$copy_and_delete_p} { + # copy and delete file to move it + db_transaction { + if {$type ne "folder" } { + set file_rev_id [db_exec_plsql copy_item {}] + set file_id [content::revision::item_id -revision_id $file_rev_id] + callback fs::file_revision_new -package_id $package_id -file_id $file_id -parent_id $folder_id + fs::delete_file -item_id $object_id -parent_id $parent_id + } else { + db_exec_plsql copy_folder {} + fs::delete_folder -folder_id $object_id -parent_id $parent_id + } + } on_error { + lappend error_items $name + } + } else { + # execute move command + db_transaction { + db_exec_plsql move_item {} + } on_error { + lappend error_items $name + } + } + } + } - if {[llength $error_items]} { - set message "[_ file-storage.There_was_a_problem_moving_the_following_items]: [join $error_items ", "]" - } else { - set message [_ file-storage.Selected_items_have_been_moved] - } - ad_returnredirect -message $message $return_url - ad_script_abort + if {[llength $error_items]} { + set message "[_ file-storage.There_was_a_problem_moving_the_following_items]: [join $error_items ", "]" + } else { + set message [_ file-storage.Selected_items_have_been_moved] + } + ad_returnredirect -message $message $return_url + ad_script_abort } else {