Index: openacs-4/packages/xowiki/tcl/form-field-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/form-field-procs.tcl,v diff -u -r1.112 -r1.113 --- openacs-4/packages/xowiki/tcl/form-field-procs.tcl 10 Oct 2008 16:00:13 -0000 1.112 +++ openacs-4/packages/xowiki/tcl/form-field-procs.tcl 10 Oct 2008 16:53:47 -0000 1.113 @@ -149,12 +149,7 @@ } } - FormField instproc interprete_condition {cond} { - set package_id [[my object] package_id] - #set policy [$package_id set policy] - #set success [$policy check_privilege \ - # -user_id [::xo::cc user_id] \ - # -package_id $package_id $cond [self] view] + FormField proc interprete_condition {-package_id cond} { if {[::xo::cc info methods role=$cond] ne ""} { if {$cond eq "creator"} { set success [::xo::cc role=$cond \ @@ -172,6 +167,19 @@ return $success } + FormField set cond_regexp {^([^=?]+)[?]([^:]*)[:](.*)$} + + FormField proc get_single_spec {-package_id string} { + if {[regexp [my set cond_regexp] $string _ condition true_spec false_spec]} { + if {[my interprete_condition -package_id $package_id $condition]} { + return [my get_single_spec $true_spec] + } else { + return [my get_single_spec $false_spec] + } + } + return $string + } + FormField instproc remove_omit {} { set m ::xowiki::formfield::omit if {[my ismixin $m]} {my mixin delete $m} @@ -211,15 +219,9 @@ FormField instproc interprete_single_spec {s} { if {$s eq ""} return - if {[regexp {^([^=?]+)[?]([^:]*)[:](.*)$} $s _ condition true_spec false_spec]} { - #my msg "--c=$condition,true_spec=$true_spec,false_spec=$false_spec" - if {[my interprete_condition $condition]} { - my interprete_single_spec $true_spec - } else { - my interprete_single_spec $false_spec - } - return - } + set package_id [[my object] package_id] + set s [::xowiki::formfield::FormField get_single_spec -package_id $package_id $s] + switch -glob -- $s { optional {my set required false} required {my set required true; my remove_omit} @@ -906,7 +908,7 @@ foreach p [list rows cols style] {if {[my exists $p]} {my set html($p) [my $p]}} if {![my istype ::xowiki::formfield::richtext] && [my exists editor]} { # downgrading - my msg "downgrading [my info class]" + #my msg "downgrading [my info class]" foreach m [my info mixin] {if {[$m exists editor_mixin]} {my mixin delete $m}} foreach v {editor options} {if {[my exists $v]} {my unset $v}} } Index: openacs-4/packages/xowiki/tcl/includelet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/includelet-procs.tcl,v diff -u -r1.64 -r1.65 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 10 Oct 2008 07:39:35 -0000 1.64 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 10 Oct 2008 16:53:47 -0000 1.65 @@ -2793,15 +2793,23 @@ set fn [::xowiki::PageInstance get_short_spec_from_form_constraints \ -name @table \ -form_constraints $form_constraints] - set field_names [split $fn ,] + set raw_field_names [split $fn ,] } elseif {[string match "*,*" $field_names] } { - set field_names [split $field_names ,] + set raw_field_names [split $field_names ,] } - if {$field_names eq ""} { - set field_names {_name _last_modified _creation_user} + if {$raw_field_names eq ""} { + set raw_field_names {_name _last_modified _creation_user} } + # finally, evaluate conditions if included + set field_names [list] + foreach f $raw_field_names { + set _ [string trim [::xowiki::formfield::FormField get_single_spec \ + -package_id $package_id $f]] + if {$_ ne ""} {lappend field_names $_} + } + set form_fields [::xowiki::FormPage get_table_form_fields \ -base_item $form_item \ -field_names $field_names \