--- loncom/interface/createaccount.pm 2008/07/12 14:08:58 1.17
+++ loncom/interface/createaccount.pm 2008/07/13 17:57:58 1.19
@@ -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.19 2008/07/13 17:57:58 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());
@@ -196,19 +180,26 @@ sub handler {
$r->print($output);
$r->print(&Apache::loncommon::end_page());
return OK;
- }
-
- &print_header($r,$start_page);
- if ($env{'form.create_with_email'}) {
+ } elsif ($env{'form.phase'} eq 'username_validation') {
+ (my $result,$output) =
+ &username_validation($r,$env{'form.uname'},$domain,$domdesc,
+ $contact_name,$contact_email,$courseid,
+ $lonhost);
+ if ($result eq 'existingaccount') {
+ $r->print($output);
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
+ } else {
+ &print_header($r,$start_page);
+ }
+ } elsif ($env{'form.create_with_email'}) {
+ &print_header($r,$start_page);
$output = &process_email_request($env{'form.useremail'},$domain,$domdesc,
$contact_name,$contact_email,\@cancreate,
$lonhost,$domconfig{'usercreation'},
$courseid);
- } elsif ($env{'form.phase'} eq 'username_validation') {
- $output = &username_validation($env{'form.uname'},$domain,$domdesc,
- $contact_name,$contact_email,$courseid,
- $lonhost);
} elsif (!$token) {
+ &print_header($r,$start_page);
my $now=time;
if (grep(/^login$/,@cancreate)) {
my $jsh=Apache::File->new($include."/londes.js");
@@ -584,7 +575,9 @@ sub start_session {
if ($r->dir_config('lonBalancer') eq 'yes') {
&Apache::lonauth::success($r,$form{'uname'},$form{'udom'},
$lonhost,'noredirect',undef,\%form);
- my $delete = &Apache::lonnet::tmpdel($token);
+ if ($token ne '') {
+ my $delete = &Apache::lonnet::tmpdel($token);
+ }
$r->internal_redirect('/adm/switchserver');
} else {
&Apache::lonauth::success($r,$form{'uname'},$form{'udom'},
@@ -723,21 +716,32 @@ sub create_account {
}
sub username_validation {
- my ($username,$domain,$domdesc,$contact_name,$contact_email,$courseid,$lonhost) = @_;
+ my ($r,$username,$domain,$domdesc,$contact_name,$contact_email,$courseid,
+ $lonhost) = @_;
my ($retrieved,$output,$upass);
$username= &LONCAPA::clean_username($username);
$domain = &LONCAPA::clean_domain($domain);
my $uhome = &Apache::lonnet::homeserver($username,$domain);
- if ($uhome ne 'no_host') {
- $output = &invalid_state('existinguser',$domdesc,
- $contact_name,$contact_email);
- return $output;
- }
($retrieved,$output,$upass) = &process_credentials($env{'form.logtoken'},
$env{'form.serverid'});
- if ($retrieved eq 'ok') {
+ if ($retrieved ne 'ok') {
+ return ('fail',$output);
+ }
+ if ($uhome ne 'no_host') {
+ my $result = &Apache::lonnet::authenticate($username,$upass,$domain);
+ if ($result ne 'no_host') {
+ my %form = &start_session($r,$username,$domain,$lonhost,$courseid);
+ $output = '
'.&mt('A LON-CAPA account already exists for username [_1] at this institution ([_2]).',''.$username.'',$domdesc).' '.&mt('The password entered was also correct so you have been logged in.');
+ return ('existingaccount',$output);
+ } else {
+ $output = '
'.
+ &mt('Username and/or password could not be authenticated.').
+ '
'.
+ &mt('Please check the username and password.');
+ }
+ } else {
my $primlibserv = &Apache::lonnet::domain($domain,'primary');
my $authok;
my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);
@@ -749,21 +753,23 @@ 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.')
- .'
'
- .&mt('Please check the username and password.');
+ $output = '
'.
+ &mt('Username and/or password could not be authenticated.').
+ '
'.
+ &mt('Please check the username and password.');
}
}
- return $output;
+ return ('ok',$output);
}
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 +779,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 = '';
- 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 {