Index: openacs-4/packages/dotlrn/www/members-chunk-table.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/members-chunk-table.tcl,v diff -u -r1.18 -r1.19 --- openacs-4/packages/dotlrn/www/members-chunk-table.tcl 12 Nov 2002 08:44:05 -0000 1.18 +++ openacs-4/packages/dotlrn/www/members-chunk-table.tcl 4 Dec 2002 09:51:04 -0000 1.19 @@ -23,7 +23,8 @@ @version $Id$ } -query { {parent_user_role:multiple,array,optional} - {orderby "role"} + {order "last_name"} + {order_direction "asc"} } -properties { users:multirow n_parent_users:onevalue @@ -58,92 +59,58 @@ } } -# Get all users for this community, including role -set community_members [dotlrn_community::list_users $community_id] -set table_def [list] +if {[string compare $order_direction "asc"]==0} { + set order_html "" + set opposite_order_direction "desc" +} else { + set order_html "" + set opposite_order_direction "asc" +} -lappend table_def [list \ - first_names \ - [_ dotlrn.First_Names] \ - {upper(first_names) $order} \ - {[acs_community_member_link -user_id $user_id -label $first_names]} \ -] +# Variables that will be used if the column +# is not selected. +set first_names_order_html "" +set last_name_order_html "" +set email_order_html "" -lappend table_def [list \ - last_name \ - [_ dotlrn.Last_Name] \ - {upper(last_name) $order} \ - {[acs_community_member_link -user_id $user_id -label $last_name]} \ -] +set first_names_order_direction $order_direction +set last_name_order_direction $order_direction +set email_order_direction $order_direction -if {$read_private_data_p || [string equal $my_user_id \$user_id]} { - lappend table_def [list \ - email \ - [_ dotlrn.Email_1] \ - {upper(email) $order, upper(role)} \ - {$email} \ - ] -} else { - lappend table_def [list \ - email \ - [_ dotlrn.Email_1] \ - {upper(email) $order, upper(role)} \ - { } \ - ] + +# Special case for the selected column. +switch $order { + "first_names" { + set first_names_order_html $order_html + set first_names_order_direction $opposite_order_direction + } + "last_name" { + set last_name_order_html $order_html + set last_name_order_direction $opposite_order_direction + } + "email" { + set email_order_html $order_html + set email_order_direction $opposite_order_direction + } } -lappend table_def [list \ - role \ - [_ dotlrn.Role] \ - {decode(role,'instructor',1,'admin',2,'teaching_assistant',3,'course_assistant',4,'course_admin',5,'student',6,'member',7) asc, last_name $order} \ - {[dotlrn_community::get_role_pretty_name -community_id $community_id -rel_type $rel_type]} \ -] +# vars to carry over (from previous script) +# Do a special clause for role! -if {$site_wide_admin_p} { - lappend table_def [list \ - manage \ - [_ dotlrn.Actions] \ - {} \ - {\[ [_ dotlrn.Drop_Membership] | [_ dotlrn.Manage] \]} \ - ] -} elseif {$admin_p} { - lappend table_def [list \ - manage \ - [_ dotlrn.Actions] \ - {} \ - {\[ Drop Membership \]} \ - ] -} else { - lappend table_def [list \ - manage \ - [_ dotlrn.Actions] \ - {} \ - { - [eval { - if {$my_user_id == $user_id} { - return "\[ [_ dotlrn.Drop_nbsp_Membership] \]" - } else { - return " " - } - }] - } \ - ] -} +# The note in the members-chunk-table.xql indicated that +# it would be very hard to make sorting work with ad_table +# and sorting by columns functionality was incomplete. After +# struggling with ad_table for a while, I went to the +# OpenACS IRC and asked some questions. The response +# basically was that ad_table needs a refactoring. +# Therefore, I (teadams@alum.mit.edu) decided to +# simplify and use db_multirow and code my own column +# sorting. -set table [ad_table \ - -Tmissing_text "
[_ dotlrn.No_members]
" \ - -Textra_vars {referer my_user_id community_id rel_type} \ - -Torderby $orderby \ - select_current_members \ - "" \ - $table_def -] +set order_by "$order $order_direction" -set user_list [list] -foreach user $community_members { - lappend user_list [ns_set get $user user_id] -} +db_multirow current_members select_current_members {} db_multirow pending_users select_pending_users { select dotlrn_users.*,