Index: openacs-4/packages/acs-admin/www/users/member-state-change-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-admin/www/users/Attic/member-state-change-postgresql.xql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-admin/www/users/member-state-change-postgresql.xql 29 Apr 2001 00:47:48 -0000 1.4 +++ openacs-4/packages/acs-admin/www/users/member-state-change-postgresql.xql 13 Feb 2002 17:41:11 -0000 1.5 @@ -15,53 +15,4 @@ - - - select membership_rel__approve(:rel_id) - - - - - - - select membership_rel__ban(:rel_id) - - - - - - - select membership_rel__reject(:rel_id) - - - - - - - select membership_rel__deleted(:rel_id) - - - - - - - select membership_rel__unapprove(:rel_id) - - - - - - - select acs_user__approve_email (:user_id) - - - - - - - select acs_user__unapprove_email (:user_id) - - - - Index: openacs-4/packages/acs-admin/www/users/member-state-change.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-admin/www/users/member-state-change.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-admin/www/users/member-state-change.tcl 29 Apr 2001 00:45:52 -0000 1.2 +++ openacs-4/packages/acs-admin/www/users/member-state-change.tcl 13 Feb 2002 17:41:11 -0000 1.3 @@ -17,11 +17,17 @@ return_url:onevalue } -if ![db_0or1row get_states "select email_verified_p email_verified_p_old, member_state member_state_old, first_names || ' ' || last_name as name, email, rel_id, rowid -from cc_users -where user_id = :user_id"] { +if {![db_0or1row get_states { + select email_verified_p as email_verified_p_old, + member_state as member_state_old, + first_names || ' ' || last_name as name, + email, + rel_id, + rowid + from cc_users + where user_id = :user_id +}]} { # The user is not in there - ad_return_complaint "Invalid User" "The user is not in the system" return } @@ -37,7 +43,7 @@ set action "Ban $name" set email_message "You have been banned from [ad_system_name]." } - "reject" { + "rejected" { set action "Reject $name" set email_message "Your account have been rejected from [ad_system_name]." } @@ -67,39 +73,20 @@ return } -if [ catch {switch $member_state { - "approved" { - db_exec_plsql member_approve " - begin membership_rel.approve( rel_id => :rel_id ); end;" - } - "banned" { - db_exec_plsql member_ban " - begin membership_rel.ban( rel_id => :rel_id ); end;" - } - "reject" { - db_exec_plsql member_reject " - begin membership_rel.reject( rel_id => :rel_id ); end;" - } - "deleted" { - db_exec_plsql member_deleted " - begin membership_rel.deleted( rel_id => :rel_id ); end;" - } - "needs approval" { - db_exec_plsql member_unapprove " - begin membership_rel.unapprove( rel_id => :rel_id ); end;" - } - } - switch $email_verified_p { - "t" { - db_exec_plsql approve_email " - begin acs_user.approve_email ( user_id => :user_id ); end;" - } - "f" { - db_exec_plsql unapprove_email " - begin acs_user.unapprove_email ( user_id => :user_id ); end;" - } - } - } errmsg] { +if {[catch { + acs_user::change_state -user_id $user_id -state $member_state + + switch $email_verified_p { + "t" { + db_exec_plsql approve_email " + begin acs_user.approve_email ( user_id => :user_id ); end;" + } + "f" { + db_exec_plsql unapprove_email " + begin acs_user.unapprove_email ( user_id => :user_id ); end;" + } + } +} errmsg]} { ad_return_error "Database Update Failed" "Database update failed with the following error:
$errmsg
" } Index: openacs-4/packages/acs-tcl/tcl/community-core-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/community-core-procs-postgresql.xql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-tcl/tcl/community-core-procs-postgresql.xql 24 Apr 2001 06:02:27 -0000 1.4 +++ openacs-4/packages/acs-tcl/tcl/community-core-procs-postgresql.xql 13 Feb 2002 17:41:11 -0000 1.5 @@ -27,5 +27,34 @@ + + + select membership_rel__approve(:rel_id) + + + + + + select membership_rel__ban(:rel_id) + + + + + + select membership_rel__reject(:rel_id) + + + + + + select membership_rel__delete(:rel_id) + + + + + + select membership_rel__unapprove(:rel_id) + + Index: openacs-4/packages/acs-tcl/tcl/community-core-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/community-core-procs.tcl,v diff -u -r1.4 -r1.5 --- openacs-4/packages/acs-tcl/tcl/community-core-procs.tcl 23 Jan 2002 05:25:21 -0000 1.4 +++ openacs-4/packages/acs-tcl/tcl/community-core-procs.tcl 13 Feb 2002 17:41:11 -0000 1.5 @@ -10,7 +10,7 @@ ad_proc -private cc_lookup_screen_name_user { screen_name } { return [db_string user_select { - select user_id from cc_users where upper(screen_name) = upper(:screen_name) + select user_id from cc_users where upper(screen_name) = upper(:screen_name) } -default ""] } @@ -25,15 +25,15 @@ ad_proc -private cc_lookup_email_user { email } { return [db_string user_select { - select user_id from cc_users where upper(email) = upper(:email) + select user_id from cc_users where upper(email) = upper(:email) } -default ""] } ad_proc -public cc_email_from_party { party_id } { @return The email address of the indicated party. } { return [db_string email_from_party { - select email from parties where party_id = :party_id + select email from parties where party_id = :party_id } -default 0] } @@ -48,7 +48,7 @@ ad_proc -private cc_lookup_name_group { name } { return [db_string group_select { - select group_id from groups where group_name = :name + select group_id from groups where group_name = :name } -default ""] } @@ -62,35 +62,35 @@ } ad_proc ad_user_new {email first_names last_name password password_question password_answer {url ""} {email_verified_p "t"} {member_state "approved"} {user_id ""} } { - + Creates a new user in the system. The user_id can be specified as an argument to enable double click protection. If this procedure succeeds, returns the new user_id. Otherwise, returns 0. } { if { [empty_string_p $user_id] } { - set user_id [db_nextval acs_object_id_seq] + set user_id [db_nextval acs_object_id_seq] } if { [empty_string_p $password_question] } { - set password_question [db_null] + set password_question [db_null] } if { [empty_string_p $password_answer] } { - set password_answer [db_null] + set password_answer [db_null] } if { [empty_string_p url] } { - set url [db_null] + set url [db_null] } - + set peeraddr [ad_conn peeraddr] set salt [sec_random_token] set hashed_password [ns_sha1 "$password$salt"] - + db_transaction { - set user_id [db_exec_plsql user_insert { + set user_id [db_exec_plsql user_insert { begin - :1 := acs.add_user(user_id => :user_id, + :1 := acs.add_user(user_id => :user_id, email => :email, url => :url, first_names => :first_names, @@ -102,24 +102,126 @@ creation_ip => :peeraddr, email_verified_p => :email_verified_p, member_state => :member_state); - end; - } - ] - + end; + } + ] + if {[catch { # Call the extension acs_user_extension::user_new -user_id $user_id } errmsg]} { # At this point, we don't want the user addition to fail # if some extension is screwing things up } - + } on_error { - # we got an error. log it and signal failure. - ns_log Error "Problem creating a new user: $errmsg" - return 0 + # we got an error. log it and signal failure. + ns_log Error "Problem creating a new user: $errmsg" + return 0 } # success. return $user_id } +ad_proc -public ad_user_remove { + -user_id:required +} { + remove a user from the ACS +} { + db_exec_plsql user_remove { + begin + acs.remove_user( + user_id => :user_id + ); + end; + } +} + +namespace eval acs_user { + + ad_proc -public change_state { + {-user_id:required} + {-state:required} + } { + Change the membership state of a user. + } { + set rel_id [db_string select_rel_id { + select rel_id + from cc_users + where user_id = :user_id + } -default ""] + + if {![empty_string_p $rel_id]} { + return + } + + switch -exact $state { + "approved" { + db_exec_plsql member_approve { + begin membership_rel.approve(rel_id => :rel_id); end; + } + } + "banned" { + db_exec_plsql member_ban { + begin membership_rel.ban(rel_id => :rel_id); end; + } + } + "rejected" { + db_exec_plsql member_reject { + begin membership_rel.reject(rel_id => :rel_id); end; + } + } + "deleted" { + db_exec_plsql member_delete { + begin membership_rel.delete(rel_id => :rel_id); end; + } + } + "needs approval" { + db_exec_plsql member_unapprove { + begin membership_rel.unapprove(rel_id => :rel_id); end; + } + } + } + } + + ad_proc -public approve { + {-user_id:required} + } { + Approve a user + } { + change_state -user_id $user_id -state "approved" + } + + ad_proc -public ban { + {-user_id:required} + } { + Ban a user + } { + change_state -user_id $user_id -state "banned" + } + + ad_proc -public reject { + {-user_id:required} + } { + Reject a user + } { + change_state -user_id $user_id -state "rejected" + } + + ad_proc -public delete { + {-user_id:required} + } { + Delete a user + } { + change_state -user_id $user_id -state "deleted" + } + + ad_proc -public unapprove { + {-user_id:required} + } { + Unapprove a user + } { + change_state -user_id $user_id -state "needs approval" + } + +}