Index: openacs-4/packages/ecommerce/tcl/ecommerce-widgets-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ecommerce/tcl/ecommerce-widgets-procs.tcl,v diff -u -r1.21 -r1.22 --- openacs-4/packages/ecommerce/tcl/ecommerce-widgets-procs.tcl 16 Sep 2008 13:42:53 -0000 1.21 +++ openacs-4/packages/ecommerce/tcl/ecommerce-widgets-procs.tcl 1 Jan 2009 14:15:43 -0000 1.22 @@ -30,49 +30,54 @@ Category widget combining categories and subcategories } { if { $multiple_p == "f" } { - set select_tag "\n" } else { - set select_tag "\n" } set to_return "" set category_counter 0 set last_category_id "" - # Get all categories and their subcategories + # Decode the combo of category and subcategory ids + set default_list [split $default "|"] + set selected_cat_id [lindex $default_list 0] + set selected_subcat_id [lindex $default_list 1] + + + # Get the categories and the current subcategory and any default subcategories db_foreach get_combocategories " select c.category_id, s.subcategory_id, category_name, subcategory_name from ec_categories c left outer join ec_subcategories s using (category_id)" { + regsub -all -- {&} $category_name {\&} category_name + if { [info exists subcategory_name] } { + regsub -all -- {&} $subcategory_name {\&} subcategory_name + } + # There is at least one category. Open the select widget on the first pass of the foreach loop + incr category_counter + if { $category_id != $last_category_id } { + set last_category_id $category_id + + # New category. Check if the category has been selected. + if { [lsearch -exact $default "${category_id}|0"] != -1 } { + append to_return "" + } elseif { $category_id eq 55 } { + append to_return "" + } else { + append to_return "" + } - # There is at least one category. Open the select widget on the first pass of the foreach loop - if { $category_counter == 0} { - append to_return $select_tag - } - incr category_counter - if { $category_id != $last_category_id } { - set last_category_id $category_id + # Check if there are subcategories. + } elseif {![empty_string_p $subcategory_id] && ( $category_id eq $selected_cat_id || $category_id eq 55 ) } { - # Check if the category has been selected. - if { [lsearch -exact $default "$category_id|0"] != -1 || [lsearch -exact $default $category_name] != -1 } { - append to_return "" - } else { - append to_return "" - } - } - - # Check if there are subcategories. - - if {![empty_string_p $subcategory_id]} { - - # Check if the subcategory has been selected. - - if { [lsearch -exact $default "$category_id|$subcategory_id"] != -1 || [lsearch -exact $default $subcategory_name] != -1 } { - append to_return "" - } else { - append to_return "" - } - } + # Check if the subcategory has been selected. + if { [lsearch -exact $default "${category_id}|${subcategory_id}"] != -1 } { + append to_return "" + } else { + append to_return "" + } + } } if { $category_counter != 0 } { - append to_return "\n" + set to_return "${select_tag}\n${to_return}\n" } return $to_return } @@ -91,18 +96,19 @@ set to_return "" set category_counter 0 db_foreach get_ec_categories "select category_id, category_name from ec_categories order by category_name" { - if { $category_counter == 0} { - append to_return $select_tag - } - incr category_counter - if { [lsearch -exact $default $category_id] != -1 || [lsearch -exact $default $category_name] != -1 } { - append to_return "" - } else { - append to_return "" - } + regsub -all -- {&} $category_name {\&} category_name + if { $category_counter == 0} { + append to_return $select_tag + } + incr category_counter + if { [lsearch -exact $default $category_id] != -1 || [lsearch -exact $default $category_name] != -1 } { + append to_return "" + } else { + append to_return "" + } } if { $category_counter != 0 } { - append to_return "\n" + append to_return "\n" } return $to_return } @@ -119,15 +125,16 @@ } set subcategory_counter 0 db_foreach get_subcats_by_name "select subcategory_id, subcategory_name from ec_subcategories where category_id=:category_id order by subcategory_name" { - incr subcategory_counter - if { [string compare $default $subcategory_id] == 0 || [string compare $default $subcategory_name] == 0 } { - append to_return "