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 -r1.9 -r1.10 --- openacs-4/packages/acs-subsite/www/members/index.tcl 16 Oct 2003 20:45:22 -0000 1.9 +++ openacs-4/packages/acs-subsite/www/members/index.tcl 10 Nov 2003 12:36:20 -0000 1.10 @@ -20,6 +20,10 @@ set group_id [application_group::group_id_from_package_id] +# Is this the main site? In that case, we don't offer to remove users completely, +# only to ban/delete them. +set main_site_p [string equal [site_node::get_url -node_id [ad_conn node_id]] "/"] + set rel_type "membership_rel" set user_id [ad_conn user_id] @@ -203,15 +207,26 @@ set make_member_url [export_vars -base make-member { rel_id }] } } - set remove_url [export_vars -base member-remove { rel_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 { 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 }] + 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 { 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 { !$main_site_p } { + set remove_url [export_vars -base member-remove { rel_id }] + } } } } Index: openacs-4/packages/acs-subsite/www/members/member-invite.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/members/member-invite.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-subsite/www/members/member-invite.tcl 28 Aug 2003 09:41:41 -0000 1.2 +++ openacs-4/packages/acs-subsite/www/members/member-invite.tcl 10 Nov 2003 12:36:20 -0000 1.3 @@ -6,23 +6,29 @@ @cvs-id $Id$ } +auth::require_login + set group_id [application_group::group_id_from_package_id] set admin_p [ad_permission_p -user_id [ad_conn user_id] $group_id "admin"] -if { !$admin_p && ![parameter::get -parameter "MembersCanInviteMembersP" -default 0] } { - ad_return_forbidden "Cannot invite members" "I'm sorry, but you're not allowed to invite members to this group" - ad_script_abort +if { !$admin_p } { + # If not admin, user must be member of group, and members must be allowed to invite other members + if { ![parameter::get -parameter "MembersCanInviteMembersP" -default 0] || \ + ![group::member_p -group_id $group_id] } { + + ad_return_forbidden "Cannot invite members" "I'm sorry, but you're not allowed to invite members to this group" + ad_script_abort + } } + set page_title "Inivite Member to [ad_conn instance_name]" set context [list [list "." "Members"] "Invite"] -db_1row group_info { - select group_name, join_policy - from groups - where group_id = :group_id -} +group::get \ + -group_id $group_id \ + -array group_info ad_form -name user_search -cancel_url . -form { {user_id:search @@ -46,7 +52,7 @@ ad_form -extend -name user_search -on_submit { set create_p [group::permission_p -privilege create $group_id] - if { [string equal $join_policy "closed"] && !$create_p} { + if { [string equal $group_info(join_policy) "closed"] && !$create_p} { ad_return_forbidden "Cannot invite members" "I'm sorry, but you're not allowed to invite members to this group" ad_script_abort } @@ -56,29 +62,20 @@ set rel_type "membership_rel" } - set rel_exists_p [db_0or1row select_existing_rel { - select r.rel_id as existing_rel_id, - r.rel_type as existing_rel_type - from acs_rels r - where object_id_one = :group_id - and object_id_two = :user_id - }] - - if { $rel_exists_p } { - # This relationship already exists. You shouldn't change user type here - # Ignore, we're done - ad_returnredirect . - ad_script_abort + if { ![group::member_p -user_id $user_id -group_id $group_id] } { + with_catch errmsg { + group::add_member \ + -group_id $group_id \ + -user_id $user_id \ + -rel_type $rel_type + } { + form set_error user_serach user_id "Error adding user to community: $errmsg" + global errorInfo + ns_log Error "Error adding user $user_id to community group $group_id: $errmsg\n$errorInfo" + break + } } - - set member_state [group::default_member_state -join_policy $join_policy -create_p $create_p] - - db_transaction { - set rel_id [relation_add -member_state $member_state $rel_type $group_id $user_id] - } on_error { - ad_return_error "Error creating the relation" "We got the following error message while trying to create this relation:
$errmsg
" - ad_script_abort - } +} -after_submit { ad_returnredirect . ad_script_abort } Index: openacs-4/packages/acs-subsite/www/members/user-new.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/members/user-new.tcl,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-subsite/www/members/user-new.tcl 8 Nov 2003 15:37:40 -0000 1.4 +++ openacs-4/packages/acs-subsite/www/members/user-new.tcl 10 Nov 2003 12:36:20 -0000 1.5 @@ -8,29 +8,72 @@ email } +auth::require_login + +set group_id [application_group::group_id_from_package_id] + +set admin_p [permission::permission_p -object_id $group_id -privilege "admin"] + +if { !$admin_p } { + # If not admin, user must be member of group, and members must be allowed to invite other members + if { ![parameter::get -parameter "MembersCanInviteMembersP" -default 0] || \ + ![group::member_p -group_id $group_id] } { + + ad_return_forbidden "Cannot invite members" "I'm sorry, but you're not allowed to invite members to this group" + ad_script_abort + } +} + set page_title "Inivite Member to [ad_conn instance_name]" set context [list [list "." "Members"] "Invite"] -set group_id [application_group::group_id_from_package_id] -# -# Check if email already belongs to a user -# +# Check if email is already known on the system +set party_id [db_string select_party { select party_id from parties where lower(email) = lower(:email) } -default {}] -set found_p [db_0or1row select_user { select user_id from cc_users where lower(email) = lower(:email) }] +if { ![empty_string_p $party_id] } { + # Yes, is it a user? + set user_id [db_string select_user { select user_id from users where user_id = :party_id } -default {}] -if { $found_p } { - # A user with this email already exists. Make them members. - set member_state approved + if { [empty_string_p $user_id] } { + # This is a party, but it's not a user - db_transaction { - set rel_id [relation_add -member_state $member_state "membership_rel" $group_id $user_id] - } on_error { - ad_return_error "Error creating the relation" "We got the following error message while trying to create this relation:
$errmsg
" - ad_script_abort - } + acs_object_type::get -object_type [acs_object_type $party_id] -array object_type + # TODO: Move this to the form, by moving the form to an include template + ad_return_complaint 1 "
  • This email belongs to a $object_type(pretty_name) on the system. We cannot create a new user with this email." + ad_script_abort + } else { + # Already a user, but not a member of this subsite, and may not be a member of the main site (registered users) + # We need to know if we're on the main site below + set main_site_p [string equal [site_node::get_url -node_id [ad_conn node_id]] "/"] + + # Check to see if the user is a member of the main site (registered user) + set registered_user_id [db_string select_user { select user_id from cc_users where user_id = :party_id } -default {}] + + if { [empty_string_p $registered_user_id] } { + # User exists, but is not member of main site. Requires SW-admin to remedy. + if { [acs_user::site_wide_admin_p] } { + set main_site_id [site_node::get_element -url / -element object_id] + group::add_member \ + -group_id [application_group::group_id_from_package_id -package_id $main_site_id] \ + -user_id $party_id + } else { + # TODO: Move this to the form, by moving the form to an include template + ad_return_complaint 1 "
  • User has an acccount on the system, but has been removed from the main site. Only a site-wide administrator can re-add the user." + ad_script_abort + } + } + + # The user is now a registered user (member of main site) + if { $main_site_p } { + # Already a member. + } else { + group::add_member \ + -group_id $group_id \ + -user_id $party_id + } + } ad_returnredirect . ad_script_abort } -