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.67 -r1.68 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 5 Jan 2007 12:11:02 -0000 1.67 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 5 Jan 2007 21:22:20 -0000 1.68 @@ -420,19 +420,35 @@ set msg "processing objects: $objects

" set added 0 set replaced 0 + set updated 0 + array set excluded_var { + folder_id 1 package_id 1 absolute_links 1 lang_links 1 + publish_status 1 item_id 1 revision_id 1 last_modified 1 parent_id 1 + } foreach o $objects { $o set parent_id $folder_id $o set package_id $package_id $o set creation_user $user_id # page instances have references to page templates, add these first if {[$o istype ::xowiki::PageInstance]} continue - set item [CrItem lookup -name [$o set name] -parent_id $folder_id] - if {$item != 0 && $replace} { ;# we delete the original - ::Generic::CrItem delete -item_id $item - set item 0 - incr replaced + set item_id [CrItem lookup -name [$o set name] -parent_id $folder_id] + if {$item_id != 0} { + if {$replace} { ;# we delete the original + ::Generic::CrItem delete -item_id $item_id + set item_id 0 + incr replaced + } else { + ::Generic::CrItem instantiate -item_id $item_id + foreach var [$o info vars] { + if {![info exists excluded_var($var)]} { + $item_id set $var [$o set $var] + } + } + $item_id save + incr updated + } } - if {$item == 0} { + if {$item_id == 0} { $o save_new incr added } @@ -441,13 +457,24 @@ foreach o $objects { if {[$o istype ::xowiki::PageInstance]} { db_transaction { - set item [CrItem lookup -name [$o set name] -parent_id $folder_id] - if {$item != 0 && $replace} { ;# we delete the original - ::Generic::CrItem delete -item_id $item - set item 0 - incr replaced - } - if {$item == 0} { ;# the item does not exist -> update reference and save + set item_id [CrItem lookup -name [$o set name] -parent_id $folder_id] + if {$item_id != 0} { + if {$replace} { ;# we delete the original + ::Generic::CrItem delete -item_id $item_id + set item_id 0 + incr replaced + } else { + ::Generic::CrItem instantiate -item_id $item_id + foreach var [$o info vars] { + if {![info exists excluded_var($var)]} { + $item_id set $var [$o set $var] + } + } + $item_id save + incr updated + } + } + if {$item_id == 0} { ;# the item does not exist -> update reference and save set old_template_id [$o set page_template] set template [CrItem lookup \ -name [$old_template_id set name] \ @@ -460,7 +487,7 @@ } $o destroy } - append msg "$added objects inserted, $replaced objects replaced

" + append msg "$added objects newly inserted, $updated object updated, $replaced objects replaced

" } # @@ -583,9 +610,9 @@ if {[catch {set page_name [lindex $arg 0]} errMsg]} { #my log "--S arg='$arg'" # there is something syntactically wrong - return "$Error in '{{$arg}}' in [my set name]
\n\ + return "

$Error in '{{$arg}}' in [my set name]
\n\ Syntax: <name of portlet> {<argument list>}
\n - Invalid argument list: '$arg'; must be attribute value pairs (attribues with dashes)" + Invalid argument list: '$arg'; must be attribute value pairs (attribues with dashes)
" } # the include is either a portlet class, or a wiki page @@ -618,7 +645,7 @@ } return [$page render] } else { - return "

Error: includelet '$page_name' unknown

\n" + return "

Error: includelet '$page_name' unknown

\n" } } @@ -627,26 +654,26 @@ if {[regexp {^adp (.*)$} $arg _ adp]} { if {[catch {lindex $adp 0} errMsg]} { # there is something syntactically wrong - return "${ch}Error in '{{$arg}}' in [my set name]
\n\ + return "${ch}
Error in '{{$arg}}' in [my set name]
\n\ Syntax: adp <name of adp-file> {<argument list>}
\n - Invalid argument list: '$adp'; must be attribute value pairs (even number of elements)" + Invalid argument list: '$adp'; must be attribute value pairs (even number of elements)
" } set adp [string map {  " "} $adp] set adp_fn [lindex $adp 0] if {![string match "/*" $adp_fn]} {set adp_fn /packages/xowiki/www/$adp_fn} set adp_args [lindex $adp 1] if {[llength $adp_args] % 2 == 1} { - return "${ch}Error in '{{$arg}}'
\n\ + return "${ch}
Error in '{{$arg}}'
\n\ Syntax: adp <name of adp-file> {<argument list>}
\n - Invalid argument list: '$adp_args'; must be attribute value pairs (even number of elements)" + Invalid argument list: '$adp_args'; must be attribute value pairs (even number of elements)
" } lappend adp_args __including_page [self] set including_page_level [template::adp_level] if {[catch {set page [template::adp_include $adp_fn $adp_args]} errorMsg]} { # in case of error, reset the adp_level to the previous value set ::template::parse_level $including_page_level - return "${ch}Error during evaluation of '{{$arg}}' in [my set name]
\n\ - adp_include returned error message: $errorMsg
\n" + return "${ch}
Error during evaluation of '{{$arg}}' in [my set name]
\n\ + adp_include returned error message: $errorMsg
\n" } return $ch$page @@ -716,7 +743,7 @@ -folder_id $parent_id -package_id $package_id if {[catch {eval [self]::link configure $options} error]} { - return "${ch}Error during processing of options: $error
" + return "${ch}
Error during processing of options: $error
" } else { return $ch[[self]::link render] } @@ -786,7 +813,7 @@ if {[catch {set template_value [template::adp_eval template_code]} errmsg]} { set ::template::parse_level $my_parse_level #my log "--pl after adp_eval '[template::adp_level]' mpl=$my_parse_level" - return "Error in Page $name: $errmsg
$content

Possible values are$__template_variables__" + return "

Error in Page $name: $errmsg
$content

Possible values are$__template_variables__" } return $template_value }