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