--- loncom/interface/createaccount.pm 2008/07/12 14:08:58 1.17 +++ loncom/interface/createaccount.pm 2008/07/13 00:51:31 1.18 @@ -3,7 +3,7 @@ # institutional log-in ID (institutional authentication required - localauth # or kerberos) or an e-mail address. # -# $Id: createaccount.pm,v 1.17 2008/07/12 14:08:58 raeburn Exp $ +# $Id: createaccount.pm,v 1.18 2008/07/13 00:51:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -127,34 +127,18 @@ sub handler { if ($sso_username ne '') { &print_header($r,$start_page); - my $msg; + my ($msg,$sso_logout); + $sso_logout = &sso_logout_frag($r,$domain); if (grep(/^sso$/,@cancreate)) { $msg = '

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

'. &mt("Although your username and password were authenticated by your institution's Single Sign On system, you do not currently have a LON-CAPA account at this institution.").'
'; - my ($output,$checkfail) = &username_check($sso_username,$domain, - $domdesc,$courseid, - $lonhost,$contact_email); - if ($checkfail) { - $msg .= '

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

'; - if ($checkfail eq 'username') { - $msg .= ''. - &mt('A LON-CAPA account may not be created with the username you use.'). - '

'.$output; - } elsif ($checkfail eq 'authtoken') { - $msg .= ''.&mt('Error creating token.').''. - '
'.$output; - } - $msg .= &mt('Please contact the [_1] ([_2]) for assistance.', - $contact_name,$contact_email).'

'. - &sso_logout_frag($r,$domain); - } else { - $msg .= '
'.&mt('To create one, use the table below to provide information about yourself (if appropriate), then click the "Create LON-CAPA account" button.').'
'.$output; - } + $msg .= &username_check($sso_username,$domain,$domdesc,$courseid, + $lonhost,$contact_email,$contact_name,$sso_logout); } else { $msg = '

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

'. ''.&mt("Although your username and password were authenticated by your institution's Single Sign On system, you do not currently have a LON-CAPA account at this institution, and you are not permitted to create one.").'

'.&mt('Please contact the [_1] ([_2]) for assistance.',$contact_name,$contact_email).'
'. - &sso_logout_frag($r,$domain); + $sso_logout; } $r->print($msg); $r->print(&Apache::loncommon::end_page()); @@ -749,8 +733,8 @@ sub username_validation { $authok = 'non_authorized'; } if ($authok eq 'authorized') { - ($output,undef) = &username_check($username,$domain,$domdesc, - $courseid,$lonhost,$contact_email); + $output = &username_check($username,$domain,$domdesc,$courseid,$lonhost, + $contact_email,$contact_name); } else { $output = '
' .&mt('Username and/or password could not be authenticated.') @@ -762,8 +746,10 @@ sub username_validation { } sub username_check { - my ($username,$domain,$domdesc,$courseid,$lonhost,$contact_email) = @_; - my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules); + my ($username,$domain,$domdesc,$courseid,$lonhost,$contact_email,$contact_name, + $sso_logout) = @_; + my (%rulematch,%inst_results,$newuser,$checkfail,$rowcount,$editable,$output,$msg, + %alerts,%curr_rules,%got_rules); $newuser = 1; my $checkhash; my $checks = { 'username' => 1 }; @@ -773,48 +759,75 @@ sub username_check { if (ref($alerts{'username'}) eq 'HASH') { if (ref($alerts{'username'}{$domain}) eq 'HASH') { if ($alerts{'username'}{$domain}{$username}) { - my ($userchkmsg,$checkfail); if (ref($curr_rules{$domain}) eq 'HASH') { - $userchkmsg = + $output = &Apache::loncommon::instrule_disallow_msg('username',$domdesc,1, 'selfcreate'). &Apache::loncommon::user_rule_formats($domain,$domdesc, $curr_rules{$domain}{'username'},'username'); - if ($userchkmsg) { - $checkfail = 'username'; - } } - return ($userchkmsg,$checkfail); + $checkfail = 'username'; } } } - my $submit_text = &mt('Create LON-CAPA account'); - my $output = '
'. - &Apache::loncreateuser::personal_data_display($username,$domain,1, - undef,$inst_results{$username.':'.$domain}). - '

'."\n". - ''."\n". - ''; - my $now = time; - my %info = ('ip' => $ENV{'REMOTE_ADDR'}, - 'time' => $now, - 'domain' => $domain, - 'username' => $username); - my $authtoken = &Apache::lonnet::tmpput(\%info,$lonhost); - if ($authtoken !~ /^error/ && $authtoken ne 'no_such_host') { - $output .= ''; + if (!$checkfail) { + $output = ''; + (my $datatable,$rowcount,$editable) = + &Apache::loncreateuser::personal_data_display($username,$domain,1,'selfcreate', + $inst_results{$username.':'.$domain}); + if ($rowcount > 0) { + $output .= $datatable; + } + $output .= '

'."\n". + ''."\n". + ''; + my $now = time; + my %info = ('ip' => $ENV{'REMOTE_ADDR'}, + 'time' => $now, + 'domain' => $domain, + 'username' => $username); + my $authtoken = &Apache::lonnet::tmpput(\%info,$lonhost); + if ($authtoken !~ /^error/ && $authtoken ne 'no_such_host') { + $output .= ''; + } else { + $output = &mt('An error occurred when storing a token').'
'. + &mt('You will not be able to proceed to the next stage of account creation'). + &linkto_email_help($contact_email,$domdesc); + $checkfail = 'authtoken'; + } + } + if ($checkfail) { + $msg = '

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

'; + if ($checkfail eq 'username') { + $msg .= ''. + &mt('A LON-CAPA account may not be created with the username you use.'). + '

'.$output; + } elsif ($checkfail eq 'authtoken') { + $msg .= ''.&mt('Error creating token.').''. + '
'.$output; + } + $msg .= &mt('Please contact the [_1] ([_2]) for assistance.', + $contact_name,$contact_email).'

'. + $sso_logout; + &Apache::lonnet::logthis("ERROR: failure type of '$checkfail' when performing username check to create account for authenticated user: $username, in domain $domain"); } else { - $output = &mt('An error occurred when storing a token').'
'. - &mt('You will not be able to proceed to the next stage of account creation'). - &linkto_email_help($contact_email,$domdesc); - return($output,'authtoken'); - } - if ($courseid ne '') { - $output .= ''; - } - $output .= '
'; - return ($output,''); + if ($courseid ne '') { + $output .= ''; + } + $output .= ''; + if ($rowcount) { + if ($editable) { + $msg = &mt('To create one, use the table below to provide information about yourself, then click the [_1]Create LON-CAPA account[_2] button.','','').'
'; + } else { + $msg = &mt('A user account will be created with information displayed in the table below, when you click the [_1]Create LON-CAPA account[_2] button.','','').'
'; + } + } else { + $msg = '
'.&mt('Confirm that you wish to create an account.'); + } + $msg .= $output; + } + return $msg; } sub username_activation {