Index: openacs-4/packages/oacs-dav/tcl/oacs-dav-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/oacs-dav/tcl/oacs-dav-procs.tcl,v diff -u -r1.4.2.21 -r1.4.2.22 --- openacs-4/packages/oacs-dav/tcl/oacs-dav-procs.tcl 16 Nov 2004 09:43:28 -0000 1.4.2.21 +++ openacs-4/packages/oacs-dav/tcl/oacs-dav-procs.tcl 30 Nov 2004 19:46:52 -0000 1.4.2.22 @@ -30,7 +30,7 @@ } { set encoded_string [ns_urlencode $string] set encoded_string [string map -nocase \ - {%2d - %5f _ %24 $ %2e . %21 ! %28 ( %29 ) %27 ' %2c ,} $encoded_string] + {+ %20 %2d - %5f _ %24 $ %2e . %21 ! %28 ( %29 ) %27 ' %2c ,} $encoded_string] return $encoded_string } @@ -164,7 +164,7 @@ -privilege "create"] ] } propfind { - if {[empty_string_p $user_id]} { + if {!$user_id} { ns_returnunauthorized } else { set authorized_p [permission::permission_p \ @@ -295,7 +295,6 @@ } { ad_conn -reset set uri [ns_urldecode [ns_conn url]] - ns_log debug "\nconn_setp uri \"$uri\" " set dav_url_regexp "^[oacs_dav::uri_prefix]" regsub $dav_url_regexp $uri {} uri @@ -315,7 +314,7 @@ set destination [ns_urldecode [ns_set iget [ns_conn headers] Destination]] - regsub {(http|https)://[^/]+/} $destination {/} dest + regsub {https?://[^/]+/} $destination {/} dest regsub $dav_url_regexp $dest {} dest @@ -396,7 +395,11 @@ # ask package what content type to use switch -- $method { mkcol { - set content_type "content_folder" + if {![acs_sc_binding_exists_p dav_mkcol_type $package_key]} { + set content_type "content_folder" + } else { + set content_type [acs_sc_call dav_mkcol_type get_type "" $package_key] + } } put { if {![acs_sc_binding_exists_p dav_put_type $package_key]} { @@ -573,8 +576,8 @@ } # according to the spec copy with overwrite means # delete then copy - set blocked_p [oacs_dav::children_have_permission_p -item_id $copy_folder_id -user_id $user_id -privilege "delete"] - if {$blocked_p} { + set children_permission_p [oacs_dav::children_have_permission_p -item_id $copy_folder_id -user_id $user_id -privilege "delete"] + if {!$children_permission_p} { return [list 409] } if {![string equal "unlocked" [tdav::check_lock $target_uri]]} { @@ -586,6 +589,7 @@ } else { set response [list 201] } + set err_p 0 db_transaction { db_exec_plsql copy_folder "" # we need to do this because in oracle content_folder__copy @@ -594,6 +598,10 @@ # update all child items revisions to live revision db_dml update_child_revisions "" } on_error { + set err_p 1 + } + + if { $err_p } { return [list 500] } @@ -645,8 +653,8 @@ return [list 423] } # TODO check if we have permission over everything inside - set blocked_p [oacs_dav::children_have_permission_p -item_id $move_folder_id -user_id $user_id -privilege "delete"] - if {$blocked_p} { + set children_permission_p [oacs_dav::children_have_permission_p -item_id $move_folder_id -user_id $user_id -privilege "delete"] + if {!$children_permission_p} { return [list 409] } db_exec_plsql delete_for_move "" @@ -662,8 +670,8 @@ return [list 403] } + set err_p 0 db_transaction { - if {![string equal $cur_parent_folder_id $new_parent_folder_id]} { ns_log debug "\n@@DAV@@ move folder $move_folder_id" db_exec_plsql move_folder "" @@ -677,8 +685,13 @@ } } on_error { + set err_p 1 + } + + if { $err_p } { return [list 500] } + tdav::copy_props $uri $target_uri tdav::delete_props $uri tdav::remove_lock $uri @@ -697,8 +710,8 @@ if {![string equal "unlocked" [tdav::check_lock $uri]]} { return [list 423] } - set blocked_p [oacs_dav::children_have_permission_p -item_id $item_id -user_id $user_id -privilege "delete"] - if {$blocked_p} { + set children_permission_p [oacs_dav::children_have_permission_p -item_id $item_id -user_id $user_id -privilege "delete"] + if {!$children_permission_p} { return [list 403] } if {[catch {db_exec_plsql delete_folder ""} errmsg]} { @@ -1080,12 +1093,18 @@ set response [list 201] } + set err_p 0 db_transaction { set item_id [db_exec_plsql copy_item ""] db_dml set_live_revision "" } on_error { + set err_p 1 + } + + if { $err_p } { return [list 500] } + tdav::copy_props $uri $target_uri return $response } @@ -1137,6 +1156,7 @@ set response [list 201] } + set err_p 0 db_transaction { if {![string equal $cur_parent_folder_id $new_parent_folder_id]} { db_exec_plsql move_item "" @@ -1148,8 +1168,13 @@ db_dml update_title "" } } on_error { + set err_p 1 + } + + if { $err_p } { return [list 500] } + tdav::copy_props $uri $target_uri tdav::delete_props $uri tdav::remove_lock $uri