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.6 -r1.7
--- openacs-4/packages/acs-subsite/www/members/index.tcl 10 Oct 2003 10:40:19 -0000 1.6
+++ openacs-4/packages/acs-subsite/www/members/index.tcl 10 Oct 2003 16:35:03 -0000 1.7
@@ -7,6 +7,12 @@
} {
{member_state "approved"}
{orderby "name,asc"}
+} -validate {
+ member_state_valid -requires { member_state } {
+ if { [lsearch [group::possible_member_states] $member_state] == -1 } {
+ ad_complain "Invalid member_state"
+ }
+ }
}
set page_title "Members"
@@ -41,81 +47,172 @@
}
set actions {}
-set bulk_actions {}
-if { $admin_p } {
- set bulk_actions {
- "Remove" member-remove "Remove the checked members from this group"
- "Make administrator" make-admin "Make checked members administrators of this group"
- "Make normal member" make-member "Make checked administrators normal of this group"
- }
-}
-
if { $admin_p || [parameter::get -parameter "MembersCanInviteMembersP" -default 0] } {
set actions { "Invite" member-invite }
}
# TODO: Pagination
-set show_partial_email_p [expr $user_id == 0]
+set member_state_options [list]
+db_foreach select_member_states {
+ select mr.member_state as state,
+ count(mr.rel_id) as num_members
+ from membership_rels mr,
+ acs_rels r
+ where r.rel_id = mr.rel_id
+ and r.object_id_one = :group_id
+ group by mr.member_state
+} {
+ lappend member_state_options \
+ [list \
+ [group::get_member_state_pretty -member_state $state] \
+ $state \
+ $num_members]
+}
+
list::create \
-name "members" \
-multirow "members" \
-key rel_id \
-row_pretty_plural "members" \
- -bulk_actions $bulk_actions \
-actions $actions \
-elements {
name {
label "Name"
link_url_eval {[acs_community_member_url -user_id $user_id]}
- orderby "lower(u.first_names || ' ' || u.last_name)"
}
email {
label "Email"
- link_url_eval {mailto:$email}
+ link_url_col email_url
link_html { title "Send email to this user" }
- orderby "u.email"
- hide_p {$show_partial_email_p}
}
- email_partial {
+ rel_role {
+ label "Role"
+ display_template {
+ @members.rel_role_pretty@
+
+ (Make administrator)
+
+
+ (Make member)
+
+ }
+ }
+ member_state_pretty {
+ label "Member State"
+ display_template {
+ @members.member_state_pretty@
+
+ (Approve)
+
+
+ (Reject)
+
+
+ (Ban)
+
+
+ (Delete)
+
+
+ (Remove)
+
+ }
+ }
+ } -filters {
+ member_state {
+ label "Member State"
+ values $member_state_options
+ where_clause {
+ mr.member_state = :member_state
+ }
+ has_default_p 1
+ }
+ } -orderby {
+ name {
+ label "Name"
+ orderby "lower(u.first_names || ' ' || u.last_name)"
+ }
+ email {
label "Email"
orderby "u.email"
- hide_p {[expr $show_partial_email_p == 0]}
}
rel_role {
label "Role"
- display_col rel_role_pretty
orderby "role.pretty_name"
}
}
# Pull out all the relations of the specified type
-db_multirow -extend { email_partial } members relations_query "
+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
+} -unclobber members relations_query "
select r.rel_id,
u.user_id,
u.first_names || ' ' || u.last_name as name,
u.email,
r.rel_type,
rt.role_two as rel_role,
- role.pretty_name as rel_role_pretty
+ role.pretty_name as rel_role_pretty,
+ mr.member_state
from acs_rels r,
membership_rels mr,
cc_users u,
acs_rel_types rt,
acs_rel_roles role
where r.object_id_one = :group_id
and mr.rel_id = r.rel_id
- and mr.member_state = 'approved'
and u.user_id = r.object_id_two
and rt.rel_type = r.rel_type
and role.role = rt.role_two
+ [template::list::filter_where_clauses -and -name "members"]
[template::list::orderby_clause -orderby -name "members"]
" {
set rel_role_pretty [lang::util::localize $rel_role_pretty]
- set email_partial [string replace $email \
- [expr [string first "@" $email]+3] end "..."]
+ set member_state_pretty [group::get_member_state_pretty -member_state $member_state]
+
+ if { $admin_p } {
+ switch $member_state {
+ approved {
+ switch $rel_role {
+ member {
+ set make_admin_url [export_vars -base make-admin { rel_id }]
+ }
+ admin {
+ set make_member_url [export_vars -base make-member { rel_id }]
+ }
+ }
+ set remove_url [export_vars -base member-remove { rel_id }]
+ }
+ "needs approval" {
+ set approve_url [export_vars -base member-state-change { rel_id { member_state approved } }]
+ set remove_url [export_vars -base member-remove { rel_id }]
+ }
+ "rejected" - "deleted" - "banned" {
+ set approve_url [export_vars -base member-state-change { rel_id { member_state approved } }]
+ set remove_url [export_vars -base member-remove { rel_id }]
+ }
+ }
+ }
+
+ if { [ad_conn user_id] == 0 } {
+ set email [string replace $email \
+ [expr [string first "@" $email]+3] end "..."]
+ } else {
+ set email_url "mailto:$email"
+ }
}