Index: openacs-4/packages/acs-subsite/www/members/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/members/index.tcl,v diff -u -N -r1.20.2.6 -r1.20.2.7 --- openacs-4/packages/acs-subsite/www/members/index.tcl 27 Apr 2017 11:28:46 -0000 1.20.2.6 +++ openacs-4/packages/acs-subsite/www/members/index.tcl 10 May 2017 12:52:07 -0000 1.20.2.7 @@ -34,227 +34,247 @@ if {!$main_site_p} { append page_title " (subsite $subsite_info(instance_name))" } -set context [list $page_title] - -set user_id [ad_conn user_id] - set show_member_list_to [parameter::get -parameter "ShowMembersListTo" -default 2] # 0 = anyone # 1 = members # 2 = admins +# 3 = members except for the whole subsite +# +# If we have to check permissions for the user, it is necessary to be logged in. +# if { $show_member_list_to != 0 || [permission::permission_p -party_id [ad_conn untrusted_user_id] -object_id $group_id -privilege "admin"] } { # Refresh login auth::require_login } -# We need to know both: -# - does user have admin on group? -# - does user have delete on group? +# +# We need to know read, admin, and delete rights on group. +# +set user_id [ad_conn user_id] set admin_p [permission::permission_p -party_id $user_id -object_id $group_id -privilege "admin"] set show_member_list_p [expr { $show_member_list_to == 0 || $admin_p || ($show_member_list_to == 1 && [group::member_p -group_id $group_id]) + || ($show_member_list_to == 3 && [group::member_p -group_id $group_id] && $group_id != [ad_conn subsite_id]) }] -if { !$show_member_list_p } { - set title [_ acs-subsite.Cannot_see_memb_list] +if {$show_member_list_p} { + # + # In any case, the use should have read rights on the group + # + set show_member_list_p [permission::permission_p -party_id $user_id -object_id $group_id -privilege "read"] } -if { $admin_p } { - # We can skip the permissions check for "delete" because user had admin. - set delete_p 1 - set hide_email_p 0 - set hide_member_state_p 0 +if { !$show_member_list_p } { + # + # If the list is not show, we just alter the title, but wd don't + # do more. + # + set page_title [_ acs-subsite.Cannot_see_memb_list] } else { - # user doesn't have admin -- now find out if they have delete. - set delete_p [permission::permission_p -party_id $user_id -object_id $group_id -privilege "delete"] - set hide_email_p 1 - set hide_member_state_p 1 -} -set actions {} -set bulk_actions {} + # + # We show the user a member list, but we have to figure out the + # details. + # + if { $admin_p } { + # We can skip the permissions check for "delete" because user had admin. + set delete_p 1 + set hide_email_p 0 + set hide_member_state_p 0 + } else { + # user doesn't have admin rights -- now find out if they have delete rights. + set delete_p [permission::permission_p -party_id $user_id -object_id $group_id -privilege "delete"] + set hide_email_p 1 + set hide_member_state_p 1 + } -if { $admin_p || [parameter::get -parameter "MembersCanInviteMembersP" -default 0] } { - set actions [_ acs-subsite.Invite] - lappend actions { member-invite } -} + set actions {} + set bulk_actions {} -set member_state_options [list] -db_foreach select_member_states {} { - lappend member_state_options \ - [list \ - [group::get_member_state_pretty -member_state $state] \ - $state \ - [lc_numeric $num_members]] -} + if { $admin_p || [parameter::get -parameter "MembersCanInviteMembersP" -default 0] } { + set actions [_ acs-subsite.Invite] + lappend actions { member-invite } + } -db_1row pretty_roles {} - -set orderby_option { - name { - label "[_ acs-subsite.Name]" - orderby "lower(p.first_names || ' ' || p.last_name)" + set member_state_options [list] + db_foreach select_member_states {} { + lappend member_state_options \ + [list \ + [group::get_member_state_pretty -member_state $state] \ + $state \ + [lc_numeric $num_members]] } -} -if {!$hide_email_p} { - lappend orderby_option email { - label "[_ acs-subsite.Email]" - orderby "pa.email" - } -} -if {!$hide_member_state_p} { - lappend orderby_option member_state { - label "[_ acs-subsite.Member_State]" - orderby mr.member_state - } -} -template::list::create \ - -name "members" \ - -multirow "members" \ - -row_pretty_plural "members" \ - -page_size 50 \ - -page_flush_p t \ - -page_query_name members_pagination \ - -actions $actions \ - -bulk_actions $bulk_actions \ - -elements { + db_1row pretty_roles {} + + set orderby_option { name { label "[_ acs-subsite.Name]" - link_url_eval {[acs_community_member_url -user_id $user_id]} + orderby "lower(p.first_names || ' ' || p.last_name)" } - email { - label "[_ acs-subsite.Email]" - display_template { - @members.user_email;noquote@ - } - hide_p $hide_email_p + } + if {!$hide_email_p} { + lappend orderby_option email { + label "[_ acs-subsite.Email]" + orderby "pa.email" } - rel_role { - label "[_ acs-subsite.Role]" - display_template { - @members.rel_role_pretty@ - } - } - member_state_pretty { + } + if {!$hide_member_state_p} { + lappend orderby_option member_state { label "[_ acs-subsite.Member_State]" - hide_p $hide_member_state_p + orderby mr.member_state } - member_state_change { - label {Action} - display_template { - - #acs-subsite.Approve# - - - #acs-subsite.Reject# - - - #acs-subsite.Ban# - - - #acs-subsite.Delete# - - - #acs-subsite.Remove# - - - #acs-subsite.Make_administrator# - - - #acs-subsite.Make_member# - + } + + template::list::create \ + -name "members" \ + -multirow "members" \ + -row_pretty_plural "members" \ + -page_size 50 \ + -page_flush_p t \ + -page_query_name members_pagination \ + -actions $actions \ + -bulk_actions $bulk_actions \ + -elements { + name { + label "[_ acs-subsite.Name]" + link_url_eval {[acs_community_member_url -user_id $user_id]} } - } - } -filters { - group_id {} - member_state { - label "[_ acs-subsite.Member_State]" - values $member_state_options - where_clause { - mr.member_state = :member_state + email { + label "[_ acs-subsite.Email]" + display_template { + @members.user_email;noquote@ + } + hide_p $hide_email_p } - has_default_p 1 - } - } -orderby $orderby_option + rel_role { + label "[_ acs-subsite.Role]" + display_template { + @members.rel_role_pretty@ + } + } + member_state_pretty { + label "[_ acs-subsite.Member_State]" + hide_p $hide_member_state_p + } + member_state_change { + label {Action} + display_template { + + #acs-subsite.Approve# + + + #acs-subsite.Reject# + + + #acs-subsite.Ban# + + + #acs-subsite.Delete# + + + #acs-subsite.Remove# + + + #acs-subsite.Make_administrator# + + + #acs-subsite.Make_member# + + } + } + } -filters { + group_id {} + member_state { + label "[_ acs-subsite.Member_State]" + values $member_state_options + where_clause { + mr.member_state = :member_state + } + has_default_p 1 + } + } -orderby $orderby_option -# Pull out all the relations of the specified type + # Pull out all the relations of the specified type -set show_partial_email_p [expr {$user_id == 0}] + set show_partial_email_p [expr {$user_id == 0}] -db_multirow -extend { - email_url - member_state_pretty - remove_url - approve_url - reject_url - ban_url - delete_url - make_admin_url - make_member_url - rel_role_pretty - user_email -} -unclobber members members_select {} { - if { $member_admin_p > 0 } { - set rel_role_pretty [lang::util::localize $admin_role_pretty] - } else { - if { $other_role_pretty ne "" } { - set rel_role_pretty [lang::util::localize $other_role_pretty] + db_multirow -extend { + email_url + member_state_pretty + remove_url + approve_url + reject_url + ban_url + delete_url + make_admin_url + make_member_url + rel_role_pretty + user_email + } -unclobber members members_select {} { + if { $member_admin_p > 0 } { + set rel_role_pretty [lang::util::localize $admin_role_pretty] } else { - set rel_role_pretty [lang::util::localize $member_role_pretty] + if { $other_role_pretty ne "" } { + set rel_role_pretty [lang::util::localize $other_role_pretty] + } else { + set rel_role_pretty [lang::util::localize $member_role_pretty] + } } - } - set member_state_pretty [group::get_member_state_pretty -member_state $member_state] - set user_email [email_image::get_user_email -user_id $user_id] - if { $admin_p } { - switch $member_state { - approved { - if { $member_admin_p == 0 } { - set make_admin_url [export_vars -base make-admin { user_id }] - } else { - set make_member_url [export_vars -base make-member { user_id }] + set member_state_pretty [group::get_member_state_pretty -member_state $member_state] + set user_email [email_image::get_user_email -user_id $user_id] + if { $admin_p } { + switch $member_state { + approved { + if { $member_admin_p == 0 } { + set make_admin_url [export_vars -base make-admin { user_id }] + } else { + set make_member_url [export_vars -base make-member { user_id }] + } + if { $main_site_p } { + set ban_url [export_vars -base member-state-change { rel_id {member_state banned} }] + set delete_url [export_vars -base member-state-change { rel_id {member_state deleted} }] + } else { + set remove_url [export_vars -base member-remove { user_id }] + } } - if { $main_site_p } { - set ban_url [export_vars -base member-state-change { rel_id {member_state banned} }] - set delete_url [export_vars -base member-state-change { rel_id {member_state deleted} }] - } else { - set remove_url [export_vars -base member-remove { user_id }] + "needs approval" { + set approve_url [export_vars -base member-state-change { rel_id { member_state approved } }] + if { $main_site_p } { + set reject_url [export_vars -base member-state-change { rel_id {member_state rejected} }] + } else { + set remove_url [export_vars -base member-remove { user_id }] + } } - } - "needs approval" { - set approve_url [export_vars -base member-state-change { rel_id { member_state approved } }] - if { $main_site_p } { - set reject_url [export_vars -base member-state-change { rel_id {member_state rejected} }] - } else { - set remove_url [export_vars -base member-remove { user_id }] + "rejected" - "deleted" - "banned" { + set approve_url [export_vars -base member-state-change { rel_id { member_state approved } }] + if { !$main_site_p } { + set remove_url [export_vars -base member-remove { user_id }] + } } } - "rejected" - "deleted" - "banned" { - set approve_url [export_vars -base member-state-change { rel_id { member_state approved } }] - if { !$main_site_p } { - set remove_url [export_vars -base member-remove { user_id }] - } - } } - } - if { [ad_conn user_id] == 0 } { - set email [string replace $email \ - [expr {[string first "@" $email]+3}] end "..."] - } else { - set email_url "mailto:$email" + if { [ad_conn user_id] == 0 } { + set email [string replace $email \ + [expr {[string first "@" $email]+3}] end "..."] + } else { + set email_url "mailto:$email" + } } } +set context [list $page_title] + # Local variables: # mode: tcl # tcl-indent-level: 4