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.82 -r1.83 --- openacs-4/packages/xowiki/tcl/form-field-procs.tcl 27 Jun 2008 08:50:46 -0000 1.82 +++ openacs-4/packages/xowiki/tcl/form-field-procs.tcl 4 Jul 2008 10:57:45 -0000 1.83 @@ -179,8 +179,9 @@ label=* {my label [lindex [split $s =] 1]} help_text=* {my help_text [lindex [split $s =] 1]} *=* { - set l [split $s =] - foreach {attribute value} $l break + set p [string first = $s] + set attribute [string range $s 0 $p-1] + set value [string range $s $p+1 end] set definition_class [lindex [my procsearch $attribute] 0] if {[string match "::xotcl::*" $definition_class] || $definition_class eq ""} { error [_ xowiki.error-form_constraint-unknown_attribute [list name [my name] entry $attribute]] @@ -196,9 +197,9 @@ if {[string match {\[*\]} $value]} { set value [subst $value] } - my [lindex $l 0] $value + my $attribute $value } errMsg]} { - error "Error during setting attribute '[lindex $l 0]' to value '[lindex $l 1]': $errMsg" + error "Error during setting attribute '$attribute' to value '$value': $errMsg" } } default { @@ -966,28 +967,29 @@ ########################################################### Class form_page -superclass select -parameter { {form} + {where} {as_box false} } form_page instproc config_from_form {form_name} { - my instvar form_obj prefix + my instvar form_obj prefix where set form_obj [[my object] resolve_included_page_name $form_name] if {$form_obj eq ""} {error "Cannot lookup Form '$form_name'"} set prefix "" regexp {^(//[^/]+/)} $form_name _ prefix - array set wc {tcl true h ""} + array set wc {tcl true h "" vars "" sql ""} if {[info exists where]} { array set wc [::xowiki::FormPage filter_expression $where &&] - set init_vars [concat $init_vars $wc(vars)] + #my msg "where '$where' => wc=[array get wc]" } set options [list] set items [::xowiki::FormPage get_children \ -base_item_id [$form_obj item_id] \ -form_fields [list] \ -publish_status ready \ -always_queried_attributes [list _name _title _last_modified _creation_user] \ - -h_where $wc(h) \ + -h_where [array get wc] \ -package_id [$form_obj package_id]] foreach i [$items children] {lappend options [list [$i title] [$i name]]} my options $options 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.41 -r1.42 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 27 Jun 2008 01:23:27 -0000 1.41 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 4 Jul 2008 10:57:45 -0000 1.42 @@ -2740,12 +2740,12 @@ # Compute filter clauses # set init_vars [list] - array set uc {tcl false h "" vars ""} + array set uc {tcl false h "" vars "" sql ""} if {[info exists unless]} { array set uc [::xowiki::FormPage filter_expression $unless ||] set init_vars [concat $init_vars $uc(vars)] } - array set wc {tcl true h "" vars ""} + array set wc {tcl true h "" vars "" sql ""} if {[info exists where]} { array set wc [::xowiki::FormPage filter_expression $where &&] set init_vars [concat $init_vars $wc(vars)] @@ -2756,11 +2756,12 @@ # # get an ordered composite of the base set (currently including extra_where clause) # - my log "exists category_id [info exists category_id]" + #my log "exists category_id [info exists category_id]" set extra_where_clause "" if {[info exists category_id]} { foreach {cnames extra_where_clause} [my category_clause $category_id bt.item_id] break } + set items [::xowiki::FormPage get_children \ -base_item_id $form_item_id \ -form_fields $form_fields \ 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.254 -r1.255 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 27 Jun 2008 08:50:46 -0000 1.254 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 4 Jul 2008 10:57:45 -0000 1.255 @@ -1840,6 +1840,13 @@ if {$h_where ne "" && $use_hstore} { set filter_clause " and '$wc(h)' <@ bt.hkey" } + #my msg "exists sql=[info exists wc(sql)]" + if {$wc(sql) ne ""} { + foreach filter $wc(sql) { + append filter_clause "and $filter" + } + } + #my msg filter_clause=$filter_clause set orderby ""; set page_size 20; set page_number "" set sql [::xowiki::FormPage instance_select_query \ Index: openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl,v diff -u -r1.149 -r1.150 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 30 Jun 2008 19:11:28 -0000 1.149 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 4 Jul 2008 10:57:45 -0000 1.150 @@ -481,27 +481,39 @@ input_expr logical_op } { + array set tcl_op {= eq} + array set sql_op {= =} #my msg unless=$unless #example for unless: wf_current_state = closed|accepted || x = 1 set tcl_clause [list] set h_clause [list] set vars [list] + set sql_clause [list] foreach clause [split [string map [list $logical_op \x00] $input_expr] \x00] { if {[regexp {^(.+)\s*([=])\s*(.*)$} $clause _ lhs op rhs_expr]} { set lhs [string trim $lhs] - set hleft [my h_double_quote $lhs] - set tleft "\$__ia($lhs)" - lappend vars $lhs "" - set op eq - foreach p [split $rhs_expr |] { - lappend tcl_clause "$tleft $op {$p}" - lappend h_clause "$hleft=>[my h_double_quote $p]" + if {[string range $lhs 0 0] eq "_"} { + set sql_var [string range $lhs 1 end] + foreach p [split $rhs_expr |] { + lappend sql_clause "$sql_var $sql_op($op) '$p'" + } + } else { + set hleft [my h_double_quote $lhs] + set tleft "\$__ia($lhs)" + lappend vars $lhs "" + set op eq + foreach p [split $rhs_expr |] { + lappend tcl_clause "$tleft $tcl_op($op) {$p}" + lappend h_clause "$hleft=>[my h_double_quote $p]" + } } } else { my msg "ignoring $clause" } } - return [list tcl [join $tcl_clause $logical_op] h [join $h_clause ,] vars $vars] + if {[llength $tcl_clause] == 0} {set tcl_clause [list true]} + return [list tcl [join $tcl_clause $logical_op] h [join $h_clause ,] \ + vars $vars sql $sql_clause] #my msg $expression }