Index: openacs-4/packages/xowiki/xowiki.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/xowiki.info,v diff -u -r1.122 -r1.123 --- openacs-4/packages/xowiki/xowiki.info 6 Nov 2009 12:26:18 -0000 1.122 +++ openacs-4/packages/xowiki/xowiki.info 26 Nov 2009 11:16:44 -0000 1.123 @@ -10,11 +10,11 @@ t xowiki - + Gustaf Neumann A more generic xotcl-based wikis example with object types and subtypes based on the content repository (with category support) - 2009-11-06 + 2009-11-26 Gustaf Neumann, WU Wien <pre> XoWiki is a Wiki implementation for OpenACS in XOTcl. Instead of @@ -56,12 +56,12 @@ BSD-Style 0 - + - + Index: openacs-4/packages/xowiki/tcl/package-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/package-procs.tcl,v diff -u -r1.187 -r1.188 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 24 Nov 2009 21:42:00 -0000 1.187 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 26 Nov 2009 11:16:44 -0000 1.188 @@ -586,7 +586,7 @@ return "" } - Package instproc make_form_link {-form -parent_id -name -nls_language} { + Package instproc make_form_link {-form -parent_id -name -nls_language -return_url} { my instvar id # use the same instantiate_forms as everywhere; TODO: will go to a different namespace set form_id [::xowiki::Weblog instantiate_forms -forms $form -package_id $id] @@ -1388,9 +1388,14 @@ append msg [$importer report] } - Package instproc flush_references {-item_id:integer,required -name:required -parent_id} { - my instvar folder_id id - if {![info exists parent_id]} {set parent_id $folder_id} + Package instproc flush_references {-item_id:integer,required -name -parent_id} { + my instvar id folder_id + if {![info exists parent_id]} { + set parent_id [::xo::db::CrClass get_parent_id -item_id $item_id] + } + if {![info exists name]} { + set name [::xo::db::CrClass get_name -item_id $item_id] + } if {$name eq "::$folder_id"} { #my log "--D deleting folder object ::$folder_id" ::xo::clusterwide ns_cache flush xotcl_object_cache ::$folder_id @@ -1414,7 +1419,7 @@ ::xo::db::sql::content_revision del -revision_id $revision_id } - Package instproc delete {-item_id -name} { + Package instproc delete {-item_id -name -parent_id} { # # This delete method does not require an instanantiated object, # while the class-specific delete methods in xowiki-procs need these. @@ -1423,7 +1428,7 @@ # While the class specific methods are used from the # application pages, the package_level method is used from the admin pages. # - my instvar folder_id id + my instvar id # # if no item_id given, take it from the query parameter # @@ -1437,12 +1442,19 @@ if {![info exists name]} { set name [my query_parameter name] } + if {$item_id eq "" && $name ne ""} { - if {[set item_id [::xo::db::CrClass lookup -name $name -parent_id $folder_id]] == 0} { + if {![info exists parent_id]} {set parent_id [my folder_id]} + if {[set item_id [::xo::db::CrClass lookup -name $name -parent_id $parent_id]] == 0} { ns_log notice "lookup of '$name' failed" set item_id "" } + } elseif {$item_id ne ""} { + if {![info exists parent_id]} { + set parent_id [::xo::db::CrClass get_parent_id -item_id $item_id] + } } + if {$item_id ne ""} { #my log "--D trying to delete $item_id $name" set object_type [::xo::db::CrClass get_object_type -item_id $item_id] @@ -1468,8 +1480,11 @@ ::xo::db::sql::content_item del -item_id $comment_id } } + foreach child_item_id [::xo::db::CrClass get_child_item_ids -item_id $item_id] { + my flush_references -item_id $child_item_id + } $object_type delete -item_id $item_id - my flush_references -item_id $item_id -name $name + my flush_references -item_id $item_id -name $name -parent_id $parent_id my flush_page_fragment_cache -scope agg } else { my log "--D nothing to delete!" Index: openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl,v diff -u -r1.118 -r1.119 --- openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl 27 Oct 2009 11:30:28 -0000 1.118 +++ openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl 26 Nov 2009 11:16:44 -0000 1.119 @@ -251,7 +251,6 @@ if {[$data form_parameter __new_p 0] || $old_name ne $name } { - #my msg "exists in db [::xo::db::CrClass lookup -name $name -parent_id [$data parent_id]]" return [expr {[::xo::db::CrClass lookup -name $name -parent_id [$data parent_id]] == 0}] } return 1 Index: openacs-4/packages/xowiki/tcl/xowiki-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-procs.tcl,v diff -u -r1.378 -r1.379 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 25 Nov 2009 12:28:21 -0000 1.378 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 26 Nov 2009 11:16:44 -0000 1.379 @@ -1303,8 +1303,9 @@ Page instproc item_id_ref { item_id } { - db_1row "get_name" "select name,parent_id from cr_items where item_id = '$item_id'" + set name [::xo::db::Class get_name -id $item_id] set type [::xo::db::Class get_object_type -id $item_id] + set parent_id [::xo::db::Class get_parent_id -id $item_id] #my log "lookup returned name=$name (type $type)" if {$type eq "content_folder"} { return [list link_type "folder" prefix "" stripped_name $name parent_id $parent_id] @@ -1366,7 +1367,7 @@ set item_id $parent_id set parent_id $(parent_id) } elseif {$element eq ".." || $element eq "..\0"} { - db_1row "get_parent" "select parent_id as id from cr_items where item_id = :parent_id" + set id [::xo::db::CrClass get_parent_id -item_id $parent_id] if {$id > 0} { # refuse to traverse past root folder set parent_id $id