Index: openacs-4/packages/dotlrn-catalog/lib/tree-chunk.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-catalog/lib/tree-chunk.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/dotlrn-catalog/lib/tree-chunk.tcl 19 Feb 2005 03:43:11 -0000 1.3 +++ openacs-4/packages/dotlrn-catalog/lib/tree-chunk.tcl 21 Feb 2005 19:22:12 -0000 1.4 @@ -7,25 +7,68 @@ } { category_f:optional uncat_f:optional + { level "" } } +if { [info exist category_f] } { + set var_list [split $category_f "&"] + set category_v [lindex $var_list 0] + set level [lindex [split [lindex $var_list 1] "="] 1] +} else { + set category_v "" +} + + # Get all tree categories set tree_list [category_tree::get_tree -all $tree_id] +set tree_length [llength $tree_list] # Create a list of values for the list filter set tree [list] + foreach element $tree_list { set ident [lindex $element 3] set spacer "" for { set i 1 } { $i < $ident } { incr i } { append spacer ". . " } - lappend tree [list "${spacer}[lindex "$element" 1]" [lindex $element 0]] + lappend tree [list "${spacer}[lindex "$element" 1]" "[lindex $element 0]&level=[lindex $element 3]" ] } -# Get all objects_ids and category_id -set cat_obj_list [dotlrn_catalog::get_categories_from_tree -tree_id $tree_id] +# Get all sub categories +set map_tree "(" +if { ![string equal $level ""] } { + set j 0 + set i 0 + while { $i < $tree_length } { + set element [lindex $tree_list $i] + if {[string equal $category_v [lindex $element 0]] } { + append map_tree "[lindex $element 0]," + set pos $i + set i $tree_length + } + incr i + } + set j 0 + set i [expr $pos + 1] + while { $i < $tree_length } { + set element [lindex $tree_list $i] + if { $level < [lindex $element 3] } { + append map_tree "[lindex $element 0]," + incr i + } else { + set i $tree_length + } + } + append map_tree "0)" +} +if { [string equal $category_v ""] } { + set where_query "dc.course_id in ( select object_id from category_object_map_tree where tree_id = :tree_id )" +} else { + set where_query "dc.course_id in ( select object_id from category_object_map_tree where tree_id = :tree_id and category_id in $map_tree )" +} + template::list::create \ -name course_list \ -multirow course_list \ @@ -34,7 +77,7 @@ category_f { label "[_ dotlrn-catalog.categories]" values { $tree } - where_clause { dc.course_id in ( select object_id from category_object_map where category_id = :category_f )} + where_clause { $where_query } } uncat_f { label "[_ dotlrn-catalog.uncat]"