Index: openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl,v diff -u -r1.42 -r1.43 --- openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl 2 Oct 2003 14:56:35 -0000 1.42 +++ openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl 2 Oct 2003 19:22:17 -0000 1.43 @@ -217,6 +217,24 @@ } +ad_proc -public site_node::get_element { + {-node_id ""} + {-url ""} + {-element:required} +} { + returns an element from the array representing the site node that matches the given url + + either url or node_id is required, if both are passed url is ignored + + The array elements are: package_id, package_key, object_type, directory_p, + instance_name, pattern_p, parent_id, node_id, object_id, url. + + @see site_node::get +} { + array set node [site_node::get -node_id $node_id -url $url] + return $node($element) +} + ad_proc -public site_node::get_from_node_id { {-node_id:required} } { @@ -595,13 +613,11 @@ # New node: Complain return {} } else { - # Existing node: Check to see if it's this one - set errno [catch { array set existing_node [site_node::get_from_url -exact -url "[ad_conn package_url]$folder"] }] - - # If errno != 0 it means we didn't find an existing site node with this URL, hence the conflict must - # be with a directory - # Otherwise, if the node with the folder name is not the node we're editing, we're also in trouble - if { $errno != 0 || $existing_node(node_id) != $current_node_id } { + # Renaming an existing node: Check to see if the node is merely conflicting with itself + set parent_url [site_node::get_url -node_id $parent_node_id] + set new_node_url "$parent_url$folder" + if { ![site_node::exists_p -url $new_node_url] || \ + $current_node_id != [site_node::get_node_id -url $new_node_url] } { return {} } } Index: openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl,v diff -u -r1.12 -r1.13 --- openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl 26 Sep 2003 12:00:45 -0000 1.12 +++ openacs-4/packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl 2 Oct 2003 19:22:18 -0000 1.13 @@ -464,3 +464,42 @@ [export_vars -base $base {var1 var2}] \ "$base?$export_no_base" } + +aa_register_case site_node_verify_folder_name { + Testing site_node::veriy_folder_name +} { + set main_site_node_id [site_node::get_node_id -url /] + + # Try a few folder names which we know exist + aa_equals "Folder name 'user' is not allowed" \ + [site_node::verify_folder_name -parent_node_id $main_site_node_id -folder "user"] "" + aa_equals "Folder name 'pvt' is not allowed" \ + [site_node::verify_folder_name -parent_node_id $main_site_node_id -folder "pvt"] "" + + # Try one we believe will be allowed + set folder [ad_generate_random_string] + aa_equals "Folder name '$folder' is allowed" \ + [site_node::verify_folder_name -parent_node_id $main_site_node_id -folder $folder] $folder + + # Try the code that generates a folder name + # (We only want to try this if there doesn't happen to be a site-node named user-2) + if { ![site_node::exists_p -url "/register-2"] } { + aa_equals "Instance name 'Register'" \ + [site_node::verify_folder_name -parent_node_id $main_site_node_id -instance_name "register"] "register-2" + } + + set first_child_node_id [lindex [site_node::get_children -node_id $main_site_node_id -element node_id] 0] + set first_child_name [site_node::get_element -node_id $first_child_node_id -element name] + + aa_equals "Renaming folder '$first_child_name' ok" \ + [site_node::verify_folder_name \ + -parent_node_id $main_site_node_id \ + -folder $first_child_name \ + -current_node_id $first_child_node_id] $first_child_name + + aa_false "Creating new folder named '$first_child_name' not ok" \ + [string equal [site_node::verify_folder_name \ + -parent_node_id $main_site_node_id \ + -folder $first_child_name] $first_child_name] + +}