--- loncom/interface/createaccount.pm 2014/02/20 01:00:33 1.60 +++ loncom/interface/createaccount.pm 2014/03/03 17:11:41 1.61 @@ -4,7 +4,7 @@ # kerberos, or SSO) or an e-mail address. Requests to use an e-mail address as # username may be processed automatically, or may be queued for approval. # -# $Id: createaccount.pm,v 1.60 2014/02/20 01:00:33 raeburn Exp $ +# $Id: createaccount.pm,v 1.61 2014/03/03 17:11:41 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -59,7 +59,7 @@ sub handler { my $sso_domain = $r->subprocess_env->get('SSOUserDomain'); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['token','courseid','domain']); + ['token','courseid','domain','type']); &Apache::lonacc::get_posted_cgi($r); &Apache::lonlocal::get_language_handle($r); @@ -240,10 +240,11 @@ sub handler { } } elsif ($env{'form.create_with_email'}) { &print_header($r,$start_page,$courseid); + my $usertype = &get_usertype($domain); $output = &process_email_request($env{'form.uname'},$domain,$domdesc, $contact_name,$contact_email,$cancreate, $lonhost,$domconfig{'usercreation'}, - $emailusername,$courseid); + $emailusername,$courseid,$usertype); } elsif (!$token) { &print_header($r,$start_page,$courseid); my $now=time; @@ -261,8 +262,10 @@ sub handler { if (grep(/^email(|approval)$/,@{$cancreate})) { $r->print(&javascript_validmail()); } + my $usertype = &get_usertype($domain); $output = &print_username_form($r,$domain,$domdesc,$cancreate,$now,$lonhost, - $include,$courseid,$gotlondes,$emailusername); + $include,$courseid,$gotlondes,$emailusername, + $usertype); } $r->print($output); &print_footer($r); @@ -298,6 +301,21 @@ sub print_footer { $r->print(&Apache::loncommon::end_page()); } +sub get_usertype { + my ($domain) = @_; + my $usertype = 'default'; + my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($domain); + if (ref($types) eq 'ARRAY') { + push(@{$types},'default'); + my $posstype = $env{'form.type'}; + $posstype =~ s/^\s+|\s$//g; + if (grep(/^\Q$posstype\E$/,@{$types})) { + $usertype = $posstype; + } + } + return $usertype; +} + sub selfenroll_crumbs { my ($r,$courseid,$desc) = @_; &Apache::lonhtmlcommon::add_breadcrumb @@ -322,20 +340,51 @@ sub selfenroll_crumbs { } sub javascript_setforms { - my ($now,$emailusername,$captcha) = @_; - my $setuserinfo; + my ($now,$emailusername,$captcha,$usertype) = @_; + my ($setuserinfo,@required,$requiredchk); if (ref($emailusername) eq 'HASH') { - foreach my $key (sort(keys(%{$emailusername}))) { - $setuserinfo .= ' server.elements.'.$key.'.value=client.elements.'.$key.'.value;'."\n"; + if (ref($emailusername->{$usertype}) eq 'HASH') { + foreach my $key (sort(keys(%{$emailusername->{$usertype}}))) { + if ($emailusername->{$usertype}{$key} eq 'required') { + push(@required,$key); + } + $setuserinfo .= ' server.elements.'.$key.'.value=client.elements.'.$key.'.value;'."\n"; + } + $setuserinfo .= ' server.elements.type.value=client.elements.type.value;'."\n"; } if ($captcha eq 'original') { - $setuserinfo .= ' server.elements.code.value=client.elements.code.value;'."\n". - ' server.elements.crypt.value=client.elements.crypt.value;'."\n"; + $setuserinfo .= ' server.elements.code.value=client.elements.code.value;'."\n". + ' server.elements.crypt.value=client.elements.crypt.value;'."\n"; } elsif ($captcha eq 'recaptcha') { - $setuserinfo .= ' server.elements.recaptcha_challenge_field.value=client.elements.recaptcha_challenge_field.value;'."\n". - ' server.elements.recaptcha_response_field.value=client.elements.recaptcha_response_field.value;'."\n"; + $setuserinfo .= + ' server.elements.recaptcha_challenge_field.value=client.elements.recaptcha_challenge_field.value;'."\n". + ' server.elements.recaptcha_response_field.value=client.elements.recaptcha_response_field.value;'."\n"; } } + if (@required) { + my $missprompt = &mt('One or more required fields are currently blank.'); + my $reqstr = join("','",@required); + $requiredchk = <<"ENDCHK"; + var requiredfields = new Array('$reqstr'); + missing = 0; + for (var i=0; i 0) { + alert("$missprompt"); + return false; + } + +ENDCHK + } my $js = < // 'username', udom => 'domain', @@ -481,10 +532,9 @@ sub print_username_form { } else { my $prompt = $lt{'plse'}; if (ref($emailusername) eq 'HASH') { - foreach my $key (keys(%{$emailusername})) { - if ($emailusername->{$key}) { + if (ref($emailusername->{$usertype}) eq 'HASH') { + if (keys(%{$emailusername->{$usertype}}) > 0) { $prompt = $lt{'info'}; - last; } } } @@ -492,7 +542,8 @@ sub print_username_form { $lt{'yopw'}.'
'; } $output .= &print_dataentry_form($r,$domain,$lonhost,$include,$now,$captchaform, - $courseid,$gotlondes,$emailusername,$captcha); + $courseid,$gotlondes,$emailusername,$captcha, + $usertype); } $output .= ''; } @@ -558,7 +609,7 @@ sub login_box { sub process_email_request { my ($useremail,$domain,$domdesc,$contact_name,$contact_email,$cancreate, - $server,$settings,$emailusername,$courseid) = @_; + $server,$settings,$emailusername,$courseid,$usertype) = @_; my $output; if (ref($cancreate) eq 'ARRAY') { if (!grep(/^email(|approval)$/,@{$cancreate})) { @@ -612,7 +663,7 @@ sub process_email_request { } } $output = &send_token($domain,$useremail,$server,$domdesc,$contact_name, - $contact_email,$courseid,$emailusername); + $contact_email,$courseid,$emailusername,$usertype); } return $output; } @@ -632,7 +683,8 @@ sub call_rulecheck { } sub send_token { - my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid,$emailusername) = @_; + my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid,$emailusername, + $usertype) = @_; my $msg = '

'.&mt('Account creation status').'

'. &mt('Thank you for your request to create a new LON-CAPA account.'). '

'; @@ -660,9 +712,14 @@ sub send_token { 'tmpinfo' => $tmpinfo); if (ref($emailusername) eq 'HASH') { - foreach my $item (keys(%{$emailusername})) { - $info{$item} = $env{'form.'.$item}; - $info{$item} =~ s/(`)//g; + if (ref($emailusername->{$usertype}) eq 'HASH') { + foreach my $item (keys(%{$emailusername->{$usertype}})) { + $info{$item} = $env{'form.'.$item}; + $info{$item} =~ s/(`)//g; + } + unless ($usertype eq 'default') { + $info{'inststatus'} = $usertype; + } } } my $token = &Apache::lonnet::tmpput(\%info,$server,'createaccount'); @@ -789,7 +846,8 @@ sub start_session { # Stores token to store DES-key and stage during creation session # sub print_dataentry_form { - my ($r,$domain,$lonhost,$include,$now,$captchaform,$courseid,$gotlondes,$emailusername,$captcha) = @_; + my ($r,$domain,$lonhost,$include,$now,$captchaform,$courseid,$gotlondes,$emailusername,$captcha, + $usertype) = @_; my ($error,$output); unless ($gotlondes) { if (open(my $jsh,"<$include/londes.js")) { @@ -797,7 +855,7 @@ sub print_dataentry_form { $r->print($line); } close($jsh); - $output = &javascript_setforms($now,$emailusername,$captcha)."\n"; + $output = &javascript_setforms($now,$emailusername,$captcha,$usertype)."\n"; $gotlondes = 1; } } @@ -813,8 +871,11 @@ sub print_dataentry_form { $output .= ''."\n"; } if (ref($emailusername) eq 'HASH') { - foreach my $field (sort(keys(%{$emailusername}))) { - $output .= ''."\n"; + if (ref($emailusername->{$usertype}) eq 'HASH') { + foreach my $field (sort(keys(%{$emailusername->{$usertype}}))) { + $output .= ''."\n"; + } + $output .= ''."\n"; } } if ($captcha eq 'original') { @@ -843,11 +904,12 @@ ENDSERVERFORM my $endclientform = ''."\n". ''."\n". ''."\n". - ''; + ''."\n". + '

'.&mt('Fields marked [_1]*[_2] are required.','','').'

'; my ($datatable,$rowcount) = &Apache::loncreateuser::personal_data_display('',$domain,'email','selfcreate', '','',$now,$captchaform, - $emailusername); + $emailusername,$usertype); if ($rowcount) { $output .= '
'.$beginclientform.$datatable.$endclientform; } else { @@ -919,7 +981,7 @@ sub create_account { my $output; if (ref($dataref) eq 'HASH') { my ($username,$encpass,$serverid,$courseid,$id,$firstname,$middlename,$lastname, - $generation); + $generation,$inststatus); $username = $dataref->{'username'}; $encpass = $dataref->{'upass'}; $serverid = $dataref->{'serverid'}; @@ -929,6 +991,7 @@ sub create_account { $middlename = $dataref->{'middlename'}; $lastname = $dataref->{'lastname'}; $generation = $dataref->{'generation'}; + $inststatus = $dataref->{'usertype'}; my $currhome = &Apache::lonnet::homeserver($username,$domain); unless ($currhome eq 'no_host') { @@ -967,6 +1030,9 @@ sub create_account { # Now that the user account exists, retrieve the homeserver, and include it in the output. my $uhome = &Apache::lonnet::homeserver($username,$domain); + unless (($inststatus eq 'default') || ($inststatus eq '')) { + &Apache::lonnet::put('environment',{inststatus => $inststatus},$domain,$username); + } $output .= '
'.&mt('Home server: [_1]',$uhome).' '. &Apache::lonnet::hostname($uhome).'

'; return ('ok',$output,$uhome);