Index: openacs-4/packages/dotlrn/www/members.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/members.tcl,v diff -u -r1.21 -r1.22 --- openacs-4/packages/dotlrn/www/members.tcl 24 Jul 2004 08:34:10 -0000 1.21 +++ openacs-4/packages/dotlrn/www/members.tcl 13 Jan 2005 13:57:21 -0000 1.22 @@ -16,27 +16,231 @@ ad_page_contract { - @author yon (yon@openforce.net) - @author arjun (arjun@openforce.net) - @creation-date Jan 19, 2002 + @author nimam (mazloumi@uni-mannheim.de) + @creation-date Oct 05, 2004 @version $Id$ -} -query { +} { + {orderby:optional} + {csv:optional} + {reset:optional} + {reltype:optional} } -# prevent this page from being called when not in a community -# (i.e. the main dotlrn instance -if {[empty_string_p [dotlrn_community::get_community_id]]} { - ad_returnredirect "[dotlrn::get_url]" -} - -#prevent this page from being called when it is not allowed -# i.e. AllowManageMembership 0 -dotlrn_portlet::is_allowed -parameter managemembership - +set my_user_id [ad_conn user_id] set context [list [list "one-community-admin" [_ dotlrn.Admin]] [_ dotlrn.Manage_Members]] set community_id [dotlrn_community::get_community_id] -set portal_id [dotlrn_community::get_portal_id -community_id $community_id] -set admin_p [dotlrn::user_can_admin_community_p -user_id [ad_get_user_id] -community_id $community_id] set spam_p [dotlrn::user_can_spam_community_p -user_id [ad_get_user_id] -community_id $community_id] +set referer [ns_conn url] set return_url "[ns_conn url]?[ns_conn query]" +set site_wide_admin_p [permission::permission_p -object_id [acs_magic_object security_context_root] -privilege admin] + +if {!$site_wide_admin_p} { + set admin_p [dotlrn::user_can_admin_community_p -user_id $my_user_id -community_id $community_id] +} else { + set admin_p 1 +} + +if {![exists_and_not_null referer]} { + if {[string equal $admin_p t] == 1} { + set referer "one-community-admin" + } else { + set referer "one-community" + } +} + +set bio_attribute_id [db_string bio_attribute_id { + select attribute_id + from acs_attributes + where object_type = 'person' + and attribute_name = 'bio' +}] + +# Actions for Removing Members according to their role +set rel_types [dotlrn_community::get_roles -community_id $community_id] + +if {$admin_p} { + set bulk_actions [list "[_ dotlrn.User_Admin_Page]" "member-add-3" "[_ dotlrn.User_Admin_Page]" "[_ dotlrn.Drop_Membership]" "deregister" "[_ dotlrn.Drop_Membership]"] + set bulk_actions_export_vars [list "user_id" "rel_type" "referer" "reset"] + set actions [list "CSV" "members?csv=yes" "[_ dotlrn.Comma_Separated_Values]"] + foreach role $rel_types { + lappend actions "[_ dotlrn.Remove_all] [lang::util::localize [lindex $role 3]]" "members?reset=1&reltype=[lindex $role 0]" "[lang::util::localize [lindex $role 2]]" + } + +} else { + set bulk_actions "" + set actions "" + set bulk_actions_export_vars "" +} + +# Build the list-builder list +template::list::create -name members -multirow members -key user_id -actions $actions -bulk_actions $bulk_actions -bulk_action_export_vars $bulk_actions_export_vars -elements { + portrait { + label "" + html "align right" + display_template { + + + #acs-subsite.Profile# + + + } + } last_name { + label "[_ acs-subsite.Last_name]" + html "align left" + display_template { + @members.last_name;noquote@ + } + } first_names { + label "[_ acs-subsite.First_names]" + html "align left" + display_template { + @members.first_names@ + } + } email { + label "[_ dotlrn.Email_1]" + html "align left" + display_template { + @members.email@ + } + } role { + label "[_ dotlrn.Role]" + html "align left" + } action { + label "[_ dotlrn.Actions]" + html "align left" + display_template { + + #dotlrn.Drop_Membership# | + #dotlrn.User_Admin_Page# + + } + } + } -orderby { + last_name {orderby last_name} + first_names {orderby first_names} + email {orderby email} + role {orderby role} + } -selected_format csv -formats { + csv { output csv } + } + +set orderby [template::list::orderby_clause -name "members" -orderby] + +set member_page [acs_community_member_page] + +db_multirow -extend { member_url referer } members select_current_members {} { + set member_url "$member_page?user_id=$user_id" + set referer $referer + set role [dotlrn_community::get_role_pretty_name -community_id $community_id -rel_type $rel_type] +} + +if { [exists_and_not_null csv] } { + template::list::write_output -name members +} + +# Bulk action User Admin Page +# Depending on the community_type, we have allowable rel_types +set rel_types [dotlrn_community::get_roles -community_id $community_id] +set selection "" +set size [multirow size members] +if { $size > 0 } { + multirow append members "" "" "" "" "" $selection +} + + +set user_ids "" +db_multirow -extend { member_url referer } pending_users select_pending_users {} { + set role [dotlrn_community::get_role_pretty_name -community_id $community_id -rel_type $rel_type] + append user_ids "user_id=$user_id&" + set member_url "$member_page?user_id=$user_id" + set referer $referer +} + + +if {$admin_p} { + if { [template::multirow size pending_users] > 0 } { + set pend_actions [list "[_ dotlrn.Approve_all]" "approve?${user_ids}referer=$referer" "[_ dotlrn.Approve_all]" \ + "[_ dotlrn.Reject_all]" "reject?${user_ids}referer=$referer" "[_ dotlrn.Reject_all]"] + } else { + set pend_actions "" + } +} else { + set pend_actions "" +} + +template::list::create -name pending_users -multirow pending_users -key user_id -actions $pend_actions -elements { + last_name { + label "[_ acs-subsite.Last_name]" + html "align left" + display_template { + @pending_users.last_name;noquote@ + } + } first_names { + label "[_ acs-subsite.First_names]" + html "align left" + display_template { + @pending_users.first_names@ + } + } email { + label "[_ dotlrn.Email_1]" + html "align left" + display_template { + @pending_users.email@ + } + } role { + label "[_ dotlrn.Role]" + html "align left" + } action { + label "[_ dotlrn.Actions]" + html "align left" + display_template { + #dotlrn.Approve# | + #dotlrn.Reject# + } + } +} + +set subcomm_p [dotlrn_community::subcommunity_p -community_id $community_id] + +if {$subcomm_p} { + + form create parent_users_form + + set parent_user_list [dotlrn_community::list_possible_subcomm_users -subcomm_id $community_id] + set n_parent_users [llength $parent_user_list] + + foreach user $parent_user_list { + element create parent_users_form "selected_user.[ns_set get $user user_id]" -datatype text -widget radio -options {{{} none} {{} dotlrn_member_rel} {{} dotlrn_admin_rel}} -value none + } + + if {[form is_valid parent_users_form]} { + + foreach user $parent_user_list { + set rel [element get_value parent_users_form "selected_user.[ns_set get $user user_id]"] + + if {![string match $rel none]} { + dotlrn_community::add_user -rel_type $rel $community_id [ns_set get $user user_id] + } + } + + ad_returnredirect [ns_conn url] + } + +} + +if {[exists_and_not_null reset] && [exists_and_not_null reltype]} { +set result "" + db_multirow reset_members select_members {} { + rp_form_put user_id $member_id + } + rp_form_put referer "one-community" + rp_form_put community_id $community_id + rp_internal_redirect "deregister" +} + +ad_return_template