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 ""
}