Index: openacs-4/packages/oacs-dav/oacs-dav.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/oacs-dav/oacs-dav.info,v
diff -u -r1.2.2.10 -r1.2.2.11
--- openacs-4/packages/oacs-dav/oacs-dav.info 28 Oct 2004 17:40:44 -0000 1.2.2.10
+++ openacs-4/packages/oacs-dav/oacs-dav.info 30 Nov 2004 19:46:51 -0000 1.2.2.11
@@ -8,18 +8,19 @@
t
webdav-support
-
+
Dave Bauer
Provides services to enable webDAV access to content repository items.
2004-09-27
OpenACS
An interface to the tDAV webDAV package. oacs-dav provides services to offer webDAV access to content repository data.
-
+
+
Index: openacs-4/packages/oacs-dav/tcl/oacs-dav-install-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/oacs-dav/tcl/oacs-dav-install-procs.tcl,v
diff -u -r1.1.1.1.2.1 -r1.1.1.1.2.2
--- openacs-4/packages/oacs-dav/tcl/oacs-dav-install-procs.tcl 31 Mar 2004 02:33:52 -0000 1.1.1.1.2.1
+++ openacs-4/packages/oacs-dav/tcl/oacs-dav-install-procs.tcl 30 Nov 2004 19:46:52 -0000 1.1.1.1.2.2
@@ -45,6 +45,7 @@
} {
oacs_dav::install::create_dav_sc
oacs_dav::install::create_dav_put_type_sc
+ oacs_dav::install::create_dav_mkcol_type_sc
}
ad_proc -private oacs_dav::install::create_dav_sc {
@@ -145,12 +146,33 @@
}
+ad_proc -private oacs_dav::install::create_dav_mkcol_type_sc {
+} {
+ create dav_mkcol_type service contract
+} {
+ set contract_name "dav_mkcol_type"
+ set spec {
+ description "returns content type to use for MKCOL operation"
+ operations {
+ get_type {
+ description "DAV MKCOL Content Type"
+ output { content_type:string }
+ }
+ }
+ }
+
+ acs_sc::contract::new_from_spec \
+ -spec [concat [list name $contract_name] $spec ]
+
+}
+
ad_proc -private oacs_dav::install::delete_service_contracts {
} {
remove service contracts on uninstall
} {
acs_sc::contract::delete -name dav
acs_sc::contract::delete -name dav_put_type
+ acs_sc::contract::delete -name dav_mkcol_type
}
ad_proc -private oacs_dav::install::register_implementation {
@@ -210,4 +232,20 @@
} {
acs_sc::impl::delete -contract_name dav -impl_name content_folder
acs_sc::impl::delete -contract_name dav -impl_name content_revision
+}
+
+ad_proc -private oacs_dav::install::upgrade {
+ -from_version_name
+ -to_version_name
+} {
+ Install new DAV service contracts
+} {
+ apm_upgrade_logic \
+ -from_version_name $from_version_name \
+ -to_version_name $to_version_name \
+ -spec {
+ 1.0b1 1.0b2 {
+ oacs_dav::install::create_dav_mkcol_type_sc
+ }
+ }
}
\ No newline at end of file
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