Index: openacs-4/packages/acs-templating/tcl/list-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-templating/tcl/list-procs.tcl,v diff -u -N -r1.49 -r1.50 --- openacs-4/packages/acs-templating/tcl/list-procs.tcl 8 Sep 2008 16:46:19 -0000 1.49 +++ openacs-4/packages/acs-templating/tcl/list-procs.tcl 8 Sep 2008 16:52:52 -0000 1.50 @@ -747,36 +747,64 @@ set __list_name $name set __output {} + set __groupby $list_properties(groupby) # Output header row set __cols [list] set __csv_cols [list] - foreach __element_name $list_properties(display_elements) { - template::list::element::get_reference -list_name $name -element_name $__element_name + set __csv_labels [list] + + foreach __element_name $list_properties(elements) { + template::list::element::get_reference -list_name $name -element_name $__element_name if {!$element_properties(hide_p)} { - lappend __csv_cols [csv_quote $__element_name] - } + lappend __csv_cols $__element_name + lappend __csv_labels [csv_quote $element_properties(label)] + } } - append __output "\"[join $__csv_cols "\",\""]\"\n" + append __output "\"[join $__csv_labels "\",\""]\"\n" + set __rowcount [template::multirow size $list_properties(multirow)] + set __rownum 0 # Output rows template::multirow foreach $list_properties(multirow) { - + set group_lastnum_p 0 + if {$__groupby ne ""} { + if {$__rownum < $__rowcount} { + # check if the next row's group column is the same as this one + set next_group [template::multirow get $list_properties(multirow) [expr {$__rownum + 1}] $__groupby] + if {[set $__groupby] ne $next_group} { + set group_lastnum_p 1 + } + } else { + set group_lastnum_p 1 + } + incr __rownum + } + + if {$__groupby eq "" \ + || $group_lastnum_p} { set __cols [list] - foreach __element_name $__csv_cols { - template::list::element::get_reference \ - -list_name $__list_name \ - -element_name $__element_name \ - -local_name __element_properties - - if { [info exists $__element_properties(csv_col)] } { - lappend __cols [csv_quote [set $__element_properties(csv_col)]] - } - } - append __output "\"[join $__cols "\",\""]\"\n" + foreach __element_name $__csv_cols { + if {![string match "*___*_group" $__element_name]} { + template::list::element::get_reference \ + -list_name $__list_name \ + -element_name $__element_name \ + -local_name __element_properties + if { [info exists $__element_properties(csv_col)] } { + lappend __cols [csv_quote [set $__element_properties(csv_col)]] + } else { + lappend __cols [csv_quote [set $__element_name]] + } + } { + lappend __cols [csv_quote [set $__element_name]] + } + } + append __output "\"[join $__cols "\",\""]\"\n" + } } - + set oh [ns_conn outputheaders] + ns_set put $oh Content-Disposition "attachment; filename=${__list_name}.csv" ns_return 200 text/csv $__output }