Index: openacs-4/packages/acs-subsite/www/register/user-join.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/register/user-join.tcl,v diff -u -r1.5 -r1.6 --- openacs-4/packages/acs-subsite/www/register/user-join.tcl 22 Sep 2003 20:36:55 -0000 1.5 +++ openacs-4/packages/acs-subsite/www/register/user-join.tcl 10 Oct 2003 13:32:01 -0000 1.6 @@ -11,7 +11,7 @@ } { {group_id:integer {[application_group::group_id_from_package_id]}} {rel_type:notnull "membership_rel"} - { return_url "" } + { return_url "[ad_conn package_url]" } } -properties { context:onevalue role_pretty_name:onevalue @@ -77,14 +77,14 @@ for {set rownum 1} {$rownum <= $num_required_segments } {incr rownum} { set required_seg [template::multirow get required_segments $rownum] - if {[string equal $required_segments(join_policy) closed]} { + if { [string equal $required_segments(join_policy) closed] && ![group::member_p -group_id $required_segments(group_id)] } { ad_return_complaint 1 "Cannot join this group - segment closed to all applicants. $ret_link" return } - set segment_id $required_segment(segment_id) - set cur_group_id $required_segment(group_id) - set cur_rel_type $required_segment(rel_type) + set segment_id $required_segments(segment_id) + set cur_group_id $required_segments(group_id) + set cur_rel_type $required_segments(rel_type) attribute::add_form_elements -form_id join -variable_prefix seg_$segment_id -start_with relationship -object_type $cur_rel_type @@ -93,7 +93,7 @@ attribute::add_form_elements -form_id join -start_with relationship -object_type $rel_type -if {[template::form::size join] == 0} { +if { [template::form::size join] == 0 } { # There's no attributes to ask the user for, so just add the user to # the group (instead of displaying a 0 element form). set just_do_it_p 1 @@ -106,29 +106,30 @@ -widget hidden } -if {$just_do_it_p || [template::form is_valid join]} { +if { $just_do_it_p || [template::form is_valid join] } { db_transaction { for {set rownum 1} {$rownum <= $num_required_segments } {incr rownum} { set required_seg [template::multirow get required_segments $rownum] - if {[string equal $required_segments(join_policy) closed]} { - ad_complain "[_ acs-subsite.lt_Cannot_join_this_grou]" - return - } - - if {[string equal $required_segments(join_policy) "needs approval"]} { - set member_state "needs approval" - } else { - set member_state "approved" - } + if { ![group::member_p -group_id $required_segments(group_id)] } { + if { [string equal $required_segments(join_policy) closed] } { + ad_return_complaint 1 "[_ acs-subsite.lt_Cannot_join_this_grou]" + return + } + + if {[string equal $required_segments(join_policy) "needs approval"]} { + set member_state "needs approval" + } else { + set member_state "approved" + } - set segment_id $required_segment(segment_id) - set cur_group_id $required_segment(group_id) - set cur_rel_type $required_segment(rel_type) - - set rel_id [relation_add -form_id join -variable_prefix seg_$segment_id -member_state $member_state $cur_rel_type $cur_group_id $party_id] - + set segment_id $required_segments(segment_id) + set cur_group_id $required_segments(group_id) + set cur_rel_type $required_segments(rel_type) + + set rel_id [relation_add -form_id join -variable_prefix seg_$segment_id -member_state $member_state $cur_rel_type $cur_group_id $party_id] + } } if {[string equal $join_policy "needs approval"]} { @@ -139,11 +140,8 @@ set rel_id [relation_add -form_id join -member_state $member_state $rel_type $group_id $party_id] - if { [empty_string_p $return_url] } { - set return_url [ad_conn package_url] - } - } on_error { + set err {} regexp {\n\nERROR:\s\s(\S.*?)\n.*?\nSQL:\s\n\n\t.*?(\S.*?)\n.*} $errmsg junk err sql if {[regexp {duplicate.*?unique} $err]} { set reason "Your application for membership to this group has been previously accepted. "