--- loncom/interface/createaccount.pm 2017/11/16 23:38:40 1.72.2.1 +++ loncom/interface/createaccount.pm 2017/07/26 19:45:45 1.73 @@ -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.72.2.1 2017/11/16 23:38:40 raeburn Exp $ +# $Id: createaccount.pm,v 1.73 2017/07/26 19:45:45 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -124,7 +124,7 @@ sub handler { my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain); - my ($cancreate,$statustocreate,$emailusername) = + my ($cancreate,$statustocreate) = &get_creation_controls($domain,$domconfig{'usercreation'}); my ($result,$output) = @@ -146,17 +146,36 @@ sub handler { return OK; } } - $start_page = &Apache::loncommon::start_page($title,$js); - my %domconfig = + my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain); - my ($cancreate,$statustocreate,$emailusername) = + my ($cancreate,$statustocreate,$statusforemail,$emailusername, + $verification,$emaildomain,$types,$usertypes,$othertitle) = &get_creation_controls($domain,$domconfig{'usercreation'}); + my ($additems,$pagetitle); + if (ref($cancreate) eq 'ARRAY') { + unless (($env{'form.token'}) || ($sso_username ne '') || ($env{'form.phase'}) || + ($env{'form.create_with_email'})) { + if ((grep(/^email$/,@{$cancreate})) && (ref($statusforemail) eq 'ARRAY')) { + my $usertype = &get_usertype($domain); + if (($usertype ne '') && (grep(/^\Q$usertype\E$/,@{$statusforemail}))) { + $js .= &username_js(); + } elsif (($usertype eq '') || (!grep(/^\Q$usertype\E$/,@{$statusforemail}))) { + $js .= &setelements_js($statusforemail,$types,$usertypes,$othertitle); + $additems = {'add_entries' => { 'onload' => "setElements();"} }; + if (@{$cancreate} == 1) { + $pagetitle = 'Select affiliation'; + } + } + } + } + } + $start_page = &Apache::loncommon::start_page($title,$js,$additems); if (@{$cancreate} == 0) { - &print_header($r,$start_page,$courseid); + &print_header($r,$start_page,$courseid,$pagetitle); my $output = '

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

'. ''. - &mt('Creation of a new user account using an e-mail address or an institutional log-in ID as username is not permitted at this institution ([_1]).',$domdesc). + &mt('Creation of a new user account using an institutional log-in ID or e-mail verification is not permitted for: [_1].',$domdesc). '

'; $r->print($output); &print_footer($r); @@ -178,7 +197,6 @@ sub handler { if (ref($domconfig{'usercreation'}{'cancreate'}{'shibenv'}) eq 'HASH') { my @possfields = ('firstname','middlename','lastname','generation', 'permanentemail','id'); - my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($domain); $shibenv= {}; foreach my $key (keys(%{$domconfig{'usercreation'}{'cancreate'}{'shibenv'}})) { if ($key eq 'inststatus') { @@ -215,11 +233,10 @@ sub handler { my ($output,$nostart,$noend,$redirect); my $token = $env{'form.token'}; if ($token) { - my $usertype = &get_usertype($domain); ($output,$nostart,$noend,$redirect) = &process_mailtoken($r,$token,$contact_name,$contact_email,$domain, $domdesc,$lonhost,$include,$start_page,$cancreate, - $domconfig{'usercreation'},$usertype); + $domconfig{'usercreation'},$types); if ($redirect) { $r->internal_redirect('/adm/switchserver'); return OK; @@ -238,7 +255,21 @@ sub handler { return OK; } } - + my ($usernameset,$condition); + if ((grep(/^email$/,@{$cancreate})) && (($env{'form.create_with_email'}) || + ((!$token) && ($env{'form.phase'} eq '')))) { + my $usertype = &get_usertype($domain); + if (ref($verification) eq 'HASH') { + if ($verification->{$usertype} eq 'other') { + $usernameset = 1; + if (ref($emaildomain) eq 'HASH') { + if ($emaildomain->{$usertype} ne '') { + $condition = $emaildomain->{$usertype}; + } + } + } + } + } if ($env{'form.phase'} eq 'username_activation') { (my $result,$output,$nostart) = &username_activation($r,$env{'form.uname'},$domain,$domdesc, @@ -273,12 +304,13 @@ sub handler { $output = &process_email_request($env{'form.uname'},$domain,$domdesc, $contact_name,$contact_email,$cancreate, $lonhost,$domconfig{'usercreation'}, - $emailusername,$courseid,$usertype); + $emailusername,$courseid,$usertype, + $usernameset,$condition); } elsif (!$token) { - &print_header($r,$start_page,$courseid); + &print_header($r,$start_page,$courseid,$pagetitle); my $now=time; if ((grep(/^login$/,@{$cancreate})) && (!grep(/^email$/,@{$cancreate}))) { - if (open(my $jsh,"<","$include/londes.js")) { + if (open(my $jsh,"<$include/londes.js")) { while(my $line = <$jsh>) { $r->print($line); } @@ -291,7 +323,9 @@ sub handler { } my $usertype = &get_usertype($domain); $output = &print_username_form($r,$domain,$domdesc,$cancreate,$now,$lonhost, - $include,$courseid,$emailusername,$usertype); + $include,$courseid,$emailusername, + $statusforemail,$usernameset,$condition, + $usertype,$types,$usertypes,$othertitle); } $r->print($output); &print_footer($r); @@ -299,16 +333,25 @@ sub handler { } sub print_header { - my ($r,$start_page,$courseid) = @_; + my ($r,$start_page,$courseid,$pagetitle) = @_; $r->print($start_page); &Apache::lonhtmlcommon::clear_breadcrumbs(); + my $url = '/adm/createaccount'; + if ($pagetitle eq '') { + $pagetitle = 'New username'; + } if ($courseid ne '') { my %coursehash = &Apache::lonnet::coursedescription($courseid); &selfenroll_crumbs($r,$courseid,$coursehash{'description'}); } + if ($env{'form.reportedtype'}) { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>$url, + text=>"Select affiliation"}); + } &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"/adm/createuser", - text=>"New username"}); + ({href=>$url, + text=>$pagetitle}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Create account')); return; } @@ -329,7 +372,7 @@ sub print_footer { sub get_usertype { my ($domain) = @_; - my $usertype = 'default'; + my $usertype; my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($domain); if (ref($types) eq 'ARRAY') { push(@{$types},'default'); @@ -366,7 +409,7 @@ sub selfenroll_crumbs { } sub javascript_setforms { - my ($now,$emailusername,$captcha,$usertype,$recaptchaversion) = @_; + my ($now,$emailusername,$captcha,$usertype,$recaptchaversion,$usernameset,$condition) = @_; my ($setuserinfo,@required,$requiredchk); if (ref($emailusername) eq 'HASH') { if (ref($emailusername->{$usertype}) eq 'HASH') { @@ -388,6 +431,10 @@ sub javascript_setforms { ' server.elements.recaptcha_response_field.value=client.elements.recaptcha_response_field.value;'."\n"; } } + if ($usernameset) { + $setuserinfo .= + ' server.elements.username.value=client.elements.username.value;'."\n"; + } } if (@required) { my $missprompt = &mt('One or more required fields are currently blank.'); @@ -520,18 +567,16 @@ ENDSCRIPT sub print_username_form { my ($r,$domain,$domdesc,$cancreate,$now,$lonhost,$include,$courseid,$emailusername, - $usertype) = @_; + $statusforemail,$usernameset,$condition,$usertype,$types,$usertypes, + $othertitle) = @_; my %lt = &Apache::lonlocal::texthash ( - unam => 'username', - udom => 'domain', - uemail => 'E-mail address in LON-CAPA', - proc => 'Proceed', crac => 'Create account with a username provided by this institution', clca => 'Create LON-CAPA account', type => 'Type in your log-in ID and password to find out.', plse => 'Please provide a password for your new account.', info => 'Please provide user information and a password for your new account.', yopw => 'Your password will be encrypted when sent (and stored).', + crae => 'Create account using e-mail address verification', ); my $output; if (ref($cancreate) eq 'ARRAY') { @@ -548,45 +593,82 @@ sub print_username_form { } } if (grep(/^email$/,@{$cancreate})) { - $output .= '

'.&mt('Create account with an e-mail address as your username').'

'; - my ($captchaform,$error,$captcha,$recaptchaversion) = - &Apache::loncommon::captcha_display('usercreation',$lonhost); - if ($error) { - my $helpdesk = '/adm/helpdesk?origurl=%2fadm%2fcreateaccount'; - if ($courseid ne '') { - $helpdesk .= '&courseid='.$courseid; - } - $output .= ''. - &mt('An error occurred generating the validation code[_1] required for an e-mail address to be used as username.','
'). - '


'. - &mt('[_1]Contact the helpdesk[_2] or [_3]reload[_2] the page and try again.', - '','',''); + $output .= '

'.$lt{'crae'}.'

'; + if ($usertype ne '') { + if (ref($statusforemail) eq 'ARRAY') { + unless (grep(/^\Q$usertype\E$/,@{$statusforemail})) { + undef($usertype); + } + } + } + if (($usertype eq '') && (ref($statusforemail) eq 'ARRAY') && + (@{$statusforemail}) && (ref($types) eq 'ARRAY')) { + my @posstypes = @{$types}; + unless (grep(/^default$/,@posstypes)) { + push(@posstypes,'default'); + } + $output .= '

'.&mt('Choose your affiliation at [_1]',$domdesc).'

'."\n". + '

'; + foreach my $type (@posstypes) { + my $name; + if ($type eq 'default') { + $name = $othertitle; + } else { + $name = $type; + if (ref($usertypes) eq 'HASH') { + if (exists($usertypes->{$type})) { + $name = $usertypes->{$type}; + } + } + } + $output .= ''.(' 'x2); + } + if ($env{'form.courseid'} =~ /^$match_domain\_$match_courseid$/) { + $output .= "\n".''; + } + $output .= '

'."\n".'

'; } else { - if (grep(/^login$/,@{$cancreate})) { - $output .= &mt('If you do not have a log-in ID at your institution, [_1]provide your e-mail address to request a LON-CAPA account.','
').'

'. - $lt{'plse'}.'
'. - $lt{'yopw'}.'
'; + my ($captchaform,$error,$captcha,$recaptchaversion) = + &Apache::loncommon::captcha_display('usercreation',$lonhost); + if ($error) { + my $helpdesk = '/adm/helpdesk?origurl=%2fadm%2fcreateaccount'; + if ($courseid ne '') { + $helpdesk .= '&courseid='.$courseid; + } + $output .= ''. + &mt('An error occurred generating the validation code[_1] required for use of an e-mail address to request a LON-CAPA account.','
'). + '


'. + &mt('[_1]Contact the helpdesk[_2] or [_3]reload[_2] the page and try again.', + '
','',''); } else { - my $prompt = $lt{'plse'}; - if (ref($emailusername) eq 'HASH') { - if (ref($emailusername->{$usertype}) eq 'HASH') { - if (keys(%{$emailusername->{$usertype}}) > 0) { - $prompt = $lt{'info'}; + if (grep(/^login$/,@{$cancreate})) { + $output .= &mt('If you do not have a log-in ID at your institution, [_1]provide your e-mail address to request a LON-CAPA account.','
').'

'. + $lt{'plse'}.'
'. + $lt{'yopw'}.'
'; + } else { + my $prompt = $lt{'plse'}; + if (ref($emailusername) eq 'HASH') { + if (ref($emailusername->{$usertype}) eq 'HASH') { + if (keys(%{$emailusername->{$usertype}}) > 0) { + $prompt = $lt{'info'}; + } } } + $output .= $prompt.'
'. + $lt{'yopw'}.'
'; } - $output .= $prompt.'
'. - $lt{'yopw'}.'
'; + $output .= &print_dataentry_form($r,$domain,$lonhost,$include,$now,$captchaform, + $courseid,$emailusername,$captcha,$usertype, + $recaptchaversion,$usernameset,$condition); } - $output .= &print_dataentry_form($r,$domain,$lonhost,$include,$now,$captchaform, - $courseid,$emailusername,$captcha,$usertype, - $recaptchaversion); } $output .= '
'; } } if ($output eq '') { - $output = &mt('Creation of a new LON-CAPA user account using an e-mail address or an institutional log-in ID as your username is not permitted at [_1].',$domdesc); + $output = &mt('Creation of a new LON-CAPA user account using an institutional log-in ID or verification by e-mail is not permitted at [_1].',$domdesc); } else { $output .= ''; } @@ -646,8 +728,9 @@ sub login_box { sub process_email_request { my ($useremail,$domain,$domdesc,$contact_name,$contact_email,$cancreate, - $server,$settings,$emailusername,$courseid,$usertype) = @_; - my $output; + $server,$settings,$emailusername,$courseid,$usertype,$usernameset, + $condition) = @_; + my ($output,$uname); if (ref($cancreate) eq 'ARRAY') { if (!grep(/^email$/,@{$cancreate})) { $output = &invalid_state('noemails',$domdesc, @@ -659,13 +742,37 @@ sub process_email_request { return $output; } else { $useremail =~ s/^\s+|\s+$//g; - my $uname=&LONCAPA::clean_username($useremail); - if ($useremail ne $uname) { - $output = &invalid_state('badusername',$domdesc, - $contact_name,$contact_email); - return $output; + my $possuname; + if ($env{'form.username'}) { + $possuname = $env{'form.username'}; + $possuname =~ s/^\s+|\s+$//g; + } + if (($usernameset) && ($possuname ne '')) { + if ($condition ne '') { + if ($useremail =~ /\Q$condition\E/) { + $uname = &LONCAPA::clean_username($possuname); + } else { + $output = &invalid_state('emailfail',$domdesc, + $contact_name,$contact_email); + return $output; + } + } else { + $uname=&LONCAPA::clean_username($possuname); + } + if ($uname ne $possuname) { + $output = &invalid_state('badusername',$domdesc, + $contact_name,$contact_email); + return $output; + } + } else { + $uname=&LONCAPA::clean_username($useremail); + if ($useremail ne $uname) { + $output = &invalid_state('badusername',$domdesc, + $contact_name,$contact_email); + return $output; + } } - my $uhome = &Apache::lonnet::homeserver($useremail,$domain); + my $uhome = &Apache::lonnet::homeserver($uname,$domain); if ($uhome ne 'no_host') { $output = &invalid_state('existinguser',$domdesc, $contact_name,$contact_email); @@ -678,29 +785,32 @@ sub process_email_request { return $output; } my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts); - &call_rulecheck($useremail,$domain,\%alerts,\%rulematch, + &call_rulecheck($uname,$domain,\%alerts,\%rulematch, \%inst_results,\%curr_rules,\%got_rules,'username'); if (ref($alerts{'username'}) eq 'HASH') { if (ref($alerts{'username'}{$domain}) eq 'HASH') { - if ($alerts{'username'}{$domain}{$useremail}) { + if ($alerts{'username'}{$domain}{$uname}) { $output = &invalid_state('userrules',$domdesc, $contact_name,$contact_email); return $output; } } } - my $format_msg = - &guest_format_check($useremail,$domain,$cancreate, - $settings); - if ($format_msg) { - $output = &invalid_state('userformat',$domdesc,$contact_name, - $contact_email,$format_msg); - return $output; + if (($usernameset) && ($possuname ne '')) { + my $format_msg = + &guest_format_check($useremail,$domain,$cancreate, + $settings); + if ($format_msg) { + $output = &invalid_state('userformat',$domdesc,$contact_name, + $contact_email,$format_msg); + return $output; + } } } } $output = &send_token($domain,$useremail,$server,$domdesc,$contact_name, - $contact_email,$courseid,$emailusername,$usertype); + $contact_email,$courseid,$emailusername,$usertype, + $uname); } return $output; } @@ -721,7 +831,7 @@ sub call_rulecheck { sub send_token { my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid,$emailusername, - $usertype) = @_; + $usertype,$uname) = @_; my $msg = '

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

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

'; @@ -747,18 +857,21 @@ sub send_token { 'upass' => $env{'form.upass'}, 'serverid' => $env{'form.serverid'}, 'tmpinfo' => $tmpinfo); - + if ($uname ne '') { + $info{'username'} = $uname; + $info{'email'} = $email; + } if (ref($emailusername) eq 'HASH') { 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; - } } } + if ($usertype ne '') { + $info{'usertype'} = $usertype; + } my $token = &Apache::lonnet::tmpput(\%info,$server,'createaccount'); if ($token !~ /^error/ && $token ne 'no_such_host') { my $esc_token = &escape($token); @@ -792,7 +905,7 @@ sub send_token { sub process_mailtoken { my ($r,$token,$contact_name,$contact_email,$domain,$domdesc,$lonhost, - $include,$start_page,$cancreate,$settings,$usertype) = @_; + $include,$start_page,$cancreate,$settings,$types) = @_; my ($msg,$nostart,$noend,$redirect); my %data = &Apache::lonnet::tmpget($token); my $now = time; @@ -805,12 +918,33 @@ sub process_mailtoken { } if (($data{'time'} =~ /^\d+$/) && ($data{'domain'} ne '') && - ($data{'username'} =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/)) { + ((($data{'email'} =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/) && ($data{'username'} =~ /^$match_username$/)) || + ($data{'username'} =~ /^[^\@]+\@[^\@]+\.[^\@\.]+$/))) { if ($now - $data{'time'} < 7200) { # Check if request should be queued. if (ref($cancreate) eq 'ARRAY') { - my $disposition; + my ($disposition,$usertype); if (grep(/^email$/,@{$cancreate})) { + if (exists($data{'usertype'})) { + $usertype = $data{'usertype'}; + my @posstypes; + if (ref($types) eq 'ARRAY') { + @posstypes = @{$types}; + if (@posstypes) { + unless (grep(/^default$/,@posstypes)) { + push(@posstypes,'default'); + } + } + if (grep(/\Q$usertype\E/,@posstypes)) { + unless ($usertype eq 'default') { + $data{'inststatus'} = $usertype; + } + } else { + undef($usertype); + } + } + delete($data{'usertype'}); + } if (ref($settings) eq 'HASH') { if (ref($settings->{'cancreate'}) eq 'HASH') { if (ref($settings->{'cancreate'}{'selfcreateprocessing'}) eq 'HASH') { @@ -893,14 +1027,15 @@ sub start_session { # sub print_dataentry_form { my ($r,$domain,$lonhost,$include,$now,$captchaform,$courseid,$emailusername,$captcha, - $usertype,$recaptchaversion) = @_; + $usertype,$recaptchaversion,$usernameset,$condition) = @_; my ($error,$output); - if (open(my $jsh,"<","$include/londes.js")) { + if (open(my $jsh,"<$include/londes.js")) { while(my $line = <$jsh>) { $r->print($line); } close($jsh); - $output = &javascript_setforms($now,$emailusername,$captcha,$usertype,$recaptchaversion). + $output = &javascript_setforms($now,$emailusername,$captcha,$usertype,$recaptchaversion, + $usernameset,$condition). "\n".&javascript_checkpass($now,'email'); my ($lkey,$ukey) = &Apache::loncommon::des_keys(); my ($lextkey,$uextkey) = &getkeys($lkey,$ukey); @@ -916,7 +1051,6 @@ sub print_dataentry_form { foreach my $field (sort(keys(%{$emailusername->{$usertype}}))) { $output .= ''."\n"; } - $output .= ''."\n"; } } if ($captcha eq 'original') { @@ -935,6 +1069,13 @@ sub print_dataentry_form { '; } } + if ($usertype ne '') { + $output .= ''."\n"; + } + if ($usernameset) { + $output .= ''."\n"; + } $output .= <<"ENDSERVERFORM"; @@ -955,7 +1096,8 @@ ENDSERVERFORM my ($datatable,$rowcount) = &Apache::loncreateuser::personal_data_display('',$domain,'email','selfcreate', '','',$now,$captchaform, - $emailusername,$usertype); + $emailusername,$usertype, + $usernameset,$condition); if ($rowcount) { $output .= '
'.$beginclientform.$datatable.$endclientform; } else { @@ -977,14 +1119,15 @@ ENDSERVERFORM sub get_creation_controls { my ($domain,$usercreation) = @_; - my (@cancreate,@statustocreate,$emailusername); + my (@cancreate,@statustocreate,@statusforemail,$emailusername,$processing, + $verification,$emaildomain,$othertitle,$usertypes,$types); if (ref($usercreation) eq 'HASH') { if (ref($usercreation->{'cancreate'}) eq 'HASH') { + ($othertitle,$usertypes,$types) = + &Apache::loncommon::sorted_inst_types($domain); if (ref($usercreation->{'cancreate'}{'statustocreate'}) eq 'ARRAY') { @statustocreate = @{$usercreation->{'cancreate'}{'statustocreate'}}; if (@statustocreate == 0) { - my ($othertitle,$usertypes,$types) = - &Apache::loncommon::sorted_inst_types($domain); if (ref($types) eq 'ARRAY') { if (@{$types} == 0) { @statustocreate = ('default'); @@ -995,8 +1138,6 @@ sub get_creation_controls { } } else { @statustocreate = ('default'); - my ($othertitle,$usertypes,$types) = - &Apache::loncommon::sorted_inst_types($domain); if (ref($types) eq 'ARRAY') { push(@statustocreate,@{$types}); } @@ -1007,6 +1148,45 @@ sub get_creation_controls { ($usercreation->{'cancreate'}{'selfcreate'} ne '')) { @cancreate = ($usercreation->{'cancreate'}{'selfcreate'}); } + if (grep(/^email$/,@cancreate)) { + if (ref($usercreation->{'cancreate'}{'selfcreateprocessing'}) eq 'HASH') { + $processing = $usercreation->{'cancreate'}{'selfcreateprocessing'}; + } + if (ref($usercreation->{'cancreate'}{'emailverified'}) eq 'HASH') { + $verification = $usercreation->{'cancreate'}{'emailverified'}; + } + if (ref($usercreation->{'cancreate'}{'emaildomain'}) eq 'HASH') { + $emaildomain = $usercreation->{'cancreate'}{'emaildomain'}; + } + if (ref($processing)) { + my %domdefaults = &Apache::lonnet::get_domain_defaults($domain); + my @emailtypes; + if (ref($domdefaults{'inststatusguest'}) eq 'ARRAY') { + @emailtypes = @{$domdefaults{'inststatusguest'}}; + if (@emailtypes) { + unless (grep(/^default$/,@emailtypes)) { + push(@emailtypes,'default'); + } + foreach my $type (@emailtypes) { + if ($processing->{$type} ne 'notinuse') { + unless (grep(/^$type$/,@statusforemail)) { + push(@statusforemail,$type); + } + } + } + unless (@statusforemail) { + my @okcreate; + foreach my $poss (@cancreate) { + unless ($poss eq 'email') { + push(@okcreate,$poss); + } + } + @cancreate = @okcreate; + } + } + } + } + } if (ref($usercreation->{'cancreate'}{'emailusername'}) eq 'HASH') { $emailusername = $usercreation->{'cancreate'}{'emailusername'}; } else { @@ -1019,7 +1199,8 @@ sub get_creation_controls { } } } - return (\@cancreate,\@statustocreate,$emailusername); + return (\@cancreate,\@statustocreate,\@statusforemail,$emailusername, + $verification,$emaildomain,$types,$usertypes,$othertitle); } sub create_account { @@ -1032,7 +1213,7 @@ sub create_account { my $output; if (ref($dataref) eq 'HASH') { my ($username,$encpass,$serverid,$courseid,$id,$firstname,$middlename,$lastname, - $generation,$inststatus); + $generation,$inststatus,$permanentemail); $username = $dataref->{'username'}; $encpass = $dataref->{'upass'}; $serverid = $dataref->{'serverid'}; @@ -1044,6 +1225,11 @@ sub create_account { $generation = $dataref->{'generation'}; $inststatus = $dataref->{'inststatus'}; + if ($dataref->{'email'} ne '') { + $permanentemail = $dataref->{'email'}; + } else { + $permanentemail = $dataref->{'username'}; + } my $currhome = &Apache::lonnet::homeserver($username,$domain); unless ($currhome eq 'no_host') { $output = &mt('User account requested for username: [_1] in domain: [_2] already exists.',$username,$domain); @@ -1075,7 +1261,7 @@ sub create_account { my $result = &Apache::lonnet::modifyuser($domain,$username,$id, 'internal',$upass,$firstname,$middlename, - $lastname,$generation,undef,undef,$username); + $lastname,$generation,undef,undef,$permanentemail); $output = &mt('Generating user: [_1]',$result); # Now that the user account exists, retrieve the homeserver, and include it in the output. @@ -1465,6 +1651,8 @@ sub invalid_state { $msg .= &mt('Validation of the code you entered failed.'); } elsif ($error eq 'noemails') { $msg .= &mt('Creation of a new user account using an e-mail address as username is not permitted at this LON-CAPA institution.'); + } elsif ($error eq 'emailfail') { + $msg .= &mt('Creation of a new user account with verification by e-mail is not permitted with the e-mail address you provided'); } $msg .= ''; if ($msgtext) { @@ -1637,14 +1825,14 @@ sub sso_logout_frag { if (defined($r->dir_config('lonSSOUserLogoutMessageFile_'.$domain))) { my $msgfile = $r->dir_config('lonSSOUserLogoutMessageFile_'.$domain); if (-e $msgfile) { - open(my $fh,"<",$msgfile); + open(my $fh,"<$msgfile"); $endsessionmsg = join('',<$fh>); close($fh); } } elsif (defined($r->dir_config('lonSSOUserLogoutMessageFile'))) { my $msgfile = $r->dir_config('lonSSOUserLogoutMessageFile'); if (-e $msgfile) { - open(my $fh,"<",$msgfile); + open(my $fh,"<$msgfile"); $endsessionmsg = join('',<$fh>); close($fh); } @@ -1705,6 +1893,100 @@ function getFormByName(item) { } // ]]> +ENDSCRIPT + +} + +sub setelements_js { + my ($statusforemail,$types,$usertypes,$othertitle) = @_; + my ($posstypes,$posstypesnames,$availabletypes); + if ((ref($statusforemail) eq 'ARRAY') && (ref($types) eq 'ARRAY') && + (ref($usertypes) eq 'HASH')) { + $posstypes = join("','",@{$types},'default'); + $posstypesnames = join("','",(map {$usertypes->{$_};} @{$types}),$othertitle); + $availabletypes = join("','", @{$statusforemail}); + } + return <<"ENDSCRIPT"; + +ENDSCRIPT + +} + +sub username_js { + return <<"ENDSCRIPT"; + ENDSCRIPT }