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 -N -r1.68 -r1.69 --- openacs-4/packages/xowiki/tcl/form-field-procs.tcl 16 Apr 2008 20:23:28 -0000 1.68 +++ openacs-4/packages/xowiki/tcl/form-field-procs.tcl 18 Apr 2008 10:14:37 -0000 1.69 @@ -393,6 +393,28 @@ return [string map [list & "&" < "<" > ">" \" """ ' "'" @ "@"] $v] } + FormField instproc config_from_form {form_name} { + set package_id [[my object] package_id] + set form_item_id [::xo::db::CrClass lookup -name $form_name -parent_id [$package_id folder_id]] + if {$form_item_id == 0} {error "Cannot lookup page $form"} + + array set wc {tcl true h ""} + if {[info exists where]} { + array set wc [::xowiki::FormPage filter_expression $where &&] + set init_vars [concat $init_vars $wc(vars)] + } + + set items [::xowiki::FormPage get_children \ + -base_item_id $form_item_id \ + -form_fields [list] \ + -publish_status ready \ + -always_queried_attributes [list _name _title _last_modified _creation_user] \ + -h_where $wc(h) \ + -folder_id [$package_id folder_id]] + foreach i [$items children] {lappend options [list [$i title] [$i name]]} + my options $options + } + FormField instproc config_from_category_tree {tree_name} { # Get the options of a select or rado from the specified # category tree. @@ -883,10 +905,12 @@ {options} {multiple "false"} {category_tree} + {form} } FormField::select instproc initialize {} { my set widget_type text(select) if {[my exists category_tree]} {my config_from_category_tree [my category_tree]} + if {[my exists form]} {my config_from_form [my form]} if {![my exists options]} {my options [list]} } FormField::select instproc render_input {} { @@ -910,6 +934,40 @@ }} } + ########################################################### + # + # ::xowiki::FormField::form_page + # + ########################################################### + Class FormField::form_page -superclass FormField::select -parameter { + {form} + {as_box false} + } + + FormField::form_page instproc pretty_value {v} { + set package_id [[my object] package_id] + if {[my multiple]} { + foreach o [my set options] { + foreach {label value} $o break + set href [$package_id pretty_link $value] + set labels($value) "$label" + } + set values [list] + foreach i $v {lappend values $labels($i)} + return [join $values {, }] + } else { + foreach o [my set options] { + foreach {label value} $o break + if {$value eq $v} { + if {[my as_box]} { + return [[my object] include [list $value -decoration rightbox]] + } + set href [$package_id pretty_link $value] + return "$label" + } + } + } + } ########################################################### # @@ -1047,6 +1105,7 @@ border border-width position top botton left right } FormField::image_url instproc entry_name {value} { + set value [string map [list %2e .] $value] if {![regexp -nocase {/([^/]+)[.](gif|jpg|jpeg|png)} $value _ name ext]} { return "" }